@strapi/content-manager 5.48.1 → 5.50.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 (458) 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 +3 -2
  18. package/dist/admin/features/DocumentRBAC.js.map +1 -1
  19. package/dist/admin/history/components/VersionContent.js +7 -3
  20. package/dist/admin/history/components/VersionContent.js.map +1 -1
  21. package/dist/admin/history/components/VersionHeader.js +3 -2
  22. package/dist/admin/history/components/VersionHeader.js.map +1 -1
  23. package/dist/admin/history/components/VersionInputRenderer.js +3 -2
  24. package/dist/admin/history/components/VersionInputRenderer.js.map +1 -1
  25. package/dist/admin/history/pages/History.js +3 -2
  26. package/dist/admin/history/pages/History.js.map +1 -1
  27. package/dist/admin/history/routes.js +3 -2
  28. package/dist/admin/history/routes.js.map +1 -1
  29. package/dist/admin/hooks/useContentTypeSchema.js +3 -2
  30. package/dist/admin/hooks/useContentTypeSchema.js.map +1 -1
  31. package/dist/admin/hooks/useDocument.js +3 -2
  32. package/dist/admin/hooks/useDocument.js.map +1 -1
  33. package/dist/admin/hooks/useDocumentActions.js +3 -2
  34. package/dist/admin/hooks/useDocumentActions.js.map +1 -1
  35. package/dist/admin/hooks/useDocumentContext.js +3 -2
  36. package/dist/admin/hooks/useDocumentContext.js.map +1 -1
  37. package/dist/admin/hooks/useDocumentLayout.js +3 -2
  38. package/dist/admin/hooks/useDocumentLayout.js.map +1 -1
  39. package/dist/admin/hooks/useDragAndDrop.js +3 -2
  40. package/dist/admin/hooks/useDragAndDrop.js.map +1 -1
  41. package/dist/admin/hooks/useKeyboardDragAndDrop.js +3 -2
  42. package/dist/admin/hooks/useKeyboardDragAndDrop.js.map +1 -1
  43. package/dist/admin/hooks/useOnce.js +3 -2
  44. package/dist/admin/hooks/useOnce.js.map +1 -1
  45. package/dist/admin/hooks/usePersistentQueryParams.js +7 -2
  46. package/dist/admin/hooks/usePersistentQueryParams.js.map +1 -1
  47. package/dist/admin/layout.js +3 -1
  48. package/dist/admin/layout.js.map +1 -1
  49. package/dist/admin/layout.mjs +5 -3
  50. package/dist/admin/layout.mjs.map +1 -1
  51. package/dist/admin/pages/ComponentConfigurationPage.js +3 -2
  52. package/dist/admin/pages/ComponentConfigurationPage.js.map +1 -1
  53. package/dist/admin/pages/EditConfigurationPage.js +3 -2
  54. package/dist/admin/pages/EditConfigurationPage.js.map +1 -1
  55. package/dist/admin/pages/EditView/EditViewPage.js +3 -2
  56. package/dist/admin/pages/EditView/EditViewPage.js.map +1 -1
  57. package/dist/admin/pages/EditView/components/DocumentActions.js +238 -108
  58. package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
  59. package/dist/admin/pages/EditView/components/DocumentActions.mjs +225 -103
  60. package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
  61. package/dist/admin/pages/EditView/components/EditorToolbarObserver.js +3 -2
  62. package/dist/admin/pages/EditView/components/EditorToolbarObserver.js.map +1 -1
  63. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.js +4 -3
  64. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.js.map +1 -1
  65. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.js +3 -2
  66. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.js.map +1 -1
  67. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.js +3 -2
  68. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.js.map +1 -1
  69. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js +3 -2
  70. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js.map +1 -1
  71. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js +3 -2
  72. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js.map +1 -1
  73. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksInput.js +3 -2
  74. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksInput.js.map +1 -1
  75. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js +4 -3
  76. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js.map +1 -1
  77. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js +3 -2
  78. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js.map +1 -1
  79. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js +3 -2
  80. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js.map +1 -1
  81. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js +3 -2
  82. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
  83. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js +6 -1
  84. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js.map +1 -1
  85. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs +2 -1
  86. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs.map +1 -1
  87. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +9 -4
  88. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
  89. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +3 -2
  90. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
  91. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js +13 -4
  92. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js.map +1 -1
  93. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs +6 -1
  94. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs.map +1 -1
  95. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js +3 -2
  96. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js.map +1 -1
  97. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +7 -3
  98. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
  99. package/dist/admin/pages/EditView/components/FormInputs/UID.js +3 -2
  100. package/dist/admin/pages/EditView/components/FormInputs/UID.js.map +1 -1
  101. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js +8 -4
  102. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js.map +1 -1
  103. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Field.js +3 -2
  104. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Field.js.map +1 -1
  105. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/PreviewWysiwyg.js +3 -2
  106. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/PreviewWysiwyg.js.map +1 -1
  107. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/continueList.js +5 -1
  108. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/continueList.js.map +1 -1
  109. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/mdRenderer.js +15 -2
  110. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/mdRenderer.js.map +1 -1
  111. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/sanitizer.js +5 -1
  112. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/sanitizer.js.map +1 -1
  113. package/dist/admin/pages/EditView/components/FormLayout.js +3 -2
  114. package/dist/admin/pages/EditView/components/FormLayout.js.map +1 -1
  115. package/dist/admin/pages/EditView/components/Header.js +3 -2
  116. package/dist/admin/pages/EditView/components/Header.js.map +1 -1
  117. package/dist/admin/pages/EditView/components/InputRenderer.js +3 -2
  118. package/dist/admin/pages/EditView/components/InputRenderer.js.map +1 -1
  119. package/dist/admin/pages/EditView/components/Panels.js +3 -2
  120. package/dist/admin/pages/EditView/components/Panels.js.map +1 -1
  121. package/dist/admin/pages/EditView/utils/data.js +5 -1
  122. package/dist/admin/pages/EditView/utils/data.js.map +1 -1
  123. package/dist/admin/pages/EditView/utils/draftRelationCounts.js +117 -0
  124. package/dist/admin/pages/EditView/utils/draftRelationCounts.js.map +1 -0
  125. package/dist/admin/pages/EditView/utils/draftRelationCounts.mjs +109 -0
  126. package/dist/admin/pages/EditView/utils/draftRelationCounts.mjs.map +1 -0
  127. package/dist/admin/pages/EditView/utils/keyboardShortcuts.js +35 -0
  128. package/dist/admin/pages/EditView/utils/keyboardShortcuts.js.map +1 -0
  129. package/dist/admin/pages/EditView/utils/keyboardShortcuts.mjs +33 -0
  130. package/dist/admin/pages/EditView/utils/keyboardShortcuts.mjs.map +1 -0
  131. package/dist/admin/pages/ListConfiguration/ListConfigurationPage.js +3 -2
  132. package/dist/admin/pages/ListConfiguration/ListConfigurationPage.js.map +1 -1
  133. package/dist/admin/pages/ListConfiguration/components/DraggableCard.js +3 -2
  134. package/dist/admin/pages/ListConfiguration/components/DraggableCard.js.map +1 -1
  135. package/dist/admin/pages/ListConfiguration/components/EditFieldForm.js +3 -2
  136. package/dist/admin/pages/ListConfiguration/components/EditFieldForm.js.map +1 -1
  137. package/dist/admin/pages/ListConfiguration/components/Settings.js +3 -2
  138. package/dist/admin/pages/ListConfiguration/components/Settings.js.map +1 -1
  139. package/dist/admin/pages/ListConfiguration/components/SortDisplayedFields.js +3 -2
  140. package/dist/admin/pages/ListConfiguration/components/SortDisplayedFields.js.map +1 -1
  141. package/dist/admin/pages/ListView/ListViewPage.js +3 -2
  142. package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
  143. package/dist/admin/pages/ListView/components/BulkActions/Actions.js +3 -2
  144. package/dist/admin/pages/ListView/components/BulkActions/Actions.js.map +1 -1
  145. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js +4 -3
  146. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js.map +1 -1
  147. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs +1 -1
  148. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs.map +1 -1
  149. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js +3 -2
  150. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js.map +1 -1
  151. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs.map +1 -1
  152. package/dist/admin/pages/ListView/components/Filters.js +3 -2
  153. package/dist/admin/pages/ListView/components/Filters.js.map +1 -1
  154. package/dist/admin/pages/ListView/components/TableActions.js +3 -2
  155. package/dist/admin/pages/ListView/components/TableActions.js.map +1 -1
  156. package/dist/admin/pages/ListView/components/TableCells/CellContent.js +9 -5
  157. package/dist/admin/pages/ListView/components/TableCells/CellContent.js.map +1 -1
  158. package/dist/admin/pages/ListView/components/TableCells/CellContent.mjs +2 -2
  159. package/dist/admin/pages/ListView/components/TableCells/CellContent.mjs.map +1 -1
  160. package/dist/admin/pages/ListView/components/TableCells/CellValue.js +7 -2
  161. package/dist/admin/pages/ListView/components/TableCells/CellValue.js.map +1 -1
  162. package/dist/admin/pages/ListView/components/TableCells/Relations.js +4 -3
  163. package/dist/admin/pages/ListView/components/TableCells/Relations.js.map +1 -1
  164. package/dist/admin/pages/ListView/components/TableCells/Relations.mjs +1 -1
  165. package/dist/admin/pages/ListView/components/TableCells/Relations.mjs.map +1 -1
  166. package/dist/admin/preview/components/InputPopover.js +3 -2
  167. package/dist/admin/preview/components/InputPopover.js.map +1 -1
  168. package/dist/admin/preview/hooks/usePreviewInputManager.js +3 -2
  169. package/dist/admin/preview/hooks/usePreviewInputManager.js.map +1 -1
  170. package/dist/admin/preview/pages/Preview.js +41 -13
  171. package/dist/admin/preview/pages/Preview.js.map +1 -1
  172. package/dist/admin/preview/pages/Preview.mjs +39 -12
  173. package/dist/admin/preview/pages/Preview.mjs.map +1 -1
  174. package/dist/admin/preview/routes.js +3 -2
  175. package/dist/admin/preview/routes.js.map +1 -1
  176. package/dist/admin/preview/utils/constants.js +9 -15
  177. package/dist/admin/preview/utils/constants.js.map +1 -1
  178. package/dist/admin/preview/utils/constants.mjs +10 -15
  179. package/dist/admin/preview/utils/constants.mjs.map +1 -1
  180. package/dist/admin/src/components/InjectionZone.d.ts +1 -2
  181. package/dist/admin/src/content-manager.d.ts +15 -15
  182. package/dist/admin/src/history/services/historyVersion.d.ts +2 -2
  183. package/dist/admin/src/hooks/useContentTypeSchema.d.ts +1 -1
  184. package/dist/admin/src/hooks/useDocument.d.ts +8 -9
  185. package/dist/admin/src/hooks/useDocumentLayout.d.ts +3 -3
  186. package/dist/admin/src/hooks/useDragAndDrop.d.ts +4 -4
  187. package/dist/admin/src/hooks/useKeyboardDragAndDrop.d.ts +1 -1
  188. package/dist/admin/src/hooks/usePersistentQueryParams.d.ts +0 -1
  189. package/dist/admin/src/modules/app.d.ts +5 -5
  190. package/dist/admin/src/pages/EditView/EditViewPage.d.ts +1 -1
  191. package/dist/admin/src/pages/EditView/components/DocumentActions.d.ts +12 -1
  192. package/dist/admin/src/pages/EditView/components/EditorToolbarObserver.d.ts +1 -1
  193. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.d.ts +1 -1
  194. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/utils/conversions.d.ts +2 -2
  195. package/dist/admin/src/pages/EditView/components/FormInputs/ComponentContext.d.ts +1 -2
  196. package/dist/admin/src/pages/EditView/components/FormInputs/Relations/Relations.d.ts +4 -4
  197. package/dist/admin/src/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.d.ts +2 -2
  198. package/dist/admin/src/pages/EditView/components/FormInputs/Wysiwyg/WysiwygStyles.d.ts +19 -20
  199. package/dist/admin/src/pages/EditView/components/FormLayout.d.ts +12 -12
  200. package/dist/admin/src/pages/EditView/utils/draftRelationCounts.d.ts +26 -0
  201. package/dist/admin/src/pages/EditView/utils/keyboardShortcuts.d.ts +18 -0
  202. package/dist/admin/src/pages/ListView/components/BulkActions/PublishAction.d.ts +1 -1
  203. package/dist/admin/src/pages/ListView/components/Filters.d.ts +1 -1
  204. package/dist/admin/src/pages/formatComponentConfigurationEditLayout.d.ts +1 -1
  205. package/dist/admin/src/preview/utils/constants.d.ts +1 -7
  206. package/dist/admin/src/preview/utils/getSendMessage.d.ts +0 -1
  207. package/dist/admin/src/services/documents.d.ts +30 -70
  208. package/dist/admin/src/services/relations.d.ts +6 -20
  209. package/dist/admin/src/services/uid.d.ts +5 -5
  210. package/dist/admin/src/utils/layouts/normalizeContentManagerLayout.d.ts +4 -4
  211. package/dist/admin/src/utils/users.d.ts +1 -1
  212. package/dist/admin/src/utils/validation.d.ts +1 -1
  213. package/dist/admin/translations/cs.json.js +2 -1
  214. package/dist/admin/translations/cs.json.js.map +1 -1
  215. package/dist/admin/translations/cs.json.mjs +2 -1
  216. package/dist/admin/translations/cs.json.mjs.map +1 -1
  217. package/dist/admin/translations/de.json.js +2 -1
  218. package/dist/admin/translations/de.json.js.map +1 -1
  219. package/dist/admin/translations/de.json.mjs +2 -1
  220. package/dist/admin/translations/de.json.mjs.map +1 -1
  221. package/dist/admin/translations/en.json.js +7 -3
  222. package/dist/admin/translations/en.json.js.map +1 -1
  223. package/dist/admin/translations/en.json.mjs +7 -3
  224. package/dist/admin/translations/en.json.mjs.map +1 -1
  225. package/dist/admin/translations/es.json.js +2 -1
  226. package/dist/admin/translations/es.json.js.map +1 -1
  227. package/dist/admin/translations/es.json.mjs +2 -1
  228. package/dist/admin/translations/es.json.mjs.map +1 -1
  229. package/dist/admin/translations/fr.json.js +2 -1
  230. package/dist/admin/translations/fr.json.js.map +1 -1
  231. package/dist/admin/translations/fr.json.mjs +2 -1
  232. package/dist/admin/translations/fr.json.mjs.map +1 -1
  233. package/dist/admin/translations/ja.json.js +262 -87
  234. package/dist/admin/translations/ja.json.js.map +1 -1
  235. package/dist/admin/translations/ja.json.mjs +262 -87
  236. package/dist/admin/translations/ja.json.mjs.map +1 -1
  237. package/dist/admin/translations/nl.json.js +2 -1
  238. package/dist/admin/translations/nl.json.js.map +1 -1
  239. package/dist/admin/translations/nl.json.mjs +2 -1
  240. package/dist/admin/translations/nl.json.mjs.map +1 -1
  241. package/dist/admin/translations/pl.json.js +2 -1
  242. package/dist/admin/translations/pl.json.js.map +1 -1
  243. package/dist/admin/translations/pl.json.mjs +2 -1
  244. package/dist/admin/translations/pl.json.mjs.map +1 -1
  245. package/dist/admin/translations/sk.json.js +2 -1
  246. package/dist/admin/translations/sk.json.js.map +1 -1
  247. package/dist/admin/translations/sk.json.mjs +2 -1
  248. package/dist/admin/translations/sk.json.mjs.map +1 -1
  249. package/dist/admin/utils/objects.js +9 -4
  250. package/dist/admin/utils/objects.js.map +1 -1
  251. package/dist/admin/utils/validation.js +7 -3
  252. package/dist/admin/utils/validation.js.map +1 -1
  253. package/dist/server/controllers/collection-types.js +2 -2
  254. package/dist/server/controllers/collection-types.js.map +1 -1
  255. package/dist/server/controllers/collection-types.mjs +2 -2
  256. package/dist/server/controllers/collection-types.mjs.map +1 -1
  257. package/dist/server/controllers/single-types.js +2 -2
  258. package/dist/server/controllers/single-types.js.map +1 -1
  259. package/dist/server/controllers/single-types.mjs +2 -2
  260. package/dist/server/controllers/single-types.mjs.map +1 -1
  261. package/dist/server/controllers/utils/clone.js +5 -1
  262. package/dist/server/controllers/utils/clone.js.map +1 -1
  263. package/dist/server/controllers/utils/clone.mjs.map +1 -1
  264. package/dist/server/controllers/validation/index.js +6 -2
  265. package/dist/server/controllers/validation/index.js.map +1 -1
  266. package/dist/server/homepage/services/homepage.js +6 -1
  267. package/dist/server/homepage/services/homepage.js.map +1 -1
  268. package/dist/server/homepage/services/homepage.mjs +6 -1
  269. package/dist/server/homepage/services/homepage.mjs.map +1 -1
  270. package/dist/server/mcp/handlers/collection-handlers.js +15 -18
  271. package/dist/server/mcp/handlers/collection-handlers.js.map +1 -1
  272. package/dist/server/mcp/handlers/collection-handlers.mjs +16 -19
  273. package/dist/server/mcp/handlers/collection-handlers.mjs.map +1 -1
  274. package/dist/server/mcp/handlers/single-type-handlers.js +12 -12
  275. package/dist/server/mcp/handlers/single-type-handlers.js.map +1 -1
  276. package/dist/server/mcp/handlers/single-type-handlers.mjs +13 -13
  277. package/dist/server/mcp/handlers/single-type-handlers.mjs.map +1 -1
  278. package/dist/server/mcp/register-content-manager-mcp-tools.js +4 -1
  279. package/dist/server/mcp/register-content-manager-mcp-tools.js.map +1 -1
  280. package/dist/server/mcp/register-content-manager-mcp-tools.mjs +4 -1
  281. package/dist/server/mcp/register-content-manager-mcp-tools.mjs.map +1 -1
  282. package/dist/server/mcp/sanitizers/shape-relations.js +108 -0
  283. package/dist/server/mcp/sanitizers/shape-relations.js.map +1 -0
  284. package/dist/server/mcp/sanitizers/shape-relations.mjs +103 -0
  285. package/dist/server/mcp/sanitizers/shape-relations.mjs.map +1 -0
  286. package/dist/server/mcp/schemas/data-schema.js +0 -3
  287. package/dist/server/mcp/schemas/data-schema.js.map +1 -1
  288. package/dist/server/mcp/schemas/data-schema.mjs +0 -3
  289. package/dist/server/mcp/schemas/data-schema.mjs.map +1 -1
  290. package/dist/server/mcp/schemas/output-schemas.js +30 -4
  291. package/dist/server/mcp/schemas/output-schemas.js.map +1 -1
  292. package/dist/server/mcp/schemas/output-schemas.mjs +30 -4
  293. package/dist/server/mcp/schemas/output-schemas.mjs.map +1 -1
  294. package/dist/server/mcp/utils.js +30 -3
  295. package/dist/server/mcp/utils.js.map +1 -1
  296. package/dist/server/mcp/utils.mjs +30 -4
  297. package/dist/server/mcp/utils.mjs.map +1 -1
  298. package/dist/server/middlewares/routing.js +5 -1
  299. package/dist/server/middlewares/routing.js.map +1 -1
  300. package/dist/server/preview/controllers/preview.js +9 -0
  301. package/dist/server/preview/controllers/preview.js.map +1 -1
  302. package/dist/server/preview/controllers/preview.mjs +9 -0
  303. package/dist/server/preview/controllers/preview.mjs.map +1 -1
  304. package/dist/server/preview/controllers/previewScript.js +1450 -0
  305. package/dist/server/preview/routes/preview.js +11 -0
  306. package/dist/server/preview/routes/preview.js.map +1 -1
  307. package/dist/server/preview/routes/preview.mjs +11 -0
  308. package/dist/server/preview/routes/preview.mjs.map +1 -1
  309. package/dist/server/services/document-manager.js +13 -19
  310. package/dist/server/services/document-manager.js.map +1 -1
  311. package/dist/server/services/document-manager.mjs +13 -19
  312. package/dist/server/services/document-manager.mjs.map +1 -1
  313. package/dist/server/services/populate-builder.js.map +1 -1
  314. package/dist/server/services/populate-builder.mjs.map +1 -1
  315. package/dist/server/services/uid.js +9 -4
  316. package/dist/server/services/uid.js.map +1 -1
  317. package/dist/server/services/utils/configuration/attributes.js +14 -10
  318. package/dist/server/services/utils/configuration/attributes.js.map +1 -1
  319. package/dist/server/services/utils/configuration/layouts.js +8 -4
  320. package/dist/server/services/utils/configuration/layouts.js.map +1 -1
  321. package/dist/server/services/utils/configuration/metadatas.js +19 -15
  322. package/dist/server/services/utils/configuration/metadatas.js.map +1 -1
  323. package/dist/server/services/utils/configuration/settings.js +5 -1
  324. package/dist/server/services/utils/configuration/settings.js.map +1 -1
  325. package/dist/server/services/utils/draft-relations.js +9 -0
  326. package/dist/server/services/utils/draft-relations.js.map +1 -0
  327. package/dist/server/services/utils/draft-relations.mjs +7 -0
  328. package/dist/server/services/utils/draft-relations.mjs.map +1 -0
  329. package/dist/server/services/utils/draft.js +123 -26
  330. package/dist/server/services/utils/draft.js.map +1 -1
  331. package/dist/server/services/utils/draft.mjs +118 -25
  332. package/dist/server/services/utils/draft.mjs.map +1 -1
  333. package/dist/server/services/utils/populate.js +23 -5
  334. package/dist/server/services/utils/populate.js.map +1 -1
  335. package/dist/server/services/utils/populate.mjs +15 -1
  336. package/dist/server/services/utils/populate.mjs.map +1 -1
  337. package/dist/server/services/utils/store.js +9 -5
  338. package/dist/server/services/utils/store.js.map +1 -1
  339. package/dist/server/src/controllers/index.d.ts +1 -1
  340. package/dist/server/src/controllers/relations.d.ts.map +1 -1
  341. package/dist/server/src/controllers/utils/clone.d.ts +1 -1
  342. package/dist/server/src/controllers/utils/clone.d.ts.map +1 -1
  343. package/dist/server/src/controllers/utils/document-status.d.ts +1 -1
  344. package/dist/server/src/controllers/utils/document-status.d.ts.map +1 -1
  345. package/dist/server/src/controllers/utils/metadata.d.ts +5 -5
  346. package/dist/server/src/controllers/utils/metadata.d.ts.map +1 -1
  347. package/dist/server/src/controllers/validation/dimensions.d.ts.map +1 -1
  348. package/dist/server/src/controllers/validation/index.d.ts +3 -3
  349. package/dist/server/src/controllers/validation/index.d.ts.map +1 -1
  350. package/dist/server/src/controllers/validation/model-configuration.d.ts.map +1 -1
  351. package/dist/server/src/controllers/validation/relations.d.ts +2 -2
  352. package/dist/server/src/history/controllers/history-version.d.ts +1 -7
  353. package/dist/server/src/history/controllers/history-version.d.ts.map +1 -1
  354. package/dist/server/src/history/controllers/index.d.ts +2 -1
  355. package/dist/server/src/history/controllers/index.d.ts.map +1 -1
  356. package/dist/server/src/history/controllers/validation/history-version.d.ts +1 -1
  357. package/dist/server/src/history/services/history.d.ts +0 -2
  358. package/dist/server/src/history/services/history.d.ts.map +1 -1
  359. package/dist/server/src/history/services/lifecycles.d.ts.map +1 -1
  360. package/dist/server/src/history/services/utils.d.ts +3 -3
  361. package/dist/server/src/history/services/utils.d.ts.map +1 -1
  362. package/dist/server/src/history/utils.d.ts +1 -18
  363. package/dist/server/src/history/utils.d.ts.map +1 -1
  364. package/dist/server/src/homepage/controllers/homepage.d.ts +0 -1
  365. package/dist/server/src/homepage/controllers/homepage.d.ts.map +1 -1
  366. package/dist/server/src/homepage/controllers/index.d.ts +2 -1
  367. package/dist/server/src/homepage/controllers/index.d.ts.map +1 -1
  368. package/dist/server/src/homepage/index.d.ts +4 -8
  369. package/dist/server/src/homepage/index.d.ts.map +1 -1
  370. package/dist/server/src/homepage/services/homepage-query-utils.d.ts.map +1 -1
  371. package/dist/server/src/homepage/services/homepage.d.ts +3 -4
  372. package/dist/server/src/homepage/services/homepage.d.ts.map +1 -1
  373. package/dist/server/src/homepage/services/index.d.ts +4 -8
  374. package/dist/server/src/homepage/services/index.d.ts.map +1 -1
  375. package/dist/server/src/index.d.ts +82 -86
  376. package/dist/server/src/index.d.ts.map +1 -1
  377. package/dist/server/src/mcp/derive-content-type-mcp-tools.d.ts.map +1 -1
  378. package/dist/server/src/mcp/handlers/collection-handlers.d.ts.map +1 -1
  379. package/dist/server/src/mcp/handlers/single-type-handlers.d.ts.map +1 -1
  380. package/dist/server/src/mcp/permissions.d.ts +1 -1
  381. package/dist/server/src/mcp/permissions.d.ts.map +1 -1
  382. package/dist/server/src/mcp/register-content-manager-mcp-tools.d.ts +2 -1
  383. package/dist/server/src/mcp/register-content-manager-mcp-tools.d.ts.map +1 -1
  384. package/dist/server/src/mcp/sanitizers/shape-relations.d.ts +38 -0
  385. package/dist/server/src/mcp/sanitizers/shape-relations.d.ts.map +1 -0
  386. package/dist/server/src/mcp/schemas/blocks-schema.d.ts.map +1 -1
  387. package/dist/server/src/mcp/schemas/data-schema.d.ts +0 -3
  388. package/dist/server/src/mcp/schemas/data-schema.d.ts.map +1 -1
  389. package/dist/server/src/mcp/schemas/filters-schema.d.ts.map +1 -1
  390. package/dist/server/src/mcp/schemas/output-schemas.d.ts +2 -2
  391. package/dist/server/src/mcp/schemas/output-schemas.d.ts.map +1 -1
  392. package/dist/server/src/mcp/schemas/sort-schema.d.ts.map +1 -1
  393. package/dist/server/src/mcp/types.d.ts +2 -2
  394. package/dist/server/src/mcp/types.d.ts.map +1 -1
  395. package/dist/server/src/mcp/utils.d.ts +19 -1
  396. package/dist/server/src/mcp/utils.d.ts.map +1 -1
  397. package/dist/server/src/middlewares/routing.d.ts.map +1 -1
  398. package/dist/server/src/policies/hasPermissions.d.ts.map +1 -1
  399. package/dist/server/src/policies/index.d.ts.map +1 -1
  400. package/dist/server/src/preview/controllers/index.d.ts +2 -1
  401. package/dist/server/src/preview/controllers/index.d.ts.map +1 -1
  402. package/dist/server/src/preview/controllers/preview.d.ts +5 -0
  403. package/dist/server/src/preview/controllers/preview.d.ts.map +1 -1
  404. package/dist/server/src/preview/controllers/validation/preview.d.ts +1 -2
  405. package/dist/server/src/preview/controllers/validation/preview.d.ts.map +1 -1
  406. package/dist/server/src/preview/routes/preview.d.ts.map +1 -1
  407. package/dist/server/src/preview/services/index.d.ts +1 -1
  408. package/dist/server/src/preview/services/index.d.ts.map +1 -1
  409. package/dist/server/src/preview/services/preview-config.d.ts +1 -1
  410. package/dist/server/src/preview/services/preview-config.d.ts.map +1 -1
  411. package/dist/server/src/preview/services/preview.d.ts.map +1 -1
  412. package/dist/server/src/preview/utils.d.ts +1 -16
  413. package/dist/server/src/preview/utils.d.ts.map +1 -1
  414. package/dist/server/src/services/components.d.ts +2 -2
  415. package/dist/server/src/services/components.d.ts.map +1 -1
  416. package/dist/server/src/services/configuration.d.ts.map +1 -1
  417. package/dist/server/src/services/content-types.d.ts.map +1 -1
  418. package/dist/server/src/services/data-mapper.d.ts +5 -5
  419. package/dist/server/src/services/data-mapper.d.ts.map +1 -1
  420. package/dist/server/src/services/document-manager.d.ts +14 -14
  421. package/dist/server/src/services/document-manager.d.ts.map +1 -1
  422. package/dist/server/src/services/document-metadata.d.ts +6 -6
  423. package/dist/server/src/services/document-metadata.d.ts.map +1 -1
  424. package/dist/server/src/services/field-sizes.d.ts +2 -2
  425. package/dist/server/src/services/field-sizes.d.ts.map +1 -1
  426. package/dist/server/src/services/index.d.ts +81 -85
  427. package/dist/server/src/services/index.d.ts.map +1 -1
  428. package/dist/server/src/services/metrics.d.ts.map +1 -1
  429. package/dist/server/src/services/permission-checker.d.ts +12 -31
  430. package/dist/server/src/services/permission-checker.d.ts.map +1 -1
  431. package/dist/server/src/services/permission.d.ts.map +1 -1
  432. package/dist/server/src/services/populate-builder.d.ts +7 -5
  433. package/dist/server/src/services/populate-builder.d.ts.map +1 -1
  434. package/dist/server/src/services/uid.d.ts.map +1 -1
  435. package/dist/server/src/services/utils/configuration/attributes.d.ts.map +1 -1
  436. package/dist/server/src/services/utils/configuration/settings.d.ts.map +1 -1
  437. package/dist/server/src/services/utils/count.d.ts.map +1 -1
  438. package/dist/server/src/services/utils/draft-relations.d.ts +19 -0
  439. package/dist/server/src/services/utils/draft-relations.d.ts.map +1 -0
  440. package/dist/server/src/services/utils/draft.d.ts +8 -7
  441. package/dist/server/src/services/utils/draft.d.ts.map +1 -1
  442. package/dist/server/src/services/utils/populate.d.ts +3 -1
  443. package/dist/server/src/services/utils/populate.d.ts.map +1 -1
  444. package/dist/server/src/services/utils/store.d.ts.map +1 -1
  445. package/dist/server/src/utils/index.d.ts.map +1 -1
  446. package/dist/server/src/validation/policies/hasPermissions.d.ts +1 -1
  447. package/dist/server/src/validation/zod.d.ts +1 -1
  448. package/dist/server/src/validation/zod.d.ts.map +1 -1
  449. package/dist/shared/contracts/collection-types.d.ts +4 -1
  450. package/dist/shared/contracts/collection-types.d.ts.map +1 -1
  451. package/dist/shared/contracts/single-types.d.ts +4 -1
  452. package/dist/shared/contracts/single-types.d.ts.map +1 -1
  453. package/package.json +10 -10
  454. package/dist/admin/preview/utils/previewScript.js +0 -1068
  455. package/dist/admin/preview/utils/previewScript.js.map +0 -1
  456. package/dist/admin/preview/utils/previewScript.mjs +0 -1066
  457. package/dist/admin/preview/utils/previewScript.mjs.map +0 -1
  458. package/dist/admin/src/preview/utils/previewScript.d.ts +0 -32
