@strapi/content-manager 5.48.0 → 5.49.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (331) hide show
  1. package/dist/admin/components/ActionsDrawer.js +3 -2
  2. package/dist/admin/components/ActionsDrawer.js.map +1 -1
  3. package/dist/admin/components/ComponentIcon.js +4 -3
  4. package/dist/admin/components/ComponentIcon.js.map +1 -1
  5. package/dist/admin/components/ConfigurationForm/EditFieldForm.js +3 -2
  6. package/dist/admin/components/ConfigurationForm/EditFieldForm.js.map +1 -1
  7. package/dist/admin/components/ConfigurationForm/Fields.js +3 -2
  8. package/dist/admin/components/ConfigurationForm/Fields.js.map +1 -1
  9. package/dist/admin/components/ConfigurationForm/Form.js +7 -3
  10. package/dist/admin/components/ConfigurationForm/Form.js.map +1 -1
  11. package/dist/admin/components/LeftMenu.js +3 -2
  12. package/dist/admin/components/LeftMenu.js.map +1 -1
  13. package/dist/admin/components/RelativeTime.js +3 -2
  14. package/dist/admin/components/RelativeTime.js.map +1 -1
  15. package/dist/admin/components/Widgets.js +3 -2
  16. package/dist/admin/components/Widgets.js.map +1 -1
  17. package/dist/admin/features/DocumentRBAC.js +12 -3
  18. package/dist/admin/features/DocumentRBAC.js.map +1 -1
  19. package/dist/admin/features/DocumentRBAC.mjs +9 -1
  20. package/dist/admin/features/DocumentRBAC.mjs.map +1 -1
  21. package/dist/admin/history/components/VersionContent.js +7 -3
  22. package/dist/admin/history/components/VersionContent.js.map +1 -1
  23. package/dist/admin/history/components/VersionHeader.js +3 -2
  24. package/dist/admin/history/components/VersionHeader.js.map +1 -1
  25. package/dist/admin/history/components/VersionInputRenderer.js +3 -2
  26. package/dist/admin/history/components/VersionInputRenderer.js.map +1 -1
  27. package/dist/admin/history/pages/History.js +3 -2
  28. package/dist/admin/history/pages/History.js.map +1 -1
  29. package/dist/admin/history/routes.js +3 -2
  30. package/dist/admin/history/routes.js.map +1 -1
  31. package/dist/admin/hooks/useContentTypeSchema.js +40 -19
  32. package/dist/admin/hooks/useContentTypeSchema.js.map +1 -1
  33. package/dist/admin/hooks/useContentTypeSchema.mjs +37 -17
  34. package/dist/admin/hooks/useContentTypeSchema.mjs.map +1 -1
  35. package/dist/admin/hooks/useDocument.js +3 -2
  36. package/dist/admin/hooks/useDocument.js.map +1 -1
  37. package/dist/admin/hooks/useDocumentActions.js +3 -2
  38. package/dist/admin/hooks/useDocumentActions.js.map +1 -1
  39. package/dist/admin/hooks/useDocumentContext.js +3 -2
  40. package/dist/admin/hooks/useDocumentContext.js.map +1 -1
  41. package/dist/admin/hooks/useDocumentLayout.js +46 -6
  42. package/dist/admin/hooks/useDocumentLayout.js.map +1 -1
  43. package/dist/admin/hooks/useDocumentLayout.mjs +43 -4
  44. package/dist/admin/hooks/useDocumentLayout.mjs.map +1 -1
  45. package/dist/admin/hooks/useDragAndDrop.js +3 -2
  46. package/dist/admin/hooks/useDragAndDrop.js.map +1 -1
  47. package/dist/admin/hooks/useKeyboardDragAndDrop.js +3 -2
  48. package/dist/admin/hooks/useKeyboardDragAndDrop.js.map +1 -1
  49. package/dist/admin/hooks/useOnce.js +3 -2
  50. package/dist/admin/hooks/useOnce.js.map +1 -1
  51. package/dist/admin/hooks/usePersistentQueryParams.js +7 -2
  52. package/dist/admin/hooks/usePersistentQueryParams.js.map +1 -1
  53. package/dist/admin/pages/ComponentConfigurationPage.js +9 -5
  54. package/dist/admin/pages/ComponentConfigurationPage.js.map +1 -1
  55. package/dist/admin/pages/ComponentConfigurationPage.mjs +6 -3
  56. package/dist/admin/pages/ComponentConfigurationPage.mjs.map +1 -1
  57. package/dist/admin/pages/EditConfigurationPage.js +3 -2
  58. package/dist/admin/pages/EditConfigurationPage.js.map +1 -1
  59. package/dist/admin/pages/EditView/EditViewPage.js +3 -2
  60. package/dist/admin/pages/EditView/EditViewPage.js.map +1 -1
  61. package/dist/admin/pages/EditView/components/DocumentActions.js +80 -39
  62. package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
  63. package/dist/admin/pages/EditView/components/DocumentActions.mjs +67 -33
  64. package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
  65. package/dist/admin/pages/EditView/components/EditorToolbarObserver.js +3 -2
  66. package/dist/admin/pages/EditView/components/EditorToolbarObserver.js.map +1 -1
  67. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.js +4 -3
  68. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.js.map +1 -1
  69. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.js +3 -2
  70. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.js.map +1 -1
  71. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.js +3 -2
  72. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.js.map +1 -1
  73. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js +8 -4
  74. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js.map +1 -1
  75. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs +5 -2
  76. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs.map +1 -1
  77. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js +3 -2
  78. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js.map +1 -1
  79. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksInput.js +3 -2
  80. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksInput.js.map +1 -1
  81. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js +4 -3
  82. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js.map +1 -1
  83. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js +3 -2
  84. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js.map +1 -1
  85. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js +3 -2
  86. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js.map +1 -1
  87. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js +3 -2
  88. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
  89. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +14 -4
  90. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
  91. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +11 -2
  92. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
  93. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js +16 -7
  94. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js.map +1 -1
  95. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs +9 -4
  96. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs.map +1 -1
  97. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js +3 -2
  98. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js.map +1 -1
  99. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +7 -3
  100. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
  101. package/dist/admin/pages/EditView/components/FormInputs/UID.js +3 -2
  102. package/dist/admin/pages/EditView/components/FormInputs/UID.js.map +1 -1
  103. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js +8 -4
  104. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js.map +1 -1
  105. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Field.js +3 -2
  106. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Field.js.map +1 -1
  107. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/PreviewWysiwyg.js +5 -28
  108. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/PreviewWysiwyg.js.map +1 -1
  109. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/PreviewWysiwyg.mjs +2 -26
  110. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/PreviewWysiwyg.mjs.map +1 -1
  111. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/continueList.js +5 -1
  112. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/continueList.js.map +1 -1
  113. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/mdRenderer.js +15 -2
  114. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/mdRenderer.js.map +1 -1
  115. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/sanitizer.js +76 -0
  116. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/sanitizer.js.map +1 -0
  117. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/sanitizer.mjs +70 -0
  118. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/sanitizer.mjs.map +1 -0
  119. package/dist/admin/pages/EditView/components/FormLayout.js +3 -2
  120. package/dist/admin/pages/EditView/components/FormLayout.js.map +1 -1
  121. package/dist/admin/pages/EditView/components/Header.js +3 -2
  122. package/dist/admin/pages/EditView/components/Header.js.map +1 -1
  123. package/dist/admin/pages/EditView/components/InputRenderer.js +3 -2
  124. package/dist/admin/pages/EditView/components/InputRenderer.js.map +1 -1
  125. package/dist/admin/pages/EditView/components/Panels.js +3 -2
  126. package/dist/admin/pages/EditView/components/Panels.js.map +1 -1
  127. package/dist/admin/pages/EditView/utils/data.js +5 -1
  128. package/dist/admin/pages/EditView/utils/data.js.map +1 -1
  129. package/dist/admin/pages/EditView/utils/keyboardShortcuts.js +35 -0
  130. package/dist/admin/pages/EditView/utils/keyboardShortcuts.js.map +1 -0
  131. package/dist/admin/pages/EditView/utils/keyboardShortcuts.mjs +33 -0
  132. package/dist/admin/pages/EditView/utils/keyboardShortcuts.mjs.map +1 -0
  133. package/dist/admin/pages/ListConfiguration/ListConfigurationPage.js +7 -10
  134. package/dist/admin/pages/ListConfiguration/ListConfigurationPage.js.map +1 -1
  135. package/dist/admin/pages/ListConfiguration/ListConfigurationPage.mjs +5 -9
  136. package/dist/admin/pages/ListConfiguration/ListConfigurationPage.mjs.map +1 -1
  137. package/dist/admin/pages/ListConfiguration/components/DraggableCard.js +3 -2
  138. package/dist/admin/pages/ListConfiguration/components/DraggableCard.js.map +1 -1
  139. package/dist/admin/pages/ListConfiguration/components/EditFieldForm.js +3 -2
  140. package/dist/admin/pages/ListConfiguration/components/EditFieldForm.js.map +1 -1
  141. package/dist/admin/pages/ListConfiguration/components/Settings.js +3 -2
  142. package/dist/admin/pages/ListConfiguration/components/Settings.js.map +1 -1
  143. package/dist/admin/pages/ListConfiguration/components/SortDisplayedFields.js +9 -12
  144. package/dist/admin/pages/ListConfiguration/components/SortDisplayedFields.js.map +1 -1
  145. package/dist/admin/pages/ListConfiguration/components/SortDisplayedFields.mjs +6 -10
  146. package/dist/admin/pages/ListConfiguration/components/SortDisplayedFields.mjs.map +1 -1
  147. package/dist/admin/pages/ListView/ListViewPage.js +3 -2
  148. package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
  149. package/dist/admin/pages/ListView/components/BulkActions/Actions.js +3 -2
  150. package/dist/admin/pages/ListView/components/BulkActions/Actions.js.map +1 -1
  151. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js +3 -2
  152. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js.map +1 -1
  153. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js +3 -2
  154. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js.map +1 -1
  155. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs.map +1 -1
  156. package/dist/admin/pages/ListView/components/Filters.js +10 -11
  157. package/dist/admin/pages/ListView/components/Filters.js.map +1 -1
  158. package/dist/admin/pages/ListView/components/Filters.mjs +7 -9
  159. package/dist/admin/pages/ListView/components/Filters.mjs.map +1 -1
  160. package/dist/admin/pages/ListView/components/TableActions.js +3 -2
  161. package/dist/admin/pages/ListView/components/TableActions.js.map +1 -1
  162. package/dist/admin/pages/ListView/components/TableCells/CellContent.js +7 -3
  163. package/dist/admin/pages/ListView/components/TableCells/CellContent.js.map +1 -1
  164. package/dist/admin/pages/ListView/components/TableCells/CellValue.js +7 -2
  165. package/dist/admin/pages/ListView/components/TableCells/CellValue.js.map +1 -1
  166. package/dist/admin/pages/ListView/components/TableCells/Media.js +5 -4
  167. package/dist/admin/pages/ListView/components/TableCells/Media.js.map +1 -1
  168. package/dist/admin/pages/ListView/components/TableCells/Media.mjs +5 -4
  169. package/dist/admin/pages/ListView/components/TableCells/Media.mjs.map +1 -1
  170. package/dist/admin/pages/ListView/components/TableCells/Relations.js +3 -2
  171. package/dist/admin/pages/ListView/components/TableCells/Relations.js.map +1 -1
  172. package/dist/admin/pages/formatComponentConfigurationEditLayout.js +15 -9
  173. package/dist/admin/pages/formatComponentConfigurationEditLayout.js.map +1 -1
  174. package/dist/admin/pages/formatComponentConfigurationEditLayout.mjs +15 -9
  175. package/dist/admin/pages/formatComponentConfigurationEditLayout.mjs.map +1 -1
  176. package/dist/admin/preview/components/InputPopover.js +3 -2
  177. package/dist/admin/preview/components/InputPopover.js.map +1 -1
  178. package/dist/admin/preview/hooks/usePreviewInputManager.js +3 -2
  179. package/dist/admin/preview/hooks/usePreviewInputManager.js.map +1 -1
  180. package/dist/admin/preview/pages/Preview.js +3 -2
  181. package/dist/admin/preview/pages/Preview.js.map +1 -1
  182. package/dist/admin/preview/routes.js +3 -2
  183. package/dist/admin/preview/routes.js.map +1 -1
  184. package/dist/admin/services/components.js +3 -2
  185. package/dist/admin/services/components.js.map +1 -1
  186. package/dist/admin/services/components.mjs +3 -2
  187. package/dist/admin/services/components.mjs.map +1 -1
  188. package/dist/admin/services/contentTypes.js +4 -3
  189. package/dist/admin/services/contentTypes.js.map +1 -1
  190. package/dist/admin/services/contentTypes.mjs +4 -3
  191. package/dist/admin/services/contentTypes.mjs.map +1 -1
  192. package/dist/admin/src/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.d.ts +1 -1
  193. package/dist/admin/src/pages/EditView/components/FormInputs/Wysiwyg/utils/sanitizer.d.ts +2 -0
  194. package/dist/admin/src/pages/EditView/utils/keyboardShortcuts.d.ts +18 -0
  195. package/dist/admin/src/pages/ListConfiguration/components/SortDisplayedFields.d.ts +2 -2
  196. package/dist/admin/src/pages/ListView/components/TableCells/Media.d.ts +2 -2
  197. package/dist/admin/src/pages/formatComponentConfigurationEditLayout.d.ts +3 -1
  198. package/dist/admin/src/utils/layouts/normalizeContentManagerLayout.d.ts +24 -0
  199. package/dist/admin/translations/cs.json.js +2 -1
  200. package/dist/admin/translations/cs.json.js.map +1 -1
  201. package/dist/admin/translations/cs.json.mjs +2 -1
  202. package/dist/admin/translations/cs.json.mjs.map +1 -1
  203. package/dist/admin/translations/de.json.js +2 -1
  204. package/dist/admin/translations/de.json.js.map +1 -1
  205. package/dist/admin/translations/de.json.mjs +2 -1
  206. package/dist/admin/translations/de.json.mjs.map +1 -1
  207. package/dist/admin/translations/en.json.js +3 -1
  208. package/dist/admin/translations/en.json.js.map +1 -1
  209. package/dist/admin/translations/en.json.mjs +3 -1
  210. package/dist/admin/translations/en.json.mjs.map +1 -1
  211. package/dist/admin/translations/es.json.js +2 -1
  212. package/dist/admin/translations/es.json.js.map +1 -1
  213. package/dist/admin/translations/es.json.mjs +2 -1
  214. package/dist/admin/translations/es.json.mjs.map +1 -1
  215. package/dist/admin/translations/fr.json.js +2 -1
  216. package/dist/admin/translations/fr.json.js.map +1 -1
  217. package/dist/admin/translations/fr.json.mjs +2 -1
  218. package/dist/admin/translations/fr.json.mjs.map +1 -1
  219. package/dist/admin/translations/nl.json.js +2 -1
  220. package/dist/admin/translations/nl.json.js.map +1 -1
  221. package/dist/admin/translations/nl.json.mjs +2 -1
  222. package/dist/admin/translations/nl.json.mjs.map +1 -1
  223. package/dist/admin/translations/pl.json.js +2 -1
  224. package/dist/admin/translations/pl.json.js.map +1 -1
  225. package/dist/admin/translations/pl.json.mjs +2 -1
  226. package/dist/admin/translations/pl.json.mjs.map +1 -1
  227. package/dist/admin/translations/sk.json.js +2 -1
  228. package/dist/admin/translations/sk.json.js.map +1 -1
  229. package/dist/admin/translations/sk.json.mjs +2 -1
  230. package/dist/admin/translations/sk.json.mjs.map +1 -1
  231. package/dist/admin/utils/attributes.js +17 -2
  232. package/dist/admin/utils/attributes.js.map +1 -1
  233. package/dist/admin/utils/attributes.mjs +17 -2
  234. package/dist/admin/utils/attributes.mjs.map +1 -1
  235. package/dist/admin/utils/layouts/normalizeContentManagerLayout.js +329 -0
  236. package/dist/admin/utils/layouts/normalizeContentManagerLayout.js.map +1 -0
  237. package/dist/admin/utils/layouts/normalizeContentManagerLayout.mjs +321 -0
  238. package/dist/admin/utils/layouts/normalizeContentManagerLayout.mjs.map +1 -0
  239. package/dist/admin/utils/objects.js +9 -4
  240. package/dist/admin/utils/objects.js.map +1 -1
  241. package/dist/admin/utils/validation.js +7 -3
  242. package/dist/admin/utils/validation.js.map +1 -1
  243. package/dist/server/controllers/collection-types.js +7 -2
  244. package/dist/server/controllers/collection-types.js.map +1 -1
  245. package/dist/server/controllers/collection-types.mjs +7 -2
  246. package/dist/server/controllers/collection-types.mjs.map +1 -1
  247. package/dist/server/controllers/utils/clone.js +5 -1
  248. package/dist/server/controllers/utils/clone.js.map +1 -1
  249. package/dist/server/controllers/utils/clone.mjs.map +1 -1
  250. package/dist/server/controllers/validation/index.js +6 -2
  251. package/dist/server/controllers/validation/index.js.map +1 -1
  252. package/dist/server/homepage/services/homepage.js +6 -1
  253. package/dist/server/homepage/services/homepage.js.map +1 -1
  254. package/dist/server/homepage/services/homepage.mjs +6 -1
  255. package/dist/server/homepage/services/homepage.mjs.map +1 -1
  256. package/dist/server/mcp/handlers/collection-handlers.js +15 -18
  257. package/dist/server/mcp/handlers/collection-handlers.js.map +1 -1
  258. package/dist/server/mcp/handlers/collection-handlers.mjs +16 -19
  259. package/dist/server/mcp/handlers/collection-handlers.mjs.map +1 -1
  260. package/dist/server/mcp/handlers/single-type-handlers.js +12 -12
  261. package/dist/server/mcp/handlers/single-type-handlers.js.map +1 -1
  262. package/dist/server/mcp/handlers/single-type-handlers.mjs +13 -13
  263. package/dist/server/mcp/handlers/single-type-handlers.mjs.map +1 -1
  264. package/dist/server/mcp/register-content-manager-mcp-tools.js +4 -1
  265. package/dist/server/mcp/register-content-manager-mcp-tools.js.map +1 -1
  266. package/dist/server/mcp/register-content-manager-mcp-tools.mjs +4 -1
  267. package/dist/server/mcp/register-content-manager-mcp-tools.mjs.map +1 -1
  268. package/dist/server/mcp/sanitizers/shape-relations.js +108 -0
  269. package/dist/server/mcp/sanitizers/shape-relations.js.map +1 -0
  270. package/dist/server/mcp/sanitizers/shape-relations.mjs +103 -0
  271. package/dist/server/mcp/sanitizers/shape-relations.mjs.map +1 -0
  272. package/dist/server/mcp/schemas/data-schema.js +0 -3
  273. package/dist/server/mcp/schemas/data-schema.js.map +1 -1
  274. package/dist/server/mcp/schemas/data-schema.mjs +0 -3
  275. package/dist/server/mcp/schemas/data-schema.mjs.map +1 -1
  276. package/dist/server/mcp/schemas/output-schemas.js +30 -4
  277. package/dist/server/mcp/schemas/output-schemas.js.map +1 -1
  278. package/dist/server/mcp/schemas/output-schemas.mjs +30 -4
  279. package/dist/server/mcp/schemas/output-schemas.mjs.map +1 -1
  280. package/dist/server/mcp/utils.js +30 -3
  281. package/dist/server/mcp/utils.js.map +1 -1
  282. package/dist/server/mcp/utils.mjs +30 -4
  283. package/dist/server/mcp/utils.mjs.map +1 -1
  284. package/dist/server/middlewares/routing.js +5 -1
  285. package/dist/server/middlewares/routing.js.map +1 -1
  286. package/dist/server/services/populate-builder.js.map +1 -1
  287. package/dist/server/services/populate-builder.mjs.map +1 -1
  288. package/dist/server/services/uid.js +9 -4
  289. package/dist/server/services/uid.js.map +1 -1
  290. package/dist/server/services/utils/configuration/attributes.js +14 -10
  291. package/dist/server/services/utils/configuration/attributes.js.map +1 -1
  292. package/dist/server/services/utils/configuration/layouts.js +8 -4
  293. package/dist/server/services/utils/configuration/layouts.js.map +1 -1
  294. package/dist/server/services/utils/configuration/metadatas.js +19 -15
  295. package/dist/server/services/utils/configuration/metadatas.js.map +1 -1
  296. package/dist/server/services/utils/configuration/settings.js +5 -1
  297. package/dist/server/services/utils/configuration/settings.js.map +1 -1
  298. package/dist/server/services/utils/draft.js +5 -1
  299. package/dist/server/services/utils/draft.js.map +1 -1
  300. package/dist/server/services/utils/populate.js +8 -4
  301. package/dist/server/services/utils/populate.js.map +1 -1
  302. package/dist/server/services/utils/populate.mjs.map +1 -1
  303. package/dist/server/services/utils/store.js +9 -5
  304. package/dist/server/services/utils/store.js.map +1 -1
  305. package/dist/server/src/controllers/collection-types.d.ts.map +1 -1
  306. package/dist/server/src/controllers/utils/clone.d.ts +1 -1
  307. package/dist/server/src/controllers/utils/clone.d.ts.map +1 -1
  308. package/dist/server/src/homepage/services/homepage.d.ts.map +1 -1
  309. package/dist/server/src/index.d.ts +3 -1
  310. package/dist/server/src/index.d.ts.map +1 -1
  311. package/dist/server/src/mcp/handlers/collection-handlers.d.ts.map +1 -1
  312. package/dist/server/src/mcp/handlers/single-type-handlers.d.ts.map +1 -1
  313. package/dist/server/src/mcp/register-content-manager-mcp-tools.d.ts +2 -1
  314. package/dist/server/src/mcp/register-content-manager-mcp-tools.d.ts.map +1 -1
  315. package/dist/server/src/mcp/sanitizers/shape-relations.d.ts +38 -0
  316. package/dist/server/src/mcp/sanitizers/shape-relations.d.ts.map +1 -0
  317. package/dist/server/src/mcp/schemas/data-schema.d.ts +0 -3
  318. package/dist/server/src/mcp/schemas/data-schema.d.ts.map +1 -1
  319. package/dist/server/src/mcp/schemas/output-schemas.d.ts +2 -2
  320. package/dist/server/src/mcp/schemas/output-schemas.d.ts.map +1 -1
  321. package/dist/server/src/mcp/types.d.ts +2 -2
  322. package/dist/server/src/mcp/types.d.ts.map +1 -1
  323. package/dist/server/src/mcp/utils.d.ts +19 -1
  324. package/dist/server/src/mcp/utils.d.ts.map +1 -1
  325. package/dist/server/src/services/index.d.ts +3 -1
  326. package/dist/server/src/services/index.d.ts.map +1 -1
  327. package/dist/server/src/services/populate-builder.d.ts +3 -1
  328. package/dist/server/src/services/populate-builder.d.ts.map +1 -1
  329. package/dist/server/src/services/utils/populate.d.ts +3 -1
  330. package/dist/server/src/services/utils/populate.d.ts.map +1 -1
  331. package/package.json +8 -8
