@strapi/admin 5.57.0 → 5.59.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (415) hide show
  1. package/dist/admin/admin/src/StrapiApp.js.map +1 -1
  2. package/dist/admin/admin/src/StrapiApp.mjs.map +1 -1
  3. package/dist/admin/admin/src/components/ConfirmDialog.js +10 -9
  4. package/dist/admin/admin/src/components/ConfirmDialog.js.map +1 -1
  5. package/dist/admin/admin/src/components/ConfirmDialog.mjs +10 -9
  6. package/dist/admin/admin/src/components/ConfirmDialog.mjs.map +1 -1
  7. package/dist/admin/admin/src/components/Filters.js +57 -12
  8. package/dist/admin/admin/src/components/Filters.js.map +1 -1
  9. package/dist/admin/admin/src/components/Filters.mjs +57 -12
  10. package/dist/admin/admin/src/components/Filters.mjs.map +1 -1
  11. package/dist/admin/admin/src/components/Form.js +3 -1
  12. package/dist/admin/admin/src/components/Form.js.map +1 -1
  13. package/dist/admin/admin/src/components/Form.mjs +3 -1
  14. package/dist/admin/admin/src/components/Form.mjs.map +1 -1
  15. package/dist/admin/admin/src/components/FormInputs/Boolean.js +3 -2
  16. package/dist/admin/admin/src/components/FormInputs/Boolean.js.map +1 -1
  17. package/dist/admin/admin/src/components/FormInputs/Boolean.mjs +3 -2
  18. package/dist/admin/admin/src/components/FormInputs/Boolean.mjs.map +1 -1
  19. package/dist/admin/admin/src/components/FormInputs/Enumeration.js +2 -1
  20. package/dist/admin/admin/src/components/FormInputs/Enumeration.js.map +1 -1
  21. package/dist/admin/admin/src/components/FormInputs/Enumeration.mjs +2 -1
  22. package/dist/admin/admin/src/components/FormInputs/Enumeration.mjs.map +1 -1
  23. package/dist/admin/admin/src/components/LeftMenu.js +5 -1
  24. package/dist/admin/admin/src/components/LeftMenu.js.map +1 -1
  25. package/dist/admin/admin/src/components/LeftMenu.mjs +5 -1
  26. package/dist/admin/admin/src/components/LeftMenu.mjs.map +1 -1
  27. package/dist/admin/admin/src/components/PageHelpers.js +2 -1
  28. package/dist/admin/admin/src/components/PageHelpers.js.map +1 -1
  29. package/dist/admin/admin/src/components/PageHelpers.mjs +2 -1
  30. package/dist/admin/admin/src/components/PageHelpers.mjs.map +1 -1
  31. package/dist/admin/admin/src/components/Pagination.js +7 -6
  32. package/dist/admin/admin/src/components/Pagination.js.map +1 -1
  33. package/dist/admin/admin/src/components/Pagination.mjs +7 -6
  34. package/dist/admin/admin/src/components/Pagination.mjs.map +1 -1
  35. package/dist/admin/admin/src/components/RelativeTime.js +2 -1
  36. package/dist/admin/admin/src/components/RelativeTime.js.map +1 -1
  37. package/dist/admin/admin/src/components/RelativeTime.mjs +2 -1
  38. package/dist/admin/admin/src/components/RelativeTime.mjs.map +1 -1
  39. package/dist/admin/admin/src/components/SubNav.js +6 -12
  40. package/dist/admin/admin/src/components/SubNav.js.map +1 -1
  41. package/dist/admin/admin/src/components/SubNav.mjs +7 -13
  42. package/dist/admin/admin/src/components/SubNav.mjs.map +1 -1
  43. package/dist/admin/admin/src/components/Table.js +3 -1
  44. package/dist/admin/admin/src/components/Table.js.map +1 -1
  45. package/dist/admin/admin/src/components/Table.mjs +3 -1
  46. package/dist/admin/admin/src/components/Table.mjs.map +1 -1
  47. package/dist/admin/admin/src/components/UpsellBanner.js.map +1 -1
  48. package/dist/admin/admin/src/components/UpsellBanner.mjs.map +1 -1
  49. package/dist/admin/admin/src/components/WidgetRoot.js.map +1 -1
  50. package/dist/admin/admin/src/components/WidgetRoot.mjs.map +1 -1
  51. package/dist/admin/admin/src/constants.js +14 -0
  52. package/dist/admin/admin/src/constants.js.map +1 -1
  53. package/dist/admin/admin/src/constants.mjs +14 -0
  54. package/dist/admin/admin/src/constants.mjs.map +1 -1
  55. package/dist/admin/admin/src/core/apis/Plugin.js.map +1 -1
  56. package/dist/admin/admin/src/core/apis/Plugin.mjs.map +1 -1
  57. package/dist/admin/admin/src/features/Auth.js +2 -1
  58. package/dist/admin/admin/src/features/Auth.js.map +1 -1
  59. package/dist/admin/admin/src/features/Auth.mjs +2 -1
  60. package/dist/admin/admin/src/features/Auth.mjs.map +1 -1
  61. package/dist/admin/admin/src/features/StrapiApp.js.map +1 -1
  62. package/dist/admin/admin/src/features/StrapiApp.mjs.map +1 -1
  63. package/dist/admin/admin/src/features/Tracking.js.map +1 -1
  64. package/dist/admin/admin/src/features/Tracking.mjs.map +1 -1
  65. package/dist/admin/admin/src/pages/Auth/components/ResetPassword.js +6 -12
  66. package/dist/admin/admin/src/pages/Auth/components/ResetPassword.js.map +1 -1
  67. package/dist/admin/admin/src/pages/Auth/components/ResetPassword.mjs +6 -12
  68. package/dist/admin/admin/src/pages/Auth/components/ResetPassword.mjs.map +1 -1
  69. package/dist/admin/admin/src/pages/Home/components/FreeTrialEndedModal.js.map +1 -1
  70. package/dist/admin/admin/src/pages/Home/components/FreeTrialEndedModal.mjs.map +1 -1
  71. package/dist/admin/admin/src/pages/ProfilePage.js +2 -2
  72. package/dist/admin/admin/src/pages/ProfilePage.js.map +1 -1
  73. package/dist/admin/admin/src/pages/ProfilePage.mjs +2 -2
  74. package/dist/admin/admin/src/pages/ProfilePage.mjs.map +1 -1
  75. package/dist/admin/admin/src/pages/Settings/components/SettingsNav.js +10 -2
  76. package/dist/admin/admin/src/pages/Settings/components/SettingsNav.js.map +1 -1
  77. package/dist/admin/admin/src/pages/Settings/components/SettingsNav.mjs +10 -2
  78. package/dist/admin/admin/src/pages/Settings/components/SettingsNav.mjs.map +1 -1
  79. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormApiTokenContainer.js +4 -1
  80. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormApiTokenContainer.js.map +1 -1
  81. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormApiTokenContainer.mjs +4 -1
  82. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormApiTokenContainer.mjs.map +1 -1
  83. package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.js +3 -1
  84. package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.js.map +1 -1
  85. package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.mjs +3 -1
  86. package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.mjs.map +1 -1
  87. package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenTypeSelect.js +2 -1
  88. package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenTypeSelect.js.map +1 -1
  89. package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenTypeSelect.mjs +2 -1
  90. package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenTypeSelect.mjs.map +1 -1
  91. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/BoundRoute.js +6 -5
  92. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/BoundRoute.js.map +1 -1
  93. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/BoundRoute.mjs +6 -5
  94. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/BoundRoute.mjs.map +1 -1
  95. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.js +2 -1
  96. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.js.map +1 -1
  97. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.mjs +2 -1
  98. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.mjs.map +1 -1
  99. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/utils/transformPermissionsData.js +4 -4
  100. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/utils/transformPermissionsData.js.map +1 -1
  101. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/utils/transformPermissionsData.mjs +4 -4
  102. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/utils/transformPermissionsData.mjs.map +1 -1
  103. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.js +7 -58
  104. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.js.map +1 -1
  105. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.mjs +7 -58
  106. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.mjs.map +1 -1
  107. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/DiagnosticSnapshotModal.js +217 -0
  108. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/DiagnosticSnapshotModal.js.map +1 -0
  109. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/DiagnosticSnapshotModal.mjs +195 -0
  110. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/DiagnosticSnapshotModal.mjs.map +1 -0
  111. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/LogoInput.js.map +1 -1
  112. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/LogoInput.mjs.map +1 -1
  113. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/PlanCard.js +185 -0
  114. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/PlanCard.js.map +1 -0
  115. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/PlanCard.mjs +162 -0
  116. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/PlanCard.mjs.map +1 -0
  117. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/SupportCard.js +342 -0
  118. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/SupportCard.js.map +1 -0
  119. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/SupportCard.mjs +320 -0
  120. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/SupportCard.mjs.map +1 -0
  121. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.js +9 -4
  122. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.js.map +1 -1
  123. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.mjs +9 -4
  124. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.mjs.map +1 -1
  125. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ConditionsModal.js +15 -9
  126. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ConditionsModal.js.map +1 -1
  127. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ConditionsModal.mjs +15 -9
  128. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ConditionsModal.mjs.map +1 -1
  129. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ContentTypeCollapses.js +5 -2
  130. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ContentTypeCollapses.js.map +1 -1
  131. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ContentTypeCollapses.mjs +5 -2
  132. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ContentTypeCollapses.mjs.map +1 -1
  133. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/GlobalActions.js +2 -1
  134. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/GlobalActions.js.map +1 -1
  135. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/GlobalActions.mjs +2 -1
  136. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/GlobalActions.mjs.map +1 -1
  137. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.js +2 -1
  138. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.js.map +1 -1
  139. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.mjs +2 -1
  140. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.mjs.map +1 -1
  141. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.js +2 -1
  142. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.js.map +1 -1
  143. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.mjs +2 -1
  144. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.mjs.map +1 -1
  145. package/dist/admin/admin/src/pages/Settings/pages/Roles/hooks/usePermissionsDataManager.js.map +1 -1
  146. package/dist/admin/admin/src/pages/Settings/pages/Roles/hooks/usePermissionsDataManager.mjs.map +1 -1
  147. package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.js +3 -1
  148. package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.js.map +1 -1
  149. package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.mjs +3 -1
  150. package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.mjs.map +1 -1
  151. package/dist/admin/admin/src/pages/Settings/pages/Users/EditPage.js.map +1 -1
  152. package/dist/admin/admin/src/pages/Settings/pages/Users/EditPage.mjs.map +1 -1
  153. package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.js.map +1 -1
  154. package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.mjs.map +1 -1
  155. package/dist/admin/admin/src/pages/Settings/pages/Users/components/NewUserForm.js.map +1 -1
  156. package/dist/admin/admin/src/pages/Settings/pages/Users/components/NewUserForm.mjs.map +1 -1
  157. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/Events.js +4 -1
  158. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/Events.js.map +1 -1
  159. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/Events.mjs +4 -1
  160. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/Events.mjs.map +1 -1
  161. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/HeadersInput.js +18 -3
  162. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/HeadersInput.js.map +1 -1
  163. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/HeadersInput.mjs +18 -3
  164. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/HeadersInput.mjs.map +1 -1
  165. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/WebhookForm.js.map +1 -1
  166. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/WebhookForm.mjs.map +1 -1
  167. package/dist/admin/admin/src/router.js.map +1 -1
  168. package/dist/admin/admin/src/router.mjs.map +1 -1
  169. package/dist/admin/admin/src/services/admin.js +11 -1
  170. package/dist/admin/admin/src/services/admin.js.map +1 -1
  171. package/dist/admin/admin/src/services/admin.mjs +11 -2
  172. package/dist/admin/admin/src/services/admin.mjs.map +1 -1
  173. package/dist/admin/admin/src/services/users.js.map +1 -1
  174. package/dist/admin/admin/src/services/users.mjs.map +1 -1
  175. package/dist/admin/admin/src/translations/en.json.js +71 -4
  176. package/dist/admin/admin/src/translations/en.json.js.map +1 -1
  177. package/dist/admin/admin/src/translations/en.json.mjs +71 -4
  178. package/dist/admin/admin/src/translations/en.json.mjs.map +1 -1
  179. package/dist/admin/admin/src/translations/eu.json.js +1 -1
  180. package/dist/admin/admin/src/translations/eu.json.mjs +1 -1
  181. package/dist/admin/admin/src/utils/browserStrapi.js +1 -1
  182. package/dist/admin/admin/src/utils/browserStrapi.js.map +1 -1
  183. package/dist/admin/admin/src/utils/browserStrapi.mjs +1 -1
  184. package/dist/admin/admin/src/utils/browserStrapi.mjs.map +1 -1
  185. package/dist/admin/admin/src/utils/cookies.js +7 -6
  186. package/dist/admin/admin/src/utils/cookies.js.map +1 -1
  187. package/dist/admin/admin/src/utils/cookies.mjs +7 -6
  188. package/dist/admin/admin/src/utils/cookies.mjs.map +1 -1
  189. package/dist/admin/admin/src/utils/getFetchClient.js +24 -0
  190. package/dist/admin/admin/src/utils/getFetchClient.js.map +1 -1
  191. package/dist/admin/admin/src/utils/getFetchClient.mjs +24 -1
  192. package/dist/admin/admin/src/utils/getFetchClient.mjs.map +1 -1
  193. package/dist/admin/admin/tests/utils.js +2 -1
  194. package/dist/admin/admin/tests/utils.js.map +1 -1
  195. package/dist/admin/admin/tests/utils.mjs +2 -1
  196. package/dist/admin/admin/tests/utils.mjs.map +1 -1
  197. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.js +52 -22
  198. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.js.map +1 -1
  199. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.mjs +53 -23
  200. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.mjs.map +1 -1
  201. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AdminSeatInfo.js +16 -29
  202. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AdminSeatInfo.js.map +1 -1
  203. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AdminSeatInfo.mjs +18 -31
  204. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AdminSeatInfo.mjs.map +1 -1
  205. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/LicenseInfo.js +473 -0
  206. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/LicenseInfo.js.map +1 -0
  207. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/LicenseInfo.mjs +471 -0
  208. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/LicenseInfo.mjs.map +1 -0
  209. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.js +2 -0
  210. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.js.map +1 -1
  211. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.mjs +2 -0
  212. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.mjs.map +1 -1
  213. package/dist/admin/index.js +1 -0
  214. package/dist/admin/index.js.map +1 -1
  215. package/dist/admin/index.mjs +1 -1
  216. package/dist/admin/shared/utils/auth-cookie-path.js +13 -10
  217. package/dist/admin/shared/utils/auth-cookie-path.js.map +1 -1
  218. package/dist/admin/shared/utils/auth-cookie-path.mjs +13 -10
  219. package/dist/admin/shared/utils/auth-cookie-path.mjs.map +1 -1
  220. package/dist/admin/shared/utils/get-project-type.js +49 -0
  221. package/dist/admin/shared/utils/get-project-type.js.map +1 -0
  222. package/dist/admin/shared/utils/get-project-type.mjs +46 -0
  223. package/dist/admin/shared/utils/get-project-type.mjs.map +1 -0
  224. package/dist/admin/src/components/Filters.d.ts +1 -1
  225. package/dist/admin/src/components/Form.d.ts +1 -1
  226. package/dist/admin/src/constants.d.ts +10 -0
  227. package/dist/admin/src/pages/Settings/pages/ApiTokens/EditView/components/BoundRoute.d.ts +1 -1
  228. package/dist/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.d.ts +1 -1
  229. package/dist/admin/src/pages/Settings/pages/ApplicationInfo/components/DiagnosticSnapshotModal.d.ts +12 -0
  230. package/dist/admin/src/pages/Settings/pages/ApplicationInfo/components/PlanCard.d.ts +14 -0
  231. package/dist/admin/src/pages/Settings/pages/ApplicationInfo/components/SupportCard.d.ts +2 -0
  232. package/dist/admin/src/services/admin.d.ts +2 -2
  233. package/dist/admin/src/types/permissions.d.ts +1 -0
  234. package/dist/admin/src/utils/cookies.d.ts +7 -6
  235. package/dist/admin/src/utils/getFetchClient.d.ts +25 -0
  236. package/dist/ee/admin/src/hooks/useLicenseLimits.d.ts +29 -0
  237. package/dist/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.d.ts +6 -1
  238. package/dist/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/LicenseInfo.d.ts +2 -0
  239. package/dist/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.d.ts +2 -0
  240. package/dist/ee/server/src/audit-logs/entitlements.d.ts +8 -0
  241. package/dist/ee/server/src/audit-logs/entitlements.d.ts.map +1 -0
  242. package/dist/ee/server/src/audit-logs/services/lifecycles.d.ts +16 -0
  243. package/dist/ee/server/src/audit-logs/services/lifecycles.d.ts.map +1 -1
  244. package/dist/ee/server/src/controllers/admin.d.ts +36 -10
  245. package/dist/ee/server/src/controllers/admin.d.ts.map +1 -1
  246. package/dist/ee/server/src/controllers/authentication-utils/middlewares.d.ts.map +1 -1
  247. package/dist/ee/server/src/controllers/index.d.ts +36 -10
  248. package/dist/ee/server/src/controllers/index.d.ts.map +1 -1
  249. package/dist/ee/server/src/index.d.ts +36 -10
  250. package/dist/ee/server/src/index.d.ts.map +1 -1
  251. package/dist/ee/server/src/services/seat-enforcement.d.ts.map +1 -1
  252. package/dist/ee/server/src/validation/role.d.ts.map +1 -1
  253. package/dist/server/ee/server/src/audit-logs/entitlements.js +25 -0
  254. package/dist/server/ee/server/src/audit-logs/entitlements.js.map +1 -0
  255. package/dist/server/ee/server/src/audit-logs/entitlements.mjs +23 -0
  256. package/dist/server/ee/server/src/audit-logs/entitlements.mjs.map +1 -0
  257. package/dist/server/ee/server/src/audit-logs/services/lifecycles.js +20 -8
  258. package/dist/server/ee/server/src/audit-logs/services/lifecycles.js.map +1 -1
  259. package/dist/server/ee/server/src/audit-logs/services/lifecycles.mjs +19 -9
  260. package/dist/server/ee/server/src/audit-logs/services/lifecycles.mjs.map +1 -1
  261. package/dist/server/ee/server/src/audit-logs/utils/csv.js +3 -3
  262. package/dist/server/ee/server/src/audit-logs/utils/csv.js.map +1 -1
  263. package/dist/server/ee/server/src/audit-logs/utils/csv.mjs +3 -3
  264. package/dist/server/ee/server/src/audit-logs/utils/csv.mjs.map +1 -1
  265. package/dist/server/ee/server/src/controllers/admin.js +76 -3
  266. package/dist/server/ee/server/src/controllers/admin.js.map +1 -1
  267. package/dist/server/ee/server/src/controllers/admin.mjs +76 -3
  268. package/dist/server/ee/server/src/controllers/admin.mjs.map +1 -1
  269. package/dist/server/ee/server/src/controllers/authentication-utils/middlewares.js +28 -10
  270. package/dist/server/ee/server/src/controllers/authentication-utils/middlewares.js.map +1 -1
  271. package/dist/server/ee/server/src/controllers/authentication-utils/middlewares.mjs +28 -10
  272. package/dist/server/ee/server/src/controllers/authentication-utils/middlewares.mjs.map +1 -1
  273. package/dist/server/ee/server/src/index.js +2 -0
  274. package/dist/server/ee/server/src/index.js.map +1 -1
  275. package/dist/server/ee/server/src/index.mjs +2 -0
  276. package/dist/server/ee/server/src/index.mjs.map +1 -1
  277. package/dist/server/ee/server/src/services/seat-enforcement.js.map +1 -1
  278. package/dist/server/ee/server/src/services/seat-enforcement.mjs.map +1 -1
  279. package/dist/server/ee/server/src/validation/role.js +4 -2
  280. package/dist/server/ee/server/src/validation/role.js.map +1 -1
  281. package/dist/server/ee/server/src/validation/role.mjs +4 -2
  282. package/dist/server/ee/server/src/validation/role.mjs.map +1 -1
  283. package/dist/server/server/src/ai/services/ai.js.map +1 -1
  284. package/dist/server/server/src/ai/services/ai.mjs.map +1 -1
  285. package/dist/server/server/src/audit-logs/auth.js +72 -0
  286. package/dist/server/server/src/audit-logs/auth.js.map +1 -0
  287. package/dist/server/server/src/audit-logs/auth.mjs +67 -0
  288. package/dist/server/server/src/audit-logs/auth.mjs.map +1 -0
  289. package/dist/server/server/src/config/admin-actions.js +7 -0
  290. package/dist/server/server/src/config/admin-actions.js.map +1 -1
  291. package/dist/server/server/src/config/admin-actions.mjs +7 -0
  292. package/dist/server/server/src/config/admin-actions.mjs.map +1 -1
  293. package/dist/server/server/src/controllers/admin.js +17 -12
  294. package/dist/server/server/src/controllers/admin.js.map +1 -1
  295. package/dist/server/server/src/controllers/admin.mjs +17 -12
  296. package/dist/server/server/src/controllers/admin.mjs.map +1 -1
  297. package/dist/server/server/src/controllers/authentication.js +34 -8
  298. package/dist/server/server/src/controllers/authentication.js.map +1 -1
  299. package/dist/server/server/src/controllers/authentication.mjs +34 -8
  300. package/dist/server/server/src/controllers/authentication.mjs.map +1 -1
  301. package/dist/server/server/src/domain/permission/index.js.map +1 -1
  302. package/dist/server/server/src/domain/permission/index.mjs.map +1 -1
  303. package/dist/server/server/src/register.js +4 -0
  304. package/dist/server/server/src/register.js.map +1 -1
  305. package/dist/server/server/src/register.mjs +4 -0
  306. package/dist/server/server/src/register.mjs.map +1 -1
  307. package/dist/server/server/src/routes/admin.js +18 -0
  308. package/dist/server/server/src/routes/admin.js.map +1 -1
  309. package/dist/server/server/src/routes/admin.mjs +18 -0
  310. package/dist/server/server/src/routes/admin.mjs.map +1 -1
  311. package/dist/server/server/src/services/api-token.js +4 -8
  312. package/dist/server/server/src/services/api-token.js.map +1 -1
  313. package/dist/server/server/src/services/api-token.mjs +4 -8
  314. package/dist/server/server/src/services/api-token.mjs.map +1 -1
  315. package/dist/server/server/src/services/auth.js +4 -2
  316. package/dist/server/server/src/services/auth.js.map +1 -1
  317. package/dist/server/server/src/services/auth.mjs +4 -3
  318. package/dist/server/server/src/services/auth.mjs.map +1 -1
  319. package/dist/server/server/src/services/constants.js +4 -0
  320. package/dist/server/server/src/services/constants.js.map +1 -1
  321. package/dist/server/server/src/services/constants.mjs +4 -0
  322. package/dist/server/server/src/services/constants.mjs.map +1 -1
  323. package/dist/server/server/src/services/debug-dump.js +173 -0
  324. package/dist/server/server/src/services/debug-dump.js.map +1 -0
  325. package/dist/server/server/src/services/debug-dump.mjs +166 -0
  326. package/dist/server/server/src/services/debug-dump.mjs.map +1 -0
  327. package/dist/server/server/src/services/index.js +3 -1
  328. package/dist/server/server/src/services/index.js.map +1 -1
  329. package/dist/server/server/src/services/index.mjs +3 -1
  330. package/dist/server/server/src/services/index.mjs.map +1 -1
  331. package/dist/server/server/src/services/permission/rename-fields.js.map +1 -1
  332. package/dist/server/server/src/services/permission/rename-fields.mjs.map +1 -1
  333. package/dist/server/server/src/services/permission/sections-builder/handlers.js.map +1 -1
  334. package/dist/server/server/src/services/permission/sections-builder/handlers.mjs.map +1 -1
  335. package/dist/server/server/src/services/role.js +8 -5
  336. package/dist/server/server/src/services/role.js.map +1 -1
  337. package/dist/server/server/src/services/role.mjs +8 -5
  338. package/dist/server/server/src/services/role.mjs.map +1 -1
  339. package/dist/server/server/src/utils/debug-dump/redact.js +197 -0
  340. package/dist/server/server/src/utils/debug-dump/redact.js.map +1 -0
  341. package/dist/server/server/src/utils/debug-dump/redact.mjs +194 -0
  342. package/dist/server/server/src/utils/debug-dump/redact.mjs.map +1 -0
  343. package/dist/server/server/src/validation/admin-tokens.js +4 -4
  344. package/dist/server/server/src/validation/admin-tokens.js.map +1 -1
  345. package/dist/server/server/src/validation/admin-tokens.mjs +4 -4
  346. package/dist/server/server/src/validation/admin-tokens.mjs.map +1 -1
  347. package/dist/server/server/src/validation/api-tokens.js +4 -4
  348. package/dist/server/server/src/validation/api-tokens.js.map +1 -1
  349. package/dist/server/server/src/validation/api-tokens.mjs +4 -4
  350. package/dist/server/server/src/validation/api-tokens.mjs.map +1 -1
  351. package/dist/server/server/src/validation/role.js +6 -4
  352. package/dist/server/server/src/validation/role.js.map +1 -1
  353. package/dist/server/server/src/validation/role.mjs +6 -4
  354. package/dist/server/server/src/validation/role.mjs.map +1 -1
  355. package/dist/server/server/src/validation/transfer/token.js +4 -4
  356. package/dist/server/server/src/validation/transfer/token.js.map +1 -1
  357. package/dist/server/server/src/validation/transfer/token.mjs +4 -4
  358. package/dist/server/server/src/validation/transfer/token.mjs.map +1 -1
  359. package/dist/server/shared/utils/auth-cookie-path.js +13 -10
  360. package/dist/server/shared/utils/auth-cookie-path.js.map +1 -1
  361. package/dist/server/shared/utils/auth-cookie-path.mjs +13 -10
  362. package/dist/server/shared/utils/auth-cookie-path.mjs.map +1 -1
  363. package/dist/server/shared/utils/get-project-type.js +49 -0
  364. package/dist/server/shared/utils/get-project-type.js.map +1 -0
  365. package/dist/server/shared/utils/get-project-type.mjs +46 -0
  366. package/dist/server/shared/utils/get-project-type.mjs.map +1 -0
  367. package/dist/server/shared/utils/session-auth.js +70 -3
  368. package/dist/server/shared/utils/session-auth.js.map +1 -1
  369. package/dist/server/shared/utils/session-auth.mjs +70 -4
  370. package/dist/server/shared/utils/session-auth.mjs.map +1 -1
  371. package/dist/server/src/ai/services/ai.d.ts.map +1 -1
  372. package/dist/server/src/audit-logs/auth.d.ts +72 -0
  373. package/dist/server/src/audit-logs/auth.d.ts.map +1 -0
  374. package/dist/server/src/config/admin-actions.d.ts.map +1 -1
  375. package/dist/server/src/controllers/admin.d.ts +3 -0
  376. package/dist/server/src/controllers/admin.d.ts.map +1 -1
  377. package/dist/server/src/controllers/authentication.d.ts.map +1 -1
  378. package/dist/server/src/controllers/index.d.ts +3 -0
  379. package/dist/server/src/controllers/index.d.ts.map +1 -1
  380. package/dist/server/src/domain/permission/index.d.ts.map +1 -1
  381. package/dist/server/src/index.d.ts +8 -0
  382. package/dist/server/src/index.d.ts.map +1 -1
  383. package/dist/server/src/register.d.ts.map +1 -1
  384. package/dist/server/src/routes/admin.d.ts.map +1 -1
  385. package/dist/server/src/services/auth.d.ts +6 -0
  386. package/dist/server/src/services/auth.d.ts.map +1 -1
  387. package/dist/server/src/services/constants.d.ts +2 -0
  388. package/dist/server/src/services/constants.d.ts.map +1 -1
  389. package/dist/server/src/services/debug-dump.d.ts +9 -0
  390. package/dist/server/src/services/debug-dump.d.ts.map +1 -0
  391. package/dist/server/src/services/index.d.ts +5 -0
  392. package/dist/server/src/services/index.d.ts.map +1 -1
  393. package/dist/server/src/services/permission/rename-fields.d.ts.map +1 -1
  394. package/dist/server/src/services/permission/sections-builder/handlers.d.ts.map +1 -1
  395. package/dist/server/src/services/role.d.ts.map +1 -1
  396. package/dist/server/src/utils/debug-dump/redact.d.ts +8 -0
  397. package/dist/server/src/utils/debug-dump/redact.d.ts.map +1 -0
  398. package/dist/server/src/validation/role.d.ts.map +1 -1
  399. package/dist/shared/contracts/admin.d.ts +106 -0
  400. package/dist/shared/contracts/admin.d.ts.map +1 -1
  401. package/dist/shared/contracts/transfer.d.ts.map +1 -1
  402. package/dist/shared/utils/__tests__/get-project-type.test.d.ts +1 -0
  403. package/dist/shared/utils/__tests__/get-project-type.test.d.ts.map +1 -0
  404. package/dist/shared/utils/auth-cookie-path.d.ts +13 -10
  405. package/dist/shared/utils/auth-cookie-path.d.ts.map +1 -1
  406. package/dist/shared/utils/get-project-type.d.ts +37 -0
  407. package/dist/shared/utils/get-project-type.d.ts.map +1 -0
  408. package/dist/shared/utils/session-auth.d.ts +16 -0
  409. package/dist/shared/utils/session-auth.d.ts.map +1 -1
  410. package/package.json +8 -8
  411. package/dist/admin/admin/src/utils/getProjectType.js +0 -22
  412. package/dist/admin/admin/src/utils/getProjectType.js.map +0 -1
  413. package/dist/admin/admin/src/utils/getProjectType.mjs +0 -20
  414. package/dist/admin/admin/src/utils/getProjectType.mjs.map +0 -1
  415. package/dist/admin/src/utils/getProjectType.d.ts +0 -16
