@strapi/admin 5.48.1 → 5.49.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (317) hide show
  1. package/dist/admin/admin/src/StrapiApp.js +33 -20
  2. package/dist/admin/admin/src/StrapiApp.js.map +1 -1
  3. package/dist/admin/admin/src/StrapiApp.mjs +6 -1
  4. package/dist/admin/admin/src/StrapiApp.mjs.map +1 -1
  5. package/dist/admin/admin/src/components/ConfirmDialog.js +3 -2
  6. package/dist/admin/admin/src/components/ConfirmDialog.js.map +1 -1
  7. package/dist/admin/admin/src/components/Context.js +4 -3
  8. package/dist/admin/admin/src/components/Context.js.map +1 -1
  9. package/dist/admin/admin/src/components/DescriptionComponentRenderer.js +8 -4
  10. package/dist/admin/admin/src/components/DescriptionComponentRenderer.js.map +1 -1
  11. package/dist/admin/admin/src/components/Filters.js +3 -2
  12. package/dist/admin/admin/src/components/Filters.js.map +1 -1
  13. package/dist/admin/admin/src/components/Form.js +9 -5
  14. package/dist/admin/admin/src/components/Form.js.map +1 -1
  15. package/dist/admin/admin/src/components/FormInputs/Date.js +3 -2
  16. package/dist/admin/admin/src/components/FormInputs/Date.js.map +1 -1
  17. package/dist/admin/admin/src/components/FormInputs/Json.js +3 -2
  18. package/dist/admin/admin/src/components/FormInputs/Json.js.map +1 -1
  19. package/dist/admin/admin/src/components/GapDropZone.js +3 -2
  20. package/dist/admin/admin/src/components/GapDropZone.js.map +1 -1
  21. package/dist/admin/admin/src/components/GuidedTour/Context.js +3 -2
  22. package/dist/admin/admin/src/components/GuidedTour/Context.js.map +1 -1
  23. package/dist/admin/admin/src/components/GuidedTour/Steps/Step.js +3 -2
  24. package/dist/admin/admin/src/components/GuidedTour/Steps/Step.js.map +1 -1
  25. package/dist/admin/admin/src/components/GuidedTour/Tours.js +9 -3
  26. package/dist/admin/admin/src/components/GuidedTour/Tours.js.map +1 -1
  27. package/dist/admin/admin/src/components/GuidedTour/Tours.mjs +6 -1
  28. package/dist/admin/admin/src/components/GuidedTour/Tours.mjs.map +1 -1
  29. package/dist/admin/admin/src/components/LanguageProvider.js +5 -1
  30. package/dist/admin/admin/src/components/LanguageProvider.js.map +1 -1
  31. package/dist/admin/admin/src/components/Layouts/HeaderLayout.js +3 -2
  32. package/dist/admin/admin/src/components/Layouts/HeaderLayout.js.map +1 -1
  33. package/dist/admin/admin/src/components/LeftMenu.js +3 -2
  34. package/dist/admin/admin/src/components/LeftMenu.js.map +1 -1
  35. package/dist/admin/admin/src/components/NpsSurvey.js +4 -3
  36. package/dist/admin/admin/src/components/NpsSurvey.js.map +1 -1
  37. package/dist/admin/admin/src/components/PageHelpers.js +3 -2
  38. package/dist/admin/admin/src/components/PageHelpers.js.map +1 -1
  39. package/dist/admin/admin/src/components/Pagination.js +3 -2
  40. package/dist/admin/admin/src/components/Pagination.js.map +1 -1
  41. package/dist/admin/admin/src/components/PluginsInitializer.js +3 -2
  42. package/dist/admin/admin/src/components/PluginsInitializer.js.map +1 -1
  43. package/dist/admin/admin/src/components/RelativeTime.js +3 -2
  44. package/dist/admin/admin/src/components/RelativeTime.js.map +1 -1
  45. package/dist/admin/admin/src/components/ResizeIndicator.js +3 -2
  46. package/dist/admin/admin/src/components/ResizeIndicator.js.map +1 -1
  47. package/dist/admin/admin/src/components/SearchInput.js +3 -2
  48. package/dist/admin/admin/src/components/SearchInput.js.map +1 -1
  49. package/dist/admin/admin/src/components/Table.js +3 -2
  50. package/dist/admin/admin/src/components/Table.js.map +1 -1
  51. package/dist/admin/admin/src/components/Theme.js +3 -2
  52. package/dist/admin/admin/src/components/Theme.js.map +1 -1
  53. package/dist/admin/admin/src/components/WidgetRoot.js +9 -5
  54. package/dist/admin/admin/src/components/WidgetRoot.js.map +1 -1
  55. package/dist/admin/admin/src/core/apis/CustomFields.js +14 -10
  56. package/dist/admin/admin/src/core/apis/CustomFields.js.map +1 -1
  57. package/dist/admin/admin/src/core/apis/Widgets.js +8 -4
  58. package/dist/admin/admin/src/core/apis/Widgets.js.map +1 -1
  59. package/dist/admin/admin/src/core/apis/router.js +20 -16
  60. package/dist/admin/admin/src/core/apis/router.js.map +1 -1
  61. package/dist/admin/admin/src/core/apis/router.mjs.map +1 -1
  62. package/dist/admin/admin/src/features/Auth.js +78 -6
  63. package/dist/admin/admin/src/features/Auth.js.map +1 -1
  64. package/dist/admin/admin/src/features/Auth.mjs +77 -6
  65. package/dist/admin/admin/src/features/Auth.mjs.map +1 -1
  66. package/dist/admin/admin/src/features/BackButton.js +3 -2
  67. package/dist/admin/admin/src/features/BackButton.js.map +1 -1
  68. package/dist/admin/admin/src/features/Configuration.js +3 -2
  69. package/dist/admin/admin/src/features/Configuration.js.map +1 -1
  70. package/dist/admin/admin/src/features/Notifications.js +3 -2
  71. package/dist/admin/admin/src/features/Notifications.js.map +1 -1
  72. package/dist/admin/admin/src/features/Tracking.js +7 -3
  73. package/dist/admin/admin/src/features/Tracking.js.map +1 -1
  74. package/dist/admin/admin/src/features/Widgets.js +3 -2
  75. package/dist/admin/admin/src/features/Widgets.js.map +1 -1
  76. package/dist/admin/admin/src/hooks/useAPIErrorHandler.js +3 -2
  77. package/dist/admin/admin/src/hooks/useAPIErrorHandler.js.map +1 -1
  78. package/dist/admin/admin/src/hooks/useAdminRoles.js +3 -2
  79. package/dist/admin/admin/src/hooks/useAdminRoles.js.map +1 -1
  80. package/dist/admin/admin/src/hooks/useControllableState.js +3 -2
  81. package/dist/admin/admin/src/hooks/useControllableState.js.map +1 -1
  82. package/dist/admin/admin/src/hooks/useDebounce.js +3 -2
  83. package/dist/admin/admin/src/hooks/useDebounce.js.map +1 -1
  84. package/dist/admin/admin/src/hooks/useDeviceType.js +3 -2
  85. package/dist/admin/admin/src/hooks/useDeviceType.js.map +1 -1
  86. package/dist/admin/admin/src/hooks/useElementOnScreen.js +3 -2
  87. package/dist/admin/admin/src/hooks/useElementOnScreen.js.map +1 -1
  88. package/dist/admin/admin/src/hooks/useEnterprise.js +3 -2
  89. package/dist/admin/admin/src/hooks/useEnterprise.js.map +1 -1
  90. package/dist/admin/admin/src/hooks/useFetchClient.js +3 -2
  91. package/dist/admin/admin/src/hooks/useFetchClient.js.map +1 -1
  92. package/dist/admin/admin/src/hooks/useForceUpdate.js +3 -2
  93. package/dist/admin/admin/src/hooks/useForceUpdate.js.map +1 -1
  94. package/dist/admin/admin/src/hooks/useIdleSessionLogout.js +85 -15
  95. package/dist/admin/admin/src/hooks/useIdleSessionLogout.js.map +1 -1
  96. package/dist/admin/admin/src/hooks/useIdleSessionLogout.mjs +82 -14
  97. package/dist/admin/admin/src/hooks/useIdleSessionLogout.mjs.map +1 -1
  98. package/dist/admin/admin/src/hooks/useIsMounted.js +3 -2
  99. package/dist/admin/admin/src/hooks/useIsMounted.js.map +1 -1
  100. package/dist/admin/admin/src/hooks/useMediaQuery.js +3 -2
  101. package/dist/admin/admin/src/hooks/useMediaQuery.js.map +1 -1
  102. package/dist/admin/admin/src/hooks/useMenu.js +7 -3
  103. package/dist/admin/admin/src/hooks/useMenu.js.map +1 -1
  104. package/dist/admin/admin/src/hooks/useOnce.js +3 -2
  105. package/dist/admin/admin/src/hooks/useOnce.js.map +1 -1
  106. package/dist/admin/admin/src/hooks/useRBAC.js +7 -3
  107. package/dist/admin/admin/src/hooks/useRBAC.js.map +1 -1
  108. package/dist/admin/admin/src/hooks/useSettingsMenu.js +7 -3
  109. package/dist/admin/admin/src/hooks/useSettingsMenu.js.map +1 -1
  110. package/dist/admin/admin/src/hooks/useThrottledCallback.js +5 -1
  111. package/dist/admin/admin/src/hooks/useThrottledCallback.js.map +1 -1
  112. package/dist/admin/admin/src/layouts/AuthenticatedLayout.js +11 -5
  113. package/dist/admin/admin/src/layouts/AuthenticatedLayout.js.map +1 -1
  114. package/dist/admin/admin/src/pages/Auth/components/ForgotPassword.js +3 -2
  115. package/dist/admin/admin/src/pages/Auth/components/ForgotPassword.js.map +1 -1
  116. package/dist/admin/admin/src/pages/Auth/components/Login.js +8 -4
  117. package/dist/admin/admin/src/pages/Auth/components/Login.js.map +1 -1
  118. package/dist/admin/admin/src/pages/Auth/components/Oops.js +3 -2
  119. package/dist/admin/admin/src/pages/Auth/components/Oops.js.map +1 -1
  120. package/dist/admin/admin/src/pages/Auth/components/Register.js +9 -5
  121. package/dist/admin/admin/src/pages/Auth/components/Register.js.map +1 -1
  122. package/dist/admin/admin/src/pages/Auth/components/ResetPassword.js +4 -3
  123. package/dist/admin/admin/src/pages/Auth/components/ResetPassword.js.map +1 -1
  124. package/dist/admin/admin/src/pages/Home/HomePage.js +3 -2
  125. package/dist/admin/admin/src/pages/Home/HomePage.js.map +1 -1
  126. package/dist/admin/admin/src/pages/Home/components/AddWidgetModal.js +8 -4
  127. package/dist/admin/admin/src/pages/Home/components/AddWidgetModal.js.map +1 -1
  128. package/dist/admin/admin/src/pages/Home/components/FreeTrialEndedModal.js +7 -3
  129. package/dist/admin/admin/src/pages/Home/components/FreeTrialEndedModal.js.map +1 -1
  130. package/dist/admin/admin/src/pages/Home/components/FreeTrialWelcomeModal.js +7 -3
  131. package/dist/admin/admin/src/pages/Home/components/FreeTrialWelcomeModal.js.map +1 -1
  132. package/dist/admin/admin/src/pages/ProfilePage.js +8 -4
  133. package/dist/admin/admin/src/pages/ProfilePage.js.map +1 -1
  134. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.js +3 -2
  135. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.js.map +1 -1
  136. package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.js +3 -2
  137. package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.js.map +1 -1
  138. package/dist/admin/admin/src/pages/Settings/components/Tokens/constants.js +3 -2
  139. package/dist/admin/admin/src/pages/Settings/components/Tokens/constants.js.map +1 -1
  140. package/dist/admin/admin/src/pages/Settings/components/Tokens/utils/getDateOfExpiration.js +3 -2
  141. package/dist/admin/admin/src/pages/Settings/components/Tokens/utils/getDateOfExpiration.js.map +1 -1
  142. package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/EditView/EditViewPage.js +3 -2
  143. package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/EditView/EditViewPage.js.map +1 -1
  144. package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/EditView/components/AdminPermissions.js +3 -2
  145. package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/EditView/components/AdminPermissions.js.map +1 -1
  146. package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/ListView.js +4 -3
  147. package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/ListView.js.map +1 -1
  148. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.js +3 -2
  149. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.js.map +1 -1
  150. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/BoundRoute.js +7 -2
  151. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/BoundRoute.js.map +1 -1
  152. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.js +5 -1
  153. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.js.map +1 -1
  154. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/reducer.js +6 -2
  155. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/reducer.js.map +1 -1
  156. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.js +4 -3
  157. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.js.map +1 -1
  158. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.js +3 -2
  159. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.js.map +1 -1
  160. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/LogoInput.js +7 -3
  161. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/LogoInput.js.map +1 -1
  162. package/dist/admin/admin/src/pages/Settings/pages/InstalledPlugins.js +3 -2
  163. package/dist/admin/admin/src/pages/Settings/pages/InstalledPlugins.js.map +1 -1
  164. package/dist/admin/admin/src/pages/Settings/pages/Roles/CreatePage.js +4 -3
  165. package/dist/admin/admin/src/pages/Settings/pages/Roles/CreatePage.js.map +1 -1
  166. package/dist/admin/admin/src/pages/Settings/pages/Roles/EditPage.js +4 -3
  167. package/dist/admin/admin/src/pages/Settings/pages/Roles/EditPage.js.map +1 -1
  168. package/dist/admin/admin/src/pages/Settings/pages/Roles/ListPage.js +3 -2
  169. package/dist/admin/admin/src/pages/Settings/pages/Roles/ListPage.js.map +1 -1
  170. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.js +10 -6
  171. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.js.map +1 -1
  172. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ConditionsButton.js +3 -2
  173. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ConditionsButton.js.map +1 -1
  174. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ConditionsModal.js +13 -7
  175. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ConditionsModal.js.map +1 -1
  176. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ContentTypeCollapses.js +15 -9
  177. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ContentTypeCollapses.js.map +1 -1
  178. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/GlobalActions.js +9 -5
  179. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/GlobalActions.js.map +1 -1
  180. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.js +33 -25
  181. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.js.map +1 -1
  182. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.js +10 -6
  183. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.js.map +1 -1
  184. package/dist/admin/admin/src/pages/Settings/pages/Roles/hooks/usePermissionsDataManager.js +3 -2
  185. package/dist/admin/admin/src/pages/Settings/pages/Roles/hooks/usePermissionsDataManager.js.map +1 -1
  186. package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/difference.js +9 -3
  187. package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/difference.js.map +1 -1
  188. package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/forms.js +8 -3
  189. package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/forms.js.map +1 -1
  190. package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/layouts.js +6 -2
  191. package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/layouts.js.map +1 -1
  192. package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/updateConditionsToFalse.js +8 -3
  193. package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/updateConditionsToFalse.js.map +1 -1
  194. package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.js +4 -3
  195. package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.js.map +1 -1
  196. package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/ListView.js +4 -3
  197. package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/ListView.js.map +1 -1
  198. package/dist/admin/admin/src/pages/Settings/pages/Users/EditPage.js +9 -5
  199. package/dist/admin/admin/src/pages/Settings/pages/Users/EditPage.js.map +1 -1
  200. package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.js +4 -3
  201. package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.js.map +1 -1
  202. package/dist/admin/admin/src/pages/Settings/pages/Users/components/CreateActionCE.js +3 -2
  203. package/dist/admin/admin/src/pages/Settings/pages/Users/components/CreateActionCE.js.map +1 -1
  204. package/dist/admin/admin/src/pages/Settings/pages/Users/components/NewUserForm.js +4 -3
  205. package/dist/admin/admin/src/pages/Settings/pages/Users/components/NewUserForm.js.map +1 -1
  206. package/dist/admin/admin/src/pages/Settings/pages/Users/utils/validation.js +3 -2
  207. package/dist/admin/admin/src/pages/Settings/pages/Users/utils/validation.js.map +1 -1
  208. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/EditPage.js +3 -2
  209. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/EditPage.js.map +1 -1
  210. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/ListPage.js +3 -2
  211. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/ListPage.js.map +1 -1
  212. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/HeadersInput.js +3 -2
  213. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/HeadersInput.js.map +1 -1
  214. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/WebhookForm.js +4 -3
  215. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/WebhookForm.js.map +1 -1
  216. package/dist/admin/admin/src/pages/UseCasePage.js +3 -2
  217. package/dist/admin/admin/src/pages/UseCasePage.js.map +1 -1
  218. package/dist/admin/admin/src/utils/getFetchClient.js +7 -2
  219. package/dist/admin/admin/src/utils/getFetchClient.js.map +1 -1
  220. package/dist/admin/admin/src/utils/locales.js +3 -2
  221. package/dist/admin/admin/src/utils/locales.js.map +1 -1
  222. package/dist/admin/admin/src/utils/objects.js +9 -4
  223. package/dist/admin/admin/src/utils/objects.js.map +1 -1
  224. package/dist/admin/admin/src/utils/rulesEngine.js +5 -1
  225. package/dist/admin/admin/src/utils/rulesEngine.js.map +1 -1
  226. package/dist/admin/admin/src/utils/urls.js +5 -1
  227. package/dist/admin/admin/src/utils/urls.js.map +1 -1
  228. package/dist/admin/admin/tests/utils.js +3 -2
  229. package/dist/admin/admin/tests/utils.js.map +1 -1
  230. package/dist/admin/ee/admin/src/hooks/useLicenseLimitNotification.js +7 -3
  231. package/dist/admin/ee/admin/src/hooks/useLicenseLimitNotification.js.map +1 -1
  232. package/dist/admin/ee/admin/src/hooks/useLicenseLimits.js +3 -2
  233. package/dist/admin/ee/admin/src/hooks/useLicenseLimits.js.map +1 -1
  234. package/dist/admin/ee/admin/src/pages/AuthResponse.js +3 -2
  235. package/dist/admin/ee/admin/src/pages/AuthResponse.js.map +1 -1
  236. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/Modal.js +3 -2
  237. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/Modal.js.map +1 -1
  238. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useAuditLogsData.js +3 -2
  239. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useAuditLogsData.js.map +1 -1
  240. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useFormatTimeStamp.js +5 -1
  241. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useFormatTimeStamp.js.map +1 -1
  242. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/SingleSignOnPage.js +3 -2
  243. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/SingleSignOnPage.js.map +1 -1
  244. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/Users/components/CreateActionEE.js +7 -3
  245. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/Users/components/CreateActionEE.js.map +1 -1
  246. package/dist/admin/src/StrapiApp.d.ts +7 -1
  247. package/dist/admin/src/core/apis/router.d.ts +1 -2
  248. package/dist/admin/src/hooks/useIdleSessionLogout.d.ts +66 -12
  249. package/dist/server/ee/server/src/controllers/authentication-utils/middlewares.js +5 -1
  250. package/dist/server/ee/server/src/controllers/authentication-utils/middlewares.js.map +1 -1
  251. package/dist/server/ee/server/src/controllers/authentication.js +5 -1
  252. package/dist/server/ee/server/src/controllers/authentication.js.map +1 -1
  253. package/dist/server/ee/server/src/controllers/user.js +6 -2
  254. package/dist/server/ee/server/src/controllers/user.js.map +1 -1
  255. package/dist/server/ee/server/src/services/auth.js +5 -1
  256. package/dist/server/ee/server/src/services/auth.js.map +1 -1
  257. package/dist/server/ee/server/src/services/user.js +8 -4
  258. package/dist/server/ee/server/src/services/user.js.map +1 -1
  259. package/dist/server/index.js +6 -2
  260. package/dist/server/index.js.map +1 -1
  261. package/dist/server/server/src/ai/services/ai.js +10 -4
  262. package/dist/server/server/src/ai/services/ai.js.map +1 -1
  263. package/dist/server/server/src/controllers/admin.js +9 -4
  264. package/dist/server/server/src/controllers/admin.js.map +1 -1
  265. package/dist/server/server/src/controllers/authentication.js +7 -2
  266. package/dist/server/server/src/controllers/authentication.js.map +1 -1
  267. package/dist/server/server/src/controllers/user.js +3 -2
  268. package/dist/server/server/src/controllers/user.js.map +1 -1
  269. package/dist/server/server/src/controllers/webhooks.js +7 -2
  270. package/dist/server/server/src/controllers/webhooks.js.map +1 -1
  271. package/dist/server/server/src/middlewares/rateLimit.js +7 -2
  272. package/dist/server/server/src/middlewares/rateLimit.js.map +1 -1
  273. package/dist/server/server/src/policies/hasPermissions.js +7 -3
  274. package/dist/server/server/src/policies/hasPermissions.js.map +1 -1
  275. package/dist/server/server/src/routes/serve-admin-panel.js +8 -3
  276. package/dist/server/server/src/routes/serve-admin-panel.js.map +1 -1
  277. package/dist/server/server/src/services/api-token.js +7 -3
  278. package/dist/server/server/src/services/api-token.js.map +1 -1
  279. package/dist/server/server/src/services/auth.js +8 -3
  280. package/dist/server/server/src/services/auth.js.map +1 -1
  281. package/dist/server/server/src/services/content-type.js +6 -2
  282. package/dist/server/server/src/services/content-type.js.map +1 -1
  283. package/dist/server/server/src/services/encryption.js +8 -4
  284. package/dist/server/server/src/services/encryption.js.map +1 -1
  285. package/dist/server/server/src/services/passport.js +6 -2
  286. package/dist/server/server/src/services/passport.js.map +1 -1
  287. package/dist/server/server/src/services/permission/engine.js +5 -1
  288. package/dist/server/server/src/services/permission/engine.js.map +1 -1
  289. package/dist/server/server/src/services/permission/permissions-manager/index.js +5 -1
  290. package/dist/server/server/src/services/permission/permissions-manager/index.js.map +1 -1
  291. package/dist/server/server/src/services/permission/permissions-manager/query-builders.js +14 -10
  292. package/dist/server/server/src/services/permission/permissions-manager/query-builders.js.map +1 -1
  293. package/dist/server/server/src/services/permission/queries.js +5 -1
  294. package/dist/server/server/src/services/permission/queries.js.map +1 -1
  295. package/dist/server/server/src/services/project-settings.js +6 -2
  296. package/dist/server/server/src/services/project-settings.js.map +1 -1
  297. package/dist/server/server/src/services/role.js +8 -4
  298. package/dist/server/server/src/services/role.js.map +1 -1
  299. package/dist/server/server/src/services/token.js +7 -2
  300. package/dist/server/server/src/services/token.js.map +1 -1
  301. package/dist/server/server/src/services/transfer/permission.js +5 -1
  302. package/dist/server/server/src/services/transfer/permission.js.map +1 -1
  303. package/dist/server/server/src/services/transfer/token.js +10 -5
  304. package/dist/server/server/src/services/transfer/token.js.map +1 -1
  305. package/dist/server/server/src/services/user.js +10 -6
  306. package/dist/server/server/src/services/user.js.map +1 -1
  307. package/dist/server/server/src/validation/common-functions/check-fields-are-correctly-nested.js +5 -1
  308. package/dist/server/server/src/validation/common-functions/check-fields-are-correctly-nested.js.map +1 -1
  309. package/dist/server/server/src/validation/common-functions/check-fields-dont-have-duplicates.js +6 -2
  310. package/dist/server/server/src/validation/common-functions/check-fields-dont-have-duplicates.js.map +1 -1
  311. package/dist/server/server/src/validation/common-validators.js +6 -2
  312. package/dist/server/server/src/validation/common-validators.js.map +1 -1
  313. package/dist/server/server/src/validation/policies/hasPermissions.js +6 -2
  314. package/dist/server/server/src/validation/policies/hasPermissions.js.map +1 -1
  315. package/dist/server/shared/utils/session-auth.js +5 -1
  316. package/dist/server/shared/utils/session-auth.js.map +1 -1
  317. package/package.json +7 -7