@@ -0,0 +1,70 @@
1
+ import createDOMPurify from 'dompurify';
2
+
3
+ // Own instance, so the data: hook below stays scoped to this module instead of
4
+ // mutating the library-wide singleton shared with any other DOMPurify consumer.
5
+ const DOMPurify = createDOMPurify(window);
6
+ /**
7
+ * Attribute allowlist. Starts from the prior sanitize-html configuration:
8
+ * '*': href, align, alt, center, width, height, type, controls, target
9
+ * img: src, alt
10
+ * source: src, type
11
+ *
12
+ * DOMPurify's ALLOWED_ATTR is a flat list (no per-tag scoping), so the union
13
+ * of the original allowlist is used. Tags that the prior config never reached
14
+ * (script, iframe, etc.) are stripped wholesale by DOMPurify's default tag
15
+ * allowlist, so per-tag attribute scoping is not security-relevant here.
16
+ *
17
+ * `class` and `title` are additions over the old config (which stripped both):
18
+ * - class: mdRenderer.ts emits `hljs`/`language-*` on code blocks (so the
19
+ * highlight.js solarized-dark stylesheet applies) and `footnote-ref`/
20
+ * `footnote-backref` on footnotes. Stripping it left those styles dead.
21
+ * - title: link/image tooltips and the markdown-it abbr plugin (`<abbr title>`).
22
+ * Both are inert in admin-authored content behind the tag allowlist; neither
23
+ * can escalate.
24
+ */ const ALLOWED_ATTR = [
25
+ 'href',
26
+ 'src',
27
+ 'alt',
28
+ 'align',
29
+ 'center',
30
+ 'width',
31
+ 'height',
32
+ 'type',
33
+ 'controls',
34
+ 'target',
35
+ 'class',
36
+ 'title'
37
+ ];
38
+ /**
39
+ * URL scheme allowlist: http(s), ftp, mailto, tel, plus protocol-relative,
40
+ * fragment, and relative URLs. Mirrors sanitize-html's prior allowedSchemes.
41
+ */ const ALLOWED_URI_REGEXP = /^(?:(?:https?|ftp|mailto|tel):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i;
42
+ /**
43
+ * DOMPurify permits `data:` URIs on media tags (img/source/video/audio)
44
+ * through its internal DATA_URI_TAGS allowlist, *bypassing* ALLOWED_URI_REGEXP.
45
+ * The prior sanitize-html config stripped every `data:` URI, so strip them here
46
+ * too for parity.
47
+ */ const URL_ATTRIBUTES = [
48
+ 'src',
49
+ 'href',
50
+ 'xlink:href'
51
+ ];
52
+ DOMPurify.addHook('afterSanitizeAttributes', (node)=>{
53
+ if (typeof node.getAttribute !== 'function') {
54
+ return;
55
+ }
56
+ for (const attr of URL_ATTRIBUTES){
57
+ const value = node.getAttribute(attr);
58
+ if (value && /^\s*data:/i.test(value)) {
59
+ node.removeAttribute(attr);
60
+ }
61
+ }
62
+ });
63
+ const sanitize = (html)=>DOMPurify.sanitize(html, {
64
+ ALLOWED_ATTR,
65
+ ALLOWED_URI_REGEXP,
66
+ ALLOW_DATA_ATTR: false
67
+ });
68
+
69
+ export { sanitize };
70
+ //# sourceMappingURL=sanitizer.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sanitizer.mjs","sources":["../../../../../../../../admin/src/pages/EditView/components/FormInputs/Wysiwyg/utils/sanitizer.ts"],"sourcesContent":["import createDOMPurify from 'dompurify';\n\n// Own instance, so the data: hook below stays scoped to this module instead of\n// mutating the library-wide singleton shared with any other DOMPurify consumer.\nconst DOMPurify = createDOMPurify(window);\n\n/**\n * Attribute allowlist. Starts from the prior sanitize-html configuration:\n * '*': href, align, alt, center, width, height, type, controls, target\n * img: src, alt\n * source: src, type\n *\n * DOMPurify's ALLOWED_ATTR is a flat list (no per-tag scoping), so the union\n * of the original allowlist is used. Tags that the prior config never reached\n * (script, iframe, etc.) are stripped wholesale by DOMPurify's default tag\n * allowlist, so per-tag attribute scoping is not security-relevant here.\n *\n * `class` and `title` are additions over the old config (which stripped both):\n * - class: mdRenderer.ts emits `hljs`/`language-*` on code blocks (so the\n * highlight.js solarized-dark stylesheet applies) and `footnote-ref`/\n * `footnote-backref` on footnotes. Stripping it left those styles dead.\n * - title: link/image tooltips and the markdown-it abbr plugin (`<abbr title>`).\n * Both are inert in admin-authored content behind the tag allowlist; neither\n * can escalate.\n */\nconst ALLOWED_ATTR = [\n 'href',\n 'src',\n 'alt',\n 'align',\n 'center',\n 'width',\n 'height',\n 'type',\n 'controls',\n 'target',\n 'class',\n 'title',\n];\n\n/**\n * URL scheme allowlist: http(s), ftp, mailto, tel, plus protocol-relative,\n * fragment, and relative URLs. Mirrors sanitize-html's prior allowedSchemes.\n */\nconst ALLOWED_URI_REGEXP = /^(?:(?:https?|ftp|mailto|tel):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i;\n\n/**\n * DOMPurify permits `data:` URIs on media tags (img/source/video/audio)\n * through its internal DATA_URI_TAGS allowlist, *bypassing* ALLOWED_URI_REGEXP.\n * The prior sanitize-html config stripped every `data:` URI, so strip them here\n * too for parity.\n */\nconst URL_ATTRIBUTES = ['src', 'href', 'xlink:href'];\nDOMPurify.addHook('afterSanitizeAttributes', (node) => {\n if (typeof node.getAttribute !== 'function') {\n return;\n }\n for (const attr of URL_ATTRIBUTES) {\n const value = node.getAttribute(attr);\n if (value && /^\\s*data:/i.test(value)) {\n node.removeAttribute(attr);\n }\n }\n});\n\nconst sanitize = (html: string): string =>\n DOMPurify.sanitize(html, {\n ALLOWED_ATTR,\n ALLOWED_URI_REGEXP,\n ALLOW_DATA_ATTR: false,\n });\n\nexport { sanitize };\n"],"names":["DOMPurify","createDOMPurify","window","ALLOWED_ATTR","ALLOWED_URI_REGEXP","URL_ATTRIBUTES","addHook","node","getAttribute","attr","value","test","removeAttribute","sanitize","html","ALLOW_DATA_ATTR"],"mappings":";;AAEA;AACA;AACA,MAAMA,YAAYC,eAAAA,CAAgBC,MAAAA,CAAAA;AAElC;;;;;;;;;;;;;;;;;;AAkBC,IACD,MAAMC,YAAAA,GAAe;AACnB,IAAA,MAAA;AACA,IAAA,KAAA;AACA,IAAA,KAAA;AACA,IAAA,OAAA;AACA,IAAA,QAAA;AACA,IAAA,OAAA;AACA,IAAA,QAAA;AACA,IAAA,MAAA;AACA,IAAA,UAAA;AACA,IAAA,QAAA;AACA,IAAA,OAAA;AACA,IAAA;AACD,CAAA;AAED;;;AAGC,IACD,MAAMC,kBAAAA,GAAqB,qEAAA;AAE3B;;;;;AAKC,IACD,MAAMC,cAAAA,GAAiB;AAAC,IAAA,KAAA;AAAO,IAAA,MAAA;AAAQ,IAAA;AAAa,CAAA;AACpDL,SAAAA,CAAUM,OAAO,CAAC,yBAAA,EAA2B,CAACC,IAAAA,GAAAA;AAC5C,IAAA,IAAI,OAAOA,IAAAA,CAAKC,YAAY,KAAK,UAAA,EAAY;AAC3C,QAAA;AACF,IAAA;IACA,KAAK,MAAMC,QAAQJ,cAAAA,CAAgB;QACjC,MAAMK,KAAAA,GAAQH,IAAAA,CAAKC,YAAY,CAACC,IAAAA,CAAAA;AAChC,QAAA,IAAIC,KAAAA,IAAS,YAAA,CAAaC,IAAI,CAACD,KAAAA,CAAAA,EAAQ;AACrCH,YAAAA,IAAAA,CAAKK,eAAe,CAACH,IAAAA,CAAAA;AACvB,QAAA;AACF,IAAA;AACF,CAAA,CAAA;AAEA,MAAMI,WAAW,CAACC,IAAAA,GAChBd,SAAAA,CAAUa,QAAQ,CAACC,IAAAA,EAAM;AACvBX,QAAAA,YAAAA;AACAC,QAAAA,kBAAAA;QACAW,eAAAA,EAAiB;AACnB,KAAA;;;;"}
@@ -7,7 +7,8 @@ var reactIntl = require('react-intl');
7
7
  var styledComponents = require('styled-components');
8
8
  var InputRenderer = require('./InputRenderer.js');
9
9
 
10
- function _interopNamespaceDefault(e) {
10
+ function _interopNamespace(e) {
11
+ if (e && e.__esModule) return e;
11
12
  var n = Object.create(null);
12
13
  if (e) {
13
14
  Object.keys(e).forEach(function (k) {
@@ -24,7 +25,7 @@ function _interopNamespaceDefault(e) {
24
25
  return Object.freeze(n);
25
26
  }
26
27
 
27
- var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
28
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
28
29
 
29
30
  const ResponsiveGridRoot = styledComponents.styled(designSystem.Grid.Root)`
30
31
  container-type: inline-size;
@@ -1 +1 @@
1
- {"version":3,"file":"FormLayout.js","sources":["../../../../../admin/src/pages/EditView/components/FormLayout.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, BoxProps, Flex, Grid } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { EditLayout } from '../../../hooks/useDocumentLayout';\n\nimport { InputRenderer } from './InputRenderer';\n\nimport type { UseDocument } from '../../../hooks/useDocument';\n\nexport const ResponsiveGridRoot = styled(Grid.Root)`\n container-type: inline-size;\n`;\n\nexport const ResponsiveGridItem =\n /**\n * TODO:\n * JSDOM cannot handle container queries.\n * This is a temporary workaround so that tests do not fail in the CI when jestdom throws an error\n * for failing to parse the stylesheet.\n */\n process.env.NODE_ENV !== 'test'\n ? styled(Grid.Item)<{ col: number }>`\n grid-column: span 12;\n ${({ theme }) => theme.breakpoints.medium} {\n ${({ col }) => col && `grid-column: span ${col};`}\n }\n `\n : styled(Grid.Item)<{ col: number }>`\n grid-column: span 12;\n `;\n\nconst panelStyles = {\n padding: {\n initial: 4,\n medium: 6,\n },\n borderColor: 'neutral150',\n background: 'neutral0',\n hasRadius: true,\n shadow: 'tableShadow',\n} satisfies BoxProps;\n\ninterface FormLayoutProps extends Pick<EditLayout, 'layout'> {\n hasBackground?: boolean;\n document: ReturnType<UseDocument>;\n}\n\nconst FormLayout = React.memo(({ layout, document, hasBackground = true }: FormLayoutProps) => {\n const { formatMessage } = useIntl();\n const modelUid = document.schema?.uid;\n\n const getLabel = (name: string, label: string) => {\n return formatMessage({\n id: `content-manager.content-types.${modelUid}.${name}`,\n defaultMessage: label,\n });\n };\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 return (\n <Grid.Root key={field.name} gap={4}>\n <Grid.Item col={12} s={12} xs={12} direction=\"column\" alignItems=\"stretch\">\n <InputRenderer\n {...field}\n label={getLabel(field.name, field.label)}\n document={document}\n />\n </Grid.Item>\n </Grid.Root>\n );\n }\n\n return (\n <Box key={index} {...(hasBackground && panelStyles)}>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n {panel.map((row, gridRowIndex) => {\n return (\n <ResponsiveGridRoot key={gridRowIndex} gap={{ initial: 6, medium: 4 }}>\n {row.map(({ size, ...field }) => {\n return (\n <ResponsiveGridItem\n col={size}\n key={field.name}\n s={12}\n xs={12}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <InputRenderer\n {...field}\n label={getLabel(field.name, field.label)}\n document={document}\n />\n </ResponsiveGridItem>\n );\n })}\n </ResponsiveGridRoot>\n );\n })}\n </Flex>\n </Box>\n );\n })}\n </Flex>\n );\n});\n\nFormLayout.displayName = 'FormLayout';\n\nexport { FormLayout, FormLayoutProps };\n"],"names":["ResponsiveGridRoot","styled","Grid","Root","ResponsiveGridItem","process","env","NODE_ENV","Item","theme","breakpoints","medium","col","panelStyles","padding","initial","borderColor","background","hasRadius","shadow","FormLayout","React","memo","layout","document","hasBackground","formatMessage","useIntl","modelUid","schema","uid","getLabel","name","label","id","defaultMessage","_jsx","Flex","direction","alignItems","gap","map","panel","index","some","row","field","type","s","xs","InputRenderer","Box","gridRowIndex","size","displayName"],"mappings":"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"}
1
+ {"version":3,"file":"FormLayout.js","sources":["../../../../../admin/src/pages/EditView/components/FormLayout.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, BoxProps, Flex, Grid } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { EditLayout } from '../../../hooks/useDocumentLayout';\n\nimport { InputRenderer } from './InputRenderer';\n\nimport type { UseDocument } from '../../../hooks/useDocument';\n\nexport const ResponsiveGridRoot = styled(Grid.Root)`\n container-type: inline-size;\n`;\n\nexport const ResponsiveGridItem =\n /**\n * TODO:\n * JSDOM cannot handle container queries.\n * This is a temporary workaround so that tests do not fail in the CI when jestdom throws an error\n * for failing to parse the stylesheet.\n */\n process.env.NODE_ENV !== 'test'\n ? styled(Grid.Item)<{ col: number }>`\n grid-column: span 12;\n ${({ theme }) => theme.breakpoints.medium} {\n ${({ col }) => col && `grid-column: span ${col};`}\n }\n `\n : styled(Grid.Item)<{ col: number }>`\n grid-column: span 12;\n `;\n\nconst panelStyles = {\n padding: {\n initial: 4,\n medium: 6,\n },\n borderColor: 'neutral150',\n background: 'neutral0',\n hasRadius: true,\n shadow: 'tableShadow',\n} satisfies BoxProps;\n\ninterface FormLayoutProps extends Pick<EditLayout, 'layout'> {\n hasBackground?: boolean;\n document: ReturnType<UseDocument>;\n}\n\nconst FormLayout = React.memo(({ layout, document, hasBackground = true }: FormLayoutProps) => {\n const { formatMessage } = useIntl();\n const modelUid = document.schema?.uid;\n\n const getLabel = (name: string, label: string) => {\n return formatMessage({\n id: `content-manager.content-types.${modelUid}.${name}`,\n defaultMessage: label,\n });\n };\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 return (\n <Grid.Root key={field.name} gap={4}>\n <Grid.Item col={12} s={12} xs={12} direction=\"column\" alignItems=\"stretch\">\n <InputRenderer\n {...field}\n label={getLabel(field.name, field.label)}\n document={document}\n />\n </Grid.Item>\n </Grid.Root>\n );\n }\n\n return (\n <Box key={index} {...(hasBackground && panelStyles)}>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n {panel.map((row, gridRowIndex) => {\n return (\n <ResponsiveGridRoot key={gridRowIndex} gap={{ initial: 6, medium: 4 }}>\n {row.map(({ size, ...field }) => {\n return (\n <ResponsiveGridItem\n col={size}\n key={field.name}\n s={12}\n xs={12}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <InputRenderer\n {...field}\n label={getLabel(field.name, field.label)}\n document={document}\n />\n </ResponsiveGridItem>\n );\n })}\n </ResponsiveGridRoot>\n );\n })}\n </Flex>\n </Box>\n );\n })}\n </Flex>\n );\n});\n\nFormLayout.displayName = 'FormLayout';\n\nexport { FormLayout, FormLayoutProps };\n"],"names":["ResponsiveGridRoot","styled","Grid","Root","ResponsiveGridItem","process","env","NODE_ENV","Item","theme","breakpoints","medium","col","panelStyles","padding","initial","borderColor","background","hasRadius","shadow","FormLayout","React","memo","layout","document","hasBackground","formatMessage","useIntl","modelUid","schema","uid","getLabel","name","label","id","defaultMessage","_jsx","Flex","direction","alignItems","gap","map","panel","index","some","row","field","type","s","xs","InputRenderer","Box","gridRowIndex","size","displayName"],"mappings":"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"}
@@ -18,7 +18,8 @@ var users = require('../../../utils/users.js');
18
18
  var DocumentActions = require('./DocumentActions.js');
19
19
  var DocumentStatus = require('./DocumentStatus.js');
20
20
 
21
- function _interopNamespaceDefault(e) {
21
+ function _interopNamespace(e) {
22
+ if (e && e.__esModule) return e;
22
23
  var n = Object.create(null);
23
24
  if (e) {
24
25
  Object.keys(e).forEach(function (k) {
@@ -35,7 +36,7 @@ function _interopNamespaceDefault(e) {
35
36
  return Object.freeze(n);
36
37
  }
37
38
 
38
- var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
39
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
39
40
 
40
41
  const Header = ({ isCreating, status, title: documentTitle = 'Untitled' })=>{
41
42
  const { formatMessage } = reactIntl.useIntl();
@@ -1 +1 @@
1
- {"version":3,"file":"Header.js","sources":["../../../../../admin/src/pages/EditView/components/Header.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n DescriptionComponentRenderer,\n useForm,\n BackButton,\n useNotification,\n useClipboard,\n useStrapiApp,\n useQueryParams,\n useIsDesktop,\n useDebounce,\n RESPONSIVE_DEFAULT_SPACING,\n useIsMobile,\n} from '@strapi/admin/strapi-admin';\nimport {\n Box,\n Flex,\n Menu,\n SingleSelect,\n SingleSelectOption,\n Typography,\n IconButton,\n Dialog,\n Popover,\n} from '@strapi/design-system';\nimport { Duplicate, ListPlus, Pencil, Trash, WarningCircle } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { useMatch, useNavigate, useParams } from 'react-router-dom';\n\nimport { RelativeTime } from '../../../components/RelativeTime';\nimport {\n CREATED_AT_ATTRIBUTE_NAME,\n CREATED_BY_ATTRIBUTE_NAME,\n PUBLISHED_AT_ATTRIBUTE_NAME,\n PUBLISHED_BY_ATTRIBUTE_NAME,\n UPDATED_AT_ATTRIBUTE_NAME,\n UPDATED_BY_ATTRIBUTE_NAME,\n} from '../../../constants/attributes';\nimport { COLLECTION_TYPES, SINGLE_TYPES } from '../../../constants/collections';\nimport { useDocumentRBAC } from '../../../features/DocumentRBAC';\nimport { useDoc } from '../../../hooks/useDocument';\nimport { useDocumentActions } from '../../../hooks/useDocumentActions';\nimport { CLONE_PATH, LIST_PATH } from '../../../router';\nimport { getDisplayName } from '../../../utils/users';\n\nimport { DocumentActionsMenu } from './DocumentActions';\nimport { DocumentStatus } from './DocumentStatus';\n\nimport type { ContentManagerPlugin, DocumentActionComponent } from '../../../content-manager';\n\n/* -------------------------------------------------------------------------------------------------\n * Header\n * -----------------------------------------------------------------------------------------------*/\n\ninterface HeaderProps {\n isCreating?: boolean;\n status?: 'draft' | 'published' | 'modified';\n title?: string;\n}\n\nconst Header = ({ isCreating, status, title: documentTitle = 'Untitled' }: HeaderProps) => {\n const { formatMessage } = useIntl();\n const isCloning = useMatch(CLONE_PATH) !== null;\n const isMobile = useIsMobile();\n const params = useParams<{ collectionType: string; slug: string }>();\n const [\n {\n query: { status: activeTab = 'draft' },\n },\n ] = useQueryParams<{ status: 'draft' | 'published' }>();\n\n const title = isCreating\n ? formatMessage({\n id: 'content-manager.containers.edit.title.new',\n defaultMessage: 'Create an entry',\n })\n : documentTitle;\n\n return (\n <Flex\n direction=\"column\"\n alignItems=\"flex-start\"\n paddingLeft={RESPONSIVE_DEFAULT_SPACING}\n paddingRight={RESPONSIVE_DEFAULT_SPACING}\n paddingTop={{\n initial: 4,\n medium: 6,\n }}\n paddingBottom={4}\n gap={2}\n >\n {!isMobile && (\n <BackButton\n fallback={\n params.collectionType === SINGLE_TYPES\n ? undefined\n : `../${COLLECTION_TYPES}/${params.slug}`\n }\n />\n )}\n <Flex\n width=\"100%\"\n justifyContent=\"space-between\"\n gap={{\n initial: 2,\n medium: '8rem',\n }}\n alignItems=\"flex-start\"\n direction={{\n initial: 'column-reverse',\n medium: 'row',\n }}\n >\n <Flex\n gap={2}\n justifyContent=\"space-between\"\n alignItems=\"flex-start\"\n width=\"100%\"\n overflow=\"hidden\"\n >\n <Typography variant=\"alpha\" tag=\"h1\" overflow=\"hidden\">\n {title}\n </Typography>\n <Box display={{ initial: 'block', medium: 'none' }}>\n <HeaderDocumentActions activeTab={activeTab} isCloning={isCloning} />\n </Box>\n </Flex>\n <Flex width={{ initial: '100%', medium: 'auto' }} gap={3} justifyContent=\"space-between\">\n {isMobile && (\n <BackButton\n fallback={\n params.collectionType === SINGLE_TYPES\n ? undefined\n : `../${COLLECTION_TYPES}/${params.slug}`\n }\n />\n )}\n <HeaderToolbar activeTab={activeTab} isCloning={isCloning} />\n </Flex>\n </Flex>\n {status ? (\n <Box marginTop={1}>\n <DocumentStatus status={isCloning ? 'draft' : status} />\n </Box>\n ) : null}\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * HeaderToolbar\n * -----------------------------------------------------------------------------------------------*/\n\ninterface DialogOptions {\n type: 'dialog';\n title: string;\n content?: React.ReactNode;\n footer?: React.ReactNode;\n}\n\ninterface HeaderActionDescription {\n disabled?: boolean;\n label: string;\n icon?: React.ReactNode;\n type?: 'icon' | 'default';\n onClick?: (event: React.SyntheticEvent) => Promise<boolean | void> | boolean | void;\n dialog?: DialogOptions;\n options?: Array<{\n disabled?: boolean;\n label: string;\n startIcon?: React.ReactNode;\n textValue?: string;\n value: string;\n /**\n * @internal\n * @description\n * Internal SelectOption renderer used to display the status of AI translation background jobs\n */\n _render?: () => React.ReactNode;\n }>;\n /**\n * @internal\n * @description\n * Internal document header action to display the status of AI translation background jobs\n */\n _status?: {\n message: React.ReactNode;\n tooltip?: React.ReactNode;\n };\n onSelect?: (value: string) => void;\n value?: string;\n customizeContent?: (value: string) => React.ReactNode;\n}\n\ninterface HeaderDocumentActionsProps {\n activeTab: 'draft' | 'published';\n isCloning: boolean;\n}\n\nconst HeaderDocumentActions = ({ activeTab, isCloning }: HeaderDocumentActionsProps) => {\n const { model, id, document, meta, collectionType } = useDoc();\n const { formatMessage } = useIntl();\n const plugins = useStrapiApp('HeaderToolbar', (state) => state.plugins);\n return (\n <DescriptionComponentRenderer\n props={{\n activeTab,\n model,\n documentId: id,\n document: isCloning ? undefined : document,\n meta: isCloning ? undefined : meta,\n collectionType,\n }}\n descriptions={(\n plugins['content-manager'].apis as ContentManagerPlugin['config']['apis']\n ).getDocumentActions('header')}\n >\n {(actions) => {\n const headerActions = actions.filter((action) => {\n const positions = Array.isArray(action.position) ? action.position : [action.position];\n return positions.includes('header');\n });\n\n const documentId = document?.documentId ?? id;\n\n return (\n <DocumentActionsMenu\n actions={headerActions}\n label={formatMessage({\n id: 'content-manager.containers.edit.header.more-actions',\n defaultMessage: 'More actions',\n })}\n >\n {collectionType !== SINGLE_TYPES && <CopyDocumentIdMenuItem documentId={documentId} />}\n <Information activeTab={activeTab} />\n </DocumentActionsMenu>\n );\n }}\n </DescriptionComponentRenderer>\n );\n};\n\n/**\n * @description Contains the document actions that have `position: header`, if there are\n * none we still render the menu because we render the information about the document there.\n */\nconst HeaderToolbar = ({ activeTab, isCloning }: HeaderDocumentActionsProps) => {\n const { model, id, document, meta, collectionType } = useDoc();\n const plugins = useStrapiApp('HeaderToolbar', (state) => state.plugins);\n\n return (\n <Flex gap={2}>\n <DescriptionComponentRenderer\n props={{\n activeTab,\n model,\n documentId: id,\n document: isCloning ? undefined : document,\n meta: isCloning ? undefined : meta,\n collectionType,\n }}\n descriptions={(\n plugins['content-manager'].apis as ContentManagerPlugin['config']['apis']\n ).getHeaderActions()}\n >\n {(actions) => {\n if (actions.length > 0) {\n return <HeaderActions actions={actions} />;\n } else {\n return null;\n }\n }}\n </DescriptionComponentRenderer>\n <Box display={{ initial: 'none', medium: 'block' }}>\n <HeaderDocumentActions activeTab={activeTab} isCloning={isCloning} />\n </Box>\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * CopyDocumentIdMenuItem\n * -----------------------------------------------------------------------------------------------*/\n\ninterface CopyDocumentIdMenuItemProps {\n documentId: string | undefined;\n}\n\nconst CopyDocumentIdMenuItem = ({ documentId }: CopyDocumentIdMenuItemProps) => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { copy } = useClipboard();\n\n if (!documentId) {\n return null;\n }\n\n const handleCopy = async () => {\n const didCopy = await copy(documentId);\n if (didCopy) {\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'content-manager.actions.copy-documentId.success',\n defaultMessage: 'Document ID copied to clipboard',\n }),\n });\n }\n };\n\n return (\n <>\n <Menu.Separator />\n <Menu.Item onSelect={handleCopy} startIcon={<Duplicate />}>\n {formatMessage({\n id: 'content-manager.actions.copy-documentId.label',\n defaultMessage: 'Copy document ID',\n })}\n </Menu.Item>\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Information\n * -----------------------------------------------------------------------------------------------*/\n\ninterface InformationProps {\n activeTab: 'draft' | 'published';\n}\n\nconst Information = ({ activeTab }: InformationProps) => {\n const { formatMessage } = useIntl();\n const { document, meta, id, collectionType } = useDoc();\n\n if (!document?.id && !id) {\n return null;\n }\n\n /**\n * Because in the backend separate entries are made for draft and published\n * documents, the creator fields are different for each of them. For example,\n * you could make your draft in January and then publish it for the first time\n * in Feb. This would make the createdAt value for the published entry in Feb\n * but really we want to show the document as a whole. The draft entry will also\n * never have the publishedAt values.\n *\n * So, we decipher which document to show the creator for based on the activeTab.\n */\n\n const createAndUpdateDocument =\n activeTab === 'draft'\n ? document\n : meta?.availableStatus?.find((status) => status.publishedAt === null);\n\n const publishDocument =\n activeTab === 'published'\n ? document\n : meta?.availableStatus?.find((status) => status.publishedAt !== null);\n\n const creator = createAndUpdateDocument?.[CREATED_BY_ATTRIBUTE_NAME]\n ? getDisplayName(createAndUpdateDocument[CREATED_BY_ATTRIBUTE_NAME])\n : null;\n\n const updator = createAndUpdateDocument?.[UPDATED_BY_ATTRIBUTE_NAME]\n ? getDisplayName(createAndUpdateDocument[UPDATED_BY_ATTRIBUTE_NAME])\n : null;\n\n const information: Array<{ isDisplayed?: boolean; label: string; value: React.ReactNode }> = [\n {\n isDisplayed: !!publishDocument?.[PUBLISHED_AT_ATTRIBUTE_NAME],\n label: formatMessage({\n id: 'content-manager.containers.edit.information.last-published.label',\n defaultMessage: 'Published',\n }),\n value: formatMessage(\n {\n id: 'content-manager.containers.edit.information.last-published.value',\n defaultMessage: `{time}{isAnonymous, select, true {} other { by {author}}}`,\n },\n {\n time: (\n <RelativeTime timestamp={new Date(publishDocument?.[PUBLISHED_AT_ATTRIBUTE_NAME])} />\n ),\n isAnonymous: !publishDocument?.[PUBLISHED_BY_ATTRIBUTE_NAME],\n author: publishDocument?.[PUBLISHED_BY_ATTRIBUTE_NAME]\n ? getDisplayName(publishDocument?.[PUBLISHED_BY_ATTRIBUTE_NAME])\n : null,\n }\n ),\n },\n {\n isDisplayed: !!createAndUpdateDocument?.[UPDATED_AT_ATTRIBUTE_NAME],\n label: formatMessage({\n id: 'content-manager.containers.edit.information.last-draft.label',\n defaultMessage: 'Updated',\n }),\n value: formatMessage(\n {\n id: 'content-manager.containers.edit.information.last-draft.value',\n defaultMessage: `{time}{isAnonymous, select, true {} other { by {author}}}`,\n },\n {\n time: (\n <RelativeTime\n timestamp={new Date(createAndUpdateDocument?.[UPDATED_AT_ATTRIBUTE_NAME])}\n />\n ),\n isAnonymous: !updator,\n author: updator,\n }\n ),\n },\n {\n isDisplayed: !!createAndUpdateDocument?.[CREATED_AT_ATTRIBUTE_NAME],\n label: formatMessage({\n id: 'content-manager.containers.edit.information.document.label',\n defaultMessage: 'Created',\n }),\n value: formatMessage(\n {\n id: 'content-manager.containers.edit.information.document.value',\n defaultMessage: `{time}{isAnonymous, select, true {} other { by {author}}}`,\n },\n {\n time: (\n <RelativeTime\n timestamp={new Date(createAndUpdateDocument?.[CREATED_AT_ATTRIBUTE_NAME])}\n />\n ),\n isAnonymous: !creator,\n author: creator,\n }\n ),\n },\n {\n isDisplayed: collectionType !== SINGLE_TYPES && !!(document?.documentId ?? id),\n label: formatMessage({\n id: 'content-manager.containers.edit.information.documentId.label',\n defaultMessage: 'Document ID',\n }),\n value: document?.documentId ?? id ?? '',\n },\n ].filter((info) => info.isDisplayed);\n\n return (\n <Flex\n borderWidth=\"1px 0 0 0\"\n borderStyle=\"solid\"\n borderColor=\"neutral150\"\n direction=\"column\"\n marginTop={1}\n tag=\"dl\"\n padding={5}\n gap={3}\n alignItems=\"flex-start\"\n /**\n * The menu content has a padding of 4px, but we want our divider (the border top applied) to\n * be flush with the menu content. So we need to adjust the margin & width to account for the padding.\n */\n marginLeft=\"-0.4rem\"\n marginRight=\"-0.4rem\"\n width=\"calc(100% + 8px)\"\n >\n {information.map((info) => (\n <Flex gap={1} direction=\"column\" alignItems=\"flex-start\" key={info.label}>\n <Typography tag=\"dt\" variant=\"pi\" fontWeight=\"bold\">\n {info.label}\n </Typography>\n <Typography\n tag=\"dd\"\n variant=\"pi\"\n textColor=\"neutral600\"\n style={{ wordBreak: 'break-word' }}\n >\n {info.value}\n </Typography>\n </Flex>\n ))}\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * HeaderActions\n * -----------------------------------------------------------------------------------------------*/\n\ninterface HeaderActionsProps {\n actions: Array<HeaderActionDescription & { id: string }>;\n}\n\nconst HeaderActions = ({ actions }: HeaderActionsProps) => {\n const [dialogId, setDialogId] = React.useState<string | null>(null);\n\n const handleClick =\n (action: HeaderActionDescription & { id: string }) => async (e: React.MouseEvent) => {\n if (!('options' in action)) {\n const { onClick = () => false, dialog, id } = action;\n\n const muteDialog = await onClick(e);\n\n if (dialog && !muteDialog) {\n e.preventDefault();\n setDialogId(id);\n }\n }\n };\n\n const handleClose = () => {\n setDialogId(null);\n };\n\n return (\n <Flex gap={1}>\n {actions.map((action) => {\n if (action.options) {\n return (\n <SingleSelect\n key={action.id}\n size=\"S\"\n // @ts-expect-error – the DS will handle numbers, but we're not allowing the API.\n onChange={action.onSelect}\n aria-label={action.label}\n {...action}\n >\n {action.options.map(({ label, ...option }) => {\n if (option._render) {\n return option._render();\n }\n\n return (\n <SingleSelectOption key={option.value} {...option}>\n {label}\n </SingleSelectOption>\n );\n })}\n </SingleSelect>\n );\n } else if (action._status) {\n return (\n <HeaderActionStatus tooltip={action._status?.tooltip} key={action.id}>\n {action._status.message}\n </HeaderActionStatus>\n );\n } else {\n return (\n <React.Fragment key={action.id}>\n <IconButton\n disabled={action.disabled}\n label={action.label}\n size=\"S\"\n onClick={handleClick(action)}\n >\n {action.icon}\n </IconButton>\n {action.dialog ? (\n <HeaderActionDialog\n {...action.dialog}\n isOpen={dialogId === action.id}\n onClose={handleClose}\n />\n ) : null}\n </React.Fragment>\n );\n }\n })}\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * HeaderActionStatus\n * -----------------------------------------------------------------------------------------------*/\n\ninterface HeaderActionStatusProps {\n tooltip: React.ReactNode;\n children: React.ReactNode;\n}\n\nconst HeaderActionStatus = ({ tooltip, children }: HeaderActionStatusProps) => {\n const [open, setOpen] = React.useState(false);\n // Debounce the open/close so the user can hover over the popover content before it closes\n const debouncedOpen = useDebounce(open, 100);\n\n const handleMouseEnter = () => {\n if (tooltip) {\n setOpen(true);\n }\n };\n const handleMouseLeave = () => {\n if (tooltip) {\n setOpen(false);\n }\n };\n\n return (\n <Popover.Root open={debouncedOpen} onOpenChange={setOpen}>\n <Popover.Anchor\n style={{ alignSelf: 'stretch' }}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n aria-describedby=\"document-header-action-status\"\n >\n <Box height=\"100%\">{children}</Box>\n </Popover.Anchor>\n <Popover.Content\n role=\"tooltip\"\n id=\"document-header-action-status\"\n side=\"bottom\"\n align=\"center\"\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n >\n {tooltip}\n </Popover.Content>\n </Popover.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * HeaderActionDialog\n * -----------------------------------------------------------------------------------------------*/\ninterface HeaderActionDialogProps {\n onClose: () => void;\n onCancel?: () => Promise<void>;\n title: string;\n content?: React.ReactNode | ((props: { onClose: () => void }) => React.ReactNode);\n isOpen: boolean;\n}\n\nconst HeaderActionDialog = ({\n onClose,\n onCancel,\n title,\n content: Content,\n isOpen,\n}: HeaderActionDialogProps) => {\n const handleClose = async () => {\n if (onCancel) {\n await onCancel();\n }\n\n onClose();\n };\n\n return (\n <Dialog.Root open={isOpen} onOpenChange={handleClose}>\n <Dialog.Content>\n <Dialog.Header>{title}</Dialog.Header>\n {typeof Content === 'function' ? <Content onClose={handleClose} /> : Content}\n </Dialog.Content>\n </Dialog.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * DocumentActionComponents\n * -----------------------------------------------------------------------------------------------*/\n\nconst ConfigureTheViewAction: DocumentActionComponent = ({ collectionType, model }) => {\n const navigate = useNavigate();\n const { formatMessage } = useIntl();\n const isDesktop = useIsDesktop();\n\n return isDesktop\n ? {\n label: formatMessage({\n id: 'app.links.configure-view',\n defaultMessage: 'Configure the view',\n }),\n icon: <ListPlus />,\n onClick: () => {\n navigate(`../${collectionType}/${model}/configurations/edit`);\n },\n position: 'header',\n }\n : null;\n};\n\nConfigureTheViewAction.type = 'configure-the-view';\nConfigureTheViewAction.position = 'header';\n\nconst EditTheModelAction: DocumentActionComponent = ({ model }) => {\n const navigate = useNavigate();\n const { formatMessage } = useIntl();\n const isDesktop = useIsDesktop();\n\n return isDesktop\n ? {\n label: formatMessage({\n id: 'content-manager.link-to-ctb',\n defaultMessage: 'Edit the model',\n }),\n icon: <Pencil />,\n onClick: () => {\n navigate(`/plugins/content-type-builder/content-types/${model}`);\n },\n position: 'header',\n }\n : null;\n};\n\nEditTheModelAction.type = 'edit-the-model';\nEditTheModelAction.position = 'header';\n\nconst DeleteAction: DocumentActionComponent = ({ documentId, model, collectionType, document }) => {\n const navigate = useNavigate();\n const { formatMessage } = useIntl();\n const listViewPathMatch = useMatch(LIST_PATH);\n const canDelete = useDocumentRBAC('DeleteAction', (state) => state.canDelete);\n const { delete: deleteAction, isLoading } = useDocumentActions();\n const { toggleNotification } = useNotification();\n const setSubmitting = useForm('DeleteAction', (state) => state.setSubmitting);\n const isLocalized = document?.locale != null;\n\n return {\n disabled: !canDelete || !document,\n label: formatMessage(\n {\n id: 'content-manager.actions.delete.label',\n defaultMessage: 'Delete entry{isLocalized, select, true { (all locales)} other {}}',\n },\n { isLocalized }\n ),\n icon: <Trash />,\n dialog: {\n type: 'dialog',\n title: formatMessage({\n id: 'app.components.ConfirmDialog.title',\n defaultMessage: 'Confirmation',\n }),\n content: (\n <Flex direction=\"column\" gap={2}>\n <WarningCircle width=\"24px\" height=\"24px\" fill=\"danger600\" />\n <Typography tag=\"p\" variant=\"omega\" textAlign=\"center\">\n {formatMessage({\n id: 'content-manager.actions.delete.dialog.body',\n defaultMessage: 'Are you sure?',\n })}\n </Typography>\n </Flex>\n ),\n loading: isLoading,\n onConfirm: async () => {\n /**\n * If we have a match, we're in the list view\n * and therefore not in a form and shouldn't be\n * trying to set the submitting value.\n */\n if (!listViewPathMatch) {\n setSubmitting(true);\n }\n try {\n if (!documentId && collectionType !== SINGLE_TYPES) {\n console.error(\n \"You're trying to delete a document without an id, this is likely a bug with Strapi. Please open an issue.\"\n );\n\n toggleNotification({\n message: formatMessage({\n id: 'content-manager.actions.delete.error',\n defaultMessage: 'An error occurred while trying to delete the document.',\n }),\n type: 'danger',\n });\n\n return;\n }\n\n const res = await deleteAction({\n documentId,\n model,\n collectionType,\n params: {\n locale: '*',\n },\n });\n\n if (!('error' in res)) {\n navigate({ pathname: `../${collectionType}/${model}` }, { replace: true });\n }\n } finally {\n if (!listViewPathMatch) {\n setSubmitting(false);\n }\n }\n },\n },\n variant: 'danger',\n position: ['header', 'table-row'],\n };\n};\n\nDeleteAction.type = 'delete';\nDeleteAction.position = ['header', 'table-row'];\n\nconst DEFAULT_HEADER_ACTIONS = [EditTheModelAction, ConfigureTheViewAction, DeleteAction];\n\nexport { Header, DEFAULT_HEADER_ACTIONS };\nexport type { HeaderProps, HeaderActionDescription };\n"],"names":["Header","isCreating","status","title","documentTitle","formatMessage","useIntl","isCloning","useMatch","CLONE_PATH","isMobile","useIsMobile","params","useParams","query","activeTab","useQueryParams","id","defaultMessage","_jsxs","Flex","direction","alignItems","paddingLeft","RESPONSIVE_DEFAULT_SPACING","paddingRight","paddingTop","initial","medium","paddingBottom","gap","_jsx","BackButton","fallback","collectionType","SINGLE_TYPES","undefined","COLLECTION_TYPES","slug","width","justifyContent","overflow","Typography","variant","tag","Box","display","HeaderDocumentActions","HeaderToolbar","marginTop","DocumentStatus","model","document","meta","useDoc","plugins","useStrapiApp","state","DescriptionComponentRenderer","props","documentId","descriptions","apis","getDocumentActions","actions","headerActions","filter","action","positions","Array","isArray","position","includes","DocumentActionsMenu","label","CopyDocumentIdMenuItem","Information","getHeaderActions","length","HeaderActions","toggleNotification","useNotification","copy","useClipboard","handleCopy","didCopy","type","message","_Fragment","Menu","Separator","Item","onSelect","startIcon","Duplicate","createAndUpdateDocument","availableStatus","find","publishedAt","publishDocument","creator","CREATED_BY_ATTRIBUTE_NAME","getDisplayName","updator","UPDATED_BY_ATTRIBUTE_NAME","information","isDisplayed","PUBLISHED_AT_ATTRIBUTE_NAME","value","time","RelativeTime","timestamp","Date","isAnonymous","PUBLISHED_BY_ATTRIBUTE_NAME","author","UPDATED_AT_ATTRIBUTE_NAME","CREATED_AT_ATTRIBUTE_NAME","info","borderWidth","borderStyle","borderColor","padding","marginLeft","marginRight","map","fontWeight","textColor","style","wordBreak","dialogId","setDialogId","React","useState","handleClick","e","onClick","dialog","muteDialog","preventDefault","handleClose","options","SingleSelect","size","onChange","aria-label","option","_render","SingleSelectOption","_status","HeaderActionStatus","tooltip","Fragment","IconButton","disabled","icon","HeaderActionDialog","isOpen","onClose","children","open","setOpen","debouncedOpen","useDebounce","handleMouseEnter","handleMouseLeave","Popover","Root","onOpenChange","Anchor","alignSelf","onMouseEnter","onMouseLeave","aria-describedby","height","Content","role","side","align","onCancel","content","Dialog","ConfigureTheViewAction","navigate","useNavigate","isDesktop","useIsDesktop","ListPlus","EditTheModelAction","Pencil","DeleteAction","listViewPathMatch","LIST_PATH","canDelete","useDocumentRBAC","delete","deleteAction","isLoading","useDocumentActions","setSubmitting","useForm","isLocalized","locale","Trash","WarningCircle","fill","textAlign","loading","onConfirm","console","error","res","pathname","replace","DEFAULT_HEADER_ACTIONS"],"mappings":"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"}
1
+ {"version":3,"file":"Header.js","sources":["../../../../../admin/src/pages/EditView/components/Header.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n DescriptionComponentRenderer,\n useForm,\n BackButton,\n useNotification,\n useClipboard,\n useStrapiApp,\n useQueryParams,\n useIsDesktop,\n useDebounce,\n RESPONSIVE_DEFAULT_SPACING,\n useIsMobile,\n} from '@strapi/admin/strapi-admin';\nimport {\n Box,\n Flex,\n Menu,\n SingleSelect,\n SingleSelectOption,\n Typography,\n IconButton,\n Dialog,\n Popover,\n} from '@strapi/design-system';\nimport { Duplicate, ListPlus, Pencil, Trash, WarningCircle } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { useMatch, useNavigate, useParams } from 'react-router-dom';\n\nimport { RelativeTime } from '../../../components/RelativeTime';\nimport {\n CREATED_AT_ATTRIBUTE_NAME,\n CREATED_BY_ATTRIBUTE_NAME,\n PUBLISHED_AT_ATTRIBUTE_NAME,\n PUBLISHED_BY_ATTRIBUTE_NAME,\n UPDATED_AT_ATTRIBUTE_NAME,\n UPDATED_BY_ATTRIBUTE_NAME,\n} from '../../../constants/attributes';\nimport { COLLECTION_TYPES, SINGLE_TYPES } from '../../../constants/collections';\nimport { useDocumentRBAC } from '../../../features/DocumentRBAC';\nimport { useDoc } from '../../../hooks/useDocument';\nimport { useDocumentActions } from '../../../hooks/useDocumentActions';\nimport { CLONE_PATH, LIST_PATH } from '../../../router';\nimport { getDisplayName } from '../../../utils/users';\n\nimport { DocumentActionsMenu } from './DocumentActions';\nimport { DocumentStatus } from './DocumentStatus';\n\nimport type { ContentManagerPlugin, DocumentActionComponent } from '../../../content-manager';\n\n/* -------------------------------------------------------------------------------------------------\n * Header\n * -----------------------------------------------------------------------------------------------*/\n\ninterface HeaderProps {\n isCreating?: boolean;\n status?: 'draft' | 'published' | 'modified';\n title?: string;\n}\n\nconst Header = ({ isCreating, status, title: documentTitle = 'Untitled' }: HeaderProps) => {\n const { formatMessage } = useIntl();\n const isCloning = useMatch(CLONE_PATH) !== null;\n const isMobile = useIsMobile();\n const params = useParams<{ collectionType: string; slug: string }>();\n const [\n {\n query: { status: activeTab = 'draft' },\n },\n ] = useQueryParams<{ status: 'draft' | 'published' }>();\n\n const title = isCreating\n ? formatMessage({\n id: 'content-manager.containers.edit.title.new',\n defaultMessage: 'Create an entry',\n })\n : documentTitle;\n\n return (\n <Flex\n direction=\"column\"\n alignItems=\"flex-start\"\n paddingLeft={RESPONSIVE_DEFAULT_SPACING}\n paddingRight={RESPONSIVE_DEFAULT_SPACING}\n paddingTop={{\n initial: 4,\n medium: 6,\n }}\n paddingBottom={4}\n gap={2}\n >\n {!isMobile && (\n <BackButton\n fallback={\n params.collectionType === SINGLE_TYPES\n ? undefined\n : `../${COLLECTION_TYPES}/${params.slug}`\n }\n />\n )}\n <Flex\n width=\"100%\"\n justifyContent=\"space-between\"\n gap={{\n initial: 2,\n medium: '8rem',\n }}\n alignItems=\"flex-start\"\n direction={{\n initial: 'column-reverse',\n medium: 'row',\n }}\n >\n <Flex\n gap={2}\n justifyContent=\"space-between\"\n alignItems=\"flex-start\"\n width=\"100%\"\n overflow=\"hidden\"\n >\n <Typography variant=\"alpha\" tag=\"h1\" overflow=\"hidden\">\n {title}\n </Typography>\n <Box display={{ initial: 'block', medium: 'none' }}>\n <HeaderDocumentActions activeTab={activeTab} isCloning={isCloning} />\n </Box>\n </Flex>\n <Flex width={{ initial: '100%', medium: 'auto' }} gap={3} justifyContent=\"space-between\">\n {isMobile && (\n <BackButton\n fallback={\n params.collectionType === SINGLE_TYPES\n ? undefined\n : `../${COLLECTION_TYPES}/${params.slug}`\n }\n />\n )}\n <HeaderToolbar activeTab={activeTab} isCloning={isCloning} />\n </Flex>\n </Flex>\n {status ? (\n <Box marginTop={1}>\n <DocumentStatus status={isCloning ? 'draft' : status} />\n </Box>\n ) : null}\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * HeaderToolbar\n * -----------------------------------------------------------------------------------------------*/\n\ninterface DialogOptions {\n type: 'dialog';\n title: string;\n content?: React.ReactNode;\n footer?: React.ReactNode;\n}\n\ninterface HeaderActionDescription {\n disabled?: boolean;\n label: string;\n icon?: React.ReactNode;\n type?: 'icon' | 'default';\n onClick?: (event: React.SyntheticEvent) => Promise<boolean | void> | boolean | void;\n dialog?: DialogOptions;\n options?: Array<{\n disabled?: boolean;\n label: string;\n startIcon?: React.ReactNode;\n textValue?: string;\n value: string;\n /**\n * @internal\n * @description\n * Internal SelectOption renderer used to display the status of AI translation background jobs\n */\n _render?: () => React.ReactNode;\n }>;\n /**\n * @internal\n * @description\n * Internal document header action to display the status of AI translation background jobs\n */\n _status?: {\n message: React.ReactNode;\n tooltip?: React.ReactNode;\n };\n onSelect?: (value: string) => void;\n value?: string;\n customizeContent?: (value: string) => React.ReactNode;\n}\n\ninterface HeaderDocumentActionsProps {\n activeTab: 'draft' | 'published';\n isCloning: boolean;\n}\n\nconst HeaderDocumentActions = ({ activeTab, isCloning }: HeaderDocumentActionsProps) => {\n const { model, id, document, meta, collectionType } = useDoc();\n const { formatMessage } = useIntl();\n const plugins = useStrapiApp('HeaderToolbar', (state) => state.plugins);\n return (\n <DescriptionComponentRenderer\n props={{\n activeTab,\n model,\n documentId: id,\n document: isCloning ? undefined : document,\n meta: isCloning ? undefined : meta,\n collectionType,\n }}\n descriptions={(\n plugins['content-manager'].apis as ContentManagerPlugin['config']['apis']\n ).getDocumentActions('header')}\n >\n {(actions) => {\n const headerActions = actions.filter((action) => {\n const positions = Array.isArray(action.position) ? action.position : [action.position];\n return positions.includes('header');\n });\n\n const documentId = document?.documentId ?? id;\n\n return (\n <DocumentActionsMenu\n actions={headerActions}\n label={formatMessage({\n id: 'content-manager.containers.edit.header.more-actions',\n defaultMessage: 'More actions',\n })}\n >\n {collectionType !== SINGLE_TYPES && <CopyDocumentIdMenuItem documentId={documentId} />}\n <Information activeTab={activeTab} />\n </DocumentActionsMenu>\n );\n }}\n </DescriptionComponentRenderer>\n );\n};\n\n/**\n * @description Contains the document actions that have `position: header`, if there are\n * none we still render the menu because we render the information about the document there.\n */\nconst HeaderToolbar = ({ activeTab, isCloning }: HeaderDocumentActionsProps) => {\n const { model, id, document, meta, collectionType } = useDoc();\n const plugins = useStrapiApp('HeaderToolbar', (state) => state.plugins);\n\n return (\n <Flex gap={2}>\n <DescriptionComponentRenderer\n props={{\n activeTab,\n model,\n documentId: id,\n document: isCloning ? undefined : document,\n meta: isCloning ? undefined : meta,\n collectionType,\n }}\n descriptions={(\n plugins['content-manager'].apis as ContentManagerPlugin['config']['apis']\n ).getHeaderActions()}\n >\n {(actions) => {\n if (actions.length > 0) {\n return <HeaderActions actions={actions} />;\n } else {\n return null;\n }\n }}\n </DescriptionComponentRenderer>\n <Box display={{ initial: 'none', medium: 'block' }}>\n <HeaderDocumentActions activeTab={activeTab} isCloning={isCloning} />\n </Box>\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * CopyDocumentIdMenuItem\n * -----------------------------------------------------------------------------------------------*/\n\ninterface CopyDocumentIdMenuItemProps {\n documentId: string | undefined;\n}\n\nconst CopyDocumentIdMenuItem = ({ documentId }: CopyDocumentIdMenuItemProps) => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { copy } = useClipboard();\n\n if (!documentId) {\n return null;\n }\n\n const handleCopy = async () => {\n const didCopy = await copy(documentId);\n if (didCopy) {\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'content-manager.actions.copy-documentId.success',\n defaultMessage: 'Document ID copied to clipboard',\n }),\n });\n }\n };\n\n return (\n <>\n <Menu.Separator />\n <Menu.Item onSelect={handleCopy} startIcon={<Duplicate />}>\n {formatMessage({\n id: 'content-manager.actions.copy-documentId.label',\n defaultMessage: 'Copy document ID',\n })}\n </Menu.Item>\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Information\n * -----------------------------------------------------------------------------------------------*/\n\ninterface InformationProps {\n activeTab: 'draft' | 'published';\n}\n\nconst Information = ({ activeTab }: InformationProps) => {\n const { formatMessage } = useIntl();\n const { document, meta, id, collectionType } = useDoc();\n\n if (!document?.id && !id) {\n return null;\n }\n\n /**\n * Because in the backend separate entries are made for draft and published\n * documents, the creator fields are different for each of them. For example,\n * you could make your draft in January and then publish it for the first time\n * in Feb. This would make the createdAt value for the published entry in Feb\n * but really we want to show the document as a whole. The draft entry will also\n * never have the publishedAt values.\n *\n * So, we decipher which document to show the creator for based on the activeTab.\n */\n\n const createAndUpdateDocument =\n activeTab === 'draft'\n ? document\n : meta?.availableStatus?.find((status) => status.publishedAt === null);\n\n const publishDocument =\n activeTab === 'published'\n ? document\n : meta?.availableStatus?.find((status) => status.publishedAt !== null);\n\n const creator = createAndUpdateDocument?.[CREATED_BY_ATTRIBUTE_NAME]\n ? getDisplayName(createAndUpdateDocument[CREATED_BY_ATTRIBUTE_NAME])\n : null;\n\n const updator = createAndUpdateDocument?.[UPDATED_BY_ATTRIBUTE_NAME]\n ? getDisplayName(createAndUpdateDocument[UPDATED_BY_ATTRIBUTE_NAME])\n : null;\n\n const information: Array<{ isDisplayed?: boolean; label: string; value: React.ReactNode }> = [\n {\n isDisplayed: !!publishDocument?.[PUBLISHED_AT_ATTRIBUTE_NAME],\n label: formatMessage({\n id: 'content-manager.containers.edit.information.last-published.label',\n defaultMessage: 'Published',\n }),\n value: formatMessage(\n {\n id: 'content-manager.containers.edit.information.last-published.value',\n defaultMessage: `{time}{isAnonymous, select, true {} other { by {author}}}`,\n },\n {\n time: (\n <RelativeTime timestamp={new Date(publishDocument?.[PUBLISHED_AT_ATTRIBUTE_NAME])} />\n ),\n isAnonymous: !publishDocument?.[PUBLISHED_BY_ATTRIBUTE_NAME],\n author: publishDocument?.[PUBLISHED_BY_ATTRIBUTE_NAME]\n ? getDisplayName(publishDocument?.[PUBLISHED_BY_ATTRIBUTE_NAME])\n : null,\n }\n ),\n },\n {\n isDisplayed: !!createAndUpdateDocument?.[UPDATED_AT_ATTRIBUTE_NAME],\n label: formatMessage({\n id: 'content-manager.containers.edit.information.last-draft.label',\n defaultMessage: 'Updated',\n }),\n value: formatMessage(\n {\n id: 'content-manager.containers.edit.information.last-draft.value',\n defaultMessage: `{time}{isAnonymous, select, true {} other { by {author}}}`,\n },\n {\n time: (\n <RelativeTime\n timestamp={new Date(createAndUpdateDocument?.[UPDATED_AT_ATTRIBUTE_NAME])}\n />\n ),\n isAnonymous: !updator,\n author: updator,\n }\n ),\n },\n {\n isDisplayed: !!createAndUpdateDocument?.[CREATED_AT_ATTRIBUTE_NAME],\n label: formatMessage({\n id: 'content-manager.containers.edit.information.document.label',\n defaultMessage: 'Created',\n }),\n value: formatMessage(\n {\n id: 'content-manager.containers.edit.information.document.value',\n defaultMessage: `{time}{isAnonymous, select, true {} other { by {author}}}`,\n },\n {\n time: (\n <RelativeTime\n timestamp={new Date(createAndUpdateDocument?.[CREATED_AT_ATTRIBUTE_NAME])}\n />\n ),\n isAnonymous: !creator,\n author: creator,\n }\n ),\n },\n {\n isDisplayed: collectionType !== SINGLE_TYPES && !!(document?.documentId ?? id),\n label: formatMessage({\n id: 'content-manager.containers.edit.information.documentId.label',\n defaultMessage: 'Document ID',\n }),\n value: document?.documentId ?? id ?? '',\n },\n ].filter((info) => info.isDisplayed);\n\n return (\n <Flex\n borderWidth=\"1px 0 0 0\"\n borderStyle=\"solid\"\n borderColor=\"neutral150\"\n direction=\"column\"\n marginTop={1}\n tag=\"dl\"\n padding={5}\n gap={3}\n alignItems=\"flex-start\"\n /**\n * The menu content has a padding of 4px, but we want our divider (the border top applied) to\n * be flush with the menu content. So we need to adjust the margin & width to account for the padding.\n */\n marginLeft=\"-0.4rem\"\n marginRight=\"-0.4rem\"\n width=\"calc(100% + 8px)\"\n >\n {information.map((info) => (\n <Flex gap={1} direction=\"column\" alignItems=\"flex-start\" key={info.label}>\n <Typography tag=\"dt\" variant=\"pi\" fontWeight=\"bold\">\n {info.label}\n </Typography>\n <Typography\n tag=\"dd\"\n variant=\"pi\"\n textColor=\"neutral600\"\n style={{ wordBreak: 'break-word' }}\n >\n {info.value}\n </Typography>\n </Flex>\n ))}\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * HeaderActions\n * -----------------------------------------------------------------------------------------------*/\n\ninterface HeaderActionsProps {\n actions: Array<HeaderActionDescription & { id: string }>;\n}\n\nconst HeaderActions = ({ actions }: HeaderActionsProps) => {\n const [dialogId, setDialogId] = React.useState<string | null>(null);\n\n const handleClick =\n (action: HeaderActionDescription & { id: string }) => async (e: React.MouseEvent) => {\n if (!('options' in action)) {\n const { onClick = () => false, dialog, id } = action;\n\n const muteDialog = await onClick(e);\n\n if (dialog && !muteDialog) {\n e.preventDefault();\n setDialogId(id);\n }\n }\n };\n\n const handleClose = () => {\n setDialogId(null);\n };\n\n return (\n <Flex gap={1}>\n {actions.map((action) => {\n if (action.options) {\n return (\n <SingleSelect\n key={action.id}\n size=\"S\"\n // @ts-expect-error – the DS will handle numbers, but we're not allowing the API.\n onChange={action.onSelect}\n aria-label={action.label}\n {...action}\n >\n {action.options.map(({ label, ...option }) => {\n if (option._render) {\n return option._render();\n }\n\n return (\n <SingleSelectOption key={option.value} {...option}>\n {label}\n </SingleSelectOption>\n );\n })}\n </SingleSelect>\n );\n } else if (action._status) {\n return (\n <HeaderActionStatus tooltip={action._status?.tooltip} key={action.id}>\n {action._status.message}\n </HeaderActionStatus>\n );\n } else {\n return (\n <React.Fragment key={action.id}>\n <IconButton\n disabled={action.disabled}\n label={action.label}\n size=\"S\"\n onClick={handleClick(action)}\n >\n {action.icon}\n </IconButton>\n {action.dialog ? (\n <HeaderActionDialog\n {...action.dialog}\n isOpen={dialogId === action.id}\n onClose={handleClose}\n />\n ) : null}\n </React.Fragment>\n );\n }\n })}\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * HeaderActionStatus\n * -----------------------------------------------------------------------------------------------*/\n\ninterface HeaderActionStatusProps {\n tooltip: React.ReactNode;\n children: React.ReactNode;\n}\n\nconst HeaderActionStatus = ({ tooltip, children }: HeaderActionStatusProps) => {\n const [open, setOpen] = React.useState(false);\n // Debounce the open/close so the user can hover over the popover content before it closes\n const debouncedOpen = useDebounce(open, 100);\n\n const handleMouseEnter = () => {\n if (tooltip) {\n setOpen(true);\n }\n };\n const handleMouseLeave = () => {\n if (tooltip) {\n setOpen(false);\n }\n };\n\n return (\n <Popover.Root open={debouncedOpen} onOpenChange={setOpen}>\n <Popover.Anchor\n style={{ alignSelf: 'stretch' }}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n aria-describedby=\"document-header-action-status\"\n >\n <Box height=\"100%\">{children}</Box>\n </Popover.Anchor>\n <Popover.Content\n role=\"tooltip\"\n id=\"document-header-action-status\"\n side=\"bottom\"\n align=\"center\"\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n >\n {tooltip}\n </Popover.Content>\n </Popover.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * HeaderActionDialog\n * -----------------------------------------------------------------------------------------------*/\ninterface HeaderActionDialogProps {\n onClose: () => void;\n onCancel?: () => Promise<void>;\n title: string;\n content?: React.ReactNode | ((props: { onClose: () => void }) => React.ReactNode);\n isOpen: boolean;\n}\n\nconst HeaderActionDialog = ({\n onClose,\n onCancel,\n title,\n content: Content,\n isOpen,\n}: HeaderActionDialogProps) => {\n const handleClose = async () => {\n if (onCancel) {\n await onCancel();\n }\n\n onClose();\n };\n\n return (\n <Dialog.Root open={isOpen} onOpenChange={handleClose}>\n <Dialog.Content>\n <Dialog.Header>{title}</Dialog.Header>\n {typeof Content === 'function' ? <Content onClose={handleClose} /> : Content}\n </Dialog.Content>\n </Dialog.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * DocumentActionComponents\n * -----------------------------------------------------------------------------------------------*/\n\nconst ConfigureTheViewAction: DocumentActionComponent = ({ collectionType, model }) => {\n const navigate = useNavigate();\n const { formatMessage } = useIntl();\n const isDesktop = useIsDesktop();\n\n return isDesktop\n ? {\n label: formatMessage({\n id: 'app.links.configure-view',\n defaultMessage: 'Configure the view',\n }),\n icon: <ListPlus />,\n onClick: () => {\n navigate(`../${collectionType}/${model}/configurations/edit`);\n },\n position: 'header',\n }\n : null;\n};\n\nConfigureTheViewAction.type = 'configure-the-view';\nConfigureTheViewAction.position = 'header';\n\nconst EditTheModelAction: DocumentActionComponent = ({ model }) => {\n const navigate = useNavigate();\n const { formatMessage } = useIntl();\n const isDesktop = useIsDesktop();\n\n return isDesktop\n ? {\n label: formatMessage({\n id: 'content-manager.link-to-ctb',\n defaultMessage: 'Edit the model',\n }),\n icon: <Pencil />,\n onClick: () => {\n navigate(`/plugins/content-type-builder/content-types/${model}`);\n },\n position: 'header',\n }\n : null;\n};\n\nEditTheModelAction.type = 'edit-the-model';\nEditTheModelAction.position = 'header';\n\nconst DeleteAction: DocumentActionComponent = ({ documentId, model, collectionType, document }) => {\n const navigate = useNavigate();\n const { formatMessage } = useIntl();\n const listViewPathMatch = useMatch(LIST_PATH);\n const canDelete = useDocumentRBAC('DeleteAction', (state) => state.canDelete);\n const { delete: deleteAction, isLoading } = useDocumentActions();\n const { toggleNotification } = useNotification();\n const setSubmitting = useForm('DeleteAction', (state) => state.setSubmitting);\n const isLocalized = document?.locale != null;\n\n return {\n disabled: !canDelete || !document,\n label: formatMessage(\n {\n id: 'content-manager.actions.delete.label',\n defaultMessage: 'Delete entry{isLocalized, select, true { (all locales)} other {}}',\n },\n { isLocalized }\n ),\n icon: <Trash />,\n dialog: {\n type: 'dialog',\n title: formatMessage({\n id: 'app.components.ConfirmDialog.title',\n defaultMessage: 'Confirmation',\n }),\n content: (\n <Flex direction=\"column\" gap={2}>\n <WarningCircle width=\"24px\" height=\"24px\" fill=\"danger600\" />\n <Typography tag=\"p\" variant=\"omega\" textAlign=\"center\">\n {formatMessage({\n id: 'content-manager.actions.delete.dialog.body',\n defaultMessage: 'Are you sure?',\n })}\n </Typography>\n </Flex>\n ),\n loading: isLoading,\n onConfirm: async () => {\n /**\n * If we have a match, we're in the list view\n * and therefore not in a form and shouldn't be\n * trying to set the submitting value.\n */\n if (!listViewPathMatch) {\n setSubmitting(true);\n }\n try {\n if (!documentId && collectionType !== SINGLE_TYPES) {\n console.error(\n \"You're trying to delete a document without an id, this is likely a bug with Strapi. Please open an issue.\"\n );\n\n toggleNotification({\n message: formatMessage({\n id: 'content-manager.actions.delete.error',\n defaultMessage: 'An error occurred while trying to delete the document.',\n }),\n type: 'danger',\n });\n\n return;\n }\n\n const res = await deleteAction({\n documentId,\n model,\n collectionType,\n params: {\n locale: '*',\n },\n });\n\n if (!('error' in res)) {\n navigate({ pathname: `../${collectionType}/${model}` }, { replace: true });\n }\n } finally {\n if (!listViewPathMatch) {\n setSubmitting(false);\n }\n }\n },\n },\n variant: 'danger',\n position: ['header', 'table-row'],\n };\n};\n\nDeleteAction.type = 'delete';\nDeleteAction.position = ['header', 'table-row'];\n\nconst DEFAULT_HEADER_ACTIONS = [EditTheModelAction, ConfigureTheViewAction, DeleteAction];\n\nexport { Header, DEFAULT_HEADER_ACTIONS };\nexport type { HeaderProps, HeaderActionDescription };\n"],"names":["Header","isCreating","status","title","documentTitle","formatMessage","useIntl","isCloning","useMatch","CLONE_PATH","isMobile","useIsMobile","params","useParams","query","activeTab","useQueryParams","id","defaultMessage","_jsxs","Flex","direction","alignItems","paddingLeft","RESPONSIVE_DEFAULT_SPACING","paddingRight","paddingTop","initial","medium","paddingBottom","gap","_jsx","BackButton","fallback","collectionType","SINGLE_TYPES","undefined","COLLECTION_TYPES","slug","width","justifyContent","overflow","Typography","variant","tag","Box","display","HeaderDocumentActions","HeaderToolbar","marginTop","DocumentStatus","model","document","meta","useDoc","plugins","useStrapiApp","state","DescriptionComponentRenderer","props","documentId","descriptions","apis","getDocumentActions","actions","headerActions","filter","action","positions","Array","isArray","position","includes","DocumentActionsMenu","label","CopyDocumentIdMenuItem","Information","getHeaderActions","length","HeaderActions","toggleNotification","useNotification","copy","useClipboard","handleCopy","didCopy","type","message","_Fragment","Menu","Separator","Item","onSelect","startIcon","Duplicate","createAndUpdateDocument","availableStatus","find","publishedAt","publishDocument","creator","CREATED_BY_ATTRIBUTE_NAME","getDisplayName","updator","UPDATED_BY_ATTRIBUTE_NAME","information","isDisplayed","PUBLISHED_AT_ATTRIBUTE_NAME","value","time","RelativeTime","timestamp","Date","isAnonymous","PUBLISHED_BY_ATTRIBUTE_NAME","author","UPDATED_AT_ATTRIBUTE_NAME","CREATED_AT_ATTRIBUTE_NAME","info","borderWidth","borderStyle","borderColor","padding","marginLeft","marginRight","map","fontWeight","textColor","style","wordBreak","dialogId","setDialogId","React","useState","handleClick","e","onClick","dialog","muteDialog","preventDefault","handleClose","options","SingleSelect","size","onChange","aria-label","option","_render","SingleSelectOption","_status","HeaderActionStatus","tooltip","Fragment","IconButton","disabled","icon","HeaderActionDialog","isOpen","onClose","children","open","setOpen","debouncedOpen","useDebounce","handleMouseEnter","handleMouseLeave","Popover","Root","onOpenChange","Anchor","alignSelf","onMouseEnter","onMouseLeave","aria-describedby","height","Content","role","side","align","onCancel","content","Dialog","ConfigureTheViewAction","navigate","useNavigate","isDesktop","useIsDesktop","ListPlus","EditTheModelAction","Pencil","DeleteAction","listViewPathMatch","LIST_PATH","canDelete","useDocumentRBAC","delete","deleteAction","isLoading","useDocumentActions","setSubmitting","useForm","isLocalized","locale","Trash","WarningCircle","fill","textAlign","loading","onConfirm","console","error","res","pathname","replace","DEFAULT_HEADER_ACTIONS"],"mappings":"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"}
@@ -21,7 +21,8 @@ var Relations = require('./FormInputs/Relations/Relations.js');
21
21
  var UID = require('./FormInputs/UID.js');
22
22
  var Field$1 = require('./FormInputs/Wysiwyg/Field.js');
23
23
 
24
- function _interopNamespaceDefault(e) {
24
+ function _interopNamespace(e) {
25
+ if (e && e.__esModule) return e;
25
26
  var n = Object.create(null);
26
27
  if (e) {
27
28
  Object.keys(e).forEach(function (k) {
@@ -38,7 +39,7 @@ function _interopNamespaceDefault(e) {
38
39
  return Object.freeze(n);
39
40
  }
40
41
 
41
- var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
42
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
42
43
 
43
44
  /**
44
45
  * @internal
@@ -1 +1 @@
1
- {"version":3,"file":"InputRenderer.js","sources":["../../../../../admin/src/pages/EditView/components/InputRenderer.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n useStrapiApp,\n useForm,\n InputRenderer as FormInputRenderer,\n useField,\n createRulesEngine,\n type JsonLogicCondition,\n} from '@strapi/admin/strapi-admin';\nimport { useIntl } from 'react-intl';\n\nimport { SINGLE_TYPES } from '../../../constants/collections';\nimport { useDocumentRBAC } from '../../../features/DocumentRBAC';\nimport { type UseDocument } from '../../../hooks/useDocument';\nimport { useDocumentContext } from '../../../hooks/useDocumentContext';\nimport { useDocumentLayout } from '../../../hooks/useDocumentLayout';\nimport { useLazyComponents } from '../../../hooks/useLazyComponents';\nimport { useHasInputPopoverParent } from '../../../preview/components/InputPopover';\nimport { usePreviewInputManager } from '../../../preview/hooks/usePreviewInputManager';\nimport {\n getConditionDependencyPaths,\n getConditionDependencySubscriptionValue,\n} from '../../../utils/conditionalFields';\nimport { getDirectParent } from '../utils/data';\n\nimport { BlocksInput } from './FormInputs/BlocksInput/BlocksInput';\nimport { ComponentInput } from './FormInputs/Component/Input';\nimport { DynamicZone, useDynamicZone } from './FormInputs/DynamicZone/Field';\nimport { NotAllowedInput } from './FormInputs/NotAllowed';\nimport { RelationsInput } from './FormInputs/Relations/Relations';\nimport { UIDInput } from './FormInputs/UID';\nimport { Wysiwyg } from './FormInputs/Wysiwyg/Field';\n\nimport type { EditFieldLayout } from '../../../hooks/useDocumentLayout';\nimport type { Schema } from '@strapi/types';\nimport type { DistributiveOmit } from 'react-redux';\n\ntype InputRendererProps = DistributiveOmit<EditFieldLayout, 'size'> & {\n document?: ReturnType<UseDocument>;\n};\n\n/**\n * @internal\n *\n * @description An abstraction around the regular form input renderer designed\n * specifically to be used in the EditView of the content-manager this understands\n * the complete EditFieldLayout and will handle RBAC conditions and rendering CM specific\n * components such as Blocks / Relations.\n */\nconst BaseInputRenderer = ({\n visible,\n hint: providedHint,\n document: providedDocument,\n ...inputProps\n}: InputRendererProps) => {\n const { currentDocument, currentDocumentMeta } = useDocumentContext('DynamicComponent');\n // Most edit-view fields can read the document from context, which avoids threading a\n // frequently-changing `document` prop through nested component/DZ trees and reduces churn.\n // Keep `providedDocument` as an explicit override for callers outside that default flow.\n const document = providedDocument ?? currentDocument;\n const localeKey = document?.document?.locale || 'default';\n const {\n edit: { components },\n } = useDocumentLayout(currentDocumentMeta.model);\n\n const collectionType =\n document.schema?.kind === 'collectionType' ? 'collection-types' : 'single-types';\n\n const isInDynamicZone = useDynamicZone('isInDynamicZone', (state) => state.isInDynamicZone);\n const isInPreviewPopover = useHasInputPopoverParent();\n const shouldIgnorePermissions = isInDynamicZone || isInPreviewPopover;\n\n const isFormDisabled = useForm('InputRenderer', (state) => state.disabled);\n const canCreateFields = useDocumentRBAC('InputRenderer', (rbac) => rbac.canCreateFields);\n const canReadFields = useDocumentRBAC('InputRenderer', (rbac) => rbac.canReadFields);\n const canUpdateFields = useDocumentRBAC('InputRenderer', (rbac) => rbac.canUpdateFields);\n const canUserAction = useDocumentRBAC('InputRenderer', (rbac) => rbac.canUserAction);\n\n let idToCheck = document.document?.documentId;\n if (collectionType === SINGLE_TYPES) {\n idToCheck = document?.document?.documentId;\n }\n\n const editableFields = idToCheck ? canUpdateFields : canCreateFields;\n const readableFields = idToCheck ? canReadFields : canCreateFields;\n\n // Everything preview related\n const previewProps = usePreviewInputManager(inputProps.name, inputProps.attribute);\n const props = { ...inputProps, ...previewProps };\n\n /**\n * Component fields are always readable and editable,\n * however the fields within them may not be.\n */\n const canUserReadField = canUserAction(props.name, readableFields, props.type);\n const canUserEditField = canUserAction(props.name, editableFields, props.type);\n\n const fields = useStrapiApp('InputRenderer', (app) => app.fields);\n const { lazyComponentStore } = useLazyComponents(\n attributeHasCustomFieldProperty(props.attribute) ? [props.attribute.customField] : undefined\n );\n\n const hint = useFieldHint(providedHint, props.attribute);\n const renderComponentInput = React.useCallback(\n (componentInputProps: InputRendererProps) => (\n <MemoizedInputRenderer\n key={`input-${componentInputProps.name}-${localeKey}`}\n {...componentInputProps}\n />\n ),\n [localeKey]\n );\n\n // We pass field in case of Custom Fields to keep backward compatibility\n const field = useField(props.name);\n\n if (!visible) {\n return null;\n }\n\n /**\n * If the user can't read the field then we don't want to ever render it.\n */\n if (!canUserReadField && !shouldIgnorePermissions) {\n return <NotAllowedInput hint={hint} {...props} />;\n }\n\n const fieldIsDisabled =\n (!canUserEditField && !shouldIgnorePermissions) || props.disabled || isFormDisabled;\n\n /**\n * Because a custom field has a unique prop but the type could be confused with either\n * the useField hook or the type of the field we need to handle it separately and first.\n */\n if (attributeHasCustomFieldProperty(props.attribute)) {\n const CustomInput = lazyComponentStore[props.attribute.customField];\n\n if (CustomInput) {\n return (\n <CustomInput\n {...props}\n {...field}\n // @ts-expect-error – TODO: fix this type error in the useLazyComponents hook.\n hint={hint}\n disabled={fieldIsDisabled}\n />\n );\n }\n\n return (\n <FormInputRenderer\n key={`input-${props.name}-${localeKey}`}\n {...props}\n {...previewProps}\n hint={hint}\n // @ts-expect-error – this workaround lets us display that the custom field is missing.\n type={props.attribute.customField}\n disabled={fieldIsDisabled}\n />\n );\n }\n\n /**\n * This is where we handle ONLY the fields from the `useLibrary` hook.\n */\n const addedInputTypes = Object.keys(fields);\n if (!attributeHasCustomFieldProperty(props.attribute) && addedInputTypes.includes(props.type)) {\n const CustomInput = fields[props.type];\n return (\n <CustomInput\n key={`input-${props.name}-${localeKey}`}\n {...props}\n // @ts-expect-error – TODO: fix this type error in the useLazyComponents hook.\n hint={hint}\n disabled={fieldIsDisabled}\n />\n );\n }\n\n /**\n * These include the content-manager specific fields, failing that we fall back\n * to the more generic form input renderer.\n */\n switch (props.type) {\n case 'blocks':\n return (\n <BlocksInput\n key={`input-${props.name}-${localeKey}`}\n {...props}\n hint={hint}\n type={props.type}\n disabled={fieldIsDisabled}\n />\n );\n case 'component':\n // Preview focus/blur handlers are not used for data-structure roots (component/dynamic zone).\n // Dropping them avoids unstable function props cascading through memoized component trees.\n const { onBlur: _onComponentBlur, onFocus: _onComponentFocus, ...componentProps } = props;\n\n return (\n <ComponentInput\n key={`input-${props.name}-${localeKey}`}\n {...componentProps}\n hint={hint}\n layout={components[props.attribute.component].layout}\n disabled={fieldIsDisabled}\n >\n {renderComponentInput}\n </ComponentInput>\n );\n case 'dynamiczone':\n // Same rationale as `component` above: keep data-structure root props stable.\n const { onBlur: _onDzBlur, onFocus: _onDzFocus, ...dynamicZoneProps } = props;\n\n return (\n <DynamicZone\n key={`input-${props.name}-${localeKey}`}\n {...dynamicZoneProps}\n hint={hint}\n disabled={fieldIsDisabled}\n />\n );\n case 'relation':\n return (\n <RelationsInput\n key={`input-${props.name}-${localeKey}`}\n {...props}\n hint={hint}\n disabled={fieldIsDisabled}\n />\n );\n case 'richtext':\n return (\n <Wysiwyg\n key={`input-${props.name}-${localeKey}`}\n {...props}\n hint={hint}\n type={props.type}\n disabled={fieldIsDisabled}\n />\n );\n case 'uid':\n // These props are not needed for the generic form input renderer.\n const { unique: _uniqueUID, ...restUIDProps } = props;\n return (\n <UIDInput\n key={`input-${props.name}-${localeKey}`}\n {...restUIDProps}\n hint={hint}\n type={props.type}\n disabled={fieldIsDisabled}\n />\n );\n /**\n * Enumerations are a special case because they require options.\n */\n case 'enumeration':\n return (\n <FormInputRenderer\n key={`input-${props.name}-${localeKey}`}\n {...props}\n {...previewProps}\n hint={hint}\n options={props.attribute.enum.map((value) => ({ value }))}\n // @ts-expect-error – Temp workaround so we don't forget custom-fields don't work!\n type={props.customField ? 'custom-field' : props.type}\n disabled={fieldIsDisabled}\n />\n );\n default:\n // These props are not needed for the generic form input renderer.\n const { unique: _unique, mainField: _mainField, ...restProps } = props;\n return (\n <FormInputRenderer\n key={`input-${props.name}-${localeKey}`}\n {...restProps}\n {...previewProps}\n hint={hint}\n // @ts-expect-error – Temp workaround so we don't forget custom-fields don't work!\n type={props.customField ? 'custom-field' : props.type}\n disabled={fieldIsDisabled}\n />\n );\n }\n};\n\n// Reuse one rules engine instance instead of recreating it for every field render.\nconst rulesEngine = createRulesEngine();\n\n/**\n * A wrapper around BaseInputRenderer that conditionally renders it depending on the attribute's condition.\n */\nconst ConditionAwareInputRenderer = ({\n condition,\n ...props\n}: InputRendererProps & { condition: JsonLogicCondition }) => {\n // Extract only the field paths the visibility rule depends on so unrelated form changes\n // do not force this conditional field to re-render.\n const conditionDependencyPaths = React.useMemo(\n () => getConditionDependencyPaths(condition),\n [condition]\n );\n const getValues = useForm(\n 'ConditionalInputRenderer',\n (state) => (state as typeof state & { getValues: () => unknown }).getValues\n );\n const conditionSubscriptionValue = useForm('ConditionalInputRenderer', (state) => {\n // Subscribe to a small, comparable snapshot of the parent scope instead of all form values.\n return getConditionDependencySubscriptionValue(\n getDirectParent(state.values, props.name),\n conditionDependencyPaths\n );\n });\n\n // When dependencies are known, read the latest parent scope lazily via getValues() so the\n // rule still evaluates against fresh data without subscribing to every form change.\n const targetValues =\n conditionDependencyPaths === null\n ? conditionSubscriptionValue\n : getDirectParent(getValues(), props.name);\n\n const isVisible = rulesEngine.evaluate(condition, targetValues);\n\n if (!isVisible) {\n return null;\n }\n\n return <BaseInputRenderer {...props} />;\n};\n\nconst attributeHasCustomFieldProperty = (\n attribute: Schema.Attribute.AnyAttribute\n): attribute is Schema.Attribute.AnyAttribute & Schema.Attribute.CustomField<string> =>\n 'customField' in attribute && typeof attribute.customField === 'string';\n\nconst useFieldHint = (\n hint: React.ReactNode = undefined,\n attribute: Schema.Attribute.AnyAttribute\n) => {\n const { formatMessage } = useIntl();\n\n const { maximum, minimum } = getMinMax(attribute);\n\n if (!maximum && !minimum) {\n return hint;\n }\n\n const units = ['string', 'uid', 'richtext', 'email', 'password', 'text'].includes(attribute.type)\n ? formatMessage(\n {\n id: 'content-manager.form.Input.hint.character.unit',\n defaultMessage: '{maxValue, plural, one { character} other { characters}}',\n },\n {\n maxValue: Math.max(minimum || 0, maximum || 0),\n }\n )\n : null;\n\n const hasMinAndMax = typeof minimum === 'number' && typeof maximum === 'number';\n\n return formatMessage(\n {\n id: 'content-manager.form.Input.hint.text',\n defaultMessage:\n '{min, select, undefined {} other {min. {min}}}{divider}{max, select, undefined {} other {max. {max}}}{unit}{br}{description}',\n },\n {\n min: minimum,\n max: maximum,\n description: hint,\n unit: units,\n divider: hasMinAndMax\n ? formatMessage({\n id: 'content-manager.form.Input.hint.minMaxDivider',\n defaultMessage: ' / ',\n })\n : null,\n br: <br />,\n }\n );\n};\n\nconst getMinMax = (attribute: Schema.Attribute.AnyAttribute) => {\n if ('min' in attribute || 'max' in attribute) {\n return {\n maximum: !Number.isNaN(Number(attribute.max)) ? Number(attribute.max) : undefined,\n minimum: !Number.isNaN(Number(attribute.min)) ? Number(attribute.min) : undefined,\n };\n } else if ('maxLength' in attribute || 'minLength' in attribute) {\n return { maximum: attribute.maxLength, minimum: attribute.minLength };\n } else {\n return { maximum: undefined, minimum: undefined };\n }\n};\n\n/**\n * Conditionally routes the exported InputRender component towards ConditionalInputRenderer\n * (when there's a JSON logic condition on the attribute, or BaseInputRenderer otherwise.\n * We do this because rendering a conditional field requires access to the values of\n * other form fields, which causes many re-renders and performance issues on complex content\n * types. By splitting the component into two, we isolate the performance issue to\n * conditional fields only, not all edit view fields.\n */\nconst MemoizedInputRenderer = React.memo((props: InputRendererProps) => {\n const condition = props.attribute.conditions?.visible;\n if (condition) {\n return <ConditionAwareInputRenderer {...props} condition={condition} />;\n }\n\n return <BaseInputRenderer {...props} />;\n});\n\nexport type { InputRendererProps };\nexport { MemoizedInputRenderer as InputRenderer, useFieldHint };\n"],"names":["BaseInputRenderer","visible","hint","providedHint","document","providedDocument","inputProps","currentDocument","currentDocumentMeta","useDocumentContext","localeKey","locale","edit","components","useDocumentLayout","model","collectionType","schema","kind","isInDynamicZone","useDynamicZone","state","isInPreviewPopover","useHasInputPopoverParent","shouldIgnorePermissions","isFormDisabled","useForm","disabled","canCreateFields","useDocumentRBAC","rbac","canReadFields","canUpdateFields","canUserAction","idToCheck","documentId","SINGLE_TYPES","editableFields","readableFields","previewProps","usePreviewInputManager","name","attribute","props","canUserReadField","type","canUserEditField","fields","useStrapiApp","app","lazyComponentStore","useLazyComponents","attributeHasCustomFieldProperty","customField","undefined","useFieldHint","renderComponentInput","React","useCallback","componentInputProps","_jsx","MemoizedInputRenderer","field","useField","NotAllowedInput","fieldIsDisabled","CustomInput","FormInputRenderer","addedInputTypes","Object","keys","includes","BlocksInput","onBlur","_onComponentBlur","onFocus","_onComponentFocus","componentProps","ComponentInput","layout","component","_onDzBlur","_onDzFocus","dynamicZoneProps","DynamicZone","RelationsInput","Wysiwyg","unique","_uniqueUID","restUIDProps","UIDInput","options","enum","map","value","_unique","mainField","_mainField","restProps","rulesEngine","createRulesEngine","ConditionAwareInputRenderer","condition","conditionDependencyPaths","useMemo","getConditionDependencyPaths","getValues","conditionSubscriptionValue","getConditionDependencySubscriptionValue","getDirectParent","values","targetValues","isVisible","evaluate","formatMessage","useIntl","maximum","minimum","getMinMax","units","id","defaultMessage","maxValue","Math","max","hasMinAndMax","min","description","unit","divider","br","Number","isNaN","maxLength","minLength","memo","conditions"],"mappings":"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"}
1
+ {"version":3,"file":"InputRenderer.js","sources":["../../../../../admin/src/pages/EditView/components/InputRenderer.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n useStrapiApp,\n useForm,\n InputRenderer as FormInputRenderer,\n useField,\n createRulesEngine,\n type JsonLogicCondition,\n} from '@strapi/admin/strapi-admin';\nimport { useIntl } from 'react-intl';\n\nimport { SINGLE_TYPES } from '../../../constants/collections';\nimport { useDocumentRBAC } from '../../../features/DocumentRBAC';\nimport { type UseDocument } from '../../../hooks/useDocument';\nimport { useDocumentContext } from '../../../hooks/useDocumentContext';\nimport { useDocumentLayout } from '../../../hooks/useDocumentLayout';\nimport { useLazyComponents } from '../../../hooks/useLazyComponents';\nimport { useHasInputPopoverParent } from '../../../preview/components/InputPopover';\nimport { usePreviewInputManager } from '../../../preview/hooks/usePreviewInputManager';\nimport {\n getConditionDependencyPaths,\n getConditionDependencySubscriptionValue,\n} from '../../../utils/conditionalFields';\nimport { getDirectParent } from '../utils/data';\n\nimport { BlocksInput } from './FormInputs/BlocksInput/BlocksInput';\nimport { ComponentInput } from './FormInputs/Component/Input';\nimport { DynamicZone, useDynamicZone } from './FormInputs/DynamicZone/Field';\nimport { NotAllowedInput } from './FormInputs/NotAllowed';\nimport { RelationsInput } from './FormInputs/Relations/Relations';\nimport { UIDInput } from './FormInputs/UID';\nimport { Wysiwyg } from './FormInputs/Wysiwyg/Field';\n\nimport type { EditFieldLayout } from '../../../hooks/useDocumentLayout';\nimport type { Schema } from '@strapi/types';\nimport type { DistributiveOmit } from 'react-redux';\n\ntype InputRendererProps = DistributiveOmit<EditFieldLayout, 'size'> & {\n document?: ReturnType<UseDocument>;\n};\n\n/**\n * @internal\n *\n * @description An abstraction around the regular form input renderer designed\n * specifically to be used in the EditView of the content-manager this understands\n * the complete EditFieldLayout and will handle RBAC conditions and rendering CM specific\n * components such as Blocks / Relations.\n */\nconst BaseInputRenderer = ({\n visible,\n hint: providedHint,\n document: providedDocument,\n ...inputProps\n}: InputRendererProps) => {\n const { currentDocument, currentDocumentMeta } = useDocumentContext('DynamicComponent');\n // Most edit-view fields can read the document from context, which avoids threading a\n // frequently-changing `document` prop through nested component/DZ trees and reduces churn.\n // Keep `providedDocument` as an explicit override for callers outside that default flow.\n const document = providedDocument ?? currentDocument;\n const localeKey = document?.document?.locale || 'default';\n const {\n edit: { components },\n } = useDocumentLayout(currentDocumentMeta.model);\n\n const collectionType =\n document.schema?.kind === 'collectionType' ? 'collection-types' : 'single-types';\n\n const isInDynamicZone = useDynamicZone('isInDynamicZone', (state) => state.isInDynamicZone);\n const isInPreviewPopover = useHasInputPopoverParent();\n const shouldIgnorePermissions = isInDynamicZone || isInPreviewPopover;\n\n const isFormDisabled = useForm('InputRenderer', (state) => state.disabled);\n const canCreateFields = useDocumentRBAC('InputRenderer', (rbac) => rbac.canCreateFields);\n const canReadFields = useDocumentRBAC('InputRenderer', (rbac) => rbac.canReadFields);\n const canUpdateFields = useDocumentRBAC('InputRenderer', (rbac) => rbac.canUpdateFields);\n const canUserAction = useDocumentRBAC('InputRenderer', (rbac) => rbac.canUserAction);\n\n let idToCheck = document.document?.documentId;\n if (collectionType === SINGLE_TYPES) {\n idToCheck = document?.document?.documentId;\n }\n\n const editableFields = idToCheck ? canUpdateFields : canCreateFields;\n const readableFields = idToCheck ? canReadFields : canCreateFields;\n\n // Everything preview related\n const previewProps = usePreviewInputManager(inputProps.name, inputProps.attribute);\n const props = { ...inputProps, ...previewProps };\n\n /**\n * Component fields are always readable and editable,\n * however the fields within them may not be.\n */\n const canUserReadField = canUserAction(props.name, readableFields, props.type);\n const canUserEditField = canUserAction(props.name, editableFields, props.type);\n\n const fields = useStrapiApp('InputRenderer', (app) => app.fields);\n const { lazyComponentStore } = useLazyComponents(\n attributeHasCustomFieldProperty(props.attribute) ? [props.attribute.customField] : undefined\n );\n\n const hint = useFieldHint(providedHint, props.attribute);\n const renderComponentInput = React.useCallback(\n (componentInputProps: InputRendererProps) => (\n <MemoizedInputRenderer\n key={`input-${componentInputProps.name}-${localeKey}`}\n {...componentInputProps}\n />\n ),\n [localeKey]\n );\n\n // We pass field in case of Custom Fields to keep backward compatibility\n const field = useField(props.name);\n\n if (!visible) {\n return null;\n }\n\n /**\n * If the user can't read the field then we don't want to ever render it.\n */\n if (!canUserReadField && !shouldIgnorePermissions) {\n return <NotAllowedInput hint={hint} {...props} />;\n }\n\n const fieldIsDisabled =\n (!canUserEditField && !shouldIgnorePermissions) || props.disabled || isFormDisabled;\n\n /**\n * Because a custom field has a unique prop but the type could be confused with either\n * the useField hook or the type of the field we need to handle it separately and first.\n */\n if (attributeHasCustomFieldProperty(props.attribute)) {\n const CustomInput = lazyComponentStore[props.attribute.customField];\n\n if (CustomInput) {\n return (\n <CustomInput\n {...props}\n {...field}\n // @ts-expect-error – TODO: fix this type error in the useLazyComponents hook.\n hint={hint}\n disabled={fieldIsDisabled}\n />\n );\n }\n\n return (\n <FormInputRenderer\n key={`input-${props.name}-${localeKey}`}\n {...props}\n {...previewProps}\n hint={hint}\n // @ts-expect-error – this workaround lets us display that the custom field is missing.\n type={props.attribute.customField}\n disabled={fieldIsDisabled}\n />\n );\n }\n\n /**\n * This is where we handle ONLY the fields from the `useLibrary` hook.\n */\n const addedInputTypes = Object.keys(fields);\n if (!attributeHasCustomFieldProperty(props.attribute) && addedInputTypes.includes(props.type)) {\n const CustomInput = fields[props.type];\n return (\n <CustomInput\n key={`input-${props.name}-${localeKey}`}\n {...props}\n // @ts-expect-error – TODO: fix this type error in the useLazyComponents hook.\n hint={hint}\n disabled={fieldIsDisabled}\n />\n );\n }\n\n /**\n * These include the content-manager specific fields, failing that we fall back\n * to the more generic form input renderer.\n */\n switch (props.type) {\n case 'blocks':\n return (\n <BlocksInput\n key={`input-${props.name}-${localeKey}`}\n {...props}\n hint={hint}\n type={props.type}\n disabled={fieldIsDisabled}\n />\n );\n case 'component':\n // Preview focus/blur handlers are not used for data-structure roots (component/dynamic zone).\n // Dropping them avoids unstable function props cascading through memoized component trees.\n const { onBlur: _onComponentBlur, onFocus: _onComponentFocus, ...componentProps } = props;\n\n return (\n <ComponentInput\n key={`input-${props.name}-${localeKey}`}\n {...componentProps}\n hint={hint}\n layout={components[props.attribute.component].layout}\n disabled={fieldIsDisabled}\n >\n {renderComponentInput}\n </ComponentInput>\n );\n case 'dynamiczone':\n // Same rationale as `component` above: keep data-structure root props stable.\n const { onBlur: _onDzBlur, onFocus: _onDzFocus, ...dynamicZoneProps } = props;\n\n return (\n <DynamicZone\n key={`input-${props.name}-${localeKey}`}\n {...dynamicZoneProps}\n hint={hint}\n disabled={fieldIsDisabled}\n />\n );\n case 'relation':\n return (\n <RelationsInput\n key={`input-${props.name}-${localeKey}`}\n {...props}\n hint={hint}\n disabled={fieldIsDisabled}\n />\n );\n case 'richtext':\n return (\n <Wysiwyg\n key={`input-${props.name}-${localeKey}`}\n {...props}\n hint={hint}\n type={props.type}\n disabled={fieldIsDisabled}\n />\n );\n case 'uid':\n // These props are not needed for the generic form input renderer.\n const { unique: _uniqueUID, ...restUIDProps } = props;\n return (\n <UIDInput\n key={`input-${props.name}-${localeKey}`}\n {...restUIDProps}\n hint={hint}\n type={props.type}\n disabled={fieldIsDisabled}\n />\n );\n /**\n * Enumerations are a special case because they require options.\n */\n case 'enumeration':\n return (\n <FormInputRenderer\n key={`input-${props.name}-${localeKey}`}\n {...props}\n {...previewProps}\n hint={hint}\n options={props.attribute.enum.map((value) => ({ value }))}\n // @ts-expect-error – Temp workaround so we don't forget custom-fields don't work!\n type={props.customField ? 'custom-field' : props.type}\n disabled={fieldIsDisabled}\n />\n );\n default:\n // These props are not needed for the generic form input renderer.\n const { unique: _unique, mainField: _mainField, ...restProps } = props;\n return (\n <FormInputRenderer\n key={`input-${props.name}-${localeKey}`}\n {...restProps}\n {...previewProps}\n hint={hint}\n // @ts-expect-error – Temp workaround so we don't forget custom-fields don't work!\n type={props.customField ? 'custom-field' : props.type}\n disabled={fieldIsDisabled}\n />\n );\n }\n};\n\n// Reuse one rules engine instance instead of recreating it for every field render.\nconst rulesEngine = createRulesEngine();\n\n/**\n * A wrapper around BaseInputRenderer that conditionally renders it depending on the attribute's condition.\n */\nconst ConditionAwareInputRenderer = ({\n condition,\n ...props\n}: InputRendererProps & { condition: JsonLogicCondition }) => {\n // Extract only the field paths the visibility rule depends on so unrelated form changes\n // do not force this conditional field to re-render.\n const conditionDependencyPaths = React.useMemo(\n () => getConditionDependencyPaths(condition),\n [condition]\n );\n const getValues = useForm(\n 'ConditionalInputRenderer',\n (state) => (state as typeof state & { getValues: () => unknown }).getValues\n );\n const conditionSubscriptionValue = useForm('ConditionalInputRenderer', (state) => {\n // Subscribe to a small, comparable snapshot of the parent scope instead of all form values.\n return getConditionDependencySubscriptionValue(\n getDirectParent(state.values, props.name),\n conditionDependencyPaths\n );\n });\n\n // When dependencies are known, read the latest parent scope lazily via getValues() so the\n // rule still evaluates against fresh data without subscribing to every form change.\n const targetValues =\n conditionDependencyPaths === null\n ? conditionSubscriptionValue\n : getDirectParent(getValues(), props.name);\n\n const isVisible = rulesEngine.evaluate(condition, targetValues);\n\n if (!isVisible) {\n return null;\n }\n\n return <BaseInputRenderer {...props} />;\n};\n\nconst attributeHasCustomFieldProperty = (\n attribute: Schema.Attribute.AnyAttribute\n): attribute is Schema.Attribute.AnyAttribute & Schema.Attribute.CustomField<string> =>\n 'customField' in attribute && typeof attribute.customField === 'string';\n\nconst useFieldHint = (\n hint: React.ReactNode = undefined,\n attribute: Schema.Attribute.AnyAttribute\n) => {\n const { formatMessage } = useIntl();\n\n const { maximum, minimum } = getMinMax(attribute);\n\n if (!maximum && !minimum) {\n return hint;\n }\n\n const units = ['string', 'uid', 'richtext', 'email', 'password', 'text'].includes(attribute.type)\n ? formatMessage(\n {\n id: 'content-manager.form.Input.hint.character.unit',\n defaultMessage: '{maxValue, plural, one { character} other { characters}}',\n },\n {\n maxValue: Math.max(minimum || 0, maximum || 0),\n }\n )\n : null;\n\n const hasMinAndMax = typeof minimum === 'number' && typeof maximum === 'number';\n\n return formatMessage(\n {\n id: 'content-manager.form.Input.hint.text',\n defaultMessage:\n '{min, select, undefined {} other {min. {min}}}{divider}{max, select, undefined {} other {max. {max}}}{unit}{br}{description}',\n },\n {\n min: minimum,\n max: maximum,\n description: hint,\n unit: units,\n divider: hasMinAndMax\n ? formatMessage({\n id: 'content-manager.form.Input.hint.minMaxDivider',\n defaultMessage: ' / ',\n })\n : null,\n br: <br />,\n }\n );\n};\n\nconst getMinMax = (attribute: Schema.Attribute.AnyAttribute) => {\n if ('min' in attribute || 'max' in attribute) {\n return {\n maximum: !Number.isNaN(Number(attribute.max)) ? Number(attribute.max) : undefined,\n minimum: !Number.isNaN(Number(attribute.min)) ? Number(attribute.min) : undefined,\n };\n } else if ('maxLength' in attribute || 'minLength' in attribute) {\n return { maximum: attribute.maxLength, minimum: attribute.minLength };\n } else {\n return { maximum: undefined, minimum: undefined };\n }\n};\n\n/**\n * Conditionally routes the exported InputRender component towards ConditionalInputRenderer\n * (when there's a JSON logic condition on the attribute, or BaseInputRenderer otherwise.\n * We do this because rendering a conditional field requires access to the values of\n * other form fields, which causes many re-renders and performance issues on complex content\n * types. By splitting the component into two, we isolate the performance issue to\n * conditional fields only, not all edit view fields.\n */\nconst MemoizedInputRenderer = React.memo((props: InputRendererProps) => {\n const condition = props.attribute.conditions?.visible;\n if (condition) {\n return <ConditionAwareInputRenderer {...props} condition={condition} />;\n }\n\n return <BaseInputRenderer {...props} />;\n});\n\nexport type { InputRendererProps };\nexport { MemoizedInputRenderer as InputRenderer, useFieldHint };\n"],"names":["BaseInputRenderer","visible","hint","providedHint","document","providedDocument","inputProps","currentDocument","currentDocumentMeta","useDocumentContext","localeKey","locale","edit","components","useDocumentLayout","model","collectionType","schema","kind","isInDynamicZone","useDynamicZone","state","isInPreviewPopover","useHasInputPopoverParent","shouldIgnorePermissions","isFormDisabled","useForm","disabled","canCreateFields","useDocumentRBAC","rbac","canReadFields","canUpdateFields","canUserAction","idToCheck","documentId","SINGLE_TYPES","editableFields","readableFields","previewProps","usePreviewInputManager","name","attribute","props","canUserReadField","type","canUserEditField","fields","useStrapiApp","app","lazyComponentStore","useLazyComponents","attributeHasCustomFieldProperty","customField","undefined","useFieldHint","renderComponentInput","React","useCallback","componentInputProps","_jsx","MemoizedInputRenderer","field","useField","NotAllowedInput","fieldIsDisabled","CustomInput","FormInputRenderer","addedInputTypes","Object","keys","includes","BlocksInput","onBlur","_onComponentBlur","onFocus","_onComponentFocus","componentProps","ComponentInput","layout","component","_onDzBlur","_onDzFocus","dynamicZoneProps","DynamicZone","RelationsInput","Wysiwyg","unique","_uniqueUID","restUIDProps","UIDInput","options","enum","map","value","_unique","mainField","_mainField","restProps","rulesEngine","createRulesEngine","ConditionAwareInputRenderer","condition","conditionDependencyPaths","useMemo","getConditionDependencyPaths","getValues","conditionSubscriptionValue","getConditionDependencySubscriptionValue","getDirectParent","values","targetValues","isVisible","evaluate","formatMessage","useIntl","maximum","minimum","getMinMax","units","id","defaultMessage","maxValue","Math","max","hasMinAndMax","min","description","unit","divider","br","Number","isNaN","maxLength","minLength","memo","conditions"],"mappings":"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"}
@@ -11,7 +11,8 @@ var useDocument = require('../../../hooks/useDocument.js');
11
11
  var router = require('../../../router.js');
12
12
  var DocumentActions = require('./DocumentActions.js');
13
13
 
14
- function _interopNamespaceDefault(e) {
14
+ function _interopNamespace(e) {
15
+ if (e && e.__esModule) return e;
15
16
  var n = Object.create(null);
16
17
  if (e) {
17
18
  Object.keys(e).forEach(function (k) {
@@ -28,7 +29,7 @@ function _interopNamespaceDefault(e) {
28
29
  return Object.freeze(n);
29
30
  }
30
31
 
31
- var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
32
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
32
33
 
33
34
  const PanelsItems = ({ panels, setVisiblePanels, visiblePanelsLength })=>{
34
35
  React__namespace.useEffect(()=>{