@@ -1 +1 @@
1
- {"version":3,"file":"utils.mjs","sources":["../../../../admin/tests/utils.tsx"],"sourcesContent":["/* eslint-disable check-file/filename-naming-convention */\n\nimport * as React from 'react';\n\nimport { ConfigureStoreOptions, configureStore } from '@reduxjs/toolkit';\nimport { fixtures } from '@strapi/admin-test-utils';\nimport { darkTheme, lightTheme } from '@strapi/design-system';\nimport {\n fireEvent,\n renderHook as renderHookRTL,\n render as renderRTL,\n waitFor,\n RenderOptions as RTLRenderOptions,\n RenderResult,\n act,\n screen,\n RenderHookOptions,\n RenderHookResult,\n Queries,\n} from '@testing-library/react';\nimport { userEvent } from '@testing-library/user-event';\nimport { DndProvider } from 'react-dnd';\nimport { HTML5Backend } from 'react-dnd-html5-backend';\nimport { QueryClient, QueryClientProvider, setLogger } from 'react-query';\nimport { Provider } from 'react-redux';\nimport { MemoryRouterProps, RouterProvider, createMemoryRouter } from 'react-router-dom';\n\nimport { GuidedTourContext } from '../src/components/GuidedTour/Context';\nimport { LanguageProvider } from '../src/components/LanguageProvider';\nimport { Theme } from '../src/components/Theme';\nimport { RBAC } from '../src/core/apis/rbac';\nimport { AppInfoProvider } from '../src/features/AppInfo';\nimport { AuthProvider, type Permission } from '../src/features/Auth';\nimport { _internalConfigurationContextProvider as ConfigurationContextProvider } from '../src/features/Configuration';\nimport { NotificationsProvider } from '../src/features/Notifications';\nimport { StrapiAppProvider } from '../src/features/StrapiApp';\nimport { reducer as appReducer } from '../src/reducer';\nimport { adminApi } from '../src/services/api';\n\nimport { server } from './server';\nimport { initialState } from './store';\n\nsetLogger({\n log: () => {},\n warn: () => {},\n error: () => {},\n});\n\n/**\n * RTL's `rerender()` updates the `children` passed to our test `render()` helper.\n * However, we keep a stable `routerRef` to avoid recreating the data router (which\n * can crash React Router). That means the route element tree would otherwise keep\n * rendering the initial children forever.\n *\n * We solve this by passing `children` via React context, so consumers inside the\n * router element tree still update on rerenders without recreating the router.\n */\nconst TestChildrenContext = React.createContext<React.ReactNode>(null);\n\nconst TestChildrenOutlet = () => {\n return <>{React.useContext(TestChildrenContext)}</>;\n};\n\ninterface ProvidersProps {\n children: React.ReactNode;\n initialEntries?: MemoryRouterProps['initialEntries'];\n storeConfig?: Partial<ConfigureStoreOptions>;\n permissions?: Permission[] | ((defaultPermissions: Permission[]) => Permission[] | undefined);\n}\n\nconst defaultTestStoreConfig = () => ({\n preloadedState: initialState(),\n reducer: {\n [adminApi.reducerPath]: adminApi.reducer,\n admin_app: appReducer,\n },\n // @ts-expect-error – this fails.\n middleware: (getDefaultMiddleware) => [\n ...getDefaultMiddleware({\n // Disable timing checks for test env\n immutableCheck: false,\n serializableCheck: false,\n }),\n adminApi.middleware,\n ],\n});\n\nconst DEFAULT_PERMISSIONS = [\n ...fixtures.permissions.allPermissions,\n {\n id: 314,\n action: 'admin::users.read',\n subject: null,\n properties: {},\n conditions: [],\n actionParameters: {},\n },\n];\n\nconst Providers = ({ children, initialEntries, storeConfig, permissions = [] }: ProvidersProps) => {\n /**\n * Keep these instances stable for the lifetime of the render.\n * Recreating the data router on rerenders can crash React Router.\n */\n const queryClientRef = React.useRef<QueryClient | null>(null);\n const storeRef = React.useRef<ReturnType<typeof configureStore> | null>(null);\n const routerRef = React.useRef<ReturnType<typeof createMemoryRouter> | null>(null);\n\n if (queryClientRef.current === null) {\n queryClientRef.current = new QueryClient({\n defaultOptions: {\n queries: {\n retry: false,\n },\n },\n });\n }\n\n if (storeRef.current === null) {\n storeRef.current = configureStore({\n ...defaultTestStoreConfig(),\n ...storeConfig,\n });\n }\n\n let allPermissions: Permission[];\n\n if (typeof permissions === 'function') {\n /**\n * The callback form can return `undefined` to mean \"use defaults\".\n * Guard against passing `undefined` into AuthProvider.\n */\n allPermissions = permissions(DEFAULT_PERMISSIONS) ?? DEFAULT_PERMISSIONS;\n } else {\n allPermissions = [...DEFAULT_PERMISSIONS, ...permissions];\n }\n\n if (routerRef.current === null) {\n routerRef.current = createMemoryRouter(\n [\n {\n path: '/*',\n element: (\n <StrapiAppProvider\n components={{}}\n rbac={new RBAC()}\n widgets={\n {\n widgets: [],\n getAll: jest.fn(),\n register: jest.fn(),\n } as unknown as React.ComponentProps<typeof StrapiAppProvider>['widgets']\n }\n customFields={{\n customFields: {},\n get: jest.fn().mockReturnValue({\n name: 'color',\n pluginId: 'mycustomfields',\n type: 'text',\n icon: jest.fn(),\n intlLabel: {\n id: 'mycustomfields.color.label',\n defaultMessage: 'Color',\n },\n intlDescription: {\n id: 'mycustomfields.color.description',\n defaultMessage: 'Select any color',\n },\n components: {\n Input: jest.fn().mockResolvedValue({ default: jest.fn() }),\n },\n }),\n getAll: jest.fn(),\n register: jest.fn(),\n }}\n fields={{}}\n menu={[]}\n getAdminInjectedComponents={jest.fn()}\n getPlugin={jest.fn()}\n plugins={{}}\n runHookParallel={jest.fn()}\n runHookWaterfall={jest.fn().mockImplementation((_name, initialValue) => initialValue)}\n runHookSeries={jest.fn()}\n settings={{}}\n >\n <Provider store={storeRef.current!}>\n <LanguageProvider messages={{}}>\n <Theme\n themes={{\n dark: darkTheme,\n light: lightTheme,\n }}\n >\n <AuthProvider _defaultPermissions={allPermissions} _disableRenewToken={true}>\n <QueryClientProvider client={queryClientRef.current!}>\n <DndProvider backend={HTML5Backend}>\n <NotificationsProvider>\n <GuidedTourContext enabled={false}>\n <ConfigurationContextProvider\n showReleaseNotification={false}\n logos={{\n auth: { default: 'default' },\n menu: { default: 'default' },\n }}\n updateProjectSettings={jest.fn()}\n >\n <AppInfoProvider\n autoReload\n useYarn\n dependencies={{\n '@strapi/plugin-documentation': '4.2.0',\n '@strapi/provider-upload-cloudinary': '4.2.0',\n }}\n strapiVersion=\"4.1.0\"\n communityEdition\n shouldUpdateStrapi={false}\n >\n <TestChildrenOutlet />\n </AppInfoProvider>\n </ConfigurationContextProvider>\n </GuidedTourContext>\n </NotificationsProvider>\n </DndProvider>\n </QueryClientProvider>\n </AuthProvider>\n </Theme>\n </LanguageProvider>\n </Provider>\n </StrapiAppProvider>\n ),\n },\n ],\n {\n initialEntries,\n }\n );\n }\n\n // en is the default locale of the admin app.\n return (\n <TestChildrenContext.Provider value={children}>\n <RouterProvider router={routerRef.current!} />\n </TestChildrenContext.Provider>\n );\n};\n\n// eslint-disable-next-line react/jsx-no-useless-fragment\nconst fallbackWrapper = ({ children }: { children: React.ReactNode }) => <>{children}</>;\n\nexport interface RenderOptions {\n renderOptions?: RTLRenderOptions;\n userEventOptions?: Parameters<typeof userEvent.setup>[0];\n initialEntries?: MemoryRouterProps['initialEntries'];\n providerOptions?: Pick<ProvidersProps, 'storeConfig' | 'permissions'>;\n}\n\n/**\n * @alpha\n * @description A custom render function that wraps the component with the necessary providers,\n * for use of testing components within the Strapi Admin.\n */\nconst render = (\n ui: React.ReactElement,\n { renderOptions, userEventOptions, initialEntries, providerOptions }: RenderOptions = {}\n): RenderResult & { user: ReturnType<typeof userEvent.setup> } => {\n const { wrapper: Wrapper = fallbackWrapper, ...restOptions } = renderOptions ?? {};\n\n return {\n ...renderRTL(ui, {\n wrapper: ({ children }) => (\n <Providers initialEntries={initialEntries} {...providerOptions}>\n <Wrapper>{children}</Wrapper>\n </Providers>\n ),\n ...restOptions,\n }),\n user: userEvent.setup({\n skipHover: true,\n ...userEventOptions,\n }),\n };\n};\n\n/**\n * @alpha\n * @description A custom render-hook function that wraps the component with the necessary providers,\n * for use of testing hooks within the Strapi Admin.\n */\nconst renderHook = <\n Result,\n Props,\n Q extends Queries,\n Container extends Element | DocumentFragment = HTMLElement,\n BaseElement extends Element | DocumentFragment = Container,\n>(\n hook: (initialProps: Props) => Result,\n options?: RenderHookOptions<Props, Q, Container, BaseElement> &\n Pick<RenderOptions, 'initialEntries' | 'providerOptions'>\n): RenderHookResult<Result, Props> => {\n const {\n wrapper: Wrapper = fallbackWrapper,\n initialEntries,\n providerOptions,\n ...restOptions\n } = options ?? {};\n\n return renderHookRTL(hook, {\n wrapper: ({ children }) => (\n <Providers initialEntries={initialEntries} {...providerOptions}>\n <Wrapper>{children}</Wrapper>\n </Providers>\n ),\n ...restOptions,\n });\n};\n\nexport { render, renderHook, waitFor, server, act, screen, fireEvent, defaultTestStoreConfig };\n"],"names":["setLogger","log","warn","error","TestChildrenContext","React","createContext","TestChildrenOutlet","_jsx","_Fragment","useContext","defaultTestStoreConfig","preloadedState","initialState","reducer","adminApi","reducerPath","admin_app","appReducer","middleware","getDefaultMiddleware","immutableCheck","serializableCheck","DEFAULT_PERMISSIONS","fixtures","permissions","allPermissions","id","action","subject","properties","conditions","actionParameters","Providers","children","initialEntries","storeConfig","queryClientRef","useRef","storeRef","routerRef","current","QueryClient","defaultOptions","queries","retry","configureStore","createMemoryRouter","path","element","StrapiAppProvider","components","rbac","RBAC","widgets","getAll","jest","fn","register","customFields","get","mockReturnValue","name","pluginId","type","icon","intlLabel","defaultMessage","intlDescription","Input","mockResolvedValue","default","fields","menu","getAdminInjectedComponents","getPlugin","plugins","runHookParallel","runHookWaterfall","mockImplementation","_name","initialValue","runHookSeries","settings","Provider","store","LanguageProvider","messages","Theme","themes","dark","darkTheme","light","lightTheme","AuthProvider","_defaultPermissions","_disableRenewToken","QueryClientProvider","client","DndProvider","backend","HTML5Backend","NotificationsProvider","GuidedTourContext","enabled","ConfigurationContextProvider","showReleaseNotification","logos","auth","updateProjectSettings","AppInfoProvider","autoReload","useYarn","dependencies","strapiVersion","communityEdition","shouldUpdateStrapi","value","RouterProvider","router","fallbackWrapper","render","ui","renderOptions","userEventOptions","providerOptions","wrapper","Wrapper","restOptions","renderRTL","user","userEvent","setup","skipHover","renderHook","hook","options","renderHookRTL"],"mappings":"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"}
1
+ {"version":3,"file":"utils.mjs","sources":["../../../../admin/tests/utils.tsx"],"sourcesContent":["/* eslint-disable check-file/filename-naming-convention */\n\nimport * as React from 'react';\n\nimport { ConfigureStoreOptions, configureStore } from '@reduxjs/toolkit';\nimport { fixtures } from '@strapi/admin-test-utils';\nimport { darkTheme, lightTheme } from '@strapi/design-system';\nimport {\n fireEvent,\n renderHook as renderHookRTL,\n render as renderRTL,\n waitFor,\n RenderOptions as RTLRenderOptions,\n RenderResult,\n act,\n screen,\n RenderHookOptions,\n RenderHookResult,\n Queries,\n} from '@testing-library/react';\nimport { userEvent } from '@testing-library/user-event';\nimport { DndProvider } from 'react-dnd';\nimport { HTML5Backend } from 'react-dnd-html5-backend';\nimport { QueryClient, QueryClientProvider, setLogger } from 'react-query';\nimport { Provider } from 'react-redux';\nimport { MemoryRouterProps, RouterProvider, createMemoryRouter } from 'react-router-dom';\n\nimport { GuidedTourContext } from '../src/components/GuidedTour/Context';\nimport { LanguageProvider } from '../src/components/LanguageProvider';\nimport { Theme } from '../src/components/Theme';\nimport { RBAC } from '../src/core/apis/rbac';\nimport { AppInfoProvider } from '../src/features/AppInfo';\nimport { AuthProvider, type Permission } from '../src/features/Auth';\nimport { _internalConfigurationContextProvider as ConfigurationContextProvider } from '../src/features/Configuration';\nimport { NotificationsProvider } from '../src/features/Notifications';\nimport { StrapiAppProvider } from '../src/features/StrapiApp';\nimport { reducer as appReducer } from '../src/reducer';\nimport { adminApi } from '../src/services/api';\n\nimport { server } from './server';\nimport { initialState } from './store';\n\nconst EMPTY_PERMISSIONS: NonNullable<ProvidersProps['permissions']> = [];\n\nsetLogger({\n log: () => {},\n warn: () => {},\n error: () => {},\n});\n\n/**\n * RTL's `rerender()` updates the `children` passed to our test `render()` helper.\n * However, we keep a stable `routerRef` to avoid recreating the data router (which\n * can crash React Router). That means the route element tree would otherwise keep\n * rendering the initial children forever.\n *\n * We solve this by passing `children` via React context, so consumers inside the\n * router element tree still update on rerenders without recreating the router.\n */\nconst TestChildrenContext = React.createContext<React.ReactNode>(null);\n\nconst TestChildrenOutlet = () => {\n return <>{React.useContext(TestChildrenContext)}</>;\n};\n\ninterface ProvidersProps {\n children: React.ReactNode;\n initialEntries?: MemoryRouterProps['initialEntries'];\n storeConfig?: Partial<ConfigureStoreOptions>;\n permissions?: Permission[] | ((defaultPermissions: Permission[]) => Permission[] | undefined);\n}\n\nconst defaultTestStoreConfig = () => ({\n preloadedState: initialState(),\n reducer: {\n [adminApi.reducerPath]: adminApi.reducer,\n admin_app: appReducer,\n },\n // @ts-expect-error – this fails.\n middleware: (getDefaultMiddleware) => [\n ...getDefaultMiddleware({\n // Disable timing checks for test env\n immutableCheck: false,\n serializableCheck: false,\n }),\n adminApi.middleware,\n ],\n});\n\nconst DEFAULT_PERMISSIONS = [\n ...fixtures.permissions.allPermissions,\n {\n id: 314,\n action: 'admin::users.read',\n subject: null,\n properties: {},\n conditions: [],\n actionParameters: {},\n },\n];\n\nconst Providers = ({\n children,\n initialEntries,\n storeConfig,\n permissions = EMPTY_PERMISSIONS,\n}: ProvidersProps) => {\n /**\n * Keep these instances stable for the lifetime of the render.\n * Recreating the data router on rerenders can crash React Router.\n */\n const queryClientRef = React.useRef<QueryClient | null>(null);\n const storeRef = React.useRef<ReturnType<typeof configureStore> | null>(null);\n const routerRef = React.useRef<ReturnType<typeof createMemoryRouter> | null>(null);\n\n if (queryClientRef.current === null) {\n queryClientRef.current = new QueryClient({\n defaultOptions: {\n queries: {\n retry: false,\n },\n },\n });\n }\n\n if (storeRef.current === null) {\n storeRef.current = configureStore({\n ...defaultTestStoreConfig(),\n ...storeConfig,\n });\n }\n\n let allPermissions: Permission[];\n\n if (typeof permissions === 'function') {\n /**\n * The callback form can return `undefined` to mean \"use defaults\".\n * Guard against passing `undefined` into AuthProvider.\n */\n allPermissions = permissions(DEFAULT_PERMISSIONS) ?? DEFAULT_PERMISSIONS;\n } else {\n allPermissions = [...DEFAULT_PERMISSIONS, ...permissions];\n }\n\n if (routerRef.current === null) {\n routerRef.current = createMemoryRouter(\n [\n {\n path: '/*',\n element: (\n <StrapiAppProvider\n components={{}}\n rbac={new RBAC()}\n widgets={\n {\n widgets: [],\n getAll: jest.fn(),\n register: jest.fn(),\n } as unknown as React.ComponentProps<typeof StrapiAppProvider>['widgets']\n }\n customFields={{\n customFields: {},\n get: jest.fn().mockReturnValue({\n name: 'color',\n pluginId: 'mycustomfields',\n type: 'text',\n icon: jest.fn(),\n intlLabel: {\n id: 'mycustomfields.color.label',\n defaultMessage: 'Color',\n },\n intlDescription: {\n id: 'mycustomfields.color.description',\n defaultMessage: 'Select any color',\n },\n components: {\n Input: jest.fn().mockResolvedValue({ default: jest.fn() }),\n },\n }),\n getAll: jest.fn(),\n register: jest.fn(),\n }}\n fields={{}}\n menu={[]}\n getAdminInjectedComponents={jest.fn()}\n getPlugin={jest.fn()}\n plugins={{}}\n runHookParallel={jest.fn()}\n runHookWaterfall={jest.fn().mockImplementation((_name, initialValue) => initialValue)}\n runHookSeries={jest.fn()}\n settings={{}}\n >\n <Provider store={storeRef.current!}>\n <LanguageProvider messages={{}}>\n <Theme\n themes={{\n dark: darkTheme,\n light: lightTheme,\n }}\n >\n <AuthProvider _defaultPermissions={allPermissions} _disableRenewToken={true}>\n <QueryClientProvider client={queryClientRef.current!}>\n <DndProvider backend={HTML5Backend}>\n <NotificationsProvider>\n <GuidedTourContext enabled={false}>\n <ConfigurationContextProvider\n showReleaseNotification={false}\n logos={{\n auth: { default: 'default' },\n menu: { default: 'default' },\n }}\n updateProjectSettings={jest.fn()}\n >\n <AppInfoProvider\n autoReload\n useYarn\n dependencies={{\n '@strapi/plugin-documentation': '4.2.0',\n '@strapi/provider-upload-cloudinary': '4.2.0',\n }}\n strapiVersion=\"4.1.0\"\n communityEdition\n shouldUpdateStrapi={false}\n >\n <TestChildrenOutlet />\n </AppInfoProvider>\n </ConfigurationContextProvider>\n </GuidedTourContext>\n </NotificationsProvider>\n </DndProvider>\n </QueryClientProvider>\n </AuthProvider>\n </Theme>\n </LanguageProvider>\n </Provider>\n </StrapiAppProvider>\n ),\n },\n ],\n {\n initialEntries,\n }\n );\n }\n\n // en is the default locale of the admin app.\n return (\n <TestChildrenContext.Provider value={children}>\n <RouterProvider router={routerRef.current!} />\n </TestChildrenContext.Provider>\n );\n};\n\n// eslint-disable-next-line react/jsx-no-useless-fragment\nconst fallbackWrapper = ({ children }: { children: React.ReactNode }) => <>{children}</>;\n\nexport interface RenderOptions {\n renderOptions?: RTLRenderOptions;\n userEventOptions?: Parameters<typeof userEvent.setup>[0];\n initialEntries?: MemoryRouterProps['initialEntries'];\n providerOptions?: Pick<ProvidersProps, 'storeConfig' | 'permissions'>;\n}\n\n/**\n * @alpha\n * @description A custom render function that wraps the component with the necessary providers,\n * for use of testing components within the Strapi Admin.\n */\nconst render = (\n ui: React.ReactElement,\n { renderOptions, userEventOptions, initialEntries, providerOptions }: RenderOptions = {}\n): RenderResult & { user: ReturnType<typeof userEvent.setup> } => {\n const { wrapper: Wrapper = fallbackWrapper, ...restOptions } = renderOptions ?? {};\n\n return {\n ...renderRTL(ui, {\n wrapper: ({ children }) => (\n <Providers initialEntries={initialEntries} {...providerOptions}>\n <Wrapper>{children}</Wrapper>\n </Providers>\n ),\n ...restOptions,\n }),\n user: userEvent.setup({\n skipHover: true,\n ...userEventOptions,\n }),\n };\n};\n\n/**\n * @alpha\n * @description A custom render-hook function that wraps the component with the necessary providers,\n * for use of testing hooks within the Strapi Admin.\n */\nconst renderHook = <\n Result,\n Props,\n Q extends Queries,\n Container extends Element | DocumentFragment = HTMLElement,\n BaseElement extends Element | DocumentFragment = Container,\n>(\n hook: (initialProps: Props) => Result,\n options?: RenderHookOptions<Props, Q, Container, BaseElement> &\n Pick<RenderOptions, 'initialEntries' | 'providerOptions'>\n): RenderHookResult<Result, Props> => {\n const {\n wrapper: Wrapper = fallbackWrapper,\n initialEntries,\n providerOptions,\n ...restOptions\n } = options ?? {};\n\n return renderHookRTL(hook, {\n wrapper: ({ children }) => (\n <Providers initialEntries={initialEntries} {...providerOptions}>\n <Wrapper>{children}</Wrapper>\n </Providers>\n ),\n ...restOptions,\n });\n};\n\nexport { render, renderHook, waitFor, server, act, screen, fireEvent, defaultTestStoreConfig };\n"],"names":["EMPTY_PERMISSIONS","setLogger","log","warn","error","TestChildrenContext","React","createContext","TestChildrenOutlet","_jsx","_Fragment","useContext","defaultTestStoreConfig","preloadedState","initialState","reducer","adminApi","reducerPath","admin_app","appReducer","middleware","getDefaultMiddleware","immutableCheck","serializableCheck","DEFAULT_PERMISSIONS","fixtures","permissions","allPermissions","id","action","subject","properties","conditions","actionParameters","Providers","children","initialEntries","storeConfig","queryClientRef","useRef","storeRef","routerRef","current","QueryClient","defaultOptions","queries","retry","configureStore","createMemoryRouter","path","element","StrapiAppProvider","components","rbac","RBAC","widgets","getAll","jest","fn","register","customFields","get","mockReturnValue","name","pluginId","type","icon","intlLabel","defaultMessage","intlDescription","Input","mockResolvedValue","default","fields","menu","getAdminInjectedComponents","getPlugin","plugins","runHookParallel","runHookWaterfall","mockImplementation","_name","initialValue","runHookSeries","settings","Provider","store","LanguageProvider","messages","Theme","themes","dark","darkTheme","light","lightTheme","AuthProvider","_defaultPermissions","_disableRenewToken","QueryClientProvider","client","DndProvider","backend","HTML5Backend","NotificationsProvider","GuidedTourContext","enabled","ConfigurationContextProvider","showReleaseNotification","logos","auth","updateProjectSettings","AppInfoProvider","autoReload","useYarn","dependencies","strapiVersion","communityEdition","shouldUpdateStrapi","value","RouterProvider","router","fallbackWrapper","render","ui","renderOptions","userEventOptions","providerOptions","wrapper","Wrapper","restOptions","renderRTL","user","userEvent","setup","skipHover","renderHook","hook","options","renderHookRTL"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AA0CA,MAAMA,oBAAgE,EAAE;AAExEC,SAAAA,CAAU;AACRC,IAAAA,GAAAA,EAAK,IAAA,CAAO,CAAA;AACZC,IAAAA,IAAAA,EAAM,IAAA,CAAO,CAAA;AACbC,IAAAA,KAAAA,EAAO,IAAA,CAAO;AAChB,CAAA,CAAA;AAEA;;;;;;;;AAQC,IACD,MAAMC,mBAAAA,iBAAsBC,KAAAA,CAAMC,aAAa,CAAkB,IAAA,CAAA;AAEjE,MAAMC,kBAAAA,GAAqB,IAAA;IACzB,qBAAOC,GAAA,CAAAC,QAAA,EAAA;AAAGJ,QAAAA,QAAAA,EAAAA,KAAAA,CAAMK,UAAU,CAACN,mBAAAA;;AAC7B,CAAA;AASA,MAAMO,sBAAAA,GAAyB,KAAO;QACpCC,cAAAA,EAAgBC,YAAAA,EAAAA;QAChBC,OAAAA,EAAS;AACP,YAAA,CAACC,QAAAA,CAASC,WAAW,GAAGD,SAASD,OAAO;YACxCG,SAAAA,EAAWC;AACb,SAAA;;AAEAC,QAAAA,UAAAA,EAAY,CAACC,oBAAAA,GAAyB;mBACjCA,oBAAAA,CAAqB;;oBAEtBC,cAAAA,EAAgB,KAAA;oBAChBC,iBAAAA,EAAmB;AACrB,iBAAA,CAAA;AACAP,gBAAAA,QAAAA,CAASI;AACV;KACH;AAEA,MAAMI,mBAAAA,GAAsB;OACvBC,QAAAA,CAASC,WAAW,CAACC,cAAc;AACtC,IAAA;QACEC,EAAAA,EAAI,GAAA;QACJC,MAAAA,EAAQ,mBAAA;QACRC,OAAAA,EAAS,IAAA;AACTC,QAAAA,UAAAA,EAAY,EAAC;AACbC,QAAAA,UAAAA,EAAY,EAAE;AACdC,QAAAA,gBAAAA,EAAkB;AACpB;AACD,CAAA;AAED,MAAMC,SAAAA,GAAY,CAAC,EACjBC,QAAQ,EACRC,cAAc,EACdC,WAAW,EACXX,WAAAA,GAAc1B,iBAAiB,EAChB,GAAA;AACf;;;AAGC,MACD,MAAMsC,cAAAA,GAAiBhC,KAAAA,CAAMiC,MAAM,CAAqB,IAAA,CAAA;IACxD,MAAMC,QAAAA,GAAWlC,KAAAA,CAAMiC,MAAM,CAA2C,IAAA,CAAA;IACxE,MAAME,SAAAA,GAAYnC,KAAAA,CAAMiC,MAAM,CAA+C,IAAA,CAAA;IAE7E,IAAID,cAAAA,CAAeI,OAAO,KAAK,IAAA,EAAM;QACnCJ,cAAAA,CAAeI,OAAO,GAAG,IAAIC,WAAAA,CAAY;YACvCC,cAAAA,EAAgB;gBACdC,OAAAA,EAAS;oBACPC,KAAAA,EAAO;AACT;AACF;AACF,SAAA,CAAA;AACF,IAAA;IAEA,IAAIN,QAAAA,CAASE,OAAO,KAAK,IAAA,EAAM;QAC7BF,QAAAA,CAASE,OAAO,GAAGK,cAAAA,CAAe;AAChC,YAAA,GAAGnC,sBAAAA,EAAwB;AAC3B,YAAA,GAAGyB;AACL,SAAA,CAAA;AACF,IAAA;IAEA,IAAIV,cAAAA;IAEJ,IAAI,OAAOD,gBAAgB,UAAA,EAAY;AACrC;;;QAIAC,cAAAA,GAAiBD,YAAYF,mBAAAA,CAAAA,IAAwBA,mBAAAA;IACvD,CAAA,MAAO;QACLG,cAAAA,GAAiB;AAAIH,YAAAA,GAAAA,mBAAAA;AAAwBE,YAAAA,GAAAA;AAAY,SAAA;AAC3D,IAAA;IAEA,IAAIe,SAAAA,CAAUC,OAAO,KAAK,IAAA,EAAM;QAC9BD,SAAAA,CAAUC,OAAO,GAAGM,kBAAAA,CAClB;AACE,YAAA;gBACEC,IAAAA,EAAM,IAAA;AACNC,gBAAAA,OAAAA,gBACEzC,GAAA,CAAC0C,iBAAAA,EAAAA;AACCC,oBAAAA,UAAAA,EAAY,EAAC;AACbC,oBAAAA,IAAAA,EAAM,IAAIC,IAAAA,EAAAA;oBACVC,OAAAA,EACE;AACEA,wBAAAA,OAAAA,EAAS,EAAE;AACXC,wBAAAA,MAAAA,EAAQC,KAAKC,EAAE,EAAA;AACfC,wBAAAA,QAAAA,EAAUF,KAAKC,EAAE;AACnB,qBAAA;oBAEFE,YAAAA,EAAc;AACZA,wBAAAA,YAAAA,EAAc,EAAC;AACfC,wBAAAA,GAAAA,EAAKJ,IAAAA,CAAKC,EAAE,EAAA,CAAGI,eAAe,CAAC;4BAC7BC,IAAAA,EAAM,OAAA;4BACNC,QAAAA,EAAU,gBAAA;4BACVC,IAAAA,EAAM,MAAA;AACNC,4BAAAA,IAAAA,EAAMT,KAAKC,EAAE,EAAA;4BACbS,SAAAA,EAAW;gCACTvC,EAAAA,EAAI,4BAAA;gCACJwC,cAAAA,EAAgB;AAClB,6BAAA;4BACAC,eAAAA,EAAiB;gCACfzC,EAAAA,EAAI,kCAAA;gCACJwC,cAAAA,EAAgB;AAClB,6BAAA;4BACAhB,UAAAA,EAAY;AACVkB,gCAAAA,KAAAA,EAAOb,IAAAA,CAAKC,EAAE,EAAA,CAAGa,iBAAiB,CAAC;AAAEC,oCAAAA,OAAAA,EAASf,KAAKC,EAAE;AAAG,iCAAA;AAC1D;AACF,yBAAA,CAAA;AACAF,wBAAAA,MAAAA,EAAQC,KAAKC,EAAE,EAAA;AACfC,wBAAAA,QAAAA,EAAUF,KAAKC,EAAE;AACnB,qBAAA;AACAe,oBAAAA,MAAAA,EAAQ,EAAC;AACTC,oBAAAA,IAAAA,EAAM,EAAE;AACRC,oBAAAA,0BAAAA,EAA4BlB,KAAKC,EAAE,EAAA;AACnCkB,oBAAAA,SAAAA,EAAWnB,KAAKC,EAAE,EAAA;AAClBmB,oBAAAA,OAAAA,EAAS,EAAC;AACVC,oBAAAA,eAAAA,EAAiBrB,KAAKC,EAAE,EAAA;AACxBqB,oBAAAA,gBAAAA,EAAkBtB,KAAKC,EAAE,EAAA,CAAGsB,kBAAkB,CAAC,CAACC,OAAOC,YAAAA,GAAiBA,YAAAA,CAAAA;AACxEC,oBAAAA,aAAAA,EAAe1B,KAAKC,EAAE,EAAA;AACtB0B,oBAAAA,QAAAA,EAAU,EAAC;AAEX,oBAAA,QAAA,gBAAA3E,GAAA,CAAC4E,QAAAA,EAAAA;AAASC,wBAAAA,KAAAA,EAAO9C,SAASE,OAAO;AAC/B,wBAAA,QAAA,gBAAAjC,GAAA,CAAC8E,gBAAAA,EAAAA;AAAiBC,4BAAAA,QAAAA,EAAU,EAAC;AAC3B,4BAAA,QAAA,gBAAA/E,GAAA,CAACgF,KAAAA,EAAAA;gCACCC,MAAAA,EAAQ;oCACNC,IAAAA,EAAMC,SAAAA;oCACNC,KAAAA,EAAOC;AACT,iCAAA;AAEA,gCAAA,QAAA,gBAAArF,GAAA,CAACsF,YAAAA,EAAAA;oCAAaC,mBAAAA,EAAqBrE,cAAAA;oCAAgBsE,kBAAAA,EAAoB,IAAA;AACrE,oCAAA,QAAA,gBAAAxF,GAAA,CAACyF,mBAAAA,EAAAA;AAAoBC,wCAAAA,MAAAA,EAAQ7D,eAAeI,OAAO;AACjD,wCAAA,QAAA,gBAAAjC,GAAA,CAAC2F,WAAAA,EAAAA;4CAAYC,OAAAA,EAASC,YAAAA;AACpB,4CAAA,QAAA,gBAAA7F,GAAA,CAAC8F,qBAAAA,EAAAA;AACC,gDAAA,QAAA,gBAAA9F,GAAA,CAAC+F,iBAAAA,EAAAA;oDAAkBC,OAAAA,EAAS,KAAA;AAC1B,oDAAA,QAAA,gBAAAhG,GAAA,CAACiG,4BAAAA,EAAAA;wDACCC,uBAAAA,EAAyB,KAAA;wDACzBC,KAAAA,EAAO;4DACLC,IAAAA,EAAM;gEAAErC,OAAAA,EAAS;AAAU,6DAAA;4DAC3BE,IAAAA,EAAM;gEAAEF,OAAAA,EAAS;AAAU;AAC7B,yDAAA;AACAsC,wDAAAA,qBAAAA,EAAuBrD,KAAKC,EAAE,EAAA;AAE9B,wDAAA,QAAA,gBAAAjD,GAAA,CAACsG,eAAAA,EAAAA;4DACCC,UAAU,EAAA,IAAA;4DACVC,OAAO,EAAA,IAAA;4DACPC,YAAAA,EAAc;gEACZ,8BAAA,EAAgC,OAAA;gEAChC,oCAAA,EAAsC;AACxC,6DAAA;4DACAC,aAAAA,EAAc,OAAA;4DACdC,gBAAgB,EAAA,IAAA;4DAChBC,kBAAAA,EAAoB,KAAA;AAEpB,4DAAA,QAAA,gBAAA5G,GAAA,CAACD,kBAAAA,EAAAA,EAAAA;;;;;;;;;;;;AAa3B;SACD,EACD;AACE4B,YAAAA;AACF,SAAA,CAAA;AAEJ,IAAA;;IAGA,qBACE3B,GAAA,CAACJ,oBAAoBgF,QAAQ,EAAA;QAACiC,KAAAA,EAAOnF,QAAAA;AACnC,QAAA,QAAA,gBAAA1B,GAAA,CAAC8G,cAAAA,EAAAA;AAAeC,YAAAA,MAAAA,EAAQ/E,UAAUC;;;AAGxC,CAAA;AAEA;AACA,MAAM+E,eAAAA,GAAkB,CAAC,EAAEtF,QAAQ,EAAiC,iBAAK1B,GAAA,CAAAC,QAAA,EAAA;AAAGyB,QAAAA,QAAAA,EAAAA;;AAS5E;;;;AAIC,IACD,MAAMuF,MAAAA,GAAS,CACbC,EAAAA,EACA,EAAEC,aAAa,EAAEC,gBAAgB,EAAEzF,cAAc,EAAE0F,eAAe,EAAiB,GAAG,EAAE,GAAA;IAExF,MAAM,EAAEC,SAASC,OAAAA,GAAUP,eAAe,EAAE,GAAGQ,WAAAA,EAAa,GAAGL,aAAAA,IAAiB,EAAC;IAEjF,OAAO;AACL,QAAA,GAAGM,SAAUP,EAAAA,EAAI;AACfI,YAAAA,OAAAA,EAAS,CAAC,EAAE5F,QAAQ,EAAE,iBACpB1B,GAAA,CAACyB,SAAAA,EAAAA;oBAAUE,cAAAA,EAAgBA,cAAAA;AAAiB,oBAAA,GAAG0F,eAAe;AAC5D,oBAAA,QAAA,gBAAArH,GAAA,CAACuH,OAAAA,EAAAA;AAAS7F,wBAAAA,QAAAA,EAAAA;;;AAGd,YAAA,GAAG8F;SACL,CAAE;QACFE,IAAAA,EAAMC,SAAAA,CAAUC,KAAK,CAAC;YACpBC,SAAAA,EAAW,IAAA;AACX,YAAA,GAAGT;AACL,SAAA;AACF,KAAA;AACF;AAEA;;;;IAKA,MAAMU,UAAAA,GAAa,CAOjBC,IAAAA,EACAC,OAAAA,GAAAA;AAGA,IAAA,MAAM,EACJV,OAAAA,EAASC,OAAAA,GAAUP,eAAe,EAClCrF,cAAc,EACd0F,eAAe,EACf,GAAGG,WAAAA,EACJ,GAAGQ,WAAW,EAAC;AAEhB,IAAA,OAAOC,aAAcF,IAAAA,EAAM;AACzBT,QAAAA,OAAAA,EAAS,CAAC,EAAE5F,QAAQ,EAAE,iBACpB1B,GAAA,CAACyB,SAAAA,EAAAA;gBAAUE,cAAAA,EAAgBA,cAAAA;AAAiB,gBAAA,GAAG0F,eAAe;AAC5D,gBAAA,QAAA,gBAAArH,GAAA,CAACuH,OAAAA,EAAAA;AAAS7F,oBAAAA,QAAAA,EAAAA;;;AAGd,QAAA,GAAG8F;AACL,KAAA,CAAA;AACF;;;;"}
@@ -7,19 +7,18 @@ var styledComponents = require('styled-components');
7
7
  var useAIAvailability = require('../../../../../hooks/useAIAvailability.js');
8
8
  var ai = require('../../../../../services/ai.js');
9
9
 
10
- const StyledProgressBar = styledComponents.styled(designSystem.ProgressBar)`
10
+ /**
11
+ * The fill colour has to come from a transient prop. `ProgressBar` forwards unknown props onto
12
+ * the underlying Radix div, so the `color="danger"` this used to be given was landing as an HTML
13
+ * `color` attribute and never reaching the fill — the overage bar rendered neutral, not red.
14
+ */ const StyledProgressBar = styledComponents.styled(designSystem.ProgressBar)`
11
15
  width: 100%;
12
16
  background-color: ${({ theme })=>theme.colors.neutral200};
13
17
  > div {
14
- background-color: ${({ theme })=>theme.colors.neutral700};
18
+ background-color: ${({ theme, $variant })=>$variant === 'danger' ? theme.colors.danger600 : theme.colors.neutral700};
15
19
  }
16
20
  `;
17
- const StyledGridItem = styledComponents.styled(designSystem.Grid.Item)`
18
- ${({ theme })=>theme.breakpoints.large} {
19
- grid-column: 7 / 13;
20
- }
21
- `;
22
- const AIUsage = ()=>{
21
+ const AIUsage = ({ isTrial = false })=>{
23
22
  const { formatMessage } = reactIntl.useIntl();
24
23
  const isAIAvailable = useAIAvailability.useAIAvailability();
25
24
  const { data, isLoading, error } = ai.useGetAiUsageQuery(undefined, {
@@ -46,9 +45,7 @@ const AIUsage = ()=>{
46
45
  const percentRemaining = usedCredits / totalCredits * 100;
47
46
  const percentOverage = usedCredits / maxCredits * 100;
48
47
  const isInOverages = overage > 0 && maxCredits !== totalCredits;
49
- return /*#__PURE__*/ jsxRuntime.jsxs(StyledGridItem, {
50
- col: 6,
51
- s: 12,
48
+ return /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
52
49
  direction: "column",
53
50
  alignItems: "start",
54
51
  gap: 2,
@@ -68,35 +65,68 @@ const AIUsage = ()=>{
68
65
  children: [
69
66
  !isInOverages && /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
70
67
  children: [
68
+ /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
69
+ direction: "row",
70
+ alignItems: "baseline",
71
+ gap: 1,
72
+ children: [
73
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
74
+ children: `${usedCredits.toFixed(2)}`
75
+ }),
76
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
77
+ variant: "pi",
78
+ textColor: "neutral600",
79
+ children: `/ ${totalCredits}`
80
+ })
81
+ ]
82
+ }),
71
83
  /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
72
84
  width: "100%",
73
85
  children: /*#__PURE__*/ jsxRuntime.jsx(StyledProgressBar, {
74
86
  value: percentRemaining,
75
- size: "M"
87
+ size: "M",
88
+ "aria-label": `${usedCredits.toFixed(2)} credits used from ${totalCredits} credits available in your plan`
76
89
  })
77
- }),
78
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
79
- variant: "omega",
80
- children: `${usedCredits.toFixed(2)} credits used from ${totalCredits} credits available in your plan`
81
90
  })
82
91
  ]
83
92
  }),
84
93
  isInOverages && /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
85
94
  children: [
95
+ /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
96
+ direction: "row",
97
+ alignItems: "baseline",
98
+ gap: 1,
99
+ children: [
100
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
101
+ variant: "epsilon",
102
+ textColor: "danger600",
103
+ children: `${overage.toFixed(2)}`
104
+ }),
105
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
106
+ variant: "pi",
107
+ textColor: "neutral600",
108
+ children: `/ ${totalCredits}`
109
+ })
110
+ ]
111
+ }),
86
112
  /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
87
113
  width: "100%",
88
114
  children: /*#__PURE__*/ jsxRuntime.jsx(StyledProgressBar, {
89
115
  value: percentOverage,
90
116
  size: "M",
91
- color: "danger"
117
+ $variant: "danger",
118
+ "aria-label": `${overage.toFixed(2)} credits used above the ${totalCredits} credits available in your plan`
92
119
  })
93
- }),
94
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
95
- variant: "omega",
96
- textColor: "danger600",
97
- children: `${overage.toFixed(2)} credits used above the ${totalCredits} credits available in your plan`
98
120
  })
99
121
  ]
122
+ }),
123
+ !isTrial && /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
124
+ variant: "pi",
125
+ textColor: "neutral600",
126
+ children: formatMessage({
127
+ id: 'Settings.application.ai-usage.overage-rate',
128
+ defaultMessage: '+$1.50 per 100 credits above plan limit'
129
+ })
100
130
  })
101
131
  ]
102
132
  })
@@ -1 +1 @@
1
- {"version":3,"file":"AIUsage.js","sources":["../../../../../../../../../../ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.tsx"],"sourcesContent":["import { Flex, Typography, Grid, ProgressBar } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { useAIAvailability } from '../../../../../hooks/useAIAvailability';\nimport { useGetAiUsageQuery } from '../../../../../services/ai';\n\nconst StyledProgressBar = styled(ProgressBar)`\n width: 100%;\n background-color: ${({ theme }) => theme.colors.neutral200};\n > div {\n background-color: ${({ theme }) => theme.colors.neutral700};\n }\n`;\n\nconst StyledGridItem = styled(Grid.Item)`\n ${({ theme }) => theme.breakpoints.large} {\n grid-column: 7 / 13;\n }\n`;\n\nexport const AIUsage = () => {\n const { formatMessage } = useIntl();\n const isAIAvailable = useAIAvailability();\n const { data, isLoading, error } = useGetAiUsageQuery(undefined, {\n refetchOnMountOrArgChange: true,\n skip: !isAIAvailable,\n });\n\n if (!isAIAvailable) {\n return null;\n }\n\n if (isLoading) {\n return null;\n }\n\n if (error || !data) {\n return null;\n }\n\n if (!data.subscription?.cmsAiEnabled) {\n return null;\n }\n\n // Calculate remaining credits and total\n const totalCredits = data.subscription.cmsAiCreditsBase;\n const usedCredits = data.cmsAiCreditsUsed;\n const maxCredits = data.subscription.cmsAiCreditsMaxUsage;\n const overage = usedCredits - totalCredits;\n const percentRemaining = (usedCredits / totalCredits) * 100;\n const percentOverage = (usedCredits / maxCredits) * 100;\n\n const isInOverages = overage > 0 && maxCredits !== totalCredits;\n\n return (\n <StyledGridItem col={6} s={12} direction=\"column\" alignItems=\"start\" gap={2}>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'Settings.application.ai-usage',\n defaultMessage: 'AI Usage',\n })}\n </Typography>\n <Flex gap={2} direction=\"column\" alignItems=\"flex-start\">\n {!isInOverages && (\n <>\n <Flex width=\"100%\">\n <StyledProgressBar value={percentRemaining} size=\"M\" />\n </Flex>\n <Typography variant=\"omega\">\n {`${usedCredits.toFixed(2)} credits used from ${totalCredits} credits available in your plan`}\n </Typography>\n </>\n )}\n {isInOverages && (\n <>\n <Flex width=\"100%\">\n <StyledProgressBar value={percentOverage} size=\"M\" color=\"danger\" />\n </Flex>\n <Typography variant=\"omega\" textColor=\"danger600\">\n {`${overage.toFixed(2)} credits used above the ${totalCredits} credits available in your plan`}\n </Typography>\n </>\n )}\n </Flex>\n </StyledGridItem>\n );\n};\n"],"names":["StyledProgressBar","styled","ProgressBar","theme","colors","neutral200","neutral700","StyledGridItem","Grid","Item","breakpoints","large","AIUsage","formatMessage","useIntl","isAIAvailable","useAIAvailability","data","isLoading","error","useGetAiUsageQuery","undefined","refetchOnMountOrArgChange","skip","subscription","cmsAiEnabled","totalCredits","cmsAiCreditsBase","usedCredits","cmsAiCreditsUsed","maxCredits","cmsAiCreditsMaxUsage","overage","percentRemaining","percentOverage","isInOverages","_jsxs","col","s","direction","alignItems","gap","_jsx","Typography","variant","textColor","id","defaultMessage","Flex","_Fragment","width","value","size","toFixed","color"],"mappings":"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"}
1
+ {"version":3,"file":"AIUsage.js","sources":["../../../../../../../../../../ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.tsx"],"sourcesContent":["import { Flex, Typography, ProgressBar } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { useAIAvailability } from '../../../../../hooks/useAIAvailability';\nimport { useGetAiUsageQuery } from '../../../../../services/ai';\n\n/**\n * The fill colour has to come from a transient prop. `ProgressBar` forwards unknown props onto\n * the underlying Radix div, so the `color=\"danger\"` this used to be given was landing as an HTML\n * `color` attribute and never reaching the fill — the overage bar rendered neutral, not red.\n */\nconst StyledProgressBar = styled(ProgressBar)<{ $variant?: 'neutral' | 'danger' }>`\n width: 100%;\n background-color: ${({ theme }) => theme.colors.neutral200};\n > div {\n background-color: ${({ theme, $variant }) =>\n $variant === 'danger' ? theme.colors.danger600 : theme.colors.neutral700};\n }\n`;\n\ninterface AIUsageProps {\n /** Trials are not billed for overages, so the rate line is meaningless to them. */\n isTrial?: boolean;\n}\n\nexport const AIUsage = ({ isTrial = false }: AIUsageProps) => {\n const { formatMessage } = useIntl();\n const isAIAvailable = useAIAvailability();\n const { data, isLoading, error } = useGetAiUsageQuery(undefined, {\n refetchOnMountOrArgChange: true,\n skip: !isAIAvailable,\n });\n\n if (!isAIAvailable) {\n return null;\n }\n\n if (isLoading) {\n return null;\n }\n\n if (error || !data) {\n return null;\n }\n\n if (!data.subscription?.cmsAiEnabled) {\n return null;\n }\n\n // Calculate remaining credits and total\n const totalCredits = data.subscription.cmsAiCreditsBase;\n const usedCredits = data.cmsAiCreditsUsed;\n const maxCredits = data.subscription.cmsAiCreditsMaxUsage;\n const overage = usedCredits - totalCredits;\n const percentRemaining = (usedCredits / totalCredits) * 100;\n const percentOverage = (usedCredits / maxCredits) * 100;\n\n const isInOverages = overage > 0 && maxCredits !== totalCredits;\n\n return (\n <Flex direction=\"column\" alignItems=\"start\" gap={2}>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'Settings.application.ai-usage',\n defaultMessage: 'AI Usage',\n })}\n </Typography>\n <Flex gap={2} direction=\"column\" alignItems=\"flex-start\">\n {!isInOverages && (\n <>\n <Flex direction=\"row\" alignItems=\"baseline\" gap={1}>\n <Typography>{`${usedCredits.toFixed(2)}`}</Typography>\n <Typography variant=\"pi\" textColor=\"neutral600\">{`/ ${totalCredits}`}</Typography>\n </Flex>\n <Flex width=\"100%\">\n {/* The \"12.00 / 100\" pair above is only meaningful next to the bar, so the bar\n carries the full sentence for screen readers. */}\n <StyledProgressBar\n value={percentRemaining}\n size=\"M\"\n aria-label={`${usedCredits.toFixed(2)} credits used from ${totalCredits} credits available in your plan`}\n />\n </Flex>\n </>\n )}\n {isInOverages && (\n <>\n <Flex direction=\"row\" alignItems=\"baseline\" gap={1}>\n <Typography variant=\"epsilon\" textColor=\"danger600\">\n {`${overage.toFixed(2)}`}\n </Typography>\n <Typography variant=\"pi\" textColor=\"neutral600\">{`/ ${totalCredits}`}</Typography>\n </Flex>\n <Flex width=\"100%\">\n <StyledProgressBar\n value={percentOverage}\n size=\"M\"\n $variant=\"danger\"\n aria-label={`${overage.toFixed(2)} credits used above the ${totalCredits} credits available in your plan`}\n />\n </Flex>\n </>\n )}\n {!isTrial && (\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {formatMessage({\n id: 'Settings.application.ai-usage.overage-rate',\n defaultMessage: '+$1.50 per 100 credits above plan limit',\n })}\n </Typography>\n )}\n </Flex>\n </Flex>\n );\n};\n"],"names":["StyledProgressBar","styled","ProgressBar","theme","colors","neutral200","$variant","danger600","neutral700","AIUsage","isTrial","formatMessage","useIntl","isAIAvailable","useAIAvailability","data","isLoading","error","useGetAiUsageQuery","undefined","refetchOnMountOrArgChange","skip","subscription","cmsAiEnabled","totalCredits","cmsAiCreditsBase","usedCredits","cmsAiCreditsUsed","maxCredits","cmsAiCreditsMaxUsage","overage","percentRemaining","percentOverage","isInOverages","_jsxs","Flex","direction","alignItems","gap","_jsx","Typography","variant","textColor","id","defaultMessage","_Fragment","toFixed","width","value","size","aria-label"],"mappings":"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"}
@@ -1,23 +1,22 @@
1
1
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
2
- import { Typography, Flex, Grid, ProgressBar } from '@strapi/design-system';
2
+ import { Flex, Typography, ProgressBar } from '@strapi/design-system';
3
3
  import { useIntl } from 'react-intl';