@@ -23,9 +23,14 @@ var documents = require('../../../services/documents.js');
23
23
  var api = require('../../../utils/api.js');
24
24
  var translations = require('../../../utils/translations.js');
25
25
  var data = require('../utils/data.js');
26
+ var draftRelationCounts = require('../utils/draftRelationCounts.js');
27
+ var keyboardShortcuts = require('../utils/keyboardShortcuts.js');
26
28
  var RelationModal = require('./FormInputs/Relations/RelationModal.js');
27
29
 
28
- function _interopNamespaceDefault(e) {
30
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
31
+
32
+ function _interopNamespace(e) {
33
+ if (e && e.__esModule) return e;
29
34
  var n = Object.create(null);
30
35
  if (e) {
31
36
  Object.keys(e).forEach(function (k) {
@@ -42,14 +47,22 @@ function _interopNamespaceDefault(e) {
42
47
  return Object.freeze(n);
43
48
  }
44
49
 
45
- var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
50
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
51
+ var mapValues__default = /*#__PURE__*/_interopDefault(mapValues);
52
+ var get__default = /*#__PURE__*/_interopDefault(get);
53
+ var merge__default = /*#__PURE__*/_interopDefault(merge);
54
+ var set__default = /*#__PURE__*/_interopDefault(set);
46
55
 
56
+ const publishConfirmDialogOpeners = new Map();
57
+ const openPublishConfirmDialog = (scope)=>{
58
+ publishConfirmDialogOpeners.get(scope)?.();
59
+ };
47
60
  const connectRelationToParent = (parentDataToUpdate, fieldToConnect, data, fieldToConnectUID)=>{
48
61
  /*
49
62
  * Check if the fieldToConnect is already present in the parentDataToUpdate.
50
63
  * This happens in particular when in the parentDocument you have created
51
64
  * a new component without saving.
52
- */ const isFieldPresent = !!get(parentDataToUpdate, fieldToConnect);
65
+ */ const isFieldPresent = !!get__default.default(parentDataToUpdate, fieldToConnect);
53
66
  const fieldToConnectPath = isFieldPresent ? fieldToConnect : fieldToConnect.split('.').slice(0, -1).join('.');
54
67
  const fieldToConnectValue = isFieldPresent ? {
55
68
  connect: [
@@ -73,8 +86,8 @@ const connectRelationToParent = (parentDataToUpdate, fieldToConnect, data, field
73
86
  // In case the object was not present you need to pass the componentUID of the parent document
74
87
  __component: fieldToConnectUID
75
88
  };
76
- const objectToConnect = set({}, fieldToConnectPath, fieldToConnectValue);
77
- return merge(parentDataToUpdate, objectToConnect);
89
+ const objectToConnect = set__default.default({}, fieldToConnectPath, fieldToConnectValue);
90
+ return merge__default.default(parentDataToUpdate, objectToConnect);
78
91
  };
79
92
  const DocumentActions = ({ actions })=>{
80
93
  const { formatMessage } = reactIntl.useIntl();
@@ -92,18 +105,23 @@ const DocumentActions = ({ actions })=>{
92
105
  return null;
93
106
  }
94
107
  const addHintTooltip = (action, children)=>{
95
- return !action.disabled ? /*#__PURE__*/ jsxRuntime.jsx(designSystem.Tooltip, {
96
- label: formatMessage({
97
- id: 'content-manager.containers.EditView.saveHint',
98
- defaultMessage: 'Ctrl / Cmd + Enter to {action}'
99
- }, {
100
- action: action.label
101
- }),
108
+ if (action.disabled) {
109
+ return children;
110
+ }
111
+ const hint = action.type === 'publish' ? formatMessage({
112
+ id: 'content-manager.containers.EditView.publishHint',
113
+ defaultMessage: 'Ctrl / Cmd + Shift + Enter to publish'
114
+ }) : formatMessage({
115
+ id: 'content-manager.containers.EditView.saveHint',
116
+ defaultMessage: 'Ctrl / Cmd + Enter to save'
117
+ });
118
+ return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Tooltip, {
119
+ label: hint,
102
120
  children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
103
121
  width: "100%",
104
122
  children: children
105
123
  })
106
- }) : children;
124
+ });
107
125
  };
108
126
  const primaryActionContent = /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
109
127
  children: [
@@ -150,15 +168,15 @@ const DocumentActions = ({ actions })=>{
150
168
  alignItems: "stretch",
151
169
  direction: "column",
152
170
  children: secondaryAction.type === 'publish' ? /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.tours.contentManager.Publish, {
153
- children: /*#__PURE__*/ jsxRuntime.jsx(DocumentActionButton, {
171
+ children: addHintTooltip(secondaryAction, /*#__PURE__*/ jsxRuntime.jsx(DocumentActionButton, {
154
172
  ...secondaryAction,
155
173
  variant: secondaryAction.variant || 'secondary'
156
- })
157
- }) : /*#__PURE__*/ jsxRuntime.jsx(DocumentActionButton, {
174
+ }))
175
+ }) : addHintTooltip(secondaryAction, /*#__PURE__*/ jsxRuntime.jsx(DocumentActionButton, {
158
176
  ...secondaryAction,
159
177
  variant: secondaryAction.variant || 'secondary',
160
178
  buttonType: "submit"
161
- })
179
+ }))
162
180
  }) : null
163
181
  ]
164
182
  });
