@strapi/admin 5.17.0-beta.0 → 5.18.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 (191) hide show
  1. package/dist/admin/admin/src/StrapiApp.js +27 -4
  2. package/dist/admin/admin/src/StrapiApp.js.map +1 -1
  3. package/dist/admin/admin/src/StrapiApp.mjs +27 -4
  4. package/dist/admin/admin/src/StrapiApp.mjs.map +1 -1
  5. package/dist/admin/admin/src/components/LeftMenu.js +1 -1
  6. package/dist/admin/admin/src/components/LeftMenu.js.map +1 -1
  7. package/dist/admin/admin/src/components/LeftMenu.mjs +2 -2
  8. package/dist/admin/admin/src/components/LeftMenu.mjs.map +1 -1
  9. package/dist/admin/admin/src/components/MainNav/NavLink.js +40 -4
  10. package/dist/admin/admin/src/components/MainNav/NavLink.js.map +1 -1
  11. package/dist/admin/admin/src/components/MainNav/NavLink.mjs +21 -4
  12. package/dist/admin/admin/src/components/MainNav/NavLink.mjs.map +1 -1
  13. package/dist/admin/admin/src/components/MainNav/NavUser.js +1 -1
  14. package/dist/admin/admin/src/components/MainNav/NavUser.js.map +1 -1
  15. package/dist/admin/admin/src/components/MainNav/NavUser.mjs +1 -1
  16. package/dist/admin/admin/src/components/MainNav/NavUser.mjs.map +1 -1
  17. package/dist/admin/admin/src/components/Providers.js +8 -5
  18. package/dist/admin/admin/src/components/Providers.js.map +1 -1
  19. package/dist/admin/admin/src/components/Providers.mjs +8 -5
  20. package/dist/admin/admin/src/components/Providers.mjs.map +1 -1
  21. package/dist/admin/admin/src/components/SubNav.js +27 -7
  22. package/dist/admin/admin/src/components/SubNav.js.map +1 -1
  23. package/dist/admin/admin/src/components/SubNav.mjs +28 -8
  24. package/dist/admin/admin/src/components/SubNav.mjs.map +1 -1
  25. package/dist/admin/admin/src/components/UnstableGuidedTour/Context.js +89 -0
  26. package/dist/admin/admin/src/components/UnstableGuidedTour/Context.js.map +1 -0
  27. package/dist/admin/admin/src/components/UnstableGuidedTour/Context.mjs +66 -0
  28. package/dist/admin/admin/src/components/UnstableGuidedTour/Context.mjs.map +1 -0
  29. package/dist/admin/admin/src/components/UnstableGuidedTour/Overview.js +291 -0
  30. package/dist/admin/admin/src/components/UnstableGuidedTour/Overview.js.map +1 -0
  31. package/dist/admin/admin/src/components/UnstableGuidedTour/Overview.mjs +289 -0
  32. package/dist/admin/admin/src/components/UnstableGuidedTour/Overview.mjs.map +1 -0
  33. package/dist/admin/admin/src/components/UnstableGuidedTour/Step.js +153 -0
  34. package/dist/admin/admin/src/components/UnstableGuidedTour/Step.js.map +1 -0
  35. package/dist/admin/admin/src/components/UnstableGuidedTour/Step.mjs +132 -0
  36. package/dist/admin/admin/src/components/UnstableGuidedTour/Step.mjs.map +1 -0
  37. package/dist/admin/admin/src/components/UnstableGuidedTour/Tours.js +416 -0
  38. package/dist/admin/admin/src/components/UnstableGuidedTour/Tours.js.map +1 -0
  39. package/dist/admin/admin/src/components/UnstableGuidedTour/Tours.mjs +395 -0
  40. package/dist/admin/admin/src/components/UnstableGuidedTour/Tours.mjs.map +1 -0
  41. package/dist/admin/admin/src/components/Widgets.js +52 -0
  42. package/dist/admin/admin/src/components/Widgets.js.map +1 -0
  43. package/dist/admin/admin/src/components/Widgets.mjs +50 -0
  44. package/dist/admin/admin/src/components/Widgets.mjs.map +1 -0
  45. package/dist/admin/admin/src/core/apis/Widgets.js.map +1 -1
  46. package/dist/admin/admin/src/core/apis/Widgets.mjs.map +1 -1
  47. package/dist/admin/admin/src/features/Auth.js.map +1 -1
  48. package/dist/admin/admin/src/features/Auth.mjs.map +1 -1
  49. package/dist/admin/admin/src/features/Tracking.js +0 -33
  50. package/dist/admin/admin/src/features/Tracking.js.map +1 -1
  51. package/dist/admin/admin/src/features/Tracking.mjs +0 -33
  52. package/dist/admin/admin/src/features/Tracking.mjs.map +1 -1
  53. package/dist/admin/admin/src/layouts/AuthenticatedLayout.js +15 -8
  54. package/dist/admin/admin/src/layouts/AuthenticatedLayout.js.map +1 -1
  55. package/dist/admin/admin/src/layouts/AuthenticatedLayout.mjs +15 -8
  56. package/dist/admin/admin/src/layouts/AuthenticatedLayout.mjs.map +1 -1
  57. package/dist/admin/admin/src/pages/Home/HomePage.js +2 -1
  58. package/dist/admin/admin/src/pages/Home/HomePage.js.map +1 -1
  59. package/dist/admin/admin/src/pages/Home/HomePage.mjs +2 -1
  60. package/dist/admin/admin/src/pages/Home/HomePage.mjs.map +1 -1
  61. package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.js +93 -0
  62. package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.js.map +1 -1
  63. package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.mjs +95 -3
  64. package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.mjs.map +1 -1
  65. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.js +8 -3
  66. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.js.map +1 -1
  67. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.mjs +10 -5
  68. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.mjs.map +1 -1
  69. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.js +6 -1
  70. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.js.map +1 -1
  71. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.mjs +6 -1
  72. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.mjs.map +1 -1
  73. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.js +58 -53
  74. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.js.map +1 -1
  75. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.mjs +58 -53
  76. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.mjs.map +1 -1
  77. package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.js +3 -3
  78. package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.js.map +1 -1
  79. package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.mjs +3 -3
  80. package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.mjs.map +1 -1
  81. package/dist/admin/admin/src/services/admin.js +17 -3
  82. package/dist/admin/admin/src/services/admin.js.map +1 -1
  83. package/dist/admin/admin/src/services/admin.mjs +17 -4
  84. package/dist/admin/admin/src/services/admin.mjs.map +1 -1
  85. package/dist/admin/admin/src/services/apiTokens.js +4 -2
  86. package/dist/admin/admin/src/services/apiTokens.js.map +1 -1
  87. package/dist/admin/admin/src/services/apiTokens.mjs +4 -2
  88. package/dist/admin/admin/src/services/apiTokens.mjs.map +1 -1
  89. package/dist/admin/admin/src/translations/en.json.js +34 -2
  90. package/dist/admin/admin/src/translations/en.json.js.map +1 -1
  91. package/dist/admin/admin/src/translations/en.json.mjs +34 -2
  92. package/dist/admin/admin/src/translations/en.json.mjs.map +1 -1
  93. package/dist/admin/admin/src/translations/es.json.js +1 -0
  94. package/dist/admin/admin/src/translations/es.json.js.map +1 -1
  95. package/dist/admin/admin/src/translations/es.json.mjs +1 -0
  96. package/dist/admin/admin/src/translations/es.json.mjs.map +1 -1
  97. package/dist/admin/admin/src/translations/fr.json.js +3 -1
  98. package/dist/admin/admin/src/translations/fr.json.js.map +1 -1
  99. package/dist/admin/admin/src/translations/fr.json.mjs +3 -1
  100. package/dist/admin/admin/src/translations/fr.json.mjs.map +1 -1
  101. package/dist/admin/admin/src/utils/users.js +8 -0
  102. package/dist/admin/admin/src/utils/users.js.map +1 -1
  103. package/dist/admin/admin/src/utils/users.mjs +8 -1
  104. package/dist/admin/admin/src/utils/users.mjs.map +1 -1
  105. package/dist/admin/admin/tests/server.js +8 -0
  106. package/dist/admin/admin/tests/server.js.map +1 -1
  107. package/dist/admin/admin/tests/server.mjs +8 -0
  108. package/dist/admin/admin/tests/server.mjs.map +1 -1
  109. package/dist/admin/admin/tests/utils.js +25 -21
  110. package/dist/admin/admin/tests/utils.js.map +1 -1
  111. package/dist/admin/admin/tests/utils.mjs +25 -21
  112. package/dist/admin/admin/tests/utils.mjs.map +1 -1
  113. package/dist/admin/index.js +2 -0
  114. package/dist/admin/index.js.map +1 -1
  115. package/dist/admin/index.mjs +1 -0
  116. package/dist/admin/index.mjs.map +1 -1
  117. package/dist/admin/src/components/UnstableGuidedTour/Context.d.ts +38 -0
  118. package/dist/admin/src/components/UnstableGuidedTour/Overview.d.ts +1 -0
  119. package/dist/admin/src/components/UnstableGuidedTour/Step.d.ts +37 -0
  120. package/dist/admin/src/components/UnstableGuidedTour/Tours.d.ts +58 -0
  121. package/dist/admin/src/components/Widgets.d.ts +2 -0
  122. package/dist/admin/src/core/apis/Widgets.d.ts +1 -1
  123. package/dist/admin/src/features/Auth.d.ts +1 -1
  124. package/dist/admin/src/features/Tracking.d.ts +9 -2
  125. package/dist/admin/src/index.d.ts +1 -0
  126. package/dist/admin/src/pages/Settings/components/Tokens/TokenBox.d.ts +1 -0
  127. package/dist/admin/src/services/admin.d.ts +8 -8
  128. package/dist/admin/src/services/apiTokens.d.ts +1 -1
  129. package/dist/admin/src/utils/users.d.ts +5 -1
  130. package/dist/ee/server/src/index.d.ts +2 -12
  131. package/dist/ee/server/src/index.d.ts.map +1 -1
  132. package/dist/ee/server/src/routes/index.d.ts +1 -6
  133. package/dist/ee/server/src/routes/index.d.ts.map +1 -1
  134. package/dist/ee/server/src/routes/license-limit.d.ts +1 -6
  135. package/dist/ee/server/src/routes/license-limit.d.ts.map +1 -1
  136. package/dist/server/ee/server/src/routes/license-limit.js +1 -12
  137. package/dist/server/ee/server/src/routes/license-limit.js.map +1 -1
  138. package/dist/server/ee/server/src/routes/license-limit.mjs +1 -12
  139. package/dist/server/ee/server/src/routes/license-limit.mjs.map +1 -1
  140. package/dist/server/server/src/bootstrap.js +4 -12
  141. package/dist/server/server/src/bootstrap.js.map +1 -1
  142. package/dist/server/server/src/bootstrap.mjs +4 -12
  143. package/dist/server/server/src/bootstrap.mjs.map +1 -1
  144. package/dist/server/server/src/controllers/admin.js +12 -1
  145. package/dist/server/server/src/controllers/admin.js.map +1 -1
  146. package/dist/server/server/src/controllers/admin.mjs +12 -1
  147. package/dist/server/server/src/controllers/admin.mjs.map +1 -1
  148. package/dist/server/server/src/routes/admin.js +10 -0
  149. package/dist/server/server/src/routes/admin.js.map +1 -1
  150. package/dist/server/server/src/routes/admin.mjs +10 -0
  151. package/dist/server/server/src/routes/admin.mjs.map +1 -1
  152. package/dist/server/server/src/services/constants.js +14 -0
  153. package/dist/server/server/src/services/constants.js.map +1 -1
  154. package/dist/server/server/src/services/constants.mjs +14 -0
  155. package/dist/server/server/src/services/constants.mjs.map +1 -1
  156. package/dist/server/server/src/services/guided-tour.js +61 -0
  157. package/dist/server/server/src/services/guided-tour.js.map +1 -0
  158. package/dist/server/server/src/services/guided-tour.mjs +59 -0
  159. package/dist/server/server/src/services/guided-tour.mjs.map +1 -0
  160. package/dist/server/server/src/services/index.js +3 -1
  161. package/dist/server/server/src/services/index.js.map +1 -1
  162. package/dist/server/server/src/services/index.mjs +3 -1
  163. package/dist/server/server/src/services/index.mjs.map +1 -1
  164. package/dist/server/server/src/services/user.js +28 -1
  165. package/dist/server/server/src/services/user.js.map +1 -1
  166. package/dist/server/server/src/services/user.mjs +28 -1
  167. package/dist/server/server/src/services/user.mjs.map +1 -1
  168. package/dist/server/server/src/strategies/api-token.js +15 -4
  169. package/dist/server/server/src/strategies/api-token.js.map +1 -1
  170. package/dist/server/server/src/strategies/api-token.mjs +15 -4
  171. package/dist/server/server/src/strategies/api-token.mjs.map +1 -1
  172. package/dist/server/src/bootstrap.d.ts.map +1 -1
  173. package/dist/server/src/controllers/admin.d.ts +6 -1
  174. package/dist/server/src/controllers/admin.d.ts.map +1 -1
  175. package/dist/server/src/controllers/index.d.ts +6 -0
  176. package/dist/server/src/controllers/index.d.ts.map +1 -1
  177. package/dist/server/src/index.d.ts +12 -0
  178. package/dist/server/src/index.d.ts.map +1 -1
  179. package/dist/server/src/routes/admin.d.ts.map +1 -1
  180. package/dist/server/src/services/constants.d.ts +11 -1
  181. package/dist/server/src/services/constants.d.ts.map +1 -1
  182. package/dist/server/src/services/guided-tour.d.ts +12 -0
  183. package/dist/server/src/services/guided-tour.d.ts.map +1 -0
  184. package/dist/server/src/services/index.d.ts +6 -0
  185. package/dist/server/src/services/index.d.ts.map +1 -1
  186. package/dist/server/src/services/user.d.ts +1 -0
  187. package/dist/server/src/services/user.d.ts.map +1 -1
  188. package/dist/server/src/strategies/api-token.d.ts.map +1 -1
  189. package/dist/shared/contracts/admin.d.ts +15 -0
  190. package/dist/shared/contracts/admin.d.ts.map +1 -1
  191. package/package.json +9 -9