4
4
  import { styled } from 'styled-components';
5
5
  import { useAIAvailability } from '../../../../../hooks/useAIAvailability.mjs';
6
6
  import { useGetAiUsageQuery } from '../../../../../services/ai.mjs';
7
7
 
8
- const StyledProgressBar = styled(ProgressBar)`
8
+ /**
9
+ * The fill colour has to come from a transient prop. `ProgressBar` forwards unknown props onto
10
+ * the underlying Radix div, so the `color="danger"` this used to be given was landing as an HTML
11
+ * `color` attribute and never reaching the fill — the overage bar rendered neutral, not red.
12
+ */ const StyledProgressBar = styled(ProgressBar)`
9
13
  width: 100%;
10
14
  background-color: ${({ theme })=>theme.colors.neutral200};
11
15
  > div {
12
- background-color: ${({ theme })=>theme.colors.neutral700};
16
+ background-color: ${({ theme, $variant })=>$variant === 'danger' ? theme.colors.danger600 : theme.colors.neutral700};
13
17
  }
14
18
  `;
15
- const StyledGridItem = styled(Grid.Item)`
16
- ${({ theme })=>theme.breakpoints.large} {
17
- grid-column: 7 / 13;
18
- }
19
- `;
20
- const AIUsage = ()=>{
19
+ const AIUsage = ({ isTrial = false })=>{
21
20
  const { formatMessage } = useIntl();
22
21
  const isAIAvailable = useAIAvailability();
23
22
  const { data, isLoading, error } = useGetAiUsageQuery(undefined, {
@@ -44,9 +43,7 @@ const AIUsage = ()=>{
44
43
  const percentRemaining = usedCredits / totalCredits * 100;
45
44
  const percentOverage = usedCredits / maxCredits * 100;
46
45
  const isInOverages = overage > 0 && maxCredits !== totalCredits;
47
- return /*#__PURE__*/ jsxs(StyledGridItem, {
48
- col: 6,
49
- s: 12,
46
+ return /*#__PURE__*/ jsxs(Flex, {
50
47
  direction: "column",
51
48
  alignItems: "start",
52
49
  gap: 2,
@@ -66,35 +63,68 @@ const AIUsage = ()=>{
66
63
  children: [
67
64
  !isInOverages && /*#__PURE__*/ jsxs(Fragment, {
68
65
  children: [
66
+ /*#__PURE__*/ jsxs(Flex, {
67
+ direction: "row",
68
+ alignItems: "baseline",
69
+ gap: 1,
70
+ children: [
71
+ /*#__PURE__*/ jsx(Typography, {
72
+ children: `${usedCredits.toFixed(2)}`
73
+ }),
74
+ /*#__PURE__*/ jsx(Typography, {
75
+ variant: "pi",
76
+ textColor: "neutral600",
77
+ children: `/ ${totalCredits}`
78
+ })
79
+ ]
80
+ }),
69
81
  /*#__PURE__*/ jsx(Flex, {
70
82
  width: "100%",
71
83
  children: /*#__PURE__*/ jsx(StyledProgressBar, {
72
84
  value: percentRemaining,
73
- size: "M"
85
+ size: "M",
86
+ "aria-label": `${usedCredits.toFixed(2)} credits used from ${totalCredits} credits available in your plan`
74
87
  })
75
- }),
76
- /*#__PURE__*/ jsx(Typography, {
77
- variant: "omega",
78
- children: `${usedCredits.toFixed(2)} credits used from ${totalCredits} credits available in your plan`
79
88
  })
80
89
  ]
81
90
  }),
82
91
  isInOverages && /*#__PURE__*/ jsxs(Fragment, {
83
92
  children: [
93
+ /*#__PURE__*/ jsxs(Flex, {
94
+ direction: "row",
95
+ alignItems: "baseline",
96
+ gap: 1,
97
+ children: [
98
+ /*#__PURE__*/ jsx(Typography, {
99
+ variant: "epsilon",
100
+ textColor: "danger600",
101
+ children: `${overage.toFixed(2)}`
102
+ }),
103
+ /*#__PURE__*/ jsx(Typography, {
104
+ variant: "pi",
105
+ textColor: "neutral600",
106
+ children: `/ ${totalCredits}`
107
+ })
108
+ ]
109
+ }),
84
110
  /*#__PURE__*/ jsx(Flex, {
85
111
  width: "100%",
86
112
  children: /*#__PURE__*/ jsx(StyledProgressBar, {
87
113
  value: percentOverage,
88
114
  size: "M",
89
- color: "danger"
115
+ $variant: "danger",
116
+ "aria-label": `${overage.toFixed(2)} credits used above the ${totalCredits} credits available in your plan`
90
117
  })
91
- }),
92
- /*#__PURE__*/ jsx(Typography, {
93
- variant: "omega",
94
- textColor: "danger600",
95
- children: `${overage.toFixed(2)} credits used above the ${totalCredits} credits available in your plan`
96
118
  })
97
119
  ]
120
+ }),
121
+ !isTrial && /*#__PURE__*/ jsx(Typography, {
122
+ variant: "pi",
123
+ textColor: "neutral600",
124
+ children: formatMessage({
125
+ id: 'Settings.application.ai-usage.overage-rate',
126
+ defaultMessage: '+$1.50 per 100 credits above plan limit'
127
+ })
98
128
  })
99
129
  ]
100
130
  })
@@ -1 +1 @@
1
- {"version":3,"file":"AIUsage.mjs","sources":["../../../../../../../../../../ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.tsx"],"sourcesContent":["import { Flex, Typography, Grid, ProgressBar } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { useAIAvailability } from '../../../../../hooks/useAIAvailability';\nimport { useGetAiUsageQuery } from '../../../../../services/ai';\n\nconst StyledProgressBar = styled(ProgressBar)`\n width: 100%;\n background-color: ${({ theme }) => theme.colors.neutral200};\n > div {\n background-color: ${({ theme }) => theme.colors.neutral700};\n }\n`;\n\nconst StyledGridItem = styled(Grid.Item)`\n ${({ theme }) => theme.breakpoints.large} {\n grid-column: 7 / 13;\n }\n`;\n\nexport const AIUsage = () => {\n const { formatMessage } = useIntl();\n const isAIAvailable = useAIAvailability();\n const { data, isLoading, error } = useGetAiUsageQuery(undefined, {\n refetchOnMountOrArgChange: true,\n skip: !isAIAvailable,\n });\n\n if (!isAIAvailable) {\n return null;\n }\n\n if (isLoading) {\n return null;\n }\n\n if (error || !data) {\n return null;\n }\n\n if (!data.subscription?.cmsAiEnabled) {\n return null;\n }\n\n // Calculate remaining credits and total\n const totalCredits = data.subscription.cmsAiCreditsBase;\n const usedCredits = data.cmsAiCreditsUsed;\n const maxCredits = data.subscription.cmsAiCreditsMaxUsage;\n const overage = usedCredits - totalCredits;\n const percentRemaining = (usedCredits / totalCredits) * 100;\n const percentOverage = (usedCredits / maxCredits) * 100;\n\n const isInOverages = overage > 0 && maxCredits !== totalCredits;\n\n return (\n <StyledGridItem col={6} s={12} direction=\"column\" alignItems=\"start\" gap={2}>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'Settings.application.ai-usage',\n defaultMessage: 'AI Usage',\n })}\n </Typography>\n <Flex gap={2} direction=\"column\" alignItems=\"flex-start\">\n {!isInOverages && (\n <>\n <Flex width=\"100%\">\n <StyledProgressBar value={percentRemaining} size=\"M\" />\n </Flex>\n <Typography variant=\"omega\">\n {`${usedCredits.toFixed(2)} credits used from ${totalCredits} credits available in your plan`}\n </Typography>\n </>\n )}\n {isInOverages && (\n <>\n <Flex width=\"100%\">\n <StyledProgressBar value={percentOverage} size=\"M\" color=\"danger\" />\n </Flex>\n <Typography variant=\"omega\" textColor=\"danger600\">\n {`${overage.toFixed(2)} credits used above the ${totalCredits} credits available in your plan`}\n </Typography>\n </>\n )}\n </Flex>\n </StyledGridItem>\n );\n};\n"],"names":["StyledProgressBar","styled","ProgressBar","theme","colors","neutral200","neutral700","StyledGridItem","Grid","Item","breakpoints","large","AIUsage","formatMessage","useIntl","isAIAvailable","useAIAvailability","data","isLoading","error","useGetAiUsageQuery","undefined","refetchOnMountOrArgChange","skip","subscription","cmsAiEnabled","totalCredits","cmsAiCreditsBase","usedCredits","cmsAiCreditsUsed","maxCredits","cmsAiCreditsMaxUsage","overage","percentRemaining","percentOverage","isInOverages","_jsxs","col","s","direction","alignItems","gap","_jsx","Typography","variant","textColor","id","defaultMessage","Flex","_Fragment","width","value","size","toFixed","color"],"mappings":"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"}
1
+ {"version":3,"file":"AIUsage.mjs","sources":["../../../../../../../../../../ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.tsx"],"sourcesContent":["import { Flex, Typography, ProgressBar } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { useAIAvailability } from '../../../../../hooks/useAIAvailability';\nimport { useGetAiUsageQuery } from '../../../../../services/ai';\n\n/**\n * The fill colour has to come from a transient prop. `ProgressBar` forwards unknown props onto\n * the underlying Radix div, so the `color=\"danger\"` this used to be given was landing as an HTML\n * `color` attribute and never reaching the fill — the overage bar rendered neutral, not red.\n */\nconst StyledProgressBar = styled(ProgressBar)<{ $variant?: 'neutral' | 'danger' }>`\n width: 100%;\n background-color: ${({ theme }) => theme.colors.neutral200};\n > div {\n background-color: ${({ theme, $variant }) =>\n $variant === 'danger' ? theme.colors.danger600 : theme.colors.neutral700};\n }\n`;\n\ninterface AIUsageProps {\n /** Trials are not billed for overages, so the rate line is meaningless to them. */\n isTrial?: boolean;\n}\n\nexport const AIUsage = ({ isTrial = false }: AIUsageProps) => {\n const { formatMessage } = useIntl();\n const isAIAvailable = useAIAvailability();\n const { data, isLoading, error } = useGetAiUsageQuery(undefined, {\n refetchOnMountOrArgChange: true,\n skip: !isAIAvailable,\n });\n\n if (!isAIAvailable) {\n return null;\n }\n\n if (isLoading) {\n return null;\n }\n\n if (error || !data) {\n return null;\n }\n\n if (!data.subscription?.cmsAiEnabled) {\n return null;\n }\n\n // Calculate remaining credits and total\n const totalCredits = data.subscription.cmsAiCreditsBase;\n const usedCredits = data.cmsAiCreditsUsed;\n const maxCredits = data.subscription.cmsAiCreditsMaxUsage;\n const overage = usedCredits - totalCredits;\n const percentRemaining = (usedCredits / totalCredits) * 100;\n const percentOverage = (usedCredits / maxCredits) * 100;\n\n const isInOverages = overage > 0 && maxCredits !== totalCredits;\n\n return (\n <Flex direction=\"column\" alignItems=\"start\" gap={2}>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'Settings.application.ai-usage',\n defaultMessage: 'AI Usage',\n })}\n </Typography>\n <Flex gap={2} direction=\"column\" alignItems=\"flex-start\">\n {!isInOverages && (\n <>\n <Flex direction=\"row\" alignItems=\"baseline\" gap={1}>\n <Typography>{`${usedCredits.toFixed(2)}`}</Typography>\n <Typography variant=\"pi\" textColor=\"neutral600\">{`/ ${totalCredits}`}</Typography>\n </Flex>\n <Flex width=\"100%\">\n {/* The \"12.00 / 100\" pair above is only meaningful next to the bar, so the bar\n carries the full sentence for screen readers. */}\n <StyledProgressBar\n value={percentRemaining}\n size=\"M\"\n aria-label={`${usedCredits.toFixed(2)} credits used from ${totalCredits} credits available in your plan`}\n />\n </Flex>\n </>\n )}\n {isInOverages && (\n <>\n <Flex direction=\"row\" alignItems=\"baseline\" gap={1}>\n <Typography variant=\"epsilon\" textColor=\"danger600\">\n {`${overage.toFixed(2)}`}\n </Typography>\n <Typography variant=\"pi\" textColor=\"neutral600\">{`/ ${totalCredits}`}</Typography>\n </Flex>\n <Flex width=\"100%\">\n <StyledProgressBar\n value={percentOverage}\n size=\"M\"\n $variant=\"danger\"\n aria-label={`${overage.toFixed(2)} credits used above the ${totalCredits} credits available in your plan`}\n />\n </Flex>\n </>\n )}\n {!isTrial && (\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {formatMessage({\n id: 'Settings.application.ai-usage.overage-rate',\n defaultMessage: '+$1.50 per 100 credits above plan limit',\n })}\n </Typography>\n )}\n </Flex>\n </Flex>\n );\n};\n"],"names":["StyledProgressBar","styled","ProgressBar","theme","colors","neutral200","$variant","danger600","neutral700","AIUsage","isTrial","formatMessage","useIntl","isAIAvailable","useAIAvailability","data","isLoading","error","useGetAiUsageQuery","undefined","refetchOnMountOrArgChange","skip","subscription","cmsAiEnabled","totalCredits","cmsAiCreditsBase","usedCredits","cmsAiCreditsUsed","maxCredits","cmsAiCreditsMaxUsage","overage","percentRemaining","percentOverage","isInOverages","_jsxs","Flex","direction","alignItems","gap","_jsx","Typography","variant","textColor","id","defaultMessage","_Fragment","toFixed","width","value","size","aria-label"],"mappings":"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"}
@@ -9,8 +9,6 @@ var useRBAC = require('../../../../../../../../admin/src/hooks/useRBAC.js');
9
9
  var selectors = require('../../../../../../../../admin/src/selectors.js');
