@strapi/i18n 0.0.0-experimental.bffd3c1819cd08304e7d270e88b4973e9fcbc183 → 0.0.0-experimental.c23f51fc41b3ef5de081f427d07e87af93cdcb2c

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 (366) hide show
  1. package/dist/admin/components/BulkLocaleActionModal.js +262 -0
  2. package/dist/admin/components/BulkLocaleActionModal.js.map +1 -0
  3. package/dist/admin/components/BulkLocaleActionModal.mjs +260 -0
  4. package/dist/admin/components/BulkLocaleActionModal.mjs.map +1 -0
  5. package/dist/admin/components/CMHeaderActions.js +721 -0
  6. package/dist/admin/components/CMHeaderActions.js.map +1 -0
  7. package/dist/admin/components/CMHeaderActions.mjs +696 -0
  8. package/dist/admin/components/CMHeaderActions.mjs.map +1 -0
  9. package/dist/admin/components/CMListViewModalsAdditionalInformation.js +69 -0
  10. package/dist/admin/components/CMListViewModalsAdditionalInformation.js.map +1 -0
  11. package/dist/admin/components/CMListViewModalsAdditionalInformation.mjs +65 -0
  12. package/dist/admin/components/CMListViewModalsAdditionalInformation.mjs.map +1 -0
  13. package/dist/admin/components/CheckboxConfirmation.js +155 -0
  14. package/dist/admin/components/CheckboxConfirmation.js.map +1 -0
  15. package/dist/admin/components/CheckboxConfirmation.mjs +134 -0
  16. package/dist/admin/components/CheckboxConfirmation.mjs.map +1 -0
  17. package/dist/admin/components/CreateLocale.js +395 -0
  18. package/dist/admin/components/CreateLocale.js.map +1 -0
  19. package/dist/admin/components/CreateLocale.mjs +369 -0
  20. package/dist/admin/components/CreateLocale.mjs.map +1 -0
  21. package/dist/admin/components/DeleteLocale.js +90 -0
  22. package/dist/admin/components/DeleteLocale.js.map +1 -0
  23. package/dist/admin/components/DeleteLocale.mjs +69 -0
  24. package/dist/admin/components/DeleteLocale.mjs.map +1 -0
  25. package/dist/admin/components/EditLocale.js +212 -0
  26. package/dist/admin/components/EditLocale.js.map +1 -0
  27. package/dist/admin/components/EditLocale.mjs +190 -0
  28. package/dist/admin/components/EditLocale.mjs.map +1 -0
  29. package/dist/admin/components/LocaleListCell.js +82 -0
  30. package/dist/admin/components/LocaleListCell.js.map +1 -0
  31. package/dist/admin/components/LocaleListCell.mjs +80 -0
  32. package/dist/admin/components/LocaleListCell.mjs.map +1 -0
  33. package/dist/admin/components/LocalePicker.js +98 -0
  34. package/dist/admin/components/LocalePicker.js.map +1 -0
  35. package/dist/admin/components/LocalePicker.mjs +77 -0
  36. package/dist/admin/components/LocalePicker.mjs.map +1 -0
  37. package/dist/admin/components/LocaleTable.js +143 -0
  38. package/dist/admin/components/LocaleTable.js.map +1 -0
  39. package/dist/admin/components/LocaleTable.mjs +122 -0
  40. package/dist/admin/components/LocaleTable.mjs.map +1 -0
  41. package/dist/admin/constants.js +37 -0
  42. package/dist/admin/constants.js.map +1 -0
  43. package/dist/admin/constants.mjs +35 -0
  44. package/dist/admin/constants.mjs.map +1 -0
  45. package/dist/admin/contentManagerHooks/editView.js +106 -0
  46. package/dist/admin/contentManagerHooks/editView.js.map +1 -0
  47. package/dist/admin/contentManagerHooks/editView.mjs +85 -0
  48. package/dist/admin/contentManagerHooks/editView.mjs.map +1 -0
  49. package/dist/admin/contentManagerHooks/listView.js +43 -0
  50. package/dist/admin/contentManagerHooks/listView.js.map +1 -0
  51. package/dist/admin/contentManagerHooks/listView.mjs +41 -0
  52. package/dist/admin/contentManagerHooks/listView.mjs.map +1 -0
  53. package/dist/admin/contentReleasesHooks/releaseDetailsView.js +20 -0
  54. package/dist/admin/contentReleasesHooks/releaseDetailsView.js.map +1 -0
  55. package/dist/admin/contentReleasesHooks/releaseDetailsView.mjs +18 -0
  56. package/dist/admin/contentReleasesHooks/releaseDetailsView.mjs.map +1 -0
  57. package/dist/admin/hooks/useI18n.js +78 -0
  58. package/dist/admin/hooks/useI18n.js.map +1 -0
  59. package/dist/admin/hooks/useI18n.mjs +57 -0
  60. package/dist/admin/hooks/useI18n.mjs.map +1 -0
  61. package/dist/admin/index.js +226 -5
  62. package/dist/admin/index.js.map +1 -1
  63. package/dist/admin/index.mjs +202 -5
  64. package/dist/admin/index.mjs.map +1 -1
  65. package/dist/admin/middlewares/extendCTBAttributeInitialData.js +61 -0
  66. package/dist/admin/middlewares/extendCTBAttributeInitialData.js.map +1 -0
  67. package/dist/admin/middlewares/extendCTBAttributeInitialData.mjs +59 -0
  68. package/dist/admin/middlewares/extendCTBAttributeInitialData.mjs.map +1 -0
  69. package/dist/admin/middlewares/extendCTBInitialData.js +40 -0
  70. package/dist/admin/middlewares/extendCTBInitialData.js.map +1 -0
  71. package/dist/admin/middlewares/extendCTBInitialData.mjs +38 -0
  72. package/dist/admin/middlewares/extendCTBInitialData.mjs.map +1 -0
  73. package/dist/admin/middlewares/rbac-middleware.js +49 -0
  74. package/dist/admin/middlewares/rbac-middleware.js.map +1 -0
  75. package/dist/admin/middlewares/rbac-middleware.mjs +28 -0
  76. package/dist/admin/middlewares/rbac-middleware.mjs.map +1 -0
  77. package/dist/admin/pages/SettingsPage.js +107 -0
  78. package/dist/admin/pages/SettingsPage.js.map +1 -0
  79. package/dist/admin/pages/SettingsPage.mjs +85 -0
  80. package/dist/admin/pages/SettingsPage.mjs.map +1 -0
  81. package/dist/admin/pluginId.js +6 -0
  82. package/dist/admin/pluginId.js.map +1 -0
  83. package/dist/admin/pluginId.mjs +4 -0
  84. package/dist/admin/pluginId.mjs.map +1 -0
  85. package/dist/admin/services/api.js +12 -0
  86. package/dist/admin/services/api.js.map +1 -0
  87. package/dist/admin/services/api.mjs +10 -0
  88. package/dist/admin/services/api.mjs.map +1 -0
  89. package/dist/admin/services/locales.js +70 -0
  90. package/dist/admin/services/locales.js.map +1 -0
  91. package/dist/admin/services/locales.mjs +64 -0
  92. package/dist/admin/services/locales.mjs.map +1 -0
  93. package/dist/admin/services/relations.js +23 -0
  94. package/dist/admin/services/relations.js.map +1 -0
  95. package/dist/admin/services/relations.mjs +21 -0
  96. package/dist/admin/services/relations.mjs.map +1 -0
  97. package/dist/admin/src/components/CMHeaderActions.d.ts +1 -1
  98. package/dist/admin/src/components/tests/CreateLocale.test.d.ts +1 -0
  99. package/dist/admin/src/components/tests/DeleteLocale.test.d.ts +1 -0
  100. package/dist/admin/src/components/tests/EditLocale.test.d.ts +1 -0
  101. package/dist/admin/src/components/tests/LocaleListCell.test.d.ts +1 -0
  102. package/dist/admin/src/contentReleasesHooks/releaseDetailsView.d.ts +1 -1
  103. package/dist/admin/src/pages/tests/SettingsPage.test.d.ts +1 -0
  104. package/dist/admin/tests/server.d.ts +1 -0
  105. package/dist/admin/tests/utils.d.ts +6 -0
  106. package/dist/admin/translations/de.json.js +66 -0
  107. package/dist/admin/translations/de.json.js.map +1 -0
  108. package/dist/admin/translations/de.json.mjs +64 -0
  109. package/dist/admin/translations/de.json.mjs.map +1 -0
  110. package/dist/admin/translations/dk.json.js +66 -0
  111. package/dist/admin/translations/dk.json.js.map +1 -0
  112. package/dist/admin/translations/dk.json.mjs +64 -0
  113. package/dist/admin/translations/dk.json.mjs.map +1 -0
  114. package/dist/admin/translations/en.json.js +81 -0
  115. package/dist/admin/translations/en.json.js.map +1 -0
  116. package/dist/admin/translations/en.json.mjs +79 -0
  117. package/dist/admin/translations/en.json.mjs.map +1 -0
  118. package/dist/admin/translations/es.json.js +66 -0
  119. package/dist/admin/translations/es.json.js.map +1 -0
  120. package/dist/admin/translations/es.json.mjs +64 -0
  121. package/dist/admin/translations/es.json.mjs.map +1 -0
  122. package/dist/admin/translations/fr.json.js +66 -0
  123. package/dist/admin/translations/fr.json.js.map +1 -0
  124. package/dist/admin/translations/fr.json.mjs +64 -0
  125. package/dist/admin/translations/fr.json.mjs.map +1 -0
  126. package/dist/admin/translations/ko.json.js +65 -0
  127. package/dist/admin/translations/ko.json.js.map +1 -0
  128. package/dist/admin/translations/ko.json.mjs +63 -0
  129. package/dist/admin/translations/ko.json.mjs.map +1 -0
  130. package/dist/admin/translations/pl.json.js +66 -0
  131. package/dist/admin/translations/pl.json.js.map +1 -0
  132. package/dist/admin/translations/pl.json.mjs +64 -0
  133. package/dist/admin/translations/pl.json.mjs.map +1 -0
  134. package/dist/admin/translations/ru.json.js +68 -0
  135. package/dist/admin/translations/ru.json.js.map +1 -0
  136. package/dist/admin/translations/ru.json.mjs +66 -0
  137. package/dist/admin/translations/ru.json.mjs.map +1 -0
  138. package/dist/admin/translations/tr.json.js +66 -0
  139. package/dist/admin/translations/tr.json.js.map +1 -0
  140. package/dist/admin/translations/tr.json.mjs +64 -0
  141. package/dist/admin/translations/tr.json.mjs.map +1 -0
  142. package/dist/admin/translations/uk.json.js +82 -0
  143. package/dist/admin/translations/uk.json.js.map +1 -0
  144. package/dist/admin/translations/uk.json.mjs +80 -0
  145. package/dist/admin/translations/uk.json.mjs.map +1 -0
  146. package/dist/admin/translations/zh-Hans.json.js +57 -0
  147. package/dist/admin/translations/zh-Hans.json.js.map +1 -0
  148. package/dist/admin/translations/zh-Hans.json.mjs +55 -0
  149. package/dist/admin/translations/zh-Hans.json.mjs.map +1 -0
  150. package/dist/admin/translations/zh.json.js +66 -0
  151. package/dist/admin/translations/zh.json.js.map +1 -0
  152. package/dist/admin/translations/zh.json.mjs +64 -0
  153. package/dist/admin/translations/zh.json.mjs.map +1 -0
  154. package/dist/admin/utils/baseQuery.js +8 -0
  155. package/dist/admin/utils/baseQuery.js.map +1 -0
  156. package/dist/admin/utils/baseQuery.mjs +6 -0
  157. package/dist/admin/utils/baseQuery.mjs.map +1 -0
  158. package/dist/admin/utils/clean.js +70 -0
  159. package/dist/admin/utils/clean.js.map +1 -0
  160. package/dist/admin/utils/clean.mjs +68 -0
  161. package/dist/admin/utils/clean.mjs.map +1 -0
  162. package/dist/admin/utils/fields.js +29 -0
  163. package/dist/admin/utils/fields.js.map +1 -0
  164. package/dist/admin/utils/fields.mjs +26 -0
  165. package/dist/admin/utils/fields.mjs.map +1 -0
  166. package/dist/admin/utils/getTranslation.js +8 -0
  167. package/dist/admin/utils/getTranslation.js.map +1 -0
  168. package/dist/admin/utils/getTranslation.mjs +6 -0
  169. package/dist/admin/utils/getTranslation.mjs.map +1 -0
  170. package/dist/admin/utils/prefixPluginTranslations.js +11 -0
  171. package/dist/admin/utils/prefixPluginTranslations.js.map +1 -0
  172. package/dist/admin/utils/prefixPluginTranslations.mjs +9 -0
  173. package/dist/admin/utils/prefixPluginTranslations.mjs.map +1 -0
  174. package/dist/admin/utils/schemas.js +68 -0
  175. package/dist/admin/utils/schemas.js.map +1 -0
  176. package/dist/admin/utils/schemas.mjs +66 -0
  177. package/dist/admin/utils/schemas.mjs.map +1 -0
  178. package/dist/admin/utils/strings.js +6 -0
  179. package/dist/admin/utils/strings.js.map +1 -0
  180. package/dist/admin/utils/strings.mjs +4 -0
  181. package/dist/admin/utils/strings.mjs.map +1 -0
  182. package/dist/server/bootstrap.js +79 -0
  183. package/dist/server/bootstrap.js.map +1 -0
  184. package/dist/server/bootstrap.mjs +77 -0
  185. package/dist/server/bootstrap.mjs.map +1 -0
  186. package/dist/server/constants/index.js +29 -0
  187. package/dist/server/constants/index.js.map +1 -0
  188. package/dist/server/constants/index.mjs +25 -0
  189. package/dist/server/constants/index.mjs.map +1 -0
  190. package/dist/server/constants/iso-locales.json.js +2423 -0
  191. package/dist/server/constants/iso-locales.json.js.map +1 -0
  192. package/dist/server/constants/iso-locales.json.mjs +2421 -0
  193. package/dist/server/constants/iso-locales.json.mjs.map +1 -0
  194. package/dist/server/content-types/index.js +10 -0
  195. package/dist/server/content-types/index.js.map +1 -0
  196. package/dist/server/content-types/index.mjs +8 -0
  197. package/dist/server/content-types/index.mjs.map +1 -0
  198. package/dist/server/content-types/locale/index.js +10 -0
  199. package/dist/server/content-types/locale/index.js.map +1 -0
  200. package/dist/server/content-types/locale/index.mjs +8 -0
  201. package/dist/server/content-types/locale/index.mjs.map +1 -0
  202. package/dist/server/content-types/locale/schema.json.js +46 -0
  203. package/dist/server/content-types/locale/schema.json.js.map +1 -0
  204. package/dist/server/content-types/locale/schema.json.mjs +38 -0
  205. package/dist/server/content-types/locale/schema.json.mjs.map +1 -0
  206. package/dist/server/controllers/content-types.js +76 -0
  207. package/dist/server/controllers/content-types.js.map +1 -0
  208. package/dist/server/controllers/content-types.mjs +74 -0
  209. package/dist/server/controllers/content-types.mjs.map +1 -0
  210. package/dist/server/controllers/index.js +14 -0
  211. package/dist/server/controllers/index.js.map +1 -0
  212. package/dist/server/controllers/index.mjs +12 -0
  213. package/dist/server/controllers/index.mjs.map +1 -0
  214. package/dist/server/controllers/iso-locales.js +13 -0
  215. package/dist/server/controllers/iso-locales.js.map +1 -0
  216. package/dist/server/controllers/iso-locales.mjs +11 -0
  217. package/dist/server/controllers/iso-locales.mjs.map +1 -0
  218. package/dist/server/controllers/locales.js +108 -0
  219. package/dist/server/controllers/locales.js.map +1 -0
  220. package/dist/server/controllers/locales.mjs +87 -0
  221. package/dist/server/controllers/locales.mjs.map +1 -0
  222. package/dist/server/controllers/validate-locale-creation.js +47 -0
  223. package/dist/server/controllers/validate-locale-creation.js.map +1 -0
  224. package/dist/server/controllers/validate-locale-creation.mjs +45 -0
  225. package/dist/server/controllers/validate-locale-creation.mjs.map +1 -0
  226. package/dist/server/domain/locale.js +11 -0
  227. package/dist/server/domain/locale.js.map +1 -0
  228. package/dist/server/domain/locale.mjs +9 -0
  229. package/dist/server/domain/locale.mjs.map +1 -0
  230. package/dist/server/graphql.js +115 -0
  231. package/dist/server/graphql.js.map +1 -0
  232. package/dist/server/graphql.mjs +113 -0
  233. package/dist/server/graphql.mjs.map +1 -0
  234. package/dist/server/index.js +18 -3460
  235. package/dist/server/index.js.map +1 -1
  236. package/dist/server/index.mjs +17 -3443
  237. package/dist/server/index.mjs.map +1 -1
  238. package/dist/server/register.js +79 -0
  239. package/dist/server/register.js.map +1 -0
  240. package/dist/server/register.mjs +77 -0
  241. package/dist/server/register.mjs.map +1 -0
  242. package/dist/server/routes/admin.js +102 -0
  243. package/dist/server/routes/admin.js.map +1 -0
  244. package/dist/server/routes/admin.mjs +100 -0
  245. package/dist/server/routes/admin.mjs.map +1 -0
  246. package/dist/server/routes/content-api.js +15 -0
  247. package/dist/server/routes/content-api.js.map +1 -0
  248. package/dist/server/routes/content-api.mjs +13 -0
  249. package/dist/server/routes/content-api.mjs.map +1 -0
  250. package/dist/server/routes/index.js +12 -0
  251. package/dist/server/routes/index.js.map +1 -0
  252. package/dist/server/routes/index.mjs +10 -0
  253. package/dist/server/routes/index.mjs.map +1 -0
  254. package/dist/server/services/content-types.js +157 -0
  255. package/dist/server/services/content-types.js.map +1 -0
  256. package/dist/server/services/content-types.mjs +155 -0
  257. package/dist/server/services/content-types.mjs.map +1 -0
  258. package/dist/server/services/index.js +22 -0
  259. package/dist/server/services/index.js.map +1 -0
  260. package/dist/server/services/index.mjs +20 -0
  261. package/dist/server/services/index.mjs.map +1 -0
  262. package/dist/server/services/iso-locales.js +12 -0
  263. package/dist/server/services/iso-locales.js.map +1 -0
  264. package/dist/server/services/iso-locales.mjs +10 -0
  265. package/dist/server/services/iso-locales.mjs.map +1 -0
  266. package/dist/server/services/locales.js +114 -0
  267. package/dist/server/services/locales.js.map +1 -0
  268. package/dist/server/services/locales.mjs +112 -0
  269. package/dist/server/services/locales.mjs.map +1 -0
  270. package/dist/server/services/localizations.js +68 -0
  271. package/dist/server/services/localizations.js.map +1 -0
  272. package/dist/server/services/localizations.mjs +66 -0
  273. package/dist/server/services/localizations.mjs.map +1 -0
  274. package/dist/server/services/metrics.js +30 -0
  275. package/dist/server/services/metrics.js.map +1 -0
  276. package/dist/server/services/metrics.mjs +28 -0
  277. package/dist/server/services/metrics.mjs.map +1 -0
  278. package/dist/server/services/permissions/actions.js +136 -0
  279. package/dist/server/services/permissions/actions.js.map +1 -0
  280. package/dist/server/services/permissions/actions.mjs +134 -0
  281. package/dist/server/services/permissions/actions.mjs.map +1 -0
  282. package/dist/server/services/permissions/engine.js +52 -0
  283. package/dist/server/services/permissions/engine.js.map +1 -0
  284. package/dist/server/services/permissions/engine.mjs +50 -0
  285. package/dist/server/services/permissions/engine.mjs.map +1 -0
  286. package/dist/server/services/permissions/sections-builder.js +45 -0
  287. package/dist/server/services/permissions/sections-builder.js.map +1 -0
  288. package/dist/server/services/permissions/sections-builder.mjs +43 -0
  289. package/dist/server/services/permissions/sections-builder.mjs.map +1 -0
  290. package/dist/server/services/permissions.js +14 -0
  291. package/dist/server/services/permissions.js.map +1 -0
  292. package/dist/server/services/permissions.mjs +12 -0
  293. package/dist/server/services/permissions.mjs.map +1 -0
  294. package/dist/server/services/sanitize/index.js +34 -0
  295. package/dist/server/services/sanitize/index.js.map +1 -0
  296. package/dist/server/services/sanitize/index.mjs +32 -0
  297. package/dist/server/services/sanitize/index.mjs.map +1 -0
  298. package/dist/server/src/services/localizations.d.ts +1 -1
  299. package/dist/server/src/services/localizations.d.ts.map +1 -1
  300. package/dist/server/utils/index.js +16 -0
  301. package/dist/server/utils/index.js.map +1 -0
  302. package/dist/server/utils/index.mjs +13 -0
  303. package/dist/server/utils/index.mjs.map +1 -0
  304. package/dist/server/validation/content-types.js +18 -0
  305. package/dist/server/validation/content-types.js.map +1 -0
  306. package/dist/server/validation/content-types.mjs +16 -0
  307. package/dist/server/validation/content-types.mjs.map +1 -0
  308. package/dist/server/validation/locales.js +23 -0
  309. package/dist/server/validation/locales.js.map +1 -0
  310. package/dist/server/validation/locales.mjs +20 -0
  311. package/dist/server/validation/locales.mjs.map +1 -0
  312. package/dist/shared/contracts/content-manager.d.ts +1 -1
  313. package/dist/shared/contracts/shared.d.ts +1 -1
  314. package/package.json +14 -11
  315. package/dist/_chunks/SettingsPage-B-KzAqT3.mjs +0 -554
  316. package/dist/_chunks/SettingsPage-B-KzAqT3.mjs.map +0 -1
  317. package/dist/_chunks/SettingsPage-hyOi94O9.js +0 -573
  318. package/dist/_chunks/SettingsPage-hyOi94O9.js.map +0 -1
  319. package/dist/_chunks/de-BOhNX_-5.js +0 -65
  320. package/dist/_chunks/de-BOhNX_-5.js.map +0 -1
  321. package/dist/_chunks/de-D80IRBP9.mjs +0 -65
  322. package/dist/_chunks/de-D80IRBP9.mjs.map +0 -1
  323. package/dist/_chunks/dk-CJ6Zzz78.mjs +0 -65
  324. package/dist/_chunks/dk-CJ6Zzz78.mjs.map +0 -1
  325. package/dist/_chunks/dk-cjXm0p3m.js +0 -65
  326. package/dist/_chunks/dk-cjXm0p3m.js.map +0 -1
  327. package/dist/_chunks/en-BTyF7WVW.mjs +0 -80
  328. package/dist/_chunks/en-BTyF7WVW.mjs.map +0 -1
  329. package/dist/_chunks/en-UlC0jh2t.js +0 -80
  330. package/dist/_chunks/en-UlC0jh2t.js.map +0 -1
  331. package/dist/_chunks/es-V8WnPN7w.mjs +0 -65
  332. package/dist/_chunks/es-V8WnPN7w.mjs.map +0 -1
  333. package/dist/_chunks/es-hr9b_HLp.js +0 -65
  334. package/dist/_chunks/es-hr9b_HLp.js.map +0 -1
  335. package/dist/_chunks/fr-BFmBbE0H.js +0 -65
  336. package/dist/_chunks/fr-BFmBbE0H.js.map +0 -1
  337. package/dist/_chunks/fr-F94noFiV.mjs +0 -65
  338. package/dist/_chunks/fr-F94noFiV.mjs.map +0 -1
  339. package/dist/_chunks/index-BcYj5jo9.mjs +0 -1589
  340. package/dist/_chunks/index-BcYj5jo9.mjs.map +0 -1
  341. package/dist/_chunks/index-C8NzsAKp.js +0 -1610
  342. package/dist/_chunks/index-C8NzsAKp.js.map +0 -1
  343. package/dist/_chunks/ko-C40pNQ9b.js +0 -64
  344. package/dist/_chunks/ko-C40pNQ9b.js.map +0 -1
  345. package/dist/_chunks/ko-CF-P3Car.mjs +0 -64
  346. package/dist/_chunks/ko-CF-P3Car.mjs.map +0 -1
  347. package/dist/_chunks/pl-Dxr9RUmD.mjs +0 -65
  348. package/dist/_chunks/pl-Dxr9RUmD.mjs.map +0 -1
  349. package/dist/_chunks/pl-JtWBy-JQ.js +0 -65
  350. package/dist/_chunks/pl-JtWBy-JQ.js.map +0 -1
  351. package/dist/_chunks/ru-B-4sVwXN.mjs +0 -67
  352. package/dist/_chunks/ru-B-4sVwXN.mjs.map +0 -1
  353. package/dist/_chunks/ru-COSWt3Nu.js +0 -67
  354. package/dist/_chunks/ru-COSWt3Nu.js.map +0 -1
  355. package/dist/_chunks/tr-BVj1O5ch.js +0 -65
  356. package/dist/_chunks/tr-BVj1O5ch.js.map +0 -1
  357. package/dist/_chunks/tr-Ccu6Yj11.mjs +0 -65
  358. package/dist/_chunks/tr-Ccu6Yj11.mjs.map +0 -1
  359. package/dist/_chunks/zh-BIz395Ms.mjs +0 -65
  360. package/dist/_chunks/zh-BIz395Ms.mjs.map +0 -1
  361. package/dist/_chunks/zh-Hans-Bfo6_TCM.mjs +0 -56
  362. package/dist/_chunks/zh-Hans-Bfo6_TCM.mjs.map +0 -1
  363. package/dist/_chunks/zh-Hans-DIEm_EMC.js +0 -56
  364. package/dist/_chunks/zh-Hans-DIEm_EMC.js.map +0 -1
  365. package/dist/_chunks/zh-wkBPBkhc.js +0 -65
  366. package/dist/_chunks/zh-wkBPBkhc.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-BcYj5jo9.mjs","sources":["../../admin/src/pluginId.ts","../../admin/src/utils/getTranslation.ts","../../admin/src/components/CheckboxConfirmation.tsx","../../admin/src/utils/fields.ts","../../admin/src/utils/strings.ts","../../admin/src/hooks/useI18n.ts","../../admin/src/services/api.ts","../../admin/src/services/locales.ts","../../admin/src/services/relations.ts","../../admin/src/utils/clean.ts","../../admin/src/components/BulkLocaleActionModal.tsx","../../admin/src/components/CMHeaderActions.tsx","../../admin/src/components/CMListViewModalsAdditionalInformation.tsx","../../admin/src/components/LocalePicker.tsx","../../admin/src/constants.ts","../../admin/src/contentManagerHooks/editView.tsx","../../admin/src/components/LocaleListCell.tsx","../../admin/src/contentManagerHooks/listView.tsx","../../admin/src/contentReleasesHooks/releaseDetailsView.ts","../../admin/src/middlewares/extendCTBAttributeInitialData.ts","../../admin/src/middlewares/extendCTBInitialData.ts","../../admin/src/middlewares/rbac-middleware.ts","../../admin/src/utils/prefixPluginTranslations.ts","../../admin/src/utils/schemas.ts","../../admin/src/index.ts"],"sourcesContent":["export const pluginId = 'i18n';\n","import { pluginId } from '../pluginId';\n\nconst getTranslation = (id: string) => `${pluginId}.${id}`;\n\nexport { getTranslation };\n","import * as React from 'react';\n\nimport { Button, Checkbox, Dialog, Field, Flex, Typography } from '@strapi/design-system';\nimport { WarningCircle } from '@strapi/icons';\nimport { MessageDescriptor, useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { getTranslation } from '../utils/getTranslation';\n\nconst TextAlignTypography = styled(Typography)`\n text-align: center;\n`;\n\ninterface IntlMessage extends MessageDescriptor {\n values: object;\n}\n\ninterface CheckboxConfirmationProps {\n description: IntlMessage;\n intlLabel: IntlMessage;\n isCreating?: boolean;\n name: string;\n onChange: (event: { target: { name: string; value: boolean; type: string } }) => void;\n value: boolean;\n}\n\nconst CheckboxConfirmation = ({\n description,\n isCreating = false,\n intlLabel,\n name,\n onChange,\n value,\n}: CheckboxConfirmationProps) => {\n const { formatMessage } = useIntl();\n const [isOpen, setIsOpen] = React.useState(false);\n\n const handleChange = (value: boolean) => {\n if (isCreating || value) {\n return onChange({ target: { name, value, type: 'checkbox' } });\n }\n\n if (!value) {\n return setIsOpen(true);\n }\n\n return null;\n };\n\n const handleConfirm = () => {\n onChange({ target: { name, value: false, type: 'checkbox' } });\n };\n\n const label = intlLabel.id\n ? formatMessage(\n { id: intlLabel.id, defaultMessage: intlLabel.defaultMessage },\n { ...intlLabel.values }\n )\n : name;\n\n const hint = description\n ? formatMessage(\n { id: description.id, defaultMessage: description.defaultMessage },\n { ...description.values }\n )\n : '';\n\n return (\n <Dialog.Root open={isOpen} onOpenChange={setIsOpen}>\n <Field.Root hint={hint} name={name}>\n <Checkbox onCheckedChange={handleChange} checked={value}>\n {label}\n </Checkbox>\n <Field.Hint />\n </Field.Root>\n <Dialog.Content>\n <Dialog.Header>\n {formatMessage({\n id: getTranslation('CheckboxConfirmation.Modal.title'),\n defaultMessage: 'Disable localization',\n })}\n </Dialog.Header>\n <Dialog.Body icon={<WarningCircle />}>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n <Flex justifyContent=\"center\">\n <TextAlignTypography>\n {formatMessage({\n id: getTranslation('CheckboxConfirmation.Modal.content'),\n defaultMessage:\n 'Disabling localization will engender the deletion of all your content but the one associated to your default locale (if existing).',\n })}\n </TextAlignTypography>\n </Flex>\n <Flex justifyContent=\"center\">\n <Typography fontWeight=\"semiBold\">\n {formatMessage({\n id: getTranslation('CheckboxConfirmation.Modal.body'),\n defaultMessage: 'Do you want to disable it?',\n })}\n </Typography>\n </Flex>\n </Flex>\n </Dialog.Body>\n <Dialog.Footer>\n <Dialog.Cancel>\n <Button variant=\"tertiary\">\n {formatMessage({\n id: 'components.popUpWarning.button.cancel',\n defaultMessage: 'No, cancel',\n })}\n </Button>\n </Dialog.Cancel>\n <Dialog.Action>\n <Button variant=\"danger-light\" onClick={handleConfirm}>\n {formatMessage({\n id: getTranslation('CheckboxConfirmation.Modal.button-confirm'),\n defaultMessage: 'Yes, disable',\n })}\n </Button>\n </Dialog.Action>\n </Dialog.Footer>\n </Dialog.Content>\n </Dialog.Root>\n );\n};\n\nexport { CheckboxConfirmation };\n","const LOCALIZED_FIELDS = [\n 'biginteger',\n 'boolean',\n 'component',\n 'date',\n 'datetime',\n 'decimal',\n 'dynamiczone',\n 'email',\n 'enumeration',\n 'float',\n 'integer',\n 'json',\n 'media',\n 'number',\n 'password',\n 'richtext',\n 'blocks',\n 'string',\n 'text',\n 'time',\n];\n\nconst doesPluginOptionsHaveI18nLocalized = (\n opts?: object\n): opts is { i18n: { localized: boolean } } =>\n typeof opts === 'object' &&\n opts !== null &&\n 'i18n' in opts &&\n typeof opts.i18n === 'object' &&\n opts.i18n !== null &&\n 'localized' in opts.i18n &&\n typeof opts.i18n.localized === 'boolean';\n\nexport { LOCALIZED_FIELDS, doesPluginOptionsHaveI18nLocalized };\n","const capitalize = (str: string) => str.charAt(0).toUpperCase() + str.slice(1);\n\nexport { capitalize };\n","import * as React from 'react';\n\nimport { useAuth } from '@strapi/admin/strapi-admin';\nimport { unstable_useDocument as useDocument } from '@strapi/content-manager/strapi-admin';\nimport { useParams } from 'react-router-dom';\n\nimport { doesPluginOptionsHaveI18nLocalized } from '../utils/fields';\nimport { capitalize } from '../utils/strings';\n\ntype UseI18n = () => {\n hasI18n: boolean;\n canCreate: string[];\n canRead: string[];\n canUpdate: string[];\n canDelete: string[];\n canPublish: string[];\n};\n\n/**\n * @alpha\n * @description This hook is used to get the i18n status of a content type.\n * Also returns the CRUDP permission locale properties for the content type\n * so we know which locales the user can perform actions on.\n */\nconst useI18n: UseI18n = () => {\n // Extract the params from the URL to pass to our useDocument hook\n const params = useParams<{ collectionType: string; slug: string; model: string }>();\n\n const userPermissions = useAuth('useI18n', (state) => state.permissions);\n const actions = React.useMemo(() => {\n const permissions = userPermissions.filter((permission) => permission.subject === params.slug);\n\n return permissions.reduce<Omit<ReturnType<UseI18n>, 'hasI18n'>>(\n (acc, permission) => {\n const [actionShorthand] = permission.action.split('.').slice(-1);\n\n return {\n ...acc,\n [`can${capitalize(actionShorthand)}`]: permission.properties?.locales ?? [],\n };\n },\n { canCreate: [], canRead: [], canUpdate: [], canDelete: [], canPublish: [] }\n );\n }, [params.slug, userPermissions]);\n\n // TODO: use specific hook to get schema only\n const { schema } = useDocument(\n {\n // We can non-null assert these because below we skip the query if they are not present\n collectionType: params.collectionType!,\n model: params.slug!,\n },\n {\n skip: true,\n }\n );\n\n if (doesPluginOptionsHaveI18nLocalized(schema?.pluginOptions)) {\n return {\n hasI18n: schema.pluginOptions.i18n.localized,\n ...actions,\n };\n }\n\n return {\n hasI18n: false,\n ...actions,\n };\n};\n\nexport { useI18n };\n","import { adminApi } from '@strapi/admin/strapi-admin';\n\nconst i18nApi = adminApi.enhanceEndpoints({\n addTagTypes: ['Locale'],\n});\n\nexport { i18nApi };\n","import { i18nApi } from './api';\n\nimport type { GetISOLocales } from '../../../shared/contracts/iso-locales';\nimport type {\n GetLocales,\n CreateLocale,\n DeleteLocale,\n UpdateLocale,\n} from '../../../shared/contracts/locales';\n\nconst localesApi = i18nApi.injectEndpoints({\n endpoints: (builder) => ({\n createLocale: builder.mutation<CreateLocale.Response, CreateLocale.Request['body']>({\n query: (data) => ({\n url: '/i18n/locales',\n method: 'POST',\n data,\n }),\n invalidatesTags: [{ type: 'Locale', id: 'LIST' }],\n }),\n deleteLocale: builder.mutation<DeleteLocale.Response, DeleteLocale.Params['id']>({\n query: (id) => ({\n url: `/i18n/locales/${id}`,\n method: 'DELETE',\n }),\n invalidatesTags: (result, error, id) => [{ type: 'Locale', id }],\n }),\n getLocales: builder.query<GetLocales.Response, void>({\n query: () => '/i18n/locales',\n providesTags: (res) => [\n { type: 'Locale', id: 'LIST' },\n ...(Array.isArray(res)\n ? res.map((locale) => ({\n type: 'Locale' as const,\n id: locale.id,\n }))\n : []),\n ],\n }),\n getDefaultLocales: builder.query<GetISOLocales.Response, void>({\n query: () => '/i18n/iso-locales',\n }),\n updateLocale: builder.mutation<\n UpdateLocale.Response,\n UpdateLocale.Request['body'] & UpdateLocale.Params\n >({\n query: ({ id, ...data }) => ({\n url: `/i18n/locales/${id}`,\n method: 'PUT',\n data,\n }),\n invalidatesTags: (result, error, { id }) => [{ type: 'Locale', id }],\n }),\n }),\n});\n\nconst {\n useCreateLocaleMutation,\n useDeleteLocaleMutation,\n useGetLocalesQuery,\n useGetDefaultLocalesQuery,\n useUpdateLocaleMutation,\n} = localesApi;\n\nexport {\n useCreateLocaleMutation,\n useDeleteLocaleMutation,\n useGetLocalesQuery,\n useGetDefaultLocalesQuery,\n useUpdateLocaleMutation,\n};\n","import { i18nApi } from './api';\n\nimport type { CountManyEntriesDraftRelations } from '../../../shared/contracts/content-manager';\n\nconst relationsApi = i18nApi.injectEndpoints({\n overrideExisting: true,\n endpoints: (builder) => ({\n getManyDraftRelationCount: builder.query<\n CountManyEntriesDraftRelations.Response['data'],\n CountManyEntriesDraftRelations.Request['query'] & {\n model: string;\n }\n >({\n query: ({ model, ...params }) => ({\n url: `/content-manager/collection-types/${model}/actions/countManyEntriesDraftRelations`,\n method: 'GET',\n config: {\n params,\n },\n }),\n transformResponse: (response: CountManyEntriesDraftRelations.Response) => response.data,\n }),\n }),\n});\n\nconst { useGetManyDraftRelationCountQuery } = relationsApi;\n\nexport { useGetManyDraftRelationCountQuery };\n","import type { Schema } from '@strapi/types';\n\ntype Data = Record<keyof Schema.ContentType['attributes'], any>;\n\nconst cleanData = (\n data: Data,\n schema: Schema.ContentType,\n components: Record<string, Schema.Component>\n) => {\n const cleanedData = removeFields(data, [\n 'createdAt',\n 'createdBy',\n 'updatedAt',\n 'updatedBy',\n 'id',\n 'documentId',\n 'publishedAt',\n 'strapi_stage',\n 'strapi_assignee',\n 'locale',\n 'status',\n ]);\n\n const cleanedDataWithoutPasswordAndRelation = recursiveRemoveFieldTypes(\n cleanedData,\n schema,\n components,\n ['relation', 'password']\n );\n\n return cleanedDataWithoutPasswordAndRelation;\n};\n\nconst removeFields = (data: Data, fields: Array<keyof Schema.ContentType['attributes']>) => {\n return Object.keys(data).reduce((acc, current) => {\n if (fields.includes(current)) {\n return acc;\n }\n acc[current] = data[current];\n return acc;\n }, {} as Data);\n};\n\nconst recursiveRemoveFieldTypes = (\n data: Data,\n schema: Schema.Schema,\n components: Record<string, Schema.Component>,\n fields: Array<keyof Schema.ContentType['attributes']>\n) => {\n return Object.keys(data).reduce((acc, current) => {\n const attribute = schema.attributes[current] ?? { type: undefined };\n\n if (fields.includes(attribute.type)) {\n return acc;\n }\n\n if (attribute.type === 'dynamiczone') {\n acc[current] = data[current].map((componentValue: any, index: number) => {\n const { id: _, ...rest } = recursiveRemoveFieldTypes(\n componentValue,\n components[componentValue.__component],\n components,\n fields\n );\n\n return {\n ...rest,\n __temp_key__: index + 1,\n };\n });\n } else if (attribute.type === 'component') {\n const { repeatable, component } = attribute;\n\n if (repeatable) {\n acc[current] = (data[current] ?? []).map((compoData: any, index: number) => {\n const { id: _, ...rest } = recursiveRemoveFieldTypes(\n compoData,\n components[component],\n components,\n fields\n );\n\n return {\n ...rest,\n __temp_key__: index + 1,\n };\n });\n } else {\n const { id: _, ...rest } = recursiveRemoveFieldTypes(\n data[current] ?? {},\n components[component],\n components,\n fields\n );\n\n acc[current] = rest;\n }\n } else {\n acc[current] = data[current];\n }\n\n return acc;\n }, {} as any);\n};\n\nexport { cleanData };\n","import * as React from 'react';\n\nimport { FormErrors, Table, useTable } from '@strapi/admin/strapi-admin';\nimport { Box, Typography, IconButton, Flex, Tooltip, Status, Modal } from '@strapi/design-system';\nimport { Pencil, CheckCircle, CrossCircle, ArrowsCounterClockwise } from '@strapi/icons';\nimport { Modules } from '@strapi/types';\nimport { stringify } from 'qs';\nimport { type MessageDescriptor, useIntl, PrimitiveType } from 'react-intl';\nimport { Link } from 'react-router-dom';\n\nimport { Locale } from '../../../shared/contracts/locales';\nimport { getTranslation } from '../utils/getTranslation';\nimport { capitalize } from '../utils/strings';\n\nimport { LocaleStatus } from './CMHeaderActions';\n\ntype Status = Modules.Documents.Params.PublicationStatus.Kind | 'modified';\n\n/* -------------------------------------------------------------------------------------------------\n * EntryValidationText\n * -----------------------------------------------------------------------------------------------*/\n\ninterface EntryValidationTextProps {\n status: Status;\n validationErrors: FormErrors[string] | null;\n action: 'bulk-publish' | 'bulk-unpublish';\n}\n\ninterface TranslationMessage extends MessageDescriptor {\n values?: Record<string, PrimitiveType>;\n}\n\nconst isErrorMessageDescriptor = (object?: string | object): object is TranslationMessage => {\n return (\n typeof object === 'object' && object !== null && 'id' in object && 'defaultMessage' in object\n );\n};\n\nconst EntryValidationText = ({\n status = 'draft',\n validationErrors,\n action,\n}: EntryValidationTextProps) => {\n const { formatMessage } = useIntl();\n\n /**\n * TODO: Should this be extracted an made into a factory to recursively get\n * error messages??\n */\n const getErrorStr = (key: string, value?: FormErrors[string]): string => {\n if (typeof value === 'string') {\n return `${key}: ${value}`;\n } else if (isErrorMessageDescriptor(value)) {\n return `${key}: ${formatMessage(value)}`;\n } else if (Array.isArray(value)) {\n return value.map((v) => getErrorStr(key, v)).join(' ');\n } else if (typeof value === 'object' && !Array.isArray(value)) {\n return Object.entries(value)\n .map(([k, v]) => getErrorStr(k, v))\n .join(' ');\n } else {\n /**\n * unlikely to happen, but we need to return something\n */\n return '';\n }\n };\n\n if (validationErrors) {\n const validationErrorsMessages = Object.entries(validationErrors)\n .map(([key, value]) => {\n return getErrorStr(key, value);\n })\n .join(' ');\n\n return (\n <Flex gap={2}>\n <CrossCircle fill=\"danger600\" />\n <Tooltip label={validationErrorsMessages}>\n <Typography\n maxWidth={'30rem'}\n textColor=\"danger600\"\n variant=\"omega\"\n fontWeight=\"semiBold\"\n ellipsis\n >\n {validationErrorsMessages}\n </Typography>\n </Tooltip>\n </Flex>\n );\n }\n\n const getStatusMessage = () => {\n if (action === 'bulk-publish') {\n if (status === 'published') {\n return {\n icon: <CheckCircle fill=\"success600\" />,\n text: formatMessage({\n id: 'content-manager.bulk-publish.already-published',\n defaultMessage: 'Already Published',\n }),\n textColor: 'success600',\n fontWeight: 'bold',\n };\n } else if (status === 'modified') {\n return {\n icon: <ArrowsCounterClockwise fill=\"alternative600\" />,\n text: formatMessage({\n id: 'app.utils.ready-to-publish-changes',\n defaultMessage: 'Ready to publish changes',\n }),\n };\n } else {\n return {\n icon: <CheckCircle fill=\"success600\" />,\n text: formatMessage({\n id: 'app.utils.ready-to-publish',\n defaultMessage: 'Ready to publish',\n }),\n };\n }\n } else {\n if (status === 'draft') {\n return {\n icon: <CheckCircle fill=\"success600\" />,\n text: formatMessage({\n id: 'content-manager.bulk-unpublish.already-unpublished',\n defaultMessage: 'Already Unpublished',\n }),\n textColor: 'success600',\n fontWeight: 'bold',\n };\n } else {\n return {\n icon: <CheckCircle fill=\"success600\" />,\n text: formatMessage({\n id: 'app.utils.ready-to-unpublish-changes',\n defaultMessage: 'Ready to unpublish',\n }),\n textColor: 'success600',\n fontWeight: 'bold',\n };\n }\n }\n };\n\n const { icon, text, textColor = 'success600', fontWeight = 'normal' } = getStatusMessage();\n\n return (\n <Flex gap={2}>\n {icon}\n <Typography textColor={textColor} fontWeight={fontWeight}>\n {text}\n </Typography>\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * BoldChunk\n * -----------------------------------------------------------------------------------------------*/\n\nconst BoldChunk = (chunks: React.ReactNode) => <Typography fontWeight=\"bold\">{chunks}</Typography>;\n\n/* -------------------------------------------------------------------------------------------------\n * BulkLocaleActionModal\n * -----------------------------------------------------------------------------------------------*/\n\ninterface BulkLocaleActionModalProps {\n rows: LocaleStatus[];\n headers: {\n label: string;\n name: string;\n }[];\n localesMetadata: Locale[];\n validationErrors?: FormErrors;\n action: 'bulk-publish' | 'bulk-unpublish';\n}\n\nconst BulkLocaleActionModal = ({\n headers,\n rows,\n localesMetadata,\n validationErrors = {},\n action,\n}: BulkLocaleActionModalProps) => {\n const { formatMessage } = useIntl();\n\n const selectedRows = useTable<LocaleStatus[]>(\n 'BulkLocaleActionModal',\n (state) => state.selectedRows\n );\n\n const getFormattedCountMessage = () => {\n const currentStatusByLocale = rows.reduce<Record<string, string>>((acc, { locale, status }) => {\n acc[locale] = status;\n return acc;\n }, {});\n const localesWithErrors = Object.keys(validationErrors);\n\n const publishedCount = selectedRows.filter(\n ({ locale }) => currentStatusByLocale[locale] === 'published'\n ).length;\n\n const draftCount = selectedRows.filter(\n ({ locale }) =>\n (currentStatusByLocale[locale] === 'draft' ||\n currentStatusByLocale[locale] === 'modified') &&\n !localesWithErrors.includes(locale)\n ).length;\n\n const withErrorsCount = localesWithErrors.length;\n const messageId =\n action === 'bulk-publish'\n ? 'content-manager.containers.list.selectedEntriesModal.selectedCount.publish'\n : 'content-manager.containers.list.selectedEntriesModal.selectedCount.unpublish';\n\n const defaultMessage =\n action === 'bulk-publish'\n ? '<b>{publishedCount}</b> {publishedCount, plural, =0 {entries} one {entry} other {entries}} already published. <b>{draftCount}</b> {draftCount, plural, =0 {entries} one {entry} other {entries}} ready to publish. <b>{withErrorsCount}</b> {withErrorsCount, plural, =0 {entries} one {entry} other {entries}} waiting for action.'\n : '<b>{draftCount}</b> {draftCount, plural, =0 {entries} one {entry} other {entries}} already unpublished. <b>{publishedCount}</b> {publishedCount, plural, =0 {entries} one {entry} other {entries}} ready to unpublish.';\n\n return formatMessage(\n {\n id: messageId,\n defaultMessage,\n },\n {\n withErrorsCount,\n draftCount,\n publishedCount,\n b: BoldChunk,\n }\n );\n };\n\n return (\n <Modal.Body>\n <Typography>{getFormattedCountMessage()}</Typography>\n <Box marginTop={5}>\n <Table.Content>\n <Table.Head>\n <Table.HeaderCheckboxCell />\n {headers.map((head) => (\n <Table.HeaderCell key={head.name} {...head} />\n ))}\n </Table.Head>\n <Table.Body>\n {rows.map(({ locale, status }, index) => {\n const error = validationErrors?.[locale] ?? null;\n\n const statusVariant =\n status === 'draft' ? 'primary' : status === 'published' ? 'success' : 'alternative';\n\n return (\n <Table.Row key={index}>\n <Table.CheckboxCell id={locale} aria-label={`Select ${locale}`} />\n <Table.Cell>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {Array.isArray(localesMetadata)\n ? localesMetadata.find((localeEntry) => localeEntry.code === locale)?.name\n : locale}\n </Typography>\n </Table.Cell>\n <Table.Cell>\n <Box display=\"flex\">\n <Status\n display=\"flex\"\n paddingLeft=\"6px\"\n paddingRight=\"6px\"\n paddingTop=\"2px\"\n paddingBottom=\"2px\"\n size={'S'}\n variant={statusVariant}\n >\n <Typography tag=\"span\" variant=\"pi\" fontWeight=\"bold\">\n {capitalize(status)}\n </Typography>\n </Status>\n </Box>\n </Table.Cell>\n <Table.Cell>\n <EntryValidationText validationErrors={error} status={status} action={action} />\n </Table.Cell>\n <Table.Cell>\n <IconButton\n tag={Link}\n to={{\n search: stringify({ plugins: { i18n: { locale } } }),\n }}\n label={formatMessage(\n {\n id: getTranslation('Settings.list.actions.edit'),\n defaultMessage: 'Edit {name} locale',\n },\n {\n name: locale,\n }\n )}\n variant=\"ghost\"\n >\n <Pencil />\n </IconButton>\n </Table.Cell>\n </Table.Row>\n );\n })}\n </Table.Body>\n </Table.Content>\n </Box>\n </Modal.Body>\n );\n};\n\nexport { BulkLocaleActionModal };\nexport type { BulkLocaleActionModalProps };\n","import * as React from 'react';\n\nimport { skipToken } from '@reduxjs/toolkit/query';\nimport {\n useNotification,\n useQueryParams,\n Table,\n useAPIErrorHandler,\n FormErrors,\n useForm,\n} from '@strapi/admin/strapi-admin';\nimport {\n type DocumentActionComponent,\n type DocumentActionProps,\n unstable_useDocument as useDocument,\n unstable_useDocumentActions as useDocumentActions,\n buildValidParams,\n HeaderActionProps,\n} from '@strapi/content-manager/strapi-admin';\nimport {\n Flex,\n Status,\n Typography,\n Button,\n Modal,\n Field,\n SingleSelect,\n SingleSelectOption,\n Dialog,\n type StatusVariant,\n} from '@strapi/design-system';\nimport { WarningCircle, ListPlus, Trash, Download, Cross, Plus } from '@strapi/icons';\nimport { Modules } from '@strapi/types';\nimport { useIntl } from 'react-intl';\nimport { useNavigate } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { useI18n } from '../hooks/useI18n';\nimport { useGetLocalesQuery } from '../services/locales';\nimport { useGetManyDraftRelationCountQuery } from '../services/relations';\nimport { cleanData } from '../utils/clean';\nimport { getTranslation } from '../utils/getTranslation';\nimport { capitalize } from '../utils/strings';\n\nimport { BulkLocaleActionModal } from './BulkLocaleActionModal';\n\nimport type { Locale } from '../../../shared/contracts/locales';\nimport type { I18nBaseQuery } from '../types';\n\n/* -------------------------------------------------------------------------------------------------\n * LocalePickerAction\n * -----------------------------------------------------------------------------------------------*/\n\ninterface LocaleOptionProps {\n isDraftAndPublishEnabled: boolean;\n locale: Locale;\n status: 'draft' | 'published' | 'modified';\n entryExists: boolean;\n}\n\nconst statusVariants: Record<LocaleOptionProps['status'], StatusVariant> = {\n draft: 'secondary',\n published: 'success',\n modified: 'alternative',\n};\n\nconst LocaleOption = ({\n isDraftAndPublishEnabled,\n locale,\n status,\n entryExists,\n}: LocaleOptionProps) => {\n const { formatMessage } = useIntl();\n\n if (!entryExists) {\n return formatMessage(\n {\n id: getTranslation('CMEditViewLocalePicker.locale.create'),\n defaultMessage: 'Create <bold>{locale}</bold> locale',\n },\n {\n bold: (locale: React.ReactNode) => <b>{locale}</b>,\n locale: locale.name,\n }\n );\n }\n\n return (\n <Flex width=\"100%\" gap={1} justifyContent=\"space-between\">\n <Typography>{locale.name}</Typography>\n {isDraftAndPublishEnabled ? (\n <Status\n display=\"flex\"\n paddingLeft=\"6px\"\n paddingRight=\"6px\"\n paddingTop=\"2px\"\n paddingBottom=\"2px\"\n size=\"S\"\n variant={statusVariants[status]}\n >\n <Typography tag=\"span\" variant=\"pi\" fontWeight=\"bold\">\n {capitalize(status)}\n </Typography>\n </Status>\n ) : null}\n </Flex>\n );\n};\n\nconst LocalePickerAction = ({\n document,\n meta,\n model,\n collectionType,\n documentId,\n}: HeaderActionProps) => {\n const { formatMessage } = useIntl();\n const [{ query }, setQuery] = useQueryParams<I18nBaseQuery>();\n const { hasI18n, canCreate, canRead } = useI18n();\n const { data: locales = [] } = useGetLocalesQuery();\n const currentDesiredLocale = query.plugins?.i18n?.locale;\n const { schema } = useDocument({\n model,\n collectionType,\n documentId,\n params: { locale: currentDesiredLocale },\n });\n\n const handleSelect = React.useCallback(\n (value: string) => {\n setQuery({\n plugins: {\n ...query.plugins,\n i18n: {\n locale: value,\n },\n },\n });\n },\n [query.plugins, setQuery]\n );\n\n React.useEffect(() => {\n if (!Array.isArray(locales) || !hasI18n) {\n return;\n }\n /**\n * Handle the case where the current locale query param doesn't exist\n * in the list of available locales, so we redirect to the default locale.\n */\n const doesLocaleExist = locales.find((loc) => loc.code === currentDesiredLocale);\n const defaultLocale = locales.find((locale) => locale.isDefault);\n if (!doesLocaleExist && defaultLocale?.code) {\n handleSelect(defaultLocale.code);\n }\n }, [handleSelect, hasI18n, locales, currentDesiredLocale]);\n\n const currentLocale = Array.isArray(locales)\n ? locales.find((locale) => locale.code === currentDesiredLocale)\n : undefined;\n\n const allCurrentLocales = [\n { status: getDocumentStatus(document, meta), locale: currentLocale?.code },\n ...(document?.localizations ?? []),\n ];\n\n if (!hasI18n || !Array.isArray(locales) || locales.length === 0) {\n return null;\n }\n\n const displayedLocales = locales.filter((locale) => {\n /**\n * If you can read we allow you to see the locale exists\n * otherwise the locale is hidden.\n */\n return canRead.includes(locale.code);\n });\n\n return {\n label: formatMessage({\n id: getTranslation('Settings.locales.modal.locales.label'),\n defaultMessage: 'Locales',\n }),\n options: displayedLocales.map((locale) => {\n const entryWithLocaleExists = allCurrentLocales.some((doc) => doc.locale === locale.code);\n\n const currentLocaleDoc = allCurrentLocales.find((doc) =>\n 'locale' in doc ? doc.locale === locale.code : false\n );\n\n const permissionsToCheck = currentLocaleDoc ? canRead : canCreate;\n\n return {\n disabled: !permissionsToCheck.includes(locale.code),\n value: locale.code,\n label: (\n <LocaleOption\n isDraftAndPublishEnabled={!!schema?.options?.draftAndPublish}\n locale={locale}\n status={currentLocaleDoc?.status}\n entryExists={entryWithLocaleExists}\n />\n ),\n startIcon: !entryWithLocaleExists ? <Plus /> : null,\n };\n }),\n customizeContent: () => currentLocale?.name,\n onSelect: handleSelect,\n value: currentLocale,\n };\n};\n\ntype UseDocument = typeof useDocument;\n\nconst getDocumentStatus = (\n document: ReturnType<UseDocument>['document'],\n meta: ReturnType<UseDocument>['meta']\n): 'draft' | 'published' | 'modified' => {\n const docStatus = document?.status;\n const statuses = meta?.availableStatus ?? [];\n\n /**\n * Creating an entry\n */\n if (!docStatus) {\n return 'draft';\n }\n\n /**\n * We're viewing a draft, but the document could have a published version\n */\n if (docStatus === 'draft' && statuses.find((doc) => doc.publishedAt !== null)) {\n return 'published';\n }\n\n return docStatus;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * FillFromAnotherLocaleAction\n * -----------------------------------------------------------------------------------------------*/\n\nconst FillFromAnotherLocaleAction = ({\n documentId,\n meta,\n model,\n collectionType,\n}: HeaderActionProps) => {\n const { formatMessage } = useIntl();\n const [{ query }] = useQueryParams<I18nBaseQuery>();\n const { hasI18n } = useI18n();\n const currentDesiredLocale = query.plugins?.i18n?.locale;\n const [localeSelected, setLocaleSelected] = React.useState<string | null>(null);\n const setValues = useForm('FillFromAnotherLocale', (state) => state.setValues);\n\n const { getDocument } = useDocumentActions();\n const { schema, components } = useDocument({\n model,\n documentId,\n collectionType,\n params: { locale: currentDesiredLocale },\n });\n const { data: locales = [] } = useGetLocalesQuery();\n\n const availableLocales = Array.isArray(locales)\n ? locales.filter((locale) => meta?.availableLocales.some((l) => l.locale === locale.code))\n : [];\n\n const fillFromLocale = (onClose: () => void) => async () => {\n const response = await getDocument({\n collectionType,\n model,\n documentId,\n params: { locale: localeSelected },\n });\n if (!response || !schema) {\n return;\n }\n\n const { data } = response;\n\n const cleanedData = cleanData(data, schema, components);\n\n setValues(cleanedData);\n\n onClose();\n };\n\n if (!hasI18n) {\n return null;\n }\n\n return {\n type: 'icon',\n icon: <Download />,\n disabled: availableLocales.length === 0,\n label: formatMessage({\n id: getTranslation('CMEditViewCopyLocale.copy-text'),\n defaultMessage: 'Fill in from another locale',\n }),\n dialog: {\n type: 'dialog',\n title: formatMessage({\n id: getTranslation('CMEditViewCopyLocale.dialog.title'),\n defaultMessage: 'Confirmation',\n }),\n content: ({ onClose }: { onClose: () => void }) => (\n <>\n <Dialog.Body>\n <Flex direction=\"column\" gap={3}>\n <WarningCircle width=\"24px\" height=\"24px\" fill=\"danger600\" />\n <Typography textAlign=\"center\">\n {formatMessage({\n id: getTranslation('CMEditViewCopyLocale.dialog.body'),\n defaultMessage:\n 'Your current content will be erased and filled by the content of the selected locale:',\n })}\n </Typography>\n <Field.Root width=\"100%\">\n <Field.Label>\n {formatMessage({\n id: getTranslation('CMEditViewCopyLocale.dialog.field.label'),\n defaultMessage: 'Locale',\n })}\n </Field.Label>\n <SingleSelect\n value={localeSelected}\n placeholder={formatMessage({\n id: getTranslation('CMEditViewCopyLocale.dialog.field.placeholder'),\n defaultMessage: 'Select one locale...',\n })}\n // @ts-expect-error – the DS will handle numbers, but we're not allowing the API.\n onChange={(value) => setLocaleSelected(value)}\n >\n {availableLocales.map((locale) => (\n <SingleSelectOption key={locale.code} value={locale.code}>\n {locale.name}\n </SingleSelectOption>\n ))}\n </SingleSelect>\n </Field.Root>\n </Flex>\n </Dialog.Body>\n <Dialog.Footer>\n <Flex gap={2} width=\"100%\">\n <Button flex=\"auto\" variant=\"tertiary\" onClick={onClose}>\n {formatMessage({\n id: getTranslation('CMEditViewCopyLocale.cancel-text'),\n defaultMessage: 'No, cancel',\n })}\n </Button>\n <Button flex=\"auto\" variant=\"success\" onClick={fillFromLocale(onClose)}>\n {formatMessage({\n id: getTranslation('CMEditViewCopyLocale.submit-text'),\n defaultMessage: 'Yes, fill in',\n })}\n </Button>\n </Flex>\n </Dialog.Footer>\n </>\n ),\n },\n };\n};\n\n/* -------------------------------------------------------------------------------------------------\n * DeleteLocaleAction\n * -----------------------------------------------------------------------------------------------*/\n\nconst DeleteLocaleAction: DocumentActionComponent = ({\n document,\n documentId,\n model,\n collectionType,\n}) => {\n const { formatMessage } = useIntl();\n const navigate = useNavigate();\n const { toggleNotification } = useNotification();\n const { delete: deleteAction } = useDocumentActions();\n const { hasI18n, canDelete } = useI18n();\n\n // Get the current locale object, using the URL instead of document so it works while creating\n const [{ query }] = useQueryParams<I18nBaseQuery>();\n const { data: locales = [] } = useGetLocalesQuery();\n const currentDesiredLocale = query.plugins?.i18n?.locale;\n const locale = !('error' in locales) && locales.find((loc) => loc.code === currentDesiredLocale);\n\n if (!hasI18n) {\n return null;\n }\n\n return {\n disabled:\n (document?.locale && !canDelete.includes(document.locale)) || !document || !document.id,\n position: ['header', 'table-row'],\n label: formatMessage(\n {\n id: getTranslation('actions.delete.label'),\n defaultMessage: 'Delete entry ({locale})',\n },\n { locale: locale && locale.name }\n ),\n icon: <StyledTrash />,\n variant: 'danger',\n dialog: {\n type: 'dialog',\n title: formatMessage({\n id: getTranslation('actions.delete.dialog.title'),\n defaultMessage: 'Confirmation',\n }),\n content: (\n <Flex direction=\"column\" gap={2}>\n <WarningCircle width=\"24px\" height=\"24px\" fill=\"danger600\" />\n <Typography tag=\"p\" variant=\"omega\" textAlign=\"center\">\n {formatMessage({\n id: getTranslation('actions.delete.dialog.body'),\n defaultMessage: 'Are you sure?',\n })}\n </Typography>\n </Flex>\n ),\n onConfirm: async () => {\n const unableToDelete =\n // We are unable to delete a collection type without a document ID\n // & unable to delete generally if there is no document locale\n (collectionType !== 'single-types' && !documentId) || !document?.locale;\n\n if (unableToDelete) {\n console.error(\n \"You're trying to delete a document without an id or locale, this is likely a bug with Strapi. Please open an issue.\"\n );\n\n toggleNotification({\n message: formatMessage({\n id: getTranslation('actions.delete.error'),\n defaultMessage: 'An error occurred while trying to delete the document locale.',\n }),\n type: 'danger',\n });\n\n return;\n }\n\n const res = await deleteAction({\n documentId,\n model,\n collectionType,\n params: { locale: document.locale },\n });\n\n if (!('error' in res)) {\n navigate({ pathname: `../${collectionType}/${model}` }, { replace: true });\n }\n },\n },\n };\n};\n\nexport type LocaleStatus = {\n locale: string;\n status: Modules.Documents.Params.PublicationStatus.Kind | 'modified';\n};\n\ninterface ExtendedDocumentActionProps extends DocumentActionProps {\n action?: 'bulk-publish' | 'bulk-unpublish';\n}\n\n/* -------------------------------------------------------------------------------------------------\n * BulkLocaleAction\n *\n * This component is used to handle bulk publish and unpublish actions on locales.\n * -----------------------------------------------------------------------------------------------*/\n\nconst BulkLocaleAction: DocumentActionComponent = ({\n document,\n documentId,\n model,\n collectionType,\n action,\n}: ExtendedDocumentActionProps) => {\n const locale = document?.locale ?? null;\n const [{ query }] = useQueryParams<{ status: 'draft' | 'published' }>();\n\n const params = React.useMemo(() => buildValidParams(query), [query]);\n const isOnPublishedTab = query.status === 'published';\n\n const { formatMessage } = useIntl();\n const { hasI18n, canPublish } = useI18n();\n const { toggleNotification } = useNotification();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n\n const [selectedRows, setSelectedRows] = React.useState<any[]>([]);\n const [isDraftRelationConfirmationOpen, setIsDraftRelationConfirmationOpen] =\n React.useState<boolean>(false);\n\n const { publishMany: publishManyAction, unpublishMany: unpublishManyAction } =\n useDocumentActions();\n\n const { schema, validate } = useDocument(\n {\n model,\n collectionType,\n documentId,\n params: {\n locale,\n },\n },\n {\n // No need to fetch the document, the data is already available in the `document` prop\n skip: true,\n }\n );\n\n const { data: localesMetadata = [] } = useGetLocalesQuery(hasI18n ? undefined : skipToken);\n\n const headers = [\n {\n label: formatMessage({\n id: 'global.name',\n defaultMessage: 'Name',\n }),\n name: 'name',\n },\n {\n label: formatMessage({\n id: getTranslation('CMEditViewBulkLocale.status'),\n defaultMessage: 'Status',\n }),\n name: 'status',\n },\n {\n label: formatMessage({\n id: getTranslation('CMEditViewBulkLocale.publication-status'),\n defaultMessage: 'Publication Status',\n }),\n name: 'publication-status',\n },\n ];\n\n // Extract the rows for the bulk locale publish modal and any validation\n // errors per locale\n const [rows, validationErrors] = React.useMemo(() => {\n if (!document) {\n return [[], {}];\n }\n\n const localizations = document.localizations ?? [];\n\n // Build the rows for the bulk locale publish modal by combining the current\n // document with all the available locales from the document meta\n const locales: LocaleStatus[] = localizations.map((doc: any) => {\n const { locale, status } = doc;\n return { locale, status };\n });\n\n // Add the current document locale\n locales.unshift({\n locale: document.locale,\n status: document.status,\n });\n\n // Build the validation errors for each locale.\n const allDocuments = [document, ...localizations];\n const errors = allDocuments.reduce<FormErrors>((errs, document) => {\n if (!document) {\n return errs;\n }\n\n // Validate each locale entry via the useDocument validate function and store any errors in a dictionary\n const validation = validate(document as Modules.Documents.AnyDocument);\n if (validation !== null) {\n errs[document.locale] = validation;\n }\n return errs;\n }, {});\n\n return [locales, errors];\n }, [document, validate]);\n\n const isBulkPublish = action === 'bulk-publish';\n const localesForAction = selectedRows.reduce((acc: string[], selectedRow: LocaleStatus) => {\n const isValidLocale =\n // Validation errors are irrelevant if we are trying to unpublish\n !isBulkPublish || !Object.keys(validationErrors).includes(selectedRow.locale);\n\n const shouldAddLocale = isBulkPublish\n ? selectedRow.status !== 'published' && isValidLocale\n : selectedRow.status !== 'draft' && isValidLocale;\n\n if (shouldAddLocale) {\n acc.push(selectedRow.locale);\n }\n\n return acc;\n }, []);\n\n // TODO skipping this for now as there is a bug with the draft relation count that will be worked on separately\n // see https://www.notion.so/strapi/Count-draft-relations-56901b492efb45ab90d42fe975b32bd8?pvs=4\n const enableDraftRelationsCount = false;\n const {\n data: draftRelationsCount = 0,\n isLoading: isDraftRelationsLoading,\n error: isDraftRelationsError,\n } = useGetManyDraftRelationCountQuery(\n {\n model,\n documentIds: [documentId!],\n locale: localesForAction,\n },\n {\n skip: !enableDraftRelationsCount || !documentId || localesForAction.length === 0,\n }\n );\n\n React.useEffect(() => {\n if (isDraftRelationsError) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(isDraftRelationsError),\n });\n }\n }, [isDraftRelationsError, toggleNotification, formatAPIError]);\n\n if (!schema?.options?.draftAndPublish) {\n return null;\n }\n\n if (!hasI18n) {\n return null;\n }\n\n if (!documentId) {\n return null;\n }\n\n // This document action can be enabled given that draft and publish and i18n are\n // enabled and we can publish the current locale.\n\n const publish = async () => {\n await publishManyAction({\n model,\n documentIds: [documentId],\n params: {\n ...params,\n locale: localesForAction,\n },\n });\n\n setSelectedRows([]);\n };\n\n const unpublish = async () => {\n await unpublishManyAction({\n model,\n documentIds: [documentId],\n params: {\n ...params,\n locale: localesForAction,\n },\n });\n\n setSelectedRows([]);\n };\n\n const handleAction = async () => {\n if (draftRelationsCount > 0) {\n setIsDraftRelationConfirmationOpen(true);\n } else if (isBulkPublish) {\n await publish();\n } else {\n await unpublish();\n }\n };\n\n if (isDraftRelationConfirmationOpen) {\n return {\n label: formatMessage({\n id: 'app.components.ConfirmDialog.title',\n defaultMessage: 'Confirmation',\n }),\n variant: 'danger',\n dialog: {\n onCancel: () => {\n setIsDraftRelationConfirmationOpen(false);\n },\n onConfirm: async () => {\n await publish();\n\n setIsDraftRelationConfirmationOpen(false);\n },\n type: 'dialog',\n title: formatMessage({\n id: getTranslation('actions.publish.dialog.title'),\n defaultMessage: 'Confirmation',\n }),\n content: (\n <Flex direction=\"column\" alignItems=\"center\" gap={2}>\n <WarningCircle width=\"2.4rem\" height=\"2.4rem\" fill=\"danger600\" />\n <Typography textAlign=\"center\">\n {formatMessage({\n id: getTranslation('CMEditViewBulkLocale.draft-relation-warning'),\n defaultMessage:\n 'Some locales are related to draft entries. Publishing them could leave broken links in your app.',\n })}\n </Typography>\n <Typography textAlign=\"center\">\n {formatMessage({\n id: getTranslation('CMEditViewBulkLocale.continue-confirmation'),\n defaultMessage: 'Are you sure you want to continue?',\n })}\n </Typography>\n </Flex>\n ),\n },\n };\n }\n\n const hasPermission = selectedRows\n .map(({ locale }) => locale)\n .every((locale) => canPublish.includes(locale));\n\n return {\n label: formatMessage({\n id: getTranslation(`CMEditViewBulkLocale.${isBulkPublish ? 'publish' : 'unpublish'}-title`),\n defaultMessage: `${isBulkPublish ? 'Publish' : 'Unpublish'} Multiple Locales`,\n }),\n variant: isBulkPublish ? 'secondary' : 'danger',\n icon: isBulkPublish ? <ListPlus /> : <Cross />,\n disabled: isOnPublishedTab || canPublish.length === 0,\n position: ['panel'],\n dialog: {\n type: 'modal',\n title: formatMessage({\n id: getTranslation(`CMEditViewBulkLocale.${isBulkPublish ? 'publish' : 'unpublish'}-title`),\n defaultMessage: `${isBulkPublish ? 'Publish' : 'Unpublish'} Multiple Locales`,\n }),\n content: () => {\n return (\n <Table.Root\n headers={headers}\n rows={rows.map((row) => ({\n ...row,\n id: row.locale,\n }))}\n selectedRows={selectedRows}\n onSelectedRowsChange={(tableSelectedRows) => setSelectedRows(tableSelectedRows)}\n >\n <BulkLocaleActionModal\n validationErrors={validationErrors}\n headers={headers}\n rows={rows}\n localesMetadata={localesMetadata as Locale[]}\n action={action ?? 'bulk-publish'}\n />\n </Table.Root>\n );\n },\n footer: () => (\n <Modal.Footer justifyContent=\"flex-end\">\n <Button\n loading={isDraftRelationsLoading}\n disabled={!hasPermission || localesForAction.length === 0}\n variant=\"default\"\n onClick={handleAction}\n >\n {formatMessage({\n id: isBulkPublish ? 'app.utils.publish' : 'app.utils.unpublish',\n defaultMessage: isBulkPublish ? 'Publish' : 'Unpublish',\n })}\n </Button>\n </Modal.Footer>\n ),\n },\n };\n};\n\n/* -------------------------------------------------------------------------------------------------\n * BulkLocalePublishAction\n * -----------------------------------------------------------------------------------------------*/\nconst BulkLocalePublishAction: DocumentActionComponent = (props: ExtendedDocumentActionProps) => {\n return BulkLocaleAction({ action: 'bulk-publish', ...props });\n};\n\n/* -------------------------------------------------------------------------------------------------\n * BulkLocaleUnpublishAction\n * -----------------------------------------------------------------------------------------------*/\nconst BulkLocaleUnpublishAction: DocumentActionComponent = (props: ExtendedDocumentActionProps) => {\n return BulkLocaleAction({ action: 'bulk-unpublish', ...props });\n};\n\n/**\n * Because the icon system is completely broken, we have to do\n * this to remove the fill from the cog.\n */\nconst StyledTrash = styled(Trash)`\n path {\n fill: currentColor;\n }\n`;\n\nexport {\n BulkLocalePublishAction,\n BulkLocaleUnpublishAction,\n DeleteLocaleAction,\n LocalePickerAction,\n FillFromAnotherLocaleAction,\n};\n","import * as React from 'react';\n\nimport { Typography } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { useI18n } from '../hooks/useI18n';\nimport { getTranslation } from '../utils/getTranslation';\n\nconst Emphasis = (chunks: React.ReactNode) => {\n return (\n <Typography fontWeight=\"semiBold\" textColor=\"danger500\">\n {chunks}\n </Typography>\n );\n};\n\nconst DeleteModalAdditionalInfo = () => {\n const { hasI18n } = useI18n();\n const { formatMessage } = useIntl();\n\n if (!hasI18n) {\n return null;\n }\n\n return (\n <Typography textColor=\"danger500\">\n {formatMessage(\n {\n id: getTranslation('Settings.list.actions.deleteAdditionalInfos'),\n defaultMessage:\n 'This will delete the active locale versions <em>(from Internationalization)</em>',\n },\n {\n em: Emphasis,\n }\n )}\n </Typography>\n );\n};\n\nconst PublishModalAdditionalInfo = () => {\n const { hasI18n } = useI18n();\n const { formatMessage } = useIntl();\n\n if (!hasI18n) {\n return null;\n }\n\n return (\n <Typography textColor=\"danger500\">\n {formatMessage(\n {\n id: getTranslation('Settings.list.actions.publishAdditionalInfos'),\n defaultMessage:\n 'This will publish the active locale versions <em>(from Internationalization)</em>',\n },\n {\n em: Emphasis,\n }\n )}\n </Typography>\n );\n};\n\nconst UnpublishModalAdditionalInfo = () => {\n const { hasI18n } = useI18n();\n const { formatMessage } = useIntl();\n\n if (!hasI18n) {\n return null;\n }\n\n return (\n <Typography textColor=\"danger500\">\n {formatMessage(\n {\n id: getTranslation('Settings.list.actions.unpublishAdditionalInfos'),\n defaultMessage:\n 'This will unpublish the active locale versions <em>(from Internationalization)</em>',\n },\n {\n em: Emphasis,\n }\n )}\n </Typography>\n );\n};\n\nexport { DeleteModalAdditionalInfo, PublishModalAdditionalInfo, UnpublishModalAdditionalInfo };\n","import * as React from 'react';\n\nimport { useQueryParams } from '@strapi/admin/strapi-admin';\nimport { SingleSelect, SingleSelectOption } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { useI18n } from '../hooks/useI18n';\nimport { useGetLocalesQuery } from '../services/locales';\nimport { getTranslation } from '../utils/getTranslation';\n\nimport type { I18nBaseQuery } from '../types';\n\ninterface Query extends I18nBaseQuery {\n page?: number;\n}\n\nconst LocalePicker = () => {\n const { formatMessage } = useIntl();\n const [{ query }, setQuery] = useQueryParams<Query>();\n\n const { hasI18n, canRead, canCreate } = useI18n();\n const { data: locales = [] } = useGetLocalesQuery(undefined, {\n skip: !hasI18n,\n });\n\n const handleChange = React.useCallback(\n (code: string, replace = false) => {\n setQuery(\n {\n page: 1,\n plugins: { ...query.plugins, i18n: { locale: code } },\n },\n 'push',\n replace\n );\n },\n [query.plugins, setQuery]\n );\n\n React.useEffect(() => {\n if (!Array.isArray(locales) || !hasI18n) {\n return;\n }\n /**\n * Handle the case where the current locale query param doesn't exist\n * in the list of available locales, so we redirect to the default locale.\n */\n const currentDesiredLocale = query.plugins?.i18n?.locale;\n const doesLocaleExist = locales.find((loc) => loc.code === currentDesiredLocale);\n const defaultLocale = locales.find((locale) => locale.isDefault);\n if (!doesLocaleExist && defaultLocale?.code) {\n handleChange(defaultLocale.code, true);\n }\n }, [hasI18n, handleChange, locales, query.plugins?.i18n?.locale]);\n\n if (!hasI18n || !Array.isArray(locales) || locales.length === 0) {\n return null;\n }\n\n const displayedLocales = locales.filter((locale) => {\n /**\n * If you can create or read we allow you to see the locale exists\n * this is because in the ListView, you may be able to create a new entry\n * in a locale you can't read.\n */\n return canCreate.includes(locale.code) || canRead.includes(locale.code);\n });\n\n return (\n <SingleSelect\n size=\"S\"\n aria-label={formatMessage({\n id: getTranslation('actions.select-locale'),\n defaultMessage: 'Select locale',\n })}\n value={query.plugins?.i18n?.locale || locales.find((locale) => locale.isDefault)?.code}\n // @ts-expect-error – This can be removed in V2 of the DS.\n onChange={handleChange}\n >\n {displayedLocales.map((locale) => (\n <SingleSelectOption key={locale.id} value={locale.code}>\n {locale.name}\n </SingleSelectOption>\n ))}\n </SingleSelect>\n );\n};\n\nexport { LocalePicker };\n","export const PERMISSIONS = {\n accessMain: [{ action: 'plugin::i18n.locale.read', subject: null }],\n create: [{ action: 'plugin::i18n.locale.create', subject: null }],\n delete: [{ action: 'plugin::i18n.locale.delete', subject: null }],\n update: [{ action: 'plugin::i18n.locale.update', subject: null }],\n read: [{ action: 'plugin::i18n.locale.read', subject: null }],\n};\n","/* eslint-disable check-file/filename-naming-convention */\nimport * as React from 'react';\n\nimport { Flex, VisuallyHidden } from '@strapi/design-system';\nimport { Earth, EarthStriked } from '@strapi/icons';\nimport { MessageDescriptor, useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { getTranslation } from '../utils/getTranslation';\n\nimport type { EditFieldLayout, EditLayout } from '@strapi/content-manager/strapi-admin';\n\ninterface MutateEditViewArgs {\n layout: EditLayout;\n}\n\nconst mutateEditViewHook = ({ layout }: MutateEditViewArgs): MutateEditViewArgs => {\n // If i18n isn't explicitly enabled on the content type, then no field can be localized\n if (\n !('i18n' in layout.options) ||\n (typeof layout.options.i18n === 'object' &&\n layout.options.i18n !== null &&\n 'localized' in layout.options.i18n &&\n !layout.options.i18n.localized)\n ) {\n return { layout };\n }\n\n const components = Object.entries(layout.components).reduce<EditLayout['components']>(\n (acc, [key, componentLayout]) => {\n return {\n ...acc,\n [key]: {\n ...componentLayout,\n layout: componentLayout.layout.map((row) => row.map(addLabelActionToField)),\n },\n };\n },\n {}\n );\n\n return {\n layout: {\n ...layout,\n components,\n layout: layout.layout.map((panel) => panel.map((row) => row.map(addLabelActionToField))),\n },\n } satisfies Pick<MutateEditViewArgs, 'layout'>;\n};\n\nconst addLabelActionToField = (field: EditFieldLayout) => {\n const isFieldLocalized = doesFieldHaveI18nPluginOpt(field.attribute.pluginOptions)\n ? field.attribute.pluginOptions.i18n.localized\n : true || ['uid', 'relation'].includes(field.attribute.type);\n\n const labelActionProps = {\n title: {\n id: isFieldLocalized\n ? getTranslation('Field.localized')\n : getTranslation('Field.not-localized'),\n defaultMessage: isFieldLocalized\n ? 'This value is unique for the selected locale'\n : 'This value is the same across all locales',\n },\n icon: isFieldLocalized ? <Earth /> : <EarthStriked />,\n };\n\n return {\n ...field,\n labelAction: <LabelAction {...labelActionProps} />,\n };\n};\n\nconst doesFieldHaveI18nPluginOpt = (\n pluginOpts?: object\n): pluginOpts is { i18n: { localized: boolean } } => {\n if (!pluginOpts) {\n return false;\n }\n\n return (\n 'i18n' in pluginOpts &&\n typeof pluginOpts.i18n === 'object' &&\n pluginOpts.i18n !== null &&\n 'localized' in pluginOpts.i18n\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * LabelAction\n * -----------------------------------------------------------------------------------------------*/\n\ninterface LabelActionProps {\n title: MessageDescriptor;\n icon: React.ReactNode;\n}\n\nconst LabelAction = ({ title, icon }: LabelActionProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <Span tag=\"span\">\n <VisuallyHidden tag=\"span\">{formatMessage(title)}</VisuallyHidden>\n {React.cloneElement(icon as React.ReactElement, {\n 'aria-hidden': true,\n focusable: false, // See: https://allyjs.io/tutorials/focusing-in-svg.html#making-svg-elements-focusable\n })}\n </Span>\n );\n};\n\nconst Span = styled(Flex)`\n svg {\n width: 12px;\n height: 12px;\n\n fill: ${({ theme }) => theme.colors.neutral500};\n\n path {\n fill: ${({ theme }) => theme.colors.neutral500};\n }\n }\n`;\n\nexport { mutateEditViewHook };\n","import { Box, Flex, Popover, Typography, useCollator, Button } from '@strapi/design-system';\nimport { CaretDown } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { Locale } from '../../../shared/contracts/locales';\nimport { useGetLocalesQuery } from '../services/locales';\n\ninterface LocaleListCellProps {\n localizations: { locale: string }[];\n locale: string;\n}\n\nconst LocaleListCell = ({ locale: currentLocale, localizations }: LocaleListCellProps) => {\n const { locale: language } = useIntl();\n const { data: locales = [] } = useGetLocalesQuery();\n const formatter = useCollator(language, {\n sensitivity: 'base',\n });\n\n if (!Array.isArray(locales) || !localizations) {\n return null;\n }\n\n const availableLocales = localizations.map((loc) => loc.locale);\n\n const localesForDocument = locales\n .reduce<Locale[]>((acc, locale) => {\n const createdLocale = [currentLocale, ...availableLocales].find((loc) => {\n return loc === locale.code;\n });\n\n if (createdLocale) {\n acc.push(locale);\n }\n\n return acc;\n }, [])\n .map((locale) => {\n if (locale.isDefault) {\n return `${locale.name} (default)`;\n }\n\n return locale.name;\n })\n .toSorted((a, b) => formatter.compare(a, b));\n\n return (\n <Popover.Root>\n <Popover.Trigger>\n <Button variant=\"ghost\" type=\"button\" onClick={(e) => e.stopPropagation()}>\n <Flex minWidth=\"100%\" alignItems=\"center\" justifyContent=\"center\" fontWeight=\"regular\">\n <Typography textColor=\"neutral800\" ellipsis marginRight={2}>\n {localesForDocument.join(', ')}\n </Typography>\n <Flex>\n <CaretDown width=\"1.2rem\" height=\"1.2rem\" />\n </Flex>\n </Flex>\n </Button>\n </Popover.Trigger>\n <Popover.Content sideOffset={16}>\n <ul>\n {localesForDocument.map((name) => (\n <Box key={name} padding={3} tag=\"li\">\n <Typography>{name}</Typography>\n </Box>\n ))}\n </ul>\n </Popover.Content>\n </Popover.Root>\n );\n};\n\nexport { LocaleListCell };\nexport type { LocaleListCellProps };\n","/* eslint-disable check-file/filename-naming-convention */\nimport { LocaleListCell } from '../components/LocaleListCell';\nimport { doesPluginOptionsHaveI18nLocalized } from '../utils/fields';\nimport { getTranslation } from '../utils/getTranslation';\n\nimport type { ListFieldLayout, ListLayout } from '@strapi/content-manager/strapi-admin';\n\n/* -------------------------------------------------------------------------------------------------\n * addColumnToTableHook\n * -----------------------------------------------------------------------------------------------*/\ninterface AddColumnToTableHookArgs {\n layout: ListLayout;\n displayedHeaders: ListFieldLayout[];\n}\n\nconst addColumnToTableHook = ({ displayedHeaders, layout }: AddColumnToTableHookArgs) => {\n const { options } = layout;\n\n const isFieldLocalized = doesPluginOptionsHaveI18nLocalized(options)\n ? options.i18n.localized\n : false;\n\n if (!isFieldLocalized) {\n return { displayedHeaders, layout };\n }\n\n return {\n displayedHeaders: [\n ...displayedHeaders,\n {\n attribute: { type: 'string' },\n label: {\n id: getTranslation('list-view.table.header.label'),\n defaultMessage: 'Available in',\n },\n searchable: false,\n sortable: false,\n name: 'locales',\n // @ts-expect-error – ID is seen as number | string; this will change when we move the type over.\n cellFormatter: (props, _header, meta) => <LocaleListCell {...props} {...meta} />,\n },\n ],\n layout,\n };\n};\n\nexport { addColumnToTableHook };\n","import { Schema } from '@strapi/types';\n/* -------------------------------------------------------------------------------------------------\n * addLocaleToReleasesHook\n * -----------------------------------------------------------------------------------------------*/\ninterface AddLocaleToReleasesHookArgs {\n displayedHeaders: {\n key: string;\n fieldSchema: Schema.Attribute.Kind | 'custom';\n metadatas: {\n label: { id: string; defaultMessage: string };\n searchable: boolean;\n sortable: boolean;\n };\n name: string;\n }[];\n hasI18nEnabled: boolean;\n}\n\nconst addLocaleToReleasesHook = ({ displayedHeaders = [] }: AddLocaleToReleasesHookArgs) => {\n return {\n displayedHeaders: [\n ...displayedHeaders,\n {\n label: {\n id: 'content-releases.page.ReleaseDetails.table.header.label.locale',\n defaultMessage: 'locale',\n },\n name: 'locale',\n },\n ],\n hasI18nEnabled: true,\n };\n};\n\nexport { addLocaleToReleasesHook };\n","import get from 'lodash/get';\n\nimport type { Middleware } from '@reduxjs/toolkit';\nimport type { Store } from '@strapi/admin/strapi-admin';\n\nconst extendCTBAttributeInitialDataMiddleware: () => Middleware<\n object,\n ReturnType<Store['getState']>\n> = () => {\n return ({ getState }) =>\n (next) =>\n (action) => {\n const enhanceAction = () => {\n // the block here is to catch the error when trying to access the state\n // of the ctb when the plugin is not mounted\n try {\n const store = getState();\n\n const hasi18nEnabled = get(\n store,\n [\n 'content-type-builder_dataManagerProvider',\n 'modifiedData',\n 'contentType',\n 'schema',\n 'pluginOptions',\n 'i18n',\n 'localized',\n ],\n false\n );\n\n if (hasi18nEnabled) {\n const pluginOptions = action.options\n ? { ...action.options.pluginOptions, i18n: { localized: true } }\n : { i18n: { localized: true } };\n\n return next({\n ...action,\n options: {\n pluginOptions,\n },\n });\n }\n\n return next(action);\n } catch (err) {\n return next(action);\n }\n };\n\n if (\n action.type === 'ContentTypeBuilder/FormModal/SET_ATTRIBUTE_DATA_SCHEMA' &&\n action.forTarget === 'contentType' &&\n !['relation', 'component'].includes(action.attributeType) &&\n !action.isEditing\n ) {\n return enhanceAction();\n }\n\n if (\n action.type === 'ContentTypeBuilder/FormModal/SET_CUSTOM_FIELD_DATA_SCHEMA' &&\n action.forTarget === 'contentType' &&\n !action.isEditing\n ) {\n return enhanceAction();\n }\n\n if (\n (action.type ===\n 'ContentTypeBuilder/FormModal/RESET_PROPS_AND_SET_FORM_FOR_ADDING_AN_EXISTING_COMPO' ||\n action.type === 'ContentTypeBuilder/FormModal/RESET_PROPS_AND_SAVE_CURRENT_DATA') &&\n action.forTarget === 'contentType'\n ) {\n return enhanceAction();\n }\n\n return next(action);\n };\n};\n\nexport { extendCTBAttributeInitialDataMiddleware };\n","import type { Middleware } from '@reduxjs/toolkit';\nimport type { Store } from '@strapi/admin/strapi-admin';\n\nconst extendCTBInitialDataMiddleware: () => Middleware<\n object,\n ReturnType<Store['getState']>\n> = () => {\n return () => (next) => (action) => {\n if (\n action.type === 'ContentTypeBuilder/FormModal/SET_DATA_TO_EDIT' &&\n action.modalType === 'contentType'\n ) {\n const i18n = { localized: false };\n\n const pluginOptions = action.data.pluginOptions\n ? { ...action.data.pluginOptions, i18n }\n : { i18n };\n\n const data = { ...action.data, pluginOptions };\n\n if (action.actionType === 'create') {\n return next({ ...action, data });\n }\n\n // Override the action if the pluginOption config does not contain i18n\n // In this case we need to set the proper initialData shape\n if (!action.data.pluginOptions?.i18n?.localized) {\n return next({ ...action, data });\n }\n }\n\n // action is not the one we want to override\n return next(action);\n };\n};\n\nexport { extendCTBInitialDataMiddleware };\n","/* eslint-disable check-file/filename-naming-convention */\nimport * as qs from 'qs';\nimport { matchPath } from 'react-router-dom';\n\nimport type { RBACMiddleware } from '@strapi/admin/strapi-admin';\n\nconst localeMiddleware: RBACMiddleware = (ctx) => (next) => (permissions) => {\n const match = matchPath('/content-manager/:collectionType/:model?/:id', ctx.pathname);\n\n if (!match) {\n return next(permissions);\n }\n\n const search = qs.parse(ctx.search);\n\n if (typeof search !== 'object') {\n return next(permissions);\n }\n\n if (!('plugins' in search && typeof search.plugins === 'object')) {\n return next(permissions);\n }\n\n if (\n !(\n 'i18n' in search.plugins &&\n typeof search.plugins.i18n === 'object' &&\n !Array.isArray(search.plugins.i18n)\n )\n ) {\n return next(permissions);\n }\n\n const { locale } = search.plugins.i18n;\n\n if (typeof locale !== 'string') {\n return next(permissions);\n }\n\n const revisedPermissions = permissions.filter(\n (permission) =>\n !permission.properties?.locales || permission.properties.locales.includes(locale)\n );\n\n return next(revisedPermissions);\n};\n\nexport { localeMiddleware };\n","type TradOptions = Record<string, string>;\n\nconst prefixPluginTranslations = (trad: TradOptions, pluginId: string): TradOptions => {\n if (!pluginId) {\n throw new TypeError(\"pluginId can't be empty\");\n }\n return Object.keys(trad).reduce((acc, current) => {\n acc[`${pluginId}.${current}`] = trad[current];\n return acc;\n }, {} as TradOptions);\n};\n\nexport { prefixPluginTranslations };\n","import omit from 'lodash/omit';\n\nimport { LOCALIZED_FIELDS, doesPluginOptionsHaveI18nLocalized } from './fields';\n\nimport type { Schema } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * mutateCTBContentTypeSchema\n * -----------------------------------------------------------------------------------------------*/\n\nconst mutateCTBContentTypeSchema = (\n nextSchema: Schema.ContentType,\n prevSchema?: {\n apiID?: string;\n schema?: Schema.ContentType;\n uid?: string;\n }\n) => {\n // Don't perform mutations components\n if (!doesPluginOptionsHaveI18nLocalized(nextSchema.pluginOptions)) {\n return nextSchema;\n }\n\n const isNextSchemaLocalized = nextSchema.pluginOptions.i18n.localized;\n const isPrevSchemaLocalized = doesPluginOptionsHaveI18nLocalized(\n prevSchema?.schema?.pluginOptions\n )\n ? prevSchema?.schema?.pluginOptions.i18n.localized\n : false;\n\n // No need to perform modification on the schema, if the i18n feature was not changed\n // at the ct level\n if (isNextSchemaLocalized && isPrevSchemaLocalized) {\n return nextSchema;\n }\n\n if (isNextSchemaLocalized) {\n const attributes = addLocalisationToFields(nextSchema.attributes);\n\n return { ...nextSchema, attributes };\n }\n\n // Remove the i18n object from the pluginOptions\n if (!isNextSchemaLocalized) {\n const pluginOptions = omit(nextSchema.pluginOptions, 'i18n');\n const attributes = disableAttributesLocalisation(nextSchema.attributes);\n\n return { ...nextSchema, pluginOptions, attributes };\n }\n\n return nextSchema;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * addLocalisationToFields\n * -----------------------------------------------------------------------------------------------*/\n\nconst addLocalisationToFields = (attributes: Schema.ContentType['attributes']) =>\n Object.keys(attributes).reduce<Schema.ContentType['attributes']>((acc, current) => {\n const currentAttribute = attributes[current];\n\n if (LOCALIZED_FIELDS.includes(currentAttribute.type)) {\n const i18n = { localized: true };\n\n const pluginOptions = currentAttribute.pluginOptions\n ? { ...currentAttribute.pluginOptions, i18n }\n : { i18n };\n\n acc[current] = { ...currentAttribute, pluginOptions };\n\n return acc;\n }\n\n acc[current] = currentAttribute;\n\n return acc;\n }, {});\n\n/* -------------------------------------------------------------------------------------------------\n * disableAttributesLocalisation\n * -----------------------------------------------------------------------------------------------*/\n\ntype OmitByPath<T extends object, K extends string[]> = Pick<T, Exclude<keyof T, K[number]>>;\n\nconst disableAttributesLocalisation = (attributes: Schema.ContentType['attributes']) =>\n Object.keys(attributes).reduce<\n Record<string, OmitByPath<Schema.ContentType['attributes'][string], ['pluginOptions', 'i18n']>>\n >((acc, current) => {\n acc[current] = omit(attributes[current], 'pluginOptions.i18n');\n\n return acc;\n }, {});\n\nexport { mutateCTBContentTypeSchema };\n","import get from 'lodash/get';\nimport * as yup from 'yup';\n\nimport { CheckboxConfirmation } from './components/CheckboxConfirmation';\nimport {\n BulkLocalePublishAction,\n BulkLocaleUnpublishAction,\n DeleteLocaleAction,\n LocalePickerAction,\n FillFromAnotherLocaleAction,\n} from './components/CMHeaderActions';\nimport {\n DeleteModalAdditionalInfo,\n PublishModalAdditionalInfo,\n UnpublishModalAdditionalInfo,\n} from './components/CMListViewModalsAdditionalInformation';\nimport { LocalePicker } from './components/LocalePicker';\nimport { PERMISSIONS } from './constants';\nimport { mutateEditViewHook } from './contentManagerHooks/editView';\nimport { addColumnToTableHook } from './contentManagerHooks/listView';\nimport { addLocaleToReleasesHook } from './contentReleasesHooks/releaseDetailsView';\nimport { extendCTBAttributeInitialDataMiddleware } from './middlewares/extendCTBAttributeInitialData';\nimport { extendCTBInitialDataMiddleware } from './middlewares/extendCTBInitialData';\nimport { localeMiddleware } from './middlewares/rbac-middleware';\nimport { pluginId } from './pluginId';\nimport { i18nApi } from './services/api';\nimport { LOCALIZED_FIELDS } from './utils/fields';\nimport { getTranslation } from './utils/getTranslation';\nimport { prefixPluginTranslations } from './utils/prefixPluginTranslations';\nimport { mutateCTBContentTypeSchema } from './utils/schemas';\n\nimport type { DocumentActionComponent } from '@strapi/content-manager/strapi-admin';\n\n// eslint-disable-next-line import/no-default-export\nexport default {\n register(app: any) {\n app.addMiddlewares([extendCTBAttributeInitialDataMiddleware, extendCTBInitialDataMiddleware]);\n app.addMiddlewares([() => i18nApi.middleware]);\n app.addReducers({\n [i18nApi.reducerPath]: i18nApi.reducer,\n });\n app.addRBACMiddleware([localeMiddleware]);\n app.registerPlugin({\n id: pluginId,\n name: pluginId,\n });\n },\n bootstrap(app: any) {\n // // Hook that adds a column into the CM's LV table\n app.registerHook('Admin/CM/pages/ListView/inject-column-in-table', addColumnToTableHook);\n app.registerHook('Admin/CM/pages/EditView/mutate-edit-view-layout', mutateEditViewHook);\n // Hooks that checks if the locale is present in the release\n app.registerHook(\n 'ContentReleases/pages/ReleaseDetails/add-locale-in-releases',\n addLocaleToReleasesHook\n );\n\n // Add the settings link\n app.addSettingsLink('global', {\n intlLabel: {\n id: getTranslation('plugin.name'),\n defaultMessage: 'Internationalization',\n },\n id: 'internationalization',\n to: 'internationalization',\n Component: () =>\n import('./pages/SettingsPage').then((mod) => ({ default: mod.ProtectedSettingsPage })),\n permissions: PERMISSIONS.accessMain,\n });\n\n const contentManager = app.getPlugin('content-manager');\n\n contentManager.apis.addDocumentHeaderAction([LocalePickerAction, FillFromAnotherLocaleAction]);\n contentManager.apis.addDocumentAction((actions: DocumentActionComponent[]) => {\n const indexOfDeleteAction = actions.findIndex((action) => action.type === 'delete');\n actions.splice(indexOfDeleteAction, 0, DeleteLocaleAction);\n return actions;\n });\n\n contentManager.apis.addDocumentAction((actions: DocumentActionComponent[]) => {\n // When enabled the bulk locale publish action should be the first action\n // in 'More Document Actions' and therefore the third action in the array\n actions.splice(2, 0, BulkLocalePublishAction);\n actions.splice(5, 0, BulkLocaleUnpublishAction);\n return actions;\n });\n\n contentManager.injectComponent('listView', 'actions', {\n name: 'i18n-locale-filter',\n Component: LocalePicker,\n });\n\n contentManager.injectComponent('listView', 'publishModalAdditionalInfos', {\n name: 'i18n-publish-bullets-in-modal',\n Component: PublishModalAdditionalInfo,\n });\n\n contentManager.injectComponent('listView', 'unpublishModalAdditionalInfos', {\n name: 'i18n-unpublish-bullets-in-modal',\n Component: UnpublishModalAdditionalInfo,\n });\n\n contentManager.injectComponent('listView', 'deleteModalAdditionalInfos', {\n name: 'i18n-delete-bullets-in-modal',\n Component: DeleteModalAdditionalInfo,\n });\n\n const ctbPlugin = app.getPlugin('content-type-builder');\n\n if (ctbPlugin) {\n const ctbFormsAPI = ctbPlugin.apis.forms;\n ctbFormsAPI.addContentTypeSchemaMutation(mutateCTBContentTypeSchema);\n ctbFormsAPI.components.add({ id: 'checkboxConfirmation', component: CheckboxConfirmation });\n\n ctbFormsAPI.extendContentType({\n validator: () => ({\n i18n: yup.object().shape({\n localized: yup.bool(),\n }),\n }),\n form: {\n advanced() {\n return [\n {\n name: 'pluginOptions.i18n.localized',\n description: {\n id: getTranslation('plugin.schema.i18n.localized.description-content-type'),\n defaultMessage: 'Allows translating an entry into different languages',\n },\n type: 'checkboxConfirmation',\n intlLabel: {\n id: getTranslation('plugin.schema.i18n.localized.label-content-type'),\n defaultMessage: 'Localization',\n },\n },\n ];\n },\n },\n });\n\n ctbFormsAPI.extendFields(LOCALIZED_FIELDS, {\n form: {\n advanced({ contentTypeSchema, forTarget, type, step }: any) {\n if (forTarget !== 'contentType') {\n return [];\n }\n\n const hasI18nEnabled = get(\n contentTypeSchema,\n ['schema', 'pluginOptions', 'i18n', 'localized'],\n false\n );\n\n if (!hasI18nEnabled) {\n return [];\n }\n\n if (type === 'component' && step === '1') {\n return [];\n }\n\n return [\n {\n name: 'pluginOptions.i18n.localized',\n description: {\n id: getTranslation('plugin.schema.i18n.localized.description-field'),\n defaultMessage: 'The field can have different values in each locale',\n },\n type: 'checkbox',\n intlLabel: {\n id: getTranslation('plugin.schema.i18n.localized.label-field'),\n defaultMessage: 'Enable localization for this field',\n },\n },\n ];\n },\n },\n });\n }\n },\n async registerTrads({ locales }: { locales: string[] }) {\n const importedTrads = await Promise.all(\n locales.map((locale) => {\n return import(`./translations/${locale}.json`)\n .then(({ default: data }) => {\n return {\n data: prefixPluginTranslations(data, pluginId),\n locale,\n };\n })\n .catch(() => {\n return {\n data: {},\n locale,\n };\n });\n })\n );\n\n return Promise.resolve(importedTrads);\n },\n};\n"],"names":["value","useDocument","index","locale","useDocumentActions","document","pluginId"],"mappings":"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"}