@strapi/content-manager 5.48.1 → 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 (272) 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/pages/ComponentConfigurationPage.js +3 -2
  48. package/dist/admin/pages/ComponentConfigurationPage.js.map +1 -1
  49. package/dist/admin/pages/EditConfigurationPage.js +3 -2
  50. package/dist/admin/pages/EditConfigurationPage.js.map +1 -1
  51. package/dist/admin/pages/EditView/EditViewPage.js +3 -2
  52. package/dist/admin/pages/EditView/EditViewPage.js.map +1 -1
  53. package/dist/admin/pages/EditView/components/DocumentActions.js +80 -39
  54. package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
  55. package/dist/admin/pages/EditView/components/DocumentActions.mjs +67 -33
  56. package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
  57. package/dist/admin/pages/EditView/components/EditorToolbarObserver.js +3 -2
  58. package/dist/admin/pages/EditView/components/EditorToolbarObserver.js.map +1 -1
  59. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.js +4 -3
  60. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.js.map +1 -1
  61. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.js +3 -2
  62. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.js.map +1 -1
  63. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.js +3 -2
  64. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.js.map +1 -1
  65. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js +3 -2
  66. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js.map +1 -1
  67. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js +3 -2
  68. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js.map +1 -1
  69. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksInput.js +3 -2
  70. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksInput.js.map +1 -1
  71. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js +4 -3
  72. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js.map +1 -1
  73. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js +3 -2
  74. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js.map +1 -1
  75. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js +3 -2
  76. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js.map +1 -1
  77. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js +3 -2
  78. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
  79. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +3 -2
  80. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
  81. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js +7 -3
  82. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js.map +1 -1
  83. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js +3 -2
  84. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js.map +1 -1
  85. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +7 -3
  86. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
  87. package/dist/admin/pages/EditView/components/FormInputs/UID.js +3 -2
  88. package/dist/admin/pages/EditView/components/FormInputs/UID.js.map +1 -1
  89. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js +8 -4
  90. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js.map +1 -1
  91. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Field.js +3 -2
  92. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Field.js.map +1 -1
  93. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/PreviewWysiwyg.js +3 -2
  94. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/PreviewWysiwyg.js.map +1 -1
  95. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/continueList.js +5 -1
  96. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/continueList.js.map +1 -1
  97. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/mdRenderer.js +15 -2
  98. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/mdRenderer.js.map +1 -1
  99. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/sanitizer.js +5 -1
  100. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/sanitizer.js.map +1 -1
  101. package/dist/admin/pages/EditView/components/FormLayout.js +3 -2
  102. package/dist/admin/pages/EditView/components/FormLayout.js.map +1 -1
  103. package/dist/admin/pages/EditView/components/Header.js +3 -2
  104. package/dist/admin/pages/EditView/components/Header.js.map +1 -1
  105. package/dist/admin/pages/EditView/components/InputRenderer.js +3 -2
  106. package/dist/admin/pages/EditView/components/InputRenderer.js.map +1 -1
  107. package/dist/admin/pages/EditView/components/Panels.js +3 -2
  108. package/dist/admin/pages/EditView/components/Panels.js.map +1 -1
  109. package/dist/admin/pages/EditView/utils/data.js +5 -1
  110. package/dist/admin/pages/EditView/utils/data.js.map +1 -1
  111. package/dist/admin/pages/EditView/utils/keyboardShortcuts.js +35 -0
  112. package/dist/admin/pages/EditView/utils/keyboardShortcuts.js.map +1 -0
  113. package/dist/admin/pages/EditView/utils/keyboardShortcuts.mjs +33 -0
  114. package/dist/admin/pages/EditView/utils/keyboardShortcuts.mjs.map +1 -0
  115. package/dist/admin/pages/ListConfiguration/ListConfigurationPage.js +3 -2
  116. package/dist/admin/pages/ListConfiguration/ListConfigurationPage.js.map +1 -1
  117. package/dist/admin/pages/ListConfiguration/components/DraggableCard.js +3 -2
  118. package/dist/admin/pages/ListConfiguration/components/DraggableCard.js.map +1 -1
  119. package/dist/admin/pages/ListConfiguration/components/EditFieldForm.js +3 -2
  120. package/dist/admin/pages/ListConfiguration/components/EditFieldForm.js.map +1 -1
  121. package/dist/admin/pages/ListConfiguration/components/Settings.js +3 -2
  122. package/dist/admin/pages/ListConfiguration/components/Settings.js.map +1 -1
  123. package/dist/admin/pages/ListConfiguration/components/SortDisplayedFields.js +3 -2
  124. package/dist/admin/pages/ListConfiguration/components/SortDisplayedFields.js.map +1 -1
  125. package/dist/admin/pages/ListView/ListViewPage.js +3 -2
  126. package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
  127. package/dist/admin/pages/ListView/components/BulkActions/Actions.js +3 -2
  128. package/dist/admin/pages/ListView/components/BulkActions/Actions.js.map +1 -1
  129. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js +3 -2
  130. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js.map +1 -1
  131. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js +3 -2
  132. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js.map +1 -1
  133. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs.map +1 -1
  134. package/dist/admin/pages/ListView/components/Filters.js +3 -2
  135. package/dist/admin/pages/ListView/components/Filters.js.map +1 -1
  136. package/dist/admin/pages/ListView/components/TableActions.js +3 -2
  137. package/dist/admin/pages/ListView/components/TableActions.js.map +1 -1
  138. package/dist/admin/pages/ListView/components/TableCells/CellContent.js +7 -3
  139. package/dist/admin/pages/ListView/components/TableCells/CellContent.js.map +1 -1
  140. package/dist/admin/pages/ListView/components/TableCells/CellValue.js +7 -2
  141. package/dist/admin/pages/ListView/components/TableCells/CellValue.js.map +1 -1
  142. package/dist/admin/pages/ListView/components/TableCells/Relations.js +3 -2
  143. package/dist/admin/pages/ListView/components/TableCells/Relations.js.map +1 -1
  144. package/dist/admin/preview/components/InputPopover.js +3 -2
  145. package/dist/admin/preview/components/InputPopover.js.map +1 -1
  146. package/dist/admin/preview/hooks/usePreviewInputManager.js +3 -2
  147. package/dist/admin/preview/hooks/usePreviewInputManager.js.map +1 -1
  148. package/dist/admin/preview/pages/Preview.js +3 -2
  149. package/dist/admin/preview/pages/Preview.js.map +1 -1
  150. package/dist/admin/preview/routes.js +3 -2
  151. package/dist/admin/preview/routes.js.map +1 -1
  152. package/dist/admin/src/pages/EditView/utils/keyboardShortcuts.d.ts +18 -0
  153. package/dist/admin/translations/cs.json.js +2 -1
  154. package/dist/admin/translations/cs.json.js.map +1 -1
  155. package/dist/admin/translations/cs.json.mjs +2 -1
  156. package/dist/admin/translations/cs.json.mjs.map +1 -1
  157. package/dist/admin/translations/de.json.js +2 -1
  158. package/dist/admin/translations/de.json.js.map +1 -1
  159. package/dist/admin/translations/de.json.mjs +2 -1
  160. package/dist/admin/translations/de.json.mjs.map +1 -1
  161. package/dist/admin/translations/en.json.js +2 -1
  162. package/dist/admin/translations/en.json.js.map +1 -1
  163. package/dist/admin/translations/en.json.mjs +2 -1
  164. package/dist/admin/translations/en.json.mjs.map +1 -1
  165. package/dist/admin/translations/es.json.js +2 -1
  166. package/dist/admin/translations/es.json.js.map +1 -1
  167. package/dist/admin/translations/es.json.mjs +2 -1
  168. package/dist/admin/translations/es.json.mjs.map +1 -1
  169. package/dist/admin/translations/fr.json.js +2 -1
  170. package/dist/admin/translations/fr.json.js.map +1 -1
  171. package/dist/admin/translations/fr.json.mjs +2 -1
  172. package/dist/admin/translations/fr.json.mjs.map +1 -1
  173. package/dist/admin/translations/nl.json.js +2 -1
  174. package/dist/admin/translations/nl.json.js.map +1 -1
  175. package/dist/admin/translations/nl.json.mjs +2 -1
  176. package/dist/admin/translations/nl.json.mjs.map +1 -1
  177. package/dist/admin/translations/pl.json.js +2 -1
  178. package/dist/admin/translations/pl.json.js.map +1 -1
  179. package/dist/admin/translations/pl.json.mjs +2 -1
  180. package/dist/admin/translations/pl.json.mjs.map +1 -1
  181. package/dist/admin/translations/sk.json.js +2 -1
  182. package/dist/admin/translations/sk.json.js.map +1 -1
  183. package/dist/admin/translations/sk.json.mjs +2 -1
  184. package/dist/admin/translations/sk.json.mjs.map +1 -1
  185. package/dist/admin/utils/objects.js +9 -4
  186. package/dist/admin/utils/objects.js.map +1 -1
  187. package/dist/admin/utils/validation.js +7 -3
  188. package/dist/admin/utils/validation.js.map +1 -1
  189. package/dist/server/controllers/utils/clone.js +5 -1
  190. package/dist/server/controllers/utils/clone.js.map +1 -1
  191. package/dist/server/controllers/utils/clone.mjs.map +1 -1
  192. package/dist/server/controllers/validation/index.js +6 -2
  193. package/dist/server/controllers/validation/index.js.map +1 -1
  194. package/dist/server/homepage/services/homepage.js +6 -1
  195. package/dist/server/homepage/services/homepage.js.map +1 -1
  196. package/dist/server/homepage/services/homepage.mjs +6 -1
  197. package/dist/server/homepage/services/homepage.mjs.map +1 -1
  198. package/dist/server/mcp/handlers/collection-handlers.js +15 -18
  199. package/dist/server/mcp/handlers/collection-handlers.js.map +1 -1
  200. package/dist/server/mcp/handlers/collection-handlers.mjs +16 -19
  201. package/dist/server/mcp/handlers/collection-handlers.mjs.map +1 -1
  202. package/dist/server/mcp/handlers/single-type-handlers.js +12 -12
  203. package/dist/server/mcp/handlers/single-type-handlers.js.map +1 -1
  204. package/dist/server/mcp/handlers/single-type-handlers.mjs +13 -13
  205. package/dist/server/mcp/handlers/single-type-handlers.mjs.map +1 -1
  206. package/dist/server/mcp/register-content-manager-mcp-tools.js +4 -1
  207. package/dist/server/mcp/register-content-manager-mcp-tools.js.map +1 -1
  208. package/dist/server/mcp/register-content-manager-mcp-tools.mjs +4 -1
  209. package/dist/server/mcp/register-content-manager-mcp-tools.mjs.map +1 -1
  210. package/dist/server/mcp/sanitizers/shape-relations.js +108 -0
  211. package/dist/server/mcp/sanitizers/shape-relations.js.map +1 -0
  212. package/dist/server/mcp/sanitizers/shape-relations.mjs +103 -0
  213. package/dist/server/mcp/sanitizers/shape-relations.mjs.map +1 -0
  214. package/dist/server/mcp/schemas/data-schema.js +0 -3
  215. package/dist/server/mcp/schemas/data-schema.js.map +1 -1
  216. package/dist/server/mcp/schemas/data-schema.mjs +0 -3
  217. package/dist/server/mcp/schemas/data-schema.mjs.map +1 -1
  218. package/dist/server/mcp/schemas/output-schemas.js +30 -4
  219. package/dist/server/mcp/schemas/output-schemas.js.map +1 -1
  220. package/dist/server/mcp/schemas/output-schemas.mjs +30 -4
  221. package/dist/server/mcp/schemas/output-schemas.mjs.map +1 -1
  222. package/dist/server/mcp/utils.js +30 -3
  223. package/dist/server/mcp/utils.js.map +1 -1
  224. package/dist/server/mcp/utils.mjs +30 -4
  225. package/dist/server/mcp/utils.mjs.map +1 -1
  226. package/dist/server/middlewares/routing.js +5 -1
  227. package/dist/server/middlewares/routing.js.map +1 -1
  228. package/dist/server/services/populate-builder.js.map +1 -1
  229. package/dist/server/services/populate-builder.mjs.map +1 -1
  230. package/dist/server/services/uid.js +9 -4
  231. package/dist/server/services/uid.js.map +1 -1
  232. package/dist/server/services/utils/configuration/attributes.js +14 -10
  233. package/dist/server/services/utils/configuration/attributes.js.map +1 -1
  234. package/dist/server/services/utils/configuration/layouts.js +8 -4
  235. package/dist/server/services/utils/configuration/layouts.js.map +1 -1
  236. package/dist/server/services/utils/configuration/metadatas.js +19 -15
  237. package/dist/server/services/utils/configuration/metadatas.js.map +1 -1
  238. package/dist/server/services/utils/configuration/settings.js +5 -1
  239. package/dist/server/services/utils/configuration/settings.js.map +1 -1
  240. package/dist/server/services/utils/draft.js +5 -1
  241. package/dist/server/services/utils/draft.js.map +1 -1
  242. package/dist/server/services/utils/populate.js +8 -4
  243. package/dist/server/services/utils/populate.js.map +1 -1
  244. package/dist/server/services/utils/populate.mjs.map +1 -1
  245. package/dist/server/services/utils/store.js +9 -5
  246. package/dist/server/services/utils/store.js.map +1 -1
  247. package/dist/server/src/controllers/utils/clone.d.ts +1 -1
  248. package/dist/server/src/controllers/utils/clone.d.ts.map +1 -1
  249. package/dist/server/src/homepage/services/homepage.d.ts.map +1 -1
  250. package/dist/server/src/index.d.ts +3 -1
  251. package/dist/server/src/index.d.ts.map +1 -1
  252. package/dist/server/src/mcp/handlers/collection-handlers.d.ts.map +1 -1
  253. package/dist/server/src/mcp/handlers/single-type-handlers.d.ts.map +1 -1
  254. package/dist/server/src/mcp/register-content-manager-mcp-tools.d.ts +2 -1
  255. package/dist/server/src/mcp/register-content-manager-mcp-tools.d.ts.map +1 -1
  256. package/dist/server/src/mcp/sanitizers/shape-relations.d.ts +38 -0
  257. package/dist/server/src/mcp/sanitizers/shape-relations.d.ts.map +1 -0
  258. package/dist/server/src/mcp/schemas/data-schema.d.ts +0 -3
  259. package/dist/server/src/mcp/schemas/data-schema.d.ts.map +1 -1
  260. package/dist/server/src/mcp/schemas/output-schemas.d.ts +2 -2
  261. package/dist/server/src/mcp/schemas/output-schemas.d.ts.map +1 -1
  262. package/dist/server/src/mcp/types.d.ts +2 -2
  263. package/dist/server/src/mcp/types.d.ts.map +1 -1
  264. package/dist/server/src/mcp/utils.d.ts +19 -1
  265. package/dist/server/src/mcp/utils.d.ts.map +1 -1
  266. package/dist/server/src/services/index.d.ts +3 -1
  267. package/dist/server/src/services/index.d.ts.map +1 -1
  268. package/dist/server/src/services/populate-builder.d.ts +3 -1
  269. package/dist/server/src/services/populate-builder.d.ts.map +1 -1
  270. package/dist/server/src/services/utils/populate.d.ts +3 -1
  271. package/dist/server/src/services/utils/populate.d.ts.map +1 -1
  272. package/package.json +7 -7