@@ -0,0 +1,395 @@
1
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
+ import * as React from 'react';
3
+ import { Box, Flex, LinkButton, Portal, Popover } from '@strapi/design-system';
4
+ import { FormattedMessage } from 'react-intl';
5
+ import { NavLink } from 'react-router-dom';
6
+ import { styled } from 'styled-components';
7
+ import { useGetGuidedTourMetaQuery } from '../../services/admin.mjs';
8
+ import { unstableUseGuidedTour } from './Context.mjs';
9
+ import { createStepComponents } from './Step.mjs';
10
+
11
+ /* -------------------------------------------------------------------------------------------------
12
+ * Tours
13
+ * -----------------------------------------------------------------------------------------------*/ const tours = {
14
+ contentTypeBuilder: createTour('contentTypeBuilder', [
15
+ {
16
+ name: 'Introduction',
17
+ content: (Step)=>/*#__PURE__*/ jsxs(Step.Root, {
18
+ side: "bottom",
19
+ children: [
20
+ /*#__PURE__*/ jsx(Step.Title, {
21
+ id: "tours.contentTypeBuilder.Introduction.title",
22
+ defaultMessage: "Content-Type Builder"
23
+ }),
24
+ /*#__PURE__*/ jsx(Step.Content, {
25
+ id: "tours.contentTypeBuilder.Introduction.content",
26
+ defaultMessage: "Create and manage your content structure with collection types, single types and components."
27
+ }),
28
+ /*#__PURE__*/ jsx(Step.Actions, {
29
+ showSkip: true
30
+ })
31
+ ]
32
+ })
33
+ },
34
+ {
35
+ name: 'CollectionTypes',
36
+ content: (Step)=>/*#__PURE__*/ jsxs(Step.Root, {
37
+ side: "right",
38
+ sideOffset: 26,
39
+ children: [
40
+ /*#__PURE__*/ jsx(Step.Title, {
41
+ id: "tours.contentTypeBuilder.CollectionTypes.title",
42
+ defaultMessage: "Collection Types"
43
+ }),
44
+ /*#__PURE__*/ jsx(Step.Content, {
45
+ id: "tours.contentTypeBuilder.CollectionTypes.content",
46
+ defaultMessage: "Create and manage your content structure with collection types, single types and components."
47
+ }),
48
+ /*#__PURE__*/ jsx(Step.Actions, {})
49
+ ]
50
+ })
51
+ },
52
+ {
53
+ name: 'SingleTypes',
54
+ content: (Step)=>/*#__PURE__*/ jsxs(Step.Root, {
55
+ side: "right",
56
+ sideOffset: 26,
57
+ children: [
58
+ /*#__PURE__*/ jsx(Step.Title, {
59
+ id: "tours.contentTypeBuilder.SingleTypes.title",
60
+ defaultMessage: "Single Types"
61
+ }),
62
+ /*#__PURE__*/ jsx(Step.Content, {
63
+ id: "tours.contentTypeBuilder.SingleTypes.content",
64
+ defaultMessage: "A content structure that can manage a single entry, such as a homepage or a header."
65
+ }),
66
+ /*#__PURE__*/ jsx(Step.Actions, {})
67
+ ]
68
+ })
69
+ },
70
+ {
71
+ name: 'Components',
72
+ content: (Step)=>/*#__PURE__*/ jsxs(Step.Root, {
73
+ side: "right",
74
+ sideOffset: 26,
75
+ children: [
76
+ /*#__PURE__*/ jsx(Step.Title, {
77
+ id: "tours.contentTypeBuilder.Components.title",
78
+ defaultMessage: "Components"
79
+ }),
80
+ /*#__PURE__*/ jsx(Step.Content, {
81
+ id: "tours.contentTypeBuilder.Components.content",
82
+ defaultMessage: "A reusable content structure that can be used across multiple content types, such as buttons, sliders or cards."
83
+ }),
84
+ /*#__PURE__*/ jsx(Step.Actions, {})
85
+ ]
86
+ })
87
+ },
88
+ {
89
+ name: 'Finish',
90
+ content: (Step)=>/*#__PURE__*/ jsxs(Step.Root, {
91
+ side: "right",
92
+ sideOffset: 32,
93
+ children: [
94
+ /*#__PURE__*/ jsx(Step.Title, {
95
+ id: "tours.contentTypeBuilder.Finish.title",
96
+ defaultMessage: "It’s time to create content!"
97
+ }),
98
+ /*#__PURE__*/ jsx(Step.Content, {
99
+ id: "tours.contentTypeBuilder.Finish.content",
100
+ defaultMessage: "Now that you created content types, you’ll be able to create content in the content manager."
101
+ }),
102
+ /*#__PURE__*/ jsx(Step.Actions, {
103
+ showStepCount: false,
104
+ to: "/content-manager"
105
+ })
106
+ ]
107
+ }),
108
+ when: (completedActions)=>completedActions.includes('didCreateContentTypeSchema')
109
+ }
110
+ ]),
111
+ contentManager: createTour('contentManager', [
112
+ {
113
+ name: 'Introduction',
114
+ content: (Step)=>/*#__PURE__*/ jsxs(Step.Root, {
115
+ side: "top",
116
+ children: [
117
+ /*#__PURE__*/ jsx(Step.Title, {
118
+ id: "tours.contentManager.Introduction.title",
119
+ defaultMessage: "Content manager"
120
+ }),
121
+ /*#__PURE__*/ jsx(Step.Content, {
122
+ id: "tours.contentManager.Introduction.content",
123
+ defaultMessage: "Create and manage content from your collection types and single types."
124
+ }),
125
+ /*#__PURE__*/ jsx(Step.Actions, {
126
+ showSkip: true
127
+ })
128
+ ]
129
+ })
130
+ },
131
+ {
132
+ name: 'Fields',
133
+ content: (Step)=>/*#__PURE__*/ jsxs(Step.Root, {
134
+ side: 'top',
135
+ align: "start",
136
+ sideOffset: -36,
137
+ children: [
138
+ /*#__PURE__*/ jsx(Step.Title, {
139
+ id: "tours.contentManager.Fields.title",
140
+ defaultMessage: "Fields"
141
+ }),
142
+ /*#__PURE__*/ jsx(Step.Content, {
143
+ id: "tours.contentManager.Fields.content",
144
+ defaultMessage: "Add content to the fields created in the Content-Type Builder."
145
+ }),
146
+ /*#__PURE__*/ jsx(Step.Actions, {})
147
+ ]
148
+ })
149
+ },
150
+ {
151
+ name: 'Publish',
152
+ content: (Step)=>/*#__PURE__*/ jsxs(Step.Root, {
153
+ side: "left",
154
+ align: "center",
155
+ sideOffset: 20,
156
+ children: [
157
+ /*#__PURE__*/ jsx(Step.Title, {
158
+ id: "tours.contentManager.Publish.title",
159
+ defaultMessage: "Publish"
160
+ }),
161
+ /*#__PURE__*/ jsx(Step.Content, {
162
+ id: "tours.contentManager.Publish.content",
163
+ defaultMessage: "Publish entries to make their content available through the Document Service API."
164
+ }),
165
+ /*#__PURE__*/ jsx(Step.Actions, {})
166
+ ]
167
+ })
168
+ },
169
+ {
170
+ name: 'Finish',
171
+ content: (Step)=>/*#__PURE__*/ jsxs(Step.Root, {
172
+ side: "right",
173
+ sideOffset: 32,
174
+ children: [
175
+ /*#__PURE__*/ jsx(Step.Title, {
176
+ id: "tours.contentManager.FinalStep.title",
177
+ defaultMessage: "It’s time to create API Tokens!"
178
+ }),
179
+ /*#__PURE__*/ jsx(Step.Content, {
180
+ id: "tours.contentManager.FinalStep.content",
181
+ defaultMessage: "Now that you’ve created and published content, time to create API tokens and set up permissions."
182
+ }),
183
+ /*#__PURE__*/ jsx(Step.Actions, {
184
+ showStepCount: false,
185
+ to: "/settings/api-tokens"
186
+ })
187
+ ]
188
+ }),
189
+ when: (completedActions)=>completedActions.includes('didCreateContent')
190
+ }
191
+ ]),
192
+ apiTokens: createTour('apiTokens', [
193
+ {
194
+ name: 'Introduction',
195
+ content: (Step)=>/*#__PURE__*/ jsxs(Step.Root, {
196
+ sideOffset: -36,
197
+ children: [
198
+ /*#__PURE__*/ jsx(Step.Title, {
199
+ id: "tours.apiTokens.Introduction.title",
200
+ defaultMessage: "API tokens"
201
+ }),
202
+ /*#__PURE__*/ jsx(Step.Content, {
203
+ id: "tours.apiTokens.Introduction.content",
204
+ defaultMessage: "Create and manage API tokens with highly customizable permissions."
205
+ }),
206
+ /*#__PURE__*/ jsx(Step.Actions, {
207
+ showSkip: true
208
+ })
209
+ ]
210
+ }),
211
+ when: (completedActions)=>!completedActions.includes('didCreateApiToken')
212
+ },
213
+ {
214
+ name: 'CreateAnAPIToken',
215
+ content: (Step)=>/*#__PURE__*/ jsxs(Step.Root, {
216
+ side: "bottom",
217
+ sideOffset: 20,
218
+ align: "end",
219
+ children: [
220
+ /*#__PURE__*/ jsx(Step.Title, {
221
+ id: "tours.apiTokens.CreateAnAPIToken.title",
222
+ defaultMessage: "Create an API token"
223
+ }),
224
+ /*#__PURE__*/ jsx(Step.Content, {
225
+ id: "tours.apiTokens.CreateAnAPIToken.content",
226
+ defaultMessage: "Create a new API token. Choose a name, duration and type."
227
+ }),
228
+ /*#__PURE__*/ jsx(Step.Actions, {})
229
+ ]
230
+ })
231
+ },
232
+ {
233
+ name: 'CopyAPIToken',
234
+ content: (Step)=>/*#__PURE__*/ jsxs(Step.Root, {
235
+ side: "bottom",
236
+ align: "start",
237
+ children: [
238
+ /*#__PURE__*/ jsx(Step.Title, {
239
+ id: "tours.apiTokens.CopyAPIToken.title",
240
+ defaultMessage: "Copy your new API token"
241
+ }),
242
+ /*#__PURE__*/ jsx(Step.Content, {
243
+ id: "tours.apiTokens.CopyAPIToken.content",
244
+ defaultMessage: "Make sure to do it now, you won’t be able to see it again. You’ll need to generate a new one if you lose it."
245
+ }),
246
+ /*#__PURE__*/ jsx(Step.Actions, {})
247
+ ]
248
+ }),
249
+ when: (completedActions)=>completedActions.includes('didCreateApiToken')
250
+ },
251
+ {
252
+ name: 'Finish',
253
+ content: (Step)=>{
254
+ const dispatch = unstableUseGuidedTour('GuidedTourPopover', (s)=>s.dispatch);
255
+ return /*#__PURE__*/ jsxs(Step.Root, {
256
+ side: "right",
257
+ align: "start",
258
+ sideOffset: 32,
259
+ children: [
260
+ /*#__PURE__*/ jsx(Step.Title, {
261
+ id: "tours.apiTokens.FinalStep.title",
262
+ defaultMessage: "It’s time to deploy your application!"
263
+ }),
264
+ /*#__PURE__*/ jsx(Step.Content, {
265
+ id: "tours.apiTokens.FinalStep.content",
266
+ defaultMessage: "Your application is ready to be deployed and its content to be shared with the world!"
267
+ }),
268
+ /*#__PURE__*/ jsx(Step.Actions, {
269
+ showStepCount: false,
270
+ children: /*#__PURE__*/ jsx(Flex, {
271
+ justifyContent: "end",
272
+ width: '100%',
273
+ children: /*#__PURE__*/ jsx(LinkButton, {
274
+ onClick: ()=>{
275
+ dispatch({
276
+ type: 'next_step',
277
+ payload: 'apiTokens'
278
+ });
279
+ },
280
+ tag: NavLink,
281
+ to: "/",
282
+ children: /*#__PURE__*/ jsx(FormattedMessage, {
283
+ id: "tours.gotIt",
284
+ defaultMessage: "Got it"
285
+ })
286
+ })
287
+ })
288
+ })
289
+ ]
290
+ });
291
+ },
292
+ when: (completedActions)=>completedActions.includes('didCopyApiToken')
293
+ }
294
+ ]),
295
+ strapiCloud: createTour('strapiCloud', [])
296
+ };
297
+ const UnstableGuidedTourTooltip = ({ children, ...props })=>{
298
+ const state = unstableUseGuidedTour('TooltipWrapper', (s)=>s.state);
299
+ const hasFutureFlag = window.strapi.future.isEnabled('unstableGuidedTour');
300
+ if (!state.enabled) {
301
+ return /*#__PURE__*/ jsx(Fragment, {
302
+ children: children
303
+ });
304
+ }
305
+ if (!hasFutureFlag) {
306
+ return /*#__PURE__*/ jsx(Fragment, {
307
+ children: children
308
+ });
309
+ }
310
+ return /*#__PURE__*/ jsx(GuidedTourTooltipImpl, {
311
+ ...props,
312
+ children: children
313
+ });
314
+ };
315
+ const GuidedTourOverlay = styled(Box)`
316
+ position: fixed;
317
+ top: 0;
318
+ left: 0;
319
+ right: 0;
320
+ bottom: 0;
321
+ background-color: rgba(50, 50, 77, 0.2);
322
+ z-index: 10;
323
+ `;
324
+ const GuidedTourTooltipImpl = ({ children, content, tourName, step, when })=>{
325
+ const { data: guidedTourMeta } = useGetGuidedTourMetaQuery();
326
+ const state = unstableUseGuidedTour('UnstableGuidedTourTooltip', (s)=>s.state);
327
+ const dispatch = unstableUseGuidedTour('UnstableGuidedTourTooltip', (s)=>s.dispatch);
328
+ const isCurrentStep = state.tours[tourName].currentStep === step;
329
+ const isStepConditionMet = when ? when(state.completedActions) : true;
330
+ const isPopoverOpen = guidedTourMeta?.data?.isFirstSuperAdminUser && !state.tours[tourName].isCompleted && isCurrentStep && isStepConditionMet;
331
+ // Lock the scroll
332
+ React.useEffect(()=>{
333
+ if (!isPopoverOpen) return;
334
+ const originalStyle = window.getComputedStyle(document.body).overflow;
335
+ document.body.style.overflow = 'hidden';
336
+ return ()=>{
337
+ document.body.style.overflow = originalStyle;
338
+ };
339
+ }, [
340
+ isPopoverOpen
341
+ ]);
342
+ // TODO: This isn't great but the only solution for syncing the completed actions
343
+ React.useEffect(()=>{
344
+ dispatch({
345
+ type: 'set_completed_actions',
346
+ payload: guidedTourMeta?.data?.completedActions ?? []
347
+ });
348
+ }, [
349
+ dispatch,
350
+ guidedTourMeta?.data?.completedActions
351
+ ]);
352
+ const Step = React.useMemo(()=>createStepComponents(tourName), [
353
+ tourName
354
+ ]);
355
+ return /*#__PURE__*/ jsxs(Fragment, {
356
+ children: [
357
+ isPopoverOpen && /*#__PURE__*/ jsx(Portal, {
358
+ children: /*#__PURE__*/ jsx(GuidedTourOverlay, {})
359
+ }),
360
+ /*#__PURE__*/ jsxs(Popover.Root, {
361
+ open: isPopoverOpen,
362
+ children: [
363
+ /*#__PURE__*/ jsx(Popover.Anchor, {
364
+ children: children
365
+ }),
366
+ content(Step, {
367
+ state,
368
+ dispatch
369
+ })
370
+ ]
371
+ })
372
+ ]
373
+ });
374
+ };
375
+ function createTour(tourName, steps) {
376
+ const tour = steps.reduce((acc, step, index)=>{
377
+ if (step.name in acc) {
378
+ throw Error(`The tour: ${tourName} with step: ${step.name} has already been registered`);
379
+ }
380
+ acc[step.name] = ({ children })=>{
381
+ return /*#__PURE__*/ jsx(UnstableGuidedTourTooltip, {
382
+ tourName: tourName,
383
+ step: index,
384
+ content: step.content,
385
+ when: step.when,
386
+ children: children
387
+ });
388
+ };
389
+ return acc;
390
+ }, {});
391
+ return tour;
392
+ }
393
+
394
+ export { tours };
395
+ //# sourceMappingURL=Tours.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tours.mjs","sources":["../../../../../../admin/src/components/UnstableGuidedTour/Tours.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Popover, Portal, Flex, LinkButton } from '@strapi/design-system';\nimport { FormattedMessage } from 'react-intl';\nimport { NavLink } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { useGetGuidedTourMetaQuery } from '../../services/admin';\n\nimport {\n type State,\n type Action,\n unstableUseGuidedTour,\n ValidTourName,\n ExtendedCompletedActions,\n} from './Context';\nimport { Step, createStepComponents } from './Step';\n\n/* -------------------------------------------------------------------------------------------------\n * Tours\n * -----------------------------------------------------------------------------------------------*/\n\nconst tours = {\n contentTypeBuilder: createTour('contentTypeBuilder', [\n {\n name: 'Introduction',\n content: (Step) => (\n <Step.Root side=\"bottom\">\n <Step.Title\n id=\"tours.contentTypeBuilder.Introduction.title\"\n defaultMessage=\"Content-Type Builder\"\n />\n <Step.Content\n id=\"tours.contentTypeBuilder.Introduction.content\"\n defaultMessage=\"Create and manage your content structure with collection types, single types and components.\"\n />\n <Step.Actions showSkip />\n </Step.Root>\n ),\n },\n {\n name: 'CollectionTypes',\n content: (Step) => (\n <Step.Root side=\"right\" sideOffset={26}>\n <Step.Title\n id=\"tours.contentTypeBuilder.CollectionTypes.title\"\n defaultMessage=\"Collection Types\"\n />\n <Step.Content\n id=\"tours.contentTypeBuilder.CollectionTypes.content\"\n defaultMessage=\"Create and manage your content structure with collection types, single types and components.\"\n />\n <Step.Actions />\n </Step.Root>\n ),\n },\n {\n name: 'SingleTypes',\n content: (Step) => (\n <Step.Root side=\"right\" sideOffset={26}>\n <Step.Title\n id=\"tours.contentTypeBuilder.SingleTypes.title\"\n defaultMessage=\"Single Types\"\n />\n <Step.Content\n id=\"tours.contentTypeBuilder.SingleTypes.content\"\n defaultMessage=\"A content structure that can manage a single entry, such as a homepage or a header.\"\n />\n <Step.Actions />\n </Step.Root>\n ),\n },\n {\n name: 'Components',\n content: (Step) => (\n <Step.Root side=\"right\" sideOffset={26}>\n <Step.Title id=\"tours.contentTypeBuilder.Components.title\" defaultMessage=\"Components\" />\n <Step.Content\n id=\"tours.contentTypeBuilder.Components.content\"\n defaultMessage=\"A reusable content structure that can be used across multiple content types, such as buttons, sliders or cards.\"\n />\n <Step.Actions />\n </Step.Root>\n ),\n },\n {\n name: 'Finish',\n content: (Step) => (\n <Step.Root side=\"right\" sideOffset={32}>\n <Step.Title\n id=\"tours.contentTypeBuilder.Finish.title\"\n defaultMessage=\"It’s time to create content!\"\n />\n <Step.Content\n id=\"tours.contentTypeBuilder.Finish.content\"\n defaultMessage=\"Now that you created content types, you’ll be able to create content in the content manager.\"\n />\n <Step.Actions showStepCount={false} to=\"/content-manager\" />\n </Step.Root>\n ),\n when: (completedActions) => completedActions.includes('didCreateContentTypeSchema'),\n },\n ]),\n contentManager: createTour('contentManager', [\n {\n name: 'Introduction',\n content: (Step) => (\n <Step.Root side=\"top\">\n <Step.Title\n id=\"tours.contentManager.Introduction.title\"\n defaultMessage=\"Content manager\"\n />\n <Step.Content\n id=\"tours.contentManager.Introduction.content\"\n defaultMessage=\"Create and manage content from your collection types and single types.\"\n />\n <Step.Actions showSkip />\n </Step.Root>\n ),\n },\n {\n name: 'Fields',\n content: (Step) => (\n <Step.Root side={'top'} align=\"start\" sideOffset={-36}>\n <Step.Title id=\"tours.contentManager.Fields.title\" defaultMessage=\"Fields\" />\n <Step.Content\n id=\"tours.contentManager.Fields.content\"\n defaultMessage=\"Add content to the fields created in the Content-Type Builder.\"\n />\n <Step.Actions />\n </Step.Root>\n ),\n },\n {\n name: 'Publish',\n content: (Step) => (\n <Step.Root side=\"left\" align=\"center\" sideOffset={20}>\n <Step.Title id=\"tours.contentManager.Publish.title\" defaultMessage=\"Publish\" />\n <Step.Content\n id=\"tours.contentManager.Publish.content\"\n defaultMessage=\"Publish entries to make their content available through the Document Service API.\"\n />\n <Step.Actions />\n </Step.Root>\n ),\n },\n {\n name: 'Finish',\n content: (Step) => (\n <Step.Root side=\"right\" sideOffset={32}>\n <Step.Title\n id=\"tours.contentManager.FinalStep.title\"\n defaultMessage=\"It’s time to create API Tokens!\"\n />\n <Step.Content\n id=\"tours.contentManager.FinalStep.content\"\n defaultMessage=\"Now that you’ve created and published content, time to create API tokens and set up permissions.\"\n />\n <Step.Actions showStepCount={false} to=\"/settings/api-tokens\" />\n </Step.Root>\n ),\n when: (completedActions) => completedActions.includes('didCreateContent'),\n },\n ]),\n apiTokens: createTour('apiTokens', [\n {\n name: 'Introduction',\n content: (Step) => (\n <Step.Root sideOffset={-36}>\n <Step.Title id=\"tours.apiTokens.Introduction.title\" defaultMessage=\"API tokens\" />\n <Step.Content\n id=\"tours.apiTokens.Introduction.content\"\n defaultMessage=\"Create and manage API tokens with highly customizable permissions.\"\n />\n <Step.Actions showSkip />\n </Step.Root>\n ),\n when: (completedActions) => !completedActions.includes('didCreateApiToken'),\n },\n {\n name: 'CreateAnAPIToken',\n content: (Step) => (\n <Step.Root side=\"bottom\" sideOffset={20} align=\"end\">\n <Step.Title\n id=\"tours.apiTokens.CreateAnAPIToken.title\"\n defaultMessage=\"Create an API token\"\n />\n <Step.Content\n id=\"tours.apiTokens.CreateAnAPIToken.content\"\n defaultMessage=\"Create a new API token. Choose a name, duration and type.\"\n />\n <Step.Actions />\n </Step.Root>\n ),\n },\n {\n name: 'CopyAPIToken',\n content: (Step) => (\n <Step.Root side=\"bottom\" align=\"start\">\n <Step.Title\n id=\"tours.apiTokens.CopyAPIToken.title\"\n defaultMessage=\"Copy your new API token\"\n />\n <Step.Content\n id=\"tours.apiTokens.CopyAPIToken.content\"\n defaultMessage=\"Make sure to do it now, you won’t be able to see it again. You’ll need to generate a new one if you lose it.\"\n />\n <Step.Actions />\n </Step.Root>\n ),\n when: (completedActions) => completedActions.includes('didCreateApiToken'),\n },\n {\n name: 'Finish',\n content: (Step) => {\n const dispatch = unstableUseGuidedTour('GuidedTourPopover', (s) => s.dispatch);\n return (\n <Step.Root side=\"right\" align=\"start\" sideOffset={32}>\n <Step.Title\n id=\"tours.apiTokens.FinalStep.title\"\n defaultMessage=\"It’s time to deploy your application!\"\n />\n <Step.Content\n id=\"tours.apiTokens.FinalStep.content\"\n defaultMessage=\"Your application is ready to be deployed and its content to be shared with the world!\"\n />\n <Step.Actions showStepCount={false}>\n <Flex justifyContent=\"end\" width={'100%'}>\n <LinkButton\n onClick={() => {\n dispatch({ type: 'next_step', payload: 'apiTokens' });\n }}\n tag={NavLink}\n to=\"/\"\n >\n <FormattedMessage id=\"tours.gotIt\" defaultMessage=\"Got it\" />\n </LinkButton>\n </Flex>\n </Step.Actions>\n </Step.Root>\n );\n },\n when: (completedActions) => completedActions.includes('didCopyApiToken'),\n },\n ]),\n strapiCloud: createTour('strapiCloud', []),\n} as const;\n\ntype Tours = typeof tours;\n\n/* -------------------------------------------------------------------------------------------------\n * GuidedTourTooltip\n * -----------------------------------------------------------------------------------------------*/\n\ntype Content = (\n Step: Step,\n {\n state,\n dispatch,\n }: {\n state: State;\n dispatch: React.Dispatch<Action>;\n }\n) => React.ReactNode;\n\ntype GuidedTourTooltipProps = {\n children: React.ReactNode;\n content: Content;\n tourName: ValidTourName;\n step: number;\n when?: (completedActions: ExtendedCompletedActions) => boolean;\n};\n\nconst UnstableGuidedTourTooltip = ({ children, ...props }: GuidedTourTooltipProps) => {\n const state = unstableUseGuidedTour('TooltipWrapper', (s) => s.state);\n const hasFutureFlag = window.strapi.future.isEnabled('unstableGuidedTour');\n\n if (!state.enabled) {\n return <>{children}</>;\n }\n\n if (!hasFutureFlag) {\n return <>{children}</>;\n }\n\n return <GuidedTourTooltipImpl {...props}>{children}</GuidedTourTooltipImpl>;\n};\n\nconst GuidedTourOverlay = styled(Box)`\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: rgba(50, 50, 77, 0.2);\n z-index: 10;\n`;\n\nconst GuidedTourTooltipImpl = ({\n children,\n content,\n tourName,\n step,\n when,\n}: GuidedTourTooltipProps) => {\n const { data: guidedTourMeta } = useGetGuidedTourMetaQuery();\n\n const state = unstableUseGuidedTour('UnstableGuidedTourTooltip', (s) => s.state);\n const dispatch = unstableUseGuidedTour('UnstableGuidedTourTooltip', (s) => s.dispatch);\n\n const isCurrentStep = state.tours[tourName].currentStep === step;\n const isStepConditionMet = when ? when(state.completedActions) : true;\n const isPopoverOpen =\n guidedTourMeta?.data?.isFirstSuperAdminUser &&\n !state.tours[tourName].isCompleted &&\n isCurrentStep &&\n isStepConditionMet;\n\n // Lock the scroll\n React.useEffect(() => {\n if (!isPopoverOpen) return;\n\n const originalStyle = window.getComputedStyle(document.body).overflow;\n document.body.style.overflow = 'hidden';\n\n return () => {\n document.body.style.overflow = originalStyle;\n };\n }, [isPopoverOpen]);\n\n // TODO: This isn't great but the only solution for syncing the completed actions\n React.useEffect(() => {\n dispatch({\n type: 'set_completed_actions',\n payload: guidedTourMeta?.data?.completedActions ?? [],\n });\n }, [dispatch, guidedTourMeta?.data?.completedActions]);\n\n const Step = React.useMemo(() => createStepComponents(tourName), [tourName]);\n\n return (\n <>\n {isPopoverOpen && (\n <Portal>\n <GuidedTourOverlay />\n </Portal>\n )}\n <Popover.Root open={isPopoverOpen}>\n <Popover.Anchor>{children}</Popover.Anchor>\n {content(Step, { state, dispatch })}\n </Popover.Root>\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Tour factory\n * -----------------------------------------------------------------------------------------------*/\n\ntype TourStep<P extends string> = {\n name: P;\n content: Content;\n when?: (completedActions: ExtendedCompletedActions) => boolean;\n};\n\nfunction createTour<const T extends ReadonlyArray<TourStep<string>>>(tourName: string, steps: T) {\n type Components = {\n [K in T[number]['name']]: React.ComponentType<{ children: React.ReactNode }>;\n };\n\n const tour = steps.reduce((acc, step, index) => {\n if (step.name in acc) {\n throw Error(`The tour: ${tourName} with step: ${step.name} has already been registered`);\n }\n\n acc[step.name as keyof Components] = ({ children }: { children: React.ReactNode }) => {\n return (\n <UnstableGuidedTourTooltip\n tourName={tourName as ValidTourName}\n step={index}\n content={step.content}\n when={step.when}\n >\n {children}\n </UnstableGuidedTourTooltip>\n );\n };\n\n return acc;\n }, {} as Components);\n\n return tour;\n}\n\nexport type { Content, Tours };\nexport { tours };\n"],"names":["tours","contentTypeBuilder","createTour","name","content","Step","_jsxs","Root","side","_jsx","Title","id","defaultMessage","Content","Actions","showSkip","sideOffset","showStepCount","to","when","completedActions","includes","contentManager","align","apiTokens","dispatch","unstableUseGuidedTour","s","Flex","justifyContent","width","LinkButton","onClick","type","payload","tag","NavLink","FormattedMessage","strapiCloud","UnstableGuidedTourTooltip","children","props","state","hasFutureFlag","window","strapi","future","isEnabled","enabled","_Fragment","GuidedTourTooltipImpl","GuidedTourOverlay","styled","Box","tourName","step","data","guidedTourMeta","useGetGuidedTourMetaQuery","isCurrentStep","currentStep","isStepConditionMet","isPopoverOpen","isFirstSuperAdminUser","isCompleted","React","useEffect","originalStyle","getComputedStyle","document","body","overflow","style","useMemo","createStepComponents","Portal","Popover","open","Anchor","steps","tour","reduce","acc","index","Error"],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var strapiAdmin = require('@strapi/admin/strapi-admin');
5
+ var designSystem = require('@strapi/design-system');
6
+ var styled = require('styled-components');
7
+ var users = require('../utils/users.js');
8
+
9
+ /* -------------------------------------------------------------------------------------------------
10
+ * ProfileWidget
11
+ * -----------------------------------------------------------------------------------------------*/ const DisplayNameTypography = styled.styled(designSystem.Typography)`
12
+ font-size: 2.4rem;
13
+ `;
14
+ const ProfileWidget = ()=>{
15
+ const user = strapiAdmin.useAuth('User', (state)=>state.user);
16
+ const userDisplayName = users.getDisplayName(user);
17
+ const initials = users.getInitials(user);
18
+ return /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
19
+ direction: "column",
20
+ gap: 3,
21
+ height: "100%",
22
+ justifyContent: "center",
23
+ children: [
24
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Avatar.Item, {
25
+ delayMs: 0,
26
+ fallback: initials
27
+ }),
28
+ userDisplayName && /*#__PURE__*/ jsxRuntime.jsx(DisplayNameTypography, {
29
+ fontWeight: "bold",
30
+ textTransform: "none",
31
+ textAlign: "center",
32
+ children: userDisplayName
33
+ }),
34
+ user?.email && /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
35
+ variant: "omega",
36
+ textColor: "neutral600",
37
+ children: user?.email
38
+ }),
39
+ user?.roles?.length && /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
40
+ marginTop: 2,
41
+ gap: 1,
42
+ wrap: "wrap",
43
+ children: user?.roles?.map((role)=>/*#__PURE__*/ jsxRuntime.jsx(designSystem.Badge, {
44
+ children: role.name
45
+ }, role.id))
46
+ })
47
+ ]
48
+ });
49
+ };
50
+
51
+ exports.ProfileWidget = ProfileWidget;
52
+ //# sourceMappingURL=Widgets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Widgets.js","sources":["../../../../../admin/src/components/Widgets.tsx"],"sourcesContent":["import { useAuth } from '@strapi/admin/strapi-admin';\nimport { Avatar, Badge, Flex, Typography } from '@strapi/design-system';\nimport { styled } from 'styled-components';\n\nimport { getDisplayName, getInitials } from '../utils/users';\n\n/* -------------------------------------------------------------------------------------------------\n * ProfileWidget\n * -----------------------------------------------------------------------------------------------*/\n\nconst DisplayNameTypography = styled(Typography)`\n font-size: 2.4rem;\n`;\n\nconst ProfileWidget = () => {\n const user = useAuth('User', (state) => state.user);\n const userDisplayName = getDisplayName(user);\n const initials = getInitials(user);\n\n return (\n <Flex direction=\"column\" gap={3} height=\"100%\" justifyContent=\"center\">\n <Avatar.Item delayMs={0} fallback={initials} />\n {userDisplayName && (\n <DisplayNameTypography fontWeight=\"bold\" textTransform=\"none\" textAlign=\"center\">\n {userDisplayName}\n </DisplayNameTypography>\n )}\n {user?.email && (\n <Typography variant=\"omega\" textColor=\"neutral600\">\n {user?.email}\n </Typography>\n )}\n {user?.roles?.length && (\n <Flex marginTop={2} gap={1} wrap=\"wrap\">\n {user?.roles?.map((role) => <Badge key={role.id}>{role.name}</Badge>)}\n </Flex>\n )}\n </Flex>\n );\n};\n\nexport { ProfileWidget };\n"],"names":["DisplayNameTypography","styled","Typography","ProfileWidget","user","useAuth","state","userDisplayName","getDisplayName","initials","getInitials","_jsxs","Flex","direction","gap","height","justifyContent","_jsx","Avatar","Item","delayMs","fallback","fontWeight","textTransform","textAlign","email","variant","textColor","roles","length","marginTop","wrap","map","role","Badge","name","id"],"mappings":";;;;;;;;AAMA;;AAEkG,qGAElG,MAAMA,qBAAAA,GAAwBC,aAAOC,CAAAA,uBAAAA,CAAW;;AAEhD,CAAC;AAED,MAAMC,aAAgB,GAAA,IAAA;AACpB,IAAA,MAAMC,OAAOC,mBAAQ,CAAA,MAAA,EAAQ,CAACC,KAAAA,GAAUA,MAAMF,IAAI,CAAA;AAClD,IAAA,MAAMG,kBAAkBC,oBAAeJ,CAAAA,IAAAA,CAAAA;AACvC,IAAA,MAAMK,WAAWC,iBAAYN,CAAAA,IAAAA,CAAAA;AAE7B,IAAA,qBACEO,eAACC,CAAAA,iBAAAA,EAAAA;QAAKC,SAAU,EAAA,QAAA;QAASC,GAAK,EAAA,CAAA;QAAGC,MAAO,EAAA,MAAA;QAAOC,cAAe,EAAA,QAAA;;AAC5D,0BAAAC,cAAA,CAACC,oBAAOC,IAAI,EAAA;gBAACC,OAAS,EAAA,CAAA;gBAAGC,QAAUZ,EAAAA;;AAClCF,YAAAA,eAAAA,kBACCU,cAACjB,CAAAA,qBAAAA,EAAAA;gBAAsBsB,UAAW,EAAA,MAAA;gBAAOC,aAAc,EAAA,MAAA;gBAAOC,SAAU,EAAA,QAAA;AACrEjB,gBAAAA,QAAAA,EAAAA;;AAGJH,YAAAA,IAAAA,EAAMqB,uBACLR,cAACf,CAAAA,uBAAAA,EAAAA;gBAAWwB,OAAQ,EAAA,OAAA;gBAAQC,SAAU,EAAA,YAAA;0BACnCvB,IAAMqB,EAAAA;;YAGVrB,IAAMwB,EAAAA,KAAAA,EAAOC,wBACZZ,cAACL,CAAAA,iBAAAA,EAAAA;gBAAKkB,SAAW,EAAA,CAAA;gBAAGhB,GAAK,EAAA,CAAA;gBAAGiB,IAAK,EAAA,MAAA;AAC9B3B,gBAAAA,QAAAA,EAAAA,IAAAA,EAAMwB,KAAOI,EAAAA,GAAAA,CAAI,CAACC,IAAAA,iBAAShB,cAACiB,CAAAA,kBAAAA,EAAAA;AAAqBD,wBAAAA,QAAAA,EAAAA,IAAAA,CAAKE;AAAfF,qBAAAA,EAAAA,IAAAA,CAAKG,EAAE,CAAA;;;;AAKzD;;;;"}
@@ -0,0 +1,50 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { useAuth } from '@strapi/admin/strapi-admin';
3
+ import { Typography, Flex, Avatar, Badge } from '@strapi/design-system';
4
+ import { styled } from 'styled-components';
5
+ import { getInitials, getDisplayName } from '../utils/users.mjs';
6
+
7
+ /* -------------------------------------------------------------------------------------------------
8
+ * ProfileWidget
9
+ * -----------------------------------------------------------------------------------------------*/ const DisplayNameTypography = styled(Typography)`
10
+ font-size: 2.4rem;
11
+ `;
12
+ const ProfileWidget = ()=>{
13
+ const user = useAuth('User', (state)=>state.user);
14
+ const userDisplayName = getDisplayName(user);
15
+ const initials = getInitials(user);
16
+ return /*#__PURE__*/ jsxs(Flex, {
17
+ direction: "column",
18
+ gap: 3,
19
+ height: "100%",
20
+ justifyContent: "center",
21
+ children: [
22
+ /*#__PURE__*/ jsx(Avatar.Item, {
23
+ delayMs: 0,
24
+ fallback: initials
25
+ }),
26
+ userDisplayName && /*#__PURE__*/ jsx(DisplayNameTypography, {
27
+ fontWeight: "bold",
28
+ textTransform: "none",
29
+ textAlign: "center",
30
+ children: userDisplayName
31
+ }),
32
+ user?.email && /*#__PURE__*/ jsx(Typography, {
33
+ variant: "omega",
34
+ textColor: "neutral600",
35
+ children: user?.email
36
+ }),
37
+ user?.roles?.length && /*#__PURE__*/ jsx(Flex, {
38
+ marginTop: 2,
39
+ gap: 1,
40
+ wrap: "wrap",
41
+ children: user?.roles?.map((role)=>/*#__PURE__*/ jsx(Badge, {
42
+ children: role.name
43
+ }, role.id))
44
+ })
45
+ ]
46
+ });
47
+ };
48
+
49
+ export { ProfileWidget };
50
+ //# sourceMappingURL=Widgets.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Widgets.mjs","sources":["../../../../../admin/src/components/Widgets.tsx"],"sourcesContent":["import { useAuth } from '@strapi/admin/strapi-admin';\nimport { Avatar, Badge, Flex, Typography } from '@strapi/design-system';\nimport { styled } from 'styled-components';\n\nimport { getDisplayName, getInitials } from '../utils/users';\n\n/* -------------------------------------------------------------------------------------------------\n * ProfileWidget\n * -----------------------------------------------------------------------------------------------*/\n\nconst DisplayNameTypography = styled(Typography)`\n font-size: 2.4rem;\n`;\n\nconst ProfileWidget = () => {\n const user = useAuth('User', (state) => state.user);\n const userDisplayName = getDisplayName(user);\n const initials = getInitials(user);\n\n return (\n <Flex direction=\"column\" gap={3} height=\"100%\" justifyContent=\"center\">\n <Avatar.Item delayMs={0} fallback={initials} />\n {userDisplayName && (\n <DisplayNameTypography fontWeight=\"bold\" textTransform=\"none\" textAlign=\"center\">\n {userDisplayName}\n </DisplayNameTypography>\n )}\n {user?.email && (\n <Typography variant=\"omega\" textColor=\"neutral600\">\n {user?.email}\n </Typography>\n )}\n {user?.roles?.length && (\n <Flex marginTop={2} gap={1} wrap=\"wrap\">\n {user?.roles?.map((role) => <Badge key={role.id}>{role.name}</Badge>)}\n </Flex>\n )}\n </Flex>\n );\n};\n\nexport { ProfileWidget };\n"],"names":["DisplayNameTypography","styled","Typography","ProfileWidget","user","useAuth","state","userDisplayName","getDisplayName","initials","getInitials","_jsxs","Flex","direction","gap","height","justifyContent","_jsx","Avatar","Item","delayMs","fallback","fontWeight","textTransform","textAlign","email","variant","textColor","roles","length","marginTop","wrap","map","role","Badge","name","id"],"mappings":";;;;;;AAMA;;AAEkG,qGAElG,MAAMA,qBAAAA,GAAwBC,MAAOC,CAAAA,UAAAA,CAAW;;AAEhD,CAAC;AAED,MAAMC,aAAgB,GAAA,IAAA;AACpB,IAAA,MAAMC,OAAOC,OAAQ,CAAA,MAAA,EAAQ,CAACC,KAAAA,GAAUA,MAAMF,IAAI,CAAA;AAClD,IAAA,MAAMG,kBAAkBC,cAAeJ,CAAAA,IAAAA,CAAAA;AACvC,IAAA,MAAMK,WAAWC,WAAYN,CAAAA,IAAAA,CAAAA;AAE7B,IAAA,qBACEO,IAACC,CAAAA,IAAAA,EAAAA;QAAKC,SAAU,EAAA,QAAA;QAASC,GAAK,EAAA,CAAA;QAAGC,MAAO,EAAA,MAAA;QAAOC,cAAe,EAAA,QAAA;;AAC5D,0BAAAC,GAAA,CAACC,OAAOC,IAAI,EAAA;gBAACC,OAAS,EAAA,CAAA;gBAAGC,QAAUZ,EAAAA;;AAClCF,YAAAA,eAAAA,kBACCU,GAACjB,CAAAA,qBAAAA,EAAAA;gBAAsBsB,UAAW,EAAA,MAAA;gBAAOC,aAAc,EAAA,MAAA;gBAAOC,SAAU,EAAA,QAAA;AACrEjB,gBAAAA,QAAAA,EAAAA;;AAGJH,YAAAA,IAAAA,EAAMqB,uBACLR,GAACf,CAAAA,UAAAA,EAAAA;gBAAWwB,OAAQ,EAAA,OAAA;gBAAQC,SAAU,EAAA,YAAA;0BACnCvB,IAAMqB,EAAAA;;YAGVrB,IAAMwB,EAAAA,KAAAA,EAAOC,wBACZZ,GAACL,CAAAA,IAAAA,EAAAA;gBAAKkB,SAAW,EAAA,CAAA;gBAAGhB,GAAK,EAAA,CAAA;gBAAGiB,IAAK,EAAA,MAAA;AAC9B3B,gBAAAA,QAAAA,EAAAA,IAAAA,EAAMwB,KAAOI,EAAAA,GAAAA,CAAI,CAACC,IAAAA,iBAAShB,GAACiB,CAAAA,KAAAA,EAAAA;AAAqBD,wBAAAA,QAAAA,EAAAA,IAAAA,CAAKE;AAAfF,qBAAAA,EAAAA,IAAAA,CAAKG,EAAE,CAAA;;;;AAKzD;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"Widgets.js","sources":["../../../../../../admin/src/core/apis/Widgets.ts"],"sourcesContent":["/* eslint-disable check-file/filename-naming-convention */\n\nimport invariant from 'invariant';\nimport { To } from 'react-router-dom';\n\nimport { Permission } from '../../../../shared/contracts/shared';\n\nimport type { Internal, Utils } from '@strapi/types';\nimport type { MessageDescriptor } from 'react-intl';\n\ntype WidgetUID = Utils.String.Suffix<\n | Internal.Namespace.WithSeparator<Internal.Namespace.Plugin>\n | Internal.Namespace.WithSeparator<Internal.Namespace.Global>,\n string\n>;\n\ntype WidgetArgs = {\n icon?: typeof import('@strapi/icons').PuzzlePiece;\n title: MessageDescriptor;\n link?: {\n label: MessageDescriptor;\n href: To;\n };\n component: () => Promise<React.ComponentType>;\n pluginId?: string;\n id: string;\n permissions?: Permission[];\n};\n\ntype Widget = Omit<WidgetArgs, 'id' | 'pluginId'> & { uid: WidgetUID };\n\nclass Widgets {\n widgets: Record<string, Widget>;\n\n constructor() {\n this.widgets = {};\n }\n\n register = (widget: WidgetArgs | WidgetArgs[]) => {\n if (Array.isArray(widget)) {\n widget.forEach((newWidget) => {\n this.register(newWidget);\n });\n } else {\n invariant(widget.id, 'An id must be provided');\n invariant(widget.component, 'A component must be provided');\n invariant(widget.title, 'A title must be provided');\n invariant(widget.icon, 'An icon must be provided');\n\n // Replace id and pluginId with computed uid\n const { id, pluginId, ...widgetToStore } = widget;\n const uid: WidgetUID = pluginId ? `plugin::${pluginId}.${id}` : `global::${id}`;\n\n this.widgets[uid] = { ...widgetToStore, uid };\n }\n };\n\n getAll = () => {\n return Object.values(this.widgets);\n };\n}\n\nexport { Widgets };\nexport type { WidgetArgs, Widget };\n"],"names":["Widgets","constructor","register","widget","Array","isArray","forEach","newWidget","invariant","id","component","title","icon","pluginId","widgetToStore","uid","widgets","getAll","Object","values"],"mappings":";;;;AA+BA,MAAMA,OAAAA,CAAAA;IAGJC,WAAc,EAAA;AAIdC,QAAAA,IAAAA,CAAAA,QAAAA,GAAW,CAACC,MAAAA,GAAAA;YACV,IAAIC,KAAAA,CAAMC,OAAO,CAACF,MAAS,CAAA,EAAA;gBACzBA,MAAOG,CAAAA,OAAO,CAAC,CAACC,SAAAA,GAAAA;oBACd,IAAI,CAACL,QAAQ,CAACK,SAAAA,CAAAA;AAChB,iBAAA,CAAA;aACK,MAAA;gBACLC,SAAUL,CAAAA,MAAAA,CAAOM,EAAE,EAAE,wBAAA,CAAA;gBACrBD,SAAUL,CAAAA,MAAAA,CAAOO,SAAS,EAAE,8BAAA,CAAA;gBAC5BF,SAAUL,CAAAA,MAAAA,CAAOQ,KAAK,EAAE,0BAAA,CAAA;gBACxBH,SAAUL,CAAAA,MAAAA,CAAOS,IAAI,EAAE,0BAAA,CAAA;;AAGvB,gBAAA,MAAM,EAAEH,EAAE,EAAEI,QAAQ,EAAE,GAAGC,eAAe,GAAGX,MAAAA;AAC3C,gBAAA,MAAMY,GAAiBF,GAAAA,QAAAA,GAAW,CAAC,QAAQ,EAAEA,QAAS,CAAA,CAAC,EAAEJ,EAAAA,CAAG,CAAC,GAAG,CAAC,QAAQ,EAAEA,GAAG,CAAC;AAE/E,gBAAA,IAAI,CAACO,OAAO,CAACD,GAAAA,CAAI,GAAG;AAAE,oBAAA,GAAGD,aAAa;AAAEC,oBAAAA;AAAI,iBAAA;AAC9C;AACF,SAAA;aAEAE,MAAS,GAAA,IAAA;AACP,YAAA,OAAOC,MAAOC,CAAAA,MAAM,CAAC,IAAI,CAACH,OAAO,CAAA;AACnC,SAAA;QAxBE,IAAI,CAACA,OAAO,GAAG,EAAC;AAClB;AAwBF;;;;"}
1
+ {"version":3,"file":"Widgets.js","sources":["../../../../../../admin/src/core/apis/Widgets.ts"],"sourcesContent":["/* eslint-disable check-file/filename-naming-convention */\n\nimport invariant from 'invariant';\nimport { To } from 'react-router-dom';\n\nimport { Permission } from '../../../../shared/contracts/shared';\n\nimport type { Internal, Utils } from '@strapi/types';\nimport type { MessageDescriptor } from 'react-intl';\n\ntype WidgetUID = Utils.String.Suffix<\n | Internal.Namespace.WithSeparator<Internal.Namespace.Plugin>\n | Internal.Namespace.WithSeparator<Internal.Namespace.Global>,\n string\n>;\n\ntype WidgetArgs = {\n icon?: typeof import('@strapi/icons').PuzzlePiece;\n title: MessageDescriptor;\n link?: {\n label: MessageDescriptor;\n href: To;\n };\n component: () => Promise<React.ComponentType>;\n pluginId?: string;\n id: string;\n permissions?: Array<Pick<Permission, 'action'> & Partial<Omit<Permission, 'action'>>>;\n};\n\ntype Widget = Omit<WidgetArgs, 'id' | 'pluginId'> & { uid: WidgetUID };\n\nclass Widgets {\n widgets: Record<string, Widget>;\n\n constructor() {\n this.widgets = {};\n }\n\n register = (widget: WidgetArgs | WidgetArgs[]) => {\n if (Array.isArray(widget)) {\n widget.forEach((newWidget) => {\n this.register(newWidget);\n });\n } else {\n invariant(widget.id, 'An id must be provided');\n invariant(widget.component, 'A component must be provided');\n invariant(widget.title, 'A title must be provided');\n invariant(widget.icon, 'An icon must be provided');\n\n // Replace id and pluginId with computed uid\n const { id, pluginId, ...widgetToStore } = widget;\n const uid: WidgetUID = pluginId ? `plugin::${pluginId}.${id}` : `global::${id}`;\n\n this.widgets[uid] = { ...widgetToStore, uid };\n }\n };\n\n getAll = () => {\n return Object.values(this.widgets);\n };\n}\n\nexport { Widgets };\nexport type { WidgetArgs, Widget };\n"],"names":["Widgets","constructor","register","widget","Array","isArray","forEach","newWidget","invariant","id","component","title","icon","pluginId","widgetToStore","uid","widgets","getAll","Object","values"],"mappings":";;;;AA+BA,MAAMA,OAAAA,CAAAA;IAGJC,WAAc,EAAA;AAIdC,QAAAA,IAAAA,CAAAA,QAAAA,GAAW,CAACC,MAAAA,GAAAA;YACV,IAAIC,KAAAA,CAAMC,OAAO,CAACF,MAAS,CAAA,EAAA;gBACzBA,MAAOG,CAAAA,OAAO,CAAC,CAACC,SAAAA,GAAAA;oBACd,IAAI,CAACL,QAAQ,CAACK,SAAAA,CAAAA;AAChB,iBAAA,CAAA;aACK,MAAA;gBACLC,SAAUL,CAAAA,MAAAA,CAAOM,EAAE,EAAE,wBAAA,CAAA;gBACrBD,SAAUL,CAAAA,MAAAA,CAAOO,SAAS,EAAE,8BAAA,CAAA;gBAC5BF,SAAUL,CAAAA,MAAAA,CAAOQ,KAAK,EAAE,0BAAA,CAAA;gBACxBH,SAAUL,CAAAA,MAAAA,CAAOS,IAAI,EAAE,0BAAA,CAAA;;AAGvB,gBAAA,MAAM,EAAEH,EAAE,EAAEI,QAAQ,EAAE,GAAGC,eAAe,GAAGX,MAAAA;AAC3C,gBAAA,MAAMY,GAAiBF,GAAAA,QAAAA,GAAW,CAAC,QAAQ,EAAEA,QAAS,CAAA,CAAC,EAAEJ,EAAAA,CAAG,CAAC,GAAG,CAAC,QAAQ,EAAEA,GAAG,CAAC;AAE/E,gBAAA,IAAI,CAACO,OAAO,CAACD,GAAAA,CAAI,GAAG;AAAE,oBAAA,GAAGD,aAAa;AAAEC,oBAAAA;AAAI,iBAAA;AAC9C;AACF,SAAA;aAEAE,MAAS,GAAA,IAAA;AACP,YAAA,OAAOC,MAAOC,CAAAA,MAAM,CAAC,IAAI,CAACH,OAAO,CAAA;AACnC,SAAA;QAxBE,IAAI,CAACA,OAAO,GAAG,EAAC;AAClB;AAwBF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"Widgets.mjs","sources":["../../../../../../admin/src/core/apis/Widgets.ts"],"sourcesContent":["/* eslint-disable check-file/filename-naming-convention */\n\nimport invariant from 'invariant';\nimport { To } from 'react-router-dom';\n\nimport { Permission } from '../../../../shared/contracts/shared';\n\nimport type { Internal, Utils } from '@strapi/types';\nimport type { MessageDescriptor } from 'react-intl';\n\ntype WidgetUID = Utils.String.Suffix<\n | Internal.Namespace.WithSeparator<Internal.Namespace.Plugin>\n | Internal.Namespace.WithSeparator<Internal.Namespace.Global>,\n string\n>;\n\ntype WidgetArgs = {\n icon?: typeof import('@strapi/icons').PuzzlePiece;\n title: MessageDescriptor;\n link?: {\n label: MessageDescriptor;\n href: To;\n };\n component: () => Promise<React.ComponentType>;\n pluginId?: string;\n id: string;\n permissions?: Permission[];\n};\n\ntype Widget = Omit<WidgetArgs, 'id' | 'pluginId'> & { uid: WidgetUID };\n\nclass Widgets {\n widgets: Record<string, Widget>;\n\n constructor() {\n this.widgets = {};\n }\n\n register = (widget: WidgetArgs | WidgetArgs[]) => {\n if (Array.isArray(widget)) {\n widget.forEach((newWidget) => {\n this.register(newWidget);\n });\n } else {\n invariant(widget.id, 'An id must be provided');\n invariant(widget.component, 'A component must be provided');\n invariant(widget.title, 'A title must be provided');\n invariant(widget.icon, 'An icon must be provided');\n\n // Replace id and pluginId with computed uid\n const { id, pluginId, ...widgetToStore } = widget;\n const uid: WidgetUID = pluginId ? `plugin::${pluginId}.${id}` : `global::${id}`;\n\n this.widgets[uid] = { ...widgetToStore, uid };\n }\n };\n\n getAll = () => {\n return Object.values(this.widgets);\n };\n}\n\nexport { Widgets };\nexport type { WidgetArgs, Widget };\n"],"names":["Widgets","constructor","register","widget","Array","isArray","forEach","newWidget","invariant","id","component","title","icon","pluginId","widgetToStore","uid","widgets","getAll","Object","values"],"mappings":";;AA+BA,MAAMA,OAAAA,CAAAA;IAGJC,WAAc,EAAA;AAIdC,QAAAA,IAAAA,CAAAA,QAAAA,GAAW,CAACC,MAAAA,GAAAA;YACV,IAAIC,KAAAA,CAAMC,OAAO,CAACF,MAAS,CAAA,EAAA;gBACzBA,MAAOG,CAAAA,OAAO,CAAC,CAACC,SAAAA,GAAAA;oBACd,IAAI,CAACL,QAAQ,CAACK,SAAAA,CAAAA;AAChB,iBAAA,CAAA;aACK,MAAA;gBACLC,SAAUL,CAAAA,MAAAA,CAAOM,EAAE,EAAE,wBAAA,CAAA;gBACrBD,SAAUL,CAAAA,MAAAA,CAAOO,SAAS,EAAE,8BAAA,CAAA;gBAC5BF,SAAUL,CAAAA,MAAAA,CAAOQ,KAAK,EAAE,0BAAA,CAAA;gBACxBH,SAAUL,CAAAA,MAAAA,CAAOS,IAAI,EAAE,0BAAA,CAAA;;AAGvB,gBAAA,MAAM,EAAEH,EAAE,EAAEI,QAAQ,EAAE,GAAGC,eAAe,GAAGX,MAAAA;AAC3C,gBAAA,MAAMY,GAAiBF,GAAAA,QAAAA,GAAW,CAAC,QAAQ,EAAEA,QAAS,CAAA,CAAC,EAAEJ,EAAAA,CAAG,CAAC,GAAG,CAAC,QAAQ,EAAEA,GAAG,CAAC;AAE/E,gBAAA,IAAI,CAACO,OAAO,CAACD,GAAAA,CAAI,GAAG;AAAE,oBAAA,GAAGD,aAAa;AAAEC,oBAAAA;AAAI,iBAAA;AAC9C;AACF,SAAA;aAEAE,MAAS,GAAA,IAAA;AACP,YAAA,OAAOC,MAAOC,CAAAA,MAAM,CAAC,IAAI,CAACH,OAAO,CAAA;AACnC,SAAA;QAxBE,IAAI,CAACA,OAAO,GAAG,EAAC;AAClB;AAwBF;;;;"}
1
+ {"version":3,"file":"Widgets.mjs","sources":["../../../../../../admin/src/core/apis/Widgets.ts"],"sourcesContent":["/* eslint-disable check-file/filename-naming-convention */\n\nimport invariant from 'invariant';\nimport { To } from 'react-router-dom';\n\nimport { Permission } from '../../../../shared/contracts/shared';\n\nimport type { Internal, Utils } from '@strapi/types';\nimport type { MessageDescriptor } from 'react-intl';\n\ntype WidgetUID = Utils.String.Suffix<\n | Internal.Namespace.WithSeparator<Internal.Namespace.Plugin>\n | Internal.Namespace.WithSeparator<Internal.Namespace.Global>,\n string\n>;\n\ntype WidgetArgs = {\n icon?: typeof import('@strapi/icons').PuzzlePiece;\n title: MessageDescriptor;\n link?: {\n label: MessageDescriptor;\n href: To;\n };\n component: () => Promise<React.ComponentType>;\n pluginId?: string;\n id: string;\n permissions?: Array<Pick<Permission, 'action'> & Partial<Omit<Permission, 'action'>>>;\n};\n\ntype Widget = Omit<WidgetArgs, 'id' | 'pluginId'> & { uid: WidgetUID };\n\nclass Widgets {\n widgets: Record<string, Widget>;\n\n constructor() {\n this.widgets = {};\n }\n\n register = (widget: WidgetArgs | WidgetArgs[]) => {\n if (Array.isArray(widget)) {\n widget.forEach((newWidget) => {\n this.register(newWidget);\n });\n } else {\n invariant(widget.id, 'An id must be provided');\n invariant(widget.component, 'A component must be provided');\n invariant(widget.title, 'A title must be provided');\n invariant(widget.icon, 'An icon must be provided');\n\n // Replace id and pluginId with computed uid\n const { id, pluginId, ...widgetToStore } = widget;\n const uid: WidgetUID = pluginId ? `plugin::${pluginId}.${id}` : `global::${id}`;\n\n this.widgets[uid] = { ...widgetToStore, uid };\n }\n };\n\n getAll = () => {\n return Object.values(this.widgets);\n };\n}\n\nexport { Widgets };\nexport type { WidgetArgs, Widget };\n"],"names":["Widgets","constructor","register","widget","Array","isArray","forEach","newWidget","invariant","id","component","title","icon","pluginId","widgetToStore","uid","widgets","getAll","Object","values"],"mappings":";;AA+BA,MAAMA,OAAAA,CAAAA;IAGJC,WAAc,EAAA;AAIdC,QAAAA,IAAAA,CAAAA,QAAAA,GAAW,CAACC,MAAAA,GAAAA;YACV,IAAIC,KAAAA,CAAMC,OAAO,CAACF,MAAS,CAAA,EAAA;gBACzBA,MAAOG,CAAAA,OAAO,CAAC,CAACC,SAAAA,GAAAA;oBACd,IAAI,CAACL,QAAQ,CAACK,SAAAA,CAAAA;AAChB,iBAAA,CAAA;aACK,MAAA;gBACLC,SAAUL,CAAAA,MAAAA,CAAOM,EAAE,EAAE,wBAAA,CAAA;gBACrBD,SAAUL,CAAAA,MAAAA,CAAOO,SAAS,EAAE,8BAAA,CAAA;gBAC5BF,SAAUL,CAAAA,MAAAA,CAAOQ,KAAK,EAAE,0BAAA,CAAA;gBACxBH,SAAUL,CAAAA,MAAAA,CAAOS,IAAI,EAAE,0BAAA,CAAA;;AAGvB,gBAAA,MAAM,EAAEH,EAAE,EAAEI,QAAQ,EAAE,GAAGC,eAAe,GAAGX,MAAAA;AAC3C,gBAAA,MAAMY,GAAiBF,GAAAA,QAAAA,GAAW,CAAC,QAAQ,EAAEA,QAAS,CAAA,CAAC,EAAEJ,EAAAA,CAAG,CAAC,GAAG,CAAC,QAAQ,EAAEA,GAAG,CAAC;AAE/E,gBAAA,IAAI,CAACO,OAAO,CAACD,GAAAA,CAAI,GAAG;AAAE,oBAAA,GAAGD,aAAa;AAAEC,oBAAAA;AAAI,iBAAA;AAC9C;AACF,SAAA;aAEAE,MAAS,GAAA,IAAA;AACP,YAAA,OAAOC,MAAOC,CAAAA,MAAM,CAAC,IAAI,CAACH,OAAO,CAAA;AACnC,SAAA;QAxBE,IAAI,CAACA,OAAO,GAAG,EAAC;AAClB;AAwBF;;;;"}