@strapi/admin 5.19.0 → 5.21.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 (244) hide show
  1. package/dist/admin/admin/src/StrapiApp.js +20 -4
  2. package/dist/admin/admin/src/StrapiApp.js.map +1 -1
  3. package/dist/admin/admin/src/StrapiApp.mjs +21 -5
  4. package/dist/admin/admin/src/StrapiApp.mjs.map +1 -1
  5. package/dist/admin/admin/src/components/Filters.js +10 -1
  6. package/dist/admin/admin/src/components/Filters.js.map +1 -1
  7. package/dist/admin/admin/src/components/Filters.mjs +10 -1
  8. package/dist/admin/admin/src/components/Filters.mjs.map +1 -1
  9. package/dist/admin/admin/src/components/{UnstableGuidedTour → GuidedTour}/Context.js +18 -43
  10. package/dist/admin/admin/src/components/GuidedTour/Context.js.map +1 -0
  11. package/dist/admin/admin/src/components/{UnstableGuidedTour → GuidedTour}/Context.mjs +17 -42
  12. package/dist/admin/admin/src/components/GuidedTour/Context.mjs.map +1 -0
  13. package/dist/admin/admin/src/components/{UnstableGuidedTour → GuidedTour}/Overview.js +10 -6
  14. package/dist/admin/admin/src/components/GuidedTour/Overview.js.map +1 -0
  15. package/dist/admin/admin/src/components/{UnstableGuidedTour → GuidedTour}/Overview.mjs +11 -7
  16. package/dist/admin/admin/src/components/GuidedTour/Overview.mjs.map +1 -0
  17. package/dist/admin/admin/src/components/{UnstableGuidedTour → GuidedTour}/Step.js +6 -6
  18. package/dist/admin/admin/src/components/GuidedTour/Step.js.map +1 -0
  19. package/dist/admin/admin/src/components/{UnstableGuidedTour → GuidedTour}/Step.mjs +7 -7
  20. package/dist/admin/admin/src/components/GuidedTour/Step.mjs.map +1 -0
  21. package/dist/admin/admin/src/components/{UnstableGuidedTour → GuidedTour}/Tours.js +10 -16
  22. package/dist/admin/admin/src/components/GuidedTour/Tours.js.map +1 -0
  23. package/dist/admin/admin/src/components/{UnstableGuidedTour → GuidedTour}/Tours.mjs +11 -17
  24. package/dist/admin/admin/src/components/GuidedTour/Tours.mjs.map +1 -0
  25. package/dist/admin/admin/src/components/LeftMenu.js +1 -1
  26. package/dist/admin/admin/src/components/LeftMenu.js.map +1 -1
  27. package/dist/admin/admin/src/components/LeftMenu.mjs +1 -1
  28. package/dist/admin/admin/src/components/LeftMenu.mjs.map +1 -1
  29. package/dist/admin/admin/src/components/Providers.js +9 -10
  30. package/dist/admin/admin/src/components/Providers.js.map +1 -1
  31. package/dist/admin/admin/src/components/Providers.mjs +9 -10
  32. package/dist/admin/admin/src/components/Providers.mjs.map +1 -1
  33. package/dist/admin/admin/src/components/SubNav.js +1 -1
  34. package/dist/admin/admin/src/components/SubNav.js.map +1 -1
  35. package/dist/admin/admin/src/components/SubNav.mjs +1 -1
  36. package/dist/admin/admin/src/components/SubNav.mjs.map +1 -1
  37. package/dist/admin/admin/src/components/Widgets.js +185 -0
  38. package/dist/admin/admin/src/components/Widgets.js.map +1 -1
  39. package/dist/admin/admin/src/components/Widgets.mjs +186 -2
  40. package/dist/admin/admin/src/components/Widgets.mjs.map +1 -1
  41. package/dist/admin/admin/src/core/apis/Widgets.js +34 -16
  42. package/dist/admin/admin/src/core/apis/Widgets.js.map +1 -1
  43. package/dist/admin/admin/src/core/apis/Widgets.mjs +34 -16
  44. package/dist/admin/admin/src/core/apis/Widgets.mjs.map +1 -1
  45. package/dist/admin/admin/src/features/Tracking.js.map +1 -1
  46. package/dist/admin/admin/src/features/Tracking.mjs.map +1 -1
  47. package/dist/admin/admin/src/layouts/AuthenticatedLayout.js +1 -18
  48. package/dist/admin/admin/src/layouts/AuthenticatedLayout.js.map +1 -1
  49. package/dist/admin/admin/src/layouts/AuthenticatedLayout.mjs +1 -18
  50. package/dist/admin/admin/src/layouts/AuthenticatedLayout.mjs.map +1 -1
  51. package/dist/admin/admin/src/pages/Auth/components/Register.js +0 -11
  52. package/dist/admin/admin/src/pages/Auth/components/Register.js.map +1 -1
  53. package/dist/admin/admin/src/pages/Auth/components/Register.mjs +0 -11
  54. package/dist/admin/admin/src/pages/Auth/components/Register.mjs.map +1 -1
  55. package/dist/admin/admin/src/pages/Home/HomePage.js +7 -4
  56. package/dist/admin/admin/src/pages/Home/HomePage.js.map +1 -1
  57. package/dist/admin/admin/src/pages/Home/HomePage.mjs +7 -4
  58. package/dist/admin/admin/src/pages/Home/HomePage.mjs.map +1 -1
  59. package/dist/admin/admin/src/pages/ProfilePage.js +2 -2
  60. package/dist/admin/admin/src/pages/ProfilePage.js.map +1 -1
  61. package/dist/admin/admin/src/pages/ProfilePage.mjs +2 -2
  62. package/dist/admin/admin/src/pages/ProfilePage.mjs.map +1 -1
  63. package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.js +6 -6
  64. package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.js.map +1 -1
  65. package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.mjs +6 -6
  66. package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.mjs.map +1 -1
  67. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.js +1 -7
  68. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.js.map +1 -1
  69. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.mjs +2 -8
  70. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.mjs.map +1 -1
  71. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.js +1 -8
  72. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.js.map +1 -1
  73. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.mjs +1 -8
  74. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.mjs.map +1 -1
  75. package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.js +0 -2
  76. package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.js.map +1 -1
  77. package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.mjs +0 -2
  78. package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.mjs.map +1 -1
  79. package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.js +3 -1
  80. package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.js.map +1 -1
  81. package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.mjs +3 -1
  82. package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.mjs.map +1 -1
  83. package/dist/admin/admin/src/services/admin.js +1 -2
  84. package/dist/admin/admin/src/services/admin.js.map +1 -1
  85. package/dist/admin/admin/src/services/admin.mjs +1 -2
  86. package/dist/admin/admin/src/services/admin.mjs.map +1 -1
  87. package/dist/admin/admin/src/services/api.js +4 -1
  88. package/dist/admin/admin/src/services/api.js.map +1 -1
  89. package/dist/admin/admin/src/services/api.mjs +4 -1
  90. package/dist/admin/admin/src/services/api.mjs.map +1 -1
  91. package/dist/admin/admin/src/services/apiTokens.js +5 -4
  92. package/dist/admin/admin/src/services/apiTokens.js.map +1 -1
  93. package/dist/admin/admin/src/services/apiTokens.mjs +5 -4
  94. package/dist/admin/admin/src/services/apiTokens.mjs.map +1 -1
  95. package/dist/admin/admin/src/services/homepage.js +31 -0
  96. package/dist/admin/admin/src/services/homepage.js.map +1 -0
  97. package/dist/admin/admin/src/services/homepage.mjs +28 -0
  98. package/dist/admin/admin/src/services/homepage.mjs.map +1 -0
  99. package/dist/admin/admin/src/services/users.js +4 -2
  100. package/dist/admin/admin/src/services/users.js.map +1 -1
  101. package/dist/admin/admin/src/services/users.mjs +4 -2
  102. package/dist/admin/admin/src/services/users.mjs.map +1 -1
  103. package/dist/admin/admin/src/services/webhooks.js +9 -5
  104. package/dist/admin/admin/src/services/webhooks.js.map +1 -1
  105. package/dist/admin/admin/src/services/webhooks.mjs +9 -5
  106. package/dist/admin/admin/src/services/webhooks.mjs.map +1 -1
  107. package/dist/admin/admin/src/translations/en.json.js +16 -3
  108. package/dist/admin/admin/src/translations/en.json.js.map +1 -1
  109. package/dist/admin/admin/src/translations/en.json.mjs +16 -3
  110. package/dist/admin/admin/src/translations/en.json.mjs.map +1 -1
  111. package/dist/admin/admin/src/translations/es.json.js +9 -0
  112. package/dist/admin/admin/src/translations/es.json.js.map +1 -1
  113. package/dist/admin/admin/src/translations/es.json.mjs +9 -0
  114. package/dist/admin/admin/src/translations/es.json.mjs.map +1 -1
  115. package/dist/admin/admin/src/translations/fr.json.js +9 -0
  116. package/dist/admin/admin/src/translations/fr.json.js.map +1 -1
  117. package/dist/admin/admin/src/translations/fr.json.mjs +9 -0
  118. package/dist/admin/admin/src/translations/fr.json.mjs.map +1 -1
  119. package/dist/admin/admin/tests/utils.js +25 -28
  120. package/dist/admin/admin/tests/utils.js.map +1 -1
  121. package/dist/admin/admin/tests/utils.mjs +25 -28
  122. package/dist/admin/admin/tests/utils.mjs.map +1 -1
  123. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.js +3 -1
  124. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.js.map +1 -1
  125. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.mjs +3 -1
  126. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.mjs.map +1 -1
  127. package/dist/admin/index.js +4 -4
  128. package/dist/admin/index.mjs +2 -2
  129. package/dist/admin/src/components/Filters.d.ts +3 -1
  130. package/dist/admin/src/components/{UnstableGuidedTour → GuidedTour}/Context.d.ts +3 -3
  131. package/dist/admin/src/components/GuidedTour/Overview.d.ts +1 -0
  132. package/dist/admin/src/components/{UnstableGuidedTour → GuidedTour}/Step.d.ts +1 -1
  133. package/dist/admin/src/components/Widgets.d.ts +2 -1
  134. package/dist/admin/src/core/apis/Widgets.d.ts +9 -5
  135. package/dist/admin/src/core/store/configure.d.ts +2 -2
  136. package/dist/admin/src/core/store/hooks.d.ts +2 -2
  137. package/dist/admin/src/features/Tracking.d.ts +2 -2
  138. package/dist/admin/src/hooks/useAdminRoles.d.ts +1 -1
  139. package/dist/admin/src/index.d.ts +3 -3
  140. package/dist/admin/src/pages/Settings/components/Tokens/TokenBox.d.ts +1 -1
  141. package/dist/admin/src/pages/Settings/pages/Webhooks/hooks/useWebhooks.d.ts +4 -4
  142. package/dist/admin/src/selectors.d.ts +2 -2
  143. package/dist/admin/src/services/admin.d.ts +6 -6
  144. package/dist/admin/src/services/api.d.ts +1 -1
  145. package/dist/admin/src/services/apiTokens.d.ts +1 -1
  146. package/dist/admin/src/services/auth.d.ts +10 -10
  147. package/dist/admin/src/services/contentApi.d.ts +1 -1
  148. package/dist/admin/src/services/contentManager.d.ts +1 -1
  149. package/dist/admin/src/services/homepage.d.ts +14 -0
  150. package/dist/admin/src/services/transferTokens.d.ts +1 -1
  151. package/dist/admin/src/services/users.d.ts +8 -8
  152. package/dist/admin/src/services/webhooks.d.ts +2 -2
  153. package/dist/admin/tests/utils.d.ts +1 -1
  154. package/dist/ee/admin/src/services/auditLogs.d.ts +1 -1
  155. package/dist/ee/server/src/audit-logs/services/lifecycles.d.ts.map +1 -1
  156. package/dist/server/ee/server/src/audit-logs/services/lifecycles.js +10 -9
  157. package/dist/server/ee/server/src/audit-logs/services/lifecycles.js.map +1 -1
  158. package/dist/server/ee/server/src/audit-logs/services/lifecycles.mjs +10 -9
  159. package/dist/server/ee/server/src/audit-logs/services/lifecycles.mjs.map +1 -1
  160. package/dist/server/server/src/controllers/homepage.js +15 -0
  161. package/dist/server/server/src/controllers/homepage.js.map +1 -0
  162. package/dist/server/server/src/controllers/homepage.mjs +13 -0
  163. package/dist/server/server/src/controllers/homepage.mjs.map +1 -0
  164. package/dist/server/server/src/controllers/index.js +3 -1
  165. package/dist/server/server/src/controllers/index.js.map +1 -1
  166. package/dist/server/server/src/controllers/index.mjs +3 -1
  167. package/dist/server/server/src/controllers/index.mjs.map +1 -1
  168. package/dist/server/server/src/domain/user.js +3 -1
  169. package/dist/server/server/src/domain/user.js.map +1 -1
  170. package/dist/server/server/src/domain/user.mjs +3 -1
  171. package/dist/server/server/src/domain/user.mjs.map +1 -1
  172. package/dist/server/server/src/routes/homepage.js +17 -0
  173. package/dist/server/server/src/routes/homepage.js.map +1 -0
  174. package/dist/server/server/src/routes/homepage.mjs +15 -0
  175. package/dist/server/server/src/routes/homepage.mjs.map +1 -0
  176. package/dist/server/server/src/routes/index.js +3 -1
  177. package/dist/server/server/src/routes/index.js.map +1 -1
  178. package/dist/server/server/src/routes/index.mjs +3 -1
  179. package/dist/server/server/src/routes/index.mjs.map +1 -1
  180. package/dist/server/server/src/services/homepage.js +34 -0
  181. package/dist/server/server/src/services/homepage.js.map +1 -0
  182. package/dist/server/server/src/services/homepage.mjs +32 -0
  183. package/dist/server/server/src/services/homepage.mjs.map +1 -0
  184. package/dist/server/server/src/services/index.js +3 -1
  185. package/dist/server/server/src/services/index.js.map +1 -1
  186. package/dist/server/server/src/services/index.mjs +3 -1
  187. package/dist/server/server/src/services/index.mjs.map +1 -1
  188. package/dist/server/src/controllers/homepage.d.ts +15 -0
  189. package/dist/server/src/controllers/homepage.d.ts.map +1 -0
  190. package/dist/server/src/controllers/index.d.ts +13 -0
  191. package/dist/server/src/controllers/index.d.ts.map +1 -1
  192. package/dist/server/src/domain/user.d.ts.map +1 -1
  193. package/dist/server/src/index.d.ts +26 -0
  194. package/dist/server/src/index.d.ts.map +1 -1
  195. package/dist/server/src/routes/homepage.d.ts +10 -0
  196. package/dist/server/src/routes/homepage.d.ts.map +1 -0
  197. package/dist/server/src/routes/index.d.ts.map +1 -1
  198. package/dist/server/src/services/homepage.d.ts +15 -0
  199. package/dist/server/src/services/homepage.d.ts.map +1 -0
  200. package/dist/server/src/services/index.d.ts +13 -0
  201. package/dist/server/src/services/index.d.ts.map +1 -1
  202. package/dist/shared/contracts/homepage.d.ts +30 -0
  203. package/dist/shared/contracts/homepage.d.ts.map +1 -1
  204. package/package.json +8 -9
  205. package/dist/admin/admin/src/components/GuidedTour/Homepage.js +0 -132
  206. package/dist/admin/admin/src/components/GuidedTour/Homepage.js.map +0 -1
  207. package/dist/admin/admin/src/components/GuidedTour/Homepage.mjs +0 -130
  208. package/dist/admin/admin/src/components/GuidedTour/Homepage.mjs.map +0 -1
  209. package/dist/admin/admin/src/components/GuidedTour/Modal.js +0 -278
  210. package/dist/admin/admin/src/components/GuidedTour/Modal.js.map +0 -1
  211. package/dist/admin/admin/src/components/GuidedTour/Modal.mjs +0 -276
  212. package/dist/admin/admin/src/components/GuidedTour/Modal.mjs.map +0 -1
  213. package/dist/admin/admin/src/components/GuidedTour/Ornaments.js +0 -54
  214. package/dist/admin/admin/src/components/GuidedTour/Ornaments.js.map +0 -1
  215. package/dist/admin/admin/src/components/GuidedTour/Ornaments.mjs +0 -51
  216. package/dist/admin/admin/src/components/GuidedTour/Ornaments.mjs.map +0 -1
  217. package/dist/admin/admin/src/components/GuidedTour/Provider.js +0 -206
  218. package/dist/admin/admin/src/components/GuidedTour/Provider.js.map +0 -1
  219. package/dist/admin/admin/src/components/GuidedTour/Provider.mjs +0 -184
  220. package/dist/admin/admin/src/components/GuidedTour/Provider.mjs.map +0 -1
  221. package/dist/admin/admin/src/components/GuidedTour/constants.js +0 -167
  222. package/dist/admin/admin/src/components/GuidedTour/constants.js.map +0 -1
  223. package/dist/admin/admin/src/components/GuidedTour/constants.mjs +0 -164
  224. package/dist/admin/admin/src/components/GuidedTour/constants.mjs.map +0 -1
  225. package/dist/admin/admin/src/components/UnstableGuidedTour/Context.js.map +0 -1
  226. package/dist/admin/admin/src/components/UnstableGuidedTour/Context.mjs.map +0 -1
  227. package/dist/admin/admin/src/components/UnstableGuidedTour/Overview.js.map +0 -1
  228. package/dist/admin/admin/src/components/UnstableGuidedTour/Overview.mjs.map +0 -1
  229. package/dist/admin/admin/src/components/UnstableGuidedTour/Step.js.map +0 -1
  230. package/dist/admin/admin/src/components/UnstableGuidedTour/Step.mjs.map +0 -1
  231. package/dist/admin/admin/src/components/UnstableGuidedTour/Tours.js.map +0 -1
  232. package/dist/admin/admin/src/components/UnstableGuidedTour/Tours.mjs.map +0 -1
  233. package/dist/admin/admin/src/pages/Home/components/GuidedTour.js +0 -19
  234. package/dist/admin/admin/src/pages/Home/components/GuidedTour.js.map +0 -1
  235. package/dist/admin/admin/src/pages/Home/components/GuidedTour.mjs +0 -17
  236. package/dist/admin/admin/src/pages/Home/components/GuidedTour.mjs.map +0 -1
  237. package/dist/admin/src/components/GuidedTour/Homepage.d.ts +0 -2
  238. package/dist/admin/src/components/GuidedTour/Modal.d.ts +0 -2
  239. package/dist/admin/src/components/GuidedTour/Ornaments.d.ts +0 -13
  240. package/dist/admin/src/components/GuidedTour/Provider.d.ts +0 -39
  241. package/dist/admin/src/components/GuidedTour/constants.d.ts +0 -165
  242. package/dist/admin/src/components/UnstableGuidedTour/Overview.d.ts +0 -1
  243. package/dist/admin/src/pages/Home/components/GuidedTour.d.ts +0 -1
  244. /package/dist/admin/src/components/{UnstableGuidedTour → GuidedTour}/Tours.d.ts +0 -0