@@ -1 +1 @@
1
- {"version":3,"file":"Form.js","sources":["../../../../../admin/src/components/Form.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Box,\n type BoxProps,\n Button,\n Dialog,\n useCallbackRef,\n useComposedRefs,\n} from '@strapi/design-system';\nimport { WarningCircle } from '@strapi/icons';\nimport { generateNKeysBetween } from 'fractional-indexing';\nimport { produce } from 'immer';\nimport isEqual from 'lodash/isEqual';\nimport { useIntl, type MessageDescriptor, type PrimitiveType } from 'react-intl';\nimport { useBlocker } from 'react-router-dom';\n\nimport { useWarnIfUnsavedChanges } from '../hooks/useWarnIfUnsavedChanges';\nimport { getIn, setIn } from '../utils/objects';\n\nimport { createContext } from './Context';\n\nimport type {\n InputProps as InputPropsImpl,\n StringProps,\n EnumerationProps,\n} from './FormInputs/types';\nimport type * as Yup from 'yup';\n\n/* -------------------------------------------------------------------------------------------------\n * FormContext\n * -----------------------------------------------------------------------------------------------*/\ntype InputProps = InputPropsImpl | StringProps | EnumerationProps;\n\ninterface TranslationMessage extends MessageDescriptor {\n values?: Record<string, PrimitiveType>;\n}\n\ninterface FormValues {\n [field: string]: any;\n}\n\ninterface FormContextValue<TFormValues extends FormValues = FormValues>\n extends FormState<TFormValues> {\n disabled: boolean;\n getValues: () => TFormValues;\n initialValues: TFormValues;\n modified: boolean;\n /**\n * The default behaviour is to add the row to the end of the array, if you want to add it to a\n * specific index you can pass the index.\n */\n addFieldRow: (field: string, value: any, addAtIndex?: number) => void;\n moveFieldRow: (field: string, fromIndex: number, toIndex: number) => void;\n onChange: (eventOrPath: React.ChangeEvent<any> | string, value?: any) => void;\n /*\n * The default behaviour is to remove the last row, if you want to remove a specific index you can\n * pass the index.\n */\n removeFieldRow: (field: string, removeAtIndex?: number) => void;\n resetForm: (newInitialValues?: TFormValues) => void;\n setErrors: (errors: FormErrors<TFormValues>) => void;\n setSubmitting: (isSubmitting: boolean) => void;\n setValues: (values: TFormValues) => void;\n validate: (\n shouldSetErrors?: boolean,\n options?: Record<string, string>\n ) => Promise<\n { data: TFormValues; errors?: never } | { data?: never; errors: FormErrors<TFormValues> }\n >;\n}\n\n/**\n * @internal\n * @description We use this just to warn people that they're using the useForm\n * methods outside of a Form component, but we don't want to throw an error\n * because otherwise the DocumentActions list cannot be rendered in our list-view.\n */\nconst ERR_MSG =\n 'The Form Component has not been initialised, ensure you are using this hook within a Form component';\n\nconst [FormProvider, useForm] = createContext<FormContextValue>('Form', {\n disabled: false,\n errors: {},\n getValues: () => {\n throw new Error(ERR_MSG);\n },\n initialValues: {},\n isSubmitting: false,\n modified: false,\n addFieldRow: () => {\n throw new Error(ERR_MSG);\n },\n moveFieldRow: () => {\n throw new Error(ERR_MSG);\n },\n onChange: () => {\n throw new Error(ERR_MSG);\n },\n removeFieldRow: () => {\n throw new Error(ERR_MSG);\n },\n resetForm: () => {\n throw new Error(ERR_MSG);\n },\n setErrors: () => {\n throw new Error(ERR_MSG);\n },\n setValues: () => {\n throw new Error(ERR_MSG);\n },\n setSubmitting: () => {\n throw new Error(ERR_MSG);\n },\n validate: async () => {\n throw new Error(ERR_MSG);\n },\n values: {},\n});\n\n/* -------------------------------------------------------------------------------------------------\n * Form\n * -----------------------------------------------------------------------------------------------*/\n\ninterface FormHelpers<TFormValues extends FormValues = FormValues>\n extends Pick<FormContextValue<TFormValues>, 'setErrors' | 'setValues' | 'resetForm'> {}\n\ninterface FormProps<TFormValues extends FormValues = FormValues>\n extends Partial<Pick<FormContextValue<TFormValues>, 'disabled' | 'initialValues'>>,\n Pick<BoxProps, 'width' | 'height'> {\n children:\n | React.ReactNode\n | ((\n props: Pick<\n FormContextValue<TFormValues>,\n | 'disabled'\n | 'errors'\n | 'isSubmitting'\n | 'modified'\n | 'values'\n | 'resetForm'\n | 'onChange'\n | 'setErrors'\n >\n ) => React.ReactNode);\n method: 'POST' | 'PUT';\n onSubmit?: (values: TFormValues, helpers: FormHelpers<TFormValues>) => Promise<void> | void;\n // TODO: type the return value for a validation schema func from Yup.\n validationSchema?: Yup.AnySchema;\n initialErrors?: FormErrors<TFormValues>;\n // NOTE: we don't know what return type it can be here\n validate?: (values: TFormValues, options: Record<string, string>) => Promise<any>;\n}\n\n/**\n * @alpha\n * @description A form component that handles form state, validation and submission.\n * It can additionally handle nested fields and arrays. To access the data you can either\n * use the generic useForm hook or the useField hook when providing the name of your field.\n */\nconst Form = React.forwardRef<HTMLFormElement, FormProps>(\n ({ disabled = false, method, onSubmit, initialErrors, ...props }, ref) => {\n const formRef = React.useRef<HTMLFormElement>(null!);\n const initialValues = React.useRef(props.initialValues ?? {});\n const [state, dispatch] = React.useReducer(reducer, {\n errors: initialErrors ?? {},\n isSubmitting: false,\n values: props.initialValues ?? {},\n });\n\n // Keep a ref to the latest form values so `getValues()` can always return fresh data.\n // We expose `getValues` as a stable callback so consumers (e.g. conditional/rules logic)\n // can call it without causing extra rerenders from changing function references.\n const valuesRef = React.useRef(state.values);\n /**\n * Keep the ref aligned with `state.values` during render (not only in an effect) so\n * `getValues()` / `validate()` always see the latest committed values. Effects run too late\n * for back-to-back user actions (e.g. fast e2e) where the next handler runs before the\n * effect has fired.\n */\n valuesRef.current = state.values;\n\n const getValues = React.useCallback(() => valuesRef.current, []);\n\n React.useEffect(() => {\n /**\n * ONLY update the initialValues if the prop has changed.\n */\n if (!isEqual(initialValues.current, props.initialValues)) {\n initialValues.current = props.initialValues ?? {};\n\n dispatch({\n type: 'SET_INITIAL_VALUES',\n payload: props.initialValues ?? {},\n });\n }\n }, [props.initialValues]);\n\n const setErrors = React.useCallback((errors: FormErrors) => {\n dispatch({\n type: 'SET_ERRORS',\n payload: errors,\n });\n }, []);\n\n const setValues = React.useCallback((values: FormValues) => {\n dispatch({\n type: 'SET_VALUES',\n payload: values,\n });\n }, []);\n\n React.useEffect(() => {\n if (Object.keys(state.errors).length === 0) return;\n\n /**\n * Small timeout to ensure the form has been\n * rendered before we try to focus on the first\n */\n const ref = setTimeout(() => {\n const [firstError] = formRef.current.querySelectorAll('[data-strapi-field-error]');\n\n if (firstError) {\n const errorId = firstError.getAttribute('id');\n const formElementInError = formRef.current.querySelector(\n `[aria-describedby=\"${errorId}\"]`\n );\n\n if (formElementInError && formElementInError instanceof HTMLElement) {\n formElementInError.focus();\n }\n }\n });\n\n return () => clearTimeout(ref);\n }, [state.errors]);\n\n /**\n * Uses the provided validation schema\n */\n const validate = React.useCallback(\n async (shouldSetErrors: boolean = true, options: Record<string, string> = {}) => {\n setErrors({});\n\n const valuesToValidate = valuesRef.current;\n\n if (!props.validationSchema && !props.validate) {\n return { data: valuesToValidate };\n }\n\n try {\n let data;\n if (props.validationSchema) {\n data = await props.validationSchema.validate(valuesToValidate, { abortEarly: false });\n } else if (props.validate) {\n data = await props.validate(valuesToValidate, options);\n } else {\n throw new Error('No validation schema or validate function provided');\n }\n\n return { data };\n } catch (err) {\n if (isErrorYupValidationError(err)) {\n const errors = getYupValidationErrors(err);\n\n if (shouldSetErrors) {\n setErrors(errors);\n }\n\n return { errors };\n } else {\n // We throw any other errors\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\n `Warning: An unhandled error was caught during validation in <Form validationSchema />`,\n err\n );\n }\n\n throw err;\n }\n }\n },\n [props, setErrors]\n );\n\n const handleSubmit: React.FormEventHandler<HTMLFormElement> = async (e) => {\n e.stopPropagation();\n e.preventDefault();\n\n if (!onSubmit) {\n return;\n }\n\n dispatch({\n type: 'SUBMIT_ATTEMPT',\n });\n\n try {\n const { data, errors } = await validate();\n\n if (errors) {\n setErrors(errors);\n\n throw new Error('Submission failed');\n }\n\n await onSubmit(data, {\n setErrors,\n setValues,\n resetForm,\n });\n\n dispatch({\n type: 'SUBMIT_SUCCESS',\n });\n } catch (err) {\n dispatch({\n type: 'SUBMIT_FAILURE',\n });\n\n if (err instanceof Error && err.message === 'Submission failed') {\n return;\n }\n }\n };\n\n const modified = React.useMemo(\n () => !isEqual(initialValues.current, state.values),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [state.values, initialValues.current]\n );\n\n const handleChange: FormContextValue['onChange'] = useCallbackRef((eventOrPath, v) => {\n if (typeof eventOrPath === 'string') {\n dispatch({\n type: 'SET_FIELD_VALUE',\n payload: {\n field: eventOrPath,\n value: v,\n },\n });\n\n return;\n }\n\n const target = eventOrPath.target || eventOrPath.currentTarget;\n\n const { type, name, id, value, options, multiple } = target;\n\n const field = name || id;\n\n if (!field && process.env.NODE_ENV !== 'production') {\n console.warn(\n `\\`onChange\\` was called with an event, but you forgot to pass a \\`name\\` or \\`id'\\` attribute to your input. The field to update cannot be determined`\n );\n }\n\n /**\n * Because we handle any field from this function, we run through a series\n * of checks to understand how to use the value.\n */\n let val;\n\n if (/number|range/.test(type)) {\n const parsed = parseFloat(value);\n // If the value isn't a number for whatever reason, don't let it through because that will break the API.\n val = isNaN(parsed) ? '' : parsed;\n } else if (/checkbox/.test(type)) {\n // Get & invert the current value of the checkbox.\n val = !getIn(state.values, field);\n } else if (options && multiple) {\n // This will handle native select elements incl. ones with mulitple options.\n val = Array.from<HTMLOptionElement>(options)\n .filter((el) => el.selected)\n .map((el) => el.value);\n } else {\n // NOTE: reset value to null so it failes required checks.\n // The API only considers a required field invalid if the value is null|undefined, to differentiate from min 1\n if (value === '') {\n val = null;\n } else {\n val = value;\n }\n }\n\n if (field) {\n dispatch({\n type: 'SET_FIELD_VALUE',\n payload: {\n field,\n value: val,\n },\n });\n }\n });\n\n const addFieldRow: FormContextValue['addFieldRow'] = React.useCallback(\n (field, value, addAtIndex) => {\n dispatch({\n type: 'ADD_FIELD_ROW',\n payload: {\n field,\n value,\n addAtIndex,\n },\n });\n },\n []\n );\n\n const removeFieldRow: FormContextValue['removeFieldRow'] = React.useCallback(\n (field, removeAtIndex) => {\n dispatch({\n type: 'REMOVE_FIELD_ROW',\n payload: {\n field,\n removeAtIndex,\n },\n });\n },\n []\n );\n\n const moveFieldRow: FormContextValue['moveFieldRow'] = React.useCallback(\n (field, fromIndex, toIndex) => {\n dispatch({\n type: 'MOVE_FIELD_ROW',\n payload: {\n field,\n fromIndex,\n toIndex,\n },\n });\n },\n []\n );\n\n const resetForm: FormContextValue['resetForm'] = React.useCallback((newInitialValues) => {\n if (newInitialValues) {\n initialValues.current = newInitialValues;\n }\n dispatch({\n type: 'RESET_FORM',\n payload: {\n errors: {},\n isSubmitting: false,\n values: initialValues.current,\n },\n });\n }, []);\n\n const setSubmitting = React.useCallback((isSubmitting: boolean) => {\n dispatch({ type: 'SET_ISSUBMITTING', payload: isSubmitting });\n }, []);\n\n const composedRefs = useComposedRefs(formRef, ref);\n\n return (\n <Box\n tag=\"form\"\n ref={composedRefs}\n method={method}\n noValidate\n onSubmit={handleSubmit}\n width={props.width}\n height={props.height}\n >\n <FormProvider\n disabled={disabled}\n getValues={getValues}\n onChange={handleChange}\n initialValues={initialValues.current}\n modified={modified}\n addFieldRow={addFieldRow}\n moveFieldRow={moveFieldRow}\n removeFieldRow={removeFieldRow}\n resetForm={resetForm}\n setErrors={setErrors}\n setValues={setValues}\n setSubmitting={setSubmitting}\n validate={validate}\n {...state}\n >\n {typeof props.children === 'function'\n ? props.children({\n modified,\n disabled,\n onChange: handleChange,\n ...state,\n setErrors,\n resetForm,\n })\n : props.children}\n </FormProvider>\n </Box>\n );\n }\n) as <TFormValues extends FormValues>(\n p: FormProps<TFormValues> & { ref?: React.Ref<HTMLFormElement> }\n) => React.ReactElement; // we've cast this because we need the generic to infer the type of the form values.\n\n/**\n * @internal\n * @description Checks if the error is a Yup validation error.\n */\nconst isErrorYupValidationError = (err: any): err is Yup.ValidationError =>\n typeof err === 'object' &&\n err !== null &&\n 'name' in err &&\n typeof err.name === 'string' &&\n err.name === 'ValidationError';\n\n/* -------------------------------------------------------------------------------------------------\n * getYupValidationErrors\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * @description handy utility to convert a yup validation error into a form\n * error object. To be used elsewhere.\n */\nconst getYupValidationErrors = (err: Yup.ValidationError): FormErrors => {\n let errors: FormErrors = {};\n\n if (err.inner) {\n if (err.inner.length === 0) {\n return setIn(errors, err.path!, err.message);\n }\n for (const error of err.inner) {\n if (!getIn(errors, error.path!)) {\n errors = setIn(errors, error.path!, error.message);\n }\n }\n }\n\n return errors;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * reducer\n * -----------------------------------------------------------------------------------------------*/\n\ntype FormErrors<TFormValues extends FormValues = FormValues> = {\n // is it a repeatable component or dynamic zone?\n [Key in keyof TFormValues]?: TFormValues[Key] extends any[]\n ? TFormValues[Key][number] extends object\n ? FormErrors<TFormValues[Key][number]>[] | string | string[]\n : string // this would let us support errors for the dynamic zone or repeatable component not the components within.\n : TFormValues[Key] extends object // is it a regular component?\n ? FormErrors<TFormValues[Key]> // handles nested components\n : string | TranslationMessage; // otherwise its just a field or a translation message.\n};\n\ninterface FormState<TFormValues extends FormValues = FormValues> {\n /**\n * TODO: make this a better type explaining errors could be nested because it follows the same\n * structure as the values.\n */\n errors: FormErrors<TFormValues>;\n isSubmitting: boolean;\n values: TFormValues;\n}\n\ntype FormActions<TFormValues extends FormValues = FormValues> =\n | { type: 'SUBMIT_ATTEMPT' }\n | { type: 'SUBMIT_FAILURE' }\n | { type: 'SUBMIT_SUCCESS' }\n | { type: 'SET_FIELD_VALUE'; payload: { field: string; value: any } }\n | { type: 'ADD_FIELD_ROW'; payload: { field: string; value: any; addAtIndex?: number } }\n | { type: 'REMOVE_FIELD_ROW'; payload: { field: string; removeAtIndex?: number } }\n | { type: 'MOVE_FIELD_ROW'; payload: { field: string; fromIndex: number; toIndex: number } }\n | { type: 'SET_ERRORS'; payload: FormErrors<TFormValues> }\n | { type: 'SET_ISSUBMITTING'; payload: boolean }\n | { type: 'SET_INITIAL_VALUES'; payload: TFormValues }\n | { type: 'SET_VALUES'; payload: TFormValues }\n | { type: 'RESET_FORM'; payload: FormState<TFormValues> };\n\nconst reducer = <TFormValues extends FormValues = FormValues>(\n state: FormState<TFormValues>,\n action: FormActions<TFormValues>\n) =>\n produce(state, (draft) => {\n switch (action.type) {\n case 'SET_INITIAL_VALUES':\n // @ts-expect-error – TODO: figure out why this fails ts.\n draft.values = action.payload;\n break;\n case 'SET_VALUES':\n // @ts-expect-error – TODO: figure out why this fails ts.\n draft.values = action.payload;\n break;\n case 'SUBMIT_ATTEMPT':\n draft.isSubmitting = true;\n break;\n case 'SUBMIT_FAILURE':\n draft.isSubmitting = false;\n break;\n case 'SUBMIT_SUCCESS':\n draft.isSubmitting = false;\n break;\n case 'SET_FIELD_VALUE':\n draft.values = setIn(state.values, action.payload.field, action.payload.value);\n break;\n case 'ADD_FIELD_ROW': {\n /**\n * TODO: add check for if the field is an array?\n */\n const currentField = getIn(state.values, action.payload.field, []) as Array<any>;\n\n let position = action.payload.addAtIndex;\n\n if (position === undefined) {\n position = currentField.length;\n } else if (position < 0) {\n position = 0;\n }\n\n // Collect all existing keys to ensure uniqueness.\n // Keys may be out of order after drag-and-drop moves, so we can't rely\n // on fractional indexing alone to avoid collisions.\n const existingKeys = new Set(currentField.map((item) => item.__temp_key__).filter(Boolean));\n\n // Generate a unique key, retrying if there's a collision\n let key: string;\n let lowerBound = existingKeys.size > 0 ? Array.from(existingKeys).sort().pop() : null;\n do {\n [key] = generateNKeysBetween(lowerBound, null, 1);\n // If collision, advance the lower bound so the next iteration\n // generates a key strictly after this one.\n if (existingKeys.has(key)) {\n lowerBound = key;\n }\n } while (existingKeys.has(key));\n\n draft.values = setIn(\n state.values,\n action.payload.field,\n currentField.toSpliced(position, 0, {\n ...action.payload.value,\n __temp_key__: key,\n })\n );\n\n break;\n }\n case 'MOVE_FIELD_ROW': {\n const { field, fromIndex, toIndex } = action.payload;\n /**\n * TODO: add check for if the field is an array?\n */\n const currentField = [...(getIn(state.values, field, []) as Array<any>)];\n const currentRow = currentField[fromIndex];\n\n // Preserve the original __temp_key__ to maintain stable identity during drag-and-drop.\n // The array order determines display order, so fractional key ordering isn't needed.\n currentField.splice(fromIndex, 1);\n currentField.splice(toIndex, 0, currentRow);\n\n draft.values = setIn(state.values, field, currentField);\n\n break;\n }\n case 'REMOVE_FIELD_ROW': {\n /**\n * TODO: add check for if the field is an array?\n */\n const currentField = getIn(state.values, action.payload.field, []) as Array<any>;\n\n let position = action.payload.removeAtIndex;\n\n if (position === undefined) {\n position = currentField.length - 1;\n } else if (position < 0) {\n position = 0;\n }\n\n /**\n * filter out empty values from the array, the setIn function only deletes the value\n * when we pass undefined as opposed to \"removing\" it from said array.\n */\n const newValue = setIn(currentField, position.toString(), undefined).filter(\n (val: unknown) => val\n );\n\n draft.values = setIn(\n state.values,\n action.payload.field,\n newValue.length > 0 ? newValue : []\n );\n\n break;\n }\n case 'SET_ERRORS':\n if (!isEqual(state.errors, action.payload)) {\n // @ts-expect-error – TODO: figure out why this fails a TS check.\n draft.errors = action.payload;\n }\n break;\n case 'SET_ISSUBMITTING':\n draft.isSubmitting = action.payload;\n break;\n case 'RESET_FORM':\n // @ts-expect-error – TODO: figure out why this fails ts.\n draft.values = action.payload.values;\n // @ts-expect-error – TODO: figure out why this fails ts.\n draft.errors = action.payload.errors;\n draft.isSubmitting = action.payload.isSubmitting;\n break;\n default:\n break;\n }\n });\n\n/* -------------------------------------------------------------------------------------------------\n * useField\n * -----------------------------------------------------------------------------------------------*/\ninterface FieldValue<TValue = any> {\n error?: string;\n initialValue: TValue;\n onChange: (eventOrPath: React.ChangeEvent<any> | string, value?: TValue) => void;\n value: TValue;\n rawError?: any;\n}\n\nfunction useField<TValue = any>(path: string): FieldValue<TValue | undefined> {\n const { formatMessage } = useIntl();\n\n const initialValue = useForm(\n 'useField',\n (state) => getIn(state.initialValues, path) as FieldValue<TValue>['initialValue']\n );\n\n const value = useForm(\n 'useField',\n (state) => getIn(state.values, path) as FieldValue<TValue>['value']\n );\n\n const handleChange = useForm('useField', (state) => state.onChange);\n\n const rawError = useForm('useField', (state) => getIn(state.errors, path));\n\n const error = useForm('useField', (state) => {\n const error = getIn(state.errors, path);\n\n if (isErrorMessageDescriptor(error)) {\n const { values, ...message } = error;\n return formatMessage(message, values);\n }\n\n return error;\n });\n\n return {\n initialValue,\n /**\n * Errors can be a string, or a MessageDescriptor, so we need to handle both cases.\n * If it's anything else, we don't return it.\n */\n rawError,\n error: isErrorMessageDescriptor(error)\n ? formatMessage(\n {\n id: error.id,\n defaultMessage: error.defaultMessage,\n },\n error.values\n )\n : typeof error === 'string'\n ? error\n : undefined,\n onChange: handleChange,\n value: value,\n };\n}\n\nconst isErrorMessageDescriptor = (object?: object): object is TranslationMessage => {\n return (\n typeof object === 'object' &&\n object !== null &&\n !Array.isArray(object) &&\n 'id' in object &&\n 'defaultMessage' in object\n );\n};\n\n/**\n * Props for the Blocker component.\n * @param onProceed Function to be called when the user confirms the action that triggered the blocker.\n * @param onCancel Function to be called when the user cancels the action that triggered the blocker.\n */\ninterface BlockerProps {\n onProceed?: () => void;\n onCancel?: () => void;\n}\n/* -------------------------------------------------------------------------------------------------\n * Blocker\n * -----------------------------------------------------------------------------------------------*/\nconst Blocker = ({ onProceed = () => {}, onCancel = () => {} }: BlockerProps) => {\n const { formatMessage } = useIntl();\n const modified = useForm('Blocker', (state) => state.modified);\n const isSubmitting = useForm('Blocker', (state) => state.isSubmitting);\n\n // this is trigering a native browser prompt on page unload\n // We aren't able to use our Dialog component in that scenario\n // so we fallback to the native browser one when the user is trying to close/refresh the tab/browser\n // This hook will be triggered on dev mode because of the live reloads but it's fine as it's only for that scenario\n useWarnIfUnsavedChanges(modified && !isSubmitting);\n\n const blocker = useBlocker(({ currentLocation, nextLocation }) => {\n return (\n !isSubmitting &&\n modified &&\n (currentLocation.pathname !== nextLocation.pathname ||\n currentLocation.search !== nextLocation.search)\n );\n });\n\n if (blocker.state === 'blocked') {\n const handleCancel = (isOpen: boolean) => {\n if (!isOpen) {\n onCancel();\n blocker.reset();\n }\n };\n\n return (\n <Dialog.Root open onOpenChange={handleCancel}>\n <Dialog.Content>\n <Dialog.Header>\n {formatMessage({\n id: 'app.components.ConfirmDialog.title',\n defaultMessage: 'Confirmation',\n })}\n </Dialog.Header>\n <Dialog.Body\n icon={<WarningCircle width=\"24px\" height=\"24px\" fill=\"danger600\" />}\n textAlign=\"center\"\n >\n {formatMessage({\n id: 'global.prompt.unsaved',\n defaultMessage: 'You have unsaved changes, are you sure you want to leave?',\n })}\n </Dialog.Body>\n <Dialog.Footer>\n <Dialog.Cancel>\n <Button variant=\"tertiary\" fullWidth>\n {formatMessage({\n id: 'app.components.Button.cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n </Dialog.Cancel>\n <Button\n onClick={() => {\n onProceed();\n blocker.proceed();\n }}\n variant=\"danger\"\n fullWidth\n >\n {formatMessage({\n id: 'app.components.Button.confirm',\n defaultMessage: 'Confirm',\n })}\n </Button>\n </Dialog.Footer>\n </Dialog.Content>\n </Dialog.Root>\n );\n }\n\n return null;\n};\n\nexport { Form, Blocker, useField, useForm, getYupValidationErrors };\nexport type {\n FormErrors,\n FormHelpers,\n FormProps,\n FormValues,\n FormContextValue,\n FormState,\n FieldValue,\n InputProps,\n};\n"],"names":["ERR_MSG","FormProvider","useForm","createContext","disabled","errors","getValues","Error","initialValues","isSubmitting","modified","addFieldRow","moveFieldRow","onChange","removeFieldRow","resetForm","setErrors","setValues","setSubmitting","validate","values","Form","React","forwardRef","method","onSubmit","initialErrors","props","ref","formRef","useRef","state","dispatch","useReducer","reducer","valuesRef","current","useCallback","useEffect","isEqual","type","payload","Object","keys","length","setTimeout","firstError","querySelectorAll","errorId","getAttribute","formElementInError","querySelector","HTMLElement","focus","clearTimeout","shouldSetErrors","options","valuesToValidate","validationSchema","data","abortEarly","err","isErrorYupValidationError","getYupValidationErrors","process","env","NODE_ENV","console","warn","handleSubmit","e","stopPropagation","preventDefault","message","useMemo","handleChange","useCallbackRef","eventOrPath","v","field","value","target","currentTarget","name","id","multiple","val","test","parsed","parseFloat","isNaN","getIn","Array","from","filter","el","selected","map","addAtIndex","removeAtIndex","fromIndex","toIndex","newInitialValues","composedRefs","useComposedRefs","_jsx","Box","tag","noValidate","width","height","children","inner","setIn","path","error","action","produce","draft","currentField","position","undefined","existingKeys","Set","item","__temp_key__","Boolean","key","lowerBound","size","sort","pop","generateNKeysBetween","has","toSpliced","currentRow","splice","newValue","toString","useField","formatMessage","useIntl","initialValue","rawError","isErrorMessageDescriptor","defaultMessage","object","isArray","Blocker","onProceed","onCancel","useWarnIfUnsavedChanges","blocker","useBlocker","currentLocation","nextLocation","pathname","search","handleCancel","isOpen","reset","Dialog","Root","open","onOpenChange","_jsxs","Content","Header","Body","icon","WarningCircle","fill","textAlign","Footer","Cancel","Button","variant","fullWidth","onClick","proceed"],"mappings":"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"}
1
+ {"version":3,"file":"Form.js","sources":["../../../../../admin/src/components/Form.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Box,\n type BoxProps,\n Button,\n Dialog,\n useCallbackRef,\n useComposedRefs,\n} from '@strapi/design-system';\nimport { WarningCircle } from '@strapi/icons';\nimport { generateNKeysBetween } from 'fractional-indexing';\nimport { produce } from 'immer';\nimport isEqual from 'lodash/isEqual';\nimport { useIntl, type MessageDescriptor, type PrimitiveType } from 'react-intl';\nimport { useBlocker } from 'react-router-dom';\n\nimport { useWarnIfUnsavedChanges } from '../hooks/useWarnIfUnsavedChanges';\nimport { getIn, setIn } from '../utils/objects';\n\nimport { createContext } from './Context';\n\nimport type {\n InputProps as InputPropsImpl,\n StringProps,\n EnumerationProps,\n} from './FormInputs/types';\nimport type * as Yup from 'yup';\n\n/* -------------------------------------------------------------------------------------------------\n * FormContext\n * -----------------------------------------------------------------------------------------------*/\ntype InputProps = InputPropsImpl | StringProps | EnumerationProps;\n\ninterface TranslationMessage extends MessageDescriptor {\n values?: Record<string, PrimitiveType>;\n}\n\ninterface FormValues {\n [field: string]: any;\n}\n\ninterface FormContextValue<TFormValues extends FormValues = FormValues>\n extends FormState<TFormValues> {\n disabled: boolean;\n getValues: () => TFormValues;\n initialValues: TFormValues;\n modified: boolean;\n /**\n * The default behaviour is to add the row to the end of the array, if you want to add it to a\n * specific index you can pass the index.\n */\n addFieldRow: (field: string, value: any, addAtIndex?: number) => void;\n moveFieldRow: (field: string, fromIndex: number, toIndex: number) => void;\n onChange: (eventOrPath: React.ChangeEvent<any> | string, value?: any) => void;\n /*\n * The default behaviour is to remove the last row, if you want to remove a specific index you can\n * pass the index.\n */\n removeFieldRow: (field: string, removeAtIndex?: number) => void;\n resetForm: (newInitialValues?: TFormValues) => void;\n setErrors: (errors: FormErrors<TFormValues>) => void;\n setSubmitting: (isSubmitting: boolean) => void;\n setValues: (values: TFormValues) => void;\n validate: (\n shouldSetErrors?: boolean,\n options?: Record<string, string>\n ) => Promise<\n { data: TFormValues; errors?: never } | { data?: never; errors: FormErrors<TFormValues> }\n >;\n}\n\n/**\n * @internal\n * @description We use this just to warn people that they're using the useForm\n * methods outside of a Form component, but we don't want to throw an error\n * because otherwise the DocumentActions list cannot be rendered in our list-view.\n */\nconst ERR_MSG =\n 'The Form Component has not been initialised, ensure you are using this hook within a Form component';\n\nconst [FormProvider, useForm] = createContext<FormContextValue>('Form', {\n disabled: false,\n errors: {},\n getValues: () => {\n throw new Error(ERR_MSG);\n },\n initialValues: {},\n isSubmitting: false,\n modified: false,\n addFieldRow: () => {\n throw new Error(ERR_MSG);\n },\n moveFieldRow: () => {\n throw new Error(ERR_MSG);\n },\n onChange: () => {\n throw new Error(ERR_MSG);\n },\n removeFieldRow: () => {\n throw new Error(ERR_MSG);\n },\n resetForm: () => {\n throw new Error(ERR_MSG);\n },\n setErrors: () => {\n throw new Error(ERR_MSG);\n },\n setValues: () => {\n throw new Error(ERR_MSG);\n },\n setSubmitting: () => {\n throw new Error(ERR_MSG);\n },\n validate: async () => {\n throw new Error(ERR_MSG);\n },\n values: {},\n});\n\n/* -------------------------------------------------------------------------------------------------\n * Form\n * -----------------------------------------------------------------------------------------------*/\n\ninterface FormHelpers<TFormValues extends FormValues = FormValues>\n extends Pick<FormContextValue<TFormValues>, 'setErrors' | 'setValues' | 'resetForm'> {}\n\ninterface FormProps<TFormValues extends FormValues = FormValues>\n extends Partial<Pick<FormContextValue<TFormValues>, 'disabled' | 'initialValues'>>,\n Pick<BoxProps, 'width' | 'height'> {\n children:\n | React.ReactNode\n | ((\n props: Pick<\n FormContextValue<TFormValues>,\n | 'disabled'\n | 'errors'\n | 'isSubmitting'\n | 'modified'\n | 'values'\n | 'resetForm'\n | 'onChange'\n | 'setErrors'\n >\n ) => React.ReactNode);\n method: 'POST' | 'PUT';\n onSubmit?: (values: TFormValues, helpers: FormHelpers<TFormValues>) => Promise<void> | void;\n // TODO: type the return value for a validation schema func from Yup.\n validationSchema?: Yup.AnySchema;\n initialErrors?: FormErrors<TFormValues>;\n // NOTE: we don't know what return type it can be here\n validate?: (values: TFormValues, options: Record<string, string>) => Promise<any>;\n}\n\n/**\n * @alpha\n * @description A form component that handles form state, validation and submission.\n * It can additionally handle nested fields and arrays. To access the data you can either\n * use the generic useForm hook or the useField hook when providing the name of your field.\n */\nconst Form = React.forwardRef<HTMLFormElement, FormProps>(\n ({ disabled = false, method, onSubmit, initialErrors, ...props }, ref) => {\n const formRef = React.useRef<HTMLFormElement>(null!);\n const initialValues = React.useRef(props.initialValues ?? {});\n const [state, dispatch] = React.useReducer(reducer, {\n errors: initialErrors ?? {},\n isSubmitting: false,\n values: props.initialValues ?? {},\n });\n\n // Keep a ref to the latest form values so `getValues()` can always return fresh data.\n // We expose `getValues` as a stable callback so consumers (e.g. conditional/rules logic)\n // can call it without causing extra rerenders from changing function references.\n const valuesRef = React.useRef(state.values);\n /**\n * Keep the ref aligned with `state.values` during render (not only in an effect) so\n * `getValues()` / `validate()` always see the latest committed values. Effects run too late\n * for back-to-back user actions (e.g. fast e2e) where the next handler runs before the\n * effect has fired.\n */\n valuesRef.current = state.values;\n\n const getValues = React.useCallback(() => valuesRef.current, []);\n\n React.useEffect(() => {\n /**\n * ONLY update the initialValues if the prop has changed.\n */\n if (!isEqual(initialValues.current, props.initialValues)) {\n initialValues.current = props.initialValues ?? {};\n\n dispatch({\n type: 'SET_INITIAL_VALUES',\n payload: props.initialValues ?? {},\n });\n }\n }, [props.initialValues]);\n\n const setErrors = React.useCallback((errors: FormErrors) => {\n dispatch({\n type: 'SET_ERRORS',\n payload: errors,\n });\n }, []);\n\n const setValues = React.useCallback((values: FormValues) => {\n dispatch({\n type: 'SET_VALUES',\n payload: values,\n });\n }, []);\n\n React.useEffect(() => {\n if (Object.keys(state.errors).length === 0) return;\n\n /**\n * Small timeout to ensure the form has been\n * rendered before we try to focus on the first\n */\n const ref = setTimeout(() => {\n const [firstError] = formRef.current.querySelectorAll('[data-strapi-field-error]');\n\n if (firstError) {\n const errorId = firstError.getAttribute('id');\n const formElementInError = formRef.current.querySelector(\n `[aria-describedby=\"${errorId}\"]`\n );\n\n if (formElementInError && formElementInError instanceof HTMLElement) {\n formElementInError.focus();\n }\n }\n });\n\n return () => clearTimeout(ref);\n }, [state.errors]);\n\n /**\n * Uses the provided validation schema\n */\n const validate = React.useCallback(\n async (shouldSetErrors: boolean = true, options: Record<string, string> = {}) => {\n setErrors({});\n\n const valuesToValidate = valuesRef.current;\n\n if (!props.validationSchema && !props.validate) {\n return { data: valuesToValidate };\n }\n\n try {\n let data;\n if (props.validationSchema) {\n data = await props.validationSchema.validate(valuesToValidate, { abortEarly: false });\n } else if (props.validate) {\n data = await props.validate(valuesToValidate, options);\n } else {\n throw new Error('No validation schema or validate function provided');\n }\n\n return { data };\n } catch (err) {\n if (isErrorYupValidationError(err)) {\n const errors = getYupValidationErrors(err);\n\n if (shouldSetErrors) {\n setErrors(errors);\n }\n\n return { errors };\n } else {\n // We throw any other errors\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\n `Warning: An unhandled error was caught during validation in <Form validationSchema />`,\n err\n );\n }\n\n throw err;\n }\n }\n },\n [props, setErrors]\n );\n\n const handleSubmit: React.FormEventHandler<HTMLFormElement> = async (e) => {\n e.stopPropagation();\n e.preventDefault();\n\n if (!onSubmit) {\n return;\n }\n\n dispatch({\n type: 'SUBMIT_ATTEMPT',\n });\n\n try {\n const { data, errors } = await validate();\n\n if (errors) {\n setErrors(errors);\n\n throw new Error('Submission failed');\n }\n\n await onSubmit(data, {\n setErrors,\n setValues,\n resetForm,\n });\n\n dispatch({\n type: 'SUBMIT_SUCCESS',\n });\n } catch (err) {\n dispatch({\n type: 'SUBMIT_FAILURE',\n });\n\n if (err instanceof Error && err.message === 'Submission failed') {\n return;\n }\n }\n };\n\n const modified = React.useMemo(\n () => !isEqual(initialValues.current, state.values),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [state.values, initialValues.current]\n );\n\n const handleChange: FormContextValue['onChange'] = useCallbackRef((eventOrPath, v) => {\n if (typeof eventOrPath === 'string') {\n dispatch({\n type: 'SET_FIELD_VALUE',\n payload: {\n field: eventOrPath,\n value: v,\n },\n });\n\n return;\n }\n\n const target = eventOrPath.target || eventOrPath.currentTarget;\n\n const { type, name, id, value, options, multiple } = target;\n\n const field = name || id;\n\n if (!field && process.env.NODE_ENV !== 'production') {\n console.warn(\n `\\`onChange\\` was called with an event, but you forgot to pass a \\`name\\` or \\`id'\\` attribute to your input. The field to update cannot be determined`\n );\n }\n\n /**\n * Because we handle any field from this function, we run through a series\n * of checks to understand how to use the value.\n */\n let val;\n\n if (/number|range/.test(type)) {\n const parsed = parseFloat(value);\n // If the value isn't a number for whatever reason, don't let it through because that will break the API.\n val = isNaN(parsed) ? '' : parsed;\n } else if (/checkbox/.test(type)) {\n // Get & invert the current value of the checkbox.\n val = !getIn(state.values, field);\n } else if (options && multiple) {\n // This will handle native select elements incl. ones with mulitple options.\n val = Array.from<HTMLOptionElement>(options)\n .filter((el) => el.selected)\n .map((el) => el.value);\n } else {\n // NOTE: reset value to null so it failes required checks.\n // The API only considers a required field invalid if the value is null|undefined, to differentiate from min 1\n if (value === '') {\n val = null;\n } else {\n val = value;\n }\n }\n\n if (field) {\n dispatch({\n type: 'SET_FIELD_VALUE',\n payload: {\n field,\n value: val,\n },\n });\n }\n });\n\n const addFieldRow: FormContextValue['addFieldRow'] = React.useCallback(\n (field, value, addAtIndex) => {\n dispatch({\n type: 'ADD_FIELD_ROW',\n payload: {\n field,\n value,\n addAtIndex,\n },\n });\n },\n []\n );\n\n const removeFieldRow: FormContextValue['removeFieldRow'] = React.useCallback(\n (field, removeAtIndex) => {\n dispatch({\n type: 'REMOVE_FIELD_ROW',\n payload: {\n field,\n removeAtIndex,\n },\n });\n },\n []\n );\n\n const moveFieldRow: FormContextValue['moveFieldRow'] = React.useCallback(\n (field, fromIndex, toIndex) => {\n dispatch({\n type: 'MOVE_FIELD_ROW',\n payload: {\n field,\n fromIndex,\n toIndex,\n },\n });\n },\n []\n );\n\n const resetForm: FormContextValue['resetForm'] = React.useCallback((newInitialValues) => {\n if (newInitialValues) {\n initialValues.current = newInitialValues;\n }\n dispatch({\n type: 'RESET_FORM',\n payload: {\n errors: {},\n isSubmitting: false,\n values: initialValues.current,\n },\n });\n }, []);\n\n const setSubmitting = React.useCallback((isSubmitting: boolean) => {\n dispatch({ type: 'SET_ISSUBMITTING', payload: isSubmitting });\n }, []);\n\n const composedRefs = useComposedRefs(formRef, ref);\n\n return (\n <Box\n tag=\"form\"\n ref={composedRefs}\n method={method}\n noValidate\n onSubmit={handleSubmit}\n width={props.width}\n height={props.height}\n >\n <FormProvider\n disabled={disabled}\n getValues={getValues}\n onChange={handleChange}\n initialValues={initialValues.current}\n modified={modified}\n addFieldRow={addFieldRow}\n moveFieldRow={moveFieldRow}\n removeFieldRow={removeFieldRow}\n resetForm={resetForm}\n setErrors={setErrors}\n setValues={setValues}\n setSubmitting={setSubmitting}\n validate={validate}\n {...state}\n >\n {typeof props.children === 'function'\n ? props.children({\n modified,\n disabled,\n onChange: handleChange,\n ...state,\n setErrors,\n resetForm,\n })\n : props.children}\n </FormProvider>\n </Box>\n );\n }\n) as <TFormValues extends FormValues>(\n p: FormProps<TFormValues> & { ref?: React.Ref<HTMLFormElement> }\n) => React.ReactElement; // we've cast this because we need the generic to infer the type of the form values.\n\n/**\n * @internal\n * @description Checks if the error is a Yup validation error.\n */\nconst isErrorYupValidationError = (err: any): err is Yup.ValidationError =>\n typeof err === 'object' &&\n err !== null &&\n 'name' in err &&\n typeof err.name === 'string' &&\n err.name === 'ValidationError';\n\n/* -------------------------------------------------------------------------------------------------\n * getYupValidationErrors\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * @description handy utility to convert a yup validation error into a form\n * error object. To be used elsewhere.\n */\nconst getYupValidationErrors = (err: Yup.ValidationError): FormErrors => {\n let errors: FormErrors = {};\n\n if (err.inner) {\n if (err.inner.length === 0) {\n return setIn(errors, err.path!, err.message);\n }\n for (const error of err.inner) {\n if (!getIn(errors, error.path!)) {\n errors = setIn(errors, error.path!, error.message);\n }\n }\n }\n\n return errors;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * reducer\n * -----------------------------------------------------------------------------------------------*/\n\ntype FormErrors<TFormValues extends FormValues = FormValues> = {\n // is it a repeatable component or dynamic zone?\n [Key in keyof TFormValues]?: TFormValues[Key] extends any[]\n ? TFormValues[Key][number] extends object\n ? FormErrors<TFormValues[Key][number]>[] | string | string[]\n : string // this would let us support errors for the dynamic zone or repeatable component not the components within.\n : TFormValues[Key] extends object // is it a regular component?\n ? FormErrors<TFormValues[Key]> // handles nested components\n : string | TranslationMessage; // otherwise its just a field or a translation message.\n};\n\ninterface FormState<TFormValues extends FormValues = FormValues> {\n /**\n * TODO: make this a better type explaining errors could be nested because it follows the same\n * structure as the values.\n */\n errors: FormErrors<TFormValues>;\n isSubmitting: boolean;\n values: TFormValues;\n}\n\ntype FormActions<TFormValues extends FormValues = FormValues> =\n | { type: 'SUBMIT_ATTEMPT' }\n | { type: 'SUBMIT_FAILURE' }\n | { type: 'SUBMIT_SUCCESS' }\n | { type: 'SET_FIELD_VALUE'; payload: { field: string; value: any } }\n | { type: 'ADD_FIELD_ROW'; payload: { field: string; value: any; addAtIndex?: number } }\n | { type: 'REMOVE_FIELD_ROW'; payload: { field: string; removeAtIndex?: number } }\n | { type: 'MOVE_FIELD_ROW'; payload: { field: string; fromIndex: number; toIndex: number } }\n | { type: 'SET_ERRORS'; payload: FormErrors<TFormValues> }\n | { type: 'SET_ISSUBMITTING'; payload: boolean }\n | { type: 'SET_INITIAL_VALUES'; payload: TFormValues }\n | { type: 'SET_VALUES'; payload: TFormValues }\n | { type: 'RESET_FORM'; payload: FormState<TFormValues> };\n\nconst reducer = <TFormValues extends FormValues = FormValues>(\n state: FormState<TFormValues>,\n action: FormActions<TFormValues>\n) =>\n produce(state, (draft) => {\n switch (action.type) {\n case 'SET_INITIAL_VALUES':\n // @ts-expect-error – TODO: figure out why this fails ts.\n draft.values = action.payload;\n break;\n case 'SET_VALUES':\n // @ts-expect-error – TODO: figure out why this fails ts.\n draft.values = action.payload;\n break;\n case 'SUBMIT_ATTEMPT':\n draft.isSubmitting = true;\n break;\n case 'SUBMIT_FAILURE':\n draft.isSubmitting = false;\n break;\n case 'SUBMIT_SUCCESS':\n draft.isSubmitting = false;\n break;\n case 'SET_FIELD_VALUE':\n draft.values = setIn(state.values, action.payload.field, action.payload.value);\n break;\n case 'ADD_FIELD_ROW': {\n /**\n * TODO: add check for if the field is an array?\n */\n const currentField = getIn(state.values, action.payload.field, []) as Array<any>;\n\n let position = action.payload.addAtIndex;\n\n if (position === undefined) {\n position = currentField.length;\n } else if (position < 0) {\n position = 0;\n }\n\n // Collect all existing keys to ensure uniqueness.\n // Keys may be out of order after drag-and-drop moves, so we can't rely\n // on fractional indexing alone to avoid collisions.\n const existingKeys = new Set(currentField.map((item) => item.__temp_key__).filter(Boolean));\n\n // Generate a unique key, retrying if there's a collision\n let key: string;\n let lowerBound = existingKeys.size > 0 ? Array.from(existingKeys).sort().pop() : null;\n do {\n [key] = generateNKeysBetween(lowerBound, null, 1);\n // If collision, advance the lower bound so the next iteration\n // generates a key strictly after this one.\n if (existingKeys.has(key)) {\n lowerBound = key;\n }\n } while (existingKeys.has(key));\n\n draft.values = setIn(\n state.values,\n action.payload.field,\n currentField.toSpliced(position, 0, {\n ...action.payload.value,\n __temp_key__: key,\n })\n );\n\n break;\n }\n case 'MOVE_FIELD_ROW': {\n const { field, fromIndex, toIndex } = action.payload;\n /**\n * TODO: add check for if the field is an array?\n */\n const currentField = [...(getIn(state.values, field, []) as Array<any>)];\n const currentRow = currentField[fromIndex];\n\n // Preserve the original __temp_key__ to maintain stable identity during drag-and-drop.\n // The array order determines display order, so fractional key ordering isn't needed.\n currentField.splice(fromIndex, 1);\n currentField.splice(toIndex, 0, currentRow);\n\n draft.values = setIn(state.values, field, currentField);\n\n break;\n }\n case 'REMOVE_FIELD_ROW': {\n /**\n * TODO: add check for if the field is an array?\n */\n const currentField = getIn(state.values, action.payload.field, []) as Array<any>;\n\n let position = action.payload.removeAtIndex;\n\n if (position === undefined) {\n position = currentField.length - 1;\n } else if (position < 0) {\n position = 0;\n }\n\n /**\n * filter out empty values from the array, the setIn function only deletes the value\n * when we pass undefined as opposed to \"removing\" it from said array.\n */\n const newValue = setIn(currentField, position.toString(), undefined).filter(\n (val: unknown) => val\n );\n\n draft.values = setIn(\n state.values,\n action.payload.field,\n newValue.length > 0 ? newValue : []\n );\n\n break;\n }\n case 'SET_ERRORS':\n if (!isEqual(state.errors, action.payload)) {\n // @ts-expect-error – TODO: figure out why this fails a TS check.\n draft.errors = action.payload;\n }\n break;\n case 'SET_ISSUBMITTING':\n draft.isSubmitting = action.payload;\n break;\n case 'RESET_FORM':\n // @ts-expect-error – TODO: figure out why this fails ts.\n draft.values = action.payload.values;\n // @ts-expect-error – TODO: figure out why this fails ts.\n draft.errors = action.payload.errors;\n draft.isSubmitting = action.payload.isSubmitting;\n break;\n default:\n break;\n }\n });\n\n/* -------------------------------------------------------------------------------------------------\n * useField\n * -----------------------------------------------------------------------------------------------*/\ninterface FieldValue<TValue = any> {\n error?: string;\n initialValue: TValue;\n onChange: (eventOrPath: React.ChangeEvent<any> | string, value?: TValue) => void;\n value: TValue;\n rawError?: any;\n}\n\nfunction useField<TValue = any>(path: string): FieldValue<TValue | undefined> {\n const { formatMessage } = useIntl();\n\n const initialValue = useForm(\n 'useField',\n (state) => getIn(state.initialValues, path) as FieldValue<TValue>['initialValue']\n );\n\n const value = useForm(\n 'useField',\n (state) => getIn(state.values, path) as FieldValue<TValue>['value']\n );\n\n const handleChange = useForm('useField', (state) => state.onChange);\n\n const rawError = useForm('useField', (state) => getIn(state.errors, path));\n\n const error = useForm('useField', (state) => {\n const error = getIn(state.errors, path);\n\n if (isErrorMessageDescriptor(error)) {\n const { values, ...message } = error;\n return formatMessage(message, values);\n }\n\n return error;\n });\n\n return {\n initialValue,\n /**\n * Errors can be a string, or a MessageDescriptor, so we need to handle both cases.\n * If it's anything else, we don't return it.\n */\n rawError,\n error: isErrorMessageDescriptor(error)\n ? formatMessage(\n {\n id: error.id,\n defaultMessage: error.defaultMessage,\n },\n error.values\n )\n : typeof error === 'string'\n ? error\n : undefined,\n onChange: handleChange,\n value: value,\n };\n}\n\nconst isErrorMessageDescriptor = (object?: object): object is TranslationMessage => {\n return (\n typeof object === 'object' &&\n object !== null &&\n !Array.isArray(object) &&\n 'id' in object &&\n 'defaultMessage' in object\n );\n};\n\n/**\n * Props for the Blocker component.\n * @param onProceed Function to be called when the user confirms the action that triggered the blocker.\n * @param onCancel Function to be called when the user cancels the action that triggered the blocker.\n */\ninterface BlockerProps {\n onProceed?: () => void;\n onCancel?: () => void;\n}\n/* -------------------------------------------------------------------------------------------------\n * Blocker\n * -----------------------------------------------------------------------------------------------*/\nconst Blocker = ({ onProceed = () => {}, onCancel = () => {} }: BlockerProps) => {\n const { formatMessage } = useIntl();\n const modified = useForm('Blocker', (state) => state.modified);\n const isSubmitting = useForm('Blocker', (state) => state.isSubmitting);\n\n // this is trigering a native browser prompt on page unload\n // We aren't able to use our Dialog component in that scenario\n // so we fallback to the native browser one when the user is trying to close/refresh the tab/browser\n // This hook will be triggered on dev mode because of the live reloads but it's fine as it's only for that scenario\n useWarnIfUnsavedChanges(modified && !isSubmitting);\n\n const blocker = useBlocker(({ currentLocation, nextLocation }) => {\n return (\n !isSubmitting &&\n modified &&\n (currentLocation.pathname !== nextLocation.pathname ||\n currentLocation.search !== nextLocation.search)\n );\n });\n\n if (blocker.state === 'blocked') {\n const handleCancel = (isOpen: boolean) => {\n if (!isOpen) {\n onCancel();\n blocker.reset();\n }\n };\n\n return (\n <Dialog.Root open onOpenChange={handleCancel}>\n <Dialog.Content>\n <Dialog.Header>\n {formatMessage({\n id: 'app.components.ConfirmDialog.title',\n defaultMessage: 'Confirmation',\n })}\n </Dialog.Header>\n <Dialog.Body\n icon={<WarningCircle width=\"24px\" height=\"24px\" fill=\"danger600\" />}\n textAlign=\"center\"\n >\n {formatMessage({\n id: 'global.prompt.unsaved',\n defaultMessage: 'You have unsaved changes, are you sure you want to leave?',\n })}\n </Dialog.Body>\n <Dialog.Footer>\n <Dialog.Cancel>\n <Button variant=\"tertiary\" fullWidth>\n {formatMessage({\n id: 'app.components.Button.cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n </Dialog.Cancel>\n <Button\n onClick={() => {\n onProceed();\n blocker.proceed();\n }}\n variant=\"danger\"\n fullWidth\n >\n {formatMessage({\n id: 'app.components.Button.confirm',\n defaultMessage: 'Confirm',\n })}\n </Button>\n </Dialog.Footer>\n </Dialog.Content>\n </Dialog.Root>\n );\n }\n\n return null;\n};\n\nexport { Form, Blocker, useField, useForm, getYupValidationErrors };\nexport type {\n FormErrors,\n FormHelpers,\n FormProps,\n FormValues,\n FormContextValue,\n FormState,\n FieldValue,\n InputProps,\n};\n"],"names":["ERR_MSG","FormProvider","useForm","createContext","disabled","errors","getValues","Error","initialValues","isSubmitting","modified","addFieldRow","moveFieldRow","onChange","removeFieldRow","resetForm","setErrors","setValues","setSubmitting","validate","values","Form","React","forwardRef","method","onSubmit","initialErrors","props","ref","formRef","useRef","state","dispatch","useReducer","reducer","valuesRef","current","useCallback","useEffect","isEqual","type","payload","Object","keys","length","setTimeout","firstError","querySelectorAll","errorId","getAttribute","formElementInError","querySelector","HTMLElement","focus","clearTimeout","shouldSetErrors","options","valuesToValidate","validationSchema","data","abortEarly","err","isErrorYupValidationError","getYupValidationErrors","process","env","NODE_ENV","console","warn","handleSubmit","e","stopPropagation","preventDefault","message","useMemo","handleChange","useCallbackRef","eventOrPath","v","field","value","target","currentTarget","name","id","multiple","val","test","parsed","parseFloat","isNaN","getIn","Array","from","filter","el","selected","map","addAtIndex","removeAtIndex","fromIndex","toIndex","newInitialValues","composedRefs","useComposedRefs","_jsx","Box","tag","noValidate","width","height","children","inner","setIn","path","error","action","produce","draft","currentField","position","undefined","existingKeys","Set","item","__temp_key__","Boolean","key","lowerBound","size","sort","pop","generateNKeysBetween","has","toSpliced","currentRow","splice","newValue","toString","useField","formatMessage","useIntl","initialValue","rawError","isErrorMessageDescriptor","defaultMessage","object","isArray","Blocker","onProceed","onCancel","useWarnIfUnsavedChanges","blocker","useBlocker","currentLocation","nextLocation","pathname","search","handleCancel","isOpen","reset","Dialog","Root","open","onOpenChange","_jsxs","Content","Header","Body","icon","WarningCircle","fill","textAlign","Footer","Cancel","Button","variant","fullWidth","onClick","proceed"],"mappings":"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"}
@@ -7,7 +7,8 @@ var reactIntl = require('react-intl');
7
7
  var useFocusInputField = require('../../hooks/useFocusInputField.js');