@@ -166,6 +184,24 @@ const DocumentActions = ({ actions })=>{
166
184
  const DocumentActionButton = ({ buttonType = 'button', ...action })=>{
167
185
  const [dialogId, setDialogId] = React__namespace.useState(null);
168
186
  const { toggleNotification } = strapiAdmin.useNotification();
187
+ React__namespace.useEffect(()=>{
188
+ const scope = action.publishConfirmScope;
189
+ if (action.type !== 'publish' || !action.dialog || !scope) {
190
+ return;
191
+ }
192
+ const open = ()=>setDialogId(action.id);
193
+ publishConfirmDialogOpeners.set(scope, open);
194
+ return ()=>{
195
+ if (publishConfirmDialogOpeners.get(scope) === open) {
196
+ publishConfirmDialogOpeners.delete(scope);
197
+ }
198
+ };
199
+ }, [
200
+ action.type,
201
+ action.dialog,
202
+ action.id,
203
+ action.publishConfirmScope
204
+ ]);
169
205
  const handleClick = (action)=>async (e)=>{
170
206
  const { onClick = ()=>false, dialog, id } = action;
171
207
  const muteDialog = await onClick(e);
@@ -316,7 +352,7 @@ const DocumentActionsMenu = ({ actions, children, label, variant = 'tertiary' })
316
352
  ]
317
353
  });