10
10
  var useLicenseLimits = require('../../../../../hooks/useLicenseLimits.js');
11
11
 
12
- const BILLING_SELF_HOSTED_URL = 'mailto:sales@strapi.io';
13
- const MANAGE_SUBSCRIPTION_URL = 'https://billing.strapi.io';
14
12
  const AdminSeatInfoEE = ()=>{
15
13
  const { formatMessage } = reactIntl.useIntl();
16
14
  const { settings } = reactRedux.useSelector(selectors.selectAdminPermissions);
@@ -26,15 +24,22 @@ const AdminSeatInfoEE = ()=>{
26
24
  if (isError || isLoading || !license) {
27
25
  return null;
28
26
  }
29
- const { licenseLimitStatus, enforcementUserCount, permittedSeats, type } = license;
30
- if (!permittedSeats) {
27
+ const { enforcementUserCount, permittedSeats, seats } = license;
28
+ // `permittedSeats` is the live enforcement limit and is wiped once the licence stops being
29
+ // usable, so fall back to the retained `seats` to keep showing the count on an expired
30
+ // licence. Enforcement itself (`licenseLimitStatus`, `shouldStopCreate`) still runs off
31
+ // `permittedSeats` server-side and is untouched by this.
32
+ const seatLimit = permittedSeats ?? seats;
33
+ if (!seatLimit) {
31
34
  return null;
32
35
  }
33
- return /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Grid.Item, {
34
- col: 6,
35
- xs: 12,
36
+ // The red count and the warning follow the same displayed limit. Server-side
37
+ // `licenseLimitStatus` tracks only the live limit, so it is empty once the licence expires.
38
+ const isOverLimit = enforcementUserCount > seatLimit;
39
+ return /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
36
40
  direction: "column",
37
- alignItems: "stretch",
41
+ alignItems: "start",
42
+ gap: 2,
38
43
  children: [
39
44
  /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
40
45
  variant: "sigma",
@@ -54,17 +59,17 @@ const AdminSeatInfoEE = ()=>{
54
59
  id: 'Settings.application.ee.admin-seats.count',
55
60
  defaultMessage: '<text>{enforcementUserCount}</text>/{permittedSeats}'
56
61
  }, {
57
- permittedSeats,
62
+ permittedSeats: seatLimit,
58
63
  enforcementUserCount,
59
64
  text: (chunks)=>/*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
60
65
  fontWeight: "semiBold",
61
- textColor: enforcementUserCount > permittedSeats ? 'danger500' : undefined,
66
+ textColor: isOverLimit ? 'danger500' : undefined,
62
67
  children: chunks
63
68
  })
64
69
  })
65
70
  })
66
71
  }),
67
- licenseLimitStatus === 'OVER_LIMIT' && /*#__PURE__*/ jsxRuntime.jsx(designSystem.Tooltip, {
72
+ isOverLimit && /*#__PURE__*/ jsxRuntime.jsx(designSystem.Tooltip, {
68
73
  label: formatMessage({
69
74
  id: 'Settings.application.ee.admin-seats.at-limit-tooltip',
70
75
  defaultMessage: 'At limit: add seats to invite more users'
@@ -76,24 +81,6 @@ const AdminSeatInfoEE = ()=>{
76
81
  })
77
82
  })
78
83
  ]
79
- }),
80
- type === 'gold' ? /*#__PURE__*/ jsxRuntime.jsx(designSystem.Link, {
81
- href: BILLING_SELF_HOSTED_URL,
82
- endIcon: /*#__PURE__*/ jsxRuntime.jsx(icons.ExternalLink, {}),
83
- target: "_blank",
84
- children: formatMessage({
85
- id: 'Settings.application.ee.admin-seats.support',
86
- defaultMessage: 'Contact sales'
87
- })
88
- }) : /*#__PURE__*/ jsxRuntime.jsx(designSystem.Link, {
89
- href: MANAGE_SUBSCRIPTION_URL,
90
- isExternal: true,
91
- endIcon: /*#__PURE__*/ jsxRuntime.jsx(icons.ExternalLink, {}),
92
- target: "_blank",
93
- children: formatMessage({
94
- id: 'Settings.application.ee.admin-seats.add-seats',
95
- defaultMessage: 'Manage subscription'
96
- })
97
84
  })
98
85
  ]
99
86
  });
@@ -1 +1 @@
1
- {"version":3,"file":"AdminSeatInfo.js","sources":["../../../../../../../../../../ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AdminSeatInfo.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\n\nimport { Flex, Tooltip, Typography, Link, Grid } from '@strapi/design-system';\nimport { ExternalLink, WarningCircle } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { useSelector } from 'react-redux';\n\nimport { useRBAC } from '../../../../../../../../admin/src/hooks/useRBAC';\nimport { selectAdminPermissions } from '../../../../../../../../admin/src/selectors';\nimport { useLicenseLimits } from '../../../../../hooks/useLicenseLimits';\n\nconst BILLING_SELF_HOSTED_URL = 'mailto:sales@strapi.io';\nconst MANAGE_SUBSCRIPTION_URL = 'https://billing.strapi.io';\n\nexport const AdminSeatInfoEE = () => {\n const { formatMessage } = useIntl();\n const { settings } = useSelector(selectAdminPermissions);\n const {\n isLoading: isRBACLoading,\n allowedActions: { canRead, canCreate, canUpdate, canDelete },\n } = useRBAC(settings?.users ?? {});\n const {\n license,\n isError,\n isLoading: isLicenseLoading,\n } = useLicenseLimits({\n // TODO: this creates a waterfall which we should avoid to render earlier, but for that\n // we will have to move away from data-fetching hooks to query functions.\n // Short-term we could at least implement a loader, for the user to have visual feedback\n // in case the requests take a while\n enabled: !isRBACLoading && canRead && canCreate && canUpdate && canDelete,\n });\n\n const isLoading = isRBACLoading || isLicenseLoading;\n\n if (isError || isLoading || !license) {\n return null;\n }\n\n const { licenseLimitStatus, enforcementUserCount, permittedSeats, type } = license;\n\n if (!permittedSeats) {\n return null;\n }\n\n return (\n <Grid.Item col={6} xs={12} direction=\"column\" alignItems=\"stretch\">\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'Settings.application.admin-seats',\n defaultMessage: 'Admin seats',\n })}\n </Typography>\n <Flex gap={2}>\n <Flex>\n <Typography tag=\"p\">\n {formatMessage(\n {\n id: 'Settings.application.ee.admin-seats.count',\n defaultMessage: '<text>{enforcementUserCount}</text>/{permittedSeats}',\n },\n {\n permittedSeats,\n enforcementUserCount,\n text: (chunks: ReactNode) => (\n <Typography\n fontWeight=\"semiBold\"\n textColor={enforcementUserCount > permittedSeats ? 'danger500' : undefined}\n >\n {chunks}\n </Typography>\n ),\n }\n )}\n </Typography>\n </Flex>\n {licenseLimitStatus === 'OVER_LIMIT' && (\n <Tooltip\n label={formatMessage({\n id: 'Settings.application.ee.admin-seats.at-limit-tooltip',\n defaultMessage: 'At limit: add seats to invite more users',\n })}\n >\n <WarningCircle width=\"1.4rem\" height=\"1.4rem\" fill=\"danger500\" />\n </Tooltip>\n )}\n </Flex>\n {type === 'gold' ? (\n <Link href={BILLING_SELF_HOSTED_URL} endIcon={<ExternalLink />} target=\"_blank\">\n {formatMessage({\n id: 'Settings.application.ee.admin-seats.support',\n defaultMessage: 'Contact sales',\n })}\n </Link>\n ) : (\n <Link href={MANAGE_SUBSCRIPTION_URL} isExternal endIcon={<ExternalLink />} target=\"_blank\">\n {formatMessage({\n id: 'Settings.application.ee.admin-seats.add-seats',\n defaultMessage: 'Manage subscription',\n })}\n </Link>\n )}\n </Grid.Item>\n );\n};\n"],"names":["BILLING_SELF_HOSTED_URL","MANAGE_SUBSCRIPTION_URL","AdminSeatInfoEE","formatMessage","useIntl","settings","useSelector","selectAdminPermissions","isLoading","isRBACLoading","allowedActions","canRead","canCreate","canUpdate","canDelete","useRBAC","users","license","isError","isLicenseLoading","useLicenseLimits","enabled","licenseLimitStatus","enforcementUserCount","permittedSeats","type","_jsxs","Grid","Item","col","xs","direction","alignItems","_jsx","Typography","variant","textColor","id","defaultMessage","Flex","gap","tag","text","chunks","fontWeight","undefined","Tooltip","label","WarningCircle","width","height","fill","Link","href","endIcon","ExternalLink","target","isExternal"],"mappings":"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"}
1
+ {"version":3,"file":"AdminSeatInfo.js","sources":["../../../../../../../../../../ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AdminSeatInfo.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\n\nimport { Flex, Tooltip, Typography } from '@strapi/design-system';\nimport { WarningCircle } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { useSelector } from 'react-redux';\n\nimport { useRBAC } from '../../../../../../../../admin/src/hooks/useRBAC';\nimport { selectAdminPermissions } from '../../../../../../../../admin/src/selectors';\nimport { useLicenseLimits } from '../../../../../hooks/useLicenseLimits';\n\nexport const AdminSeatInfoEE = () => {\n const { formatMessage } = useIntl();\n const { settings } = useSelector(selectAdminPermissions);\n const {\n isLoading: isRBACLoading,\n allowedActions: { canRead, canCreate, canUpdate, canDelete },\n } = useRBAC(settings?.users ?? {});\n const {\n license,\n isError,\n isLoading: isLicenseLoading,\n } = useLicenseLimits({\n // TODO: this creates a waterfall which we should avoid to render earlier, but for that\n // we will have to move away from data-fetching hooks to query functions.\n // Short-term we could at least implement a loader, for the user to have visual feedback\n // in case the requests take a while\n enabled: !isRBACLoading && canRead && canCreate && canUpdate && canDelete,\n });\n\n const isLoading = isRBACLoading || isLicenseLoading;\n\n if (isError || isLoading || !license) {\n return null;\n }\n\n const { enforcementUserCount, permittedSeats, seats } = license;\n\n // `permittedSeats` is the live enforcement limit and is wiped once the licence stops being\n // usable, so fall back to the retained `seats` to keep showing the count on an expired\n // licence. Enforcement itself (`licenseLimitStatus`, `shouldStopCreate`) still runs off\n // `permittedSeats` server-side and is untouched by this.\n const seatLimit = permittedSeats ?? seats;\n\n if (!seatLimit) {\n return null;\n }\n\n // The red count and the warning follow the same displayed limit. Server-side\n // `licenseLimitStatus` tracks only the live limit, so it is empty once the licence expires.\n const isOverLimit = enforcementUserCount > seatLimit;\n\n return (\n <Flex direction=\"column\" alignItems=\"start\" gap={2}>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'Settings.application.admin-seats',\n defaultMessage: 'Admin seats',\n })}\n </Typography>\n <Flex gap={2}>\n <Flex>\n <Typography tag=\"p\">\n {formatMessage(\n {\n id: 'Settings.application.ee.admin-seats.count',\n defaultMessage: '<text>{enforcementUserCount}</text>/{permittedSeats}',\n },\n {\n permittedSeats: seatLimit,\n enforcementUserCount,\n text: (chunks: ReactNode) => (\n <Typography\n fontWeight=\"semiBold\"\n textColor={isOverLimit ? 'danger500' : undefined}\n >\n {chunks}\n </Typography>\n ),\n }\n )}\n </Typography>\n </Flex>\n {isOverLimit && (\n <Tooltip\n label={formatMessage({\n id: 'Settings.application.ee.admin-seats.at-limit-tooltip',\n defaultMessage: 'At limit: add seats to invite more users',\n })}\n >\n <WarningCircle width=\"1.4rem\" height=\"1.4rem\" fill=\"danger500\" />\n </Tooltip>\n )}\n </Flex>\n </Flex>\n );\n};\n"],"names":["AdminSeatInfoEE","formatMessage","useIntl","settings","useSelector","selectAdminPermissions","isLoading","isRBACLoading","allowedActions","canRead","canCreate","canUpdate","canDelete","useRBAC","users","license","isError","isLicenseLoading","useLicenseLimits","enabled","enforcementUserCount","permittedSeats","seats","seatLimit","isOverLimit","_jsxs","Flex","direction","alignItems","gap","_jsx","Typography","variant","textColor","id","defaultMessage","tag","text","chunks","fontWeight","undefined","Tooltip","label","WarningCircle","width","height","fill"],"mappings":";;;;;;;;;;;MAWaA,eAAAA,GAAkB,IAAA;IAC7B,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAC1B,IAAA,MAAM,EAAEC,QAAQ,EAAE,GAAGC,sBAAAA,CAAYC,gCAAAA,CAAAA;AACjC,IAAA,MAAM,EACJC,SAAAA,EAAWC,aAAa,EACxBC,cAAAA,EAAgB,EAAEC,OAAO,EAAEC,SAAS,EAAEC,SAAS,EAAEC,SAAS,EAAE,EAC7D,GAAGC,eAAAA,CAAQV,QAAAA,EAAUW,SAAS,EAAC,CAAA;IAChC,MAAM,EACJC,OAAO,EACPC,OAAO,EACPV,SAAAA,EAAWW,gBAAgB,EAC5B,GAAGC,iCAAAA,CAAiB;;;;;AAKnBC,QAAAA,OAAAA,EAAS,CAACZ,aAAAA,IAAiBE,OAAAA,IAAWC,SAAAA,IAAaC,SAAAA,IAAaC;AAClE,KAAA,CAAA;AAEA,IAAA,MAAMN,YAAYC,aAAAA,IAAiBU,gBAAAA;IAEnC,IAAID,OAAAA,IAAWV,SAAAA,IAAa,CAACS,OAAAA,EAAS;QACpC,OAAO,IAAA;AACT,IAAA;AAEA,IAAA,MAAM,EAAEK,oBAAoB,EAAEC,cAAc,EAAEC,KAAK,EAAE,GAAGP,OAAAA;;;;;AAMxD,IAAA,MAAMQ,YAAYF,cAAAA,IAAkBC,KAAAA;AAEpC,IAAA,IAAI,CAACC,SAAAA,EAAW;QACd,OAAO,IAAA;AACT,IAAA;;;AAIA,IAAA,MAAMC,cAAcJ,oBAAAA,GAAuBG,SAAAA;AAE3C,IAAA,qBACEE,eAAA,CAACC,iBAAAA,EAAAA;QAAKC,SAAAA,EAAU,QAAA;QAASC,UAAAA,EAAW,OAAA;QAAQC,GAAAA,EAAK,CAAA;;0BAC/CC,cAAA,CAACC,uBAAAA,EAAAA;gBAAWC,OAAAA,EAAQ,OAAA;gBAAQC,SAAAA,EAAU,YAAA;0BACnChC,aAAAA,CAAc;oBACbiC,EAAAA,EAAI,kCAAA;oBACJC,cAAAA,EAAgB;AAClB,iBAAA;;0BAEFV,eAAA,CAACC,iBAAAA,EAAAA;gBAAKG,GAAAA,EAAK,CAAA;;kCACTC,cAAA,CAACJ,iBAAAA,EAAAA;AACC,wBAAA,QAAA,gBAAAI,cAAA,CAACC,uBAAAA,EAAAA;4BAAWK,GAAAA,EAAI,GAAA;sCACbnC,aAAAA,CACC;gCACEiC,EAAAA,EAAI,2CAAA;gCACJC,cAAAA,EAAgB;6BAClB,EACA;gCACEd,cAAAA,EAAgBE,SAAAA;AAChBH,gCAAAA,oBAAAA;gCACAiB,IAAAA,EAAM,CAACC,uBACLR,cAAA,CAACC,uBAAAA,EAAAA;wCACCQ,UAAAA,EAAW,UAAA;AACXN,wCAAAA,SAAAA,EAAWT,cAAc,WAAA,GAAcgB,SAAAA;AAEtCF,wCAAAA,QAAAA,EAAAA;;AAGP,6BAAA;;;AAILd,oBAAAA,WAAAA,kBACCM,cAAA,CAACW,oBAAAA,EAAAA;AACCC,wBAAAA,KAAAA,EAAOzC,aAAAA,CAAc;4BACnBiC,EAAAA,EAAI,sDAAA;4BACJC,cAAAA,EAAgB;AAClB,yBAAA,CAAA;AAEA,wBAAA,QAAA,gBAAAL,cAAA,CAACa,mBAAAA,EAAAA;4BAAcC,KAAAA,EAAM,QAAA;4BAASC,MAAAA,EAAO,QAAA;4BAASC,IAAAA,EAAK;;;;;;;AAM/D;;;;"}