@@ -21,6 +21,7 @@ import { useGetDraftRelationCountQuery as useLazyGetDraftRelationCountQuery, use
21
21
  import { buildValidParams, isBaseQueryError } from '../../../utils/api.mjs';
22
22
  import { getTranslation } from '../../../utils/translations.mjs';
23
23
  import { handleInvisibleAttributes } from '../utils/data.mjs';
24
+ import { getEditViewShortcut } from '../utils/keyboardShortcuts.mjs';
24
25
  import { useRelationModal } from './FormInputs/Relations/RelationModal.mjs';
25
26
 
26
27
  const connectRelationToParent = (parentDataToUpdate, fieldToConnect, data, fieldToConnectUID)=>{
@@ -71,18 +72,23 @@ const DocumentActions = ({ actions })=>{
71
72
  return null;
72
73
  }
73
74
  const addHintTooltip = (action, children)=>{
74
- return !action.disabled ? /*#__PURE__*/ jsx(Tooltip, {
75
- label: formatMessage({
76
- id: 'content-manager.containers.EditView.saveHint',
77
- defaultMessage: 'Ctrl / Cmd + Enter to {action}'
78
- }, {
79
- action: action.label
80
- }),
75
+ if (action.disabled) {
76
+ return children;
77
+ }
78
+ const hint = action.type === 'publish' ? formatMessage({
79
+ id: 'content-manager.containers.EditView.publishHint',
80
+ defaultMessage: 'Ctrl / Cmd + Shift + Enter to publish'
81
+ }) : formatMessage({
82
+ id: 'content-manager.containers.EditView.saveHint',
83
+ defaultMessage: 'Ctrl / Cmd + Enter to save'
84
+ });
85
+ return /*#__PURE__*/ jsx(Tooltip, {
86
+ label: hint,
81
87
  children: /*#__PURE__*/ jsx(Flex, {
82
88
  width: "100%",
83
89
  children: children
84
90
  })
85
- }) : children;
91
+ });
86
92
  };
87
93
  const primaryActionContent = /*#__PURE__*/ jsxs(Fragment, {
88
94
  children: [
@@ -129,15 +135,15 @@ const DocumentActions = ({ actions })=>{
129
135
  alignItems: "stretch",
130
136
  direction: "column",
131
137
  children: secondaryAction.type === 'publish' ? /*#__PURE__*/ jsx(tours.contentManager.Publish, {
132
- children: /*#__PURE__*/ jsx(DocumentActionButton, {
138
+ children: addHintTooltip(secondaryAction, /*#__PURE__*/ jsx(DocumentActionButton, {
133
139
  ...secondaryAction,
134
140
  variant: secondaryAction.variant || 'secondary'
135
- })
136
- }) : /*#__PURE__*/ jsx(DocumentActionButton, {
141
+ }))
142
+ }) : addHintTooltip(secondaryAction, /*#__PURE__*/ jsx(DocumentActionButton, {
137
143
  ...secondaryAction,
138
144
  variant: secondaryAction.variant || 'secondary',
139
145
  buttonType: "submit"
140
- })
146
+ }))
141
147
  }) : null
142
148
  ]
143
149
  });