318
354
  };
319
- const DocumentActionConfirmDialog = ({ onClose, onCancel, onConfirm, title, content, isOpen, variant = 'secondary', loading })=>{
355
+ const DocumentActionConfirmDialog = ({ onClose, onCancel, onConfirm, title, content, bodyIcon, confirmLabel, isOpen, variant = 'secondary', loading })=>{
320
356
  const { formatMessage } = reactIntl.useIntl();
321
357
  const handleClose = async ()=>{
322
358
  if (onCancel) {
@@ -330,6 +366,28 @@ const DocumentActionConfirmDialog = ({ onClose, onCancel, onConfirm, title, cont
330
366
  }
331
367
  onClose();
332
368
  };
369
+ const dialogBody = bodyIcon ? /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
370
+ direction: "column",
371
+ alignItems: "stretch",
372
+ gap: 2,
373
+ children: [
374
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
375
+ justifyContent: "center",
376
+ children: /*#__PURE__*/ jsxRuntime.jsx(Icons.WarningCircle, {
377
+ width: "24px",
378
+ height: "24px",
379
+ fill: bodyIcon === 'danger' ? 'danger600' : 'primary600'
380
+ })
381
+ }),
382
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
383
+ id: "confirm-description",
384
+ tag: "p",
385
+ variant: "omega",
386
+ textAlign: "center",
387
+ children: content
388
+ })
389
+ ]
390
+ }) : content;
333
391
  return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Dialog.Root, {
334
392
  open: isOpen,
335
393
  onOpenChange: handleClose,
@@ -339,7 +397,7 @@ const DocumentActionConfirmDialog = ({ onClose, onCancel, onConfirm, title, cont
339
397
  children: title
340
398
  }),
341
399
  /*#__PURE__*/ jsxRuntime.jsx(designSystem.Dialog.Body, {
342
- children: content
400
+ children: dialogBody
343
401
  }),
344
402
  /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Dialog.Footer, {
345
403
  children: [
@@ -358,7 +416,7 @@ const DocumentActionConfirmDialog = ({ onClose, onCancel, onConfirm, title, cont
358
416
  variant: variant,
359
417
  fullWidth: true,
360
418
  loading: loading,
361
- children: formatMessage({
419
+ children: confirmLabel ?? formatMessage({
362
420
  id: 'app.components.Button.confirm',
363
421
  defaultMessage: 'Confirm'
364
422
  })
@@ -406,7 +464,7 @@ const transformData = (data)=>{
406
464
  if ('apiData' in data) {
407
465
  return data.apiData;
408
466
  }
409
- return mapValues(transformData)(data);
467
+ return mapValues__default.default(transformData)(data);
410
468
  }
411
469
  return data;
412
470
  };
@@ -426,10 +484,11 @@ const transformData = (data)=>{
426
484
  canReadFields
427
485
  }));
428
486
  const { publish, isLoading } = useDocumentActions.useDocumentActions();
429
- const onPreview = Preview.usePreviewContext('UpdateAction', (state)=>state.onPreview, false);
430
- const [countDraftRelations, { isLoading: isLoadingDraftRelations, isError: isErrorDraftRelations }] = documents.useGetDraftRelationCountQuery();
431
- const [localCountOfDraftRelations, setLocalCountOfDraftRelations] = React__namespace.useState(0);
432
- const [serverCountOfDraftRelations, setServerCountOfDraftRelations] = React__namespace.useState(0);
487
+ const onPreview = Preview.usePreviewContext('PublishAction', (state)=>state.onPreview, false);
488
+ const [countDraftRelations, { isError: isErrorDraftRelations }] = documents.useGetDraftRelationCountQuery();
489
+ const [localDraftRelationCounts, setLocalDraftRelationCounts] = React__namespace.useState(draftRelationCounts.EMPTY_DRAFT_RELATION_COUNTS);
490
+ const [serverDraftRelationCounts, setServerDraftRelationCounts] = React__namespace.useState(draftRelationCounts.EMPTY_DRAFT_RELATION_COUNTS);
491
+ const [isFetchingDraftRelations, setIsFetchingDraftRelations] = React__namespace.useState(false);
433
492
  const [{ rawQuery }] = strapiAdmin.useQueryParams();
434
493
  const modified = strapiAdmin.useForm('PublishAction', ({ modified })=>modified);
435
494
  const setSubmitting = strapiAdmin.useForm('PublishAction', ({ setSubmitting })=>setSubmitting);
@@ -443,6 +502,8 @@ const transformData = (data)=>{
443
502
  // need to discriminate if the publish is coming from a relation modal or in the edit view
444
503
  const relationContext = RelationModal.useRelationModal('PublishAction', ()=>true, false);
445
504
  const fromRelationModal = relationContext != undefined;
505
+ const isRelationModalOpen = RelationModal.useRelationModal('PublishAction', (state)=>state.state.isModalOpen, false);
506
+ const publishConfirmScope = fromRelationModal ? 'relation-modal' : onPreview ? 'preview' : 'panel';
446
507
  const dispatch = RelationModal.useRelationModal('PublishAction', (state)=>state.dispatch);
447
508
  const fieldToConnect = RelationModal.useRelationModal('PublishAction', (state)=>state.state.fieldToConnect, false);
448
509
  const fieldToConnectUID = RelationModal.useRelationModal('PublishAction', (state)=>state.state.fieldToConnectUID, false);
@@ -469,49 +530,19 @@ const transformData = (data)=>{
469
530
  formatMessage
470
531
  ]);
471
532
  React__namespace.useEffect(()=>{
472
- const localDraftRelations = new Set();
473
- /**
474
- * Extracts draft relations from the provided data object.
475
- * It checks for a connect array of relations.
476
- * If a relation has a status of 'draft', its id is added to the localDraftRelations set.
477
- */ const extractDraftRelations = (data)=>{
478
- const relations = data.connect || [];
479
- relations.forEach((relation)=>{
480
- if (relation.status === 'draft') {
481
- localDraftRelations.add(relation.id);
482
- }
483
- });
484
- };
485
- /**
486
- * Recursively traverses the provided data object to extract draft relations from arrays within 'connect' keys.
487
- * If the data is an object, it looks for 'connect' keys to pass their array values to extractDraftRelations.
488
- * It recursively calls itself for any non-null objects it contains.
489
- */ const traverseAndExtract = (data)=>{
490
- Object.entries(data).forEach(([key, value])=>{
491
- if (key === 'connect' && Array.isArray(value)) {
492
- extractDraftRelations({
493
- connect: value
494
- });
495
- } else if (typeof value === 'object' && value !== null) {
496
- traverseAndExtract(value);
497
- }
498
- });
499
- };
500
- if (!documentId || modified) {
501
- traverseAndExtract(formValues);
502
- setLocalCountOfDraftRelations(localDraftRelations.size);
503
- }
533
+ setLocalDraftRelationCounts(draftRelationCounts.countLocalDraftRelations(formValues, schema, components, model));
504
534
  }, [
505
- documentId,
506
- modified,
535
+ components,
507
536
  formValues,
508
- setLocalCountOfDraftRelations
537
+ model,
538
+ schema
509
539
  ]);
510
- React__namespace.useEffect(()=>{
511
- if (!document || !document.documentId || isListView) {
540
+ const fetchDraftRelationsCount = React__namespace.useCallback(async ()=>{
541
+ if (!document?.documentId || isListView) {
512
542
  return;
513
543
  }
514
- const fetchDraftRelationsCount = async ()=>{
544
+ setIsFetchingDraftRelations(true);
545
+ try {
515
546
  const { data, error } = await countDraftRelations({
516
547
  collectionType,
517
548
  model,
@@ -522,18 +553,36 @@ const transformData = (data)=>{
522
553
  throw error;
523
554
  }
524
555
  if (data) {
525
- setServerCountOfDraftRelations(data.data);
556
+ setServerDraftRelationCounts(draftRelationCounts.normalizeDraftRelationCounts(data));
526
557
  }
527
- };
528
- fetchDraftRelationsCount();
558
+ } finally{
559
+ setIsFetchingDraftRelations(false);
560
+ }
529
561
  }, [
530
- isListView,
531
- document,
532
- documentId,
533
- countDraftRelations,
534
562
  collectionType,
535
- model,
536
- currentDocumentMeta.params
563
+ countDraftRelations,
564
+ currentDocumentMeta.params,
565
+ document?.documentId,
566
+ documentId,
567
+ isListView,
568
+ model
569
+ ]);
570
+ React__namespace.useEffect(()=>{
571
+ fetchDraftRelationsCount();
572
+ }, [
573
+ fetchDraftRelationsCount,
574
+ document?.updatedAt
575
+ ]);
576
+ React__namespace.useEffect(()=>{
577
+ const handleWindowFocus = ()=>{
578
+ fetchDraftRelationsCount();
579
+ };
580
+ window.addEventListener('focus', handleWindowFocus);
581
+ return ()=>{
582
+ window.removeEventListener('focus', handleWindowFocus);
583
+ };
584
+ }, [
585
+ fetchDraftRelationsCount
537
586
  ]);
538
587
  const parentDocumentMetaToUpdate = documentHistory?.at(-2) ?? rootDocumentMeta;
539
588
  const parentDocumentData = useDocument.useDocument({
@@ -675,31 +724,61 @@ const transformData = (data)=>{
675
724
  }
676
725
  }
677
726
  };
678
- const totalDraftRelations = localCountOfDraftRelations + serverCountOfDraftRelations;
679
- // TODO skipping this for now as there is a bug with the draft relation count that will be worked on separately
680
- // see RFC "Count draft relations" in Notion
681
- const enableDraftRelationsCount = false;
682
- const hasDraftRelations = enableDraftRelationsCount;
683
- // Auto-publish on CMD+Enter on macOS, and CTRL+Enter on Windows/Linux
727
+ const getFreshDraftRelationCounts = React__namespace.useCallback(()=>draftRelationCounts.resolveDraftRelationCounts(documentId, modified, draftRelationCounts.countLocalDraftRelations(getValues(), schema, components, model), serverDraftRelationCounts), [
728
+ components,
729
+ documentId,
730
+ getValues,
731
+ model,
732
+ modified,
733
+ schema,
734
+ serverDraftRelationCounts
735
+ ]);
736
+ const draftRelationCounts$1 = draftRelationCounts.resolveDraftRelationCounts(documentId, modified, localDraftRelationCounts, serverDraftRelationCounts);
737
+ const { hasUnpublishedRelations, hasDraftM2mLinks, dialogVariant, bodyIcon, confirmLabel } = draftRelationCounts.getDraftRelationsPublishState(draftRelationCounts$1);
738
+ const supportsDraftRelationWarning = Boolean(schema?.options?.draftAndPublish);
739
+ /**
740
+ * Disabled when:
741
+ * - currently if you're cloning a document we don't support publish & clone at the same time.
742
+ * - the form is submitting
743
+ * - the active tab is the published tab
744
+ * - the document is already published & not modified
745
+ * - the document is being created & not modified
746
+ * - the user doesn't have the permission to publish
747
+ */ const isDisabled = isCloning || isSubmitting || isFetchingDraftRelations || activeTab === 'published' || !modified && isDocumentPublished || !modified && !document?.documentId || !canPublish;
748
+ // Publish on CMD+Shift+Enter (macOS) / CTRL+Shift+Enter (Windows/Linux).
749
+ // Saving a draft (CMD/CTRL+Enter) is handled by the UpdateAction.
684
750
  React__namespace.useEffect(()=>{
685
751
  if (!schema?.options?.draftAndPublish) {
686
752
  return;
687
753
  }
688
754
  const handleKeyDown = (e)=>{
689
- if (e.key === 'Enter' && (e.metaKey || e.ctrlKey)) {
690
- e.preventDefault();
691
- {
692
- performPublish();
693
- }
755
+ if (keyboardShortcuts.getEditViewShortcut(e) !== 'publish') {
756
+ return;
757
+ }
758
+ e.preventDefault();
759
+ if (!fromRelationModal && isRelationModalOpen) {
760
+ return;
761
+ }
762
+ if (isDisabled) {
763
+ return;
694
764
  }
765
+ if (draftRelationCounts.getDraftRelationsPublishState(getFreshDraftRelationCounts()).hasDraftRelations) {
766
+ openPublishConfirmDialog(publishConfirmScope);
767
+ return;
768
+ }
769
+ performPublish();
695
770
  };
696
771
  window.addEventListener('keydown', handleKeyDown);
697
772
  return ()=>{
698
773
  window.removeEventListener('keydown', handleKeyDown);
699
774
  };
700
775
  }, [
701
- hasDraftRelations,
776
+ fromRelationModal,
777
+ getFreshDraftRelationCounts,
778
+ isDisabled,
779
+ isRelationModalOpen,
702
780
  performPublish,
781
+ publishConfirmScope,
703
782
  schema?.options?.draftAndPublish
704
783
  ]);
705
784
  if (!schema?.options?.draftAndPublish) {
@@ -713,35 +792,61 @@ const transformData = (data)=>{
713
792
  'preview',
714
793
  'relation-modal'
715
794
  ],
716
- /**
717
- * Disabled when:
718
- * - currently if you're cloning a document we don't support publish & clone at the same time.
719
- * - the form is submitting
720
- * - the active tab is the published tab
721
- * - the document is already published & not modified
722
- * - the document is being created & not modified
723
- * - the user doesn't have the permission to publish
724
- */ disabled: isCloning || isSubmitting || isLoadingDraftRelations || activeTab === 'published' || !modified && isDocumentPublished || !modified && !document?.documentId || !canPublish,
795
+ disabled: isDisabled,
796
+ publishConfirmScope: supportsDraftRelationWarning ? publishConfirmScope : undefined,
725
797
  label: formatMessage({
726
798
  id: 'app.utils.publish',
727
799
  defaultMessage: 'Publish'
728
800
  }),
729
801
  onClick: async ()=>{
802
+ if (draftRelationCounts.getDraftRelationsPublishState(getFreshDraftRelationCounts()).hasDraftRelations) {
803
+ // Let DocumentActionButton open the confirmation dialog.
804
+ return;
805
+ }
730
806
  await performPublish();
807
+ // Skip the registered dialog when publishing directly.
808
+ return true;
731
809
  },
732
- dialog: hasDraftRelations ? {
810
+ dialog: supportsDraftRelationWarning ? {
733
811
  type: 'dialog',
734
- variant: 'danger',
735
- footer: null,
812
+ variant: dialogVariant,
813
+ bodyIcon,
736
814
  title: formatMessage({
737
- id: translations.getTranslation(`popUpwarning.warning.bulk-has-draft-relations.title`),
815
+ id: translations.getTranslation('popUpWarning.warning.has-draft-relations.title'),
738
816
  defaultMessage: 'Confirmation'
739
817
  }),
740
- content: formatMessage({
741
- id: translations.getTranslation(`popUpwarning.warning.bulk-has-draft-relations.message`),
742
- defaultMessage: 'This entry is related to {count, plural, one {# draft entry} other {# draft entries}}. Publishing it could leave broken links in your app.'
743
- }, {
744
- count: totalDraftRelations
818
+ content: /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
819
+ children: [
820
+ hasUnpublishedRelations ? formatMessage({
821
+ id: translations.getTranslation('popUpWarning.warning.has-draft-relations.message'),
822
+ defaultMessage: 'This entry is related to {count, plural, one {# draft entry} other {# draft entries}}. {count, plural, one {That relation will not be included in the published version.} other {Those relations will not be included in the published version.}}'
823
+ }, {
824
+ count: draftRelationCounts$1.unpublishedRelations
825
+ }) : formatMessage({
826
+ id: translations.getTranslation('popUpWarning.warning.has-draft-m2m-relations.message'),
827
+ defaultMessage: '{count, plural, one {# linked entry is still in draft. It will appear on the live site once that entry is published.} other {# linked entries are still in draft. They will appear on the live site once those entries are published.}}'
828
+ }, {
829
+ count: draftRelationCounts$1.draftM2mLinks
830
+ }),
831
+ hasUnpublishedRelations && hasDraftM2mLinks ? ` ${formatMessage({
832
+ id: translations.getTranslation('popUpWarning.warning.has-draft-m2m-relations.additional'),
833
+ defaultMessage: '{count, plural, one {# many-to-many link points} other {# many-to-many links point}} to draft entries that will become visible once published.'
834
+ }, {
835
+ count: draftRelationCounts$1.draftM2mLinks
836
+ })}` : null,
837
+ ' ',
838
+ formatMessage({
839
+ id: translations.getTranslation('popUpWarning.warning.publish-question'),
840
+ defaultMessage: 'Do you still want to publish?'
841
+ })
842
+ ]
843
+ }),
844
+ confirmLabel: confirmLabel === 'publish' ? formatMessage({
845
+ id: 'app.utils.publish',
846
+ defaultMessage: 'Publish'
847
+ }) : formatMessage({
848
+ id: translations.getTranslation('popUpwarning.warning.has-draft-relations.button-confirm'),
849
+ defaultMessage: 'Publish without relations'
745
850
  }),
746
851
  onConfirm: async ()=>{
747
852
  await performPublish();
@@ -800,6 +905,12 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType })=>{
800
905
  const { schema } = useDocument.useDoc();
801
906
  const suitableSchema = fromRelationModal ? relationalModalSchema : schema;
802
907
  const hasDraftAndPublished = suitableSchema?.options?.draftAndPublish ?? false;
908
+ /**
909
+ * Disabled when:
910
+ * - the form is submitting
911
+ * - the document is not modified & we're not cloning (you can save a clone entity straight away)
912
+ * - the active tab is the published tab
913
+ */ const isDisabled = isSubmitting || !modified && !isCloning || activeTab === 'published';
803
914
  const handleUpdate = async ()=>{
804
915
  setSubmitting(true);
805
916
  try {
@@ -949,14 +1060,32 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType })=>{
949
1060
  }
950
1061
  }
951
1062
  };
1063
+ // Save a draft on CMD+Enter (macOS) / CTRL+Enter (Windows/Linux), with CMD/CTRL+S as an alias.
1064
+ // Publishing (CMD/CTRL+Shift+Enter) is handled by the PublishAction.
1065
+ // `handleUpdate` is recreated on every render, so we read the latest version (and the latest
1066
+ // disabled state) through refs and register the listener only once.
1067
+ const handleUpdateRef = React__namespace.useRef(handleUpdate);
1068
+ handleUpdateRef.current = handleUpdate;
1069
+ const isDisabledRef = React__namespace.useRef(isDisabled);
1070
+ isDisabledRef.current = isDisabled;
1071
+ React__namespace.useEffect(()=>{
1072
+ const handleKeyDown = (e)=>{
1073
+ if (keyboardShortcuts.getEditViewShortcut(e) !== 'save') {
1074
+ return;
1075
+ }
1076
+ e.preventDefault();
1077
+ if (!isDisabledRef.current) {
1078
+ handleUpdateRef.current();
1079
+ }
1080
+ };
1081
+ window.addEventListener('keydown', handleKeyDown);
1082
+ return ()=>{
1083
+ window.removeEventListener('keydown', handleKeyDown);
1084
+ };
1085
+ }, []);
952
1086
  return {
953
1087
  loading: isLoading,
954
- /**
955
- * Disabled when:
956
- * - the form is submitting
957
- * - the document is not modified & we're not cloning (you can save a clone entity straight away)
958
- * - the active tab is the published tab
959
- */ disabled: isSubmitting || !modified && !isCloning || activeTab === 'published',
1088
+ disabled: isDisabled,
960
1089
  label: formatMessage({
961
1090
  id: 'global.save',
962
1091
  defaultMessage: 'Save'
@@ -1195,4 +1324,5 @@ exports.DEFAULT_ACTIONS = DEFAULT_ACTIONS;
1195
1324
  exports.DocumentActionButton = DocumentActionButton;
1196
1325
  exports.DocumentActions = DocumentActions;
1197
1326
  exports.DocumentActionsMenu = DocumentActionsMenu;
1327
+ exports.openPublishConfirmDialog = openPublishConfirmDialog;
1198
1328
  //# sourceMappingURL=DocumentActions.js.map