@strapi/admin 5.25.0 → 5.27.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 (336) hide show
  1. package/dist/admin/admin/src/App.js +6 -2
  2. package/dist/admin/admin/src/App.js.map +1 -1
  3. package/dist/admin/admin/src/App.mjs +7 -3
  4. package/dist/admin/admin/src/App.mjs.map +1 -1
  5. package/dist/admin/admin/src/components/ErrorElement.js +10 -3
  6. package/dist/admin/admin/src/components/ErrorElement.js.map +1 -1
  7. package/dist/admin/admin/src/components/ErrorElement.mjs +10 -3
  8. package/dist/admin/admin/src/components/ErrorElement.mjs.map +1 -1
  9. package/dist/admin/admin/src/components/GuidedTour/Context.js +26 -1
  10. package/dist/admin/admin/src/components/GuidedTour/Context.js.map +1 -1
  11. package/dist/admin/admin/src/components/GuidedTour/Context.mjs +26 -1
  12. package/dist/admin/admin/src/components/GuidedTour/Context.mjs.map +1 -1
  13. package/dist/admin/admin/src/components/GuidedTour/GuidedTourProvider.js +15 -0
  14. package/dist/admin/admin/src/components/GuidedTour/GuidedTourProvider.js.map +1 -0
  15. package/dist/admin/admin/src/components/GuidedTour/GuidedTourProvider.mjs +13 -0
  16. package/dist/admin/admin/src/components/GuidedTour/GuidedTourProvider.mjs.map +1 -0
  17. package/dist/admin/admin/src/components/GuidedTour/Overview.js +2 -1
  18. package/dist/admin/admin/src/components/GuidedTour/Overview.js.map +1 -1
  19. package/dist/admin/admin/src/components/GuidedTour/Overview.mjs +2 -1
  20. package/dist/admin/admin/src/components/GuidedTour/Overview.mjs.map +1 -1
  21. package/dist/admin/admin/src/components/GuidedTour/Steps/ContentTypeBuilderSteps.js +162 -25
  22. package/dist/admin/admin/src/components/GuidedTour/Steps/ContentTypeBuilderSteps.js.map +1 -1
  23. package/dist/admin/admin/src/components/GuidedTour/Steps/ContentTypeBuilderSteps.mjs +164 -27
  24. package/dist/admin/admin/src/components/GuidedTour/Steps/ContentTypeBuilderSteps.mjs.map +1 -1
  25. package/dist/admin/admin/src/components/GuidedTour/Steps/Step.js +28 -9
  26. package/dist/admin/admin/src/components/GuidedTour/Steps/Step.js.map +1 -1
  27. package/dist/admin/admin/src/components/GuidedTour/Steps/Step.mjs +30 -11
  28. package/dist/admin/admin/src/components/GuidedTour/Steps/Step.mjs.map +1 -1
  29. package/dist/admin/admin/src/components/GuidedTour/Tours.js +1 -1
  30. package/dist/admin/admin/src/components/GuidedTour/Tours.js.map +1 -1
  31. package/dist/admin/admin/src/components/GuidedTour/Tours.mjs +1 -1
  32. package/dist/admin/admin/src/components/GuidedTour/Tours.mjs.map +1 -1
  33. package/dist/admin/admin/src/components/GuidedTour/utils/migrations.js +2 -1
  34. package/dist/admin/admin/src/components/GuidedTour/utils/migrations.js.map +1 -1
  35. package/dist/admin/admin/src/components/GuidedTour/utils/migrations.mjs +2 -1
  36. package/dist/admin/admin/src/components/GuidedTour/utils/migrations.mjs.map +1 -1
  37. package/dist/admin/admin/src/components/Layouts/ActionLayout.js +3 -2
  38. package/dist/admin/admin/src/components/Layouts/ActionLayout.js.map +1 -1
  39. package/dist/admin/admin/src/components/Layouts/ActionLayout.mjs +3 -2
  40. package/dist/admin/admin/src/components/Layouts/ActionLayout.mjs.map +1 -1
  41. package/dist/admin/admin/src/components/Layouts/ContentLayout.js +3 -2
  42. package/dist/admin/admin/src/components/Layouts/ContentLayout.js.map +1 -1
  43. package/dist/admin/admin/src/components/Layouts/ContentLayout.mjs +3 -2
  44. package/dist/admin/admin/src/components/Layouts/ContentLayout.mjs.map +1 -1
  45. package/dist/admin/admin/src/components/Layouts/HeaderLayout.js +65 -32
  46. package/dist/admin/admin/src/components/Layouts/HeaderLayout.js.map +1 -1
  47. package/dist/admin/admin/src/components/Layouts/HeaderLayout.mjs +66 -33
  48. package/dist/admin/admin/src/components/Layouts/HeaderLayout.mjs.map +1 -1
  49. package/dist/admin/admin/src/components/Layouts/Layout.js +29 -6
  50. package/dist/admin/admin/src/components/Layouts/Layout.js.map +1 -1
  51. package/dist/admin/admin/src/components/Layouts/Layout.mjs +30 -7
  52. package/dist/admin/admin/src/components/Layouts/Layout.mjs.map +1 -1
  53. package/dist/admin/admin/src/components/LeftMenu.js +147 -92
  54. package/dist/admin/admin/src/components/LeftMenu.js.map +1 -1
  55. package/dist/admin/admin/src/components/LeftMenu.mjs +131 -95
  56. package/dist/admin/admin/src/components/LeftMenu.mjs.map +1 -1
  57. package/dist/admin/admin/src/components/MainNav/MainNav.js +20 -6
  58. package/dist/admin/admin/src/components/MainNav/MainNav.js.map +1 -1
  59. package/dist/admin/admin/src/components/MainNav/MainNav.mjs +20 -6
  60. package/dist/admin/admin/src/components/MainNav/MainNav.mjs.map +1 -1
  61. package/dist/admin/admin/src/components/MainNav/MainNavLinks.js +157 -0
  62. package/dist/admin/admin/src/components/MainNav/MainNavLinks.js.map +1 -0
  63. package/dist/admin/admin/src/components/MainNav/MainNavLinks.mjs +154 -0
  64. package/dist/admin/admin/src/components/MainNav/MainNavLinks.mjs.map +1 -0
  65. package/dist/admin/admin/src/components/MainNav/NavBurgerMenu.js +65 -0
  66. package/dist/admin/admin/src/components/MainNav/NavBurgerMenu.js.map +1 -0
  67. package/dist/admin/admin/src/components/MainNav/NavBurgerMenu.mjs +63 -0
  68. package/dist/admin/admin/src/components/MainNav/NavBurgerMenu.mjs.map +1 -0
  69. package/dist/admin/admin/src/components/MainNav/NavLink.js +2 -1
  70. package/dist/admin/admin/src/components/MainNav/NavLink.js.map +1 -1
  71. package/dist/admin/admin/src/components/MainNav/NavLink.mjs +2 -1
  72. package/dist/admin/admin/src/components/MainNav/NavLink.mjs.map +1 -1
  73. package/dist/admin/admin/src/components/MainNav/NavUser.js +39 -22
  74. package/dist/admin/admin/src/components/MainNav/NavUser.js.map +1 -1
  75. package/dist/admin/admin/src/components/MainNav/NavUser.mjs +39 -22
  76. package/dist/admin/admin/src/components/MainNav/NavUser.mjs.map +1 -1
  77. package/dist/admin/admin/src/components/MainNav/TrialCountdown.js +8 -1
  78. package/dist/admin/admin/src/components/MainNav/TrialCountdown.js.map +1 -1
  79. package/dist/admin/admin/src/components/MainNav/TrialCountdown.mjs +9 -2
  80. package/dist/admin/admin/src/components/MainNav/TrialCountdown.mjs.map +1 -1
  81. package/dist/admin/admin/src/components/NpsSurvey.js +161 -120
  82. package/dist/admin/admin/src/components/NpsSurvey.js.map +1 -1
  83. package/dist/admin/admin/src/components/NpsSurvey.mjs +162 -121
  84. package/dist/admin/admin/src/components/NpsSurvey.mjs.map +1 -1
  85. package/dist/admin/admin/src/components/PageHelpers.js +1 -1
  86. package/dist/admin/admin/src/components/PageHelpers.js.map +1 -1
  87. package/dist/admin/admin/src/components/PageHelpers.mjs +1 -1
  88. package/dist/admin/admin/src/components/PageHelpers.mjs.map +1 -1
  89. package/dist/admin/admin/src/components/Providers.js +2 -4
  90. package/dist/admin/admin/src/components/Providers.js.map +1 -1
  91. package/dist/admin/admin/src/components/Providers.mjs +2 -4
  92. package/dist/admin/admin/src/components/Providers.mjs.map +1 -1
  93. package/dist/admin/admin/src/components/SubNav.js +98 -33
  94. package/dist/admin/admin/src/components/SubNav.js.map +1 -1
  95. package/dist/admin/admin/src/components/SubNav.mjs +99 -34
  96. package/dist/admin/admin/src/components/SubNav.mjs.map +1 -1
  97. package/dist/admin/admin/src/components/UpsellBanner.js +3 -2
  98. package/dist/admin/admin/src/components/UpsellBanner.js.map +1 -1
  99. package/dist/admin/admin/src/components/UpsellBanner.mjs +3 -2
  100. package/dist/admin/admin/src/components/UpsellBanner.mjs.map +1 -1
  101. package/dist/admin/admin/src/constants/theme.js +12 -0
  102. package/dist/admin/admin/src/constants/theme.js.map +1 -0
  103. package/dist/admin/admin/src/constants/theme.mjs +9 -0
  104. package/dist/admin/admin/src/constants/theme.mjs.map +1 -0
  105. package/dist/admin/admin/src/features/Notifications.js +14 -7
  106. package/dist/admin/admin/src/features/Notifications.js.map +1 -1
  107. package/dist/admin/admin/src/features/Notifications.mjs +15 -8
  108. package/dist/admin/admin/src/features/Notifications.mjs.map +1 -1
  109. package/dist/admin/admin/src/features/Tracking.js +7 -2
  110. package/dist/admin/admin/src/features/Tracking.js.map +1 -1
  111. package/dist/admin/admin/src/features/Tracking.mjs +7 -2
  112. package/dist/admin/admin/src/features/Tracking.mjs.map +1 -1
  113. package/dist/admin/admin/src/hooks/useAIAvailability.js +13 -0
  114. package/dist/admin/admin/src/hooks/useAIAvailability.js.map +1 -0
  115. package/dist/admin/admin/src/hooks/useAIAvailability.mjs +11 -0
  116. package/dist/admin/admin/src/hooks/useAIAvailability.mjs.map +1 -0
  117. package/dist/admin/admin/src/hooks/useDeviceType.js +43 -0
  118. package/dist/admin/admin/src/hooks/useDeviceType.js.map +1 -0
  119. package/dist/admin/admin/src/hooks/useDeviceType.mjs +22 -0
  120. package/dist/admin/admin/src/hooks/useDeviceType.mjs.map +1 -0
  121. package/dist/admin/admin/src/hooks/useMediaQuery.js +70 -0
  122. package/dist/admin/admin/src/hooks/useMediaQuery.js.map +1 -0
  123. package/dist/admin/admin/src/hooks/useMediaQuery.mjs +46 -0
  124. package/dist/admin/admin/src/hooks/useMediaQuery.mjs.map +1 -0
  125. package/dist/admin/admin/src/hooks/useMenu.js +19 -0
  126. package/dist/admin/admin/src/hooks/useMenu.js.map +1 -1
  127. package/dist/admin/admin/src/hooks/useMenu.mjs +19 -0
  128. package/dist/admin/admin/src/hooks/useMenu.mjs.map +1 -1
  129. package/dist/admin/admin/src/layouts/AuthenticatedLayout.js +15 -2
  130. package/dist/admin/admin/src/layouts/AuthenticatedLayout.js.map +1 -1
  131. package/dist/admin/admin/src/layouts/AuthenticatedLayout.mjs +15 -2
  132. package/dist/admin/admin/src/layouts/AuthenticatedLayout.mjs.map +1 -1
  133. package/dist/admin/admin/src/layouts/UnauthenticatedLayout.js +11 -7
  134. package/dist/admin/admin/src/layouts/UnauthenticatedLayout.js.map +1 -1
  135. package/dist/admin/admin/src/layouts/UnauthenticatedLayout.mjs +11 -7
  136. package/dist/admin/admin/src/layouts/UnauthenticatedLayout.mjs.map +1 -1
  137. package/dist/admin/admin/src/pages/Auth/components/Login.js +3 -0
  138. package/dist/admin/admin/src/pages/Auth/components/Login.js.map +1 -1
  139. package/dist/admin/admin/src/pages/Auth/components/Login.mjs +3 -0
  140. package/dist/admin/admin/src/pages/Auth/components/Login.mjs.map +1 -1
  141. package/dist/admin/admin/src/pages/Home/HomePage.js +56 -54
  142. package/dist/admin/admin/src/pages/Home/HomePage.js.map +1 -1
  143. package/dist/admin/admin/src/pages/Home/HomePage.mjs +56 -54
  144. package/dist/admin/admin/src/pages/Home/HomePage.mjs.map +1 -1
  145. package/dist/admin/admin/src/pages/ProfilePage.js +54 -51
  146. package/dist/admin/admin/src/pages/ProfilePage.js.map +1 -1
  147. package/dist/admin/admin/src/pages/ProfilePage.mjs +55 -52
  148. package/dist/admin/admin/src/pages/ProfilePage.mjs.map +1 -1
  149. package/dist/admin/admin/src/pages/Settings/Layout.js +42 -6
  150. package/dist/admin/admin/src/pages/Settings/Layout.js.map +1 -1
  151. package/dist/admin/admin/src/pages/Settings/Layout.mjs +43 -7
  152. package/dist/admin/admin/src/pages/Settings/Layout.mjs.map +1 -1
  153. package/dist/admin/admin/src/pages/Settings/components/SettingsNav.js +44 -32
  154. package/dist/admin/admin/src/pages/Settings/components/SettingsNav.js.map +1 -1
  155. package/dist/admin/admin/src/pages/Settings/components/SettingsNav.mjs +45 -33
  156. package/dist/admin/admin/src/pages/Settings/components/SettingsNav.mjs.map +1 -1
  157. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.js +13 -2
  158. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.js.map +1 -1
  159. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.mjs +14 -3
  160. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.mjs.map +1 -1
  161. package/dist/admin/admin/src/pages/Settings/pages/InstalledPlugins.js +1 -1
  162. package/dist/admin/admin/src/pages/Settings/pages/InstalledPlugins.js.map +1 -1
  163. package/dist/admin/admin/src/pages/Settings/pages/InstalledPlugins.mjs +2 -2
  164. package/dist/admin/admin/src/pages/Settings/pages/InstalledPlugins.mjs.map +1 -1
  165. package/dist/admin/admin/src/pages/Settings/pages/PurchaseAuditLogs.js +4 -3
  166. package/dist/admin/admin/src/pages/Settings/pages/PurchaseAuditLogs.js.map +1 -1
  167. package/dist/admin/admin/src/pages/Settings/pages/PurchaseAuditLogs.mjs +5 -4
  168. package/dist/admin/admin/src/pages/Settings/pages/PurchaseAuditLogs.mjs.map +1 -1
  169. package/dist/admin/admin/src/pages/Settings/pages/PurchaseContentHistory.js +4 -3
  170. package/dist/admin/admin/src/pages/Settings/pages/PurchaseContentHistory.js.map +1 -1
  171. package/dist/admin/admin/src/pages/Settings/pages/PurchaseContentHistory.mjs +5 -4
  172. package/dist/admin/admin/src/pages/Settings/pages/PurchaseContentHistory.mjs.map +1 -1
  173. package/dist/admin/admin/src/pages/Settings/pages/PurchaseSingleSignOn.js +4 -3
  174. package/dist/admin/admin/src/pages/Settings/pages/PurchaseSingleSignOn.js.map +1 -1
  175. package/dist/admin/admin/src/pages/Settings/pages/PurchaseSingleSignOn.mjs +5 -4
  176. package/dist/admin/admin/src/pages/Settings/pages/PurchaseSingleSignOn.mjs.map +1 -1
  177. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ContentTypeCollapses.js +36 -32
  178. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ContentTypeCollapses.js.map +1 -1
  179. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ContentTypeCollapses.mjs +36 -32
  180. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ContentTypeCollapses.mjs.map +1 -1
  181. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/ListPage.js +1 -1
  182. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/ListPage.js.map +1 -1
  183. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/ListPage.mjs +1 -1
  184. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/ListPage.mjs.map +1 -1
  185. package/dist/admin/admin/src/render.js +6 -1
  186. package/dist/admin/admin/src/render.js.map +1 -1
  187. package/dist/admin/admin/src/render.mjs +6 -1
  188. package/dist/admin/admin/src/render.mjs.map +1 -1
  189. package/dist/admin/admin/src/services/api.js +2 -1
  190. package/dist/admin/admin/src/services/api.js.map +1 -1
  191. package/dist/admin/admin/src/services/api.mjs +2 -1
  192. package/dist/admin/admin/src/services/api.mjs.map +1 -1
  193. package/dist/admin/admin/src/services/auth.js +13 -2
  194. package/dist/admin/admin/src/services/auth.js.map +1 -1
  195. package/dist/admin/admin/src/services/auth.mjs +12 -3
  196. package/dist/admin/admin/src/services/auth.mjs.map +1 -1
  197. package/dist/admin/admin/src/translations/en.json.js +3 -0
  198. package/dist/admin/admin/src/translations/en.json.js.map +1 -1
  199. package/dist/admin/admin/src/translations/en.json.mjs +3 -0
  200. package/dist/admin/admin/src/translations/en.json.mjs.map +1 -1
  201. package/dist/admin/ee/admin/src/components/GlobalNotifications.js +11 -0
  202. package/dist/admin/ee/admin/src/components/GlobalNotifications.js.map +1 -0
  203. package/dist/admin/ee/admin/src/components/GlobalNotifications.mjs +9 -0
  204. package/dist/admin/ee/admin/src/components/GlobalNotifications.mjs.map +1 -0
  205. package/dist/admin/ee/admin/src/hooks/useAIAvailability.js +11 -0
  206. package/dist/admin/ee/admin/src/hooks/useAIAvailability.js.map +1 -0
  207. package/dist/admin/ee/admin/src/hooks/useAIAvailability.mjs +9 -0
  208. package/dist/admin/ee/admin/src/hooks/useAIAvailability.mjs.map +1 -0
  209. package/dist/admin/ee/admin/src/hooks/useAIUsageWarning.js +82 -0
  210. package/dist/admin/ee/admin/src/hooks/useAIUsageWarning.js.map +1 -0
  211. package/dist/admin/ee/admin/src/hooks/useAIUsageWarning.mjs +80 -0
  212. package/dist/admin/ee/admin/src/hooks/useAIUsageWarning.mjs.map +1 -0
  213. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.js +102 -0
  214. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.js.map +1 -0
  215. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.mjs +100 -0
  216. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.mjs.map +1 -0
  217. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/SingleSignOnPage.js +1 -1
  218. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/SingleSignOnPage.js.map +1 -1
  219. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/SingleSignOnPage.mjs +1 -1
  220. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/SingleSignOnPage.mjs.map +1 -1
  221. package/dist/admin/ee/admin/src/services/ai.js +33 -0
  222. package/dist/admin/ee/admin/src/services/ai.js.map +1 -0
  223. package/dist/admin/ee/admin/src/services/ai.mjs +29 -0
  224. package/dist/admin/ee/admin/src/services/ai.mjs.map +1 -0
  225. package/dist/admin/ee.js +4 -0
  226. package/dist/admin/ee.js.map +1 -1
  227. package/dist/admin/ee.mjs +2 -0
  228. package/dist/admin/ee.mjs.map +1 -1
  229. package/dist/admin/index.js +13 -0
  230. package/dist/admin/index.js.map +1 -1
  231. package/dist/admin/index.mjs +5 -0
  232. package/dist/admin/index.mjs.map +1 -1
  233. package/dist/admin/src/components/GuidedTour/Context.d.ts +11 -0
  234. package/dist/admin/src/components/GuidedTour/GuidedTourProvider.d.ts +6 -0
  235. package/dist/admin/src/components/GuidedTour/Steps/ContentTypeBuilderSteps.d.ts +7 -16
  236. package/dist/admin/src/components/GuidedTour/Tours.d.ts +1 -22
  237. package/dist/admin/src/components/LeftMenu.d.ts +2 -2
  238. package/dist/admin/src/components/MainNav/MainNavLinks.d.ts +11 -0
  239. package/dist/admin/src/components/MainNav/NavBurgerMenu.d.ts +9 -0
  240. package/dist/admin/src/components/MainNav/NavUser.d.ts +5 -4
  241. package/dist/admin/src/components/SubNav.d.ts +18 -5
  242. package/dist/admin/src/constants/theme.d.ts +7 -0
  243. package/dist/admin/src/core/store/configure.d.ts +2 -2
  244. package/dist/admin/src/core/store/hooks.d.ts +2 -2
  245. package/dist/admin/src/ee.d.ts +2 -0
  246. package/dist/admin/src/features/Tracking.d.ts +21 -2
  247. package/dist/admin/src/hooks/useAIAvailability.d.ts +5 -0
  248. package/dist/admin/src/hooks/useAdminRoles.d.ts +1 -1
  249. package/dist/admin/src/hooks/useDeviceType.d.ts +6 -0
  250. package/dist/admin/src/hooks/useMediaQuery.d.ts +21 -0
  251. package/dist/admin/src/hooks/useMenu.d.ts +9 -1
  252. package/dist/admin/src/index.d.ts +6 -0
  253. package/dist/admin/src/pages/Marketplace/hooks/useMarketplaceData.d.ts +2 -2
  254. package/dist/admin/src/pages/Settings/components/SettingsNav.d.ts +3 -6
  255. package/dist/admin/src/pages/Settings/pages/Webhooks/hooks/useWebhooks.d.ts +4 -4
  256. package/dist/admin/src/selectors.d.ts +2 -2
  257. package/dist/admin/src/services/admin.d.ts +7 -6
  258. package/dist/admin/src/services/api.d.ts +1 -1
  259. package/dist/admin/src/services/apiTokens.d.ts +1 -1
  260. package/dist/admin/src/services/auth.d.ts +21 -12
  261. package/dist/admin/src/services/contentApi.d.ts +1 -1
  262. package/dist/admin/src/services/contentManager.d.ts +1 -1
  263. package/dist/admin/src/services/homepage.d.ts +3 -3
  264. package/dist/admin/src/services/transferTokens.d.ts +1 -1
  265. package/dist/admin/src/services/users.d.ts +8 -8
  266. package/dist/admin/src/services/webhooks.d.ts +2 -2
  267. package/dist/admin/tests/utils.d.ts +1 -1
  268. package/dist/ee/admin/src/components/GlobalNotifications.d.ts +1 -0
  269. package/dist/ee/admin/src/hooks/useAIAvailability.d.ts +1 -0
  270. package/dist/ee/admin/src/hooks/useAIUsageWarning.d.ts +5 -0
  271. package/dist/ee/admin/src/hooks/useLicenseLimits.d.ts +1 -1
  272. package/dist/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.d.ts +1 -0
  273. package/dist/ee/admin/src/services/ai.d.ts +9 -0
  274. package/dist/ee/admin/src/services/auditLogs.d.ts +1 -1
  275. package/dist/ee/server/src/ai/controllers/ai.d.ts +7 -0
  276. package/dist/ee/server/src/ai/controllers/ai.d.ts.map +1 -0
  277. package/dist/ee/server/src/ai/routes/ai.d.ts +13 -0
  278. package/dist/ee/server/src/ai/routes/ai.d.ts.map +1 -0
  279. package/dist/ee/server/src/controllers/admin.d.ts +3 -0
  280. package/dist/ee/server/src/controllers/admin.d.ts.map +1 -1
  281. package/dist/ee/server/src/controllers/index.d.ts +3 -0
  282. package/dist/ee/server/src/controllers/index.d.ts.map +1 -1
  283. package/dist/ee/server/src/index.d.ts +15 -187
  284. package/dist/ee/server/src/index.d.ts.map +1 -1
  285. package/dist/server/ee/server/src/ai/controllers/ai.js +218 -0
  286. package/dist/server/ee/server/src/ai/controllers/ai.js.map +1 -0
  287. package/dist/server/ee/server/src/ai/controllers/ai.mjs +216 -0
  288. package/dist/server/ee/server/src/ai/controllers/ai.mjs.map +1 -0
  289. package/dist/server/ee/server/src/ai/routes/ai.js +32 -0
  290. package/dist/server/ee/server/src/ai/routes/ai.js.map +1 -0
  291. package/dist/server/ee/server/src/ai/routes/ai.mjs +30 -0
  292. package/dist/server/ee/server/src/ai/routes/ai.mjs.map +1 -0
  293. package/dist/server/ee/server/src/controllers/admin.js +4 -1
  294. package/dist/server/ee/server/src/controllers/admin.js.map +1 -1
  295. package/dist/server/ee/server/src/controllers/admin.mjs +4 -1
  296. package/dist/server/ee/server/src/controllers/admin.mjs.map +1 -1
  297. package/dist/server/ee/server/src/index.js +37 -23
  298. package/dist/server/ee/server/src/index.js.map +1 -1
  299. package/dist/server/ee/server/src/index.mjs +37 -23
  300. package/dist/server/ee/server/src/index.mjs.map +1 -1
  301. package/dist/server/server/src/controllers/admin.js +5 -1
  302. package/dist/server/server/src/controllers/admin.js.map +1 -1
  303. package/dist/server/server/src/controllers/admin.mjs +5 -1
  304. package/dist/server/server/src/controllers/admin.mjs.map +1 -1
  305. package/dist/server/server/src/controllers/authenticated-user.js +15 -0
  306. package/dist/server/server/src/controllers/authenticated-user.js.map +1 -1
  307. package/dist/server/server/src/controllers/authenticated-user.mjs +15 -0
  308. package/dist/server/server/src/controllers/authenticated-user.mjs.map +1 -1
  309. package/dist/server/server/src/routes/users.js +10 -0
  310. package/dist/server/server/src/routes/users.js.map +1 -1
  311. package/dist/server/server/src/routes/users.mjs +10 -0
  312. package/dist/server/server/src/routes/users.mjs.map +1 -1
  313. package/dist/server/server/src/services/user.js +113 -1
  314. package/dist/server/server/src/services/user.js.map +1 -1
  315. package/dist/server/server/src/services/user.mjs +113 -1
  316. package/dist/server/server/src/services/user.mjs.map +1 -1
  317. package/dist/server/src/controllers/admin.d.ts +2 -0
  318. package/dist/server/src/controllers/admin.d.ts.map +1 -1
  319. package/dist/server/src/controllers/authenticated-user.d.ts +1 -0
  320. package/dist/server/src/controllers/authenticated-user.d.ts.map +1 -1
  321. package/dist/server/src/controllers/index.d.ts +3 -0
  322. package/dist/server/src/controllers/index.d.ts.map +1 -1
  323. package/dist/server/src/index.d.ts +7 -0
  324. package/dist/server/src/index.d.ts.map +1 -1
  325. package/dist/server/src/routes/users.d.ts.map +1 -1
  326. package/dist/server/src/services/index.d.ts +4 -0
  327. package/dist/server/src/services/index.d.ts.map +1 -1
  328. package/dist/server/src/services/user.d.ts +4 -0
  329. package/dist/server/src/services/user.d.ts.map +1 -1
  330. package/dist/shared/contracts/admin.d.ts +1 -0
  331. package/dist/shared/contracts/admin.d.ts.map +1 -1
  332. package/dist/shared/contracts/ai.d.ts +40 -0
  333. package/dist/shared/contracts/ai.d.ts.map +1 -0
  334. package/dist/shared/contracts/users.d.ts +32 -0
  335. package/dist/shared/contracts/users.d.ts.map +1 -1
  336. package/package.json +7 -7