@@ -659,17 +665,28 @@ const transformData = (data)=>{
659
665
  // see RFC "Count draft relations" in Notion
660
666
  const enableDraftRelationsCount = false;
661
667
  const hasDraftRelations = enableDraftRelationsCount;
662
- // Auto-publish on CMD+Enter on macOS, and CTRL+Enter on Windows/Linux
668
+ /**
669
+ * Disabled when:
670
+ * - currently if you're cloning a document we don't support publish & clone at the same time.
671
+ * - the form is submitting
672
+ * - the active tab is the published tab
673
+ * - the document is already published & not modified
674
+ * - the document is being created & not modified
675
+ * - the user doesn't have the permission to publish
676
+ */ const isDisabled = isCloning || isSubmitting || isLoadingDraftRelations || activeTab === 'published' || !modified && isDocumentPublished || !modified && !document?.documentId || !canPublish;
677
+ // Publish on CMD+Shift+Enter (macOS) / CTRL+Shift+Enter (Windows/Linux).
678
+ // Saving a draft (CMD/CTRL+Enter) is handled by the UpdateAction.
663
679
  React.useEffect(()=>{
664
680
  if (!schema?.options?.draftAndPublish) {
665
681
  return;
666
682
  }
667
683
  const handleKeyDown = (e)=>{
668
- if (e.key === 'Enter' && (e.metaKey || e.ctrlKey)) {
669
- e.preventDefault();
670
- {
671
- performPublish();
672
- }
684
+ if (getEditViewShortcut(e) !== 'publish') {
685
+ return;
686
+ }
687
+ e.preventDefault();
688
+ if (!isDisabled && !hasDraftRelations) {
689
+ performPublish();
673
690
  }
674
691
  };
675
692
  window.addEventListener('keydown', handleKeyDown);
@@ -678,6 +695,7 @@ const transformData = (data)=>{
678
695
  };
679
696
  }, [
680
697
  hasDraftRelations,
698
+ isDisabled,
681
699
  performPublish,
682
700
  schema?.options?.draftAndPublish
683
701
  ]);
@@ -692,15 +710,7 @@ const transformData = (data)=>{
692
710
  'preview',
693
711
  'relation-modal'
694
712
  ],
695
- /**
696
- * Disabled when:
697
- * - currently if you're cloning a document we don't support publish & clone at the same time.
698
- * - the form is submitting
699
- * - the active tab is the published tab
700
- * - the document is already published & not modified
701
- * - the document is being created & not modified
702
- * - the user doesn't have the permission to publish
703
- */ disabled: isCloning || isSubmitting || isLoadingDraftRelations || activeTab === 'published' || !modified && isDocumentPublished || !modified && !document?.documentId || !canPublish,
713
+ disabled: isDisabled,
704
714
  label: formatMessage({
705
715
  id: 'app.utils.publish',
706
716
  defaultMessage: 'Publish'
@@ -779,6 +789,12 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType })=>{
779
789
  const { schema } = useDoc();
780
790
  const suitableSchema = fromRelationModal ? relationalModalSchema : schema;
781
791
  const hasDraftAndPublished = suitableSchema?.options?.draftAndPublish ?? false;
792
+ /**
793
+ * Disabled when:
794
+ * - the form is submitting
795
+ * - the document is not modified & we're not cloning (you can save a clone entity straight away)
796
+ * - the active tab is the published tab
797
+ */ const isDisabled = isSubmitting || !modified && !isCloning || activeTab === 'published';
782
798
  const handleUpdate = async ()=>{
783
799
  setSubmitting(true);
784
800
  try {
@@ -928,14 +944,32 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType })=>{
928
944
  }
929
945
  }
930
946
  };
947
+ // Save a draft on CMD+Enter (macOS) / CTRL+Enter (Windows/Linux), with CMD/CTRL+S as an alias.
948
+ // Publishing (CMD/CTRL+Shift+Enter) is handled by the PublishAction.
949
+ // `handleUpdate` is recreated on every render, so we read the latest version (and the latest
950
+ // disabled state) through refs and register the listener only once.
951
+ const handleUpdateRef = React.useRef(handleUpdate);
952
+ handleUpdateRef.current = handleUpdate;
953
+ const isDisabledRef = React.useRef(isDisabled);
954
+ isDisabledRef.current = isDisabled;
955
+ React.useEffect(()=>{
956
+ const handleKeyDown = (e)=>{
957
+ if (getEditViewShortcut(e) !== 'save') {
958
+ return;
959
+ }
960
+ e.preventDefault();
961
+ if (!isDisabledRef.current) {
962
+ handleUpdateRef.current();
963
+ }
964
+ };
965
+ window.addEventListener('keydown', handleKeyDown);
966
+ return ()=>{
967
+ window.removeEventListener('keydown', handleKeyDown);
968
+ };
969
+ }, []);
931
970
  return {
932
971
  loading: isLoading,
933
- /**
934
- * Disabled when:
935
- * - the form is submitting
936
- * - the document is not modified & we're not cloning (you can save a clone entity straight away)
937
- * - the active tab is the published tab
938
- */ disabled: isSubmitting || !modified && !isCloning || activeTab === 'published',
972
+ disabled: isDisabled,
939
973
  label: formatMessage({
940
974
  id: 'global.save',
941
975
  defaultMessage: 'Save'