@strapi/content-manager 0.0.0-experimental.826f263c58b6886b849d3f03b81f7a530bc51c91 → 0.0.0-experimental.82fd5bc51d11a2da848fc7fd1cc573f8ea0a6535

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 (1369) hide show
  1. package/LICENSE +18 -3
  2. package/dist/admin/components/ComponentIcon.js +176 -0
  3. package/dist/admin/components/ComponentIcon.js.map +1 -0
  4. package/dist/admin/components/ComponentIcon.mjs +153 -0
  5. package/dist/admin/components/ComponentIcon.mjs.map +1 -0
  6. package/dist/admin/components/ConfigurationForm/EditFieldForm.js +259 -0
  7. package/dist/admin/components/ConfigurationForm/EditFieldForm.js.map +1 -0
  8. package/dist/admin/components/ConfigurationForm/EditFieldForm.mjs +238 -0
  9. package/dist/admin/components/ConfigurationForm/EditFieldForm.mjs.map +1 -0
  10. package/dist/admin/components/ConfigurationForm/Fields.js +534 -0
  11. package/dist/admin/components/ConfigurationForm/Fields.js.map +1 -0
  12. package/dist/admin/components/ConfigurationForm/Fields.mjs +512 -0
  13. package/dist/admin/components/ConfigurationForm/Fields.mjs.map +1 -0
  14. package/dist/admin/components/ConfigurationForm/Form.js +253 -0
  15. package/dist/admin/components/ConfigurationForm/Form.js.map +1 -0
  16. package/dist/admin/components/ConfigurationForm/Form.mjs +232 -0
  17. package/dist/admin/components/ConfigurationForm/Form.mjs.map +1 -0
  18. package/dist/admin/components/DragLayer.js +50 -0
  19. package/dist/admin/components/DragLayer.js.map +1 -0
  20. package/dist/admin/components/DragLayer.mjs +48 -0
  21. package/dist/admin/components/DragLayer.mjs.map +1 -0
  22. package/dist/admin/components/DragPreviews/CardDragPreview.js +82 -0
  23. package/dist/admin/components/DragPreviews/CardDragPreview.js.map +1 -0
  24. package/dist/admin/components/DragPreviews/CardDragPreview.mjs +80 -0
  25. package/dist/admin/components/DragPreviews/CardDragPreview.mjs.map +1 -0
  26. package/dist/admin/components/DragPreviews/ComponentDragPreview.js +83 -0
  27. package/dist/admin/components/DragPreviews/ComponentDragPreview.js.map +1 -0
  28. package/dist/admin/components/DragPreviews/ComponentDragPreview.mjs +81 -0
  29. package/dist/admin/components/DragPreviews/ComponentDragPreview.mjs.map +1 -0
  30. package/dist/admin/components/DragPreviews/RelationDragPreview.js +73 -0
  31. package/dist/admin/components/DragPreviews/RelationDragPreview.js.map +1 -0
  32. package/dist/admin/components/DragPreviews/RelationDragPreview.mjs +71 -0
  33. package/dist/admin/components/DragPreviews/RelationDragPreview.mjs.map +1 -0
  34. package/dist/admin/components/FieldTypeIcon.js +58 -0
  35. package/dist/admin/components/FieldTypeIcon.js.map +1 -0
  36. package/dist/admin/components/FieldTypeIcon.mjs +56 -0
  37. package/dist/admin/components/FieldTypeIcon.mjs.map +1 -0
  38. package/dist/admin/components/InjectionZone.js +44 -0
  39. package/dist/admin/components/InjectionZone.js.map +1 -0
  40. package/dist/admin/components/InjectionZone.mjs +40 -0
  41. package/dist/admin/components/InjectionZone.mjs.map +1 -0
  42. package/dist/admin/components/LeftMenu.js +172 -0
  43. package/dist/admin/components/LeftMenu.js.map +1 -0
  44. package/dist/admin/components/LeftMenu.mjs +151 -0
  45. package/dist/admin/components/LeftMenu.mjs.map +1 -0
  46. package/dist/admin/components/RelativeTime.js +76 -0
  47. package/dist/admin/components/RelativeTime.js.map +1 -0
  48. package/dist/admin/components/RelativeTime.mjs +55 -0
  49. package/dist/admin/components/RelativeTime.mjs.map +1 -0
  50. package/dist/admin/constants/attributes.js +48 -0
  51. package/dist/admin/constants/attributes.js.map +1 -0
  52. package/dist/admin/constants/attributes.mjs +38 -0
  53. package/dist/admin/constants/attributes.mjs.map +1 -0
  54. package/dist/admin/constants/collections.js +8 -0
  55. package/dist/admin/constants/collections.js.map +1 -0
  56. package/dist/admin/constants/collections.mjs +5 -0
  57. package/dist/admin/constants/collections.mjs.map +1 -0
  58. package/dist/admin/constants/dragAndDrop.js +13 -0
  59. package/dist/admin/constants/dragAndDrop.js.map +1 -0
  60. package/dist/admin/constants/dragAndDrop.mjs +11 -0
  61. package/dist/admin/constants/dragAndDrop.mjs.map +1 -0
  62. package/dist/admin/constants/hooks.js +27 -0
  63. package/dist/admin/constants/hooks.js.map +1 -0
  64. package/dist/admin/constants/hooks.mjs +25 -0
  65. package/dist/admin/constants/hooks.mjs.map +1 -0
  66. package/dist/admin/constants/plugin.js +14 -0
  67. package/dist/admin/constants/plugin.js.map +1 -0
  68. package/dist/admin/constants/plugin.mjs +11 -0
  69. package/dist/admin/constants/plugin.mjs.map +1 -0
  70. package/dist/admin/content-manager.js +133 -0
  71. package/dist/admin/content-manager.js.map +1 -0
  72. package/dist/admin/content-manager.mjs +131 -0
  73. package/dist/admin/content-manager.mjs.map +1 -0
  74. package/dist/admin/features/DocumentRBAC.js +126 -0
  75. package/dist/admin/features/DocumentRBAC.js.map +1 -0
  76. package/dist/admin/features/DocumentRBAC.mjs +104 -0
  77. package/dist/admin/features/DocumentRBAC.mjs.map +1 -0
  78. package/dist/admin/history/components/HistoryAction.js +61 -0
  79. package/dist/admin/history/components/HistoryAction.js.map +1 -0
  80. package/dist/admin/history/components/HistoryAction.mjs +59 -0
  81. package/dist/admin/history/components/HistoryAction.mjs.map +1 -0
  82. package/dist/admin/history/components/VersionContent.js +264 -0
  83. package/dist/admin/history/components/VersionContent.js.map +1 -0
  84. package/dist/admin/history/components/VersionContent.mjs +242 -0
  85. package/dist/admin/history/components/VersionContent.mjs.map +1 -0
  86. package/dist/admin/history/components/VersionHeader.js +210 -0
  87. package/dist/admin/history/components/VersionHeader.js.map +1 -0
  88. package/dist/admin/history/components/VersionHeader.mjs +189 -0
  89. package/dist/admin/history/components/VersionHeader.mjs.map +1 -0
  90. package/dist/admin/history/components/VersionInputRenderer.js +490 -0
  91. package/dist/admin/history/components/VersionInputRenderer.js.map +1 -0
  92. package/dist/admin/history/components/VersionInputRenderer.mjs +469 -0
  93. package/dist/admin/history/components/VersionInputRenderer.mjs.map +1 -0
  94. package/dist/admin/history/components/VersionsList.js +210 -0
  95. package/dist/admin/history/components/VersionsList.js.map +1 -0
  96. package/dist/admin/history/components/VersionsList.mjs +208 -0
  97. package/dist/admin/history/components/VersionsList.mjs.map +1 -0
  98. package/dist/admin/history/index.js +21 -0
  99. package/dist/admin/history/index.js.map +1 -0
  100. package/dist/admin/history/index.mjs +19 -0
  101. package/dist/admin/history/index.mjs.map +1 -0
  102. package/dist/admin/history/pages/History.js +220 -0
  103. package/dist/admin/history/pages/History.js.map +1 -0
  104. package/dist/admin/history/pages/History.mjs +197 -0
  105. package/dist/admin/history/pages/History.mjs.map +1 -0
  106. package/dist/admin/history/routes.js +41 -0
  107. package/dist/admin/history/routes.js.map +1 -0
  108. package/dist/admin/history/routes.mjs +20 -0
  109. package/dist/admin/history/routes.mjs.map +1 -0
  110. package/dist/admin/history/services/historyVersion.js +46 -0
  111. package/dist/admin/history/services/historyVersion.js.map +1 -0
  112. package/dist/admin/history/services/historyVersion.mjs +43 -0
  113. package/dist/admin/history/services/historyVersion.mjs.map +1 -0
  114. package/dist/admin/hooks/useContentManagerInitData.js +166 -0
  115. package/dist/admin/hooks/useContentManagerInitData.js.map +1 -0
  116. package/dist/admin/hooks/useContentManagerInitData.mjs +164 -0
  117. package/dist/admin/hooks/useContentManagerInitData.mjs.map +1 -0
  118. package/dist/admin/hooks/useContentTypeSchema.js +115 -0
  119. package/dist/admin/hooks/useContentTypeSchema.js.map +1 -0
  120. package/dist/admin/hooks/useContentTypeSchema.mjs +93 -0
  121. package/dist/admin/hooks/useContentTypeSchema.mjs.map +1 -0
  122. package/dist/admin/hooks/useDebounce.js +22 -0
  123. package/dist/admin/hooks/useDebounce.js.map +1 -0
  124. package/dist/admin/hooks/useDebounce.mjs +20 -0
  125. package/dist/admin/hooks/useDebounce.mjs.map +1 -0
  126. package/dist/admin/hooks/useDocument.js +244 -0
  127. package/dist/admin/hooks/useDocument.js.map +1 -0
  128. package/dist/admin/hooks/useDocument.mjs +221 -0
  129. package/dist/admin/hooks/useDocument.mjs.map +1 -0
  130. package/dist/admin/hooks/useDocumentActions.js +603 -0
  131. package/dist/admin/hooks/useDocumentActions.js.map +1 -0
  132. package/dist/admin/hooks/useDocumentActions.mjs +582 -0
  133. package/dist/admin/hooks/useDocumentActions.mjs.map +1 -0
  134. package/dist/admin/hooks/useDocumentContext.js +57 -0
  135. package/dist/admin/hooks/useDocumentContext.js.map +1 -0
  136. package/dist/admin/hooks/useDocumentContext.mjs +36 -0
  137. package/dist/admin/hooks/useDocumentContext.mjs.map +1 -0
  138. package/dist/admin/hooks/useDocumentLayout.js +311 -0
  139. package/dist/admin/hooks/useDocumentLayout.js.map +1 -0
  140. package/dist/admin/hooks/useDocumentLayout.mjs +286 -0
  141. package/dist/admin/hooks/useDocumentLayout.mjs.map +1 -0
  142. package/dist/admin/hooks/useDragAndDrop.js +193 -0
  143. package/dist/admin/hooks/useDragAndDrop.js.map +1 -0
  144. package/dist/admin/hooks/useDragAndDrop.mjs +170 -0
  145. package/dist/admin/hooks/useDragAndDrop.mjs.map +1 -0
  146. package/dist/admin/hooks/useKeyboardDragAndDrop.js +94 -0
  147. package/dist/admin/hooks/useKeyboardDragAndDrop.js.map +1 -0
  148. package/dist/admin/hooks/useKeyboardDragAndDrop.mjs +73 -0
  149. package/dist/admin/hooks/useKeyboardDragAndDrop.mjs.map +1 -0
  150. package/dist/admin/hooks/useLazyComponents.js +61 -0
  151. package/dist/admin/hooks/useLazyComponents.js.map +1 -0
  152. package/dist/admin/hooks/useLazyComponents.mjs +59 -0
  153. package/dist/admin/hooks/useLazyComponents.mjs.map +1 -0
  154. package/dist/admin/hooks/useOnce.js +28 -0
  155. package/dist/admin/hooks/useOnce.js.map +1 -0
  156. package/dist/admin/hooks/useOnce.mjs +7 -0
  157. package/dist/admin/hooks/useOnce.mjs.map +1 -0
  158. package/dist/admin/hooks/usePrev.js +16 -0
  159. package/dist/admin/hooks/usePrev.js.map +1 -0
  160. package/dist/admin/hooks/usePrev.mjs +14 -0
  161. package/dist/admin/hooks/usePrev.mjs.map +1 -0
  162. package/dist/admin/index.js +126 -11
  163. package/dist/admin/index.js.map +1 -1
  164. package/dist/admin/index.mjs +111 -10
  165. package/dist/admin/index.mjs.map +1 -1
  166. package/dist/admin/layout.js +142 -0
  167. package/dist/admin/layout.js.map +1 -0
  168. package/dist/admin/layout.mjs +121 -0
  169. package/dist/admin/layout.mjs.map +1 -0
  170. package/dist/admin/modules/app.js +33 -0
  171. package/dist/admin/modules/app.js.map +1 -0
  172. package/dist/admin/modules/app.mjs +30 -0
  173. package/dist/admin/modules/app.mjs.map +1 -0
  174. package/dist/admin/modules/hooks.js +10 -0
  175. package/dist/admin/modules/hooks.js.map +1 -0
  176. package/dist/admin/modules/hooks.mjs +7 -0
  177. package/dist/admin/modules/hooks.mjs.map +1 -0
  178. package/dist/admin/modules/reducers.js +11 -0
  179. package/dist/admin/modules/reducers.js.map +1 -0
  180. package/dist/admin/modules/reducers.mjs +9 -0
  181. package/dist/admin/modules/reducers.mjs.map +1 -0
  182. package/dist/admin/pages/ComponentConfigurationPage.js +248 -0
  183. package/dist/admin/pages/ComponentConfigurationPage.js.map +1 -0
  184. package/dist/admin/pages/ComponentConfigurationPage.mjs +226 -0
  185. package/dist/admin/pages/ComponentConfigurationPage.mjs.map +1 -0
  186. package/dist/admin/pages/EditConfigurationPage.js +164 -0
  187. package/dist/admin/pages/EditConfigurationPage.js.map +1 -0
  188. package/dist/admin/pages/EditConfigurationPage.mjs +142 -0
  189. package/dist/admin/pages/EditConfigurationPage.mjs.map +1 -0
  190. package/dist/admin/pages/EditView/EditViewPage.js +235 -0
  191. package/dist/admin/pages/EditView/EditViewPage.js.map +1 -0
  192. package/dist/admin/pages/EditView/EditViewPage.mjs +231 -0
  193. package/dist/admin/pages/EditView/EditViewPage.mjs.map +1 -0
  194. package/dist/admin/pages/EditView/components/DocumentActions.js +957 -0
  195. package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -0
  196. package/dist/admin/pages/EditView/components/DocumentActions.mjs +933 -0
  197. package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -0
  198. package/dist/admin/pages/EditView/components/DocumentStatus.js +34 -0
  199. package/dist/admin/pages/EditView/components/DocumentStatus.js.map +1 -0
  200. package/dist/admin/pages/EditView/components/DocumentStatus.mjs +32 -0
  201. package/dist/admin/pages/EditView/components/DocumentStatus.mjs.map +1 -0
  202. package/dist/admin/pages/EditView/components/EditorToolbarObserver.js +120 -0
  203. package/dist/admin/pages/EditView/components/EditorToolbarObserver.js.map +1 -0
  204. package/dist/admin/pages/EditView/components/EditorToolbarObserver.mjs +99 -0
  205. package/dist/admin/pages/EditView/components/EditorToolbarObserver.mjs.map +1 -0
  206. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.js +224 -0
  207. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.js.map +1 -0
  208. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.mjs +201 -0
  209. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.mjs.map +1 -0
  210. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Heading.js +165 -0
  211. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Heading.js.map +1 -0
  212. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Heading.mjs +163 -0
  213. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Heading.mjs.map +1 -0
  214. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.js +230 -0
  215. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.js.map +1 -0
  216. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.mjs +209 -0
  217. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.mjs.map +1 -0
  218. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.js +232 -0
  219. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.js.map +1 -0
  220. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.mjs +211 -0
  221. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.mjs.map +1 -0
  222. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.js +360 -0
  223. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.js.map +1 -0
  224. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.mjs +358 -0
  225. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.mjs.map +1 -0
  226. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Paragraph.js +95 -0
  227. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Paragraph.js.map +1 -0
  228. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Paragraph.mjs +93 -0
  229. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Paragraph.mjs.map +1 -0
  230. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Quote.js +49 -0
  231. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Quote.js.map +1 -0
  232. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Quote.mjs +47 -0
  233. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Quote.mjs.map +1 -0
  234. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js +532 -0
  235. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js.map +1 -0
  236. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs +511 -0
  237. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs.map +1 -0
  238. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js +222 -0
  239. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js.map +1 -0
  240. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs +198 -0
  241. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs.map +1 -0
  242. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksInput.js +64 -0
  243. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksInput.js.map +1 -0
  244. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksInput.mjs +43 -0
  245. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksInput.mjs.map +1 -0
  246. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js +635 -0
  247. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js.map +1 -0
  248. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs +612 -0
  249. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs.map +1 -0
  250. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js +138 -0
  251. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js.map +1 -0
  252. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs +117 -0
  253. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs.map +1 -0
  254. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Modifiers.js +134 -0
  255. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Modifiers.js.map +1 -0
  256. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Modifiers.mjs +132 -0
  257. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Modifiers.mjs.map +1 -0
  258. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withImages.js +17 -0
  259. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withImages.js.map +1 -0
  260. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withImages.mjs +15 -0
  261. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withImages.mjs.map +1 -0
  262. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withLinks.js +75 -0
  263. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withLinks.js.map +1 -0
  264. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withLinks.mjs +73 -0
  265. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withLinks.mjs.map +1 -0
  266. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withStrapiSchema.js +32 -0
  267. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withStrapiSchema.js.map +1 -0
  268. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withStrapiSchema.mjs +30 -0
  269. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withStrapiSchema.mjs.map +1 -0
  270. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/constants.js +223 -0
  271. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/constants.js.map +1 -0
  272. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/constants.mjs +221 -0
  273. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/constants.mjs.map +1 -0
  274. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/conversions.js +48 -0
  275. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/conversions.js.map +1 -0
  276. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/conversions.mjs +45 -0
  277. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/conversions.mjs.map +1 -0
  278. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/enterKey.js +64 -0
  279. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/enterKey.js.map +1 -0
  280. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/enterKey.mjs +62 -0
  281. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/enterKey.mjs.map +1 -0
  282. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/links.js +84 -0
  283. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/links.js.map +1 -0
  284. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/links.mjs +80 -0
  285. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/links.mjs.map +1 -0
  286. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/types.js +18 -0
  287. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/types.js.map +1 -0
  288. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/types.mjs +13 -0
  289. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/types.mjs.map +1 -0
  290. package/dist/admin/pages/EditView/components/FormInputs/Component/Initializer.js +59 -0
  291. package/dist/admin/pages/EditView/components/FormInputs/Component/Initializer.js.map +1 -0
  292. package/dist/admin/pages/EditView/components/FormInputs/Component/Initializer.mjs +57 -0
  293. package/dist/admin/pages/EditView/components/FormInputs/Component/Initializer.mjs.map +1 -0
  294. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js +106 -0
  295. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js.map +1 -0
  296. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.mjs +85 -0
  297. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.mjs.map +1 -0
  298. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js +70 -0
  299. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js.map +1 -0
  300. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs +68 -0
  301. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs.map +1 -0
  302. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js +414 -0
  303. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -0
  304. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs +393 -0
  305. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs.map +1 -0
  306. package/dist/admin/pages/EditView/components/FormInputs/ComponentContext.js +21 -0
  307. package/dist/admin/pages/EditView/components/FormInputs/ComponentContext.js.map +1 -0
  308. package/dist/admin/pages/EditView/components/FormInputs/ComponentContext.mjs +18 -0
  309. package/dist/admin/pages/EditView/components/FormInputs/ComponentContext.mjs.map +1 -0
  310. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/AddComponentButton.js +58 -0
  311. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/AddComponentButton.js.map +1 -0
  312. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/AddComponentButton.mjs +56 -0
  313. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/AddComponentButton.mjs.map +1 -0
  314. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js +103 -0
  315. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js.map +1 -0
  316. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs +101 -0
  317. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs.map +1 -0
  318. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentPicker.js +56 -0
  319. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentPicker.js.map +1 -0
  320. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentPicker.mjs +54 -0
  321. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentPicker.mjs.map +1 -0
  322. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +326 -0
  323. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -0
  324. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +305 -0
  325. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -0
  326. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicZoneLabel.js +73 -0
  327. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicZoneLabel.js.map +1 -0
  328. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicZoneLabel.mjs +71 -0
  329. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicZoneLabel.mjs.map +1 -0
  330. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js +252 -0
  331. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js.map +1 -0
  332. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs +230 -0
  333. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs.map +1 -0
  334. package/dist/admin/pages/EditView/components/FormInputs/NotAllowed.js +38 -0
  335. package/dist/admin/pages/EditView/components/FormInputs/NotAllowed.js.map +1 -0
  336. package/dist/admin/pages/EditView/components/FormInputs/NotAllowed.mjs +36 -0
  337. package/dist/admin/pages/EditView/components/FormInputs/NotAllowed.mjs.map +1 -0
  338. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js +548 -0
  339. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js.map +1 -0
  340. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs +524 -0
  341. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs.map +1 -0
  342. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +886 -0
  343. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -0
  344. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs +862 -0
  345. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -0
  346. package/dist/admin/pages/EditView/components/FormInputs/UID.js +294 -0
  347. package/dist/admin/pages/EditView/components/FormInputs/UID.js.map +1 -0
  348. package/dist/admin/pages/EditView/components/FormInputs/UID.mjs +273 -0
  349. package/dist/admin/pages/EditView/components/FormInputs/UID.mjs.map +1 -0
  350. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js +463 -0
  351. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js.map +1 -0
  352. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.mjs +442 -0
  353. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.mjs.map +1 -0
  354. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.js +161 -0
  355. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.js.map +1 -0
  356. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.mjs +139 -0
  357. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.mjs.map +1 -0
  358. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Field.js +119 -0
  359. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Field.js.map +1 -0
  360. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Field.mjs +98 -0
  361. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Field.mjs.map +1 -0
  362. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/PreviewWysiwyg.js +209 -0
  363. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/PreviewWysiwyg.js.map +1 -0
  364. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/PreviewWysiwyg.mjs +188 -0
  365. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/PreviewWysiwyg.mjs.map +1 -0
  366. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygFooter.js +39 -0
  367. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygFooter.js.map +1 -0
  368. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygFooter.mjs +37 -0
  369. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygFooter.mjs.map +1 -0
  370. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.js +528 -0
  371. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.js.map +1 -0
  372. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.mjs +526 -0
  373. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.mjs.map +1 -0
  374. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygStyles.js +42 -0
  375. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygStyles.js.map +1 -0
  376. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygStyles.mjs +40 -0
  377. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygStyles.mjs.map +1 -0
  378. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/continueList.js +84 -0
  379. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/continueList.js.map +1 -0
  380. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/continueList.mjs +82 -0
  381. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/continueList.mjs.map +1 -0
  382. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/mdRenderer.js +45 -0
  383. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/mdRenderer.js.map +1 -0
  384. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/mdRenderer.mjs +43 -0
  385. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/mdRenderer.mjs.map +1 -0
  386. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/utils.js +364 -0
  387. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/utils.js.map +1 -0
  388. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/utils.mjs +355 -0
  389. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/utils.mjs.map +1 -0
  390. package/dist/admin/pages/EditView/components/FormLayout.js +106 -0
  391. package/dist/admin/pages/EditView/components/FormLayout.js.map +1 -0
  392. package/dist/admin/pages/EditView/components/FormLayout.mjs +101 -0
  393. package/dist/admin/pages/EditView/components/FormLayout.mjs.map +1 -0
  394. package/dist/admin/pages/EditView/components/Header.js +472 -0
  395. package/dist/admin/pages/EditView/components/Header.js.map +1 -0
  396. package/dist/admin/pages/EditView/components/Header.mjs +450 -0
  397. package/dist/admin/pages/EditView/components/Header.mjs.map +1 -0
  398. package/dist/admin/pages/EditView/components/InputRenderer.js +249 -0
  399. package/dist/admin/pages/EditView/components/InputRenderer.js.map +1 -0
  400. package/dist/admin/pages/EditView/components/InputRenderer.mjs +227 -0
  401. package/dist/admin/pages/EditView/components/InputRenderer.mjs.map +1 -0
  402. package/dist/admin/pages/EditView/components/Panels.js +141 -0
  403. package/dist/admin/pages/EditView/components/Panels.js.map +1 -0
  404. package/dist/admin/pages/EditView/components/Panels.mjs +119 -0
  405. package/dist/admin/pages/EditView/components/Panels.mjs.map +1 -0
  406. package/dist/admin/pages/EditView/utils/data.js +135 -0
  407. package/dist/admin/pages/EditView/utils/data.js.map +1 -0
  408. package/dist/admin/pages/EditView/utils/data.mjs +129 -0
  409. package/dist/admin/pages/EditView/utils/data.mjs.map +1 -0
  410. package/dist/admin/pages/EditView/utils/forms.js +32 -0
  411. package/dist/admin/pages/EditView/utils/forms.js.map +1 -0
  412. package/dist/admin/pages/EditView/utils/forms.mjs +30 -0
  413. package/dist/admin/pages/EditView/utils/forms.mjs.map +1 -0
  414. package/dist/admin/pages/ListConfiguration/ListConfigurationPage.js +178 -0
  415. package/dist/admin/pages/ListConfiguration/ListConfigurationPage.js.map +1 -0
  416. package/dist/admin/pages/ListConfiguration/ListConfigurationPage.mjs +156 -0
  417. package/dist/admin/pages/ListConfiguration/ListConfigurationPage.mjs.map +1 -0
  418. package/dist/admin/pages/ListConfiguration/components/DraggableCard.js +200 -0
  419. package/dist/admin/pages/ListConfiguration/components/DraggableCard.js.map +1 -0
  420. package/dist/admin/pages/ListConfiguration/components/DraggableCard.mjs +179 -0
  421. package/dist/admin/pages/ListConfiguration/components/DraggableCard.mjs.map +1 -0
  422. package/dist/admin/pages/ListConfiguration/components/EditFieldForm.js +158 -0
  423. package/dist/admin/pages/ListConfiguration/components/EditFieldForm.js.map +1 -0
  424. package/dist/admin/pages/ListConfiguration/components/EditFieldForm.mjs +137 -0
  425. package/dist/admin/pages/ListConfiguration/components/EditFieldForm.mjs.map +1 -0
  426. package/dist/admin/pages/ListConfiguration/components/Header.js +45 -0
  427. package/dist/admin/pages/ListConfiguration/components/Header.js.map +1 -0
  428. package/dist/admin/pages/ListConfiguration/components/Header.mjs +43 -0
  429. package/dist/admin/pages/ListConfiguration/components/Header.mjs.map +1 -0
  430. package/dist/admin/pages/ListConfiguration/components/Settings.js +201 -0
  431. package/dist/admin/pages/ListConfiguration/components/Settings.js.map +1 -0
  432. package/dist/admin/pages/ListConfiguration/components/Settings.mjs +180 -0
  433. package/dist/admin/pages/ListConfiguration/components/Settings.mjs.map +1 -0
  434. package/dist/admin/pages/ListConfiguration/components/SortDisplayedFields.js +171 -0
  435. package/dist/admin/pages/ListConfiguration/components/SortDisplayedFields.js.map +1 -0
  436. package/dist/admin/pages/ListConfiguration/components/SortDisplayedFields.mjs +150 -0
  437. package/dist/admin/pages/ListConfiguration/components/SortDisplayedFields.mjs.map +1 -0
  438. package/dist/admin/pages/ListView/ListViewPage.js +433 -0
  439. package/dist/admin/pages/ListView/ListViewPage.js.map +1 -0
  440. package/dist/admin/pages/ListView/ListViewPage.mjs +411 -0
  441. package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -0
  442. package/dist/admin/pages/ListView/components/AutoCloneFailureModal.js +88 -0
  443. package/dist/admin/pages/ListView/components/AutoCloneFailureModal.js.map +1 -0
  444. package/dist/admin/pages/ListView/components/AutoCloneFailureModal.mjs +86 -0
  445. package/dist/admin/pages/ListView/components/AutoCloneFailureModal.mjs.map +1 -0
  446. package/dist/admin/pages/ListView/components/BulkActions/Actions.js +233 -0
  447. package/dist/admin/pages/ListView/components/BulkActions/Actions.js.map +1 -0
  448. package/dist/admin/pages/ListView/components/BulkActions/Actions.mjs +210 -0
  449. package/dist/admin/pages/ListView/components/BulkActions/Actions.mjs.map +1 -0
  450. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js +171 -0
  451. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js.map +1 -0
  452. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs +149 -0
  453. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs.map +1 -0
  454. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js +568 -0
  455. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js.map +1 -0
  456. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs +546 -0
  457. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs.map +1 -0
  458. package/dist/admin/pages/ListView/components/Filters.js +243 -0
  459. package/dist/admin/pages/ListView/components/Filters.js.map +1 -0
  460. package/dist/admin/pages/ListView/components/Filters.mjs +222 -0
  461. package/dist/admin/pages/ListView/components/Filters.mjs.map +1 -0
  462. package/dist/admin/pages/ListView/components/TableActions.js +217 -0
  463. package/dist/admin/pages/ListView/components/TableActions.js.map +1 -0
  464. package/dist/admin/pages/ListView/components/TableActions.mjs +195 -0
  465. package/dist/admin/pages/ListView/components/TableActions.mjs.map +1 -0
  466. package/dist/admin/pages/ListView/components/TableCells/CellContent.js +130 -0
  467. package/dist/admin/pages/ListView/components/TableCells/CellContent.js.map +1 -0
  468. package/dist/admin/pages/ListView/components/TableCells/CellContent.mjs +128 -0
  469. package/dist/admin/pages/ListView/components/TableCells/CellContent.mjs.map +1 -0
  470. package/dist/admin/pages/ListView/components/TableCells/CellValue.js +53 -0
  471. package/dist/admin/pages/ListView/components/TableCells/CellValue.js.map +1 -0
  472. package/dist/admin/pages/ListView/components/TableCells/CellValue.mjs +51 -0
  473. package/dist/admin/pages/ListView/components/TableCells/CellValue.mjs.map +1 -0
  474. package/dist/admin/pages/ListView/components/TableCells/Components.js +65 -0
  475. package/dist/admin/pages/ListView/components/TableCells/Components.js.map +1 -0
  476. package/dist/admin/pages/ListView/components/TableCells/Components.mjs +62 -0
  477. package/dist/admin/pages/ListView/components/TableCells/Components.mjs.map +1 -0
  478. package/dist/admin/pages/ListView/components/TableCells/Media.js +76 -0
  479. package/dist/admin/pages/ListView/components/TableCells/Media.js.map +1 -0
  480. package/dist/admin/pages/ListView/components/TableCells/Media.mjs +73 -0
  481. package/dist/admin/pages/ListView/components/TableCells/Media.mjs.map +1 -0
  482. package/dist/admin/pages/ListView/components/TableCells/Relations.js +128 -0
  483. package/dist/admin/pages/ListView/components/TableCells/Relations.js.map +1 -0
  484. package/dist/admin/pages/ListView/components/TableCells/Relations.mjs +106 -0
  485. package/dist/admin/pages/ListView/components/TableCells/Relations.mjs.map +1 -0
  486. package/dist/admin/pages/ListView/components/ViewSettingsMenu.js +154 -0
  487. package/dist/admin/pages/ListView/components/ViewSettingsMenu.js.map +1 -0
  488. package/dist/admin/pages/ListView/components/ViewSettingsMenu.mjs +152 -0
  489. package/dist/admin/pages/ListView/components/ViewSettingsMenu.mjs.map +1 -0
  490. package/dist/admin/pages/NoContentTypePage.js +50 -0
  491. package/dist/admin/pages/NoContentTypePage.js.map +1 -0
  492. package/dist/admin/pages/NoContentTypePage.mjs +48 -0
  493. package/dist/admin/pages/NoContentTypePage.mjs.map +1 -0
  494. package/dist/admin/pages/NoPermissionsPage.js +26 -0
  495. package/dist/admin/pages/NoPermissionsPage.js.map +1 -0
  496. package/dist/admin/pages/NoPermissionsPage.mjs +24 -0
  497. package/dist/admin/pages/NoPermissionsPage.mjs.map +1 -0
  498. package/dist/admin/preview/components/PreviewHeader.js +261 -0
  499. package/dist/admin/preview/components/PreviewHeader.js.map +1 -0
  500. package/dist/admin/preview/components/PreviewHeader.mjs +259 -0
  501. package/dist/admin/preview/components/PreviewHeader.mjs.map +1 -0
  502. package/dist/admin/preview/components/PreviewSidePanel.js +91 -0
  503. package/dist/admin/preview/components/PreviewSidePanel.js.map +1 -0
  504. package/dist/admin/preview/components/PreviewSidePanel.mjs +89 -0
  505. package/dist/admin/preview/components/PreviewSidePanel.mjs.map +1 -0
  506. package/dist/admin/preview/index.js +15 -0
  507. package/dist/admin/preview/index.js.map +1 -0
  508. package/dist/admin/preview/index.mjs +13 -0
  509. package/dist/admin/preview/index.mjs.map +1 -0
  510. package/dist/admin/preview/pages/Preview.js +286 -0
  511. package/dist/admin/preview/pages/Preview.js.map +1 -0
  512. package/dist/admin/preview/pages/Preview.mjs +264 -0
  513. package/dist/admin/preview/pages/Preview.mjs.map +1 -0
  514. package/dist/admin/preview/routes.js +39 -0
  515. package/dist/admin/preview/routes.js.map +1 -0
  516. package/dist/admin/preview/routes.mjs +18 -0
  517. package/dist/admin/preview/routes.mjs.map +1 -0
  518. package/dist/admin/preview/services/preview.js +23 -0
  519. package/dist/admin/preview/services/preview.js.map +1 -0
  520. package/dist/admin/preview/services/preview.mjs +21 -0
  521. package/dist/admin/preview/services/preview.mjs.map +1 -0
  522. package/dist/admin/router.js +86 -0
  523. package/dist/admin/router.js.map +1 -0
  524. package/dist/admin/router.mjs +82 -0
  525. package/dist/admin/router.mjs.map +1 -0
  526. package/dist/admin/services/api.js +20 -0
  527. package/dist/admin/services/api.js.map +1 -0
  528. package/dist/admin/services/api.mjs +18 -0
  529. package/dist/admin/services/api.mjs.map +1 -0
  530. package/dist/admin/services/components.js +42 -0
  531. package/dist/admin/services/components.js.map +1 -0
  532. package/dist/admin/services/components.mjs +39 -0
  533. package/dist/admin/services/components.mjs.map +1 -0
  534. package/dist/admin/services/contentTypes.js +63 -0
  535. package/dist/admin/services/contentTypes.js.map +1 -0
  536. package/dist/admin/services/contentTypes.mjs +59 -0
  537. package/dist/admin/services/contentTypes.mjs.map +1 -0
  538. package/dist/admin/services/documents.js +390 -0
  539. package/dist/admin/services/documents.js.map +1 -0
  540. package/dist/admin/services/documents.mjs +373 -0
  541. package/dist/admin/services/documents.mjs.map +1 -0
  542. package/dist/admin/services/init.js +19 -0
  543. package/dist/admin/services/init.js.map +1 -0
  544. package/dist/admin/services/init.mjs +17 -0
  545. package/dist/admin/services/init.mjs.map +1 -0
  546. package/dist/admin/services/relations.js +144 -0
  547. package/dist/admin/services/relations.js.map +1 -0
  548. package/dist/admin/services/relations.mjs +141 -0
  549. package/dist/admin/services/relations.mjs.map +1 -0
  550. package/dist/admin/services/uid.js +54 -0
  551. package/dist/admin/services/uid.js.map +1 -0
  552. package/dist/admin/services/uid.mjs +50 -0
  553. package/dist/admin/services/uid.mjs.map +1 -0
  554. package/dist/admin/src/components/InjectionZone.d.ts +7 -1
  555. package/dist/admin/src/content-manager.d.ts +6 -2
  556. package/dist/admin/src/exports.d.ts +2 -1
  557. package/dist/admin/src/features/DocumentRBAC.d.ts +4 -3
  558. package/dist/admin/src/history/components/VersionInputRenderer.d.ts +1 -1
  559. package/dist/admin/src/history/index.d.ts +3 -0
  560. package/dist/admin/src/history/pages/History.d.ts +1 -1
  561. package/dist/admin/src/history/services/historyVersion.d.ts +2 -2
  562. package/dist/admin/src/hooks/useDocument.d.ts +52 -2
  563. package/dist/admin/src/hooks/useDocumentActions.d.ts +2 -1
  564. package/dist/admin/src/hooks/useDocumentContext.d.ts +30 -0
  565. package/dist/admin/src/index.d.ts +2 -0
  566. package/dist/admin/src/pages/EditView/EditViewPage.d.ts +9 -1
  567. package/dist/admin/src/pages/EditView/components/DocumentActions.d.ts +11 -5
  568. package/dist/admin/src/pages/EditView/components/DocumentStatus.d.ts +3 -3
  569. package/dist/admin/src/pages/EditView/components/EditorToolbarObserver.d.ts +11 -0
  570. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.d.ts +55 -0
  571. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/utils/constants.d.ts +5 -0
  572. package/dist/admin/src/pages/EditView/components/FormInputs/ComponentContext.d.ts +1 -1
  573. package/dist/admin/src/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.d.ts +4 -1
  574. package/dist/admin/src/pages/EditView/components/FormInputs/DynamicZone/Field.d.ts +5 -2
  575. package/dist/admin/src/pages/EditView/components/FormInputs/Relations/RelationModal.d.ts +53 -0
  576. package/dist/admin/src/pages/EditView/components/FormInputs/Relations/Relations.d.ts +45 -0
  577. package/dist/admin/src/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.d.ts +2 -2
  578. package/dist/admin/src/pages/EditView/components/FormInputs/Wysiwyg/WysiwygFooter.d.ts +2 -2
  579. package/dist/admin/src/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.d.ts +1 -2
  580. package/dist/admin/src/pages/EditView/components/FormInputs/Wysiwyg/WysiwygStyles.d.ts +6 -58
  581. package/dist/admin/src/pages/EditView/components/FormLayout.d.ts +34 -1
  582. package/dist/admin/src/pages/EditView/components/Header.d.ts +11 -11
  583. package/dist/admin/src/pages/EditView/components/InputRenderer.d.ts +7 -4
  584. package/dist/admin/src/pages/EditView/utils/data.d.ts +1 -0
  585. package/dist/admin/src/pages/ListView/components/BulkActions/Actions.d.ts +3 -30
  586. package/dist/admin/src/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.d.ts +2 -2
  587. package/dist/admin/src/preview/components/PreviewHeader.d.ts +2 -0
  588. package/dist/admin/src/preview/components/PreviewSidePanel.d.ts +3 -0
  589. package/dist/admin/src/preview/index.d.ts +3 -0
  590. package/dist/admin/src/preview/pages/Preview.d.ts +14 -0
  591. package/dist/admin/src/preview/routes.d.ts +3 -0
  592. package/dist/admin/src/preview/services/preview.d.ts +3 -0
  593. package/dist/admin/src/router.d.ts +1 -1
  594. package/dist/admin/src/services/api.d.ts +1 -1
  595. package/dist/admin/src/services/components.d.ts +2 -2
  596. package/dist/admin/src/services/contentTypes.d.ts +3 -3
  597. package/dist/admin/src/services/documents.d.ts +19 -20
  598. package/dist/admin/src/services/init.d.ts +1 -1
  599. package/dist/admin/src/services/relations.d.ts +2 -2
  600. package/dist/admin/src/services/uid.d.ts +3 -3
  601. package/dist/admin/src/utils/validation.d.ts +4 -1
  602. package/dist/admin/translations/ar.json.js +229 -0
  603. package/dist/admin/translations/ar.json.js.map +1 -0
  604. package/dist/admin/translations/ar.json.mjs +222 -0
  605. package/dist/admin/translations/ar.json.mjs.map +1 -0
  606. package/dist/admin/translations/ca.json.js +204 -0
  607. package/dist/admin/translations/ca.json.js.map +1 -0
  608. package/dist/admin/translations/ca.json.mjs +197 -0
  609. package/dist/admin/translations/ca.json.mjs.map +1 -0
  610. package/dist/admin/translations/cs.json.js +128 -0
  611. package/dist/admin/translations/cs.json.js.map +1 -0
  612. package/dist/admin/translations/cs.json.mjs +122 -0
  613. package/dist/admin/translations/cs.json.mjs.map +1 -0
  614. package/dist/admin/translations/de.json.js +202 -0
  615. package/dist/admin/translations/de.json.js.map +1 -0
  616. package/dist/admin/translations/de.json.mjs +195 -0
  617. package/dist/admin/translations/de.json.mjs.map +1 -0
  618. package/dist/admin/translations/en.json.js +320 -0
  619. package/dist/admin/translations/en.json.js.map +1 -0
  620. package/dist/admin/translations/en.json.mjs +313 -0
  621. package/dist/admin/translations/en.json.mjs.map +1 -0
  622. package/dist/admin/translations/es.json.js +199 -0
  623. package/dist/admin/translations/es.json.js.map +1 -0
  624. package/dist/admin/translations/es.json.mjs +192 -0
  625. package/dist/admin/translations/es.json.mjs.map +1 -0
  626. package/dist/admin/translations/eu.json.js +205 -0
  627. package/dist/admin/translations/eu.json.js.map +1 -0
  628. package/dist/admin/translations/eu.json.mjs +198 -0
  629. package/dist/admin/translations/eu.json.mjs.map +1 -0
  630. package/dist/admin/translations/fr.json.js +222 -0
  631. package/dist/admin/translations/fr.json.js.map +1 -0
  632. package/dist/admin/translations/fr.json.mjs +215 -0
  633. package/dist/admin/translations/fr.json.mjs.map +1 -0
  634. package/dist/admin/translations/gu.json.js +203 -0
  635. package/dist/admin/translations/gu.json.js.map +1 -0
  636. package/dist/admin/translations/gu.json.mjs +196 -0
  637. package/dist/admin/translations/gu.json.mjs.map +1 -0
  638. package/dist/admin/translations/hi.json.js +203 -0
  639. package/dist/admin/translations/hi.json.js.map +1 -0
  640. package/dist/admin/translations/hi.json.mjs +196 -0
  641. package/dist/admin/translations/hi.json.mjs.map +1 -0
  642. package/dist/admin/translations/hu.json.js +205 -0
  643. package/dist/admin/translations/hu.json.js.map +1 -0
  644. package/dist/admin/translations/hu.json.mjs +198 -0
  645. package/dist/admin/translations/hu.json.mjs.map +1 -0
  646. package/dist/admin/translations/id.json.js +163 -0
  647. package/dist/admin/translations/id.json.js.map +1 -0
  648. package/dist/admin/translations/id.json.mjs +156 -0
  649. package/dist/admin/translations/id.json.mjs.map +1 -0
  650. package/dist/admin/translations/it.json.js +165 -0
  651. package/dist/admin/translations/it.json.js.map +1 -0
  652. package/dist/admin/translations/it.json.mjs +158 -0
  653. package/dist/admin/translations/it.json.mjs.map +1 -0
  654. package/dist/admin/translations/ja.json.js +199 -0
  655. package/dist/admin/translations/ja.json.js.map +1 -0
  656. package/dist/admin/translations/ja.json.mjs +192 -0
  657. package/dist/admin/translations/ja.json.mjs.map +1 -0
  658. package/dist/admin/translations/ko.json.js +198 -0
  659. package/dist/admin/translations/ko.json.js.map +1 -0
  660. package/dist/admin/translations/ko.json.mjs +191 -0
  661. package/dist/admin/translations/ko.json.mjs.map +1 -0
  662. package/dist/admin/translations/ml.json.js +203 -0
  663. package/dist/admin/translations/ml.json.js.map +1 -0
  664. package/dist/admin/translations/ml.json.mjs +196 -0
  665. package/dist/admin/translations/ml.json.mjs.map +1 -0
  666. package/dist/admin/translations/ms.json.js +147 -0
  667. package/dist/admin/translations/ms.json.js.map +1 -0
  668. package/dist/admin/translations/ms.json.mjs +140 -0
  669. package/dist/admin/translations/ms.json.mjs.map +1 -0
  670. package/dist/admin/translations/nl.json.js +205 -0
  671. package/dist/admin/translations/nl.json.js.map +1 -0
  672. package/dist/admin/translations/nl.json.mjs +198 -0
  673. package/dist/admin/translations/nl.json.mjs.map +1 -0
  674. package/dist/admin/translations/pl.json.js +202 -0
  675. package/dist/admin/translations/pl.json.js.map +1 -0
  676. package/dist/admin/translations/pl.json.mjs +195 -0
  677. package/dist/admin/translations/pl.json.mjs.map +1 -0
  678. package/dist/admin/translations/pt-BR.json.js +204 -0
  679. package/dist/admin/translations/pt-BR.json.js.map +1 -0
  680. package/dist/admin/translations/pt-BR.json.mjs +197 -0
  681. package/dist/admin/translations/pt-BR.json.mjs.map +1 -0
  682. package/dist/admin/translations/pt.json.js +98 -0
  683. package/dist/admin/translations/pt.json.js.map +1 -0
  684. package/dist/admin/translations/pt.json.mjs +93 -0
  685. package/dist/admin/translations/pt.json.mjs.map +1 -0
  686. package/dist/admin/translations/ru.json.js +232 -0
  687. package/dist/admin/translations/ru.json.js.map +1 -0
  688. package/dist/admin/translations/ru.json.mjs +230 -0
  689. package/dist/admin/translations/ru.json.mjs.map +1 -0
  690. package/dist/admin/translations/sa.json.js +203 -0
  691. package/dist/admin/translations/sa.json.js.map +1 -0
  692. package/dist/admin/translations/sa.json.mjs +196 -0
  693. package/dist/admin/translations/sa.json.mjs.map +1 -0
  694. package/dist/admin/translations/sk.json.js +205 -0
  695. package/dist/admin/translations/sk.json.js.map +1 -0
  696. package/dist/admin/translations/sk.json.mjs +198 -0
  697. package/dist/admin/translations/sk.json.mjs.map +1 -0
  698. package/dist/admin/translations/sv.json.js +205 -0
  699. package/dist/admin/translations/sv.json.js.map +1 -0
  700. package/dist/admin/translations/sv.json.mjs +198 -0
  701. package/dist/admin/translations/sv.json.mjs.map +1 -0
  702. package/dist/admin/translations/th.json.js +151 -0
  703. package/dist/admin/translations/th.json.js.map +1 -0
  704. package/dist/admin/translations/th.json.mjs +144 -0
  705. package/dist/admin/translations/th.json.mjs.map +1 -0
  706. package/dist/admin/translations/tr.json.js +202 -0
  707. package/dist/admin/translations/tr.json.js.map +1 -0
  708. package/dist/admin/translations/tr.json.mjs +195 -0
  709. package/dist/admin/translations/tr.json.mjs.map +1 -0
  710. package/dist/admin/translations/uk.json.js +320 -0
  711. package/dist/admin/translations/uk.json.js.map +1 -0
  712. package/dist/admin/translations/uk.json.mjs +313 -0
  713. package/dist/admin/translations/uk.json.mjs.map +1 -0
  714. package/dist/admin/translations/vi.json.js +114 -0
  715. package/dist/admin/translations/vi.json.js.map +1 -0
  716. package/dist/admin/translations/vi.json.mjs +108 -0
  717. package/dist/admin/translations/vi.json.mjs.map +1 -0
  718. package/dist/admin/translations/zh-Hans.json.js +956 -0
  719. package/dist/admin/translations/zh-Hans.json.js.map +1 -0
  720. package/dist/admin/translations/zh-Hans.json.mjs +935 -0
  721. package/dist/admin/translations/zh-Hans.json.mjs.map +1 -0
  722. package/dist/admin/translations/zh.json.js +212 -0
  723. package/dist/admin/translations/zh.json.js.map +1 -0
  724. package/dist/admin/translations/zh.json.mjs +205 -0
  725. package/dist/admin/translations/zh.json.mjs.map +1 -0
  726. package/dist/admin/utils/api.js +22 -0
  727. package/dist/admin/utils/api.js.map +1 -0
  728. package/dist/admin/utils/api.mjs +19 -0
  729. package/dist/admin/utils/api.mjs.map +1 -0
  730. package/dist/admin/utils/attributes.js +34 -0
  731. package/dist/admin/utils/attributes.js.map +1 -0
  732. package/dist/admin/utils/attributes.mjs +31 -0
  733. package/dist/admin/utils/attributes.mjs.map +1 -0
  734. package/dist/admin/utils/objects.js +78 -0
  735. package/dist/admin/utils/objects.js.map +1 -0
  736. package/dist/admin/utils/objects.mjs +73 -0
  737. package/dist/admin/utils/objects.mjs.map +1 -0
  738. package/dist/admin/utils/relations.js +19 -0
  739. package/dist/admin/utils/relations.js.map +1 -0
  740. package/dist/admin/utils/relations.mjs +17 -0
  741. package/dist/admin/utils/relations.mjs.map +1 -0
  742. package/dist/admin/utils/strings.js +6 -0
  743. package/dist/admin/utils/strings.js.map +1 -0
  744. package/dist/admin/utils/strings.mjs +4 -0
  745. package/dist/admin/utils/strings.mjs.map +1 -0
  746. package/dist/admin/utils/translations.js +13 -0
  747. package/dist/admin/utils/translations.js.map +1 -0
  748. package/dist/admin/utils/translations.mjs +10 -0
  749. package/dist/admin/utils/translations.mjs.map +1 -0
  750. package/dist/admin/utils/urls.js +8 -0
  751. package/dist/admin/utils/urls.js.map +1 -0
  752. package/dist/admin/utils/urls.mjs +6 -0
  753. package/dist/admin/utils/urls.mjs.map +1 -0
  754. package/dist/admin/utils/users.js +17 -0
  755. package/dist/admin/utils/users.js.map +1 -0
  756. package/dist/admin/utils/users.mjs +15 -0
  757. package/dist/admin/utils/users.mjs.map +1 -0
  758. package/dist/admin/utils/validation.js +290 -0
  759. package/dist/admin/utils/validation.js.map +1 -0
  760. package/dist/admin/utils/validation.mjs +269 -0
  761. package/dist/admin/utils/validation.mjs.map +1 -0
  762. package/dist/server/bootstrap.js +25 -0
  763. package/dist/server/bootstrap.js.map +1 -0
  764. package/dist/server/bootstrap.mjs +23 -0
  765. package/dist/server/bootstrap.mjs.map +1 -0
  766. package/dist/server/constants/index.js +9 -0
  767. package/dist/server/constants/index.js.map +1 -0
  768. package/dist/server/constants/index.mjs +7 -0
  769. package/dist/server/constants/index.mjs.map +1 -0
  770. package/dist/server/controllers/collection-types.js +647 -0
  771. package/dist/server/controllers/collection-types.js.map +1 -0
  772. package/dist/server/controllers/collection-types.mjs +645 -0
  773. package/dist/server/controllers/collection-types.mjs.map +1 -0
  774. package/dist/server/controllers/components.js +60 -0
  775. package/dist/server/controllers/components.js.map +1 -0
  776. package/dist/server/controllers/components.mjs +58 -0
  777. package/dist/server/controllers/components.mjs.map +1 -0
  778. package/dist/server/controllers/content-types.js +108 -0
  779. package/dist/server/controllers/content-types.js.map +1 -0
  780. package/dist/server/controllers/content-types.mjs +106 -0
  781. package/dist/server/controllers/content-types.mjs.map +1 -0
  782. package/dist/server/controllers/index.js +26 -0
  783. package/dist/server/controllers/index.js.map +1 -0
  784. package/dist/server/controllers/index.mjs +24 -0
  785. package/dist/server/controllers/index.mjs.map +1 -0
  786. package/dist/server/controllers/init.js +22 -0
  787. package/dist/server/controllers/init.js.map +1 -0
  788. package/dist/server/controllers/init.mjs +20 -0
  789. package/dist/server/controllers/init.mjs.map +1 -0
  790. package/dist/server/controllers/relations.js +432 -0
  791. package/dist/server/controllers/relations.js.map +1 -0
  792. package/dist/server/controllers/relations.mjs +430 -0
  793. package/dist/server/controllers/relations.mjs.map +1 -0
  794. package/dist/server/controllers/single-types.js +302 -0
  795. package/dist/server/controllers/single-types.js.map +1 -0
  796. package/dist/server/controllers/single-types.mjs +300 -0
  797. package/dist/server/controllers/single-types.mjs.map +1 -0
  798. package/dist/server/controllers/uid.js +48 -0
  799. package/dist/server/controllers/uid.js.map +1 -0
  800. package/dist/server/controllers/uid.mjs +46 -0
  801. package/dist/server/controllers/uid.mjs.map +1 -0
  802. package/dist/server/controllers/utils/clone.js +138 -0
  803. package/dist/server/controllers/utils/clone.js.map +1 -0
  804. package/dist/server/controllers/utils/clone.mjs +135 -0
  805. package/dist/server/controllers/utils/clone.mjs.map +1 -0
  806. package/dist/server/controllers/utils/metadata.js +26 -0
  807. package/dist/server/controllers/utils/metadata.js.map +1 -0
  808. package/dist/server/controllers/utils/metadata.mjs +24 -0
  809. package/dist/server/controllers/utils/metadata.mjs.map +1 -0
  810. package/dist/server/controllers/validation/dimensions.js +41 -0
  811. package/dist/server/controllers/validation/dimensions.js.map +1 -0
  812. package/dist/server/controllers/validation/dimensions.mjs +39 -0
  813. package/dist/server/controllers/validation/dimensions.mjs.map +1 -0
  814. package/dist/server/controllers/validation/index.js +56 -0
  815. package/dist/server/controllers/validation/index.js.map +1 -0
  816. package/dist/server/controllers/validation/index.mjs +50 -0
  817. package/dist/server/controllers/validation/index.mjs.map +1 -0
  818. package/dist/server/controllers/validation/model-configuration.js +81 -0
  819. package/dist/server/controllers/validation/model-configuration.js.map +1 -0
  820. package/dist/server/controllers/validation/model-configuration.mjs +79 -0
  821. package/dist/server/controllers/validation/model-configuration.mjs.map +1 -0
  822. package/dist/server/controllers/validation/relations.js +37 -0
  823. package/dist/server/controllers/validation/relations.js.map +1 -0
  824. package/dist/server/controllers/validation/relations.mjs +34 -0
  825. package/dist/server/controllers/validation/relations.mjs.map +1 -0
  826. package/dist/server/destroy.js +12 -0
  827. package/dist/server/destroy.js.map +1 -0
  828. package/dist/server/destroy.mjs +10 -0
  829. package/dist/server/destroy.mjs.map +1 -0
  830. package/dist/server/history/constants.js +16 -0
  831. package/dist/server/history/constants.js.map +1 -0
  832. package/dist/server/history/constants.mjs +13 -0
  833. package/dist/server/history/constants.mjs.map +1 -0
  834. package/dist/server/history/controllers/history-version.js +107 -0
  835. package/dist/server/history/controllers/history-version.js.map +1 -0
  836. package/dist/server/history/controllers/history-version.mjs +105 -0
  837. package/dist/server/history/controllers/history-version.mjs.map +1 -0
  838. package/dist/server/history/controllers/index.js +10 -0
  839. package/dist/server/history/controllers/index.js.map +1 -0
  840. package/dist/server/history/controllers/index.mjs +8 -0
  841. package/dist/server/history/controllers/index.mjs.map +1 -0
  842. package/dist/server/history/controllers/validation/history-version.js +31 -0
  843. package/dist/server/history/controllers/validation/history-version.js.map +1 -0
  844. package/dist/server/history/controllers/validation/history-version.mjs +10 -0
  845. package/dist/server/history/controllers/validation/history-version.mjs.map +1 -0
  846. package/dist/server/history/index.js +42 -0
  847. package/dist/server/history/index.js.map +1 -0
  848. package/dist/server/history/index.mjs +40 -0
  849. package/dist/server/history/index.mjs.map +1 -0
  850. package/dist/server/history/models/history-version.js +59 -0
  851. package/dist/server/history/models/history-version.js.map +1 -0
  852. package/dist/server/history/models/history-version.mjs +57 -0
  853. package/dist/server/history/models/history-version.mjs.map +1 -0
  854. package/dist/server/history/routes/history-version.js +36 -0
  855. package/dist/server/history/routes/history-version.js.map +1 -0
  856. package/dist/server/history/routes/history-version.mjs +34 -0
  857. package/dist/server/history/routes/history-version.mjs.map +1 -0
  858. package/dist/server/history/routes/index.js +13 -0
  859. package/dist/server/history/routes/index.js.map +1 -0
  860. package/dist/server/history/routes/index.mjs +11 -0
  861. package/dist/server/history/routes/index.mjs.map +1 -0
  862. package/dist/server/history/services/history.js +203 -0
  863. package/dist/server/history/services/history.js.map +1 -0
  864. package/dist/server/history/services/history.mjs +201 -0
  865. package/dist/server/history/services/history.mjs.map +1 -0
  866. package/dist/server/history/services/index.js +12 -0
  867. package/dist/server/history/services/index.js.map +1 -0
  868. package/dist/server/history/services/index.mjs +10 -0
  869. package/dist/server/history/services/index.mjs.map +1 -0
  870. package/dist/server/history/services/lifecycles.js +153 -0
  871. package/dist/server/history/services/lifecycles.js.map +1 -0
  872. package/dist/server/history/services/lifecycles.mjs +151 -0
  873. package/dist/server/history/services/lifecycles.mjs.map +1 -0
  874. package/dist/server/history/services/utils.js +281 -0
  875. package/dist/server/history/services/utils.js.map +1 -0
  876. package/dist/server/history/services/utils.mjs +279 -0
  877. package/dist/server/history/services/utils.mjs.map +1 -0
  878. package/dist/server/history/utils.js +9 -0
  879. package/dist/server/history/utils.js.map +1 -0
  880. package/dist/server/history/utils.mjs +7 -0
  881. package/dist/server/history/utils.mjs.map +1 -0
  882. package/dist/server/index.js +22 -4362
  883. package/dist/server/index.js.map +1 -1
  884. package/dist/server/index.mjs +21 -4339
  885. package/dist/server/index.mjs.map +1 -1
  886. package/dist/server/middlewares/routing.js +40 -0
  887. package/dist/server/middlewares/routing.js.map +1 -0
  888. package/dist/server/middlewares/routing.mjs +38 -0
  889. package/dist/server/middlewares/routing.mjs.map +1 -0
  890. package/dist/server/policies/hasPermissions.js +24 -0
  891. package/dist/server/policies/hasPermissions.js.map +1 -0
  892. package/dist/server/policies/hasPermissions.mjs +22 -0
  893. package/dist/server/policies/hasPermissions.mjs.map +1 -0
  894. package/dist/server/policies/index.js +10 -0
  895. package/dist/server/policies/index.js.map +1 -0
  896. package/dist/server/policies/index.mjs +8 -0
  897. package/dist/server/policies/index.mjs.map +1 -0
  898. package/dist/server/preview/controllers/index.js +10 -0
  899. package/dist/server/preview/controllers/index.js.map +1 -0
  900. package/dist/server/preview/controllers/index.mjs +8 -0
  901. package/dist/server/preview/controllers/index.mjs.map +1 -0
  902. package/dist/server/preview/controllers/preview.js +34 -0
  903. package/dist/server/preview/controllers/preview.js.map +1 -0
  904. package/dist/server/preview/controllers/preview.mjs +32 -0
  905. package/dist/server/preview/controllers/preview.mjs.map +1 -0
  906. package/dist/server/preview/controllers/validation/preview.js +70 -0
  907. package/dist/server/preview/controllers/validation/preview.js.map +1 -0
  908. package/dist/server/preview/controllers/validation/preview.mjs +49 -0
  909. package/dist/server/preview/controllers/validation/preview.mjs.map +1 -0
  910. package/dist/server/preview/index.js +27 -0
  911. package/dist/server/preview/index.js.map +1 -0
  912. package/dist/server/preview/index.mjs +25 -0
  913. package/dist/server/preview/index.mjs.map +1 -0
  914. package/dist/server/preview/routes/index.js +13 -0
  915. package/dist/server/preview/routes/index.js.map +1 -0
  916. package/dist/server/preview/routes/index.mjs +11 -0
  917. package/dist/server/preview/routes/index.mjs.map +1 -0
  918. package/dist/server/preview/routes/preview.js +25 -0
  919. package/dist/server/preview/routes/preview.js.map +1 -0
  920. package/dist/server/preview/routes/preview.mjs +23 -0
  921. package/dist/server/preview/routes/preview.mjs.map +1 -0
  922. package/dist/server/preview/services/index.js +12 -0
  923. package/dist/server/preview/services/index.js.map +1 -0
  924. package/dist/server/preview/services/index.mjs +10 -0
  925. package/dist/server/preview/services/index.mjs.map +1 -0
  926. package/dist/server/preview/services/preview-config.js +91 -0
  927. package/dist/server/preview/services/preview-config.js.map +1 -0
  928. package/dist/server/preview/services/preview-config.mjs +89 -0
  929. package/dist/server/preview/services/preview-config.mjs.map +1 -0
  930. package/dist/server/preview/services/preview.js +27 -0
  931. package/dist/server/preview/services/preview.js.map +1 -0
  932. package/dist/server/preview/services/preview.mjs +25 -0
  933. package/dist/server/preview/services/preview.mjs.map +1 -0
  934. package/dist/server/preview/utils.js +9 -0
  935. package/dist/server/preview/utils.js.map +1 -0
  936. package/dist/server/preview/utils.mjs +7 -0
  937. package/dist/server/preview/utils.mjs.map +1 -0
  938. package/dist/server/register.js +16 -0
  939. package/dist/server/register.js.map +1 -0
  940. package/dist/server/register.mjs +14 -0
  941. package/dist/server/register.mjs.map +1 -0
  942. package/dist/server/routes/admin.js +599 -0
  943. package/dist/server/routes/admin.js.map +1 -0
  944. package/dist/server/routes/admin.mjs +597 -0
  945. package/dist/server/routes/admin.mjs.map +1 -0
  946. package/dist/server/routes/index.js +14 -0
  947. package/dist/server/routes/index.js.map +1 -0
  948. package/dist/server/routes/index.mjs +12 -0
  949. package/dist/server/routes/index.mjs.map +1 -0
  950. package/dist/server/services/components.js +73 -0
  951. package/dist/server/services/components.js.map +1 -0
  952. package/dist/server/services/components.mjs +71 -0
  953. package/dist/server/services/components.mjs.map +1 -0
  954. package/dist/server/services/configuration.js +58 -0
  955. package/dist/server/services/configuration.js.map +1 -0
  956. package/dist/server/services/configuration.mjs +56 -0
  957. package/dist/server/services/configuration.mjs.map +1 -0
  958. package/dist/server/services/content-types.js +60 -0
  959. package/dist/server/services/content-types.js.map +1 -0
  960. package/dist/server/services/content-types.mjs +58 -0
  961. package/dist/server/services/content-types.mjs.map +1 -0
  962. package/dist/server/services/data-mapper.js +66 -0
  963. package/dist/server/services/data-mapper.js.map +1 -0
  964. package/dist/server/services/data-mapper.mjs +64 -0
  965. package/dist/server/services/data-mapper.mjs.map +1 -0
  966. package/dist/server/services/document-manager.js +238 -0
  967. package/dist/server/services/document-manager.js.map +1 -0
  968. package/dist/server/services/document-manager.mjs +236 -0
  969. package/dist/server/services/document-manager.mjs.map +1 -0
  970. package/dist/server/services/document-metadata.js +237 -0
  971. package/dist/server/services/document-metadata.js.map +1 -0
  972. package/dist/server/services/document-metadata.mjs +235 -0
  973. package/dist/server/services/document-metadata.mjs.map +1 -0
  974. package/dist/server/services/field-sizes.js +90 -0
  975. package/dist/server/services/field-sizes.js.map +1 -0
  976. package/dist/server/services/field-sizes.mjs +88 -0
  977. package/dist/server/services/field-sizes.mjs.map +1 -0
  978. package/dist/server/services/index.js +34 -0
  979. package/dist/server/services/index.js.map +1 -0
  980. package/dist/server/services/index.mjs +32 -0
  981. package/dist/server/services/index.mjs.map +1 -0
  982. package/dist/server/services/metrics.js +35 -0
  983. package/dist/server/services/metrics.js.map +1 -0
  984. package/dist/server/services/metrics.mjs +33 -0
  985. package/dist/server/services/metrics.mjs.map +1 -0
  986. package/dist/server/services/permission-checker.js +112 -0
  987. package/dist/server/services/permission-checker.js.map +1 -0
  988. package/dist/server/services/permission-checker.mjs +110 -0
  989. package/dist/server/services/permission-checker.mjs.map +1 -0
  990. package/dist/server/services/permission.js +93 -0
  991. package/dist/server/services/permission.js.map +1 -0
  992. package/dist/server/services/permission.mjs +91 -0
  993. package/dist/server/services/permission.mjs.map +1 -0
  994. package/dist/server/services/populate-builder.js +75 -0
  995. package/dist/server/services/populate-builder.js.map +1 -0
  996. package/dist/server/services/populate-builder.mjs +73 -0
  997. package/dist/server/services/populate-builder.mjs.map +1 -0
  998. package/dist/server/services/uid.js +85 -0
  999. package/dist/server/services/uid.js.map +1 -0
  1000. package/dist/server/services/uid.mjs +83 -0
  1001. package/dist/server/services/uid.mjs.map +1 -0
  1002. package/dist/server/services/utils/configuration/attributes.js +185 -0
  1003. package/dist/server/services/utils/configuration/attributes.js.map +1 -0
  1004. package/dist/server/services/utils/configuration/attributes.mjs +175 -0
  1005. package/dist/server/services/utils/configuration/attributes.mjs.map +1 -0
  1006. package/dist/server/services/utils/configuration/index.js +37 -0
  1007. package/dist/server/services/utils/configuration/index.js.map +1 -0
  1008. package/dist/server/services/utils/configuration/index.mjs +34 -0
  1009. package/dist/server/services/utils/configuration/index.mjs.map +1 -0
  1010. package/dist/server/services/utils/configuration/layouts.js +120 -0
  1011. package/dist/server/services/utils/configuration/layouts.js.map +1 -0
  1012. package/dist/server/services/utils/configuration/layouts.mjs +117 -0
  1013. package/dist/server/services/utils/configuration/layouts.mjs.map +1 -0
  1014. package/dist/server/services/utils/configuration/metadatas.js +147 -0
  1015. package/dist/server/services/utils/configuration/metadatas.js.map +1 -0
  1016. package/dist/server/services/utils/configuration/metadatas.mjs +144 -0
  1017. package/dist/server/services/utils/configuration/metadatas.mjs.map +1 -0
  1018. package/dist/server/services/utils/configuration/settings.js +66 -0
  1019. package/dist/server/services/utils/configuration/settings.js.map +1 -0
  1020. package/dist/server/services/utils/configuration/settings.mjs +62 -0
  1021. package/dist/server/services/utils/configuration/settings.mjs.map +1 -0
  1022. package/dist/server/services/utils/draft.js +51 -0
  1023. package/dist/server/services/utils/draft.js.map +1 -0
  1024. package/dist/server/services/utils/draft.mjs +49 -0
  1025. package/dist/server/services/utils/draft.mjs.map +1 -0
  1026. package/dist/server/services/utils/populate.js +289 -0
  1027. package/dist/server/services/utils/populate.js.map +1 -0
  1028. package/dist/server/services/utils/populate.mjs +283 -0
  1029. package/dist/server/services/utils/populate.mjs.map +1 -0
  1030. package/dist/server/services/utils/store.js +71 -0
  1031. package/dist/server/services/utils/store.js.map +1 -0
  1032. package/dist/server/services/utils/store.mjs +69 -0
  1033. package/dist/server/services/utils/store.mjs.map +1 -0
  1034. package/dist/server/src/bootstrap.d.ts.map +1 -1
  1035. package/dist/server/src/controllers/collection-types.d.ts.map +1 -1
  1036. package/dist/server/src/controllers/index.d.ts.map +1 -1
  1037. package/dist/server/src/controllers/relations.d.ts.map +1 -1
  1038. package/dist/server/src/controllers/uid.d.ts.map +1 -1
  1039. package/dist/server/src/controllers/utils/metadata.d.ts +17 -2
  1040. package/dist/server/src/controllers/utils/metadata.d.ts.map +1 -1
  1041. package/dist/server/src/controllers/validation/dimensions.d.ts +4 -2
  1042. package/dist/server/src/controllers/validation/dimensions.d.ts.map +1 -1
  1043. package/dist/server/src/history/controllers/history-version.d.ts +1 -1
  1044. package/dist/server/src/history/controllers/history-version.d.ts.map +1 -1
  1045. package/dist/server/src/history/services/history.d.ts +3 -3
  1046. package/dist/server/src/history/services/history.d.ts.map +1 -1
  1047. package/dist/server/src/history/services/lifecycles.d.ts.map +1 -1
  1048. package/dist/server/src/history/services/utils.d.ts +8 -12
  1049. package/dist/server/src/history/services/utils.d.ts.map +1 -1
  1050. package/dist/server/src/index.d.ts +7 -6
  1051. package/dist/server/src/index.d.ts.map +1 -1
  1052. package/dist/server/src/policies/hasPermissions.d.ts.map +1 -1
  1053. package/dist/server/src/preview/controllers/index.d.ts +2 -0
  1054. package/dist/server/src/preview/controllers/index.d.ts.map +1 -0
  1055. package/dist/server/src/preview/controllers/preview.d.ts +13 -0
  1056. package/dist/server/src/preview/controllers/preview.d.ts.map +1 -0
  1057. package/dist/server/src/preview/controllers/validation/preview.d.ts +6 -0
  1058. package/dist/server/src/preview/controllers/validation/preview.d.ts.map +1 -0
  1059. package/dist/server/src/preview/index.d.ts +4 -0
  1060. package/dist/server/src/preview/index.d.ts.map +1 -0
  1061. package/dist/server/src/preview/routes/index.d.ts +8 -0
  1062. package/dist/server/src/preview/routes/index.d.ts.map +1 -0
  1063. package/dist/server/src/preview/routes/preview.d.ts +4 -0
  1064. package/dist/server/src/preview/routes/preview.d.ts.map +1 -0
  1065. package/dist/server/src/preview/services/index.d.ts +16 -0
  1066. package/dist/server/src/preview/services/index.d.ts.map +1 -0
  1067. package/dist/server/src/preview/services/preview-config.d.ts +32 -0
  1068. package/dist/server/src/preview/services/preview-config.d.ts.map +1 -0
  1069. package/dist/server/src/preview/services/preview.d.ts +12 -0
  1070. package/dist/server/src/preview/services/preview.d.ts.map +1 -0
  1071. package/dist/server/src/preview/utils.d.ts +19 -0
  1072. package/dist/server/src/preview/utils.d.ts.map +1 -0
  1073. package/dist/server/src/register.d.ts.map +1 -1
  1074. package/dist/server/src/routes/index.d.ts.map +1 -1
  1075. package/dist/server/src/services/document-manager.d.ts.map +1 -1
  1076. package/dist/server/src/services/document-metadata.d.ts +12 -10
  1077. package/dist/server/src/services/document-metadata.d.ts.map +1 -1
  1078. package/dist/server/src/services/index.d.ts +7 -6
  1079. package/dist/server/src/services/index.d.ts.map +1 -1
  1080. package/dist/server/src/services/permission-checker.d.ts.map +1 -1
  1081. package/dist/server/src/services/utils/count.d.ts +1 -1
  1082. package/dist/server/src/services/utils/count.d.ts.map +1 -1
  1083. package/dist/server/src/services/utils/populate.d.ts +3 -3
  1084. package/dist/server/src/services/utils/populate.d.ts.map +1 -1
  1085. package/dist/server/src/utils/index.d.ts +2 -0
  1086. package/dist/server/src/utils/index.d.ts.map +1 -1
  1087. package/dist/server/utils/index.js +10 -0
  1088. package/dist/server/utils/index.js.map +1 -0
  1089. package/dist/server/utils/index.mjs +8 -0
  1090. package/dist/server/utils/index.mjs.map +1 -0
  1091. package/dist/server/validation/policies/hasPermissions.js +12 -0
  1092. package/dist/server/validation/policies/hasPermissions.js.map +1 -0
  1093. package/dist/server/validation/policies/hasPermissions.mjs +10 -0
  1094. package/dist/server/validation/policies/hasPermissions.mjs.map +1 -0
  1095. package/dist/shared/contracts/collection-types.d.ts +3 -2
  1096. package/dist/shared/contracts/collection-types.d.ts.map +1 -1
  1097. package/dist/shared/contracts/collection-types.js +3 -0
  1098. package/dist/shared/contracts/collection-types.js.map +1 -0
  1099. package/dist/shared/contracts/collection-types.mjs +2 -0
  1100. package/dist/shared/contracts/collection-types.mjs.map +1 -0
  1101. package/dist/shared/contracts/components.d.ts +0 -1
  1102. package/dist/shared/contracts/components.js +3 -0
  1103. package/dist/shared/contracts/components.js.map +1 -0
  1104. package/dist/shared/contracts/components.mjs +2 -0
  1105. package/dist/shared/contracts/components.mjs.map +1 -0
  1106. package/dist/shared/contracts/content-types.d.ts +0 -1
  1107. package/dist/shared/contracts/content-types.js +3 -0
  1108. package/dist/shared/contracts/content-types.js.map +1 -0
  1109. package/dist/shared/contracts/content-types.mjs +2 -0
  1110. package/dist/shared/contracts/content-types.mjs.map +1 -0
  1111. package/dist/shared/contracts/history-versions.d.ts +0 -1
  1112. package/dist/shared/contracts/history-versions.js +3 -0
  1113. package/dist/shared/contracts/history-versions.js.map +1 -0
  1114. package/dist/shared/contracts/history-versions.mjs +2 -0
  1115. package/dist/shared/contracts/history-versions.mjs.map +1 -0
  1116. package/dist/shared/contracts/index.d.ts +1 -1
  1117. package/dist/shared/contracts/index.d.ts.map +1 -1
  1118. package/dist/shared/contracts/index.js +26 -0
  1119. package/dist/shared/contracts/index.js.map +1 -0
  1120. package/dist/shared/contracts/index.mjs +21 -0
  1121. package/dist/shared/contracts/index.mjs.map +1 -0
  1122. package/dist/shared/contracts/init.d.ts +0 -1
  1123. package/dist/shared/contracts/init.js +3 -0
  1124. package/dist/shared/contracts/init.js.map +1 -0
  1125. package/dist/shared/contracts/init.mjs +2 -0
  1126. package/dist/shared/contracts/init.mjs.map +1 -0
  1127. package/dist/shared/contracts/preview.d.ts +26 -0
  1128. package/dist/shared/contracts/preview.d.ts.map +1 -0
  1129. package/dist/shared/contracts/preview.js +3 -0
  1130. package/dist/shared/contracts/preview.js.map +1 -0
  1131. package/dist/shared/contracts/preview.mjs +2 -0
  1132. package/dist/shared/contracts/preview.mjs.map +1 -0
  1133. package/dist/shared/contracts/relations.d.ts +1 -2
  1134. package/dist/shared/contracts/relations.d.ts.map +1 -1
  1135. package/dist/shared/contracts/relations.js +3 -0
  1136. package/dist/shared/contracts/relations.js.map +1 -0
  1137. package/dist/shared/contracts/relations.mjs +2 -0
  1138. package/dist/shared/contracts/relations.mjs.map +1 -0
  1139. package/dist/shared/contracts/review-workflows.d.ts +0 -1
  1140. package/dist/shared/contracts/review-workflows.js +3 -0
  1141. package/dist/shared/contracts/review-workflows.js.map +1 -0
  1142. package/dist/shared/contracts/review-workflows.mjs +2 -0
  1143. package/dist/shared/contracts/review-workflows.mjs.map +1 -0
  1144. package/dist/shared/contracts/single-types.d.ts +0 -1
  1145. package/dist/shared/contracts/single-types.js +3 -0
  1146. package/dist/shared/contracts/single-types.js.map +1 -0
  1147. package/dist/shared/contracts/single-types.mjs +2 -0
  1148. package/dist/shared/contracts/single-types.mjs.map +1 -0
  1149. package/dist/shared/contracts/uid.d.ts +0 -1
  1150. package/dist/shared/contracts/uid.js +3 -0
  1151. package/dist/shared/contracts/uid.js.map +1 -0
  1152. package/dist/shared/contracts/uid.mjs +2 -0
  1153. package/dist/shared/contracts/uid.mjs.map +1 -0
  1154. package/dist/shared/index.d.ts +0 -1
  1155. package/dist/shared/index.js +6 -41
  1156. package/dist/shared/index.js.map +1 -1
  1157. package/dist/shared/index.mjs +2 -42
  1158. package/dist/shared/index.mjs.map +1 -1
  1159. package/package.json +26 -22
  1160. package/dist/_chunks/CardDragPreview-C0QyJgRA.js +0 -69
  1161. package/dist/_chunks/CardDragPreview-C0QyJgRA.js.map +0 -1
  1162. package/dist/_chunks/CardDragPreview-DOxamsuj.mjs +0 -70
  1163. package/dist/_chunks/CardDragPreview-DOxamsuj.mjs.map +0 -1
  1164. package/dist/_chunks/ComponentConfigurationPage-CR5XdR33.mjs +0 -236
  1165. package/dist/_chunks/ComponentConfigurationPage-CR5XdR33.mjs.map +0 -1
  1166. package/dist/_chunks/ComponentConfigurationPage-DJcn1DrO.js +0 -255
  1167. package/dist/_chunks/ComponentConfigurationPage-DJcn1DrO.js.map +0 -1
  1168. package/dist/_chunks/ComponentIcon-BXdiCGQp.js +0 -176
  1169. package/dist/_chunks/ComponentIcon-BXdiCGQp.js.map +0 -1
  1170. package/dist/_chunks/ComponentIcon-u4bIXTFY.mjs +0 -157
  1171. package/dist/_chunks/ComponentIcon-u4bIXTFY.mjs.map +0 -1
  1172. package/dist/_chunks/EditConfigurationPage-DmCIb4kD.mjs +0 -132
  1173. package/dist/_chunks/EditConfigurationPage-DmCIb4kD.mjs.map +0 -1
  1174. package/dist/_chunks/EditConfigurationPage-tDtWj7R2.js +0 -151
  1175. package/dist/_chunks/EditConfigurationPage-tDtWj7R2.js.map +0 -1
  1176. package/dist/_chunks/EditViewPage-CoQEnFlC.js +0 -222
  1177. package/dist/_chunks/EditViewPage-CoQEnFlC.js.map +0 -1
  1178. package/dist/_chunks/EditViewPage-DvaV7U9b.mjs +0 -203
  1179. package/dist/_chunks/EditViewPage-DvaV7U9b.mjs.map +0 -1
  1180. package/dist/_chunks/Field-Cz_J9551.mjs +0 -5211
  1181. package/dist/_chunks/Field-Cz_J9551.mjs.map +0 -1
  1182. package/dist/_chunks/Field-ZdrmmQ4Y.js +0 -5243
  1183. package/dist/_chunks/Field-ZdrmmQ4Y.js.map +0 -1
  1184. package/dist/_chunks/FieldTypeIcon-CMlNO8PE.mjs +0 -50
  1185. package/dist/_chunks/FieldTypeIcon-CMlNO8PE.mjs.map +0 -1
  1186. package/dist/_chunks/FieldTypeIcon-Dnwq_IRF.js +0 -49
  1187. package/dist/_chunks/FieldTypeIcon-Dnwq_IRF.js.map +0 -1
  1188. package/dist/_chunks/Form-Bpig5rch.js +0 -761
  1189. package/dist/_chunks/Form-Bpig5rch.js.map +0 -1
  1190. package/dist/_chunks/Form-Dxmihyw8.mjs +0 -740
  1191. package/dist/_chunks/Form-Dxmihyw8.mjs.map +0 -1
  1192. package/dist/_chunks/History-BZP8n7KT.mjs +0 -928
  1193. package/dist/_chunks/History-BZP8n7KT.mjs.map +0 -1
  1194. package/dist/_chunks/History-BfX6XmZK.js +0 -949
  1195. package/dist/_chunks/History-BfX6XmZK.js.map +0 -1
  1196. package/dist/_chunks/ListConfigurationPage-B3CXj8PY.js +0 -641
  1197. package/dist/_chunks/ListConfigurationPage-B3CXj8PY.js.map +0 -1
  1198. package/dist/_chunks/ListConfigurationPage-DxKuVkKz.mjs +0 -622
  1199. package/dist/_chunks/ListConfigurationPage-DxKuVkKz.mjs.map +0 -1
  1200. package/dist/_chunks/ListViewPage-Bk9VO__I.js +0 -851
  1201. package/dist/_chunks/ListViewPage-Bk9VO__I.js.map +0 -1
  1202. package/dist/_chunks/ListViewPage-D5D3tVPq.mjs +0 -827
  1203. package/dist/_chunks/ListViewPage-D5D3tVPq.mjs.map +0 -1
  1204. package/dist/_chunks/NoContentTypePage-DnMeuQCj.mjs +0 -51
  1205. package/dist/_chunks/NoContentTypePage-DnMeuQCj.mjs.map +0 -1
  1206. package/dist/_chunks/NoContentTypePage-DsB2F7Z1.js +0 -51
  1207. package/dist/_chunks/NoContentTypePage-DsB2F7Z1.js.map +0 -1
  1208. package/dist/_chunks/NoPermissionsPage-BQDM64_b.js +0 -23
  1209. package/dist/_chunks/NoPermissionsPage-BQDM64_b.js.map +0 -1
  1210. package/dist/_chunks/NoPermissionsPage-OyoME_Tf.mjs +0 -23
  1211. package/dist/_chunks/NoPermissionsPage-OyoME_Tf.mjs.map +0 -1
  1212. package/dist/_chunks/Relations-B6B3A3mb.js +0 -714
  1213. package/dist/_chunks/Relations-B6B3A3mb.js.map +0 -1
  1214. package/dist/_chunks/Relations-BOYZmuWy.mjs +0 -694
  1215. package/dist/_chunks/Relations-BOYZmuWy.mjs.map +0 -1
  1216. package/dist/_chunks/ar-BUUWXIYu.js +0 -226
  1217. package/dist/_chunks/ar-BUUWXIYu.js.map +0 -1
  1218. package/dist/_chunks/ar-CCEVvqGG.mjs +0 -226
  1219. package/dist/_chunks/ar-CCEVvqGG.mjs.map +0 -1
  1220. package/dist/_chunks/ca-5U32ON2v.mjs +0 -201
  1221. package/dist/_chunks/ca-5U32ON2v.mjs.map +0 -1
  1222. package/dist/_chunks/ca-Cmk45QO6.js +0 -201
  1223. package/dist/_chunks/ca-Cmk45QO6.js.map +0 -1
  1224. package/dist/_chunks/cs-CM2aBUar.mjs +0 -125
  1225. package/dist/_chunks/cs-CM2aBUar.mjs.map +0 -1
  1226. package/dist/_chunks/cs-CkJy6B2v.js +0 -125
  1227. package/dist/_chunks/cs-CkJy6B2v.js.map +0 -1
  1228. package/dist/_chunks/de-C72KDNOl.mjs +0 -199
  1229. package/dist/_chunks/de-C72KDNOl.mjs.map +0 -1
  1230. package/dist/_chunks/de-CCEmbAah.js +0 -199
  1231. package/dist/_chunks/de-CCEmbAah.js.map +0 -1
  1232. package/dist/_chunks/en-BN1bvFK7.js +0 -288
  1233. package/dist/_chunks/en-BN1bvFK7.js.map +0 -1
  1234. package/dist/_chunks/en-Dzv55oQw.mjs +0 -288
  1235. package/dist/_chunks/en-Dzv55oQw.mjs.map +0 -1
  1236. package/dist/_chunks/es-CeXiYflN.mjs +0 -196
  1237. package/dist/_chunks/es-CeXiYflN.mjs.map +0 -1
  1238. package/dist/_chunks/es-EUonQTon.js +0 -196
  1239. package/dist/_chunks/es-EUonQTon.js.map +0 -1
  1240. package/dist/_chunks/eu-CdALomew.mjs +0 -202
  1241. package/dist/_chunks/eu-CdALomew.mjs.map +0 -1
  1242. package/dist/_chunks/eu-VDH-3ovk.js +0 -202
  1243. package/dist/_chunks/eu-VDH-3ovk.js.map +0 -1
  1244. package/dist/_chunks/fr-B7kGGg3E.js +0 -206
  1245. package/dist/_chunks/fr-B7kGGg3E.js.map +0 -1
  1246. package/dist/_chunks/fr-CD9VFbPM.mjs +0 -206
  1247. package/dist/_chunks/fr-CD9VFbPM.mjs.map +0 -1
  1248. package/dist/_chunks/gu-BRmF601H.js +0 -200
  1249. package/dist/_chunks/gu-BRmF601H.js.map +0 -1
  1250. package/dist/_chunks/gu-CNpaMDpH.mjs +0 -200
  1251. package/dist/_chunks/gu-CNpaMDpH.mjs.map +0 -1
  1252. package/dist/_chunks/hi-CCJBptSq.js +0 -200
  1253. package/dist/_chunks/hi-CCJBptSq.js.map +0 -1
  1254. package/dist/_chunks/hi-Dwvd04m3.mjs +0 -200
  1255. package/dist/_chunks/hi-Dwvd04m3.mjs.map +0 -1
  1256. package/dist/_chunks/hooks-BAaaKPS_.js +0 -7
  1257. package/dist/_chunks/hooks-BAaaKPS_.js.map +0 -1
  1258. package/dist/_chunks/hooks-E5u1mcgM.mjs +0 -8
  1259. package/dist/_chunks/hooks-E5u1mcgM.mjs.map +0 -1
  1260. package/dist/_chunks/hu-CeYvaaO0.mjs +0 -202
  1261. package/dist/_chunks/hu-CeYvaaO0.mjs.map +0 -1
  1262. package/dist/_chunks/hu-sNV_yLYy.js +0 -202
  1263. package/dist/_chunks/hu-sNV_yLYy.js.map +0 -1
  1264. package/dist/_chunks/id-B5Ser98A.js +0 -160
  1265. package/dist/_chunks/id-B5Ser98A.js.map +0 -1
  1266. package/dist/_chunks/id-BtwA9WJT.mjs +0 -160
  1267. package/dist/_chunks/id-BtwA9WJT.mjs.map +0 -1
  1268. package/dist/_chunks/index-DzN3kBgx.js +0 -3939
  1269. package/dist/_chunks/index-DzN3kBgx.js.map +0 -1
  1270. package/dist/_chunks/index-VHviNMeW.mjs +0 -3920
  1271. package/dist/_chunks/index-VHviNMeW.mjs.map +0 -1
  1272. package/dist/_chunks/it-BrVPqaf1.mjs +0 -162
  1273. package/dist/_chunks/it-BrVPqaf1.mjs.map +0 -1
  1274. package/dist/_chunks/it-DkBIs7vD.js +0 -162
  1275. package/dist/_chunks/it-DkBIs7vD.js.map +0 -1
  1276. package/dist/_chunks/ja-CcFe8diO.js +0 -196
  1277. package/dist/_chunks/ja-CcFe8diO.js.map +0 -1
  1278. package/dist/_chunks/ja-CtsUxOvk.mjs +0 -196
  1279. package/dist/_chunks/ja-CtsUxOvk.mjs.map +0 -1
  1280. package/dist/_chunks/ko-HVQRlfUI.mjs +0 -195
  1281. package/dist/_chunks/ko-HVQRlfUI.mjs.map +0 -1
  1282. package/dist/_chunks/ko-woFZPmLk.js +0 -195
  1283. package/dist/_chunks/ko-woFZPmLk.js.map +0 -1
  1284. package/dist/_chunks/layout-CPn1PM6x.mjs +0 -453
  1285. package/dist/_chunks/layout-CPn1PM6x.mjs.map +0 -1
  1286. package/dist/_chunks/layout-b91XRlD2.js +0 -471
  1287. package/dist/_chunks/layout-b91XRlD2.js.map +0 -1
  1288. package/dist/_chunks/ml-BihZwQit.mjs +0 -200
  1289. package/dist/_chunks/ml-BihZwQit.mjs.map +0 -1
  1290. package/dist/_chunks/ml-C2W8N8k1.js +0 -200
  1291. package/dist/_chunks/ml-C2W8N8k1.js.map +0 -1
  1292. package/dist/_chunks/ms-BuFotyP_.js +0 -144
  1293. package/dist/_chunks/ms-BuFotyP_.js.map +0 -1
  1294. package/dist/_chunks/ms-m_WjyWx7.mjs +0 -144
  1295. package/dist/_chunks/ms-m_WjyWx7.mjs.map +0 -1
  1296. package/dist/_chunks/nl-D4R9gHx5.mjs +0 -202
  1297. package/dist/_chunks/nl-D4R9gHx5.mjs.map +0 -1
  1298. package/dist/_chunks/nl-bbEOHChV.js +0 -202
  1299. package/dist/_chunks/nl-bbEOHChV.js.map +0 -1
  1300. package/dist/_chunks/objects-gigeqt7s.js +0 -49
  1301. package/dist/_chunks/objects-gigeqt7s.js.map +0 -1
  1302. package/dist/_chunks/objects-mKMAmfec.mjs +0 -47
  1303. package/dist/_chunks/objects-mKMAmfec.mjs.map +0 -1
  1304. package/dist/_chunks/pl-sbx9mSt_.mjs +0 -199
  1305. package/dist/_chunks/pl-sbx9mSt_.mjs.map +0 -1
  1306. package/dist/_chunks/pl-uzwG-hk7.js +0 -199
  1307. package/dist/_chunks/pl-uzwG-hk7.js.map +0 -1
  1308. package/dist/_chunks/pt-BR-BiOz37D9.js +0 -201
  1309. package/dist/_chunks/pt-BR-BiOz37D9.js.map +0 -1
  1310. package/dist/_chunks/pt-BR-C71iDxnh.mjs +0 -201
  1311. package/dist/_chunks/pt-BR-C71iDxnh.mjs.map +0 -1
  1312. package/dist/_chunks/pt-BsaFvS8-.mjs +0 -95
  1313. package/dist/_chunks/pt-BsaFvS8-.mjs.map +0 -1
  1314. package/dist/_chunks/pt-CeXQuq50.js +0 -95
  1315. package/dist/_chunks/pt-CeXQuq50.js.map +0 -1
  1316. package/dist/_chunks/relations-BsqxS6tR.mjs +0 -135
  1317. package/dist/_chunks/relations-BsqxS6tR.mjs.map +0 -1
  1318. package/dist/_chunks/relations-CA7IYmcP.js +0 -134
  1319. package/dist/_chunks/relations-CA7IYmcP.js.map +0 -1
  1320. package/dist/_chunks/ru-BE6A4Exp.mjs +0 -231
  1321. package/dist/_chunks/ru-BE6A4Exp.mjs.map +0 -1
  1322. package/dist/_chunks/ru-BT3ybNny.js +0 -231
  1323. package/dist/_chunks/ru-BT3ybNny.js.map +0 -1
  1324. package/dist/_chunks/sa-CcvkYInH.js +0 -200
  1325. package/dist/_chunks/sa-CcvkYInH.js.map +0 -1
  1326. package/dist/_chunks/sa-Dag0k-Z8.mjs +0 -200
  1327. package/dist/_chunks/sa-Dag0k-Z8.mjs.map +0 -1
  1328. package/dist/_chunks/sk-BFg-R8qJ.mjs +0 -202
  1329. package/dist/_chunks/sk-BFg-R8qJ.mjs.map +0 -1
  1330. package/dist/_chunks/sk-CvY09Xjv.js +0 -202
  1331. package/dist/_chunks/sk-CvY09Xjv.js.map +0 -1
  1332. package/dist/_chunks/sv-CUnfWGsh.mjs +0 -202
  1333. package/dist/_chunks/sv-CUnfWGsh.mjs.map +0 -1
  1334. package/dist/_chunks/sv-MYDuzgvT.js +0 -202
  1335. package/dist/_chunks/sv-MYDuzgvT.js.map +0 -1
  1336. package/dist/_chunks/th-BqbI8lIT.mjs +0 -148
  1337. package/dist/_chunks/th-BqbI8lIT.mjs.map +0 -1
  1338. package/dist/_chunks/th-D9_GfAjc.js +0 -148
  1339. package/dist/_chunks/th-D9_GfAjc.js.map +0 -1
  1340. package/dist/_chunks/tr-CgeK3wJM.mjs +0 -199
  1341. package/dist/_chunks/tr-CgeK3wJM.mjs.map +0 -1
  1342. package/dist/_chunks/tr-D9UH-O_R.js +0 -199
  1343. package/dist/_chunks/tr-D9UH-O_R.js.map +0 -1
  1344. package/dist/_chunks/uk-C8EiqJY7.js +0 -144
  1345. package/dist/_chunks/uk-C8EiqJY7.js.map +0 -1
  1346. package/dist/_chunks/uk-CR-zDhAY.mjs +0 -144
  1347. package/dist/_chunks/uk-CR-zDhAY.mjs.map +0 -1
  1348. package/dist/_chunks/useDragAndDrop-DdHgKsqq.mjs +0 -231
  1349. package/dist/_chunks/useDragAndDrop-DdHgKsqq.mjs.map +0 -1
  1350. package/dist/_chunks/useDragAndDrop-J0TUUbR6.js +0 -249
  1351. package/dist/_chunks/useDragAndDrop-J0TUUbR6.js.map +0 -1
  1352. package/dist/_chunks/usePrev-B9w_-eYc.js +0 -15
  1353. package/dist/_chunks/usePrev-B9w_-eYc.js.map +0 -1
  1354. package/dist/_chunks/usePrev-DH6iah0A.mjs +0 -16
  1355. package/dist/_chunks/usePrev-DH6iah0A.mjs.map +0 -1
  1356. package/dist/_chunks/vi-CJlYDheJ.js +0 -111
  1357. package/dist/_chunks/vi-CJlYDheJ.js.map +0 -1
  1358. package/dist/_chunks/vi-DUXIk_fw.mjs +0 -111
  1359. package/dist/_chunks/vi-DUXIk_fw.mjs.map +0 -1
  1360. package/dist/_chunks/zh-BWZspA60.mjs +0 -209
  1361. package/dist/_chunks/zh-BWZspA60.mjs.map +0 -1
  1362. package/dist/_chunks/zh-CQQfszqR.js +0 -209
  1363. package/dist/_chunks/zh-CQQfszqR.js.map +0 -1
  1364. package/dist/_chunks/zh-Hans-9kOncHGw.js +0 -952
  1365. package/dist/_chunks/zh-Hans-9kOncHGw.js.map +0 -1
  1366. package/dist/_chunks/zh-Hans-BPQcRIyH.mjs +0 -952
  1367. package/dist/_chunks/zh-Hans-BPQcRIyH.mjs.map +0 -1
  1368. package/dist/admin/src/pages/EditView/components/FormInputs/Relations.d.ts +0 -18
  1369. package/strapi-server.js +0 -3