@@ -3,6 +3,7 @@
3
3
  var jsxRuntime = require('react/jsx-runtime');
4
4
  var React = require('react');
5
5
  var reactRouterDom = require('react-router-dom');
6
+ var GlobalNotifications = require('../../ee/admin/src/components/GlobalNotifications.js');
6
7
  var PageHelpers = require('./components/PageHelpers.js');
7
8
  var Providers = require('./components/Providers.js');
8
9
  var reducer = require('./reducer.js');
@@ -17,9 +18,12 @@ const App = ({ strapi, store })=>{
17
18
  return /*#__PURE__*/ jsxRuntime.jsx(Providers.Providers, {
18
19
  strapi: strapi,
19
20
  store: store,
20
- children: /*#__PURE__*/ jsxRuntime.jsx(React.Suspense, {
21
+ children: /*#__PURE__*/ jsxRuntime.jsxs(React.Suspense, {
21
22
  fallback: /*#__PURE__*/ jsxRuntime.jsx(PageHelpers.Page.Loading, {}),
22
- children: /*#__PURE__*/ jsxRuntime.jsx(reactRouterDom.Outlet, {})
23
+ children: [
24
+ /*#__PURE__*/ jsxRuntime.jsx(GlobalNotifications.GlobalNotifications, {}),
25
+ /*#__PURE__*/ jsxRuntime.jsx(reactRouterDom.Outlet, {})
26
+ ]
23
27
  })
24
28
  });
25
29
  };
@@ -1 +1 @@
1
- {"version":3,"file":"App.js","sources":["../../../../admin/src/App.tsx"],"sourcesContent":["/**\n *\n * App.js\n *\n */\nimport { Suspense, useEffect } from 'react';\n\nimport { Outlet } from 'react-router-dom';\n\nimport { Page } from './components/PageHelpers';\nimport { Providers } from './components/Providers';\nimport { LANGUAGE_LOCAL_STORAGE_KEY } from './reducer';\n\nimport type { Store } from './core/store/configure';\nimport type { StrapiApp } from './StrapiApp';\n\ninterface AppProps {\n strapi: StrapiApp;\n store: Store;\n}\n\nconst App = ({ strapi, store }: AppProps) => {\n useEffect(() => {\n const language = localStorage.getItem(LANGUAGE_LOCAL_STORAGE_KEY) || 'en';\n\n if (language) {\n document.documentElement.lang = language;\n }\n }, []);\n\n return (\n <Providers strapi={strapi} store={store}>\n <Suspense fallback={<Page.Loading />}>\n <Outlet />\n </Suspense>\n </Providers>\n );\n};\n\nexport { App };\nexport type { AppProps };\n"],"names":["App","strapi","store","useEffect","language","localStorage","getItem","LANGUAGE_LOCAL_STORAGE_KEY","document","documentElement","lang","_jsx","Providers","Suspense","fallback","Page","Loading","Outlet"],"mappings":";;;;;;;;;AAqBA,MAAMA,MAAM,CAAC,EAAEC,MAAM,EAAEC,KAAK,EAAY,GAAA;IACtCC,eAAU,CAAA,IAAA;AACR,QAAA,MAAMC,QAAWC,GAAAA,YAAAA,CAAaC,OAAO,CAACC,kCAA+B,CAAA,IAAA,IAAA;AAErE,QAAA,IAAIH,QAAU,EAAA;YACZI,QAASC,CAAAA,eAAe,CAACC,IAAI,GAAGN,QAAAA;AAClC;AACF,KAAA,EAAG,EAAE,CAAA;AAEL,IAAA,qBACEO,cAACC,CAAAA,mBAAAA,EAAAA;QAAUX,MAAQA,EAAAA,MAAAA;QAAQC,KAAOA,EAAAA,KAAAA;AAChC,QAAA,QAAA,gBAAAS,cAACE,CAAAA,cAAAA,EAAAA;YAASC,QAAU,gBAAAH,cAAA,CAACI,iBAAKC,OAAO,EAAA,EAAA,CAAA;AAC/B,YAAA,QAAA,gBAAAL,cAACM,CAAAA,qBAAAA,EAAAA,EAAAA;;;AAIT;;;;"}
1
+ {"version":3,"file":"App.js","sources":["../../../../admin/src/App.tsx"],"sourcesContent":["/**\n *\n * App.js\n *\n */\nimport { Suspense, useEffect } from 'react';\n\nimport { Outlet } from 'react-router-dom';\n\nimport { GlobalNotifications } from '../../ee/admin/src/components/GlobalNotifications';\n\nimport { Page } from './components/PageHelpers';\nimport { Providers } from './components/Providers';\nimport { LANGUAGE_LOCAL_STORAGE_KEY } from './reducer';\n\nimport type { Store } from './core/store/configure';\nimport type { StrapiApp } from './StrapiApp';\n\ninterface AppProps {\n strapi: StrapiApp;\n store: Store;\n}\n\nconst App = ({ strapi, store }: AppProps) => {\n useEffect(() => {\n const language = localStorage.getItem(LANGUAGE_LOCAL_STORAGE_KEY) || 'en';\n\n if (language) {\n document.documentElement.lang = language;\n }\n }, []);\n\n return (\n <Providers strapi={strapi} store={store}>\n <Suspense fallback={<Page.Loading />}>\n <GlobalNotifications />\n <Outlet />\n </Suspense>\n </Providers>\n );\n};\n\nexport { App };\nexport type { AppProps };\n"],"names":["App","strapi","store","useEffect","language","localStorage","getItem","LANGUAGE_LOCAL_STORAGE_KEY","document","documentElement","lang","_jsx","Providers","_jsxs","Suspense","fallback","Page","Loading","GlobalNotifications","Outlet"],"mappings":";;;;;;;;;;AAuBA,MAAMA,MAAM,CAAC,EAAEC,MAAM,EAAEC,KAAK,EAAY,GAAA;IACtCC,eAAU,CAAA,IAAA;AACR,QAAA,MAAMC,QAAWC,GAAAA,YAAAA,CAAaC,OAAO,CAACC,kCAA+B,CAAA,IAAA,IAAA;AAErE,QAAA,IAAIH,QAAU,EAAA;YACZI,QAASC,CAAAA,eAAe,CAACC,IAAI,GAAGN,QAAAA;AAClC;AACF,KAAA,EAAG,EAAE,CAAA;AAEL,IAAA,qBACEO,cAACC,CAAAA,mBAAAA,EAAAA;QAAUX,MAAQA,EAAAA,MAAAA;QAAQC,KAAOA,EAAAA,KAAAA;AAChC,QAAA,QAAA,gBAAAW,eAACC,CAAAA,cAAAA,EAAAA;YAASC,QAAU,gBAAAJ,cAAA,CAACK,iBAAKC,OAAO,EAAA,EAAA,CAAA;;8BAC/BN,cAACO,CAAAA,uCAAAA,EAAAA,EAAAA,CAAAA;8BACDP,cAACQ,CAAAA,qBAAAA,EAAAA,EAAAA;;;;AAIT;;;;"}
@@ -1,6 +1,7 @@
1
- import { jsx } from 'react/jsx-runtime';
1
+ import { jsx, jsxs } from 'react/jsx-runtime';
2
2
  import { useEffect, Suspense } from 'react';
3
3
  import { Outlet } from 'react-router-dom';
4
+ import { GlobalNotifications } from '../../ee/admin/src/components/GlobalNotifications.mjs';
4
5
  import { Page } from './components/PageHelpers.mjs';
5
6
  import { Providers } from './components/Providers.mjs';
6
7
  import { LANGUAGE_LOCAL_STORAGE_KEY } from './reducer.mjs';
@@ -15,9 +16,12 @@ const App = ({ strapi, store })=>{
15
16
  return /*#__PURE__*/ jsx(Providers, {
16
17
  strapi: strapi,
17
18
  store: store,
18
- children: /*#__PURE__*/ jsx(Suspense, {
19
+ children: /*#__PURE__*/ jsxs(Suspense, {
19
20
  fallback: /*#__PURE__*/ jsx(Page.Loading, {}),
20
- children: /*#__PURE__*/ jsx(Outlet, {})
21
+ children: [
22
+ /*#__PURE__*/ jsx(GlobalNotifications, {}),
23
+ /*#__PURE__*/ jsx(Outlet, {})
24
+ ]
21
25
  })
22
26
  });
23
27
  };
@@ -1 +1 @@
1
- {"version":3,"file":"App.mjs","sources":["../../../../admin/src/App.tsx"],"sourcesContent":["/**\n *\n * App.js\n *\n */\nimport { Suspense, useEffect } from 'react';\n\nimport { Outlet } from 'react-router-dom';\n\nimport { Page } from './components/PageHelpers';\nimport { Providers } from './components/Providers';\nimport { LANGUAGE_LOCAL_STORAGE_KEY } from './reducer';\n\nimport type { Store } from './core/store/configure';\nimport type { StrapiApp } from './StrapiApp';\n\ninterface AppProps {\n strapi: StrapiApp;\n store: Store;\n}\n\nconst App = ({ strapi, store }: AppProps) => {\n useEffect(() => {\n const language = localStorage.getItem(LANGUAGE_LOCAL_STORAGE_KEY) || 'en';\n\n if (language) {\n document.documentElement.lang = language;\n }\n }, []);\n\n return (\n <Providers strapi={strapi} store={store}>\n <Suspense fallback={<Page.Loading />}>\n <Outlet />\n </Suspense>\n </Providers>\n );\n};\n\nexport { App };\nexport type { AppProps };\n"],"names":["App","strapi","store","useEffect","language","localStorage","getItem","LANGUAGE_LOCAL_STORAGE_KEY","document","documentElement","lang","_jsx","Providers","Suspense","fallback","Page","Loading","Outlet"],"mappings":";;;;;;;AAqBA,MAAMA,MAAM,CAAC,EAAEC,MAAM,EAAEC,KAAK,EAAY,GAAA;IACtCC,SAAU,CAAA,IAAA;AACR,QAAA,MAAMC,QAAWC,GAAAA,YAAAA,CAAaC,OAAO,CAACC,0BAA+B,CAAA,IAAA,IAAA;AAErE,QAAA,IAAIH,QAAU,EAAA;YACZI,QAASC,CAAAA,eAAe,CAACC,IAAI,GAAGN,QAAAA;AAClC;AACF,KAAA,EAAG,EAAE,CAAA;AAEL,IAAA,qBACEO,GAACC,CAAAA,SAAAA,EAAAA;QAAUX,MAAQA,EAAAA,MAAAA;QAAQC,KAAOA,EAAAA,KAAAA;AAChC,QAAA,QAAA,gBAAAS,GAACE,CAAAA,QAAAA,EAAAA;YAASC,QAAU,gBAAAH,GAAA,CAACI,KAAKC,OAAO,EAAA,EAAA,CAAA;AAC/B,YAAA,QAAA,gBAAAL,GAACM,CAAAA,MAAAA,EAAAA,EAAAA;;;AAIT;;;;"}
1
+ {"version":3,"file":"App.mjs","sources":["../../../../admin/src/App.tsx"],"sourcesContent":["/**\n *\n * App.js\n *\n */\nimport { Suspense, useEffect } from 'react';\n\nimport { Outlet } from 'react-router-dom';\n\nimport { GlobalNotifications } from '../../ee/admin/src/components/GlobalNotifications';\n\nimport { Page } from './components/PageHelpers';\nimport { Providers } from './components/Providers';\nimport { LANGUAGE_LOCAL_STORAGE_KEY } from './reducer';\n\nimport type { Store } from './core/store/configure';\nimport type { StrapiApp } from './StrapiApp';\n\ninterface AppProps {\n strapi: StrapiApp;\n store: Store;\n}\n\nconst App = ({ strapi, store }: AppProps) => {\n useEffect(() => {\n const language = localStorage.getItem(LANGUAGE_LOCAL_STORAGE_KEY) || 'en';\n\n if (language) {\n document.documentElement.lang = language;\n }\n }, []);\n\n return (\n <Providers strapi={strapi} store={store}>\n <Suspense fallback={<Page.Loading />}>\n <GlobalNotifications />\n <Outlet />\n </Suspense>\n </Providers>\n );\n};\n\nexport { App };\nexport type { AppProps };\n"],"names":["App","strapi","store","useEffect","language","localStorage","getItem","LANGUAGE_LOCAL_STORAGE_KEY","document","documentElement","lang","_jsx","Providers","_jsxs","Suspense","fallback","Page","Loading","GlobalNotifications","Outlet"],"mappings":";;;;;;;;AAuBA,MAAMA,MAAM,CAAC,EAAEC,MAAM,EAAEC,KAAK,EAAY,GAAA;IACtCC,SAAU,CAAA,IAAA;AACR,QAAA,MAAMC,QAAWC,GAAAA,YAAAA,CAAaC,OAAO,CAACC,0BAA+B,CAAA,IAAA,IAAA;AAErE,QAAA,IAAIH,QAAU,EAAA;YACZI,QAASC,CAAAA,eAAe,CAACC,IAAI,GAAGN,QAAAA;AAClC;AACF,KAAA,EAAG,EAAE,CAAA;AAEL,IAAA,qBACEO,GAACC,CAAAA,SAAAA,EAAAA;QAAUX,MAAQA,EAAAA,MAAAA;QAAQC,KAAOA,EAAAA,KAAAA;AAChC,QAAA,QAAA,gBAAAW,IAACC,CAAAA,QAAAA,EAAAA;YAASC,QAAU,gBAAAJ,GAAA,CAACK,KAAKC,OAAO,EAAA,EAAA,CAAA;;8BAC/BN,GAACO,CAAAA,mBAAAA,EAAAA,EAAAA,CAAAA;8BACDP,GAACQ,CAAAA,MAAAA,EAAAA,EAAAA;;;;AAIT;;;;"}
@@ -6,6 +6,7 @@ var icons = require('@strapi/icons');
6
6
  var reactIntl = require('react-intl');
7
7
  var reactRouterDom = require('react-router-dom');
8
8
  var styled = require('styled-components');
9
+ var theme = require('../constants/theme.js');
9
10
  var useClipboard = require('../hooks/useClipboard.js');
10
11
 
11
12
  /**
@@ -30,16 +31,22 @@ ${error.stack}
30
31
  alignItems: "center",
31
32
  height: "100%",
32
33
  justifyContent: "center",
34
+ paddingLeft: theme.RESPONSIVE_DEFAULT_SPACING,
35
+ paddingRight: theme.RESPONSIVE_DEFAULT_SPACING,
33
36
  children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
34
37
  gap: 7,
35
- padding: 7,
38
+ padding: {
39
+ initial: 6,
40
+ small: 7,
41
+ medium: 8
42
+ },
36
43
  direction: "column",
37
- width: "35%",
44
+ width: "100%",
45
+ maxWidth: "512px",
38
46
  shadow: "tableShadow",
39
47
  borderColor: "neutral150",
40
48
  background: "neutral0",
41
49
  hasRadius: true,
42
- maxWidth: "512px",
43
50
  children: [
44
51
  /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
45
52
  direction: "column",
@@ -1 +1 @@
1
- {"version":3,"file":"ErrorElement.js","sources":["../../../../../admin/src/components/ErrorElement.tsx"],"sourcesContent":["import {\n Alert,\n Button,\n Flex,\n Main,\n Typography,\n Link,\n TypographyComponent,\n} from '@strapi/design-system';\nimport { Duplicate, WarningCircle } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { useRouteError } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { useClipboard } from '../hooks/useClipboard';\n\n/**\n * @description this stops the app from going white, and instead shows the error message.\n * But it could be improved for sure.\n */\nconst ErrorElement = () => {\n const error = useRouteError();\n const { formatMessage } = useIntl();\n const { copy } = useClipboard();\n\n if (error instanceof Error) {\n console.error(error);\n\n const handleClick = async () => {\n await copy(`\n\\`\\`\\`\n${error.stack}\n\\`\\`\\`\n `);\n };\n\n return (\n <Main height=\"100%\">\n <Flex alignItems=\"center\" height=\"100%\" justifyContent=\"center\">\n <Flex\n gap={7}\n padding={7}\n direction=\"column\"\n width=\"35%\"\n shadow=\"tableShadow\"\n borderColor=\"neutral150\"\n background=\"neutral0\"\n hasRadius\n maxWidth=\"512px\"\n >\n <Flex direction=\"column\" gap={2}>\n <WarningCircle width=\"32px\" height=\"32px\" fill=\"danger600\" />\n <Typography fontSize={4} fontWeight=\"bold\" textAlign=\"center\">\n {formatMessage({\n id: 'app.error',\n defaultMessage: 'Something went wrong',\n })}\n </Typography>\n <Typography variant=\"omega\" textAlign=\"center\">\n {formatMessage(\n {\n id: 'app.error.message',\n defaultMessage: `It seems like there is a bug in your instance, but we've got you covered. Please notify your technical team so they can investigate the source of the problem and report the issue to us by opening a bug report on {link}.`,\n },\n {\n link: (\n <Link\n isExternal\n // hack to get rid of the current endIcon, which should be removable by using `null`.\n endIcon\n href=\"https://github.com/strapi/strapi/issues/new?assignees=&labels=&projects=&template=BUG_REPORT.md\"\n >{`Strapi's GitHub`}</Link>\n ),\n }\n )}\n </Typography>\n </Flex>\n {/* the Alert component needs to make its close button optional as well as the icon. */}\n <Flex gap={4} direction=\"column\" width=\"100%\">\n <StyledAlert onClose={() => {}} width=\"100%\" closeLabel=\"\" variant=\"danger\">\n <ErrorType>{error.message}</ErrorType>\n </StyledAlert>\n <Button onClick={handleClick} variant=\"tertiary\" startIcon={<Duplicate />}>\n {formatMessage({\n id: 'app.error.copy',\n defaultMessage: 'Copy to clipboard',\n })}\n </Button>\n </Flex>\n </Flex>\n </Flex>\n </Main>\n );\n }\n\n throw error;\n};\n\nconst StyledAlert = styled(Alert)`\n & > div:first-child {\n display: none;\n }\n\n & > button {\n display: none;\n }\n`;\n\nconst ErrorType = styled<TypographyComponent>(Typography)`\n word-break: break-all;\n color: ${({ theme }) => theme.colors.danger600};\n`;\n\nexport { ErrorElement };\n"],"names":["ErrorElement","error","useRouteError","formatMessage","useIntl","copy","useClipboard","Error","console","handleClick","stack","_jsx","Main","height","Flex","alignItems","justifyContent","_jsxs","gap","padding","direction","width","shadow","borderColor","background","hasRadius","maxWidth","WarningCircle","fill","Typography","fontSize","fontWeight","textAlign","id","defaultMessage","variant","link","Link","isExternal","endIcon","href","StyledAlert","onClose","closeLabel","ErrorType","message","Button","onClick","startIcon","Duplicate","styled","Alert","theme","colors","danger600"],"mappings":"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"}
1
+ {"version":3,"file":"ErrorElement.js","sources":["../../../../../admin/src/components/ErrorElement.tsx"],"sourcesContent":["import {\n Alert,\n Button,\n Flex,\n Main,\n Typography,\n Link,\n TypographyComponent,\n} from '@strapi/design-system';\nimport { Duplicate, WarningCircle } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { useRouteError } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { RESPONSIVE_DEFAULT_SPACING } from '../constants/theme';\nimport { useClipboard } from '../hooks/useClipboard';\n\n/**\n * @description this stops the app from going white, and instead shows the error message.\n * But it could be improved for sure.\n */\nconst ErrorElement = () => {\n const error = useRouteError();\n const { formatMessage } = useIntl();\n const { copy } = useClipboard();\n\n if (error instanceof Error) {\n console.error(error);\n\n const handleClick = async () => {\n await copy(`\n\\`\\`\\`\n${error.stack}\n\\`\\`\\`\n `);\n };\n\n return (\n <Main height=\"100%\">\n <Flex\n alignItems=\"center\"\n height=\"100%\"\n justifyContent=\"center\"\n paddingLeft={RESPONSIVE_DEFAULT_SPACING}\n paddingRight={RESPONSIVE_DEFAULT_SPACING}\n >\n <Flex\n gap={7}\n padding={{\n initial: 6,\n small: 7,\n medium: 8,\n }}\n direction=\"column\"\n width=\"100%\"\n maxWidth=\"512px\"\n shadow=\"tableShadow\"\n borderColor=\"neutral150\"\n background=\"neutral0\"\n hasRadius\n >\n <Flex direction=\"column\" gap={2}>\n <WarningCircle width=\"32px\" height=\"32px\" fill=\"danger600\" />\n <Typography fontSize={4} fontWeight=\"bold\" textAlign=\"center\">\n {formatMessage({\n id: 'app.error',\n defaultMessage: 'Something went wrong',\n })}\n </Typography>\n <Typography variant=\"omega\" textAlign=\"center\">\n {formatMessage(\n {\n id: 'app.error.message',\n defaultMessage: `It seems like there is a bug in your instance, but we've got you covered. Please notify your technical team so they can investigate the source of the problem and report the issue to us by opening a bug report on {link}.`,\n },\n {\n link: (\n <Link\n isExternal\n // hack to get rid of the current endIcon, which should be removable by using `null`.\n endIcon\n href=\"https://github.com/strapi/strapi/issues/new?assignees=&labels=&projects=&template=BUG_REPORT.md\"\n >{`Strapi's GitHub`}</Link>\n ),\n }\n )}\n </Typography>\n </Flex>\n {/* the Alert component needs to make its close button optional as well as the icon. */}\n <Flex gap={4} direction=\"column\" width=\"100%\">\n <StyledAlert onClose={() => {}} width=\"100%\" closeLabel=\"\" variant=\"danger\">\n <ErrorType>{error.message}</ErrorType>\n </StyledAlert>\n <Button onClick={handleClick} variant=\"tertiary\" startIcon={<Duplicate />}>\n {formatMessage({\n id: 'app.error.copy',\n defaultMessage: 'Copy to clipboard',\n })}\n </Button>\n </Flex>\n </Flex>\n </Flex>\n </Main>\n );\n }\n\n throw error;\n};\n\nconst StyledAlert = styled(Alert)`\n & > div:first-child {\n display: none;\n }\n\n & > button {\n display: none;\n }\n`;\n\nconst ErrorType = styled<TypographyComponent>(Typography)`\n word-break: break-all;\n color: ${({ theme }) => theme.colors.danger600};\n`;\n\nexport { ErrorElement };\n"],"names":["ErrorElement","error","useRouteError","formatMessage","useIntl","copy","useClipboard","Error","console","handleClick","stack","_jsx","Main","height","Flex","alignItems","justifyContent","paddingLeft","RESPONSIVE_DEFAULT_SPACING","paddingRight","_jsxs","gap","padding","initial","small","medium","direction","width","maxWidth","shadow","borderColor","background","hasRadius","WarningCircle","fill","Typography","fontSize","fontWeight","textAlign","id","defaultMessage","variant","link","Link","isExternal","endIcon","href","StyledAlert","onClose","closeLabel","ErrorType","message","Button","onClick","startIcon","Duplicate","styled","Alert","theme","colors","danger600"],"mappings":";;;;;;;;;;;AAiBA;;;AAGC,UACKA,YAAe,GAAA,IAAA;AACnB,IAAA,MAAMC,KAAQC,GAAAA,4BAAAA,EAAAA;IACd,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;IAC1B,MAAM,EAAEC,IAAI,EAAE,GAAGC,yBAAAA,EAAAA;AAEjB,IAAA,IAAIL,iBAAiBM,KAAO,EAAA;AAC1BC,QAAAA,OAAAA,CAAQP,KAAK,CAACA,KAAAA,CAAAA;AAEd,QAAA,MAAMQ,WAAc,GAAA,UAAA;AAClB,YAAA,MAAMJ,KAAK;;AAEjB,EAAEJ,KAAAA,CAAMS,KAAK;;MAEP,CAAC,CAAA;AACH,SAAA;AAEA,QAAA,qBACEC,cAACC,CAAAA,iBAAAA,EAAAA;YAAKC,MAAO,EAAA,MAAA;AACX,YAAA,QAAA,gBAAAF,cAACG,CAAAA,iBAAAA,EAAAA;gBACCC,UAAW,EAAA,QAAA;gBACXF,MAAO,EAAA,MAAA;gBACPG,cAAe,EAAA,QAAA;gBACfC,WAAaC,EAAAA,gCAAAA;gBACbC,YAAcD,EAAAA,gCAAAA;AAEd,gBAAA,QAAA,gBAAAE,eAACN,CAAAA,iBAAAA,EAAAA;oBACCO,GAAK,EAAA,CAAA;oBACLC,OAAS,EAAA;wBACPC,OAAS,EAAA,CAAA;wBACTC,KAAO,EAAA,CAAA;wBACPC,MAAQ,EAAA;AACV,qBAAA;oBACAC,SAAU,EAAA,QAAA;oBACVC,KAAM,EAAA,MAAA;oBACNC,QAAS,EAAA,OAAA;oBACTC,MAAO,EAAA,aAAA;oBACPC,WAAY,EAAA,YAAA;oBACZC,UAAW,EAAA,UAAA;oBACXC,SAAS,EAAA,IAAA;;sCAETZ,eAACN,CAAAA,iBAAAA,EAAAA;4BAAKY,SAAU,EAAA,QAAA;4BAASL,GAAK,EAAA,CAAA;;8CAC5BV,cAACsB,CAAAA,mBAAAA,EAAAA;oCAAcN,KAAM,EAAA,MAAA;oCAAOd,MAAO,EAAA,MAAA;oCAAOqB,IAAK,EAAA;;8CAC/CvB,cAACwB,CAAAA,uBAAAA,EAAAA;oCAAWC,QAAU,EAAA,CAAA;oCAAGC,UAAW,EAAA,MAAA;oCAAOC,SAAU,EAAA,QAAA;8CAClDnC,aAAc,CAAA;wCACboC,EAAI,EAAA,WAAA;wCACJC,cAAgB,EAAA;AAClB,qCAAA;;8CAEF7B,cAACwB,CAAAA,uBAAAA,EAAAA;oCAAWM,OAAQ,EAAA,OAAA;oCAAQH,SAAU,EAAA,QAAA;8CACnCnC,aACC,CAAA;wCACEoC,EAAI,EAAA,mBAAA;wCACJC,cAAgB,EAAA,CAAC,2NAA2N;qCAE9O,EAAA;AACEE,wCAAAA,IAAAA,gBACE/B,cAACgC,CAAAA,iBAAAA,EAAAA;4CACCC,UAAU,EAAA,IAAA;;4CAEVC,OAAO,EAAA,IAAA;4CACPC,IAAK,EAAA,iGAAA;AACL,4CAAA,QAAA,EAAA,CAAC,eAAe;;AAEtB,qCAAA;;;;sCAKN1B,eAACN,CAAAA,iBAAAA,EAAAA;4BAAKO,GAAK,EAAA,CAAA;4BAAGK,SAAU,EAAA,QAAA;4BAASC,KAAM,EAAA,MAAA;;8CACrChB,cAACoC,CAAAA,WAAAA,EAAAA;AAAYC,oCAAAA,OAAAA,EAAS,IAAO,EAAA;oCAAGrB,KAAM,EAAA,MAAA;oCAAOsB,UAAW,EAAA,EAAA;oCAAGR,OAAQ,EAAA,QAAA;AACjE,oCAAA,QAAA,gBAAA9B,cAACuC,CAAAA,SAAAA,EAAAA;AAAWjD,wCAAAA,QAAAA,EAAAA,KAAAA,CAAMkD;;;8CAEpBxC,cAACyC,CAAAA,mBAAAA,EAAAA;oCAAOC,OAAS5C,EAAAA,WAAAA;oCAAagC,OAAQ,EAAA,UAAA;AAAWa,oCAAAA,SAAAA,gBAAW3C,cAAC4C,CAAAA,eAAAA,EAAAA,EAAAA,CAAAA;8CAC1DpD,aAAc,CAAA;wCACboC,EAAI,EAAA,gBAAA;wCACJC,cAAgB,EAAA;AAClB,qCAAA;;;;;;;;AAOd;IAEA,MAAMvC,KAAAA;AACR;AAEA,MAAM8C,WAAAA,GAAcS,aAAOC,CAAAA,kBAAAA,CAAM;;;;;;;;AAQjC,CAAC;AAED,MAAMP,SAAAA,GAAYM,aAA4BrB,CAAAA,uBAAAA,CAAW;;SAEhD,EAAE,CAAC,EAAEuB,KAAK,EAAE,GAAKA,KAAMC,CAAAA,MAAM,CAACC,SAAS,CAAC;AACjD,CAAC;;;;"}
@@ -4,6 +4,7 @@ import { WarningCircle, Duplicate } from '@strapi/icons';
4
4
  import { useIntl } from 'react-intl';
5
5
  import { useRouteError } from 'react-router-dom';
6
6
  import { styled } from 'styled-components';
7
+ import { RESPONSIVE_DEFAULT_SPACING } from '../constants/theme.mjs';
7
8
  import { useClipboard } from '../hooks/useClipboard.mjs';
8
9
 
9
10
  /**
@@ -28,16 +29,22 @@ ${error.stack}
28
29
  alignItems: "center",
29
30
  height: "100%",
30
31
  justifyContent: "center",
32
+ paddingLeft: RESPONSIVE_DEFAULT_SPACING,
33
+ paddingRight: RESPONSIVE_DEFAULT_SPACING,
31
34
  children: /*#__PURE__*/ jsxs(Flex, {
32
35
  gap: 7,
33
- padding: 7,
36
+ padding: {
37
+ initial: 6,
38
+ small: 7,
39
+ medium: 8
40
+ },
34
41
  direction: "column",
35
- width: "35%",
42
+ width: "100%",
43
+ maxWidth: "512px",
36
44
  shadow: "tableShadow",
37
45
  borderColor: "neutral150",
38
46
  background: "neutral0",
39
47
  hasRadius: true,
40
- maxWidth: "512px",
41
48
  children: [
42
49
  /*#__PURE__*/ jsxs(Flex, {
43
50
  direction: "column",
@@ -1 +1 @@
1
- {"version":3,"file":"ErrorElement.mjs","sources":["../../../../../admin/src/components/ErrorElement.tsx"],"sourcesContent":["import {\n Alert,\n Button,\n Flex,\n Main,\n Typography,\n Link,\n TypographyComponent,\n} from '@strapi/design-system';\nimport { Duplicate, WarningCircle } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { useRouteError } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { useClipboard } from '../hooks/useClipboard';\n\n/**\n * @description this stops the app from going white, and instead shows the error message.\n * But it could be improved for sure.\n */\nconst ErrorElement = () => {\n const error = useRouteError();\n const { formatMessage } = useIntl();\n const { copy } = useClipboard();\n\n if (error instanceof Error) {\n console.error(error);\n\n const handleClick = async () => {\n await copy(`\n\\`\\`\\`\n${error.stack}\n\\`\\`\\`\n `);\n };\n\n return (\n <Main height=\"100%\">\n <Flex alignItems=\"center\" height=\"100%\" justifyContent=\"center\">\n <Flex\n gap={7}\n padding={7}\n direction=\"column\"\n width=\"35%\"\n shadow=\"tableShadow\"\n borderColor=\"neutral150\"\n background=\"neutral0\"\n hasRadius\n maxWidth=\"512px\"\n >\n <Flex direction=\"column\" gap={2}>\n <WarningCircle width=\"32px\" height=\"32px\" fill=\"danger600\" />\n <Typography fontSize={4} fontWeight=\"bold\" textAlign=\"center\">\n {formatMessage({\n id: 'app.error',\n defaultMessage: 'Something went wrong',\n })}\n </Typography>\n <Typography variant=\"omega\" textAlign=\"center\">\n {formatMessage(\n {\n id: 'app.error.message',\n defaultMessage: `It seems like there is a bug in your instance, but we've got you covered. Please notify your technical team so they can investigate the source of the problem and report the issue to us by opening a bug report on {link}.`,\n },\n {\n link: (\n <Link\n isExternal\n // hack to get rid of the current endIcon, which should be removable by using `null`.\n endIcon\n href=\"https://github.com/strapi/strapi/issues/new?assignees=&labels=&projects=&template=BUG_REPORT.md\"\n >{`Strapi's GitHub`}</Link>\n ),\n }\n )}\n </Typography>\n </Flex>\n {/* the Alert component needs to make its close button optional as well as the icon. */}\n <Flex gap={4} direction=\"column\" width=\"100%\">\n <StyledAlert onClose={() => {}} width=\"100%\" closeLabel=\"\" variant=\"danger\">\n <ErrorType>{error.message}</ErrorType>\n </StyledAlert>\n <Button onClick={handleClick} variant=\"tertiary\" startIcon={<Duplicate />}>\n {formatMessage({\n id: 'app.error.copy',\n defaultMessage: 'Copy to clipboard',\n })}\n </Button>\n </Flex>\n </Flex>\n </Flex>\n </Main>\n );\n }\n\n throw error;\n};\n\nconst StyledAlert = styled(Alert)`\n & > div:first-child {\n display: none;\n }\n\n & > button {\n display: none;\n }\n`;\n\nconst ErrorType = styled<TypographyComponent>(Typography)`\n word-break: break-all;\n color: ${({ theme }) => theme.colors.danger600};\n`;\n\nexport { ErrorElement };\n"],"names":["ErrorElement","error","useRouteError","formatMessage","useIntl","copy","useClipboard","Error","console","handleClick","stack","_jsx","Main","height","Flex","alignItems","justifyContent","_jsxs","gap","padding","direction","width","shadow","borderColor","background","hasRadius","maxWidth","WarningCircle","fill","Typography","fontSize","fontWeight","textAlign","id","defaultMessage","variant","link","Link","isExternal","endIcon","href","StyledAlert","onClose","closeLabel","ErrorType","message","Button","onClick","startIcon","Duplicate","styled","Alert","theme","colors","danger600"],"mappings":"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"}
1
+ {"version":3,"file":"ErrorElement.mjs","sources":["../../../../../admin/src/components/ErrorElement.tsx"],"sourcesContent":["import {\n Alert,\n Button,\n Flex,\n Main,\n Typography,\n Link,\n TypographyComponent,\n} from '@strapi/design-system';\nimport { Duplicate, WarningCircle } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { useRouteError } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { RESPONSIVE_DEFAULT_SPACING } from '../constants/theme';\nimport { useClipboard } from '../hooks/useClipboard';\n\n/**\n * @description this stops the app from going white, and instead shows the error message.\n * But it could be improved for sure.\n */\nconst ErrorElement = () => {\n const error = useRouteError();\n const { formatMessage } = useIntl();\n const { copy } = useClipboard();\n\n if (error instanceof Error) {\n console.error(error);\n\n const handleClick = async () => {\n await copy(`\n\\`\\`\\`\n${error.stack}\n\\`\\`\\`\n `);\n };\n\n return (\n <Main height=\"100%\">\n <Flex\n alignItems=\"center\"\n height=\"100%\"\n justifyContent=\"center\"\n paddingLeft={RESPONSIVE_DEFAULT_SPACING}\n paddingRight={RESPONSIVE_DEFAULT_SPACING}\n >\n <Flex\n gap={7}\n padding={{\n initial: 6,\n small: 7,\n medium: 8,\n }}\n direction=\"column\"\n width=\"100%\"\n maxWidth=\"512px\"\n shadow=\"tableShadow\"\n borderColor=\"neutral150\"\n background=\"neutral0\"\n hasRadius\n >\n <Flex direction=\"column\" gap={2}>\n <WarningCircle width=\"32px\" height=\"32px\" fill=\"danger600\" />\n <Typography fontSize={4} fontWeight=\"bold\" textAlign=\"center\">\n {formatMessage({\n id: 'app.error',\n defaultMessage: 'Something went wrong',\n })}\n </Typography>\n <Typography variant=\"omega\" textAlign=\"center\">\n {formatMessage(\n {\n id: 'app.error.message',\n defaultMessage: `It seems like there is a bug in your instance, but we've got you covered. Please notify your technical team so they can investigate the source of the problem and report the issue to us by opening a bug report on {link}.`,\n },\n {\n link: (\n <Link\n isExternal\n // hack to get rid of the current endIcon, which should be removable by using `null`.\n endIcon\n href=\"https://github.com/strapi/strapi/issues/new?assignees=&labels=&projects=&template=BUG_REPORT.md\"\n >{`Strapi's GitHub`}</Link>\n ),\n }\n )}\n </Typography>\n </Flex>\n {/* the Alert component needs to make its close button optional as well as the icon. */}\n <Flex gap={4} direction=\"column\" width=\"100%\">\n <StyledAlert onClose={() => {}} width=\"100%\" closeLabel=\"\" variant=\"danger\">\n <ErrorType>{error.message}</ErrorType>\n </StyledAlert>\n <Button onClick={handleClick} variant=\"tertiary\" startIcon={<Duplicate />}>\n {formatMessage({\n id: 'app.error.copy',\n defaultMessage: 'Copy to clipboard',\n })}\n </Button>\n </Flex>\n </Flex>\n </Flex>\n </Main>\n );\n }\n\n throw error;\n};\n\nconst StyledAlert = styled(Alert)`\n & > div:first-child {\n display: none;\n }\n\n & > button {\n display: none;\n }\n`;\n\nconst ErrorType = styled<TypographyComponent>(Typography)`\n word-break: break-all;\n color: ${({ theme }) => theme.colors.danger600};\n`;\n\nexport { ErrorElement };\n"],"names":["ErrorElement","error","useRouteError","formatMessage","useIntl","copy","useClipboard","Error","console","handleClick","stack","_jsx","Main","height","Flex","alignItems","justifyContent","paddingLeft","RESPONSIVE_DEFAULT_SPACING","paddingRight","_jsxs","gap","padding","initial","small","medium","direction","width","maxWidth","shadow","borderColor","background","hasRadius","WarningCircle","fill","Typography","fontSize","fontWeight","textAlign","id","defaultMessage","variant","link","Link","isExternal","endIcon","href","StyledAlert","onClose","closeLabel","ErrorType","message","Button","onClick","startIcon","Duplicate","styled","Alert","theme","colors","danger600"],"mappings":"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"}
@@ -4,6 +4,7 @@ var jsxRuntime = require('react/jsx-runtime');
4
4
  var React = require('react');
5
5
  var immer = require('immer');
6
6
  var Tracking = require('../../features/Tracking.js');
7
+ var useMediaQuery = require('../../hooks/useMediaQuery.js');
7
8
  var usePersistentState = require('../../hooks/usePersistentState.js');
8
9
  var Context = require('../Context.js');
9
10
  var Tours = require('./Tours.js');
@@ -33,7 +34,8 @@ const getInitialTourState = (tours)=>{
33
34
  return Object.keys(tours).reduce((acc, tourName)=>{
34
35
  acc[tourName] = {
35
36
  currentStep: 0,
36
- isCompleted: false
37
+ isCompleted: false,
38
+ tourType: undefined
37
39
  };
38
40
  return acc;
39
41
  }, {});
@@ -74,6 +76,9 @@ function reducer(state, action) {
74
76
  if (action.type === 'skip_all_tours') {
75
77
  draft.enabled = false;
76
78
  }
79
+ if (action.type === 'set_hidden') {
80
+ draft.hidden = action.payload;
81
+ }
77
82
  if (action.type === 'reset_all_tours') {
78
83
  draft.enabled = true;
79
84
  draft.tours = getInitialTourState(Tours.tours);
@@ -82,18 +87,38 @@ function reducer(state, action) {
82
87
  if (action.type === 'go_to_step') {
83
88
  draft.tours[action.payload.tourName].currentStep = action.payload.step;
84
89
  }
90
+ if (action.type === 'set_tour_type') {
91
+ const { tourName, tourType } = action.payload;
92
+ const currentTour = draft.tours[tourName];
93
+ // If tour type changes and tour is not completed, reset to step 0
94
+ if (currentTour.tourType && currentTour.tourType !== tourType && !currentTour.isCompleted) {
95
+ currentTour.currentStep = 0;
96
+ }
97
+ currentTour.tourType = tourType;
98
+ }
85
99
  });
86
100
  }
87
101
  const STORAGE_KEY = 'STRAPI_GUIDED_TOUR';
88
102
  const GuidedTourContext = ({ children, enabled = true })=>{
103
+ const isDesktop = useMediaQuery.useIsDesktop();
89
104
  const { trackUsage } = Tracking.useTracking();
90
105
  const [storedTours, setStoredTours] = usePersistentState.usePersistentState(STORAGE_KEY, {
91
106
  tours: getInitialTourState(Tours.tours),
92
107
  enabled,
108
+ hidden: !isDesktop,
93
109
  completedActions: []
94
110
  });
95
111
  const migratedTourState = migrations.migrateTours(storedTours);
96
112
  const [state, dispatch] = React__namespace.useReducer(reducer, migratedTourState);
113
+ // Watch for changes to enabled prop to update state
114
+ React__namespace.useEffect(()=>{
115
+ dispatch({
116
+ type: 'set_hidden',
117
+ payload: !isDesktop
118
+ });
119
+ }, [
120
+ isDesktop
121
+ ]);
97
122
  // Sync local storage
98
123
  React__namespace.useEffect(()=>{
99
124
  setStoredTours(state);
@@ -1 +1 @@
1
- {"version":3,"file":"Context.js","sources":["../../../../../../admin/src/components/GuidedTour/Context.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { produce } from 'immer';\n\nimport { useTracking } from '../../features/Tracking';\nimport { usePersistentState } from '../../hooks/usePersistentState';\nimport { createContext } from '../Context';\n\nimport { type Tours, tours as guidedTours } from './Tours';\nimport { GUIDED_TOUR_REQUIRED_ACTIONS } from './utils/constants';\nimport { migrateTours } from './utils/migrations';\n\n/* -------------------------------------------------------------------------------------------------\n * GuidedTourProvider\n * -----------------------------------------------------------------------------------------------*/\n\ntype ValidTourName = keyof Tours;\n\n/**\n * Derive the union of all string literal values from GUIDED_TOUR_REQUIRED_ACTIONS\n * (ie didCreateContentTypeSchema | didCreateContent etc...)\n */\ntype ValueOf<T> = T[keyof T];\ntype NonEmptyValueOf<T> = T extends Record<string, never> ? never : ValueOf<T>;\nexport type CompletedActions = NonEmptyValueOf<ValueOf<typeof GUIDED_TOUR_REQUIRED_ACTIONS>>[];\n\ntype Action =\n | {\n type: 'next_step';\n payload: ValidTourName;\n }\n | {\n type: 'previous_step';\n payload: ValidTourName;\n }\n | {\n type: 'go_to_step';\n payload: {\n tourName: ValidTourName;\n step: number;\n };\n }\n | {\n type: 'skip_tour';\n payload: ValidTourName;\n }\n | {\n type: 'skip_all_tours';\n }\n | {\n type: 'reset_all_tours';\n }\n | {\n type: 'set_completed_actions';\n payload: CompletedActions;\n }\n | {\n type: 'remove_completed_action';\n payload: ValueOf<CompletedActions>;\n };\n\ntype TourState = Record<ValidTourName, { currentStep: number; isCompleted: boolean }>;\ntype State = {\n tours: TourState;\n enabled: boolean;\n completedActions: CompletedActions;\n};\n\nconst [GuidedTourProviderImpl, useGuidedTour] = createContext<{\n state: State;\n dispatch: React.Dispatch<Action>;\n}>('GuidedTour');\n\nconst getInitialTourState = (tours: Tours) => {\n return Object.keys(tours).reduce((acc, tourName) => {\n acc[tourName as ValidTourName] = {\n currentStep: 0,\n isCompleted: false,\n };\n\n return acc;\n }, {} as TourState);\n};\n\nconst getCompletedTours = (tours: TourState): ValidTourName[] => {\n return Object.keys(tours).filter(\n (tourName) => tours[tourName as ValidTourName].isCompleted\n ) as ValidTourName[];\n};\n\nconst areAllToursCompleted = (tours: TourState) => Object.values(tours).every((t) => t.isCompleted);\n\nfunction reducer(state: State, action: Action): State {\n return produce(state, (draft) => {\n if (action.type === 'next_step') {\n const currentStep = draft.tours[action.payload].currentStep;\n const tourLength = guidedTours[action.payload]._meta.totalStepCount;\n\n const nextStep = currentStep + 1;\n draft.tours[action.payload].currentStep = nextStep;\n draft.tours[action.payload].isCompleted = nextStep >= tourLength;\n }\n\n if (action.type === 'previous_step') {\n const currentStep = draft.tours[action.payload].currentStep;\n\n if (currentStep <= 0) return;\n\n const previousStep = currentStep - 1;\n draft.tours[action.payload].currentStep = previousStep;\n }\n\n if (action.type === 'skip_tour') {\n draft.tours[action.payload].isCompleted = true;\n }\n\n if (action.type === 'set_completed_actions') {\n draft.completedActions = [...new Set([...draft.completedActions, ...action.payload])];\n }\n\n if (action.type === 'remove_completed_action') {\n draft.completedActions = draft.completedActions.filter(\n (completedAction) => completedAction !== action.payload\n );\n }\n\n if (action.type === 'skip_all_tours') {\n draft.enabled = false;\n }\n\n if (action.type === 'reset_all_tours') {\n draft.enabled = true;\n draft.tours = getInitialTourState(guidedTours);\n draft.completedActions = [];\n }\n\n if (action.type === 'go_to_step') {\n draft.tours[action.payload.tourName].currentStep = action.payload.step;\n }\n });\n}\n\nconst STORAGE_KEY = 'STRAPI_GUIDED_TOUR';\nconst GuidedTourContext = ({\n children,\n enabled = true,\n}: {\n children: React.ReactNode;\n enabled?: boolean;\n}) => {\n const { trackUsage } = useTracking();\n const [storedTours, setStoredTours] = usePersistentState<State>(STORAGE_KEY, {\n tours: getInitialTourState(guidedTours),\n enabled,\n completedActions: [],\n });\n const migratedTourState = migrateTours(storedTours);\n const [state, dispatch] = React.useReducer(reducer, migratedTourState);\n\n // Sync local storage\n React.useEffect(() => {\n setStoredTours(state);\n }, [state, setStoredTours]);\n\n // Derive all completed tours from state\n const currentAllCompletedState = areAllToursCompleted(state.tours);\n // Store completed state in ref to survive a re-render,\n // when current state changes this will persist and be used for comparison\n const previousAllCompletedStateRef = React.useRef(currentAllCompletedState);\n React.useEffect(() => {\n const previousAllCompletedState = previousAllCompletedStateRef.current;\n // When the previous state was not complete but the current state is now complete, fire the event\n if (!previousAllCompletedState && currentAllCompletedState) {\n trackUsage('didCompleteGuidedTour', { name: 'all' });\n }\n\n // When the current state has all tours completed so will the previous state, the tracking event won't fire again\n previousAllCompletedStateRef.current = currentAllCompletedState;\n }, [currentAllCompletedState, trackUsage]);\n\n return (\n <GuidedTourProviderImpl state={state} dispatch={dispatch}>\n {children}\n </GuidedTourProviderImpl>\n );\n};\n\nexport type { Action, State, ValidTourName };\nexport { GuidedTourContext, useGuidedTour, reducer, getCompletedTours };\n"],"names":["GuidedTourProviderImpl","useGuidedTour","createContext","getInitialTourState","tours","Object","keys","reduce","acc","tourName","currentStep","isCompleted","getCompletedTours","filter","areAllToursCompleted","values","every","t","reducer","state","action","produce","draft","type","payload","tourLength","guidedTours","_meta","totalStepCount","nextStep","previousStep","completedActions","Set","completedAction","enabled","step","STORAGE_KEY","GuidedTourContext","children","trackUsage","useTracking","storedTours","setStoredTours","usePersistentState","migratedTourState","migrateTours","dispatch","React","useReducer","useEffect","currentAllCompletedState","previousAllCompletedStateRef","useRef","previousAllCompletedState","current","name","_jsx"],"mappings":"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"}
1
+ {"version":3,"file":"Context.js","sources":["../../../../../../admin/src/components/GuidedTour/Context.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { produce } from 'immer';\n\nimport { useTracking } from '../../features/Tracking';\nimport { useIsDesktop } from '../../hooks/useMediaQuery';\nimport { usePersistentState } from '../../hooks/usePersistentState';\nimport { createContext } from '../Context';\n\nimport { type Tours, tours as guidedTours } from './Tours';\nimport { GUIDED_TOUR_REQUIRED_ACTIONS } from './utils/constants';\nimport { migrateTours } from './utils/migrations';\n\n/* -------------------------------------------------------------------------------------------------\n * GuidedTourProvider\n * -----------------------------------------------------------------------------------------------*/\n\ntype ValidTourName = keyof Tours;\n\n/**\n * Derive the union of all string literal values from GUIDED_TOUR_REQUIRED_ACTIONS\n * (ie didCreateContentTypeSchema | didCreateContent etc...)\n */\ntype ValueOf<T> = T[keyof T];\ntype NonEmptyValueOf<T> = T extends Record<string, never> ? never : ValueOf<T>;\nexport type CompletedActions = NonEmptyValueOf<ValueOf<typeof GUIDED_TOUR_REQUIRED_ACTIONS>>[];\n\ntype Action =\n | {\n type: 'next_step';\n payload: ValidTourName;\n }\n | {\n type: 'previous_step';\n payload: ValidTourName;\n }\n | {\n type: 'go_to_step';\n payload: {\n tourName: ValidTourName;\n step: number;\n };\n }\n | {\n type: 'skip_tour';\n payload: ValidTourName;\n }\n | {\n type: 'skip_all_tours';\n }\n | {\n type: 'reset_all_tours';\n }\n | {\n type: 'set_completed_actions';\n payload: CompletedActions;\n }\n | {\n type: 'remove_completed_action';\n payload: ValueOf<CompletedActions>;\n }\n | {\n type: 'set_tour_type';\n payload: {\n tourName: ValidTourName;\n tourType: 'ContentTypeBuilderAI' | 'ContentTypeBuilderNoAI';\n };\n }\n | {\n type: 'set_hidden';\n payload: boolean;\n };\n\ntype TourState = Record<\n ValidTourName,\n { currentStep: number; isCompleted: boolean; tourType?: string }\n>;\ntype State = {\n tours: TourState;\n enabled: boolean;\n hidden?: boolean;\n completedActions: CompletedActions;\n};\n\nconst [GuidedTourProviderImpl, useGuidedTour] = createContext<{\n state: State;\n dispatch: React.Dispatch<Action>;\n}>('GuidedTour');\n\nconst getInitialTourState = (tours: Tours) => {\n return Object.keys(tours).reduce((acc, tourName) => {\n acc[tourName as ValidTourName] = {\n currentStep: 0,\n isCompleted: false,\n tourType: undefined,\n };\n\n return acc;\n }, {} as TourState);\n};\n\nconst getCompletedTours = (tours: TourState): ValidTourName[] => {\n return Object.keys(tours).filter(\n (tourName) => tours[tourName as ValidTourName].isCompleted\n ) as ValidTourName[];\n};\n\nconst areAllToursCompleted = (tours: TourState) => Object.values(tours).every((t) => t.isCompleted);\n\nfunction reducer(state: State, action: Action): State {\n return produce(state, (draft) => {\n if (action.type === 'next_step') {\n const currentStep = draft.tours[action.payload].currentStep;\n const tourLength = guidedTours[action.payload]._meta.totalStepCount;\n\n const nextStep = currentStep + 1;\n draft.tours[action.payload].currentStep = nextStep;\n draft.tours[action.payload].isCompleted = nextStep >= tourLength;\n }\n\n if (action.type === 'previous_step') {\n const currentStep = draft.tours[action.payload].currentStep;\n\n if (currentStep <= 0) return;\n\n const previousStep = currentStep - 1;\n draft.tours[action.payload].currentStep = previousStep;\n }\n\n if (action.type === 'skip_tour') {\n draft.tours[action.payload].isCompleted = true;\n }\n\n if (action.type === 'set_completed_actions') {\n draft.completedActions = [...new Set([...draft.completedActions, ...action.payload])];\n }\n\n if (action.type === 'remove_completed_action') {\n draft.completedActions = draft.completedActions.filter(\n (completedAction) => completedAction !== action.payload\n );\n }\n\n if (action.type === 'skip_all_tours') {\n draft.enabled = false;\n }\n\n if (action.type === 'set_hidden') {\n draft.hidden = action.payload;\n }\n\n if (action.type === 'reset_all_tours') {\n draft.enabled = true;\n draft.tours = getInitialTourState(guidedTours);\n draft.completedActions = [];\n }\n\n if (action.type === 'go_to_step') {\n draft.tours[action.payload.tourName].currentStep = action.payload.step;\n }\n\n if (action.type === 'set_tour_type') {\n const { tourName, tourType } = action.payload;\n const currentTour = draft.tours[tourName];\n\n // If tour type changes and tour is not completed, reset to step 0\n if (currentTour.tourType && currentTour.tourType !== tourType && !currentTour.isCompleted) {\n currentTour.currentStep = 0;\n }\n\n currentTour.tourType = tourType;\n }\n });\n}\n\nconst STORAGE_KEY = 'STRAPI_GUIDED_TOUR';\nconst GuidedTourContext = ({\n children,\n enabled = true,\n}: {\n children: React.ReactNode;\n enabled?: boolean;\n}) => {\n const isDesktop = useIsDesktop();\n const { trackUsage } = useTracking();\n const [storedTours, setStoredTours] = usePersistentState<State>(STORAGE_KEY, {\n tours: getInitialTourState(guidedTours),\n enabled,\n hidden: !isDesktop,\n completedActions: [],\n });\n const migratedTourState = migrateTours(storedTours);\n const [state, dispatch] = React.useReducer(reducer, migratedTourState);\n\n // Watch for changes to enabled prop to update state\n React.useEffect(() => {\n dispatch({ type: 'set_hidden', payload: !isDesktop });\n }, [isDesktop]);\n\n // Sync local storage\n React.useEffect(() => {\n setStoredTours(state);\n }, [state, setStoredTours]);\n\n // Derive all completed tours from state\n const currentAllCompletedState = areAllToursCompleted(state.tours);\n // Store completed state in ref to survive a re-render,\n // when current state changes this will persist and be used for comparison\n const previousAllCompletedStateRef = React.useRef(currentAllCompletedState);\n React.useEffect(() => {\n const previousAllCompletedState = previousAllCompletedStateRef.current;\n // When the previous state was not complete but the current state is now complete, fire the event\n if (!previousAllCompletedState && currentAllCompletedState) {\n trackUsage('didCompleteGuidedTour', { name: 'all' });\n }\n\n // When the current state has all tours completed so will the previous state, the tracking event won't fire again\n previousAllCompletedStateRef.current = currentAllCompletedState;\n }, [currentAllCompletedState, trackUsage]);\n\n return (\n <GuidedTourProviderImpl state={state} dispatch={dispatch}>\n {children}\n </GuidedTourProviderImpl>\n );\n};\n\nexport type { Action, State, ValidTourName };\nexport { GuidedTourContext, useGuidedTour, reducer, getCompletedTours };\n"],"names":["GuidedTourProviderImpl","useGuidedTour","createContext","getInitialTourState","tours","Object","keys","reduce","acc","tourName","currentStep","isCompleted","tourType","undefined","getCompletedTours","filter","areAllToursCompleted","values","every","t","reducer","state","action","produce","draft","type","payload","tourLength","guidedTours","_meta","totalStepCount","nextStep","previousStep","completedActions","Set","completedAction","enabled","hidden","step","currentTour","STORAGE_KEY","GuidedTourContext","children","isDesktop","useIsDesktop","trackUsage","useTracking","storedTours","setStoredTours","usePersistentState","migratedTourState","migrateTours","dispatch","React","useReducer","useEffect","currentAllCompletedState","previousAllCompletedStateRef","useRef","previousAllCompletedState","current","name","_jsx"],"mappings":"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"}
@@ -2,6 +2,7 @@ import { jsx } from 'react/jsx-runtime';
2
2
  import * as React from 'react';
3
3
  import { produce } from 'immer';
4
4
  import { useTracking } from '../../features/Tracking.mjs';
5
+ import { useIsDesktop } from '../../hooks/useMediaQuery.mjs';
5
6
  import { usePersistentState } from '../../hooks/usePersistentState.mjs';
6
7
  import { createContext } from '../Context.mjs';
7
8
  import { tours } from './Tours.mjs';
@@ -12,7 +13,8 @@ const getInitialTourState = (tours)=>{
12
13
  return Object.keys(tours).reduce((acc, tourName)=>{
13
14
  acc[tourName] = {
14
15
  currentStep: 0,
15
- isCompleted: false
16
+ isCompleted: false,
17
+ tourType: undefined
16
18
  };
17
19
  return acc;
18
20
  }, {});
@@ -53,6 +55,9 @@ function reducer(state, action) {
53
55
  if (action.type === 'skip_all_tours') {
54
56
  draft.enabled = false;
55
57
  }
58
+ if (action.type === 'set_hidden') {
59
+ draft.hidden = action.payload;
60
+ }
56
61
  if (action.type === 'reset_all_tours') {
57
62
  draft.enabled = true;
58
63
  draft.tours = getInitialTourState(tours);
@@ -61,18 +66,38 @@ function reducer(state, action) {
61
66
  if (action.type === 'go_to_step') {
62
67
  draft.tours[action.payload.tourName].currentStep = action.payload.step;
63
68
  }
69
+ if (action.type === 'set_tour_type') {
70
+ const { tourName, tourType } = action.payload;
71
+ const currentTour = draft.tours[tourName];
72
+ // If tour type changes and tour is not completed, reset to step 0
73
+ if (currentTour.tourType && currentTour.tourType !== tourType && !currentTour.isCompleted) {
74
+ currentTour.currentStep = 0;
75
+ }
76
+ currentTour.tourType = tourType;
77
+ }
64
78
  });
65
79
  }
66
80
  const STORAGE_KEY = 'STRAPI_GUIDED_TOUR';
67
81
  const GuidedTourContext = ({ children, enabled = true })=>{
82
+ const isDesktop = useIsDesktop();
68
83
  const { trackUsage } = useTracking();
69
84
  const [storedTours, setStoredTours] = usePersistentState(STORAGE_KEY, {
70
85
  tours: getInitialTourState(tours),
71
86
  enabled,
87
+ hidden: !isDesktop,
72
88
  completedActions: []
73
89
  });
74
90
  const migratedTourState = migrateTours(storedTours);
75
91
  const [state, dispatch] = React.useReducer(reducer, migratedTourState);
92
+ // Watch for changes to enabled prop to update state
93
+ React.useEffect(()=>{
94
+ dispatch({
95
+ type: 'set_hidden',
96
+ payload: !isDesktop
97
+ });
98
+ }, [
99
+ isDesktop
100
+ ]);
76
101
  // Sync local storage
77
102
  React.useEffect(()=>{
78
103
  setStoredTours(state);
@@ -1 +1 @@
1
- {"version":3,"file":"Context.mjs","sources":["../../../../../../admin/src/components/GuidedTour/Context.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { produce } from 'immer';\n\nimport { useTracking } from '../../features/Tracking';\nimport { usePersistentState } from '../../hooks/usePersistentState';\nimport { createContext } from '../Context';\n\nimport { type Tours, tours as guidedTours } from './Tours';\nimport { GUIDED_TOUR_REQUIRED_ACTIONS } from './utils/constants';\nimport { migrateTours } from './utils/migrations';\n\n/* -------------------------------------------------------------------------------------------------\n * GuidedTourProvider\n * -----------------------------------------------------------------------------------------------*/\n\ntype ValidTourName = keyof Tours;\n\n/**\n * Derive the union of all string literal values from GUIDED_TOUR_REQUIRED_ACTIONS\n * (ie didCreateContentTypeSchema | didCreateContent etc...)\n */\ntype ValueOf<T> = T[keyof T];\ntype NonEmptyValueOf<T> = T extends Record<string, never> ? never : ValueOf<T>;\nexport type CompletedActions = NonEmptyValueOf<ValueOf<typeof GUIDED_TOUR_REQUIRED_ACTIONS>>[];\n\ntype Action =\n | {\n type: 'next_step';\n payload: ValidTourName;\n }\n | {\n type: 'previous_step';\n payload: ValidTourName;\n }\n | {\n type: 'go_to_step';\n payload: {\n tourName: ValidTourName;\n step: number;\n };\n }\n | {\n type: 'skip_tour';\n payload: ValidTourName;\n }\n | {\n type: 'skip_all_tours';\n }\n | {\n type: 'reset_all_tours';\n }\n | {\n type: 'set_completed_actions';\n payload: CompletedActions;\n }\n | {\n type: 'remove_completed_action';\n payload: ValueOf<CompletedActions>;\n };\n\ntype TourState = Record<ValidTourName, { currentStep: number; isCompleted: boolean }>;\ntype State = {\n tours: TourState;\n enabled: boolean;\n completedActions: CompletedActions;\n};\n\nconst [GuidedTourProviderImpl, useGuidedTour] = createContext<{\n state: State;\n dispatch: React.Dispatch<Action>;\n}>('GuidedTour');\n\nconst getInitialTourState = (tours: Tours) => {\n return Object.keys(tours).reduce((acc, tourName) => {\n acc[tourName as ValidTourName] = {\n currentStep: 0,\n isCompleted: false,\n };\n\n return acc;\n }, {} as TourState);\n};\n\nconst getCompletedTours = (tours: TourState): ValidTourName[] => {\n return Object.keys(tours).filter(\n (tourName) => tours[tourName as ValidTourName].isCompleted\n ) as ValidTourName[];\n};\n\nconst areAllToursCompleted = (tours: TourState) => Object.values(tours).every((t) => t.isCompleted);\n\nfunction reducer(state: State, action: Action): State {\n return produce(state, (draft) => {\n if (action.type === 'next_step') {\n const currentStep = draft.tours[action.payload].currentStep;\n const tourLength = guidedTours[action.payload]._meta.totalStepCount;\n\n const nextStep = currentStep + 1;\n draft.tours[action.payload].currentStep = nextStep;\n draft.tours[action.payload].isCompleted = nextStep >= tourLength;\n }\n\n if (action.type === 'previous_step') {\n const currentStep = draft.tours[action.payload].currentStep;\n\n if (currentStep <= 0) return;\n\n const previousStep = currentStep - 1;\n draft.tours[action.payload].currentStep = previousStep;\n }\n\n if (action.type === 'skip_tour') {\n draft.tours[action.payload].isCompleted = true;\n }\n\n if (action.type === 'set_completed_actions') {\n draft.completedActions = [...new Set([...draft.completedActions, ...action.payload])];\n }\n\n if (action.type === 'remove_completed_action') {\n draft.completedActions = draft.completedActions.filter(\n (completedAction) => completedAction !== action.payload\n );\n }\n\n if (action.type === 'skip_all_tours') {\n draft.enabled = false;\n }\n\n if (action.type === 'reset_all_tours') {\n draft.enabled = true;\n draft.tours = getInitialTourState(guidedTours);\n draft.completedActions = [];\n }\n\n if (action.type === 'go_to_step') {\n draft.tours[action.payload.tourName].currentStep = action.payload.step;\n }\n });\n}\n\nconst STORAGE_KEY = 'STRAPI_GUIDED_TOUR';\nconst GuidedTourContext = ({\n children,\n enabled = true,\n}: {\n children: React.ReactNode;\n enabled?: boolean;\n}) => {\n const { trackUsage } = useTracking();\n const [storedTours, setStoredTours] = usePersistentState<State>(STORAGE_KEY, {\n tours: getInitialTourState(guidedTours),\n enabled,\n completedActions: [],\n });\n const migratedTourState = migrateTours(storedTours);\n const [state, dispatch] = React.useReducer(reducer, migratedTourState);\n\n // Sync local storage\n React.useEffect(() => {\n setStoredTours(state);\n }, [state, setStoredTours]);\n\n // Derive all completed tours from state\n const currentAllCompletedState = areAllToursCompleted(state.tours);\n // Store completed state in ref to survive a re-render,\n // when current state changes this will persist and be used for comparison\n const previousAllCompletedStateRef = React.useRef(currentAllCompletedState);\n React.useEffect(() => {\n const previousAllCompletedState = previousAllCompletedStateRef.current;\n // When the previous state was not complete but the current state is now complete, fire the event\n if (!previousAllCompletedState && currentAllCompletedState) {\n trackUsage('didCompleteGuidedTour', { name: 'all' });\n }\n\n // When the current state has all tours completed so will the previous state, the tracking event won't fire again\n previousAllCompletedStateRef.current = currentAllCompletedState;\n }, [currentAllCompletedState, trackUsage]);\n\n return (\n <GuidedTourProviderImpl state={state} dispatch={dispatch}>\n {children}\n </GuidedTourProviderImpl>\n );\n};\n\nexport type { Action, State, ValidTourName };\nexport { GuidedTourContext, useGuidedTour, reducer, getCompletedTours };\n"],"names":["GuidedTourProviderImpl","useGuidedTour","createContext","getInitialTourState","tours","Object","keys","reduce","acc","tourName","currentStep","isCompleted","getCompletedTours","filter","areAllToursCompleted","values","every","t","reducer","state","action","produce","draft","type","payload","tourLength","guidedTours","_meta","totalStepCount","nextStep","previousStep","completedActions","Set","completedAction","enabled","step","STORAGE_KEY","GuidedTourContext","children","trackUsage","useTracking","storedTours","setStoredTours","usePersistentState","migratedTourState","migrateTours","dispatch","React","useReducer","useEffect","currentAllCompletedState","previousAllCompletedStateRef","useRef","previousAllCompletedState","current","name","_jsx"],"mappings":"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"}
1
+ {"version":3,"file":"Context.mjs","sources":["../../../../../../admin/src/components/GuidedTour/Context.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { produce } from 'immer';\n\nimport { useTracking } from '../../features/Tracking';\nimport { useIsDesktop } from '../../hooks/useMediaQuery';\nimport { usePersistentState } from '../../hooks/usePersistentState';\nimport { createContext } from '../Context';\n\nimport { type Tours, tours as guidedTours } from './Tours';\nimport { GUIDED_TOUR_REQUIRED_ACTIONS } from './utils/constants';\nimport { migrateTours } from './utils/migrations';\n\n/* -------------------------------------------------------------------------------------------------\n * GuidedTourProvider\n * -----------------------------------------------------------------------------------------------*/\n\ntype ValidTourName = keyof Tours;\n\n/**\n * Derive the union of all string literal values from GUIDED_TOUR_REQUIRED_ACTIONS\n * (ie didCreateContentTypeSchema | didCreateContent etc...)\n */\ntype ValueOf<T> = T[keyof T];\ntype NonEmptyValueOf<T> = T extends Record<string, never> ? never : ValueOf<T>;\nexport type CompletedActions = NonEmptyValueOf<ValueOf<typeof GUIDED_TOUR_REQUIRED_ACTIONS>>[];\n\ntype Action =\n | {\n type: 'next_step';\n payload: ValidTourName;\n }\n | {\n type: 'previous_step';\n payload: ValidTourName;\n }\n | {\n type: 'go_to_step';\n payload: {\n tourName: ValidTourName;\n step: number;\n };\n }\n | {\n type: 'skip_tour';\n payload: ValidTourName;\n }\n | {\n type: 'skip_all_tours';\n }\n | {\n type: 'reset_all_tours';\n }\n | {\n type: 'set_completed_actions';\n payload: CompletedActions;\n }\n | {\n type: 'remove_completed_action';\n payload: ValueOf<CompletedActions>;\n }\n | {\n type: 'set_tour_type';\n payload: {\n tourName: ValidTourName;\n tourType: 'ContentTypeBuilderAI' | 'ContentTypeBuilderNoAI';\n };\n }\n | {\n type: 'set_hidden';\n payload: boolean;\n };\n\ntype TourState = Record<\n ValidTourName,\n { currentStep: number; isCompleted: boolean; tourType?: string }\n>;\ntype State = {\n tours: TourState;\n enabled: boolean;\n hidden?: boolean;\n completedActions: CompletedActions;\n};\n\nconst [GuidedTourProviderImpl, useGuidedTour] = createContext<{\n state: State;\n dispatch: React.Dispatch<Action>;\n}>('GuidedTour');\n\nconst getInitialTourState = (tours: Tours) => {\n return Object.keys(tours).reduce((acc, tourName) => {\n acc[tourName as ValidTourName] = {\n currentStep: 0,\n isCompleted: false,\n tourType: undefined,\n };\n\n return acc;\n }, {} as TourState);\n};\n\nconst getCompletedTours = (tours: TourState): ValidTourName[] => {\n return Object.keys(tours).filter(\n (tourName) => tours[tourName as ValidTourName].isCompleted\n ) as ValidTourName[];\n};\n\nconst areAllToursCompleted = (tours: TourState) => Object.values(tours).every((t) => t.isCompleted);\n\nfunction reducer(state: State, action: Action): State {\n return produce(state, (draft) => {\n if (action.type === 'next_step') {\n const currentStep = draft.tours[action.payload].currentStep;\n const tourLength = guidedTours[action.payload]._meta.totalStepCount;\n\n const nextStep = currentStep + 1;\n draft.tours[action.payload].currentStep = nextStep;\n draft.tours[action.payload].isCompleted = nextStep >= tourLength;\n }\n\n if (action.type === 'previous_step') {\n const currentStep = draft.tours[action.payload].currentStep;\n\n if (currentStep <= 0) return;\n\n const previousStep = currentStep - 1;\n draft.tours[action.payload].currentStep = previousStep;\n }\n\n if (action.type === 'skip_tour') {\n draft.tours[action.payload].isCompleted = true;\n }\n\n if (action.type === 'set_completed_actions') {\n draft.completedActions = [...new Set([...draft.completedActions, ...action.payload])];\n }\n\n if (action.type === 'remove_completed_action') {\n draft.completedActions = draft.completedActions.filter(\n (completedAction) => completedAction !== action.payload\n );\n }\n\n if (action.type === 'skip_all_tours') {\n draft.enabled = false;\n }\n\n if (action.type === 'set_hidden') {\n draft.hidden = action.payload;\n }\n\n if (action.type === 'reset_all_tours') {\n draft.enabled = true;\n draft.tours = getInitialTourState(guidedTours);\n draft.completedActions = [];\n }\n\n if (action.type === 'go_to_step') {\n draft.tours[action.payload.tourName].currentStep = action.payload.step;\n }\n\n if (action.type === 'set_tour_type') {\n const { tourName, tourType } = action.payload;\n const currentTour = draft.tours[tourName];\n\n // If tour type changes and tour is not completed, reset to step 0\n if (currentTour.tourType && currentTour.tourType !== tourType && !currentTour.isCompleted) {\n currentTour.currentStep = 0;\n }\n\n currentTour.tourType = tourType;\n }\n });\n}\n\nconst STORAGE_KEY = 'STRAPI_GUIDED_TOUR';\nconst GuidedTourContext = ({\n children,\n enabled = true,\n}: {\n children: React.ReactNode;\n enabled?: boolean;\n}) => {\n const isDesktop = useIsDesktop();\n const { trackUsage } = useTracking();\n const [storedTours, setStoredTours] = usePersistentState<State>(STORAGE_KEY, {\n tours: getInitialTourState(guidedTours),\n enabled,\n hidden: !isDesktop,\n completedActions: [],\n });\n const migratedTourState = migrateTours(storedTours);\n const [state, dispatch] = React.useReducer(reducer, migratedTourState);\n\n // Watch for changes to enabled prop to update state\n React.useEffect(() => {\n dispatch({ type: 'set_hidden', payload: !isDesktop });\n }, [isDesktop]);\n\n // Sync local storage\n React.useEffect(() => {\n setStoredTours(state);\n }, [state, setStoredTours]);\n\n // Derive all completed tours from state\n const currentAllCompletedState = areAllToursCompleted(state.tours);\n // Store completed state in ref to survive a re-render,\n // when current state changes this will persist and be used for comparison\n const previousAllCompletedStateRef = React.useRef(currentAllCompletedState);\n React.useEffect(() => {\n const previousAllCompletedState = previousAllCompletedStateRef.current;\n // When the previous state was not complete but the current state is now complete, fire the event\n if (!previousAllCompletedState && currentAllCompletedState) {\n trackUsage('didCompleteGuidedTour', { name: 'all' });\n }\n\n // When the current state has all tours completed so will the previous state, the tracking event won't fire again\n previousAllCompletedStateRef.current = currentAllCompletedState;\n }, [currentAllCompletedState, trackUsage]);\n\n return (\n <GuidedTourProviderImpl state={state} dispatch={dispatch}>\n {children}\n </GuidedTourProviderImpl>\n );\n};\n\nexport type { Action, State, ValidTourName };\nexport { GuidedTourContext, useGuidedTour, reducer, getCompletedTours };\n"],"names":["GuidedTourProviderImpl","useGuidedTour","createContext","getInitialTourState","tours","Object","keys","reduce","acc","tourName","currentStep","isCompleted","tourType","undefined","getCompletedTours","filter","areAllToursCompleted","values","every","t","reducer","state","action","produce","draft","type","payload","tourLength","guidedTours","_meta","totalStepCount","nextStep","previousStep","completedActions","Set","completedAction","enabled","hidden","step","currentTour","STORAGE_KEY","GuidedTourContext","children","isDesktop","useIsDesktop","trackUsage","useTracking","storedTours","setStoredTours","usePersistentState","migratedTourState","migrateTours","dispatch","React","useReducer","useEffect","currentAllCompletedState","previousAllCompletedStateRef","useRef","previousAllCompletedState","current","name","_jsx"],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var Context = require('./Context.js');
5
+
6
+ const GuidedTourProvider = ({ children })=>{
7
+ const isGuidedTourEnabled = process.env.NODE_ENV !== 'test';
8
+ return /*#__PURE__*/ jsxRuntime.jsx(Context.GuidedTourContext, {
9
+ enabled: isGuidedTourEnabled,
10
+ children: children
11
+ });
12
+ };
13
+
14
+ exports.GuidedTourProvider = GuidedTourProvider;
15
+ //# sourceMappingURL=GuidedTourProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GuidedTourProvider.js","sources":["../../../../../../admin/src/components/GuidedTour/GuidedTourProvider.tsx"],"sourcesContent":["import { GuidedTourContext } from './Context';\n\ninterface GuidedTourProviderProps {\n children: React.ReactNode;\n}\n\nexport const GuidedTourProvider = ({ children }: GuidedTourProviderProps) => {\n const isGuidedTourEnabled = process.env.NODE_ENV !== 'test';\n\n return <GuidedTourContext enabled={isGuidedTourEnabled}>{children}</GuidedTourContext>;\n};\n"],"names":["GuidedTourProvider","children","isGuidedTourEnabled","process","env","NODE_ENV","_jsx","GuidedTourContext","enabled"],"mappings":";;;;;AAMaA,MAAAA,kBAAAA,GAAqB,CAAC,EAAEC,QAAQ,EAA2B,GAAA;AACtE,IAAA,MAAMC,mBAAsBC,GAAAA,OAAAA,CAAQC,GAAG,CAACC,QAAQ,KAAK,MAAA;AAErD,IAAA,qBAAOC,cAACC,CAAAA,yBAAAA,EAAAA;QAAkBC,OAASN,EAAAA,mBAAAA;AAAsBD,QAAAA,QAAAA,EAAAA;;AAC3D;;;;"}
@@ -0,0 +1,13 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { GuidedTourContext } from './Context.mjs';
3
+
4
+ const GuidedTourProvider = ({ children })=>{
5
+ const isGuidedTourEnabled = process.env.NODE_ENV !== 'test';
6
+ return /*#__PURE__*/ jsx(GuidedTourContext, {
7
+ enabled: isGuidedTourEnabled,
8
+ children: children
9
+ });
10
+ };
11
+
12
+ export { GuidedTourProvider };
13
+ //# sourceMappingURL=GuidedTourProvider.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GuidedTourProvider.mjs","sources":["../../../../../../admin/src/components/GuidedTour/GuidedTourProvider.tsx"],"sourcesContent":["import { GuidedTourContext } from './Context';\n\ninterface GuidedTourProviderProps {\n children: React.ReactNode;\n}\n\nexport const GuidedTourProvider = ({ children }: GuidedTourProviderProps) => {\n const isGuidedTourEnabled = process.env.NODE_ENV !== 'test';\n\n return <GuidedTourContext enabled={isGuidedTourEnabled}>{children}</GuidedTourContext>;\n};\n"],"names":["GuidedTourProvider","children","isGuidedTourEnabled","process","env","NODE_ENV","_jsx","GuidedTourContext","enabled"],"mappings":";;;AAMaA,MAAAA,kBAAAA,GAAqB,CAAC,EAAEC,QAAQ,EAA2B,GAAA;AACtE,IAAA,MAAMC,mBAAsBC,GAAAA,OAAAA,CAAQC,GAAG,CAACC,QAAQ,KAAK,MAAA;AAErD,IAAA,qBAAOC,GAACC,CAAAA,iBAAAA,EAAAA;QAAkBC,OAASN,EAAAA,mBAAAA;AAAsBD,QAAAA,QAAAA,EAAAA;;AAC3D;;;;"}
@@ -135,6 +135,7 @@ const GuidedTourHomepageOverview = ()=>{
135
135
  const tourState = Context.useGuidedTour('Overview', (s)=>s.state.tours);
136
136
  const dispatch = Context.useGuidedTour('Overview', (s)=>s.dispatch);
137
137
  const enabled = Context.useGuidedTour('Overview', (s)=>s.state.enabled);
138
+ const hidden = Context.useGuidedTour('Overview', (s)=>s.state.hidden);
138
139
  const completedActions = Context.useGuidedTour('Overview', (s)=>s.state.completedActions);
139
140
  const { data: guidedTourMeta } = admin.useGetGuidedTourMetaQuery();
140
141
  const tourNames = Object.keys(tourState);
@@ -163,7 +164,7 @@ const GuidedTourHomepageOverview = ()=>{
163
164
  });
164
165
  }
165
166
  };
166
- if (!guidedTourMeta?.data.isFirstSuperAdminUser || !enabled) {
167
+ if (!guidedTourMeta?.data.isFirstSuperAdminUser || !enabled || hidden) {
167
168
  return null;
168
169
  }
169
170
  return /*#__PURE__*/ jsxRuntime.jsxs(Container, {