8
8
  var Form = require('../Form.js');
9
9
 
10
- function _interopNamespaceDefault(e) {
10
+ function _interopNamespace(e) {
11
+ if (e && e.__esModule) return e;
11
12
  var n = Object.create(null);
12
13
  if (e) {
13
14
  Object.keys(e).forEach(function (k) {
@@ -24,7 +25,7 @@ function _interopNamespaceDefault(e) {
24
25
  return Object.freeze(n);
25
26
  }
26
27
 
27
- var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
28
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
28
29
 
29
30
  const MAX_DATE = new Date(2099, 11, 31);
30
31
  const DateInput = /*#__PURE__*/ React__namespace.forwardRef(({ name, required, label, hint, labelAction, type: _type, ...props }, ref)=>{
@@ -1 +1 @@
1
- {"version":3,"file":"Date.js","sources":["../../../../../../admin/src/components/FormInputs/Date.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { DatePicker, useComposedRefs, Field } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { useFocusInputField } from '../../hooks/useFocusInputField';\nimport { useField } from '../Form';\n\nimport { InputProps } from './types';\n\nconst MAX_DATE = new Date(2099, 11, 31);\n\nconst DateInput = React.forwardRef<HTMLInputElement, InputProps>(\n ({ name, required, label, hint, labelAction, type: _type, ...props }, ref) => {\n const { formatMessage } = useIntl();\n const field = useField(name);\n const fieldRef = useFocusInputField<HTMLInputElement>(name);\n const composedRefs = useComposedRefs(ref, fieldRef);\n const [lastValidDate, setLastValidDate] = React.useState<Date | null>(null);\n\n const value = typeof field.value === 'string' ? new Date(field.value) : field.value;\n\n const handleDateChange = (date: Date | undefined) => {\n if (!date) {\n field.onChange(name, null);\n setLastValidDate(null);\n return;\n }\n\n // Convert to UTC midnight\n const utcDate = toUTCMidnight(date);\n // Save as ISO string in UTC format\n field.onChange(name, utcDate.toISOString().split('T')[0]);\n setLastValidDate(utcDate);\n };\n\n // Render the DatePicker with UTC date\n return (\n <Field.Root error={field.error} name={name} hint={hint} required={required}>\n <Field.Label action={labelAction}>{label}</Field.Label>\n <DatePicker\n ref={composedRefs}\n clearLabel={formatMessage({ id: 'clearLabel', defaultMessage: 'Clear' })}\n onChange={handleDateChange}\n onClear={() => {\n field.onChange(name, null);\n setLastValidDate(null);\n return;\n }}\n onBlur={() => {\n // When the input is blurred, revert to the last valid date if the current value is invalid\n if (field.value && !value) {\n field.onChange(\n name,\n lastValidDate ? lastValidDate.toISOString().split('T')[0] : null\n );\n }\n }}\n value={value}\n maxDate={MAX_DATE}\n {...props}\n />\n <Field.Hint />\n <Field.Error />\n </Field.Root>\n );\n }\n);\n\n// Ensure the conversion to UTC midnight\nconst toUTCMidnight = (date: Date) => {\n return new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));\n};\n\nconst MemoizedDateInput = React.memo(DateInput);\n\nexport { MemoizedDateInput as DateInput };\n"],"names":["MAX_DATE","Date","DateInput","React","forwardRef","name","required","label","hint","labelAction","type","_type","props","ref","formatMessage","useIntl","field","useField","fieldRef","useFocusInputField","composedRefs","useComposedRefs","lastValidDate","setLastValidDate","useState","value","handleDateChange","date","onChange","utcDate","toUTCMidnight","toISOString","split","_jsxs","Field","Root","error","_jsx","Label","action","DatePicker","clearLabel","id","defaultMessage","onClear","onBlur","maxDate","Hint","Error","UTC","getFullYear","getMonth","getDate","MemoizedDateInput","memo"],"mappings":"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"}
1
+ {"version":3,"file":"Date.js","sources":["../../../../../../admin/src/components/FormInputs/Date.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { DatePicker, useComposedRefs, Field } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { useFocusInputField } from '../../hooks/useFocusInputField';\nimport { useField } from '../Form';\n\nimport { InputProps } from './types';\n\nconst MAX_DATE = new Date(2099, 11, 31);\n\nconst DateInput = React.forwardRef<HTMLInputElement, InputProps>(\n ({ name, required, label, hint, labelAction, type: _type, ...props }, ref) => {\n const { formatMessage } = useIntl();\n const field = useField(name);\n const fieldRef = useFocusInputField<HTMLInputElement>(name);\n const composedRefs = useComposedRefs(ref, fieldRef);\n const [lastValidDate, setLastValidDate] = React.useState<Date | null>(null);\n\n const value = typeof field.value === 'string' ? new Date(field.value) : field.value;\n\n const handleDateChange = (date: Date | undefined) => {\n if (!date) {\n field.onChange(name, null);\n setLastValidDate(null);\n return;\n }\n\n // Convert to UTC midnight\n const utcDate = toUTCMidnight(date);\n // Save as ISO string in UTC format\n field.onChange(name, utcDate.toISOString().split('T')[0]);\n setLastValidDate(utcDate);\n };\n\n // Render the DatePicker with UTC date\n return (\n <Field.Root error={field.error} name={name} hint={hint} required={required}>\n <Field.Label action={labelAction}>{label}</Field.Label>\n <DatePicker\n ref={composedRefs}\n clearLabel={formatMessage({ id: 'clearLabel', defaultMessage: 'Clear' })}\n onChange={handleDateChange}\n onClear={() => {\n field.onChange(name, null);\n setLastValidDate(null);\n return;\n }}\n onBlur={() => {\n // When the input is blurred, revert to the last valid date if the current value is invalid\n if (field.value && !value) {\n field.onChange(\n name,\n lastValidDate ? lastValidDate.toISOString().split('T')[0] : null\n );\n }\n }}\n value={value}\n maxDate={MAX_DATE}\n {...props}\n />\n <Field.Hint />\n <Field.Error />\n </Field.Root>\n );\n }\n);\n\n// Ensure the conversion to UTC midnight\nconst toUTCMidnight = (date: Date) => {\n return new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));\n};\n\nconst MemoizedDateInput = React.memo(DateInput);\n\nexport { MemoizedDateInput as DateInput };\n"],"names":["MAX_DATE","Date","DateInput","React","forwardRef","name","required","label","hint","labelAction","type","_type","props","ref","formatMessage","useIntl","field","useField","fieldRef","useFocusInputField","composedRefs","useComposedRefs","lastValidDate","setLastValidDate","useState","value","handleDateChange","date","onChange","utcDate","toUTCMidnight","toISOString","split","_jsxs","Field","Root","error","_jsx","Label","action","DatePicker","clearLabel","id","defaultMessage","onClear","onBlur","maxDate","Hint","Error","UTC","getFullYear","getMonth","getDate","MemoizedDateInput","memo"],"mappings":"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"}
@@ -6,7 +6,8 @@ var designSystem = require('@strapi/design-system');
6
6
  var useFocusInputField = require('../../hooks/useFocusInputField.js');
7
7
  var Form = require('../Form.js');
8
8
 
9
- function _interopNamespaceDefault(e) {
9
+ function _interopNamespace(e) {
10
+ if (e && e.__esModule) return e;
10
11
  var n = Object.create(null);
11
12
  if (e) {
12
13
  Object.keys(e).forEach(function (k) {
@@ -23,7 +24,7 @@ function _interopNamespaceDefault(e) {
23
24
  return Object.freeze(n);
24
25
  }
25
26
 
26
- var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
27
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
27
28
 
28
29
  const JsonInput = /*#__PURE__*/ React__namespace.forwardRef(({ name, required, label, hint, labelAction, ...props }, ref)=>{
29
30
  const field = Form.useField(name);
@@ -1 +1 @@
1
- {"version":3,"file":"Json.js","sources":["../../../../../../admin/src/components/FormInputs/Json.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n JSONInput as JSONInputImpl,\n useComposedRefs,\n Field,\n JSONInputRef,\n} from '@strapi/design-system';\n\nimport { useFocusInputField } from '../../hooks/useFocusInputField';\nimport { useField } from '../Form';\n\nimport { InputProps } from './types';\n\nconst JsonInput = React.forwardRef<JSONInputRef, InputProps>(\n ({ name, required, label, hint, labelAction, ...props }, ref) => {\n const field = useField(name);\n const fieldRef = useFocusInputField(name);\n\n const composedRefs = useComposedRefs(ref, fieldRef);\n\n return (\n <Field.Root error={field.error} name={name} hint={hint} required={required}>\n <Field.Label action={labelAction}>{label}</Field.Label>\n <JSONInputImpl\n ref={composedRefs}\n value={\n typeof field.value === 'object' ||\n typeof field.value === 'boolean' ||\n typeof field.value === 'number'\n ? JSON.stringify(field.value, null, 2)\n : field.value\n }\n onChange={(json) => {\n // Default to null when the field is not required and there is no input value\n const value = required && !json.length ? null : json;\n field.onChange(name, value);\n }}\n minHeight={`25.2rem`}\n maxHeight={`50.4rem`}\n {...props}\n />\n <Field.Hint />\n <Field.Error />\n </Field.Root>\n );\n }\n);\n\nconst MemoizedJsonInput = React.memo(JsonInput);\n\nexport { MemoizedJsonInput as JsonInput };\n"],"names":["JsonInput","React","forwardRef","name","required","label","hint","labelAction","props","ref","field","useField","fieldRef","useFocusInputField","composedRefs","useComposedRefs","_jsxs","Field","Root","error","_jsx","Label","action","JSONInputImpl","value","JSON","stringify","onChange","json","length","minHeight","maxHeight","Hint","Error","MemoizedJsonInput","memo"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAcA,MAAMA,0BAAYC,gBAAAA,CAAMC,UAAU,CAChC,CAAC,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,KAAK,EAAEC,IAAI,EAAEC,WAAW,EAAE,GAAGC,OAAO,EAAEC,GAAAA,GAAAA;AACvD,IAAA,MAAMC,QAAQC,aAAAA,CAASR,IAAAA,CAAAA;AACvB,IAAA,MAAMS,WAAWC,qCAAAA,CAAmBV,IAAAA,CAAAA;IAEpC,MAAMW,YAAAA,GAAeC,6BAAgBN,GAAAA,EAAKG,QAAAA,CAAAA;IAE1C,qBACEI,eAAA,CAACC,mBAAMC,IAAI,EAAA;AAACC,QAAAA,KAAAA,EAAOT,MAAMS,KAAK;QAAEhB,IAAAA,EAAMA,IAAAA;QAAMG,IAAAA,EAAMA,IAAAA;QAAMF,QAAAA,EAAUA,QAAAA;;AAChE,0BAAAgB,cAAA,CAACH,mBAAMI,KAAK,EAAA;gBAACC,MAAAA,EAAQf,WAAAA;AAAcF,gBAAAA,QAAAA,EAAAA;;0BACnCe,cAAA,CAACG,sBAAAA,EAAAA;gBACCd,GAAAA,EAAKK,YAAAA;gBACLU,KAAAA,EACE,OAAOd,KAAAA,CAAMc,KAAK,KAAK,QAAA,IACvB,OAAOd,KAAAA,CAAMc,KAAK,KAAK,SAAA,IACvB,OAAOd,KAAAA,CAAMc,KAAK,KAAK,QAAA,GACnBC,IAAAA,CAAKC,SAAS,CAAChB,KAAAA,CAAMc,KAAK,EAAE,IAAA,EAAM,CAAA,CAAA,GAClCd,KAAAA,CAAMc,KAAK;AAEjBG,gBAAAA,QAAAA,EAAU,CAACC,IAAAA,GAAAA;;AAET,oBAAA,MAAMJ,QAAQpB,QAAAA,IAAY,CAACwB,IAAAA,CAAKC,MAAM,GAAG,IAAA,GAAOD,IAAAA;oBAChDlB,KAAAA,CAAMiB,QAAQ,CAACxB,IAAAA,EAAMqB,KAAAA,CAAAA;AACvB,gBAAA,CAAA;gBACAM,SAAAA,EAAW,CAAC,OAAO,CAAC;gBACpBC,SAAAA,EAAW,CAAC,OAAO,CAAC;AACnB,gBAAA,GAAGvB;;AAEN,0BAAAY,cAAA,CAACH,mBAAMe,IAAI,EAAA,EAAA,CAAA;AACX,0BAAAZ,cAAA,CAACH,mBAAMgB,KAAK,EAAA,EAAA;;;AAGlB,CAAA,CAAA;AAGF,MAAMC,iBAAAA,iBAAoBjC,gBAAAA,CAAMkC,IAAI,CAACnC,SAAAA;;;;"}
1
+ {"version":3,"file":"Json.js","sources":["../../../../../../admin/src/components/FormInputs/Json.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n JSONInput as JSONInputImpl,\n useComposedRefs,\n Field,\n JSONInputRef,\n} from '@strapi/design-system';\n\nimport { useFocusInputField } from '../../hooks/useFocusInputField';\nimport { useField } from '../Form';\n\nimport { InputProps } from './types';\n\nconst JsonInput = React.forwardRef<JSONInputRef, InputProps>(\n ({ name, required, label, hint, labelAction, ...props }, ref) => {\n const field = useField(name);\n const fieldRef = useFocusInputField(name);\n\n const composedRefs = useComposedRefs(ref, fieldRef);\n\n return (\n <Field.Root error={field.error} name={name} hint={hint} required={required}>\n <Field.Label action={labelAction}>{label}</Field.Label>\n <JSONInputImpl\n ref={composedRefs}\n value={\n typeof field.value === 'object' ||\n typeof field.value === 'boolean' ||\n typeof field.value === 'number'\n ? JSON.stringify(field.value, null, 2)\n : field.value\n }\n onChange={(json) => {\n // Default to null when the field is not required and there is no input value\n const value = required && !json.length ? null : json;\n field.onChange(name, value);\n }}\n minHeight={`25.2rem`}\n maxHeight={`50.4rem`}\n {...props}\n />\n <Field.Hint />\n <Field.Error />\n </Field.Root>\n );\n }\n);\n\nconst MemoizedJsonInput = React.memo(JsonInput);\n\nexport { MemoizedJsonInput as JsonInput };\n"],"names":["JsonInput","React","forwardRef","name","required","label","hint","labelAction","props","ref","field","useField","fieldRef","useFocusInputField","composedRefs","useComposedRefs","_jsxs","Field","Root","error","_jsx","Label","action","JSONInputImpl","value","JSON","stringify","onChange","json","length","minHeight","maxHeight","Hint","Error","MemoizedJsonInput","memo"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAcA,MAAMA,0BAAYC,gBAAAA,CAAMC,UAAU,CAChC,CAAC,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,KAAK,EAAEC,IAAI,EAAEC,WAAW,EAAE,GAAGC,OAAO,EAAEC,GAAAA,GAAAA;AACvD,IAAA,MAAMC,QAAQC,aAAAA,CAASR,IAAAA,CAAAA;AACvB,IAAA,MAAMS,WAAWC,qCAAAA,CAAmBV,IAAAA,CAAAA;IAEpC,MAAMW,YAAAA,GAAeC,6BAAgBN,GAAAA,EAAKG,QAAAA,CAAAA;IAE1C,qBACEI,eAAA,CAACC,mBAAMC,IAAI,EAAA;AAACC,QAAAA,KAAAA,EAAOT,MAAMS,KAAK;QAAEhB,IAAAA,EAAMA,IAAAA;QAAMG,IAAAA,EAAMA,IAAAA;QAAMF,QAAAA,EAAUA,QAAAA;;AAChE,0BAAAgB,cAAA,CAACH,mBAAMI,KAAK,EAAA;gBAACC,MAAAA,EAAQf,WAAAA;AAAcF,gBAAAA,QAAAA,EAAAA;;0BACnCe,cAAA,CAACG,sBAAAA,EAAAA;gBACCd,GAAAA,EAAKK,YAAAA;gBACLU,KAAAA,EACE,OAAOd,KAAAA,CAAMc,KAAK,KAAK,QAAA,IACvB,OAAOd,KAAAA,CAAMc,KAAK,KAAK,SAAA,IACvB,OAAOd,KAAAA,CAAMc,KAAK,KAAK,QAAA,GACnBC,IAAAA,CAAKC,SAAS,CAAChB,KAAAA,CAAMc,KAAK,EAAE,IAAA,EAAM,CAAA,CAAA,GAClCd,KAAAA,CAAMc,KAAK;AAEjBG,gBAAAA,QAAAA,EAAU,CAACC,IAAAA,GAAAA;;AAET,oBAAA,MAAMJ,QAAQpB,QAAAA,IAAY,CAACwB,IAAAA,CAAKC,MAAM,GAAG,IAAA,GAAOD,IAAAA;oBAChDlB,KAAAA,CAAMiB,QAAQ,CAACxB,IAAAA,EAAMqB,KAAAA,CAAAA;AACvB,gBAAA,CAAA;gBACAM,SAAAA,EAAW,CAAC,OAAO,CAAC;gBACpBC,SAAAA,EAAW,CAAC,OAAO,CAAC;AACnB,gBAAA,GAAGvB;;AAEN,0BAAAY,cAAA,CAACH,mBAAMe,IAAI,EAAA,EAAA,CAAA;AACX,0BAAAZ,cAAA,CAACH,mBAAMgB,KAAK,EAAA,EAAA;;;AAGlB,CAAA,CAAA;AAGF,MAAMC,iBAAAA,iBAAoBjC,gBAAAA,CAAMkC,IAAI,CAACnC,SAAAA;;;;"}
@@ -7,7 +7,8 @@ var reactDnd = require('react-dnd');
7
7
  var styled = require('styled-components');
8
8
  var widgetLayout = require('../utils/widgetLayout.js');
9
9
 
10
- function _interopNamespaceDefault(e) {
10
+ function _interopNamespace(e) {
11
+ if (e && e.__esModule) return e;
11
12
  var n = Object.create(null);
12
13
  if (e) {
13
14
  Object.keys(e).forEach(function (k) {
@@ -24,7 +25,7 @@ function _interopNamespaceDefault(e) {
24
25
  return Object.freeze(n);
25
26
  }
26
27
 
27
- var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
28
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
28
29
 
29
30
  const DROP_ZONE_SIZE = 20;
30
31
  const getRowInfo = (row)=>{
@@ -1 +1 @@
1
- {"version":3,"file":"GapDropZone.js","sources":["../../../../../admin/src/components/GapDropZone.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box } from '@strapi/design-system';\n// TODO: use @dnd-kit/core instead\nimport { useDrop } from 'react-dnd';\nimport { styled } from 'styled-components';\n\nimport {\n calculateWidgetRows,\n type WidgetRow,\n getWidgetElement,\n getWidgetGridContainer,\n} from '../utils/widgetLayout';\n\nimport type { WidgetWithUID } from '../core/apis/Widgets';\n\nexport const DROP_ZONE_SIZE = 20;\n\nexport interface GapDropZonePosition {\n insertIndex: number;\n position: { left: number; top: number; height: number; width: number };\n isVisible: boolean;\n type: 'vertical' | 'horizontal';\n isHorizontalDrop?: boolean;\n targetRowIndex?: number;\n}\n\ninterface GapDropZoneManagerProps {\n filteredWidgets: WidgetWithUID[];\n columnWidths: Record<string, number>;\n draggedWidgetId?: string;\n moveWidget: (id: string, to: number, targetRowIndex?: number, isHorizontalDrop?: boolean) => void;\n}\n\nconst getRowInfo = (row: WidgetRow) => {\n const firstWidgetElement = getWidgetElement(row.widgets[0].uid);\n const lastWidgetElement = getWidgetElement(row.widgets[row.widgets.length - 1].uid);\n const containerElement = getWidgetGridContainer();\n\n if (!firstWidgetElement || !lastWidgetElement || !containerElement) {\n return null;\n }\n\n const firstRect = firstWidgetElement.getBoundingClientRect();\n const lastRect = lastWidgetElement.getBoundingClientRect();\n const containerRect = containerElement.getBoundingClientRect();\n\n return {\n firstWidgetElement,\n lastWidgetElement,\n containerElement,\n firstRect,\n lastRect,\n containerRect,\n rowHeight: Math.max(firstRect.height, lastRect.height),\n rowTop: firstRect.top - containerRect.top,\n };\n};\n\nexport const addVerticalDropZones = (\n row: WidgetRow,\n rowInfo: ReturnType<typeof getRowInfo>,\n rowIndex: number\n): GapDropZonePosition[] => {\n if (!rowInfo) return [];\n\n const { containerRect, rowTop, rowHeight } = rowInfo;\n const widgetCount = row.widgets.length;\n\n // Get widget positions relative to container\n const widgetPositions = row.widgets\n .map((widget) => {\n const element = getWidgetElement(widget.uid);\n if (!element) return null;\n\n const rect = element.getBoundingClientRect();\n return {\n left: rect.left - containerRect.left,\n width: rect.width,\n };\n })\n .filter((pos): pos is NonNullable<typeof pos> => pos !== null);\n\n if (widgetPositions.length !== widgetCount) return [];\n\n const gapDropZones: GapDropZonePosition[] = [];\n\n // Always add drop zone before the first widget\n gapDropZones.push({\n insertIndex: row.startIndex,\n position: {\n left: widgetPositions[0].left - DROP_ZONE_SIZE,\n top: rowTop,\n height: rowHeight,\n width: DROP_ZONE_SIZE,\n },\n isVisible: true,\n type: 'vertical',\n targetRowIndex: rowIndex,\n });\n\n // Add drop zones between widgets\n widgetPositions.slice(0, -1).forEach((currentWidget, i) => {\n gapDropZones.push({\n insertIndex: row.startIndex + i + 1,\n position: {\n left: currentWidget.left + currentWidget.width,\n top: rowTop,\n height: rowHeight,\n width: DROP_ZONE_SIZE,\n },\n isVisible: true,\n type: 'vertical',\n targetRowIndex: rowIndex,\n });\n });\n\n // Always add drop zone after the last widget\n const lastWidget = widgetPositions[widgetCount - 1];\n gapDropZones.push({\n insertIndex: row.endIndex + 1,\n position: {\n left: lastWidget.left + lastWidget.width,\n top: rowTop,\n height: rowHeight,\n width: DROP_ZONE_SIZE,\n },\n isVisible: true,\n type: 'vertical',\n targetRowIndex: rowIndex,\n });\n\n return gapDropZones;\n};\n\nexport const addHorizontalDropZones = (\n row: WidgetRow,\n rowIndex: number,\n rowInfo: ReturnType<typeof getRowInfo>,\n widgetRows: WidgetRow[],\n filteredWidgets: WidgetWithUID[]\n): GapDropZonePosition[] => {\n if (!rowInfo) return [];\n\n // Don't show horizontal drop zones if there's only one row with one widget\n if (widgetRows.length === 1 && row.widgets.length === 1) return [];\n\n const { containerRect } = rowInfo;\n const containerWidth = containerRect.width;\n const horizontalDropZoneHeight = DROP_ZONE_SIZE;\n\n const gapDropZones: GapDropZonePosition[] = [];\n\n // Add horizontal drop zone above the first row\n if (rowIndex === 0) {\n const firstRowRect = rowInfo.firstRect;\n const firstRowTop = firstRowRect.top - containerRect.top;\n\n gapDropZones.push({\n insertIndex: 0,\n position: {\n left: 0,\n top: firstRowTop - horizontalDropZoneHeight,\n height: horizontalDropZoneHeight,\n width: containerWidth,\n },\n isVisible: true,\n type: 'horizontal',\n isHorizontalDrop: true,\n });\n }\n\n // Add horizontal drop zone below the current row (between rows or after last row)\n if (rowIndex < widgetRows.length - 1) {\n // Between rows: position above the next row\n const nextRow = widgetRows[rowIndex + 1];\n const nextRowFirstWidgetElement = getWidgetElement(nextRow.widgets[0].uid);\n\n if (nextRowFirstWidgetElement) {\n const nextRowRect = nextRowFirstWidgetElement.getBoundingClientRect();\n const nextRowTop = nextRowRect.top - containerRect.top;\n\n gapDropZones.push({\n insertIndex: row.endIndex + 1,\n position: {\n left: 0,\n top: nextRowTop - horizontalDropZoneHeight,\n height: horizontalDropZoneHeight,\n width: containerWidth,\n },\n isVisible: true,\n type: 'horizontal',\n isHorizontalDrop: true,\n });\n }\n } else {\n // After the last row: position below the current row\n const lastRowRect = rowInfo.lastRect;\n const lastRowBottom = lastRowRect.bottom - containerRect.top;\n\n gapDropZones.push({\n insertIndex: filteredWidgets.length,\n position: {\n left: 0,\n top: lastRowBottom,\n height: horizontalDropZoneHeight,\n width: containerWidth,\n },\n isVisible: true,\n type: 'horizontal',\n isHorizontalDrop: true,\n });\n }\n\n return gapDropZones;\n};\n\nexport const GapDropZoneManager = ({\n filteredWidgets,\n columnWidths,\n draggedWidgetId,\n moveWidget,\n}: GapDropZoneManagerProps) => {\n const [positions, setPositions] = React.useState<GapDropZonePosition[]>([]);\n\n // Calculate widget rows\n const widgetRows = React.useMemo(() => {\n return calculateWidgetRows(filteredWidgets, columnWidths);\n }, [filteredWidgets, columnWidths]);\n\n // Main function to calculate GapDropZone positions\n const calculateGapDropZonePositions = React.useCallback(() => {\n const gapDropZones: GapDropZonePosition[] = [];\n\n // Find which row the dragged widget is from\n const draggedWidgetRow = draggedWidgetId\n ? widgetRows.find((row) => row.widgets.some((widget) => widget.uid === draggedWidgetId))\n : null;\n\n widgetRows.forEach((row, rowIndex) => {\n const rowInfo = getRowInfo(row);\n if (!rowInfo) return;\n\n const widgetCount = row.widgets.length;\n\n // Determine if we should show vertical drop zones for this row\n const isDraggingFromThisRow = draggedWidgetRow && draggedWidgetRow === row;\n const isDraggingFromAnotherRow = draggedWidgetRow && draggedWidgetRow !== row;\n const canAcceptMoreWidgets = widgetCount < 3;\n\n const shouldShowVerticalDropZones =\n isDraggingFromThisRow || (isDraggingFromAnotherRow && canAcceptMoreWidgets);\n\n // Add vertical drop zones based on widget count\n if (shouldShowVerticalDropZones) {\n const verticalDropZones = addVerticalDropZones(row, rowInfo, rowIndex);\n gapDropZones.push(...verticalDropZones);\n }\n\n // Add horizontal drop zones\n const horizontalDropZones = addHorizontalDropZones(\n row,\n rowIndex,\n rowInfo,\n widgetRows,\n filteredWidgets\n );\n gapDropZones.push(...horizontalDropZones);\n });\n\n return gapDropZones;\n }, [widgetRows, draggedWidgetId, filteredWidgets]);\n\n React.useLayoutEffect(() => {\n const updatePositions = () => {\n const newPositions = calculateGapDropZonePositions();\n setPositions(newPositions);\n };\n\n updatePositions();\n\n // Update positions on container resize using ResizeObserver\n const containerElement = getWidgetGridContainer();\n if (!containerElement) return;\n\n const resizeObserver = new ResizeObserver(() => {\n updatePositions();\n });\n\n resizeObserver.observe(containerElement);\n\n return () => {\n resizeObserver.disconnect();\n };\n }, [calculateGapDropZonePositions]);\n\n return positions.map((gapDropZone) => (\n <GapDropZone\n key={`gap-drop-zone-${gapDropZone.type}-${gapDropZone.insertIndex}-${gapDropZone.targetRowIndex ?? 'no-row'}`}\n insertIndex={gapDropZone.insertIndex}\n position={gapDropZone.position}\n isVisible={gapDropZone.isVisible}\n type={gapDropZone.type}\n moveWidget={moveWidget}\n targetRowIndex={gapDropZone.targetRowIndex}\n />\n ));\n};\n\ninterface GapDropZoneProps {\n insertIndex: number;\n position: { left: number; top: number; height: number; width: number };\n isVisible: boolean;\n type: 'vertical' | 'horizontal';\n moveWidget: (id: string, to: number, targetRowIndex?: number, isHorizontalDrop?: boolean) => void;\n targetRowIndex?: number;\n}\n\nconst GapDropZoneContainer = styled(Box)<{\n $isOver: boolean;\n}>`\n background-color: ${({ $isOver, theme }) =>\n $isOver ? `${theme.colors.primary100}` : 'transparent'};\n border: ${({ $isOver, theme }) =>\n $isOver ? `2px solid ${theme.colors.primary500}` : '2px solid transparent'};\n opacity: ${({ $isOver }) => ($isOver ? 1 : 0.6)};\n transition: all 0.2s ease-in-out;\n cursor: pointer;\n border-radius: ${({ theme }) => theme.borderRadius};\n display: flex;\n align-items: center;\n justify-content: center;\n position: absolute;\n top: 0;\n bottom: 0;\n width: ${DROP_ZONE_SIZE}px;\n z-index: 1;\n`;\n\nconst GapDropZone = ({\n insertIndex,\n position,\n isVisible,\n type,\n moveWidget,\n targetRowIndex,\n}: GapDropZoneProps) => {\n const isHorizontalDrop = type === 'horizontal';\n\n const [{ isOver }, drop] = useDrop(\n () => ({\n accept: 'widget',\n drop: (item: { id: string }) => {\n moveWidget(item.id, insertIndex, targetRowIndex, isHorizontalDrop);\n },\n collect: (monitor) => ({\n isOver: monitor.isOver(),\n }),\n }),\n [insertIndex, isHorizontalDrop, moveWidget, targetRowIndex]\n );\n\n if (!isVisible) {\n return null;\n }\n\n return (\n <GapDropZoneContainer\n ref={drop}\n $isOver={isOver}\n style={{\n transform: `translate(${position.left}px, ${position.top}px)`,\n height: `${position.height}px`,\n width: `${position.width}px`,\n }}\n />\n );\n};\n"],"names":["DROP_ZONE_SIZE","getRowInfo","row","firstWidgetElement","getWidgetElement","widgets","uid","lastWidgetElement","length","containerElement","getWidgetGridContainer","firstRect","getBoundingClientRect","lastRect","containerRect","rowHeight","Math","max","height","rowTop","top","addVerticalDropZones","rowInfo","rowIndex","widgetCount","widgetPositions","map","widget","element","rect","left","width","filter","pos","gapDropZones","push","insertIndex","startIndex","position","isVisible","type","targetRowIndex","slice","forEach","currentWidget","i","lastWidget","endIndex","addHorizontalDropZones","widgetRows","filteredWidgets","containerWidth","horizontalDropZoneHeight","firstRowRect","firstRowTop","isHorizontalDrop","nextRow","nextRowFirstWidgetElement","nextRowRect","nextRowTop","lastRowRect","lastRowBottom","bottom","GapDropZoneManager","columnWidths","draggedWidgetId","moveWidget","positions","setPositions","React","useState","useMemo","calculateWidgetRows","calculateGapDropZonePositions","useCallback","draggedWidgetRow","find","some","isDraggingFromThisRow","isDraggingFromAnotherRow","canAcceptMoreWidgets","shouldShowVerticalDropZones","verticalDropZones","horizontalDropZones","useLayoutEffect","updatePositions","newPositions","resizeObserver","ResizeObserver","observe","disconnect","gapDropZone","_jsx","GapDropZone","GapDropZoneContainer","styled","Box","$isOver","theme","colors","primary100","primary500","borderRadius","isOver","drop","useDrop","accept","item","id","collect","monitor","ref","style","transform"],"mappings":"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"}
1
+ {"version":3,"file":"GapDropZone.js","sources":["../../../../../admin/src/components/GapDropZone.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box } from '@strapi/design-system';\n// TODO: use @dnd-kit/core instead\nimport { useDrop } from 'react-dnd';\nimport { styled } from 'styled-components';\n\nimport {\n calculateWidgetRows,\n type WidgetRow,\n getWidgetElement,\n getWidgetGridContainer,\n} from '../utils/widgetLayout';\n\nimport type { WidgetWithUID } from '../core/apis/Widgets';\n\nexport const DROP_ZONE_SIZE = 20;\n\nexport interface GapDropZonePosition {\n insertIndex: number;\n position: { left: number; top: number; height: number; width: number };\n isVisible: boolean;\n type: 'vertical' | 'horizontal';\n isHorizontalDrop?: boolean;\n targetRowIndex?: number;\n}\n\ninterface GapDropZoneManagerProps {\n filteredWidgets: WidgetWithUID[];\n columnWidths: Record<string, number>;\n draggedWidgetId?: string;\n moveWidget: (id: string, to: number, targetRowIndex?: number, isHorizontalDrop?: boolean) => void;\n}\n\nconst getRowInfo = (row: WidgetRow) => {\n const firstWidgetElement = getWidgetElement(row.widgets[0].uid);\n const lastWidgetElement = getWidgetElement(row.widgets[row.widgets.length - 1].uid);\n const containerElement = getWidgetGridContainer();\n\n if (!firstWidgetElement || !lastWidgetElement || !containerElement) {\n return null;\n }\n\n const firstRect = firstWidgetElement.getBoundingClientRect();\n const lastRect = lastWidgetElement.getBoundingClientRect();\n const containerRect = containerElement.getBoundingClientRect();\n\n return {\n firstWidgetElement,\n lastWidgetElement,\n containerElement,\n firstRect,\n lastRect,\n containerRect,\n rowHeight: Math.max(firstRect.height, lastRect.height),\n rowTop: firstRect.top - containerRect.top,\n };\n};\n\nexport const addVerticalDropZones = (\n row: WidgetRow,\n rowInfo: ReturnType<typeof getRowInfo>,\n rowIndex: number\n): GapDropZonePosition[] => {\n if (!rowInfo) return [];\n\n const { containerRect, rowTop, rowHeight } = rowInfo;\n const widgetCount = row.widgets.length;\n\n // Get widget positions relative to container\n const widgetPositions = row.widgets\n .map((widget) => {\n const element = getWidgetElement(widget.uid);\n if (!element) return null;\n\n const rect = element.getBoundingClientRect();\n return {\n left: rect.left - containerRect.left,\n width: rect.width,\n };\n })\n .filter((pos): pos is NonNullable<typeof pos> => pos !== null);\n\n if (widgetPositions.length !== widgetCount) return [];\n\n const gapDropZones: GapDropZonePosition[] = [];\n\n // Always add drop zone before the first widget\n gapDropZones.push({\n insertIndex: row.startIndex,\n position: {\n left: widgetPositions[0].left - DROP_ZONE_SIZE,\n top: rowTop,\n height: rowHeight,\n width: DROP_ZONE_SIZE,\n },\n isVisible: true,\n type: 'vertical',\n targetRowIndex: rowIndex,\n });\n\n // Add drop zones between widgets\n widgetPositions.slice(0, -1).forEach((currentWidget, i) => {\n gapDropZones.push({\n insertIndex: row.startIndex + i + 1,\n position: {\n left: currentWidget.left + currentWidget.width,\n top: rowTop,\n height: rowHeight,\n width: DROP_ZONE_SIZE,\n },\n isVisible: true,\n type: 'vertical',\n targetRowIndex: rowIndex,\n });\n });\n\n // Always add drop zone after the last widget\n const lastWidget = widgetPositions[widgetCount - 1];\n gapDropZones.push({\n insertIndex: row.endIndex + 1,\n position: {\n left: lastWidget.left + lastWidget.width,\n top: rowTop,\n height: rowHeight,\n width: DROP_ZONE_SIZE,\n },\n isVisible: true,\n type: 'vertical',\n targetRowIndex: rowIndex,\n });\n\n return gapDropZones;\n};\n\nexport const addHorizontalDropZones = (\n row: WidgetRow,\n rowIndex: number,\n rowInfo: ReturnType<typeof getRowInfo>,\n widgetRows: WidgetRow[],\n filteredWidgets: WidgetWithUID[]\n): GapDropZonePosition[] => {\n if (!rowInfo) return [];\n\n // Don't show horizontal drop zones if there's only one row with one widget\n if (widgetRows.length === 1 && row.widgets.length === 1) return [];\n\n const { containerRect } = rowInfo;\n const containerWidth = containerRect.width;\n const horizontalDropZoneHeight = DROP_ZONE_SIZE;\n\n const gapDropZones: GapDropZonePosition[] = [];\n\n // Add horizontal drop zone above the first row\n if (rowIndex === 0) {\n const firstRowRect = rowInfo.firstRect;\n const firstRowTop = firstRowRect.top - containerRect.top;\n\n gapDropZones.push({\n insertIndex: 0,\n position: {\n left: 0,\n top: firstRowTop - horizontalDropZoneHeight,\n height: horizontalDropZoneHeight,\n width: containerWidth,\n },\n isVisible: true,\n type: 'horizontal',\n isHorizontalDrop: true,\n });\n }\n\n // Add horizontal drop zone below the current row (between rows or after last row)\n if (rowIndex < widgetRows.length - 1) {\n // Between rows: position above the next row\n const nextRow = widgetRows[rowIndex + 1];\n const nextRowFirstWidgetElement = getWidgetElement(nextRow.widgets[0].uid);\n\n if (nextRowFirstWidgetElement) {\n const nextRowRect = nextRowFirstWidgetElement.getBoundingClientRect();\n const nextRowTop = nextRowRect.top - containerRect.top;\n\n gapDropZones.push({\n insertIndex: row.endIndex + 1,\n position: {\n left: 0,\n top: nextRowTop - horizontalDropZoneHeight,\n height: horizontalDropZoneHeight,\n width: containerWidth,\n },\n isVisible: true,\n type: 'horizontal',\n isHorizontalDrop: true,\n });\n }\n } else {\n // After the last row: position below the current row\n const lastRowRect = rowInfo.lastRect;\n const lastRowBottom = lastRowRect.bottom - containerRect.top;\n\n gapDropZones.push({\n insertIndex: filteredWidgets.length,\n position: {\n left: 0,\n top: lastRowBottom,\n height: horizontalDropZoneHeight,\n width: containerWidth,\n },\n isVisible: true,\n type: 'horizontal',\n isHorizontalDrop: true,\n });\n }\n\n return gapDropZones;\n};\n\nexport const GapDropZoneManager = ({\n filteredWidgets,\n columnWidths,\n draggedWidgetId,\n moveWidget,\n}: GapDropZoneManagerProps) => {\n const [positions, setPositions] = React.useState<GapDropZonePosition[]>([]);\n\n // Calculate widget rows\n const widgetRows = React.useMemo(() => {\n return calculateWidgetRows(filteredWidgets, columnWidths);\n }, [filteredWidgets, columnWidths]);\n\n // Main function to calculate GapDropZone positions\n const calculateGapDropZonePositions = React.useCallback(() => {\n const gapDropZones: GapDropZonePosition[] = [];\n\n // Find which row the dragged widget is from\n const draggedWidgetRow = draggedWidgetId\n ? widgetRows.find((row) => row.widgets.some((widget) => widget.uid === draggedWidgetId))\n : null;\n\n widgetRows.forEach((row, rowIndex) => {\n const rowInfo = getRowInfo(row);\n if (!rowInfo) return;\n\n const widgetCount = row.widgets.length;\n\n // Determine if we should show vertical drop zones for this row\n const isDraggingFromThisRow = draggedWidgetRow && draggedWidgetRow === row;\n const isDraggingFromAnotherRow = draggedWidgetRow && draggedWidgetRow !== row;\n const canAcceptMoreWidgets = widgetCount < 3;\n\n const shouldShowVerticalDropZones =\n isDraggingFromThisRow || (isDraggingFromAnotherRow && canAcceptMoreWidgets);\n\n // Add vertical drop zones based on widget count\n if (shouldShowVerticalDropZones) {\n const verticalDropZones = addVerticalDropZones(row, rowInfo, rowIndex);\n gapDropZones.push(...verticalDropZones);\n }\n\n // Add horizontal drop zones\n const horizontalDropZones = addHorizontalDropZones(\n row,\n rowIndex,\n rowInfo,\n widgetRows,\n filteredWidgets\n );\n gapDropZones.push(...horizontalDropZones);\n });\n\n return gapDropZones;\n }, [widgetRows, draggedWidgetId, filteredWidgets]);\n\n React.useLayoutEffect(() => {\n const updatePositions = () => {\n const newPositions = calculateGapDropZonePositions();\n setPositions(newPositions);\n };\n\n updatePositions();\n\n // Update positions on container resize using ResizeObserver\n const containerElement = getWidgetGridContainer();\n if (!containerElement) return;\n\n const resizeObserver = new ResizeObserver(() => {\n updatePositions();\n });\n\n resizeObserver.observe(containerElement);\n\n return () => {\n resizeObserver.disconnect();\n };\n }, [calculateGapDropZonePositions]);\n\n return positions.map((gapDropZone) => (\n <GapDropZone\n key={`gap-drop-zone-${gapDropZone.type}-${gapDropZone.insertIndex}-${gapDropZone.targetRowIndex ?? 'no-row'}`}\n insertIndex={gapDropZone.insertIndex}\n position={gapDropZone.position}\n isVisible={gapDropZone.isVisible}\n type={gapDropZone.type}\n moveWidget={moveWidget}\n targetRowIndex={gapDropZone.targetRowIndex}\n />\n ));\n};\n\ninterface GapDropZoneProps {\n insertIndex: number;\n position: { left: number; top: number; height: number; width: number };\n isVisible: boolean;\n type: 'vertical' | 'horizontal';\n moveWidget: (id: string, to: number, targetRowIndex?: number, isHorizontalDrop?: boolean) => void;\n targetRowIndex?: number;\n}\n\nconst GapDropZoneContainer = styled(Box)<{\n $isOver: boolean;\n}>`\n background-color: ${({ $isOver, theme }) =>\n $isOver ? `${theme.colors.primary100}` : 'transparent'};\n border: ${({ $isOver, theme }) =>\n $isOver ? `2px solid ${theme.colors.primary500}` : '2px solid transparent'};\n opacity: ${({ $isOver }) => ($isOver ? 1 : 0.6)};\n transition: all 0.2s ease-in-out;\n cursor: pointer;\n border-radius: ${({ theme }) => theme.borderRadius};\n display: flex;\n align-items: center;\n justify-content: center;\n position: absolute;\n top: 0;\n bottom: 0;\n width: ${DROP_ZONE_SIZE}px;\n z-index: 1;\n`;\n\nconst GapDropZone = ({\n insertIndex,\n position,\n isVisible,\n type,\n moveWidget,\n targetRowIndex,\n}: GapDropZoneProps) => {\n const isHorizontalDrop = type === 'horizontal';\n\n const [{ isOver }, drop] = useDrop(\n () => ({\n accept: 'widget',\n drop: (item: { id: string }) => {\n moveWidget(item.id, insertIndex, targetRowIndex, isHorizontalDrop);\n },\n collect: (monitor) => ({\n isOver: monitor.isOver(),\n }),\n }),\n [insertIndex, isHorizontalDrop, moveWidget, targetRowIndex]\n );\n\n if (!isVisible) {\n return null;\n }\n\n return (\n <GapDropZoneContainer\n ref={drop}\n $isOver={isOver}\n style={{\n transform: `translate(${position.left}px, ${position.top}px)`,\n height: `${position.height}px`,\n width: `${position.width}px`,\n }}\n />\n );\n};\n"],"names":["DROP_ZONE_SIZE","getRowInfo","row","firstWidgetElement","getWidgetElement","widgets","uid","lastWidgetElement","length","containerElement","getWidgetGridContainer","firstRect","getBoundingClientRect","lastRect","containerRect","rowHeight","Math","max","height","rowTop","top","addVerticalDropZones","rowInfo","rowIndex","widgetCount","widgetPositions","map","widget","element","rect","left","width","filter","pos","gapDropZones","push","insertIndex","startIndex","position","isVisible","type","targetRowIndex","slice","forEach","currentWidget","i","lastWidget","endIndex","addHorizontalDropZones","widgetRows","filteredWidgets","containerWidth","horizontalDropZoneHeight","firstRowRect","firstRowTop","isHorizontalDrop","nextRow","nextRowFirstWidgetElement","nextRowRect","nextRowTop","lastRowRect","lastRowBottom","bottom","GapDropZoneManager","columnWidths","draggedWidgetId","moveWidget","positions","setPositions","React","useState","useMemo","calculateWidgetRows","calculateGapDropZonePositions","useCallback","draggedWidgetRow","find","some","isDraggingFromThisRow","isDraggingFromAnotherRow","canAcceptMoreWidgets","shouldShowVerticalDropZones","verticalDropZones","horizontalDropZones","useLayoutEffect","updatePositions","newPositions","resizeObserver","ResizeObserver","observe","disconnect","gapDropZone","_jsx","GapDropZone","GapDropZoneContainer","styled","Box","$isOver","theme","colors","primary100","primary500","borderRadius","isOver","drop","useDrop","accept","item","id","collect","monitor","ref","style","transform"],"mappings":"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"}
@@ -10,7 +10,8 @@ var Context = require('../Context.js');
10
10
  var Tours = require('./Tours.js');
11
11
  var migrations = require('./utils/migrations.js');
12
12
 
13
- function _interopNamespaceDefault(e) {
13
+ function _interopNamespace(e) {
14
+ if (e && e.__esModule) return e;
14
15
  var n = Object.create(null);
15
16
  if (e) {
16
17
  Object.keys(e).forEach(function (k) {
@@ -27,7 +28,7 @@ function _interopNamespaceDefault(e) {
27
28
  return Object.freeze(n);
28
29
  }
29
30
 
30
- var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
31
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
31
32
 
32
33
  const [GuidedTourProviderImpl, useGuidedTour] = Context.createContext('GuidedTour');
33
34
  const getInitialTourState = (tours)=>{
@@ -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 { 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 into usePersistentState in the layout phase so localStorage is updated before the\n // browser follows an external link (e.g. Strapi Cloud \"Read documentation\").\n React.useLayoutEffect(() => {\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","useLayoutEffect","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 into usePersistentState in the layout phase so localStorage is updated before the\n // browser follows an external link (e.g. Strapi Cloud \"Read documentation\").\n React.useLayoutEffect(() => {\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","useLayoutEffect","currentAllCompletedState","previousAllCompletedStateRef","useRef","previousAllCompletedState","current","name","_jsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoFA,MAAM,CAACA,sBAAAA,EAAwBC,aAAAA,CAAc,GAAGC,qBAAAA,CAG7C,YAAA;AAEH,MAAMC,sBAAsB,CAACC,KAAAA,GAAAA;AAC3B,IAAA,OAAOC,OAAOC,IAAI,CAACF,OAAOG,MAAM,CAAC,CAACC,GAAAA,EAAKC,QAAAA,GAAAA;QACrCD,GAAG,CAACC,SAA0B,GAAG;YAC/BC,WAAAA,EAAa,CAAA;YACbC,WAAAA,EAAa,KAAA;YACbC,QAAAA,EAAUC;AACZ,SAAA;QAEA,OAAOL,GAAAA;AACT,IAAA,CAAA,EAAG,EAAC,CAAA;AACN,CAAA;AAEA,MAAMM,oBAAoB,CAACV,KAAAA,GAAAA;AACzB,IAAA,OAAOC,MAAAA,CAAOC,IAAI,CAACF,KAAAA,CAAAA,CAAOW,MAAM,CAC9B,CAACN,QAAAA,GAAaL,KAAK,CAACK,QAAAA,CAA0B,CAACE,WAAW,CAAA;AAE9D;AAEA,MAAMK,oBAAAA,GAAuB,CAACZ,KAAAA,GAAqBC,MAAAA,CAAOY,MAAM,CAACb,KAAAA,CAAAA,CAAOc,KAAK,CAAC,CAACC,CAAAA,GAAMA,CAAAA,CAAER,WAAW,CAAA;AAElG,SAASS,OAAAA,CAAQC,KAAY,EAAEC,MAAc,EAAA;IAC3C,OAAOC,aAAAA,CAAQF,OAAO,CAACG,KAAAA,GAAAA;QACrB,IAAIF,MAAAA,CAAOG,IAAI,KAAK,WAAA,EAAa;YAC/B,MAAMf,WAAAA,GAAcc,MAAMpB,KAAK,CAACkB,OAAOI,OAAO,CAAC,CAAChB,WAAW;YAC3D,MAAMiB,UAAAA,GAAaC,WAAW,CAACN,MAAAA,CAAOI,OAAO,CAAC,CAACG,KAAK,CAACC,cAAc;AAEnE,YAAA,MAAMC,WAAWrB,WAAAA,GAAc,CAAA;AAC/Bc,YAAAA,KAAAA,CAAMpB,KAAK,CAACkB,MAAAA,CAAOI,OAAO,CAAC,CAAChB,WAAW,GAAGqB,QAAAA;YAC1CP,KAAAA,CAAMpB,KAAK,CAACkB,MAAAA,CAAOI,OAAO,CAAC,CAACf,WAAW,GAAGoB,QAAAA,IAAYJ,UAAAA;AACxD,QAAA;QAEA,IAAIL,MAAAA,CAAOG,IAAI,KAAK,eAAA,EAAiB;YACnC,MAAMf,WAAAA,GAAcc,MAAMpB,KAAK,CAACkB,OAAOI,OAAO,CAAC,CAAChB,WAAW;AAE3D,YAAA,IAAIA,eAAe,CAAA,EAAG;AAEtB,YAAA,MAAMsB,eAAetB,WAAAA,GAAc,CAAA;AACnCc,YAAAA,KAAAA,CAAMpB,KAAK,CAACkB,MAAAA,CAAOI,OAAO,CAAC,CAAChB,WAAW,GAAGsB,YAAAA;AAC5C,QAAA;QAEA,IAAIV,MAAAA,CAAOG,IAAI,KAAK,WAAA,EAAa;AAC/BD,YAAAA,KAAAA,CAAMpB,KAAK,CAACkB,MAAAA,CAAOI,OAAO,CAAC,CAACf,WAAW,GAAG,IAAA;AAC5C,QAAA;QAEA,IAAIW,MAAAA,CAAOG,IAAI,KAAK,uBAAA,EAAyB;AAC3CD,YAAAA,KAAAA,CAAMS,gBAAgB,GAAG;AAAI,gBAAA,GAAA,IAAIC,GAAAA,CAAI;AAAIV,oBAAAA,GAAAA,KAAAA,CAAMS,gBAAgB;AAAKX,oBAAAA,GAAAA,MAAAA,CAAOI;AAAQ,iBAAA;AAAE,aAAA;AACvF,QAAA;QAEA,IAAIJ,MAAAA,CAAOG,IAAI,KAAK,yBAAA,EAA2B;YAC7CD,KAAAA,CAAMS,gBAAgB,GAAGT,KAAAA,CAAMS,gBAAgB,CAAClB,MAAM,CACpD,CAACoB,eAAAA,GAAoBA,eAAAA,KAAoBb,MAAAA,CAAOI,OAAO,CAAA;AAE3D,QAAA;QAEA,IAAIJ,MAAAA,CAAOG,IAAI,KAAK,gBAAA,EAAkB;AACpCD,YAAAA,KAAAA,CAAMY,OAAO,GAAG,KAAA;AAClB,QAAA;QAEA,IAAId,MAAAA,CAAOG,IAAI,KAAK,YAAA,EAAc;YAChCD,KAAAA,CAAMa,MAAM,GAAGf,MAAAA,CAAOI,OAAO;AAC/B,QAAA;QAEA,IAAIJ,MAAAA,CAAOG,IAAI,KAAK,iBAAA,EAAmB;AACrCD,YAAAA,KAAAA,CAAMY,OAAO,GAAG,IAAA;YAChBZ,KAAAA,CAAMpB,KAAK,GAAGD,mBAAAA,CAAoByB,WAAAA,CAAAA;YAClCJ,KAAAA,CAAMS,gBAAgB,GAAG,EAAE;AAC7B,QAAA;QAEA,IAAIX,MAAAA,CAAOG,IAAI,KAAK,YAAA,EAAc;AAChCD,YAAAA,KAAAA,CAAMpB,KAAK,CAACkB,MAAAA,CAAOI,OAAO,CAACjB,QAAQ,CAAC,CAACC,WAAW,GAAGY,MAAAA,CAAOI,OAAO,CAACY,IAAI;AACxE,QAAA;QAEA,IAAIhB,MAAAA,CAAOG,IAAI,KAAK,eAAA,EAAiB;AACnC,YAAA,MAAM,EAAEhB,QAAQ,EAAEG,QAAQ,EAAE,GAAGU,OAAOI,OAAO;AAC7C,YAAA,MAAMa,WAAAA,GAAcf,KAAAA,CAAMpB,KAAK,CAACK,QAAAA,CAAS;;YAGzC,IAAI8B,WAAAA,CAAY3B,QAAQ,IAAI2B,WAAAA,CAAY3B,QAAQ,KAAKA,QAAAA,IAAY,CAAC2B,WAAAA,CAAY5B,WAAW,EAAE;AACzF4B,gBAAAA,WAAAA,CAAY7B,WAAW,GAAG,CAAA;AAC5B,YAAA;AAEA6B,YAAAA,WAAAA,CAAY3B,QAAQ,GAAGA,QAAAA;AACzB,QAAA;AACF,IAAA,CAAA,CAAA;AACF;AAEA,MAAM4B,WAAAA,GAAc,oBAAA;AACpB,MAAMC,oBAAoB,CAAC,EACzBC,QAAQ,EACRN,OAAAA,GAAU,IAAI,EAIf,GAAA;AACC,IAAA,MAAMO,SAAAA,GAAYC,0BAAAA,EAAAA;IAClB,MAAM,EAAEC,UAAU,EAAE,GAAGC,oBAAAA,EAAAA;AACvB,IAAA,MAAM,CAACC,WAAAA,EAAaC,cAAAA,CAAe,GAAGC,sCAA0BT,WAAAA,EAAa;AAC3EpC,QAAAA,KAAAA,EAAOD,mBAAAA,CAAoByB,WAAAA,CAAAA;AAC3BQ,QAAAA,OAAAA;AACAC,QAAAA,MAAAA,EAAQ,CAACM,SAAAA;AACTV,QAAAA,gBAAAA,EAAkB;AACpB,KAAA,CAAA;AACA,IAAA,MAAMiB,oBAAoBC,uBAAAA,CAAaJ,WAAAA,CAAAA;AACvC,IAAA,MAAM,CAAC1B,KAAAA,EAAO+B,QAAAA,CAAS,GAAGC,gBAAAA,CAAMC,UAAU,CAAClC,OAAAA,EAAS8B,iBAAAA,CAAAA;;AAGpDG,IAAAA,gBAAAA,CAAME,SAAS,CAAC,IAAA;QACdH,QAAAA,CAAS;YAAE3B,IAAAA,EAAM,YAAA;AAAcC,YAAAA,OAAAA,EAAS,CAACiB;AAAU,SAAA,CAAA;IACrD,CAAA,EAAG;AAACA,QAAAA;AAAU,KAAA,CAAA;;;AAIdU,IAAAA,gBAAAA,CAAMG,eAAe,CAAC,IAAA;QACpBR,cAAAA,CAAe3B,KAAAA,CAAAA;IACjB,CAAA,EAAG;AAACA,QAAAA,KAAAA;AAAO2B,QAAAA;AAAe,KAAA,CAAA;;IAG1B,MAAMS,wBAAAA,GAA2BzC,oBAAAA,CAAqBK,KAAAA,CAAMjB,KAAK,CAAA;;;IAGjE,MAAMsD,4BAAAA,GAA+BL,gBAAAA,CAAMM,MAAM,CAACF,wBAAAA,CAAAA;AAClDJ,IAAAA,gBAAAA,CAAME,SAAS,CAAC,IAAA;QACd,MAAMK,yBAAAA,GAA4BF,6BAA6BG,OAAO;;QAEtE,IAAI,CAACD,6BAA6BH,wBAAAA,EAA0B;AAC1DZ,YAAAA,UAAAA,CAAW,uBAAA,EAAyB;gBAAEiB,IAAAA,EAAM;AAAM,aAAA,CAAA;AACpD,QAAA;;AAGAJ,QAAAA,4BAAAA,CAA6BG,OAAO,GAAGJ,wBAAAA;IACzC,CAAA,EAAG;AAACA,QAAAA,wBAAAA;AAA0BZ,QAAAA;AAAW,KAAA,CAAA;AAEzC,IAAA,qBACEkB,cAAA,CAAC/D,sBAAAA,EAAAA;QAAuBqB,KAAAA,EAAOA,KAAAA;QAAO+B,QAAAA,EAAUA,QAAAA;AAC7CV,QAAAA,QAAAA,EAAAA;;AAGP;;;;;;;"}
@@ -10,7 +10,8 @@ var Tracking = require('../../../features/Tracking.js');
10
10
  var Context = require('../Context.js');
11
11
  var Tours = require('../Tours.js');
12
12
 
13
- function _interopNamespaceDefault(e) {
13
+ function _interopNamespace(e) {
14
+ if (e && e.__esModule) return e;
14
15
  var n = Object.create(null);
15
16
  if (e) {
16
17
  Object.keys(e).forEach(function (k) {
@@ -27,7 +28,7 @@ function _interopNamespaceDefault(e) {
27
28
  return Object.freeze(n);
28
29
  }
29
30
 
30
- var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
31
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
31
32
 
32
33
  /* -------------------------------------------------------------------------------------------------
33
34
  * Common Step Components