@@ -1,3920 +0,0 @@
1
- import { ClockCounterClockwise, CrossCircle, More, WarningCircle, ListPlus, Pencil, Trash, Check, CheckCircle, ChevronRight, Duplicate, Feather } from "@strapi/icons";
2
- import { jsx, Fragment, jsxs } from "react/jsx-runtime";
3
- import { useStrapiApp, useQueryParams, createContext, useAuth, useRBAC, Page, adminApi, translatedErrors, useNotification, useAPIErrorHandler, getYupValidationErrors, useTracking, useForm, BackButton, DescriptionComponentRenderer, useTable, Table } from "@strapi/admin/strapi-admin";
4
- import { stringify } from "qs";
5
- import { useIntl } from "react-intl";
6
- import { useNavigate, useParams, Navigate, useMatch, useLocation, Link, NavLink } from "react-router-dom";
7
- import * as React from "react";
8
- import { lazy } from "react";
9
- import { Menu, VisuallyHidden, Flex, Typography, Dialog, DialogBody, DialogFooter, Button, ModalLayout, ModalHeader, ModalBody, Box, Radio, Status, SingleSelect, SingleSelectOption, ModalFooter, Loader, IconButton, Tooltip, LinkButton } from "@strapi/design-system";
10
- import { styled } from "styled-components";
11
- import * as yup from "yup";
12
- import { ValidationError } from "yup";
13
- import pipe from "lodash/fp/pipe";
14
- import { intervalToDuration, isPast } from "date-fns";
15
- import { createSlice, combineReducers } from "@reduxjs/toolkit";
16
- const __variableDynamicImportRuntimeHelper = (glob, path) => {
17
- const v = glob[path];
18
- if (v) {
19
- return typeof v === "function" ? v() : Promise.resolve(v);
20
- }
21
- return new Promise((_, reject) => {
22
- (typeof queueMicrotask === "function" ? queueMicrotask : setTimeout)(reject.bind(null, new Error("Unknown variable dynamic import: " + path)));
23
- });
24
- };
25
- const PLUGIN_ID = "content-manager";
26
- const PERMISSIONS = [
27
- "plugin::content-manager.explorer.create",
28
- "plugin::content-manager.explorer.read",
29
- "plugin::content-manager.explorer.update",
30
- "plugin::content-manager.explorer.delete",
31
- "plugin::content-manager.explorer.publish"
32
- ];
33
- const INJECTION_ZONES = {
34
- editView: { informations: [], "right-links": [] },
35
- listView: {
36
- actions: [],
37
- deleteModalAdditionalInfos: [],
38
- publishModalAdditionalInfos: [],
39
- unpublishModalAdditionalInfos: []
40
- }
41
- };
42
- const InjectionZone = ({ area, ...props }) => {
43
- const components = useInjectionZone(area);
44
- return /* @__PURE__ */ jsx(Fragment, { children: components.map((component) => /* @__PURE__ */ jsx(component.Component, { ...props }, component.name)) });
45
- };
46
- const useInjectionZone = (area) => {
47
- const getPlugin = useStrapiApp("useInjectionZone", (state) => state.getPlugin);
48
- const contentManagerPlugin = getPlugin(PLUGIN_ID);
49
- const [page, position] = area.split(".");
50
- return contentManagerPlugin.getInjectedComponents(page, position);
51
- };
52
- const HistoryAction = ({ model, document }) => {
53
- const { formatMessage } = useIntl();
54
- const [{ query }] = useQueryParams();
55
- const navigate = useNavigate();
56
- const pluginsQueryParams = stringify({ plugins: query.plugins }, { encode: false });
57
- if (!window.strapi.features.isEnabled("cms-content-history")) {
58
- return null;
59
- }
60
- return {
61
- icon: /* @__PURE__ */ jsx(ClockCounterClockwise, {}),
62
- label: formatMessage({
63
- id: "content-manager.history.document-action",
64
- defaultMessage: "Content History"
65
- }),
66
- onClick: () => navigate({ pathname: "history", search: pluginsQueryParams }),
67
- disabled: (
68
- /**
69
- * The user is creating a new document.
70
- * It hasn't been saved yet, so there's no history to go to
71
- */
72
- !document || /**
73
- * The document has been created but the current dimension has never been saved.
74
- * For example, the user is creating a new locale in an existing document,
75
- * so there's no history for the document in that locale
76
- */
77
- !document.id || /**
78
- * History is only available for content types created by the user.
79
- * These have the `api::` prefix, as opposed to the ones created by Strapi or plugins,
80
- * which start with `admin::` or `plugin::`
81
- */
82
- !model.startsWith("api::")
83
- ),
84
- position: "header"
85
- };
86
- };
87
- HistoryAction.type = "history";
88
- const ID = "id";
89
- const CREATED_BY_ATTRIBUTE_NAME = "createdBy";
90
- const UPDATED_BY_ATTRIBUTE_NAME = "updatedBy";
91
- const CREATOR_FIELDS = [CREATED_BY_ATTRIBUTE_NAME, UPDATED_BY_ATTRIBUTE_NAME];
92
- const PUBLISHED_BY_ATTRIBUTE_NAME = "publishedBy";
93
- const CREATED_AT_ATTRIBUTE_NAME = "createdAt";
94
- const UPDATED_AT_ATTRIBUTE_NAME = "updatedAt";
95
- const PUBLISHED_AT_ATTRIBUTE_NAME = "publishedAt";
96
- const DOCUMENT_META_FIELDS = [
97
- ID,
98
- ...CREATOR_FIELDS,
99
- PUBLISHED_BY_ATTRIBUTE_NAME,
100
- CREATED_AT_ATTRIBUTE_NAME,
101
- UPDATED_AT_ATTRIBUTE_NAME,
102
- PUBLISHED_AT_ATTRIBUTE_NAME
103
- ];
104
- const ATTRIBUTE_TYPES_THAT_CANNOT_BE_MAIN_FIELD = [
105
- "dynamiczone",
106
- "json",
107
- "text",
108
- "relation",
109
- "component",
110
- "boolean",
111
- "media",
112
- "password",
113
- "richtext",
114
- "timestamp",
115
- "blocks"
116
- ];
117
- const SINGLE_TYPES = "single-types";
118
- const COLLECTION_TYPES = "collection-types";
119
- const [DocumentRBACProvider, useDocumentRBAC] = createContext(
120
- "DocumentRBAC",
121
- {
122
- canCreate: false,
123
- canCreateFields: [],
124
- canDelete: false,
125
- canPublish: false,
126
- canRead: false,
127
- canReadFields: [],
128
- canUpdate: false,
129
- canUpdateFields: [],
130
- canUserAction: () => false,
131
- isLoading: false
132
- }
133
- );
134
- const DocumentRBAC = ({ children, permissions }) => {
135
- const { slug } = useParams();
136
- if (!slug) {
137
- throw new Error("Cannot find the slug param in the URL");
138
- }
139
- const userPermissions = useAuth("DocumentRBAC", (state) => state.permissions);
140
- const contentTypePermissions = React.useMemo(() => {
141
- const contentTypePermissions2 = userPermissions.filter(
142
- (permission) => permission.subject === slug
143
- );
144
- return contentTypePermissions2.reduce((acc, permission) => {
145
- const [action] = permission.action.split(".").slice(-1);
146
- return { ...acc, [action]: [permission] };
147
- }, {});
148
- }, [slug, userPermissions]);
149
- const { isLoading, allowedActions } = useRBAC(contentTypePermissions, permissions ?? void 0);
150
- const canCreateFields = !isLoading && allowedActions.canCreate ? extractAndDedupeFields(contentTypePermissions.create) : [];
151
- const canReadFields = !isLoading && allowedActions.canRead ? extractAndDedupeFields(contentTypePermissions.read) : [];
152
- const canUpdateFields = !isLoading && allowedActions.canUpdate ? extractAndDedupeFields(contentTypePermissions.update) : [];
153
- const canUserAction = React.useCallback(
154
- (fieldName, fieldsUserCanAction, fieldType) => {
155
- const name = removeNumericalStrings(fieldName.split("."));
156
- const componentFieldNames = fieldsUserCanAction.filter((field) => field.split(".").length > 1);
157
- if (fieldType === "component") {
158
- return componentFieldNames.some((field) => {
159
- return field.includes(name.join("."));
160
- });
161
- }
162
- if (name.length > 1) {
163
- return componentFieldNames.includes(name.join("."));
164
- }
165
- return fieldsUserCanAction.includes(fieldName);
166
- },
167
- []
168
- );
169
- if (isLoading) {
170
- return /* @__PURE__ */ jsx(Page.Loading, {});
171
- }
172
- return /* @__PURE__ */ jsx(
173
- DocumentRBACProvider,
174
- {
175
- isLoading,
176
- canCreateFields,
177
- canReadFields,
178
- canUpdateFields,
179
- canUserAction,
180
- ...allowedActions,
181
- children
182
- }
183
- );
184
- };
185
- const extractAndDedupeFields = (permissions = []) => permissions.flatMap((permission) => permission.properties?.fields).filter(
186
- (field, index2, arr) => arr.indexOf(field) === index2 && typeof field === "string"
187
- );
188
- const removeNumericalStrings = (arr) => arr.filter((item) => isNaN(Number(item)));
189
- const contentManagerApi = adminApi.enhanceEndpoints({
190
- addTagTypes: [
191
- "ComponentConfiguration",
192
- "ContentTypesConfiguration",
193
- "ContentTypeSettings",
194
- "Document",
195
- "InitialData",
196
- "HistoryVersion",
197
- "Relations"
198
- ]
199
- });
200
- const documentApi = contentManagerApi.injectEndpoints({
201
- endpoints: (builder) => ({
202
- autoCloneDocument: builder.mutation({
203
- query: ({ model, sourceId, query }) => ({
204
- url: `/content-manager/collection-types/${model}/auto-clone/${sourceId}`,
205
- method: "POST",
206
- config: {
207
- params: query
208
- }
209
- }),
210
- invalidatesTags: (_result, _error, { model }) => [{ type: "Document", id: `${model}_LIST` }]
211
- }),
212
- cloneDocument: builder.mutation({
213
- query: ({ model, sourceId, data, params }) => ({
214
- url: `/content-manager/collection-types/${model}/clone/${sourceId}`,
215
- method: "POST",
216
- data,
217
- config: {
218
- params
219
- }
220
- }),
221
- invalidatesTags: (_result, _error, { model }) => [{ type: "Document", id: `${model}_LIST` }]
222
- }),
223
- /**
224
- * Creates a new collection-type document. This should ONLY be used for collection-types.
225
- * single-types should always be using `updateDocument` since they always exist.
226
- */
227
- createDocument: builder.mutation({
228
- query: ({ model, data, params }) => ({
229
- url: `/content-manager/collection-types/${model}`,
230
- method: "POST",
231
- data,
232
- config: {
233
- params
234
- }
235
- }),
236
- invalidatesTags: (result, _error, { model }) => [
237
- { type: "Document", id: `${model}_LIST` },
238
- "Relations"
239
- ]
240
- }),
241
- deleteDocument: builder.mutation({
242
- query: ({ collectionType, model, documentId, params }) => ({
243
- url: `/content-manager/${collectionType}/${model}${collectionType !== SINGLE_TYPES && documentId ? `/${documentId}` : ""}`,
244
- method: "DELETE",
245
- config: {
246
- params
247
- }
248
- }),
249
- invalidatesTags: (_result, _error, { collectionType, model }) => [
250
- { type: "Document", id: collectionType !== SINGLE_TYPES ? `${model}_LIST` : model }
251
- ]
252
- }),
253
- deleteManyDocuments: builder.mutation({
254
- query: ({ model, params, ...body }) => ({
255
- url: `/content-manager/collection-types/${model}/actions/bulkDelete`,
256
- method: "POST",
257
- data: body,
258
- config: {
259
- params
260
- }
261
- }),
262
- invalidatesTags: (_res, _error, { model }) => [{ type: "Document", id: `${model}_LIST` }]
263
- }),
264
- discardDocument: builder.mutation({
265
- query: ({ collectionType, model, documentId, params }) => ({
266
- url: documentId ? `/content-manager/${collectionType}/${model}/${documentId}/actions/discard` : `/content-manager/${collectionType}/${model}/actions/discard`,
267
- method: "POST",
268
- config: {
269
- params
270
- }
271
- }),
272
- invalidatesTags: (_result, _error, { collectionType, model, documentId }) => {
273
- return [
274
- {
275
- type: "Document",
276
- id: collectionType !== SINGLE_TYPES ? `${model}_${documentId}` : model
277
- },
278
- { type: "Document", id: `${model}_LIST` },
279
- "Relations"
280
- ];
281
- }
282
- }),
283
- /**
284
- * Gets all documents of a collection type or single type.
285
- * By passing different params you can get different results e.g. only published documents or 'es' documents.
286
- */
287
- getAllDocuments: builder.query({
288
- query: ({ model, params }) => ({
289
- url: `/content-manager/collection-types/${model}`,
290
- method: "GET",
291
- config: {
292
- params
293
- }
294
- }),
295
- providesTags: (result, _error, arg) => {
296
- return [
297
- { type: "Document", id: `${arg.model}_LIST` },
298
- ...result?.results.map(({ documentId }) => ({
299
- type: "Document",
300
- id: `${arg.model}_${documentId}`
301
- })) ?? []
302
- ];
303
- }
304
- }),
305
- getDraftRelationCount: builder.query({
306
- query: ({ collectionType, model, documentId, params }) => ({
307
- url: documentId ? `/content-manager/${collectionType}/${model}/${documentId}/actions/countDraftRelations` : `/content-manager/${collectionType}/${model}/actions/countDraftRelations`,
308
- method: "GET",
309
- config: {
310
- params
311
- }
312
- })
313
- }),
314
- getDocument: builder.query({
315
- // @ts-expect-error – TODO: fix ts error where data unknown doesn't work with response via an assertion?
316
- queryFn: async ({ collectionType, model, documentId, params }, _api, _extraOpts, baseQuery) => {
317
- const res = await baseQuery({
318
- url: `/content-manager/${collectionType}/${model}${documentId ? `/${documentId}` : ""}`,
319
- method: "GET",
320
- config: {
321
- params
322
- }
323
- });
324
- if (res.error && res.error.name === "NotFoundError" && collectionType === SINGLE_TYPES) {
325
- return { data: { document: void 0 }, error: void 0 };
326
- }
327
- return res;
328
- },
329
- providesTags: (result, _error, { collectionType, model, documentId }) => {
330
- return [
331
- // we prefer the result's id because we don't fetch single-types with an ID.
332
- {
333
- type: "Document",
334
- id: collectionType !== SINGLE_TYPES ? `${model}_${result && "documentId" in result ? result.documentId : documentId}` : model
335
- }
336
- ];
337
- }
338
- }),
339
- getManyDraftRelationCount: builder.query({
340
- query: ({ model, ...params }) => ({
341
- url: `/content-manager/collection-types/${model}/actions/countManyEntriesDraftRelations`,
342
- method: "GET",
343
- config: {
344
- params
345
- }
346
- }),
347
- transformResponse: (response) => response.data
348
- }),
349
- /**
350
- * This endpoint will either create or update documents at the same time as publishing.
351
- */
352
- publishDocument: builder.mutation({
353
- query: ({ collectionType, model, documentId, params, data }) => ({
354
- url: documentId ? `/content-manager/${collectionType}/${model}/${documentId}/actions/publish` : `/content-manager/${collectionType}/${model}/actions/publish`,
355
- method: "POST",
356
- data,
357
- config: {
358
- params
359
- }
360
- }),
361
- invalidatesTags: (_result, _error, { collectionType, model, documentId }) => {
362
- return [
363
- {
364
- type: "Document",
365
- id: collectionType !== SINGLE_TYPES ? `${model}_${documentId}` : model
366
- },
367
- { type: "Document", id: `${model}_LIST` },
368
- "Relations"
369
- ];
370
- }
371
- }),
372
- publishManyDocuments: builder.mutation({
373
- query: ({ model, params, ...body }) => ({
374
- url: `/content-manager/collection-types/${model}/actions/bulkPublish`,
375
- method: "POST",
376
- data: body,
377
- config: {
378
- params
379
- }
380
- }),
381
- invalidatesTags: (_res, _error, { model, documentIds }) => documentIds.map((id) => ({ type: "Document", id: `${model}_${id}` }))
382
- }),
383
- updateDocument: builder.mutation({
384
- query: ({ collectionType, model, documentId, data, params }) => ({
385
- url: `/content-manager/${collectionType}/${model}${documentId ? `/${documentId}` : ""}`,
386
- method: "PUT",
387
- data,
388
- config: {
389
- params
390
- }
391
- }),
392
- invalidatesTags: (_result, _error, { collectionType, model, documentId }) => {
393
- return [
394
- {
395
- type: "Document",
396
- id: collectionType !== SINGLE_TYPES ? `${model}_${documentId}` : model
397
- },
398
- "Relations"
399
- ];
400
- }
401
- }),
402
- unpublishDocument: builder.mutation({
403
- query: ({ collectionType, model, documentId, params, data }) => ({
404
- url: documentId ? `/content-manager/${collectionType}/${model}/${documentId}/actions/unpublish` : `/content-manager/${collectionType}/${model}/actions/unpublish`,
405
- method: "POST",
406
- data,
407
- config: {
408
- params
409
- }
410
- }),
411
- invalidatesTags: (_result, _error, { collectionType, model, documentId }) => {
412
- return [
413
- {
414
- type: "Document",
415
- id: collectionType !== SINGLE_TYPES ? `${model}_${documentId}` : model
416
- }
417
- ];
418
- }
419
- }),
420
- unpublishManyDocuments: builder.mutation({
421
- query: ({ model, params, ...body }) => ({
422
- url: `/content-manager/collection-types/${model}/actions/bulkUnpublish`,
423
- method: "POST",
424
- data: body,
425
- config: {
426
- params
427
- }
428
- }),
429
- invalidatesTags: (_res, _error, { model, documentIds }) => documentIds.map((id) => ({ type: "Document", id: `${model}_${id}` }))
430
- })
431
- })
432
- });
433
- const {
434
- useAutoCloneDocumentMutation,
435
- useCloneDocumentMutation,
436
- useCreateDocumentMutation,
437
- useDeleteDocumentMutation,
438
- useDeleteManyDocumentsMutation,
439
- useDiscardDocumentMutation,
440
- useGetAllDocumentsQuery,
441
- useLazyGetDocumentQuery,
442
- useGetDocumentQuery,
443
- useLazyGetDraftRelationCountQuery,
444
- useGetManyDraftRelationCountQuery,
445
- usePublishDocumentMutation,
446
- usePublishManyDocumentsMutation,
447
- useUpdateDocumentMutation,
448
- useUnpublishDocumentMutation,
449
- useUnpublishManyDocumentsMutation
450
- } = documentApi;
451
- const buildValidParams = (query) => {
452
- if (!query)
453
- return query;
454
- const { plugins: _, ...validQueryParams } = {
455
- ...query,
456
- ...Object.values(query?.plugins ?? {}).reduce(
457
- (acc, current) => Object.assign(acc, current),
458
- {}
459
- )
460
- };
461
- if ("_q" in validQueryParams) {
462
- validQueryParams._q = encodeURIComponent(validQueryParams._q);
463
- }
464
- return validQueryParams;
465
- };
466
- const isBaseQueryError = (error) => {
467
- return error.name !== void 0;
468
- };
469
- const createYupSchema = (attributes = {}, components = {}) => {
470
- const createModelSchema = (attributes2) => yup.object().shape(
471
- Object.entries(attributes2).reduce((acc, [name, attribute]) => {
472
- if (DOCUMENT_META_FIELDS.includes(name)) {
473
- return acc;
474
- }
475
- const validations = [
476
- addRequiredValidation,
477
- addMinLengthValidation,
478
- addMaxLengthValidation,
479
- addMinValidation,
480
- addMaxValidation,
481
- addRegexValidation
482
- ].map((fn) => fn(attribute));
483
- const transformSchema = pipe(...validations);
484
- switch (attribute.type) {
485
- case "component": {
486
- const { attributes: attributes3 } = components[attribute.component];
487
- if (attribute.repeatable) {
488
- return {
489
- ...acc,
490
- [name]: transformSchema(
491
- yup.array().of(createModelSchema(attributes3).nullable(false))
492
- )
493
- };
494
- } else {
495
- return {
496
- ...acc,
497
- [name]: transformSchema(createModelSchema(attributes3))
498
- };
499
- }
500
- }
501
- case "dynamiczone":
502
- return {
503
- ...acc,
504
- [name]: transformSchema(
505
- yup.array().of(
506
- yup.lazy(
507
- (data) => {
508
- const attributes3 = components?.[data?.__component]?.attributes;
509
- const validation = yup.object().shape({
510
- __component: yup.string().required().oneOf(Object.keys(components))
511
- }).nullable(false);
512
- if (!attributes3) {
513
- return validation;
514
- }
515
- return validation.concat(createModelSchema(attributes3));
516
- }
517
- )
518
- )
519
- )
520
- };
521
- case "relation":
522
- return {
523
- ...acc,
524
- [name]: transformSchema(
525
- yup.lazy((value) => {
526
- if (!value) {
527
- return yup.mixed().nullable(true);
528
- } else if (Array.isArray(value)) {
529
- return yup.array().of(
530
- yup.object().shape({
531
- id: yup.string().required()
532
- })
533
- );
534
- } else if (typeof value === "object") {
535
- return yup.object();
536
- } else {
537
- return yup.mixed().test(
538
- "type-error",
539
- "Relation values must be either null, an array of objects with {id} or an object.",
540
- () => false
541
- );
542
- }
543
- })
544
- )
545
- };
546
- default:
547
- return {
548
- ...acc,
549
- [name]: transformSchema(createAttributeSchema(attribute))
550
- };
551
- }
552
- }, {})
553
- ).default(null);
554
- return createModelSchema(attributes);
555
- };
556
- const createAttributeSchema = (attribute) => {
557
- switch (attribute.type) {
558
- case "biginteger":
559
- return yup.string().matches(/^-?\d*$/);
560
- case "boolean":
561
- return yup.boolean();
562
- case "blocks":
563
- return yup.mixed().test("isBlocks", translatedErrors.json, (value) => {
564
- if (!value || Array.isArray(value)) {
565
- return true;
566
- } else {
567
- return false;
568
- }
569
- });
570
- case "decimal":
571
- case "float":
572
- case "integer":
573
- return yup.number();
574
- case "email":
575
- return yup.string().email(translatedErrors.email);
576
- case "enumeration":
577
- return yup.string().oneOf([...attribute.enum, null]);
578
- case "json":
579
- return yup.mixed().test("isJSON", translatedErrors.json, (value) => {
580
- if (!value || typeof value === "string" && value.length === 0) {
581
- return true;
582
- }
583
- try {
584
- JSON.parse(value);
585
- return true;
586
- } catch (err) {
587
- return false;
588
- }
589
- });
590
- case "password":
591
- case "richtext":
592
- case "string":
593
- case "text":
594
- return yup.string();
595
- case "uid":
596
- return yup.string().matches(/^[A-Za-z0-9-_.~]*$/);
597
- default:
598
- return yup.mixed();
599
- }
600
- };
601
- const addRequiredValidation = (attribute) => (schema) => {
602
- if (attribute.required) {
603
- return schema.required({
604
- id: translatedErrors.required.id,
605
- defaultMessage: "This field is required."
606
- });
607
- }
608
- return schema?.nullable ? schema.nullable() : (
609
- // In some cases '.nullable' will not be available on the schema.
610
- // e.g. when the schema has been built using yup.lazy (e.g. for relations).
611
- // In these cases we should just return the schema as it is.
612
- schema
613
- );
614
- };
615
- const addMinLengthValidation = (attribute) => (schema) => {
616
- if ("minLength" in attribute && attribute.minLength && Number.isInteger(attribute.minLength) && "min" in schema) {
617
- return schema.min(attribute.minLength, {
618
- ...translatedErrors.minLength,
619
- values: {
620
- min: attribute.minLength
621
- }
622
- });
623
- }
624
- return schema;
625
- };
626
- const addMaxLengthValidation = (attribute) => (schema) => {
627
- if ("maxLength" in attribute && attribute.maxLength && Number.isInteger(attribute.maxLength) && "max" in schema) {
628
- return schema.max(attribute.maxLength, {
629
- ...translatedErrors.maxLength,
630
- values: {
631
- max: attribute.maxLength
632
- }
633
- });
634
- }
635
- return schema;
636
- };
637
- const addMinValidation = (attribute) => (schema) => {
638
- if ("min" in attribute) {
639
- const min = toInteger(attribute.min);
640
- if ("min" in schema && min) {
641
- return schema.min(min, {
642
- ...translatedErrors.min,
643
- values: {
644
- min
645
- }
646
- });
647
- }
648
- }
649
- return schema;
650
- };
651
- const addMaxValidation = (attribute) => (schema) => {
652
- if ("max" in attribute) {
653
- const max = toInteger(attribute.max);
654
- if ("max" in schema && max) {
655
- return schema.max(max, {
656
- ...translatedErrors.max,
657
- values: {
658
- max
659
- }
660
- });
661
- }
662
- }
663
- return schema;
664
- };
665
- const toInteger = (val) => {
666
- if (typeof val === "number" || val === void 0) {
667
- return val;
668
- } else {
669
- const num = Number(val);
670
- return isNaN(num) ? void 0 : num;
671
- }
672
- };
673
- const addRegexValidation = (attribute) => (schema) => {
674
- if ("regex" in attribute && attribute.regex && "matches" in schema) {
675
- return schema.matches(new RegExp(attribute.regex), {
676
- message: {
677
- id: translatedErrors.regex.id,
678
- defaultMessage: "The value does not match the defined pattern."
679
- },
680
- excludeEmptyString: !attribute.required
681
- });
682
- }
683
- return schema;
684
- };
685
- const initApi = contentManagerApi.injectEndpoints({
686
- endpoints: (builder) => ({
687
- getInitialData: builder.query({
688
- query: () => "/content-manager/init",
689
- transformResponse: (response) => response.data,
690
- providesTags: ["InitialData"]
691
- })
692
- })
693
- });
694
- const { useGetInitialDataQuery } = initApi;
695
- const useContentTypeSchema = (model) => {
696
- const { toggleNotification } = useNotification();
697
- const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();
698
- const { data, error, isLoading, isFetching } = useGetInitialDataQuery(void 0);
699
- const { components, contentType, contentTypes } = React.useMemo(() => {
700
- const contentType2 = data?.contentTypes.find((ct) => ct.uid === model);
701
- const componentsByKey = data?.components.reduce((acc, component) => {
702
- acc[component.uid] = component;
703
- return acc;
704
- }, {});
705
- const components2 = extractContentTypeComponents(contentType2?.attributes, componentsByKey);
706
- return {
707
- components: Object.keys(components2).length === 0 ? void 0 : components2,
708
- contentType: contentType2,
709
- contentTypes: data?.contentTypes ?? []
710
- };
711
- }, [model, data]);
712
- React.useEffect(() => {
713
- if (error) {
714
- toggleNotification({
715
- type: "danger",
716
- message: formatAPIError(error)
717
- });
718
- }
719
- }, [toggleNotification, error, formatAPIError]);
720
- return {
721
- // This must be memoized to avoid inifiinite re-renders where the empty object is different everytime.
722
- components: React.useMemo(() => components ?? {}, [components]),
723
- schema: contentType,
724
- schemas: contentTypes,
725
- isLoading: isLoading || isFetching
726
- };
727
- };
728
- const extractContentTypeComponents = (attributes = {}, allComponents = {}) => {
729
- const getComponents = (attributes2) => {
730
- return attributes2.reduce((acc, attribute) => {
731
- if (attribute.type === "component") {
732
- const componentAttributes = Object.values(
733
- allComponents[attribute.component]?.attributes ?? {}
734
- );
735
- acc.push(attribute.component, ...getComponents(componentAttributes));
736
- } else if (attribute.type === "dynamiczone") {
737
- acc.push(
738
- ...attribute.components,
739
- ...attribute.components.flatMap((componentUid) => {
740
- const componentAttributes = Object.values(
741
- allComponents[componentUid]?.attributes ?? {}
742
- );
743
- return getComponents(componentAttributes);
744
- })
745
- );
746
- }
747
- return acc;
748
- }, []);
749
- };
750
- const componentUids = getComponents(Object.values(attributes));
751
- const uniqueComponentUids = [...new Set(componentUids)];
752
- const componentsByKey = uniqueComponentUids.reduce((acc, uid) => {
753
- acc[uid] = allComponents[uid];
754
- return acc;
755
- }, {});
756
- return componentsByKey;
757
- };
758
- const useDocument = (args, opts) => {
759
- const { toggleNotification } = useNotification();
760
- const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();
761
- const {
762
- currentData: data,
763
- isLoading: isLoadingDocument,
764
- isFetching: isFetchingDocument,
765
- error
766
- } = useGetDocumentQuery(args, opts);
767
- const { components, schema, isLoading: isLoadingSchema } = useContentTypeSchema(args.model);
768
- React.useEffect(() => {
769
- if (error) {
770
- toggleNotification({
771
- type: "danger",
772
- message: formatAPIError(error)
773
- });
774
- }
775
- }, [toggleNotification, error, formatAPIError, args.collectionType]);
776
- const validationSchema = React.useMemo(() => {
777
- if (!schema) {
778
- return null;
779
- }
780
- return createYupSchema(schema.attributes, components);
781
- }, [schema, components]);
782
- const validate = React.useCallback(
783
- (document) => {
784
- if (!validationSchema) {
785
- throw new Error(
786
- "There is no validation schema generated, this is likely due to the schema not being loaded yet."
787
- );
788
- }
789
- try {
790
- validationSchema.validateSync(document, { abortEarly: false, strict: true });
791
- return null;
792
- } catch (error2) {
793
- if (error2 instanceof ValidationError) {
794
- return getYupValidationErrors(error2);
795
- }
796
- throw error2;
797
- }
798
- },
799
- [validationSchema]
800
- );
801
- const isLoading = isLoadingDocument || isFetchingDocument || isLoadingSchema;
802
- return {
803
- components,
804
- document: data?.data,
805
- meta: data?.meta,
806
- isLoading,
807
- schema,
808
- validate
809
- };
810
- };
811
- const useDoc = () => {
812
- const { id, slug, collectionType, origin } = useParams();
813
- const [{ query }] = useQueryParams();
814
- const params = React.useMemo(() => buildValidParams(query), [query]);
815
- if (!collectionType) {
816
- throw new Error("Could not find collectionType in url params");
817
- }
818
- if (!slug) {
819
- throw new Error("Could not find model in url params");
820
- }
821
- return {
822
- collectionType,
823
- model: slug,
824
- id: origin || id === "create" ? void 0 : id,
825
- ...useDocument(
826
- { documentId: origin || id, model: slug, collectionType, params },
827
- {
828
- skip: id === "create" || !origin && !id && collectionType !== SINGLE_TYPES
829
- }
830
- )
831
- };
832
- };
833
- const prefixPluginTranslations = (trad, pluginId) => {
834
- if (!pluginId) {
835
- throw new TypeError("pluginId can't be empty");
836
- }
837
- return Object.keys(trad).reduce((acc, current) => {
838
- acc[`${pluginId}.${current}`] = trad[current];
839
- return acc;
840
- }, {});
841
- };
842
- const getTranslation = (id) => `content-manager.${id}`;
843
- const DEFAULT_UNEXPECTED_ERROR_MSG = {
844
- id: "notification.error",
845
- defaultMessage: "An error occurred, please try again"
846
- };
847
- const useDocumentActions = () => {
848
- const { toggleNotification } = useNotification();
849
- const { formatMessage } = useIntl();
850
- const { trackUsage } = useTracking();
851
- const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();
852
- const [deleteDocument] = useDeleteDocumentMutation();
853
- const _delete = React.useCallback(
854
- async ({ collectionType, model, documentId, params }, trackerProperty) => {
855
- try {
856
- trackUsage("willDeleteEntry", trackerProperty);
857
- const res = await deleteDocument({
858
- collectionType,
859
- model,
860
- documentId,
861
- params
862
- });
863
- if ("error" in res) {
864
- toggleNotification({
865
- type: "danger",
866
- message: formatAPIError(res.error)
867
- });
868
- return { error: res.error };
869
- }
870
- toggleNotification({
871
- type: "success",
872
- message: formatMessage({
873
- id: getTranslation("success.record.delete"),
874
- defaultMessage: "Deleted document"
875
- })
876
- });
877
- trackUsage("didDeleteEntry", trackerProperty);
878
- return res.data;
879
- } catch (err) {
880
- toggleNotification({
881
- type: "danger",
882
- message: formatMessage(DEFAULT_UNEXPECTED_ERROR_MSG)
883
- });
884
- trackUsage("didNotDeleteEntry", { error: err, ...trackerProperty });
885
- throw err;
886
- }
887
- },
888
- [trackUsage, deleteDocument, toggleNotification, formatMessage, formatAPIError]
889
- );
890
- const [deleteManyDocuments] = useDeleteManyDocumentsMutation();
891
- const deleteMany = React.useCallback(
892
- async ({ model, documentIds, params }) => {
893
- try {
894
- trackUsage("willBulkDeleteEntries");
895
- const res = await deleteManyDocuments({
896
- model,
897
- documentIds,
898
- params
899
- });
900
- if ("error" in res) {
901
- toggleNotification({
902
- type: "danger",
903
- message: formatAPIError(res.error)
904
- });
905
- return { error: res.error };
906
- }
907
- toggleNotification({
908
- type: "success",
909
- title: formatMessage({
910
- id: getTranslation("success.records.delete"),
911
- defaultMessage: "Successfully deleted."
912
- }),
913
- message: ""
914
- });
915
- trackUsage("didBulkDeleteEntries");
916
- return res.data;
917
- } catch (err) {
918
- toggleNotification({
919
- type: "danger",
920
- message: formatMessage(DEFAULT_UNEXPECTED_ERROR_MSG)
921
- });
922
- trackUsage("didNotBulkDeleteEntries");
923
- throw err;
924
- }
925
- },
926
- [trackUsage, deleteManyDocuments, toggleNotification, formatMessage, formatAPIError]
927
- );
928
- const [discardDocument] = useDiscardDocumentMutation();
929
- const discard = React.useCallback(
930
- async ({ collectionType, model, documentId }) => {
931
- try {
932
- const res = await discardDocument({
933
- collectionType,
934
- model,
935
- documentId
936
- });
937
- if ("error" in res) {
938
- toggleNotification({
939
- type: "danger",
940
- message: formatAPIError(res.error)
941
- });
942
- return { error: res.error };
943
- }
944
- toggleNotification({
945
- type: "success",
946
- message: formatMessage({
947
- id: "content-manager.success.record.discard",
948
- defaultMessage: "Changes discarded"
949
- })
950
- });
951
- return res.data;
952
- } catch (err) {
953
- toggleNotification({
954
- type: "danger",
955
- message: formatMessage(DEFAULT_UNEXPECTED_ERROR_MSG)
956
- });
957
- throw err;
958
- }
959
- },
960
- [discardDocument, formatAPIError, formatMessage, toggleNotification]
961
- );
962
- const [publishDocument] = usePublishDocumentMutation();
963
- const publish = React.useCallback(
964
- async ({ collectionType, model, documentId, params }, data) => {
965
- try {
966
- trackUsage("willPublishEntry");
967
- const res = await publishDocument({
968
- collectionType,
969
- model,
970
- documentId,
971
- data,
972
- params
973
- });
974
- if ("error" in res) {
975
- toggleNotification({ type: "danger", message: formatAPIError(res.error) });
976
- return { error: res.error };
977
- }
978
- trackUsage("didPublishEntry");
979
- toggleNotification({
980
- type: "success",
981
- message: formatMessage({
982
- id: getTranslation("success.record.publish"),
983
- defaultMessage: "Published document"
984
- })
985
- });
986
- return res.data;
987
- } catch (err) {
988
- toggleNotification({
989
- type: "danger",
990
- message: formatMessage(DEFAULT_UNEXPECTED_ERROR_MSG)
991
- });
992
- throw err;
993
- }
994
- },
995
- [trackUsage, publishDocument, toggleNotification, formatMessage, formatAPIError]
996
- );
997
- const [publishManyDocuments] = usePublishManyDocumentsMutation();
998
- const publishMany = React.useCallback(
999
- async ({ model, documentIds, params }) => {
1000
- try {
1001
- const res = await publishManyDocuments({
1002
- model,
1003
- documentIds,
1004
- params
1005
- });
1006
- if ("error" in res) {
1007
- toggleNotification({ type: "danger", message: formatAPIError(res.error) });
1008
- return { error: res.error };
1009
- }
1010
- toggleNotification({
1011
- type: "success",
1012
- message: formatMessage({
1013
- id: getTranslation("success.record.publish"),
1014
- defaultMessage: "Published document"
1015
- })
1016
- });
1017
- return res.data;
1018
- } catch (err) {
1019
- toggleNotification({
1020
- type: "danger",
1021
- message: formatMessage(DEFAULT_UNEXPECTED_ERROR_MSG)
1022
- });
1023
- throw err;
1024
- }
1025
- },
1026
- [
1027
- // trackUsage,
1028
- publishManyDocuments,
1029
- toggleNotification,
1030
- formatMessage,
1031
- formatAPIError
1032
- ]
1033
- );
1034
- const [updateDocument] = useUpdateDocumentMutation();
1035
- const update = React.useCallback(
1036
- async ({ collectionType, model, documentId, params }, data, trackerProperty) => {
1037
- try {
1038
- trackUsage("willEditEntry", trackerProperty);
1039
- const res = await updateDocument({
1040
- collectionType,
1041
- model,
1042
- documentId,
1043
- data,
1044
- params
1045
- });
1046
- if ("error" in res) {
1047
- toggleNotification({ type: "danger", message: formatAPIError(res.error) });
1048
- trackUsage("didNotEditEntry", { error: res.error, ...trackerProperty });
1049
- return { error: res.error };
1050
- }
1051
- trackUsage("didEditEntry", trackerProperty);
1052
- toggleNotification({
1053
- type: "success",
1054
- message: formatMessage({
1055
- id: getTranslation("success.record.save"),
1056
- defaultMessage: "Saved document"
1057
- })
1058
- });
1059
- return res.data;
1060
- } catch (err) {
1061
- trackUsage("didNotEditEntry", { error: err, ...trackerProperty });
1062
- toggleNotification({
1063
- type: "danger",
1064
- message: formatMessage(DEFAULT_UNEXPECTED_ERROR_MSG)
1065
- });
1066
- throw err;
1067
- }
1068
- },
1069
- [trackUsage, updateDocument, toggleNotification, formatMessage, formatAPIError]
1070
- );
1071
- const [unpublishDocument] = useUnpublishDocumentMutation();
1072
- const unpublish = React.useCallback(
1073
- async ({ collectionType, model, documentId, params }, discardDraft = false) => {
1074
- try {
1075
- trackUsage("willUnpublishEntry");
1076
- const res = await unpublishDocument({
1077
- collectionType,
1078
- model,
1079
- documentId,
1080
- params,
1081
- data: {
1082
- discardDraft
1083
- }
1084
- });
1085
- if ("error" in res) {
1086
- toggleNotification({ type: "danger", message: formatAPIError(res.error) });
1087
- return { error: res.error };
1088
- }
1089
- trackUsage("didUnpublishEntry");
1090
- toggleNotification({
1091
- type: "success",
1092
- message: formatMessage({
1093
- id: getTranslation("success.record.unpublish"),
1094
- defaultMessage: "Unpublished document"
1095
- })
1096
- });
1097
- return res.data;
1098
- } catch (err) {
1099
- toggleNotification({
1100
- type: "danger",
1101
- message: formatMessage(DEFAULT_UNEXPECTED_ERROR_MSG)
1102
- });
1103
- throw err;
1104
- }
1105
- },
1106
- [trackUsage, unpublishDocument, toggleNotification, formatMessage, formatAPIError]
1107
- );
1108
- const [unpublishManyDocuments] = useUnpublishManyDocumentsMutation();
1109
- const unpublishMany = React.useCallback(
1110
- async ({ model, documentIds, params }) => {
1111
- try {
1112
- trackUsage("willBulkUnpublishEntries");
1113
- const res = await unpublishManyDocuments({
1114
- model,
1115
- documentIds,
1116
- params
1117
- });
1118
- if ("error" in res) {
1119
- toggleNotification({ type: "danger", message: formatAPIError(res.error) });
1120
- return { error: res.error };
1121
- }
1122
- trackUsage("didBulkUnpublishEntries");
1123
- toggleNotification({
1124
- type: "success",
1125
- title: formatMessage({
1126
- id: getTranslation("success.records.unpublish"),
1127
- defaultMessage: "Successfully unpublished."
1128
- }),
1129
- message: ""
1130
- });
1131
- return res.data;
1132
- } catch (err) {
1133
- toggleNotification({
1134
- type: "danger",
1135
- message: formatMessage(DEFAULT_UNEXPECTED_ERROR_MSG)
1136
- });
1137
- trackUsage("didNotBulkUnpublishEntries");
1138
- throw err;
1139
- }
1140
- },
1141
- [trackUsage, unpublishManyDocuments, toggleNotification, formatMessage, formatAPIError]
1142
- );
1143
- const [createDocument] = useCreateDocumentMutation();
1144
- const create = React.useCallback(
1145
- async ({ model, params }, data, trackerProperty) => {
1146
- try {
1147
- const res = await createDocument({
1148
- model,
1149
- data,
1150
- params
1151
- });
1152
- if ("error" in res) {
1153
- toggleNotification({ type: "danger", message: formatAPIError(res.error) });
1154
- trackUsage("didNotCreateEntry", { error: res.error, ...trackerProperty });
1155
- return { error: res.error };
1156
- }
1157
- trackUsage("didCreateEntry", trackerProperty);
1158
- toggleNotification({
1159
- type: "success",
1160
- message: formatMessage({
1161
- id: getTranslation("success.record.save"),
1162
- defaultMessage: "Saved document"
1163
- })
1164
- });
1165
- return res.data;
1166
- } catch (err) {
1167
- toggleNotification({
1168
- type: "danger",
1169
- message: formatMessage(DEFAULT_UNEXPECTED_ERROR_MSG)
1170
- });
1171
- trackUsage("didNotCreateEntry", { error: err, ...trackerProperty });
1172
- throw err;
1173
- }
1174
- },
1175
- [createDocument, formatAPIError, formatMessage, toggleNotification, trackUsage]
1176
- );
1177
- const [autoCloneDocument] = useAutoCloneDocumentMutation();
1178
- const autoClone = React.useCallback(
1179
- async ({ model, sourceId }) => {
1180
- try {
1181
- const res = await autoCloneDocument({
1182
- model,
1183
- sourceId
1184
- });
1185
- if ("error" in res) {
1186
- toggleNotification({ type: "danger", message: formatAPIError(res.error) });
1187
- return { error: res.error };
1188
- }
1189
- toggleNotification({
1190
- type: "success",
1191
- message: formatMessage({
1192
- id: getTranslation("success.record.clone"),
1193
- defaultMessage: "Cloned document"
1194
- })
1195
- });
1196
- return res.data;
1197
- } catch (err) {
1198
- toggleNotification({
1199
- type: "danger",
1200
- message: formatMessage(DEFAULT_UNEXPECTED_ERROR_MSG)
1201
- });
1202
- throw err;
1203
- }
1204
- },
1205
- [autoCloneDocument, formatAPIError, formatMessage, toggleNotification]
1206
- );
1207
- const [cloneDocument] = useCloneDocumentMutation();
1208
- const clone = React.useCallback(
1209
- async ({ model, documentId, params }, body, trackerProperty) => {
1210
- try {
1211
- const { id: _id, ...restBody } = body;
1212
- const res = await cloneDocument({
1213
- model,
1214
- sourceId: documentId,
1215
- data: restBody,
1216
- params
1217
- });
1218
- if ("error" in res) {
1219
- toggleNotification({ type: "danger", message: formatAPIError(res.error) });
1220
- trackUsage("didNotCreateEntry", { error: res.error, ...trackerProperty });
1221
- return { error: res.error };
1222
- }
1223
- trackUsage("didCreateEntry", trackerProperty);
1224
- toggleNotification({
1225
- type: "success",
1226
- message: formatMessage({
1227
- id: getTranslation("success.record.clone"),
1228
- defaultMessage: "Cloned document"
1229
- })
1230
- });
1231
- return res.data;
1232
- } catch (err) {
1233
- toggleNotification({
1234
- type: "danger",
1235
- message: formatMessage(DEFAULT_UNEXPECTED_ERROR_MSG)
1236
- });
1237
- trackUsage("didNotCreateEntry", { error: err, ...trackerProperty });
1238
- throw err;
1239
- }
1240
- },
1241
- [cloneDocument, trackUsage, toggleNotification, formatMessage, formatAPIError]
1242
- );
1243
- const [getDoc] = useLazyGetDocumentQuery();
1244
- const getDocument = React.useCallback(
1245
- async (args) => {
1246
- const { data } = await getDoc(args);
1247
- return data;
1248
- },
1249
- [getDoc]
1250
- );
1251
- return {
1252
- autoClone,
1253
- clone,
1254
- create,
1255
- delete: _delete,
1256
- deleteMany,
1257
- discard,
1258
- getDocument,
1259
- publish,
1260
- publishMany,
1261
- unpublish,
1262
- unpublishMany,
1263
- update
1264
- };
1265
- };
1266
- const ProtectedHistoryPage = lazy(
1267
- () => import("./History-BZP8n7KT.mjs").then((mod) => ({ default: mod.ProtectedHistoryPage }))
1268
- );
1269
- const routes$1 = [
1270
- {
1271
- path: ":collectionType/:slug/:id/history",
1272
- Component: ProtectedHistoryPage
1273
- },
1274
- {
1275
- path: ":collectionType/:slug/history",
1276
- Component: ProtectedHistoryPage
1277
- }
1278
- ];
1279
- const ProtectedEditViewPage = lazy(
1280
- () => import("./EditViewPage-DvaV7U9b.mjs").then((mod) => ({ default: mod.ProtectedEditViewPage }))
1281
- );
1282
- const ProtectedListViewPage = lazy(
1283
- () => import("./ListViewPage-D5D3tVPq.mjs").then((mod) => ({ default: mod.ProtectedListViewPage }))
1284
- );
1285
- const ProtectedListConfiguration = lazy(
1286
- () => import("./ListConfigurationPage-DxKuVkKz.mjs").then((mod) => ({
1287
- default: mod.ProtectedListConfiguration
1288
- }))
1289
- );
1290
- const ProtectedEditConfigurationPage = lazy(
1291
- () => import("./EditConfigurationPage-DmCIb4kD.mjs").then((mod) => ({
1292
- default: mod.ProtectedEditConfigurationPage
1293
- }))
1294
- );
1295
- const ProtectedComponentConfigurationPage = lazy(
1296
- () => import("./ComponentConfigurationPage-CR5XdR33.mjs").then((mod) => ({
1297
- default: mod.ProtectedComponentConfigurationPage
1298
- }))
1299
- );
1300
- const NoPermissions = lazy(
1301
- () => import("./NoPermissionsPage-OyoME_Tf.mjs").then((mod) => ({ default: mod.NoPermissions }))
1302
- );
1303
- const NoContentType = lazy(
1304
- () => import("./NoContentTypePage-DnMeuQCj.mjs").then((mod) => ({ default: mod.NoContentType }))
1305
- );
1306
- const CollectionTypePages = () => {
1307
- const { collectionType } = useParams();
1308
- if (collectionType !== COLLECTION_TYPES && collectionType !== SINGLE_TYPES) {
1309
- return /* @__PURE__ */ jsx(Navigate, { to: "/404" });
1310
- }
1311
- return collectionType === COLLECTION_TYPES ? /* @__PURE__ */ jsx(ProtectedListViewPage, {}) : /* @__PURE__ */ jsx(ProtectedEditViewPage, {});
1312
- };
1313
- const CLONE_RELATIVE_PATH = ":collectionType/:slug/clone/:origin";
1314
- const CLONE_PATH = `/content-manager/${CLONE_RELATIVE_PATH}`;
1315
- const LIST_RELATIVE_PATH = ":collectionType/:slug";
1316
- const LIST_PATH = `/content-manager/${LIST_RELATIVE_PATH}`;
1317
- const routes = [
1318
- {
1319
- path: LIST_RELATIVE_PATH,
1320
- element: /* @__PURE__ */ jsx(CollectionTypePages, {})
1321
- },
1322
- {
1323
- path: ":collectionType/:slug/:id",
1324
- Component: ProtectedEditViewPage
1325
- },
1326
- {
1327
- path: CLONE_RELATIVE_PATH,
1328
- Component: ProtectedEditViewPage
1329
- },
1330
- {
1331
- path: ":collectionType/:slug/configurations/list",
1332
- Component: ProtectedListConfiguration
1333
- },
1334
- {
1335
- path: "components/:slug/configurations/edit",
1336
- Component: ProtectedComponentConfigurationPage
1337
- },
1338
- {
1339
- path: ":collectionType/:slug/configurations/edit",
1340
- Component: ProtectedEditConfigurationPage
1341
- },
1342
- {
1343
- path: "403",
1344
- Component: NoPermissions
1345
- },
1346
- {
1347
- path: "no-content-types",
1348
- Component: NoContentType
1349
- },
1350
- ...routes$1
1351
- ];
1352
- const DocumentActions = ({ actions: actions2 }) => {
1353
- const { formatMessage } = useIntl();
1354
- const [primaryAction, secondaryAction, ...restActions] = actions2.filter((action) => {
1355
- if (action.position === void 0) {
1356
- return true;
1357
- }
1358
- const positions = Array.isArray(action.position) ? action.position : [action.position];
1359
- return positions.includes("panel");
1360
- });
1361
- if (!primaryAction) {
1362
- return null;
1363
- }
1364
- return /* @__PURE__ */ jsxs(Flex, { direction: "column", gap: 2, alignItems: "stretch", width: "100%", children: [
1365
- /* @__PURE__ */ jsxs(Flex, { gap: 2, children: [
1366
- /* @__PURE__ */ jsx(DocumentActionButton, { ...primaryAction, variant: primaryAction.variant || "default" }),
1367
- restActions.length > 0 ? /* @__PURE__ */ jsx(
1368
- DocumentActionsMenu,
1369
- {
1370
- actions: restActions,
1371
- label: formatMessage({
1372
- id: "content-manager.containers.edit.panels.default.more-actions",
1373
- defaultMessage: "More document actions"
1374
- })
1375
- }
1376
- ) : null
1377
- ] }),
1378
- secondaryAction ? /* @__PURE__ */ jsx(
1379
- DocumentActionButton,
1380
- {
1381
- ...secondaryAction,
1382
- variant: secondaryAction.variant || "secondary"
1383
- }
1384
- ) : null
1385
- ] });
1386
- };
1387
- const DocumentActionButton = (action) => {
1388
- const [dialogId, setDialogId] = React.useState(null);
1389
- const { toggleNotification } = useNotification();
1390
- const handleClick = (action2) => async (e) => {
1391
- const { onClick = () => false, dialog, id } = action2;
1392
- const muteDialog = await onClick(e);
1393
- if (dialog && !muteDialog) {
1394
- switch (dialog.type) {
1395
- case "notification":
1396
- toggleNotification({
1397
- title: dialog.title,
1398
- message: dialog.content,
1399
- type: dialog.status,
1400
- timeout: dialog.timeout,
1401
- onClose: dialog.onClose
1402
- });
1403
- break;
1404
- case "dialog":
1405
- case "modal":
1406
- e.preventDefault();
1407
- setDialogId(id);
1408
- }
1409
- }
1410
- };
1411
- const handleClose = () => {
1412
- setDialogId(null);
1413
- };
1414
- return /* @__PURE__ */ jsxs(Fragment, { children: [
1415
- /* @__PURE__ */ jsx(
1416
- Button,
1417
- {
1418
- flex: 1,
1419
- startIcon: action.icon,
1420
- disabled: action.disabled,
1421
- onClick: handleClick(action),
1422
- justifyContent: "center",
1423
- variant: action.variant || "default",
1424
- children: action.label
1425
- }
1426
- ),
1427
- action.dialog?.type === "dialog" ? /* @__PURE__ */ jsx(
1428
- DocumentActionConfirmDialog,
1429
- {
1430
- ...action.dialog,
1431
- variant: action.variant,
1432
- isOpen: dialogId === action.id,
1433
- onClose: handleClose
1434
- }
1435
- ) : null,
1436
- action.dialog?.type === "modal" ? /* @__PURE__ */ jsx(
1437
- DocumentActionModal,
1438
- {
1439
- ...action.dialog,
1440
- onModalClose: handleClose,
1441
- isOpen: dialogId === action.id
1442
- }
1443
- ) : null
1444
- ] });
1445
- };
1446
- const DocumentActionsMenu = ({
1447
- actions: actions2,
1448
- children,
1449
- label,
1450
- variant = "tertiary"
1451
- }) => {
1452
- const [isOpen, setIsOpen] = React.useState(false);
1453
- const [dialogId, setDialogId] = React.useState(null);
1454
- const { formatMessage } = useIntl();
1455
- const { toggleNotification } = useNotification();
1456
- const isDisabled = actions2.every((action) => action.disabled) || actions2.length === 0;
1457
- const handleClick = (action) => async (e) => {
1458
- const { onClick = () => false, dialog, id } = action;
1459
- const muteDialog = await onClick(e);
1460
- if (dialog && !muteDialog) {
1461
- switch (dialog.type) {
1462
- case "notification":
1463
- toggleNotification({
1464
- title: dialog.title,
1465
- message: dialog.content,
1466
- type: dialog.status,
1467
- timeout: dialog.timeout,
1468
- onClose: dialog.onClose
1469
- });
1470
- break;
1471
- case "dialog":
1472
- case "modal":
1473
- setDialogId(id);
1474
- }
1475
- }
1476
- };
1477
- const handleClose = () => {
1478
- setDialogId(null);
1479
- setIsOpen(false);
1480
- };
1481
- return /* @__PURE__ */ jsxs(Menu.Root, { open: isOpen, onOpenChange: setIsOpen, children: [
1482
- /* @__PURE__ */ jsxs(
1483
- Menu.Trigger,
1484
- {
1485
- disabled: isDisabled,
1486
- size: "S",
1487
- endIcon: null,
1488
- paddingTop: "7px",
1489
- paddingLeft: "9px",
1490
- paddingRight: "9px",
1491
- variant,
1492
- children: [
1493
- /* @__PURE__ */ jsx(More, { "aria-hidden": true, focusable: false }),
1494
- /* @__PURE__ */ jsx(VisuallyHidden, { tag: "span", children: label || formatMessage({
1495
- id: "content-manager.containers.edit.panels.default.more-actions",
1496
- defaultMessage: "More document actions"
1497
- }) })
1498
- ]
1499
- }
1500
- ),
1501
- /* @__PURE__ */ jsxs(Menu.Content, { top: "4px", maxHeight: void 0, popoverPlacement: "bottom-end", children: [
1502
- actions2.map((action) => {
1503
- return /* @__PURE__ */ jsx(
1504
- Menu.Item,
1505
- {
1506
- disabled: action.disabled,
1507
- onSelect: handleClick(action),
1508
- display: "block",
1509
- children: /* @__PURE__ */ jsxs(Flex, { justifyContent: "space-between", gap: 4, children: [
1510
- /* @__PURE__ */ jsxs(Flex, { color: convertActionVariantToColor(action.variant), gap: 2, tag: "span", children: [
1511
- action.icon,
1512
- action.label
1513
- ] }),
1514
- action.id.startsWith("HistoryAction") && /* @__PURE__ */ jsx(
1515
- Flex,
1516
- {
1517
- alignItems: "center",
1518
- background: "alternative100",
1519
- borderStyle: "solid",
1520
- borderColor: "alternative200",
1521
- borderWidth: "1px",
1522
- height: 5,
1523
- paddingLeft: 2,
1524
- paddingRight: 2,
1525
- hasRadius: true,
1526
- color: "alternative600",
1527
- children: /* @__PURE__ */ jsx(Typography, { variant: "sigma", fontWeight: "bold", lineHeight: 1, children: formatMessage({ id: "global.new", defaultMessage: "New" }) })
1528
- }
1529
- )
1530
- ] })
1531
- },
1532
- action.id
1533
- );
1534
- }),
1535
- children
1536
- ] }),
1537
- actions2.map((action) => {
1538
- return /* @__PURE__ */ jsxs(React.Fragment, { children: [
1539
- action.dialog?.type === "dialog" ? /* @__PURE__ */ jsx(
1540
- DocumentActionConfirmDialog,
1541
- {
1542
- ...action.dialog,
1543
- variant: action.variant,
1544
- isOpen: dialogId === action.id,
1545
- onClose: handleClose
1546
- }
1547
- ) : null,
1548
- action.dialog?.type === "modal" ? /* @__PURE__ */ jsx(
1549
- DocumentActionModal,
1550
- {
1551
- ...action.dialog,
1552
- onModalClose: handleClose,
1553
- isOpen: dialogId === action.id
1554
- }
1555
- ) : null
1556
- ] }, action.id);
1557
- })
1558
- ] });
1559
- };
1560
- const convertActionVariantToColor = (variant = "secondary") => {
1561
- switch (variant) {
1562
- case "danger":
1563
- return "danger600";
1564
- case "secondary":
1565
- return void 0;
1566
- case "success":
1567
- return "success600";
1568
- default:
1569
- return "primary600";
1570
- }
1571
- };
1572
- const DocumentActionConfirmDialog = ({
1573
- onClose,
1574
- onCancel,
1575
- onConfirm,
1576
- title,
1577
- content,
1578
- isOpen,
1579
- variant = "secondary"
1580
- }) => {
1581
- const { formatMessage } = useIntl();
1582
- const handleClose = async () => {
1583
- if (onCancel) {
1584
- await onCancel();
1585
- }
1586
- onClose();
1587
- };
1588
- const handleConfirm = async () => {
1589
- if (onConfirm) {
1590
- await onConfirm();
1591
- }
1592
- onClose();
1593
- };
1594
- return /* @__PURE__ */ jsxs(Dialog, { isOpen, title, onClose: handleClose, children: [
1595
- /* @__PURE__ */ jsx(DialogBody, { children: content }),
1596
- /* @__PURE__ */ jsx(
1597
- DialogFooter,
1598
- {
1599
- startAction: /* @__PURE__ */ jsx(Button, { onClick: handleClose, variant: "tertiary", children: formatMessage({
1600
- id: "app.components.Button.cancel",
1601
- defaultMessage: "Cancel"
1602
- }) }),
1603
- endAction: /* @__PURE__ */ jsx(Button, { onClick: handleConfirm, variant, children: formatMessage({
1604
- id: "app.components.Button.confirm",
1605
- defaultMessage: "Confirm"
1606
- }) })
1607
- }
1608
- )
1609
- ] });
1610
- };
1611
- const DocumentActionModal = ({
1612
- isOpen,
1613
- title,
1614
- onClose,
1615
- footer: Footer,
1616
- content: Content,
1617
- onModalClose
1618
- }) => {
1619
- const id = React.useId();
1620
- if (!isOpen) {
1621
- return null;
1622
- }
1623
- const handleClose = () => {
1624
- if (onClose) {
1625
- onClose();
1626
- }
1627
- onModalClose();
1628
- };
1629
- return /* @__PURE__ */ jsxs(ModalLayout, { borderRadius: "4px", overflow: "hidden", onClose: handleClose, labelledBy: id, children: [
1630
- /* @__PURE__ */ jsx(ModalHeader, { children: /* @__PURE__ */ jsx(Typography, { fontWeight: "bold", textColor: "neutral800", tag: "h2", id, children: title }) }),
1631
- /* @__PURE__ */ jsx(ModalBody, { children: typeof Content === "function" ? /* @__PURE__ */ jsx(Content, { onClose: handleClose }) : Content }),
1632
- /* @__PURE__ */ jsx(
1633
- Box,
1634
- {
1635
- paddingTop: 4,
1636
- paddingBottom: 4,
1637
- paddingLeft: 5,
1638
- paddingRight: 5,
1639
- borderWidth: "1px 0 0 0",
1640
- borderStyle: "solid",
1641
- borderColor: "neutral150",
1642
- background: "neutral100",
1643
- children: typeof Footer === "function" ? /* @__PURE__ */ jsx(Footer, { onClose: handleClose }) : Footer
1644
- }
1645
- )
1646
- ] });
1647
- };
1648
- const PublishAction$1 = ({
1649
- activeTab,
1650
- documentId,
1651
- model,
1652
- collectionType,
1653
- meta,
1654
- document
1655
- }) => {
1656
- const { schema } = useDoc();
1657
- const navigate = useNavigate();
1658
- const { toggleNotification } = useNotification();
1659
- const { _unstableFormatValidationErrors: formatValidationErrors } = useAPIErrorHandler();
1660
- const isCloning = useMatch(CLONE_PATH) !== null;
1661
- const { formatMessage } = useIntl();
1662
- const { canPublish, canCreate, canUpdate } = useDocumentRBAC(
1663
- "PublishAction",
1664
- ({ canPublish: canPublish2, canCreate: canCreate2, canUpdate: canUpdate2 }) => ({ canPublish: canPublish2, canCreate: canCreate2, canUpdate: canUpdate2 })
1665
- );
1666
- const { publish } = useDocumentActions();
1667
- const [{ query, rawQuery }] = useQueryParams();
1668
- const params = React.useMemo(() => buildValidParams(query), [query]);
1669
- const modified = useForm("PublishAction", ({ modified: modified2 }) => modified2);
1670
- const setSubmitting = useForm("PublishAction", ({ setSubmitting: setSubmitting2 }) => setSubmitting2);
1671
- const isSubmitting = useForm("PublishAction", ({ isSubmitting: isSubmitting2 }) => isSubmitting2);
1672
- const validate = useForm("PublishAction", (state) => state.validate);
1673
- const setErrors = useForm("PublishAction", (state) => state.setErrors);
1674
- const formValues = useForm("PublishAction", ({ values }) => values);
1675
- const isDocumentPublished = (document?.[PUBLISHED_AT_ATTRIBUTE_NAME] || meta?.availableStatus.some((doc) => doc[PUBLISHED_AT_ATTRIBUTE_NAME] !== null)) && document?.status !== "modified";
1676
- if (!schema?.options?.draftAndPublish) {
1677
- return null;
1678
- }
1679
- return {
1680
- /**
1681
- * Disabled when:
1682
- * - currently if you're cloning a document we don't support publish & clone at the same time.
1683
- * - the form is submitting
1684
- * - the active tab is the published tab
1685
- * - the document is already published & not modified
1686
- * - the document is being created & not modified
1687
- * - the user doesn't have the permission to publish
1688
- * - the user doesn't have the permission to create a new document
1689
- * - the user doesn't have the permission to update the document
1690
- */
1691
- disabled: isCloning || isSubmitting || activeTab === "published" || !modified && isDocumentPublished || !modified && !document?.documentId || !canPublish || Boolean(!document?.documentId && !canCreate || document?.documentId && !canUpdate),
1692
- label: formatMessage({
1693
- id: "app.utils.publish",
1694
- defaultMessage: "Publish"
1695
- }),
1696
- onClick: async () => {
1697
- setSubmitting(true);
1698
- try {
1699
- const { errors } = await validate();
1700
- if (errors) {
1701
- toggleNotification({
1702
- type: "danger",
1703
- message: formatMessage({
1704
- id: "content-manager.validation.error",
1705
- defaultMessage: "There are validation errors in your document. Please fix them before saving."
1706
- })
1707
- });
1708
- return;
1709
- }
1710
- const res = await publish(
1711
- {
1712
- collectionType,
1713
- model,
1714
- documentId,
1715
- params
1716
- },
1717
- formValues
1718
- );
1719
- if ("data" in res && collectionType !== SINGLE_TYPES) {
1720
- navigate({
1721
- pathname: `../${collectionType}/${model}/${res.data.documentId}`,
1722
- search: rawQuery
1723
- });
1724
- } else if ("error" in res && isBaseQueryError(res.error) && res.error.name === "ValidationError") {
1725
- setErrors(formatValidationErrors(res.error));
1726
- }
1727
- } finally {
1728
- setSubmitting(false);
1729
- }
1730
- }
1731
- };
1732
- };
1733
- PublishAction$1.type = "publish";
1734
- const UpdateAction = ({
1735
- activeTab,
1736
- documentId,
1737
- model,
1738
- collectionType
1739
- }) => {
1740
- const navigate = useNavigate();
1741
- const { toggleNotification } = useNotification();
1742
- const { _unstableFormatValidationErrors: formatValidationErrors } = useAPIErrorHandler();
1743
- const cloneMatch = useMatch(CLONE_PATH);
1744
- const isCloning = cloneMatch !== null;
1745
- const { formatMessage } = useIntl();
1746
- const { canCreate, canUpdate } = useDocumentRBAC("UpdateAction", ({ canCreate: canCreate2, canUpdate: canUpdate2 }) => ({
1747
- canCreate: canCreate2,
1748
- canUpdate: canUpdate2
1749
- }));
1750
- const { create, update, clone } = useDocumentActions();
1751
- const [{ query, rawQuery }] = useQueryParams();
1752
- const params = React.useMemo(() => buildValidParams(query), [query]);
1753
- const isSubmitting = useForm("UpdateAction", ({ isSubmitting: isSubmitting2 }) => isSubmitting2);
1754
- const modified = useForm("UpdateAction", ({ modified: modified2 }) => modified2);
1755
- const setSubmitting = useForm("UpdateAction", ({ setSubmitting: setSubmitting2 }) => setSubmitting2);
1756
- const document = useForm("UpdateAction", ({ values }) => values);
1757
- const validate = useForm("UpdateAction", (state) => state.validate);
1758
- const setErrors = useForm("UpdateAction", (state) => state.setErrors);
1759
- const resetForm = useForm("PublishAction", ({ resetForm: resetForm2 }) => resetForm2);
1760
- return {
1761
- /**
1762
- * Disabled when:
1763
- * - the form is submitting
1764
- * - the document is not modified & we're not cloning (you can save a clone entity straight away)
1765
- * - the active tab is the published tab
1766
- * - the user doesn't have the permission to create a new document
1767
- * - the user doesn't have the permission to update the document
1768
- */
1769
- disabled: isSubmitting || !modified && !isCloning || activeTab === "published" || Boolean(!documentId && !canCreate || documentId && !canUpdate),
1770
- label: formatMessage({
1771
- id: "content-manager.containers.Edit.save",
1772
- defaultMessage: "Save"
1773
- }),
1774
- onClick: async () => {
1775
- setSubmitting(true);
1776
- try {
1777
- const { errors } = await validate();
1778
- if (errors) {
1779
- toggleNotification({
1780
- type: "danger",
1781
- message: formatMessage({
1782
- id: "content-manager.validation.error",
1783
- defaultMessage: "There are validation errors in your document. Please fix them before saving."
1784
- })
1785
- });
1786
- return;
1787
- }
1788
- if (isCloning) {
1789
- const res = await clone(
1790
- {
1791
- model,
1792
- documentId: cloneMatch.params.origin,
1793
- params
1794
- },
1795
- document
1796
- );
1797
- if ("data" in res) {
1798
- navigate({
1799
- pathname: `../${collectionType}/${model}/${res.data.documentId}`,
1800
- search: rawQuery
1801
- });
1802
- } else if ("error" in res && isBaseQueryError(res.error) && res.error.name === "ValidationError") {
1803
- setErrors(formatValidationErrors(res.error));
1804
- }
1805
- } else if (documentId || collectionType === SINGLE_TYPES) {
1806
- const res = await update(
1807
- {
1808
- collectionType,
1809
- model,
1810
- documentId,
1811
- params
1812
- },
1813
- document
1814
- );
1815
- if ("error" in res && isBaseQueryError(res.error) && res.error.name === "ValidationError") {
1816
- setErrors(formatValidationErrors(res.error));
1817
- } else {
1818
- resetForm();
1819
- }
1820
- } else {
1821
- const res = await create(
1822
- {
1823
- model,
1824
- params
1825
- },
1826
- document
1827
- );
1828
- if ("data" in res && collectionType !== SINGLE_TYPES) {
1829
- navigate({
1830
- pathname: `../${collectionType}/${model}/${res.data.documentId}`,
1831
- search: rawQuery
1832
- });
1833
- } else if ("error" in res && isBaseQueryError(res.error) && res.error.name === "ValidationError") {
1834
- setErrors(formatValidationErrors(res.error));
1835
- }
1836
- }
1837
- } finally {
1838
- setSubmitting(false);
1839
- }
1840
- }
1841
- };
1842
- };
1843
- UpdateAction.type = "update";
1844
- const UNPUBLISH_DRAFT_OPTIONS = {
1845
- KEEP: "keep",
1846
- DISCARD: "discard"
1847
- };
1848
- const UnpublishAction$1 = ({
1849
- activeTab,
1850
- documentId,
1851
- model,
1852
- collectionType,
1853
- document
1854
- }) => {
1855
- const { formatMessage } = useIntl();
1856
- const { schema } = useDoc();
1857
- const canPublish = useDocumentRBAC("UnpublishAction", ({ canPublish: canPublish2 }) => canPublish2);
1858
- const { unpublish } = useDocumentActions();
1859
- const [{ query }] = useQueryParams();
1860
- const params = React.useMemo(() => buildValidParams(query), [query]);
1861
- const { toggleNotification } = useNotification();
1862
- const [shouldKeepDraft, setShouldKeepDraft] = React.useState(true);
1863
- const isDocumentModified = document?.status === "modified";
1864
- const handleChange = (e) => {
1865
- if ("value" in e.target) {
1866
- setShouldKeepDraft(e.target.value === UNPUBLISH_DRAFT_OPTIONS.KEEP);
1867
- }
1868
- };
1869
- if (!schema?.options?.draftAndPublish) {
1870
- return null;
1871
- }
1872
- return {
1873
- disabled: !canPublish || activeTab === "published" || document?.status !== "published" && document?.status !== "modified",
1874
- label: formatMessage({
1875
- id: "app.utils.unpublish",
1876
- defaultMessage: "Unpublish"
1877
- }),
1878
- icon: /* @__PURE__ */ jsx(StyledCrossCircle, {}),
1879
- onClick: async () => {
1880
- if (!documentId && collectionType !== SINGLE_TYPES || isDocumentModified) {
1881
- if (!documentId) {
1882
- console.error(
1883
- "You're trying to unpublish a document without an id, this is likely a bug with Strapi. Please open an issue."
1884
- );
1885
- toggleNotification({
1886
- message: formatMessage({
1887
- id: "content-manager.actions.unpublish.error",
1888
- defaultMessage: "An error occurred while trying to unpublish the document."
1889
- }),
1890
- type: "danger"
1891
- });
1892
- }
1893
- return;
1894
- }
1895
- await unpublish({
1896
- collectionType,
1897
- model,
1898
- documentId,
1899
- params
1900
- });
1901
- },
1902
- dialog: isDocumentModified ? {
1903
- type: "dialog",
1904
- title: formatMessage({
1905
- id: "app.components.ConfirmDialog.title",
1906
- defaultMessage: "Confirmation"
1907
- }),
1908
- content: /* @__PURE__ */ jsxs(Flex, { alignItems: "flex-start", direction: "column", gap: 6, children: [
1909
- /* @__PURE__ */ jsxs(Flex, { width: "100%", direction: "column", gap: 2, children: [
1910
- /* @__PURE__ */ jsx(WarningCircle, { width: "24px", height: "24px", fill: "danger600" }),
1911
- /* @__PURE__ */ jsx(Typography, { tag: "p", variant: "omega", textAlign: "center", children: formatMessage({
1912
- id: "content-manager.actions.unpublish.dialog.body",
1913
- defaultMessage: "Are you sure?"
1914
- }) })
1915
- ] }),
1916
- /* @__PURE__ */ jsxs(
1917
- Flex,
1918
- {
1919
- onChange: handleChange,
1920
- direction: "column",
1921
- alignItems: "flex-start",
1922
- tag: "fieldset",
1923
- borderWidth: 0,
1924
- gap: 3,
1925
- children: [
1926
- /* @__PURE__ */ jsx(VisuallyHidden, { tag: "legend" }),
1927
- /* @__PURE__ */ jsx(
1928
- Radio,
1929
- {
1930
- checked: shouldKeepDraft,
1931
- value: UNPUBLISH_DRAFT_OPTIONS.KEEP,
1932
- name: "discard-options",
1933
- children: formatMessage({
1934
- id: "content-manager.actions.unpublish.dialog.option.keep-draft",
1935
- defaultMessage: "Keep draft"
1936
- })
1937
- }
1938
- ),
1939
- /* @__PURE__ */ jsx(
1940
- Radio,
1941
- {
1942
- checked: !shouldKeepDraft,
1943
- value: UNPUBLISH_DRAFT_OPTIONS.DISCARD,
1944
- name: "discard-options",
1945
- children: formatMessage({
1946
- id: "content-manager.actions.unpublish.dialog.option.replace-draft",
1947
- defaultMessage: "Replace draft"
1948
- })
1949
- }
1950
- )
1951
- ]
1952
- }
1953
- )
1954
- ] }),
1955
- onConfirm: async () => {
1956
- if (!documentId && collectionType !== SINGLE_TYPES) {
1957
- console.error(
1958
- "You're trying to unpublish a document without an id, this is likely a bug with Strapi. Please open an issue."
1959
- );
1960
- toggleNotification({
1961
- message: formatMessage({
1962
- id: "content-manager.actions.unpublish.error",
1963
- defaultMessage: "An error occurred while trying to unpublish the document."
1964
- }),
1965
- type: "danger"
1966
- });
1967
- }
1968
- await unpublish(
1969
- {
1970
- collectionType,
1971
- model,
1972
- documentId,
1973
- params
1974
- },
1975
- !shouldKeepDraft
1976
- );
1977
- }
1978
- } : void 0,
1979
- variant: "danger",
1980
- position: ["panel", "table-row"]
1981
- };
1982
- };
1983
- UnpublishAction$1.type = "unpublish";
1984
- const DiscardAction = ({
1985
- activeTab,
1986
- documentId,
1987
- model,
1988
- collectionType,
1989
- document
1990
- }) => {
1991
- const { formatMessage } = useIntl();
1992
- const { schema } = useDoc();
1993
- const canUpdate = useDocumentRBAC("DiscardAction", ({ canUpdate: canUpdate2 }) => canUpdate2);
1994
- const { discard } = useDocumentActions();
1995
- const [{ query }] = useQueryParams();
1996
- const params = React.useMemo(() => buildValidParams(query), [query]);
1997
- if (!schema?.options?.draftAndPublish) {
1998
- return null;
1999
- }
2000
- return {
2001
- disabled: !canUpdate || activeTab === "published" || document?.status !== "modified",
2002
- label: formatMessage({
2003
- id: "content-manager.actions.discard.label",
2004
- defaultMessage: "Discard changes"
2005
- }),
2006
- icon: /* @__PURE__ */ jsx(StyledCrossCircle, {}),
2007
- position: ["panel", "table-row"],
2008
- variant: "danger",
2009
- dialog: {
2010
- type: "dialog",
2011
- title: formatMessage({
2012
- id: "app.components.ConfirmDialog.title",
2013
- defaultMessage: "Confirmation"
2014
- }),
2015
- content: /* @__PURE__ */ jsxs(Flex, { direction: "column", gap: 2, children: [
2016
- /* @__PURE__ */ jsx(WarningCircle, { width: "24px", height: "24px", fill: "danger600" }),
2017
- /* @__PURE__ */ jsx(Typography, { tag: "p", variant: "omega", textAlign: "center", children: formatMessage({
2018
- id: "content-manager.actions.discard.dialog.body",
2019
- defaultMessage: "Are you sure?"
2020
- }) })
2021
- ] }),
2022
- onConfirm: async () => {
2023
- await discard({
2024
- collectionType,
2025
- model,
2026
- documentId,
2027
- params
2028
- });
2029
- }
2030
- }
2031
- };
2032
- };
2033
- DiscardAction.type = "discard";
2034
- const StyledCrossCircle = styled(CrossCircle)`
2035
- path {
2036
- fill: currentColor;
2037
- }
2038
- `;
2039
- const DEFAULT_ACTIONS = [PublishAction$1, UpdateAction, UnpublishAction$1, DiscardAction];
2040
- const intervals = ["years", "months", "days", "hours", "minutes", "seconds"];
2041
- const RelativeTime = React.forwardRef(
2042
- ({ timestamp, customIntervals = [], ...restProps }, forwardedRef) => {
2043
- const { formatRelativeTime, formatDate, formatTime } = useIntl();
2044
- const interval = intervalToDuration({
2045
- start: timestamp,
2046
- end: Date.now()
2047
- // see https://github.com/date-fns/date-fns/issues/2891 – No idea why it's all partial it returns it every time.
2048
- });
2049
- const unit = intervals.find((intervalUnit) => {
2050
- return interval[intervalUnit] > 0 && Object.keys(interval).includes(intervalUnit);
2051
- });
2052
- const relativeTime = isPast(timestamp) ? -interval[unit] : interval[unit];
2053
- const customInterval = customIntervals.find(
2054
- (custom) => interval[custom.unit] < custom.threshold
2055
- );
2056
- const displayText = customInterval ? customInterval.text : formatRelativeTime(relativeTime, unit, { numeric: "auto" });
2057
- return /* @__PURE__ */ jsx(
2058
- "time",
2059
- {
2060
- ref: forwardedRef,
2061
- dateTime: timestamp.toISOString(),
2062
- role: "time",
2063
- title: `${formatDate(timestamp)} ${formatTime(timestamp)}`,
2064
- ...restProps,
2065
- children: displayText
2066
- }
2067
- );
2068
- }
2069
- );
2070
- const getDisplayName = ({
2071
- firstname,
2072
- lastname,
2073
- username,
2074
- email
2075
- } = {}) => {
2076
- if (username) {
2077
- return username;
2078
- }
2079
- if (firstname) {
2080
- return `${firstname} ${lastname ?? ""}`.trim();
2081
- }
2082
- return email ?? "";
2083
- };
2084
- const capitalise = (str) => str.charAt(0).toUpperCase() + str.slice(1);
2085
- const DocumentStatus = ({ status = "draft", ...restProps }) => {
2086
- const statusVariant = status === "draft" ? "primary" : status === "published" ? "success" : "alternative";
2087
- return /* @__PURE__ */ jsx(Status, { ...restProps, showBullet: false, size: "S", variant: statusVariant, children: /* @__PURE__ */ jsx(Typography, { tag: "span", variant: "omega", fontWeight: "bold", children: capitalise(status) }) });
2088
- };
2089
- const Header = ({ isCreating, status, title: documentTitle = "Untitled" }) => {
2090
- const { formatMessage } = useIntl();
2091
- const isCloning = useMatch(CLONE_PATH) !== null;
2092
- const title = isCreating ? formatMessage({
2093
- id: "content-manager.containers.edit.title.new",
2094
- defaultMessage: "Create an entry"
2095
- }) : documentTitle;
2096
- return /* @__PURE__ */ jsxs(Flex, { direction: "column", alignItems: "flex-start", paddingTop: 8, paddingBottom: 4, gap: 3, children: [
2097
- /* @__PURE__ */ jsx(BackButton, {}),
2098
- /* @__PURE__ */ jsxs(
2099
- Flex,
2100
- {
2101
- width: "100%",
2102
- justifyContent: "space-between",
2103
- paddingTop: 1,
2104
- gap: "80px",
2105
- alignItems: "flex-start",
2106
- children: [
2107
- /* @__PURE__ */ jsx(Typography, { variant: "alpha", tag: "h1", children: title }),
2108
- /* @__PURE__ */ jsx(HeaderToolbar, {})
2109
- ]
2110
- }
2111
- ),
2112
- status ? /* @__PURE__ */ jsx(DocumentStatus, { status: isCloning ? "draft" : status }) : null
2113
- ] });
2114
- };
2115
- const HeaderToolbar = () => {
2116
- const { formatMessage } = useIntl();
2117
- const isCloning = useMatch(CLONE_PATH) !== null;
2118
- const [
2119
- {
2120
- query: { status = "draft" }
2121
- }
2122
- ] = useQueryParams();
2123
- const { model, id, document, meta, collectionType } = useDoc();
2124
- const plugins = useStrapiApp("HeaderToolbar", (state) => state.plugins);
2125
- return /* @__PURE__ */ jsxs(Flex, { gap: 2, children: [
2126
- /* @__PURE__ */ jsx(
2127
- DescriptionComponentRenderer,
2128
- {
2129
- props: {
2130
- activeTab: status,
2131
- model,
2132
- documentId: id,
2133
- document: isCloning ? void 0 : document,
2134
- meta: isCloning ? void 0 : meta,
2135
- collectionType
2136
- },
2137
- descriptions: plugins["content-manager"].apis.getHeaderActions(),
2138
- children: (actions2) => {
2139
- if (actions2.length > 0) {
2140
- return /* @__PURE__ */ jsx(HeaderActions, { actions: actions2 });
2141
- } else {
2142
- return null;
2143
- }
2144
- }
2145
- }
2146
- ),
2147
- /* @__PURE__ */ jsx(
2148
- DescriptionComponentRenderer,
2149
- {
2150
- props: {
2151
- activeTab: status,
2152
- model,
2153
- documentId: id,
2154
- document: isCloning ? void 0 : document,
2155
- meta: isCloning ? void 0 : meta,
2156
- collectionType
2157
- },
2158
- descriptions: plugins["content-manager"].apis.getDocumentActions(),
2159
- children: (actions2) => {
2160
- const headerActions = actions2.filter((action) => {
2161
- const positions = Array.isArray(action.position) ? action.position : [action.position];
2162
- return positions.includes("header");
2163
- });
2164
- return /* @__PURE__ */ jsx(
2165
- DocumentActionsMenu,
2166
- {
2167
- actions: headerActions,
2168
- label: formatMessage({
2169
- id: "content-manager.containers.edit.header.more-actions",
2170
- defaultMessage: "More actions"
2171
- }),
2172
- children: /* @__PURE__ */ jsx(Information, { activeTab: status })
2173
- }
2174
- );
2175
- }
2176
- }
2177
- )
2178
- ] });
2179
- };
2180
- const Information = ({ activeTab }) => {
2181
- const { formatMessage } = useIntl();
2182
- const { document, meta } = useDoc();
2183
- if (!document || !document.id) {
2184
- return null;
2185
- }
2186
- const createAndUpdateDocument = activeTab === "draft" ? document : meta?.availableStatus.find((status) => status.publishedAt === null);
2187
- const publishDocument = activeTab === "published" ? document : meta?.availableStatus.find((status) => status.publishedAt !== null);
2188
- const creator = createAndUpdateDocument?.[CREATED_BY_ATTRIBUTE_NAME] ? getDisplayName(createAndUpdateDocument[CREATED_BY_ATTRIBUTE_NAME]) : null;
2189
- const updator = createAndUpdateDocument?.[UPDATED_BY_ATTRIBUTE_NAME] ? getDisplayName(createAndUpdateDocument[UPDATED_BY_ATTRIBUTE_NAME]) : null;
2190
- const information = [
2191
- {
2192
- isDisplayed: !!publishDocument?.[PUBLISHED_AT_ATTRIBUTE_NAME],
2193
- label: formatMessage({
2194
- id: "content-manager.containers.edit.information.last-published.label",
2195
- defaultMessage: "Last published"
2196
- }),
2197
- value: formatMessage(
2198
- {
2199
- id: "content-manager.containers.edit.information.last-published.value",
2200
- defaultMessage: `Published {time}{isAnonymous, select, true {} other { by {author}}}`
2201
- },
2202
- {
2203
- time: /* @__PURE__ */ jsx(RelativeTime, { timestamp: new Date(publishDocument?.[PUBLISHED_AT_ATTRIBUTE_NAME]) }),
2204
- isAnonymous: !publishDocument?.[PUBLISHED_BY_ATTRIBUTE_NAME],
2205
- author: publishDocument?.[PUBLISHED_BY_ATTRIBUTE_NAME] ? getDisplayName(publishDocument?.[PUBLISHED_BY_ATTRIBUTE_NAME]) : null
2206
- }
2207
- )
2208
- },
2209
- {
2210
- isDisplayed: !!createAndUpdateDocument?.[UPDATED_AT_ATTRIBUTE_NAME],
2211
- label: formatMessage({
2212
- id: "content-manager.containers.edit.information.last-draft.label",
2213
- defaultMessage: "Last draft"
2214
- }),
2215
- value: formatMessage(
2216
- {
2217
- id: "content-manager.containers.edit.information.last-draft.value",
2218
- defaultMessage: `Modified {time}{isAnonymous, select, true {} other { by {author}}}`
2219
- },
2220
- {
2221
- time: /* @__PURE__ */ jsx(
2222
- RelativeTime,
2223
- {
2224
- timestamp: new Date(createAndUpdateDocument?.[UPDATED_AT_ATTRIBUTE_NAME])
2225
- }
2226
- ),
2227
- isAnonymous: !updator,
2228
- author: updator
2229
- }
2230
- )
2231
- },
2232
- {
2233
- isDisplayed: !!createAndUpdateDocument?.[CREATED_AT_ATTRIBUTE_NAME],
2234
- label: formatMessage({
2235
- id: "content-manager.containers.edit.information.document.label",
2236
- defaultMessage: "Document"
2237
- }),
2238
- value: formatMessage(
2239
- {
2240
- id: "content-manager.containers.edit.information.document.value",
2241
- defaultMessage: `Created {time}{isAnonymous, select, true {} other { by {author}}}`
2242
- },
2243
- {
2244
- time: /* @__PURE__ */ jsx(
2245
- RelativeTime,
2246
- {
2247
- timestamp: new Date(createAndUpdateDocument?.[CREATED_AT_ATTRIBUTE_NAME])
2248
- }
2249
- ),
2250
- isAnonymous: !creator,
2251
- author: creator
2252
- }
2253
- )
2254
- }
2255
- ].filter((info) => info.isDisplayed);
2256
- return /* @__PURE__ */ jsx(
2257
- Flex,
2258
- {
2259
- borderWidth: "1px 0 0 0",
2260
- borderStyle: "solid",
2261
- borderColor: "neutral150",
2262
- direction: "column",
2263
- marginTop: 2,
2264
- tag: "dl",
2265
- padding: 5,
2266
- gap: 3,
2267
- alignItems: "flex-start",
2268
- marginLeft: "-0.4rem",
2269
- marginRight: "-0.4rem",
2270
- width: "calc(100% + 8px)",
2271
- children: information.map((info) => /* @__PURE__ */ jsxs(Flex, { gap: 1, direction: "column", alignItems: "flex-start", children: [
2272
- /* @__PURE__ */ jsx(Typography, { tag: "dt", variant: "pi", fontWeight: "bold", children: info.label }),
2273
- /* @__PURE__ */ jsx(Typography, { tag: "dd", variant: "pi", textColor: "neutral600", children: info.value })
2274
- ] }, info.label))
2275
- }
2276
- );
2277
- };
2278
- const HeaderActions = ({ actions: actions2 }) => {
2279
- return /* @__PURE__ */ jsx(Flex, { children: actions2.map((action) => {
2280
- if ("options" in action) {
2281
- return /* @__PURE__ */ jsx(
2282
- SingleSelect,
2283
- {
2284
- size: "S",
2285
- disabled: action.disabled,
2286
- "aria-label": action.label,
2287
- onChange: action.onSelect,
2288
- value: action.value,
2289
- children: action.options.map(({ label, ...option }) => /* @__PURE__ */ jsx(SingleSelectOption, { ...option, children: label }, option.value))
2290
- },
2291
- action.id
2292
- );
2293
- } else {
2294
- return null;
2295
- }
2296
- }) });
2297
- };
2298
- const ConfigureTheViewAction = ({ collectionType, model }) => {
2299
- const navigate = useNavigate();
2300
- const { formatMessage } = useIntl();
2301
- return {
2302
- label: formatMessage({
2303
- id: "app.links.configure-view",
2304
- defaultMessage: "Configure the view"
2305
- }),
2306
- icon: /* @__PURE__ */ jsx(ListPlus, {}),
2307
- onClick: () => {
2308
- navigate(`../${collectionType}/${model}/configurations/edit`);
2309
- },
2310
- position: "header"
2311
- };
2312
- };
2313
- ConfigureTheViewAction.type = "configure-the-view";
2314
- const EditTheModelAction = ({ model }) => {
2315
- const navigate = useNavigate();
2316
- const { formatMessage } = useIntl();
2317
- return {
2318
- label: formatMessage({
2319
- id: "content-manager.link-to-ctb",
2320
- defaultMessage: "Edit the model"
2321
- }),
2322
- icon: /* @__PURE__ */ jsx(Pencil, {}),
2323
- onClick: () => {
2324
- navigate(`/plugins/content-type-builder/content-types/${model}`);
2325
- },
2326
- position: "header"
2327
- };
2328
- };
2329
- EditTheModelAction.type = "edit-the-model";
2330
- const DeleteAction$1 = ({ documentId, model, collectionType, document }) => {
2331
- const navigate = useNavigate();
2332
- const { formatMessage } = useIntl();
2333
- const listViewPathMatch = useMatch(LIST_PATH);
2334
- const canDelete = useDocumentRBAC("DeleteAction", (state) => state.canDelete);
2335
- const { delete: deleteAction } = useDocumentActions();
2336
- const { toggleNotification } = useNotification();
2337
- const setSubmitting = useForm("DeleteAction", (state) => state.setSubmitting);
2338
- return {
2339
- disabled: !canDelete || !document,
2340
- label: formatMessage({
2341
- id: "content-manager.actions.delete.label",
2342
- defaultMessage: "Delete document"
2343
- }),
2344
- icon: /* @__PURE__ */ jsx(Trash, {}),
2345
- dialog: {
2346
- type: "dialog",
2347
- title: formatMessage({
2348
- id: "app.components.ConfirmDialog.title",
2349
- defaultMessage: "Confirmation"
2350
- }),
2351
- content: /* @__PURE__ */ jsxs(Flex, { direction: "column", gap: 2, children: [
2352
- /* @__PURE__ */ jsx(WarningCircle, { width: "24px", height: "24px", fill: "danger600" }),
2353
- /* @__PURE__ */ jsx(Typography, { tag: "p", variant: "omega", textAlign: "center", children: formatMessage({
2354
- id: "content-manager.actions.delete.dialog.body",
2355
- defaultMessage: "Are you sure?"
2356
- }) })
2357
- ] }),
2358
- onConfirm: async () => {
2359
- if (!listViewPathMatch) {
2360
- setSubmitting(true);
2361
- }
2362
- try {
2363
- if (!documentId && collectionType !== SINGLE_TYPES) {
2364
- console.error(
2365
- "You're trying to delete a document without an id, this is likely a bug with Strapi. Please open an issue."
2366
- );
2367
- toggleNotification({
2368
- message: formatMessage({
2369
- id: "content-manager.actions.delete.error",
2370
- defaultMessage: "An error occurred while trying to delete the document."
2371
- }),
2372
- type: "danger"
2373
- });
2374
- return;
2375
- }
2376
- const res = await deleteAction({
2377
- documentId,
2378
- model,
2379
- collectionType,
2380
- params: {
2381
- locale: "*"
2382
- }
2383
- });
2384
- if (!("error" in res)) {
2385
- navigate({ pathname: `../${collectionType}/${model}` }, { replace: true });
2386
- }
2387
- } finally {
2388
- if (!listViewPathMatch) {
2389
- setSubmitting(false);
2390
- }
2391
- }
2392
- }
2393
- },
2394
- variant: "danger",
2395
- position: ["header", "table-row"]
2396
- };
2397
- };
2398
- DeleteAction$1.type = "delete";
2399
- const DEFAULT_HEADER_ACTIONS = [EditTheModelAction, ConfigureTheViewAction, DeleteAction$1];
2400
- const Panels = () => {
2401
- const isCloning = useMatch(CLONE_PATH) !== null;
2402
- const [
2403
- {
2404
- query: { status }
2405
- }
2406
- ] = useQueryParams({
2407
- status: "draft"
2408
- });
2409
- const { model, id, document, meta, collectionType } = useDoc();
2410
- const plugins = useStrapiApp("Panels", (state) => state.plugins);
2411
- const props = {
2412
- activeTab: status,
2413
- model,
2414
- documentId: id,
2415
- document: isCloning ? void 0 : document,
2416
- meta: isCloning ? void 0 : meta,
2417
- collectionType
2418
- };
2419
- return /* @__PURE__ */ jsx(Flex, { direction: "column", alignItems: "stretch", gap: 2, children: /* @__PURE__ */ jsx(
2420
- DescriptionComponentRenderer,
2421
- {
2422
- props,
2423
- descriptions: plugins["content-manager"].apis.getEditViewSidePanels(),
2424
- children: (panels) => panels.map(({ content, id: id2, ...description }) => /* @__PURE__ */ jsx(Panel, { ...description, children: content }, id2))
2425
- }
2426
- ) });
2427
- };
2428
- const ActionsPanel = () => {
2429
- const { formatMessage } = useIntl();
2430
- return {
2431
- title: formatMessage({
2432
- id: "content-manager.containers.edit.panels.default.title",
2433
- defaultMessage: "Document"
2434
- }),
2435
- content: /* @__PURE__ */ jsx(ActionsPanelContent, {})
2436
- };
2437
- };
2438
- ActionsPanel.type = "actions";
2439
- const ActionsPanelContent = () => {
2440
- const isCloning = useMatch(CLONE_PATH) !== null;
2441
- const [
2442
- {
2443
- query: { status = "draft" }
2444
- }
2445
- ] = useQueryParams();
2446
- const { model, id, document, meta, collectionType } = useDoc();
2447
- const plugins = useStrapiApp("ActionsPanel", (state) => state.plugins);
2448
- const props = {
2449
- activeTab: status,
2450
- model,
2451
- documentId: id,
2452
- document: isCloning ? void 0 : document,
2453
- meta: isCloning ? void 0 : meta,
2454
- collectionType
2455
- };
2456
- return /* @__PURE__ */ jsxs(Flex, { direction: "column", gap: 2, width: "100%", children: [
2457
- /* @__PURE__ */ jsx(
2458
- DescriptionComponentRenderer,
2459
- {
2460
- props,
2461
- descriptions: plugins["content-manager"].apis.getDocumentActions(),
2462
- children: (actions2) => /* @__PURE__ */ jsx(DocumentActions, { actions: actions2 })
2463
- }
2464
- ),
2465
- /* @__PURE__ */ jsx(InjectionZone, { area: "editView.right-links", slug: model })
2466
- ] });
2467
- };
2468
- const Panel = React.forwardRef(({ children, title }, ref) => {
2469
- return /* @__PURE__ */ jsxs(
2470
- Flex,
2471
- {
2472
- ref,
2473
- tag: "aside",
2474
- "aria-labelledby": "additional-information",
2475
- background: "neutral0",
2476
- borderColor: "neutral150",
2477
- hasRadius: true,
2478
- paddingBottom: 4,
2479
- paddingLeft: 4,
2480
- paddingRight: 4,
2481
- paddingTop: 4,
2482
- shadow: "tableShadow",
2483
- gap: 3,
2484
- direction: "column",
2485
- justifyContent: "stretch",
2486
- alignItems: "flex-start",
2487
- children: [
2488
- /* @__PURE__ */ jsx(Typography, { tag: "h2", variant: "sigma", textTransform: "uppercase", children: title }),
2489
- children
2490
- ]
2491
- }
2492
- );
2493
- });
2494
- const HOOKS = {
2495
- /**
2496
- * Hook that allows to mutate the displayed headers of the list view table
2497
- * @constant
2498
- * @type {string}
2499
- */
2500
- INJECT_COLUMN_IN_TABLE: "Admin/CM/pages/ListView/inject-column-in-table",
2501
- /**
2502
- * Hook that allows to mutate the CM's collection types links pre-set filters
2503
- * @constant
2504
- * @type {string}
2505
- */
2506
- MUTATE_COLLECTION_TYPES_LINKS: "Admin/CM/pages/App/mutate-collection-types-links",
2507
- /**
2508
- * Hook that allows to mutate the CM's edit view layout
2509
- * @constant
2510
- * @type {string}
2511
- */
2512
- MUTATE_EDIT_VIEW_LAYOUT: "Admin/CM/pages/EditView/mutate-edit-view-layout",
2513
- /**
2514
- * Hook that allows to mutate the CM's single types links pre-set filters
2515
- * @constant
2516
- * @type {string}
2517
- */
2518
- MUTATE_SINGLE_TYPES_LINKS: "Admin/CM/pages/App/mutate-single-types-links"
2519
- };
2520
- const contentTypesApi = contentManagerApi.injectEndpoints({
2521
- endpoints: (builder) => ({
2522
- getContentTypeConfiguration: builder.query({
2523
- query: (uid) => ({
2524
- url: `/content-manager/content-types/${uid}/configuration`,
2525
- method: "GET"
2526
- }),
2527
- transformResponse: (response) => response.data,
2528
- providesTags: (_result, _error, uid) => [
2529
- { type: "ContentTypesConfiguration", id: uid },
2530
- { type: "ContentTypeSettings", id: "LIST" }
2531
- ]
2532
- }),
2533
- getAllContentTypeSettings: builder.query({
2534
- query: () => "/content-manager/content-types-settings",
2535
- transformResponse: (response) => response.data,
2536
- providesTags: [{ type: "ContentTypeSettings", id: "LIST" }]
2537
- }),
2538
- updateContentTypeConfiguration: builder.mutation({
2539
- query: ({ uid, ...body }) => ({
2540
- url: `/content-manager/content-types/${uid}/configuration`,
2541
- method: "PUT",
2542
- data: body
2543
- }),
2544
- transformResponse: (response) => response.data,
2545
- invalidatesTags: (_result, _error, { uid }) => [
2546
- { type: "ContentTypesConfiguration", id: uid },
2547
- { type: "ContentTypeSettings", id: "LIST" },
2548
- // Is this necessary?
2549
- { type: "InitialData" }
2550
- ]
2551
- })
2552
- })
2553
- });
2554
- const {
2555
- useGetContentTypeConfigurationQuery,
2556
- useGetAllContentTypeSettingsQuery,
2557
- useUpdateContentTypeConfigurationMutation
2558
- } = contentTypesApi;
2559
- const checkIfAttributeIsDisplayable = (attribute) => {
2560
- const { type } = attribute;
2561
- if (type === "relation") {
2562
- return !attribute.relation.toLowerCase().includes("morph");
2563
- }
2564
- return !["json", "dynamiczone", "richtext", "password", "blocks"].includes(type) && !!type;
2565
- };
2566
- const getMainField = (attribute, mainFieldName, { schemas, components }) => {
2567
- if (!mainFieldName) {
2568
- return void 0;
2569
- }
2570
- const mainFieldType = attribute.type === "component" ? components[attribute.component].attributes[mainFieldName].type : (
2571
- // @ts-expect-error – `targetModel` does exist on the attribute for a relation.
2572
- schemas.find((schema) => schema.uid === attribute.targetModel)?.attributes[mainFieldName].type
2573
- );
2574
- return {
2575
- name: mainFieldName,
2576
- type: mainFieldType ?? "string"
2577
- };
2578
- };
2579
- const DEFAULT_SETTINGS = {
2580
- bulkable: false,
2581
- filterable: false,
2582
- searchable: false,
2583
- pagination: false,
2584
- defaultSortBy: "",
2585
- defaultSortOrder: "asc",
2586
- mainField: "id",
2587
- pageSize: 10
2588
- };
2589
- const useDocumentLayout = (model) => {
2590
- const { schema, components } = useDocument({ model, collectionType: "" }, { skip: true });
2591
- const [{ query }] = useQueryParams();
2592
- const runHookWaterfall = useStrapiApp("useDocumentLayout", (state) => state.runHookWaterfall);
2593
- const { toggleNotification } = useNotification();
2594
- const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();
2595
- const { isLoading: isLoadingSchemas, schemas } = useContentTypeSchema();
2596
- const {
2597
- data,
2598
- isLoading: isLoadingConfigs,
2599
- error,
2600
- isFetching: isFetchingConfigs
2601
- } = useGetContentTypeConfigurationQuery(model);
2602
- const isLoading = isLoadingSchemas || isFetchingConfigs || isLoadingConfigs;
2603
- React.useEffect(() => {
2604
- if (error) {
2605
- toggleNotification({
2606
- type: "danger",
2607
- message: formatAPIError(error)
2608
- });
2609
- }
2610
- }, [error, formatAPIError, toggleNotification]);
2611
- const editLayout = React.useMemo(
2612
- () => data && !isLoading ? formatEditLayout(data, { schemas, schema, components }) : {
2613
- layout: [],
2614
- components: {},
2615
- metadatas: {},
2616
- options: {},
2617
- settings: DEFAULT_SETTINGS
2618
- },
2619
- [data, isLoading, schemas, schema, components]
2620
- );
2621
- const listLayout = React.useMemo(() => {
2622
- return data && !isLoading ? formatListLayout(data, { schemas, schema, components }) : {
2623
- layout: [],
2624
- metadatas: {},
2625
- options: {},
2626
- settings: DEFAULT_SETTINGS
2627
- };
2628
- }, [data, isLoading, schemas, schema, components]);
2629
- const { layout: edit } = React.useMemo(
2630
- () => runHookWaterfall(HOOKS.MUTATE_EDIT_VIEW_LAYOUT, {
2631
- layout: editLayout,
2632
- query
2633
- }),
2634
- [editLayout, query, runHookWaterfall]
2635
- );
2636
- return {
2637
- error,
2638
- isLoading,
2639
- edit,
2640
- list: listLayout
2641
- };
2642
- };
2643
- const useDocLayout = () => {
2644
- const { model } = useDoc();
2645
- return useDocumentLayout(model);
2646
- };
2647
- const formatEditLayout = (data, {
2648
- schemas,
2649
- schema,
2650
- components
2651
- }) => {
2652
- let currentPanelIndex = 0;
2653
- const panelledEditAttributes = convertEditLayoutToFieldLayouts(
2654
- data.contentType.layouts.edit,
2655
- schema?.attributes,
2656
- data.contentType.metadatas,
2657
- { configurations: data.components, schemas: components },
2658
- schemas
2659
- ).reduce((panels, row) => {
2660
- if (row.some((field) => field.type === "dynamiczone")) {
2661
- panels.push([row]);
2662
- currentPanelIndex += 2;
2663
- } else {
2664
- if (!panels[currentPanelIndex]) {
2665
- panels.push([]);
2666
- }
2667
- panels[currentPanelIndex].push(row);
2668
- }
2669
- return panels;
2670
- }, []);
2671
- const componentEditAttributes = Object.entries(data.components).reduce(
2672
- (acc, [uid, configuration]) => {
2673
- acc[uid] = {
2674
- layout: convertEditLayoutToFieldLayouts(
2675
- configuration.layouts.edit,
2676
- components[uid].attributes,
2677
- configuration.metadatas
2678
- ),
2679
- settings: {
2680
- ...configuration.settings,
2681
- icon: components[uid].info.icon,
2682
- displayName: components[uid].info.displayName
2683
- }
2684
- };
2685
- return acc;
2686
- },
2687
- {}
2688
- );
2689
- const editMetadatas = Object.entries(data.contentType.metadatas).reduce(
2690
- (acc, [attribute, metadata]) => {
2691
- return {
2692
- ...acc,
2693
- [attribute]: metadata.edit
2694
- };
2695
- },
2696
- {}
2697
- );
2698
- return {
2699
- layout: panelledEditAttributes,
2700
- components: componentEditAttributes,
2701
- metadatas: editMetadatas,
2702
- settings: {
2703
- ...data.contentType.settings,
2704
- displayName: schema?.info.displayName
2705
- },
2706
- options: {
2707
- ...schema?.options,
2708
- ...schema?.pluginOptions,
2709
- ...data.contentType.options
2710
- }
2711
- };
2712
- };
2713
- const convertEditLayoutToFieldLayouts = (rows, attributes = {}, metadatas, components, schemas = []) => {
2714
- return rows.map(
2715
- (row) => row.map((field) => {
2716
- const attribute = attributes[field.name];
2717
- if (!attribute) {
2718
- return null;
2719
- }
2720
- const { edit: metadata } = metadatas[field.name];
2721
- const settings = attribute.type === "component" && components ? components.configurations[attribute.component].settings : {};
2722
- return {
2723
- attribute,
2724
- disabled: !metadata.editable,
2725
- hint: metadata.description,
2726
- label: metadata.label ?? "",
2727
- name: field.name,
2728
- // @ts-expect-error – mainField does exist on the metadata for a relation.
2729
- mainField: getMainField(attribute, metadata.mainField || settings.mainField, {
2730
- schemas,
2731
- components: components?.schemas ?? {}
2732
- }),
2733
- placeholder: metadata.placeholder ?? "",
2734
- required: attribute.required ?? false,
2735
- size: field.size,
2736
- unique: "unique" in attribute ? attribute.unique : false,
2737
- visible: metadata.visible ?? true,
2738
- type: attribute.type
2739
- };
2740
- }).filter((field) => field !== null)
2741
- );
2742
- };
2743
- const formatListLayout = (data, {
2744
- schemas,
2745
- schema,
2746
- components
2747
- }) => {
2748
- const listMetadatas = Object.entries(data.contentType.metadatas).reduce(
2749
- (acc, [attribute, metadata]) => {
2750
- return {
2751
- ...acc,
2752
- [attribute]: metadata.list
2753
- };
2754
- },
2755
- {}
2756
- );
2757
- const listAttributes = convertListLayoutToFieldLayouts(
2758
- data.contentType.layouts.list,
2759
- schema?.attributes,
2760
- listMetadatas,
2761
- { configurations: data.components, schemas: components },
2762
- schemas
2763
- );
2764
- return {
2765
- layout: listAttributes,
2766
- settings: { ...data.contentType.settings, displayName: schema?.info.displayName },
2767
- metadatas: listMetadatas,
2768
- options: {
2769
- ...schema?.options,
2770
- ...schema?.pluginOptions,
2771
- ...data.contentType.options
2772
- }
2773
- };
2774
- };
2775
- const convertListLayoutToFieldLayouts = (columns, attributes = {}, metadatas, components, schemas = []) => {
2776
- return columns.map((name) => {
2777
- const attribute = attributes[name];
2778
- if (!attribute) {
2779
- return null;
2780
- }
2781
- const metadata = metadatas[name];
2782
- const settings = attribute.type === "component" && components ? components.configurations[attribute.component].settings : {};
2783
- return {
2784
- attribute,
2785
- label: metadata.label ?? "",
2786
- mainField: getMainField(attribute, metadata.mainField || settings.mainField, {
2787
- schemas,
2788
- components: components?.schemas ?? {}
2789
- }),
2790
- name,
2791
- searchable: metadata.searchable ?? true,
2792
- sortable: metadata.sortable ?? true
2793
- };
2794
- }).filter((field) => field !== null);
2795
- };
2796
- const ConfirmBulkActionDialog = ({
2797
- onToggleDialog,
2798
- isOpen = false,
2799
- dialogBody,
2800
- endAction
2801
- }) => {
2802
- const { formatMessage } = useIntl();
2803
- return /* @__PURE__ */ jsxs(
2804
- Dialog,
2805
- {
2806
- onClose: onToggleDialog,
2807
- title: formatMessage({
2808
- id: "app.components.ConfirmDialog.title",
2809
- defaultMessage: "Confirmation"
2810
- }),
2811
- isOpen,
2812
- children: [
2813
- /* @__PURE__ */ jsx(DialogBody, { icon: /* @__PURE__ */ jsx(WarningCircle, {}), children: /* @__PURE__ */ jsx(Flex, { direction: "column", alignItems: "stretch", gap: 2, children: dialogBody }) }),
2814
- /* @__PURE__ */ jsx(
2815
- DialogFooter,
2816
- {
2817
- startAction: /* @__PURE__ */ jsx(Button, { onClick: onToggleDialog, variant: "tertiary", children: formatMessage({
2818
- id: "app.components.Button.cancel",
2819
- defaultMessage: "Cancel"
2820
- }) }),
2821
- endAction
2822
- }
2823
- )
2824
- ]
2825
- }
2826
- );
2827
- };
2828
- const BoldChunk$1 = (chunks) => /* @__PURE__ */ jsx(Typography, { fontWeight: "bold", children: chunks });
2829
- const ConfirmDialogPublishAll = ({
2830
- isOpen,
2831
- onToggleDialog,
2832
- isConfirmButtonLoading = false,
2833
- onConfirm
2834
- }) => {
2835
- const { formatMessage } = useIntl();
2836
- const selectedEntries = useTable("ConfirmDialogPublishAll", (state) => state.selectedRows);
2837
- const { toggleNotification } = useNotification();
2838
- const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler(getTranslation);
2839
- const { model, schema } = useDoc();
2840
- const [{ query }] = useQueryParams();
2841
- const {
2842
- data: countDraftRelations = 0,
2843
- isLoading,
2844
- error
2845
- } = useGetManyDraftRelationCountQuery(
2846
- {
2847
- model,
2848
- documentIds: selectedEntries.map((entry) => entry.documentId),
2849
- locale: query?.plugins?.i18n?.locale
2850
- },
2851
- {
2852
- skip: selectedEntries.length === 0
2853
- }
2854
- );
2855
- React.useEffect(() => {
2856
- if (error) {
2857
- toggleNotification({ type: "danger", message: formatAPIError(error) });
2858
- }
2859
- }, [error, formatAPIError, toggleNotification]);
2860
- if (error) {
2861
- return null;
2862
- }
2863
- return /* @__PURE__ */ jsx(
2864
- ConfirmBulkActionDialog,
2865
- {
2866
- isOpen: isOpen && !isLoading,
2867
- onToggleDialog,
2868
- dialogBody: /* @__PURE__ */ jsxs(Fragment, { children: [
2869
- /* @__PURE__ */ jsxs(Typography, { id: "confirm-description", textAlign: "center", children: [
2870
- countDraftRelations > 0 && formatMessage(
2871
- {
2872
- id: getTranslation(`popUpwarning.warning.bulk-has-draft-relations.message`),
2873
- defaultMessage: "<b>{count} {count, plural, one { relation } other { relations } } out of {entities} { entities, plural, one { entry } other { entries } } {count, plural, one { is } other { are } }</b> not published yet and might lead to unexpected behavior. "
2874
- },
2875
- {
2876
- b: BoldChunk$1,
2877
- count: countDraftRelations,
2878
- entities: selectedEntries.length
2879
- }
2880
- ),
2881
- formatMessage({
2882
- id: getTranslation("popUpWarning.bodyMessage.contentType.publish.all"),
2883
- defaultMessage: "Are you sure you want to publish these entries?"
2884
- })
2885
- ] }),
2886
- schema?.pluginOptions && "i18n" in schema.pluginOptions && schema?.pluginOptions.i18n && /* @__PURE__ */ jsx(Typography, { textColor: "danger500", textAlign: "center", children: formatMessage(
2887
- {
2888
- id: getTranslation("Settings.list.actions.publishAdditionalInfos"),
2889
- defaultMessage: "This will publish the active locale versions <em>(from Internationalization)</em>"
2890
- },
2891
- {
2892
- em: Emphasis
2893
- }
2894
- ) })
2895
- ] }),
2896
- endAction: /* @__PURE__ */ jsx(
2897
- Button,
2898
- {
2899
- onClick: onConfirm,
2900
- variant: "secondary",
2901
- startIcon: /* @__PURE__ */ jsx(Check, {}),
2902
- loading: isConfirmButtonLoading,
2903
- children: formatMessage({
2904
- id: "app.utils.publish",
2905
- defaultMessage: "Publish"
2906
- })
2907
- }
2908
- )
2909
- }
2910
- );
2911
- };
2912
- const TypographyMaxWidth = styled(Typography)`
2913
- max-width: 300px;
2914
- `;
2915
- const formatErrorMessages = (errors, parentKey, formatMessage) => {
2916
- const messages = [];
2917
- Object.entries(errors).forEach(([key, value]) => {
2918
- const currentKey = parentKey ? `${parentKey}.${key}` : key;
2919
- if (typeof value === "object" && value !== null && !Array.isArray(value)) {
2920
- if ("id" in value && "defaultMessage" in value) {
2921
- messages.push(
2922
- formatMessage(
2923
- {
2924
- id: `${value.id}.withField`,
2925
- defaultMessage: value.defaultMessage
2926
- },
2927
- { field: currentKey }
2928
- )
2929
- );
2930
- } else {
2931
- messages.push(...formatErrorMessages(value, currentKey, formatMessage));
2932
- }
2933
- }
2934
- });
2935
- return messages;
2936
- };
2937
- const EntryValidationText = ({
2938
- validationErrors,
2939
- isPublished = false
2940
- }) => {
2941
- const { formatMessage } = useIntl();
2942
- if (validationErrors) {
2943
- const validationErrorsMessages = formatErrorMessages(validationErrors, "", formatMessage).join(
2944
- " "
2945
- );
2946
- return /* @__PURE__ */ jsxs(Flex, { gap: 2, children: [
2947
- /* @__PURE__ */ jsx(CrossCircle, { fill: "danger600" }),
2948
- /* @__PURE__ */ jsx(Tooltip, { description: validationErrorsMessages, children: /* @__PURE__ */ jsx(TypographyMaxWidth, { textColor: "danger600", variant: "omega", fontWeight: "semiBold", ellipsis: true, children: validationErrorsMessages }) })
2949
- ] });
2950
- }
2951
- if (isPublished) {
2952
- return /* @__PURE__ */ jsxs(Flex, { gap: 2, children: [
2953
- /* @__PURE__ */ jsx(CheckCircle, { fill: "success600" }),
2954
- /* @__PURE__ */ jsx(Typography, { textColor: "success600", fontWeight: "bold", children: formatMessage({
2955
- id: "content-manager.bulk-publish.already-published",
2956
- defaultMessage: "Already Published"
2957
- }) })
2958
- ] });
2959
- }
2960
- return /* @__PURE__ */ jsxs(Flex, { gap: 2, children: [
2961
- /* @__PURE__ */ jsx(CheckCircle, { fill: "success600" }),
2962
- /* @__PURE__ */ jsx(Typography, { children: formatMessage({
2963
- id: "app.utils.ready-to-publish",
2964
- defaultMessage: "Ready to publish"
2965
- }) })
2966
- ] });
2967
- };
2968
- const TABLE_HEADERS = [
2969
- { name: "id", label: "id" },
2970
- { name: "name", label: "name" },
2971
- { name: "status", label: "status" },
2972
- { name: "publicationStatus", label: "Publication status" }
2973
- ];
2974
- const SelectedEntriesTableContent = ({
2975
- isPublishing,
2976
- rowsToDisplay = [],
2977
- entriesToPublish = [],
2978
- validationErrors = {}
2979
- }) => {
2980
- const { pathname } = useLocation();
2981
- const { formatMessage } = useIntl();
2982
- const {
2983
- list: {
2984
- settings: { mainField }
2985
- }
2986
- } = useDocLayout();
2987
- const shouldDisplayMainField = mainField != null && mainField !== "id";
2988
- return /* @__PURE__ */ jsxs(Table.Content, { children: [
2989
- /* @__PURE__ */ jsxs(Table.Head, { children: [
2990
- /* @__PURE__ */ jsx(Table.HeaderCheckboxCell, {}),
2991
- TABLE_HEADERS.filter((head) => head.name !== "name" || shouldDisplayMainField).map(
2992
- (head) => /* @__PURE__ */ jsx(Table.HeaderCell, { ...head }, head.name)
2993
- )
2994
- ] }),
2995
- /* @__PURE__ */ jsx(Table.Loading, {}),
2996
- /* @__PURE__ */ jsx(Table.Body, { children: rowsToDisplay.map((row, index2) => /* @__PURE__ */ jsxs(Table.Row, { children: [
2997
- /* @__PURE__ */ jsx(Table.CheckboxCell, { id: row.id }),
2998
- /* @__PURE__ */ jsx(Table.Cell, { children: /* @__PURE__ */ jsx(Typography, { children: row.id }) }),
2999
- shouldDisplayMainField && /* @__PURE__ */ jsx(Table.Cell, { children: /* @__PURE__ */ jsx(Typography, { children: row[mainField] }) }),
3000
- /* @__PURE__ */ jsx(Table.Cell, { children: /* @__PURE__ */ jsx(DocumentStatus, { status: row.status, maxWidth: "min-content" }) }),
3001
- /* @__PURE__ */ jsx(Table.Cell, { children: isPublishing && entriesToPublish.includes(row.documentId) ? /* @__PURE__ */ jsxs(Flex, { gap: 2, children: [
3002
- /* @__PURE__ */ jsx(Typography, { children: formatMessage({
3003
- id: "content-manager.success.record.publishing",
3004
- defaultMessage: "Publishing..."
3005
- }) }),
3006
- /* @__PURE__ */ jsx(Loader, { small: true })
3007
- ] }) : /* @__PURE__ */ jsx(
3008
- EntryValidationText,
3009
- {
3010
- validationErrors: validationErrors[row.documentId],
3011
- isPublished: row.status === "published"
3012
- }
3013
- ) }),
3014
- /* @__PURE__ */ jsx(Table.Cell, { children: /* @__PURE__ */ jsx(
3015
- IconButton,
3016
- {
3017
- tag: Link,
3018
- to: {
3019
- pathname: `${pathname}/${row.documentId}`,
3020
- search: row.locale && `?plugins[i18n][locale]=${row.locale}`
3021
- },
3022
- state: { from: pathname },
3023
- label: formatMessage(
3024
- { id: "app.component.HelperPluginTable.edit", defaultMessage: "Edit {target}" },
3025
- {
3026
- target: formatMessage(
3027
- {
3028
- id: "content-manager.components.ListViewHelperPluginTable.row-line",
3029
- defaultMessage: "item line {number}"
3030
- },
3031
- { number: index2 + 1 }
3032
- )
3033
- }
3034
- ),
3035
- target: "_blank",
3036
- marginLeft: "auto",
3037
- children: /* @__PURE__ */ jsx(Pencil, {})
3038
- }
3039
- ) })
3040
- ] }, row.id)) })
3041
- ] });
3042
- };
3043
- const BoldChunk = (chunks) => /* @__PURE__ */ jsx(Typography, { fontWeight: "bold", children: chunks });
3044
- const SelectedEntriesModalContent = ({
3045
- listViewSelectedEntries,
3046
- toggleModal,
3047
- setListViewSelectedDocuments,
3048
- model
3049
- }) => {
3050
- const { formatMessage } = useIntl();
3051
- const { schema, components } = useContentTypeSchema(model);
3052
- const documentIds = listViewSelectedEntries.map(({ documentId }) => documentId);
3053
- const [{ query }] = useQueryParams();
3054
- const params = React.useMemo(() => buildValidParams(query), [query]);
3055
- const { data, isLoading, isFetching, refetch } = useGetAllDocumentsQuery(
3056
- {
3057
- model,
3058
- params: {
3059
- page: "1",
3060
- pageSize: documentIds.length.toString(),
3061
- sort: query.sort,
3062
- filters: {
3063
- documentId: {
3064
- $in: documentIds
3065
- }
3066
- },
3067
- locale: query.plugins?.i18n?.locale
3068
- }
3069
- },
3070
- {
3071
- selectFromResult: ({ data: data2, ...restRes }) => ({ data: data2?.results ?? [], ...restRes })
3072
- }
3073
- );
3074
- const { rows, validationErrors } = React.useMemo(() => {
3075
- if (data.length > 0 && schema) {
3076
- const validate = createYupSchema(schema.attributes, components);
3077
- const validationErrors2 = {};
3078
- const rows2 = data.map((entry) => {
3079
- try {
3080
- validate.validateSync(entry, { abortEarly: false });
3081
- return entry;
3082
- } catch (e) {
3083
- if (e instanceof ValidationError) {
3084
- validationErrors2[entry.documentId] = getYupValidationErrors(e);
3085
- }
3086
- return entry;
3087
- }
3088
- });
3089
- return { rows: rows2, validationErrors: validationErrors2 };
3090
- }
3091
- return {
3092
- rows: [],
3093
- validationErrors: {}
3094
- };
3095
- }, [components, data, schema]);
3096
- const [publishedCount, setPublishedCount] = React.useState(0);
3097
- const [isDialogOpen, setIsDialogOpen] = React.useState(false);
3098
- const { publishMany: bulkPublishAction } = useDocumentActions();
3099
- const [, { isLoading: isSubmittingForm }] = usePublishManyDocumentsMutation();
3100
- const selectedRows = useTable("publishAction", (state) => state.selectedRows);
3101
- const selectedEntries = rows.filter(
3102
- (entry) => selectedRows.some((selectedEntry) => selectedEntry.documentId === entry.documentId)
3103
- );
3104
- const entriesToPublish = selectedEntries.filter((entry) => !validationErrors[entry.documentId]).map((entry) => entry.documentId);
3105
- const selectedEntriesWithErrorsCount = selectedEntries.filter(
3106
- ({ documentId }) => validationErrors[documentId]
3107
- ).length;
3108
- const selectedEntriesPublished = selectedEntries.filter(
3109
- ({ status }) => status === "published"
3110
- ).length;
3111
- const selectedEntriesWithNoErrorsCount = selectedEntries.length - selectedEntriesWithErrorsCount - selectedEntriesPublished;
3112
- const toggleDialog = () => setIsDialogOpen((prev) => !prev);
3113
- const handleConfirmBulkPublish = async () => {
3114
- toggleDialog();
3115
- const res = await bulkPublishAction({ model, documentIds: entriesToPublish, params });
3116
- if (!("error" in res)) {
3117
- setPublishedCount(res.count);
3118
- const unpublishedEntries = rows.filter((row) => {
3119
- return !entriesToPublish.includes(row.documentId);
3120
- });
3121
- setListViewSelectedDocuments(unpublishedEntries);
3122
- }
3123
- };
3124
- const getFormattedCountMessage = () => {
3125
- if (publishedCount) {
3126
- return formatMessage(
3127
- {
3128
- id: getTranslation("containers.list.selectedEntriesModal.publishedCount"),
3129
- defaultMessage: "<b>{publishedCount}</b> {publishedCount, plural, =0 {entries} one {entry} other {entries}} published. <b>{withErrorsCount}</b> {withErrorsCount, plural, =0 {entries} one {entry} other {entries}} waiting for action."
3130
- },
3131
- {
3132
- publishedCount,
3133
- withErrorsCount: selectedEntriesWithErrorsCount,
3134
- b: BoldChunk
3135
- }
3136
- );
3137
- }
3138
- return formatMessage(
3139
- {
3140
- id: getTranslation("containers.list.selectedEntriesModal.selectedCount"),
3141
- defaultMessage: "<b>{alreadyPublishedCount}</b> {alreadyPublishedCount, plural, =0 {entries} one {entry} other {entries}} already published. <b>{readyToPublishCount}</b> {readyToPublishCount, plural, =0 {entries} one {entry} other {entries}} ready to publish. <b>{withErrorsCount}</b> {withErrorsCount, plural, =0 {entries} one {entry} other {entries}} waiting for action."
3142
- },
3143
- {
3144
- readyToPublishCount: selectedEntriesWithNoErrorsCount,
3145
- withErrorsCount: selectedEntriesWithErrorsCount,
3146
- alreadyPublishedCount: selectedEntriesPublished,
3147
- b: BoldChunk
3148
- }
3149
- );
3150
- };
3151
- return /* @__PURE__ */ jsxs(Fragment, { children: [
3152
- /* @__PURE__ */ jsxs(ModalBody, { children: [
3153
- /* @__PURE__ */ jsx(Typography, { children: getFormattedCountMessage() }),
3154
- /* @__PURE__ */ jsx(Box, { marginTop: 5, children: /* @__PURE__ */ jsx(
3155
- SelectedEntriesTableContent,
3156
- {
3157
- isPublishing: isSubmittingForm,
3158
- rowsToDisplay: rows,
3159
- entriesToPublish,
3160
- validationErrors
3161
- }
3162
- ) })
3163
- ] }),
3164
- /* @__PURE__ */ jsx(
3165
- ModalFooter,
3166
- {
3167
- startActions: /* @__PURE__ */ jsx(Button, { onClick: toggleModal, variant: "tertiary", children: formatMessage({
3168
- id: "app.components.Button.cancel",
3169
- defaultMessage: "Cancel"
3170
- }) }),
3171
- endActions: /* @__PURE__ */ jsxs(Flex, { gap: 2, children: [
3172
- /* @__PURE__ */ jsx(Button, { onClick: refetch, variant: "tertiary", loading: isFetching, children: formatMessage({ id: "app.utils.refresh", defaultMessage: "Refresh" }) }),
3173
- /* @__PURE__ */ jsx(
3174
- Button,
3175
- {
3176
- onClick: toggleDialog,
3177
- disabled: selectedEntries.length === 0 || selectedEntries.length === selectedEntriesWithErrorsCount || selectedEntriesPublished === selectedEntries.length || isLoading,
3178
- loading: isSubmittingForm,
3179
- children: formatMessage({ id: "app.utils.publish", defaultMessage: "Publish" })
3180
- }
3181
- )
3182
- ] })
3183
- }
3184
- ),
3185
- /* @__PURE__ */ jsx(
3186
- ConfirmDialogPublishAll,
3187
- {
3188
- isOpen: isDialogOpen,
3189
- onToggleDialog: toggleDialog,
3190
- isConfirmButtonLoading: isSubmittingForm,
3191
- onConfirm: handleConfirmBulkPublish
3192
- }
3193
- )
3194
- ] });
3195
- };
3196
- const PublishAction = ({ documents, model }) => {
3197
- const { formatMessage } = useIntl();
3198
- const hasPublishPermission = useDocumentRBAC("unpublishAction", (state) => state.canPublish);
3199
- const showPublishButton = hasPublishPermission && documents.some(({ status }) => status !== "published");
3200
- const setListViewSelectedDocuments = useTable("publishAction", (state) => state.selectRow);
3201
- const refetchList = () => {
3202
- contentManagerApi.util.invalidateTags([{ type: "Document", id: `${model}_LIST` }]);
3203
- };
3204
- if (!showPublishButton)
3205
- return null;
3206
- return {
3207
- actionType: "publish",
3208
- variant: "tertiary",
3209
- label: formatMessage({ id: "app.utils.publish", defaultMessage: "Publish" }),
3210
- dialog: {
3211
- type: "modal",
3212
- title: formatMessage({
3213
- id: getTranslation("containers.ListPage.selectedEntriesModal.title"),
3214
- defaultMessage: "Publish entries"
3215
- }),
3216
- content: ({ onClose }) => {
3217
- return /* @__PURE__ */ jsx(Table.Root, { rows: documents, defaultSelectedRows: documents, headers: TABLE_HEADERS, children: /* @__PURE__ */ jsx(
3218
- SelectedEntriesModalContent,
3219
- {
3220
- listViewSelectedEntries: documents,
3221
- toggleModal: () => {
3222
- onClose();
3223
- refetchList();
3224
- },
3225
- setListViewSelectedDocuments,
3226
- model
3227
- }
3228
- ) });
3229
- },
3230
- onClose: () => {
3231
- refetchList();
3232
- }
3233
- }
3234
- };
3235
- };
3236
- const BulkActionsRenderer = () => {
3237
- const plugins = useStrapiApp("BulkActionsRenderer", (state) => state.plugins);
3238
- const { model, collectionType } = useDoc();
3239
- const { selectedRows } = useTable("BulkActionsRenderer", (state) => state);
3240
- return /* @__PURE__ */ jsx(Flex, { gap: 2, children: /* @__PURE__ */ jsx(
3241
- DescriptionComponentRenderer,
3242
- {
3243
- props: {
3244
- model,
3245
- collectionType,
3246
- documents: selectedRows
3247
- },
3248
- descriptions: plugins["content-manager"].apis.getBulkActions(),
3249
- children: (actions2) => actions2.map((action) => /* @__PURE__ */ jsx(BulkActionAction, { ...action }, action.id))
3250
- }
3251
- ) });
3252
- };
3253
- const BulkActionAction = (action) => {
3254
- const [dialogId, setDialogId] = React.useState(null);
3255
- const { toggleNotification } = useNotification();
3256
- const handleClick = (action2) => (e) => {
3257
- const { onClick, dialog, id } = action2;
3258
- if (onClick) {
3259
- onClick(e);
3260
- }
3261
- if (dialog) {
3262
- switch (dialog.type) {
3263
- case "notification":
3264
- toggleNotification({
3265
- title: dialog.title,
3266
- message: dialog.content,
3267
- type: dialog.status,
3268
- timeout: dialog.timeout,
3269
- onClose: dialog.onClose
3270
- });
3271
- break;
3272
- case "dialog":
3273
- case "modal": {
3274
- e.preventDefault();
3275
- setDialogId(id);
3276
- }
3277
- }
3278
- }
3279
- };
3280
- const handleClose = () => {
3281
- setDialogId(null);
3282
- if (action.dialog?.type === "modal" && action.dialog?.onClose) {
3283
- action.dialog.onClose();
3284
- }
3285
- };
3286
- return /* @__PURE__ */ jsxs(Fragment, { children: [
3287
- /* @__PURE__ */ jsx(
3288
- Button,
3289
- {
3290
- disabled: action.disabled,
3291
- startIcon: action.icon,
3292
- variant: action.variant,
3293
- onClick: handleClick(action),
3294
- children: action.label
3295
- }
3296
- ),
3297
- action.dialog?.type === "dialog" ? /* @__PURE__ */ jsx(
3298
- BulkActionConfirmDialog,
3299
- {
3300
- ...action.dialog,
3301
- variant: action.variant,
3302
- isOpen: dialogId === action.id,
3303
- onClose: handleClose
3304
- }
3305
- ) : null,
3306
- action.dialog?.type === "modal" ? /* @__PURE__ */ jsx(
3307
- BulkActionModal,
3308
- {
3309
- ...action.dialog,
3310
- onModalClose: handleClose,
3311
- isOpen: dialogId === action.id
3312
- }
3313
- ) : null
3314
- ] });
3315
- };
3316
- const BulkActionConfirmDialog = ({
3317
- onClose,
3318
- onCancel,
3319
- onConfirm,
3320
- title,
3321
- content,
3322
- confirmButton,
3323
- isOpen,
3324
- variant = "secondary"
3325
- }) => {
3326
- const { formatMessage } = useIntl();
3327
- const handleClose = async () => {
3328
- if (onCancel) {
3329
- await onCancel();
3330
- }
3331
- onClose();
3332
- };
3333
- const handleConfirm = async () => {
3334
- if (onConfirm) {
3335
- await onConfirm();
3336
- }
3337
- onClose();
3338
- };
3339
- return /* @__PURE__ */ jsxs(Dialog, { isOpen, title, onClose: handleClose, children: [
3340
- /* @__PURE__ */ jsx(DialogBody, { icon: /* @__PURE__ */ jsx(WarningCircle, {}), children: content }),
3341
- /* @__PURE__ */ jsx(
3342
- DialogFooter,
3343
- {
3344
- startAction: /* @__PURE__ */ jsx(Button, { onClick: handleClose, variant: "tertiary", children: formatMessage({
3345
- id: "app.components.Button.cancel",
3346
- defaultMessage: "Cancel"
3347
- }) }),
3348
- endAction: /* @__PURE__ */ jsx(
3349
- Button,
3350
- {
3351
- onClick: handleConfirm,
3352
- variant: variant === "danger-light" ? variant : "secondary",
3353
- startIcon: variant === "danger-light" ? /* @__PURE__ */ jsx(Trash, {}) : /* @__PURE__ */ jsx(Check, {}),
3354
- children: confirmButton ? confirmButton : formatMessage({
3355
- id: "app.components.Button.confirm",
3356
- defaultMessage: "Confirm"
3357
- })
3358
- }
3359
- )
3360
- }
3361
- )
3362
- ] });
3363
- };
3364
- const BulkActionModal = ({
3365
- isOpen,
3366
- title,
3367
- onClose,
3368
- content: Content,
3369
- onModalClose
3370
- }) => {
3371
- const id = React.useId();
3372
- if (!isOpen) {
3373
- return null;
3374
- }
3375
- const handleClose = () => {
3376
- if (onClose) {
3377
- onClose();
3378
- }
3379
- onModalClose();
3380
- };
3381
- return /* @__PURE__ */ jsxs(ModalLayout, { borderRadius: "4px", overflow: "hidden", onClose: handleClose, labelledBy: id, children: [
3382
- /* @__PURE__ */ jsx(ModalHeader, { children: /* @__PURE__ */ jsx(Typography, { fontWeight: "bold", textColor: "neutral800", tag: "h2", id, children: title }) }),
3383
- /* @__PURE__ */ jsx(Content, { onClose: handleClose })
3384
- ] });
3385
- };
3386
- const DeleteAction = ({ documents, model }) => {
3387
- const { formatMessage } = useIntl();
3388
- const { schema: contentType } = useDoc();
3389
- const selectRow = useTable("DeleteAction", (state) => state.selectRow);
3390
- const hasI18nEnabled = Boolean(contentType?.pluginOptions?.i18n);
3391
- const [{ query }] = useQueryParams();
3392
- const params = React.useMemo(() => buildValidParams(query), [query]);
3393
- const hasDeletePermission = useDocumentRBAC("deleteAction", (state) => state.canDelete);
3394
- const { deleteMany: bulkDeleteAction } = useDocumentActions();
3395
- const documentIds = documents.map(({ documentId }) => documentId);
3396
- const handleConfirmBulkDelete = async () => {
3397
- const res = await bulkDeleteAction({
3398
- documentIds,
3399
- model,
3400
- params
3401
- });
3402
- if (!("error" in res)) {
3403
- selectRow([]);
3404
- }
3405
- };
3406
- if (!hasDeletePermission)
3407
- return null;
3408
- return {
3409
- variant: "danger-light",
3410
- label: formatMessage({ id: "global.delete", defaultMessage: "Delete" }),
3411
- dialog: {
3412
- type: "dialog",
3413
- title: formatMessage({
3414
- id: "app.components.ConfirmDialog.title",
3415
- defaultMessage: "Confirmation"
3416
- }),
3417
- content: /* @__PURE__ */ jsxs(Flex, { direction: "column", alignItems: "stretch", gap: 2, children: [
3418
- /* @__PURE__ */ jsx(Typography, { id: "confirm-description", textAlign: "center", children: formatMessage({
3419
- id: "popUpWarning.bodyMessage.contentType.delete.all",
3420
- defaultMessage: "Are you sure you want to delete these entries?"
3421
- }) }),
3422
- hasI18nEnabled && /* @__PURE__ */ jsx(Box, { textAlign: "center", padding: 3, children: /* @__PURE__ */ jsx(Typography, { textColor: "danger500", children: formatMessage(
3423
- {
3424
- id: getTranslation("Settings.list.actions.deleteAdditionalInfos"),
3425
- defaultMessage: "This will delete the active locale versions <em>(from Internationalization)</em>"
3426
- },
3427
- {
3428
- em: Emphasis
3429
- }
3430
- ) }) })
3431
- ] }),
3432
- onConfirm: handleConfirmBulkDelete
3433
- }
3434
- };
3435
- };
3436
- DeleteAction.type = "delete";
3437
- const UnpublishAction = ({ documents, model }) => {
3438
- const { formatMessage } = useIntl();
3439
- const { schema } = useDoc();
3440
- const selectRow = useTable("UnpublishAction", (state) => state.selectRow);
3441
- const hasPublishPermission = useDocumentRBAC("unpublishAction", (state) => state.canPublish);
3442
- const hasI18nEnabled = Boolean(schema?.pluginOptions?.i18n);
3443
- const hasDraftAndPublishEnabled = Boolean(schema?.options?.draftAndPublish);
3444
- const { unpublishMany: bulkUnpublishAction } = useDocumentActions();
3445
- const documentIds = documents.map(({ documentId }) => documentId);
3446
- const [{ query }] = useQueryParams();
3447
- const params = React.useMemo(() => buildValidParams(query), [query]);
3448
- const handleConfirmBulkUnpublish = async () => {
3449
- const data = await bulkUnpublishAction({ documentIds, model, params });
3450
- if (!("error" in data)) {
3451
- selectRow([]);
3452
- }
3453
- };
3454
- const showUnpublishButton = hasDraftAndPublishEnabled && hasPublishPermission && documents.some((entry) => entry.status === "published");
3455
- if (!showUnpublishButton)
3456
- return null;
3457
- return {
3458
- variant: "tertiary",
3459
- label: formatMessage({ id: "app.utils.unpublish", defaultMessage: "Unpublish" }),
3460
- dialog: {
3461
- type: "dialog",
3462
- title: formatMessage({
3463
- id: "app.components.ConfirmDialog.title",
3464
- defaultMessage: "Confirmation"
3465
- }),
3466
- content: /* @__PURE__ */ jsxs(Flex, { direction: "column", alignItems: "stretch", gap: 2, children: [
3467
- /* @__PURE__ */ jsx(Typography, { id: "confirm-description", textAlign: "center", children: formatMessage({
3468
- id: "popUpWarning.bodyMessage.contentType.unpublish.all",
3469
- defaultMessage: "Are you sure you want to unpublish these entries?"
3470
- }) }),
3471
- hasI18nEnabled && /* @__PURE__ */ jsx(Box, { textAlign: "center", padding: 3, children: /* @__PURE__ */ jsx(Typography, { textColor: "danger500", children: formatMessage(
3472
- {
3473
- id: getTranslation("Settings.list.actions.unpublishAdditionalInfos"),
3474
- defaultMessage: "This will unpublish the active locale versions <em>(from Internationalization)</em>"
3475
- },
3476
- {
3477
- em: Emphasis
3478
- }
3479
- ) }) })
3480
- ] }),
3481
- confirmButton: formatMessage({
3482
- id: "app.utils.unpublish",
3483
- defaultMessage: "Unpublish"
3484
- }),
3485
- onConfirm: handleConfirmBulkUnpublish
3486
- }
3487
- };
3488
- };
3489
- UnpublishAction.type = "unpublish";
3490
- const Emphasis = (chunks) => /* @__PURE__ */ jsx(Typography, { fontWeight: "semiBold", textColor: "danger500", children: chunks });
3491
- const DEFAULT_BULK_ACTIONS = [PublishAction, UnpublishAction, DeleteAction];
3492
- const AutoCloneFailureModalBody = ({ prohibitedFields }) => {
3493
- const { formatMessage } = useIntl();
3494
- const getDefaultErrorMessage = (reason) => {
3495
- switch (reason) {
3496
- case "relation":
3497
- return "Duplicating the relation could remove it from the original entry.";
3498
- case "unique":
3499
- return "Identical values in a unique field are not allowed";
3500
- default:
3501
- return reason;
3502
- }
3503
- };
3504
- return /* @__PURE__ */ jsxs(Fragment, { children: [
3505
- /* @__PURE__ */ jsx(Typography, { variant: "beta", children: formatMessage({
3506
- id: getTranslation("containers.list.autoCloneModal.title"),
3507
- defaultMessage: "This entry can't be duplicated directly."
3508
- }) }),
3509
- /* @__PURE__ */ jsx(Box, { marginTop: 2, children: /* @__PURE__ */ jsx(Typography, { textColor: "neutral600", children: formatMessage({
3510
- id: getTranslation("containers.list.autoCloneModal.description"),
3511
- defaultMessage: "A new entry will be created with the same content, but you'll have to change the following fields to save it."
3512
- }) }) }),
3513
- /* @__PURE__ */ jsx(Flex, { marginTop: 6, gap: 2, direction: "column", alignItems: "stretch", children: prohibitedFields.map(([fieldPath, reason]) => /* @__PURE__ */ jsxs(
3514
- Flex,
3515
- {
3516
- direction: "column",
3517
- gap: 2,
3518
- alignItems: "flex-start",
3519
- borderColor: "neutral200",
3520
- hasRadius: true,
3521
- padding: 6,
3522
- children: [
3523
- /* @__PURE__ */ jsx(Flex, { direction: "row", tag: "ol", children: fieldPath.map((pathSegment, index2) => /* @__PURE__ */ jsxs(Typography, { fontWeight: "semiBold", tag: "li", children: [
3524
- pathSegment,
3525
- index2 !== fieldPath.length - 1 && /* @__PURE__ */ jsx(
3526
- ChevronRight,
3527
- {
3528
- fill: "neutral500",
3529
- height: "0.8rem",
3530
- width: "0.8rem",
3531
- style: { margin: "0 0.8rem" }
3532
- }
3533
- )
3534
- ] }, index2)) }),
3535
- /* @__PURE__ */ jsx(Typography, { tag: "p", textColor: "neutral600", children: formatMessage({
3536
- id: getTranslation(`containers.list.autoCloneModal.error.${reason}`),
3537
- defaultMessage: getDefaultErrorMessage(reason)
3538
- }) })
3539
- ]
3540
- },
3541
- fieldPath.join()
3542
- )) })
3543
- ] });
3544
- };
3545
- const TableActions = ({ document }) => {
3546
- const { formatMessage } = useIntl();
3547
- const { model, collectionType } = useDoc();
3548
- const plugins = useStrapiApp("TableActions", (state) => state.plugins);
3549
- const props = {
3550
- activeTab: null,
3551
- model,
3552
- documentId: document.documentId,
3553
- collectionType,
3554
- document
3555
- };
3556
- return /* @__PURE__ */ jsx(
3557
- DescriptionComponentRenderer,
3558
- {
3559
- props,
3560
- descriptions: plugins["content-manager"].apis.getDocumentActions(),
3561
- children: (actions2) => {
3562
- const tableRowActions = actions2.filter((action) => {
3563
- const positions = Array.isArray(action.position) ? action.position : [action.position];
3564
- return positions.includes("table-row");
3565
- });
3566
- return /* @__PURE__ */ jsx(
3567
- DocumentActionsMenu,
3568
- {
3569
- actions: tableRowActions,
3570
- label: formatMessage({
3571
- id: "content-manager.containers.list.table.row-actions",
3572
- defaultMessage: "Row action"
3573
- }),
3574
- variant: "ghost"
3575
- }
3576
- );
3577
- }
3578
- }
3579
- );
3580
- };
3581
- const EditAction = ({ documentId }) => {
3582
- const navigate = useNavigate();
3583
- const { formatMessage } = useIntl();
3584
- const { canRead } = useDocumentRBAC("EditAction", ({ canRead: canRead2 }) => ({ canRead: canRead2 }));
3585
- const { toggleNotification } = useNotification();
3586
- const [{ query }] = useQueryParams();
3587
- return {
3588
- disabled: !canRead,
3589
- icon: /* @__PURE__ */ jsx(StyledPencil, {}),
3590
- label: formatMessage({
3591
- id: "content-manager.actions.edit.label",
3592
- defaultMessage: "Edit"
3593
- }),
3594
- position: "table-row",
3595
- onClick: async () => {
3596
- if (!documentId) {
3597
- console.error(
3598
- "You're trying to edit a document without an id, this is likely a bug with Strapi. Please open an issue."
3599
- );
3600
- toggleNotification({
3601
- message: formatMessage({
3602
- id: "content-manager.actions.edit.error",
3603
- defaultMessage: "An error occurred while trying to edit the document."
3604
- }),
3605
- type: "danger"
3606
- });
3607
- return;
3608
- }
3609
- navigate({
3610
- pathname: documentId,
3611
- search: stringify({
3612
- plugins: query.plugins
3613
- })
3614
- });
3615
- }
3616
- };
3617
- };
3618
- EditAction.type = "edit";
3619
- const StyledPencil = styled(Pencil)`
3620
- path {
3621
- fill: currentColor;
3622
- }
3623
- `;
3624
- const CloneAction = ({ model, documentId }) => {
3625
- const navigate = useNavigate();
3626
- const { formatMessage } = useIntl();
3627
- const { canCreate } = useDocumentRBAC("CloneAction", ({ canCreate: canCreate2 }) => ({ canCreate: canCreate2 }));
3628
- const { toggleNotification } = useNotification();
3629
- const { autoClone } = useDocumentActions();
3630
- const [prohibitedFields, setProhibitedFields] = React.useState([]);
3631
- return {
3632
- disabled: !canCreate,
3633
- icon: /* @__PURE__ */ jsx(StyledDuplicate, {}),
3634
- label: formatMessage({
3635
- id: "content-manager.actions.clone.label",
3636
- defaultMessage: "Duplicate"
3637
- }),
3638
- position: "table-row",
3639
- onClick: async () => {
3640
- if (!documentId) {
3641
- console.error(
3642
- "You're trying to clone a document in the table without an id, this is likely a bug with Strapi. Please open an issue."
3643
- );
3644
- toggleNotification({
3645
- message: formatMessage({
3646
- id: "content-manager.actions.clone.error",
3647
- defaultMessage: "An error occurred while trying to clone the document."
3648
- }),
3649
- type: "danger"
3650
- });
3651
- return;
3652
- }
3653
- const res = await autoClone({ model, sourceId: documentId });
3654
- if ("data" in res) {
3655
- navigate(res.data.documentId);
3656
- return true;
3657
- }
3658
- if (isBaseQueryError(res.error) && res.error.details && typeof res.error.details === "object" && "prohibitedFields" in res.error.details && Array.isArray(res.error.details.prohibitedFields)) {
3659
- const prohibitedFields2 = res.error.details.prohibitedFields;
3660
- setProhibitedFields(prohibitedFields2);
3661
- }
3662
- },
3663
- dialog: {
3664
- type: "modal",
3665
- title: formatMessage({
3666
- id: "content-manager.containers.list.autoCloneModal.header",
3667
- defaultMessage: "Duplicate"
3668
- }),
3669
- content: /* @__PURE__ */ jsx(AutoCloneFailureModalBody, { prohibitedFields }),
3670
- footer: ({ onClose }) => {
3671
- return /* @__PURE__ */ jsxs(Flex, { justifyContent: "space-between", children: [
3672
- /* @__PURE__ */ jsx(Button, { onClick: onClose, variant: "tertiary", children: formatMessage({
3673
- id: "cancel",
3674
- defaultMessage: "Cancel"
3675
- }) }),
3676
- /* @__PURE__ */ jsx(
3677
- LinkButton,
3678
- {
3679
- tag: NavLink,
3680
- to: {
3681
- pathname: `clone/${documentId}`
3682
- },
3683
- children: formatMessage({
3684
- id: "content-manager.containers.list.autoCloneModal.create",
3685
- defaultMessage: "Create"
3686
- })
3687
- }
3688
- )
3689
- ] });
3690
- }
3691
- }
3692
- };
3693
- };
3694
- CloneAction.type = "clone";
3695
- const StyledDuplicate = styled(Duplicate)`
3696
- path {
3697
- fill: currentColor;
3698
- }
3699
- `;
3700
- const DEFAULT_TABLE_ROW_ACTIONS = [EditAction, CloneAction];
3701
- class ContentManagerPlugin {
3702
- /**
3703
- * The following properties are the stored ones provided by any plugins registering with
3704
- * the content-manager. The function calls however, need to be called at runtime in the
3705
- * application, so instead we collate them and run them later with the complete list incl.
3706
- * ones already registered & the context of the view.
3707
- */
3708
- bulkActions = [...DEFAULT_BULK_ACTIONS];
3709
- documentActions = [
3710
- ...DEFAULT_ACTIONS,
3711
- ...DEFAULT_TABLE_ROW_ACTIONS,
3712
- ...DEFAULT_HEADER_ACTIONS,
3713
- HistoryAction
3714
- ];
3715
- editViewSidePanels = [ActionsPanel];
3716
- headerActions = [];
3717
- constructor() {
3718
- }
3719
- addEditViewSidePanel(panels) {
3720
- if (Array.isArray(panels)) {
3721
- this.editViewSidePanels = [...this.editViewSidePanels, ...panels];
3722
- } else if (typeof panels === "function") {
3723
- this.editViewSidePanels = panels(this.editViewSidePanels);
3724
- } else {
3725
- throw new Error(
3726
- `Expected the \`panels\` passed to \`addEditViewSidePanel\` to be an array or a function, but received ${getPrintableType(
3727
- panels
3728
- )}`
3729
- );
3730
- }
3731
- }
3732
- addDocumentAction(actions2) {
3733
- if (Array.isArray(actions2)) {
3734
- this.documentActions = [...this.documentActions, ...actions2];
3735
- } else if (typeof actions2 === "function") {
3736
- this.documentActions = actions2(this.documentActions);
3737
- } else {
3738
- throw new Error(
3739
- `Expected the \`actions\` passed to \`addDocumentAction\` to be an array or a function, but received ${getPrintableType(
3740
- actions2
3741
- )}`
3742
- );
3743
- }
3744
- }
3745
- addDocumentHeaderAction(actions2) {
3746
- if (Array.isArray(actions2)) {
3747
- this.headerActions = [...this.headerActions, ...actions2];
3748
- } else if (typeof actions2 === "function") {
3749
- this.headerActions = actions2(this.headerActions);
3750
- } else {
3751
- throw new Error(
3752
- `Expected the \`actions\` passed to \`addDocumentHeaderAction\` to be an array or a function, but received ${getPrintableType(
3753
- actions2
3754
- )}`
3755
- );
3756
- }
3757
- }
3758
- addBulkAction(actions2) {
3759
- if (Array.isArray(actions2)) {
3760
- this.bulkActions = [...this.bulkActions, ...actions2];
3761
- } else if (typeof actions2 === "function") {
3762
- this.bulkActions = actions2(this.bulkActions);
3763
- } else {
3764
- throw new Error(
3765
- `Expected the \`actions\` passed to \`addBulkAction\` to be an array or a function, but received ${getPrintableType(
3766
- actions2
3767
- )}`
3768
- );
3769
- }
3770
- }
3771
- get config() {
3772
- return {
3773
- id: PLUGIN_ID,
3774
- name: "Content Manager",
3775
- injectionZones: INJECTION_ZONES,
3776
- apis: {
3777
- addBulkAction: this.addBulkAction.bind(this),
3778
- addDocumentAction: this.addDocumentAction.bind(this),
3779
- addDocumentHeaderAction: this.addDocumentHeaderAction.bind(this),
3780
- addEditViewSidePanel: this.addEditViewSidePanel.bind(this),
3781
- getBulkActions: () => this.bulkActions,
3782
- getDocumentActions: () => this.documentActions,
3783
- getEditViewSidePanels: () => this.editViewSidePanels,
3784
- getHeaderActions: () => this.headerActions
3785
- }
3786
- };
3787
- }
3788
- }
3789
- const getPrintableType = (value) => {
3790
- const nativeType = typeof value;
3791
- if (nativeType === "object") {
3792
- if (value === null)
3793
- return "null";
3794
- if (Array.isArray(value))
3795
- return "array";
3796
- if (value instanceof Object && value.constructor.name !== "Object") {
3797
- return value.constructor.name;
3798
- }
3799
- }
3800
- return nativeType;
3801
- };
3802
- const initialState = {
3803
- collectionTypeLinks: [],
3804
- components: [],
3805
- fieldSizes: {},
3806
- models: [],
3807
- singleTypeLinks: [],
3808
- isLoading: true
3809
- };
3810
- const appSlice = createSlice({
3811
- name: "app",
3812
- initialState,
3813
- reducers: {
3814
- setInitialData(state, action) {
3815
- const {
3816
- authorizedCollectionTypeLinks,
3817
- authorizedSingleTypeLinks,
3818
- components,
3819
- contentTypeSchemas,
3820
- fieldSizes
3821
- } = action.payload;
3822
- state.collectionTypeLinks = authorizedCollectionTypeLinks.filter(
3823
- ({ isDisplayed }) => isDisplayed
3824
- );
3825
- state.singleTypeLinks = authorizedSingleTypeLinks.filter(({ isDisplayed }) => isDisplayed);
3826
- state.components = components;
3827
- state.models = contentTypeSchemas;
3828
- state.fieldSizes = fieldSizes;
3829
- state.isLoading = false;
3830
- }
3831
- }
3832
- });
3833
- const { actions, reducer: reducer$1 } = appSlice;
3834
- const { setInitialData } = actions;
3835
- const reducer = combineReducers({
3836
- app: reducer$1
3837
- });
3838
- const index = {
3839
- register(app) {
3840
- const cm = new ContentManagerPlugin();
3841
- app.addReducers({
3842
- [PLUGIN_ID]: reducer
3843
- });
3844
- app.addMenuLink({
3845
- to: PLUGIN_ID,
3846
- icon: Feather,
3847
- intlLabel: {
3848
- id: `content-manager.plugin.name`,
3849
- defaultMessage: "Content Manager"
3850
- },
3851
- permissions: [],
3852
- Component: () => import("./layout-CPn1PM6x.mjs").then((mod) => ({ default: mod.Layout })),
3853
- position: 1
3854
- });
3855
- app.registerPlugin(cm.config);
3856
- },
3857
- async registerTrads({ locales }) {
3858
- const importedTrads = await Promise.all(
3859
- locales.map((locale) => {
3860
- return __variableDynamicImportRuntimeHelper(/* @__PURE__ */ Object.assign({ "./translations/ar.json": () => import("./ar-CCEVvqGG.mjs"), "./translations/ca.json": () => import("./ca-5U32ON2v.mjs"), "./translations/cs.json": () => import("./cs-CM2aBUar.mjs"), "./translations/de.json": () => import("./de-C72KDNOl.mjs"), "./translations/en.json": () => import("./en-Dzv55oQw.mjs"), "./translations/es.json": () => import("./es-CeXiYflN.mjs"), "./translations/eu.json": () => import("./eu-CdALomew.mjs"), "./translations/fr.json": () => import("./fr-CD9VFbPM.mjs"), "./translations/gu.json": () => import("./gu-CNpaMDpH.mjs"), "./translations/hi.json": () => import("./hi-Dwvd04m3.mjs"), "./translations/hu.json": () => import("./hu-CeYvaaO0.mjs"), "./translations/id.json": () => import("./id-BtwA9WJT.mjs"), "./translations/it.json": () => import("./it-BrVPqaf1.mjs"), "./translations/ja.json": () => import("./ja-CtsUxOvk.mjs"), "./translations/ko.json": () => import("./ko-HVQRlfUI.mjs"), "./translations/ml.json": () => import("./ml-BihZwQit.mjs"), "./translations/ms.json": () => import("./ms-m_WjyWx7.mjs"), "./translations/nl.json": () => import("./nl-D4R9gHx5.mjs"), "./translations/pl.json": () => import("./pl-sbx9mSt_.mjs"), "./translations/pt-BR.json": () => import("./pt-BR-C71iDxnh.mjs"), "./translations/pt.json": () => import("./pt-BsaFvS8-.mjs"), "./translations/ru.json": () => import("./ru-BE6A4Exp.mjs"), "./translations/sa.json": () => import("./sa-Dag0k-Z8.mjs"), "./translations/sk.json": () => import("./sk-BFg-R8qJ.mjs"), "./translations/sv.json": () => import("./sv-CUnfWGsh.mjs"), "./translations/th.json": () => import("./th-BqbI8lIT.mjs"), "./translations/tr.json": () => import("./tr-CgeK3wJM.mjs"), "./translations/uk.json": () => import("./uk-CR-zDhAY.mjs"), "./translations/vi.json": () => import("./vi-DUXIk_fw.mjs"), "./translations/zh-Hans.json": () => import("./zh-Hans-BPQcRIyH.mjs"), "./translations/zh.json": () => import("./zh-BWZspA60.mjs") }), `./translations/${locale}.json`).then(({ default: data }) => {
3861
- return {
3862
- data: prefixPluginTranslations(data, PLUGIN_ID),
3863
- locale
3864
- };
3865
- }).catch(() => {
3866
- return {
3867
- data: {},
3868
- locale
3869
- };
3870
- });
3871
- })
3872
- );
3873
- return Promise.resolve(importedTrads);
3874
- }
3875
- };
3876
- export {
3877
- ATTRIBUTE_TYPES_THAT_CANNOT_BE_MAIN_FIELD as A,
3878
- BulkActionsRenderer as B,
3879
- COLLECTION_TYPES as C,
3880
- DocumentStatus as D,
3881
- extractContentTypeComponents as E,
3882
- DEFAULT_SETTINGS as F,
3883
- convertEditLayoutToFieldLayouts as G,
3884
- HOOKS as H,
3885
- InjectionZone as I,
3886
- useDocument as J,
3887
- index as K,
3888
- useDocumentActions as L,
3889
- Panels as P,
3890
- RelativeTime as R,
3891
- SINGLE_TYPES as S,
3892
- TableActions as T,
3893
- useGetAllContentTypeSettingsQuery as a,
3894
- useDoc as b,
3895
- buildValidParams as c,
3896
- contentManagerApi as d,
3897
- useDocumentRBAC as e,
3898
- useDocumentLayout as f,
3899
- getTranslation as g,
3900
- createYupSchema as h,
3901
- Header as i,
3902
- PERMISSIONS as j,
3903
- DocumentRBAC as k,
3904
- DOCUMENT_META_FIELDS as l,
3905
- useDocLayout as m,
3906
- useContentTypeSchema as n,
3907
- useGetContentTypeConfigurationQuery as o,
3908
- CREATOR_FIELDS as p,
3909
- getMainField as q,
3910
- routes as r,
3911
- setInitialData as s,
3912
- getDisplayName as t,
3913
- useGetInitialDataQuery as u,
3914
- checkIfAttributeIsDisplayable as v,
3915
- useGetAllDocumentsQuery as w,
3916
- convertListLayoutToFieldLayouts as x,
3917
- capitalise as y,
3918
- useUpdateContentTypeConfigurationMutation as z
3919
- };
3920
- //# sourceMappingURL=index-VHviNMeW.mjs.map