@@ -56,7 +56,13 @@ const Root = ({ children, disabled = false, onChange, options = [], onOpenChange
56
56
  });
57
57
  /* -------------------------------------------------------------------------------------------------
58
58
  * Popover
59
- * -----------------------------------------------------------------------------------------------*/ const PopoverImpl = ()=>{
59
+ * -----------------------------------------------------------------------------------------------*/ /**
60
+ * The zIndex property is used to override the zIndex of the Portal element of the Popover.
61
+ * This is needed to ensure that the DatePicker is rendered above the Popover when opened.
62
+ * The issue was that both the DatePicker and the Popover are rendered in a Portal and have the same zIndex.
63
+ * On init, since the DatePicker is rendered before the Popover in the DOM,
64
+ * it's causing the issue of appearing behind the Popover.
65
+ */ const PopoverImpl = ({ zIndex })=>{
60
66
  const [{ query }, setQuery] = useQueryParams();
61
67
  const { formatMessage } = useIntl();
62
68
  const options = useFilters('Popover', ({ options })=>options);
@@ -106,6 +112,9 @@ const Root = ({ children, disabled = false, onChange, options = [], onOpenChange
106
112
  setOpen(false);
107
113
  };
108
114
  return /*#__PURE__*/ jsx(Popover.Content, {
115
+ style: {
116
+ zIndex
117
+ },
109
118
  children: /*#__PURE__*/ jsx(Box, {
110
119
  padding: 3,
111
120
  children: /*#__PURE__*/ jsx(Form, {
@@ -1 +1 @@
1
- {"version":3,"file":"Filters.mjs","sources":["../../../../../admin/src/components/Filters.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Flex, Popover, Tag } from '@strapi/design-system';\nimport { Plus, Filter as FilterIcon, Cross } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport {\n BASE_FILTERS,\n CONTAINS_FILTERS,\n FilterOption,\n IS_SENSITIVE_FILTERS,\n NUMERIC_FILTERS,\n STRING_PARSE_FILTERS,\n FILTERS_WITH_NO_VALUE,\n} from '../constants/filters';\nimport { useControllableState } from '../hooks/useControllableState';\nimport { useQueryParams } from '../hooks/useQueryParams';\n\nimport { createContext } from './Context';\nimport { Form, InputProps } from './Form';\nimport { InputRenderer } from './FormInputs/Renderer';\n\nimport type { Schema } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * Root\n * -----------------------------------------------------------------------------------------------*/\n\ninterface FilterFormData {\n name: string;\n filter: string;\n value?: string;\n}\n\ninterface FitlersContextValue {\n disabled: boolean;\n onChange: (data: FilterFormData) => void;\n options: Filters.Filter[];\n setOpen: (open: boolean) => void;\n}\n\nconst [FiltersProvider, useFilters] = createContext<FitlersContextValue>('Filters');\n\ninterface RootProps extends Partial<FitlersContextValue>, Popover.Props {\n children: React.ReactNode;\n}\n\nconst Root = ({\n children,\n disabled = false,\n onChange,\n options = [],\n onOpenChange,\n open: openProp,\n defaultOpen,\n ...restProps\n}: RootProps) => {\n const handleChange = (data: FilterFormData) => {\n if (onChange) {\n onChange(data);\n }\n };\n const [open = false, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen,\n onChange: onOpenChange,\n });\n\n return (\n <Popover.Root open={open} onOpenChange={setOpen} {...restProps}>\n <FiltersProvider\n setOpen={setOpen}\n disabled={disabled}\n onChange={handleChange}\n options={options}\n >\n {children}\n </FiltersProvider>\n </Popover.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Trigger\n * -----------------------------------------------------------------------------------------------*/\n\nconst Trigger = React.forwardRef<HTMLButtonElement, Filters.TriggerProps>(\n ({ label }, forwardedRef) => {\n const { formatMessage } = useIntl();\n const disabled = useFilters('Trigger', ({ disabled }) => disabled);\n\n return (\n <Popover.Trigger>\n <Button\n variant=\"tertiary\"\n ref={forwardedRef}\n startIcon={<FilterIcon />}\n size=\"S\"\n disabled={disabled}\n >\n {label || formatMessage({ id: 'app.utils.filters', defaultMessage: 'Filters' })}\n </Button>\n </Popover.Trigger>\n );\n }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * Popover\n * -----------------------------------------------------------------------------------------------*/\n\nconst PopoverImpl = () => {\n const [{ query }, setQuery] = useQueryParams<Filters.Query>();\n const { formatMessage } = useIntl();\n const options = useFilters('Popover', ({ options }) => options);\n const onChange = useFilters('Popover', ({ onChange }) => onChange);\n const setOpen = useFilters('Popover', ({ setOpen }) => setOpen);\n\n if (options.length === 0) {\n return null;\n }\n\n const handleSubmit = (data: FilterFormData) => {\n const value = FILTERS_WITH_NO_VALUE.includes(data.filter)\n ? 'true'\n : encodeURIComponent(data.value ?? '');\n\n if (!value) {\n return;\n }\n\n if (onChange) {\n onChange(data);\n }\n\n /**\n * There will ALWAYS be an option because we use the options to create the form data.\n */\n const fieldOptions = options.find((filter) => filter.name === data.name)!;\n\n /**\n * If the filter is a relation, we need to nest the filter object,\n * we filter based on the mainField of the relation, if there is no mainField, we use the id.\n * At the end, we pass the operator & value. This value _could_ look like:\n * ```json\n * {\n * \"$eq\": \"1\",\n * }\n * ```\n */\n const operatorValuePairing = {\n [data.filter]: value,\n };\n\n const newFilterQuery = {\n ...query.filters,\n $and: [\n ...(query.filters?.$and ?? []),\n {\n [data.name]:\n fieldOptions.type === 'relation'\n ? {\n [fieldOptions.mainField?.name ?? 'id']: operatorValuePairing,\n }\n : operatorValuePairing,\n },\n ],\n };\n\n setQuery({ filters: newFilterQuery, page: 1 });\n setOpen(false);\n };\n\n return (\n <Popover.Content>\n <Box padding={3}>\n <Form\n method=\"POST\"\n initialValues={\n {\n name: options[0]?.name,\n filter: BASE_FILTERS[0].value,\n } satisfies FilterFormData\n }\n onSubmit={handleSubmit}\n >\n {({ values: formValues, modified, isSubmitting }) => {\n const filter = options.find((filter) => filter.name === formValues.name);\n const Input = filter?.input || InputRenderer;\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2} style={{ minWidth: 184 }}>\n {[\n {\n ['aria-label']: formatMessage({\n id: 'app.utils.select-field',\n defaultMessage: 'Select field',\n }),\n name: 'name',\n options: options.map((filter) => ({\n label: filter.label,\n value: filter.name,\n })),\n placholder: formatMessage({\n id: 'app.utils.select-field',\n defaultMessage: 'Select field',\n }),\n type: 'enumeration' as const,\n },\n {\n ['aria-label']: formatMessage({\n id: 'app.utils.select-filter',\n defaultMessage: 'Select filter',\n }),\n name: 'filter',\n options:\n filter?.operators ||\n getFilterList(filter).map((opt) => ({\n label: formatMessage(opt.label),\n value: opt.value,\n })),\n placeholder: formatMessage({\n id: 'app.utils.select-filter',\n defaultMessage: 'Select filter',\n }),\n type: 'enumeration' as const,\n },\n ].map((field) => (\n <InputRenderer key={field.name} {...field} />\n ))}\n {filter &&\n formValues.filter &&\n formValues.filter !== '$null' &&\n formValues.filter !== '$notNull' ? (\n <Input\n {...filter}\n label={null}\n aria-label={filter.label}\n name=\"value\"\n // @ts-expect-error – if type is `custom` then `Input` will be a custom component.\n type={filter.mainField?.type ?? filter.type}\n />\n ) : null}\n <Button\n disabled={!modified || isSubmitting}\n size=\"L\"\n variant=\"secondary\"\n startIcon={<Plus />}\n type=\"submit\"\n fullWidth\n >\n {formatMessage({ id: 'app.utils.add-filter', defaultMessage: 'Add filter' })}\n </Button>\n </Flex>\n );\n }}\n </Form>\n </Box>\n </Popover.Content>\n );\n};\n\n/**\n * Depending on the selected field find the possible filters to apply\n */\nconst getFilterList = (filter?: Filters.Filter): FilterOption[] => {\n if (!filter) {\n return [];\n }\n\n const type = filter.mainField?.type ? filter.mainField.type : filter.type;\n\n switch (type) {\n case 'email':\n case 'text':\n case 'string': {\n return [\n ...BASE_FILTERS,\n ...IS_SENSITIVE_FILTERS,\n ...CONTAINS_FILTERS,\n ...STRING_PARSE_FILTERS,\n ];\n }\n\n case 'float':\n case 'integer':\n case 'biginteger':\n case 'decimal': {\n return [...BASE_FILTERS, ...NUMERIC_FILTERS];\n }\n case 'time':\n case 'date': {\n return [...BASE_FILTERS, ...NUMERIC_FILTERS, ...CONTAINS_FILTERS];\n }\n\n case 'datetime': {\n return [...BASE_FILTERS, ...NUMERIC_FILTERS];\n }\n\n case 'enumeration': {\n return BASE_FILTERS;\n }\n\n default:\n return [...BASE_FILTERS, ...IS_SENSITIVE_FILTERS];\n }\n};\n\n/* -------------------------------------------------------------------------------------------------\n * List\n * -----------------------------------------------------------------------------------------------*/\n\nconst List = () => {\n const [{ query }, setQuery] = useQueryParams<Filters.Query>();\n\n const options = useFilters('List', ({ options }) => options);\n\n const handleClick = (data: FilterFormData) => {\n /**\n * Check the name, operator and value to see if it already exists in the query\n * if it does, remove it.\n */\n const nextFilters = (query?.filters?.$and ?? []).filter((filter) => {\n const [attributeName] = Object.keys(filter);\n if (attributeName !== data.name) {\n return true;\n }\n\n const { type, mainField } = options.find(({ name }) => name === attributeName)!;\n\n if (type === 'relation') {\n const filterObj = filter[attributeName][mainField?.name ?? 'id'];\n\n if (typeof filterObj === 'object') {\n const [operator] = Object.keys(filterObj);\n const value = filterObj[operator];\n\n return !(operator === data.filter && value === data.value);\n }\n\n return true;\n } else {\n const filterObj = filter[attributeName];\n const [operator] = Object.keys(filterObj);\n const value = filterObj[operator];\n\n return !(operator === data.filter && value === data.value);\n }\n });\n\n setQuery({ filters: { $and: nextFilters }, page: 1 });\n };\n\n if (!query?.filters?.$and?.length) {\n return null;\n }\n\n return (\n <>\n {query?.filters?.$and?.map((queryFilter) => {\n const [attributeName] = Object.keys(queryFilter);\n const filter = options.find(({ name }) => name === attributeName);\n const filterObj = queryFilter[attributeName];\n\n if (!filter || typeof filterObj !== 'object' || filterObj === null) {\n return null;\n }\n\n if (filter.type === 'relation') {\n const modelFilter = filterObj[filter.mainField?.name ?? 'id'];\n\n if (typeof modelFilter === 'object') {\n const [operator] = Object.keys(modelFilter);\n const value = modelFilter[operator];\n return (\n <AttributeTag\n key={`${attributeName}-${operator}-${value}`}\n {...filter}\n onClick={handleClick}\n operator={operator}\n value={value}\n />\n );\n }\n\n return null;\n } else {\n const [operator] = Object.keys(filterObj);\n const value = filterObj[operator];\n\n /**\n * Something has gone wrong here, because the attribute is not a relation\n * but we have a nested filter object.\n */\n if (typeof value === 'object') {\n return null;\n }\n\n return (\n <AttributeTag\n key={`${attributeName}-${operator}-${value}`}\n {...filter}\n onClick={handleClick}\n operator={operator}\n value={value}\n />\n );\n }\n })}\n </>\n );\n};\n\ninterface AttributeTagProps extends Filters.Filter {\n onClick: (data: FilterFormData) => void;\n operator: string;\n value: string;\n}\n\nconst AttributeTag = ({\n input,\n label,\n mainField,\n name,\n onClick,\n operator,\n options,\n value,\n ...filter\n}: AttributeTagProps) => {\n const { formatMessage, formatDate, formatTime, formatNumber } = useIntl();\n\n const handleClick = () => {\n onClick({ name, value, filter: operator });\n };\n\n const type = mainField?.type ? mainField.type : filter.type;\n\n let formattedValue: string = value;\n\n switch (type) {\n case 'date':\n formattedValue = formatDate(value, { dateStyle: 'full' });\n break;\n case 'datetime':\n formattedValue = formatDate(value, { dateStyle: 'full', timeStyle: 'short' });\n break;\n case 'time':\n const [hour, minute] = value.split(':');\n const date = new Date();\n date.setHours(Number(hour));\n date.setMinutes(Number(minute));\n\n formattedValue = formatTime(date, {\n hour: 'numeric',\n minute: 'numeric',\n });\n break;\n case 'float':\n case 'integer':\n case 'biginteger':\n case 'decimal':\n formattedValue = formatNumber(Number(value));\n break;\n }\n\n // Handle custom input\n if (input && options) {\n // If the custom input has an options array, find the option with a customValue matching the query value\n const selectedOption = options.find((option) => {\n return (typeof option === 'string' ? option : option.value) === value;\n });\n\n formattedValue = selectedOption\n ? typeof selectedOption === 'string'\n ? selectedOption\n : (selectedOption.label ?? selectedOption.value)\n : value;\n }\n\n const content = `${label} ${formatMessage({\n id: `components.FilterOptions.FILTER_TYPES.${operator}`,\n defaultMessage: operator,\n })} ${operator !== '$null' && operator !== '$notNull' ? formattedValue : ''}`;\n\n return (\n <Tag padding={1} onClick={handleClick} icon={<Cross />}>\n {content}\n </Tag>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * EXPORTS\n * -----------------------------------------------------------------------------------------------*/\n\nconst Filters = {\n List,\n Popover: PopoverImpl,\n Root,\n Trigger,\n};\n\ninterface MainField {\n name: string;\n type: Schema.Attribute.Kind | 'custom';\n}\n\n// eslint-disable-next-line @typescript-eslint/no-namespace\nnamespace Filters {\n export interface Filter {\n input?: React.ComponentType<ValueInputProps>;\n label: string;\n /**\n * the name of the attribute we use to display the actual name e.g. relations\n * are just ids, so we use the mainField to display something meaninginful by\n * looking at the target's schema\n */\n mainField?: MainField;\n name: string;\n operators?: Array<{\n label: string;\n value: string;\n }>;\n options?: Array<{ label?: string; value: string }> | string[];\n type: InputProps['type'] | 'relation' | 'custom';\n }\n\n export interface ValueInputProps extends Omit<Filter, 'label'> {\n ['aria-label']: string;\n }\n\n export type Props = RootProps;\n\n export interface TriggerProps {\n label?: string;\n }\n\n export interface Query {\n filters?: {\n /**\n * Typically, a filter will be:\n * ```ts\n * {\n * [attributeName]: {\n * [operator]: value\n * }\n * }\n * ```\n * However, for relation items it becomes more nested.\n * ```ts\n * {\n * [attributeName]: {\n * [relationTargetAttribute]: {\n * [operator]: value\n * }\n * }\n * }\n * ```\n */\n $and?: Array<Record<string, Record<string, string | Record<string, string>>>>;\n };\n page?: number;\n }\n}\n\nexport { Filters };\n"],"names":["FiltersProvider","useFilters","createContext","Root","children","disabled","onChange","options","onOpenChange","open","openProp","defaultOpen","restProps","handleChange","data","setOpen","useControllableState","prop","defaultProp","_jsx","Popover","Trigger","React","forwardRef","label","forwardedRef","formatMessage","useIntl","Button","variant","ref","startIcon","FilterIcon","size","id","defaultMessage","PopoverImpl","query","setQuery","useQueryParams","length","handleSubmit","value","FILTERS_WITH_NO_VALUE","includes","filter","encodeURIComponent","fieldOptions","find","name","operatorValuePairing","newFilterQuery","filters","$and","type","mainField","page","Content","Box","padding","Form","method","initialValues","BASE_FILTERS","onSubmit","values","formValues","modified","isSubmitting","Input","input","InputRenderer","_jsxs","Flex","direction","alignItems","gap","style","minWidth","map","placholder","operators","getFilterList","opt","placeholder","field","aria-label","Plus","fullWidth","IS_SENSITIVE_FILTERS","CONTAINS_FILTERS","STRING_PARSE_FILTERS","NUMERIC_FILTERS","List","handleClick","nextFilters","attributeName","Object","keys","filterObj","operator","_Fragment","queryFilter","modelFilter","AttributeTag","onClick","formatDate","formatTime","formatNumber","formattedValue","dateStyle","timeStyle","hour","minute","split","date","Date","setHours","Number","setMinutes","selectedOption","option","content","Tag","icon","Cross","Filters"],"mappings":"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"}
1
+ {"version":3,"file":"Filters.mjs","sources":["../../../../../admin/src/components/Filters.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Flex, Popover, Tag } from '@strapi/design-system';\nimport { Plus, Filter as FilterIcon, Cross } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport {\n BASE_FILTERS,\n CONTAINS_FILTERS,\n FilterOption,\n IS_SENSITIVE_FILTERS,\n NUMERIC_FILTERS,\n STRING_PARSE_FILTERS,\n FILTERS_WITH_NO_VALUE,\n} from '../constants/filters';\nimport { useControllableState } from '../hooks/useControllableState';\nimport { useQueryParams } from '../hooks/useQueryParams';\n\nimport { createContext } from './Context';\nimport { Form, InputProps } from './Form';\nimport { InputRenderer } from './FormInputs/Renderer';\n\nimport type { Schema } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * Root\n * -----------------------------------------------------------------------------------------------*/\n\ninterface FilterFormData {\n name: string;\n filter: string;\n value?: string;\n}\n\ninterface FitlersContextValue {\n disabled: boolean;\n onChange: (data: FilterFormData) => void;\n options: Filters.Filter[];\n setOpen: (open: boolean) => void;\n}\n\nconst [FiltersProvider, useFilters] = createContext<FitlersContextValue>('Filters');\n\ninterface RootProps extends Partial<FitlersContextValue>, Popover.Props {\n children: React.ReactNode;\n}\n\nconst Root = ({\n children,\n disabled = false,\n onChange,\n options = [],\n onOpenChange,\n open: openProp,\n defaultOpen,\n ...restProps\n}: RootProps) => {\n const handleChange = (data: FilterFormData) => {\n if (onChange) {\n onChange(data);\n }\n };\n const [open = false, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen,\n onChange: onOpenChange,\n });\n\n return (\n <Popover.Root open={open} onOpenChange={setOpen} {...restProps}>\n <FiltersProvider\n setOpen={setOpen}\n disabled={disabled}\n onChange={handleChange}\n options={options}\n >\n {children}\n </FiltersProvider>\n </Popover.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Trigger\n * -----------------------------------------------------------------------------------------------*/\n\nconst Trigger = React.forwardRef<HTMLButtonElement, Filters.TriggerProps>(\n ({ label }, forwardedRef) => {\n const { formatMessage } = useIntl();\n const disabled = useFilters('Trigger', ({ disabled }) => disabled);\n\n return (\n <Popover.Trigger>\n <Button\n variant=\"tertiary\"\n ref={forwardedRef}\n startIcon={<FilterIcon />}\n size=\"S\"\n disabled={disabled}\n >\n {label || formatMessage({ id: 'app.utils.filters', defaultMessage: 'Filters' })}\n </Button>\n </Popover.Trigger>\n );\n }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * Popover\n * -----------------------------------------------------------------------------------------------*/\n/**\n * The zIndex property is used to override the zIndex of the Portal element of the Popover.\n * This is needed to ensure that the DatePicker is rendered above the Popover when opened.\n * The issue was that both the DatePicker and the Popover are rendered in a Portal and have the same zIndex.\n * On init, since the DatePicker is rendered before the Popover in the DOM,\n * it's causing the issue of appearing behind the Popover.\n */\nconst PopoverImpl = ({ zIndex }: { zIndex?: number }) => {\n const [{ query }, setQuery] = useQueryParams<Filters.Query>();\n const { formatMessage } = useIntl();\n const options = useFilters('Popover', ({ options }) => options);\n const onChange = useFilters('Popover', ({ onChange }) => onChange);\n const setOpen = useFilters('Popover', ({ setOpen }) => setOpen);\n\n if (options.length === 0) {\n return null;\n }\n\n const handleSubmit = (data: FilterFormData) => {\n const value = FILTERS_WITH_NO_VALUE.includes(data.filter)\n ? 'true'\n : encodeURIComponent(data.value ?? '');\n\n if (!value) {\n return;\n }\n\n if (onChange) {\n onChange(data);\n }\n\n /**\n * There will ALWAYS be an option because we use the options to create the form data.\n */\n const fieldOptions = options.find((filter) => filter.name === data.name)!;\n\n /**\n * If the filter is a relation, we need to nest the filter object,\n * we filter based on the mainField of the relation, if there is no mainField, we use the id.\n * At the end, we pass the operator & value. This value _could_ look like:\n * ```json\n * {\n * \"$eq\": \"1\",\n * }\n * ```\n */\n const operatorValuePairing = {\n [data.filter]: value,\n };\n\n const newFilterQuery = {\n ...query.filters,\n $and: [\n ...(query.filters?.$and ?? []),\n {\n [data.name]:\n fieldOptions.type === 'relation'\n ? {\n [fieldOptions.mainField?.name ?? 'id']: operatorValuePairing,\n }\n : operatorValuePairing,\n },\n ],\n };\n\n setQuery({ filters: newFilterQuery, page: 1 });\n setOpen(false);\n };\n\n return (\n <Popover.Content style={{ zIndex }}>\n <Box padding={3}>\n <Form\n method=\"POST\"\n initialValues={\n {\n name: options[0]?.name,\n filter: BASE_FILTERS[0].value,\n } satisfies FilterFormData\n }\n onSubmit={handleSubmit}\n >\n {({ values: formValues, modified, isSubmitting }) => {\n const filter = options.find((filter) => filter.name === formValues.name);\n const Input = filter?.input || InputRenderer;\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2} style={{ minWidth: 184 }}>\n {[\n {\n ['aria-label']: formatMessage({\n id: 'app.utils.select-field',\n defaultMessage: 'Select field',\n }),\n name: 'name',\n options: options.map((filter) => ({\n label: filter.label,\n value: filter.name,\n })),\n placholder: formatMessage({\n id: 'app.utils.select-field',\n defaultMessage: 'Select field',\n }),\n type: 'enumeration' as const,\n },\n {\n ['aria-label']: formatMessage({\n id: 'app.utils.select-filter',\n defaultMessage: 'Select filter',\n }),\n name: 'filter',\n options:\n filter?.operators ||\n getFilterList(filter).map((opt) => ({\n label: formatMessage(opt.label),\n value: opt.value,\n })),\n placeholder: formatMessage({\n id: 'app.utils.select-filter',\n defaultMessage: 'Select filter',\n }),\n type: 'enumeration' as const,\n },\n ].map((field) => (\n <InputRenderer key={field.name} {...field} />\n ))}\n {filter &&\n formValues.filter &&\n formValues.filter !== '$null' &&\n formValues.filter !== '$notNull' ? (\n <Input\n {...filter}\n label={null}\n aria-label={filter.label}\n name=\"value\"\n // @ts-expect-error – if type is `custom` then `Input` will be a custom component.\n type={filter.mainField?.type ?? filter.type}\n />\n ) : null}\n <Button\n disabled={!modified || isSubmitting}\n size=\"L\"\n variant=\"secondary\"\n startIcon={<Plus />}\n type=\"submit\"\n fullWidth\n >\n {formatMessage({ id: 'app.utils.add-filter', defaultMessage: 'Add filter' })}\n </Button>\n </Flex>\n );\n }}\n </Form>\n </Box>\n </Popover.Content>\n );\n};\n\n/**\n * Depending on the selected field find the possible filters to apply\n */\nconst getFilterList = (filter?: Filters.Filter): FilterOption[] => {\n if (!filter) {\n return [];\n }\n\n const type = filter.mainField?.type ? filter.mainField.type : filter.type;\n\n switch (type) {\n case 'email':\n case 'text':\n case 'string': {\n return [\n ...BASE_FILTERS,\n ...IS_SENSITIVE_FILTERS,\n ...CONTAINS_FILTERS,\n ...STRING_PARSE_FILTERS,\n ];\n }\n\n case 'float':\n case 'integer':\n case 'biginteger':\n case 'decimal': {\n return [...BASE_FILTERS, ...NUMERIC_FILTERS];\n }\n case 'time':\n case 'date': {\n return [...BASE_FILTERS, ...NUMERIC_FILTERS, ...CONTAINS_FILTERS];\n }\n\n case 'datetime': {\n return [...BASE_FILTERS, ...NUMERIC_FILTERS];\n }\n\n case 'enumeration': {\n return BASE_FILTERS;\n }\n\n default:\n return [...BASE_FILTERS, ...IS_SENSITIVE_FILTERS];\n }\n};\n\n/* -------------------------------------------------------------------------------------------------\n * List\n * -----------------------------------------------------------------------------------------------*/\n\nconst List = () => {\n const [{ query }, setQuery] = useQueryParams<Filters.Query>();\n\n const options = useFilters('List', ({ options }) => options);\n\n const handleClick = (data: FilterFormData) => {\n /**\n * Check the name, operator and value to see if it already exists in the query\n * if it does, remove it.\n */\n const nextFilters = (query?.filters?.$and ?? []).filter((filter) => {\n const [attributeName] = Object.keys(filter);\n if (attributeName !== data.name) {\n return true;\n }\n\n const { type, mainField } = options.find(({ name }) => name === attributeName)!;\n\n if (type === 'relation') {\n const filterObj = filter[attributeName][mainField?.name ?? 'id'];\n\n if (typeof filterObj === 'object') {\n const [operator] = Object.keys(filterObj);\n const value = filterObj[operator];\n\n return !(operator === data.filter && value === data.value);\n }\n\n return true;\n } else {\n const filterObj = filter[attributeName];\n const [operator] = Object.keys(filterObj);\n const value = filterObj[operator];\n\n return !(operator === data.filter && value === data.value);\n }\n });\n\n setQuery({ filters: { $and: nextFilters }, page: 1 });\n };\n\n if (!query?.filters?.$and?.length) {\n return null;\n }\n\n return (\n <>\n {query?.filters?.$and?.map((queryFilter) => {\n const [attributeName] = Object.keys(queryFilter);\n const filter = options.find(({ name }) => name === attributeName);\n const filterObj = queryFilter[attributeName];\n\n if (!filter || typeof filterObj !== 'object' || filterObj === null) {\n return null;\n }\n\n if (filter.type === 'relation') {\n const modelFilter = filterObj[filter.mainField?.name ?? 'id'];\n\n if (typeof modelFilter === 'object') {\n const [operator] = Object.keys(modelFilter);\n const value = modelFilter[operator];\n return (\n <AttributeTag\n key={`${attributeName}-${operator}-${value}`}\n {...filter}\n onClick={handleClick}\n operator={operator}\n value={value}\n />\n );\n }\n\n return null;\n } else {\n const [operator] = Object.keys(filterObj);\n const value = filterObj[operator];\n\n /**\n * Something has gone wrong here, because the attribute is not a relation\n * but we have a nested filter object.\n */\n if (typeof value === 'object') {\n return null;\n }\n\n return (\n <AttributeTag\n key={`${attributeName}-${operator}-${value}`}\n {...filter}\n onClick={handleClick}\n operator={operator}\n value={value}\n />\n );\n }\n })}\n </>\n );\n};\n\ninterface AttributeTagProps extends Filters.Filter {\n onClick: (data: FilterFormData) => void;\n operator: string;\n value: string;\n}\n\nconst AttributeTag = ({\n input,\n label,\n mainField,\n name,\n onClick,\n operator,\n options,\n value,\n ...filter\n}: AttributeTagProps) => {\n const { formatMessage, formatDate, formatTime, formatNumber } = useIntl();\n\n const handleClick = () => {\n onClick({ name, value, filter: operator });\n };\n\n const type = mainField?.type ? mainField.type : filter.type;\n\n let formattedValue: string = value;\n\n switch (type) {\n case 'date':\n formattedValue = formatDate(value, { dateStyle: 'full' });\n break;\n case 'datetime':\n formattedValue = formatDate(value, { dateStyle: 'full', timeStyle: 'short' });\n break;\n case 'time':\n const [hour, minute] = value.split(':');\n const date = new Date();\n date.setHours(Number(hour));\n date.setMinutes(Number(minute));\n\n formattedValue = formatTime(date, {\n hour: 'numeric',\n minute: 'numeric',\n });\n break;\n case 'float':\n case 'integer':\n case 'biginteger':\n case 'decimal':\n formattedValue = formatNumber(Number(value));\n break;\n }\n\n // Handle custom input\n if (input && options) {\n // If the custom input has an options array, find the option with a customValue matching the query value\n const selectedOption = options.find((option) => {\n return (typeof option === 'string' ? option : option.value) === value;\n });\n\n formattedValue = selectedOption\n ? typeof selectedOption === 'string'\n ? selectedOption\n : (selectedOption.label ?? selectedOption.value)\n : value;\n }\n\n const content = `${label} ${formatMessage({\n id: `components.FilterOptions.FILTER_TYPES.${operator}`,\n defaultMessage: operator,\n })} ${operator !== '$null' && operator !== '$notNull' ? formattedValue : ''}`;\n\n return (\n <Tag padding={1} onClick={handleClick} icon={<Cross />}>\n {content}\n </Tag>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * EXPORTS\n * -----------------------------------------------------------------------------------------------*/\n\nconst Filters = {\n List,\n Popover: PopoverImpl,\n Root,\n Trigger,\n};\n\ninterface MainField {\n name: string;\n type: Schema.Attribute.Kind | 'custom';\n}\n\n// eslint-disable-next-line @typescript-eslint/no-namespace\nnamespace Filters {\n export interface Filter {\n input?: React.ComponentType<ValueInputProps>;\n label: string;\n /**\n * the name of the attribute we use to display the actual name e.g. relations\n * are just ids, so we use the mainField to display something meaninginful by\n * looking at the target's schema\n */\n mainField?: MainField;\n name: string;\n operators?: Array<{\n label: string;\n value: string;\n }>;\n options?: Array<{ label?: string; value: string }> | string[];\n type: InputProps['type'] | 'relation' | 'custom';\n }\n\n export interface ValueInputProps extends Omit<Filter, 'label'> {\n ['aria-label']: string;\n }\n\n export type Props = RootProps;\n\n export interface TriggerProps {\n label?: string;\n }\n\n export interface Query {\n filters?: {\n /**\n * Typically, a filter will be:\n * ```ts\n * {\n * [attributeName]: {\n * [operator]: value\n * }\n * }\n * ```\n * However, for relation items it becomes more nested.\n * ```ts\n * {\n * [attributeName]: {\n * [relationTargetAttribute]: {\n * [operator]: value\n * }\n * }\n * }\n * ```\n */\n $and?: Array<Record<string, Record<string, string | Record<string, string>>>>;\n };\n page?: number;\n }\n}\n\nexport { Filters };\n"],"names":["FiltersProvider","useFilters","createContext","Root","children","disabled","onChange","options","onOpenChange","open","openProp","defaultOpen","restProps","handleChange","data","setOpen","useControllableState","prop","defaultProp","_jsx","Popover","Trigger","React","forwardRef","label","forwardedRef","formatMessage","useIntl","Button","variant","ref","startIcon","FilterIcon","size","id","defaultMessage","PopoverImpl","zIndex","query","setQuery","useQueryParams","length","handleSubmit","value","FILTERS_WITH_NO_VALUE","includes","filter","encodeURIComponent","fieldOptions","find","name","operatorValuePairing","newFilterQuery","filters","$and","type","mainField","page","Content","style","Box","padding","Form","method","initialValues","BASE_FILTERS","onSubmit","values","formValues","modified","isSubmitting","Input","input","InputRenderer","_jsxs","Flex","direction","alignItems","gap","minWidth","map","placholder","operators","getFilterList","opt","placeholder","field","aria-label","Plus","fullWidth","IS_SENSITIVE_FILTERS","CONTAINS_FILTERS","STRING_PARSE_FILTERS","NUMERIC_FILTERS","List","handleClick","nextFilters","attributeName","Object","keys","filterObj","operator","_Fragment","queryFilter","modelFilter","AttributeTag","onClick","formatDate","formatTime","formatNumber","formattedValue","dateStyle","timeStyle","hour","minute","split","date","Date","setHours","Number","setMinutes","selectedOption","option","content","Tag","icon","Cross","Filters"],"mappings":";;;;;;;;;;;;AAyCA,MAAM,CAACA,eAAAA,EAAiBC,UAAW,CAAA,GAAGC,aAAmC,CAAA,SAAA,CAAA;AAMzE,MAAMC,IAAAA,GAAO,CAAC,EACZC,QAAQ,EACRC,QAAW,GAAA,KAAK,EAChBC,QAAQ,EACRC,UAAU,EAAE,EACZC,YAAY,EACZC,IAAAA,EAAMC,QAAQ,EACdC,WAAW,EACX,GAAGC,SACO,EAAA,GAAA;AACV,IAAA,MAAMC,eAAe,CAACC,IAAAA,GAAAA;AACpB,QAAA,IAAIR,QAAU,EAAA;YACZA,QAASQ,CAAAA,IAAAA,CAAAA;AACX;AACF,KAAA;AACA,IAAA,MAAM,CAACL,IAAO,GAAA,KAAK,EAAEM,OAAAA,CAAQ,GAAGC,oBAAqB,CAAA;QACnDC,IAAMP,EAAAA,QAAAA;QACNQ,WAAaP,EAAAA,WAAAA;QACbL,QAAUE,EAAAA;AACZ,KAAA,CAAA;IAEA,qBACEW,GAAA,CAACC,QAAQjB,IAAI,EAAA;QAACM,IAAMA,EAAAA,IAAAA;QAAMD,YAAcO,EAAAA,OAAAA;AAAU,QAAA,GAAGH,SAAS;AAC5D,QAAA,QAAA,gBAAAO,GAACnB,CAAAA,eAAAA,EAAAA;YACCe,OAASA,EAAAA,OAAAA;YACTV,QAAUA,EAAAA,QAAAA;YACVC,QAAUO,EAAAA,YAAAA;YACVN,OAASA,EAAAA,OAAAA;AAERH,YAAAA,QAAAA,EAAAA;;;AAIT,CAAA;AAEA;;qGAIA,MAAMiB,wBAAUC,KAAMC,CAAAA,UAAU,CAC9B,CAAC,EAAEC,KAAK,EAAE,EAAEC,YAAAA,GAAAA;IACV,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAC1B,IAAA,MAAMtB,WAAWJ,UAAW,CAAA,SAAA,EAAW,CAAC,EAAEI,QAAQ,EAAE,GAAKA,QAAAA,CAAAA;IAEzD,qBACEc,GAAA,CAACC,QAAQC,OAAO,EAAA;AACd,QAAA,QAAA,gBAAAF,GAACS,CAAAA,MAAAA,EAAAA;YACCC,OAAQ,EAAA,UAAA;YACRC,GAAKL,EAAAA,YAAAA;AACLM,YAAAA,SAAAA,gBAAWZ,GAACa,CAAAA,MAAAA,EAAAA,EAAAA,CAAAA;YACZC,IAAK,EAAA,GAAA;YACL5B,QAAUA,EAAAA,QAAAA;AAETmB,YAAAA,QAAAA,EAAAA,KAAAA,IAASE,aAAc,CAAA;gBAAEQ,EAAI,EAAA,mBAAA;gBAAqBC,cAAgB,EAAA;AAAU,aAAA;;;AAIrF,CAAA,CAAA;AAGF;;;;;;;;AASC,IACD,MAAMC,WAAAA,GAAc,CAAC,EAAEC,MAAM,EAAuB,GAAA;AAClD,IAAA,MAAM,CAAC,EAAEC,KAAK,EAAE,EAAEC,SAAS,GAAGC,cAAAA,EAAAA;IAC9B,MAAM,EAAEd,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAC1B,IAAA,MAAMpB,UAAUN,UAAW,CAAA,SAAA,EAAW,CAAC,EAAEM,OAAO,EAAE,GAAKA,OAAAA,CAAAA;AACvD,IAAA,MAAMD,WAAWL,UAAW,CAAA,SAAA,EAAW,CAAC,EAAEK,QAAQ,EAAE,GAAKA,QAAAA,CAAAA;AACzD,IAAA,MAAMS,UAAUd,UAAW,CAAA,SAAA,EAAW,CAAC,EAAEc,OAAO,EAAE,GAAKA,OAAAA,CAAAA;IAEvD,IAAIR,OAAAA,CAAQkC,MAAM,KAAK,CAAG,EAAA;QACxB,OAAO,IAAA;AACT;AAEA,IAAA,MAAMC,eAAe,CAAC5B,IAAAA,GAAAA;QACpB,MAAM6B,KAAAA,GAAQC,qBAAsBC,CAAAA,QAAQ,CAAC/B,IAAAA,CAAKgC,MAAM,CAAA,GACpD,MACAC,GAAAA,kBAAAA,CAAmBjC,IAAK6B,CAAAA,KAAK,IAAI,EAAA,CAAA;AAErC,QAAA,IAAI,CAACA,KAAO,EAAA;AACV,YAAA;AACF;AAEA,QAAA,IAAIrC,QAAU,EAAA;YACZA,QAASQ,CAAAA,IAAAA,CAAAA;AACX;AAEA;;QAGA,MAAMkC,YAAezC,GAAAA,OAAAA,CAAQ0C,IAAI,CAAC,CAACH,MAAAA,GAAWA,MAAOI,CAAAA,IAAI,KAAKpC,IAAAA,CAAKoC,IAAI,CAAA;AAEvE;;;;;;;;;AASC,QACD,MAAMC,oBAAuB,GAAA;YAC3B,CAACrC,IAAAA,CAAKgC,MAAM,GAAGH;AACjB,SAAA;AAEA,QAAA,MAAMS,cAAiB,GAAA;AACrB,YAAA,GAAGd,MAAMe,OAAO;YAChBC,IAAM,EAAA;mBACAhB,KAAMe,CAAAA,OAAO,EAAEC,IAAAA,IAAQ,EAAE;AAC7B,gBAAA;AACE,oBAAA,CAACxC,KAAKoC,IAAI,GACRF,YAAaO,CAAAA,IAAI,KAAK,UAClB,GAAA;AACE,wBAAA,CAACP,YAAaQ,CAAAA,SAAS,EAAEN,IAAAA,IAAQ,OAAOC;qBAE1CA,GAAAA;AACR;AACD;AACH,SAAA;QAEAZ,QAAS,CAAA;YAAEc,OAASD,EAAAA,cAAAA;YAAgBK,IAAM,EAAA;AAAE,SAAA,CAAA;QAC5C1C,OAAQ,CAAA,KAAA,CAAA;AACV,KAAA;IAEA,qBACEI,GAAA,CAACC,QAAQsC,OAAO,EAAA;QAACC,KAAO,EAAA;AAAEtB,YAAAA;AAAO,SAAA;AAC/B,QAAA,QAAA,gBAAAlB,GAACyC,CAAAA,GAAAA,EAAAA;YAAIC,OAAS,EAAA,CAAA;AACZ,YAAA,QAAA,gBAAA1C,GAAC2C,CAAAA,IAAAA,EAAAA;gBACCC,MAAO,EAAA,MAAA;gBACPC,aACE,EAAA;oBACEd,IAAM3C,EAAAA,OAAO,CAAC,CAAA,CAAE,EAAE2C,IAAAA;AAClBJ,oBAAAA,MAAAA,EAAQmB,YAAY,CAAC,CAAE,CAAA,CAACtB;AAC1B,iBAAA;gBAEFuB,QAAUxB,EAAAA,YAAAA;AAET,gBAAA,QAAA,EAAA,CAAC,EAAEyB,MAAQC,EAAAA,UAAU,EAAEC,QAAQ,EAAEC,YAAY,EAAE,GAAA;oBAC9C,MAAMxB,MAAAA,GAASvC,OAAQ0C,CAAAA,IAAI,CAAC,CAACH,SAAWA,MAAOI,CAAAA,IAAI,KAAKkB,UAAAA,CAAWlB,IAAI,CAAA;oBACvE,MAAMqB,KAAAA,GAAQzB,QAAQ0B,KAASC,IAAAA,qBAAAA;AAC/B,oBAAA,qBACEC,IAACC,CAAAA,IAAAA,EAAAA;wBAAKC,SAAU,EAAA,QAAA;wBAASC,UAAW,EAAA,SAAA;wBAAUC,GAAK,EAAA,CAAA;wBAAGnB,KAAO,EAAA;4BAAEoB,QAAU,EAAA;AAAI,yBAAA;;AAC1E,4BAAA;AACC,gCAAA;oCACE,CAAC,YAAA,GAAerD,aAAc,CAAA;wCAC5BQ,EAAI,EAAA,wBAAA;wCACJC,cAAgB,EAAA;AAClB,qCAAA,CAAA;oCACAe,IAAM,EAAA,MAAA;AACN3C,oCAAAA,OAAAA,EAASA,OAAQyE,CAAAA,GAAG,CAAC,CAAClC,UAAY;AAChCtB,4CAAAA,KAAAA,EAAOsB,OAAOtB,KAAK;AACnBmB,4CAAAA,KAAAA,EAAOG,OAAOI;yCAChB,CAAA,CAAA;AACA+B,oCAAAA,UAAAA,EAAYvD,aAAc,CAAA;wCACxBQ,EAAI,EAAA,wBAAA;wCACJC,cAAgB,EAAA;AAClB,qCAAA,CAAA;oCACAoB,IAAM,EAAA;AACR,iCAAA;AACA,gCAAA;oCACE,CAAC,YAAA,GAAe7B,aAAc,CAAA;wCAC5BQ,EAAI,EAAA,yBAAA;wCACJC,cAAgB,EAAA;AAClB,qCAAA,CAAA;oCACAe,IAAM,EAAA,QAAA;oCACN3C,OACEuC,EAAAA,MAAAA,EAAQoC,aACRC,aAAcrC,CAAAA,MAAAA,CAAAA,CAAQkC,GAAG,CAAC,CAACI,OAAS;4CAClC5D,KAAOE,EAAAA,aAAAA,CAAc0D,IAAI5D,KAAK,CAAA;AAC9BmB,4CAAAA,KAAAA,EAAOyC,IAAIzC;yCACb,CAAA,CAAA;AACF0C,oCAAAA,WAAAA,EAAa3D,aAAc,CAAA;wCACzBQ,EAAI,EAAA,yBAAA;wCACJC,cAAgB,EAAA;AAClB,qCAAA,CAAA;oCACAoB,IAAM,EAAA;AACR;AACD,6BAAA,CAACyB,GAAG,CAAC,CAACM,KAAAA,iBACLnE,GAACsD,CAAAA,qBAAAA,EAAAA;AAAgC,oCAAA,GAAGa;AAAhBA,iCAAAA,EAAAA,KAAAA,CAAMpC,IAAI,CAAA,CAAA;4BAE/BJ,MACDsB,IAAAA,UAAAA,CAAWtB,MAAM,IACjBsB,UAAWtB,CAAAA,MAAM,KAAK,OAAA,IACtBsB,UAAWtB,CAAAA,MAAM,KAAK,UAAA,iBACpB3B,GAACoD,CAAAA,KAAAA,EAAAA;AACE,gCAAA,GAAGzB,MAAM;gCACVtB,KAAO,EAAA,IAAA;AACP+D,gCAAAA,YAAAA,EAAYzC,OAAOtB,KAAK;gCACxB0B,IAAK,EAAA,OAAA;;AAELK,gCAAAA,IAAAA,EAAMT,MAAOU,CAAAA,SAAS,EAAED,IAAAA,IAAQT,OAAOS;AAEvC,6BAAA,CAAA,GAAA,IAAA;0CACJpC,GAACS,CAAAA,MAAAA,EAAAA;AACCvB,gCAAAA,QAAAA,EAAU,CAACgE,QAAYC,IAAAA,YAAAA;gCACvBrC,IAAK,EAAA,GAAA;gCACLJ,OAAQ,EAAA,WAAA;AACRE,gCAAAA,SAAAA,gBAAWZ,GAACqE,CAAAA,IAAAA,EAAAA,EAAAA,CAAAA;gCACZjC,IAAK,EAAA,QAAA;gCACLkC,SAAS,EAAA,IAAA;0CAER/D,aAAc,CAAA;oCAAEQ,EAAI,EAAA,sBAAA;oCAAwBC,cAAgB,EAAA;AAAa,iCAAA;;;;AAIlF;;;;AAKV,CAAA;AAEA;;IAGA,MAAMgD,gBAAgB,CAACrC,MAAAA,GAAAA;AACrB,IAAA,IAAI,CAACA,MAAQ,EAAA;AACX,QAAA,OAAO,EAAE;AACX;IAEA,MAAMS,IAAAA,GAAOT,MAAOU,CAAAA,SAAS,EAAED,IAAAA,GAAOT,MAAOU,CAAAA,SAAS,CAACD,IAAI,GAAGT,MAAAA,CAAOS,IAAI;IAEzE,OAAQA,IAAAA;QACN,KAAK,OAAA;QACL,KAAK,MAAA;QACL,KAAK,QAAA;AAAU,YAAA;gBACb,OAAO;AACFU,oBAAAA,GAAAA,YAAAA;AACAyB,oBAAAA,GAAAA,oBAAAA;AACAC,oBAAAA,GAAAA,gBAAAA;AACAC,oBAAAA,GAAAA;AACJ,iBAAA;AACH;QAEA,KAAK,OAAA;QACL,KAAK,SAAA;QACL,KAAK,YAAA;QACL,KAAK,SAAA;AAAW,YAAA;gBACd,OAAO;AAAI3B,oBAAAA,GAAAA,YAAAA;AAAiB4B,oBAAAA,GAAAA;AAAgB,iBAAA;AAC9C;QACA,KAAK,MAAA;QACL,KAAK,MAAA;AAAQ,YAAA;gBACX,OAAO;AAAI5B,oBAAAA,GAAAA,YAAAA;AAAiB4B,oBAAAA,GAAAA,eAAAA;AAAoBF,oBAAAA,GAAAA;AAAiB,iBAAA;AACnE;QAEA,KAAK,UAAA;AAAY,YAAA;gBACf,OAAO;AAAI1B,oBAAAA,GAAAA,YAAAA;AAAiB4B,oBAAAA,GAAAA;AAAgB,iBAAA;AAC9C;QAEA,KAAK,aAAA;AAAe,YAAA;gBAClB,OAAO5B,YAAAA;AACT;AAEA,QAAA;YACE,OAAO;AAAIA,gBAAAA,GAAAA,YAAAA;AAAiByB,gBAAAA,GAAAA;AAAqB,aAAA;AACrD;AACF,CAAA;AAEA;;AAEkG,qGAElG,MAAMI,IAAO,GAAA,IAAA;AACX,IAAA,MAAM,CAAC,EAAExD,KAAK,EAAE,EAAEC,SAAS,GAAGC,cAAAA,EAAAA;AAE9B,IAAA,MAAMjC,UAAUN,UAAW,CAAA,MAAA,EAAQ,CAAC,EAAEM,OAAO,EAAE,GAAKA,OAAAA,CAAAA;AAEpD,IAAA,MAAMwF,cAAc,CAACjF,IAAAA,GAAAA;AACnB;;;AAGC,QACD,MAAMkF,WAAAA,GAAc,CAAC1D,KAAOe,EAAAA,OAAAA,EAASC,IAAQ,IAAA,EAAE,EAAER,MAAM,CAAC,CAACA,MAAAA,GAAAA;AACvD,YAAA,MAAM,CAACmD,aAAAA,CAAc,GAAGC,MAAAA,CAAOC,IAAI,CAACrD,MAAAA,CAAAA;YACpC,IAAImD,aAAAA,KAAkBnF,IAAKoC,CAAAA,IAAI,EAAE;gBAC/B,OAAO,IAAA;AACT;AAEA,YAAA,MAAM,EAAEK,IAAI,EAAEC,SAAS,EAAE,GAAGjD,OAAAA,CAAQ0C,IAAI,CAAC,CAAC,EAAEC,IAAI,EAAE,GAAKA,IAAS+C,KAAAA,aAAAA,CAAAA;AAEhE,YAAA,IAAI1C,SAAS,UAAY,EAAA;AACvB,gBAAA,MAAM6C,YAAYtD,MAAM,CAACmD,cAAc,CAACzC,SAAAA,EAAWN,QAAQ,IAAK,CAAA;gBAEhE,IAAI,OAAOkD,cAAc,QAAU,EAAA;AACjC,oBAAA,MAAM,CAACC,QAAAA,CAAS,GAAGH,MAAAA,CAAOC,IAAI,CAACC,SAAAA,CAAAA;oBAC/B,MAAMzD,KAAAA,GAAQyD,SAAS,CAACC,QAAS,CAAA;oBAEjC,OAAO,EAAEA,QAAavF,KAAAA,IAAAA,CAAKgC,MAAM,IAAIH,KAAAA,KAAU7B,IAAK6B,CAAAA,KAAK,CAAD;AAC1D;gBAEA,OAAO,IAAA;aACF,MAAA;gBACL,MAAMyD,SAAAA,GAAYtD,MAAM,CAACmD,aAAc,CAAA;AACvC,gBAAA,MAAM,CAACI,QAAAA,CAAS,GAAGH,MAAAA,CAAOC,IAAI,CAACC,SAAAA,CAAAA;gBAC/B,MAAMzD,KAAAA,GAAQyD,SAAS,CAACC,QAAS,CAAA;gBAEjC,OAAO,EAAEA,QAAavF,KAAAA,IAAAA,CAAKgC,MAAM,IAAIH,KAAAA,KAAU7B,IAAK6B,CAAAA,KAAK,CAAD;AAC1D;AACF,SAAA,CAAA;QAEAJ,QAAS,CAAA;YAAEc,OAAS,EAAA;gBAAEC,IAAM0C,EAAAA;AAAY,aAAA;YAAGvC,IAAM,EAAA;AAAE,SAAA,CAAA;AACrD,KAAA;AAEA,IAAA,IAAI,CAACnB,KAAAA,EAAOe,OAASC,EAAAA,IAAAA,EAAMb,MAAQ,EAAA;QACjC,OAAO,IAAA;AACT;IAEA,qBACEtB,GAAA,CAAAmF,QAAA,EAAA;kBACGhE,KAAOe,EAAAA,OAAAA,EAASC,IAAM0B,EAAAA,GAAAA,CAAI,CAACuB,WAAAA,GAAAA;AAC1B,YAAA,MAAM,CAACN,aAAAA,CAAc,GAAGC,MAAAA,CAAOC,IAAI,CAACI,WAAAA,CAAAA;YACpC,MAAMzD,MAAAA,GAASvC,QAAQ0C,IAAI,CAAC,CAAC,EAAEC,IAAI,EAAE,GAAKA,IAAS+C,KAAAA,aAAAA,CAAAA;YACnD,MAAMG,SAAAA,GAAYG,WAAW,CAACN,aAAc,CAAA;AAE5C,YAAA,IAAI,CAACnD,MAAU,IAAA,OAAOsD,SAAc,KAAA,QAAA,IAAYA,cAAc,IAAM,EAAA;gBAClE,OAAO,IAAA;AACT;YAEA,IAAItD,MAAAA,CAAOS,IAAI,KAAK,UAAY,EAAA;AAC9B,gBAAA,MAAMiD,cAAcJ,SAAS,CAACtD,OAAOU,SAAS,EAAEN,QAAQ,IAAK,CAAA;gBAE7D,IAAI,OAAOsD,gBAAgB,QAAU,EAAA;AACnC,oBAAA,MAAM,CAACH,QAAAA,CAAS,GAAGH,MAAAA,CAAOC,IAAI,CAACK,WAAAA,CAAAA;oBAC/B,MAAM7D,KAAAA,GAAQ6D,WAAW,CAACH,QAAS,CAAA;AACnC,oBAAA,qBACElF,GAACsF,CAAAA,YAAAA,EAAAA;AAEE,wBAAA,GAAG3D,MAAM;wBACV4D,OAASX,EAAAA,WAAAA;wBACTM,QAAUA,EAAAA,QAAAA;wBACV1D,KAAOA,EAAAA;uBAJF,CAAC,EAAEsD,cAAc,CAAC,EAAEI,SAAS,CAAC,EAAE1D,MAAM,CAAC,CAAA;AAOlD;gBAEA,OAAO,IAAA;aACF,MAAA;AACL,gBAAA,MAAM,CAAC0D,QAAAA,CAAS,GAAGH,MAAAA,CAAOC,IAAI,CAACC,SAAAA,CAAAA;gBAC/B,MAAMzD,KAAAA,GAAQyD,SAAS,CAACC,QAAS,CAAA;AAEjC;;;cAIA,IAAI,OAAO1D,KAAAA,KAAU,QAAU,EAAA;oBAC7B,OAAO,IAAA;AACT;AAEA,gBAAA,qBACExB,GAACsF,CAAAA,YAAAA,EAAAA;AAEE,oBAAA,GAAG3D,MAAM;oBACV4D,OAASX,EAAAA,WAAAA;oBACTM,QAAUA,EAAAA,QAAAA;oBACV1D,KAAOA,EAAAA;mBAJF,CAAC,EAAEsD,cAAc,CAAC,EAAEI,SAAS,CAAC,EAAE1D,MAAM,CAAC,CAAA;AAOlD;AACF,SAAA;;AAGN,CAAA;AAQA,MAAM8D,YAAAA,GAAe,CAAC,EACpBjC,KAAK,EACLhD,KAAK,EACLgC,SAAS,EACTN,IAAI,EACJwD,OAAO,EACPL,QAAQ,EACR9F,OAAO,EACPoC,KAAK,EACL,GAAGG,MACe,EAAA,GAAA;IAClB,MAAM,EAAEpB,aAAa,EAAEiF,UAAU,EAAEC,UAAU,EAAEC,YAAY,EAAE,GAAGlF,OAAAA,EAAAA;AAEhE,IAAA,MAAMoE,WAAc,GAAA,IAAA;QAClBW,OAAQ,CAAA;AAAExD,YAAAA,IAAAA;AAAMP,YAAAA,KAAAA;YAAOG,MAAQuD,EAAAA;AAAS,SAAA,CAAA;AAC1C,KAAA;AAEA,IAAA,MAAM9C,OAAOC,SAAWD,EAAAA,IAAAA,GAAOC,UAAUD,IAAI,GAAGT,OAAOS,IAAI;AAE3D,IAAA,IAAIuD,cAAyBnE,GAAAA,KAAAA;IAE7B,OAAQY,IAAAA;QACN,KAAK,MAAA;AACHuD,YAAAA,cAAAA,GAAiBH,WAAWhE,KAAO,EAAA;gBAAEoE,SAAW,EAAA;AAAO,aAAA,CAAA;AACvD,YAAA;QACF,KAAK,UAAA;AACHD,YAAAA,cAAAA,GAAiBH,WAAWhE,KAAO,EAAA;gBAAEoE,SAAW,EAAA,MAAA;gBAAQC,SAAW,EAAA;AAAQ,aAAA,CAAA;AAC3E,YAAA;QACF,KAAK,MAAA;AACH,YAAA,MAAM,CAACC,IAAMC,EAAAA,MAAAA,CAAO,GAAGvE,KAAAA,CAAMwE,KAAK,CAAC,GAAA,CAAA;AACnC,YAAA,MAAMC,OAAO,IAAIC,IAAAA,EAAAA;YACjBD,IAAKE,CAAAA,QAAQ,CAACC,MAAON,CAAAA,IAAAA,CAAAA,CAAAA;YACrBG,IAAKI,CAAAA,UAAU,CAACD,MAAOL,CAAAA,MAAAA,CAAAA,CAAAA;AAEvBJ,YAAAA,cAAAA,GAAiBF,WAAWQ,IAAM,EAAA;gBAChCH,IAAM,EAAA,SAAA;gBACNC,MAAQ,EAAA;AACV,aAAA,CAAA;AACA,YAAA;QACF,KAAK,OAAA;QACL,KAAK,SAAA;QACL,KAAK,YAAA;QACL,KAAK,SAAA;AACHJ,YAAAA,cAAAA,GAAiBD,aAAaU,MAAO5E,CAAAA,KAAAA,CAAAA,CAAAA;AACrC,YAAA;AACJ;;AAGA,IAAA,IAAI6B,SAASjE,OAAS,EAAA;;AAEpB,QAAA,MAAMkH,cAAiBlH,GAAAA,OAAAA,CAAQ0C,IAAI,CAAC,CAACyE,MAAAA,GAAAA;YACnC,OAAQ,CAAA,OAAOA,MAAAA,KAAW,WAAWA,MAASA,GAAAA,MAAAA,CAAO/E,KAAI,MAAOA,KAAAA;AAClE,SAAA,CAAA;QAEAmE,cAAiBW,GAAAA,cAAAA,GACb,OAAOA,cAAAA,KAAmB,QACxBA,GAAAA,cAAAA,GACCA,eAAejG,KAAK,IAAIiG,cAAe9E,CAAAA,KAAK,GAC/CA,KAAAA;AACN;AAEA,IAAA,MAAMgF,UAAU,CAAC,EAAEnG,KAAM,CAAA,CAAC,EAAEE,aAAc,CAAA;AACxCQ,QAAAA,EAAAA,EAAI,CAAC,sCAAsC,EAAEmE,QAAAA,CAAS,CAAC;QACvDlE,cAAgBkE,EAAAA;KACf,CAAA,CAAA,CAAC,EAAEA,QAAa,KAAA,OAAA,IAAWA,aAAa,UAAaS,GAAAA,cAAAA,GAAiB,GAAG,CAAC;AAE7E,IAAA,qBACE3F,GAACyG,CAAAA,GAAAA,EAAAA;QAAI/D,OAAS,EAAA,CAAA;QAAG6C,OAASX,EAAAA,WAAAA;AAAa8B,QAAAA,IAAAA,gBAAM1G,GAAC2G,CAAAA,KAAAA,EAAAA,EAAAA,CAAAA;AAC3CH,QAAAA,QAAAA,EAAAA;;AAGP,CAAA;AAEA;;AAEkG,2GAE5FI,OAAU,GAAA;AACdjC,IAAAA,IAAAA;IACA1E,OAASgB,EAAAA,WAAAA;AACTjC,IAAAA,IAAAA;AACAkB,IAAAA;AACF;;;;"}
@@ -26,7 +26,18 @@ function _interopNamespaceDefault(e) {
26
26
 
27
27
  var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
28
28
 
29
- const [GuidedTourProviderImpl, unstableUseGuidedTour] = Context.createContext('UnstableGuidedTour');
29
+ const [GuidedTourProviderImpl, useGuidedTour] = Context.createContext('GuidedTour');
30
+ const getInitialTourState = (tours)=>{
31
+ return Object.keys(tours).reduce((acc, tourName)=>{
32
+ const tourLength = Object.keys(tours[tourName]).length;
33
+ acc[tourName] = {
34
+ currentStep: 0,
35
+ length: tourLength,
36
+ isCompleted: false
37
+ };
38
+ return acc;
39
+ }, {});
40
+ };
30
41
  function reducer(state, action) {
31
42
  return immer.produce(state, (draft)=>{
32
43
  if (action.type === 'next_step') {
@@ -50,58 +61,22 @@ function reducer(state, action) {
50
61
  }
51
62
  if (action.type === 'reset_all_tours') {
52
63
  draft.enabled = true;
53
- /**
54
- * TODO:
55
- * This is hard coded for a quick fix
56
- * It will be fixed properly with a dynamic solution in a follow up PR
57
- */ draft.tours = {
58
- contentTypeBuilder: {
59
- currentStep: 0,
60
- length: 5,
61
- isCompleted: false
62
- },
63
- contentManager: {
64
- currentStep: 0,
65
- length: 4,
66
- isCompleted: false
67
- },
68
- apiTokens: {
69
- currentStep: 0,
70
- length: 4,
71
- isCompleted: false
72
- },
73
- strapiCloud: {
74
- currentStep: 0,
75
- length: 0,
76
- isCompleted: false
77
- }
78
- };
64
+ draft.tours = getInitialTourState(Tours.tours);
79
65
  draft.completedActions = [];
80
66
  }
81
67
  });
82
68
  }
83
69
  const STORAGE_KEY = 'STRAPI_GUIDED_TOUR';
84
- const UnstableGuidedTourContext = ({ children, enabled = true })=>{
85
- const initialTourState = Object.keys(Tours.tours).reduce((acc, tourName)=>{
86
- const tourLength = Object.keys(Tours.tours[tourName]).length;
87
- acc[tourName] = {
88
- currentStep: 0,
89
- length: tourLength,
90
- isCompleted: false
91
- };
92
- return acc;
93
- }, {});
70
+ const GuidedTourContext = ({ children, enabled = true })=>{
94
71
  const [tours, setTours] = usePersistentState.usePersistentState(STORAGE_KEY, {
95
- tours: initialTourState,
72
+ tours: getInitialTourState(Tours.tours),
96
73
  enabled,
97
74
  completedActions: []
98
75
  });
99
76
  const [state, dispatch] = React__namespace.useReducer(reducer, tours);
100
77
  // Sync local storage
101
78
  React__namespace.useEffect(()=>{
102
- if (window.strapi.future.isEnabled('unstableGuidedTour')) {
103
- setTours(state);
104
- }
79
+ setTours(state);
105
80
  }, [
106
81
  state,
107
82
  setTours
@@ -113,7 +88,7 @@ const UnstableGuidedTourContext = ({ children, enabled = true })=>{
113
88
  });
114
89
  };
115
90
 
116
- exports.UnstableGuidedTourContext = UnstableGuidedTourContext;
91
+ exports.GuidedTourContext = GuidedTourContext;
117
92
  exports.reducer = reducer;
118
- exports.unstableUseGuidedTour = unstableUseGuidedTour;
93
+ exports.useGuidedTour = useGuidedTour;
119
94
  //# sourceMappingURL=Context.js.map
@@ -0,0 +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 { GetGuidedTourMeta } from '../../../../shared/contracts/admin';\nimport { usePersistentState } from '../../hooks/usePersistentState';\nimport { createContext } from '../Context';\n\nimport { type Tours, tours as guidedTours } from './Tours';\n\n/* -------------------------------------------------------------------------------------------------\n * GuidedTourProvider\n * -----------------------------------------------------------------------------------------------*/\n\ntype ValidTourName = keyof Tours;\n\nexport type ExtendedCompletedActions = (\n | GetGuidedTourMeta.Response['data']['completedActions'][number]\n | 'didCopyApiToken'\n)[];\n\ntype Action =\n | {\n type: 'next_step';\n payload: ValidTourName;\n }\n | {\n type: 'skip_tour';\n payload: ValidTourName;\n }\n | {\n type: 'set_completed_actions';\n payload: ExtendedCompletedActions;\n }\n | {\n type: 'skip_all_tours';\n }\n | {\n type: 'reset_all_tours';\n };\n\ntype Tour = Record<ValidTourName, { currentStep: number; length: number; isCompleted: boolean }>;\ntype State = {\n tours: Tour;\n enabled: boolean;\n completedActions: ExtendedCompletedActions;\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 const tourLength = Object.keys(tours[tourName as ValidTourName]).length;\n acc[tourName as ValidTourName] = {\n currentStep: 0,\n length: tourLength,\n isCompleted: false,\n };\n\n return acc;\n }, {} as Tour);\n};\n\nfunction reducer(state: State, action: Action): State {\n return produce(state, (draft) => {\n if (action.type === 'next_step') {\n const nextStep = draft.tours[action.payload].currentStep + 1;\n draft.tours[action.payload].currentStep = nextStep;\n draft.tours[action.payload].isCompleted = nextStep === draft.tours[action.payload].length;\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 === 'skip_all_tours') {\n draft.enabled = false;\n }\n\n if (action.type === 'reset_all_tours') {\n draft.enabled = true;\n draft.tours = getInitialTourState(guidedTours);\n draft.completedActions = [];\n }\n });\n}\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 [tours, setTours] = usePersistentState<State>(STORAGE_KEY, {\n tours: getInitialTourState(guidedTours),\n enabled,\n completedActions: [],\n });\n const [state, dispatch] = React.useReducer(reducer, tours);\n\n // Sync local storage\n React.useEffect(() => {\n setTours(state);\n }, [state, setTours]);\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 };\n"],"names":["GuidedTourProviderImpl","useGuidedTour","createContext","getInitialTourState","tours","Object","keys","reduce","acc","tourName","tourLength","length","currentStep","isCompleted","reducer","state","action","produce","draft","type","nextStep","payload","completedActions","Set","enabled","guidedTours","STORAGE_KEY","GuidedTourContext","children","setTours","usePersistentState","dispatch","React","useReducer","useEffect","_jsx"],"mappings":"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"}
@@ -5,7 +5,18 @@ import { usePersistentState } from '../../hooks/usePersistentState.mjs';
5
5
  import { createContext } from '../Context.mjs';
6
6
  import { tours } from './Tours.mjs';
7
7
 
8
- const [GuidedTourProviderImpl, unstableUseGuidedTour] = createContext('UnstableGuidedTour');
8
+ const [GuidedTourProviderImpl, useGuidedTour] = createContext('GuidedTour');
9
+ const getInitialTourState = (tours)=>{
10
+ return Object.keys(tours).reduce((acc, tourName)=>{
11
+ const tourLength = Object.keys(tours[tourName]).length;
12
+ acc[tourName] = {
13
+ currentStep: 0,
14
+ length: tourLength,
15
+ isCompleted: false
16
+ };
17
+ return acc;
18
+ }, {});
19
+ };
9
20
  function reducer(state, action) {
10
21
  return produce(state, (draft)=>{
11
22
  if (action.type === 'next_step') {
@@ -29,58 +40,22 @@ function reducer(state, action) {
29
40
  }
30
41
  if (action.type === 'reset_all_tours') {
31
42
  draft.enabled = true;
32
- /**
33
- * TODO:
34
- * This is hard coded for a quick fix
35
- * It will be fixed properly with a dynamic solution in a follow up PR
36
- */ draft.tours = {
37
- contentTypeBuilder: {
38
- currentStep: 0,
39
- length: 5,
40
- isCompleted: false
41
- },
42
- contentManager: {
43
- currentStep: 0,
44
- length: 4,
45
- isCompleted: false
46
- },
47
- apiTokens: {
48
- currentStep: 0,
49
- length: 4,
50
- isCompleted: false
51
- },
52
- strapiCloud: {
53
- currentStep: 0,
54
- length: 0,
55
- isCompleted: false
56
- }
57
- };
43
+ draft.tours = getInitialTourState(tours);
58
44
  draft.completedActions = [];
59
45
  }
60
46
  });
61
47
  }
62
48
  const STORAGE_KEY = 'STRAPI_GUIDED_TOUR';
63
- const UnstableGuidedTourContext = ({ children, enabled = true })=>{
64
- const initialTourState = Object.keys(tours).reduce((acc, tourName)=>{
65
- const tourLength = Object.keys(tours[tourName]).length;
66
- acc[tourName] = {
67
- currentStep: 0,
68
- length: tourLength,
69
- isCompleted: false
70
- };
71
- return acc;
72
- }, {});
49
+ const GuidedTourContext = ({ children, enabled = true })=>{
73
50
  const [tours$1, setTours] = usePersistentState(STORAGE_KEY, {
74
- tours: initialTourState,
51
+ tours: getInitialTourState(tours),
75
52
  enabled,
76
53
  completedActions: []
77
54
  });
78
55
  const [state, dispatch] = React.useReducer(reducer, tours$1);
79
56
  // Sync local storage
80
57
  React.useEffect(()=>{
81
- if (window.strapi.future.isEnabled('unstableGuidedTour')) {
82
- setTours(state);
83
- }
58
+ setTours(state);
84
59
  }, [
85
60
  state,
86
61
  setTours
@@ -92,5 +67,5 @@ const UnstableGuidedTourContext = ({ children, enabled = true })=>{
92
67
  });
93
68
  };
94
69
 
95
- export { UnstableGuidedTourContext, reducer, unstableUseGuidedTour };
70
+ export { GuidedTourContext, reducer, useGuidedTour };
96
71
  //# sourceMappingURL=Context.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Context.mjs","sources":["../../../../../../admin/src/components/GuidedTour/Context.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { produce } from 'immer';\n\nimport { GetGuidedTourMeta } from '../../../../shared/contracts/admin';\nimport { usePersistentState } from '../../hooks/usePersistentState';\nimport { createContext } from '../Context';\n\nimport { type Tours, tours as guidedTours } from './Tours';\n\n/* -------------------------------------------------------------------------------------------------\n * GuidedTourProvider\n * -----------------------------------------------------------------------------------------------*/\n\ntype ValidTourName = keyof Tours;\n\nexport type ExtendedCompletedActions = (\n | GetGuidedTourMeta.Response['data']['completedActions'][number]\n | 'didCopyApiToken'\n)[];\n\ntype Action =\n | {\n type: 'next_step';\n payload: ValidTourName;\n }\n | {\n type: 'skip_tour';\n payload: ValidTourName;\n }\n | {\n type: 'set_completed_actions';\n payload: ExtendedCompletedActions;\n }\n | {\n type: 'skip_all_tours';\n }\n | {\n type: 'reset_all_tours';\n };\n\ntype Tour = Record<ValidTourName, { currentStep: number; length: number; isCompleted: boolean }>;\ntype State = {\n tours: Tour;\n enabled: boolean;\n completedActions: ExtendedCompletedActions;\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 const tourLength = Object.keys(tours[tourName as ValidTourName]).length;\n acc[tourName as ValidTourName] = {\n currentStep: 0,\n length: tourLength,\n isCompleted: false,\n };\n\n return acc;\n }, {} as Tour);\n};\n\nfunction reducer(state: State, action: Action): State {\n return produce(state, (draft) => {\n if (action.type === 'next_step') {\n const nextStep = draft.tours[action.payload].currentStep + 1;\n draft.tours[action.payload].currentStep = nextStep;\n draft.tours[action.payload].isCompleted = nextStep === draft.tours[action.payload].length;\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 === 'skip_all_tours') {\n draft.enabled = false;\n }\n\n if (action.type === 'reset_all_tours') {\n draft.enabled = true;\n draft.tours = getInitialTourState(guidedTours);\n draft.completedActions = [];\n }\n });\n}\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 [tours, setTours] = usePersistentState<State>(STORAGE_KEY, {\n tours: getInitialTourState(guidedTours),\n enabled,\n completedActions: [],\n });\n const [state, dispatch] = React.useReducer(reducer, tours);\n\n // Sync local storage\n React.useEffect(() => {\n setTours(state);\n }, [state, setTours]);\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 };\n"],"names":["GuidedTourProviderImpl","useGuidedTour","createContext","getInitialTourState","tours","Object","keys","reduce","acc","tourName","tourLength","length","currentStep","isCompleted","reducer","state","action","produce","draft","type","nextStep","payload","completedActions","Set","enabled","guidedTours","STORAGE_KEY","GuidedTourContext","children","setTours","usePersistentState","dispatch","React","useReducer","useEffect","_jsx"],"mappings":"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"}
@@ -127,13 +127,13 @@ const TASK_CONTENT = [
127
127
  })
128
128
  });
129
129
  };
130
- const UnstableGuidedTourOverview = ()=>{
130
+ const GuidedTourHomepageOverview = ()=>{
131
131
  const { formatMessage } = reactIntl.useIntl();
132
132
  const { trackUsage } = Tracking.useTracking();
133
- const tours = Context.unstableUseGuidedTour('Overview', (s)=>s.state.tours);
134
- const dispatch = Context.unstableUseGuidedTour('Overview', (s)=>s.dispatch);
135
- const enabled = Context.unstableUseGuidedTour('Overview', (s)=>s.state.enabled);
136
- const completedActions = Context.unstableUseGuidedTour('Overview', (s)=>s.state.completedActions);
133
+ const tours = Context.useGuidedTour('Overview', (s)=>s.state.tours);
134
+ const dispatch = Context.useGuidedTour('Overview', (s)=>s.dispatch);
135
+ const enabled = Context.useGuidedTour('Overview', (s)=>s.state.enabled);
136
+ const completedActions = Context.useGuidedTour('Overview', (s)=>s.state.completedActions);
137
137
  const { data: guidedTourMeta } = admin.useGetGuidedTourMetaQuery();
138
138
  const tourNames = Object.keys(tours);
139
139
  const completedTours = tourNames.filter((tourName)=>tours[tourName].isCompleted);
@@ -175,6 +175,7 @@ const UnstableGuidedTourOverview = ()=>{
175
175
  paddingTop: 4,
176
176
  children: [
177
177
  /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
178
+ tag: "h2",
178
179
  fontSize: "20px",
179
180
  fontWeight: "bold",
180
181
  children: formatMessage({
@@ -246,6 +247,7 @@ const UnstableGuidedTourOverview = ()=>{
246
247
  })
247
248
  }),
248
249
  /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
250
+ tag: "ul",
249
251
  width: "100%",
250
252
  borderColor: "neutral150",
251
253
  marginTop: 4,
@@ -255,6 +257,8 @@ const UnstableGuidedTourOverview = ()=>{
255
257
  const tour = tours[tourName];
256
258
  const isLinkDisabled = tourName !== 'contentTypeBuilder' && !completedActions.includes('didCreateContentTypeSchema');
257
259
  return /*#__PURE__*/ jsxRuntime.jsx(TourTaskContainer, {
260
+ tag: "li",
261
+ "aria-label": formatMessage(task.title),
258
262
  alignItems: "center",
259
263
  justifyContent: "space-between",
260
264
  children: tour.isCompleted ? /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
@@ -324,5 +328,5 @@ const UnstableGuidedTourOverview = ()=>{
324
328
  });
325
329
  };
326
330
 
327
- exports.UnstableGuidedTourOverview = UnstableGuidedTourOverview;
331
+ exports.GuidedTourHomepageOverview = GuidedTourHomepageOverview;
328
332
  //# sourceMappingURL=Overview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Overview.js","sources":["../../../../../../admin/src/components/GuidedTour/Overview.tsx"],"sourcesContent":["import { Box, Button, Dialog, Flex, Link, ProgressBar, Typography } from '@strapi/design-system';\nimport { CheckCircle, ChevronRight } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { NavLink } from 'react-router-dom';\nimport { styled, useTheme } from 'styled-components';\n\nimport { useTracking } from '../../features/Tracking';\nimport { useGetGuidedTourMetaQuery } from '../../services/admin';\nimport { ConfirmDialog } from '../ConfirmDialog';\n\nimport { type ValidTourName, useGuidedTour } from './Context';\n\n/* -------------------------------------------------------------------------------------------------\n * Styled\n * -----------------------------------------------------------------------------------------------*/\n\nconst StyledProgressBar = styled(ProgressBar)`\n width: 100%;\n background-color: ${({ theme }) => theme.colors.neutral150};\n > div {\n background-color: ${({ theme }) => theme.colors.success500};\n }\n`;\n\nconst Container = styled(Flex)`\n width: 100%;\n border-radius: ${({ theme }) => theme.borderRadius};\n background-color: ${({ theme }) => theme.colors.neutral0};\n box-shadow: ${({ theme }) => theme.shadows.tableShadow};\n align-items: stretch;\n`;\n\nconst ContentSection = styled(Flex)`\n flex: 1;\n padding: ${({ theme }) => theme.spaces[8]};\n`;\n\nconst VerticalSeparator = styled.div`\n width: 1px;\n background-color: ${({ theme }) => theme.colors.neutral150};\n`;\n\nconst TourTaskContainer = styled(Flex)`\n &:not(:last-child) {\n border-bottom: ${({ theme }) => `1px solid ${theme.colors.neutral150}`};\n }\n padding: ${({ theme }) => theme.spaces[4]};\n`;\n\nconst TodoCircle = styled(Box)`\n border: 1px solid ${({ theme }) => theme.colors.neutral300};\n border-radius: 50%;\n height: 13px;\n width: 13px;\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * Constants\n * -----------------------------------------------------------------------------------------------*/\n\nconst LINK_LABEL = {\n id: 'tours.overview.tour.link',\n defaultMessage: 'Start',\n};\nconst DONE_LABEL = {\n id: 'tours.overview.tour.done',\n defaultMessage: 'Done',\n};\n\nconst TASK_CONTENT = [\n {\n tourName: 'contentTypeBuilder',\n link: {\n label: LINK_LABEL,\n to: '/plugins/content-type-builder',\n },\n title: {\n id: 'tours.overview.contentTypeBuilder.label',\n defaultMessage: 'Create your schema',\n },\n done: DONE_LABEL,\n },\n {\n tourName: 'contentManager',\n link: {\n label: LINK_LABEL,\n to: '/content-manager',\n },\n title: {\n id: 'tours.overview.contentManager.label',\n defaultMessage: 'Create and publish content',\n },\n done: DONE_LABEL,\n },\n {\n tourName: 'apiTokens',\n link: {\n label: LINK_LABEL,\n to: '/settings/api-tokens',\n },\n title: {\n id: 'tours.overview.apiTokens.label',\n defaultMessage: 'Create and copy an API token',\n },\n done: DONE_LABEL,\n },\n {\n tourName: 'strapiCloud',\n link: {\n label: {\n id: 'tours.overview.strapiCloud.link',\n defaultMessage: 'Read documentation',\n },\n to: 'https://docs.strapi.io/cloud/intro',\n },\n title: {\n id: 'tours.overview.strapiCloud.label',\n defaultMessage: 'Deploy your application to Strapi Cloud',\n },\n done: DONE_LABEL,\n isExternal: true,\n },\n];\n\n/* -------------------------------------------------------------------------------------------------\n * GuidedTourOverview\n * -----------------------------------------------------------------------------------------------*/\n\nconst WaveIcon = () => {\n const theme = useTheme();\n return (\n <svg width=\"26\" height=\"27\" viewBox=\"0 0 26 27\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M24.4138 9.30762C25.1565 10.5578 25.6441 11.9429 25.8481 13.3827C26.0522 14.8225 25.9687 16.2885 25.6026 17.6958C25.2365 19.1032 24.5949 20.4239 23.7151 21.5818C22.8352 22.7396 21.7345 23.7114 20.4766 24.4411C19.2188 25.1708 17.8287 25.6439 16.3868 25.8329C14.945 26.022 13.48 25.9232 12.0765 25.5424C10.673 25.1616 9.35903 24.5063 8.21045 23.6144C7.06188 22.7226 6.10154 21.6118 5.385 20.3464L0.268755 11.4851C0.0253867 11.0275 -0.0308559 10.4934 0.111878 9.99514C0.254612 9.49692 0.585176 9.07356 1.03392 8.81426C1.48266 8.55497 2.01453 8.47999 2.51746 8.60514C3.02039 8.73028 3.45511 9.04576 3.73001 9.48512L6.05 13.5001C6.11567 13.6139 6.20309 13.7136 6.30729 13.7936C6.41148 13.8735 6.53041 13.9322 6.65728 13.9662C6.78415 14.0002 6.91647 14.0089 7.04669 13.9918C7.17692 13.9746 7.3025 13.932 7.41625 13.8664C7.53001 13.8007 7.62972 13.7133 7.70969 13.6091C7.78966 13.5049 7.84833 13.386 7.88234 13.2591C7.91635 13.1322 7.92504 12.9999 7.90791 12.8697C7.89078 12.7395 7.84817 12.6139 7.78251 12.5001L2.87501 4.00012C2.63164 3.54255 2.57539 3.00837 2.71813 2.51014C2.86086 2.01192 3.19143 1.58856 3.64017 1.32926C4.08891 1.06997 4.62078 0.994994 5.12371 1.12014C5.62664 1.24528 6.06136 1.56077 6.33626 2.00012L11.25 10.5001C11.3137 10.6175 11.4003 10.7209 11.5046 10.8042C11.609 10.8876 11.7289 10.9492 11.8575 10.9854C11.986 11.0216 12.1205 11.0318 12.253 11.0152C12.3855 10.9986 12.5133 10.9556 12.629 10.8888C12.7446 10.8221 12.8457 10.7328 12.9263 10.6263C13.0068 10.5198 13.0653 10.3982 13.0981 10.2688C13.1309 10.1394 13.1375 10.0047 13.1174 9.87264C13.0974 9.74062 13.0511 9.61395 12.9813 9.50012L9.23125 3.00012C8.9738 2.54125 8.90753 1.99941 9.04682 1.49203C9.18612 0.984641 9.51974 0.552582 9.97539 0.289483C10.431 0.0263834 10.972 -0.0465606 11.4811 0.0864587C11.9902 0.219478 12.4263 0.547745 12.695 1.00012L17.75 9.76512C16.6322 10.8916 16.0035 12.4132 16 14.0001C15.9963 15.2989 16.4177 16.5633 17.2 17.6001C17.278 17.7074 17.3766 17.7981 17.49 17.867C17.6034 17.9358 17.7293 17.9814 17.8605 18.001C17.9917 18.0207 18.1255 18.0141 18.2541 17.9816C18.3827 17.9491 18.5035 17.8913 18.6096 17.8116C18.7156 17.7319 18.8048 17.6319 18.8718 17.5175C18.9388 17.403 18.9824 17.2763 19 17.1448C19.0176 17.0134 19.0089 16.8797 18.9743 16.7516C18.9398 16.6236 18.8801 16.5036 18.7988 16.3989C18.4824 15.9765 18.2528 15.4958 18.1231 14.9843C17.9934 14.4729 17.9661 13.9408 18.0429 13.4188C18.1197 12.8967 18.2991 12.3951 18.5706 11.9426C18.8421 11.4902 19.2005 11.096 19.625 10.7826C19.8224 10.6365 19.9592 10.4229 20.0092 10.1825C20.0592 9.94202 20.019 9.69157 19.8963 9.47887L18.4638 7.00012C18.2063 6.54125 18.14 5.99941 18.2793 5.49203C18.4186 4.98464 18.7522 4.55258 19.2079 4.28948C19.6635 4.02638 20.2045 3.95344 20.7136 4.08646C21.2227 4.21948 21.6588 4.54774 21.9275 5.00012L24.4138 9.30762ZM20.7425 2.18262C21.4432 2.36725 22.1001 2.68931 22.6752 3.13008C23.2503 3.57084 23.7321 4.12153 24.0925 4.75012L24.1338 4.82137C24.2664 5.05111 24.4848 5.21877 24.741 5.28745C24.8679 5.32146 25.0002 5.33015 25.1304 5.31302C25.2607 5.29589 25.3862 5.25328 25.5 5.18762C25.6138 5.12196 25.7135 5.03453 25.7934 4.93034C25.8734 4.82614 25.9321 4.70721 25.9661 4.58035C26.0001 4.45348 26.0088 4.32115 25.9917 4.19093C25.9745 4.0607 25.9319 3.93513 25.8663 3.82137L25.825 3.75012C25.3335 2.89321 24.6767 2.14252 23.8926 1.54167C23.1085 0.940821 22.2128 0.501801 21.2575 0.250119C21.002 0.184041 20.7307 0.221665 20.5028 0.354786C20.2749 0.487908 20.1088 0.705731 20.0409 0.960766C19.9729 1.2158 20.0085 1.48736 20.14 1.71625C20.2714 1.94513 20.488 2.11277 20.7425 2.18262ZM6.9475 25.2151C5.65171 24.1925 4.56342 22.9315 3.74126 21.5001C3.67559 21.3864 3.58817 21.2866 3.48397 21.2067C3.37978 21.1267 3.26085 21.068 3.13398 21.034C3.00711 21 2.87479 20.9913 2.74456 21.0085C2.61434 21.0256 2.48876 21.0682 2.37501 21.1339C2.26125 21.1995 2.16154 21.287 2.08157 21.3911C2.00159 21.4953 1.94293 21.6143 1.90892 21.7411C1.87491 21.868 1.86622 22.0003 1.88335 22.1306C1.90048 22.2608 1.94309 22.3864 2.00875 22.5001C2.95782 24.1511 4.21368 25.6056 5.70875 26.7851C5.91728 26.9455 6.18063 27.0173 6.44172 26.9849C6.70282 26.9525 6.94062 26.8185 7.10359 26.612C7.26655 26.4054 7.34156 26.143 7.31234 25.8815C7.28313 25.62 7.15204 25.3806 6.9475 25.2151Z\"\n fill={theme.colors.primary600}\n />\n </svg>\n );\n};\n\nexport const GuidedTourHomepageOverview = () => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n\n const tours = useGuidedTour('Overview', (s) => s.state.tours);\n const dispatch = useGuidedTour('Overview', (s) => s.dispatch);\n const enabled = useGuidedTour('Overview', (s) => s.state.enabled);\n const completedActions = useGuidedTour('Overview', (s) => s.state.completedActions);\n const { data: guidedTourMeta } = useGetGuidedTourMetaQuery();\n\n const tourNames = Object.keys(tours) as ValidTourName[];\n const completedTours = tourNames.filter((tourName) => tours[tourName].isCompleted);\n const completionPercentage =\n tourNames.length > 0 ? Math.round((completedTours.length / tourNames.length) * 100) : 0;\n\n if (!guidedTourMeta?.data.isFirstSuperAdminUser || !enabled) {\n return null;\n }\n\n const handleConfirmDialog = () => {\n trackUsage('didSkipGuidedTour', { name: 'all' });\n dispatch({ type: 'skip_all_tours' });\n };\n\n const handleClickStrapiCloud = (tourName: ValidTourName) => {\n trackUsage('didCompleteGuidedTour', { name: tourName });\n dispatch({ type: 'skip_tour', payload: tourName });\n };\n\n return (\n <Container tag=\"section\" gap={0}>\n {/* Greeting */}\n <ContentSection direction=\"column\" gap={2} alignItems=\"start\">\n <WaveIcon />\n <Flex direction=\"column\" alignItems=\"start\" gap={1} paddingTop={4}>\n <Typography tag=\"h2\" fontSize=\"20px\" fontWeight=\"bold\">\n {formatMessage({\n id: 'tours.overview.title',\n defaultMessage: 'Discover your application!',\n })}\n </Typography>\n <Typography>\n {formatMessage({\n id: 'tours.overview.subtitle',\n defaultMessage: 'Follow the guided tour to get the most out of Strapi.',\n })}\n </Typography>\n </Flex>\n <Flex\n direction=\"column\"\n alignItems=\"flex-start\"\n width=\"100%\"\n paddingTop={5}\n paddingBottom={8}\n gap={2}\n >\n <Typography variant=\"pi\">{completionPercentage}%</Typography>\n <StyledProgressBar value={completionPercentage} />\n </Flex>\n <Dialog.Root>\n <Dialog.Trigger>\n <Button variant=\"tertiary\">\n {formatMessage({\n id: 'tours.overview.close',\n defaultMessage: 'Close guided tour',\n })}\n </Button>\n </Dialog.Trigger>\n <ConfirmDialog onConfirm={handleConfirmDialog}>\n {formatMessage({\n id: 'tours.overview.close.description',\n defaultMessage: 'Are you sure you want to close the guided tour?',\n })}\n </ConfirmDialog>\n </Dialog.Root>\n </ContentSection>\n <VerticalSeparator />\n {/* Task List */}\n <ContentSection direction=\"column\" alignItems=\"start\">\n <Typography variant=\"omega\" fontWeight=\"bold\">\n {formatMessage({\n id: 'tours.overview.tasks',\n defaultMessage: 'Your tasks',\n })}\n </Typography>\n <Box tag=\"ul\" width=\"100%\" borderColor=\"neutral150\" marginTop={4} hasRadius>\n {TASK_CONTENT.map((task) => {\n const tourName = task.tourName as ValidTourName;\n const tour = tours[tourName];\n const isLinkDisabled =\n tourName !== 'contentTypeBuilder' &&\n !completedActions.includes('didCreateContentTypeSchema');\n\n return (\n <TourTaskContainer\n tag=\"li\"\n aria-label={formatMessage(task.title)}\n key={tourName}\n alignItems=\"center\"\n justifyContent=\"space-between\"\n >\n {tour.isCompleted ? (\n <>\n <Flex gap={2}>\n <CheckCircle fill=\"success500\" />\n <Typography style={{ textDecoration: 'line-through' }} textColor=\"neutral500\">\n {formatMessage(task.title)}\n </Typography>\n </Flex>\n <Typography variant=\"omega\" textColor=\"neutral500\">\n {formatMessage(task.done)}\n </Typography>\n </>\n ) : (\n <>\n <Flex gap={2} alignItems=\"center\">\n <Flex height=\"16px\" width=\"16px\" justifyContent=\"center\">\n <TodoCircle />\n </Flex>\n <Typography>{formatMessage(task.title)}</Typography>\n </Flex>\n {task.isExternal ? (\n <Link\n isExternal\n disabled={isLinkDisabled}\n href={task.link.to}\n onClick={() => handleClickStrapiCloud(task.tourName as ValidTourName)}\n >\n {formatMessage(task.link.label)}\n </Link>\n ) : (\n <Link\n endIcon={<ChevronRight />}\n disabled={isLinkDisabled}\n to={task.link.to}\n tag={NavLink}\n onClick={() =>\n trackUsage('didStartGuidedTourFromHomepage', { name: tourName })\n }\n >\n {formatMessage(task.link.label)}\n </Link>\n )}\n </>\n )}\n </TourTaskContainer>\n );\n })}\n </Box>\n </ContentSection>\n </Container>\n );\n};\n"],"names":["StyledProgressBar","styled","ProgressBar","theme","colors","neutral150","success500","Container","Flex","borderRadius","neutral0","shadows","tableShadow","ContentSection","spaces","VerticalSeparator","div","TourTaskContainer","TodoCircle","Box","neutral300","LINK_LABEL","id","defaultMessage","DONE_LABEL","TASK_CONTENT","tourName","link","label","to","title","done","isExternal","WaveIcon","useTheme","_jsx","svg","width","height","viewBox","fill","xmlns","path","d","primary600","GuidedTourHomepageOverview","formatMessage","useIntl","trackUsage","useTracking","tours","useGuidedTour","s","state","dispatch","enabled","completedActions","data","guidedTourMeta","useGetGuidedTourMetaQuery","tourNames","Object","keys","completedTours","filter","isCompleted","completionPercentage","length","Math","round","isFirstSuperAdminUser","handleConfirmDialog","name","type","handleClickStrapiCloud","payload","_jsxs","tag","gap","direction","alignItems","paddingTop","Typography","fontSize","fontWeight","paddingBottom","variant","value","Dialog","Root","Trigger","Button","ConfirmDialog","onConfirm","borderColor","marginTop","hasRadius","map","task","tour","isLinkDisabled","includes","aria-label","justifyContent","_Fragment","CheckCircle","style","textDecoration","textColor","Link","disabled","href","onClick","endIcon","ChevronRight","NavLink"],"mappings":"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"}
@@ -7,7 +7,7 @@ import { styled, useTheme } from 'styled-components';
7
7
  import { useTracking } from '../../features/Tracking.mjs';
8
8
  import { useGetGuidedTourMetaQuery } from '../../services/admin.mjs';
9
9
  import { ConfirmDialog } from '../ConfirmDialog.mjs';
10
- import { unstableUseGuidedTour } from './Context.mjs';
10
+ import { useGuidedTour } from './Context.mjs';
11
11
 
12
12
  /* -------------------------------------------------------------------------------------------------
13
13
  * Styled
@@ -125,13 +125,13 @@ const TASK_CONTENT = [
125
125
  })
126
126
  });
127
127
  };
128
- const UnstableGuidedTourOverview = ()=>{
128
+ const GuidedTourHomepageOverview = ()=>{
129
129
  const { formatMessage } = useIntl();
130
130
  const { trackUsage } = useTracking();
131
- const tours = unstableUseGuidedTour('Overview', (s)=>s.state.tours);
132
- const dispatch = unstableUseGuidedTour('Overview', (s)=>s.dispatch);
133
- const enabled = unstableUseGuidedTour('Overview', (s)=>s.state.enabled);
134
- const completedActions = unstableUseGuidedTour('Overview', (s)=>s.state.completedActions);
131
+ const tours = useGuidedTour('Overview', (s)=>s.state.tours);
132
+ const dispatch = useGuidedTour('Overview', (s)=>s.dispatch);
133
+ const enabled = useGuidedTour('Overview', (s)=>s.state.enabled);
134
+ const completedActions = useGuidedTour('Overview', (s)=>s.state.completedActions);
135
135
  const { data: guidedTourMeta } = useGetGuidedTourMetaQuery();
136
136
  const tourNames = Object.keys(tours);
137
137
  const completedTours = tourNames.filter((tourName)=>tours[tourName].isCompleted);
@@ -173,6 +173,7 @@ const UnstableGuidedTourOverview = ()=>{
173
173
  paddingTop: 4,
174
174
  children: [
175
175
  /*#__PURE__*/ jsx(Typography, {
176
+ tag: "h2",
176
177
  fontSize: "20px",
177
178
  fontWeight: "bold",
178
179
  children: formatMessage({
@@ -244,6 +245,7 @@ const UnstableGuidedTourOverview = ()=>{
244
245
  })
245
246
  }),
246
247
  /*#__PURE__*/ jsx(Box, {
248
+ tag: "ul",
247
249
  width: "100%",
248
250
  borderColor: "neutral150",
249
251
  marginTop: 4,
@@ -253,6 +255,8 @@ const UnstableGuidedTourOverview = ()=>{
253
255
  const tour = tours[tourName];
254
256
  const isLinkDisabled = tourName !== 'contentTypeBuilder' && !completedActions.includes('didCreateContentTypeSchema');
255
257
  return /*#__PURE__*/ jsx(TourTaskContainer, {
258
+ tag: "li",
259
+ "aria-label": formatMessage(task.title),
256
260
  alignItems: "center",
257
261
  justifyContent: "space-between",
258
262
  children: tour.isCompleted ? /*#__PURE__*/ jsxs(Fragment, {
@@ -322,5 +326,5 @@ const UnstableGuidedTourOverview = ()=>{
322
326
  });
323
327
  };
324
328
 
325
- export { UnstableGuidedTourOverview };
329
+ export { GuidedTourHomepageOverview };
326
330
  //# sourceMappingURL=Overview.mjs.map