@strapi/admin 4.15.5-alpha.1 → 4.15.5-alpha.3

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 (202) hide show
  1. package/dist/_chunks/{AuthenticatedApp-3dc33451.mjs → AuthenticatedApp-2cfb41e2.mjs} +21 -21
  2. package/dist/_chunks/{AuthenticatedApp-3dc33451.mjs.map → AuthenticatedApp-2cfb41e2.mjs.map} +1 -1
  3. package/dist/_chunks/{AuthenticatedApp-4f5e9d2f.js → AuthenticatedApp-79e3f141.js} +21 -21
  4. package/dist/_chunks/{AuthenticatedApp-4f5e9d2f.js.map → AuthenticatedApp-79e3f141.js.map} +1 -1
  5. package/dist/_chunks/{HomePage-cd238204.mjs → HomePage-1376624b.mjs} +4 -4
  6. package/dist/_chunks/{HomePage-cd238204.mjs.map → HomePage-1376624b.mjs.map} +1 -1
  7. package/dist/_chunks/{HomePage-7f6b292b.js → HomePage-a617d19a.js} +4 -4
  8. package/dist/_chunks/{HomePage-7f6b292b.js.map → HomePage-a617d19a.js.map} +1 -1
  9. package/dist/_chunks/{HomePage-9527f582.js → HomePage-a9e9942a.js} +4 -4
  10. package/dist/_chunks/{HomePage-9527f582.js.map → HomePage-a9e9942a.js.map} +1 -1
  11. package/dist/_chunks/{HomePage-ffc96143.mjs → HomePage-e333ff90.mjs} +4 -4
  12. package/dist/_chunks/{HomePage-ffc96143.mjs.map → HomePage-e333ff90.mjs.map} +1 -1
  13. package/dist/_chunks/{InstalledPluginsPage-61332416.mjs → InstalledPluginsPage-c7ccd2b2.mjs} +3 -3
  14. package/dist/_chunks/{InstalledPluginsPage-61332416.mjs.map → InstalledPluginsPage-c7ccd2b2.mjs.map} +1 -1
  15. package/dist/_chunks/{InstalledPluginsPage-d93fbab1.js → InstalledPluginsPage-fb2aaa1f.js} +3 -3
  16. package/dist/_chunks/{InstalledPluginsPage-d93fbab1.js.map → InstalledPluginsPage-fb2aaa1f.js.map} +1 -1
  17. package/dist/_chunks/{Login-48299d05.mjs → Login-69bf063c.mjs} +2 -2
  18. package/dist/_chunks/{Login-48299d05.mjs.map → Login-69bf063c.mjs.map} +1 -1
  19. package/dist/_chunks/{Login-8c7b1206.js → Login-d6fd38ea.js} +2 -2
  20. package/dist/_chunks/{Login-8c7b1206.js.map → Login-d6fd38ea.js.map} +1 -1
  21. package/dist/_chunks/{MarketplacePage-7935f8c5.js → MarketplacePage-7c516084.js} +3 -3
  22. package/dist/_chunks/{MarketplacePage-7935f8c5.js.map → MarketplacePage-7c516084.js.map} +1 -1
  23. package/dist/_chunks/{MarketplacePage-ebab9b26.mjs → MarketplacePage-c829d0de.mjs} +3 -3
  24. package/dist/_chunks/{MarketplacePage-ebab9b26.mjs.map → MarketplacePage-c829d0de.mjs.map} +1 -1
  25. package/dist/_chunks/{ProfilePage-6914e5ef.js → ProfilePage-a2e54283.js} +56 -8
  26. package/dist/_chunks/ProfilePage-a2e54283.js.map +1 -0
  27. package/dist/_chunks/{ProfilePage-5697e4c6.mjs → ProfilePage-c6d8c69f.mjs} +56 -8
  28. package/dist/_chunks/ProfilePage-c6d8c69f.mjs.map +1 -0
  29. package/dist/_chunks/{build-f011d8dc.mjs → build-20299009.mjs} +2 -2
  30. package/dist/_chunks/{build-f011d8dc.mjs.map → build-20299009.mjs.map} +1 -1
  31. package/dist/_chunks/{build-b285bccd.js → build-58827c7a.js} +2 -2
  32. package/dist/_chunks/{build-b285bccd.js.map → build-58827c7a.js.map} +1 -1
  33. package/dist/_chunks/{constants-de1431ff.js → constants-4c06740e.js} +3 -3
  34. package/dist/_chunks/{constants-de1431ff.js.map → constants-4c06740e.js.map} +1 -1
  35. package/dist/_chunks/{constants-464bf1b5.mjs → constants-5f0670d7.mjs} +5 -5
  36. package/dist/_chunks/{constants-464bf1b5.mjs.map → constants-5f0670d7.mjs.map} +1 -1
  37. package/dist/_chunks/{constants-5fa6f753.mjs → constants-842c6449.mjs} +6 -6
  38. package/dist/_chunks/{constants-5fa6f753.mjs.map → constants-842c6449.mjs.map} +1 -1
  39. package/dist/_chunks/{constants-c99e549a.js → constants-9212941b.js} +6 -6
  40. package/dist/_chunks/{constants-c99e549a.js.map → constants-9212941b.js.map} +1 -1
  41. package/dist/_chunks/{constants-27fee9dc.js → constants-962e9922.js} +5 -5
  42. package/dist/_chunks/{constants-27fee9dc.js.map → constants-962e9922.js.map} +1 -1
  43. package/dist/_chunks/{constants-594069b7.js → constants-a16f9961.js} +2 -2
  44. package/dist/_chunks/{constants-594069b7.js.map → constants-a16f9961.js.map} +1 -1
  45. package/dist/_chunks/{constants-ab7805d3.mjs → constants-a3372db6.mjs} +3 -3
  46. package/dist/_chunks/{constants-ab7805d3.mjs.map → constants-a3372db6.mjs.map} +1 -1
  47. package/dist/_chunks/{constants-021855fe.mjs → constants-fad06b7f.mjs} +2 -2
  48. package/dist/_chunks/{constants-021855fe.mjs.map → constants-fad06b7f.mjs.map} +1 -1
  49. package/dist/_chunks/{develop-3c9f7452.mjs → develop-7066af5e.mjs} +2 -2
  50. package/dist/_chunks/{develop-3c9f7452.mjs.map → develop-7066af5e.mjs.map} +1 -1
  51. package/dist/_chunks/{develop-9765d7ba.js → develop-a7d5cf0c.js} +2 -2
  52. package/dist/_chunks/{develop-9765d7ba.js.map → develop-a7d5cf0c.js.map} +1 -1
  53. package/dist/_chunks/{index-aea536d3.js → index-07d155a0.js} +2 -2
  54. package/dist/_chunks/{index-aea536d3.js.map → index-07d155a0.js.map} +1 -1
  55. package/dist/_chunks/{index-ff1ccfdf.js → index-12b7d75f.js} +4 -4
  56. package/dist/_chunks/{index-ff1ccfdf.js.map → index-12b7d75f.js.map} +1 -1
  57. package/dist/_chunks/{index-4d908a6a.mjs → index-1316edb2.mjs} +4 -4
  58. package/dist/_chunks/{index-4d908a6a.mjs.map → index-1316edb2.mjs.map} +1 -1
  59. package/dist/_chunks/{index-1b652ffb.js → index-174cc6b9.js} +4 -4
  60. package/dist/_chunks/{index-1b652ffb.js.map → index-174cc6b9.js.map} +1 -1
  61. package/dist/_chunks/{index-1fad9ce4.js → index-18fed2cd.js} +3 -3
  62. package/dist/_chunks/{index-1fad9ce4.js.map → index-18fed2cd.js.map} +1 -1
  63. package/dist/_chunks/{index-1d447dd1.mjs → index-1e3a2719.mjs} +5 -5
  64. package/dist/_chunks/{index-1d447dd1.mjs.map → index-1e3a2719.mjs.map} +1 -1
  65. package/dist/_chunks/{index-a4501c11.mjs → index-242c514c.mjs} +3 -3
  66. package/dist/_chunks/{index-a4501c11.mjs.map → index-242c514c.mjs.map} +1 -1
  67. package/dist/_chunks/{index-9aeead4f.js → index-252284ed.js} +3 -3
  68. package/dist/_chunks/{index-9aeead4f.js.map → index-252284ed.js.map} +1 -1
  69. package/dist/_chunks/{index-597d52e6.js → index-25bb4a4d.js} +5 -5
  70. package/dist/_chunks/{index-597d52e6.js.map → index-25bb4a4d.js.map} +1 -1
  71. package/dist/_chunks/{index-fc1b2e24.js → index-25c9158f.js} +2 -2
  72. package/dist/_chunks/{index-fc1b2e24.js.map → index-25c9158f.js.map} +1 -1
  73. package/dist/_chunks/{index-a06be1eb.js → index-25feef65.js} +6 -6
  74. package/dist/_chunks/{index-a06be1eb.js.map → index-25feef65.js.map} +1 -1
  75. package/dist/_chunks/{index-d973d4aa.js → index-2aed5618.js} +3 -3
  76. package/dist/_chunks/{index-d973d4aa.js.map → index-2aed5618.js.map} +1 -1
  77. package/dist/_chunks/{index-16f63601.js → index-2b331655.js} +3 -3
  78. package/dist/_chunks/{index-16f63601.js.map → index-2b331655.js.map} +1 -1
  79. package/dist/_chunks/{index-491a644c.mjs → index-314f72f4.mjs} +4 -4
  80. package/dist/_chunks/{index-491a644c.mjs.map → index-314f72f4.mjs.map} +1 -1
  81. package/dist/_chunks/{index-1a101386.js → index-341222f2.js} +3 -3
  82. package/dist/_chunks/{index-1a101386.js.map → index-341222f2.js.map} +1 -1
  83. package/dist/_chunks/{index-2a513e27.js → index-3444ab6f.js} +4 -4
  84. package/dist/_chunks/{index-2a513e27.js.map → index-3444ab6f.js.map} +1 -1
  85. package/dist/_chunks/{index-441a4430.js → index-35fc9959.js} +3 -3
  86. package/dist/_chunks/{index-441a4430.js.map → index-35fc9959.js.map} +1 -1
  87. package/dist/_chunks/{index-9eb58279.mjs → index-45a78b18.mjs} +20 -20
  88. package/dist/_chunks/{index-9eb58279.mjs.map → index-45a78b18.mjs.map} +1 -1
  89. package/dist/_chunks/{index-efa54e88.js → index-48ebb88c.js} +5 -5
  90. package/dist/_chunks/{index-efa54e88.js.map → index-48ebb88c.js.map} +1 -1
  91. package/dist/_chunks/{index-36bc3344.js → index-4a241498.js} +8 -8
  92. package/dist/_chunks/{index-36bc3344.js.map → index-4a241498.js.map} +1 -1
  93. package/dist/_chunks/{index-5c450a5d.js → index-4c29f67c.js} +3 -3
  94. package/dist/_chunks/{index-5c450a5d.js.map → index-4c29f67c.js.map} +1 -1
  95. package/dist/_chunks/{index-765eaefa.mjs → index-517fbe00.mjs} +5 -5
  96. package/dist/_chunks/{index-765eaefa.mjs.map → index-517fbe00.mjs.map} +1 -1
  97. package/dist/_chunks/{index-39ddfa9d.js → index-563a992a.js} +4 -4
  98. package/dist/_chunks/{index-39ddfa9d.js.map → index-563a992a.js.map} +1 -1
  99. package/dist/_chunks/{index-4fcc02a8.mjs → index-5b44cba5.mjs} +2 -2
  100. package/dist/_chunks/{index-4fcc02a8.mjs.map → index-5b44cba5.mjs.map} +1 -1
  101. package/dist/_chunks/{index-83c96824.mjs → index-61c915cd.mjs} +2 -2
  102. package/dist/_chunks/{index-83c96824.mjs.map → index-61c915cd.mjs.map} +1 -1
  103. package/dist/_chunks/{index-e69daec5.mjs → index-61e392e8.mjs} +5 -5
  104. package/dist/_chunks/{index-e69daec5.mjs.map → index-61e392e8.mjs.map} +1 -1
  105. package/dist/_chunks/{index-2d68f91c.js → index-66177bc5.js} +4 -4
  106. package/dist/_chunks/{index-2d68f91c.js.map → index-66177bc5.js.map} +1 -1
  107. package/dist/_chunks/{index-f03ae868.js → index-68ae52b6.js} +5 -5
  108. package/dist/_chunks/{index-f03ae868.js.map → index-68ae52b6.js.map} +1 -1
  109. package/dist/_chunks/{index-bb41a0b4.mjs → index-693383db.mjs} +5 -5
  110. package/dist/_chunks/{index-bb41a0b4.mjs.map → index-693383db.mjs.map} +1 -1
  111. package/dist/_chunks/{index-90670cc5.mjs → index-6b7dceb1.mjs} +3 -3
  112. package/dist/_chunks/{index-90670cc5.mjs.map → index-6b7dceb1.mjs.map} +1 -1
  113. package/dist/_chunks/{index-c77e4b9e.mjs → index-703c58c8.mjs} +4 -4
  114. package/dist/_chunks/{index-c77e4b9e.mjs.map → index-703c58c8.mjs.map} +1 -1
  115. package/dist/_chunks/{index-70170c58.js → index-7338912f.js} +5 -5
  116. package/dist/_chunks/{index-70170c58.js.map → index-7338912f.js.map} +1 -1
  117. package/dist/_chunks/{index-628523c3.mjs → index-7a1a0c5c.mjs} +3 -3
  118. package/dist/_chunks/{index-628523c3.mjs.map → index-7a1a0c5c.mjs.map} +1 -1
  119. package/dist/_chunks/{index-d015b499.mjs → index-7d449292.mjs} +3 -3
  120. package/dist/_chunks/{index-d015b499.mjs.map → index-7d449292.mjs.map} +1 -1
  121. package/dist/_chunks/{index-ad9874a3.mjs → index-80574f48.mjs} +3 -3
  122. package/dist/_chunks/{index-ad9874a3.mjs.map → index-80574f48.mjs.map} +1 -1
  123. package/dist/_chunks/{index-2afcd90d.mjs → index-9910aa5a.mjs} +3 -3
  124. package/dist/_chunks/{index-2afcd90d.mjs.map → index-9910aa5a.mjs.map} +1 -1
  125. package/dist/_chunks/{index-1b68c59f.mjs → index-996f7ad1.mjs} +3 -3
  126. package/dist/_chunks/{index-1b68c59f.mjs.map → index-996f7ad1.mjs.map} +1 -1
  127. package/dist/_chunks/{index-32a85ff2.mjs → index-9b3107a4.mjs} +3 -3
  128. package/dist/_chunks/{index-32a85ff2.mjs.map → index-9b3107a4.mjs.map} +1 -1
  129. package/dist/_chunks/{index-fd519600.js → index-9d03d359.js} +3 -3
  130. package/dist/_chunks/{index-fd519600.js.map → index-9d03d359.js.map} +1 -1
  131. package/dist/_chunks/{index-ad5a8a6c.mjs → index-9e5d59f5.mjs} +5 -5
  132. package/dist/_chunks/{index-ad5a8a6c.mjs.map → index-9e5d59f5.mjs.map} +1 -1
  133. package/dist/_chunks/{index-f273efd9.mjs → index-9f88ad83.mjs} +3 -3
  134. package/dist/_chunks/{index-f273efd9.mjs.map → index-9f88ad83.mjs.map} +1 -1
  135. package/dist/_chunks/{index-6720b4ee.mjs → index-adb714e8.mjs} +2 -2
  136. package/dist/_chunks/{index-6720b4ee.mjs.map → index-adb714e8.mjs.map} +1 -1
  137. package/dist/_chunks/{index-2361b19a.mjs → index-b53ba38d.mjs} +4 -4
  138. package/dist/_chunks/{index-2361b19a.mjs.map → index-b53ba38d.mjs.map} +1 -1
  139. package/dist/_chunks/{index-c075b5a1.mjs → index-b53cf07d.mjs} +52 -40
  140. package/dist/_chunks/index-b53cf07d.mjs.map +1 -0
  141. package/dist/_chunks/{index-62b7bdbe.js → index-b84b9fee.js} +52 -40
  142. package/dist/_chunks/index-b84b9fee.js.map +1 -0
  143. package/dist/_chunks/{index-f1c47f19.mjs → index-bef99193.mjs} +4 -4
  144. package/dist/_chunks/{index-f1c47f19.mjs.map → index-bef99193.mjs.map} +1 -1
  145. package/dist/_chunks/{index-b5cec828.js → index-c2b86584.js} +3 -3
  146. package/dist/_chunks/{index-b5cec828.js.map → index-c2b86584.js.map} +1 -1
  147. package/dist/_chunks/{index-f5225f7c.js → index-c3469f69.js} +3 -3
  148. package/dist/_chunks/{index-f5225f7c.js.map → index-c3469f69.js.map} +1 -1
  149. package/dist/_chunks/{index-86e4d4f7.mjs → index-c4116296.mjs} +6 -6
  150. package/dist/_chunks/{index-86e4d4f7.mjs.map → index-c4116296.mjs.map} +1 -1
  151. package/dist/_chunks/{index-88ed5f05.mjs → index-cf4fe6b7.mjs} +8 -8
  152. package/dist/_chunks/{index-88ed5f05.mjs.map → index-cf4fe6b7.mjs.map} +1 -1
  153. package/dist/_chunks/{index-ed8c4e0c.js → index-d4029932.js} +4 -4
  154. package/dist/_chunks/{index-ed8c4e0c.js.map → index-d4029932.js.map} +1 -1
  155. package/dist/_chunks/{index-9abdeb03.mjs → index-dcbab202.mjs} +3 -3
  156. package/dist/_chunks/{index-9abdeb03.mjs.map → index-dcbab202.mjs.map} +1 -1
  157. package/dist/_chunks/{index-fd22c729.js → index-dcd31235.js} +3 -3
  158. package/dist/_chunks/{index-fd22c729.js.map → index-dcd31235.js.map} +1 -1
  159. package/dist/_chunks/{index-ded977f2.mjs → index-dede2234.mjs} +3 -3
  160. package/dist/_chunks/{index-ded977f2.mjs.map → index-dede2234.mjs.map} +1 -1
  161. package/dist/_chunks/{index-feef2a5d.mjs → index-df70cfd7.mjs} +5 -5
  162. package/dist/_chunks/{index-feef2a5d.mjs.map → index-df70cfd7.mjs.map} +1 -1
  163. package/dist/_chunks/{index-8f82d8d1.mjs → index-dfc0437b.mjs} +4 -4
  164. package/dist/_chunks/{index-8f82d8d1.mjs.map → index-dfc0437b.mjs.map} +1 -1
  165. package/dist/_chunks/{index-a34e5d12.js → index-e8b17b94.js} +5 -5
  166. package/dist/_chunks/{index-a34e5d12.js.map → index-e8b17b94.js.map} +1 -1
  167. package/dist/_chunks/{index-25a6d0ba.js → index-ea8946fb.js} +2 -2
  168. package/dist/_chunks/{index-25a6d0ba.js.map → index-ea8946fb.js.map} +1 -1
  169. package/dist/_chunks/{index-f9594081.js → index-ecb3cfba.js} +5 -5
  170. package/dist/_chunks/{index-f9594081.js.map → index-ecb3cfba.js.map} +1 -1
  171. package/dist/_chunks/{index-dd7c79dd.mjs → index-ed287ba8.mjs} +3 -3
  172. package/dist/_chunks/{index-dd7c79dd.mjs.map → index-ed287ba8.mjs.map} +1 -1
  173. package/dist/_chunks/{index-eaa2c758.mjs → index-edf62e62.mjs} +4 -4
  174. package/dist/_chunks/{index-eaa2c758.mjs.map → index-edf62e62.mjs.map} +1 -1
  175. package/dist/_chunks/{index-c4ab53cb.js → index-ef0c2ffb.js} +4 -4
  176. package/dist/_chunks/{index-c4ab53cb.js.map → index-ef0c2ffb.js.map} +1 -1
  177. package/dist/_chunks/{index-41123d19.js → index-f088fe2c.js} +3 -3
  178. package/dist/_chunks/{index-41123d19.js.map → index-f088fe2c.js.map} +1 -1
  179. package/dist/_chunks/{index-399bd1d4.mjs → index-f097ccea.mjs} +3 -3
  180. package/dist/_chunks/{index-399bd1d4.mjs.map → index-f097ccea.mjs.map} +1 -1
  181. package/dist/_chunks/{index-7b4485be.js → index-fbe9dba1.js} +3 -3
  182. package/dist/_chunks/{index-7b4485be.js.map → index-fbe9dba1.js.map} +1 -1
  183. package/dist/_chunks/{index-29f725ef.js → index-fc7a00f0.js} +20 -20
  184. package/dist/_chunks/{index-29f725ef.js.map → index-fc7a00f0.js.map} +1 -1
  185. package/dist/_chunks/{schema-2cfc666b.mjs → schema-1808aa2d.mjs} +2 -2
  186. package/dist/_chunks/{schema-2cfc666b.mjs.map → schema-1808aa2d.mjs.map} +1 -1
  187. package/dist/_chunks/{schema-b443a274.js → schema-e73a6250.js} +2 -2
  188. package/dist/_chunks/{schema-b443a274.js.map → schema-e73a6250.js.map} +1 -1
  189. package/dist/_chunks/{validateWorkflow-3e09b68c.js → validateWorkflow-11ecf8ee.js} +3 -3
  190. package/dist/_chunks/{validateWorkflow-3e09b68c.js.map → validateWorkflow-11ecf8ee.js.map} +1 -1
  191. package/dist/_chunks/{validateWorkflow-02bdade4.mjs → validateWorkflow-1ec1040b.mjs} +3 -3
  192. package/dist/_chunks/{validateWorkflow-02bdade4.mjs.map → validateWorkflow-1ec1040b.mjs.map} +1 -1
  193. package/dist/admin/index.js +1 -1
  194. package/dist/admin/index.mjs +1 -1
  195. package/dist/cli.js +1 -1
  196. package/dist/cli.mjs +1 -1
  197. package/dist/shared/contracts/users.d.ts +12 -9
  198. package/package.json +12 -12
  199. package/dist/_chunks/ProfilePage-5697e4c6.mjs.map +0 -1
  200. package/dist/_chunks/ProfilePage-6914e5ef.js.map +0 -1
  201. package/dist/_chunks/index-62b7bdbe.js.map +0 -1
  202. package/dist/_chunks/index-c075b5a1.mjs.map +0 -1
@@ -5,7 +5,7 @@ const helperPlugin = require("@strapi/helper-plugin");
5
5
  const reactQuery = require("react-query");
6
6
  const lt = require("semver/functions/lt");
7
7
  const valid = require("semver/functions/valid");
8
- const index = require("./index-2a513e27.js");
8
+ const index = require("./index-3444ab6f.js");
9
9
  const produce = require("immer");
10
10
  const set = require("lodash/set");
11
11
  const reactDnd = require("react-dnd");
@@ -47,7 +47,7 @@ const get__default = /* @__PURE__ */ _interopDefault(get);
47
47
  const styled__default = /* @__PURE__ */ _interopDefault(styled);
48
48
  const cloneDeep__default = /* @__PURE__ */ _interopDefault(cloneDeep);
49
49
  const name = "@strapi/admin";
50
- const version = "4.15.5-alpha.1";
50
+ const version = "4.15.5-alpha.3";
51
51
  const description = "Strapi Admin";
52
52
  const repository = {
53
53
  type: "git",
@@ -122,15 +122,15 @@ const dependencies = {
122
122
  "@radix-ui/react-context": "1.0.1",
123
123
  "@radix-ui/react-toolbar": "1.0.4",
124
124
  "@reduxjs/toolkit": "1.9.7",
125
- "@strapi/data-transfer": "4.15.5-alpha.1",
125
+ "@strapi/data-transfer": "4.15.5-alpha.3",
126
126
  "@strapi/design-system": "1.13.0",
127
- "@strapi/helper-plugin": "4.15.5-alpha.1",
127
+ "@strapi/helper-plugin": "4.15.5-alpha.3",
128
128
  "@strapi/icons": "1.13.0",
129
- "@strapi/permissions": "4.15.5-alpha.1",
130
- "@strapi/provider-audit-logs-local": "4.15.5-alpha.1",
131
- "@strapi/types": "4.15.5-alpha.1",
132
- "@strapi/typescript-utils": "4.15.5-alpha.1",
133
- "@strapi/utils": "4.15.5-alpha.1",
129
+ "@strapi/permissions": "4.15.5-alpha.3",
130
+ "@strapi/provider-audit-logs-local": "4.15.5-alpha.3",
131
+ "@strapi/types": "4.15.5-alpha.3",
132
+ "@strapi/typescript-utils": "4.15.5-alpha.3",
133
+ "@strapi/utils": "4.15.5-alpha.3",
134
134
  axios: "1.6.0",
135
135
  bcryptjs: "2.4.3",
136
136
  boxen: "5.1.2",
@@ -219,9 +219,9 @@ const dependencies = {
219
219
  yup: "0.32.9"
220
220
  };
221
221
  const devDependencies = {
222
- "@strapi/admin-test-utils": "4.15.5-alpha.1",
223
- "@strapi/pack-up": "4.15.5-alpha.1",
224
- "@strapi/strapi": "4.15.5-alpha.1",
222
+ "@strapi/admin-test-utils": "4.15.5-alpha.3",
223
+ "@strapi/pack-up": "4.15.5-alpha.3",
224
+ "@strapi/strapi": "4.15.5-alpha.3",
225
225
  "@testing-library/dom": "9.2.0",
226
226
  "@testing-library/react": "14.0.0",
227
227
  "@testing-library/user-event": "14.4.3",
@@ -255,7 +255,7 @@ const nx = {
255
255
  }
256
256
  }
257
257
  };
258
- const gitHead = "59aec6c474372383fcdae05e0c781c1a7bc0c5ee";
258
+ const gitHead = "85efb4bfa37cbf434907dcef6959c541d2b74249";
259
259
  const packageJSON = {
260
260
  name,
261
261
  version,
@@ -1214,23 +1214,23 @@ const AppLayout = ({ children, sideNav }) => {
1214
1214
  };
1215
1215
  const CM = React__namespace.lazy(
1216
1216
  // @ts-expect-error – No types, yet.
1217
- () => Promise.resolve().then(() => require("./index-36bc3344.js")).then((n) => n.index)
1217
+ () => Promise.resolve().then(() => require("./index-4a241498.js")).then((n) => n.index)
1218
1218
  );
1219
1219
  const HomePage = React__namespace.lazy(
1220
- () => Promise.resolve().then(() => require("./HomePage-7f6b292b.js")).then((mod) => ({
1220
+ () => Promise.resolve().then(() => require("./HomePage-a617d19a.js")).then((mod) => ({
1221
1221
  default: mod.HomePage
1222
1222
  }))
1223
1223
  );
1224
1224
  const InstalledPluginsPage = React__namespace.lazy(
1225
- () => Promise.resolve().then(() => require("./InstalledPluginsPage-d93fbab1.js")).then((mod) => ({
1225
+ () => Promise.resolve().then(() => require("./InstalledPluginsPage-fb2aaa1f.js")).then((mod) => ({
1226
1226
  default: mod.ProtectedInstalledPluginsPage
1227
1227
  }))
1228
1228
  );
1229
1229
  const MarketplacePage = React__namespace.lazy(
1230
- () => Promise.resolve().then(() => require("./MarketplacePage-7935f8c5.js")).then((mod) => ({ default: mod.ProtectedMarketplacePage }))
1230
+ () => Promise.resolve().then(() => require("./MarketplacePage-7c516084.js")).then((mod) => ({ default: mod.ProtectedMarketplacePage }))
1231
1231
  );
1232
1232
  const NotFoundPage = React__namespace.lazy(
1233
- () => Promise.resolve().then(() => require("./index-2a513e27.js")).then((n) => n.NotFoundPage).then(({ NotFoundPage: NotFoundPage2 }) => ({ default: NotFoundPage2 }))
1233
+ () => Promise.resolve().then(() => require("./index-3444ab6f.js")).then((n) => n.NotFoundPage).then(({ NotFoundPage: NotFoundPage2 }) => ({ default: NotFoundPage2 }))
1234
1234
  );
1235
1235
  const InternalErrorPage = React__namespace.lazy(
1236
1236
  () => Promise.resolve().then(() => require("./InternalErrorPage-d0e51ac2.js")).then(({ InternalErrorPage: InternalErrorPage2 }) => ({
@@ -1238,14 +1238,14 @@ const InternalErrorPage = React__namespace.lazy(
1238
1238
  }))
1239
1239
  );
1240
1240
  const ProfilePage = React__namespace.lazy(
1241
- () => Promise.resolve().then(() => require("./ProfilePage-6914e5ef.js")).then((mod) => ({
1241
+ () => Promise.resolve().then(() => require("./ProfilePage-a2e54283.js")).then((mod) => ({
1242
1242
  default: mod.ProfilePage
1243
1243
  }))
1244
1244
  );
1245
1245
  const SettingsPage = React__namespace.lazy(
1246
1246
  () => (
1247
1247
  // @ts-expect-error – No types, yet.
1248
- Promise.resolve().then(() => require("./index-29f725ef.js")).then((module2) => ({
1248
+ Promise.resolve().then(() => require("./index-fc7a00f0.js")).then((module2) => ({
1249
1249
  default: module2.SettingsPage
1250
1250
  }))
1251
1251
  )
@@ -1473,4 +1473,4 @@ exports.STATES = STATES;
1473
1473
  exports.VerticalDivider = VerticalDivider;
1474
1474
  exports.getFullName = getFullName;
1475
1475
  exports.selectAdminPermissions = selectAdminPermissions;
1476
- //# sourceMappingURL=AuthenticatedApp-4f5e9d2f.js.map
1476
+ //# sourceMappingURL=AuthenticatedApp-79e3f141.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AuthenticatedApp-4f5e9d2f.js","sources":["../../admin/src/utils/getFullName.ts","../../admin/src/utils/hashAdminUserEmail.ts","../../admin/src/components/GuidedTour/constants.ts","../../admin/src/components/GuidedTour/Ornaments.tsx","../../admin/src/components/GuidedTour/Modal.tsx","../../admin/src/components/LeftMenu.tsx","../../admin/src/assets/images/onboarding-preview.png","../../admin/src/components/Onboarding.tsx","../../admin/src/selectors.ts","../../admin/src/hooks/useMenu.ts","../../admin/src/layouts/AppLayout.tsx","../../admin/src/pages/Admin.tsx","../../admin/src/components/PluginsInitializer.tsx","../../admin/src/components/AuthenticatedApp.tsx"],"sourcesContent":["export function getFullName(firstname: string, lastname: string | null = '') {\n return [firstname, lastname].filter((str) => str).join(' ');\n}\n","import { UserInfo } from '@strapi/helper-plugin';\n\nexport const utils = {\n bufferToHex(buffer: ArrayBuffer) {\n return [...new Uint8Array(buffer)].map((b) => b.toString(16).padStart(2, '0')).join('');\n },\n async digestMessage(message: string) {\n const msgUint8 = new TextEncoder().encode(message);\n const hashBuffer = await crypto.subtle.digest('SHA-256', msgUint8);\n\n return this.bufferToHex(hashBuffer);\n },\n};\n\nexport async function hashAdminUserEmail(payload?: UserInfo) {\n if (!payload) {\n return null;\n }\n\n try {\n return await utils.digestMessage(payload.email);\n } catch (error) {\n return null;\n }\n}\n","const LAYOUT_DATA = {\n contentTypeBuilder: {\n home: {\n title: {\n id: 'app.components.GuidedTour.home.CTB.title',\n defaultMessage: '🧠 Build the content structure',\n },\n cta: {\n title: {\n id: 'app.components.GuidedTour.home.CTB.cta.title',\n defaultMessage: 'Go to the Content type Builder',\n },\n type: 'REDIRECT',\n target: '/plugins/content-type-builder',\n },\n trackingEvent: 'didClickGuidedTourHomepageContentTypeBuilder',\n },\n create: {\n title: {\n id: 'app.components.GuidedTour.CTB.create.title',\n defaultMessage: '🧠 Create a first Collection type',\n },\n content: {\n id: 'app.components.GuidedTour.CTB.create.content',\n defaultMessage:\n '<p>Collection types help you manage several entries, Single types are suitable to manage only one entry.</p> <p>Ex: For a Blog website, Articles would be a Collection type whereas a Homepage would be a Single type.</p>',\n },\n cta: {\n title: {\n id: 'app.components.GuidedTour.CTB.create.cta.title',\n defaultMessage: 'Build a Collection type',\n },\n type: 'CLOSE',\n },\n trackingEvent: 'didClickGuidedTourStep1CollectionType',\n },\n success: {\n title: {\n id: 'app.components.GuidedTour.CTB.success.title',\n defaultMessage: 'Step 1: Completed ✅',\n },\n content: {\n id: 'app.components.GuidedTour.CTB.success.content',\n defaultMessage: '<p>Good going!</p><b>⚡️ What would you like to share with the world?</b>',\n },\n cta: {\n title: {\n id: 'app.components.GuidedTour.create-content',\n defaultMessage: 'Create content',\n },\n type: 'REDIRECT',\n target: '/content-manager',\n },\n trackingEvent: 'didCreateGuidedTourCollectionType',\n },\n },\n contentManager: {\n home: {\n title: {\n id: 'app.components.GuidedTour.home.CM.title',\n defaultMessage: '⚡️ What would you like to share with the world?',\n },\n cta: {\n title: {\n id: 'app.components.GuidedTour.create-content',\n defaultMessage: 'Create content',\n },\n type: 'REDIRECT',\n target: '/content-manager',\n },\n trackingEvent: 'didClickGuidedTourHomepageContentManager',\n },\n create: {\n title: {\n id: 'app.components.GuidedTour.CM.create.title',\n defaultMessage: '⚡️ Create content',\n },\n content: {\n id: 'app.components.GuidedTour.CM.create.content',\n defaultMessage:\n \"<p>Create and manage all the content here in the Content Manager.</p><p>Ex: Taking the Blog website example further, one can write an Article, save and publish it as they like.</p><p>💡 Quick tip - Don't forget to hit publish on the content you create.</p>\",\n },\n cta: {\n title: {\n id: 'app.components.GuidedTour.create-content',\n defaultMessage: 'Create content',\n },\n type: 'CLOSE',\n },\n trackingEvent: 'didClickGuidedTourStep2ContentManager',\n },\n success: {\n title: {\n id: 'app.components.GuidedTour.CM.success.title',\n defaultMessage: 'Step 2: Completed ✅',\n },\n content: {\n id: 'app.components.GuidedTour.CM.success.content',\n defaultMessage: '<p>Awesome, one last step to go!</p><b>🚀 See content in action</b>',\n },\n cta: {\n title: {\n id: 'app.components.GuidedTour.CM.success.cta.title',\n defaultMessage: 'Test the API',\n },\n type: 'REDIRECT',\n target: '/settings/api-tokens',\n },\n trackingEvent: 'didCreateGuidedTourEntry',\n },\n },\n apiTokens: {\n home: {\n title: {\n id: 'app.components.GuidedTour.apiTokens.create.title',\n defaultMessage: '🚀 See content in action',\n },\n cta: {\n title: {\n id: 'app.components.GuidedTour.home.apiTokens.cta.title',\n defaultMessage: 'Test the API',\n },\n type: 'REDIRECT',\n target: '/settings/api-tokens',\n },\n trackingEvent: 'didClickGuidedTourHomepageApiTokens',\n },\n create: {\n title: {\n id: 'app.components.GuidedTour.apiTokens.create.title',\n defaultMessage: '🚀 See content in action',\n },\n content: {\n id: 'app.components.GuidedTour.apiTokens.create.content',\n defaultMessage:\n '<p>Generate an authentication token here and retrieve the content you just created.</p>',\n },\n cta: {\n title: {\n id: 'app.components.GuidedTour.apiTokens.create.cta.title',\n defaultMessage: 'Generate an API Token',\n },\n type: 'CLOSE',\n },\n trackingEvent: 'didClickGuidedTourStep3ApiTokens',\n },\n success: {\n title: {\n id: 'app.components.GuidedTour.apiTokens.success.title',\n defaultMessage: 'Step 3: Completed ✅',\n },\n content: {\n id: 'app.components.GuidedTour.apiTokens.success.content',\n defaultMessage:\n \"<p>See content in action by making an HTTP request:</p><ul><li><p>To this URL: <light>https://'<'YOUR_DOMAIN'>'/api/'<'YOUR_CT'>'</light></p></li><li><p>With the header: <light>Authorization: bearer '<'YOUR_API_TOKEN'>'</light></p></li></ul><p>For more ways to interact with content, see the <documentationLink>documentation</documentationLink>.</p>\",\n },\n trackingEvent: 'didGenerateGuidedTourApiTokens',\n },\n },\n} as const;\n\nconst STATES = {\n IS_DONE: 'IS_DONE',\n IS_ACTIVE: 'IS_ACTIVE',\n IS_NOT_DONE: 'IS_NOT_DONE',\n} as const;\n\ntype LayoutData = typeof LAYOUT_DATA;\ntype States = keyof typeof STATES;\n\nexport { LAYOUT_DATA, STATES };\nexport type { LayoutData, States };\n","import { Box, BoxProps, Flex, FlexProps, Typography } from '@strapi/design-system';\nimport { pxToRem } from '@strapi/helper-plugin';\nimport { Check } from '@strapi/icons';\n\nimport { STATES, States } from './constants';\n\n/* -------------------------------------------------------------------------------------------------\n * Number\n * -----------------------------------------------------------------------------------------------*/\n\ninterface NumberProps extends FlexProps {\n children: number;\n state: States;\n}\n\nconst Number = ({ children, state, ...props }: NumberProps) => {\n return state === STATES.IS_DONE || state === STATES.IS_ACTIVE ? (\n <Flex\n background=\"primary600\"\n padding={2}\n borderRadius=\"50%\"\n width={pxToRem(30)}\n height={pxToRem(30)}\n justifyContent=\"center\"\n {...props}\n >\n {state === STATES.IS_DONE ? (\n <Check aria-hidden width={pxToRem(16)} color=\"neutral0\" />\n ) : (\n <Typography fontWeight=\"semiBold\" textColor=\"neutral0\">\n {children}\n </Typography>\n )}\n </Flex>\n ) : (\n <Flex\n borderColor=\"neutral500\"\n borderWidth=\"1px\"\n borderStyle=\"solid\"\n padding={2}\n borderRadius=\"50%\"\n width={pxToRem(30)}\n height={pxToRem(30)}\n justifyContent=\"center\"\n {...props}\n >\n <Typography fontWeight=\"semiBold\" textColor=\"neutral600\">\n {children}\n </Typography>\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * VerticalDivider\n * -----------------------------------------------------------------------------------------------*/\n\ninterface VerticalDividerProps extends BoxProps {\n state: States;\n}\n\nconst VerticalDivider = ({ state, ...props }: VerticalDividerProps) => (\n <Box\n width={pxToRem(2)}\n height=\"100%\"\n background={state === STATES.IS_NOT_DONE ? 'neutral300' : 'primary500'}\n hasRadius\n minHeight={state === STATES.IS_ACTIVE ? pxToRem(85) : pxToRem(65)}\n {...props}\n />\n);\n\nexport { Number, VerticalDivider };\nexport type { NumberProps, VerticalDividerProps };\n","import * as React from 'react';\n\nimport {\n Box,\n Button,\n Flex,\n FocusTrap,\n IconButton,\n Portal,\n Typography,\n} from '@strapi/design-system';\nimport { LinkButton } from '@strapi/design-system/v2';\nimport { GuidedTourContextValue, pxToRem, useGuidedTour, useTracking } from '@strapi/helper-plugin';\nimport { ArrowRight, Cross } from '@strapi/icons';\nimport get from 'lodash/get';\nimport { MessageDescriptor, useIntl } from 'react-intl';\nimport { NavLink } from 'react-router-dom';\nimport styled from 'styled-components';\n\nimport { LAYOUT_DATA, STATES } from './constants';\nimport { Number, VerticalDivider } from './Ornaments';\n\n/* -------------------------------------------------------------------------------------------------\n * GuidedTourModal\n * -----------------------------------------------------------------------------------------------*/\n\nconst GuidedTourModal = () => {\n const {\n currentStep,\n guidedTourState,\n setCurrentStep,\n setStepState,\n isGuidedTourVisible,\n setSkipped,\n } = useGuidedTour();\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n\n if (!currentStep || !isGuidedTourVisible) {\n return null;\n }\n\n const stepData = get(LAYOUT_DATA, currentStep);\n const sectionKeys = Object.keys(guidedTourState);\n const [sectionName, stepName] = currentStep.split('.') as [\n keyof GuidedTourContextValue['guidedTourState'],\n string\n ];\n const sectionIndex = sectionKeys.indexOf(sectionName);\n const stepIndex = Object.keys(guidedTourState[sectionName]).indexOf(stepName);\n const hasSectionAfter = sectionIndex < sectionKeys.length - 1;\n const hasStepAfter = stepIndex < Object.keys(guidedTourState[sectionName]).length - 1;\n\n const handleCtaClick = () => {\n setStepState(currentStep, true);\n trackUsage(stepData.trackingEvent);\n\n setCurrentStep(null);\n };\n\n const handleSkip = () => {\n setSkipped(true);\n setCurrentStep(null);\n trackUsage('didSkipGuidedtour');\n };\n\n return (\n <Portal>\n <ModalWrapper onClick={handleCtaClick} padding={8} justifyContent=\"center\">\n <FocusTrap onEscape={handleCtaClick}>\n <Flex\n direction=\"column\"\n alignItems=\"stretch\"\n background=\"neutral0\"\n width={pxToRem(660)}\n shadow=\"popupShadow\"\n hasRadius\n padding={4}\n gap={8}\n role=\"dialog\"\n aria-modal\n onClick={(e) => e.stopPropagation()}\n >\n <Flex justifyContent=\"flex-end\">\n <IconButton\n onClick={handleCtaClick}\n aria-label={formatMessage({\n id: 'app.utils.close-label',\n defaultMessage: 'Close',\n })}\n >\n <Cross />\n </IconButton>\n </Flex>\n <Box\n paddingLeft={7}\n paddingRight={7}\n paddingBottom={!hasStepAfter && !hasSectionAfter ? 8 : 0}\n >\n <GuidedTourStepper\n title={stepData.title}\n cta={'cta' in stepData ? stepData.cta : undefined}\n onCtaClick={handleCtaClick}\n sectionIndex={sectionIndex}\n stepIndex={stepIndex}\n hasSectionAfter={hasSectionAfter}\n >\n <GuidedTourContent {...stepData.content} />\n </GuidedTourStepper>\n </Box>\n {!(!hasStepAfter && !hasSectionAfter) && (\n <Flex justifyContent=\"flex-end\">\n <Button variant=\"tertiary\" onClick={handleSkip}>\n {formatMessage({\n id: 'app.components.GuidedTour.skip',\n defaultMessage: 'Skip the tour',\n })}\n </Button>\n </Flex>\n )}\n </Flex>\n </FocusTrap>\n </ModalWrapper>\n </Portal>\n );\n};\n\nconst ModalWrapper = styled(Flex)`\n position: fixed;\n z-index: 4;\n inset: 0;\n /* this is theme.colors.neutral800 with opacity */\n background: ${({ theme }) => `${theme.colors.neutral800}1F`};\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * GuidedTourStepper\n * -----------------------------------------------------------------------------------------------*/\n\ninterface GuidedTourStepperProps {\n title: MessageDescriptor;\n children: React.ReactNode;\n cta?: {\n title: MessageDescriptor;\n target?: string;\n };\n onCtaClick: () => void;\n sectionIndex: number;\n stepIndex: number;\n hasSectionAfter: boolean;\n}\n\nconst GuidedTourStepper = ({\n title,\n children,\n cta,\n onCtaClick,\n sectionIndex,\n stepIndex,\n hasSectionAfter,\n}: GuidedTourStepperProps) => {\n const { formatMessage } = useIntl();\n\n const hasSectionBefore = sectionIndex > 0;\n const hasStepsBefore = stepIndex > 0;\n const nextSectionIndex = sectionIndex + 1;\n\n return (\n <>\n <Flex alignItems=\"stretch\">\n <Flex marginRight={8} justifyContent=\"center\" minWidth={pxToRem(30)}>\n {hasSectionBefore && <VerticalDivider state={STATES.IS_DONE} minHeight={pxToRem(24)} />}\n </Flex>\n <Typography variant=\"sigma\" textColor=\"primary600\">\n {formatMessage({\n id: 'app.components.GuidedTour.title',\n defaultMessage: '3 steps to get started',\n })}\n </Typography>\n </Flex>\n <Flex>\n <Flex marginRight={8} minWidth={pxToRem(30)}>\n <Number\n state={hasStepsBefore ? STATES.IS_DONE : STATES.IS_ACTIVE}\n paddingTop={3}\n paddingBottom={3}\n >\n {sectionIndex + 1}\n </Number>\n </Flex>\n <Typography variant=\"alpha\" fontWeight=\"bold\" textColor=\"neutral800\" as=\"h3\" id=\"title\">\n {formatMessage(title)}\n </Typography>\n </Flex>\n <Flex alignItems=\"stretch\">\n <Flex marginRight={8} direction=\"column\" justifyContent=\"center\" minWidth={pxToRem(30)}>\n {hasSectionAfter && (\n <>\n <VerticalDivider state={STATES.IS_DONE} />\n {hasStepsBefore && (\n <Number state={STATES.IS_ACTIVE} paddingTop={3}>\n {nextSectionIndex + 1}\n </Number>\n )}\n </>\n )}\n </Flex>\n <Box>\n {children}\n {cta &&\n (cta.target ? (\n <LinkButton\n as={NavLink}\n endIcon={<ArrowRight />}\n onClick={onCtaClick}\n // @ts-expect-error - types are not inferred correctly through the as prop.\n to={cta.target}\n >\n {formatMessage(cta.title)}\n </LinkButton>\n ) : (\n <Button endIcon={<ArrowRight />} onClick={onCtaClick}>\n {formatMessage(cta.title)}\n </Button>\n ))}\n </Box>\n </Flex>\n {hasStepsBefore && hasSectionAfter && (\n <Box paddingTop={3}>\n <Flex marginRight={8} justifyContent=\"center\" width={pxToRem(30)}>\n <VerticalDivider state={STATES.IS_DONE} minHeight={pxToRem(24)} />\n </Flex>\n </Box>\n )}\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * GuidedTourContent\n * -----------------------------------------------------------------------------------------------*/\n\ninterface GuidedTourContentProps\n extends Required<Pick<MessageDescriptor, 'defaultMessage' | 'id'>> {}\n\nconst GuidedTourContent = ({ id, defaultMessage }: GuidedTourContentProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4} paddingBottom={6}>\n {formatMessage(\n { id, defaultMessage },\n {\n documentationLink: DocumentationLink,\n b: Bold,\n p: Paragraph,\n light: Light,\n ul: List,\n li: ListItem,\n }\n )}\n </Flex>\n );\n};\n\nconst DocumentationLink = (children: React.ReactNode) => (\n <Typography\n as=\"a\"\n textColor=\"primary600\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n href=\"https://docs.strapi.io/developer-docs/latest/developer-resources/database-apis-reference/rest-api.html#api-parameters\"\n >\n {children}\n </Typography>\n);\n\nconst Bold = (children: React.ReactNode) => (\n <Typography fontWeight=\"semiBold\">{children}</Typography>\n);\n\nconst Paragraph = (children: React.ReactNode) => <Typography>{children}</Typography>;\n\nconst Light = (children: React.ReactNode) => (\n <Typography textColor=\"neutral600\">{children}</Typography>\n);\n\nconst List = (children: React.ReactNode) => (\n <Box paddingLeft={6}>\n <ul>{children}</ul>\n </Box>\n);\n\nconst LiStyled = styled.li`\n list-style: disc;\n &::marker {\n color: ${({ theme }) => theme.colors.neutral800};\n }\n`;\n\nconst ListItem = (children: React.ReactNode) => <LiStyled>{children}</LiStyled>;\n\nexport { GuidedTourModal };\n","import * as React from 'react';\n\nimport { Box, Divider, Flex, FocusTrap, Typography } from '@strapi/design-system';\nimport {\n MainNav,\n NavBrand,\n NavCondense,\n NavFooter,\n NavLink,\n NavSection,\n NavSections,\n NavUser,\n} from '@strapi/design-system/v2';\nimport {\n auth,\n getFetchClient,\n useAppInfo,\n usePersistentState,\n useTracking,\n} from '@strapi/helper-plugin';\nimport { Exit, Write } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { NavLink as RouterNavLink, useHistory, useLocation } from 'react-router-dom';\nimport styled from 'styled-components';\n\nimport { useConfiguration } from '../contexts/configuration';\nimport { Menu } from '../hooks/useMenu';\n\nconst LinkUserWrapper = styled(Box)`\n width: ${150 / 16}rem;\n position: absolute;\n bottom: ${({ theme }) => theme.spaces[9]};\n left: ${({ theme }) => theme.spaces[5]};\n`;\n\nconst LinkUser = styled(RouterNavLink)<{ logout?: boolean }>`\n display: flex;\n justify-content: space-between;\n align-items: center;\n text-decoration: none;\n padding: ${({ theme }) => `${theme.spaces[2]} ${theme.spaces[4]}`};\n border-radius: ${({ theme }) => theme.spaces[1]};\n\n &:hover {\n background: ${({ theme, logout }) =>\n logout ? theme.colors.danger100 : theme.colors.primary100};\n text-decoration: none;\n }\n\n svg {\n path {\n fill: ${({ theme }) => theme.colors.danger600};\n }\n }\n`;\n\ninterface LeftMenuProps extends Pick<Menu, 'generalSectionLinks' | 'pluginsSectionLinks'> {}\n\nconst LeftMenu = ({ generalSectionLinks, pluginsSectionLinks }: LeftMenuProps) => {\n const navUserRef = React.useRef<HTMLDivElement>(null!);\n const [userLinksVisible, setUserLinksVisible] = React.useState(false);\n const {\n logos: { menu },\n } = useConfiguration();\n const [condensed, setCondensed] = usePersistentState('navbar-condensed', false);\n const { userDisplayName } = useAppInfo();\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const { pathname } = useLocation();\n const history = useHistory();\n const { post } = getFetchClient();\n\n const initials = userDisplayName\n .split(' ')\n .map((name) => name.substring(0, 1))\n .join('')\n .substring(0, 2);\n\n const handleToggleUserLinks = () => setUserLinksVisible((prev) => !prev);\n\n const handleLogout = async () => {\n await post('/admin/logout');\n auth.clearAppStorage();\n handleToggleUserLinks();\n history.push('/auth/login');\n };\n\n const handleBlur: React.FocusEventHandler = (e) => {\n if (\n !e.currentTarget.contains(e.relatedTarget) &&\n /**\n * TODO: can we replace this by just using the navUserRef?\n */\n e.relatedTarget?.parentElement?.id !== 'main-nav-user-button'\n ) {\n setUserLinksVisible(false);\n }\n };\n\n const handleClickOnLink = (destination: string) => {\n trackUsage('willNavigate', { from: pathname, to: destination });\n };\n\n const menuTitle = formatMessage({\n id: 'app.components.LeftMenu.navbrand.title',\n defaultMessage: 'Strapi Dashboard',\n });\n\n return (\n <MainNav condensed={condensed}>\n <NavBrand\n as={RouterNavLink}\n workplace={formatMessage({\n id: 'app.components.LeftMenu.navbrand.workplace',\n defaultMessage: 'Workplace',\n })}\n title={menuTitle}\n icon={\n <img\n src={menu.custom || menu.default}\n alt={formatMessage({\n id: 'app.components.LeftMenu.logo.alt',\n defaultMessage: 'Application logo',\n })}\n />\n }\n />\n\n <Divider />\n\n <NavSections>\n <NavLink\n as={RouterNavLink}\n // @ts-expect-error the props from the passed as prop are not inferred // joined together\n to=\"/content-manager\"\n icon={<Write />}\n onClick={() => handleClickOnLink('/content-manager')}\n >\n {formatMessage({ id: 'global.content-manager', defaultMessage: 'Content manager' })}\n </NavLink>\n\n {pluginsSectionLinks.length > 0 ? (\n <NavSection\n label={formatMessage({\n id: 'app.components.LeftMenu.plugins',\n defaultMessage: 'Plugins',\n })}\n >\n {pluginsSectionLinks.map((link) => {\n const Icon = link.icon;\n\n return (\n <NavLink\n as={RouterNavLink}\n // @ts-expect-error the props from the passed as prop are not inferred // joined together\n to={link.to}\n key={link.to}\n icon={<Icon />}\n onClick={() => handleClickOnLink(link.to)}\n >\n {formatMessage(link.intlLabel)}\n </NavLink>\n );\n })}\n </NavSection>\n ) : null}\n\n {generalSectionLinks.length > 0 ? (\n <NavSection\n label={formatMessage({\n id: 'app.components.LeftMenu.general',\n defaultMessage: 'General',\n })}\n >\n {generalSectionLinks.map((link) => {\n const LinkIcon = link.icon;\n\n return (\n <NavLink\n as={RouterNavLink}\n badgeContent={\n link.notificationsCount && link.notificationsCount > 0\n ? link.notificationsCount.toString()\n : undefined\n }\n // @ts-expect-error the props from the passed as prop are not inferred // joined together\n to={link.to}\n key={link.to}\n icon={<LinkIcon />}\n onClick={() => handleClickOnLink(link.to)}\n >\n {formatMessage(link.intlLabel)}\n </NavLink>\n );\n })}\n </NavSection>\n ) : null}\n </NavSections>\n\n <NavFooter>\n <NavUser\n id=\"main-nav-user-button\"\n ref={navUserRef}\n onClick={handleToggleUserLinks}\n initials={initials}\n >\n {userDisplayName}\n </NavUser>\n {userLinksVisible && (\n <LinkUserWrapper\n onBlur={handleBlur}\n padding={1}\n shadow=\"tableShadow\"\n background=\"neutral0\"\n hasRadius\n >\n <FocusTrap onEscape={handleToggleUserLinks}>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={0}>\n <LinkUser tabIndex={0} onClick={handleToggleUserLinks} to=\"/me\">\n <Typography>\n {formatMessage({\n id: 'global.profile',\n defaultMessage: 'Profile',\n })}\n </Typography>\n </LinkUser>\n <LinkUser tabIndex={0} onClick={handleLogout} to=\"/auth/login\">\n <Typography textColor=\"danger600\">\n {formatMessage({\n id: 'app.components.LeftMenu.logout',\n defaultMessage: 'Logout',\n })}\n </Typography>\n <Exit />\n </LinkUser>\n </Flex>\n </FocusTrap>\n </LinkUserWrapper>\n )}\n\n <NavCondense onClick={() => setCondensed((s) => !s)}>\n {condensed\n ? formatMessage({\n id: 'app.components.LeftMenu.expand',\n defaultMessage: 'Expand the navbar',\n })\n : formatMessage({\n id: 'app.components.LeftMenu.collapse',\n defaultMessage: 'Collapse the navbar',\n })}\n </NavCondense>\n </NavFooter>\n </MainNav>\n );\n};\n\nexport { LeftMenu };\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHAAAABQCAMAAAD2kgFPAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAL9UExURff3+fv7+/X19/Pz9/n5+fv7/f39//////39/UdwTPn5+/X1+fHx++/v8fn5/fHx8/Pz9eTk6e/v8/Hx9fHx/e3u7/X19e3t8evr7+fn6YuR96Gl+OLi59LS2dTU2uvr++nq7ff39+Tk697e4ufn6+vr7enq69ra3tDQ1uDg5/nv7+Dg5Nzc4Nzd4tTU2OTk5+fn7djY3tzc5M/Q1NjY3NLS1tbX3MzM0u/w9crK0unp7+np+/37+8rK0MjIzu/v78PEy9ra4djY4eLi6t7e5NbW2s7O1OLk5+/v/Ojp/dra5MPF9+3u89bX3mxz99DQ2fj4+OLi5PHx8dvb29ze+/f3/7C1+t7e5+vr69PX2OPk/Jydl/T09/f393R7+Gdw96ytuNTU3M7O2ODg6a6vumJq9+3u/dTW/PP19cXGzd7e4O3t7cnK+/f3+uLk683O+Z2h+dLU+9/h++no3/j39bq0pu/v7fv7+fHz9XF4911l93V8+bm5waGirffr7Kqrtq+z9qentF9o93mA+fj4+vr6++/v7/f3++vt+83N0/Pz8+vr8dbY+sjJ98zO1crM0vn5//Pz/ra6n/n59d/g4quvp9fa2OTn66Shm8C2prCuq+/r67Gxr9LLvbCwrcfEwK+vqZSahtPVw5WafKiknff5+ZqapvHw7fv4+YGH9dnb++Tn/Ly8xvfo6Oq5v////6WlsNrc3vPz+dLU2Ovr/eTn+drc4JWXo6Wp+cLE++nr74+T+enr4s7Q1m5098bArefk5Nze0ODc1Pf3/MC8tuDi0KWrh/n39+Tk4qmv+77Cqdjc3PX1/c7S0vv7/7ixo/Px7Z+jh62x+8rMtrS6pZebjY+Rn9bayKuvm+vp5+np6aWrjVJa9fX38bi895+fm1pk9620oevp6bS0r+fp6fv19VZg9fn19X6F+fnz89LS3MDAyPXi4uextvX1+vPW2OCVnYmJl9zc4Xh4iff3+mdy97y8xPf3977C96mpsbS29YeHlamv84qS87i89VXx8BYAAAD/dFJOU319fX19fX19fQB9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19bX19fX19fX19fX19Lwd9fX19fX19fX19fX19fX1lfX19fX19fX19fX19fX19fX19fX19fW1dED59fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX0PfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1mfX19bX1eXn0/fX19fX0/fSWruQsAAAbiSURBVGje7VkFcBtHFD2SbnXO9UA56dRIiiRbFFlmiO3asWKIE0MYGrQbZmjDDA1T06RJ03DSJA2XMaWUmZmZmWm6ki3lTie59kTSlJ40p5nV//tud//b/28P0WiG/PgdkhBMHKzRaBDNyWXSRoqi4ki57CQk/MZsKna58pqa0N4gnoNcNgQZzBV8ml9aYMYaW4DQRKjvDC8MG7TkG0ff+gmobifD78gXYQZE0++8b08tXFg/4uf6H46VLh5Rf/P8TERtXG1ykkmtI7zmtZFLhtW9NWfOnCUjhy0Z+T2CJOFYJMOS+YtPzV884teDX8879sKIhfUHSxG1AzH0ajXhB3UjPxpaVzd37uyls5cunRv30Fx0vhxRDfXdLLbhZWU2W1mGGNtbEPuXdStz+2ycu/+kbmv4YLOWZ3merdEyNSweW0KMxXkW1+J4RwxeMeRfCIbhMsu7/LUd0QgkSYkW8TS5wznVlg93W8LnEiUooAIqFYBQkxBnSIxkMStJVLUPoah90cCqlSurWkSI6ijdGGv0v0Wv3iaIa1i9KLJ+QoR0Wk0l2YCo6jO5unpq9dTJkyesW7uu+oZp09q0iLDXvOQNG0r9uxbtNdU2hIcidV4YELTpt40C17WIsMk9oAyapxMbNxiCR4uRWAP2TNOZ3S/KCmdEyfggEORQ9Xh4kKPkM8O6AjbIS/BWfZLED+N5StmbisEZRttRTzVD2LZtUdW09gPbFx0tatuE0Y2E/YYeVYlI0E7ELYjET68vJJS9nZdRc1shq7dgzRIeKfrtj0W//LTojTDCOE2pMsjb3BiQhSo+gF3jOJNhKQwPUgqcBdqhER+Cc4efUOvL8nFKwhxn/tjKtNLTY12HO3z15ecnTiz4ODaEkUEBgoKqIRAdgR3u8NmC4wuOd3g/noSoWoILGgHU5w7/jGpxbQ28dJRl3/AoPfR6jKIUqcnKstkm2fpnZOlZGSFBqUgQtLt6/9vvSf0Y/19qENYbgIpHSQBvFk6ekgy2NZO9SIqk1Pag7Ttvvttb6pu3Ps9lTtvsqsiTtmLpnC83L8fpyjXlmpMVhDYS+IKbN6YkBNINaubunWiMphTh9d0L1tcqMj6IDwKdszgeYYR9u6old/bsi1SsRohhs3heVBK2mz1QLQTthOe3Xyj1q8xJ3uwZZ/A5jbI17GlPyUlNTk31jHN6DQoyhgLuQNVm7l7bWZkPb719FBnKCIcOTJ8h9bVi8GO16hCdLAxR1N9E6HSsDlOmDGjLNBOlcnR6KlY6RFitODzFlrCM799qyt1eZV1KEqhU+E+/5EiE8EML/8qgXVdIfbPHZhfkrrp2bL5J2sqmJptL8nOzi9fnFxekKgjLUOB/rub58obMCEGjVoGzI7x8986Z5zydsDcQkMXWQguPJG4No25tslXYt08Vs62N8TaYvUnKNVSh6tVBuxl798iE7/QYuRSO5jhB2koYGCHZ4PBwKV2MnF5BhlPqxsqC1uJshKChUDIk3qsOPPmy1LeXIIgMzToYWtqK6nS0vRNNC+P1gqgUPrwFfYuFP+DiWK5hCwhjFzSF/WuzOnd2uwt9fEcZ4dp+l52VxSWvPueQb4ugMc7lcY8GhA+iC5+CETqLhV8Ww5iwmmbKsD4glPHtg3bIhJ/mMpucuelpabK8jqVyqdkVOea0nOtzTR4FYQoKvM1MadcJfSUjvO+uB2MlfP+hgrtLAoUf5VAhzPCe++MepVD4gAmlw71bZMLvnZ5ucBhpe0+ZDokuUPgpnJETofDtkYSfEjhUKP8ks0G5eaOoVPjbpt8t9XUYOU+6gfZYZIUEytMOzmB39OzJGThaQZgBv1EPFeIr/AiHCnEMmmiHCgMnnJHI4oFNjGzySEBGVDZsD2g+ovChX3DzjpCeptT1AaEdf8CgHbKgcbnSXBUmoykvRyb8ZKMnrSIzz2Q2myKV+iHhY0laJeGRfhLhW/dcqWulxqOOkOFNp7v78IRm/BZkiztiF6WRDxX85zRFIKTDGfu3PCr1SxcEmGd1jMDKhD9+jE6kRZHWdrILSh3CTsVAXZqa5eWUhA8P7UqGuuu0bfpDso3fuJXjDILHIBc+LQgp6XaHMd1o4HpFyvgZzUzpE49Jn5563wv+qRk/ej6culFSCG96RBc74UcmnHJnH2A5K/xdj0t9S0oLirMrvSWrKmSlvvMmZ3GBuTI/u7IkX1nqW1BQ2wzh6FskNY11eyuFH2kC4DJRf581/B+tQHzfK4e9ZsIQBkFHbURgLQMfX9x4vAlh1sMhIYnAhxhYxVgSNE6C+E+F0KWJpZuIrEgs4WBkSI9E8vXQIJrlCWTssRwSajSDJyYoXFYM0Wj+BNjsk7mwYOwbAAAAAElFTkSuQmCC\"","import * as React from 'react';\n\nimport {\n Box,\n Button,\n Divider,\n Flex,\n Icon,\n PopoverPrimitives,\n Portal,\n Typography,\n VisuallyHidden,\n} from '@strapi/design-system';\nimport { useAppInfo } from '@strapi/helper-plugin';\nimport { Cross, Message, Play, Question, Book, PaperPlane } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport onboardingPreview from '../assets/images/onboarding-preview.png';\n\nconst Onboarding = () => {\n const triggerRef = React.useRef<HTMLButtonElement>(null!);\n const [isOpen, setIsOpen] = React.useState(false);\n const { formatMessage } = useIntl();\n const { communityEdition } = useAppInfo();\n\n const handlePopoverVisibility = () => {\n setIsOpen((prev) => !prev);\n };\n\n const docLinks = [\n ...DOCUMENTATION_LINKS,\n {\n label: { id: 'Settings.application.get-help', defaultMessage: 'Get help' },\n icon: Message,\n href: communityEdition\n ? 'https://discord.strapi.io'\n : 'https://support.strapi.io/support/home',\n },\n ];\n\n return (\n <Box as=\"aside\" position=\"fixed\" bottom={2} right={2}>\n <HelperButton\n aria-label={formatMessage(\n isOpen\n ? {\n id: 'app.components.Onboarding.help.button-close',\n defaultMessage: 'Close help menu',\n }\n : {\n id: 'app.components.Onboarding.help.button',\n defaultMessage: 'Open help menu',\n }\n )}\n onClick={handlePopoverVisibility}\n ref={triggerRef}\n >\n <Icon as={isOpen ? Cross : Question} color=\"buttonNeutral0\" />\n </HelperButton>\n\n {isOpen && (\n <Portal>\n <PopoverPrimitives.Content\n padding={0}\n onDismiss={handlePopoverVisibility}\n source={triggerRef}\n placement=\"top-end\"\n spacing={12}\n >\n <Flex\n justifyContent=\"space-between\"\n paddingBottom={5}\n paddingRight={6}\n paddingLeft={6}\n paddingTop={6}\n >\n <TypographyLineHeight fontWeight=\"bold\">\n {formatMessage({\n id: 'app.components.Onboarding.title',\n defaultMessage: 'Get started videos',\n })}\n </TypographyLineHeight>\n <TextLink\n as=\"a\"\n href={WATCH_MORE.href}\n target=\"_blank\"\n rel=\"noreferrer noopener\"\n variant=\"pi\"\n textColor=\"primary600\"\n >\n {formatMessage(WATCH_MORE.label)}\n </TextLink>\n </Flex>\n <Divider />\n {VIDEO_LINKS.map(({ href, duration, label }, index) => (\n <VideoLinkWrapper\n as=\"a\"\n href={href}\n target=\"_blank\"\n rel=\"noreferrer noopener\"\n key={href}\n hasRadius\n paddingTop={4}\n paddingBottom={4}\n paddingLeft={6}\n paddingRight={11}\n >\n <Box paddingRight={5}>\n <Typography textColor=\"neutral200\" variant=\"alpha\">\n {index + 1}\n </Typography>\n </Box>\n <Box position=\"relative\">\n <Preview src={onboardingPreview} alt=\"\" />\n <IconWrapper\n position=\"absolute\"\n top=\"50%\"\n left=\"50%\"\n background=\"primary600\"\n borderRadius=\"50%\"\n justifyContent=\"center\"\n width={6}\n height={6}\n >\n <Icon as={Play} color=\"buttonNeutral0\" width={3} height={3} />\n </IconWrapper>\n </Box>\n <Flex direction=\"column\" alignItems=\"start\" paddingLeft={4}>\n <Typography fontWeight=\"bold\">{formatMessage(label)}</Typography>\n <VisuallyHidden>:</VisuallyHidden>\n <Typography textColor=\"neutral600\" variant=\"pi\">\n {duration}\n </Typography>\n </Flex>\n </VideoLinkWrapper>\n ))}\n <Flex\n direction=\"column\"\n alignItems=\"stretch\"\n gap={2}\n paddingLeft={5}\n paddingTop={2}\n paddingBottom={5}\n >\n {docLinks.map(({ label, href, icon }) => (\n <Flex gap={3} key={href}>\n <Icon as={icon} color=\"primary600\" />\n <TextLink\n as=\"a\"\n href={href}\n target=\"_blank\"\n rel=\"noreferrer noopener\"\n variant=\"sigma\"\n textColor=\"primary700\"\n >\n {formatMessage(label)}\n </TextLink>\n </Flex>\n ))}\n </Flex>\n </PopoverPrimitives.Content>\n </Portal>\n )}\n </Box>\n );\n};\n\n// TODO: use new Button props derived from Box props with next DS release\nconst HelperButton = styled(Button)`\n border-radius: 50%;\n padding: ${({ theme }) => theme.spaces[3]};\n /* Resetting 2rem height defined by Button component */\n height: 100%;\n`;\n\nconst IconWrapper = styled(Flex)`\n transform: translate(-50%, -50%);\n`;\n\nconst VideoLinkWrapper = styled(Flex)`\n text-decoration: none;\n\n :focus-visible {\n outline-offset: ${({ theme }) => `-${theme.spaces[1]}`};\n }\n\n :hover {\n background: ${({ theme }) => theme.colors.primary100};\n\n /* Hover style for the number displayed */\n ${Typography}:first-child {\n color: ${({ theme }) => theme.colors.primary500};\n }\n\n /* Hover style for the label */\n ${Typography}:nth-child(1) {\n color: ${({ theme }) => theme.colors.primary600};\n }\n }\n`;\n\nconst Preview = styled.img`\n width: ${({ theme }) => theme.spaces[10]};\n height: ${({ theme }) => theme.spaces[8]};\n /* Same overlay used in ModalLayout */\n background: ${({ theme }) => `${theme.colors.neutral800}1F`};\n border-radius: ${({ theme }) => theme.borderRadius};\n`;\n\nconst TypographyLineHeight = styled(Typography)`\n /* line height of label and watch more to 1 so they can be better aligned visually */\n line-height: 1;\n`;\n\nconst TextLink = styled(TypographyLineHeight)`\n text-decoration: none;\n\n :hover {\n text-decoration: underline;\n }\n`;\n\nconst VIDEO_LINKS = [\n {\n label: {\n id: 'app.components.Onboarding.link.build-content',\n defaultMessage: 'Build a content architecture',\n },\n href: 'https://www.youtube.com/watch?v=G9GjN0RxhkE',\n duration: '5:48',\n },\n {\n label: {\n id: 'app.components.Onboarding.link.manage-content',\n defaultMessage: 'Add & manage content',\n },\n href: 'https://www.youtube.com/watch?v=DEZw4KbybAI',\n duration: '3:18',\n },\n {\n label: { id: 'app.components.Onboarding.link.manage-media', defaultMessage: 'Manage media' },\n href: 'https://www.youtube.com/watch?v=-61MuiMQb38',\n duration: '3:41',\n },\n];\n\nconst WATCH_MORE = {\n href: 'https://www.youtube.com/playlist?list=PL7Q0DQYATmvidz6lEmwE5nIcOAYagxWqq',\n label: {\n id: 'app.components.Onboarding.link.more-videos',\n defaultMessage: 'Watch more videos',\n },\n};\n\nconst DOCUMENTATION_LINKS = [\n {\n label: { id: 'global.documentation', defaultMessage: 'documentation' },\n href: 'https://docs.strapi.io',\n icon: Book,\n },\n {\n label: { id: 'app.static.links.cheatsheet', defaultMessage: 'cheatsheet' },\n href: 'https://strapi-showcase.s3-us-west-2.amazonaws.com/CheatSheet.pdf',\n icon: PaperPlane,\n },\n];\n\nexport { Onboarding };\n","import { createTypedSelector } from './core/store/hooks';\n\nexport const selectAdminPermissions = createTypedSelector((state) => state.admin_app.permissions);\n","import * as React from 'react';\n\nimport {\n Permission,\n hasPermissions,\n useAppInfo,\n useRBACProvider,\n useStrapiApp,\n StrapiAppContextValue,\n} from '@strapi/helper-plugin';\nimport { Cog, Puzzle, ShoppingCart } from '@strapi/icons';\nimport cloneDeep from 'lodash/cloneDeep';\nimport { useSelector } from 'react-redux';\n\nimport { selectAdminPermissions } from '../selectors';\n\n/* -------------------------------------------------------------------------------------------------\n * useMenu\n * -----------------------------------------------------------------------------------------------*/\n\ntype MenuItem = StrapiAppContextValue['menu'][number];\n\nexport interface Menu {\n generalSectionLinks: MenuItem[];\n pluginsSectionLinks: MenuItem[];\n isLoading: boolean;\n}\n\nconst useMenu = () => {\n const { allPermissions: userPermissions } = useRBACProvider();\n const { shouldUpdateStrapi } = useAppInfo();\n const { menu } = useStrapiApp();\n const permissions = useSelector(selectAdminPermissions);\n const [menuWithUserPermissions, setMenuWithUserPermissions] = React.useState<Menu>({\n generalSectionLinks: [\n {\n icon: Puzzle,\n intlLabel: {\n id: 'global.plugins',\n defaultMessage: 'Plugins',\n },\n to: '/list-plugins',\n // @ts-expect-error - we need the permissions type from the plugin\n permissions: permissions.marketplace.main,\n },\n {\n icon: ShoppingCart,\n intlLabel: {\n id: 'global.marketplace',\n defaultMessage: 'Marketplace',\n },\n to: '/marketplace',\n // @ts-expect-error - we need the permissions type from the plugin\n permissions: permissions.marketplace.main,\n },\n {\n icon: Cog,\n intlLabel: {\n id: 'global.settings',\n defaultMessage: 'Settings',\n },\n to: '/settings',\n // Permissions of this link are retrieved in the init phase\n // using the settings menu\n permissions: [],\n notificationsCount: 0,\n },\n ],\n pluginsSectionLinks: [],\n isLoading: true,\n });\n const generalSectionLinksRef = React.useRef(menuWithUserPermissions.generalSectionLinks);\n\n React.useEffect(() => {\n async function applyMenuPermissions() {\n const authorizedPluginSectionLinks = await getPluginSectionLinks(userPermissions, menu);\n\n const authorizedGeneralSectionLinks = await getGeneralLinks(\n userPermissions,\n generalSectionLinksRef.current,\n shouldUpdateStrapi\n );\n\n setMenuWithUserPermissions((state) => ({\n ...state,\n generalSectionLinks: authorizedGeneralSectionLinks,\n pluginsSectionLinks: authorizedPluginSectionLinks,\n isLoading: false,\n }));\n }\n\n applyMenuPermissions();\n }, [\n setMenuWithUserPermissions,\n generalSectionLinksRef,\n userPermissions,\n menu,\n permissions,\n shouldUpdateStrapi,\n ]);\n\n return menuWithUserPermissions;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Utils\n * -----------------------------------------------------------------------------------------------*/\n\nconst getGeneralLinks = async (\n userPermissions: Permission[],\n generalSectionRawLinks: MenuItem[],\n shouldUpdateStrapi: boolean = false\n) => {\n const generalSectionLinksPermissions = await Promise.all(\n generalSectionRawLinks.map(({ permissions }) => hasPermissions(userPermissions, permissions))\n );\n\n const authorizedGeneralSectionLinks = generalSectionRawLinks.filter(\n (_, index) => generalSectionLinksPermissions[index]\n );\n\n const settingsLinkIndex = authorizedGeneralSectionLinks.findIndex(\n (obj) => obj.to === '/settings'\n );\n\n if (settingsLinkIndex === -1) {\n return [];\n }\n\n const authorizedGeneralLinksClone = cloneDeep(authorizedGeneralSectionLinks);\n\n authorizedGeneralLinksClone[settingsLinkIndex].notificationsCount = shouldUpdateStrapi ? 1 : 0;\n\n return authorizedGeneralLinksClone;\n};\n\nconst getPluginSectionLinks = async (\n userPermissions: Permission[],\n pluginsSectionRawLinks: MenuItem[]\n) => {\n const pluginSectionLinksPermissions = await Promise.all(\n pluginsSectionRawLinks.map(({ permissions }) => hasPermissions(userPermissions, permissions))\n );\n\n const authorizedPluginSectionLinks = pluginsSectionRawLinks.filter(\n (_, index) => pluginSectionLinksPermissions[index]\n );\n\n return authorizedPluginSectionLinks;\n};\n\nexport { useMenu };\n","import * as React from 'react';\n\nimport { Box, Flex, SkipToContent } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nconst FlexBox = styled(Box)`\n flex: 1;\n`;\n\ninterface AppLayoutProps {\n children: React.ReactNode;\n sideNav: React.ReactNode;\n}\n\nexport const AppLayout = ({ children, sideNav }: AppLayoutProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <Box background=\"neutral100\">\n <SkipToContent>\n {formatMessage({ id: 'skipToContent', defaultMessage: 'Skip to content' })}\n </SkipToContent>\n <Flex alignItems=\"flex-start\">\n {sideNav}\n <FlexBox>{children}</FlexBox>\n </Flex>\n </Box>\n );\n};\n","/**\n *\n * Admin\n *\n */\n\nimport * as React from 'react';\n\nimport { LoadingIndicatorPage, useStrapiApp, useTracking } from '@strapi/helper-plugin';\nimport { DndProvider } from 'react-dnd';\nimport { HTML5Backend } from 'react-dnd-html5-backend';\nimport { Route, Switch } from 'react-router-dom';\n\nimport { GuidedTourModal } from '../components/GuidedTour/Modal';\nimport { LeftMenu } from '../components/LeftMenu';\nimport { Onboarding } from '../components/Onboarding';\nimport { ACTION_SET_APP_RUNTIME_STATUS } from '../constants';\nimport { useConfiguration } from '../contexts/configuration';\nimport { useTypedDispatch, useTypedSelector } from '../core/store/hooks';\nimport { useMenu } from '../hooks/useMenu';\nimport { AppLayout } from '../layouts/AppLayout';\nimport { createRoute } from '../utils/createRoute';\n\nconst CM = React.lazy(\n // @ts-expect-error – No types, yet.\n () => import('../content-manager/pages/App')\n);\nconst HomePage = React.lazy(() =>\n import('./HomePage').then((mod) => ({\n default: mod.HomePage,\n }))\n);\nconst InstalledPluginsPage = React.lazy(() =>\n import('./InstalledPluginsPage').then((mod) => ({\n default: mod.ProtectedInstalledPluginsPage,\n }))\n);\nconst MarketplacePage = React.lazy(() =>\n import('./Marketplace/MarketplacePage').then((mod) => ({ default: mod.ProtectedMarketplacePage }))\n);\nconst NotFoundPage = React.lazy(() =>\n import('./NotFoundPage').then(({ NotFoundPage }) => ({ default: NotFoundPage }))\n);\nconst InternalErrorPage = React.lazy(() =>\n import('./InternalErrorPage').then(({ InternalErrorPage }) => ({\n default: InternalErrorPage,\n }))\n);\n\nconst ProfilePage = React.lazy(() =>\n import('./ProfilePage').then((mod) => ({\n default: mod.ProfilePage,\n }))\n);\nconst SettingsPage = React.lazy(() =>\n // @ts-expect-error – No types, yet.\n import('./SettingsPage').then((module) => ({\n default: module.SettingsPage,\n }))\n);\n\nconst Admin = () => {\n const { trackUsage } = useTracking();\n const dispatch = useTypedDispatch();\n const appStatus = useTypedSelector((state) => state.admin_app.status);\n\n const { isLoading, generalSectionLinks, pluginsSectionLinks } = useMenu();\n const { menu } = useStrapiApp();\n const { showTutorials } = useConfiguration();\n\n React.useEffect(() => {\n // Make sure the event is only send once after accessing the admin panel\n // and not at runtime for example when regenerating the permissions with the ctb\n // or with i18n\n if (appStatus === 'init') {\n trackUsage('didAccessAuthenticatedAdministration');\n\n dispatch({ type: ACTION_SET_APP_RUNTIME_STATUS });\n }\n }, [appStatus, dispatch, trackUsage]);\n\n const routes = React.useMemo(() => {\n return (\n menu\n .filter((link) => link.Component)\n // we've filtered out the links that don't have a component above\n .map(({ to, Component, exact }) => createRoute(Component!, to, exact))\n );\n }, [menu]);\n\n if (isLoading) {\n return <LoadingIndicatorPage />;\n }\n\n return (\n <DndProvider backend={HTML5Backend}>\n <AppLayout\n sideNav={\n <LeftMenu\n generalSectionLinks={generalSectionLinks}\n pluginsSectionLinks={pluginsSectionLinks}\n />\n }\n >\n <React.Suspense fallback={<LoadingIndicatorPage />}>\n <Switch>\n <Route path=\"/\" component={HomePage} exact />\n <Route path=\"/me\" component={ProfilePage} exact />\n <Route path=\"/content-manager\" component={CM} />\n {routes}\n <Route path=\"/settings/:settingId\" component={SettingsPage} />\n <Route path=\"/settings\" component={SettingsPage} exact />\n <Route path=\"/marketplace\">\n <MarketplacePage />\n </Route>\n <Route path=\"/list-plugins\" exact>\n <InstalledPluginsPage />\n </Route>\n <Route path=\"/404\" component={NotFoundPage} />\n <Route path=\"/500\" component={InternalErrorPage} />\n <Route path=\"\" component={NotFoundPage} />\n </Switch>\n </React.Suspense>\n <GuidedTourModal />\n\n {showTutorials && <Onboarding />}\n </AppLayout>\n </DndProvider>\n );\n};\n\nexport { Admin };\n","import * as React from 'react';\n\nimport {\n LoadingIndicatorPage,\n useStrapiApp,\n type StrapiAppContextValue,\n} from '@strapi/helper-plugin';\nimport produce from 'immer';\nimport set from 'lodash/set';\n\nimport { Admin } from '../pages/Admin';\n\n/**\n * TODO: this isn't great, and we really should focus on fixing this.\n */\nconst PluginsInitializer = () => {\n const { plugins: appPlugins } = useStrapiApp();\n const [{ plugins }, dispatch] = React.useReducer<React.Reducer<State, Action>, State>(\n reducer,\n initialState,\n () => init(appPlugins)\n );\n const setPlugin = React.useRef((pluginId: string) => {\n dispatch({ type: 'SET_PLUGIN_READY', pluginId });\n });\n\n const hasApluginNotReady = Object.keys(plugins).some(\n (plugin) => plugins[plugin].isReady === false\n );\n\n /**\n *\n * I have spent some time trying to understand what is happening here, and wanted to\n * leave that knowledge for my future me:\n *\n * `initializer` is an undocumented property of the `registerPlugin` API. At the time\n * of writing it seems only to be used by the i18n plugin.\n *\n * How does it work?\n *\n * Every plugin that has an `initializer` component defined, receives the\n * `setPlugin` function as a component prop. In the case of i18n the plugin fetches locales\n * first and calls `setPlugin` with `pluginId` once they are loaded, which then triggers the\n * reducer of the admin app defined above.\n *\n * Once all plugins are set to `isReady: true` the app renders.\n *\n * This API is used to block rendering of the admin app. We should remove that in v5 completely\n * and make sure plugins can inject data into the global store before they are initialized, to avoid\n * having a new prop-callback based communication channel between plugins and the core admin app.\n *\n */\n\n if (hasApluginNotReady) {\n const initializers = Object.keys(plugins).reduce((acc, current) => {\n const InitializerComponent = plugins[current].initializer;\n\n if (InitializerComponent) {\n const key = plugins[current].pluginId;\n\n acc.push(<InitializerComponent key={key} setPlugin={setPlugin.current} />);\n }\n\n return acc;\n }, [] as React.ReactNode[]);\n\n return (\n <>\n {initializers}\n <LoadingIndicatorPage />\n </>\n );\n }\n\n return <Admin />;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Reducer\n * -----------------------------------------------------------------------------------------------*/\n\ninterface State {\n plugins: StrapiAppContextValue['plugins'];\n}\n\nconst initialState: State = {\n plugins: {},\n};\n\ntype SetPluginReadyAction = {\n type: 'SET_PLUGIN_READY';\n pluginId: string;\n};\n\ntype Action = SetPluginReadyAction;\n\nconst reducer: React.Reducer<State, Action> = (state = initialState, action: Action): State =>\n produce(state, (draftState) => {\n switch (action.type) {\n case 'SET_PLUGIN_READY': {\n set(draftState, ['plugins', action.pluginId, 'isReady'], true);\n break;\n }\n default:\n return draftState;\n }\n });\n\n/* -------------------------------------------------------------------------------------------------\n * Init state\n * -----------------------------------------------------------------------------------------------*/\n\nconst init = (plugins: State['plugins']): State => {\n return {\n plugins: Object.keys(plugins).reduce<State['plugins']>((acc, current) => {\n acc[current] = { ...plugins[current] };\n\n return acc;\n }, {}),\n };\n};\n\nexport { PluginsInitializer };\n","import * as React from 'react';\n\nimport {\n AppInfoProvider,\n auth,\n LoadingIndicatorPage,\n useFetchClient,\n useGuidedTour,\n} from '@strapi/helper-plugin';\nimport { useQueries } from 'react-query';\nimport lt from 'semver/functions/lt';\nimport valid from 'semver/functions/valid';\n// TODO: DS add loader\n\nimport packageJSON from '../../../package.json';\nimport { useConfiguration } from '../contexts/configuration';\nimport { getFullName } from '../utils/getFullName';\nimport { hashAdminUserEmail } from '../utils/hashAdminUserEmail';\n\nimport { NpsSurvey } from './NpsSurvey';\nimport { PluginsInitializer } from './PluginsInitializer';\nimport { RBACProvider } from './RBACProvider';\n\nimport type { Information } from '../../../shared/contracts/admin';\nimport type { GetOwnPermissions, GetMe } from '../../../shared/contracts/users';\n\nconst strapiVersion = packageJSON.version;\n\nconst AuthenticatedApp = () => {\n const { setGuidedTourVisibility } = useGuidedTour();\n const userInfo = auth.get('userInfo');\n const [userDisplayName, setUserDisplayName] = React.useState<string>(() =>\n userInfo ? userInfo.username || getFullName(userInfo.firstname ?? '', userInfo.lastname) : ''\n );\n const [userId, setUserId] = React.useState<string>();\n const { showReleaseNotification } = useConfiguration();\n const { get } = useFetchClient();\n const [\n { data: appInfos, status },\n { data: tagName, isLoading },\n { data: permissions, status: fetchPermissionsStatus, refetch, isFetching },\n { data: userRoles },\n ] = useQueries([\n {\n queryKey: 'app-infos',\n async queryFn() {\n const { data } = await get<Information.Response>('/admin/information');\n\n return data.data;\n },\n },\n {\n queryKey: 'strapi-release',\n async queryFn() {\n try {\n const res = await fetch('https://api.github.com/repos/strapi/strapi/releases/latest');\n\n if (!res.ok) {\n throw new Error();\n }\n\n const response = (await res.json()) as { tag_name: string | null | undefined };\n\n if (!response.tag_name) {\n throw new Error();\n }\n\n return response.tag_name;\n } catch (err) {\n // Don't throw an error\n return strapiVersion;\n }\n },\n enabled: showReleaseNotification,\n initialData: strapiVersion,\n },\n {\n queryKey: 'admin-users-permission',\n async queryFn() {\n const { data } = await get<GetOwnPermissions.Response>('/admin/users/me/permissions');\n\n return data.data;\n },\n initialData: [],\n },\n {\n queryKey: 'user-roles',\n async queryFn() {\n const {\n data: {\n data: { roles },\n },\n } = await get<GetMe.Response>('/admin/users/me');\n\n return roles;\n },\n },\n ]);\n\n const shouldUpdateStrapi = checkLatestStrapiVersion(strapiVersion, tagName);\n\n /**\n * TODO: does this actually need to be an effect?\n */\n React.useEffect(() => {\n if (userRoles) {\n const isUserSuperAdmin = userRoles.find(({ code }) => code === 'strapi-super-admin');\n\n if (isUserSuperAdmin && appInfos?.autoReload) {\n setGuidedTourVisibility(true);\n }\n }\n }, [userRoles, appInfos, setGuidedTourVisibility]);\n\n React.useEffect(() => {\n const getUserId = async () => {\n if (userInfo) {\n const userId = await hashAdminUserEmail(userInfo);\n\n if (userId) {\n setUserId(userId);\n }\n }\n };\n\n getUserId();\n }, [userInfo]);\n\n // We don't need to wait for the release query to be fetched before rendering the plugins\n // however, we need the appInfos and the permissions\n const shouldShowNotDependentQueriesLoader =\n isFetching || status === 'loading' || fetchPermissionsStatus === 'loading';\n\n const shouldShowLoader = isLoading || shouldShowNotDependentQueriesLoader;\n\n if (shouldShowLoader) {\n return <LoadingIndicatorPage />;\n }\n\n // TODO: add error state\n if (status === 'error') {\n return <div>error...</div>;\n }\n\n return (\n <AppInfoProvider\n {...appInfos}\n userId={userId}\n latestStrapiReleaseTag={tagName}\n setUserDisplayName={setUserDisplayName}\n shouldUpdateStrapi={shouldUpdateStrapi}\n userDisplayName={userDisplayName}\n >\n <RBACProvider permissions={permissions ?? []} refetchPermissions={refetch}>\n <NpsSurvey />\n <PluginsInitializer />\n </RBACProvider>\n </AppInfoProvider>\n );\n};\n\nconst checkLatestStrapiVersion = (\n currentPackageVersion: string,\n latestPublishedVersion: string = ''\n): boolean => {\n if (!valid(currentPackageVersion) || !valid(latestPublishedVersion)) {\n return false;\n }\n\n return lt(currentPackageVersion, latestPublishedVersion);\n};\n\nexport { AuthenticatedApp };\n"],"names":["jsx","Flex","pxToRem","Check","Typography","Box","useGuidedTour","useIntl","useTracking","get","Portal","FocusTrap","jsxs","IconButton","Cross","Button","styled","Fragment","LinkButton","NavLink","ArrowRight","RouterNavLink","React","useConfiguration","usePersistentState","useAppInfo","useLocation","useHistory","getFetchClient","name","auth","MainNav","NavBrand","Divider","NavSections","Write","NavSection","NavFooter","NavUser","Exit","NavCondense","Message","Icon","Question","PopoverPrimitives","index","Play","VisuallyHidden","Book","PaperPlane","createTypedSelector","useRBACProvider","useStrapiApp","useSelector","Puzzle","ShoppingCart","Cog","hasPermissions","cloneDeep","SkipToContent","NotFoundPage","InternalErrorPage","module","useTypedDispatch","useTypedSelector","ACTION_SET_APP_RUNTIME_STATUS","createRoute","LoadingIndicatorPage","DndProvider","HTML5Backend","Switch","Route","produce","set","useFetchClient","useQueries","userId","AppInfoProvider","RBACProvider","NpsSurvey","valid","lt"],"mappings":"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"}
1
+ {"version":3,"file":"AuthenticatedApp-79e3f141.js","sources":["../../admin/src/utils/getFullName.ts","../../admin/src/utils/hashAdminUserEmail.ts","../../admin/src/components/GuidedTour/constants.ts","../../admin/src/components/GuidedTour/Ornaments.tsx","../../admin/src/components/GuidedTour/Modal.tsx","../../admin/src/components/LeftMenu.tsx","../../admin/src/assets/images/onboarding-preview.png","../../admin/src/components/Onboarding.tsx","../../admin/src/selectors.ts","../../admin/src/hooks/useMenu.ts","../../admin/src/layouts/AppLayout.tsx","../../admin/src/pages/Admin.tsx","../../admin/src/components/PluginsInitializer.tsx","../../admin/src/components/AuthenticatedApp.tsx"],"sourcesContent":["export function getFullName(firstname: string, lastname: string | null = '') {\n return [firstname, lastname].filter((str) => str).join(' ');\n}\n","import { UserInfo } from '@strapi/helper-plugin';\n\nexport const utils = {\n bufferToHex(buffer: ArrayBuffer) {\n return [...new Uint8Array(buffer)].map((b) => b.toString(16).padStart(2, '0')).join('');\n },\n async digestMessage(message: string) {\n const msgUint8 = new TextEncoder().encode(message);\n const hashBuffer = await crypto.subtle.digest('SHA-256', msgUint8);\n\n return this.bufferToHex(hashBuffer);\n },\n};\n\nexport async function hashAdminUserEmail(payload?: UserInfo) {\n if (!payload) {\n return null;\n }\n\n try {\n return await utils.digestMessage(payload.email);\n } catch (error) {\n return null;\n }\n}\n","const LAYOUT_DATA = {\n contentTypeBuilder: {\n home: {\n title: {\n id: 'app.components.GuidedTour.home.CTB.title',\n defaultMessage: '🧠 Build the content structure',\n },\n cta: {\n title: {\n id: 'app.components.GuidedTour.home.CTB.cta.title',\n defaultMessage: 'Go to the Content type Builder',\n },\n type: 'REDIRECT',\n target: '/plugins/content-type-builder',\n },\n trackingEvent: 'didClickGuidedTourHomepageContentTypeBuilder',\n },\n create: {\n title: {\n id: 'app.components.GuidedTour.CTB.create.title',\n defaultMessage: '🧠 Create a first Collection type',\n },\n content: {\n id: 'app.components.GuidedTour.CTB.create.content',\n defaultMessage:\n '<p>Collection types help you manage several entries, Single types are suitable to manage only one entry.</p> <p>Ex: For a Blog website, Articles would be a Collection type whereas a Homepage would be a Single type.</p>',\n },\n cta: {\n title: {\n id: 'app.components.GuidedTour.CTB.create.cta.title',\n defaultMessage: 'Build a Collection type',\n },\n type: 'CLOSE',\n },\n trackingEvent: 'didClickGuidedTourStep1CollectionType',\n },\n success: {\n title: {\n id: 'app.components.GuidedTour.CTB.success.title',\n defaultMessage: 'Step 1: Completed ✅',\n },\n content: {\n id: 'app.components.GuidedTour.CTB.success.content',\n defaultMessage: '<p>Good going!</p><b>⚡️ What would you like to share with the world?</b>',\n },\n cta: {\n title: {\n id: 'app.components.GuidedTour.create-content',\n defaultMessage: 'Create content',\n },\n type: 'REDIRECT',\n target: '/content-manager',\n },\n trackingEvent: 'didCreateGuidedTourCollectionType',\n },\n },\n contentManager: {\n home: {\n title: {\n id: 'app.components.GuidedTour.home.CM.title',\n defaultMessage: '⚡️ What would you like to share with the world?',\n },\n cta: {\n title: {\n id: 'app.components.GuidedTour.create-content',\n defaultMessage: 'Create content',\n },\n type: 'REDIRECT',\n target: '/content-manager',\n },\n trackingEvent: 'didClickGuidedTourHomepageContentManager',\n },\n create: {\n title: {\n id: 'app.components.GuidedTour.CM.create.title',\n defaultMessage: '⚡️ Create content',\n },\n content: {\n id: 'app.components.GuidedTour.CM.create.content',\n defaultMessage:\n \"<p>Create and manage all the content here in the Content Manager.</p><p>Ex: Taking the Blog website example further, one can write an Article, save and publish it as they like.</p><p>💡 Quick tip - Don't forget to hit publish on the content you create.</p>\",\n },\n cta: {\n title: {\n id: 'app.components.GuidedTour.create-content',\n defaultMessage: 'Create content',\n },\n type: 'CLOSE',\n },\n trackingEvent: 'didClickGuidedTourStep2ContentManager',\n },\n success: {\n title: {\n id: 'app.components.GuidedTour.CM.success.title',\n defaultMessage: 'Step 2: Completed ✅',\n },\n content: {\n id: 'app.components.GuidedTour.CM.success.content',\n defaultMessage: '<p>Awesome, one last step to go!</p><b>🚀 See content in action</b>',\n },\n cta: {\n title: {\n id: 'app.components.GuidedTour.CM.success.cta.title',\n defaultMessage: 'Test the API',\n },\n type: 'REDIRECT',\n target: '/settings/api-tokens',\n },\n trackingEvent: 'didCreateGuidedTourEntry',\n },\n },\n apiTokens: {\n home: {\n title: {\n id: 'app.components.GuidedTour.apiTokens.create.title',\n defaultMessage: '🚀 See content in action',\n },\n cta: {\n title: {\n id: 'app.components.GuidedTour.home.apiTokens.cta.title',\n defaultMessage: 'Test the API',\n },\n type: 'REDIRECT',\n target: '/settings/api-tokens',\n },\n trackingEvent: 'didClickGuidedTourHomepageApiTokens',\n },\n create: {\n title: {\n id: 'app.components.GuidedTour.apiTokens.create.title',\n defaultMessage: '🚀 See content in action',\n },\n content: {\n id: 'app.components.GuidedTour.apiTokens.create.content',\n defaultMessage:\n '<p>Generate an authentication token here and retrieve the content you just created.</p>',\n },\n cta: {\n title: {\n id: 'app.components.GuidedTour.apiTokens.create.cta.title',\n defaultMessage: 'Generate an API Token',\n },\n type: 'CLOSE',\n },\n trackingEvent: 'didClickGuidedTourStep3ApiTokens',\n },\n success: {\n title: {\n id: 'app.components.GuidedTour.apiTokens.success.title',\n defaultMessage: 'Step 3: Completed ✅',\n },\n content: {\n id: 'app.components.GuidedTour.apiTokens.success.content',\n defaultMessage:\n \"<p>See content in action by making an HTTP request:</p><ul><li><p>To this URL: <light>https://'<'YOUR_DOMAIN'>'/api/'<'YOUR_CT'>'</light></p></li><li><p>With the header: <light>Authorization: bearer '<'YOUR_API_TOKEN'>'</light></p></li></ul><p>For more ways to interact with content, see the <documentationLink>documentation</documentationLink>.</p>\",\n },\n trackingEvent: 'didGenerateGuidedTourApiTokens',\n },\n },\n} as const;\n\nconst STATES = {\n IS_DONE: 'IS_DONE',\n IS_ACTIVE: 'IS_ACTIVE',\n IS_NOT_DONE: 'IS_NOT_DONE',\n} as const;\n\ntype LayoutData = typeof LAYOUT_DATA;\ntype States = keyof typeof STATES;\n\nexport { LAYOUT_DATA, STATES };\nexport type { LayoutData, States };\n","import { Box, BoxProps, Flex, FlexProps, Typography } from '@strapi/design-system';\nimport { pxToRem } from '@strapi/helper-plugin';\nimport { Check } from '@strapi/icons';\n\nimport { STATES, States } from './constants';\n\n/* -------------------------------------------------------------------------------------------------\n * Number\n * -----------------------------------------------------------------------------------------------*/\n\ninterface NumberProps extends FlexProps {\n children: number;\n state: States;\n}\n\nconst Number = ({ children, state, ...props }: NumberProps) => {\n return state === STATES.IS_DONE || state === STATES.IS_ACTIVE ? (\n <Flex\n background=\"primary600\"\n padding={2}\n borderRadius=\"50%\"\n width={pxToRem(30)}\n height={pxToRem(30)}\n justifyContent=\"center\"\n {...props}\n >\n {state === STATES.IS_DONE ? (\n <Check aria-hidden width={pxToRem(16)} color=\"neutral0\" />\n ) : (\n <Typography fontWeight=\"semiBold\" textColor=\"neutral0\">\n {children}\n </Typography>\n )}\n </Flex>\n ) : (\n <Flex\n borderColor=\"neutral500\"\n borderWidth=\"1px\"\n borderStyle=\"solid\"\n padding={2}\n borderRadius=\"50%\"\n width={pxToRem(30)}\n height={pxToRem(30)}\n justifyContent=\"center\"\n {...props}\n >\n <Typography fontWeight=\"semiBold\" textColor=\"neutral600\">\n {children}\n </Typography>\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * VerticalDivider\n * -----------------------------------------------------------------------------------------------*/\n\ninterface VerticalDividerProps extends BoxProps {\n state: States;\n}\n\nconst VerticalDivider = ({ state, ...props }: VerticalDividerProps) => (\n <Box\n width={pxToRem(2)}\n height=\"100%\"\n background={state === STATES.IS_NOT_DONE ? 'neutral300' : 'primary500'}\n hasRadius\n minHeight={state === STATES.IS_ACTIVE ? pxToRem(85) : pxToRem(65)}\n {...props}\n />\n);\n\nexport { Number, VerticalDivider };\nexport type { NumberProps, VerticalDividerProps };\n","import * as React from 'react';\n\nimport {\n Box,\n Button,\n Flex,\n FocusTrap,\n IconButton,\n Portal,\n Typography,\n} from '@strapi/design-system';\nimport { LinkButton } from '@strapi/design-system/v2';\nimport { GuidedTourContextValue, pxToRem, useGuidedTour, useTracking } from '@strapi/helper-plugin';\nimport { ArrowRight, Cross } from '@strapi/icons';\nimport get from 'lodash/get';\nimport { MessageDescriptor, useIntl } from 'react-intl';\nimport { NavLink } from 'react-router-dom';\nimport styled from 'styled-components';\n\nimport { LAYOUT_DATA, STATES } from './constants';\nimport { Number, VerticalDivider } from './Ornaments';\n\n/* -------------------------------------------------------------------------------------------------\n * GuidedTourModal\n * -----------------------------------------------------------------------------------------------*/\n\nconst GuidedTourModal = () => {\n const {\n currentStep,\n guidedTourState,\n setCurrentStep,\n setStepState,\n isGuidedTourVisible,\n setSkipped,\n } = useGuidedTour();\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n\n if (!currentStep || !isGuidedTourVisible) {\n return null;\n }\n\n const stepData = get(LAYOUT_DATA, currentStep);\n const sectionKeys = Object.keys(guidedTourState);\n const [sectionName, stepName] = currentStep.split('.') as [\n keyof GuidedTourContextValue['guidedTourState'],\n string\n ];\n const sectionIndex = sectionKeys.indexOf(sectionName);\n const stepIndex = Object.keys(guidedTourState[sectionName]).indexOf(stepName);\n const hasSectionAfter = sectionIndex < sectionKeys.length - 1;\n const hasStepAfter = stepIndex < Object.keys(guidedTourState[sectionName]).length - 1;\n\n const handleCtaClick = () => {\n setStepState(currentStep, true);\n trackUsage(stepData.trackingEvent);\n\n setCurrentStep(null);\n };\n\n const handleSkip = () => {\n setSkipped(true);\n setCurrentStep(null);\n trackUsage('didSkipGuidedtour');\n };\n\n return (\n <Portal>\n <ModalWrapper onClick={handleCtaClick} padding={8} justifyContent=\"center\">\n <FocusTrap onEscape={handleCtaClick}>\n <Flex\n direction=\"column\"\n alignItems=\"stretch\"\n background=\"neutral0\"\n width={pxToRem(660)}\n shadow=\"popupShadow\"\n hasRadius\n padding={4}\n gap={8}\n role=\"dialog\"\n aria-modal\n onClick={(e) => e.stopPropagation()}\n >\n <Flex justifyContent=\"flex-end\">\n <IconButton\n onClick={handleCtaClick}\n aria-label={formatMessage({\n id: 'app.utils.close-label',\n defaultMessage: 'Close',\n })}\n >\n <Cross />\n </IconButton>\n </Flex>\n <Box\n paddingLeft={7}\n paddingRight={7}\n paddingBottom={!hasStepAfter && !hasSectionAfter ? 8 : 0}\n >\n <GuidedTourStepper\n title={stepData.title}\n cta={'cta' in stepData ? stepData.cta : undefined}\n onCtaClick={handleCtaClick}\n sectionIndex={sectionIndex}\n stepIndex={stepIndex}\n hasSectionAfter={hasSectionAfter}\n >\n <GuidedTourContent {...stepData.content} />\n </GuidedTourStepper>\n </Box>\n {!(!hasStepAfter && !hasSectionAfter) && (\n <Flex justifyContent=\"flex-end\">\n <Button variant=\"tertiary\" onClick={handleSkip}>\n {formatMessage({\n id: 'app.components.GuidedTour.skip',\n defaultMessage: 'Skip the tour',\n })}\n </Button>\n </Flex>\n )}\n </Flex>\n </FocusTrap>\n </ModalWrapper>\n </Portal>\n );\n};\n\nconst ModalWrapper = styled(Flex)`\n position: fixed;\n z-index: 4;\n inset: 0;\n /* this is theme.colors.neutral800 with opacity */\n background: ${({ theme }) => `${theme.colors.neutral800}1F`};\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * GuidedTourStepper\n * -----------------------------------------------------------------------------------------------*/\n\ninterface GuidedTourStepperProps {\n title: MessageDescriptor;\n children: React.ReactNode;\n cta?: {\n title: MessageDescriptor;\n target?: string;\n };\n onCtaClick: () => void;\n sectionIndex: number;\n stepIndex: number;\n hasSectionAfter: boolean;\n}\n\nconst GuidedTourStepper = ({\n title,\n children,\n cta,\n onCtaClick,\n sectionIndex,\n stepIndex,\n hasSectionAfter,\n}: GuidedTourStepperProps) => {\n const { formatMessage } = useIntl();\n\n const hasSectionBefore = sectionIndex > 0;\n const hasStepsBefore = stepIndex > 0;\n const nextSectionIndex = sectionIndex + 1;\n\n return (\n <>\n <Flex alignItems=\"stretch\">\n <Flex marginRight={8} justifyContent=\"center\" minWidth={pxToRem(30)}>\n {hasSectionBefore && <VerticalDivider state={STATES.IS_DONE} minHeight={pxToRem(24)} />}\n </Flex>\n <Typography variant=\"sigma\" textColor=\"primary600\">\n {formatMessage({\n id: 'app.components.GuidedTour.title',\n defaultMessage: '3 steps to get started',\n })}\n </Typography>\n </Flex>\n <Flex>\n <Flex marginRight={8} minWidth={pxToRem(30)}>\n <Number\n state={hasStepsBefore ? STATES.IS_DONE : STATES.IS_ACTIVE}\n paddingTop={3}\n paddingBottom={3}\n >\n {sectionIndex + 1}\n </Number>\n </Flex>\n <Typography variant=\"alpha\" fontWeight=\"bold\" textColor=\"neutral800\" as=\"h3\" id=\"title\">\n {formatMessage(title)}\n </Typography>\n </Flex>\n <Flex alignItems=\"stretch\">\n <Flex marginRight={8} direction=\"column\" justifyContent=\"center\" minWidth={pxToRem(30)}>\n {hasSectionAfter && (\n <>\n <VerticalDivider state={STATES.IS_DONE} />\n {hasStepsBefore && (\n <Number state={STATES.IS_ACTIVE} paddingTop={3}>\n {nextSectionIndex + 1}\n </Number>\n )}\n </>\n )}\n </Flex>\n <Box>\n {children}\n {cta &&\n (cta.target ? (\n <LinkButton\n as={NavLink}\n endIcon={<ArrowRight />}\n onClick={onCtaClick}\n // @ts-expect-error - types are not inferred correctly through the as prop.\n to={cta.target}\n >\n {formatMessage(cta.title)}\n </LinkButton>\n ) : (\n <Button endIcon={<ArrowRight />} onClick={onCtaClick}>\n {formatMessage(cta.title)}\n </Button>\n ))}\n </Box>\n </Flex>\n {hasStepsBefore && hasSectionAfter && (\n <Box paddingTop={3}>\n <Flex marginRight={8} justifyContent=\"center\" width={pxToRem(30)}>\n <VerticalDivider state={STATES.IS_DONE} minHeight={pxToRem(24)} />\n </Flex>\n </Box>\n )}\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * GuidedTourContent\n * -----------------------------------------------------------------------------------------------*/\n\ninterface GuidedTourContentProps\n extends Required<Pick<MessageDescriptor, 'defaultMessage' | 'id'>> {}\n\nconst GuidedTourContent = ({ id, defaultMessage }: GuidedTourContentProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4} paddingBottom={6}>\n {formatMessage(\n { id, defaultMessage },\n {\n documentationLink: DocumentationLink,\n b: Bold,\n p: Paragraph,\n light: Light,\n ul: List,\n li: ListItem,\n }\n )}\n </Flex>\n );\n};\n\nconst DocumentationLink = (children: React.ReactNode) => (\n <Typography\n as=\"a\"\n textColor=\"primary600\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n href=\"https://docs.strapi.io/developer-docs/latest/developer-resources/database-apis-reference/rest-api.html#api-parameters\"\n >\n {children}\n </Typography>\n);\n\nconst Bold = (children: React.ReactNode) => (\n <Typography fontWeight=\"semiBold\">{children}</Typography>\n);\n\nconst Paragraph = (children: React.ReactNode) => <Typography>{children}</Typography>;\n\nconst Light = (children: React.ReactNode) => (\n <Typography textColor=\"neutral600\">{children}</Typography>\n);\n\nconst List = (children: React.ReactNode) => (\n <Box paddingLeft={6}>\n <ul>{children}</ul>\n </Box>\n);\n\nconst LiStyled = styled.li`\n list-style: disc;\n &::marker {\n color: ${({ theme }) => theme.colors.neutral800};\n }\n`;\n\nconst ListItem = (children: React.ReactNode) => <LiStyled>{children}</LiStyled>;\n\nexport { GuidedTourModal };\n","import * as React from 'react';\n\nimport { Box, Divider, Flex, FocusTrap, Typography } from '@strapi/design-system';\nimport {\n MainNav,\n NavBrand,\n NavCondense,\n NavFooter,\n NavLink,\n NavSection,\n NavSections,\n NavUser,\n} from '@strapi/design-system/v2';\nimport {\n auth,\n getFetchClient,\n useAppInfo,\n usePersistentState,\n useTracking,\n} from '@strapi/helper-plugin';\nimport { Exit, Write } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { NavLink as RouterNavLink, useHistory, useLocation } from 'react-router-dom';\nimport styled from 'styled-components';\n\nimport { useConfiguration } from '../contexts/configuration';\nimport { Menu } from '../hooks/useMenu';\n\nconst LinkUserWrapper = styled(Box)`\n width: ${150 / 16}rem;\n position: absolute;\n bottom: ${({ theme }) => theme.spaces[9]};\n left: ${({ theme }) => theme.spaces[5]};\n`;\n\nconst LinkUser = styled(RouterNavLink)<{ logout?: boolean }>`\n display: flex;\n justify-content: space-between;\n align-items: center;\n text-decoration: none;\n padding: ${({ theme }) => `${theme.spaces[2]} ${theme.spaces[4]}`};\n border-radius: ${({ theme }) => theme.spaces[1]};\n\n &:hover {\n background: ${({ theme, logout }) =>\n logout ? theme.colors.danger100 : theme.colors.primary100};\n text-decoration: none;\n }\n\n svg {\n path {\n fill: ${({ theme }) => theme.colors.danger600};\n }\n }\n`;\n\ninterface LeftMenuProps extends Pick<Menu, 'generalSectionLinks' | 'pluginsSectionLinks'> {}\n\nconst LeftMenu = ({ generalSectionLinks, pluginsSectionLinks }: LeftMenuProps) => {\n const navUserRef = React.useRef<HTMLDivElement>(null!);\n const [userLinksVisible, setUserLinksVisible] = React.useState(false);\n const {\n logos: { menu },\n } = useConfiguration();\n const [condensed, setCondensed] = usePersistentState('navbar-condensed', false);\n const { userDisplayName } = useAppInfo();\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const { pathname } = useLocation();\n const history = useHistory();\n const { post } = getFetchClient();\n\n const initials = userDisplayName\n .split(' ')\n .map((name) => name.substring(0, 1))\n .join('')\n .substring(0, 2);\n\n const handleToggleUserLinks = () => setUserLinksVisible((prev) => !prev);\n\n const handleLogout = async () => {\n await post('/admin/logout');\n auth.clearAppStorage();\n handleToggleUserLinks();\n history.push('/auth/login');\n };\n\n const handleBlur: React.FocusEventHandler = (e) => {\n if (\n !e.currentTarget.contains(e.relatedTarget) &&\n /**\n * TODO: can we replace this by just using the navUserRef?\n */\n e.relatedTarget?.parentElement?.id !== 'main-nav-user-button'\n ) {\n setUserLinksVisible(false);\n }\n };\n\n const handleClickOnLink = (destination: string) => {\n trackUsage('willNavigate', { from: pathname, to: destination });\n };\n\n const menuTitle = formatMessage({\n id: 'app.components.LeftMenu.navbrand.title',\n defaultMessage: 'Strapi Dashboard',\n });\n\n return (\n <MainNav condensed={condensed}>\n <NavBrand\n as={RouterNavLink}\n workplace={formatMessage({\n id: 'app.components.LeftMenu.navbrand.workplace',\n defaultMessage: 'Workplace',\n })}\n title={menuTitle}\n icon={\n <img\n src={menu.custom || menu.default}\n alt={formatMessage({\n id: 'app.components.LeftMenu.logo.alt',\n defaultMessage: 'Application logo',\n })}\n />\n }\n />\n\n <Divider />\n\n <NavSections>\n <NavLink\n as={RouterNavLink}\n // @ts-expect-error the props from the passed as prop are not inferred // joined together\n to=\"/content-manager\"\n icon={<Write />}\n onClick={() => handleClickOnLink('/content-manager')}\n >\n {formatMessage({ id: 'global.content-manager', defaultMessage: 'Content manager' })}\n </NavLink>\n\n {pluginsSectionLinks.length > 0 ? (\n <NavSection\n label={formatMessage({\n id: 'app.components.LeftMenu.plugins',\n defaultMessage: 'Plugins',\n })}\n >\n {pluginsSectionLinks.map((link) => {\n const Icon = link.icon;\n\n return (\n <NavLink\n as={RouterNavLink}\n // @ts-expect-error the props from the passed as prop are not inferred // joined together\n to={link.to}\n key={link.to}\n icon={<Icon />}\n onClick={() => handleClickOnLink(link.to)}\n >\n {formatMessage(link.intlLabel)}\n </NavLink>\n );\n })}\n </NavSection>\n ) : null}\n\n {generalSectionLinks.length > 0 ? (\n <NavSection\n label={formatMessage({\n id: 'app.components.LeftMenu.general',\n defaultMessage: 'General',\n })}\n >\n {generalSectionLinks.map((link) => {\n const LinkIcon = link.icon;\n\n return (\n <NavLink\n as={RouterNavLink}\n badgeContent={\n link.notificationsCount && link.notificationsCount > 0\n ? link.notificationsCount.toString()\n : undefined\n }\n // @ts-expect-error the props from the passed as prop are not inferred // joined together\n to={link.to}\n key={link.to}\n icon={<LinkIcon />}\n onClick={() => handleClickOnLink(link.to)}\n >\n {formatMessage(link.intlLabel)}\n </NavLink>\n );\n })}\n </NavSection>\n ) : null}\n </NavSections>\n\n <NavFooter>\n <NavUser\n id=\"main-nav-user-button\"\n ref={navUserRef}\n onClick={handleToggleUserLinks}\n initials={initials}\n >\n {userDisplayName}\n </NavUser>\n {userLinksVisible && (\n <LinkUserWrapper\n onBlur={handleBlur}\n padding={1}\n shadow=\"tableShadow\"\n background=\"neutral0\"\n hasRadius\n >\n <FocusTrap onEscape={handleToggleUserLinks}>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={0}>\n <LinkUser tabIndex={0} onClick={handleToggleUserLinks} to=\"/me\">\n <Typography>\n {formatMessage({\n id: 'global.profile',\n defaultMessage: 'Profile',\n })}\n </Typography>\n </LinkUser>\n <LinkUser tabIndex={0} onClick={handleLogout} to=\"/auth/login\">\n <Typography textColor=\"danger600\">\n {formatMessage({\n id: 'app.components.LeftMenu.logout',\n defaultMessage: 'Logout',\n })}\n </Typography>\n <Exit />\n </LinkUser>\n </Flex>\n </FocusTrap>\n </LinkUserWrapper>\n )}\n\n <NavCondense onClick={() => setCondensed((s) => !s)}>\n {condensed\n ? formatMessage({\n id: 'app.components.LeftMenu.expand',\n defaultMessage: 'Expand the navbar',\n })\n : formatMessage({\n id: 'app.components.LeftMenu.collapse',\n defaultMessage: 'Collapse the navbar',\n })}\n </NavCondense>\n </NavFooter>\n </MainNav>\n );\n};\n\nexport { LeftMenu };\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHAAAABQCAMAAAD2kgFPAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAL9UExURff3+fv7+/X19/Pz9/n5+fv7/f39//////39/UdwTPn5+/X1+fHx++/v8fn5/fHx8/Pz9eTk6e/v8/Hx9fHx/e3u7/X19e3t8evr7+fn6YuR96Gl+OLi59LS2dTU2uvr++nq7ff39+Tk697e4ufn6+vr7enq69ra3tDQ1uDg5/nv7+Dg5Nzc4Nzd4tTU2OTk5+fn7djY3tzc5M/Q1NjY3NLS1tbX3MzM0u/w9crK0unp7+np+/37+8rK0MjIzu/v78PEy9ra4djY4eLi6t7e5NbW2s7O1OLk5+/v/Ojp/dra5MPF9+3u89bX3mxz99DQ2fj4+OLi5PHx8dvb29ze+/f3/7C1+t7e5+vr69PX2OPk/Jydl/T09/f393R7+Gdw96ytuNTU3M7O2ODg6a6vumJq9+3u/dTW/PP19cXGzd7e4O3t7cnK+/f3+uLk683O+Z2h+dLU+9/h++no3/j39bq0pu/v7fv7+fHz9XF4911l93V8+bm5waGirffr7Kqrtq+z9qentF9o93mA+fj4+vr6++/v7/f3++vt+83N0/Pz8+vr8dbY+sjJ98zO1crM0vn5//Pz/ra6n/n59d/g4quvp9fa2OTn66Shm8C2prCuq+/r67Gxr9LLvbCwrcfEwK+vqZSahtPVw5WafKiknff5+ZqapvHw7fv4+YGH9dnb++Tn/Ly8xvfo6Oq5v////6WlsNrc3vPz+dLU2Ovr/eTn+drc4JWXo6Wp+cLE++nr74+T+enr4s7Q1m5098bArefk5Nze0ODc1Pf3/MC8tuDi0KWrh/n39+Tk4qmv+77Cqdjc3PX1/c7S0vv7/7ixo/Px7Z+jh62x+8rMtrS6pZebjY+Rn9bayKuvm+vp5+np6aWrjVJa9fX38bi895+fm1pk9620oevp6bS0r+fp6fv19VZg9fn19X6F+fnz89LS3MDAyPXi4uextvX1+vPW2OCVnYmJl9zc4Xh4iff3+mdy97y8xPf3977C96mpsbS29YeHlamv84qS87i89VXx8BYAAAD/dFJOU319fX19fX19fQB9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19bX19fX19fX19fX19Lwd9fX19fX19fX19fX19fX1lfX19fX19fX19fX19fX19fX19fX19fW1dED59fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX0PfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1mfX19bX1eXn0/fX19fX0/fSWruQsAAAbiSURBVGje7VkFcBtHFD2SbnXO9UA56dRIiiRbFFlmiO3asWKIE0MYGrQbZmjDDA1T06RJ03DSJA2XMaWUmZmZmWm6ki3lTie59kTSlJ40p5nV//tud//b/28P0WiG/PgdkhBMHKzRaBDNyWXSRoqi4ki57CQk/MZsKna58pqa0N4gnoNcNgQZzBV8ml9aYMYaW4DQRKjvDC8MG7TkG0ff+gmobifD78gXYQZE0++8b08tXFg/4uf6H46VLh5Rf/P8TERtXG1ykkmtI7zmtZFLhtW9NWfOnCUjhy0Z+T2CJOFYJMOS+YtPzV884teDX8879sKIhfUHSxG1AzH0ajXhB3UjPxpaVzd37uyls5cunRv30Fx0vhxRDfXdLLbhZWU2W1mGGNtbEPuXdStz+2ycu/+kbmv4YLOWZ3merdEyNSweW0KMxXkW1+J4RwxeMeRfCIbhMsu7/LUd0QgkSYkW8TS5wznVlg93W8LnEiUooAIqFYBQkxBnSIxkMStJVLUPoah90cCqlSurWkSI6ijdGGv0v0Wv3iaIa1i9KLJ+QoR0Wk0l2YCo6jO5unpq9dTJkyesW7uu+oZp09q0iLDXvOQNG0r9uxbtNdU2hIcidV4YELTpt40C17WIsMk9oAyapxMbNxiCR4uRWAP2TNOZ3S/KCmdEyfggEORQ9Xh4kKPkM8O6AjbIS/BWfZLED+N5StmbisEZRttRTzVD2LZtUdW09gPbFx0tatuE0Y2E/YYeVYlI0E7ELYjET68vJJS9nZdRc1shq7dgzRIeKfrtj0W//LTojTDCOE2pMsjb3BiQhSo+gF3jOJNhKQwPUgqcBdqhER+Cc4efUOvL8nFKwhxn/tjKtNLTY12HO3z15ecnTiz4ODaEkUEBgoKqIRAdgR3u8NmC4wuOd3g/noSoWoILGgHU5w7/jGpxbQ28dJRl3/AoPfR6jKIUqcnKstkm2fpnZOlZGSFBqUgQtLt6/9vvSf0Y/19qENYbgIpHSQBvFk6ekgy2NZO9SIqk1Pag7Ttvvttb6pu3Ps9lTtvsqsiTtmLpnC83L8fpyjXlmpMVhDYS+IKbN6YkBNINaubunWiMphTh9d0L1tcqMj6IDwKdszgeYYR9u6old/bsi1SsRohhs3heVBK2mz1QLQTthOe3Xyj1q8xJ3uwZZ/A5jbI17GlPyUlNTk31jHN6DQoyhgLuQNVm7l7bWZkPb719FBnKCIcOTJ8h9bVi8GO16hCdLAxR1N9E6HSsDlOmDGjLNBOlcnR6KlY6RFitODzFlrCM799qyt1eZV1KEqhU+E+/5EiE8EML/8qgXVdIfbPHZhfkrrp2bL5J2sqmJptL8nOzi9fnFxekKgjLUOB/rub58obMCEGjVoGzI7x8986Z5zydsDcQkMXWQguPJG4No25tslXYt08Vs62N8TaYvUnKNVSh6tVBuxl798iE7/QYuRSO5jhB2koYGCHZ4PBwKV2MnF5BhlPqxsqC1uJshKChUDIk3qsOPPmy1LeXIIgMzToYWtqK6nS0vRNNC+P1gqgUPrwFfYuFP+DiWK5hCwhjFzSF/WuzOnd2uwt9fEcZ4dp+l52VxSWvPueQb4ugMc7lcY8GhA+iC5+CETqLhV8Ww5iwmmbKsD4glPHtg3bIhJ/mMpucuelpabK8jqVyqdkVOea0nOtzTR4FYQoKvM1MadcJfSUjvO+uB2MlfP+hgrtLAoUf5VAhzPCe++MepVD4gAmlw71bZMLvnZ5ucBhpe0+ZDokuUPgpnJETofDtkYSfEjhUKP8ks0G5eaOoVPjbpt8t9XUYOU+6gfZYZIUEytMOzmB39OzJGThaQZgBv1EPFeIr/AiHCnEMmmiHCgMnnJHI4oFNjGzySEBGVDZsD2g+ovChX3DzjpCeptT1AaEdf8CgHbKgcbnSXBUmoykvRyb8ZKMnrSIzz2Q2myKV+iHhY0laJeGRfhLhW/dcqWulxqOOkOFNp7v78IRm/BZkiztiF6WRDxX85zRFIKTDGfu3PCr1SxcEmGd1jMDKhD9+jE6kRZHWdrILSh3CTsVAXZqa5eWUhA8P7UqGuuu0bfpDso3fuJXjDILHIBc+LQgp6XaHMd1o4HpFyvgZzUzpE49Jn5563wv+qRk/ej6culFSCG96RBc74UcmnHJnH2A5K/xdj0t9S0oLirMrvSWrKmSlvvMmZ3GBuTI/u7IkX1nqW1BQ2wzh6FskNY11eyuFH2kC4DJRf581/B+tQHzfK4e9ZsIQBkFHbURgLQMfX9x4vAlh1sMhIYnAhxhYxVgSNE6C+E+F0KWJpZuIrEgs4WBkSI9E8vXQIJrlCWTssRwSajSDJyYoXFYM0Wj+BNjsk7mwYOwbAAAAAElFTkSuQmCC\"","import * as React from 'react';\n\nimport {\n Box,\n Button,\n Divider,\n Flex,\n Icon,\n PopoverPrimitives,\n Portal,\n Typography,\n VisuallyHidden,\n} from '@strapi/design-system';\nimport { useAppInfo } from '@strapi/helper-plugin';\nimport { Cross, Message, Play, Question, Book, PaperPlane } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport onboardingPreview from '../assets/images/onboarding-preview.png';\n\nconst Onboarding = () => {\n const triggerRef = React.useRef<HTMLButtonElement>(null!);\n const [isOpen, setIsOpen] = React.useState(false);\n const { formatMessage } = useIntl();\n const { communityEdition } = useAppInfo();\n\n const handlePopoverVisibility = () => {\n setIsOpen((prev) => !prev);\n };\n\n const docLinks = [\n ...DOCUMENTATION_LINKS,\n {\n label: { id: 'Settings.application.get-help', defaultMessage: 'Get help' },\n icon: Message,\n href: communityEdition\n ? 'https://discord.strapi.io'\n : 'https://support.strapi.io/support/home',\n },\n ];\n\n return (\n <Box as=\"aside\" position=\"fixed\" bottom={2} right={2}>\n <HelperButton\n aria-label={formatMessage(\n isOpen\n ? {\n id: 'app.components.Onboarding.help.button-close',\n defaultMessage: 'Close help menu',\n }\n : {\n id: 'app.components.Onboarding.help.button',\n defaultMessage: 'Open help menu',\n }\n )}\n onClick={handlePopoverVisibility}\n ref={triggerRef}\n >\n <Icon as={isOpen ? Cross : Question} color=\"buttonNeutral0\" />\n </HelperButton>\n\n {isOpen && (\n <Portal>\n <PopoverPrimitives.Content\n padding={0}\n onDismiss={handlePopoverVisibility}\n source={triggerRef}\n placement=\"top-end\"\n spacing={12}\n >\n <Flex\n justifyContent=\"space-between\"\n paddingBottom={5}\n paddingRight={6}\n paddingLeft={6}\n paddingTop={6}\n >\n <TypographyLineHeight fontWeight=\"bold\">\n {formatMessage({\n id: 'app.components.Onboarding.title',\n defaultMessage: 'Get started videos',\n })}\n </TypographyLineHeight>\n <TextLink\n as=\"a\"\n href={WATCH_MORE.href}\n target=\"_blank\"\n rel=\"noreferrer noopener\"\n variant=\"pi\"\n textColor=\"primary600\"\n >\n {formatMessage(WATCH_MORE.label)}\n </TextLink>\n </Flex>\n <Divider />\n {VIDEO_LINKS.map(({ href, duration, label }, index) => (\n <VideoLinkWrapper\n as=\"a\"\n href={href}\n target=\"_blank\"\n rel=\"noreferrer noopener\"\n key={href}\n hasRadius\n paddingTop={4}\n paddingBottom={4}\n paddingLeft={6}\n paddingRight={11}\n >\n <Box paddingRight={5}>\n <Typography textColor=\"neutral200\" variant=\"alpha\">\n {index + 1}\n </Typography>\n </Box>\n <Box position=\"relative\">\n <Preview src={onboardingPreview} alt=\"\" />\n <IconWrapper\n position=\"absolute\"\n top=\"50%\"\n left=\"50%\"\n background=\"primary600\"\n borderRadius=\"50%\"\n justifyContent=\"center\"\n width={6}\n height={6}\n >\n <Icon as={Play} color=\"buttonNeutral0\" width={3} height={3} />\n </IconWrapper>\n </Box>\n <Flex direction=\"column\" alignItems=\"start\" paddingLeft={4}>\n <Typography fontWeight=\"bold\">{formatMessage(label)}</Typography>\n <VisuallyHidden>:</VisuallyHidden>\n <Typography textColor=\"neutral600\" variant=\"pi\">\n {duration}\n </Typography>\n </Flex>\n </VideoLinkWrapper>\n ))}\n <Flex\n direction=\"column\"\n alignItems=\"stretch\"\n gap={2}\n paddingLeft={5}\n paddingTop={2}\n paddingBottom={5}\n >\n {docLinks.map(({ label, href, icon }) => (\n <Flex gap={3} key={href}>\n <Icon as={icon} color=\"primary600\" />\n <TextLink\n as=\"a\"\n href={href}\n target=\"_blank\"\n rel=\"noreferrer noopener\"\n variant=\"sigma\"\n textColor=\"primary700\"\n >\n {formatMessage(label)}\n </TextLink>\n </Flex>\n ))}\n </Flex>\n </PopoverPrimitives.Content>\n </Portal>\n )}\n </Box>\n );\n};\n\n// TODO: use new Button props derived from Box props with next DS release\nconst HelperButton = styled(Button)`\n border-radius: 50%;\n padding: ${({ theme }) => theme.spaces[3]};\n /* Resetting 2rem height defined by Button component */\n height: 100%;\n`;\n\nconst IconWrapper = styled(Flex)`\n transform: translate(-50%, -50%);\n`;\n\nconst VideoLinkWrapper = styled(Flex)`\n text-decoration: none;\n\n :focus-visible {\n outline-offset: ${({ theme }) => `-${theme.spaces[1]}`};\n }\n\n :hover {\n background: ${({ theme }) => theme.colors.primary100};\n\n /* Hover style for the number displayed */\n ${Typography}:first-child {\n color: ${({ theme }) => theme.colors.primary500};\n }\n\n /* Hover style for the label */\n ${Typography}:nth-child(1) {\n color: ${({ theme }) => theme.colors.primary600};\n }\n }\n`;\n\nconst Preview = styled.img`\n width: ${({ theme }) => theme.spaces[10]};\n height: ${({ theme }) => theme.spaces[8]};\n /* Same overlay used in ModalLayout */\n background: ${({ theme }) => `${theme.colors.neutral800}1F`};\n border-radius: ${({ theme }) => theme.borderRadius};\n`;\n\nconst TypographyLineHeight = styled(Typography)`\n /* line height of label and watch more to 1 so they can be better aligned visually */\n line-height: 1;\n`;\n\nconst TextLink = styled(TypographyLineHeight)`\n text-decoration: none;\n\n :hover {\n text-decoration: underline;\n }\n`;\n\nconst VIDEO_LINKS = [\n {\n label: {\n id: 'app.components.Onboarding.link.build-content',\n defaultMessage: 'Build a content architecture',\n },\n href: 'https://www.youtube.com/watch?v=G9GjN0RxhkE',\n duration: '5:48',\n },\n {\n label: {\n id: 'app.components.Onboarding.link.manage-content',\n defaultMessage: 'Add & manage content',\n },\n href: 'https://www.youtube.com/watch?v=DEZw4KbybAI',\n duration: '3:18',\n },\n {\n label: { id: 'app.components.Onboarding.link.manage-media', defaultMessage: 'Manage media' },\n href: 'https://www.youtube.com/watch?v=-61MuiMQb38',\n duration: '3:41',\n },\n];\n\nconst WATCH_MORE = {\n href: 'https://www.youtube.com/playlist?list=PL7Q0DQYATmvidz6lEmwE5nIcOAYagxWqq',\n label: {\n id: 'app.components.Onboarding.link.more-videos',\n defaultMessage: 'Watch more videos',\n },\n};\n\nconst DOCUMENTATION_LINKS = [\n {\n label: { id: 'global.documentation', defaultMessage: 'documentation' },\n href: 'https://docs.strapi.io',\n icon: Book,\n },\n {\n label: { id: 'app.static.links.cheatsheet', defaultMessage: 'cheatsheet' },\n href: 'https://strapi-showcase.s3-us-west-2.amazonaws.com/CheatSheet.pdf',\n icon: PaperPlane,\n },\n];\n\nexport { Onboarding };\n","import { createTypedSelector } from './core/store/hooks';\n\nexport const selectAdminPermissions = createTypedSelector((state) => state.admin_app.permissions);\n","import * as React from 'react';\n\nimport {\n Permission,\n hasPermissions,\n useAppInfo,\n useRBACProvider,\n useStrapiApp,\n StrapiAppContextValue,\n} from '@strapi/helper-plugin';\nimport { Cog, Puzzle, ShoppingCart } from '@strapi/icons';\nimport cloneDeep from 'lodash/cloneDeep';\nimport { useSelector } from 'react-redux';\n\nimport { selectAdminPermissions } from '../selectors';\n\n/* -------------------------------------------------------------------------------------------------\n * useMenu\n * -----------------------------------------------------------------------------------------------*/\n\ntype MenuItem = StrapiAppContextValue['menu'][number];\n\nexport interface Menu {\n generalSectionLinks: MenuItem[];\n pluginsSectionLinks: MenuItem[];\n isLoading: boolean;\n}\n\nconst useMenu = () => {\n const { allPermissions: userPermissions } = useRBACProvider();\n const { shouldUpdateStrapi } = useAppInfo();\n const { menu } = useStrapiApp();\n const permissions = useSelector(selectAdminPermissions);\n const [menuWithUserPermissions, setMenuWithUserPermissions] = React.useState<Menu>({\n generalSectionLinks: [\n {\n icon: Puzzle,\n intlLabel: {\n id: 'global.plugins',\n defaultMessage: 'Plugins',\n },\n to: '/list-plugins',\n // @ts-expect-error - we need the permissions type from the plugin\n permissions: permissions.marketplace.main,\n },\n {\n icon: ShoppingCart,\n intlLabel: {\n id: 'global.marketplace',\n defaultMessage: 'Marketplace',\n },\n to: '/marketplace',\n // @ts-expect-error - we need the permissions type from the plugin\n permissions: permissions.marketplace.main,\n },\n {\n icon: Cog,\n intlLabel: {\n id: 'global.settings',\n defaultMessage: 'Settings',\n },\n to: '/settings',\n // Permissions of this link are retrieved in the init phase\n // using the settings menu\n permissions: [],\n notificationsCount: 0,\n },\n ],\n pluginsSectionLinks: [],\n isLoading: true,\n });\n const generalSectionLinksRef = React.useRef(menuWithUserPermissions.generalSectionLinks);\n\n React.useEffect(() => {\n async function applyMenuPermissions() {\n const authorizedPluginSectionLinks = await getPluginSectionLinks(userPermissions, menu);\n\n const authorizedGeneralSectionLinks = await getGeneralLinks(\n userPermissions,\n generalSectionLinksRef.current,\n shouldUpdateStrapi\n );\n\n setMenuWithUserPermissions((state) => ({\n ...state,\n generalSectionLinks: authorizedGeneralSectionLinks,\n pluginsSectionLinks: authorizedPluginSectionLinks,\n isLoading: false,\n }));\n }\n\n applyMenuPermissions();\n }, [\n setMenuWithUserPermissions,\n generalSectionLinksRef,\n userPermissions,\n menu,\n permissions,\n shouldUpdateStrapi,\n ]);\n\n return menuWithUserPermissions;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Utils\n * -----------------------------------------------------------------------------------------------*/\n\nconst getGeneralLinks = async (\n userPermissions: Permission[],\n generalSectionRawLinks: MenuItem[],\n shouldUpdateStrapi: boolean = false\n) => {\n const generalSectionLinksPermissions = await Promise.all(\n generalSectionRawLinks.map(({ permissions }) => hasPermissions(userPermissions, permissions))\n );\n\n const authorizedGeneralSectionLinks = generalSectionRawLinks.filter(\n (_, index) => generalSectionLinksPermissions[index]\n );\n\n const settingsLinkIndex = authorizedGeneralSectionLinks.findIndex(\n (obj) => obj.to === '/settings'\n );\n\n if (settingsLinkIndex === -1) {\n return [];\n }\n\n const authorizedGeneralLinksClone = cloneDeep(authorizedGeneralSectionLinks);\n\n authorizedGeneralLinksClone[settingsLinkIndex].notificationsCount = shouldUpdateStrapi ? 1 : 0;\n\n return authorizedGeneralLinksClone;\n};\n\nconst getPluginSectionLinks = async (\n userPermissions: Permission[],\n pluginsSectionRawLinks: MenuItem[]\n) => {\n const pluginSectionLinksPermissions = await Promise.all(\n pluginsSectionRawLinks.map(({ permissions }) => hasPermissions(userPermissions, permissions))\n );\n\n const authorizedPluginSectionLinks = pluginsSectionRawLinks.filter(\n (_, index) => pluginSectionLinksPermissions[index]\n );\n\n return authorizedPluginSectionLinks;\n};\n\nexport { useMenu };\n","import * as React from 'react';\n\nimport { Box, Flex, SkipToContent } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nconst FlexBox = styled(Box)`\n flex: 1;\n`;\n\ninterface AppLayoutProps {\n children: React.ReactNode;\n sideNav: React.ReactNode;\n}\n\nexport const AppLayout = ({ children, sideNav }: AppLayoutProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <Box background=\"neutral100\">\n <SkipToContent>\n {formatMessage({ id: 'skipToContent', defaultMessage: 'Skip to content' })}\n </SkipToContent>\n <Flex alignItems=\"flex-start\">\n {sideNav}\n <FlexBox>{children}</FlexBox>\n </Flex>\n </Box>\n );\n};\n","/**\n *\n * Admin\n *\n */\n\nimport * as React from 'react';\n\nimport { LoadingIndicatorPage, useStrapiApp, useTracking } from '@strapi/helper-plugin';\nimport { DndProvider } from 'react-dnd';\nimport { HTML5Backend } from 'react-dnd-html5-backend';\nimport { Route, Switch } from 'react-router-dom';\n\nimport { GuidedTourModal } from '../components/GuidedTour/Modal';\nimport { LeftMenu } from '../components/LeftMenu';\nimport { Onboarding } from '../components/Onboarding';\nimport { ACTION_SET_APP_RUNTIME_STATUS } from '../constants';\nimport { useConfiguration } from '../contexts/configuration';\nimport { useTypedDispatch, useTypedSelector } from '../core/store/hooks';\nimport { useMenu } from '../hooks/useMenu';\nimport { AppLayout } from '../layouts/AppLayout';\nimport { createRoute } from '../utils/createRoute';\n\nconst CM = React.lazy(\n // @ts-expect-error – No types, yet.\n () => import('../content-manager/pages/App')\n);\nconst HomePage = React.lazy(() =>\n import('./HomePage').then((mod) => ({\n default: mod.HomePage,\n }))\n);\nconst InstalledPluginsPage = React.lazy(() =>\n import('./InstalledPluginsPage').then((mod) => ({\n default: mod.ProtectedInstalledPluginsPage,\n }))\n);\nconst MarketplacePage = React.lazy(() =>\n import('./Marketplace/MarketplacePage').then((mod) => ({ default: mod.ProtectedMarketplacePage }))\n);\nconst NotFoundPage = React.lazy(() =>\n import('./NotFoundPage').then(({ NotFoundPage }) => ({ default: NotFoundPage }))\n);\nconst InternalErrorPage = React.lazy(() =>\n import('./InternalErrorPage').then(({ InternalErrorPage }) => ({\n default: InternalErrorPage,\n }))\n);\n\nconst ProfilePage = React.lazy(() =>\n import('./ProfilePage').then((mod) => ({\n default: mod.ProfilePage,\n }))\n);\nconst SettingsPage = React.lazy(() =>\n // @ts-expect-error – No types, yet.\n import('./SettingsPage').then((module) => ({\n default: module.SettingsPage,\n }))\n);\n\nconst Admin = () => {\n const { trackUsage } = useTracking();\n const dispatch = useTypedDispatch();\n const appStatus = useTypedSelector((state) => state.admin_app.status);\n\n const { isLoading, generalSectionLinks, pluginsSectionLinks } = useMenu();\n const { menu } = useStrapiApp();\n const { showTutorials } = useConfiguration();\n\n React.useEffect(() => {\n // Make sure the event is only send once after accessing the admin panel\n // and not at runtime for example when regenerating the permissions with the ctb\n // or with i18n\n if (appStatus === 'init') {\n trackUsage('didAccessAuthenticatedAdministration');\n\n dispatch({ type: ACTION_SET_APP_RUNTIME_STATUS });\n }\n }, [appStatus, dispatch, trackUsage]);\n\n const routes = React.useMemo(() => {\n return (\n menu\n .filter((link) => link.Component)\n // we've filtered out the links that don't have a component above\n .map(({ to, Component, exact }) => createRoute(Component!, to, exact))\n );\n }, [menu]);\n\n if (isLoading) {\n return <LoadingIndicatorPage />;\n }\n\n return (\n <DndProvider backend={HTML5Backend}>\n <AppLayout\n sideNav={\n <LeftMenu\n generalSectionLinks={generalSectionLinks}\n pluginsSectionLinks={pluginsSectionLinks}\n />\n }\n >\n <React.Suspense fallback={<LoadingIndicatorPage />}>\n <Switch>\n <Route path=\"/\" component={HomePage} exact />\n <Route path=\"/me\" component={ProfilePage} exact />\n <Route path=\"/content-manager\" component={CM} />\n {routes}\n <Route path=\"/settings/:settingId\" component={SettingsPage} />\n <Route path=\"/settings\" component={SettingsPage} exact />\n <Route path=\"/marketplace\">\n <MarketplacePage />\n </Route>\n <Route path=\"/list-plugins\" exact>\n <InstalledPluginsPage />\n </Route>\n <Route path=\"/404\" component={NotFoundPage} />\n <Route path=\"/500\" component={InternalErrorPage} />\n <Route path=\"\" component={NotFoundPage} />\n </Switch>\n </React.Suspense>\n <GuidedTourModal />\n\n {showTutorials && <Onboarding />}\n </AppLayout>\n </DndProvider>\n );\n};\n\nexport { Admin };\n","import * as React from 'react';\n\nimport {\n LoadingIndicatorPage,\n useStrapiApp,\n type StrapiAppContextValue,\n} from '@strapi/helper-plugin';\nimport produce from 'immer';\nimport set from 'lodash/set';\n\nimport { Admin } from '../pages/Admin';\n\n/**\n * TODO: this isn't great, and we really should focus on fixing this.\n */\nconst PluginsInitializer = () => {\n const { plugins: appPlugins } = useStrapiApp();\n const [{ plugins }, dispatch] = React.useReducer<React.Reducer<State, Action>, State>(\n reducer,\n initialState,\n () => init(appPlugins)\n );\n const setPlugin = React.useRef((pluginId: string) => {\n dispatch({ type: 'SET_PLUGIN_READY', pluginId });\n });\n\n const hasApluginNotReady = Object.keys(plugins).some(\n (plugin) => plugins[plugin].isReady === false\n );\n\n /**\n *\n * I have spent some time trying to understand what is happening here, and wanted to\n * leave that knowledge for my future me:\n *\n * `initializer` is an undocumented property of the `registerPlugin` API. At the time\n * of writing it seems only to be used by the i18n plugin.\n *\n * How does it work?\n *\n * Every plugin that has an `initializer` component defined, receives the\n * `setPlugin` function as a component prop. In the case of i18n the plugin fetches locales\n * first and calls `setPlugin` with `pluginId` once they are loaded, which then triggers the\n * reducer of the admin app defined above.\n *\n * Once all plugins are set to `isReady: true` the app renders.\n *\n * This API is used to block rendering of the admin app. We should remove that in v5 completely\n * and make sure plugins can inject data into the global store before they are initialized, to avoid\n * having a new prop-callback based communication channel between plugins and the core admin app.\n *\n */\n\n if (hasApluginNotReady) {\n const initializers = Object.keys(plugins).reduce((acc, current) => {\n const InitializerComponent = plugins[current].initializer;\n\n if (InitializerComponent) {\n const key = plugins[current].pluginId;\n\n acc.push(<InitializerComponent key={key} setPlugin={setPlugin.current} />);\n }\n\n return acc;\n }, [] as React.ReactNode[]);\n\n return (\n <>\n {initializers}\n <LoadingIndicatorPage />\n </>\n );\n }\n\n return <Admin />;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Reducer\n * -----------------------------------------------------------------------------------------------*/\n\ninterface State {\n plugins: StrapiAppContextValue['plugins'];\n}\n\nconst initialState: State = {\n plugins: {},\n};\n\ntype SetPluginReadyAction = {\n type: 'SET_PLUGIN_READY';\n pluginId: string;\n};\n\ntype Action = SetPluginReadyAction;\n\nconst reducer: React.Reducer<State, Action> = (state = initialState, action: Action): State =>\n produce(state, (draftState) => {\n switch (action.type) {\n case 'SET_PLUGIN_READY': {\n set(draftState, ['plugins', action.pluginId, 'isReady'], true);\n break;\n }\n default:\n return draftState;\n }\n });\n\n/* -------------------------------------------------------------------------------------------------\n * Init state\n * -----------------------------------------------------------------------------------------------*/\n\nconst init = (plugins: State['plugins']): State => {\n return {\n plugins: Object.keys(plugins).reduce<State['plugins']>((acc, current) => {\n acc[current] = { ...plugins[current] };\n\n return acc;\n }, {}),\n };\n};\n\nexport { PluginsInitializer };\n","import * as React from 'react';\n\nimport {\n AppInfoProvider,\n auth,\n LoadingIndicatorPage,\n useFetchClient,\n useGuidedTour,\n} from '@strapi/helper-plugin';\nimport { useQueries } from 'react-query';\nimport lt from 'semver/functions/lt';\nimport valid from 'semver/functions/valid';\n// TODO: DS add loader\n\nimport packageJSON from '../../../package.json';\nimport { useConfiguration } from '../contexts/configuration';\nimport { getFullName } from '../utils/getFullName';\nimport { hashAdminUserEmail } from '../utils/hashAdminUserEmail';\n\nimport { NpsSurvey } from './NpsSurvey';\nimport { PluginsInitializer } from './PluginsInitializer';\nimport { RBACProvider } from './RBACProvider';\n\nimport type { Information } from '../../../shared/contracts/admin';\nimport type { GetOwnPermissions, GetMe } from '../../../shared/contracts/users';\n\nconst strapiVersion = packageJSON.version;\n\nconst AuthenticatedApp = () => {\n const { setGuidedTourVisibility } = useGuidedTour();\n const userInfo = auth.get('userInfo');\n const [userDisplayName, setUserDisplayName] = React.useState<string>(() =>\n userInfo ? userInfo.username || getFullName(userInfo.firstname ?? '', userInfo.lastname) : ''\n );\n const [userId, setUserId] = React.useState<string>();\n const { showReleaseNotification } = useConfiguration();\n const { get } = useFetchClient();\n const [\n { data: appInfos, status },\n { data: tagName, isLoading },\n { data: permissions, status: fetchPermissionsStatus, refetch, isFetching },\n { data: userRoles },\n ] = useQueries([\n {\n queryKey: 'app-infos',\n async queryFn() {\n const { data } = await get<Information.Response>('/admin/information');\n\n return data.data;\n },\n },\n {\n queryKey: 'strapi-release',\n async queryFn() {\n try {\n const res = await fetch('https://api.github.com/repos/strapi/strapi/releases/latest');\n\n if (!res.ok) {\n throw new Error();\n }\n\n const response = (await res.json()) as { tag_name: string | null | undefined };\n\n if (!response.tag_name) {\n throw new Error();\n }\n\n return response.tag_name;\n } catch (err) {\n // Don't throw an error\n return strapiVersion;\n }\n },\n enabled: showReleaseNotification,\n initialData: strapiVersion,\n },\n {\n queryKey: 'admin-users-permission',\n async queryFn() {\n const { data } = await get<GetOwnPermissions.Response>('/admin/users/me/permissions');\n\n return data.data;\n },\n initialData: [],\n },\n {\n queryKey: 'user-roles',\n async queryFn() {\n const {\n data: {\n data: { roles },\n },\n } = await get<GetMe.Response>('/admin/users/me');\n\n return roles;\n },\n },\n ]);\n\n const shouldUpdateStrapi = checkLatestStrapiVersion(strapiVersion, tagName);\n\n /**\n * TODO: does this actually need to be an effect?\n */\n React.useEffect(() => {\n if (userRoles) {\n const isUserSuperAdmin = userRoles.find(({ code }) => code === 'strapi-super-admin');\n\n if (isUserSuperAdmin && appInfos?.autoReload) {\n setGuidedTourVisibility(true);\n }\n }\n }, [userRoles, appInfos, setGuidedTourVisibility]);\n\n React.useEffect(() => {\n const getUserId = async () => {\n if (userInfo) {\n const userId = await hashAdminUserEmail(userInfo);\n\n if (userId) {\n setUserId(userId);\n }\n }\n };\n\n getUserId();\n }, [userInfo]);\n\n // We don't need to wait for the release query to be fetched before rendering the plugins\n // however, we need the appInfos and the permissions\n const shouldShowNotDependentQueriesLoader =\n isFetching || status === 'loading' || fetchPermissionsStatus === 'loading';\n\n const shouldShowLoader = isLoading || shouldShowNotDependentQueriesLoader;\n\n if (shouldShowLoader) {\n return <LoadingIndicatorPage />;\n }\n\n // TODO: add error state\n if (status === 'error') {\n return <div>error...</div>;\n }\n\n return (\n <AppInfoProvider\n {...appInfos}\n userId={userId}\n latestStrapiReleaseTag={tagName}\n setUserDisplayName={setUserDisplayName}\n shouldUpdateStrapi={shouldUpdateStrapi}\n userDisplayName={userDisplayName}\n >\n <RBACProvider permissions={permissions ?? []} refetchPermissions={refetch}>\n <NpsSurvey />\n <PluginsInitializer />\n </RBACProvider>\n </AppInfoProvider>\n );\n};\n\nconst checkLatestStrapiVersion = (\n currentPackageVersion: string,\n latestPublishedVersion: string = ''\n): boolean => {\n if (!valid(currentPackageVersion) || !valid(latestPublishedVersion)) {\n return false;\n }\n\n return lt(currentPackageVersion, latestPublishedVersion);\n};\n\nexport { AuthenticatedApp };\n"],"names":["jsx","Flex","pxToRem","Check","Typography","Box","useGuidedTour","useIntl","useTracking","get","Portal","FocusTrap","jsxs","IconButton","Cross","Button","styled","Fragment","LinkButton","NavLink","ArrowRight","RouterNavLink","React","useConfiguration","usePersistentState","useAppInfo","useLocation","useHistory","getFetchClient","name","auth","MainNav","NavBrand","Divider","NavSections","Write","NavSection","NavFooter","NavUser","Exit","NavCondense","Message","Icon","Question","PopoverPrimitives","index","Play","VisuallyHidden","Book","PaperPlane","createTypedSelector","useRBACProvider","useStrapiApp","useSelector","Puzzle","ShoppingCart","Cog","hasPermissions","cloneDeep","SkipToContent","NotFoundPage","InternalErrorPage","module","useTypedDispatch","useTypedSelector","ACTION_SET_APP_RUNTIME_STATUS","createRoute","LoadingIndicatorPage","DndProvider","HTML5Backend","Switch","Route","produce","set","useFetchClient","useQueries","userId","AppInfoProvider","RBACProvider","NpsSurvey","valid","lt"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAgB,SAAA,YAAY,WAAmB,WAA0B,IAAI;AACpE,SAAA,CAAC,WAAW,QAAQ,EAAE,OAAO,CAAC,QAAQ,GAAG,EAAE,KAAK,GAAG;AAC5D;ACAO,MAAM,QAAQ;AAAA,EACnB,YAAY,QAAqB;AACxB,WAAA,CAAC,GAAG,IAAI,WAAW,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC,EAAE,KAAK,EAAE;AAAA,EACxF;AAAA,EACA,MAAM,cAAc,SAAiB;AACnC,UAAM,WAAW,IAAI,YAAY,EAAE,OAAO,OAAO;AACjD,UAAM,aAAa,MAAM,OAAO,OAAO,OAAO,WAAW,QAAQ;AAE1D,WAAA,KAAK,YAAY,UAAU;AAAA,EACpC;AACF;AAEA,eAAsB,mBAAmB,SAAoB;AAC3D,MAAI,CAAC,SAAS;AACL,WAAA;AAAA,EACT;AAEI,MAAA;AACF,WAAO,MAAM,MAAM,cAAc,QAAQ,KAAK;AAAA,WACvC,OAAO;AACP,WAAA;AAAA,EACT;AACF;ACxBA,MAAM,cAAc;AAAA,EAClB,oBAAoB;AAAA,IAClB,MAAM;AAAA,MACJ,OAAO;AAAA,QACL,IAAI;AAAA,QACJ,gBAAgB;AAAA,MAClB;AAAA,MACA,KAAK;AAAA,QACH,OAAO;AAAA,UACL,IAAI;AAAA,UACJ,gBAAgB;AAAA,QAClB;AAAA,QACA,MAAM;AAAA,QACN,QAAQ;AAAA,MACV;AAAA,MACA,eAAe;AAAA,IACjB;AAAA,IACA,QAAQ;AAAA,MACN,OAAO;AAAA,QACL,IAAI;AAAA,QACJ,gBAAgB;AAAA,MAClB;AAAA,MACA,SAAS;AAAA,QACP,IAAI;AAAA,QACJ,gBACE;AAAA,MACJ;AAAA,MACA,KAAK;AAAA,QACH,OAAO;AAAA,UACL,IAAI;AAAA,UACJ,gBAAgB;AAAA,QAClB;AAAA,QACA,MAAM;AAAA,MACR;AAAA,MACA,eAAe;AAAA,IACjB;AAAA,IACA,SAAS;AAAA,MACP,OAAO;AAAA,QACL,IAAI;AAAA,QACJ,gBAAgB;AAAA,MAClB;AAAA,MACA,SAAS;AAAA,QACP,IAAI;AAAA,QACJ,gBAAgB;AAAA,MAClB;AAAA,MACA,KAAK;AAAA,QACH,OAAO;AAAA,UACL,IAAI;AAAA,UACJ,gBAAgB;AAAA,QAClB;AAAA,QACA,MAAM;AAAA,QACN,QAAQ;AAAA,MACV;AAAA,MACA,eAAe;AAAA,IACjB;AAAA,EACF;AAAA,EACA,gBAAgB;AAAA,IACd,MAAM;AAAA,MACJ,OAAO;AAAA,QACL,IAAI;AAAA,QACJ,gBAAgB;AAAA,MAClB;AAAA,MACA,KAAK;AAAA,QACH,OAAO;AAAA,UACL,IAAI;AAAA,UACJ,gBAAgB;AAAA,QAClB;AAAA,QACA,MAAM;AAAA,QACN,QAAQ;AAAA,MACV;AAAA,MACA,eAAe;AAAA,IACjB;AAAA,IACA,QAAQ;AAAA,MACN,OAAO;AAAA,QACL,IAAI;AAAA,QACJ,gBAAgB;AAAA,MAClB;AAAA,MACA,SAAS;AAAA,QACP,IAAI;AAAA,QACJ,gBACE;AAAA,MACJ;AAAA,MACA,KAAK;AAAA,QACH,OAAO;AAAA,UACL,IAAI;AAAA,UACJ,gBAAgB;AAAA,QAClB;AAAA,QACA,MAAM;AAAA,MACR;AAAA,MACA,eAAe;AAAA,IACjB;AAAA,IACA,SAAS;AAAA,MACP,OAAO;AAAA,QACL,IAAI;AAAA,QACJ,gBAAgB;AAAA,MAClB;AAAA,MACA,SAAS;AAAA,QACP,IAAI;AAAA,QACJ,gBAAgB;AAAA,MAClB;AAAA,MACA,KAAK;AAAA,QACH,OAAO;AAAA,UACL,IAAI;AAAA,UACJ,gBAAgB;AAAA,QAClB;AAAA,QACA,MAAM;AAAA,QACN,QAAQ;AAAA,MACV;AAAA,MACA,eAAe;AAAA,IACjB;AAAA,EACF;AAAA,EACA,WAAW;AAAA,IACT,MAAM;AAAA,MACJ,OAAO;AAAA,QACL,IAAI;AAAA,QACJ,gBAAgB;AAAA,MAClB;AAAA,MACA,KAAK;AAAA,QACH,OAAO;AAAA,UACL,IAAI;AAAA,UACJ,gBAAgB;AAAA,QAClB;AAAA,QACA,MAAM;AAAA,QACN,QAAQ;AAAA,MACV;AAAA,MACA,eAAe;AAAA,IACjB;AAAA,IACA,QAAQ;AAAA,MACN,OAAO;AAAA,QACL,IAAI;AAAA,QACJ,gBAAgB;AAAA,MAClB;AAAA,MACA,SAAS;AAAA,QACP,IAAI;AAAA,QACJ,gBACE;AAAA,MACJ;AAAA,MACA,KAAK;AAAA,QACH,OAAO;AAAA,UACL,IAAI;AAAA,UACJ,gBAAgB;AAAA,QAClB;AAAA,QACA,MAAM;AAAA,MACR;AAAA,MACA,eAAe;AAAA,IACjB;AAAA,IACA,SAAS;AAAA,MACP,OAAO;AAAA,QACL,IAAI;AAAA,QACJ,gBAAgB;AAAA,MAClB;AAAA,MACA,SAAS;AAAA,QACP,IAAI;AAAA,QACJ,gBACE;AAAA,MACJ;AAAA,MACA,eAAe;AAAA,IACjB;AAAA,EACF;AACF;AAEA,MAAM,SAAS;AAAA,EACb,SAAS;AAAA,EACT,WAAW;AAAA,EACX,aAAa;AACf;ACtJA,MAAM,SAAS,CAAC,EAAE,UAAU,OAAO,GAAG,YAAyB;AAC7D,SAAO,UAAU,OAAO,WAAW,UAAU,OAAO,YAClDA,2BAAA;AAAA,IAACC,aAAA;AAAA,IAAA;AAAA,MACC,YAAW;AAAA,MACX,SAAS;AAAA,MACT,cAAa;AAAA,MACb,OAAOC,qBAAQ,EAAE;AAAA,MACjB,QAAQA,qBAAQ,EAAE;AAAA,MAClB,gBAAe;AAAA,MACd,GAAG;AAAA,MAEH,UAAA,UAAU,OAAO,UAChBF,2BAAA,IAACG,eAAM,eAAW,MAAC,OAAOD,qBAAQ,EAAE,GAAG,OAAM,WAAA,CAAW,IAEvDF,2BAAAA,IAAAI,aAAA,YAAA,EAAW,YAAW,YAAW,WAAU,YACzC,SACH,CAAA;AAAA,IAAA;AAAA,EAAA,IAIJJ,2BAAA;AAAA,IAACC,aAAA;AAAA,IAAA;AAAA,MACC,aAAY;AAAA,MACZ,aAAY;AAAA,MACZ,aAAY;AAAA,MACZ,SAAS;AAAA,MACT,cAAa;AAAA,MACb,OAAOC,qBAAQ,EAAE;AAAA,MACjB,QAAQA,qBAAQ,EAAE;AAAA,MAClB,gBAAe;AAAA,MACd,GAAG;AAAA,MAEJ,yCAACE,aAAAA,YAAW,EAAA,YAAW,YAAW,WAAU,cACzC,UACH;AAAA,IAAA;AAAA,EAAA;AAGN;AAUA,MAAM,kBAAkB,CAAC,EAAE,OAAO,GAAG,MACnC,MAAAJ,2BAAA;AAAA,EAACK,aAAA;AAAA,EAAA;AAAA,IACC,OAAOH,qBAAQ,CAAC;AAAA,IAChB,QAAO;AAAA,IACP,YAAY,UAAU,OAAO,cAAc,eAAe;AAAA,IAC1D,WAAS;AAAA,IACT,WAAW,UAAU,OAAO,YAAYA,qBAAQ,EAAE,IAAIA,qBAAQ,EAAE;AAAA,IAC/D,GAAG;AAAA,EAAA;AACN;AC3CF,MAAM,kBAAkB,MAAM;AACtB,QAAA;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,MACEI,aAAc,cAAA;AACZ,QAAA,EAAE,kBAAkBC,UAAAA;AACpB,QAAA,EAAE,eAAeC,aAAAA;AAEnB,MAAA,CAAC,eAAe,CAAC,qBAAqB;AACjC,WAAA;AAAA,EACT;AAEM,QAAA,WAAWC,aAAAA,QAAI,aAAa,WAAW;AACvC,QAAA,cAAc,OAAO,KAAK,eAAe;AAC/C,QAAM,CAAC,aAAa,QAAQ,IAAI,YAAY,MAAM,GAAG;AAI/C,QAAA,eAAe,YAAY,QAAQ,WAAW;AAC9C,QAAA,YAAY,OAAO,KAAK,gBAAgB,WAAW,CAAC,EAAE,QAAQ,QAAQ;AACtE,QAAA,kBAAkB,eAAe,YAAY,SAAS;AACtD,QAAA,eAAe,YAAY,OAAO,KAAK,gBAAgB,WAAW,CAAC,EAAE,SAAS;AAEpF,QAAM,iBAAiB,MAAM;AAC3B,iBAAa,aAAa,IAAI;AAC9B,eAAW,SAAS,aAAa;AAEjC,mBAAe,IAAI;AAAA,EAAA;AAGrB,QAAM,aAAa,MAAM;AACvB,eAAW,IAAI;AACf,mBAAe,IAAI;AACnB,eAAW,mBAAmB;AAAA,EAAA;AAGhC,SACGT,2BAAA,IAAAU,aAAA,QAAA,EACC,UAACV,2BAAA,IAAA,cAAA,EAAa,SAAS,gBAAgB,SAAS,GAAG,gBAAe,UAChE,UAACA,2BAAA,IAAAW,aAAA,WAAA,EAAU,UAAU,gBACnB,UAAAC,2BAAA;AAAA,IAACX,aAAA;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,YAAW;AAAA,MACX,YAAW;AAAA,MACX,OAAOC,qBAAQ,GAAG;AAAA,MAClB,QAAO;AAAA,MACP,WAAS;AAAA,MACT,SAAS;AAAA,MACT,KAAK;AAAA,MACL,MAAK;AAAA,MACL,cAAU;AAAA,MACV,SAAS,CAAC,MAAM,EAAE,gBAAgB;AAAA,MAElC,UAAA;AAAA,QAACF,2BAAAA,IAAAC,aAAAA,MAAA,EAAK,gBAAe,YACnB,UAAAD,2BAAA;AAAA,UAACa,aAAA;AAAA,UAAA;AAAA,YACC,SAAS;AAAA,YACT,cAAY,cAAc;AAAA,cACxB,IAAI;AAAA,cACJ,gBAAgB;AAAA,YAAA,CACjB;AAAA,YAED,yCAACC,MAAM,OAAA,EAAA;AAAA,UAAA;AAAA,QAAA,GAEX;AAAA,QACAd,2BAAA;AAAA,UAACK,aAAA;AAAA,UAAA;AAAA,YACC,aAAa;AAAA,YACb,cAAc;AAAA,YACd,eAAe,CAAC,gBAAgB,CAAC,kBAAkB,IAAI;AAAA,YAEvD,UAAAL,2BAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,OAAO,SAAS;AAAA,gBAChB,KAAK,SAAS,WAAW,SAAS,MAAM;AAAA,gBACxC,YAAY;AAAA,gBACZ;AAAA,gBACA;AAAA,gBACA;AAAA,gBAEA,UAACA,2BAAA,IAAA,mBAAA,EAAmB,GAAG,SAAS,QAAS,CAAA;AAAA,cAAA;AAAA,YAC3C;AAAA,UAAA;AAAA,QACF;AAAA,QACC,EAAE,CAAC,gBAAgB,CAAC,oBAClBA,2BAAAA,IAAAC,aAAA,MAAA,EAAK,gBAAe,YACnB,yCAACc,aAAAA,QAAO,EAAA,SAAQ,YAAW,SAAS,YACjC,UAAc,cAAA;AAAA,UACb,IAAI;AAAA,UACJ,gBAAgB;AAAA,QAAA,CACjB,GACH,EACF,CAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA,GAGN,GACF,EACF,CAAA;AAEJ;AAEA,MAAM,eAAeC,gBAAAA,QAAOf,aAAAA,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA,gBAKhB,CAAC,EAAE,MAAM,MAAM,GAAG,MAAM,OAAO,UAAU,IAAI;AAAA;AAoB7D,MAAM,oBAAoB,CAAC;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAA8B;AACtB,QAAA,EAAE,kBAAkBM,UAAAA;AAE1B,QAAM,mBAAmB,eAAe;AACxC,QAAM,iBAAiB,YAAY;AACnC,QAAM,mBAAmB,eAAe;AAExC,SAEIK,2BAAA,KAAAK,qBAAA,EAAA,UAAA;AAAA,IAACL,2BAAAA,KAAAX,aAAAA,MAAA,EAAK,YAAW,WACf,UAAA;AAAA,MAAAD,2BAAAA,IAACC,qBAAK,aAAa,GAAG,gBAAe,UAAS,UAAUC,aAAAA,QAAQ,EAAE,GAC/D,8BAAqBF,2BAAAA,IAAA,iBAAA,EAAgB,OAAO,OAAO,SAAS,WAAWE,qBAAQ,EAAE,EAAG,CAAA,GACvF;AAAA,qCACCE,aAAAA,YAAW,EAAA,SAAQ,SAAQ,WAAU,cACnC,UAAc,cAAA;AAAA,QACb,IAAI;AAAA,QACJ,gBAAgB;AAAA,MACjB,CAAA,GACH;AAAA,IAAA,GACF;AAAA,oCACCH,aAAAA,MACC,EAAA,UAAA;AAAA,MAAAD,+BAACC,aAAAA,QAAK,aAAa,GAAG,UAAUC,qBAAQ,EAAE,GACxC,UAAAF,2BAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,OAAO,iBAAiB,OAAO,UAAU,OAAO;AAAA,UAChD,YAAY;AAAA,UACZ,eAAe;AAAA,UAEd,UAAe,eAAA;AAAA,QAAA;AAAA,MAAA,GAEpB;AAAA,MACCA,2BAAA,IAAAI,aAAA,YAAA,EAAW,SAAQ,SAAQ,YAAW,QAAO,WAAU,cAAa,IAAG,MAAK,IAAG,SAC7E,UAAA,cAAc,KAAK,GACtB;AAAA,IAAA,GACF;AAAA,IACAQ,2BAAAA,KAACX,aAAAA,MAAK,EAAA,YAAW,WACf,UAAA;AAAA,MAAAD,2BAAA,IAACC,aAAK,MAAA,EAAA,aAAa,GAAG,WAAU,UAAS,gBAAe,UAAS,UAAUC,aAAQ,QAAA,EAAE,GAClF,UAAA,mBAEGU,gCAAAK,WAAAA,UAAA,EAAA,UAAA;AAAA,QAACjB,2BAAAA,IAAA,iBAAA,EAAgB,OAAO,OAAO,QAAS,CAAA;AAAA,QACvC,iDACE,QAAO,EAAA,OAAO,OAAO,WAAW,YAAY,GAC1C,UAAA,mBAAmB,EACtB,CAAA;AAAA,MAAA,EAAA,CAEJ,EAEJ,CAAA;AAAA,sCACCK,aAAAA,KACE,EAAA,UAAA;AAAA,QAAA;AAAA,QACA,QACE,IAAI,SACHL,2BAAA;AAAA,UAACkB,GAAA;AAAA,UAAA;AAAA,YACC,IAAIC,eAAA;AAAA,YACJ,wCAAUC,MAAW,YAAA,EAAA;AAAA,YACrB,SAAS;AAAA,YAET,IAAI,IAAI;AAAA,YAEP,UAAA,cAAc,IAAI,KAAK;AAAA,UAAA;AAAA,QAAA,IAG1BpB,2BAAAA,IAACe,aAAAA,QAAO,EAAA,SAAUf,2BAAA,IAAAoB,MAAA,YAAA,CAAW,CAAA,GAAI,SAAS,YACvC,UAAA,cAAc,IAAI,KAAK,EAC1B,CAAA;AAAA,MAAA,GAEN;AAAA,IAAA,GACF;AAAA,IACC,kBAAkB,mBACjBpB,2BAAAA,IAACK,aAAAA,KAAI,EAAA,YAAY,GACf,UAAAL,2BAAA,IAACC,aAAK,MAAA,EAAA,aAAa,GAAG,gBAAe,UAAS,OAAOC,aAAAA,QAAQ,EAAE,GAC7D,UAACF,2BAAA,IAAA,iBAAA,EAAgB,OAAO,OAAO,SAAS,WAAWE,aAAAA,QAAQ,EAAE,EAAG,CAAA,EAAA,CAClE,EACF,CAAA;AAAA,EAEJ,EAAA,CAAA;AAEJ;AASA,MAAM,oBAAoB,CAAC,EAAE,IAAI,qBAA6C;AACtE,QAAA,EAAE,kBAAkBK,UAAAA;AAGxB,SAAAP,2BAAA,IAACC,qBAAK,WAAU,UAAS,YAAW,WAAU,KAAK,GAAG,eAAe,GAClE,UAAA;AAAA,IACC,EAAE,IAAI,eAAe;AAAA,IACrB;AAAA,MACE,mBAAmB;AAAA,MACnB,GAAG;AAAA,MACH,GAAG;AAAA,MACH,OAAO;AAAA,MACP,IAAI;AAAA,MACJ,IAAI;AAAA,IACN;AAAA,EAEJ,EAAA,CAAA;AAEJ;AAEA,MAAM,oBAAoB,CAAC,aACzBD,2BAAA;AAAA,EAACI,aAAA;AAAA,EAAA;AAAA,IACC,IAAG;AAAA,IACH,WAAU;AAAA,IACV,QAAO;AAAA,IACP,KAAI;AAAA,IACJ,MAAK;AAAA,IAEJ;AAAA,EAAA;AACH;AAGF,MAAM,OAAO,CAAC,4CACXA,aAAAA,YAAW,EAAA,YAAW,YAAY,SAAS,CAAA;AAG9C,MAAM,YAAY,CAAC,aAA8BJ,2BAAAA,IAACI,aAAAA,cAAY,SAAS,CAAA;AAEvE,MAAM,QAAQ,CAAC,4CACZA,aAAAA,YAAW,EAAA,WAAU,cAAc,SAAS,CAAA;AAG/C,MAAM,OAAO,CAAC,aACXJ,2BAAA,IAAAK,aAAA,KAAA,EAAI,aAAa,GAChB,UAAAL,2BAAA,IAAC,MAAI,EAAA,SAAS,CAAA,EAChB,CAAA;AAGF,MAAM,WAAWgB,gBAAO,QAAA;AAAA;AAAA;AAAA,aAGX,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,UAAU;AAAA;AAAA;AAInD,MAAM,WAAW,CAAC,aAA8BhB,2BAAAA,IAAC,YAAU,SAAS,CAAA;AChRpE,MAAM,kBAAkBgB,gBAAAA,QAAOX,aAAAA,GAAG;AAAA,WACvB,MAAM,EAAE;AAAA;AAAA,YAEP,CAAC,EAAE,YAAY,MAAM,OAAO,CAAC,CAAC;AAAA,UAChC,CAAC,EAAE,YAAY,MAAM,OAAO,CAAC,CAAC;AAAA;AAGxC,MAAM,WAAWW,gBAAAA,QAAOK,eAAAA,OAAa;AAAA;AAAA;AAAA;AAAA;AAAA,aAKxB,CAAC,EAAE,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,CAAC,IAAI,MAAM,OAAO,CAAC,CAAC,EAAE;AAAA,mBAChD,CAAC,EAAE,YAAY,MAAM,OAAO,CAAC,CAAC;AAAA;AAAA;AAAA,kBAG/B,CAAC,EAAE,OAAO,OAAO,MAC7B,SAAS,MAAM,OAAO,YAAY,MAAM,OAAO,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAMjD,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,SAAS;AAAA;AAAA;AAAA;AAOnD,MAAM,WAAW,CAAC,EAAE,qBAAqB,0BAAyC;AAC1E,QAAA,aAAaC,iBAAM,OAAuB,IAAK;AACrD,QAAM,CAAC,kBAAkB,mBAAmB,IAAIA,iBAAM,SAAS,KAAK;AAC9D,QAAA;AAAA,IACJ,OAAO,EAAE,KAAK;AAAA,MACZC,MAAiB,iBAAA;AACrB,QAAM,CAAC,WAAW,YAAY,IAAIC,aAAAA,mBAAmB,oBAAoB,KAAK;AACxE,QAAA,EAAE,oBAAoBC,aAAAA;AACtB,QAAA,EAAE,kBAAkBlB,UAAAA;AACpB,QAAA,EAAE,eAAeC,aAAAA;AACjB,QAAA,EAAE,aAAakB,eAAAA;AACrB,QAAM,UAAUC,eAAAA;AACV,QAAA,EAAE,SAASC,aAAAA;AAEjB,QAAM,WAAW,gBACd,MAAM,GAAG,EACT,IAAI,CAACC,UAASA,MAAK,UAAU,GAAG,CAAC,CAAC,EAClC,KAAK,EAAE,EACP,UAAU,GAAG,CAAC;AAEjB,QAAM,wBAAwB,MAAM,oBAAoB,CAAC,SAAS,CAAC,IAAI;AAEvE,QAAM,eAAe,YAAY;AAC/B,UAAM,KAAK,eAAe;AAC1BC,iBAAA,KAAK,gBAAgB;AACC;AACtB,YAAQ,KAAK,aAAa;AAAA,EAAA;AAGtB,QAAA,aAAsC,CAAC,MAAM;AACjD,QACE,CAAC,EAAE,cAAc,SAAS,EAAE,aAAa;AAAA;AAAA;AAAA,IAIzC,EAAE,eAAe,eAAe,OAAO,wBACvC;AACA,0BAAoB,KAAK;AAAA,IAC3B;AAAA,EAAA;AAGI,QAAA,oBAAoB,CAAC,gBAAwB;AACjD,eAAW,gBAAgB,EAAE,MAAM,UAAU,IAAI,aAAa;AAAA,EAAA;AAGhE,QAAM,YAAY,cAAc;AAAA,IAC9B,IAAI;AAAA,IACJ,gBAAgB;AAAA,EAAA,CACjB;AAGC,SAAAlB,gCAACmB,GAAAA,WAAQ,WACP,UAAA;AAAA,IAAA/B,2BAAA;AAAA,MAACgC,GAAA;AAAA,MAAA;AAAA,QACC,IAAIX,eAAA;AAAA,QACJ,WAAW,cAAc;AAAA,UACvB,IAAI;AAAA,UACJ,gBAAgB;AAAA,QAAA,CACjB;AAAA,QACD,OAAO;AAAA,QACP,MACErB,2BAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,KAAK,KAAK,UAAU,KAAK;AAAA,YACzB,KAAK,cAAc;AAAA,cACjB,IAAI;AAAA,cACJ,gBAAgB;AAAA,YAAA,CACjB;AAAA,UAAA;AAAA,QACH;AAAA,MAAA;AAAA,IAEJ;AAAA,mCAECiC,aAAQ,SAAA,EAAA;AAAA,oCAERC,GAAAA,aACC,EAAA,UAAA;AAAA,MAAAlC,2BAAA;AAAA,QAACmB,GAAA;AAAA,QAAA;AAAA,UACC,IAAIE,eAAA;AAAA,UAEJ,IAAG;AAAA,UACH,qCAAOc,MAAM,OAAA,EAAA;AAAA,UACb,SAAS,MAAM,kBAAkB,kBAAkB;AAAA,UAElD,wBAAc,EAAE,IAAI,0BAA0B,gBAAgB,mBAAmB;AAAA,QAAA;AAAA,MACpF;AAAA,MAEC,oBAAoB,SAAS,IAC5BnC,2BAAA;AAAA,QAACoC,GAAA;AAAA,QAAA;AAAA,UACC,OAAO,cAAc;AAAA,YACnB,IAAI;AAAA,YACJ,gBAAgB;AAAA,UAAA,CACjB;AAAA,UAEA,UAAA,oBAAoB,IAAI,CAAC,SAAS;AACjC,kBAAM,OAAO,KAAK;AAGhB,mBAAApC,2BAAA;AAAA,cAACmB,GAAA;AAAA,cAAA;AAAA,gBACC,IAAIE,eAAA;AAAA,gBAEJ,IAAI,KAAK;AAAA,gBAET,qCAAO,MAAK,EAAA;AAAA,gBACZ,SAAS,MAAM,kBAAkB,KAAK,EAAE;AAAA,gBAEvC,UAAA,cAAc,KAAK,SAAS;AAAA,cAAA;AAAA,cAJxB,KAAK;AAAA,YAAA;AAAA,UAKZ,CAEH;AAAA,QAAA;AAAA,MAAA,IAED;AAAA,MAEH,oBAAoB,SAAS,IAC5BrB,2BAAA;AAAA,QAACoC,GAAA;AAAA,QAAA;AAAA,UACC,OAAO,cAAc;AAAA,YACnB,IAAI;AAAA,YACJ,gBAAgB;AAAA,UAAA,CACjB;AAAA,UAEA,UAAA,oBAAoB,IAAI,CAAC,SAAS;AACjC,kBAAM,WAAW,KAAK;AAGpB,mBAAApC,2BAAA;AAAA,cAACmB,GAAA;AAAA,cAAA;AAAA,gBACC,IAAIE,eAAA;AAAA,gBACJ,cACE,KAAK,sBAAsB,KAAK,qBAAqB,IACjD,KAAK,mBAAmB,SACxB,IAAA;AAAA,gBAGN,IAAI,KAAK;AAAA,gBAET,qCAAO,UAAS,EAAA;AAAA,gBAChB,SAAS,MAAM,kBAAkB,KAAK,EAAE;AAAA,gBAEvC,UAAA,cAAc,KAAK,SAAS;AAAA,cAAA;AAAA,cAJxB,KAAK;AAAA,YAAA;AAAA,UAKZ,CAEH;AAAA,QAAA;AAAA,MAAA,IAED;AAAA,IAAA,GACN;AAAA,oCAECgB,GAAAA,WACC,EAAA,UAAA;AAAA,MAAArC,2BAAA;AAAA,QAACsC,GAAA;AAAA,QAAA;AAAA,UACC,IAAG;AAAA,UACH,KAAK;AAAA,UACL,SAAS;AAAA,UACT;AAAA,UAEC,UAAA;AAAA,QAAA;AAAA,MACH;AAAA,MACC,oBACCtC,2BAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,QAAQ;AAAA,UACR,SAAS;AAAA,UACT,QAAO;AAAA,UACP,YAAW;AAAA,UACX,WAAS;AAAA,UAET,UAAAA,2BAAA,IAACW,aAAU,WAAA,EAAA,UAAU,uBACnB,UAAAC,2BAAA,KAACX,aAAK,MAAA,EAAA,WAAU,UAAS,YAAW,WAAU,KAAK,GACjD,UAAA;AAAA,YAACD,2BAAAA,IAAA,UAAA,EAAS,UAAU,GAAG,SAAS,uBAAuB,IAAG,OACxD,UAACA,2BAAA,IAAAI,aAAA,YAAA,EACE,UAAc,cAAA;AAAA,cACb,IAAI;AAAA,cACJ,gBAAgB;AAAA,YAAA,CACjB,GACH,EACF,CAAA;AAAA,4CACC,UAAS,EAAA,UAAU,GAAG,SAAS,cAAc,IAAG,eAC/C,UAAA;AAAA,cAACJ,2BAAA,IAAAI,aAAA,YAAA,EAAW,WAAU,aACnB,UAAc,cAAA;AAAA,gBACb,IAAI;AAAA,gBACJ,gBAAgB;AAAA,cACjB,CAAA,GACH;AAAA,6CACCmC,MAAK,MAAA,EAAA;AAAA,YAAA,GACR;AAAA,UAAA,EAAA,CACF,EACF,CAAA;AAAA,QAAA;AAAA,MACF;AAAA,MAGFvC,2BAAAA,IAACwC,GAAY,aAAA,EAAA,SAAS,MAAM,aAAa,CAAC,MAAM,CAAC,CAAC,GAC/C,UAAA,YACG,cAAc;AAAA,QACZ,IAAI;AAAA,QACJ,gBAAgB;AAAA,MACjB,CAAA,IACD,cAAc;AAAA,QACZ,IAAI;AAAA,QACJ,gBAAgB;AAAA,MACjB,CAAA,GACP;AAAA,IAAA,GACF;AAAA,EACF,EAAA,CAAA;AAEJ;AC9PA,MAAe,oBAAA;ACoBf,MAAM,aAAa,MAAM;AACjB,QAAA,aAAalB,iBAAM,OAA0B,IAAK;AACxD,QAAM,CAAC,QAAQ,SAAS,IAAIA,iBAAM,SAAS,KAAK;AAC1C,QAAA,EAAE,kBAAkBf,UAAAA;AACpB,QAAA,EAAE,qBAAqBkB,aAAAA;AAE7B,QAAM,0BAA0B,MAAM;AAC1B,cAAA,CAAC,SAAS,CAAC,IAAI;AAAA,EAAA;AAG3B,QAAM,WAAW;AAAA,IACf,GAAG;AAAA,IACH;AAAA,MACE,OAAO,EAAE,IAAI,iCAAiC,gBAAgB,WAAW;AAAA,MACzE,MAAMgB,MAAA;AAAA,MACN,MAAM,mBACF,8BACA;AAAA,IACN;AAAA,EAAA;AAIA,SAAA7B,gCAACP,aAAAA,OAAI,IAAG,SAAQ,UAAS,SAAQ,QAAQ,GAAG,OAAO,GACjD,UAAA;AAAA,IAAAL,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,cAAY;AAAA,UACV,SACI;AAAA,YACE,IAAI;AAAA,YACJ,gBAAgB;AAAA,UAAA,IAElB;AAAA,YACE,IAAI;AAAA,YACJ,gBAAgB;AAAA,UAClB;AAAA,QACN;AAAA,QACA,SAAS;AAAA,QACT,KAAK;AAAA,QAEL,yCAAC0C,aAAK,MAAA,EAAA,IAAI,SAAS5B,MAAAA,QAAQ6B,MAAA,UAAU,OAAM,kBAAiB;AAAA,MAAA;AAAA,IAC9D;AAAA,IAEC,yCACEjC,qBACC,EAAA,UAAAE,2BAAA;AAAA,MAACgC,aAAAA,kBAAkB;AAAA,MAAlB;AAAA,QACC,SAAS;AAAA,QACT,WAAW;AAAA,QACX,QAAQ;AAAA,QACR,WAAU;AAAA,QACV,SAAS;AAAA,QAET,UAAA;AAAA,UAAAhC,2BAAA;AAAA,YAACX,aAAA;AAAA,YAAA;AAAA,cACC,gBAAe;AAAA,cACf,eAAe;AAAA,cACf,cAAc;AAAA,cACd,aAAa;AAAA,cACb,YAAY;AAAA,cAEZ,UAAA;AAAA,gBAACD,2BAAA,IAAA,sBAAA,EAAqB,YAAW,QAC9B,UAAc,cAAA;AAAA,kBACb,IAAI;AAAA,kBACJ,gBAAgB;AAAA,gBACjB,CAAA,GACH;AAAA,gBACAA,2BAAA;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,IAAG;AAAA,oBACH,MAAM,WAAW;AAAA,oBACjB,QAAO;AAAA,oBACP,KAAI;AAAA,oBACJ,SAAQ;AAAA,oBACR,WAAU;AAAA,oBAET,UAAA,cAAc,WAAW,KAAK;AAAA,kBAAA;AAAA,gBACjC;AAAA,cAAA;AAAA,YAAA;AAAA,UACF;AAAA,yCACCiC,aAAQ,SAAA,EAAA;AAAA,UACR,YAAY,IAAI,CAAC,EAAE,MAAM,UAAU,MAAA,GAASY,WAC3CjC,2BAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,IAAG;AAAA,cACH;AAAA,cACA,QAAO;AAAA,cACP,KAAI;AAAA,cAEJ,WAAS;AAAA,cACT,YAAY;AAAA,cACZ,eAAe;AAAA,cACf,aAAa;AAAA,cACb,cAAc;AAAA,cAEd,UAAA;AAAA,gBAACZ,2BAAA,IAAAK,aAAA,KAAA,EAAI,cAAc,GACjB,UAACL,2BAAA,IAAAI,yBAAA,EAAW,WAAU,cAAa,SAAQ,SACxC,UAAQyC,SAAA,EACX,CAAA,GACF;AAAA,gBACAjC,2BAAAA,KAACP,aAAAA,KAAI,EAAA,UAAS,YACZ,UAAA;AAAA,kBAAAL,2BAAA,IAAC,SAAQ,EAAA,KAAK,mBAAmB,KAAI,IAAG;AAAA,kBACxCA,2BAAA;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACC,UAAS;AAAA,sBACT,KAAI;AAAA,sBACJ,MAAK;AAAA,sBACL,YAAW;AAAA,sBACX,cAAa;AAAA,sBACb,gBAAe;AAAA,sBACf,OAAO;AAAA,sBACP,QAAQ;AAAA,sBAER,UAAAA,2BAAA,IAAC0C,qBAAK,IAAII,MAAA,MAAM,OAAM,kBAAiB,OAAO,GAAG,QAAQ,EAAG,CAAA;AAAA,oBAAA;AAAA,kBAC9D;AAAA,gBAAA,GACF;AAAA,gDACC7C,aAAAA,MAAK,EAAA,WAAU,UAAS,YAAW,SAAQ,aAAa,GACvD,UAAA;AAAA,kBAAAD,+BAACI,aAAAA,YAAW,EAAA,YAAW,QAAQ,UAAA,cAAc,KAAK,GAAE;AAAA,kBACpDJ,2BAAAA,IAAC+C,+BAAe,UAAC,IAAA,CAAA;AAAA,iDAChB3C,aAAAA,YAAW,EAAA,WAAU,cAAa,SAAQ,MACxC,UACH,UAAA;AAAA,gBAAA,GACF;AAAA,cAAA;AAAA,YAAA;AAAA,YAjCK;AAAA,UAAA,CAmCR;AAAA,UACDJ,2BAAA;AAAA,YAACC,aAAA;AAAA,YAAA;AAAA,cACC,WAAU;AAAA,cACV,YAAW;AAAA,cACX,KAAK;AAAA,cACL,aAAa;AAAA,cACb,YAAY;AAAA,cACZ,eAAe;AAAA,cAEd,UAAA,SAAS,IAAI,CAAC,EAAE,OAAO,MAAM,KAC5B,MAAAW,2BAAA,KAACX,aAAK,MAAA,EAAA,KAAK,GACT,UAAA;AAAA,gBAAAD,2BAAA,IAAC0C,aAAK,MAAA,EAAA,IAAI,MAAM,OAAM,cAAa;AAAA,gBACnC1C,2BAAA;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,IAAG;AAAA,oBACH;AAAA,oBACA,QAAO;AAAA,oBACP,KAAI;AAAA,oBACJ,SAAQ;AAAA,oBACR,WAAU;AAAA,oBAET,wBAAc,KAAK;AAAA,kBAAA;AAAA,gBACtB;AAAA,cAAA,EAAA,GAXiB,IAYnB,CACD;AAAA,YAAA;AAAA,UACH;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA,GAEJ;AAAA,EAEJ,EAAA,CAAA;AAEJ;AAGA,MAAM,eAAegB,gBAAAA,QAAOD,aAAAA,MAAM;AAAA;AAAA,aAErB,CAAC,EAAE,YAAY,MAAM,OAAO,CAAC,CAAC;AAAA;AAAA;AAAA;AAK3C,MAAM,cAAcC,gBAAAA,QAAOf,aAAAA,IAAI;AAAA;AAAA;AAI/B,MAAM,mBAAmBe,gBAAAA,QAAOf,aAAAA,IAAI;AAAA;AAAA;AAAA;AAAA,sBAId,CAAC,EAAE,MAAM,MAAM,IAAI,MAAM,OAAO,CAAC,CAAC,EAAE;AAAA;AAAA;AAAA;AAAA,kBAIxC,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,UAAU;AAAA;AAAA;AAAA,MAGlDG,uBAAU;AAAA,eACD,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,UAAU;AAAA;AAAA;AAAA;AAAA,MAI/CA,uBAAU;AAAA,eACD,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,UAAU;AAAA;AAAA;AAAA;AAKrD,MAAM,UAAUY,gBAAO,QAAA;AAAA,WACZ,CAAC,EAAE,YAAY,MAAM,OAAO,EAAE,CAAC;AAAA,YAC9B,CAAC,EAAE,YAAY,MAAM,OAAO,CAAC,CAAC;AAAA;AAAA,gBAE1B,CAAC,EAAE,MAAM,MAAM,GAAG,MAAM,OAAO,UAAU,IAAI;AAAA,mBAC1C,CAAC,EAAE,YAAY,MAAM,YAAY;AAAA;AAGpD,MAAM,uBAAuBA,gBAAAA,QAAOZ,aAAAA,UAAU;AAAA;AAAA;AAAA;AAK9C,MAAM,WAAWY,gBAAAA,QAAO,oBAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQ5C,MAAM,cAAc;AAAA,EAClB;AAAA,IACE,OAAO;AAAA,MACL,IAAI;AAAA,MACJ,gBAAgB;AAAA,IAClB;AAAA,IACA,MAAM;AAAA,IACN,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,OAAO;AAAA,MACL,IAAI;AAAA,MACJ,gBAAgB;AAAA,IAClB;AAAA,IACA,MAAM;AAAA,IACN,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,OAAO,EAAE,IAAI,+CAA+C,gBAAgB,eAAe;AAAA,IAC3F,MAAM;AAAA,IACN,UAAU;AAAA,EACZ;AACF;AAEA,MAAM,aAAa;AAAA,EACjB,MAAM;AAAA,EACN,OAAO;AAAA,IACL,IAAI;AAAA,IACJ,gBAAgB;AAAA,EAClB;AACF;AAEA,MAAM,sBAAsB;AAAA,EAC1B;AAAA,IACE,OAAO,EAAE,IAAI,wBAAwB,gBAAgB,gBAAgB;AAAA,IACrE,MAAM;AAAA,IACN,MAAMgC,MAAA;AAAA,EACR;AAAA,EACA;AAAA,IACE,OAAO,EAAE,IAAI,+BAA+B,gBAAgB,aAAa;AAAA,IACzE,MAAM;AAAA,IACN,MAAMC,MAAA;AAAA,EACR;AACF;ACxQO,MAAM,yBAAyBC,MAAAA,oBAAoB,CAAC,UAAU,MAAM,UAAU,WAAW;AC0BhG,MAAM,UAAU,MAAM;AACpB,QAAM,EAAE,gBAAgB,gBAAgB,IAAIC,aAAgB,gBAAA;AACtD,QAAA,EAAE,uBAAuB1B,aAAAA;AACzB,QAAA,EAAE,SAAS2B,aAAAA;AACX,QAAA,cAAcC,uBAAY,sBAAsB;AACtD,QAAM,CAAC,yBAAyB,0BAA0B,IAAI/B,iBAAM,SAAe;AAAA,IACjF,qBAAqB;AAAA,MACnB;AAAA,QACE,MAAMgC,MAAA;AAAA,QACN,WAAW;AAAA,UACT,IAAI;AAAA,UACJ,gBAAgB;AAAA,QAClB;AAAA,QACA,IAAI;AAAA;AAAA,QAEJ,aAAa,YAAY,YAAY;AAAA,MACvC;AAAA,MACA;AAAA,QACE,MAAMC,MAAA;AAAA,QACN,WAAW;AAAA,UACT,IAAI;AAAA,UACJ,gBAAgB;AAAA,QAClB;AAAA,QACA,IAAI;AAAA;AAAA,QAEJ,aAAa,YAAY,YAAY;AAAA,MACvC;AAAA,MACA;AAAA,QACE,MAAMC,MAAA;AAAA,QACN,WAAW;AAAA,UACT,IAAI;AAAA,UACJ,gBAAgB;AAAA,QAClB;AAAA,QACA,IAAI;AAAA;AAAA;AAAA,QAGJ,aAAa,CAAC;AAAA,QACd,oBAAoB;AAAA,MACtB;AAAA,IACF;AAAA,IACA,qBAAqB,CAAC;AAAA,IACtB,WAAW;AAAA,EAAA,CACZ;AACD,QAAM,yBAAyBlC,iBAAM,OAAO,wBAAwB,mBAAmB;AAEvFA,mBAAM,UAAU,MAAM;AACpB,mBAAe,uBAAuB;AACpC,YAAM,+BAA+B,MAAM,sBAAsB,iBAAiB,IAAI;AAEtF,YAAM,gCAAgC,MAAM;AAAA,QAC1C;AAAA,QACA,uBAAuB;AAAA,QACvB;AAAA,MAAA;AAGF,iCAA2B,CAAC,WAAW;AAAA,QACrC,GAAG;AAAA,QACH,qBAAqB;AAAA,QACrB,qBAAqB;AAAA,QACrB,WAAW;AAAA,MACX,EAAA;AAAA,IACJ;AAEqB;EAAA,GACpB;AAAA,IACD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,CACD;AAEM,SAAA;AACT;AAMA,MAAM,kBAAkB,OACtB,iBACA,wBACA,qBAA8B,UAC3B;AACG,QAAA,iCAAiC,MAAM,QAAQ;AAAA,IACnD,uBAAuB,IAAI,CAAC,EAAE,YAAkB,MAAAmC,4BAAe,iBAAiB,WAAW,CAAC;AAAA,EAAA;AAG9F,QAAM,gCAAgC,uBAAuB;AAAA,IAC3D,CAAC,GAAGZ,WAAU,+BAA+BA,MAAK;AAAA,EAAA;AAGpD,QAAM,oBAAoB,8BAA8B;AAAA,IACtD,CAAC,QAAQ,IAAI,OAAO;AAAA,EAAA;AAGtB,MAAI,sBAAsB,IAAI;AAC5B,WAAO;EACT;AAEM,QAAA,8BAA8Ba,2BAAU,6BAA6B;AAE3E,8BAA4B,iBAAiB,EAAE,qBAAqB,qBAAqB,IAAI;AAEtF,SAAA;AACT;AAEA,MAAM,wBAAwB,OAC5B,iBACA,2BACG;AACG,QAAA,gCAAgC,MAAM,QAAQ;AAAA,IAClD,uBAAuB,IAAI,CAAC,EAAE,YAAkB,MAAAD,4BAAe,iBAAiB,WAAW,CAAC;AAAA,EAAA;AAG9F,QAAM,+BAA+B,uBAAuB;AAAA,IAC1D,CAAC,GAAGZ,WAAU,8BAA8BA,MAAK;AAAA,EAAA;AAG5C,SAAA;AACT;AC/IA,MAAM,UAAU7B,gBAAAA,QAAOX,aAAAA,GAAG;AAAA;AAAA;AASnB,MAAM,YAAY,CAAC,EAAE,UAAU,cAA8B;AAC5D,QAAA,EAAE,kBAAkBE,UAAAA;AAGxB,SAAAK,2BAAA,KAACP,aAAI,KAAA,EAAA,YAAW,cACd,UAAA;AAAA,IAACL,2BAAAA,IAAA2D,aAAA,eAAA,EACE,wBAAc,EAAE,IAAI,iBAAiB,gBAAgB,kBAAmB,CAAA,GAC3E;AAAA,IACA/C,2BAAAA,KAACX,aAAAA,MAAK,EAAA,YAAW,cACd,UAAA;AAAA,MAAA;AAAA,MACDD,+BAAC,WAAS,UAAS;AAAA,IAAA,GACrB;AAAA,EACF,EAAA,CAAA;AAEJ;ACNA,MAAM,KAAKsB,iBAAM;AAAA;AAAA,EAEf,MAAM,QAAO,QAAA,EAAA,KAAA,MAAA,QAAA,qBAA8B,CAAA,EAAA,KAAA,OAAA,EAAA,KAAA;AAC7C;AACA,MAAM,WAAWA,iBAAM;AAAA,EAAK,MAC1B,qCAAO,wBAAY,CAAA,EAAE,KAAK,CAAC,SAAS;AAAA,IAClC,SAAS,IAAI;AAAA,EAAA,EACb;AACJ;AACA,MAAM,uBAAuBA,iBAAM;AAAA,EAAK,MACtC,qCAAO,oCAAwB,CAAA,EAAE,KAAK,CAAC,SAAS;AAAA,IAC9C,SAAS,IAAI;AAAA,EAAA,EACb;AACJ;AACA,MAAM,kBAAkBA,iBAAM;AAAA,EAAK,MACjC,QAAO,QAAA,EAAA,KAAA,MAAA,QAAA,+BAA+B,GAAE,KAAK,CAAC,SAAS,EAAE,SAAS,IAAI,yBAAA,EAA2B;AACnG;AACA,MAAM,eAAeA,iBAAM;AAAA,EAAK,MAC9B,qCAAO,qBAAgB,CAAA,EAAA,KAAA,OAAA,EAAA,YAAA,EAAE,KAAK,CAAC,EAAE,cAAAsC,cAAa,OAAO,EAAE,SAASA,gBAAe;AACjF;AACA,MAAM,oBAAoBtC,iBAAM;AAAA,EAAK,MACnC,QAAA,QAAA,EAAA,KAAA,MAAA,QAAO,iCAAqB,CAAA,EAAE,KAAK,CAAC,EAAE,mBAAAuC,0BAAyB;AAAA,IAC7D,SAASA;AAAAA,EAAA,EACT;AACJ;AAEA,MAAM,cAAcvC,iBAAM;AAAA,EAAK,MAC7B,qCAAO,2BAAe,CAAA,EAAE,KAAK,CAAC,SAAS;AAAA,IACrC,SAAS,IAAI;AAAA,EAAA,EACb;AACJ;AACA,MAAM,eAAeA,iBAAM;AAAA,EAAK;AAAA;AAAA,IAE9B,QAAA,QAAA,EAAA,KAAA,MAAA,QAAO,qBAAgB,CAAE,EAAA,KAAK,CAACwC,aAAY;AAAA,MACzC,SAASA,QAAO;AAAA,IAAA,EAChB;AAAA;AACJ;AAEA,MAAM,QAAQ,MAAM;AACZ,QAAA,EAAE,eAAetD,aAAAA;AACvB,QAAM,WAAWuD,MAAAA;AACjB,QAAM,YAAYC,MAAAA,iBAAiB,CAAC,UAAU,MAAM,UAAU,MAAM;AAEpE,QAAM,EAAE,WAAW,qBAAqB,wBAAwB,QAAQ;AAClE,QAAA,EAAE,SAASZ,aAAAA;AACX,QAAA,EAAE,kBAAkB7B,MAAAA;AAE1BD,mBAAM,UAAU,MAAM;AAIpB,QAAI,cAAc,QAAQ;AACxB,iBAAW,sCAAsC;AAExC,eAAA,EAAE,MAAM2C,MAAA,8BAAA,CAA+B;AAAA,IAClD;AAAA,EACC,GAAA,CAAC,WAAW,UAAU,UAAU,CAAC;AAE9B,QAAA,SAAS3C,iBAAM,QAAQ,MAAM;AACjC,WACE,KACG,OAAO,CAAC,SAAS,KAAK,SAAS,EAE/B,IAAI,CAAC,EAAE,IAAI,WAAW,YAAY4C,MAAAA,YAAY,WAAY,IAAI,KAAK,CAAC;AAAA,EAAA,GAExE,CAAC,IAAI,CAAC;AAET,MAAI,WAAW;AACb,0CAAQC,mCAAqB,CAAA,CAAA;AAAA,EAC/B;AAGE,SAAAnE,2BAAAA,IAACoE,SAAAA,aAAY,EAAA,SAASC,qBACpB,cAAA,UAAAzD,2BAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,SACEZ,2BAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC;AAAA,UACA;AAAA,QAAA;AAAA,MACF;AAAA,MAGF,UAAA;AAAA,QAACA,2BAAAA,IAAAsB,iBAAM,UAAN,EAAe,yCAAW6C,aAAAA,sBAAqB,CAAA,CAAA,GAC9C,0CAACG,eACC,QAAA,EAAA,UAAA;AAAA,UAAAtE,+BAACuE,eAAAA,SAAM,MAAK,KAAI,WAAW,UAAU,OAAK,MAAC;AAAA,yCAC1CA,eAAAA,OAAM,EAAA,MAAK,OAAM,WAAW,aAAa,OAAK,MAAC;AAAA,UAC/CvE,2BAAA,IAAAuE,eAAA,OAAA,EAAM,MAAK,oBAAmB,WAAW,IAAI;AAAA,UAC7C;AAAA,UACAvE,2BAAA,IAAAuE,eAAA,OAAA,EAAM,MAAK,wBAAuB,WAAW,cAAc;AAAA,yCAC3DA,eAAAA,OAAM,EAAA,MAAK,aAAY,WAAW,cAAc,OAAK,MAAC;AAAA,yCACtDA,eAAAA,OAAM,EAAA,MAAK,gBACV,UAAAvE,+BAAC,kBAAgB,CAAA,GACnB;AAAA,UACAA,2BAAAA,IAACuE,wBAAM,MAAK,iBAAgB,OAAK,MAC/B,UAAAvE,2BAAA,IAAC,wBAAqB,EACxB,CAAA;AAAA,UACCA,2BAAA,IAAAuE,eAAA,OAAA,EAAM,MAAK,QAAO,WAAW,cAAc;AAAA,UAC3CvE,2BAAA,IAAAuE,eAAA,OAAA,EAAM,MAAK,QAAO,WAAW,mBAAmB;AAAA,UAChDvE,2BAAA,IAAAuE,eAAA,OAAA,EAAM,MAAK,IAAG,WAAW,cAAc;AAAA,QAAA,EAAA,CAC1C,EACF,CAAA;AAAA,uCACC,iBAAgB,EAAA;AAAA,QAEhB,gDAAkB,YAAW,EAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAElC,EAAA,CAAA;AAEJ;AClHA,MAAM,qBAAqB,MAAM;AAC/B,QAAM,EAAE,SAAS,WAAW,IAAInB,aAAa,aAAA;AAC7C,QAAM,CAAC,EAAE,QAAA,GAAW,QAAQ,IAAI9B,iBAAM;AAAA,IACpC;AAAA,IACA;AAAA,IACA,MAAM,KAAK,UAAU;AAAA,EAAA;AAEvB,QAAM,YAAYA,iBAAM,OAAO,CAAC,aAAqB;AACnD,aAAS,EAAE,MAAM,oBAAoB,SAAU,CAAA;AAAA,EAAA,CAChD;AAED,QAAM,qBAAqB,OAAO,KAAK,OAAO,EAAE;AAAA,IAC9C,CAAC,WAAW,QAAQ,MAAM,EAAE,YAAY;AAAA,EAAA;AA0B1C,MAAI,oBAAoB;AAChB,UAAA,eAAe,OAAO,KAAK,OAAO,EAAE,OAAO,CAAC,KAAK,YAAY;AAC3D,YAAA,uBAAuB,QAAQ,OAAO,EAAE;AAE9C,UAAI,sBAAsB;AAClB,cAAA,MAAM,QAAQ,OAAO,EAAE;AAE7B,YAAI,KAAMtB,2BAAA,IAAA,sBAAA,EAA+B,WAAW,UAAU,QAAA,GAA1B,GAAmC,CAAE;AAAA,MAC3E;AAEO,aAAA;AAAA,IACT,GAAG,CAAuB,CAAA;AAE1B,WAEKY,2BAAA,KAAAK,qBAAA,EAAA,UAAA;AAAA,MAAA;AAAA,qCACAkD,aAAqB,sBAAA,EAAA;AAAA,IACxB,EAAA,CAAA;AAAA,EAEJ;AAEA,wCAAQ,OAAM,CAAA,CAAA;AAChB;AAUA,MAAM,eAAsB;AAAA,EAC1B,SAAS,CAAC;AACZ;AASA,MAAM,UAAwC,CAAC,QAAQ,cAAc,WACnEK,yBAAQ,OAAO,CAAC,eAAe;AAC7B,UAAQ,OAAO,MAAM;AAAA,IACnB,KAAK,oBAAoB;AACvBC,2BAAI,YAAY,CAAC,WAAW,OAAO,UAAU,SAAS,GAAG,IAAI;AAC7D;AAAA,IACF;AAAA,IACA;AACS,aAAA;AAAA,EACX;AACF,CAAC;AAMH,MAAM,OAAO,CAAC,YAAqC;AAC1C,SAAA;AAAA,IACL,SAAS,OAAO,KAAK,OAAO,EAAE,OAAyB,CAAC,KAAK,YAAY;AACvE,UAAI,OAAO,IAAI,EAAE,GAAG,QAAQ,OAAO,EAAE;AAE9B,aAAA;AAAA,IACT,GAAG,EAAE;AAAA,EAAA;AAET;AC9FA,MAAM,gBAAgB,YAAY;AAElC,MAAM,mBAAmB,MAAM;AACvB,QAAA,EAAE,4BAA4BnE,aAAAA;AAC9B,QAAA,WAAWwB,aAAAA,KAAK,IAAI,UAAU;AACpC,QAAM,CAAC,iBAAiB,kBAAkB,IAAIR,iBAAM;AAAA,IAAiB,MACnE,WAAW,SAAS,YAAY,YAAY,SAAS,aAAa,IAAI,SAAS,QAAQ,IAAI;AAAA,EAAA;AAE7F,QAAM,CAAC,QAAQ,SAAS,IAAIA,iBAAM,SAAiB;AAC7C,QAAA,EAAE,4BAA4BC,MAAAA;AAC9B,QAAA,EAAE,KAAAd,SAAQiE,aAAAA;AACV,QAAA;AAAA,IACJ,EAAE,MAAM,UAAU,OAAO;AAAA,IACzB,EAAE,MAAM,SAAS,UAAU;AAAA,IAC3B,EAAE,MAAM,aAAa,QAAQ,wBAAwB,SAAS,WAAW;AAAA,IACzE,EAAE,MAAM,UAAU;AAAA,MAChBC,sBAAW;AAAA,IACb;AAAA,MACE,UAAU;AAAA,MACV,MAAM,UAAU;AACd,cAAM,EAAE,KAAS,IAAA,MAAMlE,KAA0B,oBAAoB;AAErE,eAAO,KAAK;AAAA,MACd;AAAA,IACF;AAAA,IACA;AAAA,MACE,UAAU;AAAA,MACV,MAAM,UAAU;AACV,YAAA;AACI,gBAAA,MAAM,MAAM,MAAM,4DAA4D;AAEhF,cAAA,CAAC,IAAI,IAAI;AACX,kBAAM,IAAI,MAAM;AAAA,UAClB;AAEM,gBAAA,WAAY,MAAM,IAAI;AAExB,cAAA,CAAC,SAAS,UAAU;AACtB,kBAAM,IAAI,MAAM;AAAA,UAClB;AAEA,iBAAO,SAAS;AAAA,iBACT,KAAK;AAEL,iBAAA;AAAA,QACT;AAAA,MACF;AAAA,MACA,SAAS;AAAA,MACT,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,UAAU;AAAA,MACV,MAAM,UAAU;AACd,cAAM,EAAE,KAAS,IAAA,MAAMA,KAAgC,6BAA6B;AAEpF,eAAO,KAAK;AAAA,MACd;AAAA,MACA,aAAa,CAAC;AAAA,IAChB;AAAA,IACA;AAAA,MACE,UAAU;AAAA,MACV,MAAM,UAAU;AACR,cAAA;AAAA,UACJ,MAAM;AAAA,YACJ,MAAM,EAAE,MAAM;AAAA,UAChB;AAAA,QAAA,IACE,MAAMA,KAAoB,iBAAiB;AAExC,eAAA;AAAA,MACT;AAAA,IACF;AAAA,EAAA,CACD;AAEK,QAAA,qBAAqB,yBAAyB,eAAe,OAAO;AAK1Ea,mBAAM,UAAU,MAAM;AACpB,QAAI,WAAW;AACP,YAAA,mBAAmB,UAAU,KAAK,CAAC,EAAE,WAAW,SAAS,oBAAoB;AAE/E,UAAA,oBAAoB,UAAU,YAAY;AAC5C,gCAAwB,IAAI;AAAA,MAC9B;AAAA,IACF;AAAA,EACC,GAAA,CAAC,WAAW,UAAU,uBAAuB,CAAC;AAEjDA,mBAAM,UAAU,MAAM;AACpB,UAAM,YAAY,YAAY;AAC5B,UAAI,UAAU;AACNsD,cAAAA,UAAS,MAAM,mBAAmB,QAAQ;AAEhD,YAAIA,SAAQ;AACV,oBAAUA,OAAM;AAAA,QAClB;AAAA,MACF;AAAA,IAAA;AAGQ;EAAA,GACT,CAAC,QAAQ,CAAC;AAIb,QAAM,sCACJ,cAAc,WAAW,aAAa,2BAA2B;AAEnE,QAAM,mBAAmB,aAAa;AAEtC,MAAI,kBAAkB;AACpB,0CAAQT,mCAAqB,CAAA,CAAA;AAAA,EAC/B;AAGA,MAAI,WAAW,SAAS;AACf,WAAAnE,2BAAA,IAAC,SAAI,UAAQ,WAAA,CAAA;AAAA,EACtB;AAGE,SAAAA,2BAAA;AAAA,IAAC6E,aAAA;AAAA,IAAA;AAAA,MACE,GAAG;AAAA,MACJ;AAAA,MACA,wBAAwB;AAAA,MACxB;AAAA,MACA;AAAA,MACA;AAAA,MAEA,0CAACC,MAAa,cAAA,EAAA,aAAa,eAAe,IAAI,oBAAoB,SAChE,UAAA;AAAA,QAAA9E,2BAAA,IAAC+E,MAAU,WAAA,EAAA;AAAA,uCACV,oBAAmB,EAAA;AAAA,MAAA,GACtB;AAAA,IAAA;AAAA,EAAA;AAGN;AAEA,MAAM,2BAA2B,CAC/B,uBACA,yBAAiC,OACrB;AACZ,MAAI,CAACC,eAAM,QAAA,qBAAqB,KAAK,CAACA,eAAA,QAAM,sBAAsB,GAAG;AAC5D,WAAA;AAAA,EACT;AAEO,SAAAC,YAAA,QAAG,uBAAuB,sBAAsB;AACzD;;;;;;;;;;;;"}
@@ -8,9 +8,9 @@ import { Helmet } from "react-helmet";
8
8
  import { useIntl } from "react-intl";
9
9
  import { NavLink, useHistory } from "react-router-dom";
10
10
  import styled from "styled-components";
11
- import { L as LAYOUT_DATA, N as Number, V as VerticalDivider, S as STATES } from "./AuthenticatedApp-3dc33451.mjs";
11
+ import { L as LAYOUT_DATA, N as Number, V as VerticalDivider, S as STATES } from "./AuthenticatedApp-2cfb41e2.mjs";
12
12
  import { u as useContentTypes } from "./useContentTypes-53b449bb.mjs";
13
- import { p as useEnterprise } from "./index-f1c47f19.mjs";
13
+ import { p as useEnterprise } from "./index-bef99193.mjs";
14
14
  import "react-query";
15
15
  import "semver/functions/lt";
16
16
  import "semver/functions/valid";
@@ -528,7 +528,7 @@ const HomePage = () => {
528
528
  const Page = useEnterprise(
529
529
  HomePageCE,
530
530
  // eslint-disable-next-line import/no-cycle
531
- async () => (await import("./HomePage-ffc96143.mjs")).HomePageEE
531
+ async () => (await import("./HomePage-e333ff90.mjs")).HomePageEE
532
532
  );
533
533
  if (!Page) {
534
534
  return null;
@@ -539,4 +539,4 @@ export {
539
539
  HomePage,
540
540
  HomePageCE
541
541
  };
542
- //# sourceMappingURL=HomePage-cd238204.mjs.map
542
+ //# sourceMappingURL=HomePage-1376624b.mjs.map