@strapi/admin 4.15.5 → 4.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (226) hide show
  1. package/dist/_chunks/{AuthenticatedApp-61dfdab8.js → AuthenticatedApp-12b0b80d.js} +23 -23
  2. package/dist/_chunks/{AuthenticatedApp-61dfdab8.js.map → AuthenticatedApp-12b0b80d.js.map} +1 -1
  3. package/dist/_chunks/{AuthenticatedApp-da1595e9.mjs → AuthenticatedApp-2b5530b9.mjs} +23 -23
  4. package/dist/_chunks/{AuthenticatedApp-da1595e9.mjs.map → AuthenticatedApp-2b5530b9.mjs.map} +1 -1
  5. package/dist/_chunks/{HomePage-48934b34.js → HomePage-3ad80266.js} +4 -4
  6. package/dist/_chunks/{HomePage-48934b34.js.map → HomePage-3ad80266.js.map} +1 -1
  7. package/dist/_chunks/{HomePage-f3052b59.js → HomePage-763d3a5f.js} +4 -4
  8. package/dist/_chunks/{HomePage-f3052b59.js.map → HomePage-763d3a5f.js.map} +1 -1
  9. package/dist/_chunks/{HomePage-2690d237.mjs → HomePage-93e2ba01.mjs} +4 -4
  10. package/dist/_chunks/{HomePage-2690d237.mjs.map → HomePage-93e2ba01.mjs.map} +1 -1
  11. package/dist/_chunks/{HomePage-3792b299.mjs → HomePage-f6a78451.mjs} +4 -4
  12. package/dist/_chunks/{HomePage-3792b299.mjs.map → HomePage-f6a78451.mjs.map} +1 -1
  13. package/dist/_chunks/{InstalledPluginsPage-3bd06321.mjs → InstalledPluginsPage-83eaebad.mjs} +3 -3
  14. package/dist/_chunks/{InstalledPluginsPage-3bd06321.mjs.map → InstalledPluginsPage-83eaebad.mjs.map} +1 -1
  15. package/dist/_chunks/{InstalledPluginsPage-da0780c1.js → InstalledPluginsPage-e3d10fcd.js} +3 -3
  16. package/dist/_chunks/{InstalledPluginsPage-da0780c1.js.map → InstalledPluginsPage-e3d10fcd.js.map} +1 -1
  17. package/dist/_chunks/{Login-ab4b47ad.js → Login-a48df094.js} +2 -2
  18. package/dist/_chunks/{Login-ab4b47ad.js.map → Login-a48df094.js.map} +1 -1
  19. package/dist/_chunks/{Login-8f68c65a.mjs → Login-e12abb16.mjs} +2 -2
  20. package/dist/_chunks/{Login-8f68c65a.mjs.map → Login-e12abb16.mjs.map} +1 -1
  21. package/dist/_chunks/{MarketplacePage-935fca72.js → MarketplacePage-193e4eca.js} +3 -3
  22. package/dist/_chunks/{MarketplacePage-935fca72.js.map → MarketplacePage-193e4eca.js.map} +1 -1
  23. package/dist/_chunks/{MarketplacePage-95af86bb.mjs → MarketplacePage-b1679fa5.mjs} +3 -3
  24. package/dist/_chunks/{MarketplacePage-95af86bb.mjs.map → MarketplacePage-b1679fa5.mjs.map} +1 -1
  25. package/dist/_chunks/{ProfilePage-20de1b54.mjs → ProfilePage-3858db75.mjs} +3 -3
  26. package/dist/_chunks/{ProfilePage-20de1b54.mjs.map → ProfilePage-3858db75.mjs.map} +1 -1
  27. package/dist/_chunks/{ProfilePage-b8b29c4d.js → ProfilePage-4a1eb00d.js} +3 -3
  28. package/dist/_chunks/{ProfilePage-b8b29c4d.js.map → ProfilePage-4a1eb00d.js.map} +1 -1
  29. package/dist/_chunks/{SalesPage-c5cbb366.js → SalesPage-4a0a68fb.js} +2 -2
  30. package/dist/_chunks/SalesPage-4a0a68fb.js.map +1 -0
  31. package/dist/_chunks/{SalesPage-c7c94c3f.mjs → SalesPage-fceedf48.mjs} +2 -2
  32. package/dist/_chunks/{SalesPage-c7c94c3f.mjs.map → SalesPage-fceedf48.mjs.map} +1 -1
  33. package/dist/_chunks/{build-92e15b93.mjs → build-1026ce7c.mjs} +2 -2
  34. package/dist/_chunks/{build-92e15b93.mjs.map → build-1026ce7c.mjs.map} +1 -1
  35. package/dist/_chunks/{build-df2f219f.js → build-d99bcc06.js} +2 -2
  36. package/dist/_chunks/{build-df2f219f.js.map → build-d99bcc06.js.map} +1 -1
  37. package/dist/_chunks/{constants-db792b94.mjs → constants-481b3914.mjs} +3 -3
  38. package/dist/_chunks/{constants-db792b94.mjs.map → constants-481b3914.mjs.map} +1 -1
  39. package/dist/_chunks/{constants-797ada28.js → constants-49d63c92.js} +6 -6
  40. package/dist/_chunks/{constants-797ada28.js.map → constants-49d63c92.js.map} +1 -1
  41. package/dist/_chunks/{constants-008a1527.js → constants-5fd54815.js} +5 -5
  42. package/dist/_chunks/{constants-008a1527.js.map → constants-5fd54815.js.map} +1 -1
  43. package/dist/_chunks/{constants-278adc05.mjs → constants-6876b155.mjs} +6 -6
  44. package/dist/_chunks/{constants-278adc05.mjs.map → constants-6876b155.mjs.map} +1 -1
  45. package/dist/_chunks/{constants-1d345364.mjs → constants-8bdc91a9.mjs} +5 -5
  46. package/dist/_chunks/{constants-1d345364.mjs.map → constants-8bdc91a9.mjs.map} +1 -1
  47. package/dist/_chunks/{constants-29d123f8.mjs → constants-b0bc030f.mjs} +2 -2
  48. package/dist/_chunks/{constants-29d123f8.mjs.map → constants-b0bc030f.mjs.map} +1 -1
  49. package/dist/_chunks/{constants-ec71917d.js → constants-dd4a9742.js} +3 -3
  50. package/dist/_chunks/{constants-ec71917d.js.map → constants-dd4a9742.js.map} +1 -1
  51. package/dist/_chunks/{constants-4be682e5.js → constants-fac0ce8c.js} +2 -2
  52. package/dist/_chunks/{constants-4be682e5.js.map → constants-fac0ce8c.js.map} +1 -1
  53. package/dist/_chunks/{develop-a46fed01.mjs → develop-72394876.mjs} +2 -2
  54. package/dist/_chunks/{develop-a46fed01.mjs.map → develop-72394876.mjs.map} +1 -1
  55. package/dist/_chunks/{develop-4d25a6e0.js → develop-da585b1e.js} +2 -2
  56. package/dist/_chunks/{develop-4d25a6e0.js.map → develop-da585b1e.js.map} +1 -1
  57. package/dist/_chunks/{index-40d047a8.mjs → index-0dcabbdd.mjs} +3 -3
  58. package/dist/_chunks/{index-40d047a8.mjs.map → index-0dcabbdd.mjs.map} +1 -1
  59. package/dist/_chunks/{index-1ebd9d8c.mjs → index-1d2a74ca.mjs} +5 -5
  60. package/dist/_chunks/{index-1ebd9d8c.mjs.map → index-1d2a74ca.mjs.map} +1 -1
  61. package/dist/_chunks/{index-f5b276a8.mjs → index-1ddec644.mjs} +21 -21
  62. package/dist/_chunks/{index-f5b276a8.mjs.map → index-1ddec644.mjs.map} +1 -1
  63. package/dist/_chunks/{index-a9625818.mjs → index-1eef7482.mjs} +5 -5
  64. package/dist/_chunks/{index-a9625818.mjs.map → index-1eef7482.mjs.map} +1 -1
  65. package/dist/_chunks/{index-834fad5c.mjs → index-20454411.mjs} +5 -5
  66. package/dist/_chunks/{index-834fad5c.mjs.map → index-20454411.mjs.map} +1 -1
  67. package/dist/_chunks/{index-40495ca1.mjs → index-296f0769.mjs} +2 -2
  68. package/dist/_chunks/{index-40495ca1.mjs.map → index-296f0769.mjs.map} +1 -1
  69. package/dist/_chunks/{index-d2b3c398.mjs → index-34233ee7.mjs} +3 -3
  70. package/dist/_chunks/{index-d2b3c398.mjs.map → index-34233ee7.mjs.map} +1 -1
  71. package/dist/_chunks/{index-924a1288.js → index-42a0b19b.js} +3 -3
  72. package/dist/_chunks/{index-924a1288.js.map → index-42a0b19b.js.map} +1 -1
  73. package/dist/_chunks/{index-dc89c18c.mjs → index-49b7e6ff.mjs} +8 -4
  74. package/dist/_chunks/index-49b7e6ff.mjs.map +1 -0
  75. package/dist/_chunks/{index-bc709e72.js → index-4ac37d7c.js} +3 -3
  76. package/dist/_chunks/{index-bc709e72.js.map → index-4ac37d7c.js.map} +1 -1
  77. package/dist/_chunks/{index-0fbbca7a.js → index-4ff0e245.js} +3 -3
  78. package/dist/_chunks/{index-0fbbca7a.js.map → index-4ff0e245.js.map} +1 -1
  79. package/dist/_chunks/{index-cbf9952d.js → index-526ea946.js} +2 -2
  80. package/dist/_chunks/{index-cbf9952d.js.map → index-526ea946.js.map} +1 -1
  81. package/dist/_chunks/{index-1932eedf.mjs → index-55f565cf.mjs} +3 -3
  82. package/dist/_chunks/{index-1932eedf.mjs.map → index-55f565cf.mjs.map} +1 -1
  83. package/dist/_chunks/{index-e34335f1.js → index-56cc01e0.js} +3 -3
  84. package/dist/_chunks/{index-e34335f1.js.map → index-56cc01e0.js.map} +1 -1
  85. package/dist/_chunks/{index-51986071.mjs → index-5d044c87.mjs} +3 -3
  86. package/dist/_chunks/{index-51986071.mjs.map → index-5d044c87.mjs.map} +1 -1
  87. package/dist/_chunks/{index-3c693658.mjs → index-5d14fd43.mjs} +3 -3
  88. package/dist/_chunks/{index-3c693658.mjs.map → index-5d14fd43.mjs.map} +1 -1
  89. package/dist/_chunks/{index-f3e7f8cc.mjs → index-5e9a93b3.mjs} +4 -4
  90. package/dist/_chunks/{index-f3e7f8cc.mjs.map → index-5e9a93b3.mjs.map} +1 -1
  91. package/dist/_chunks/{index-46c3ee85.mjs → index-60941eee.mjs} +3 -3
  92. package/dist/_chunks/{index-46c3ee85.mjs.map → index-60941eee.mjs.map} +1 -1
  93. package/dist/_chunks/{index-9c26fffe.js → index-60e19de0.js} +4 -4
  94. package/dist/_chunks/{index-9c26fffe.js.map → index-60e19de0.js.map} +1 -1
  95. package/dist/_chunks/{index-003c2cab.mjs → index-6757c461.mjs} +5 -5
  96. package/dist/_chunks/{index-003c2cab.mjs.map → index-6757c461.mjs.map} +1 -1
  97. package/dist/_chunks/{index-b42866c5.mjs → index-69dbf2cf.mjs} +2 -2
  98. package/dist/_chunks/{index-b42866c5.mjs.map → index-69dbf2cf.mjs.map} +1 -1
  99. package/dist/_chunks/{index-035f8c59.js → index-71c88425.js} +3 -3
  100. package/dist/_chunks/{index-035f8c59.js.map → index-71c88425.js.map} +1 -1
  101. package/dist/_chunks/{index-f7cf652c.js → index-74601a9b.js} +4 -4
  102. package/dist/_chunks/{index-f7cf652c.js.map → index-74601a9b.js.map} +1 -1
  103. package/dist/_chunks/{index-cc38783c.mjs → index-7e31e982.mjs} +3 -3
  104. package/dist/_chunks/{index-cc38783c.mjs.map → index-7e31e982.mjs.map} +1 -1
  105. package/dist/_chunks/{index-787a0db6.js → index-8759f1d9.js} +5 -5
  106. package/dist/_chunks/{index-787a0db6.js.map → index-8759f1d9.js.map} +1 -1
  107. package/dist/_chunks/{index-f55a69e7.mjs → index-89a1d72c.mjs} +4 -4
  108. package/dist/_chunks/{index-f55a69e7.mjs.map → index-89a1d72c.mjs.map} +1 -1
  109. package/dist/_chunks/{index-0ed05075.js → index-8b79ee6c.js} +14 -8
  110. package/dist/_chunks/{index-0ed05075.js.map → index-8b79ee6c.js.map} +1 -1
  111. package/dist/_chunks/{index-154693de.mjs → index-8c5b4bda.mjs} +3 -3
  112. package/dist/_chunks/{index-154693de.mjs.map → index-8c5b4bda.mjs.map} +1 -1
  113. package/dist/_chunks/{index-7bfab5f5.js → index-912140fa.js} +4 -4
  114. package/dist/_chunks/{index-7bfab5f5.js.map → index-912140fa.js.map} +1 -1
  115. package/dist/_chunks/{index-eebad65d.js → index-947668f7.js} +3 -3
  116. package/dist/_chunks/{index-eebad65d.js.map → index-947668f7.js.map} +1 -1
  117. package/dist/_chunks/{index-8e034257.mjs → index-95d9bcb0.mjs} +3 -3
  118. package/dist/_chunks/{index-8e034257.mjs.map → index-95d9bcb0.mjs.map} +1 -1
  119. package/dist/_chunks/{index-56b499fb.mjs → index-98221317.mjs} +5 -5
  120. package/dist/_chunks/{index-56b499fb.mjs.map → index-98221317.mjs.map} +1 -1
  121. package/dist/_chunks/{index-6797e259.mjs → index-9881aa54.mjs} +3 -3
  122. package/dist/_chunks/{index-6797e259.mjs.map → index-9881aa54.mjs.map} +1 -1
  123. package/dist/_chunks/{index-9304d6de.js → index-9d98e8b2.js} +511 -475
  124. package/dist/_chunks/index-9d98e8b2.js.map +1 -0
  125. package/dist/_chunks/{index-97a59f73.js → index-9ebd4c75.js} +4 -4
  126. package/dist/_chunks/{index-97a59f73.js.map → index-9ebd4c75.js.map} +1 -1
  127. package/dist/_chunks/{index-b6ee936b.mjs → index-9f08bcc3.mjs} +14 -8
  128. package/dist/_chunks/{index-b6ee936b.mjs.map → index-9f08bcc3.mjs.map} +1 -1
  129. package/dist/_chunks/{index-eaff38ba.js → index-a1707d3b.js} +3 -3
  130. package/dist/_chunks/{index-eaff38ba.js.map → index-a1707d3b.js.map} +1 -1
  131. package/dist/_chunks/{index-039f8e26.mjs → index-a61e2ef0.mjs} +4 -4
  132. package/dist/_chunks/{index-039f8e26.mjs.map → index-a61e2ef0.mjs.map} +1 -1
  133. package/dist/_chunks/{index-b2d4d126.js → index-a8c829e4.js} +5 -5
  134. package/dist/_chunks/{index-b2d4d126.js.map → index-a8c829e4.js.map} +1 -1
  135. package/dist/_chunks/{index-72494b79.js → index-a9574ead.js} +3 -3
  136. package/dist/_chunks/{index-72494b79.js.map → index-a9574ead.js.map} +1 -1
  137. package/dist/_chunks/{index-9118a940.mjs → index-a98002b5.mjs} +4 -4
  138. package/dist/_chunks/{index-9118a940.mjs.map → index-a98002b5.mjs.map} +1 -1
  139. package/dist/_chunks/{index-d9882c45.mjs → index-ad85a00a.mjs} +4 -4
  140. package/dist/_chunks/{index-d9882c45.mjs.map → index-ad85a00a.mjs.map} +1 -1
  141. package/dist/_chunks/{index-bde05e9e.mjs → index-b6e7426d.mjs} +3 -3
  142. package/dist/_chunks/{index-bde05e9e.mjs.map → index-b6e7426d.mjs.map} +1 -1
  143. package/dist/_chunks/{index-46138ec7.mjs → index-bcafdc00.mjs} +4 -4
  144. package/dist/_chunks/{index-46138ec7.mjs.map → index-bcafdc00.mjs.map} +1 -1
  145. package/dist/_chunks/{index-a6f1ccf6.mjs → index-bd42fb77.mjs} +6 -6
  146. package/dist/_chunks/{index-a6f1ccf6.mjs.map → index-bd42fb77.mjs.map} +1 -1
  147. package/dist/_chunks/{index-bac648de.js → index-bdb23c76.js} +5 -5
  148. package/dist/_chunks/{index-bac648de.js.map → index-bdb23c76.js.map} +1 -1
  149. package/dist/_chunks/{index-81509193.mjs → index-c0f59e46.mjs} +513 -477
  150. package/dist/_chunks/index-c0f59e46.mjs.map +1 -0
  151. package/dist/_chunks/{index-557e0c47.js → index-c8be54b1.js} +2 -2
  152. package/dist/_chunks/{index-557e0c47.js.map → index-c8be54b1.js.map} +1 -1
  153. package/dist/_chunks/{index-345c0ae9.js → index-c8f0ea8f.js} +6 -6
  154. package/dist/_chunks/{index-345c0ae9.js.map → index-c8f0ea8f.js.map} +1 -1
  155. package/dist/_chunks/{index-f7dbd21b.js → index-caa6ed37.js} +2 -2
  156. package/dist/_chunks/{index-f7dbd21b.js.map → index-caa6ed37.js.map} +1 -1
  157. package/dist/_chunks/{index-25975989.js → index-ccae5f17.js} +4 -4
  158. package/dist/_chunks/{index-25975989.js.map → index-ccae5f17.js.map} +1 -1
  159. package/dist/_chunks/{index-d5f569ab.js → index-cf24d5a0.js} +5 -5
  160. package/dist/_chunks/{index-d5f569ab.js.map → index-cf24d5a0.js.map} +1 -1
  161. package/dist/_chunks/{index-6353193a.mjs → index-d8d56664.mjs} +5 -5
  162. package/dist/_chunks/{index-6353193a.mjs.map → index-d8d56664.mjs.map} +1 -1
  163. package/dist/_chunks/{index-69d47db4.js → index-da64448f.js} +3 -3
  164. package/dist/_chunks/{index-69d47db4.js.map → index-da64448f.js.map} +1 -1
  165. package/dist/_chunks/{index-be3e5f69.mjs → index-e04aafb3.mjs} +2 -2
  166. package/dist/_chunks/{index-be3e5f69.mjs.map → index-e04aafb3.mjs.map} +1 -1
  167. package/dist/_chunks/{index-9f30a92e.js → index-e76dc085.js} +4 -4
  168. package/dist/_chunks/{index-9f30a92e.js.map → index-e76dc085.js.map} +1 -1
  169. package/dist/_chunks/{index-bfb581a2.js → index-eab05381.js} +3 -3
  170. package/dist/_chunks/{index-bfb581a2.js.map → index-eab05381.js.map} +1 -1
  171. package/dist/_chunks/{index-2b22b1a0.js → index-eb720419.js} +5 -5
  172. package/dist/_chunks/{index-2b22b1a0.js.map → index-eb720419.js.map} +1 -1
  173. package/dist/_chunks/{index-4f557234.mjs → index-ebd0c6b2.mjs} +3 -3
  174. package/dist/_chunks/{index-4f557234.mjs.map → index-ebd0c6b2.mjs.map} +1 -1
  175. package/dist/_chunks/{index-e0e235a0.js → index-ef2c6efd.js} +3 -3
  176. package/dist/_chunks/{index-e0e235a0.js.map → index-ef2c6efd.js.map} +1 -1
  177. package/dist/_chunks/{index-1f4afa21.js → index-f09ec538.js} +3 -3
  178. package/dist/_chunks/{index-1f4afa21.js.map → index-f09ec538.js.map} +1 -1
  179. package/dist/_chunks/{index-9f2d5dc8.js → index-f5a00b06.js} +3 -3
  180. package/dist/_chunks/{index-9f2d5dc8.js.map → index-f5a00b06.js.map} +1 -1
  181. package/dist/_chunks/{index-5a5b0567.js → index-f762b27d.js} +21 -21
  182. package/dist/_chunks/{index-5a5b0567.js.map → index-f762b27d.js.map} +1 -1
  183. package/dist/_chunks/{index-f52ae628.mjs → index-faf78cfd.mjs} +3 -3
  184. package/dist/_chunks/{index-f52ae628.mjs.map → index-faf78cfd.mjs.map} +1 -1
  185. package/dist/_chunks/{index-0c9fceff.js → index-ff413b1a.js} +5 -5
  186. package/dist/_chunks/{index-0c9fceff.js.map → index-ff413b1a.js.map} +1 -1
  187. package/dist/_chunks/{index-1a74fa41.js → index-ffd2f664.js} +8 -4
  188. package/dist/_chunks/index-ffd2f664.js.map +1 -0
  189. package/dist/_chunks/{ru-d43423ea.mjs → ru-9aad40c5.mjs} +91 -42
  190. package/dist/_chunks/{ru-d43423ea.mjs.map → ru-9aad40c5.mjs.map} +1 -1
  191. package/dist/_chunks/{ru-07958f09.js → ru-c0293425.js} +91 -42
  192. package/dist/_chunks/{ru-07958f09.js.map → ru-c0293425.js.map} +1 -1
  193. package/dist/_chunks/{schema-a7f695ae.mjs → schema-da392e23.mjs} +2 -2
  194. package/dist/_chunks/{schema-a7f695ae.mjs.map → schema-da392e23.mjs.map} +1 -1
  195. package/dist/_chunks/{schema-15e33d1c.js → schema-e8bfd9c4.js} +2 -2
  196. package/dist/_chunks/{schema-15e33d1c.js.map → schema-e8bfd9c4.js.map} +1 -1
  197. package/dist/_chunks/{validateWorkflow-6b5dffaf.js → validateWorkflow-34ccfb57.js} +3 -3
  198. package/dist/_chunks/{validateWorkflow-6b5dffaf.js.map → validateWorkflow-34ccfb57.js.map} +1 -1
  199. package/dist/_chunks/{validateWorkflow-2f84e76e.mjs → validateWorkflow-67154f59.mjs} +3 -3
  200. package/dist/_chunks/{validateWorkflow-2f84e76e.mjs.map → validateWorkflow-67154f59.mjs.map} +1 -1
  201. package/dist/admin/index.js +1 -1
  202. package/dist/admin/index.mjs +1 -1
  203. package/dist/admin/src/content-manager/components/BlocksInput/BlocksContent.d.ts +5 -0
  204. package/dist/admin/src/content-manager/components/BlocksInput/BlocksEditor.d.ts +34 -0
  205. package/dist/admin/src/content-manager/components/BlocksInput/BlocksInput.d.ts +18 -0
  206. package/dist/admin/src/content-manager/components/BlocksInput/BlocksToolbar.d.ts +2 -0
  207. package/dist/admin/src/content-manager/components/BlocksInput/hooks/useBlocksStore.d.ts +32 -0
  208. package/dist/admin/src/content-manager/components/BlocksInput/hooks/useModifiersStore.d.ts +20 -0
  209. package/dist/admin/src/content-manager/components/BlocksInput/plugins/withLinks.d.ts +8 -0
  210. package/dist/admin/src/content-manager/components/BlocksInput/plugins/withStrapiSchema.d.ts +8 -0
  211. package/dist/admin/src/content-manager/components/BlocksInput/tests/mock-schema.d.ts +2 -0
  212. package/dist/admin/src/content-manager/components/BlocksInput/utils/links.d.ts +10 -0
  213. package/dist/admin/src/content-manager/components/BlocksInput/utils/types.d.ts +6 -0
  214. package/dist/admin/src/hooks/useAdminUsers.d.ts +3 -3
  215. package/dist/admin/src/index.d.ts +1 -0
  216. package/dist/admin/src/render.d.ts +3 -1
  217. package/dist/cli.js +1 -1
  218. package/dist/cli.mjs +1 -1
  219. package/package.json +14 -14
  220. package/server/services/__tests__/user.test.js +15 -0
  221. package/server/services/user.js +1 -4
  222. package/dist/_chunks/SalesPage-c5cbb366.js.map +0 -1
  223. package/dist/_chunks/index-1a74fa41.js.map +0 -1
  224. package/dist/_chunks/index-81509193.mjs.map +0 -1
  225. package/dist/_chunks/index-9304d6de.js.map +0 -1
  226. package/dist/_chunks/index-dc89c18c.mjs.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-9304d6de.js","sources":["../../admin/src/content-manager/contexts/ModelsContext.js","../../admin/src/content-manager/utils/ItemTypes.js","../../admin/src/content-manager/contexts/ContentTypeLayout.js","../../admin/src/content-manager/pages/EditViewLayoutManager/selectors.js","../../admin/src/content-manager/hooks/useContentTypeLayout/index.js","../../admin/src/content-manager/hooks/useFetchContentTypeLayout/reducer.js","../../admin/src/content-manager/utils/arrayMoveItem.js","../../admin/src/content-manager/utils/checkIfAttributeIsDisplayable.js","../../admin/src/content-manager/utils/createDefaultForm.js","../../admin/src/content-manager/utils/formatLayoutToApi.js","../../admin/src/content-manager/utils/generatePermissionsObject.js","../../admin/src/content-manager/utils/getFieldName.js","../../admin/src/content-manager/utils/getMaxTempKey.js","../../admin/src/content-manager/utils/mergeMetasWithSchema.js","../../admin/src/content-manager/utils/removePasswordFieldsFromData.js","../../admin/src/content-manager/utils/getDisplayName.js","../../admin/src/content-manager/hooks/useFetchContentTypeLayout/utils/formatLayouts.js","../../admin/src/content-manager/hooks/useFetchContentTypeLayout/index.js","../../admin/src/content-manager/hooks/useFindRedirectionLink/selectors.js","../../admin/src/content-manager/hooks/useFindRedirectionLink/utils/getRedirectionLink.js","../../admin/src/content-manager/hooks/useFindRedirectionLink/index.js","../../admin/src/content-manager/hooks/usePluginsQueryParams/index.js","../../admin/src/content-manager/hooks/usePrev.js","../../admin/src/content-manager/hooks/useSyncRbac/actions.js","../../admin/src/content-manager/hooks/useSyncRbac/selectors.js","../../admin/src/content-manager/hooks/useSyncRbac/index.js","../../admin/src/content-manager/pages/EditSettingsView/components/LayoutDndProvider/index.js","../../admin/src/content-manager/pages/EditSettingsView/hooks/useLayoutDnd.js","../../admin/src/content-manager/pages/EditSettingsView/components/LinkToCTB.js","../../admin/src/content-manager/pages/EditSettingsView/components/ComponentFieldList.js","../../admin/src/content-manager/components/ComponentIcon/constants.js","../../admin/src/content-manager/components/ComponentIcon/ComponentIcon.js","../../admin/src/content-manager/pages/EditSettingsView/components/DynamicZoneList.js","../../admin/src/content-manager/pages/EditSettingsView/components/FieldButtonContent.js","../../admin/src/content-manager/pages/EditSettingsView/components/DisplayedFieldButton.js","../../admin/src/content-manager/pages/EditSettingsView/components/RowItemsLayout.js","../../admin/src/content-manager/pages/EditSettingsView/components/RowsLayout.js","../../admin/src/content-manager/pages/EditSettingsView/components/DisplayedFields.js","../../admin/src/content-manager/components/FieldTypeIcon/index.js","../../admin/src/content-manager/pages/EditSettingsView/utils/createPossibleMainFieldsForModelsAndComponents.js","../../admin/src/content-manager/pages/EditSettingsView/utils/getInputProps.js","../../admin/src/content-manager/pages/EditSettingsView/components/GenericInput.js","../../admin/src/content-manager/pages/EditSettingsView/components/ModalForm.js","../../admin/src/content-manager/pages/EditSettingsView/components/FormModal.js","../../admin/src/content-manager/pages/EditSettingsView/utils/layout.js","../../admin/src/content-manager/pages/EditSettingsView/init.js","../../admin/src/content-manager/pages/EditSettingsView/reducer.js","../../admin/src/content-manager/pages/EditSettingsView/index.js","../../admin/src/content-manager/pages/EditViewLayoutManager/actions.js","../../admin/src/content-manager/sharedReducers/crudReducer/actions.js","../../admin/src/content-manager/sharedReducers/crudReducer/selectors.js","../../admin/src/content-manager/components/CollectionTypeFormWrapper/index.js","../../admin/src/content-manager/components/DynamicZone/components/AddComponentButton.js","../../admin/src/content-manager/components/DynamicZone/components/ComponentCategory.js","../../admin/src/content-manager/components/DynamicZone/components/ComponentPicker.js","../../admin/src/content-manager/components/ComponentInitializer/index.js","../../admin/src/content-manager/hooks/useLazyComponents/index.js","../../admin/src/content-manager/components/Hint/index.js","../../admin/src/content-manager/components/BlocksEditor/utils/links.js","../../admin/src/content-manager/components/BlocksEditor/hooks/useBlocksStore.js","../../admin/src/content-manager/components/BlocksEditor/hooks/useModifiersStore.js","../../admin/src/content-manager/components/BlocksEditor/BlocksInput/index.js","../../admin/src/content-manager/components/BlocksEditor/plugins/withLinks.js","../../admin/src/content-manager/components/BlocksEditor/plugins/withStrapiSchema.js","../../admin/src/content-manager/components/BlocksEditor/Toolbar/index.js","../../admin/src/content-manager/components/BlocksEditor/index.js","../../admin/src/content-manager/components/InputUID/endActionStyle.js","../../admin/src/content-manager/components/InputUID/regex.js","../../admin/src/content-manager/components/InputUID/index.js","../../admin/src/content-manager/components/RelationInputDataManager/utils/connect.js","../../admin/src/content-manager/components/RelationInputDataManager/utils/diffRelations.js","../../admin/src/content-manager/components/RelationInputDataManager/constants.js","../../admin/src/content-manager/components/RelationInputDataManager/utils/getRelationLink.js","../../admin/src/content-manager/components/RelationInputDataManager/utils/normalizeRelations.js","../../admin/src/content-manager/components/RelationInputDataManager/utils/normalizeSearchResults.js","../../admin/src/content-manager/components/RelationInputDataManager/utils/select.js","../../admin/src/content-manager/hooks/useRelation/useRelation.js","../../admin/src/content-manager/utils/paths.js","../../admin/src/content-manager/components/RelationInput/components/Option.js","../../admin/src/content-manager/components/RelationInput/constants.js","../../admin/src/content-manager/components/RelationInput/components/RelationItem.js","../../admin/src/content-manager/components/RelationInput/components/RelationList.js","../../admin/src/content-manager/components/RelationInput/RelationInput.js","../../admin/src/content-manager/components/RelationInputDataManager/RelationInputDataManager.js","../../admin/src/content-manager/components/PreviewWysiwyg/utils/mdRenderer.js","../../admin/src/content-manager/components/PreviewWysiwyg/utils/satinizeHtml.js","../../admin/src/content-manager/components/PreviewWysiwyg/Wrapper.js","../../admin/src/content-manager/components/PreviewWysiwyg/index.js","../../admin/src/content-manager/components/Wysiwyg/utils/continueList.js","../../admin/src/content-manager/components/Wysiwyg/Editor.js","../../admin/src/content-manager/components/Wysiwyg/EditorLayout.js","../../admin/src/content-manager/components/Wysiwyg/utils/utils.js","../../admin/src/content-manager/components/Wysiwyg/WysiwygStyles.js","../../admin/src/content-manager/components/Wysiwyg/WysiwygFooter.js","../../admin/src/content-manager/components/Wysiwyg/WysiwygNav.js","../../admin/src/content-manager/components/Wysiwyg/index.js","../../admin/src/content-manager/components/Inputs/utils/connect.js","../../admin/src/content-manager/components/Inputs/utils/generateOptions.js","../../admin/src/content-manager/components/Inputs/utils/getInputType.js","../../admin/src/content-manager/components/Inputs/utils/select.js","../../admin/src/content-manager/components/Inputs/utils/VALIDATIONS_TO_OMIT.js","../../admin/src/content-manager/components/Inputs/index.js","../../admin/src/content-manager/components/NonRepeatableComponent/index.js","../../admin/src/content-manager/components/RepeatableComponent/components/Accordion.js","../../admin/src/content-manager/components/RepeatableComponent/components/Preview.js","../../admin/src/content-manager/components/RepeatableComponent/components/Component.js","../../admin/src/content-manager/components/RepeatableComponent/utils/getComponentErrorKeys.js","../../admin/src/content-manager/components/RepeatableComponent/index.js","../../admin/src/content-manager/components/FieldComponent/Label.js","../../admin/src/content-manager/components/FieldComponent/utils/connect.js","../../admin/src/content-manager/components/FieldComponent/utils/select.js","../../admin/src/content-manager/components/FieldComponent/index.js","../../admin/src/content-manager/components/DynamicZone/components/DynamicComponent.js","../../admin/src/content-manager/components/DynamicZone/components/DynamicZoneLabel.js","../../admin/src/content-manager/components/DynamicZone/index.js","../../admin/src/content-manager/constants/attributes.js","../../admin/src/content-manager/components/EditViewDataManagerProvider/utils/cleanData.js","../../admin/src/content-manager/components/EditViewDataManagerProvider/utils/findAllAndReplace.js","../../admin/src/content-manager/components/EditViewDataManagerProvider/utils/moveFields.js","../../admin/src/content-manager/components/EditViewDataManagerProvider/reducer.js","../../admin/src/content-manager/components/EditViewDataManagerProvider/index.js","../../admin/src/content-manager/pages/ListView/utils/buildValidGetParams.js","../../admin/src/content-manager/components/SingleTypeFormWrapper/index.js","../../admin/src/content-manager/pages/EditView/DeleteLink/utils/connect.js","../../admin/src/content-manager/pages/EditView/DeleteLink/utils/select.js","../../admin/src/content-manager/pages/EditView/DeleteLink/index.js","../../admin/src/content-manager/pages/EditView/DraftAndPublishBadge/utils/connect.js","../../admin/src/content-manager/pages/EditView/DraftAndPublishBadge/utils/select.js","../../admin/src/content-manager/pages/EditView/DraftAndPublishBadge/index.js","../../admin/src/content-manager/pages/EditView/GridRow/index.js","../../admin/src/content-manager/pages/EditView/Header/utils/connect.js","../../admin/src/content-manager/pages/EditView/Header/utils/select.js","../../admin/src/content-manager/pages/EditView/Header/index.js","../../admin/src/content-manager/pages/EditView/hooks/useOnce.js","../../admin/src/content-manager/pages/EditView/Information/utils/getUnits.js","../../admin/src/content-manager/pages/EditView/Information/index.js","../../admin/src/content-manager/pages/EditView/InformationBox/InformationBoxCE.js","../../admin/src/content-manager/pages/EditView/utils/createAttributesLayout.js","../../admin/src/content-manager/pages/EditView/utils/getCustomFieldUidsFromLayout.js","../../admin/src/content-manager/pages/EditView/utils/getFieldsActionMatchingPermissions.js","../../admin/src/content-manager/pages/EditView/selectors.js","../../admin/src/content-manager/pages/EditView/index.js","../../admin/src/content-manager/pages/EditViewLayoutManager/Permissions.js","../../admin/src/content-manager/pages/EditViewLayoutManager/index.js","../../admin/src/content-manager/pages/ListSettingsView/components/EditFieldForm.js","../../admin/src/content-manager/pages/ListSettingsView/components/Settings.js","../../admin/src/content-manager/pages/App/components/CardDragPreview.js","../../admin/src/content-manager/pages/ListSettingsView/components/DraggableCard.js","../../admin/src/content-manager/pages/ListSettingsView/components/SortDisplayedFields.js","../../admin/src/content-manager/pages/ListSettingsView/constants.js","../../admin/src/content-manager/pages/ListSettingsView/reducer.js","../../admin/src/content-manager/pages/ListSettingsView/index.js","../../admin/src/content-manager/pages/ListView/actions.js","../../admin/src/content-manager/components/Filter/Filter.js","../../admin/src/content-manager/components/Filter/CustomInputs/AdminUsersFilter.js","../../admin/src/content-manager/hooks/useAllowedAttributes.js","../../admin/src/content-manager/components/InjectionZoneList/index.js","../../admin/src/content-manager/pages/ListView/components/ConfirmDialogDelete/index.js","../../admin/src/content-manager/pages/ListView/components/Body/index.js","../../admin/src/content-manager/pages/ListView/selectors.js","../../admin/src/content-manager/pages/ListView/components/BulkActionButtons/ConfirmBulkActionDialog/index.js","../../admin/src/content-manager/pages/ListView/components/BulkActionButtons/SelectedEntriesModal/index.js","../../admin/src/content-manager/pages/ListView/components/BulkActionButtons/index.js","../../admin/src/content-manager/pages/ListView/components/CellContent/CellValue.js","../../admin/src/content-manager/pages/ListView/components/CellContent/Media/FileWrapper.js","../../admin/src/content-manager/pages/ListView/components/CellContent/Media/index.js","../../admin/src/content-manager/pages/ListView/components/CellContent/MultipleMedias.js","../../admin/src/content-manager/pages/ListView/components/CellContent/RelationMultiple/index.js","../../admin/src/content-manager/pages/ListView/components/CellContent/RelationSingle/index.js","../../admin/src/content-manager/pages/ListView/components/CellContent/RepeatableComponent/index.js","../../admin/src/content-manager/pages/ListView/components/CellContent/SingleComponent/index.js","../../admin/src/content-manager/pages/ListView/components/CellContent/utils/isSingleRelation.js","../../admin/src/content-manager/pages/ListView/components/CellContent/utils/hasContent.js","../../admin/src/content-manager/pages/ListView/components/CellContent/index.js","../../admin/src/content-manager/pages/ListView/components/FieldPicker/index.js","../../admin/src/content-manager/pages/ListView/components/ViewSettingsMenu/index.js","../../admin/src/content-manager/pages/ListView/index.js","../../admin/src/content-manager/pages/ListViewLayoutManager/Permissions.js","../../admin/src/content-manager/pages/ListViewLayoutManager/index.js","../../admin/src/content-manager/pages/CollectionTypeRecursivePath/components/ErrorFallback.js","../../admin/src/content-manager/pages/CollectionTypeRecursivePath/index.js","../../admin/src/content-manager/pages/ComponentSetttingsView/index.js","../../admin/src/content-manager/pages/NoContentType/index.js","../../admin/src/content-manager/pages/NoPermissions/index.js","../../admin/src/content-manager/pages/SingleTypeRecursivePath/index.js","../../admin/src/content-manager/pages/App/components/ComponentDragPreview.js","../../admin/src/content-manager/pages/App/components/RelationDragPreview.js","../../admin/src/content-manager/pages/App/LeftMenu/index.js","../../admin/src/content-manager/pages/App/actions.js","../../admin/src/content-manager/pages/App/utils/checkPermissions.js","../../admin/src/content-manager/pages/App/utils/generateModelsLinks.js","../../admin/src/content-manager/pages/App/utils/getContentTypeLinks.js","../../admin/src/content-manager/pages/App/useContentManagerInitData.js","../../admin/src/content-manager/pages/App/index.js"],"sourcesContent":["import { createContext } from 'react';\n\nconst ModelsContext = createContext();\n\nexport default ModelsContext;\n","export default {\n COMPONENT: 'component',\n EDIT_FIELD: 'editField',\n FIELD: 'field',\n DYNAMIC_ZONE: 'dynamicZone',\n RELATION: 'relation',\n};\n","import { createContext } from 'react';\n\nconst ContentTypeLayout = createContext();\n\nexport default ContentTypeLayout;\n","const selectLayout = (state) => state['content-manager_editViewLayoutManager'].currentLayout;\n\nexport default selectLayout;\n","import { useCallback } from 'react';\n\nimport { useSelector } from 'react-redux';\n\nimport selectLayout from '../../pages/EditViewLayoutManager/selectors';\n\nconst useContentTypeLayout = () => {\n const currentLayout = useSelector(selectLayout);\n\n const getComponentLayout = useCallback(\n (componentUid) => {\n return currentLayout?.components?.[componentUid] ?? {};\n },\n [currentLayout]\n );\n\n return { ...currentLayout, getComponentLayout };\n};\n\nexport default useContentTypeLayout;\n","/* eslint-disable consistent-return */\nimport produce from 'immer';\n\nexport const initialState = {\n error: null,\n isLoading: true,\n layout: {},\n layouts: {},\n};\n\nconst reducer = (state, action) =>\n produce(state, (draftState) => {\n switch (action.type) {\n case 'GET_DATA': {\n draftState.isLoading = true;\n draftState.error = null;\n draftState.layout = {};\n break;\n }\n case 'GET_DATA_SUCCEEDED': {\n const contentTypeUid = action.data.contentType.uid;\n\n draftState.layout = action.data;\n draftState.layouts[contentTypeUid] = action.data;\n draftState.isLoading = false;\n break;\n }\n case 'GET_DATA_ERROR': {\n draftState.isLoading = false;\n draftState.error = action.error;\n break;\n }\n case 'SET_LAYOUT_FROM_STATE': {\n draftState.error = null;\n draftState.layout = state.layouts[action.uid];\n break;\n }\n case 'UPDATE_LAYOUT': {\n const oldLayout = state.layout;\n\n draftState.layout = {\n ...oldLayout,\n contentType: { uid: oldLayout.contentType.uid, ...action.newLayout.contentType },\n };\n draftState.layouts[oldLayout.contentType.uid] = {\n ...oldLayout,\n contentType: { uid: oldLayout.contentType.uid, ...action.newLayout.contentType },\n };\n break;\n }\n default:\n return draftState;\n }\n });\n\nexport default reducer;\n","import cloneDeep from 'lodash/cloneDeep';\n\nconst arrayMoveItem = (arr, from, to) => {\n if (\n Array.isArray(arr) &&\n from >= 0 &&\n to >= 0 &&\n from <= arr.length - 1 &&\n to <= arr.length - 1\n ) {\n const newArray = cloneDeep(arr);\n\n const item = newArray.splice(from, 1);\n newArray.splice(to, 0, item[0]);\n\n return newArray;\n }\n\n return arr;\n};\n\nexport default arrayMoveItem;\n","const checkIfAttributeIsDisplayable = (attribute) => {\n const { type } = attribute;\n\n if (type === 'relation') {\n return !(attribute?.relationType ?? '').toLowerCase().includes('morph');\n }\n\n return !['json', 'dynamiczone', 'richtext', 'password', 'blocks'].includes(type) && !!type;\n};\n\nexport default checkIfAttributeIsDisplayable;\n","import get from 'lodash/get';\n\nconst createDefaultForm = (attributes, allComponentsSchema) => {\n return Object.keys(attributes).reduce((acc, current) => {\n const attribute = get(attributes, [current], {});\n const { default: defaultValue, component, type, required, min, repeatable } = attribute;\n\n if (defaultValue !== undefined) {\n acc[current] = defaultValue;\n }\n\n if (type === 'component') {\n const currentComponentSchema = allComponentsSchema?.[component]?.attributes ?? {};\n const currentComponentDefaultForm = createDefaultForm(\n currentComponentSchema,\n allComponentsSchema\n );\n\n if (required === true) {\n acc[current] = repeatable === true ? [] : currentComponentDefaultForm;\n }\n\n if (min && repeatable === true && required) {\n acc[current] = [];\n\n for (let i = 0; i < min; i += 1) {\n acc[current].push(currentComponentDefaultForm);\n }\n }\n }\n\n if (type === 'dynamiczone') {\n if (required === true) {\n acc[current] = [];\n }\n }\n\n return acc;\n }, {});\n};\n\nexport default createDefaultForm;\n","import get from 'lodash/get';\nimport omit from 'lodash/omit';\n\nconst formatLayoutToApi = ({ layouts, metadatas, ...rest }) => {\n const list = layouts.list.map((obj) => {\n if (obj.name) {\n return obj.name;\n }\n\n return obj;\n });\n const formattedMetadatas = Object.keys(metadatas).reduce((acc, current) => {\n const currentMetadatas = get(metadatas, [current], {});\n let editMetadatas = currentMetadatas.edit;\n\n if (editMetadatas.mainField) {\n editMetadatas = { ...editMetadatas, mainField: currentMetadatas.edit.mainField.name };\n }\n\n return {\n ...acc,\n [current]: {\n edit: editMetadatas,\n list: omit(currentMetadatas.list, ['mainField']),\n },\n };\n }, {});\n\n const edit = layouts.edit.map((row) =>\n row.map(({ name, size }) => ({\n name,\n size,\n }))\n );\n\n return {\n ...rest,\n layouts: { edit, list },\n metadatas: formattedMetadatas,\n };\n};\n\nexport default formatLayoutToApi;\n","const addSubjectToPermissionsArray = (array, uid) =>\n array.map((data) => ({ ...data, subject: uid }));\n\nconst generatePermissionsObject = (uid) => {\n const permissions = {\n create: [{ action: 'plugin::content-manager.explorer.create', subject: null }],\n delete: [{ action: 'plugin::content-manager.explorer.delete', subject: null }],\n publish: [{ action: 'plugin::content-manager.explorer.publish', subject: null }],\n read: [{ action: 'plugin::content-manager.explorer.read', subject: null }],\n update: [{ action: 'plugin::content-manager.explorer.update', subject: null }],\n };\n\n return Object.keys(permissions).reduce((acc, current) => {\n acc[current] = addSubjectToPermissionsArray(permissions[current], uid);\n\n return acc;\n }, {});\n};\n\nexport default generatePermissionsObject;\nexport { addSubjectToPermissionsArray };\n","import isNaN from 'lodash/isNaN';\n\nconst getFieldName = (stringName) =>\n stringName.split('.').filter((string) => isNaN(parseInt(string, 10)));\n\nexport default getFieldName;\n","const getMaxTempKey = (arr) => {\n if (arr.length === 0) {\n return -1;\n }\n\n const maxTempKey = Math.max.apply(\n Math,\n arr.map((o) => o.__temp_key__ ?? 0)\n );\n\n return Number.isNaN(maxTempKey) ? -1 : maxTempKey;\n};\n\nexport default getMaxTempKey;\n","import merge from 'lodash/merge';\nimport set from 'lodash/set';\n\nconst mergeMetasWithSchema = (data, schemas, mainSchemaKey) => {\n const findSchema = (refUid) => schemas.find((obj) => obj.uid === refUid);\n const merged = Object.assign({}, data);\n const mainUID = data[mainSchemaKey].uid;\n const mainSchema = findSchema(mainUID);\n\n // TODO\n // In order to merge all the layers of the schema objects, we used the Lodash function \"merge\".\n // If the destructuration is used, it will only merge the first layer of properties and overwrite the nested objects.\n set(merged, [mainSchemaKey], merge({}, mainSchema, data[mainSchemaKey]));\n\n Object.keys(data.components).forEach((compoUID) => {\n const compoSchema = findSchema(compoUID);\n\n set(merged, ['components', compoUID], { ...data.components[compoUID], ...compoSchema });\n });\n\n return merged;\n};\n\nexport default mergeMetasWithSchema;\n","import { getOtherInfos, getType } from '@strapi/helper-plugin';\nimport get from 'lodash/get';\n\nconst removePasswordFieldsFromData = (data, contentTypeSchema, componentSchema) => {\n const recursiveCleanData = (data, schema) => {\n return Object.keys(data).reduce((acc, current) => {\n const attrType = getType(schema, current);\n const value = get(data, current);\n const component = getOtherInfos(schema, [current, 'component']);\n const isRepeatable = getOtherInfos(schema, [current, 'repeatable']);\n\n if (attrType === 'dynamiczone') {\n acc[current] = value.map((componentValue) => {\n const subCleanedData = recursiveCleanData(\n componentValue,\n componentSchema[componentValue.__component]\n );\n\n return subCleanedData;\n });\n\n return acc;\n }\n\n if (attrType === 'component') {\n if (isRepeatable) {\n /* eslint-disable indent */\n acc[current] = value\n ? value.map((compoData) => {\n const subCleanedData = recursiveCleanData(compoData, componentSchema[component]);\n\n return subCleanedData;\n })\n : value;\n /* eslint-enable indent */\n } else {\n acc[current] = value ? recursiveCleanData(value, componentSchema[component]) : value;\n }\n\n return acc;\n }\n\n if (attrType !== 'password') {\n acc[current] = value;\n }\n\n return acc;\n }, {});\n };\n\n return recursiveCleanData(data, contentTypeSchema);\n};\n\nexport default removePasswordFieldsFromData;\n","/**\n * Retrieves the display name of an admin panel user\n * @typedef AdminUserNamesAttributes\n * @property {string} firstname\n * @property {string} lastname\n * @property {string} username\n * @property {string} email\n *\n * @type {(user: AdminUserNamesAttributes, formatMessage: import('react-intl').formatMessage) => string}\n */\nconst getDisplayName = ({ firstname, lastname, username, email }, formatMessage) => {\n if (username) {\n return username;\n }\n\n // firstname is not required if the user is created with a username\n if (firstname) {\n return formatMessage(\n {\n id: 'global.fullname',\n defaultMessage: '{firstname} {lastname}',\n },\n {\n firstname,\n lastname,\n }\n ).trim();\n }\n\n return email;\n};\n\nexport { getDisplayName };\n","import cloneDeep from 'lodash/cloneDeep';\nimport get from 'lodash/get';\nimport set from 'lodash/set';\n\nimport { mergeMetasWithSchema } from '../../../utils';\n\nconst getRelationModel = (targetModel, models) => models.find((model) => model.uid === targetModel);\n\nconst formatLayouts = (initialData, models) => {\n const data = createMetasSchema(initialData, models);\n\n const formattedCTEditLayout = formatLayoutWithMetas(data.contentType, models);\n const formattedListLayout = formatListLayoutWithMetas(data.contentType, data.components);\n\n set(data, ['contentType', 'layouts', 'edit'], formattedCTEditLayout);\n set(data, ['contentType', 'layouts', 'list'], formattedListLayout);\n\n Object.keys(data.components).forEach((componentUid) => {\n const formattedComponentEditLayout = formatLayoutWithMetas(\n data.components[componentUid],\n models\n );\n\n set(data, ['components', componentUid, 'layouts', 'edit'], formattedComponentEditLayout);\n });\n\n return data;\n};\n\nconst createMetasSchema = (initialData, models) => {\n const data = mergeMetasWithSchema(cloneDeep(initialData), models, 'contentType');\n const { components, contentType } = data;\n\n const formatMetadatas = (targetSchema) => {\n return Object.keys(targetSchema.metadatas).reduce((acc, current) => {\n const schema = get(targetSchema, ['attributes', current], {});\n let metadatas = targetSchema.metadatas[current];\n\n if (schema.type === 'relation') {\n const relationModel = getRelationModel(schema.targetModel, models);\n const mainFieldName = metadatas.edit.mainField;\n const mainField = {\n name: mainFieldName,\n schema: get(relationModel, ['attributes', mainFieldName]),\n };\n\n metadatas = {\n list: {\n ...metadatas.list,\n mainField,\n },\n edit: {\n ...metadatas.edit,\n mainField,\n },\n };\n }\n\n acc[current] = metadatas;\n\n return acc;\n }, {});\n };\n\n set(data, ['contentType', 'metadatas'], formatMetadatas(contentType));\n\n Object.keys(components).forEach((compoUID) => {\n const currentCompo = components[compoUID];\n const updatedMetas = formatMetadatas(currentCompo);\n\n set(data, ['components', compoUID, 'metadatas'], updatedMetas);\n });\n\n return data;\n};\n\nconst formatLayoutWithMetas = (contentTypeConfiguration, models) =>\n contentTypeConfiguration.layouts.edit.reduce((acc, current) => {\n const row = current.map((attribute) => {\n const fieldSchema = get(contentTypeConfiguration, ['attributes', attribute.name], {});\n\n const data = {\n ...attribute,\n fieldSchema,\n metadatas: get(contentTypeConfiguration, ['metadatas', attribute.name, 'edit'], {}),\n };\n\n if (fieldSchema.type === 'relation') {\n const targetModelSchema = getRelationModel(fieldSchema.targetModel, models);\n const targetModelPluginOptions = targetModelSchema.pluginOptions || {};\n\n set(data, 'targetModelPluginOptions', targetModelPluginOptions);\n set(data, 'queryInfos', {\n shouldDisplayRelationLink: shouldDisplayRelationLink(\n contentTypeConfiguration,\n attribute.name,\n models\n ),\n });\n }\n\n return data;\n });\n\n acc.push(row);\n\n return acc;\n }, []);\n\nconst formatListLayoutWithMetas = (contentTypeConfiguration, components) => {\n const formatted = contentTypeConfiguration.layouts.list.reduce((acc, current) => {\n const fieldSchema = get(contentTypeConfiguration, ['attributes', current], {});\n const metadatas = get(contentTypeConfiguration, ['metadatas', current, 'list'], {});\n\n const type = fieldSchema.type;\n\n if (type === 'relation') {\n acc.push({ key: `__${current}_key__`, name: current, fieldSchema, metadatas });\n\n return acc;\n }\n\n if (type === 'component') {\n const component = components[fieldSchema.component];\n const mainFieldName = component.settings.mainField;\n const mainFieldAttribute = component.attributes[mainFieldName];\n\n acc.push({\n key: `__${current}_key__`,\n name: current,\n fieldSchema,\n metadatas: {\n ...metadatas,\n mainField: {\n ...mainFieldAttribute,\n name: mainFieldName,\n },\n },\n });\n\n return acc;\n }\n\n acc.push({ key: `__${current}_key__`, name: current, fieldSchema, metadatas });\n\n return acc;\n }, []);\n\n return formatted;\n};\n\nconst shouldDisplayRelationLink = (contentTypeConfiguration, fieldName, models) => {\n const targetModel = get(contentTypeConfiguration, ['attributes', fieldName, 'targetModel'], '');\n\n return getDisplayedModels(models).includes(targetModel);\n};\n\nconst getDisplayedModels = (models) =>\n models.filter((model) => model.isDisplayed).map(({ uid }) => uid);\n\nexport default formatLayouts;\nexport {\n formatLayoutWithMetas,\n formatListLayoutWithMetas,\n getDisplayedModels,\n shouldDisplayRelationLink,\n};\n","import { useCallback, useEffect, useMemo, useReducer, useRef } from 'react';\n\nimport { useFetchClient } from '@strapi/helper-plugin';\nimport axios from 'axios';\nimport { shallowEqual, useSelector } from 'react-redux';\n\nimport { makeSelectModelAndComponentSchemas } from '../../pages/App/selectors';\n\nimport reducer, { initialState } from './reducer';\nimport formatLayouts from './utils/formatLayouts';\n\nconst useFetchContentTypeLayout = (contentTypeUID) => {\n const [{ error, isLoading, layout, layouts }, dispatch] = useReducer(reducer, initialState);\n const schemasSelector = useMemo(makeSelectModelAndComponentSchemas, []);\n const { schemas } = useSelector((state) => schemasSelector(state), shallowEqual);\n const isMounted = useRef(true);\n const { get } = useFetchClient();\n\n const getData = useCallback(\n async (uid, source) => {\n if (layouts[uid]) {\n dispatch({ type: 'SET_LAYOUT_FROM_STATE', uid });\n\n return;\n }\n dispatch({ type: 'GET_DATA' });\n\n try {\n const {\n data: { data },\n } = await get(`/content-manager/content-types/${uid}/configuration`, {\n cancelToken: source.token,\n });\n\n dispatch({\n type: 'GET_DATA_SUCCEEDED',\n data: formatLayouts(data, schemas),\n });\n } catch (error) {\n if (axios.isCancel(error)) {\n return;\n }\n if (isMounted.current) {\n console.error(error);\n }\n\n if (isMounted.current) {\n dispatch({ type: 'GET_DATA_ERROR', error });\n }\n }\n },\n [layouts, schemas, get]\n );\n\n useEffect(() => {\n return () => {\n isMounted.current = false;\n };\n }, []);\n\n useEffect(() => {\n const CancelToken = axios.CancelToken;\n const source = CancelToken.source();\n\n getData(contentTypeUID, source);\n\n return () => {\n source.cancel('Operation canceled by the user.');\n };\n }, [contentTypeUID, getData]);\n\n const updateLayout = useCallback(\n (data) => {\n dispatch({\n type: 'UPDATE_LAYOUT',\n newLayout: formatLayouts(data, schemas),\n });\n },\n [schemas]\n );\n\n return {\n error,\n isLoading,\n layout,\n updateLayout,\n };\n};\n\nexport default useFetchContentTypeLayout;\n","const selectMenuLinks = (state) => {\n const cmState = state['content-manager_app'];\n\n return cmState.collectionTypeLinks;\n};\n\nexport default selectMenuLinks;\n","import get from 'lodash/get';\nimport isObject from 'lodash/isObject';\nimport { parse, stringify } from 'qs';\n\n/**\n * Updates the leafs of the first argument\n * @param {object} initialParams\n * @param {object} params\n * @returns string\n */\nconst mergeParams = (initialParams, params) => {\n return Object.keys(initialParams).reduce((acc, current) => {\n const intialValue = initialParams[current];\n const nextValue = get(params, [current], intialValue);\n\n if (isObject(intialValue)) {\n return { ...acc, [current]: mergeParams(intialValue, nextValue) };\n }\n\n acc[current] = nextValue;\n\n return acc;\n }, {});\n};\n\nconst getRedirectionLink = (links, slug, rawQuery) => {\n const matchingLink = links.find(({ to }) => to.includes(slug));\n\n if (!matchingLink) {\n return '/';\n }\n\n const { to, search } = matchingLink;\n const searchQueryParams = parse(search);\n const currentQueryParams = parse(rawQuery.substring(1));\n\n const mergedParams = mergeParams(searchQueryParams, currentQueryParams);\n\n const link = `${to}?${stringify(mergedParams, { encode: false })}`;\n\n return link;\n};\n\nexport default getRedirectionLink;\nexport { mergeParams };\n","import { useQueryParams } from '@strapi/helper-plugin';\nimport { useSelector } from 'react-redux';\n\nimport selectMenuLinks from './selectors';\nimport getRedirectionLink from './utils/getRedirectionLink';\n\nconst useFindRedirectionLink = (slug) => {\n const [{ rawQuery }] = useQueryParams();\n const collectionTypesMenuLinks = useSelector(selectMenuLinks);\n const redirectionLink = getRedirectionLink(collectionTypesMenuLinks, slug, rawQuery);\n\n return redirectionLink;\n};\n\nexport default useFindRedirectionLink;\n","import { parse, stringify } from 'qs';\nimport { useLocation } from 'react-router-dom';\n\nconst usePluginsQueryParams = () => {\n const { search } = useLocation();\n const query = search ? parse(search.substring(1)) : {};\n\n return query.plugins ? stringify({ plugins: query.plugins }, { encode: false }) : '';\n};\n\nexport default usePluginsQueryParams;\n","import { useEffect, useRef } from 'react';\n\n/**\n * @type {<T>(value: T) => T | undefined}\n */\nexport const usePrev = (value) => {\n const ref = useRef();\n\n useEffect(() => {\n ref.current = value;\n }, [value]);\n\n return ref.current;\n};\n","import { RESET_PERMISSIONS, SET_PERMISSIONS } from './constants';\n\nexport const setPermissions = (permissions, plugins, containerName) => {\n return {\n type: SET_PERMISSIONS,\n permissions,\n __meta__: {\n plugins,\n containerName,\n },\n };\n};\n\nexport const resetPermissions = () => ({ type: RESET_PERMISSIONS });\n","export const selectPermissions = (state) => state['content-manager_rbacManager'].permissions;\n\nexport const selectCollectionTypePermissions = (state) =>\n state.rbacProvider.collectionTypesRelatedPermissions;\n","import { useEffect } from 'react';\n\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { resetPermissions, setPermissions } from './actions';\nimport { selectCollectionTypePermissions, selectPermissions } from './selectors';\n\nconst useSyncRbac = (query, collectionTypeUID, containerName = 'listView') => {\n const dispatch = useDispatch();\n\n const collectionTypesRelatedPermissions = useSelector(selectCollectionTypePermissions);\n const permissions = useSelector(selectPermissions);\n\n const relatedPermissions = collectionTypesRelatedPermissions[collectionTypeUID];\n\n useEffect(() => {\n if (relatedPermissions) {\n dispatch(setPermissions(relatedPermissions, query ? query.plugins : null, containerName));\n\n return () => {\n dispatch(resetPermissions());\n };\n }\n\n return () => {};\n }, [relatedPermissions, dispatch, query, containerName]);\n\n // Check if the permissions are related to the current collectionTypeUID\n const isPermissionMismatch =\n permissions?.some((permission) => permission.subject !== collectionTypeUID) ?? true;\n\n return {\n isValid: permissions && !isPermissionMismatch,\n permissions,\n };\n};\n\nexport default useSyncRbac;\n","import React from 'react';\n\nimport PropTypes from 'prop-types';\n\nexport const LayoutDndContext = React.createContext();\n\nexport function LayoutDndProvider({\n attributes,\n buttonData,\n children,\n goTo,\n layout,\n metadatas,\n moveItem,\n moveRow,\n onAddData,\n relationsLayout,\n removeField,\n selectedItemName,\n setEditFieldToSelect,\n ...rest\n}) {\n return (\n <LayoutDndContext.Provider\n value={{\n attributes,\n buttonData,\n goTo,\n layout,\n metadatas,\n moveItem,\n moveRow,\n onAddData,\n relationsLayout,\n removeField,\n selectedItemName,\n setEditFieldToSelect,\n ...rest,\n }}\n >\n {children}\n </LayoutDndContext.Provider>\n );\n}\n\nLayoutDndProvider.defaultProps = {\n attributes: {},\n buttonData: [],\n goTo() {},\n layout: [],\n metadatas: {},\n moveItem() {},\n moveRow() {},\n onAddData() {},\n relationsLayout: [],\n removeField() {},\n selectedItemName: null,\n setEditFieldToSelect() {},\n};\n\nLayoutDndProvider.propTypes = {\n attributes: PropTypes.object,\n buttonData: PropTypes.array,\n children: PropTypes.node.isRequired,\n goTo: PropTypes.func,\n layout: PropTypes.array,\n metadatas: PropTypes.object,\n moveItem: PropTypes.func,\n moveRow: PropTypes.func,\n onAddData: PropTypes.func,\n relationsLayout: PropTypes.array,\n removeField: PropTypes.func,\n selectedItemName: PropTypes.string,\n setEditFieldToSelect: PropTypes.func,\n};\n","import * as React from 'react';\n\nimport { LayoutDndContext } from '../components/LayoutDndProvider';\n\nexport function useLayoutDnd() {\n return React.useContext(LayoutDndContext);\n}\n","/**\n *\n * EditViewButton\n *\n */\n\nimport React from 'react';\n\nimport { CheckPermissions, LinkButton, useTracking } from '@strapi/helper-plugin';\nimport { Pencil } from '@strapi/icons';\nimport get from 'lodash/get';\nimport { useIntl } from 'react-intl';\n\nimport getTrad from '../../../utils/getTrad';\nimport { useLayoutDnd } from '../hooks/useLayoutDnd';\n\nconst permissions = [{ action: 'plugin::content-type-builder.read', subject: null }];\n\n// Create link from content-type-builder to content-manager\nconst LinkToCTB = () => {\n const { trackUsage } = useTracking();\n const { formatMessage } = useIntl();\n const { slug, modifiedData, isContentTypeView } = useLayoutDnd();\n const type = isContentTypeView ? 'content-types' : 'components';\n\n const baseUrl = `/plugins/content-type-builder/${\n type === 'content-types' ? type : 'component-categories'\n }`;\n const category = get(modifiedData, 'category', '');\n\n const suffixUrl = type === 'content-types' ? slug : `${category}/${slug}`;\n\n const handleClick = () => {\n trackUsage('willEditEditLayout');\n };\n\n if (slug === 'strapi::administrator') {\n return null;\n }\n\n return (\n <CheckPermissions permissions={permissions}>\n <LinkButton\n to={`${baseUrl}/${suffixUrl}`}\n onClick={handleClick}\n size=\"S\"\n startIcon={<Pencil />}\n variant=\"secondary\"\n >\n {formatMessage({\n id: getTrad(`edit-settings-view.link-to-ctb.${type}`),\n defaultMessage: 'Edit the content type',\n })}\n </LinkButton>\n </CheckPermissions>\n );\n};\n\nexport default LinkToCTB;\n","import React from 'react';\n\nimport { Box, Flex, Grid, GridItem, Typography } from '@strapi/design-system';\nimport { Link } from '@strapi/helper-plugin';\nimport { Cog } from '@strapi/icons';\nimport get from 'lodash/get';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport getTrad from '../../../utils/getTrad';\nimport { useLayoutDnd } from '../hooks/useLayoutDnd';\n\nconst ComponentFieldList = ({ componentUid }) => {\n const { componentLayouts } = useLayoutDnd();\n const { formatMessage } = useIntl();\n const componentData = get(componentLayouts, [componentUid], {});\n const componentLayout = get(componentData, ['layouts', 'edit'], []);\n\n return (\n <Box padding={3}>\n {componentLayout.map((row, index) => (\n // eslint-disable-next-line react/no-array-index-key\n <Grid gap={4} key={index}>\n {row.map((rowContent) => (\n <GridItem key={rowContent.name} col={rowContent.size}>\n <Box paddingTop={2}>\n <Flex\n alignItems=\"center\"\n background=\"neutral0\"\n paddingLeft={3}\n paddingRight={3}\n height={`${32 / 16}rem`}\n hasRadius\n borderColor=\"neutral200\"\n >\n <Typography textColor=\"neutral800\">{rowContent.name}</Typography>\n </Flex>\n </Box>\n </GridItem>\n ))}\n </Grid>\n ))}\n <Box paddingTop={2}>\n <Link\n startIcon={<Cog />}\n to={`/content-manager/components/${componentUid}/configurations/edit`}\n >\n {formatMessage({\n id: getTrad('components.FieldItem.linkToComponentLayout'),\n defaultMessage: \"Set the component's layout\",\n })}\n </Link>\n </Box>\n </Box>\n );\n};\n\nComponentFieldList.propTypes = {\n componentUid: PropTypes.string.isRequired,\n};\n\nexport default ComponentFieldList;\n","import * as Icons from '@strapi/icons';\n\nconst COMPONENT_ICONS = {\n alien: Icons.Alien,\n apps: Icons.Apps,\n archive: Icons.Archive,\n arrowDown: Icons.ArrowDown,\n arrowLeft: Icons.ArrowLeft,\n arrowRight: Icons.ArrowRight,\n arrowUp: Icons.ArrowUp,\n attachment: Icons.Attachment,\n bell: Icons.Bell,\n bold: Icons.Bold,\n book: Icons.Book,\n briefcase: Icons.Briefcase,\n brush: Icons.Brush,\n bulletList: Icons.BulletList,\n calendar: Icons.Calendar,\n car: Icons.Car,\n cast: Icons.Cast,\n chartBubble: Icons.ChartBubble,\n chartCircle: Icons.ChartCircle,\n chartPie: Icons.ChartPie,\n check: Icons.Check,\n clock: Icons.Clock,\n cloud: Icons.Cloud,\n code: Icons.Code,\n cog: Icons.Cog,\n collapse: Icons.Collapse,\n command: Icons.Command,\n connector: Icons.Connector,\n crop: Icons.Crop,\n crown: Icons.Crown,\n cube: Icons.Cube,\n cup: Icons.Cup,\n cursor: Icons.Cursor,\n dashboard: Icons.Dashboard,\n database: Icons.Database,\n discuss: Icons.Discuss,\n doctor: Icons.Doctor,\n earth: Icons.Earth,\n emotionHappy: Icons.EmotionHappy,\n emotionUnhappy: Icons.EmotionUnhappy,\n envelop: Icons.Envelop,\n exit: Icons.Exit,\n expand: Icons.Expand,\n eye: Icons.Eye,\n feather: Icons.Feather,\n file: Icons.File,\n fileError: Icons.FileError,\n filePdf: Icons.FilePdf,\n filter: Icons.Filter,\n folder: Icons.Folder,\n gate: Icons.Gate,\n gift: Icons.Gift,\n globe: Icons.Globe,\n grid: Icons.Grid,\n handHeart: Icons.HandHeart,\n hashtag: Icons.Hashtag,\n headphone: Icons.Headphone,\n heart: Icons.Heart,\n house: Icons.House,\n information: Icons.Information,\n italic: Icons.Italic,\n key: Icons.Key,\n landscape: Icons.Landscape,\n layer: Icons.Layer,\n layout: Icons.Layout,\n lightbulb: Icons.Lightbulb,\n link: Icons.Link,\n lock: Icons.Lock,\n magic: Icons.Magic,\n manyToMany: Icons.ManyToMany,\n manyToOne: Icons.ManyToOne,\n manyWays: Icons.ManyWays,\n medium: Icons.Medium,\n message: Icons.Message,\n microphone: Icons.Microphone,\n monitor: Icons.Monitor,\n moon: Icons.Moon,\n music: Icons.Music,\n oneToMany: Icons.OneToMany,\n oneToOne: Icons.OneToOne,\n oneWay: Icons.OneWay,\n paint: Icons.Paint,\n paintBrush: Icons.PaintBrush,\n paperPlane: Icons.PaperPlane,\n pencil: Icons.Pencil,\n phone: Icons.Phone,\n picture: Icons.Picture,\n pin: Icons.Pin,\n pinMap: Icons.PinMap,\n plane: Icons.Plane,\n play: Icons.Play,\n plus: Icons.Plus,\n priceTag: Icons.PriceTag,\n puzzle: Icons.Puzzle,\n question: Icons.Question,\n quote: Icons.Quote,\n refresh: Icons.Refresh,\n repeat: Icons.Repeat,\n restaurant: Icons.Restaurant,\n rocket: Icons.Rocket,\n rotate: Icons.Rotate,\n scissors: Icons.Scissors,\n search: Icons.Search,\n seed: Icons.Seed,\n server: Icons.Server,\n shield: Icons.Shield,\n shirt: Icons.Shirt,\n shoppingCart: Icons.ShoppingCart,\n slideshow: Icons.Slideshow,\n stack: Icons.Stack,\n star: Icons.Star,\n store: Icons.Store,\n strikeThrough: Icons.StrikeThrough,\n sun: Icons.Sun,\n television: Icons.Television,\n thumbDown: Icons.ThumbDown,\n thumbUp: Icons.ThumbUp,\n train: Icons.Train,\n twitter: Icons.Twitter,\n typhoon: Icons.Typhoon,\n underline: Icons.Underline,\n user: Icons.User,\n volumeMute: Icons.VolumeMute,\n volumeUp: Icons.VolumeUp,\n walk: Icons.Walk,\n wheelchair: Icons.Wheelchair,\n write: Icons.Write,\n};\n\nexport { COMPONENT_ICONS };\n","import React from 'react';\n\nimport { Flex, Icon } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\n\nimport { COMPONENT_ICONS } from './constants';\n\nexport function ComponentIcon({ showBackground = true, size = 'M', icon }) {\n return (\n <Flex\n alignItems=\"center\"\n background={showBackground ? 'neutral200' : null}\n justifyContent=\"center\"\n size={size}\n showBackground={showBackground}\n height={size === 'S' ? 5 : 8}\n width={size === 'S' ? 5 : 8}\n color=\"neutral600\"\n borderRadius={showBackground ? '50%' : 0}\n >\n <Icon\n as={COMPONENT_ICONS[icon] || COMPONENT_ICONS.cube}\n height={size === 'S' ? 3 : 5}\n width={size === 'S' ? 3 : 5}\n />\n </Flex>\n );\n}\n\nComponentIcon.defaultProps = {\n showBackground: true,\n size: 'M',\n icon: 'Cube',\n};\n\nComponentIcon.propTypes = {\n showBackground: PropTypes.bool,\n size: PropTypes.string,\n icon: PropTypes.string,\n};\n","import React from 'react';\n\nimport { Box, Flex, Typography } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\nimport { Link } from 'react-router-dom';\nimport styled from 'styled-components';\n\nimport { ComponentIcon } from '../../../components/ComponentIcon';\nimport { useLayoutDnd } from '../hooks/useLayoutDnd';\n\nconst CustomLink = styled(Flex)`\n text-decoration: none;\n\n &:focus,\n &:hover {\n ${({ theme }) => `\n background-color: ${theme.colors.primary100};\n border-color: ${theme.colors.primary200};\n\n ${Typography} {\n color: ${theme.colors.primary600};\n }\n `}\n\n /* > ComponentIcon */\n > div:first-child {\n background: ${({ theme }) => theme.colors.primary200};\n color: ${({ theme }) => theme.colors.primary600};\n\n svg {\n path {\n fill: ${({ theme }) => theme.colors.primary600};\n }\n }\n }\n }\n`;\n\nconst DynamicZoneList = ({ components }) => {\n const { componentLayouts } = useLayoutDnd();\n\n return (\n <Flex gap={2} overflow=\"scroll hidden\" padding={3}>\n {components.map((componentUid) => (\n <CustomLink\n hasRadius\n background=\"neutral0\"\n justifyContent=\"center\"\n alignItems=\"center\"\n height={`${84 / 16}rem`}\n minWidth={`${140 / 16}rem`}\n key={componentUid}\n padding={2}\n direction=\"column\"\n borderColor=\"neutral200\"\n as={Link}\n to={`/content-manager/components/${componentUid}/configurations/edit`}\n >\n <ComponentIcon icon={componentLayouts?.[componentUid]?.info?.icon} />\n\n <Box paddingTop={1}>\n <Typography fontSize={1} textColor=\"neutral600\" fontWeight=\"bold\">\n {componentLayouts?.[componentUid]?.info?.displayName ?? ''}\n </Typography>\n </Box>\n </CustomLink>\n ))}\n </Flex>\n );\n};\n\nDynamicZoneList.propTypes = {\n components: PropTypes.arrayOf(PropTypes.string).isRequired,\n};\n\nexport default DynamicZoneList;\n","import React from 'react';\n\nimport { Box, Flex, IconButton, Typography } from '@strapi/design-system';\nimport { Pencil, Trash } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport { getTrad } from '../../../utils';\n\nimport ComponentFieldList from './ComponentFieldList';\nimport DynamicZoneList from './DynamicZoneList';\n\nconst CustomIconButton = styled(IconButton)`\n background-color: transparent;\n path {\n fill: ${({ theme }) => theme.colors.neutral600};\n }\n`;\n\nconst FieldButtonContent = ({ attribute, onEditField, onDeleteField, children }) => {\n const { formatMessage } = useIntl();\n\n return (\n <Box overflow=\"hidden\" width=\"100%\">\n <Flex paddingLeft={3} alignItems=\"center\" justifyContent=\"space-between\">\n <Typography fontWeight=\"semiBold\" textColor=\"neutral800\" ellipsis>\n {children}\n </Typography>\n <Flex>\n <CustomIconButton\n label={formatMessage(\n {\n id: getTrad('containers.ListSettingsView.modal-form.edit-label'),\n defaultMessage: `Edit {fieldName}`,\n },\n { fieldName: children }\n )}\n onClick={onEditField}\n icon={<Pencil />}\n noBorder\n />\n <CustomIconButton\n label={formatMessage(\n {\n id: 'global.delete-target',\n defaultMessage: `Delete {target}`,\n },\n {\n target: children,\n }\n )}\n data-testid=\"delete-field\"\n onClick={onDeleteField}\n icon={<Trash />}\n noBorder\n />\n </Flex>\n </Flex>\n {attribute?.type === 'component' && <ComponentFieldList componentUid={attribute.component} />}\n {attribute?.type === 'dynamiczone' && <DynamicZoneList components={attribute.components} />}\n </Box>\n );\n};\n\nFieldButtonContent.defaultProps = {\n attribute: undefined,\n};\n\nFieldButtonContent.propTypes = {\n attribute: PropTypes.shape({\n components: PropTypes.array,\n component: PropTypes.string,\n type: PropTypes.string,\n }),\n onEditField: PropTypes.func.isRequired,\n onDeleteField: PropTypes.func.isRequired,\n children: PropTypes.string.isRequired,\n};\n\nexport default FieldButtonContent;\n","import React, { useEffect, useRef, useState } from 'react';\n\nimport { Box, Flex, GridItem } from '@strapi/design-system';\nimport { Drag } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useDrag, useDrop } from 'react-dnd';\nimport { getEmptyImage } from 'react-dnd-html5-backend';\nimport styled from 'styled-components';\n\nimport { ItemTypes } from '../../../utils';\nimport { useLayoutDnd } from '../hooks/useLayoutDnd';\n\nimport FieldButtonContent from './FieldButtonContent';\n\nconst Wrapper = styled(Flex)`\n position: relative;\n ${({ isFirst, isLast, hasHorizontalPadding }) => {\n if (isFirst) {\n return `\n padding-right: 4px;\n `;\n }\n if (isLast) {\n return `\n padding-left: 4px;\n `;\n }\n\n if (hasHorizontalPadding) {\n return `\n padding: 0 4px;\n `;\n }\n\n return '';\n }}\n ${({ showRightCarret, showLeftCarret, theme }) => {\n if (showRightCarret) {\n return `\n &:after {\n content: '';\n position: absolute;\n right: -1px;\n background-color: ${theme.colors.primary600};\n width: 2px;\n height: 100%;\n align-self: stretch;\n z-index: 1;\n }\n `;\n }\n\n if (showLeftCarret) {\n return `\n &:before {\n content: '';\n position: absolute;\n left: -1px;\n background-color: ${theme.colors.primary600};\n width: 2px;\n height: 100%;\n align-self: stretch;\n z-index: 1;\n }\n `;\n }\n\n return '';\n }};\n`;\nconst CustomDragIcon = styled(Drag)`\n height: ${12 / 16}rem;\n width: ${12 / 16}rem;\n path {\n fill: ${({ theme }) => theme.colors.neutral600};\n }\n`;\nconst CustomFlex = styled(Flex)`\n display: ${({ dragStart }) => (dragStart ? 'none' : 'flex')};\n opacity: ${({ isDragging, isFullSize, isHidden }) => {\n if (isDragging && !isFullSize) {\n return 0.2;\n }\n\n if ((isDragging && isFullSize) || isHidden) {\n return 0;\n }\n\n return 1;\n }};\n`;\nconst DragButton = styled(Flex)`\n cursor: all-scroll;\n border-right: 1px solid ${({ theme }) => theme.colors.neutral200};\n`;\n\nconst DisplayedFieldButton = ({\n attribute,\n children,\n index,\n lastIndex,\n moveItem,\n moveRow,\n name,\n onDeleteField,\n onEditField,\n rowIndex,\n size,\n}) => {\n const [dragStart, setDragStart] = useState(false);\n const isHidden = name === '_TEMP_';\n const { setIsDraggingSibling } = useLayoutDnd();\n const isFullSize = size === 12;\n\n const dragRef = useRef(null);\n const dropRef = useRef(null);\n const [{ clientOffset, isOver }, drop] = useDrop({\n accept: ItemTypes.EDIT_FIELD,\n hover(item, monitor) {\n if (!dropRef.current) {\n return;\n }\n\n // We use the hover only to reorder full size items\n if (item.size !== 12) {\n return;\n }\n\n const dragIndex = monitor.getItem().index;\n const hoverIndex = index;\n const dragRow = monitor.getItem().rowIndex;\n const targetRow = rowIndex;\n\n // Don't replace item with themselves\n if (dragIndex === hoverIndex && dragRow === targetRow) {\n return;\n }\n\n // Determine rectangle on screen\n const hoverBoundingRect = dropRef.current.getBoundingClientRect();\n\n // Get vertical middle\n const hoverMiddleY = (hoverBoundingRect.bottom - hoverBoundingRect.top) / 2;\n // Determine mouse position\n const clientOffset = monitor.getClientOffset();\n\n // Get pixels to the top\n const hoverClientY = clientOffset.y - hoverBoundingRect.top;\n\n // Only perform the move when the mouse has crossed half of the items height\n // When dragging downwards, only move when the cursor is below 50%\n // When dragging upwards, only move when the cursor is above 50%\n\n // Dragging downwards\n if (dragRow < targetRow && hoverClientY < hoverMiddleY) {\n return;\n }\n\n // Dragging upwards\n if (dragRow > targetRow && hoverClientY > hoverMiddleY) {\n return;\n }\n\n moveRow(dragRow, targetRow);\n\n item.rowIndex = targetRow;\n item.itemIndex = hoverIndex;\n },\n drop(item, monitor) {\n if (!dropRef.current) {\n return;\n }\n\n const dragIndex = monitor.getItem().index;\n const hoverIndex = index;\n const dragRow = monitor.getItem().rowIndex;\n const targetRow = rowIndex;\n\n // Don't reorder on drop for full size elements since it is already done in the hover\n if (item.size === 12) {\n return;\n }\n\n // Don't replace item with themselves\n if (dragIndex === hoverIndex && dragRow === targetRow) {\n return;\n }\n\n // Determine rectangle on screen\n const hoverBoundingRect = dropRef.current.getBoundingClientRect();\n\n // Scroll window if mouse near vertical edge(100px)\n\n // Horizontal Check --\n if (\n Math.abs(monitor.getClientOffset().x - hoverBoundingRect.left) >\n hoverBoundingRect.width / 1.8\n ) {\n moveItem(dragIndex, hoverIndex + 1, dragRow, targetRow);\n\n item.itemIndex = hoverIndex + 1;\n item.rowIndex = targetRow;\n\n return;\n }\n\n // Vertical Check |\n\n // Time to actually perform the action\n moveItem(dragIndex, hoverIndex, dragRow, targetRow);\n // Note: we're mutating the monitor item here!\n // Generally it's better to avoid mutations,\n // but it's good here for the sake of performance\n // to avoid expensive index searches.\n\n item.itemIndex = hoverIndex;\n item.rowIndex = targetRow;\n },\n collect: (monitor) => ({\n canDrop: monitor.canDrop(),\n clientOffset: monitor.getClientOffset(),\n isOver: monitor.isOver(),\n isOverCurrent: monitor.isOver({ shallow: true }),\n itemType: monitor.getItemType(),\n }),\n });\n const [{ isDragging, getItem }, drag, dragPreview] = useDrag({\n type: ItemTypes.EDIT_FIELD,\n item() {\n setIsDraggingSibling(true);\n\n return {\n index,\n labelField: children,\n rowIndex,\n name,\n size,\n };\n },\n canDrag() {\n // Each row of the layout has a max size of 12 (based on bootstrap grid system)\n // So in order to offer a better drop zone we add the _TEMP_ div to complete the remaining substract (12 - existing)\n // Those divs cannot be dragged\n // If we wanted to offer the ability to create new lines in the layout (which will come later)\n // We will need to add a 12 size _TEMP_ div to offer a drop target between each existing row.\n return name !== '_TEMP_';\n },\n collect: (monitor) => ({\n isDragging: monitor.isDragging(),\n getItem: monitor.getItem(),\n }),\n end() {\n setIsDraggingSibling(false);\n },\n });\n\n // Remove the default preview when the item is being dragged\n // The preview is handled by the DragLayer\n useEffect(() => {\n dragPreview(getEmptyImage(), { captureDraggingState: true });\n }, [dragPreview]);\n\n // Create the refs\n // We need 1 for the drop target\n // 1 for the drag target\n const refs = {\n dragRef: drag(dragRef),\n dropRef: drop(dropRef),\n };\n\n let showLeftCarret = false;\n let showRightCarret = false;\n\n if (dropRef.current && clientOffset) {\n const hoverBoundingRect = dropRef.current.getBoundingClientRect();\n\n showLeftCarret =\n isOver &&\n getItem.size !== 12 &&\n Math.abs(clientOffset.x - hoverBoundingRect.left) < hoverBoundingRect.width / 2;\n showRightCarret =\n isOver &&\n getItem.size !== 12 &&\n Math.abs(clientOffset.x - hoverBoundingRect.left) > hoverBoundingRect.width / 2;\n\n if (name === '_TEMP_') {\n showLeftCarret = isOver && getItem.size !== 12;\n showRightCarret = false;\n }\n }\n\n const getHeight = () => {\n if (attribute && isFullSize) {\n return `${74 / 16}rem`;\n }\n\n return `${32 / 16}rem`;\n };\n\n const isFirst = index === 0 && !isFullSize;\n const isLast = index === lastIndex && !isFullSize;\n const hasHorizontalPadding = index !== 0 && !isFullSize;\n\n return (\n <GridItem col={size}>\n <Wrapper\n ref={refs.dropRef}\n showLeftCarret={showLeftCarret}\n showRightCarret={showRightCarret}\n isFirst={isFirst}\n isLast={isLast}\n hasHorizontalPadding={hasHorizontalPadding}\n onDrag={() => {\n if (isFullSize && !dragStart) {\n setDragStart(true);\n }\n }}\n onDragEnd={() => {\n if (isFullSize) {\n setDragStart(false);\n }\n }}\n >\n {dragStart && isFullSize && (\n <Box\n // style={{ display: isDragging ? 'block' : 'none' }}\n width=\"100%\"\n height=\"2px\"\n background=\"primary600\"\n />\n )}\n <CustomFlex\n width={isFullSize && dragStart ? 0 : '100%'}\n borderColor=\"neutral150\"\n hasRadius\n background=\"neutral100\"\n minHeight={getHeight()}\n alignItems=\"stretch\"\n isDragging={isDragging}\n dragStart={dragStart}\n isFullSize={isFullSize}\n isHidden={isHidden}\n >\n <DragButton\n as=\"span\"\n type=\"button\"\n ref={refs.dragRef}\n onClick={(e) => e.stopPropagation()}\n alignItems=\"center\"\n paddingLeft={3}\n paddingRight={3}\n // Disable the keyboard navigation since the drag n drop isn't accessible with the keyboard for the moment\n tabIndex={-1}\n >\n <CustomDragIcon />\n </DragButton>\n {!isHidden && (\n <FieldButtonContent\n attribute={attribute}\n onEditField={onEditField}\n onDeleteField={onDeleteField}\n >\n {children}\n </FieldButtonContent>\n )}\n </CustomFlex>\n </Wrapper>\n </GridItem>\n );\n};\n\nDisplayedFieldButton.defaultProps = {\n attribute: undefined,\n};\n\nDisplayedFieldButton.propTypes = {\n attribute: PropTypes.shape({\n components: PropTypes.array,\n component: PropTypes.string,\n type: PropTypes.string,\n }),\n children: PropTypes.string.isRequired,\n index: PropTypes.number.isRequired,\n moveItem: PropTypes.func.isRequired,\n moveRow: PropTypes.func.isRequired,\n name: PropTypes.string.isRequired,\n onDeleteField: PropTypes.func.isRequired,\n onEditField: PropTypes.func.isRequired,\n rowIndex: PropTypes.number.isRequired,\n lastIndex: PropTypes.number.isRequired,\n size: PropTypes.number.isRequired,\n};\n\nexport default DisplayedFieldButton;\n","import React from 'react';\n\nimport get from 'lodash/get';\nimport PropTypes from 'prop-types';\n\nimport { useLayoutDnd } from '../hooks/useLayoutDnd';\n\nimport DisplayedFieldButton from './DisplayedFieldButton';\n\nconst RowItemsLayout = ({ rowItem, onRemoveField, rowId, rowIndex, index, lastIndex }) => {\n const { setEditFieldToSelect, attributes, modifiedData, moveRow, moveItem } = useLayoutDnd();\n const attribute = get(attributes, [rowItem.name], {});\n const attributeLabel = get(modifiedData, ['metadatas', rowItem.name, 'edit', 'label'], '');\n\n return (\n <DisplayedFieldButton\n onEditField={() => setEditFieldToSelect(rowItem.name)}\n onDeleteField={() => onRemoveField(rowId, index)}\n attribute={attribute}\n index={index}\n lastIndex={lastIndex}\n rowIndex={rowIndex}\n name={rowItem.name}\n size={rowItem.size}\n moveRow={moveRow}\n moveItem={moveItem}\n >\n {attributeLabel || rowItem.name}\n </DisplayedFieldButton>\n );\n};\n\nRowItemsLayout.propTypes = {\n index: PropTypes.number.isRequired,\n lastIndex: PropTypes.number.isRequired,\n onRemoveField: PropTypes.func.isRequired,\n rowId: PropTypes.number.isRequired,\n rowIndex: PropTypes.number.isRequired,\n rowItem: PropTypes.object.isRequired,\n};\n\nexport default RowItemsLayout;\n","import React from 'react';\n\nimport { Grid } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\n\nimport RowItemsLayout from './RowItemsLayout';\n\nconst RowsLayout = ({ row, onRemoveField, rowIndex }) => {\n return (\n <Grid>\n {row.rowContent.map((rowItem, index) => {\n return (\n <RowItemsLayout\n key={rowItem.name}\n rowItem={rowItem}\n index={index}\n rowId={row.rowId}\n onRemoveField={onRemoveField}\n rowIndex={rowIndex}\n lastIndex={row.rowContent.length - 1}\n />\n );\n })}\n </Grid>\n );\n};\n\nRowsLayout.propTypes = {\n onRemoveField: PropTypes.func.isRequired,\n row: PropTypes.object.isRequired,\n rowIndex: PropTypes.number.isRequired,\n};\n\nexport default RowsLayout;\n","import React from 'react';\n\nimport { Box, Flex, Typography } from '@strapi/design-system';\nimport { Menu } from '@strapi/design-system/v2';\nimport { Plus } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport { getTrad } from '../../../utils';\n\nimport LinkToCTB from './LinkToCTB';\nimport RowsLayout from './RowsLayout';\n\nconst DisplayedFields = ({ editLayout, fields, onRemoveField, onAddField }) => {\n const { formatMessage } = useIntl();\n\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Flex justifyContent=\"space-between\">\n <div>\n <Box>\n <Typography fontWeight=\"bold\">\n {formatMessage({\n id: getTrad('containers.ListPage.displayedFields'),\n defaultMessage: 'Displayed fields',\n })}\n </Typography>\n </Box>\n <Box>\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {formatMessage({\n id: 'containers.SettingPage.editSettings.description',\n defaultMessage: 'Drag & drop the fields to build the layout',\n })}\n </Typography>\n </Box>\n </div>\n <LinkToCTB />\n </Flex>\n <Box padding={4} hasRadius borderStyle=\"dashed\" borderWidth=\"1px\" borderColor=\"neutral300\">\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n {editLayout.map((row, index) => (\n <RowsLayout key={row.rowId} row={row} rowIndex={index} onRemoveField={onRemoveField} />\n ))}\n <Menu.Root>\n <Menu.Trigger\n startIcon={<Plus />}\n endIcon={null}\n disabled={fields.length === 0}\n fullWidth\n variant=\"secondary\"\n >\n {formatMessage({\n id: getTrad('containers.SettingPage.add.field'),\n defaultMessage: 'Insert another field',\n })}\n </Menu.Trigger>\n <Menu.Content>\n {fields.map((field) => (\n <Menu.Item key={field} onSelect={() => onAddField(field)}>\n {field}\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Root>\n </Flex>\n </Box>\n </Flex>\n );\n};\n\nDisplayedFields.propTypes = {\n editLayout: PropTypes.array.isRequired,\n fields: PropTypes.array.isRequired,\n onAddField: PropTypes.func.isRequired,\n onRemoveField: PropTypes.func.isRequired,\n};\n\nexport default DisplayedFields;\n","import React from 'react';\n\nimport { Box } from '@strapi/design-system';\nimport { useCustomFields } from '@strapi/helper-plugin';\nimport {\n Boolean,\n Component,\n Date,\n DynamicZone,\n Email,\n Enumeration,\n Json,\n Media,\n Number,\n Relation,\n Text,\n Uid,\n} from '@strapi/icons';\nimport PropTypes from 'prop-types';\n\nconst iconByTypes = {\n biginteger: <Number />,\n boolean: <Boolean />,\n date: <Date />,\n datetime: <Date />,\n decimal: <Number />,\n email: <Email />,\n enum: <Enumeration />,\n enumeration: <Enumeration />,\n file: <Media />,\n files: <Media />,\n float: <Number />,\n integer: <Number />,\n media: <Media />,\n number: <Number />,\n relation: <Relation />,\n string: <Text />,\n text: <Text />,\n richtext: <Text />,\n time: <Date />,\n timestamp: <Date />,\n json: <Json />,\n uid: <Uid />,\n component: <Component />,\n dynamiczone: <DynamicZone />,\n};\n\nconst FieldTypeIcon = ({ type, customFieldUid }) => {\n const customFieldsRegistry = useCustomFields();\n\n let Compo = iconByTypes[type];\n\n if (customFieldUid) {\n const customField = customFieldsRegistry.get(customFieldUid);\n const CustomFieldIcon = customField.icon;\n\n if (CustomFieldIcon) {\n Compo = (\n <Box marginRight={3} width={7} height={6}>\n <CustomFieldIcon />\n </Box>\n );\n }\n }\n\n if (!iconByTypes[type]) {\n return null;\n }\n\n return Compo;\n};\n\nFieldTypeIcon.defaultProps = {\n customFieldUid: null,\n};\n\nFieldTypeIcon.propTypes = {\n type: PropTypes.string.isRequired,\n customFieldUid: PropTypes.string,\n};\n\nexport default FieldTypeIcon;\n","const createPossibleMainFieldsForModelsAndComponents = (array) => {\n return array.reduce((acc, current) => {\n const attributes = current?.attributes ?? {};\n const possibleMainFields = Object.keys(attributes).filter((attr) => {\n return ![\n 'boolean',\n 'component',\n 'dynamiczone',\n 'json',\n 'media',\n 'password',\n 'relation',\n 'text',\n 'richtext',\n 'blocks',\n ].includes(attributes?.[attr]?.type ?? '');\n });\n\n acc[current.uid] = possibleMainFields;\n\n return acc;\n }, {});\n};\n\nexport default createPossibleMainFieldsForModelsAndComponents;\n","import { getTrad } from '../../../utils';\n\nconst getInputProps = (fieldName) => {\n let type;\n\n switch (fieldName) {\n case 'description':\n case 'label':\n case 'placeholder':\n type = 'text';\n break;\n case 'mainField':\n type = 'select';\n break;\n case 'editable':\n type = 'bool';\n break;\n default:\n type = '';\n }\n\n const labelId =\n fieldName === 'mainField'\n ? getTrad('containers.SettingPage.editSettings.entry.title')\n : getTrad(`form.Input.${fieldName}`);\n\n return { type, label: { id: labelId } };\n};\n\nexport default getInputProps;\n","import React from 'react';\n\nimport { Option, Select, TextInput, ToggleInput } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nconst GenericInput = ({ type, options, onChange, value, name, ...inputProps }) => {\n const { formatMessage } = useIntl();\n\n switch (type) {\n case 'text': {\n return <TextInput onChange={onChange} value={value} name={name} {...inputProps} />;\n }\n case 'bool': {\n return (\n <ToggleInput\n onChange={(e) => {\n onChange({ target: { name, value: e.target.checked } });\n }}\n checked={value}\n name={name}\n onLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.on-label',\n defaultMessage: 'On',\n })}\n offLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.off-label',\n defaultMessage: 'Off',\n })}\n {...inputProps}\n />\n );\n }\n case 'select': {\n return (\n <Select\n value={value}\n name={name}\n onChange={(value) => onChange({ target: { name, value } })}\n {...inputProps}\n >\n {options.map((option) => (\n <Option key={option} value={option}>\n {option}\n </Option>\n ))}\n </Select>\n );\n }\n default:\n return null;\n }\n};\n\nGenericInput.defaultProps = {\n options: undefined,\n};\n\nGenericInput.propTypes = {\n type: PropTypes.string.isRequired,\n options: PropTypes.arrayOf(PropTypes.string),\n onChange: PropTypes.func.isRequired,\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]).isRequired,\n name: PropTypes.string.isRequired,\n};\n\nexport default GenericInput;\n","import React, { useCallback, useMemo } from 'react';\n\nimport { GridItem, Option, Select } from '@strapi/design-system';\nimport get from 'lodash/get';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport { shallowEqual, useSelector } from 'react-redux';\n\nimport getTrad from '../../../utils/getTrad';\nimport { makeSelectModelAndComponentSchemas, selectFieldSizes } from '../../App/selectors';\nimport { useLayoutDnd } from '../hooks/useLayoutDnd';\nimport { createPossibleMainFieldsForModelsAndComponents, getInputProps } from '../utils';\n\nimport GenericInput from './GenericInput';\n\nconst FIELD_SIZES = [\n [4, '33%'],\n [6, '50%'],\n [8, '66%'],\n [12, '100%'],\n];\n\nconst ModalForm = ({ onMetaChange, onSizeChange }) => {\n const { formatMessage } = useIntl();\n const { modifiedData, selectedField, attributes, fieldForm } = useLayoutDnd();\n const schemasSelector = useMemo(makeSelectModelAndComponentSchemas, []);\n const { schemas } = useSelector((state) => schemasSelector(state), shallowEqual);\n const fieldSizes = useSelector(selectFieldSizes);\n\n const formToDisplay = useMemo(() => {\n if (!selectedField) {\n return [];\n }\n\n const associatedMetas = get(modifiedData, ['metadatas', selectedField, 'edit'], {});\n\n return Object.keys(associatedMetas).filter((meta) => meta !== 'visible');\n }, [selectedField, modifiedData]);\n\n const componentsAndModelsPossibleMainFields = useMemo(() => {\n return createPossibleMainFieldsForModelsAndComponents(schemas);\n }, [schemas]);\n\n const getSelectedItemSelectOptions = useCallback(\n (formType) => {\n if (formType !== 'relation' && formType !== 'component') {\n return [];\n }\n\n const targetKey = formType === 'component' ? 'component' : 'targetModel';\n const key = get(modifiedData, ['attributes', selectedField, targetKey], '');\n\n return get(componentsAndModelsPossibleMainFields, [key], []);\n },\n\n [selectedField, componentsAndModelsPossibleMainFields, modifiedData]\n );\n\n const metaFields = formToDisplay.map((meta) => {\n const formType = get(attributes, [selectedField, 'type']);\n\n if (\n ['component', 'dynamiczone'].includes(formType) &&\n !['label', 'description'].includes(meta)\n ) {\n return null;\n }\n\n if (formType === 'component' && meta !== 'label') {\n return null;\n }\n\n if (['media', 'json', 'boolean'].includes(formType) && meta === 'placeholder') {\n return null;\n }\n\n if (meta === 'step') {\n return null;\n }\n\n return (\n <GridItem col={6} key={meta}>\n <GenericInput\n type={getInputProps(meta).type}\n hint={\n meta === 'mainField'\n ? formatMessage({\n id: getTrad('containers.SettingPage.editSettings.relation-field.description'),\n })\n : ''\n }\n label={formatMessage({\n id: get(getInputProps(meta), 'label.id', 'app.utils.defaultMessage'),\n })}\n name={meta}\n onChange={onMetaChange}\n value={get(fieldForm, ['metadata', meta], '')}\n options={getSelectedItemSelectOptions(formType)}\n />\n </GridItem>\n );\n });\n\n // Check for a custom input provided by a custom field, or use the default one for that type\n const { type, customField } = attributes[selectedField];\n const { isResizable } = fieldSizes[customField] ?? fieldSizes[type];\n\n return (\n <>\n {metaFields}\n {isResizable && (\n <GridItem col={6} key=\"size\">\n <Select\n value={fieldForm?.size}\n name=\"size\"\n onChange={(value) => {\n onSizeChange({ name: selectedField, value });\n }}\n label={formatMessage({\n id: getTrad('containers.SettingPage.editSettings.size.label'),\n defaultMessage: 'Size',\n })}\n >\n {FIELD_SIZES.map(([value, label]) => (\n <Option key={value} value={value}>\n {label}\n </Option>\n ))}\n </Select>\n </GridItem>\n )}\n </>\n );\n};\n\nModalForm.propTypes = {\n onMetaChange: PropTypes.func.isRequired,\n onSizeChange: PropTypes.func.isRequired,\n};\n\nexport default ModalForm;\n","import React from 'react';\n\nimport {\n Button,\n Flex,\n Grid,\n ModalBody,\n ModalFooter,\n ModalHeader,\n ModalLayout,\n Typography,\n} from '@strapi/design-system';\nimport upperFirst from 'lodash/upperFirst';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport FieldTypeIcon from '../../../components/FieldTypeIcon';\nimport { getTrad } from '../../../utils';\nimport { useLayoutDnd } from '../hooks/useLayoutDnd';\n\nimport ModalForm from './ModalForm';\n\nconst HeaderContainer = styled(Flex)`\n svg {\n width: ${32 / 16}rem;\n height: ${24 / 16}rem;\n margin-right: ${({ theme }) => theme.spaces[3]};\n }\n`;\n\nconst FormModal = ({ onToggle, onMetaChange, onSizeChange, onSubmit, type, customFieldUid }) => {\n const { selectedField } = useLayoutDnd();\n const { formatMessage } = useIntl();\n\n const getAttrType = () => {\n if (type === 'timestamp') {\n return 'date';\n }\n\n if (['decimal', 'float', 'integer', 'biginter'].includes(type)) {\n return 'number';\n }\n\n return type;\n };\n\n return (\n <ModalLayout onClose={onToggle} labelledBy=\"title\">\n <form onSubmit={onSubmit}>\n <ModalHeader>\n <HeaderContainer>\n <FieldTypeIcon type={getAttrType()} customFieldUid={customFieldUid} />\n <Typography fontWeight=\"bold\" textColor=\"neutral800\" as=\"h2\" id=\"title\">\n {formatMessage(\n {\n id: getTrad('containers.ListSettingsView.modal-form.edit-label'),\n defaultMessage: 'Edit {fieldName}',\n },\n { fieldName: upperFirst(selectedField) }\n )}\n </Typography>\n </HeaderContainer>\n </ModalHeader>\n <ModalBody>\n <Grid gap={4}>\n <ModalForm onMetaChange={onMetaChange} onSizeChange={onSizeChange} />\n </Grid>\n </ModalBody>\n <ModalFooter\n startActions={\n <Button onClick={onToggle} variant=\"tertiary\">\n {formatMessage({ id: 'app.components.Button.cancel', defaultMessage: 'Cancel' })}\n </Button>\n }\n endActions={\n <Button type=\"submit\">\n {formatMessage({ id: 'global.finish', defaultMessage: 'Finish' })}\n </Button>\n }\n />\n </form>\n </ModalLayout>\n );\n};\n\nFormModal.defaultProps = {\n customFieldUid: null,\n};\n\nFormModal.propTypes = {\n customFieldUid: PropTypes.string,\n onSubmit: PropTypes.func.isRequired,\n onToggle: PropTypes.func.isRequired,\n onMetaChange: PropTypes.func.isRequired,\n onSizeChange: PropTypes.func.isRequired,\n type: PropTypes.string.isRequired,\n};\n\nexport default FormModal;\n","const getRowSize = (arr) => arr.reduce((sum, value) => sum + value.size, 0);\n\nconst createLayout = (arr) => {\n return arr.reduce((acc, current, index) => {\n const row = { rowId: index, rowContent: current };\n\n return acc.concat(row);\n }, []);\n};\n\nconst formatLayout = (arr) => {\n return arr\n .reduce((acc, current) => {\n let toPush = [];\n const currentRow = current.rowContent.reduce((acc2, curr) => {\n const acc2Size = getRowSize(acc2);\n\n if (curr.name === '_TEMP_') {\n return acc2;\n }\n\n if (acc2Size + curr.size <= 12) {\n acc2.push(curr);\n } else {\n toPush.push(curr);\n }\n\n return acc2;\n }, []);\n const rowId =\n acc.length === 0\n ? 0\n : Math.max.apply(\n Math,\n acc.map((o) => o.rowId)\n ) + 1;\n\n const currentRowSize = getRowSize(currentRow);\n\n if (currentRowSize < 12) {\n currentRow.push({ name: '_TEMP_', size: 12 - currentRowSize });\n }\n\n acc.push({ rowId, rowContent: currentRow });\n\n if (toPush.length > 0) {\n const toPushSize = getRowSize(toPush);\n\n if (toPushSize < 12) {\n toPush.push({ name: '_TEMP_', size: 12 - toPushSize });\n }\n\n acc.push({ rowId: rowId + 1, rowContent: toPush });\n toPush = [];\n }\n\n return acc;\n }, [])\n .filter((row) => row.rowContent.length > 0)\n .filter((row) => {\n if (row.rowContent.length === 1) {\n return row.rowContent[0].name !== '_TEMP_';\n }\n\n return true;\n });\n};\n\nconst unformatLayout = (arr) => {\n return arr.reduce((acc, current) => {\n const currentRow = current.rowContent.filter((content) => content.name !== '_TEMP_');\n\n return acc.concat([currentRow]);\n }, []);\n};\n\nconst getFieldSize = (name, layouts = []) => {\n return layouts.reduce((acc, { rowContent }) => {\n const size = rowContent.find((row) => row.name === name)?.size ?? null;\n\n if (size) {\n acc = size;\n }\n\n return acc;\n }, null);\n};\n\nconst setFieldSize = (name, size, layouts = []) => {\n return layouts.map((row) => {\n row.rowContent = row.rowContent.map((column) => {\n if (column.name === name) {\n return {\n ...column,\n size,\n };\n }\n\n return column;\n });\n\n return row;\n });\n};\n\nexport { createLayout, formatLayout, getFieldSize, getRowSize, setFieldSize, unformatLayout };\n","import cloneDeep from 'lodash/cloneDeep';\nimport set from 'lodash/set';\n\nimport { createLayout, formatLayout } from './utils/layout';\n\nconst init = (initialState, mainLayout, components) => {\n let initialData = cloneDeep(mainLayout);\n\n set(initialData, ['layouts', 'edit'], formatLayout(createLayout(mainLayout.layouts.edit)));\n\n return {\n ...initialState,\n initialData,\n modifiedData: initialData,\n componentLayouts: components,\n };\n};\n\nexport default init;\n","import produce from 'immer';\nimport cloneDeep from 'lodash/cloneDeep';\nimport get from 'lodash/get';\nimport set from 'lodash/set';\n\nimport { arrayMoveItem } from '../../utils';\n\nimport { formatLayout, getFieldSize, setFieldSize } from './utils/layout';\n\nconst DEFAULT_FIELD_SIZE = 6;\n\nconst initialState = {\n fieldForm: {},\n componentLayouts: {},\n metaToEdit: '',\n initialData: {},\n metaForm: {},\n modifiedData: {},\n};\n\nconst reducer = (state = initialState, action) =>\n // eslint-disable-next-line consistent-return\n produce(state, (draftState) => {\n const layoutPathEdit = ['modifiedData', 'layouts', 'edit'];\n\n switch (action.type) {\n case 'MOVE_ROW': {\n const editFieldLayoutValue = get(state, layoutPathEdit, []);\n const { fromIndex, toIndex } = action;\n set(draftState, layoutPathEdit, arrayMoveItem(editFieldLayoutValue, fromIndex, toIndex));\n break;\n }\n case 'ON_ADD_FIELD': {\n const newState = cloneDeep(state);\n const attribute = get(newState, ['modifiedData', 'attributes', action.name], {});\n\n // Get the default size, checking custom fields first, then the type and generic defaults\n const size =\n action.fieldSizes[attribute?.customField]?.default ??\n action.fieldSizes[attribute?.type]?.default ??\n DEFAULT_FIELD_SIZE;\n\n const listSize = get(newState, layoutPathEdit, []).length;\n const actualRowContentPath = [...layoutPathEdit, listSize - 1, 'rowContent'];\n const rowContentToSet = get(newState, actualRowContentPath, []);\n let newList = get(newState, layoutPathEdit, []);\n\n if (Array.isArray(rowContentToSet)) {\n set(\n newList,\n [listSize > 0 ? listSize - 1 : 0, 'rowContent'],\n [...rowContentToSet, { name: action.name, size }]\n );\n } else {\n set(\n newList,\n [listSize > 0 ? listSize - 1 : 0, 'rowContent'],\n [{ name: action.name, size }]\n );\n }\n\n const formattedList = formatLayout(newList);\n set(draftState, layoutPathEdit, formattedList);\n break;\n }\n case 'ON_CHANGE': {\n set(draftState, ['modifiedData', ...action.keys], action.value);\n break;\n }\n case 'ON_CHANGE_META': {\n set(draftState, ['metaForm', 'metadata', ...action.keys], action.value);\n break;\n }\n case 'ON_CHANGE_SIZE': {\n set(draftState, ['metaForm', 'size'], action.value);\n break;\n }\n case 'ON_RESET': {\n draftState.modifiedData = state.initialData;\n break;\n }\n case 'REMOVE_FIELD': {\n const row = get(state, [...layoutPathEdit, action.rowIndex, 'rowContent'], []);\n let newState = cloneDeep(state);\n\n if (row.length === 1 || (row.length === 2 && get(row, [1, 'name'], '') === '_TEMP_')) {\n const currentRowFieldList = get(state, layoutPathEdit, []);\n set(\n newState,\n layoutPathEdit,\n currentRowFieldList.filter((_, index) => action.rowIndex !== index)\n );\n } else {\n set(\n newState,\n [...layoutPathEdit, action.rowIndex, 'rowContent'],\n row.filter((_, index) => index !== action.fieldIndex)\n );\n }\n const updatedList = formatLayout(get(newState, layoutPathEdit, []));\n set(draftState, layoutPathEdit, updatedList);\n break;\n }\n case 'REORDER_DIFF_ROW': {\n const actualRowContent = get(\n state,\n [...layoutPathEdit, action.dragRowIndex, 'rowContent'],\n []\n );\n const targetRowContent = get(\n state,\n [...layoutPathEdit, action.hoverRowIndex, 'rowContent'],\n []\n );\n const itemToInsert = get(\n state,\n [...layoutPathEdit, action.dragRowIndex, 'rowContent', action.dragIndex],\n {}\n );\n const rowContent = [...targetRowContent, itemToInsert];\n let newState = cloneDeep(state);\n\n set(\n newState,\n [...layoutPathEdit, action.dragRowIndex, 'rowContent'],\n actualRowContent.filter((_, index) => action.dragIndex !== index)\n );\n set(\n newState,\n [...layoutPathEdit, action.hoverRowIndex, 'rowContent'],\n arrayMoveItem(rowContent, rowContent.length - 1, action.hoverIndex)\n );\n\n const updatedList = formatLayout(get(newState, layoutPathEdit, []));\n set(draftState, layoutPathEdit, updatedList);\n break;\n }\n case 'REORDER_ROW': {\n const newState = cloneDeep(state);\n const rowContent = get(\n newState,\n [...layoutPathEdit, action.dragRowIndex, 'rowContent'],\n []\n );\n\n set(\n newState,\n [...layoutPathEdit, action.dragRowIndex, 'rowContent'],\n arrayMoveItem(rowContent, action.dragIndex, action.hoverIndex)\n );\n\n const updatedList = formatLayout(get(newState, layoutPathEdit, []));\n set(draftState, layoutPathEdit, updatedList);\n break;\n }\n case 'SET_FIELD_TO_EDIT': {\n draftState.metaToEdit = action.name;\n draftState.metaForm = {\n metadata: get(state, ['modifiedData', 'metadatas', action.name, 'edit'], {}),\n size: getFieldSize(action.name, state.modifiedData?.layouts?.edit) ?? DEFAULT_FIELD_SIZE,\n };\n\n break;\n }\n case 'SUBMIT_META_FORM': {\n set(\n draftState,\n ['modifiedData', 'metadatas', state.metaToEdit, 'edit'],\n state.metaForm.metadata\n );\n\n const layoutsCopy = cloneDeep(get(state, layoutPathEdit, []));\n const nextLayoutValue = setFieldSize(state.metaToEdit, state.metaForm.size, layoutsCopy);\n\n if (nextLayoutValue.length > 0) {\n set(draftState, layoutPathEdit, formatLayout(nextLayoutValue));\n }\n\n break;\n }\n case 'SUBMIT_SUCCEEDED': {\n draftState.initialData = state.modifiedData;\n break;\n }\n case 'UNSET_FIELD_TO_EDIT': {\n draftState.metaToEdit = '';\n draftState.metaForm = {};\n break;\n }\n default:\n return draftState;\n }\n });\n\nexport default reducer;\nexport { initialState };\n","import React, { useReducer, useState } from 'react';\n\nimport {\n Box,\n Button,\n ContentLayout,\n Divider,\n Flex,\n Grid,\n GridItem,\n HeaderLayout,\n Main,\n Option,\n Select,\n Typography,\n} from '@strapi/design-system';\nimport {\n ConfirmDialog,\n Link,\n useFetchClient,\n useNotification,\n useTracking,\n} from '@strapi/helper-plugin';\nimport { ArrowLeft, Check } from '@strapi/icons';\nimport cloneDeep from 'lodash/cloneDeep';\nimport isEqual from 'lodash/isEqual';\nimport upperFirst from 'lodash/upperFirst';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport { useMutation } from 'react-query';\nimport { useSelector } from 'react-redux';\nimport { useHistory } from 'react-router-dom';\n\nimport { getTrad } from '../../utils';\nimport { selectFieldSizes } from '../App/selectors';\n\nimport DisplayedFields from './components/DisplayedFields';\nimport ModalForm from './components/FormModal';\nimport { LayoutDndProvider } from './components/LayoutDndProvider';\nimport init from './init';\nimport reducer, { initialState } from './reducer';\nimport { unformatLayout } from './utils/layout';\n\nconst EditSettingsView = ({ mainLayout, components, isContentTypeView, slug, updateLayout }) => {\n const [reducerState, dispatch] = useReducer(reducer, initialState, () =>\n init(initialState, mainLayout, components)\n );\n const [isDraggingSibling, setIsDraggingSibling] = useState(false);\n const { trackUsage } = useTracking();\n const toggleNotification = useNotification();\n const { goBack } = useHistory();\n const [isModalFormOpen, setIsModalFormOpen] = useState(false);\n const [isConfirmDialogOpen, setIsConfirmDialogOpen] = useState(false);\n const { componentLayouts, initialData, modifiedData, metaToEdit, metaForm } = reducerState;\n const { formatMessage } = useIntl();\n const modelName = mainLayout.info.displayName;\n const attributes = modifiedData?.attributes ?? {};\n const fieldSizes = useSelector(selectFieldSizes);\n const { put } = useFetchClient();\n\n const entryTitleOptions = Object.keys(attributes).filter((attr) => {\n const type = attributes?.[attr]?.type ?? '';\n\n return (\n ![\n 'dynamiczone',\n 'json',\n 'text',\n 'relation',\n 'component',\n 'boolean',\n 'media',\n 'password',\n 'richtext',\n 'timestamp',\n 'blocks',\n ].includes(type) && !!type\n );\n });\n const editLayout = modifiedData.layouts.edit;\n const displayedFields = editLayout.flatMap((layout) => layout.rowContent);\n const editLayoutFields = Object.keys(modifiedData.attributes)\n .filter((attr) => (modifiedData?.metadatas?.[attr]?.edit?.visible ?? false) === true)\n .filter((attr) => displayedFields.findIndex((el) => el.name === attr) === -1)\n .sort();\n\n const handleChange = ({ target: { name, value } }) => {\n dispatch({\n type: 'ON_CHANGE',\n keys: name.split('.'),\n value,\n });\n };\n\n const handleToggleModal = () => {\n setIsModalFormOpen((prev) => !prev);\n };\n\n const toggleConfirmDialog = () => {\n setIsConfirmDialogOpen((prev) => !prev);\n };\n\n const handleMetaChange = ({ target: { name, value } }) => {\n dispatch({\n type: 'ON_CHANGE_META',\n keys: name.split('.'),\n value,\n });\n };\n\n const handleSizeChange = ({ name, value }) => {\n dispatch({\n type: 'ON_CHANGE_SIZE',\n name,\n value,\n });\n };\n\n const handleMetaSubmit = (e) => {\n e.preventDefault();\n dispatch({\n type: 'SUBMIT_META_FORM',\n });\n handleToggleModal();\n };\n\n const handleSubmit = (e) => {\n e.preventDefault();\n toggleConfirmDialog();\n };\n\n const submitMutation = useMutation(\n (body) => {\n return put(\n isContentTypeView\n ? `/content-manager/content-types/${slug}/configuration`\n : `/content-manager/components/${slug}/configuration`,\n body\n );\n },\n {\n onSuccess({ data }) {\n if (updateLayout) {\n updateLayout(data.data);\n }\n dispatch({\n type: 'SUBMIT_SUCCEEDED',\n });\n toggleConfirmDialog();\n trackUsage('didEditEditSettings');\n },\n onError() {\n toggleNotification({ type: 'warning', message: { id: 'notification.error' } });\n },\n }\n );\n const { isLoading: isSubmittingForm } = submitMutation;\n\n const handleConfirm = () => {\n const { layouts, metadatas, settings } = cloneDeep(modifiedData);\n submitMutation.mutate({\n layouts: {\n ...layouts,\n edit: unformatLayout(layouts.edit),\n },\n metadatas,\n settings,\n });\n };\n\n const handleMoveRelation = (fromIndex, toIndex) => {\n dispatch({\n type: 'MOVE_RELATION',\n fromIndex,\n toIndex,\n });\n };\n\n const handleMoveField = (fromIndex, toIndex) => {\n dispatch({\n type: 'MOVE_FIELD',\n fromIndex,\n toIndex,\n });\n };\n\n const moveItem = (dragIndex, hoverIndex, dragRowIndex, hoverRowIndex) => {\n // Same row = just reorder\n if (dragRowIndex === hoverRowIndex) {\n dispatch({\n type: 'REORDER_ROW',\n dragRowIndex,\n dragIndex,\n hoverIndex,\n });\n } else {\n dispatch({\n type: 'REORDER_DIFF_ROW',\n dragIndex,\n hoverIndex,\n dragRowIndex,\n hoverRowIndex,\n });\n }\n };\n\n const moveRow = (fromIndex, toIndex) => {\n dispatch({\n type: 'MOVE_ROW',\n fromIndex,\n toIndex,\n });\n };\n\n return (\n <LayoutDndProvider\n isContentTypeView={isContentTypeView}\n attributes={attributes}\n modifiedData={modifiedData}\n slug={slug}\n componentLayouts={componentLayouts}\n selectedField={metaToEdit}\n fieldForm={metaForm}\n onMoveRelation={handleMoveRelation}\n onMoveField={handleMoveField}\n moveRow={moveRow}\n moveItem={moveItem}\n setEditFieldToSelect={(name) => {\n dispatch({\n type: 'SET_FIELD_TO_EDIT',\n name,\n });\n handleToggleModal();\n }}\n isDraggingSibling={isDraggingSibling}\n setIsDraggingSibling={setIsDraggingSibling}\n >\n <Main>\n <form onSubmit={handleSubmit}>\n <HeaderLayout\n title={formatMessage(\n {\n id: getTrad('components.SettingsViewWrapper.pluginHeader.title'),\n defaultMessage: `Configure the view - ${upperFirst(modelName)}`,\n },\n { name: upperFirst(modelName) }\n )}\n subtitle={formatMessage({\n id: getTrad('components.SettingsViewWrapper.pluginHeader.description.edit-settings'),\n defaultMessage: 'Customize how the edit view will look like.',\n })}\n navigationAction={\n <Link\n startIcon={<ArrowLeft />}\n onClick={(e) => {\n e.preventDefault();\n goBack();\n }}\n to=\"/\"\n >\n {formatMessage({\n id: 'global.back',\n defaultMessage: 'Back',\n })}\n </Link>\n }\n primaryAction={\n <Button\n disabled={isEqual(initialData, modifiedData)}\n startIcon={<Check />}\n type=\"submit\"\n >\n {formatMessage({ id: 'global.save', defaultMessage: 'Save' })}\n </Button>\n }\n />\n <ContentLayout>\n <Box\n background=\"neutral0\"\n hasRadius\n shadow=\"filterShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={7}\n paddingRight={7}\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Typography variant=\"delta\" as=\"h2\">\n {formatMessage({\n id: getTrad('containers.SettingPage.settings'),\n defaultMessage: 'Settings',\n })}\n </Typography>\n <Grid>\n <GridItem col={6} s={12}>\n <Select\n label={formatMessage({\n id: getTrad('containers.SettingPage.editSettings.entry.title'),\n defaultMessage: 'Entry title',\n })}\n hint={formatMessage({\n id: getTrad('containers.SettingPage.editSettings.entry.title.description'),\n defaultMessage: 'Set the display field of your entry',\n })}\n onChange={(value) => {\n handleChange({\n target: {\n name: 'settings.mainField',\n value: value === '' ? null : value,\n },\n });\n }}\n value={modifiedData.settings.mainField}\n >\n {entryTitleOptions.map((attribute) => (\n <Option key={attribute} value={attribute}>\n {attribute}\n </Option>\n ))}\n </Select>\n </GridItem>\n </Grid>\n <Box paddingTop={2} paddingBottom={2}>\n <Divider />\n </Box>\n <Typography variant=\"delta\" as=\"h3\">\n {formatMessage({\n id: getTrad('containers.SettingPage.view'),\n defaultMessage: 'View',\n })}\n </Typography>\n\n <DisplayedFields\n attributes={attributes}\n editLayout={editLayout}\n fields={editLayoutFields}\n onAddField={(field) => {\n dispatch({\n type: 'ON_ADD_FIELD',\n name: field,\n fieldSizes,\n });\n }}\n onRemoveField={(rowId, index) => {\n dispatch({\n type: 'REMOVE_FIELD',\n rowIndex: rowId,\n fieldIndex: index,\n });\n }}\n />\n </Flex>\n </Box>\n </ContentLayout>\n <ConfirmDialog\n bodyText={{\n id: getTrad('popUpWarning.warning.updateAllSettings'),\n defaultMessage: 'This will modify all your settings',\n }}\n iconRightButton={<Check />}\n isConfirmButtonLoading={isSubmittingForm}\n isOpen={isConfirmDialogOpen}\n onToggleDialog={toggleConfirmDialog}\n onConfirm={handleConfirm}\n variantRightButton=\"success-light\"\n />\n </form>\n {isModalFormOpen && (\n <ModalForm\n onSubmit={handleMetaSubmit}\n onToggle={handleToggleModal}\n onMetaChange={handleMetaChange}\n onSizeChange={handleSizeChange}\n type={attributes?.[metaToEdit]?.type ?? ''}\n customFieldUid={attributes?.[metaToEdit]?.customField ?? ''}\n />\n )}\n </Main>\n </LayoutDndProvider>\n );\n};\n\nEditSettingsView.defaultProps = {\n isContentTypeView: false,\n updateLayout: null,\n};\n\nEditSettingsView.propTypes = {\n components: PropTypes.object.isRequired,\n isContentTypeView: PropTypes.bool,\n mainLayout: PropTypes.shape({\n attributes: PropTypes.object.isRequired,\n info: PropTypes.object.isRequired,\n layouts: PropTypes.shape({\n list: PropTypes.array.isRequired,\n edit: PropTypes.array.isRequired,\n }).isRequired,\n metadatas: PropTypes.object.isRequired,\n options: PropTypes.object.isRequired,\n }).isRequired,\n slug: PropTypes.string.isRequired,\n updateLayout: PropTypes.func,\n};\n\nexport default EditSettingsView;\n","import { RESET_PROPS, SET_LAYOUT } from './constants';\n\nexport const resetProps = () => ({ type: RESET_PROPS });\n\nexport const setLayout = (layout, query) => ({\n type: SET_LAYOUT,\n layout,\n query,\n});\n","import {\n CLEAR_SET_MODIFIED_DATA_ONLY,\n GET_DATA,\n GET_DATA_SUCCEEDED,\n INIT_FORM,\n RESET_PROPS,\n SET_DATA_STRUCTURES,\n SET_STATUS,\n SUBMIT_SUCCEEDED,\n} from './constants';\n\nexport const getData = () => {\n return {\n type: GET_DATA,\n };\n};\n\nexport const getDataSucceeded = (data) => ({\n type: GET_DATA_SUCCEEDED,\n data,\n});\n\nexport const initForm = (rawQuery, isSingleType = false) => ({\n type: INIT_FORM,\n rawQuery,\n isSingleType,\n});\n\nexport const resetProps = () => ({ type: RESET_PROPS });\n\nexport const setDataStructures = (componentsDataStructure, contentTypeDataStructure) => ({\n type: SET_DATA_STRUCTURES,\n componentsDataStructure,\n contentTypeDataStructure,\n});\n\nexport const setStatus = (status) => ({\n type: SET_STATUS,\n status,\n});\n\nexport const submitSucceeded = (data) => ({\n type: SUBMIT_SUCCEEDED,\n data,\n});\n\nexport const clearSetModifiedDataOnly = () => ({\n type: CLEAR_SET_MODIFIED_DATA_ONLY,\n});\n","const selectCrudReducer = (state) => state['content-manager_editViewCrudReducer'];\n\nexport default selectCrudReducer;\n","import { memo, useCallback, useEffect, useRef } from 'react';\n\nimport {\n formatContentTypeData,\n useAPIErrorHandler,\n useFetchClient,\n useGuidedTour,\n useNotification,\n useQueryParams,\n useTracking,\n} from '@strapi/helper-plugin';\nimport axios from 'axios';\nimport get from 'lodash/get';\nimport isEqual from 'lodash/isEqual';\nimport PropTypes from 'prop-types';\nimport { useQueryClient } from 'react-query';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useHistory } from 'react-router-dom';\n\nimport { useFindRedirectionLink } from '../../hooks';\nimport {\n getData,\n getDataSucceeded,\n initForm,\n resetProps,\n setDataStructures,\n setStatus,\n submitSucceeded,\n} from '../../sharedReducers/crudReducer/actions';\nimport selectCrudReducer from '../../sharedReducers/crudReducer/selectors';\nimport { createDefaultForm, getTrad, removePasswordFieldsFromData } from '../../utils';\n\n// This container is used to handle the CRUD\nconst CollectionTypeFormWrapper = ({ allLayoutData, children, slug, id, origin }) => {\n const queryClient = useQueryClient();\n const toggleNotification = useNotification();\n const { setCurrentStep } = useGuidedTour();\n const { trackUsage } = useTracking();\n const { push, replace } = useHistory();\n const [{ query, rawQuery }] = useQueryParams();\n const dispatch = useDispatch();\n const { componentsDataStructure, contentTypeDataStructure, data, isLoading, status } =\n useSelector(selectCrudReducer);\n const redirectionLink = useFindRedirectionLink(slug);\n const { formatAPIError } = useAPIErrorHandler(getTrad);\n\n const isMounted = useRef(true);\n const trackUsageRef = useRef(trackUsage);\n\n const allLayoutDataRef = useRef(allLayoutData);\n\n const fetchClient = useFetchClient();\n const { put, post, del } = fetchClient;\n\n const isCreatingEntry = id === null;\n\n const requestURL =\n isCreatingEntry && !origin ? null : `/content-manager/collection-types/${slug}/${origin || id}`;\n\n const cleanReceivedData = useCallback((data) => {\n const cleaned = removePasswordFieldsFromData(\n data,\n allLayoutDataRef.current.contentType,\n allLayoutDataRef.current.components\n );\n\n return formatContentTypeData(\n cleaned,\n allLayoutDataRef.current.contentType,\n allLayoutDataRef.current.components\n );\n }, []);\n\n // SET THE DEFAULT LAYOUT the effect is applied when the slug changes\n useEffect(() => {\n const componentsDataStructure = Object.keys(allLayoutData.components).reduce((acc, current) => {\n const defaultComponentForm = createDefaultForm(\n get(allLayoutData, ['components', current, 'attributes'], {}),\n allLayoutData.components\n );\n\n acc[current] = formatContentTypeData(\n defaultComponentForm,\n allLayoutData.components[current],\n allLayoutData.components\n );\n\n return acc;\n }, {});\n\n const contentTypeDataStructure = createDefaultForm(\n allLayoutData.contentType.attributes,\n allLayoutData.components\n );\n\n const contentTypeDataStructureFormatted = formatContentTypeData(\n contentTypeDataStructure,\n allLayoutData.contentType,\n allLayoutData.components\n );\n\n dispatch(setDataStructures(componentsDataStructure, contentTypeDataStructureFormatted));\n }, [allLayoutData, dispatch]);\n\n useEffect(() => {\n return () => {\n dispatch(resetProps());\n };\n }, [dispatch]);\n\n useEffect(() => {\n const CancelToken = axios.CancelToken;\n const source = CancelToken.source();\n\n const fetchData = async (source) => {\n dispatch(getData());\n\n try {\n const { data } = await fetchClient.get(requestURL, { cancelToken: source.token });\n\n dispatch(getDataSucceeded(cleanReceivedData(data)));\n } catch (err) {\n if (axios.isCancel(err)) {\n return;\n }\n const resStatus = get(err, 'response.status', null);\n\n if (resStatus === 404) {\n push(redirectionLink);\n\n return;\n }\n\n // Not allowed to read a document\n if (resStatus === 403) {\n toggleNotification({\n type: 'info',\n message: { id: getTrad('permissions.not-allowed.update') },\n });\n\n push(redirectionLink);\n }\n }\n };\n\n // This is needed in order to reset the form when the query changes\n const init = async () => {\n dispatch(getData());\n dispatch(initForm(rawQuery));\n };\n\n if (!isMounted.current) {\n return () => {};\n }\n\n if (requestURL) {\n fetchData(source);\n } else {\n init();\n }\n\n return () => {\n source.cancel('Operation canceled by the user.');\n };\n }, [\n fetchClient,\n cleanReceivedData,\n push,\n requestURL,\n dispatch,\n rawQuery,\n redirectionLink,\n toggleNotification,\n ]);\n\n const displayErrors = useCallback(\n (err) => {\n toggleNotification({ type: 'warning', message: formatAPIError(err) });\n },\n [toggleNotification, formatAPIError]\n );\n\n const onDelete = useCallback(\n async (trackerProperty) => {\n try {\n trackUsageRef.current('willDeleteEntry', trackerProperty);\n\n const { data } = await del(`/content-manager/collection-types/${slug}/${id}`);\n\n toggleNotification({\n type: 'success',\n message: { id: getTrad('success.record.delete') },\n });\n\n trackUsageRef.current('didDeleteEntry', trackerProperty);\n\n replace(redirectionLink);\n\n return Promise.resolve(data);\n } catch (err) {\n trackUsageRef.current('didNotDeleteEntry', { error: err, ...trackerProperty });\n\n return Promise.reject(err);\n }\n },\n [id, slug, toggleNotification, del, redirectionLink, replace]\n );\n\n const onPost = useCallback(\n async (body, trackerProperty) => {\n const isCloning = typeof origin === 'string';\n /**\n * If we're cloning we want to post directly to this endpoint\n * so that the relations even if they're not listed in the EditView\n * are correctly attached to the entry.\n */\n const endPoint = isCloning\n ? `/content-manager/collection-types/${slug}/clone/${origin}`\n : `/content-manager/collection-types/${slug}`;\n try {\n // Show a loading button in the EditView/Header.js && lock the app => no navigation\n dispatch(setStatus('submit-pending'));\n\n const { id, ...restBody } = body;\n\n const { data } = await post(endPoint, isCloning ? restBody : body, {\n params: query,\n });\n\n trackUsageRef.current('didCreateEntry', trackerProperty);\n toggleNotification({\n type: 'success',\n message: { id: getTrad('success.record.save') },\n });\n\n setCurrentStep('contentManager.success');\n\n // TODO: need to find a better place, or a better abstraction\n queryClient.invalidateQueries(['relation']);\n\n dispatch(submitSucceeded(cleanReceivedData(data)));\n\n // Enable navigation and remove loaders\n dispatch(setStatus('resolved'));\n\n replace(`/content-manager/collectionType/${slug}/${data.id}${rawQuery}`);\n\n return Promise.resolve(data);\n } catch (err) {\n displayErrors(err);\n trackUsageRef.current('didNotCreateEntry', { error: err, trackerProperty });\n dispatch(setStatus('resolved'));\n\n return Promise.reject(err);\n }\n },\n [\n origin,\n cleanReceivedData,\n displayErrors,\n replace,\n slug,\n dispatch,\n query,\n toggleNotification,\n setCurrentStep,\n queryClient,\n post,\n rawQuery,\n ]\n );\n\n const onDraftRelationCheck = useCallback(async () => {\n try {\n trackUsageRef.current('willCheckDraftRelations');\n\n const endPoint = `/content-manager/collection-types/${slug}/${id}/actions/countDraftRelations`;\n dispatch(setStatus('draft-relation-check-pending'));\n\n const numberOfDraftRelations = await fetchClient.get(endPoint);\n trackUsageRef.current('didCheckDraftRelations');\n\n dispatch(setStatus('resolved'));\n\n return numberOfDraftRelations.data.data;\n } catch (err) {\n displayErrors(err);\n dispatch(setStatus('resolved'));\n\n return Promise.reject(err);\n }\n }, [displayErrors, id, slug, dispatch, fetchClient]);\n\n const onPublish = useCallback(async () => {\n try {\n trackUsageRef.current('willPublishEntry');\n const endPoint = `/content-manager/collection-types/${slug}/${id}/actions/publish`;\n\n dispatch(setStatus('publish-pending'));\n\n const { data } = await post(endPoint);\n\n trackUsageRef.current('didPublishEntry');\n\n dispatch(submitSucceeded(cleanReceivedData(data)));\n dispatch(setStatus('resolved'));\n\n toggleNotification({\n type: 'success',\n message: { id: getTrad('success.record.publish') },\n });\n\n return Promise.resolve(data);\n } catch (err) {\n displayErrors(err);\n dispatch(setStatus('resolved'));\n\n return Promise.reject(err);\n }\n }, [cleanReceivedData, displayErrors, id, slug, dispatch, toggleNotification, post]);\n\n const onPut = useCallback(\n async (body, trackerProperty) => {\n const endPoint = `/content-manager/collection-types/${slug}/${id}`;\n\n try {\n trackUsageRef.current('willEditEntry', trackerProperty);\n\n dispatch(setStatus('submit-pending'));\n\n const { data } = await put(endPoint, body);\n\n trackUsageRef.current('didEditEntry', { trackerProperty });\n toggleNotification({\n type: 'success',\n message: { id: getTrad('success.record.save') },\n });\n\n // TODO: need to find a better place, or a better abstraction\n queryClient.invalidateQueries(['relation']);\n\n dispatch(submitSucceeded(cleanReceivedData(data)));\n\n dispatch(setStatus('resolved'));\n\n return Promise.resolve(data);\n } catch (err) {\n trackUsageRef.current('didNotEditEntry', { error: err, trackerProperty });\n displayErrors(err);\n\n dispatch(setStatus('resolved'));\n\n return Promise.reject(err);\n }\n },\n [cleanReceivedData, displayErrors, slug, id, dispatch, toggleNotification, queryClient, put]\n );\n\n const onUnpublish = useCallback(async () => {\n const endPoint = `/content-manager/collection-types/${slug}/${id}/actions/unpublish`;\n\n dispatch(setStatus('unpublish-pending'));\n\n try {\n trackUsageRef.current('willUnpublishEntry');\n\n const { data } = await post(endPoint);\n\n trackUsageRef.current('didUnpublishEntry');\n toggleNotification({\n type: 'success',\n message: { id: getTrad('success.record.unpublish') },\n });\n\n dispatch(submitSucceeded(cleanReceivedData(data)));\n dispatch(setStatus('resolved'));\n\n return Promise.resolve(data);\n } catch (err) {\n dispatch(setStatus('resolved'));\n displayErrors(err);\n\n return Promise.reject(err);\n }\n }, [cleanReceivedData, displayErrors, id, slug, dispatch, toggleNotification, post]);\n\n return children({\n componentsDataStructure,\n contentTypeDataStructure,\n data,\n isCreatingEntry,\n isLoadingForData: isLoading,\n onDelete,\n onPost,\n onPublish,\n onDraftRelationCheck,\n onPut,\n onUnpublish,\n status,\n redirectionLink,\n });\n};\n\nCollectionTypeFormWrapper.defaultProps = {\n id: null,\n origin: null,\n};\n\nCollectionTypeFormWrapper.propTypes = {\n allLayoutData: PropTypes.exact({\n components: PropTypes.object.isRequired,\n contentType: PropTypes.shape({\n apiID: PropTypes.string.isRequired,\n attributes: PropTypes.object.isRequired,\n info: PropTypes.object.isRequired,\n isDisplayed: PropTypes.bool.isRequired,\n kind: PropTypes.string.isRequired,\n layouts: PropTypes.object.isRequired,\n metadatas: PropTypes.object.isRequired,\n options: PropTypes.object.isRequired,\n pluginOptions: PropTypes.object,\n settings: PropTypes.object.isRequired,\n uid: PropTypes.string.isRequired,\n }).isRequired,\n }).isRequired,\n children: PropTypes.func.isRequired,\n id: PropTypes.string,\n origin: PropTypes.string,\n slug: PropTypes.string.isRequired,\n};\n\nexport default memo(CollectionTypeFormWrapper, isEqual);\n","/**\n *\n * AddComponentButton\n *\n */\n\nimport React from 'react';\n\nimport { BaseButton, Flex, Typography } from '@strapi/design-system';\nimport { PlusCircle } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\n\nexport const AddComponentButton = ({ hasError, isDisabled, isOpen, children, onClick }) => {\n return (\n <StyledButton\n type=\"button\"\n onClick={onClick}\n disabled={isDisabled}\n hasError={hasError}\n background=\"neutral0\"\n paddingTop={3}\n paddingBottom={3}\n paddingLeft={4}\n paddingRight={4}\n style={{ cursor: isDisabled ? 'not-allowed' : 'pointer' }}\n >\n <Flex as=\"span\" gap={2}>\n <StyledAddIcon aria-hidden $isOpen={isOpen} $hasError={hasError && !isOpen} />\n <Typography\n variant=\"pi\"\n fontWeight=\"bold\"\n textColor={hasError && !isOpen ? 'danger600' : 'neutral500'}\n >\n {children}\n </Typography>\n </Flex>\n </StyledButton>\n );\n};\n\nconst StyledAddIcon = styled(PlusCircle)`\n height: ${({ theme }) => theme.spaces[6]};\n width: ${({ theme }) => theme.spaces[6]};\n transform: ${({ $isOpen }) => ($isOpen ? 'rotate(45deg)' : 'rotate(0deg)')};\n > circle {\n fill: ${({ theme, $hasError }) =>\n $hasError ? theme.colors.danger200 : theme.colors.neutral150};\n }\n > path {\n fill: ${({ theme, $hasError }) =>\n $hasError ? theme.colors.danger600 : theme.colors.neutral600};\n }\n`;\n\nconst StyledButton = styled(BaseButton)`\n border-radius: 26px;\n border-color: ${({ theme }) => theme.colors.neutral150};\n box-shadow: ${({ theme }) => theme.shadows.filterShadow};\n\n &:hover {\n ${Typography} {\n color: ${({ theme }) => theme.colors.primary600};\n }\n\n ${StyledAddIcon} {\n > circle {\n fill: ${({ theme }) => theme.colors.primary600};\n }\n > path {\n fill: ${({ theme }) => theme.colors.neutral100};\n }\n }\n }\n &:active {\n ${Typography} {\n color: ${({ theme }) => theme.colors.primary600};\n }\n ${StyledAddIcon} {\n > circle {\n fill: ${({ theme }) => theme.colors.primary600};\n }\n > path {\n fill: ${({ theme }) => theme.colors.neutral100};\n }\n }\n }\n`;\n\nAddComponentButton.defaultProps = {\n hasError: false,\n isDisabled: false,\n isOpen: false,\n};\n\nAddComponentButton.propTypes = {\n children: PropTypes.node.isRequired,\n hasError: PropTypes.bool,\n isDisabled: PropTypes.bool,\n isOpen: PropTypes.bool,\n onClick: PropTypes.func.isRequired,\n};\n","import React from 'react';\n\nimport {\n Accordion,\n AccordionContent,\n AccordionToggle,\n Box,\n Flex,\n Typography,\n} from '@strapi/design-system';\nimport { pxToRem } from '@strapi/helper-plugin';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport { ComponentIcon } from '../../ComponentIcon';\n\nexport const ComponentCategory = ({\n category,\n components,\n variant,\n isOpen,\n onAddComponent,\n onToggle,\n}) => {\n const { formatMessage } = useIntl();\n\n const handleToggle = () => {\n onToggle(category);\n };\n\n return (\n <Accordion expanded={isOpen} onToggle={handleToggle} size=\"S\">\n <AccordionToggle\n variant={variant}\n title={formatMessage({ id: category, defaultMessage: category })}\n togglePosition=\"left\"\n />\n <AccordionContent>\n <Box paddingTop={4} paddingBottom={4} paddingLeft={3} paddingRight={3}>\n <Grid>\n {components.map(({ componentUid, info: { displayName, icon } }) => (\n <ComponentBox\n key={componentUid}\n as=\"button\"\n type=\"button\"\n background=\"neutral100\"\n justifyContent=\"center\"\n onClick={onAddComponent(componentUid)}\n hasRadius\n height={pxToRem(84)}\n shrink={0}\n borderColor=\"neutral200\"\n >\n <Flex direction=\"column\" gap={1} alignItems=\"center\" justifyContent=\"center\">\n <ComponentIcon icon={icon} />\n\n <Typography variant=\"pi\" fontWeight=\"bold\" textColor=\"neutral600\">\n {formatMessage({ id: displayName, defaultMessage: displayName })}\n </Typography>\n </Flex>\n </ComponentBox>\n ))}\n </Grid>\n </Box>\n </AccordionContent>\n </Accordion>\n );\n};\n\nconst Grid = styled.div`\n display: grid;\n grid-template-columns: repeat(auto-fit, ${140 / 16}rem);\n grid-gap: ${({ theme }) => theme.spaces[1]};\n`;\n\nconst ComponentBox = styled(Flex)`\n &:focus,\n &:hover {\n border: 1px solid ${({ theme }) => theme.colors.primary200};\n background: ${({ theme }) => theme.colors.primary100};\n\n ${Typography} {\n color: ${({ theme }) => theme.colors.primary600};\n }\n\n /* > Flex > ComponentIcon */\n > div > div:first-child {\n background: ${({ theme }) => theme.colors.primary200};\n color: ${({ theme }) => theme.colors.primary600};\n }\n }\n`;\n\nComponentCategory.defaultProps = {\n components: [],\n isOpen: false,\n variant: 'primary',\n};\n\nComponentCategory.propTypes = {\n category: PropTypes.string.isRequired,\n components: PropTypes.array,\n isOpen: PropTypes.bool,\n onAddComponent: PropTypes.func.isRequired,\n onToggle: PropTypes.func.isRequired,\n variant: PropTypes.oneOf(['primary', 'secondary']),\n};\n","import React, { useEffect, useState } from 'react';\n\nimport { Box, Flex, KeyboardNavigable, Typography } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport { getTrad } from '../../../utils';\n\nimport { ComponentCategory } from './ComponentCategory';\n\nexport const ComponentPicker = ({ dynamicComponentsByCategory, isOpen, onClickAddComponent }) => {\n const { formatMessage } = useIntl();\n\n const [categoryToOpen, setCategoryToOpen] = useState('');\n\n useEffect(() => {\n const categoryKeys = Object.keys(dynamicComponentsByCategory);\n\n if (isOpen && categoryKeys.length > 0) {\n setCategoryToOpen(categoryKeys[0]);\n }\n }, [isOpen, dynamicComponentsByCategory]);\n\n const handleAddComponentToDz = (componentUid) => () => {\n onClickAddComponent(componentUid);\n setCategoryToOpen('');\n };\n\n /**\n * @type {(categoryName: string) => void}\n */\n const handleClickToggle = (categoryName) => {\n setCategoryToOpen((currentCat) => (currentCat === categoryName ? '' : categoryName));\n };\n\n if (!isOpen) {\n return null;\n }\n\n return (\n <Box\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={5}\n paddingRight={5}\n background=\"neutral0\"\n shadow=\"tableShadow\"\n borderColor=\"neutral150\"\n hasRadius\n >\n <Flex justifyContent=\"center\">\n <Typography fontWeight=\"bold\" textColor=\"neutral600\">\n {formatMessage({\n id: getTrad('components.DynamicZone.ComponentPicker-label'),\n defaultMessage: 'Pick one component',\n })}\n </Typography>\n </Flex>\n <Box paddingTop={2}>\n <KeyboardNavigable attributeName=\"data-strapi-accordion-toggle\">\n {Object.entries(dynamicComponentsByCategory).map(([category, components], index) => (\n <ComponentCategory\n key={category}\n category={category}\n components={components}\n onAddComponent={handleAddComponentToDz}\n isOpen={category === categoryToOpen}\n onToggle={handleClickToggle}\n variant={index % 2 === 1 ? 'primary' : 'secondary'}\n />\n ))}\n </KeyboardNavigable>\n </Box>\n </Box>\n );\n};\n\nComponentPicker.defaultProps = {\n dynamicComponentsByCategory: {},\n isOpen: false,\n};\n\nComponentPicker.propTypes = {\n dynamicComponentsByCategory: PropTypes.shape({\n components: PropTypes.arrayOf(\n PropTypes.shape({\n componentUid: PropTypes.string.isRequired,\n info: PropTypes.object,\n })\n ),\n }),\n isOpen: PropTypes.bool,\n onClickAddComponent: PropTypes.func.isRequired,\n};\n","import React from 'react';\n\nimport { Box, Flex, Typography } from '@strapi/design-system';\nimport { pxToRem } from '@strapi/helper-plugin';\nimport { PlusCircle } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport { getTrad } from '../../utils';\n\nconst IconWrapper = styled.span`\n > svg {\n width: ${pxToRem(24)};\n height: ${pxToRem(24)};\n > circle {\n fill: ${({ theme }) => theme.colors.primary200};\n }\n > path {\n fill: ${({ theme }) => theme.colors.primary600};\n }\n }\n`;\n\nconst ComponentInitializer = ({ error, isReadOnly, onClick }) => {\n const { formatMessage } = useIntl();\n\n return (\n <>\n <Box\n as=\"button\"\n background=\"neutral100\"\n borderColor={error ? 'danger600' : 'neutral200'}\n disabled={isReadOnly}\n hasRadius\n onClick={onClick}\n paddingTop={9}\n paddingBottom={9}\n type=\"button\"\n >\n <Flex direction=\"column\" gap={2}>\n <Flex justifyContent=\"center\" style={{ cursor: isReadOnly ? 'not-allowed' : 'inherit' }}>\n <IconWrapper>\n <PlusCircle />\n </IconWrapper>\n </Flex>\n <Flex justifyContent=\"center\">\n <Typography textColor=\"primary600\" variant=\"pi\" fontWeight=\"bold\">\n {formatMessage({\n id: getTrad('components.empty-repeatable'),\n defaultMessage: 'No entry yet. Click on the button below to add one.',\n })}\n </Typography>\n </Flex>\n </Flex>\n </Box>\n {error?.id && (\n <Typography textColor=\"danger600\" variant=\"pi\">\n {formatMessage(error, { ...error.values })}\n </Typography>\n )}\n </>\n );\n};\n\nComponentInitializer.defaultProps = {\n error: undefined,\n isReadOnly: false,\n};\n\nComponentInitializer.propTypes = {\n error: PropTypes.shape({\n id: PropTypes.string.isRequired,\n defaultMessage: PropTypes.string.isRequired,\n values: PropTypes.object,\n }),\n isReadOnly: PropTypes.bool,\n onClick: PropTypes.func.isRequired,\n};\n\nexport default ComponentInitializer;\n","import { useCallback, useEffect, useState } from 'react';\n\nimport { useCustomFields } from '@strapi/helper-plugin';\n\nconst componentStore = new Map();\n\n/**\n * @description\n * A hook to lazy load custom field components\n * @param {Array.<string>} componentUids - The uids to look up components\n * @returns object\n */\nconst useLazyComponents = (componentUids = []) => {\n const [lazyComponentStore, setLazyComponentStore] = useState(Object.fromEntries(componentStore));\n /**\n * Start loading only if there are any components passed in\n * and there are some new to load\n */\n const newUids = componentUids.filter((uid) => !componentStore.get(uid));\n const [loading, setLoading] = useState(() => !!newUids.length);\n const customFieldsRegistry = useCustomFields();\n\n useEffect(() => {\n const setStore = (store) => {\n setLazyComponentStore(store);\n setLoading(false);\n };\n\n const lazyLoadComponents = async (uids, components) => {\n const modules = await Promise.all(components);\n\n uids.forEach((uid, index) => {\n componentStore.set(uid, modules[index].default);\n });\n\n setStore(Object.fromEntries(componentStore));\n };\n\n if (newUids.length > 0) {\n setLoading(true);\n\n const componentPromises = newUids.reduce((arrayOfPromises, uid) => {\n const customField = customFieldsRegistry.get(uid);\n\n if (customField) {\n arrayOfPromises.push(customField.components.Input());\n }\n\n return arrayOfPromises;\n }, []);\n\n if (componentPromises.length > 0) {\n lazyLoadComponents(newUids, componentPromises);\n }\n }\n }, [newUids, customFieldsRegistry]);\n\n /**\n * Wrap this in a callback so it can be used in\n * effects to cleanup the cached store if required\n */\n const cleanup = useCallback(() => {\n componentStore.clear();\n setLazyComponentStore({});\n }, []);\n\n return { isLazyLoading: loading, lazyComponentStore, cleanup };\n};\n\nexport default useLazyComponents;\n","import React from 'react';\n\nimport { Typography } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\n\nexport const Hint = ({ id, error, name, hint }) => {\n if (hint.length === 0 || error) {\n return null;\n }\n\n return (\n <Typography as=\"p\" variant=\"pi\" id={`${id || name}-hint`} textColor=\"neutral600\">\n {hint}\n </Typography>\n );\n};\n\nHint.defaultProps = {\n id: undefined,\n error: undefined,\n hint: '',\n};\n\nHint.propTypes = {\n hint: PropTypes.oneOfType([PropTypes.string, PropTypes.array]),\n error: PropTypes.string,\n id: PropTypes.string,\n name: PropTypes.string.isRequired,\n};\n\nexport default Hint;\n","import { Transforms, Editor, Element as SlateElement, Node, Range } from 'slate';\n\n/**\n *\n * @param {string} url\n * @param {string} protocol\n */\nconst addProtocol = (url, protocol = 'https://') => {\n const allowedProtocols = ['http://', 'https://', 'mailto:', 'tel:'];\n\n if (allowedProtocols.some((allowedProtocol) => url.startsWith(allowedProtocol))) {\n return url;\n }\n\n return `${protocol}${url}`;\n};\n\n/**\n *\n * @param {import('slate').Editor} editor\n */\nconst removeLink = (editor) => {\n Transforms.unwrapNodes(editor, {\n match: (node) => !Editor.isEditor(node) && SlateElement.isElement(node) && node.type === 'link',\n });\n};\n\n/**\n *\n * @param {import('slate').Editor} editor\n * @param {object} link\n * @param {string} link.url\n */\nconst insertLink = (editor, { url }) => {\n if (editor.selection) {\n // We want to remove all link on the selection\n const linkNodes = Array.from(\n Editor.nodes(editor, {\n at: editor.selection,\n match: (node) => node.type === 'link',\n })\n );\n\n linkNodes.forEach(([, path]) => {\n Transforms.unwrapNodes(editor, { at: path });\n });\n\n if (Range.isCollapsed(editor.selection)) {\n const link = { type: 'link', url: url ? addProtocol(url) : '', children: [{ text: url }] };\n\n Transforms.insertNodes(editor, link);\n } else {\n Transforms.wrapNodes(\n editor,\n { type: 'link', url: url ? addProtocol(url) : '' },\n { split: true }\n );\n }\n }\n};\n\n/**\n *\n * @param {import('slate').Editor} editor\n * @param {object} link\n * @param {string} link.url\n * @param {string} link.text\n */\nconst editLink = (editor, { url, text }) => {\n if (editor.selection) {\n const [linkNode, linkPath] = Editor.above(editor, { match: (node) => node.type === 'link' });\n\n if (linkNode) {\n Transforms.setNodes(editor, { url: addProtocol(url) }, { at: linkPath });\n\n // If link text is different, we remove the old text and insert the new one\n if (text !== '' && text !== Editor.string(editor, linkPath)) {\n const linkNodeChildrens = Array.from(Node.children(editor, linkPath, { reverse: true }));\n\n linkNodeChildrens.forEach(([, childPath]) => {\n Transforms.removeNodes(editor, { at: childPath });\n });\n\n Transforms.insertNodes(editor, [{ text }], { at: linkPath.concat(0) });\n }\n }\n }\n};\n\nexport { insertLink, editLink, removeLink };\n","import * as React from 'react';\n\nimport {\n Box,\n Icon,\n Typography,\n BaseLink,\n Popover,\n Field,\n FieldLabel,\n FieldInput,\n Flex,\n Button,\n Tooltip,\n} from '@strapi/design-system';\nimport {\n Code,\n Quote,\n Picture,\n Paragraph,\n HeadingOne,\n HeadingTwo,\n HeadingThree,\n HeadingFour,\n HeadingFive,\n HeadingSix,\n Trash,\n Pencil,\n BulletList,\n NumberList,\n} from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport { Editor, Path, Transforms, Range } from 'slate';\nimport { useSlate, ReactEditor } from 'slate-react';\nimport styled, { css } from 'styled-components';\n\nimport { composeRefs } from '../../../utils';\nimport { editLink, removeLink } from '../utils/links';\n\nconst StyledBaseLink = styled(BaseLink)`\n text-decoration: none;\n`;\n\nconst H1 = styled(Typography).attrs({ as: 'h1' })`\n font-size: ${42 / 16}rem;\n line-height: ${({ theme }) => theme.lineHeights[1]};\n`;\n\nconst H2 = styled(Typography).attrs({ as: 'h2' })`\n font-size: ${35 / 16}rem;\n line-height: ${({ theme }) => theme.lineHeights[1]};\n`;\n\nconst H3 = styled(Typography).attrs({ as: 'h3' })`\n font-size: ${29 / 16}rem;\n line-height: ${({ theme }) => theme.lineHeights[1]};\n`;\n\nconst H4 = styled(Typography).attrs({ as: 'h4' })`\n font-size: ${24 / 16}rem;\n line-height: ${({ theme }) => theme.lineHeights[1]};\n`;\n\nconst H5 = styled(Typography).attrs({ as: 'h5' })`\n font-size: ${20 / 16}rem;\n line-height: ${({ theme }) => theme.lineHeights[1]};\n`;\n\nconst H6 = styled(Typography).attrs({ as: 'h6' })`\n font-size: 1rem;\n line-height: ${({ theme }) => theme.lineHeights[1]};\n`;\n\nconst CodeBlock = styled.pre.attrs({ role: 'code' })`\n border-radius: ${({ theme }) => theme.borderRadius};\n background-color: ${({ theme }) => theme.colors.neutral100};\n max-width: 100%;\n overflow: auto;\n padding: ${({ theme }) => `${theme.spaces[3]} ${theme.spaces[4]}`};\n flex-shrink: 0;\n & > code {\n font-family: 'SF Mono', SFMono-Regular, ui-monospace, 'DejaVu Sans Mono', Menlo, Consolas,\n monospace;\n color: ${({ theme }) => theme.colors.neutral800};\n overflow: auto;\n max-width: 100%;\n }\n`;\n\nconst Blockquote = styled.blockquote.attrs({ role: 'blockquote' })`\n margin: ${({ theme }) => `${theme.spaces[4]} 0`};\n font-weight: ${({ theme }) => theme.fontWeights.regular};\n border-left: ${({ theme }) => `${theme.spaces[1]} solid ${theme.colors.neutral200}`};\n padding: ${({ theme }) => theme.spaces[2]} ${({ theme }) => theme.spaces[5]};\n color: ${({ theme }) => theme.colors.neutral600};\n`;\n\nconst listStyle = css`\n margin-block-start: ${({ theme }) => theme.spaces[4]};\n margin-block-end: ${({ theme }) => theme.spaces[4]};\n margin-inline-start: ${({ theme }) => theme.spaces[0]};\n margin-inline-end: ${({ theme }) => theme.spaces[0]};\n padding-inline-start: ${({ theme }) => theme.spaces[4]};\n\n ol,\n ul {\n margin-block-start: ${({ theme }) => theme.spaces[0]};\n margin-block-end: ${({ theme }) => theme.spaces[0]};\n }\n`;\n\nconst Orderedlist = styled.ol`\n list-style-type: decimal;\n ${listStyle}\n`;\n\nconst Unorderedlist = styled.ul`\n list-style-type: disc;\n ${listStyle}\n`;\n\nconst List = ({ attributes, children, element }) => {\n if (element.format === 'ordered') return <Orderedlist {...attributes}>{children}</Orderedlist>;\n\n return <Unorderedlist {...attributes}>{children}</Unorderedlist>;\n};\n\nList.propTypes = {\n attributes: PropTypes.object.isRequired,\n children: PropTypes.node.isRequired,\n element: PropTypes.shape({\n format: PropTypes.string.isRequired,\n }).isRequired,\n};\n\n/**\n * @param {import('slate').Editor} editor\n * @param {Path} currentListPath\n */\nconst replaceListWithEmptyBlock = (editor, currentListPath) => {\n // Delete the empty list\n Transforms.removeNodes(editor, { at: currentListPath });\n\n if (currentListPath[0] === 0) {\n // If the list was the only (or first) block element then insert empty paragraph as editor needs default value\n Transforms.insertNodes(\n editor,\n {\n type: 'paragraph',\n children: [{ type: 'text', text: '' }],\n },\n { at: currentListPath }\n );\n Transforms.select(editor, currentListPath);\n }\n};\n\n/**\n * Common handler for the backspace event on ordered and unordered lists\n * @param {import('slate').Editor} editor\n * @param {Event} event\n */\nconst handleBackspaceKeyOnList = (editor, event) => {\n const [currentListItem, currentListItemPath] = Editor.parent(editor, editor.selection.anchor);\n const [currentList, currentListPath] = Editor.parent(editor, currentListItemPath);\n const isListEmpty = currentList.children.length === 1 && currentListItem.children[0].text === '';\n const isNodeStart = Editor.isStart(editor, editor.selection.anchor, currentListItemPath);\n const isFocusAtTheBeginningOfAChild =\n editor.selection.focus.offset === 0 && editor.selection.focus.path.at(-1) === 0;\n\n if (isListEmpty) {\n event.preventDefault();\n replaceListWithEmptyBlock(editor, currentListPath);\n } else if (isNodeStart) {\n Transforms.liftNodes(editor, {\n match: (n) => n.type === 'list-item',\n });\n // Transforms the list item into a paragraph\n Transforms.setNodes(\n editor,\n { type: 'paragraph' },\n {\n hanging: true,\n }\n );\n } else if (isFocusAtTheBeginningOfAChild) {\n Transforms.liftNodes(editor, {\n match: (n) => n.type === 'list-item',\n });\n // If the focus is at the beginning of a child node we need to replace it with a paragraph\n Transforms.setNodes(editor, { type: 'paragraph' });\n }\n};\n\n/**\n * Common handler for the enter key on ordered and unordered lists\n * @param {import('slate').Editor} editor\n */\nconst handleEnterKeyOnList = (editor) => {\n const [currentListItem, currentListItemPath] = Editor.above(editor, {\n matchNode: (node) => node.type === 'list-item',\n });\n const [currentList, currentListPath] = Editor.parent(editor, currentListItemPath);\n const isListEmpty = currentList.children.length === 1 && currentListItem.children[0].text === '';\n const isListItemEmpty =\n currentListItem.children.length === 1 && currentListItem.children[0].text === '';\n\n if (isListEmpty) {\n replaceListWithEmptyBlock(editor, currentListPath);\n } else if (isListItemEmpty) {\n // Delete the empty list item\n Transforms.removeNodes(editor, { at: currentListItemPath });\n\n // Create a new paragraph below the parent list\n const listNodeEntry = Editor.above(editor, { match: (n) => n.type === 'list' });\n const createdParagraphPath = Path.next(listNodeEntry[1]);\n Transforms.insertNodes(\n editor,\n {\n type: 'paragraph',\n children: [{ type: 'text', text: '' }],\n },\n { at: createdParagraphPath }\n );\n\n // Move the selection to the newly created paragraph\n Transforms.select(editor, createdParagraphPath);\n } else {\n // Check if the cursor is at the end of the list item\n const isNodeEnd = Editor.isEnd(editor, editor.selection.anchor, currentListItemPath);\n\n if (isNodeEnd) {\n // If there was nothing after the cursor, create a fresh new list item,\n // in order to avoid carrying over the modifiers from the previous list item\n Transforms.insertNodes(editor, { type: 'list-item', children: [{ type: 'text', text: '' }] });\n } else {\n // If there is something after the cursor, split the current list item,\n // so that we keep the content and the modifiers\n Transforms.splitNodes(editor);\n }\n }\n};\n\n// The max-height is decided with the design team, the 56px is the height of the toolbar\nconst Img = styled.img`\n max-height: calc(512px - 56px);\n max-width: 100%;\n object-fit: contain;\n`;\n\n// Added a background color to the image wrapper to make it easier to recognize the image block\nconst Image = ({ attributes, children, element }) => {\n if (!element.image) return null;\n const { url, alternativeText, width, height } = element.image;\n\n return (\n <Box {...attributes}>\n {children}\n <Flex background=\"neutral100\" contentEditable={false} justifyContent=\"center\">\n <Img src={url} alt={alternativeText} width={width} height={height} />\n </Flex>\n </Box>\n );\n};\n\nImage.propTypes = {\n attributes: PropTypes.object.isRequired,\n children: PropTypes.node.isRequired,\n element: PropTypes.shape({\n image: PropTypes.shape({\n url: PropTypes.string.isRequired,\n alternativeText: PropTypes.string,\n width: PropTypes.number,\n height: PropTypes.number,\n }),\n }).isRequired,\n};\n\n// Make sure the tooltip is above the popover\nconst TooltipCustom = styled(Tooltip)`\n z-index: 6;\n`;\n\n// Used for the Edit and Cancel buttons in the link popover\nconst CustomButton = styled(Button)`\n & > span {\n line-height: normal;\n }\n`;\n\nconst Link = React.forwardRef(({ element, children, ...attributes }, forwardedRef) => {\n const { formatMessage } = useIntl();\n const editor = useSlate();\n const path = ReactEditor.findPath(editor, element);\n const [popoverOpen, setPopoverOpen] = React.useState(\n editor.lastInsertedLinkPath ? Path.equals(path, editor.lastInsertedLinkPath) : false\n );\n const [isEditing, setIsEditing] = React.useState(element.url === '');\n const linkRef = React.useRef(null);\n const elementText = element.children.map((child) => child.text).join('');\n const [linkText, setLinkText] = React.useState(elementText);\n const [linkUrl, setLinkUrl] = React.useState(element.url);\n\n const handleOpenEditPopover = (e) => {\n e.preventDefault();\n setPopoverOpen(true);\n };\n\n const handleSave = (e) => {\n e.stopPropagation();\n\n // If the selection is collapsed, we select the parent node because we want all the link to be replaced\n if (Range.isCollapsed(editor.selection)) {\n const [, parentPath] = Editor.parent(editor, editor.selection.focus?.path);\n Transforms.select(editor, parentPath);\n }\n\n editLink(editor, { url: linkUrl, text: linkText });\n setIsEditing(false);\n };\n\n const handleCancel = () => {\n setIsEditing(false);\n\n if (element.url === '') {\n removeLink(editor);\n }\n };\n\n const handleDismiss = () => {\n setPopoverOpen(false);\n\n if (element.url === '') {\n removeLink(editor);\n }\n\n ReactEditor.focus(editor);\n };\n\n const composedRefs = composeRefs(linkRef, forwardedRef);\n\n return (\n <>\n <StyledBaseLink\n {...attributes}\n ref={composedRefs}\n href={element.url}\n onClick={handleOpenEditPopover}\n color=\"primary600\"\n >\n {children}\n </StyledBaseLink>\n {popoverOpen && (\n <Popover source={linkRef} onDismiss={handleDismiss} padding={4} contentEditable={false}>\n {isEditing ? (\n <Flex as=\"form\" onSubmit={handleSave} direction=\"column\" gap={4}>\n <Field width=\"300px\">\n <FieldLabel>\n {formatMessage({\n id: 'components.Blocks.popover.text',\n defaultMessage: 'Text',\n })}\n </FieldLabel>\n <FieldInput\n name=\"text\"\n placeholder={formatMessage({\n id: 'components.Blocks.popover.text.placeholder',\n defaultMessage: 'Enter link text',\n })}\n value={linkText}\n onChange={(e) => setLinkText(e.target.value)}\n />\n </Field>\n <Field width=\"300px\">\n <FieldLabel>\n {formatMessage({\n id: 'components.Blocks.popover.link',\n defaultMessage: 'Link',\n })}\n </FieldLabel>\n <FieldInput\n name=\"url\"\n placeholder=\"https://strapi.io\"\n value={linkUrl}\n onChange={(e) => setLinkUrl(e.target.value)}\n />\n </Field>\n <Flex justifyContent=\"end\" width=\"100%\" gap={2}>\n <Button variant=\"tertiary\" onClick={handleCancel}>\n {formatMessage({\n id: 'components.Blocks.popover.cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n <Button type=\"submit\" disabled={!linkText || !linkUrl}>\n {formatMessage({\n id: 'components.Blocks.popover.save',\n defaultMessage: 'Save',\n })}\n </Button>\n </Flex>\n </Flex>\n ) : (\n <Flex direction=\"column\" gap={4} alignItems=\"start\" width=\"400px\">\n <Typography>{elementText}</Typography>\n <Typography>\n <StyledBaseLink href={element.url} target=\"_blank\" color=\"primary600\">\n {element.url}\n </StyledBaseLink>\n </Typography>\n <Flex justifyContent=\"end\" width=\"100%\" gap={2}>\n <TooltipCustom\n description={formatMessage({\n id: 'components.Blocks.popover.delete',\n defaultMessage: 'Delete',\n })}\n >\n <CustomButton\n size=\"S\"\n width=\"2rem\"\n variant=\"danger-light\"\n onClick={() => removeLink(editor)}\n aria-label={formatMessage({\n id: 'components.Blocks.popover.delete',\n defaultMessage: 'Delete',\n })}\n type=\"button\"\n justifyContent=\"center\"\n >\n <Icon width={3} height={3} as={Trash} />\n </CustomButton>\n </TooltipCustom>\n\n <TooltipCustom\n description={formatMessage({\n id: 'components.Blocks.popover.edit',\n defaultMessage: 'Edit',\n })}\n >\n <CustomButton\n size=\"S\"\n width=\"2rem\"\n variant=\"tertiary\"\n onClick={() => setIsEditing(true)}\n aria-label={formatMessage({\n id: 'components.Blocks.popover.edit',\n defaultMessage: 'Edit',\n })}\n type=\"button\"\n justifyContent=\"center\"\n >\n <Icon width={3} height={3} as={Pencil} />\n </CustomButton>\n </TooltipCustom>\n </Flex>\n </Flex>\n )}\n </Popover>\n )}\n </>\n );\n});\n\nLink.propTypes = {\n element: PropTypes.object.isRequired,\n children: PropTypes.node.isRequired,\n};\n\n/**\n * Manages a store of all the available blocks.\n *\n * @returns {{\n * [key: string]: {\n * renderElement: (props: Object) => JSX.Element,\n * icon: React.ComponentType,\n * label: {id: string, defaultMessage: string},\n * value: Object,\n * matchNode: (node: Object) => boolean,\n * isInBlocksSelector: true,\n * handleEnterKey: (editor: import('slate').Editor) => void,\n * handleBackspaceKey?:(editor: import('slate').Editor, event: Event) => void,\n * }\n * }} an object containing rendering functions and metadata for different blocks, indexed by name.\n */\nexport function useBlocksStore() {\n return {\n paragraph: {\n renderElement: (props) => (\n <Typography as=\"p\" variant=\"omega\" {...props.attributes}>\n {props.children}\n </Typography>\n ),\n icon: Paragraph,\n label: {\n id: 'components.Blocks.blocks.text',\n defaultMessage: 'Text',\n },\n value: {\n type: 'paragraph',\n },\n matchNode: (node) => node.type === 'paragraph',\n isInBlocksSelector: true,\n handleEnterKey(editor) {\n // We need to keep track of the initial position of the cursor\n const anchorPathInitialPosition = editor.selection.anchor.path;\n /**\n * Split the nodes where the cursor is. This will create a new paragraph with the content\n * after the cursor, while retaining all the children, modifiers etc.\n */\n Transforms.splitNodes(editor, {\n // Makes sure we always create a new node,\n // even if there's nothing to the right of the cursor in the node.\n always: true,\n });\n\n // Check if the created node is empty (if there was no text after the cursor in the node)\n // This lets us know if we need to carry over the modifiers from the previous node\n const [, parentBlockPath] = Editor.above(editor, {\n match: (n) => n.type !== 'text',\n });\n const isNodeEnd = Editor.isEnd(editor, editor.selection.anchor, parentBlockPath);\n\n /**\n * Delete and recreate the node that was created at the right of the cursor.\n * This is to avoid node pollution\n * (e.g. keeping the level attribute when converting a heading to a paragraph).\n * Select the parent of the selection because we want the full block, not the leaf.\n * And copy its children to make sure we keep the modifiers.\n */\n const [fragmentedNode] = Editor.parent(editor, editor.selection.anchor.path);\n Transforms.removeNodes(editor, editor.selection);\n\n // Check if after the current position there is another node\n const hasNextNode = editor.children.length - anchorPathInitialPosition[0] > 1;\n\n // Insert the new node at the right position.\n // The next line after the editor selection if present or otherwise at the end of the editor.\n Transforms.insertNodes(\n editor,\n {\n type: 'paragraph',\n // Don't carry over the modifiers from the previous node if there was no text after the cursor\n children: isNodeEnd ? [{ type: 'text', text: '' }] : fragmentedNode.children,\n },\n {\n at: hasNextNode ? [anchorPathInitialPosition[0] + 1] : [editor.children.length],\n }\n );\n\n /**\n * The new selection will by default be at the end of the created node.\n * Instead we manually move it to the start of the created node.\n * Use slice(0, -1) to go 1 level higher in the tree,\n * so we go to the start of the node and not the start of the leaf.\n */\n Transforms.select(editor, editor.start([anchorPathInitialPosition[0] + 1]));\n },\n },\n 'heading-one': {\n renderElement: (props) => <H1 {...props.attributes}>{props.children}</H1>,\n icon: HeadingOne,\n label: {\n id: 'components.Blocks.blocks.heading1',\n defaultMessage: 'Heading 1',\n },\n value: {\n type: 'heading',\n level: 1,\n },\n matchNode: (node) => node.type === 'heading' && node.level === 1,\n isInBlocksSelector: true,\n },\n 'heading-two': {\n renderElement: (props) => <H2 {...props.attributes}>{props.children}</H2>,\n icon: HeadingTwo,\n label: {\n id: 'components.Blocks.blocks.heading2',\n defaultMessage: 'Heading 2',\n },\n value: {\n type: 'heading',\n level: 2,\n },\n matchNode: (node) => node.type === 'heading' && node.level === 2,\n isInBlocksSelector: true,\n },\n 'heading-three': {\n renderElement: (props) => <H3 {...props.attributes}>{props.children}</H3>,\n icon: HeadingThree,\n label: {\n id: 'components.Blocks.blocks.heading3',\n defaultMessage: 'Heading 3',\n },\n value: {\n type: 'heading',\n level: 3,\n },\n matchNode: (node) => node.type === 'heading' && node.level === 3,\n isInBlocksSelector: true,\n },\n 'heading-four': {\n renderElement: (props) => <H4 {...props.attributes}>{props.children}</H4>,\n icon: HeadingFour,\n label: {\n id: 'components.Blocks.blocks.heading4',\n defaultMessage: 'Heading 4',\n },\n value: {\n type: 'heading',\n level: 4,\n },\n matchNode: (node) => node.type === 'heading' && node.level === 4,\n isInBlocksSelector: true,\n },\n 'heading-five': {\n renderElement: (props) => <H5 {...props.attributes}>{props.children}</H5>,\n icon: HeadingFive,\n label: {\n id: 'components.Blocks.blocks.heading5',\n defaultMessage: 'Heading 5',\n },\n value: {\n type: 'heading',\n level: 5,\n },\n matchNode: (node) => node.type === 'heading' && node.level === 5,\n isInBlocksSelector: true,\n },\n 'heading-six': {\n renderElement: (props) => <H6 {...props.attributes}>{props.children}</H6>,\n icon: HeadingSix,\n label: {\n id: 'components.Blocks.blocks.heading6',\n defaultMessage: 'Heading 6',\n },\n value: {\n type: 'heading',\n level: 6,\n },\n matchNode: (node) => node.type === 'heading' && node.level === 6,\n isInBlocksSelector: true,\n },\n 'list-ordered': {\n renderElement: (props) => <List {...props} />,\n label: {\n id: 'components.Blocks.blocks.orderedList',\n defaultMessage: 'Numbered list',\n },\n value: {\n type: 'list',\n format: 'ordered',\n },\n icon: NumberList,\n matchNode: (node) => node.type === 'list' && node.format === 'ordered',\n isInBlocksSelector: true,\n handleEnterKey: handleEnterKeyOnList,\n handleBackspaceKey: handleBackspaceKeyOnList,\n },\n 'list-unordered': {\n renderElement: (props) => <List {...props} />,\n label: {\n id: 'components.Blocks.blocks.unorderedList',\n defaultMessage: 'Bulleted list',\n },\n value: {\n type: 'list',\n format: 'unordered',\n },\n icon: BulletList,\n matchNode: (node) => node.type === 'list' && node.format === 'unordered',\n isInBlocksSelector: true,\n handleEnterKey: handleEnterKeyOnList,\n handleBackspaceKey: handleBackspaceKeyOnList,\n },\n 'list-item': {\n renderElement: (props) => (\n <Typography as=\"li\" {...props.attributes}>\n {props.children}\n </Typography>\n ),\n value: {\n type: 'list-item',\n },\n matchNode: (node) => node.type === 'list-item',\n isInBlocksSelector: false,\n },\n link: {\n renderElement: (props) => (\n <Link element={props.element} {...props.attributes}>\n {props.children}\n </Link>\n ),\n value: {\n type: 'link',\n },\n matchNode: (node) => node.type === 'link',\n isInBlocksSelector: false,\n },\n image: {\n renderElement: (props) => <Image {...props} />,\n icon: Picture,\n label: {\n id: 'components.Blocks.blocks.image',\n defaultMessage: 'Image',\n },\n value: {\n type: 'image',\n },\n matchNode: (node) => node.type === 'image',\n isInBlocksSelector: true,\n },\n quote: {\n renderElement: (props) => <Blockquote {...props.attributes}>{props.children}</Blockquote>,\n icon: Quote,\n label: {\n id: 'components.Blocks.blocks.quote',\n defaultMessage: 'Quote',\n },\n value: {\n type: 'quote',\n },\n matchNode: (node) => node.type === 'quote',\n isInBlocksSelector: true,\n handleEnterKey(editor) {\n /**\n * To determine if we should break out of the quote node, check 2 things:\n * 1. If the cursor is at the end of the quote node\n * 2. If the last line of the quote node is empty\n */\n const [quoteNode, quoteNodePath] = Editor.above(editor, {\n match: (n) => n.type === 'quote',\n });\n const isNodeEnd = Editor.isEnd(editor, editor.selection.anchor, quoteNodePath);\n const isEmptyLine = quoteNode.children.at(-1).text.endsWith('\\n');\n\n if (isNodeEnd && isEmptyLine) {\n // Remove the last line break\n Transforms.delete(editor, { distance: 1, unit: 'character', reverse: true });\n // Break out of the quote node new paragraph\n Transforms.insertNodes(editor, {\n type: 'paragraph',\n children: [{ type: 'text', text: '' }],\n });\n } else {\n // Otherwise insert a new line within the quote node\n Transforms.insertText(editor, '\\n');\n\n // If there's nothing after the cursor, disable modifiers\n if (isNodeEnd) {\n Editor.removeMark(editor, 'bold');\n Editor.removeMark(editor, 'italic');\n }\n }\n },\n },\n code: {\n renderElement: (props) => (\n <CodeBlock {...props.attributes}>\n <code>{props.children}</code>\n </CodeBlock>\n ),\n icon: Code,\n label: {\n id: 'components.Blocks.blocks.code',\n defaultMessage: 'Code',\n },\n value: {\n type: 'code',\n },\n matchNode: (node) => node.type === 'code',\n isInBlocksSelector: true,\n handleEnterKey(editor) {\n // Insert a new line within the block\n Transforms.insertText(editor, '\\n');\n },\n },\n };\n}\n","import * as React from 'react';\n\nimport { Typography } from '@strapi/design-system';\nimport { Bold, Italic, Underline, StrikeThrough, Code } from '@strapi/icons';\nimport { Editor, Transforms } from 'slate';\nimport { useSlate } from 'slate-react';\nimport styled, { css } from 'styled-components';\n\nconst stylesToInherit = css`\n font-size: inherit;\n color: inherit;\n line-height: inherit;\n`;\n\nconst BoldText = styled(Typography).attrs({ fontWeight: 'bold' })`\n ${stylesToInherit}\n`;\n\nconst ItalicText = styled(Typography)`\n font-style: italic;\n ${stylesToInherit}\n`;\n\nconst UnderlineText = styled(Typography).attrs({ textDecoration: 'underline' })`\n ${stylesToInherit}\n`;\n\nconst StrikeThroughText = styled(Typography).attrs({ textDecoration: 'line-through' })`\n ${stylesToInherit}\n`;\n\nconst InlineCode = styled.code`\n background-color: ${({ theme }) => theme.colors.neutral150};\n border-radius: ${({ theme }) => theme.borderRadius};\n padding: ${({ theme }) => `0 ${theme.spaces[2]}`};\n font-family: 'SF Mono', SFMono-Regular, ui-monospace, 'DejaVu Sans Mono', Menlo, Consolas,\n monospace;\n color: inherit;\n`;\n\n/**\n * Manages a store of all the available modifiers.\n *\n * @returns {{\n * [key: string]: {\n * icon: IconComponent,\n * isValidEventKey: (event: Event) => boolean,\n * label: {id: string, defaultMessage: string},\n * checkIsActive: () => boolean,\n * handleToggle: () => void,\n * renderLeaf: (children: JSX.Element) => JSX.Element,\n * }\n * }} An object containing rendering functions and metadata for different text modifiers, indexed by name.\n */\nexport function useModifiersStore() {\n const editor = useSlate();\n const modifiers = Editor.marks(editor);\n\n /**\n * The default handler for checking if a modifier is active\n *\n * @param {string} name - The name of the modifier to check\n */\n const baseCheckIsActive = (name) => {\n if (!modifiers) return false;\n\n return Boolean(modifiers[name]);\n };\n\n /**\n * The default handler for toggling a modifier\n *\n * @param {string} name - The name of the modifier to toggle\n */\n const baseHandleToggle = (name) => {\n // If there is no selection, set selection to the end of line\n if (!editor.selection) {\n const endOfEditor = Editor.end(editor, []);\n Transforms.select(editor, endOfEditor);\n }\n if (modifiers?.[name]) {\n Editor.removeMark(editor, name);\n } else {\n Editor.addMark(editor, name, true);\n }\n };\n\n return {\n bold: {\n icon: Bold,\n isValidEventKey: (event) => event.key === 'b',\n label: { id: 'components.Blocks.modifiers.bold', defaultMessage: 'Bold' },\n checkIsActive: () => baseCheckIsActive('bold'),\n handleToggle: () => baseHandleToggle('bold'),\n renderLeaf: (children) => <BoldText>{children}</BoldText>,\n },\n italic: {\n icon: Italic,\n isValidEventKey: (event) => event.key === 'i',\n label: { id: 'components.Blocks.modifiers.italic', defaultMessage: 'Italic' },\n checkIsActive: () => baseCheckIsActive('italic'),\n handleToggle: () => baseHandleToggle('italic'),\n renderLeaf: (children) => <ItalicText>{children}</ItalicText>,\n },\n underline: {\n icon: Underline,\n isValidEventKey: (event) => event.key === 'u',\n label: { id: 'components.Blocks.modifiers.underline', defaultMessage: 'Underline' },\n checkIsActive: () => baseCheckIsActive('underline'),\n handleToggle: () => baseHandleToggle('underline'),\n renderLeaf: (children) => <UnderlineText>{children}</UnderlineText>,\n },\n strikethrough: {\n icon: StrikeThrough,\n isValidEventKey: (event) => event.key === 'S' && event.shiftKey,\n label: { id: 'components.Blocks.modifiers.strikethrough', defaultMessage: 'Strikethrough' },\n checkIsActive: () => baseCheckIsActive('strikethrough'),\n handleToggle: () => baseHandleToggle('strikethrough'),\n renderLeaf: (children) => <StrikeThroughText>{children}</StrikeThroughText>,\n },\n code: {\n icon: Code,\n isValidEventKey: (event) => event.key === 'e',\n label: { id: 'components.Blocks.modifiers.code', defaultMessage: 'Code' },\n checkIsActive: () => baseCheckIsActive('code'),\n handleToggle: () => baseHandleToggle('code'),\n renderLeaf: (children) => <InlineCode>{children}</InlineCode>,\n },\n };\n}\n","import * as React from 'react';\n\nimport { Box } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\nimport { Editable, useSlate } from 'slate-react';\nimport { useTheme } from 'styled-components';\n\nimport { useBlocksStore } from '../hooks/useBlocksStore';\nimport { useModifiersStore } from '../hooks/useModifiersStore';\n\nconst getEditorStyle = (theme) => ({\n // The outline style is set on the wrapper with :focus-within\n outline: 'none',\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spaces[2],\n height: '100%',\n});\n\nconst baseRenderLeaf = (props, modifiers) => {\n // Recursively wrap the children for each active modifier\n const wrappedChildren = Object.entries(modifiers).reduce((currentChildren, modifierEntry) => {\n const [name, modifier] = modifierEntry;\n\n if (props.leaf[name]) {\n return modifier.renderLeaf(currentChildren);\n }\n\n return currentChildren;\n }, props.children);\n\n return <span {...props.attributes}>{wrappedChildren}</span>;\n};\n\nconst baseRenderElement = (props, blocks) => {\n const blockMatch = Object.values(blocks).find((block) => block.matchNode(props.element));\n const block = blockMatch || blocks.paragraph;\n\n return block.renderElement(props);\n};\n\nconst BlocksInput = ({ disabled, placeholder }) => {\n const theme = useTheme();\n const editor = useSlate();\n const blocksRef = React.useRef();\n\n // Create renderLeaf function based on the modifiers store\n const modifiers = useModifiersStore();\n const renderLeaf = React.useCallback((props) => baseRenderLeaf(props, modifiers), [modifiers]);\n\n // Create renderElement function base on the blocks store\n const blocks = useBlocksStore();\n const renderElement = React.useCallback((props) => baseRenderElement(props, blocks), [blocks]);\n\n const handleEnter = () => {\n const selectedNode = editor.children[editor.selection.anchor.path[0]];\n const selectedBlock = Object.values(blocks).find((block) => block.matchNode(selectedNode));\n\n // Check if there's an enter handler for the selected block\n if (selectedBlock.handleEnterKey) {\n selectedBlock.handleEnterKey(editor);\n } else {\n // If not, insert a new paragraph\n blocks.paragraph.handleEnterKey(editor);\n }\n };\n\n const handleBackspaceEvent = (event) => {\n const selectedNode = editor.children[editor.selection.anchor.path[0]];\n const selectedBlock = Object.values(blocks).find((block) => block.matchNode(selectedNode));\n\n if (selectedBlock.handleBackspaceKey) {\n selectedBlock.handleBackspaceKey(editor, event);\n }\n };\n\n /**\n * Modifier keyboard shortcuts\n */\n const handleKeyboardShortcuts = (event) => {\n const isCtrlOrCmd = event.metaKey || event.ctrlKey;\n\n if (isCtrlOrCmd) {\n Object.values(modifiers).forEach((value) => {\n if (value.isValidEventKey(event)) {\n value.handleToggle();\n }\n });\n }\n };\n\n const handleKeyDown = (event) => {\n if (event.key === 'Enter') {\n event.preventDefault();\n handleEnter();\n }\n if (event.key === 'Backspace') {\n handleBackspaceEvent(event);\n }\n handleKeyboardShortcuts(event);\n };\n\n /**\n * scrollSelectionIntoView : Slate's default method to scroll a DOM selection into the view,\n * thats shifting layout for us when there is a overflowY:scroll on the viewport.\n * We are overriding it to check if the selection is not fully within the visible area of the editor,\n * we use scrollBy one line to the bottom\n */\n const handleScrollSelectionIntoView = (_, domRange) => {\n const domRect = domRange.getBoundingClientRect();\n const blocksInput = blocksRef.current;\n const editorRect = blocksInput.getBoundingClientRect();\n\n // Check if the selection is not fully within the visible area of the editor\n if (domRect.top < editorRect.top || domRect.bottom > editorRect.bottom) {\n // Scroll by one line to the bottom\n blocksInput.scrollBy({\n top: 28, // 20px is the line-height + 8px line gap\n behavior: 'smooth',\n });\n }\n };\n\n return (\n <Box\n ref={blocksRef}\n grow={1}\n width=\"100%\"\n overflow=\"auto\"\n fontSize={2}\n background=\"neutral0\"\n color=\"neutral800\"\n lineHeight={6}\n hasRadius\n paddingLeft={4}\n paddingRight={4}\n marginTop={3}\n marginBottom={3}\n >\n <Editable\n readOnly={disabled}\n placeholder={placeholder}\n style={getEditorStyle(theme)}\n renderElement={renderElement}\n renderLeaf={renderLeaf}\n onKeyDown={handleKeyDown}\n scrollSelectionIntoView={handleScrollSelectionIntoView}\n />\n </Box>\n );\n};\n\nBlocksInput.defaultProps = {\n placeholder: null,\n};\n\nBlocksInput.propTypes = {\n disabled: PropTypes.bool.isRequired,\n placeholder: PropTypes.string,\n};\n\nexport default BlocksInput;\n","import { Path, Transforms, Range, Point, Editor } from 'slate';\n\nimport { insertLink } from '../utils/links';\n\nconst withLinks = (editor) => {\n const { isInline, apply, insertText, insertData } = editor;\n\n // Links are inline elements, so we need to override the isInline method for slate\n editor.isInline = (element) => {\n return element.type === 'link' ? true : isInline(element);\n };\n\n // We keep a track of the last inserted link path\n // So we can show the popover on the link component if that link is the last one inserted\n editor.lastInsertedLinkPath = null;\n\n // We intercept the apply method, so everytime we insert a new link, we save its path\n editor.apply = (operation) => {\n if (operation.type === 'insert_node') {\n if (operation.node.type === 'link') {\n editor.lastInsertedLinkPath = operation.path;\n }\n } else if (operation.type === 'move_node') {\n // We need to update the last inserted link path when link is moved\n // If link is the first word in the paragraph we dont need to update the path\n if (Path.hasPrevious(operation.path)) {\n editor.lastInsertedLinkPath = Path.transform(editor.lastInsertedLinkPath, operation);\n }\n }\n\n apply(operation);\n };\n\n editor.insertText = (text) => {\n // When selection is at the end of a link and user types a space, we want to break the link\n if (Range.isCollapsed(editor.selection) && text === ' ') {\n const linksInSelection = Array.from(\n Editor.nodes(editor, { at: editor.selection, match: (node) => node.type === 'link' })\n );\n\n const selectionIsInLink = editor.selection && linksInSelection.length > 0;\n const selectionIsAtEndOfLink =\n selectionIsInLink &&\n Point.equals(editor.selection.anchor, Editor.end(editor, linksInSelection[0][1]));\n\n if (selectionIsAtEndOfLink) {\n Transforms.insertNodes(\n editor,\n { text: ' ', type: 'text' },\n { at: Path.next(linksInSelection[0][1]), select: true }\n );\n\n return;\n }\n }\n\n insertText(text);\n };\n\n // Add data as a clickable link if its a valid URL\n editor.insertData = (data) => {\n const pastedText = data.getData('text/plain');\n\n if (pastedText) {\n try {\n // eslint-disable-next-line no-new\n new URL(pastedText);\n insertLink(editor, { url: pastedText });\n\n return;\n } catch (error) {\n // continue normal data insertion\n }\n }\n\n insertData(data);\n };\n\n return editor;\n};\n\nexport { withLinks };\n","import { Element, Transforms } from 'slate';\n\n/**\n * This plugin is used to normalize the Slate document to match the Strapi schema.\n *\n * @param {import('slate').Editor} editor\n */\nconst withStrapiSchema = (editor) => {\n const { normalizeNode } = editor;\n\n /**\n * On the strapi schema, we want text nodes to have type: text\n * By default, Slate add text nodes without type: text\n * So we add this normalization for the cases when Slate add text nodes automatically\n */\n editor.normalizeNode = (entry) => {\n const [node, path] = entry;\n\n if (!Element.isElement(node)) {\n if (node.type !== 'text') {\n Transforms.setNodes(editor, { type: 'text' }, { at: path });\n\n return;\n }\n }\n\n normalizeNode(entry);\n };\n\n return editor;\n};\n\nexport { withStrapiSchema };\n","import * as React from 'react';\n\nimport * as Toolbar from '@radix-ui/react-toolbar';\nimport { Flex, Icon, Tooltip, SingleSelect, SingleSelectOption, Box } from '@strapi/design-system';\nimport { pxToRem, prefixFileUrlWithBackendUrl, useLibrary } from '@strapi/helper-plugin';\nimport { Link } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport { Editor, Transforms, Element as SlateElement } from 'slate';\nimport { ReactEditor, useSlate } from 'slate-react';\nimport styled from 'styled-components';\n\nimport { useBlocksStore } from '../hooks/useBlocksStore';\nimport { useModifiersStore } from '../hooks/useModifiersStore';\nimport { insertLink } from '../utils/links';\n\nconst ToolbarWrapper = styled(Flex)`\n &[aria-disabled='true'] {\n cursor: not-allowed;\n }\n`;\n\nconst Separator = styled(Toolbar.Separator)`\n background: ${({ theme }) => theme.colors.neutral150};\n width: 1px;\n height: ${pxToRem(24)};\n`;\n\nconst FlexButton = styled(Flex).attrs({ as: 'button' })`\n // Inherit the not-allowed cursor from ToolbarWrapper when disabled\n &[aria-disabled] {\n cursor: inherit;\n }\n\n &[aria-disabled='false'] {\n cursor: pointer;\n\n // Only apply hover styles if the button is enabled\n &:hover {\n background: ${({ theme }) => theme.colors.primary100};\n }\n }\n`;\n\nconst SelectWrapper = styled(Box)`\n // Styling changes to SingleSelect component don't work, so adding wrapper to target SingleSelect\n div[role='combobox'] {\n border: none;\n cursor: pointer;\n min-height: unset;\n padding-top: 6px;\n padding-bottom: 6px;\n\n &[aria-disabled='false']:hover {\n cursor: pointer;\n background: ${({ theme }) => theme.colors.primary100};\n }\n\n &[aria-disabled] {\n background: transparent;\n cursor: inherit;\n\n // Select text and icons should also have disabled color\n span {\n color: ${({ theme }) => theme.colors.neutral600};\n }\n }\n }\n`;\n\nconst ToolbarButton = ({ icon, name, label, isActive, disabled, handleClick }) => {\n const editor = useSlate();\n const { formatMessage } = useIntl();\n const labelMessage = formatMessage(label);\n\n const enabledColor = isActive ? 'primary600' : 'neutral600';\n\n return (\n <Tooltip description={labelMessage}>\n <Toolbar.ToggleItem\n value={name}\n data-state={isActive ? 'on' : 'off'}\n onMouseDown={(e) => {\n e.preventDefault();\n handleClick();\n }}\n aria-disabled={disabled}\n disabled={disabled}\n aria-label={labelMessage}\n asChild\n >\n <FlexButton\n disabled={disabled}\n background={isActive ? 'primary100' : ''}\n alignItems=\"center\"\n justifyContent=\"center\"\n width={7}\n height={7}\n hasRadius\n onMouseDown={() => {\n handleClick();\n // When a button is clicked it blurs the editor, restore the focus to the editor\n ReactEditor.focus(editor);\n }}\n aria-label={labelMessage}\n >\n <Icon width={3} height={3} as={icon} color={disabled ? 'neutral300' : enabledColor} />\n </FlexButton>\n </Toolbar.ToggleItem>\n </Tooltip>\n );\n};\n\nToolbarButton.propTypes = {\n icon: PropTypes.elementType.isRequired,\n name: PropTypes.string.isRequired,\n label: PropTypes.shape({\n id: PropTypes.string.isRequired,\n defaultMessage: PropTypes.string.isRequired,\n }).isRequired,\n isActive: PropTypes.bool.isRequired,\n disabled: PropTypes.bool.isRequired,\n handleClick: PropTypes.func.isRequired,\n};\n\nconst toggleBlock = (editor, value) => {\n const { type, level, format } = value;\n\n // Set the selected block properties received from the useBlockStore\n const blockProperties = {\n type,\n level: level || null,\n format: format || null,\n };\n\n if (editor.selection) {\n // If the selection is inside a list, split the list so that the modified block is outside of it\n Transforms.unwrapNodes(editor, {\n match: (node) => node.type === 'list',\n split: true,\n });\n\n // When there is a selection, update the existing block in the tree\n Transforms.setNodes(editor, blockProperties);\n } else {\n /**\n * When there is no selection, we want to insert a new block just after\n * the last node inserted and prevent the code to add an empty paragraph\n * between them.\n */\n const [, lastNodePath] = Editor.last(editor, []);\n const [parentNode] = Editor.parent(editor, lastNodePath, {\n // Makes sure we get a block node, not an inline node\n match: (node) => node.type !== 'text',\n });\n Transforms.removeNodes(editor, {\n void: true,\n hanging: true,\n at: {\n anchor: { path: lastNodePath, offset: 0 },\n focus: { path: lastNodePath, offset: 0 },\n },\n });\n Transforms.insertNodes(\n editor,\n {\n ...blockProperties,\n children: parentNode.children,\n },\n {\n at: [lastNodePath[0]],\n select: true,\n }\n );\n }\n\n // When the select is clicked it blurs the editor, restore the focus to the editor\n ReactEditor.focus(editor);\n};\n\nconst IMAGE_SCHEMA_FIELDS = [\n 'name',\n 'alternativeText',\n 'url',\n 'caption',\n 'width',\n 'height',\n 'formats',\n 'hash',\n 'ext',\n 'mime',\n 'size',\n 'previewUrl',\n 'provider',\n 'provider_metadata',\n 'createdAt',\n 'updatedAt',\n];\n\nconst pick = (object, imageSchemaFields) => {\n return Object.keys(object).reduce((acc, key) => {\n if (imageSchemaFields.includes(key)) {\n acc[key] = object[key];\n }\n\n return acc;\n }, {});\n};\n\nconst ImageDialog = ({ handleClose }) => {\n const editor = useSlate();\n const { components } = useLibrary();\n const MediaLibraryDialog = components['media-library'];\n\n const insertImages = (images) => {\n // If the selection is inside a list, split the list so that the modified block is outside of it\n Transforms.unwrapNodes(editor, {\n match: (node) => node.type === 'list',\n split: true,\n });\n\n // Save the path of the node that is being replaced by an image to insert the images there later\n // It's the closest full block node above the selection\n const [, pathToInsert] = Editor.above(editor, {\n match(node) {\n const isInlineNode = ['text', 'link'].includes(node.type);\n\n return !isInlineNode;\n },\n });\n\n // Remove the previous node that is being replaced by an image\n Transforms.removeNodes(editor);\n\n // Convert images to nodes and insert them\n const nodesToInsert = images.map((image) => {\n return { type: 'image', image, children: [{ type: 'text', text: '' }] };\n });\n Transforms.insertNodes(editor, nodesToInsert, { at: pathToInsert });\n };\n\n const handleSelectAssets = (images) => {\n const formattedImages = images.map((image) => {\n // Create an object with imageSchema defined and exclude unnecessary props coming from media library config\n const expectedImage = pick(image, IMAGE_SCHEMA_FIELDS);\n\n return {\n ...expectedImage,\n alternativeText: expectedImage.alternativeText || expectedImage.name,\n url: prefixFileUrlWithBackendUrl(image.url),\n };\n });\n\n insertImages(formattedImages);\n\n if (isLastBlockType(editor, 'image')) {\n // Insert blank line to add new blocks below image block\n insertEmptyBlockAtLast(editor);\n }\n\n handleClose();\n };\n\n return (\n <MediaLibraryDialog\n allowedTypes={['images']}\n onClose={handleClose}\n onSelectAssets={handleSelectAssets}\n />\n );\n};\n\nImageDialog.propTypes = {\n handleClose: PropTypes.func.isRequired,\n};\n\nconst isLastBlockType = (editor, type) => {\n const { selection } = editor;\n\n if (!selection) return false;\n\n const [currentBlock] = Editor.nodes(editor, {\n at: selection,\n match: (n) => n.type === type,\n });\n\n if (currentBlock) {\n const [, currentNodePath] = currentBlock;\n\n const isNodeAfter = Boolean(Editor.after(editor, currentNodePath));\n\n return !isNodeAfter;\n }\n\n return false;\n};\n\nconst insertEmptyBlockAtLast = (editor) => {\n Transforms.insertNodes(\n editor,\n {\n type: 'paragraph',\n children: [{ type: 'text', text: '' }],\n },\n { at: [editor.children.length] }\n );\n};\n\nconst BlocksDropdown = ({ disabled }) => {\n const editor = useSlate();\n const { formatMessage } = useIntl();\n const [isMediaLibraryVisible, setIsMediaLibraryVisible] = React.useState(false);\n\n const blocks = useBlocksStore();\n const blockKeysToInclude = Object.entries(blocks).reduce((currentKeys, entry) => {\n const [key, block] = entry;\n\n return block.isInBlocksSelector ? [...currentKeys, key] : currentKeys;\n }, []);\n\n const [blockSelected, setBlockSelected] = React.useState(Object.keys(blocks)[0]);\n\n /**\n * @param {string} optionKey - key of the heading selected\n */\n const selectOption = (optionKey) => {\n if (['list-ordered', 'list-unordered'].includes(optionKey)) {\n // retrieve the list format\n const listFormat = blocks[optionKey].value.format;\n\n // check if the list is already active\n const isActive = isListActive(editor, blocks[optionKey].matchNode);\n\n // toggle the list\n toggleList(editor, isActive, listFormat);\n } else if (optionKey !== 'image') {\n toggleBlock(editor, blocks[optionKey].value);\n }\n\n setBlockSelected(optionKey);\n\n if (optionKey === 'code' && isLastBlockType(editor, 'code')) {\n // Insert blank line to add new blocks below code block\n insertEmptyBlockAtLast(editor);\n }\n\n if (optionKey === 'image') {\n setIsMediaLibraryVisible(true);\n }\n };\n\n /**\n * Prevent the select from focusing itself so ReactEditor.focus(editor) can focus the editor instead.\n *\n * The editor first loses focus to a blur event when clicking the select button. However,\n * refocusing the editor is not enough since the select's default behavior is to refocus itself\n * after an option is selected.\n *\n */\n const preventSelectFocus = (e) => e.preventDefault();\n\n // Listen to the selection change and update the selected block in the dropdown\n React.useEffect(() => {\n if (editor.selection) {\n // Get the parent node of the anchor\n // with a depth of two to retrieve also the list item parents\n const [anchorNode] = Editor.parent(editor, editor.selection.anchor, {\n edge: 'start',\n depth: 2,\n });\n // Find the block key that matches the anchor node\n const anchorBlockKey = Object.keys(blocks).find((blockKey) =>\n blocks[blockKey].matchNode(anchorNode)\n );\n\n // Change the value selected in the dropdown if it doesn't match the anchor block key\n if (anchorBlockKey && anchorBlockKey !== blockSelected) {\n setBlockSelected(anchorBlockKey);\n }\n }\n }, [editor.selection, editor, blocks, blockSelected]);\n\n return (\n <>\n <SelectWrapper>\n <SingleSelect\n startIcon={<Icon as={blocks[blockSelected].icon} />}\n onChange={selectOption}\n placeholder={blocks[blockSelected].label}\n value={blockSelected}\n onCloseAutoFocus={preventSelectFocus}\n aria-label={formatMessage({\n id: 'components.Blocks.blocks.selectBlock',\n defaultMessage: 'Select a block',\n })}\n disabled={disabled}\n >\n {blockKeysToInclude.map((key) => (\n <BlockOption\n key={key}\n value={key}\n label={blocks[key].label}\n icon={blocks[key].icon}\n blockSelected={blockSelected}\n />\n ))}\n </SingleSelect>\n </SelectWrapper>\n {isMediaLibraryVisible && <ImageDialog handleClose={() => setIsMediaLibraryVisible(false)} />}\n </>\n );\n};\n\nBlocksDropdown.propTypes = {\n disabled: PropTypes.bool.isRequired,\n};\n\nconst BlockOption = ({ value, icon, label, blockSelected }) => {\n const { formatMessage } = useIntl();\n\n const isSelected = value === blockSelected;\n\n return (\n <SingleSelectOption\n startIcon={<Icon as={icon} color={isSelected ? 'primary600' : 'neutral600'} />}\n value={value}\n >\n {formatMessage(label)}\n </SingleSelectOption>\n );\n};\n\nBlockOption.propTypes = {\n icon: PropTypes.elementType.isRequired,\n value: PropTypes.string.isRequired,\n label: PropTypes.shape({\n id: PropTypes.string.isRequired,\n defaultMessage: PropTypes.string.isRequired,\n }).isRequired,\n blockSelected: PropTypes.string.isRequired,\n};\n\n/**\n *\n * @param {import('slate').Node} node\n * @returns boolean\n */\nconst isListNode = (node) => {\n return !Editor.isEditor(node) && SlateElement.isElement(node) && node.type === 'list';\n};\n\nconst isListActive = (editor, matchNode) => {\n const { selection } = editor;\n\n if (!selection) return false;\n\n const [match] = Array.from(\n Editor.nodes(editor, {\n at: Editor.unhangRange(editor, selection),\n match: matchNode,\n })\n );\n\n return Boolean(match);\n};\n\nconst toggleList = (editor, isActive, format) => {\n // If we have selected a portion of content in the editor,\n // we want to convert it to a list or if it is already a list,\n // convert it back to a paragraph\n if (editor.selection) {\n Transforms.unwrapNodes(editor, {\n match: (node) => isListNode(node) && ['ordered', 'unordered'].includes(node.format),\n split: true,\n });\n\n Transforms.setNodes(editor, {\n type: isActive ? 'paragraph' : 'list-item',\n });\n\n if (!isActive) {\n const block = { type: 'list', format, children: [] };\n Transforms.wrapNodes(editor, block);\n }\n } else {\n // There is no selection, convert the last inserted node to a list\n // If it is already a list, convert it back to a paragraph\n const [, lastNodePath] = Editor.last(editor, []);\n\n const [parentNode] = Editor.parent(editor, lastNodePath, {\n // Makes sure we get a block node, not an inline node\n match: (node) => node.type !== 'text',\n });\n\n Transforms.removeNodes(editor, {\n void: true,\n hanging: true,\n at: {\n anchor: { path: lastNodePath, offset: 0 },\n focus: { path: lastNodePath, offset: 0 },\n },\n });\n\n Transforms.insertNodes(\n editor,\n {\n type: isActive ? 'paragraph' : 'list-item',\n children: [...parentNode.children],\n },\n {\n at: [lastNodePath[0]],\n select: true,\n }\n );\n\n if (!isActive) {\n // If the selection is now a list item, wrap it inside a list\n const block = { type: 'list', format, children: [] };\n Transforms.wrapNodes(editor, block);\n }\n }\n};\n\nconst ListButton = ({ block, disabled }) => {\n const editor = useSlate();\n\n const {\n icon,\n matchNode,\n value: { format },\n label,\n } = block;\n\n const isActive = isListActive(editor, matchNode);\n\n return (\n <ToolbarButton\n icon={icon}\n name={format}\n label={label}\n isActive={isActive}\n disabled={disabled}\n handleClick={() => toggleList(editor, isActive, format)}\n />\n );\n};\n\nListButton.propTypes = {\n block: PropTypes.shape({\n icon: PropTypes.elementType.isRequired,\n matchNode: PropTypes.func.isRequired,\n value: PropTypes.shape({\n format: PropTypes.string.isRequired,\n }).isRequired,\n label: PropTypes.shape({\n id: PropTypes.string.isRequired,\n defaultMessage: PropTypes.string.isRequired,\n }).isRequired,\n }).isRequired,\n disabled: PropTypes.bool.isRequired,\n};\n\nconst LinkButton = ({ disabled }) => {\n const editor = useSlate();\n\n const isLinkActive = () => {\n const { selection } = editor;\n\n if (!selection) return false;\n\n const [match] = Array.from(\n Editor.nodes(editor, {\n at: Editor.unhangRange(editor, selection),\n match: (node) => SlateElement.isElement(node) && node.type === 'link',\n })\n );\n\n return Boolean(match);\n };\n\n const isLinkDisabled = () => {\n // Always disabled when the whole editor is disabled\n if (disabled) {\n return true;\n }\n\n // Always enabled when there's no selection\n if (!editor.selection) {\n return false;\n }\n\n // Get the block node closest to the anchor and focus\n const anchorNodeEntry = Editor.above(editor, {\n at: editor.selection.anchor,\n match: (node) => node.type !== 'text',\n });\n const focusNodeEntry = Editor.above(editor, {\n at: editor.selection.focus,\n match: (node) => node.type !== 'text',\n });\n\n // Disabled if the anchor and focus are not in the same block\n return anchorNodeEntry[0] !== focusNodeEntry[0];\n };\n\n const addLink = () => {\n // We insert an empty anchor, so we split the DOM to have a element we can use as reference for the popover\n insertLink(editor, { url: '' });\n };\n\n return (\n <ToolbarButton\n icon={Link}\n name=\"link\"\n label={{\n id: 'components.Blocks.link',\n defaultMessage: 'Link',\n }}\n isActive={isLinkActive()}\n handleClick={addLink}\n disabled={isLinkDisabled()}\n />\n );\n};\n\nLinkButton.propTypes = {\n disabled: PropTypes.bool.isRequired,\n};\n\nconst BlocksToolbar = ({ disabled }) => {\n const modifiers = useModifiersStore();\n const blocks = useBlocksStore();\n const editor = useSlate();\n\n /**\n * The modifier buttons are disabled when an image is selected.\n */\n\n const checkButtonDisabled = () => {\n // Always disabled when the whole editor is disabled\n if (disabled) {\n return true;\n }\n\n if (!editor.selection) {\n return false;\n }\n\n const selectedNode = editor.children[editor.selection.anchor.path[0]];\n\n if (['image', 'code'].includes(selectedNode.type)) {\n return true;\n }\n\n return false;\n };\n\n const isButtonDisabled = checkButtonDisabled();\n\n return (\n <Toolbar.Root aria-disabled={disabled} asChild>\n <ToolbarWrapper gap={2} padding={2}>\n <BlocksDropdown disabled={disabled} />\n <Separator />\n <Toolbar.ToggleGroup type=\"multiple\" asChild>\n <Flex gap={1}>\n {Object.entries(modifiers).map(([name, modifier]) => (\n <ToolbarButton\n key={name}\n name={name}\n icon={modifier.icon}\n label={modifier.label}\n isActive={modifier.checkIsActive()}\n handleClick={modifier.handleToggle}\n disabled={isButtonDisabled}\n />\n ))}\n <LinkButton disabled={isButtonDisabled} />\n </Flex>\n </Toolbar.ToggleGroup>\n <Separator />\n <Toolbar.ToggleGroup type=\"single\" asChild>\n <Flex gap={1}>\n <ListButton block={blocks['list-unordered']} disabled={disabled} />\n <ListButton block={blocks['list-ordered']} disabled={disabled} />\n </Flex>\n </Toolbar.ToggleGroup>\n </ToolbarWrapper>\n </Toolbar.Root>\n );\n};\n\nBlocksToolbar.propTypes = {\n disabled: PropTypes.bool.isRequired,\n};\n\nexport { BlocksToolbar };\n","import * as React from 'react';\n\nimport { Box, Flex, Typography, InputWrapper, Divider } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport { createEditor } from 'slate';\nimport { withHistory } from 'slate-history';\nimport { Slate, withReact, ReactEditor } from 'slate-react';\nimport styled from 'styled-components';\n\nimport Hint from '../Hint';\n\nimport BlocksInput from './BlocksInput';\nimport { withLinks, withStrapiSchema } from './plugins';\nimport { BlocksToolbar } from './Toolbar';\n\nconst TypographyAsterisk = styled(Typography)`\n line-height: 0;\n`;\n\nconst LabelAction = styled(Box)`\n svg path {\n fill: ${({ theme }) => theme.colors.neutral500};\n }\n`;\n\nconst EditorDivider = styled(Divider)`\n background: ${({ theme }) => theme.colors.neutral200};\n`;\n\n/**\n * Images are void elements. They handle the rendering of their children instead of Slate.\n * See the Slate documentation for more information:\n * - https://docs.slatejs.org/api/nodes/element#void-vs-not-void\n * - https://docs.slatejs.org/api/nodes/element#rendering-void-elements\n *\n * @param {import('slate').Editor} editor\n */\nconst withImages = (editor) => {\n const { isVoid } = editor;\n\n editor.isVoid = (element) => {\n return element.type === 'image' ? true : isVoid(element);\n };\n\n return editor;\n};\n\n/**\n * Forces an update of the Slate editor when the value prop changes from outside of Slate.\n * The root cause is that Slate is not a controlled component: https://github.com/ianstormtaylor/slate/issues/4612\n * Why not use JSON.stringify(value) as the key?\n * Because it would force a rerender of the entire editor every time the user types a character.\n * Why not use the entity id as the key, since it's unique for each locale?\n * Because it would not solve the problem when using the \"fill in from other locale\" feature\n *\n * @param {import('slate').Descendant[]} value\n * @returns {{\n * key: number,\n * incrementSlateUpdatesCount: () => void\n * }}\n */\nfunction useResetKey(value) {\n // Keep track how how many times Slate detected a change from a user interaction in the editor\n const slateUpdatesCount = React.useRef(0);\n // Keep track of how many times the value prop was updated, whether from within editor or from outside\n const valueUpdatesCount = React.useRef(0);\n // Use a key to force a rerender of the Slate editor when needed\n const [key, setKey] = React.useState(0);\n\n React.useEffect(() => {\n valueUpdatesCount.current += 1;\n\n // If the 2 refs are not equal, it means the value was updated from outside\n if (valueUpdatesCount.current !== slateUpdatesCount.current) {\n // So we change the key to force a rerender of the Slate editor,\n // which will pick up the new value through its initialValue prop\n setKey((previousKey) => previousKey + 1);\n\n // Then bring the 2 refs back in sync\n slateUpdatesCount.current = valueUpdatesCount.current;\n }\n }, [value]);\n\n return { key, incrementSlateUpdatesCount: () => (slateUpdatesCount.current += 1) };\n}\n\nconst pipe =\n (...fns) =>\n (value) =>\n fns.reduce((prev, fn) => fn(prev), value);\n\nconst BlocksEditor = React.forwardRef(\n (\n { intlLabel, labelAction, name, disabled, required, error, value, onChange, placeholder, hint },\n ref\n ) => {\n const { formatMessage } = useIntl();\n const [editor] = React.useState(() =>\n pipe(withHistory, withImages, withStrapiSchema, withReact, withLinks)(createEditor())\n );\n\n const label = intlLabel.id\n ? formatMessage(\n { id: intlLabel.id, defaultMessage: intlLabel.defaultMessage },\n { ...intlLabel.values }\n )\n : name;\n\n const formattedPlaceholder = placeholder\n ? formatMessage({ id: placeholder.id, defaultMessage: placeholder.defaultMessage })\n : null;\n\n /** Editable is not able to hold the ref, https://github.com/ianstormtaylor/slate/issues/4082\n * so with \"useImperativeHandle\" we can use ReactEditor methods to expose to the parent above\n * also not passing forwarded ref here, gives console warning.\n */\n React.useImperativeHandle(\n ref,\n () => ({\n focus() {\n ReactEditor.focus(editor);\n },\n }),\n [editor]\n );\n\n const { key, incrementSlateUpdatesCount } = useResetKey(value);\n\n const handleSlateChange = (state) => {\n const isAstChange = editor.operations.some((op) => op.type !== 'set_selection');\n\n if (isAstChange) {\n incrementSlateUpdatesCount();\n\n onChange({\n target: { name, value: state, type: 'blocks' },\n });\n }\n };\n\n return (\n <>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={1}>\n <Flex gap={1}>\n <Typography variant=\"pi\" fontWeight=\"bold\" textColor=\"neutral800\">\n {label}\n {required && <TypographyAsterisk textColor=\"danger600\">*</TypographyAsterisk>}\n </Typography>\n {labelAction && <LabelAction paddingLeft={1}>{labelAction}</LabelAction>}\n </Flex>\n <Slate\n editor={editor}\n initialValue={value || [{ type: 'paragraph', children: [{ type: 'text', text: '' }] }]}\n onChange={handleSlateChange}\n key={key}\n >\n <InputWrapper direction=\"column\" alignItems=\"flex-start\" height=\"512px\">\n <BlocksToolbar disabled={disabled} />\n <EditorDivider width=\"100%\" />\n <BlocksInput disabled={disabled} placeholder={formattedPlaceholder} />\n </InputWrapper>\n </Slate>\n <Hint hint={hint} name={name} error={error} />\n </Flex>\n {error && (\n <Box paddingTop={1}>\n <Typography variant=\"pi\" textColor=\"danger600\" data-strapi-field-error>\n {error}\n </Typography>\n </Box>\n )}\n </>\n );\n }\n);\n\nBlocksEditor.defaultProps = {\n labelAction: null,\n disabled: false,\n required: false,\n error: '',\n value: null,\n placeholder: null,\n hint: null,\n};\n\nBlocksEditor.propTypes = {\n intlLabel: PropTypes.shape({\n id: PropTypes.string.isRequired,\n defaultMessage: PropTypes.string.isRequired,\n values: PropTypes.object,\n }).isRequired,\n labelAction: PropTypes.element,\n name: PropTypes.string.isRequired,\n required: PropTypes.bool,\n disabled: PropTypes.bool,\n error: PropTypes.string,\n onChange: PropTypes.func.isRequired,\n value: PropTypes.array,\n placeholder: PropTypes.shape({\n id: PropTypes.string.isRequired,\n defaultMessage: PropTypes.string.isRequired,\n }),\n hint: PropTypes.oneOfType([PropTypes.string, PropTypes.array]),\n};\n\nexport default BlocksEditor;\n","import { FieldAction, Flex } from '@strapi/design-system';\nimport styled, { keyframes } from 'styled-components';\n\nexport const FieldActionWrapper = styled(FieldAction)`\n svg {\n height: 1rem;\n width: 1rem;\n path {\n fill: ${({ theme }) => theme.colors.neutral400};\n }\n }\n\n svg:hover {\n path {\n fill: ${({ theme }) => theme.colors.primary600};\n }\n }\n`;\n\nexport const TextValidation = styled(Flex)`\n svg {\n height: ${12 / 16}rem;\n width: ${12 / 16}rem;\n\n path {\n fill: ${({ theme, available }) =>\n available ? theme.colors.success600 : theme.colors.danger600};\n }\n }\n`;\n\nconst rotation = keyframes`\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(359deg);\n }\n`;\n\nexport const LoadingWrapper = styled(Flex)`\n animation: ${rotation} 2s infinite linear;\n`;\n","const UID_REGEX = /^[A-Za-z0-9-_.~]*$/;\n\nexport default UID_REGEX;\n","import * as React from 'react';\n\nimport { Flex, TextInput, Typography } from '@strapi/design-system';\nimport {\n useAPIErrorHandler,\n useCMEditViewDataManager,\n useFetchClient,\n useNotification,\n} from '@strapi/helper-plugin';\nimport { CheckCircle, ExclamationMarkCircle, Loader, Refresh } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport { useMutation, useQuery } from 'react-query';\n\nimport { useDebounce } from '../../../hooks/useDebounce';\n\nimport { FieldActionWrapper, LoadingWrapper, TextValidation } from './endActionStyle';\nimport UID_REGEX from './regex';\n\nconst InputUID = React.forwardRef(\n (\n {\n contentTypeUID,\n hint,\n disabled,\n error,\n intlLabel,\n labelAction,\n name,\n onChange,\n value,\n placeholder,\n required,\n },\n forwardedRef\n ) => {\n const [availability, setAvailability] = React.useState(null);\n const [showRegenerate, setShowRegenerate] = React.useState(false);\n /**\n * @type {string | null}\n */\n const debouncedValue = useDebounce(value, 300);\n const { modifiedData, initialData } = useCMEditViewDataManager();\n const toggleNotification = useNotification();\n const { formatAPIError } = useAPIErrorHandler();\n const { formatMessage } = useIntl();\n const { post } = useFetchClient();\n\n const label = intlLabel.id\n ? formatMessage(\n { id: intlLabel.id, defaultMessage: intlLabel.defaultMessage },\n { ...intlLabel.values }\n )\n : name;\n\n const formattedPlaceholder = placeholder\n ? formatMessage(\n { id: placeholder.id, defaultMessage: placeholder.defaultMessage },\n { ...placeholder.values }\n )\n : '';\n\n /**\n * @type {import('react-query').UseQueryResult<string>}\n */\n const { data: defaultGeneratedUID, isLoading: isGeneratingDefaultUID } = useQuery({\n queryKey: ['uid', { contentTypeUID, field: name, data: modifiedData }],\n async queryFn({ queryKey }) {\n const [, body] = queryKey;\n\n const {\n data: { data },\n } = await post('/content-manager/uid/generate', body);\n\n return data;\n },\n onError(err) {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(err),\n });\n },\n enabled: !value && required,\n });\n\n /**\n * If the defaultGeneratedUID is available, then we set it as the value,\n * but we also want to set it as the initialValue too.\n */\n React.useEffect(() => {\n if (defaultGeneratedUID) {\n onChange({ target: { name, value: defaultGeneratedUID, type: 'text' } }, true);\n }\n }, [defaultGeneratedUID, name, onChange]);\n\n const { mutate: generateUID, isLoading: isGeneratingUID } = useMutation({\n async mutationFn(body) {\n const {\n data: { data },\n } = await post('/content-manager/uid/generate', body);\n\n return data;\n },\n onSuccess(data) {\n onChange({ target: { name, value: data, type: 'text' } });\n },\n onError(err) {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(err),\n });\n },\n });\n\n /**\n * @type {import('react-query').UseQueryResult<{ isAvailable: boolean }>\n */\n const { data: availabilityData, isLoading: isCheckingAvailability } = useQuery({\n queryKey: [\n 'uid',\n { contentTypeUID, field: name, value: debouncedValue ? debouncedValue.trim() : '' },\n ],\n async queryFn({ queryKey }) {\n const [, body] = queryKey;\n\n const { data } = await post('/content-manager/uid/check-availability', body);\n\n return data;\n },\n enabled: Boolean(\n debouncedValue !== initialData[name] &&\n debouncedValue &&\n UID_REGEX.test(debouncedValue.trim())\n ),\n onError(err) {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(err),\n });\n },\n });\n\n React.useEffect(() => {\n /**\n * always store the data in state because that way as seen below\n * we can then remove the data to stop showing the label.\n */\n setAvailability(availabilityData);\n\n let timer;\n\n if (availabilityData?.isAvailable) {\n timer = setTimeout(() => {\n setAvailability(null);\n }, 4000);\n }\n\n return () => {\n if (timer) {\n clearTimeout(timer);\n }\n };\n }, [availabilityData]);\n\n const isLoading = isGeneratingDefaultUID || isGeneratingUID || isCheckingAvailability;\n\n return (\n <TextInput\n ref={forwardedRef}\n disabled={disabled}\n error={error}\n endAction={\n <Flex position=\"relative\" gap={1}>\n {availability && !showRegenerate && (\n <TextValidation\n alignItems=\"center\"\n gap={1}\n justifyContent=\"flex-end\"\n available={!!availability?.isAvailable}\n data-not-here-outer\n position=\"absolute\"\n pointerEvents=\"none\"\n right={6}\n width=\"100px\"\n >\n {availability?.isAvailable ? <CheckCircle /> : <ExclamationMarkCircle />}\n\n <Typography\n textColor={availability.isAvailable ? 'success600' : 'danger600'}\n variant=\"pi\"\n >\n {formatMessage(\n availability.isAvailable\n ? {\n id: 'content-manager.components.uid.available',\n defaultMessage: 'Available',\n }\n : {\n id: 'content-manager.components.uid.unavailable',\n defaultMessage: 'Unavailable',\n }\n )}\n </Typography>\n </TextValidation>\n )}\n\n {!disabled && (\n <>\n {showRegenerate && (\n <TextValidation alignItems=\"center\" justifyContent=\"flex-end\" gap={1}>\n <Typography textColor=\"primary600\" variant=\"pi\">\n {formatMessage({\n id: 'content-manager.components.uid.regenerate',\n defaultMessage: 'Regenerate',\n })}\n </Typography>\n </TextValidation>\n )}\n\n <FieldActionWrapper\n onClick={() => generateUID({ contentTypeUID, field: name, data: modifiedData })}\n label={formatMessage({\n id: 'content-manager.components.uid.regenerate',\n defaultMessage: 'Regenerate',\n })}\n onMouseEnter={() => setShowRegenerate(true)}\n onMouseLeave={() => setShowRegenerate(false)}\n >\n {isLoading ? (\n <LoadingWrapper data-testid=\"loading-wrapper\">\n <Loader />\n </LoadingWrapper>\n ) : (\n <Refresh />\n )}\n </FieldActionWrapper>\n </>\n )}\n </Flex>\n }\n hint={hint}\n label={label}\n labelAction={labelAction}\n name={name}\n onChange={onChange}\n placeholder={formattedPlaceholder}\n value={value || ''}\n required={required}\n />\n );\n }\n);\n\nInputUID.propTypes = {\n contentTypeUID: PropTypes.string.isRequired,\n disabled: PropTypes.bool,\n error: PropTypes.string,\n intlLabel: PropTypes.shape({\n id: PropTypes.string.isRequired,\n defaultMessage: PropTypes.string.isRequired,\n values: PropTypes.object,\n }).isRequired,\n labelAction: PropTypes.element,\n name: PropTypes.string.isRequired,\n onChange: PropTypes.func.isRequired,\n value: PropTypes.string,\n placeholder: PropTypes.shape({\n id: PropTypes.string.isRequired,\n defaultMessage: PropTypes.string.isRequired,\n values: PropTypes.object,\n }),\n required: PropTypes.bool,\n hint: PropTypes.oneOfType([PropTypes.string, PropTypes.array]),\n};\n\nInputUID.defaultProps = {\n disabled: false,\n error: undefined,\n labelAction: undefined,\n placeholder: undefined,\n value: '',\n required: false,\n hint: '',\n};\n\nexport { InputUID };\n","import React from 'react';\n\nfunction connect(WrappedComponent, select) {\n return (props) => {\n const selectors = select(props);\n\n return <WrappedComponent {...props} {...selectors} />;\n };\n}\n\nexport default connect;\n","/**\n * @param {Array<{id: string}>} browserStateRelations\n * @param {Array<{id: string}>} serverStateRelations\n * @returns {[connected: string[], disconnected: string[]]} – the connected and disconnected relations ids\n */\nexport const diffRelations = (browserStateRelations = [], serverStateRelations = []) => {\n const connected = browserStateRelations.reduce((acc, relation) => {\n if (!serverStateRelations.find((oldRelation) => oldRelation.id === relation.id)) {\n return [...acc, relation.id];\n }\n\n return acc;\n }, []);\n\n const disconnected = serverStateRelations.reduce((acc, relation) => {\n if (!browserStateRelations.find((oldRelation) => oldRelation.id === relation.id)) {\n return [...acc, relation.id];\n }\n\n return acc;\n }, []);\n\n return [connected, disconnected];\n};\n","export const PUBLICATION_STATES = {\n DRAFT: 'draft',\n PUBLISHED: 'published',\n};\n\nexport const RELATIONS_TO_DISPLAY = 5;\n\nexport const SEARCH_RESULTS_TO_DISPLAY = 10;\n","export function getRelationLink(targetModel, id) {\n return `/content-manager/collectionType/${targetModel}/${id ?? ''}`;\n}\n","import { PUBLICATION_STATES } from '../constants';\n\nimport { getRelationLink } from './getRelationLink';\n\nexport const normalizeRelation = (relation, { shouldAddLink, mainFieldName, targetModel }) => {\n const nextRelation = { ...relation };\n\n if (shouldAddLink) {\n nextRelation.href = getRelationLink(targetModel, nextRelation.id);\n }\n\n nextRelation.publicationState = false;\n\n if (nextRelation?.publishedAt !== undefined) {\n nextRelation.publicationState = nextRelation.publishedAt\n ? PUBLICATION_STATES.PUBLISHED\n : PUBLICATION_STATES.DRAFT;\n }\n\n nextRelation.mainField = nextRelation[mainFieldName];\n\n return nextRelation;\n};\n\n/*\n * Applies some transformations to existing and new relations in order to display them correctly\n * relations: raw relations data coming from useRelations\n * shouldAddLink: comes from generateRelationQueryInfos, if true we display a link to the relation (TO FIX: explanation)\n * mainFieldName: name of the main field inside the relation (e.g. text field), if no displayable main field exists (e.g. date field) we use the id of the entry\n * targetModel: the model on which the relation is based on, used to create an URL link\n */\n\nexport const normalizeRelations = (\n relations,\n { shouldAddLink = false, mainFieldName, targetModel } = {}\n) => {\n return [...relations].map((relation) =>\n normalizeRelation(relation, {\n shouldAddLink,\n mainFieldName,\n targetModel,\n })\n );\n};\n","import { normalizeRelation } from './normalizeRelations';\n\nexport const normalizeSearchResults = (relations, { mainFieldName }) => {\n const { data } = relations;\n const { pages = [] } = data ?? {};\n\n return {\n ...relations,\n data: pages\n .map((page) =>\n page?.results.map((relation) => normalizeRelation(relation, { mainFieldName }))\n )\n .filter(Boolean)\n .flat(),\n };\n};\n","import { useMemo } from 'react';\n\nimport { useCMEditViewDataManager } from '@strapi/helper-plugin';\nimport get from 'lodash/get';\nimport { useRouteMatch } from 'react-router-dom';\n\nfunction useSelect({\n componentUid,\n isUserAllowedToEditField,\n isUserAllowedToReadField,\n name,\n queryInfos,\n}) {\n const {\n isCreatingEntry,\n createActionAllowedFields,\n readActionAllowedFields,\n updateActionAllowedFields,\n slug,\n modifiedData,\n } = useCMEditViewDataManager();\n\n /**\n * This is our cloning route because the EditView & CloneView share the same UI component\n * We need the origin ID to pre-load the relations into the modifiedData of the new\n * to-be-cloned entity.\n */\n const { params } =\n useRouteMatch('/content-manager/collectionType/:collectionType/create/clone/:origin') ?? {};\n\n const { origin } = params ?? {};\n\n const isFieldAllowed = useMemo(() => {\n if (isUserAllowedToEditField === true) {\n return true;\n }\n\n const allowedFields = isCreatingEntry ? createActionAllowedFields : updateActionAllowedFields;\n\n return allowedFields.includes(name);\n }, [\n isCreatingEntry,\n createActionAllowedFields,\n name,\n isUserAllowedToEditField,\n updateActionAllowedFields,\n ]);\n\n const isFieldReadable = useMemo(() => {\n if (isUserAllowedToReadField) {\n return true;\n }\n\n const allowedFields = isCreatingEntry ? [] : readActionAllowedFields;\n\n return allowedFields.includes(name);\n }, [isCreatingEntry, isUserAllowedToReadField, name, readActionAllowedFields]);\n\n const fieldNameKeys = name.split('.');\n let componentId;\n\n if (componentUid) {\n componentId = get(modifiedData, fieldNameKeys.slice(0, -1))?.id;\n }\n\n const entityId = origin || modifiedData.id;\n\n // /content-manager/relations/[model]/[id]/[field-name]\n const relationFetchEndpoint = useMemo(() => {\n if (isCreatingEntry && !origin) {\n return null;\n }\n\n if (componentUid) {\n // repeatable components and dz are dynamically created\n // if no componentId exists in modifiedData it means that the user just created it\n // there then are no relations to request\n return componentId\n ? `/content-manager/relations/${componentUid}/${componentId}/${fieldNameKeys.at(-1)}`\n : null;\n }\n\n return `/content-manager/relations/${slug}/${entityId}/${name.split('.').at(-1)}`;\n }, [isCreatingEntry, origin, componentUid, slug, entityId, name, componentId, fieldNameKeys]);\n\n // /content-manager/relations/[model]/[field-name]\n const relationSearchEndpoint = useMemo(() => {\n if (componentUid) {\n return `/content-manager/relations/${componentUid}/${name.split('.').at(-1)}`;\n }\n\n return `/content-manager/relations/${slug}/${name.split('.').at(-1)}`;\n }, [componentUid, slug, name]);\n\n return {\n entityId,\n componentId,\n isComponentRelation: Boolean(componentUid),\n queryInfos: {\n ...queryInfos,\n endpoints: {\n search: relationSearchEndpoint,\n relation: relationFetchEndpoint,\n },\n },\n isCloningEntry: Boolean(origin),\n isCreatingEntry,\n isFieldAllowed,\n isFieldReadable,\n };\n}\n\nexport default useSelect;\n","import { useEffect, useState } from 'react';\n\nimport { useCallbackRef, useFetchClient } from '@strapi/helper-plugin';\nimport { useInfiniteQuery } from 'react-query';\n\nimport { normalizeRelations } from '../../components/RelationInputDataManager/utils';\n\nexport const useRelation = (cacheKey, { relation, search }) => {\n const [searchParams, setSearchParams] = useState({});\n const [currentPage, setCurrentPage] = useState(0);\n const { get } = useFetchClient();\n\n const { onLoad: onLoadRelations, normalizeArguments = {} } = relation;\n\n const relationsRes = useInfiniteQuery(\n ['relation', ...cacheKey],\n async ({ pageParam = 1 }) => {\n try {\n const { data } = await get(relation?.endpoint, {\n params: {\n ...(relation.pageParams ?? {}),\n page: pageParam,\n },\n });\n\n setCurrentPage(pageParam);\n\n return data;\n } catch (err) {\n return null;\n }\n },\n {\n cacheTime: 0,\n enabled: relation.enabled,\n /**\n * @type {(lastPage:\n * | { data: null }\n * | { results: any[],\n * pagination: {\n * page: number,\n * pageCount: number,\n * pageSize: number,\n * total: number\n * }\n * }\n * ) => number}\n */\n getNextPageParam(lastPage) {\n const isXToOneRelation = !lastPage?.pagination;\n\n if (\n !lastPage || // the API may send an empty 204 response\n isXToOneRelation || // xToOne relations do not have a pagination\n lastPage?.pagination.page >= lastPage?.pagination.pageCount\n ) {\n return undefined;\n }\n\n // eslint-disable-next-line consistent-return\n return lastPage.pagination.page + 1;\n },\n select: (data) => ({\n ...data,\n pages: data.pages.map((page) => {\n if (!page) {\n return page;\n }\n\n const { data, results, pagination } = page;\n const isXToOneRelation = !!data;\n let normalizedResults = [];\n\n // xToOne relations return an object, which we normalize so that relations\n // always have the same shape\n if (isXToOneRelation) {\n normalizedResults = [data];\n } else if (results) {\n normalizedResults = [...results].reverse();\n }\n\n return {\n pagination,\n results: normalizedResults,\n };\n }),\n }),\n }\n );\n\n const { pageGoal } = relation;\n\n const { status, data, fetchNextPage, hasNextPage } = relationsRes;\n\n useEffect(() => {\n /**\n * This ensures the infiniteQuery hook fetching has caught-up with the modifiedData\n * state i.e. in circumstances where you add 10 relations, the browserState knows this,\n * but the hook would think it could fetch more, when in reality, it can't.\n */\n if (pageGoal > currentPage && hasNextPage && status === 'success') {\n fetchNextPage({\n pageParam: currentPage + 1,\n });\n }\n }, [pageGoal, currentPage, fetchNextPage, hasNextPage, status]);\n\n const onLoadRelationsCallback = useCallbackRef(onLoadRelations);\n\n useEffect(() => {\n if (status === 'success' && data && data.pages?.at(-1)?.results && onLoadRelationsCallback) {\n // everytime we fetch, we normalize prior to adding to redux\n const normalizedResults = normalizeRelations(data.pages.at(-1).results, normalizeArguments);\n\n // this is loadRelation from EditViewDataManagerProvider\n onLoadRelationsCallback(normalizedResults);\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [status, onLoadRelationsCallback, data]);\n\n const searchRes = useInfiniteQuery(\n ['relation', ...cacheKey, 'search', JSON.stringify(searchParams)],\n async ({ pageParam = 1 }) => {\n try {\n const { data } = await get(search.endpoint, {\n params: {\n ...(search.pageParams ?? {}),\n ...searchParams,\n page: pageParam,\n },\n });\n\n return data;\n } catch (err) {\n return null;\n }\n },\n {\n enabled: Object.keys(searchParams).length > 0,\n /**\n * @type {(lastPage:\n * | { data: null }\n * | { results: any[],\n * pagination: {\n * page: number,\n * pageCount: number,\n * pageSize: number,\n * total: number\n * }\n * }\n * ) => number}\n */\n getNextPageParam(lastPage) {\n if (!lastPage?.pagination || lastPage.pagination.page >= lastPage.pagination.pageCount) {\n return undefined;\n }\n\n // eslint-disable-next-line consistent-return\n return lastPage.pagination.page + 1;\n },\n }\n );\n\n const searchFor = (term, options = {}) => {\n setSearchParams({\n ...options,\n _q: term,\n _filter: '$startsWithi',\n });\n };\n\n return { relations: relationsRes, search: searchRes, searchFor };\n};\n","/**\n * This file is for all helpers related to `paths` in the CM.\n */\nimport get from 'lodash/get';\n\n/**\n * This is typically used in circumstances where there are re-orderable pieces e.g. Dynamic Zones\n * or Repeatable fields. It finds the _original_ location of the initial data using `__temp_key__` values\n * which are added to the fields in the `INIT_FORM` reducer to give array data a stable (when you add\n * a new item they wont have a server ID).\n */\nexport const getInitialDataPathUsingTempKeys = (initialData, modifiedData) => (currentPath) => {\n const splitPath = currentPath.split('.');\n\n return splitPath.reduce((acc, currentValue, index) => {\n const initialDataParent = get(initialData, acc);\n const modifiedDataTempKey = get(modifiedData, [\n ...splitPath.slice(0, index),\n currentValue,\n '__temp_key__',\n ]);\n\n if (Array.isArray(initialDataParent) && typeof modifiedDataTempKey === 'number') {\n const initialDataIndex = initialDataParent.findIndex(\n (entry) => entry.__temp_key__ === modifiedDataTempKey\n );\n\n acc.push(initialDataIndex.toString());\n\n return acc;\n }\n\n acc.push(currentValue);\n\n return acc;\n }, []);\n};\n","import React from 'react';\n\nimport { Flex, Typography, ComboboxOption } from '@strapi/design-system';\nimport { pxToRem } from '@strapi/helper-plugin';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport { getTrad } from '../../../utils';\n\nconst StyledBullet = styled.div`\n flex-shrink: 0;\n width: ${pxToRem(6)};\n height: ${pxToRem(6)};\n margin-right: ${({ theme }) => theme.spaces[2]};\n background-color: ${({ theme, isDraft }) =>\n theme.colors[isDraft ? 'secondary600' : 'success600']};\n border-radius: 50%;\n`;\n\nexport const Option = ({ publicationState, mainField, id }) => {\n const { formatMessage } = useIntl();\n const stringifiedDisplayValue = (mainField ?? id).toString();\n\n if (publicationState) {\n const isDraft = publicationState === 'draft';\n const draftMessage = {\n id: getTrad('components.Select.draft-info-title'),\n defaultMessage: 'State: Draft',\n };\n const publishedMessage = {\n id: getTrad('components.Select.publish-info-title'),\n defaultMessage: 'State: Published',\n };\n const title = isDraft ? formatMessage(draftMessage) : formatMessage(publishedMessage);\n\n return (\n <ComboboxOption value={id} textValue={stringifiedDisplayValue}>\n <Flex>\n <StyledBullet title={title} isDraft={isDraft} />\n <Typography ellipsis>{stringifiedDisplayValue}</Typography>\n </Flex>\n </ComboboxOption>\n );\n }\n\n return (\n <ComboboxOption value={id} textValue={stringifiedDisplayValue}>\n {stringifiedDisplayValue}\n </ComboboxOption>\n );\n};\n\nOption.defaultProps = {\n mainField: undefined,\n publicationState: undefined,\n};\n\nOption.propTypes = {\n id: PropTypes.number.isRequired,\n mainField: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n publicationState: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]),\n};\n","export const RELATION_ITEM_HEIGHT = 50;\nexport const RELATION_GUTTER = 4;\n","import React, { useEffect } from 'react';\n\nimport { Box, Flex, IconButton } from '@strapi/design-system';\nimport { Drag } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { getEmptyImage } from 'react-dnd-html5-backend';\nimport styled from 'styled-components';\n\nimport { useDragAndDrop } from '../../../hooks/useDragAndDrop';\nimport { composeRefs, ItemTypes } from '../../../utils';\nimport { RELATION_GUTTER } from '../constants';\n\nexport const FlexWrapper = styled(Flex)`\n width: 100%;\n /* Used to prevent endAction to be pushed out of container */\n min-width: 0;\n\n & > div[role='button'] {\n cursor: all-scroll;\n }\n`;\n\nexport const ChildrenWrapper = styled(Flex)`\n width: 100%;\n /* Used to prevent endAction to be pushed out of container */\n min-width: 0;\n`;\n\nexport const RelationItem = ({\n ariaDescribedBy,\n children,\n displayValue,\n canDrag,\n disabled,\n endAction,\n iconButtonAriaLabel,\n style,\n id,\n index,\n name,\n onCancel,\n onDropItem,\n onGrabItem,\n status,\n updatePositionOfRelation,\n ...props\n}) => {\n const [{ handlerId, isDragging, handleKeyDown }, relationRef, dropRef, dragRef, dragPreviewRef] =\n useDragAndDrop(canDrag && !disabled, {\n type: `${ItemTypes.RELATION}_${name}`,\n index,\n item: {\n displayedValue: displayValue,\n status,\n id,\n },\n onGrabItem,\n onDropItem,\n onCancel,\n onMoveItem: updatePositionOfRelation,\n dropSensitivity: 'immediate',\n });\n\n const composedRefs = composeRefs(relationRef, dragRef);\n\n useEffect(() => {\n dragPreviewRef(getEmptyImage());\n }, [dragPreviewRef]);\n\n return (\n <Box\n style={style}\n as=\"li\"\n ref={dropRef}\n aria-describedby={ariaDescribedBy}\n cursor={canDrag ? 'all-scroll' : 'default'}\n >\n {isDragging ? (\n <RelationItemPlaceholder />\n ) : (\n <Flex\n paddingTop={2}\n paddingBottom={2}\n paddingLeft={canDrag ? 2 : 4}\n paddingRight={4}\n hasRadius\n borderSize={1}\n borderColor=\"neutral200\"\n background={disabled ? 'neutral150' : 'neutral0'}\n justifyContent=\"space-between\"\n ref={canDrag ? composedRefs : undefined}\n data-handler-id={handlerId}\n {...props}\n >\n <FlexWrapper gap={1}>\n {canDrag ? (\n <IconButton\n forwardedAs=\"div\"\n role=\"button\"\n tabIndex={0}\n aria-label={iconButtonAriaLabel}\n noBorder\n onKeyDown={handleKeyDown}\n disabled={disabled}\n >\n <Drag />\n </IconButton>\n ) : null}\n <ChildrenWrapper justifyContent=\"space-between\">{children}</ChildrenWrapper>\n </FlexWrapper>\n {endAction && <Box paddingLeft={4}>{endAction}</Box>}\n </Flex>\n )}\n </Box>\n );\n};\n\nconst RelationItemPlaceholder = () => (\n <Box\n paddingTop={2}\n paddingBottom={2}\n paddingLeft={4}\n paddingRight={4}\n hasRadius\n borderStyle=\"dashed\"\n borderColor=\"primary600\"\n borderWidth=\"1px\"\n background=\"primary100\"\n height={`calc(100% - ${RELATION_GUTTER}px)`}\n />\n);\n\nRelationItem.defaultProps = {\n ariaDescribedBy: '',\n canDrag: false,\n displayValue: '',\n disabled: false,\n endAction: undefined,\n onCancel: undefined,\n onDropItem: undefined,\n onGrabItem: undefined,\n style: undefined,\n status: undefined,\n updatePositionOfRelation: undefined,\n};\n\nRelationItem.propTypes = {\n ariaDescribedBy: PropTypes.string,\n canDrag: PropTypes.bool,\n children: PropTypes.node.isRequired,\n displayValue: PropTypes.string,\n disabled: PropTypes.bool,\n endAction: PropTypes.node,\n iconButtonAriaLabel: PropTypes.string.isRequired,\n id: PropTypes.number.isRequired,\n index: PropTypes.number.isRequired,\n name: PropTypes.string.isRequired,\n onCancel: PropTypes.func,\n onDropItem: PropTypes.func,\n onGrabItem: PropTypes.func,\n status: PropTypes.string,\n style: PropTypes.shape({\n height: PropTypes.number,\n left: PropTypes.number,\n position: PropTypes.string,\n right: PropTypes.number,\n width: PropTypes.string,\n }),\n updatePositionOfRelation: PropTypes.func,\n};\n","import React from 'react';\n\nimport { Box } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\n\nconst ShadowBox = styled(Box)`\n position: relative;\n overflow: hidden;\n flex: 1;\n\n &:before,\n &:after {\n position: absolute;\n width: 100%;\n height: 4px;\n z-index: 1;\n }\n\n &:before {\n /* TODO: as for DS Table component we would need this to be handled by the DS theme */\n content: '';\n background: linear-gradient(rgba(3, 3, 5, 0.2) 0%, rgba(0, 0, 0, 0) 100%);\n top: 0;\n opacity: ${({ overflowDirection }) =>\n overflowDirection === 'top-bottom' || overflowDirection === 'top' ? 1 : 0};\n transition: opacity 0.2s ease-in-out;\n }\n\n &:after {\n /* TODO: as for DS Table component we would need this to be handled by the DS theme */\n content: '';\n background: linear-gradient(0deg, rgba(3, 3, 5, 0.2) 0%, rgba(0, 0, 0, 0) 100%);\n bottom: 0;\n opacity: ${({ overflowDirection }) =>\n overflowDirection === 'top-bottom' || overflowDirection === 'bottom' ? 1 : 0};\n transition: opacity 0.2s ease-in-out;\n }\n`;\n\nexport const RelationList = ({ children, overflow, ...props }) => {\n return (\n <ShadowBox overflowDirection={overflow} {...props}>\n {children}\n </ShadowBox>\n );\n};\n\nRelationList.defaultProps = {\n overflow: '',\n};\n\nRelationList.propTypes = {\n children: PropTypes.node.isRequired,\n overflow: PropTypes.oneOf(['top-bottom', 'bottom', 'top', '']),\n};\n","import React, { useRef, useState, useMemo, useEffect } from 'react';\n\nimport {\n Status,\n Box,\n Link,\n Icon,\n Flex,\n TextButton,\n Typography,\n Tooltip,\n VisuallyHidden,\n Combobox,\n} from '@strapi/design-system';\nimport { useFocusInputField } from '@strapi/helper-plugin';\nimport { Cross, Refresh } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { FixedSizeList as List } from 'react-window';\nimport styled from 'styled-components';\n\nimport { usePrev } from '../../hooks';\n\nimport { Option } from './components/Option';\nimport { RelationItem } from './components/RelationItem';\nimport { RelationList } from './components/RelationList';\nimport { RELATION_GUTTER, RELATION_ITEM_HEIGHT } from './constants';\n\nexport const LinkEllipsis = styled(Link)`\n display: block;\n\n > span {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n display: block;\n }\n`;\n\nexport const DisconnectButton = styled.button`\n svg path {\n fill: ${({ theme, disabled }) =>\n disabled ? theme.colors.neutral600 : theme.colors.neutral500};\n }\n\n &:hover svg path,\n &:focus svg path {\n fill: ${({ theme, disabled }) => !disabled && theme.colors.neutral600};\n }\n`;\n\nconst ComboboxWrapper = styled(Box)`\n align-self: flex-start;\n`;\n\nconst RelationInput = ({\n canReorder,\n description,\n disabled,\n error,\n iconButtonAriaLabel,\n id,\n name,\n numberOfRelationsToDisplay,\n label,\n labelAction,\n labelLoadMore,\n labelDisconnectRelation,\n listAriaDescription,\n liveText,\n loadingMessage,\n onCancel,\n onDropItem,\n onGrabItem,\n noRelationsMessage,\n onRelationConnect,\n onRelationLoadMore,\n onRelationDisconnect,\n onRelationReorder,\n onSearchNextPage,\n onSearch,\n placeholder,\n publicationStateTranslations,\n required,\n relations: paginatedRelations,\n searchResults,\n size,\n}) => {\n const [textValue, setTextValue] = useState('');\n const [overflow, setOverflow] = useState('');\n\n const listRef = useRef();\n const outerListRef = useRef();\n\n const fieldRef = useFocusInputField(name);\n\n const { data } = searchResults;\n\n const relations = paginatedRelations.data;\n const totalNumberOfRelations = relations.length ?? 0;\n\n const dynamicListHeight = useMemo(\n () =>\n totalNumberOfRelations > numberOfRelationsToDisplay\n ? Math.min(totalNumberOfRelations, numberOfRelationsToDisplay) *\n (RELATION_ITEM_HEIGHT + RELATION_GUTTER) +\n RELATION_ITEM_HEIGHT / 2\n : Math.min(totalNumberOfRelations, numberOfRelationsToDisplay) *\n (RELATION_ITEM_HEIGHT + RELATION_GUTTER),\n [totalNumberOfRelations, numberOfRelationsToDisplay]\n );\n\n const shouldDisplayLoadMoreButton = !!labelLoadMore && paginatedRelations.hasNextPage;\n\n const options = useMemo(\n () =>\n data\n .flat()\n .filter(Boolean)\n .map((result) => ({\n ...result,\n value: result.id,\n label: result.mainField,\n })),\n [data]\n );\n\n useEffect(() => {\n if (totalNumberOfRelations <= numberOfRelationsToDisplay) {\n return setOverflow('');\n }\n\n const handleNativeScroll = (e) => {\n const parentScrollContainerHeight = e.target.parentNode.scrollHeight;\n const maxScrollBottom = e.target.scrollHeight - e.target.scrollTop;\n\n if (e.target.scrollTop === 0) {\n return setOverflow('bottom');\n }\n\n if (maxScrollBottom === parentScrollContainerHeight) {\n return setOverflow('top');\n }\n\n return setOverflow('top-bottom');\n };\n\n const outerListRefCurrent = outerListRef?.current;\n\n if (!paginatedRelations.isLoading && relations.length > 0 && outerListRefCurrent) {\n outerListRef.current.addEventListener('scroll', handleNativeScroll);\n }\n\n return () => {\n if (outerListRefCurrent) {\n outerListRefCurrent.removeEventListener('scroll', handleNativeScroll);\n }\n };\n }, [paginatedRelations, relations, numberOfRelationsToDisplay, totalNumberOfRelations]);\n\n const handleMenuOpen = (isOpen) => {\n if (isOpen) {\n onSearch();\n }\n };\n\n /**\n *\n * @param {number} newIndex\n * @param {number} currentIndex\n *\n * @returns {void}\n */\n const handleUpdatePositionOfRelation = (newIndex, currentIndex) => {\n if (onRelationReorder && newIndex >= 0 && newIndex < relations.length) {\n onRelationReorder(currentIndex, newIndex);\n }\n };\n\n const previewRelationsLength = usePrev(relations.length);\n /**\n * @type {React.MutableRefObject<'onChange' | 'loadMore'>}\n */\n const updatedRelationsWith = useRef();\n\n const handleLoadMore = () => {\n updatedRelationsWith.current = 'loadMore';\n onRelationLoadMore();\n };\n\n useEffect(() => {\n if (updatedRelationsWith.current === 'onChange') {\n setTextValue('');\n }\n\n if (\n updatedRelationsWith.current === 'onChange' &&\n relations.length !== previewRelationsLength\n ) {\n listRef.current?.scrollToItem(relations.length, 'end');\n updatedRelationsWith.current = undefined;\n } else if (\n updatedRelationsWith.current === 'loadMore' &&\n relations.length !== previewRelationsLength\n ) {\n listRef.current?.scrollToItem(0, 'start');\n updatedRelationsWith.current = undefined;\n }\n }, [previewRelationsLength, relations]);\n\n const ariaDescriptionId = `${name}-item-instructions`;\n\n return (\n <Flex\n direction=\"column\"\n gap={3}\n justifyContent=\"space-between\"\n alignItems=\"stretch\"\n wrap=\"wrap\"\n >\n <Flex direction=\"row\" alignItems=\"end\" justifyContent=\"end\" gap={2} width=\"100%\">\n <ComboboxWrapper marginRight=\"auto\" maxWidth={size <= 6 ? '100%' : '70%'} width=\"100%\">\n <Combobox\n ref={fieldRef}\n autocomplete=\"list\"\n error={error}\n name={name}\n hint={description}\n id={id}\n required={required}\n label={label}\n labelAction={labelAction}\n disabled={disabled}\n placeholder={placeholder}\n hasMoreItems={searchResults.hasNextPage}\n loading={searchResults.isLoading}\n onOpenChange={handleMenuOpen}\n noOptionsMessage={() => noRelationsMessage}\n loadingMessage={loadingMessage}\n onLoadMore={() => {\n onSearchNextPage();\n }}\n textValue={textValue}\n onChange={(relationId) => {\n if (!relationId) {\n return;\n }\n onRelationConnect(options.find((opt) => opt.id === relationId));\n updatedRelationsWith.current = 'onChange';\n }}\n onTextValueChange={(text) => {\n setTextValue(text);\n }}\n onInputChange={(event) => {\n onSearch(event.currentTarget.value);\n }}\n >\n {options.map((opt) => {\n return <Option key={opt.id} {...opt} />;\n })}\n </Combobox>\n </ComboboxWrapper>\n\n {shouldDisplayLoadMoreButton && (\n <TextButton\n disabled={paginatedRelations.isLoading || paginatedRelations.isFetchingNextPage}\n onClick={handleLoadMore}\n loading={paginatedRelations.isLoading || paginatedRelations.isFetchingNextPage}\n startIcon={<Refresh />}\n // prevent the label from line-wrapping\n shrink={0}\n >\n {labelLoadMore}\n </TextButton>\n )}\n </Flex>\n\n {relations.length > 0 && (\n <RelationList overflow={overflow}>\n <VisuallyHidden id={ariaDescriptionId}>{listAriaDescription}</VisuallyHidden>\n <VisuallyHidden aria-live=\"assertive\">{liveText}</VisuallyHidden>\n <List\n height={dynamicListHeight}\n ref={listRef}\n outerRef={outerListRef}\n itemCount={totalNumberOfRelations}\n itemSize={RELATION_ITEM_HEIGHT + RELATION_GUTTER}\n itemData={{\n name,\n ariaDescribedBy: ariaDescriptionId,\n canDrag: canReorder,\n disabled,\n handleCancel: onCancel,\n handleDropItem: onDropItem,\n handleGrabItem: onGrabItem,\n iconButtonAriaLabel,\n labelDisconnectRelation,\n onRelationDisconnect,\n publicationStateTranslations,\n relations,\n updatePositionOfRelation: handleUpdatePositionOfRelation,\n }}\n itemKey={(index) => `${relations[index].mainField}_${relations[index].id}`}\n innerElementType=\"ol\"\n >\n {ListItem}\n </List>\n </RelationList>\n )}\n </Flex>\n );\n};\n\nconst RelationsResult = PropTypes.shape({\n data: PropTypes.arrayOf(\n PropTypes.shape({\n href: PropTypes.string,\n id: PropTypes.number.isRequired,\n publicationState: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]),\n mainField: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n })\n ),\n hasNextPage: PropTypes.bool,\n isFetchingNextPage: PropTypes.bool.isRequired,\n isLoading: PropTypes.bool.isRequired,\n isSuccess: PropTypes.bool.isRequired,\n});\n\nconst SearchResults = PropTypes.shape({\n data: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.number.isRequired,\n href: PropTypes.string,\n mainField: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n publicationState: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]),\n })\n ),\n hasNextPage: PropTypes.bool,\n isLoading: PropTypes.bool.isRequired,\n isSuccess: PropTypes.bool.isRequired,\n});\n\nRelationInput.defaultProps = {\n canReorder: false,\n description: undefined,\n disabled: false,\n error: undefined,\n labelAction: null,\n labelLoadMore: null,\n liveText: undefined,\n onCancel: undefined,\n onDropItem: undefined,\n onGrabItem: undefined,\n required: false,\n relations: { data: [] },\n searchResults: { data: [] },\n};\n\nRelationInput.propTypes = {\n error: PropTypes.string,\n canReorder: PropTypes.bool,\n description: PropTypes.string,\n disabled: PropTypes.bool,\n iconButtonAriaLabel: PropTypes.string.isRequired,\n id: PropTypes.string.isRequired,\n label: PropTypes.string.isRequired,\n labelAction: PropTypes.element,\n labelLoadMore: PropTypes.string,\n labelDisconnectRelation: PropTypes.string.isRequired,\n listAriaDescription: PropTypes.string.isRequired,\n liveText: PropTypes.string,\n loadingMessage: PropTypes.string.isRequired,\n name: PropTypes.string.isRequired,\n noRelationsMessage: PropTypes.string.isRequired,\n numberOfRelationsToDisplay: PropTypes.number.isRequired,\n onCancel: PropTypes.func,\n onDropItem: PropTypes.func,\n onGrabItem: PropTypes.func,\n onRelationConnect: PropTypes.func.isRequired,\n onRelationDisconnect: PropTypes.func.isRequired,\n onRelationLoadMore: PropTypes.func.isRequired,\n onRelationReorder: PropTypes.func.isRequired,\n onSearch: PropTypes.func.isRequired,\n onSearchNextPage: PropTypes.func.isRequired,\n placeholder: PropTypes.string.isRequired,\n publicationStateTranslations: PropTypes.shape({\n draft: PropTypes.string.isRequired,\n published: PropTypes.string.isRequired,\n }).isRequired,\n required: PropTypes.bool,\n searchResults: SearchResults,\n size: PropTypes.number.isRequired,\n relations: RelationsResult,\n};\n\n/**\n * This is in a separate component to enforce passing all the props the component requires to react-window\n * to ensure drag & drop correctly works.\n */\nconst ListItem = ({ data, index, style }) => {\n const {\n ariaDescribedBy,\n canDrag,\n disabled,\n handleCancel,\n handleDropItem,\n handleGrabItem,\n iconButtonAriaLabel,\n name,\n labelDisconnectRelation,\n onRelationDisconnect,\n publicationStateTranslations,\n relations,\n updatePositionOfRelation,\n } = data;\n const { publicationState, href, mainField, id } = relations[index];\n const statusColor = publicationState === 'draft' ? 'secondary' : 'success';\n\n return (\n <RelationItem\n ariaDescribedBy={ariaDescribedBy}\n canDrag={canDrag}\n disabled={disabled}\n displayValue={String(mainField ?? id)}\n iconButtonAriaLabel={iconButtonAriaLabel}\n id={id}\n index={index}\n name={name}\n endAction={\n <DisconnectButton\n data-testid={`remove-relation-${id}`}\n disabled={disabled}\n type=\"button\"\n onClick={() => onRelationDisconnect(relations[index])}\n aria-label={labelDisconnectRelation}\n >\n <Icon width=\"12px\" as={Cross} />\n </DisconnectButton>\n }\n onCancel={handleCancel}\n onDropItem={handleDropItem}\n onGrabItem={handleGrabItem}\n status={publicationState || undefined}\n style={{\n ...style,\n bottom: style.bottom ?? 0 + RELATION_GUTTER,\n height: style.height ?? 0 - RELATION_GUTTER,\n }}\n updatePositionOfRelation={updatePositionOfRelation}\n >\n <Box minWidth={0} paddingTop={1} paddingBottom={1} paddingRight={4}>\n <Tooltip description={mainField ?? `${id}`}>\n {href ? (\n <LinkEllipsis to={href}>{mainField ?? id}</LinkEllipsis>\n ) : (\n <Typography textColor={disabled ? 'neutral600' : 'primary600'} ellipsis>\n {mainField ?? id}\n </Typography>\n )}\n </Tooltip>\n </Box>\n\n {publicationState && (\n <Status variant={statusColor} showBullet={false} size=\"S\">\n <Typography fontWeight=\"bold\" textColor={`${statusColor}700`}>\n {publicationStateTranslations[publicationState]}\n </Typography>\n </Status>\n )}\n </RelationItem>\n );\n};\n\nListItem.defaultProps = {\n data: {},\n};\n\nListItem.propTypes = {\n data: PropTypes.shape({\n ariaDescribedBy: PropTypes.string.isRequired,\n canDrag: PropTypes.bool.isRequired,\n disabled: PropTypes.bool.isRequired,\n handleCancel: PropTypes.func,\n handleDropItem: PropTypes.func,\n handleGrabItem: PropTypes.func,\n iconButtonAriaLabel: PropTypes.string.isRequired,\n labelDisconnectRelation: PropTypes.string.isRequired,\n name: PropTypes.string.isRequired,\n onRelationDisconnect: PropTypes.func.isRequired,\n publicationStateTranslations: PropTypes.shape({\n draft: PropTypes.string.isRequired,\n published: PropTypes.string.isRequired,\n }).isRequired,\n relations: PropTypes.arrayOf(\n PropTypes.shape({\n href: PropTypes.string,\n id: PropTypes.number.isRequired,\n publicationState: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]),\n mainField: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n })\n ),\n updatePositionOfRelation: PropTypes.func.isRequired,\n }),\n index: PropTypes.number.isRequired,\n style: PropTypes.object.isRequired,\n};\n\nexport default RelationInput;\n","/* eslint-disable no-nested-ternary */\nimport React, { memo, useMemo, useState } from 'react';\n\nimport { NotAllowedInput, useCMEditViewDataManager } from '@strapi/helper-plugin';\nimport get from 'lodash/get';\nimport pick from 'lodash/pick';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport { useRelation } from '../../hooks/useRelation';\nimport { getTrad } from '../../utils';\nimport { getInitialDataPathUsingTempKeys } from '../../utils/paths';\nimport { RelationInput } from '../RelationInput';\n\nimport { PUBLICATION_STATES, RELATIONS_TO_DISPLAY, SEARCH_RESULTS_TO_DISPLAY } from './constants';\nimport { connect, diffRelations, normalizeRelation, normalizeSearchResults, select } from './utils';\n\nexport const RelationInputDataManager = ({\n error,\n entityId,\n componentId,\n isComponentRelation,\n editable,\n description,\n intlLabel,\n isCreatingEntry,\n isCloningEntry,\n isFieldAllowed,\n isFieldReadable,\n labelAction,\n mainField,\n name,\n queryInfos: { endpoints, defaultParams, shouldDisplayRelationLink },\n placeholder,\n required,\n relationType,\n size,\n targetModel,\n}) => {\n const [liveText, setLiveText] = useState('');\n const { formatMessage } = useIntl();\n const {\n slug,\n initialData,\n modifiedData,\n relationConnect,\n relationDisconnect,\n relationLoad,\n relationReorder,\n } = useCMEditViewDataManager();\n\n const nameSplit = name.split('.');\n\n const initialDataPath = getInitialDataPathUsingTempKeys(initialData, modifiedData)(name);\n\n const relationsFromModifiedData = get(modifiedData, name, []);\n\n const currentLastPage = Math.ceil(get(initialData, name, []).length / RELATIONS_TO_DISPLAY);\n\n const { relations, search, searchFor } = useRelation(\n [slug, initialDataPath.join('.'), modifiedData.id, defaultParams],\n {\n relation: {\n enabled: !!endpoints.relation,\n endpoint: endpoints.relation,\n pageGoal: currentLastPage,\n pageParams: {\n ...defaultParams,\n pageSize: RELATIONS_TO_DISPLAY,\n },\n onLoad(value) {\n relationLoad({\n target: {\n initialDataPath: ['initialData', ...initialDataPath],\n modifiedDataPath: ['modifiedData', ...nameSplit],\n value,\n },\n });\n },\n normalizeArguments: {\n mainFieldName: mainField.name,\n shouldAddLink: shouldDisplayRelationLink,\n targetModel,\n },\n },\n search: {\n endpoint: endpoints.search,\n pageParams: {\n ...defaultParams,\n // eslint-disable-next-line no-nested-ternary\n entityId:\n isCreatingEntry || isCloningEntry\n ? undefined\n : isComponentRelation\n ? componentId\n : entityId,\n pageSize: SEARCH_RESULTS_TO_DISPLAY,\n },\n },\n }\n );\n\n const isMorph = useMemo(() => relationType.toLowerCase().includes('morph'), [relationType]);\n const toOneRelation = [\n 'oneWay',\n 'oneToOne',\n 'manyToOne',\n 'oneToManyMorph',\n 'oneToOneMorph',\n ].includes(relationType);\n\n const isDisabled = useMemo(() => {\n if (isMorph) {\n return true;\n }\n\n if (!isCreatingEntry) {\n return (!isFieldAllowed && isFieldReadable) || !editable;\n }\n\n return !editable;\n }, [isMorph, isCreatingEntry, editable, isFieldAllowed, isFieldReadable]);\n\n const handleRelationConnect = (relation) => {\n /**\n * Any relation being added to the store should be normalized so it has it's link.\n */\n const normalizedRelation = normalizeRelation(relation, {\n mainFieldName: mainField.name,\n shouldAddLink: shouldDisplayRelationLink,\n targetModel,\n });\n\n relationConnect({ name, value: normalizedRelation, toOneRelation });\n };\n\n const handleRelationDisconnect = (relation) => {\n relationDisconnect({ name, id: relation.id });\n };\n\n const handleRelationLoadMore = () => {\n relations.fetchNextPage();\n };\n\n const handleSearch = (term = '') => {\n const [connected, disconnected] = diffRelations(\n relationsFromModifiedData,\n get(initialData, name)\n );\n\n searchFor(term, {\n idsToInclude: disconnected,\n idsToOmit: connected,\n });\n };\n\n const handleSearchMore = () => {\n search.fetchNextPage();\n };\n /**\n *\n * @param {number} index\n * @returns {string}\n */\n const getItemPos = (index) => `${index + 1} of ${relationsFromModifiedData.length}`;\n\n /**\n *\n * @param {number} currentIndex\n * @param {number} oldIndex\n */\n const handleRelationReorder = (oldIndex, newIndex) => {\n const item = relationsFromModifiedData[oldIndex];\n\n setLiveText(\n formatMessage(\n {\n id: getTrad('dnd.reorder'),\n defaultMessage: '{item}, moved. New position in list: {position}.',\n },\n {\n item: item.mainField ?? item.id,\n position: getItemPos(newIndex),\n }\n )\n );\n\n relationReorder({\n name,\n newIndex,\n oldIndex,\n });\n };\n\n /**\n *\n * @param {number} index\n * @returns {void}\n */\n const handleGrabItem = (index) => {\n const item = relationsFromModifiedData[index];\n\n setLiveText(\n formatMessage(\n {\n id: getTrad('dnd.grab-item'),\n defaultMessage: `{item}, grabbed. Current position in list: {position}. Press up and down arrow to change position, Spacebar to drop, Escape to cancel.`,\n },\n {\n item: item.mainField ?? item.id,\n position: getItemPos(index),\n }\n )\n );\n };\n\n /**\n *\n * @param {number} index\n * @returns {void}\n */\n const handleDropItem = (index) => {\n const item = relationsFromModifiedData[index];\n\n setLiveText(\n formatMessage(\n {\n id: getTrad('dnd.drop-item'),\n defaultMessage: `{item}, dropped. Final position in list: {position}.`,\n },\n {\n item: item.mainField ?? item.id,\n position: getItemPos(index),\n }\n )\n );\n };\n\n /**\n *\n * @param {number} index\n * @returns {void}\n */\n const handleCancel = (index) => {\n const item = relationsFromModifiedData[index];\n\n setLiveText(\n formatMessage(\n {\n id: getTrad('dnd.cancel-item'),\n defaultMessage: '{item}, dropped. Re-order cancelled.',\n },\n {\n item: item.mainField ?? item.id,\n }\n )\n );\n };\n\n if (\n (!isFieldAllowed && isCreatingEntry) ||\n (!isCreatingEntry && !isFieldAllowed && !isFieldReadable)\n ) {\n return <NotAllowedInput name={name} intlLabel={intlLabel} labelAction={labelAction} />;\n }\n\n /**\n * How to calculate the total number of relations even if you don't\n * have them all loaded in the browser.\n *\n * 1. The `infiniteQuery` gives you the total number of relations in the pagination result.\n * 2. You can diff the length of the browserState vs the fetchedServerState to determine if you've\n * either added or removed relations.\n * 3. Add them together, if you've removed relations you'll get a negative number and it'll\n * actually subtract from the total number on the server (regardless of how many you fetched).\n */\n const browserRelationsCount = relationsFromModifiedData.length;\n const serverRelationsCount = (get(initialData, initialDataPath) ?? []).length;\n const realServerRelationsCount = relations.data?.pages[0]?.pagination?.total ?? 0;\n /**\n * _IF_ theres no relations data and the browserCount is the same as serverCount you can therefore assume\n * that the browser count is correct because we've just _made_ this entry and the in-component hook is now fetching.\n */\n const totalRelations =\n !relations.data && browserRelationsCount === serverRelationsCount\n ? browserRelationsCount\n : browserRelationsCount - serverRelationsCount + realServerRelationsCount;\n\n return (\n <RelationInput\n error={error}\n canReorder={!toOneRelation}\n description={description}\n disabled={isDisabled}\n iconButtonAriaLabel={formatMessage({\n id: getTrad('components.RelationInput.icon-button-aria-label'),\n defaultMessage: 'Drag',\n })}\n id={name}\n label={`${formatMessage({\n id: intlLabel.id,\n defaultMessage: intlLabel.defaultMessage,\n })} ${totalRelations > 0 ? `(${totalRelations})` : ''}`}\n labelAction={labelAction}\n labelLoadMore={\n !isCreatingEntry || isCloningEntry\n ? formatMessage({\n id: getTrad('relation.loadMore'),\n defaultMessage: 'Load More',\n })\n : null\n }\n labelDisconnectRelation={formatMessage({\n id: getTrad('relation.disconnect'),\n defaultMessage: 'Remove',\n })}\n listAriaDescription={formatMessage({\n id: getTrad('dnd.instructions'),\n defaultMessage: `Press spacebar to grab and re-order`,\n })}\n listHeight={320}\n liveText={liveText}\n loadingMessage={formatMessage({\n id: getTrad('relation.isLoading'),\n defaultMessage: 'Relations are loading',\n })}\n name={name}\n noRelationsMessage={formatMessage({\n id: getTrad('relation.notAvailable'),\n defaultMessage: 'No relations available',\n })}\n numberOfRelationsToDisplay={RELATIONS_TO_DISPLAY}\n onDropItem={handleDropItem}\n onGrabItem={handleGrabItem}\n onCancel={handleCancel}\n onRelationConnect={handleRelationConnect}\n onRelationDisconnect={handleRelationDisconnect}\n onRelationLoadMore={handleRelationLoadMore}\n onRelationReorder={handleRelationReorder}\n onSearch={(term) => handleSearch(term)}\n onSearchNextPage={() => handleSearchMore()}\n placeholder={formatMessage(\n placeholder || {\n id: getTrad('relation.add'),\n defaultMessage: 'Add relation',\n }\n )}\n publicationStateTranslations={{\n [PUBLICATION_STATES.DRAFT]: formatMessage({\n id: getTrad('relation.publicationState.draft'),\n defaultMessage: 'Draft',\n }),\n\n [PUBLICATION_STATES.PUBLISHED]: formatMessage({\n id: getTrad('relation.publicationState.published'),\n defaultMessage: 'Published',\n }),\n }}\n relations={pick(\n { ...relations, data: relationsFromModifiedData },\n 'data',\n 'hasNextPage',\n 'isFetchingNextPage',\n 'isLoading',\n 'isSuccess'\n )}\n required={required}\n searchResults={normalizeSearchResults(search, {\n mainFieldName: mainField.name,\n })}\n size={size}\n />\n );\n};\n\nRelationInputDataManager.defaultProps = {\n componentId: undefined,\n entityId: undefined,\n editable: true,\n error: undefined,\n description: '',\n labelAction: null,\n isComponentRelation: false,\n isFieldAllowed: true,\n placeholder: null,\n required: false,\n};\n\nRelationInputDataManager.propTypes = {\n componentId: PropTypes.number,\n entityId: PropTypes.number,\n editable: PropTypes.bool,\n error: PropTypes.string,\n description: PropTypes.string,\n intlLabel: PropTypes.shape({\n id: PropTypes.string.isRequired,\n defaultMessage: PropTypes.string.isRequired,\n values: PropTypes.object,\n }).isRequired,\n labelAction: PropTypes.element,\n isCloningEntry: PropTypes.bool.isRequired,\n isCreatingEntry: PropTypes.bool.isRequired,\n isComponentRelation: PropTypes.bool,\n isFieldAllowed: PropTypes.bool,\n isFieldReadable: PropTypes.bool.isRequired,\n mainField: PropTypes.shape({\n name: PropTypes.string.isRequired,\n schema: PropTypes.shape({\n type: PropTypes.string.isRequired,\n }).isRequired,\n }).isRequired,\n name: PropTypes.string.isRequired,\n placeholder: PropTypes.shape({\n id: PropTypes.string.isRequired,\n defaultMessage: PropTypes.string.isRequired,\n values: PropTypes.object,\n }),\n required: PropTypes.bool,\n relationType: PropTypes.string.isRequired,\n size: PropTypes.number.isRequired,\n targetModel: PropTypes.string.isRequired,\n queryInfos: PropTypes.shape({\n defaultParams: PropTypes.shape({\n locale: PropTypes.string,\n }),\n endpoints: PropTypes.shape({\n relation: PropTypes.string,\n search: PropTypes.string.isRequired,\n }).isRequired,\n shouldDisplayRelationLink: PropTypes.bool.isRequired,\n }).isRequired,\n};\n\nconst Memoized = memo(RelationInputDataManager);\n\nexport default connect(Memoized, select);\n","/* eslint-disable prefer-template */\nimport { getLanguage, highlight, highlightAuto } from 'highlight.js';\nimport Markdown from 'markdown-it';\nimport abbr from 'markdown-it-abbr';\nimport container from 'markdown-it-container';\nimport deflist from 'markdown-it-deflist';\nimport emoji from 'markdown-it-emoji';\nimport footnote from 'markdown-it-footnote';\nimport ins from 'markdown-it-ins';\nimport mark from 'markdown-it-mark';\nimport sub from 'markdown-it-sub';\nimport sup from 'markdown-it-sup';\n\nconst loadCss = async () => {\n await import('highlight.js/styles/solarized-dark.css');\n};\n\nloadCss();\n\nconst md = new Markdown({\n html: true, // Enable HTML tags in source\n xhtmlOut: false,\n breaks: true,\n langPrefix: 'language-',\n linkify: true,\n typographer: true,\n // Code from: https://github.com/markdown-it/markdown-it/blob/master/support/demo_template/index.js#L83\n highlight(str, lang) {\n if (lang && lang !== 'auto' && getLanguage(lang)) {\n return (\n '<pre class=\"hljs language-' +\n md.utils.escapeHtml(lang.toLowerCase()) +\n '\"><code>' +\n highlight(lang, str, true).value +\n '</code></pre>'\n );\n }\n\n if (lang === 'auto') {\n const result = highlightAuto(str);\n\n return (\n '<pre class=\"hljs language-' +\n md.utils.escapeHtml(result.language) +\n '\"><code>' +\n result.value +\n '</code></pre>'\n );\n }\n\n return '<pre class=\"hljs\"><code>' + md.utils.escapeHtml(str) + '</code></pre>';\n },\n})\n .use(abbr)\n .use(container, 'warning')\n .use(container, 'tip')\n .use(deflist)\n .use(emoji)\n .use(footnote)\n .use(ins)\n .use(mark)\n .use(sub)\n .use(sup);\n\n// Code from: https://github.com/markdown-it/markdown-it-footnote/blob/master/index.js#L29\nmd.renderer.rules.footnote_ref = (tokens, idx, options, env, slf) => {\n const caption = slf.rules.footnote_caption(tokens, idx, options, env, slf);\n\n return '<sup class=\"footnote-ref\"><span>' + caption + '</span></sup>';\n};\n\nmd.renderer.rules.footnote_anchor = () => {\n /* ↩ with escape code to prevent display as Apple Emoji on iOS */\n return ' <span class=\"footnote-backref\">\\u21a9\\uFE0E</span>';\n};\n\nexport default md;\n","import sanitizeHtml from 'sanitize-html';\n\n// Options for the lib can be found here https://www.npmjs.com/package/sanitize-html\nconst options = {\n ...sanitizeHtml.defaults,\n allowedTags: false,\n allowedAttributes: {\n '*': ['href', 'align', 'alt', 'center', 'width', 'height', 'type', 'controls', 'target'],\n img: ['src', 'alt'],\n source: ['src', 'type'],\n },\n};\n\nconst clean = (dirty) => sanitizeHtml(dirty, options);\n\nexport default clean;\n","import styled from 'styled-components';\n\nconst Wrapper = styled.div`\n position: absolute;\n top: 0;\n width: 100%;\n height: 100%;\n overflow: auto;\n padding: ${({ theme }) => `${theme.spaces[3]} ${theme.spaces[4]}`};\n font-size: ${14 / 16}rem;\n background-color: ${({ theme }) => theme.colors.neutral0};\n color: ${({ theme }) => theme.colors.neutral800};\n line-height: ${({ theme }) => theme.lineHeights[6]};\n\n h1,\n h2,\n h3,\n h4,\n h5,\n h6 {\n margin-block-start: ${({ theme }) => theme.spaces[2]};\n margin-block-end: ${({ theme }) => theme.spaces[2]};\n }\n\n p {\n margin-bottom: ${({ theme }) => theme.spaces[2]};\n }\n\n h1 {\n font-size: ${36 / 16}rem;\n font-weight: 600;\n }\n\n h2 {\n font-size: ${30 / 16}rem;\n font-weight: 500;\n }\n\n h3 {\n font-size: ${24 / 16}rem;\n font-weight: 500;\n }\n\n h4 {\n font-size: ${20 / 16}rem;\n font-weight: 500;\n }\n\n strong {\n font-weight: 800;\n }\n\n em {\n font-style: italic;\n }\n\n blockquote {\n margin-top: ${({ theme }) => theme.spaces[8]};\n margin-bottom: ${({ theme }) => theme.spaces[7]};\n font-size: ${14 / 16}rem;\n font-weight: 400;\n border-left: 4px solid ${({ theme }) => theme.colors.neutral150};\n font-style: italic;\n padding: ${({ theme }) => theme.spaces[2]} ${({ theme }) => theme.spaces[5]};\n }\n\n img {\n max-width: 100%;\n }\n\n table {\n thead {\n background: ${({ theme }) => theme.colors.neutral150};\n\n th {\n padding: ${({ theme }) => theme.spaces[4]};\n }\n }\n tr {\n border: 1px solid ${({ theme }) => theme.colors.neutral200};\n }\n th,\n td {\n padding: ${({ theme }) => theme.spaces[4]};\n border: 1px solid ${({ theme }) => theme.colors.neutral200};\n border-bottom: 0;\n border-top: 0;\n }\n }\n\n pre,\n code {\n font-size: ${14 / 16}rem;\n border-radius: 4px;\n /* \n Hard coded since the color is the same between themes,\n theme.colors.neutral800 changes between themes.\n\n Matches the color of the JSON Input component.\n */\n background-color: #32324d;\n max-width: 100%;\n overflow: auto;\n padding: ${({ theme }) => theme.spaces[2]};\n }\n\n /* Inline code */\n p,\n pre,\n td {\n > code {\n color: #839496;\n }\n }\n\n ol {\n list-style-type: decimal;\n margin-block-start: ${({ theme }) => theme.spaces[4]};\n margin-block-end: ${({ theme }) => theme.spaces[4]};\n margin-inline-start: 0px;\n margin-inline-end: 0px;\n padding-inline-start: ${({ theme }) => theme.spaces[4]};\n\n ol,\n ul {\n margin-block-start: 0px;\n margin-block-end: 0px;\n }\n }\n\n ul {\n list-style-type: disc;\n margin-block-start: ${({ theme }) => theme.spaces[4]};\n margin-block-end: ${({ theme }) => theme.spaces[4]};\n margin-inline-start: 0px;\n margin-inline-end: 0px;\n padding-inline-start: ${({ theme }) => theme.spaces[4]};\n\n ul,\n ol {\n margin-block-start: 0px;\n margin-block-end: 0px;\n }\n }\n`;\n\nexport default Wrapper;\n","/* eslint-disable react/no-danger */\n/**\n *\n * PreviewWysiwyg\n *\n */\n\nimport React, { memo, useMemo } from 'react';\n\nimport PropTypes from 'prop-types';\n\nimport md from './utils/mdRenderer';\nimport sanitizeHtml from './utils/satinizeHtml';\nimport Wrapper from './Wrapper';\n\nconst PreviewWysiwyg = ({ data }) => {\n const html = useMemo(() => sanitizeHtml(md.render(data.replaceAll('\\\\n', '\\n') || '')), [data]);\n\n return (\n <Wrapper>\n <div dangerouslySetInnerHTML={{ __html: html }} />\n </Wrapper>\n );\n};\n\nPreviewWysiwyg.defaultProps = {\n data: '',\n};\n\nPreviewWysiwyg.propTypes = {\n data: PropTypes.string,\n};\n\nexport default memo(PreviewWysiwyg);\n","import CodeMirror from 'codemirror5';\n\n// Disabling eslint on purpose\n/* eslint-disable */\n\nvar listRE = /^(\\s*)(>[> ]*|[*+-] \\[[x ]\\]\\s|[*+-]\\s|(\\d+)([.)]))(\\s*)/,\n emptyListRE = /^(\\s*)(>[> ]*|[*+-] \\[[x ]\\]|[*+-]|(\\d+)[.)])(\\s*)$/,\n unorderedListRE = /[*+-]\\s/;\n\n/*\n functions coming from CodeMirror addons continuelist.js\n ===> https://github.com/codemirror/CodeMirror/blob/master/addon/edit/continuelist.js\n\n we imported it because the way the addon ask to use markdown mode\n since we have our own markdown preview system we couldn't use it directly\n only thing we changed is removing the part that enabled addon only with markdown mode\n*/\n\nfunction newlineAndIndentContinueMarkdownList(cm) {\n if (cm.getOption('disableInput')) return CodeMirror.Pass;\n var ranges = cm.listSelections(),\n replacements = [];\n for (var i = 0; i < ranges.length; i++) {\n var pos = ranges[i].head;\n\n var eolState = cm.getStateAfter(pos.line);\n var inList = eolState.list !== false;\n var inQuote = eolState.quote !== 0;\n\n var line = cm.getLine(pos.line),\n match = listRE.exec(line);\n var cursorBeforeBullet = /^\\s*$/.test(line.slice(0, pos.ch));\n if (!ranges[i].empty() || (!inList && !inQuote) || !match || cursorBeforeBullet) {\n cm.execCommand('newlineAndIndent');\n return;\n }\n if (emptyListRE.test(line)) {\n var endOfQuote = inQuote && />\\s*$/.test(line);\n var endOfList = !/>\\s*$/.test(line);\n if (endOfQuote || endOfList)\n cm.replaceRange(\n '',\n {\n line: pos.line,\n ch: 0,\n },\n {\n line: pos.line,\n ch: pos.ch + 1,\n }\n );\n replacements[i] = '\\n';\n } else {\n var indent = match[1],\n after = match[5];\n var numbered = !(unorderedListRE.test(match[2]) || match[2].indexOf('>') >= 0);\n var bullet = numbered ? parseInt(match[3], 10) + 1 + match[4] : match[2].replace('x', ' ');\n replacements[i] = '\\n' + indent + bullet + after;\n\n if (numbered) incrementRemainingMarkdownListNumbers(cm, pos);\n }\n }\n\n cm.replaceSelections(replacements);\n}\n\nfunction incrementRemainingMarkdownListNumbers(cm, pos) {\n var startLine = pos.line,\n lookAhead = 0,\n skipCount = 0;\n var startItem = listRE.exec(cm.getLine(startLine)),\n startIndent = startItem[1];\n\n do {\n lookAhead += 1;\n var nextLineNumber = startLine + lookAhead;\n var nextLine = cm.getLine(nextLineNumber);\n var nextItem = listRE.exec(nextLine);\n\n if (nextItem) {\n var nextIndent = nextItem[1];\n var newNumber = parseInt(startItem[3], 10) + lookAhead - skipCount;\n var nextNumber = parseInt(nextItem[3], 10),\n itemNumber = nextNumber;\n\n if (startIndent === nextIndent && !isNaN(nextNumber)) {\n if (newNumber === nextNumber) itemNumber = nextNumber + 1;\n if (newNumber > nextNumber) itemNumber = newNumber + 1;\n cm.replaceRange(\n nextLine.replace(listRE, nextIndent + itemNumber + nextItem[4] + nextItem[5]),\n {\n line: nextLineNumber,\n ch: 0,\n },\n {\n line: nextLineNumber,\n ch: nextLine.length,\n }\n );\n } else {\n if (startIndent.length > nextIndent.length) return;\n // This doesn't run if the next line immediately indents, as it is\n // not clear of the users intention (new indented item or same level)\n if (startIndent.length < nextIndent.length && lookAhead === 1) return;\n skipCount += 1;\n }\n }\n } while (nextItem);\n}\n\nexport default newlineAndIndentContinueMarkdownList;\n","import React, { forwardRef, useEffect, useImperativeHandle, useRef } from 'react';\n\nimport CodeMirror from 'codemirror5';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\n\nimport PreviewWysiwyg from '../PreviewWysiwyg';\n\nimport newlineAndIndentContinueMarkdownList from './utils/continueList';\n\nimport 'codemirror5/addon/display/placeholder';\n\nconst Editor = forwardRef(\n (\n {\n disabled,\n editorRef,\n error,\n isPreviewMode,\n isExpandMode,\n name,\n onChange,\n placeholder,\n textareaRef,\n value,\n },\n forwardedRef\n ) => {\n const onChangeRef = useRef(onChange);\n\n useEffect(() => {\n editorRef.current = CodeMirror.fromTextArea(textareaRef.current, {\n lineWrapping: true,\n extraKeys: {\n Enter: 'newlineAndIndentContinueMarkdownList',\n Tab: false,\n 'Shift-Tab': false,\n },\n readOnly: false,\n smartIndent: false,\n placeholder,\n spellcheck: true,\n inputStyle: 'contenteditable',\n });\n\n CodeMirror.commands.newlineAndIndentContinueMarkdownList =\n newlineAndIndentContinueMarkdownList;\n editorRef.current.on('change', (doc) => {\n onChangeRef.current({ target: { name, value: doc.getValue(), type: 'wysiwyg' } });\n });\n }, [editorRef, textareaRef, name, placeholder]);\n\n useEffect(() => {\n if (value && !editorRef.current.hasFocus()) {\n editorRef.current.setValue(value);\n }\n }, [editorRef, value]);\n\n useEffect(() => {\n if (isPreviewMode || disabled) {\n editorRef.current.setOption('readOnly', 'nocursor');\n } else {\n editorRef.current.setOption('readOnly', false);\n }\n }, [disabled, isPreviewMode, editorRef]);\n\n useEffect(() => {\n if (error) {\n editorRef.current.setOption('screenReaderLabel', error);\n } else {\n // to replace with translation\n editorRef.current.setOption('screenReaderLabel', 'Editor');\n }\n }, [editorRef, error]);\n\n useImperativeHandle(\n forwardedRef,\n () => ({\n focus() {\n editorRef.current.getInputField().focus();\n },\n scrollIntoView(args) {\n editorRef.current.getInputField().scrollIntoView(args);\n },\n }),\n [editorRef]\n );\n\n return (\n <EditorAndPreviewWrapper>\n <EditorStylesContainer isExpandMode={isExpandMode} disabled={disabled || isPreviewMode}>\n <textarea ref={textareaRef} />\n </EditorStylesContainer>\n {isPreviewMode && <PreviewWysiwyg data={value} />}\n </EditorAndPreviewWrapper>\n );\n }\n);\n\nEditor.defaultProps = {\n disabled: false,\n error: undefined,\n isPreviewMode: false,\n isExpandMode: false,\n placeholder: '',\n value: '',\n};\n\nEditor.propTypes = {\n disabled: PropTypes.bool,\n editorRef: PropTypes.shape({ current: PropTypes.any }).isRequired,\n error: PropTypes.string,\n isPreviewMode: PropTypes.bool,\n isExpandMode: PropTypes.bool,\n name: PropTypes.string.isRequired,\n onChange: PropTypes.func.isRequired,\n placeholder: PropTypes.string,\n textareaRef: PropTypes.shape({ current: PropTypes.any }).isRequired,\n value: PropTypes.string,\n};\n\nconst EditorAndPreviewWrapper = styled.div`\n position: relative;\n height: calc(100% - 48px);\n`;\n\nconst EditorStylesContainer = styled.div`\n cursor: ${({ disabled }) => (disabled ? 'not-allowed !important' : 'auto')};\n height: 100%;\n /* BASICS */\n .CodeMirror-placeholder {\n color: ${({ theme }) => theme.colors.neutral600} !important;\n }\n\n .CodeMirror {\n /* Set height, width, borders, and global font properties here */\n font-size: ${14 / 16}rem;\n height: ${({ isExpandMode }) =>\n isExpandMode\n ? '100%'\n : '410px'}; // 512px(total height) - 48px (header) - 52px(footer) - 2px border\n color: ${({ theme }) => theme.colors.neutral800};\n direction: ltr;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell,\n 'Open Sans', 'Helvetica Neue', sans-serif;\n }\n\n /* PADDING */\n\n .CodeMirror-lines {\n padding: ${({ theme }) => `${theme.spaces[3]} ${theme.spaces[4]}`};\n /* Vertical padding around content */\n }\n\n .CodeMirror-scrollbar-filler,\n .CodeMirror-gutter-filler {\n /* The little square between H and V scrollbars */\n background-color: ${({ theme }) => `${theme.colors.neutral0}`};\n }\n\n /* GUTTER */\n\n .CodeMirror-gutters {\n border-right: 1px solid #ddd;\n background-color: #f7f7f7;\n white-space: nowrap;\n }\n .CodeMirror-linenumbers {\n }\n .CodeMirror-linenumber {\n padding: 0 3px 0 5px;\n min-width: 20px;\n text-align: right;\n color: #999;\n white-space: nowrap;\n }\n\n .CodeMirror-guttermarker {\n color: black;\n }\n .CodeMirror-guttermarker-subtle {\n color: #999;\n }\n\n /* CURSOR */\n\n .CodeMirror-cursor {\n border-left: 1px solid black;\n border-right: none;\n width: 0;\n }\n /* Shown when moving in bi-directional text */\n .CodeMirror div.CodeMirror-secondarycursor {\n border-left: 1px solid silver;\n }\n .cm-fat-cursor .CodeMirror-cursor {\n width: auto;\n border: 0 !important;\n background: #7e7;\n }\n .cm-fat-cursor div.CodeMirror-cursors {\n /* z-index: 1; */\n }\n\n .cm-fat-cursor-mark {\n background-color: rgba(20, 255, 20, 0.5);\n -webkit-animation: blink 1.06s steps(1) infinite;\n -moz-animation: blink 1.06s steps(1) infinite;\n animation: blink 1.06s steps(1) infinite;\n }\n .cm-animate-fat-cursor {\n width: auto;\n border: 0;\n -webkit-animation: blink 1.06s steps(1) infinite;\n -moz-animation: blink 1.06s steps(1) infinite;\n animation: blink 1.06s steps(1) infinite;\n background-color: #7e7;\n }\n\n /* Can style cursor different in overwrite (non-insert) mode */\n .CodeMirror-overwrite .CodeMirror-cursor {\n }\n\n .cm-tab {\n display: inline-block;\n text-decoration: inherit;\n }\n\n .CodeMirror-rulers {\n position: absolute;\n left: 0;\n right: 0;\n top: -50px;\n bottom: 0;\n overflow: hidden;\n }\n .CodeMirror-ruler {\n border-left: 1px solid #ccc;\n top: 0;\n bottom: 0;\n position: absolute;\n }\n\n /* DEFAULT THEME */\n\n .cm-header,\n .cm-strong {\n font-weight: bold;\n }\n .cm-em {\n font-style: italic;\n }\n .cm-link {\n text-decoration: underline;\n }\n .cm-strikethrough {\n text-decoration: line-through;\n }\n\n .CodeMirror-composing {\n border-bottom: 2px solid;\n }\n\n /* Default styles for common addons */\n\n div.CodeMirror span.CodeMirror-matchingbracket {\n color: #0b0;\n }\n div.CodeMirror span.CodeMirror-nonmatchingbracket {\n color: #a22;\n }\n .CodeMirror-matchingtag {\n background: rgba(255, 150, 0, 0.3);\n }\n .CodeMirror-activeline-background {\n background: #e8f2ff;\n }\n\n /* STOP */\n\n /* The rest of this file contains styles related to the mechanics of\n the editor. You probably shouldn't touch them. */\n\n .CodeMirror {\n position: relative;\n overflow: hidden;\n background: ${({ theme }) => `${theme.colors.neutral0}`};\n }\n\n .CodeMirror-scroll {\n overflow: scroll !important; /* Things will break if this is overridden */\n /* 50px is the magic margin used to hide the element's real scrollbars */\n /* See overflow: hidden in .CodeMirror */\n margin-bottom: -50px;\n margin-right: -50px;\n padding-bottom: 50px;\n height: 100%;\n outline: none; /* Prevent dragging from highlighting the element */\n position: relative;\n }\n .CodeMirror-sizer {\n position: relative;\n border-right: 50px solid transparent;\n }\n\n /* The fake, visible scrollbars. Used to force redraw during scrolling\n before actual scrolling happens, thus preventing shaking and\n flickering artifacts. */\n .CodeMirror-vscrollbar,\n .CodeMirror-hscrollbar,\n .CodeMirror-scrollbar-filler,\n .CodeMirror-gutter-filler {\n position: absolute;\n z-index: 1;\n display: none;\n outline: none;\n }\n\n .CodeMirror-vscrollbar {\n right: 0;\n top: 0;\n overflow-x: hidden;\n overflow-y: scroll;\n }\n .CodeMirror-hscrollbar {\n bottom: 0;\n left: 0;\n overflow-y: hidden;\n overflow-x: scroll;\n }\n .CodeMirror-scrollbar-filler {\n right: 0;\n bottom: 0;\n }\n\n .CodeMirror-lines {\n cursor: text;\n min-height: 1px; /* prevents collapsing before first draw */\n }\n /* Reset some styles that the rest of the page might have set */\n .CodeMirror pre.CodeMirror-line,\n .CodeMirror pre.CodeMirror-line-like {\n -moz-border-radius: 0;\n -webkit-border-radius: 0;\n border-radius: 0;\n border-width: 0;\n background: transparent;\n font-family: inherit;\n font-size: inherit;\n margin: 0;\n white-space: pre;\n word-wrap: normal;\n line-height: 1.5;\n color: inherit;\n /* z-index: 2; */\n position: relative;\n overflow: visible;\n -webkit-tap-highlight-color: transparent;\n -webkit-font-variant-ligatures: contextual;\n font-variant-ligatures: contextual;\n }\n\n .CodeMirror pre.CodeMirror-line-like {\n z-index: 2;\n }\n\n .CodeMirror-wrap pre.CodeMirror-line,\n .CodeMirror-wrap pre.CodeMirror-line-like {\n word-wrap: break-word;\n white-space: pre-wrap;\n word-break: normal;\n }\n\n .CodeMirror-linebackground {\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n z-index: 0;\n }\n\n .CodeMirror-linewidget {\n position: relative;\n /* z-index: 2; */\n padding: 0.1px; /* Force widget margins to stay inside of the container */\n }\n\n .CodeMirror-widget {\n }\n\n .CodeMirror-rtl pre {\n direction: rtl;\n }\n\n .CodeMirror-code {\n outline: none;\n }\n\n /* Force content-box sizing for the elements where we expect it */\n .CodeMirror-scroll,\n .CodeMirror-sizer,\n .CodeMirror-gutter,\n .CodeMirror-gutters,\n .CodeMirror-linenumber {\n -moz-box-sizing: content-box;\n box-sizing: content-box;\n }\n\n .CodeMirror-measure {\n position: absolute;\n width: 100%;\n height: 0;\n overflow: hidden;\n visibility: hidden;\n }\n\n .CodeMirror-cursor {\n position: absolute;\n pointer-events: none;\n border-color: ${({ theme }) => `${theme.colors.neutral800}`};\n }\n .CodeMirror-measure pre {\n position: static;\n }\n\n div.CodeMirror-cursors {\n visibility: hidden;\n position: relative;\n + div {\n z-index: 0 !important;\n }\n }\n\n div.CodeMirror-dragcursors {\n visibility: visible;\n }\n\n .CodeMirror-focused div.CodeMirror-cursors {\n visibility: visible;\n }\n\n .CodeMirror-selected {\n background: ${({ theme }) => theme.colors.neutral200};\n /* z-index: -10; */\n }\n .CodeMirror-crosshair {\n cursor: crosshair;\n }\n\n /* Used to force a border model for a node */\n .cm-force-border {\n padding-right: 0.1px;\n }\n\n /* See issue #2901 */\n .cm-tab-wrap-hack:after {\n content: '';\n }\n\n /* Help users use markselection to safely style text background */\n span.CodeMirror-selectedtext {\n background: none;\n }\n\n span {\n color: ${({ theme }) => theme.colors.neutral800} !important;\n }\n`;\n\nexport default Editor;\n","import React from 'react';\n\nimport { BaseButton, Box, Flex, FocusTrap, Portal, Typography } from '@strapi/design-system';\nimport { pxToRem, useLockScroll } from '@strapi/helper-plugin';\nimport { Collapse } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport PreviewWysiwyg from '../PreviewWysiwyg';\n\nconst setOpacity = (hex, alpha) =>\n `${hex}${Math.floor(alpha * 255)\n .toString(16)\n .padStart(2, 0)}`;\n\nconst ExpandWrapper = styled(Flex)`\n background: ${({ theme }) => setOpacity(theme.colors.neutral800, 0.2)};\n`;\n\nconst BoxWithBorder = styled(Box)`\n border-right: 1px solid ${({ theme }) => theme.colors.neutral200};\n`;\n\nexport const ExpandButton = styled(BaseButton)`\n background-color: transparent;\n border: none;\n align-items: center;\n\n svg {\n margin-left: ${({ theme }) => `${theme.spaces[2]}`};\n\n path {\n fill: ${({ theme }) => theme.colors.neutral700};\n width: ${12 / 16}rem;\n height: ${12 / 16}rem;\n }\n }\n`;\n\nexport const EditorLayout = ({ children, isExpandMode, error, previewContent, onCollapse }) => {\n const { formatMessage } = useIntl();\n\n useLockScroll(isExpandMode);\n\n if (isExpandMode) {\n return (\n <Portal role=\"dialog\" aria-modal={false}>\n <FocusTrap onEscape={onCollapse}>\n <ExpandWrapper\n position=\"fixed\"\n top={0}\n left={0}\n right={0}\n bottom={0}\n zIndex={4}\n justifyContent=\"center\"\n onClick={onCollapse}\n >\n <Box\n background=\"neutral0\"\n hasRadius\n shadow=\"popupShadow\"\n overflow=\"hidden\"\n width=\"90%\"\n height=\"90%\"\n onClick={(e) => e.stopPropagation()}\n >\n <Flex height=\"100%\" alignItems=\"flex-start\">\n <BoxWithBorder flex=\"1\" height=\"100%\">\n {children}\n </BoxWithBorder>\n <Flex alignItems=\"start\" direction=\"column\" flex={1} height=\"100%\" width=\"100%\">\n <Flex\n height={pxToRem(48)}\n background=\"neutral100\"\n justifyContent=\"flex-end\"\n shrink={0}\n width=\"100%\"\n >\n <ExpandButton onClick={onCollapse}>\n <Typography>\n {formatMessage({\n id: 'components.Wysiwyg.collapse',\n defaultMessage: 'Collapse',\n })}\n </Typography>\n <Collapse />\n </ExpandButton>\n </Flex>\n\n <Box position=\"relative\" height=\"100%\" width=\"100%\">\n <PreviewWysiwyg data={previewContent} />\n </Box>\n </Flex>\n </Flex>\n </Box>\n </ExpandWrapper>\n </FocusTrap>\n </Portal>\n );\n }\n\n return (\n <Box\n borderColor={error ? 'danger600' : 'neutral200'}\n borderStyle=\"solid\"\n borderWidth=\"1px\"\n hasRadius\n >\n {children}\n </Box>\n );\n};\n\nEditorLayout.defaultProps = {\n error: undefined,\n previewContent: '',\n};\n\nEditorLayout.propTypes = {\n children: PropTypes.node.isRequired,\n error: PropTypes.string,\n isExpandMode: PropTypes.bool.isRequired,\n previewContent: PropTypes.string,\n onCollapse: PropTypes.func.isRequired,\n};\n","export const replaceText = (markdownName, textToChange) => {\n let editedText;\n\n switch (markdownName) {\n case 'Strikethrough':\n editedText = `~~${textToChange}~~`;\n break;\n case 'Bold':\n editedText = `**${textToChange}**`;\n break;\n case 'Italic':\n editedText = `_${textToChange}_`;\n break;\n case 'Underline':\n editedText = `<u>${textToChange}</u>`;\n break;\n case 'Code':\n editedText = `\\`\\`\\`\\n${textToChange}\\n\\`\\`\\``;\n break;\n case 'Link':\n editedText = `[${textToChange}](link)`;\n break;\n case 'Quote':\n editedText = `>${textToChange}`;\n break;\n default:\n editedText = textToChange;\n }\n\n return editedText;\n};\n\nexport const insertText = (markdownName) => {\n let editedText;\n // object to calculate text that will be selected after insert of markdown\n let selection = { start: markdownName.length, end: 0 };\n\n switch (markdownName) {\n case 'Strikethrough':\n editedText = `~~${markdownName}~~`;\n selection.end = 2;\n break;\n case 'Bold':\n editedText = `**${markdownName}**`;\n selection.end = 2;\n break;\n case 'Italic':\n editedText = `_${markdownName}_`;\n selection.end = 1;\n break;\n case 'alt':\n editedText = `[${markdownName}]()`;\n selection.end = 3;\n break;\n case 'Underline':\n editedText = `<u>${markdownName}</u>`;\n selection.end = 4;\n break;\n case 'Code':\n editedText = `\\`\\`\\`\\n${markdownName}\\n\\`\\`\\``;\n selection.end = 3;\n break;\n case 'Link':\n editedText = `[${markdownName}](link)`;\n selection.end = 7;\n break;\n case 'Quote':\n editedText = `>${markdownName}`;\n selection.end = 0;\n break;\n default:\n editedText = '';\n }\n\n return { editedText, selection };\n};\n\nexport const insertListOrTitle = (markdown) => {\n let textToInsert;\n\n switch (markdown) {\n case 'BulletList':\n textToInsert = '- ';\n break;\n case 'NumberList':\n textToInsert = '1. ';\n break;\n case 'h1':\n textToInsert = '# ';\n break;\n case 'h2':\n textToInsert = '## ';\n break;\n case 'h3':\n textToInsert = '### ';\n break;\n case 'h4':\n textToInsert = '#### ';\n break;\n case 'h5':\n textToInsert = '##### ';\n break;\n case 'h6':\n textToInsert = '###### ';\n break;\n default:\n return '';\n }\n\n return textToInsert;\n};\n\n// EDITOR ACTIONS FUNCTIONS\n\nexport const markdownHandler = (editor, markdownType) => {\n const textToEdit = editor.current.getSelection();\n let textToInsert;\n\n if (textToEdit) {\n const editedText = replaceText(markdownType, textToEdit);\n editor.current.replaceSelection(editedText);\n editor.current.focus();\n } else {\n textToInsert = insertText(markdownType);\n editor.current.replaceSelection(textToInsert.editedText);\n editor.current.focus();\n // set selection-focus to text to replace with content\n const { line, ch } = editor.current.getCursor();\n const endSelection = ch - textToInsert.selection.end;\n const startSelection = ch - textToInsert.selection.end - textToInsert.selection.start;\n editor.current.setSelection({ line, ch: startSelection }, { line, ch: endSelection });\n }\n};\n\nexport const listHandler = (editor, listType) => {\n const doc = editor.current.getDoc();\n const insertion = listType === 'BulletList' ? '- ' : '1. ';\n\n if (doc.somethingSelected()) {\n const selections = doc.listSelections();\n let remove = null;\n\n editor.current.operation(function () {\n selections.forEach(function (selection) {\n const pos = [selection.head.line, selection.anchor.line].sort();\n\n // Remove if the first text starts with it\n if (remove == null) {\n remove = doc.getLine(pos[0]).startsWith(insertion);\n }\n\n for (let i = pos[0]; i <= pos[1]; i++) {\n if (remove) {\n // Don't remove if we don't start with it\n if (doc.getLine(i).startsWith(insertion)) {\n doc.replaceRange('', { line: i, ch: 0 }, { line: i, ch: insertion.length });\n }\n } else {\n const lineInsertion = listType === 'BulletList' ? '- ' : `${i + 1}. `;\n doc.replaceRange(lineInsertion, { line: i, ch: 0 });\n }\n }\n });\n });\n } else {\n let { line: currentLine } = doc.getCursor();\n const listToInsert = insertListOrTitle(listType);\n const lineContent = editor.current.getLine(currentLine);\n\n const textToInsert = listToInsert + lineContent;\n editor.current.setSelection(\n { line: currentLine, ch: 0 },\n { line: currentLine, ch: lineContent.length }\n );\n editor.current.replaceSelection(textToInsert);\n }\n\n editor.current.focus();\n};\n\nexport const titleHandler = (editor, titleType) => {\n let { line: currentLine } = editor.current.getCursor();\n const titleToInsert = insertListOrTitle(titleType);\n const lineContent = editor.current.getLine(currentLine);\n\n // replace hashtags followed by a space in case user want to change the type of title\n const lineWithNoTitle = lineContent.replace(/#{1,6}\\s/g, '').trim();\n\n const textToInsert = titleToInsert + lineWithNoTitle;\n editor.current.setSelection(\n { line: currentLine, ch: 0 },\n { line: currentLine, ch: lineContent.length }\n );\n editor.current.replaceSelection(textToInsert);\n\n setTimeout(() => {\n const newLastLineLength = editor.current.getLine(currentLine).length;\n editor.current.focus();\n editor.current.setCursor({ line: currentLine, ch: newLastLineLength });\n }, 0);\n};\n\nexport const insertFile = (editor, files) => {\n let { line, ch } = editor.current.getCursor();\n\n files.forEach((file, i) => {\n let contentLength = editor.current.getLine(line).length;\n editor.current.setCursor({ line, ch: contentLength });\n // create a new line after first image markdown inserted\n // or if there is content in current line\n\n if (i > 0 || (i === 0 && ch !== 0)) {\n contentLength = editor.current.getLine(line).length;\n editor.current.setCursor({ line, ch: contentLength });\n line++;\n editor.current.replaceSelection('\\n');\n }\n\n if (file.mime.includes('image')) {\n editor.current.replaceSelection(`![${file.alt}](${file.url})`);\n } else {\n editor.current.replaceSelection(`[${file.alt}](${file.url})`);\n }\n });\n\n setTimeout(() => editor.current.focus(), 0);\n};\n\n// NEXT FUNCTIONS FOR QUOTE OR CODE MARKDOWN\n\nconst insertWithTextToEdit = (editor, markdownType, line, contentLength, textToEdit) => {\n const textToInsert = replaceText(markdownType, textToEdit);\n\n // remove content after current line\n const contentToMove = editor.current.getRange(\n { line: line + 1, ch: 0 },\n { line: Infinity, ch: Infinity }\n );\n editor.current.replaceRange('', { line: line + 1, ch: 0 }, { line: Infinity, ch: Infinity });\n\n // remove word that was selected\n // set cursor end of line + move to next line\n // add text to insert\n editor.current.replaceSelection('');\n editor.current.setCursor({ line, ch: contentLength });\n editor.current.replaceSelection('\\n');\n editor.current.replaceSelection(textToInsert);\n\n if (markdownType === 'Code') {\n let { line: newLine } = editor.current.getCursor();\n editor.current.setCursor({ line: newLine - 1, ch: textToEdit.length });\n }\n\n // add content we had to remove earlier\n editor.current.replaceRange(\n contentToMove,\n { line: line + 4, ch: 0 },\n { line: Infinity, ch: Infinity }\n );\n\n editor.current.focus();\n};\n\nconst insertWithoutTextToEdit = (editor, markdownType, line, contentLength) => {\n const textToInsert = insertText(markdownType);\n\n // remove content after current line\n const contentToMove = editor.current.getRange(\n { line: line + 1, ch: 0 },\n { line: Infinity, ch: Infinity }\n );\n editor.current.replaceRange('', { line: line + 1, ch: 0 }, { line: Infinity, ch: Infinity });\n\n // replace cursor to next line\n editor.current.setCursor({ line, ch: contentLength });\n editor.current.replaceSelection('\\n');\n editor.current.replaceSelection(textToInsert.editedText);\n\n // set selection on \"Code\" or \"Quote\" word\n\n if (markdownType === 'Code') {\n line += 2;\n\n editor.current.setSelection({ line, ch: 0 }, { line, ch: 4 });\n } else {\n line += 1;\n\n let { ch } = editor.current.getCursor();\n let endSelection = ch - textToInsert.selection.end;\n let startSelection = ch - textToInsert.selection.end - textToInsert.selection.start;\n editor.current.setSelection({ line, ch: startSelection }, { line, ch: endSelection });\n }\n\n // add content we had to remove earlier\n editor.current.replaceRange(\n contentToMove,\n { line: line + 2, ch: 0 },\n { line: Infinity, ch: Infinity }\n );\n editor.current.focus();\n};\n\nexport const quoteAndCodeHandler = (editor, markdownType) => {\n const textToEdit = editor.current.getSelection();\n let { line } = editor.current.getCursor();\n let contentLength = editor.current.getLine(line).length;\n\n if (textToEdit) {\n insertWithTextToEdit(editor, markdownType, line, contentLength, textToEdit);\n } else {\n insertWithoutTextToEdit(editor, markdownType, line, contentLength);\n }\n};\n","import { BaseButton, IconButton, IconButtonGroup } from '@strapi/design-system';\nimport styled from 'styled-components';\n\n// NAV BUTTONS\nexport const CustomIconButton = styled(IconButton)`\n padding: ${({ theme }) => theme.spaces[2]};\n /* Trick to prevent the outline from overflowing because of the general outline-offset */\n outline-offset: -2px !important;\n\n svg {\n width: ${18 / 16}rem;\n height: ${18 / 16}rem;\n }\n`;\n\nexport const CustomLinkIconButton = styled(CustomIconButton)`\n svg {\n width: ${8 / 16}rem;\n height: ${8 / 16}rem;\n }\n`;\n\nexport const MainButtons = styled(IconButtonGroup)`\n margin-left: ${({ theme }) => theme.spaces[4]};\n`;\n\nexport const MoreButton = styled(IconButton)`\n margin: ${({ theme }) => `0 ${theme.spaces[2]}`};\n padding: ${({ theme }) => theme.spaces[2]};\n\n svg {\n width: ${18 / 16}rem;\n height: ${18 / 16}rem;\n }\n`;\n\n// NAV\n\nexport const IconButtonGroupMargin = styled(IconButtonGroup)`\n margin-right: ${({ theme }) => `${theme.spaces[2]}`};\n`;\n\n// FOOTER\nexport const ExpandButton = styled(BaseButton)`\n background-color: transparent;\n border: none;\n align-items: center;\n\n svg {\n margin-left: ${({ theme }) => `${theme.spaces[2]}`};\n path {\n fill: ${({ theme }) => theme.colors.neutral700};\n width: ${12 / 16}rem;\n height: ${12 / 16}rem;\n }\n }\n`;\n","import React from 'react';\n\nimport { Box, Flex, Typography } from '@strapi/design-system';\nimport { Expand } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport { ExpandButton } from './WysiwygStyles';\n\nconst WysiwygFooter = ({ onToggleExpand }) => {\n const { formatMessage } = useIntl();\n\n return (\n <Box padding={2} background=\"neutral100\" borderRadius={`0 0 ${4 / 16}rem ${4 / 16}rem`}>\n <Flex justifyContent=\"flex-end\" alignItems=\"flex-end\">\n <ExpandButton id=\"expand\" onClick={onToggleExpand}>\n <Typography>\n {formatMessage({\n id: 'components.WysiwygBottomControls.fullscreen',\n defaultMessage: 'Expand',\n })}\n </Typography>\n <Expand />\n </ExpandButton>\n </Flex>\n </Box>\n );\n};\n\nWysiwygFooter.defaultProps = {\n onToggleExpand() {},\n};\n\nWysiwygFooter.propTypes = {\n onToggleExpand: PropTypes.func,\n};\n\nexport default WysiwygFooter;\n","import React, { useRef, useState } from 'react';\n\nimport {\n Button,\n Flex,\n IconButtonGroup,\n SingleSelectOption,\n Popover,\n SingleSelect,\n} from '@strapi/design-system';\nimport {\n Bold,\n BulletList,\n Code,\n Italic,\n Link,\n More,\n NumberList,\n Picture as Image,\n Quote,\n StrikeThrough,\n Underline,\n} from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport {\n CustomIconButton,\n CustomLinkIconButton,\n IconButtonGroupMargin,\n MainButtons,\n MoreButton,\n} from './WysiwygStyles';\n\n/**\n * TODO: refactor this mess.\n */\nconst WysiwygNav = ({\n disabled,\n editorRef,\n isExpandMode,\n isPreviewMode,\n onActionClick,\n onToggleMediaLib,\n onTogglePreviewMode,\n}) => {\n const [visiblePopover, setVisiblePopover] = useState(false);\n const { formatMessage } = useIntl();\n const selectPlaceholder = formatMessage({\n id: 'components.Wysiwyg.selectOptions.title',\n defaultMessage: 'Add a title',\n });\n const buttonMoreRef = useRef();\n\n const handleTogglePopover = () => {\n setVisiblePopover((prev) => !prev);\n };\n\n if (disabled || isPreviewMode) {\n return (\n <Flex\n padding={2}\n background=\"neutral100\"\n justifyContent=\"space-between\"\n borderRadius={`${4 / 16}rem ${4 / 16}rem 0 0`}\n >\n <StyledFlex>\n <SingleSelect disabled placeholder={selectPlaceholder} size=\"S\" label={selectPlaceholder}>\n <SingleSelectOption value=\"h1\">h1</SingleSelectOption>\n <SingleSelectOption value=\"h2\">h2</SingleSelectOption>\n <SingleSelectOption value=\"h3\">h3</SingleSelectOption>\n <SingleSelectOption value=\"h4\">h4</SingleSelectOption>\n <SingleSelectOption value=\"h5\">h5</SingleSelectOption>\n <SingleSelectOption value=\"h6\">h6</SingleSelectOption>\n </SingleSelect>\n\n <MainButtons>\n <CustomIconButton disabled label=\"Bold\" name=\"Bold\" icon={<Bold />} />\n <CustomIconButton disabled label=\"Italic\" name=\"Italic\" icon={<Italic />} />\n <CustomIconButton disabled label=\"Underline\" name=\"Underline\" icon={<Underline />} />\n </MainButtons>\n\n <MoreButton disabled label=\"More\" icon={<More />} />\n </StyledFlex>\n\n {!isExpandMode && (\n <Button onClick={onTogglePreviewMode} variant=\"tertiary\">\n {formatMessage({\n id: 'components.Wysiwyg.ToggleMode.markdown-mode',\n defaultMessage: 'Markdown mode',\n })}\n </Button>\n )}\n </Flex>\n );\n }\n\n return (\n <Flex\n padding={2}\n background=\"neutral100\"\n justifyContent=\"space-between\"\n borderRadius={`${4 / 16}rem ${4 / 16}rem 0 0`}\n >\n <StyledFlex>\n <SingleSelect\n placeholder={selectPlaceholder}\n label={selectPlaceholder}\n size=\"S\"\n onChange={(value) => onActionClick(value, editorRef)}\n >\n <SingleSelectOption value=\"h1\">h1</SingleSelectOption>\n <SingleSelectOption value=\"h2\">h2</SingleSelectOption>\n <SingleSelectOption value=\"h3\">h3</SingleSelectOption>\n <SingleSelectOption value=\"h4\">h4</SingleSelectOption>\n <SingleSelectOption value=\"h5\">h5</SingleSelectOption>\n <SingleSelectOption value=\"h6\">h6</SingleSelectOption>\n </SingleSelect>\n\n <MainButtons>\n <CustomIconButton\n onClick={() => onActionClick('Bold', editorRef)}\n label=\"Bold\"\n name=\"Bold\"\n icon={<Bold />}\n />\n <CustomIconButton\n onClick={() => onActionClick('Italic', editorRef)}\n label=\"Italic\"\n name=\"Italic\"\n icon={<Italic />}\n />\n <CustomIconButton\n onClick={() => onActionClick('Underline', editorRef)}\n label=\"Underline\"\n name=\"Underline\"\n icon={<Underline />}\n />\n </MainButtons>\n\n <MoreButton\n ref={buttonMoreRef}\n onClick={handleTogglePopover}\n label=\"More\"\n icon={<More />}\n />\n {visiblePopover && (\n <Popover onDismiss={handleTogglePopover} centered source={buttonMoreRef} spacing={4}>\n <Flex>\n <IconButtonGroupMargin>\n <CustomIconButton\n onClick={() => onActionClick('Strikethrough', editorRef, handleTogglePopover)}\n label=\"Strikethrough\"\n name=\"Strikethrough\"\n icon={<StrikeThrough />}\n />\n <CustomIconButton\n onClick={() => onActionClick('BulletList', editorRef, handleTogglePopover)}\n label=\"BulletList\"\n name=\"BulletList\"\n icon={<BulletList />}\n />\n <CustomIconButton\n onClick={() => onActionClick('NumberList', editorRef, handleTogglePopover)}\n label=\"NumberList\"\n name=\"NumberList\"\n icon={<NumberList />}\n />\n </IconButtonGroupMargin>\n <IconButtonGroup>\n <CustomIconButton\n onClick={() => onActionClick('Code', editorRef, handleTogglePopover)}\n label=\"Code\"\n name=\"Code\"\n icon={<Code />}\n />\n <CustomIconButton\n onClick={() => {\n handleTogglePopover();\n onToggleMediaLib();\n }}\n label=\"Image\"\n name=\"Image\"\n icon={<Image />}\n />\n <CustomLinkIconButton\n onClick={() => onActionClick('Link', editorRef, handleTogglePopover)}\n label=\"Link\"\n name=\"Link\"\n // eslint-disable-next-line jsx-a11y/anchor-is-valid\n icon={<Link />}\n />\n <CustomIconButton\n onClick={() => onActionClick('Quote', editorRef, handleTogglePopover)}\n label=\"Quote\"\n name=\"Quote\"\n icon={<Quote />}\n />\n </IconButtonGroup>\n </Flex>\n </Popover>\n )}\n </StyledFlex>\n\n {onTogglePreviewMode && (\n <Button onClick={onTogglePreviewMode} variant=\"tertiary\">\n {formatMessage({\n id: 'components.Wysiwyg.ToggleMode.preview-mode',\n defaultMessage: 'Preview mode',\n })}\n </Button>\n )}\n </Flex>\n );\n};\n\nWysiwygNav.defaultProps = {\n isPreviewMode: false,\n onActionClick() {},\n onToggleMediaLib() {},\n onTogglePreviewMode: undefined,\n};\n\nWysiwygNav.propTypes = {\n disabled: PropTypes.bool.isRequired,\n editorRef: PropTypes.shape({ current: PropTypes.any }).isRequired,\n isExpandMode: PropTypes.bool.isRequired,\n isPreviewMode: PropTypes.bool,\n onActionClick: PropTypes.func,\n onToggleMediaLib: PropTypes.func,\n onTogglePreviewMode: PropTypes.func,\n};\n\nexport default WysiwygNav;\n\nconst StyledFlex = styled(Flex)`\n /* Hide the label, every input needs a label. */\n label {\n border: 0;\n clip: rect(0 0 0 0);\n height: 1px;\n margin: -1px;\n overflow: hidden;\n padding: 0;\n position: absolute;\n width: 1px;\n }\n`;\n","import React, { forwardRef, useRef, useState } from 'react';\n\nimport { Box, Flex, Typography } from '@strapi/design-system';\nimport { prefixFileUrlWithBackendUrl, useLibrary } from '@strapi/helper-plugin';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport Hint from '../Hint';\n\nimport Editor from './Editor';\nimport { EditorLayout } from './EditorLayout';\nimport {\n insertFile,\n listHandler,\n markdownHandler,\n quoteAndCodeHandler,\n titleHandler,\n} from './utils/utils';\nimport WysiwygFooter from './WysiwygFooter';\nimport WysiwygNav from './WysiwygNav';\n\nconst LabelAction = styled(Box)`\n svg path {\n fill: ${({ theme }) => theme.colors.neutral500};\n }\n`;\n\nconst TypographyAsterisk = styled(Typography)`\n line-height: 0;\n`;\n\nconst Wysiwyg = forwardRef(\n (\n { hint, disabled, error, intlLabel, labelAction, name, onChange, placeholder, value, required },\n forwardedRef\n ) => {\n const { formatMessage } = useIntl();\n const textareaRef = useRef(null);\n const editorRef = useRef(null);\n const [isPreviewMode, setIsPreviewMode] = useState(false);\n const [mediaLibVisible, setMediaLibVisible] = useState(false);\n const [isExpandMode, setIsExpandMode] = useState(false);\n const { components } = useLibrary();\n\n const MediaLibraryDialog = components['media-library'];\n\n const handleToggleMediaLib = () => setMediaLibVisible((prev) => !prev);\n const handleTogglePreviewMode = () => setIsPreviewMode((prev) => !prev);\n const handleToggleExpand = () => {\n setIsPreviewMode(false);\n setIsExpandMode((prev) => !prev);\n };\n\n const handleActionClick = (value, currentEditorRef, togglePopover) => {\n switch (value) {\n case 'Link':\n case 'Strikethrough': {\n markdownHandler(currentEditorRef, value);\n togglePopover();\n break;\n }\n case 'Code':\n case 'Quote': {\n quoteAndCodeHandler(currentEditorRef, value);\n togglePopover();\n break;\n }\n case 'Bold':\n case 'Italic':\n case 'Underline': {\n markdownHandler(currentEditorRef, value);\n break;\n }\n case 'BulletList':\n case 'NumberList': {\n listHandler(currentEditorRef, value);\n togglePopover();\n break;\n }\n case 'h1':\n case 'h2':\n case 'h3':\n case 'h4':\n case 'h5':\n case 'h6': {\n titleHandler(currentEditorRef, value);\n break;\n }\n default: {\n // Nothing\n }\n }\n };\n\n const handleSelectAssets = (files) => {\n const formattedFiles = files.map((f) => ({\n alt: f.alternativeText || f.name,\n url: prefixFileUrlWithBackendUrl(f.url),\n mime: f.mime,\n }));\n\n insertFile(editorRef, formattedFiles);\n setMediaLibVisible(false);\n };\n\n const formattedPlaceholder = placeholder\n ? formatMessage(\n { id: placeholder.id, defaultMessage: placeholder.defaultMessage },\n { ...placeholder.values }\n )\n : '';\n\n const label = intlLabel.id\n ? formatMessage(\n { id: intlLabel.id, defaultMessage: intlLabel.defaultMessage },\n { ...intlLabel.values }\n )\n : name;\n\n return (\n <>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={1}>\n <Flex gap={1}>\n <Typography variant=\"pi\" fontWeight=\"bold\" textColor=\"neutral800\">\n {label}\n {required && <TypographyAsterisk textColor=\"danger600\">*</TypographyAsterisk>}\n </Typography>\n {labelAction && <LabelAction paddingLeft={1}>{labelAction}</LabelAction>}\n </Flex>\n\n <EditorLayout\n isExpandMode={isExpandMode}\n error={error}\n previewContent={value}\n onCollapse={handleToggleExpand}\n >\n <WysiwygNav\n isExpandMode={isExpandMode}\n editorRef={editorRef}\n isPreviewMode={isPreviewMode}\n onActionClick={handleActionClick}\n onToggleMediaLib={handleToggleMediaLib}\n onTogglePreviewMode={isExpandMode ? undefined : handleTogglePreviewMode}\n disabled={disabled}\n />\n\n <Editor\n disabled={disabled}\n isExpandMode={isExpandMode}\n editorRef={editorRef}\n error={error}\n isPreviewMode={isPreviewMode}\n name={name}\n onChange={onChange}\n placeholder={formattedPlaceholder}\n textareaRef={textareaRef}\n value={value}\n ref={forwardedRef}\n />\n\n {!isExpandMode && <WysiwygFooter onToggleExpand={handleToggleExpand} />}\n </EditorLayout>\n <Hint hint={hint} name={name} error={error} />\n </Flex>\n\n {error && (\n <Box paddingTop={1}>\n <Typography variant=\"pi\" textColor=\"danger600\" data-strapi-field-error>\n {error}\n </Typography>\n </Box>\n )}\n\n {mediaLibVisible && (\n <MediaLibraryDialog onClose={handleToggleMediaLib} onSelectAssets={handleSelectAssets} />\n )}\n </>\n );\n }\n);\n\nWysiwyg.defaultProps = {\n disabled: false,\n error: '',\n labelAction: undefined,\n placeholder: null,\n required: false,\n value: '',\n hint: '',\n};\n\nWysiwyg.propTypes = {\n hint: PropTypes.oneOfType([PropTypes.string, PropTypes.array]),\n disabled: PropTypes.bool,\n error: PropTypes.string,\n intlLabel: PropTypes.shape({\n id: PropTypes.string.isRequired,\n defaultMessage: PropTypes.string.isRequired,\n values: PropTypes.object,\n }).isRequired,\n labelAction: PropTypes.element,\n name: PropTypes.string.isRequired,\n onChange: PropTypes.func.isRequired,\n placeholder: PropTypes.shape({\n id: PropTypes.string.isRequired,\n defaultMessage: PropTypes.string.isRequired,\n values: PropTypes.object,\n }),\n required: PropTypes.bool,\n value: PropTypes.string,\n};\n\nexport default Wysiwyg;\n","import React from 'react';\n\nfunction connect(WrappedComponent, select) {\n return (props) => {\n // eslint-disable-next-line react/prop-types\n const selectors = select(props.keys);\n\n return <WrappedComponent {...props} {...selectors} />;\n };\n}\n\nexport default connect;\n","const generateOptions = (options, isRequired = false) => {\n return [\n {\n metadatas: {\n intlLabel: {\n id: 'components.InputSelect.option.placeholder',\n defaultMessage: 'Choose here',\n },\n disabled: isRequired,\n hidden: isRequired,\n },\n key: '__enum_option_null',\n value: '',\n },\n ...options.map((option) => {\n return {\n metadatas: {\n intlLabel: {\n id: option,\n defaultMessage: option,\n },\n hidden: false,\n disabled: false,\n },\n key: option,\n value: option,\n };\n }),\n ];\n};\n\nexport default generateOptions;\n","import toLower from 'lodash/toLower';\n\nconst getInputType = (type = '') => {\n switch (toLower(type)) {\n case 'blocks':\n return 'blocks';\n case 'boolean':\n return 'bool';\n case 'biginteger':\n return 'text';\n case 'decimal':\n case 'float':\n case 'integer':\n return 'number';\n case 'date':\n case 'datetime':\n case 'time':\n return type;\n case 'email':\n return 'email';\n case 'enumeration':\n return 'select';\n case 'password':\n return 'password';\n case 'string':\n return 'text';\n case 'text':\n return 'textarea';\n case 'media':\n case 'file':\n case 'files':\n return 'media';\n case 'json':\n return 'json';\n case 'wysiwyg':\n case 'WYSIWYG':\n case 'richtext':\n return 'wysiwyg';\n case 'uid':\n return 'uid';\n default:\n return type || 'text';\n }\n};\n\nexport default getInputType;\n","import { useMemo } from 'react';\n\nimport { useCMEditViewDataManager } from '@strapi/helper-plugin';\nimport get from 'lodash/get';\n\nfunction useSelect(keys) {\n const {\n createActionAllowedFields,\n formErrors,\n isCreatingEntry,\n modifiedData,\n onChange,\n readActionAllowedFields,\n shouldNotRunValidations,\n updateActionAllowedFields,\n } = useCMEditViewDataManager();\n\n const allowedFields = useMemo(() => {\n return isCreatingEntry ? createActionAllowedFields : updateActionAllowedFields;\n }, [isCreatingEntry, createActionAllowedFields, updateActionAllowedFields]);\n\n const readableFields = useMemo(() => {\n return isCreatingEntry ? [] : readActionAllowedFields;\n }, [isCreatingEntry, readActionAllowedFields]);\n\n const value = get(modifiedData, keys, null);\n\n return {\n allowedFields,\n formErrors,\n isCreatingEntry,\n onChange,\n readableFields,\n shouldNotRunValidations,\n value,\n };\n}\n\nexport default useSelect;\n","const validationsToOmit = [\n 'type',\n 'model',\n 'via',\n 'collection',\n 'default',\n 'plugin',\n 'enum',\n 'regex',\n 'pluginOptions',\n];\n\nexport default validationsToOmit;\n","import React, { memo, useMemo } from 'react';\n\nimport { GenericInput, NotAllowedInput, useLibrary } from '@strapi/helper-plugin';\nimport get from 'lodash/get';\nimport isEqual from 'lodash/isEqual';\nimport omit from 'lodash/omit';\nimport take from 'lodash/take';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport { useContentTypeLayout } from '../../hooks';\nimport { getFieldName } from '../../utils';\nimport Blocks from '../BlocksEditor';\nimport { InputUID } from '../InputUID';\nimport { RelationInputDataManager } from '../RelationInputDataManager';\nimport Wysiwyg from '../Wysiwyg';\n\nimport { connect, generateOptions, getInputType, select, VALIDATIONS_TO_OMIT } from './utils';\n\nfunction Inputs({\n allowedFields,\n componentUid,\n fieldSchema,\n formErrors,\n isCreatingEntry,\n keys,\n labelAction,\n metadatas,\n onChange,\n readableFields,\n shouldNotRunValidations,\n queryInfos,\n value,\n size,\n customFieldInputs,\n}) {\n const { fields } = useLibrary();\n const { formatMessage } = useIntl();\n const { contentType: currentContentTypeLayout } = useContentTypeLayout();\n\n const disabled = useMemo(() => !get(metadatas, 'editable', true), [metadatas]);\n const { type, customField: customFieldUid } = fieldSchema;\n const error = get(formErrors, [keys], null);\n\n const fieldName = useMemo(() => {\n return getFieldName(keys);\n }, [keys]);\n\n const validations = useMemo(() => {\n const inputValidations = omit(\n fieldSchema,\n shouldNotRunValidations\n ? [...VALIDATIONS_TO_OMIT, 'required', 'minLength']\n : VALIDATIONS_TO_OMIT\n );\n\n const regexpString = fieldSchema.regex || null;\n\n if (regexpString) {\n const regexp = new RegExp(regexpString);\n\n if (regexp) {\n inputValidations.regex = regexp;\n }\n }\n\n return inputValidations;\n }, [fieldSchema, shouldNotRunValidations]);\n\n const isRequired = useMemo(() => get(validations, ['required'], false), [validations]);\n\n const isChildOfDynamicZone = useMemo(() => {\n const attributes = get(currentContentTypeLayout, ['attributes'], {});\n const foundAttributeType = get(attributes, [fieldName[0], 'type'], null);\n\n return foundAttributeType === 'dynamiczone';\n }, [currentContentTypeLayout, fieldName]);\n\n const inputType = getInputType(type);\n\n const inputValue = type === 'media' && !value ? [] : value;\n\n const isUserAllowedToEditField = useMemo(() => {\n const joinedName = fieldName.join('.');\n\n if (allowedFields.includes(joinedName)) {\n return true;\n }\n\n if (isChildOfDynamicZone) {\n return allowedFields.includes(fieldName[0]);\n }\n\n const isChildOfComponent = fieldName.length > 1;\n\n if (isChildOfComponent) {\n const parentFieldName = take(fieldName, fieldName.length - 1).join('.');\n\n return allowedFields.includes(parentFieldName);\n }\n\n return false;\n }, [allowedFields, fieldName, isChildOfDynamicZone]);\n\n const isUserAllowedToReadField = useMemo(() => {\n const joinedName = fieldName.join('.');\n\n if (readableFields.includes(joinedName)) {\n return true;\n }\n\n if (isChildOfDynamicZone) {\n return readableFields.includes(fieldName[0]);\n }\n\n const isChildOfComponent = fieldName.length > 1;\n\n if (isChildOfComponent) {\n const parentFieldName = take(fieldName, fieldName.length - 1).join('.');\n\n return readableFields.includes(parentFieldName);\n }\n\n return false;\n }, [readableFields, fieldName, isChildOfDynamicZone]);\n\n const shouldDisplayNotAllowedInput = useMemo(() => {\n return isUserAllowedToReadField || isUserAllowedToEditField;\n }, [isUserAllowedToEditField, isUserAllowedToReadField]);\n\n const shouldDisableField = useMemo(() => {\n if (!isCreatingEntry) {\n const doesNotHaveRight = isUserAllowedToReadField && !isUserAllowedToEditField;\n\n if (doesNotHaveRight) {\n return true;\n }\n\n return disabled;\n }\n\n return disabled;\n }, [disabled, isCreatingEntry, isUserAllowedToEditField, isUserAllowedToReadField]);\n\n const options = useMemo(\n () => generateOptions(fieldSchema.enum || [], isRequired),\n [fieldSchema, isRequired]\n );\n\n const { label, description, placeholder, visible } = metadatas;\n\n if (visible === false) {\n return null;\n }\n\n if (!shouldDisplayNotAllowedInput) {\n return (\n <NotAllowedInput\n description={description ? { id: description, defaultMessage: description } : null}\n intlLabel={{ id: label, defaultMessage: label }}\n labelAction={labelAction}\n error={error && formatMessage(error)}\n name={keys}\n required={isRequired}\n />\n );\n }\n\n if (type === 'relation') {\n return (\n <RelationInputDataManager\n {...metadatas}\n {...fieldSchema}\n componentUid={componentUid}\n description={\n metadatas.description\n ? formatMessage({\n id: metadatas.description,\n defaultMessage: metadatas.description,\n })\n : undefined\n }\n intlLabel={{\n id: metadatas.label,\n defaultMessage: metadatas.label,\n }}\n labelAction={labelAction}\n isUserAllowedToEditField={isUserAllowedToEditField}\n isUserAllowedToReadField={isUserAllowedToReadField}\n name={keys}\n placeholder={\n metadatas.placeholder\n ? {\n id: metadatas.placeholder,\n defaultMessage: metadatas.placeholder,\n }\n : null\n }\n queryInfos={queryInfos}\n size={size}\n value={value}\n error={error && formatMessage(error)}\n />\n );\n }\n\n const customInputs = {\n uid: InputUID,\n media: fields.media,\n wysiwyg: Wysiwyg,\n blocks: Blocks,\n ...fields,\n ...customFieldInputs,\n };\n\n return (\n <GenericInput\n attribute={fieldSchema}\n autoComplete=\"new-password\"\n intlLabel={{ id: label, defaultMessage: label }}\n // in case the default value of the boolean is null, attribute.default doesn't exist\n isNullable={inputType === 'bool' && [null, undefined].includes(fieldSchema.default)}\n description={description ? { id: description, defaultMessage: description } : null}\n disabled={shouldDisableField}\n error={error}\n labelAction={labelAction}\n contentTypeUID={currentContentTypeLayout.uid}\n customInputs={customInputs}\n multiple={fieldSchema.multiple || false}\n name={keys}\n onChange={onChange}\n options={options}\n placeholder={placeholder ? { id: placeholder, defaultMessage: placeholder } : null}\n required={fieldSchema.required || false}\n step={getStep(type)}\n type={customFieldUid || inputType}\n // validations={validations}\n value={inputValue}\n withDefaultValue={false}\n />\n );\n}\n\nInputs.defaultProps = {\n componentUid: undefined,\n formErrors: {},\n labelAction: undefined,\n size: undefined,\n value: null,\n queryInfos: {},\n customFieldInputs: {},\n};\n\nInputs.propTypes = {\n allowedFields: PropTypes.array.isRequired,\n componentUid: PropTypes.string,\n fieldSchema: PropTypes.object.isRequired,\n formErrors: PropTypes.object,\n keys: PropTypes.string.isRequired,\n isCreatingEntry: PropTypes.bool.isRequired,\n labelAction: PropTypes.element,\n metadatas: PropTypes.object.isRequired,\n onChange: PropTypes.func.isRequired,\n readableFields: PropTypes.array.isRequired,\n size: PropTypes.number,\n shouldNotRunValidations: PropTypes.bool.isRequired,\n value: PropTypes.any,\n queryInfos: PropTypes.shape({\n containsKey: PropTypes.string,\n defaultParams: PropTypes.object,\n endPoint: PropTypes.string,\n }),\n customFieldInputs: PropTypes.object,\n};\n\nconst getStep = (type) => {\n switch (type) {\n case 'float':\n case 'decimal':\n return 0.01;\n default:\n return 1;\n }\n};\n\nconst Memoized = memo(Inputs, isEqual);\n\nexport default connect(Memoized, select);\n","/* eslint-disable react/no-array-index-key */\n/* eslint-disable import/no-cycle */\n\nimport React, { useMemo } from 'react';\n\nimport { Box, Flex, Grid, GridItem } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\n\nimport { useContentTypeLayout } from '../../hooks';\nimport useLazyComponents from '../../hooks/useLazyComponents';\nimport FieldComponent from '../FieldComponent';\nimport Inputs from '../Inputs';\n\nconst NonRepeatableComponent = ({ componentUid, isFromDynamicZone, isNested, name }) => {\n const { getComponentLayout } = useContentTypeLayout();\n const componentLayoutData = useMemo(\n () => getComponentLayout(componentUid),\n [componentUid, getComponentLayout]\n );\n const fields = componentLayoutData.layouts.edit;\n\n const { lazyComponentStore } = useLazyComponents();\n\n return (\n <Box\n background={isFromDynamicZone ? '' : 'neutral100'}\n paddingLeft={6}\n paddingRight={6}\n paddingTop={6}\n paddingBottom={6}\n hasRadius={isNested}\n borderColor={isNested ? 'neutral200' : ''}\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n {fields.map((fieldRow, key) => {\n return (\n <Grid gap={4} key={key}>\n {fieldRow.map(({ name: fieldName, size, metadatas, fieldSchema, queryInfos }) => {\n const isComponent = fieldSchema.type === 'component';\n const keys = `${name}.${fieldName}`;\n\n if (isComponent) {\n const compoUid = fieldSchema.component;\n\n return (\n <GridItem col={size} s={12} xs={12} key={fieldName}>\n <FieldComponent\n componentUid={compoUid}\n intlLabel={{\n id: metadatas.label,\n defaultMessage: metadatas.label,\n }}\n isNested\n isRepeatable={fieldSchema.repeatable}\n max={fieldSchema.max}\n min={fieldSchema.min}\n name={keys}\n required={fieldSchema.required || false}\n />\n </GridItem>\n );\n }\n\n return (\n <GridItem col={size} key={fieldName} s={12} xs={12}>\n <Inputs\n componentUid={componentUid}\n keys={keys}\n fieldSchema={fieldSchema}\n metadatas={metadatas}\n queryInfos={queryInfos}\n size={size}\n customFieldInputs={lazyComponentStore}\n />\n </GridItem>\n );\n })}\n </Grid>\n );\n })}\n </Flex>\n </Box>\n );\n};\n\nNonRepeatableComponent.defaultProps = {\n isFromDynamicZone: false,\n isNested: false,\n};\n\nNonRepeatableComponent.propTypes = {\n componentUid: PropTypes.string.isRequired,\n isFromDynamicZone: PropTypes.bool,\n isNested: PropTypes.bool,\n name: PropTypes.string.isRequired,\n};\n\nexport default NonRepeatableComponent;\n","import React from 'react';\n\nimport { Box, KeyboardNavigable, Typography } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nexport const Footer = styled(Box)`\n overflow: hidden;\n border-bottom: 1px solid ${({ theme }) => theme.colors.neutral200};\n border-right: 1px solid ${({ theme }) => theme.colors.neutral200};\n border-left: 1px solid ${({ theme }) => theme.colors.neutral200};\n border-radius: 0 0 ${({ theme }) => theme.borderRadius} ${({ theme }) => theme.borderRadius};\n`;\n\nexport const Content = styled(Box)`\n border-bottom: none;\n\n /* add the borders and make sure the top is transparent to avoid jumping with the hover effect */\n & > div > div {\n border: 1px solid ${({ theme }) => theme.colors.neutral200};\n border-top-color: transparent;\n }\n\n /* the top accordion _does_ need a border though */\n & > div:first-child > div {\n border-top: 1px solid ${({ theme }) => theme.colors.neutral200};\n }\n\n /* Reset all the border-radius' */\n & > div > div,\n & > div > div > div {\n border-radius: unset;\n }\n\n /* Give the border radius back to the first accordion */\n & > div:first-child > div,\n & > div:first-child > div > div {\n border-radius: ${({ theme }) => theme.borderRadius} ${({ theme }) => theme.borderRadius} 0 0;\n }\n\n & > div > div[data-strapi-expanded='true'] {\n border: 1px solid ${({ theme }) => theme.colors.primary600};\n }\n`;\n\nexport const Group = ({ children, error }) => {\n const { formatMessage } = useIntl();\n\n return (\n <KeyboardNavigable attributeName=\"data-strapi-accordion-toggle\">\n {children}\n {error && (\n <Box paddingTop={1}>\n <Typography variant=\"pi\" textColor=\"danger600\">\n {formatMessage(\n { id: error.id, defaultMessage: error.defaultMessage },\n { ...error.values }\n )}\n </Typography>\n </Box>\n )}\n </KeyboardNavigable>\n );\n};\n\nGroup.defaultProps = {\n error: undefined,\n};\n\nGroup.propTypes = {\n children: PropTypes.node.isRequired,\n error: PropTypes.shape({\n id: PropTypes.string.isRequired,\n defaultMessage: PropTypes.string.isRequired,\n values: PropTypes.object,\n }),\n};\n","import React from 'react';\n\nimport styled from 'styled-components';\n\nconst StyledSpan = styled.span`\n display: block;\n background-color: ${({ theme }) => theme.colors.primary100};\n outline: 1px dashed ${({ theme }) => theme.colors.primary500};\n outline-offset: -1px;\n padding: ${({ theme }) => theme.spaces[6]};\n`;\n\nconst Preview = () => {\n return <StyledSpan padding={6} background=\"primary100\" />;\n};\n\nexport default Preview;\n","/* eslint-disable import/no-cycle */\nimport React, { memo, useEffect, useRef } from 'react';\n\nimport {\n Accordion,\n AccordionContent,\n AccordionToggle,\n Box,\n Flex,\n Grid,\n GridItem,\n IconButton,\n} from '@strapi/design-system';\nimport { useCMEditViewDataManager } from '@strapi/helper-plugin';\nimport { Drag, Trash } from '@strapi/icons';\nimport get from 'lodash/get';\nimport toString from 'lodash/toString';\nimport PropTypes from 'prop-types';\nimport { getEmptyImage } from 'react-dnd-html5-backend';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport { useDragAndDrop } from '../../../hooks/useDragAndDrop';\nimport useLazyComponents from '../../../hooks/useLazyComponents';\nimport { composeRefs, getTrad, ItemTypes } from '../../../utils';\nimport FieldComponent from '../../FieldComponent';\nimport Inputs from '../../Inputs';\n\nimport Preview from './Preview';\n\nconst CustomIconButton = styled(IconButton)`\n background-color: transparent;\n\n svg {\n path {\n fill: ${({ theme, expanded }) =>\n expanded ? theme.colors.primary600 : theme.colors.neutral600};\n }\n }\n\n &:hover {\n svg {\n path {\n fill: ${({ theme }) => theme.colors.primary600};\n }\n }\n }\n`;\n\nconst ActionsFlex = styled(Flex)`\n & .drag-handle {\n background: unset;\n\n svg {\n path {\n fill: ${({ theme, expanded }) => (expanded ? theme.colors.primary600 : undefined)};\n }\n }\n\n &:hover {\n svg {\n path {\n /* keeps the hover style of the accordion */\n fill: ${({ theme }) => theme.colors.primary600};\n }\n }\n }\n }\n`;\n\n// Issues:\n// https://github.com/react-dnd/react-dnd/issues/1368\n// https://github.com/frontend-collective/react-sortable-tree/issues/490\n\nconst DraggedItem = ({\n componentFieldName,\n componentUid,\n fields,\n index,\n isOpen,\n isReadOnly,\n mainField,\n moveComponentField,\n onClickToggle,\n toggleCollapses,\n onGrabItem,\n onDropItem,\n onCancel,\n}) => {\n const { modifiedData, removeRepeatableField, triggerFormValidation } = useCMEditViewDataManager();\n\n const displayedValue = toString(\n get(modifiedData, [...componentFieldName.split('.'), mainField], '')\n );\n const accordionRef = useRef(null);\n const { formatMessage } = useIntl();\n\n /**\n * The last item in the fieldName array will be the index of this component.\n * Drag and drop should be isolated to the parent component so nested repeatable\n * components are not affected by the drag and drop of the parent component in\n * their own re-ordering context.\n */\n const componentKey = componentFieldName.split('.').slice(0, -1).join('.');\n\n const [{ handlerId, isDragging, handleKeyDown }, boxRef, dropRef, dragRef, dragPreviewRef] =\n useDragAndDrop(!isReadOnly, {\n type: `${ItemTypes.COMPONENT}_${componentKey}`,\n index,\n item: {\n displayedValue,\n },\n onMoveItem: moveComponentField,\n onStart() {\n // Close all collapses\n toggleCollapses();\n },\n onEnd() {\n // Update the errors\n triggerFormValidation();\n },\n onGrabItem,\n onDropItem,\n onCancel,\n });\n\n useEffect(() => {\n dragPreviewRef(getEmptyImage(), { captureDraggingState: false });\n }, [dragPreviewRef, index]);\n\n const composedAccordionRefs = composeRefs(accordionRef, dragRef);\n const composedBoxRefs = composeRefs(boxRef, dropRef);\n\n const { lazyComponentStore } = useLazyComponents();\n\n return (\n <Box ref={composedBoxRefs}>\n {isDragging ? (\n <Preview />\n ) : (\n <Accordion expanded={isOpen} onToggle={onClickToggle} id={componentFieldName} size=\"S\">\n <AccordionToggle\n action={\n isReadOnly ? null : (\n <ActionsFlex gap={0} expanded={isOpen}>\n <CustomIconButton\n expanded={isOpen}\n noBorder\n onClick={() => {\n removeRepeatableField(componentFieldName);\n toggleCollapses();\n }}\n label={formatMessage({\n id: getTrad('containers.Edit.delete'),\n defaultMessage: 'Delete',\n })}\n icon={<Trash />}\n />\n <IconButton\n className=\"drag-handle\"\n ref={composedAccordionRefs}\n forwardedAs=\"div\"\n role=\"button\"\n noBorder\n tabIndex={0}\n onClick={(e) => e.stopPropagation()}\n data-handler-id={handlerId}\n label={formatMessage({\n id: getTrad('components.DragHandle-label'),\n defaultMessage: 'Drag',\n })}\n onKeyDown={handleKeyDown}\n >\n <Drag />\n </IconButton>\n </ActionsFlex>\n )\n }\n title={displayedValue}\n togglePosition=\"left\"\n />\n <AccordionContent>\n <Flex\n direction=\"column\"\n alignItems=\"stretch\"\n background=\"neutral100\"\n padding={6}\n gap={6}\n >\n {fields.map((fieldRow, key) => {\n return (\n // eslint-disable-next-line react/no-array-index-key\n <Grid gap={4} key={key}>\n {fieldRow.map(({ name, fieldSchema, metadatas, queryInfos, size }) => {\n const isComponent = fieldSchema.type === 'component';\n const keys = `${componentFieldName}.${name}`;\n\n if (isComponent) {\n const componentUid = fieldSchema.component;\n\n return (\n <GridItem col={size} s={12} xs={12} key={name}>\n <FieldComponent\n componentUid={componentUid}\n intlLabel={{\n id: metadatas.label,\n defaultMessage: metadatas.label,\n }}\n isRepeatable={fieldSchema.repeatable}\n isNested\n name={keys}\n max={fieldSchema.max}\n min={fieldSchema.min}\n required={fieldSchema.required}\n />\n </GridItem>\n );\n }\n\n return (\n <GridItem key={keys} col={size} s={12} xs={12}>\n <Inputs\n componentUid={componentUid}\n fieldSchema={fieldSchema}\n keys={keys}\n metadatas={metadatas}\n queryInfos={queryInfos}\n size={size}\n customFieldInputs={lazyComponentStore}\n />\n </GridItem>\n );\n })}\n </Grid>\n );\n })}\n </Flex>\n </AccordionContent>\n </Accordion>\n )}\n </Box>\n );\n};\n\nDraggedItem.defaultProps = {\n componentUid: undefined,\n fields: [],\n isReadOnly: false,\n isOpen: false,\n onGrabItem: undefined,\n onDropItem: undefined,\n onCancel: undefined,\n toggleCollapses() {},\n};\n\nDraggedItem.propTypes = {\n componentFieldName: PropTypes.string.isRequired,\n componentUid: PropTypes.string,\n fields: PropTypes.array,\n index: PropTypes.number.isRequired,\n isOpen: PropTypes.bool,\n isReadOnly: PropTypes.bool,\n mainField: PropTypes.string.isRequired,\n moveComponentField: PropTypes.func.isRequired,\n onGrabItem: PropTypes.func,\n onDropItem: PropTypes.func,\n onCancel: PropTypes.func,\n onClickToggle: PropTypes.func.isRequired,\n toggleCollapses: PropTypes.func,\n};\n\nexport default memo(DraggedItem);\n","export default function getComponentErrorKeys(name, formErrors = {}) {\n return Object.keys(formErrors)\n .filter((errorKey) => errorKey.startsWith(name))\n .map((errorKey) =>\n errorKey\n .split('.')\n .slice(0, name.split('.').length + 1)\n .join('.')\n );\n}\n","/* eslint-disable import/no-cycle */\nimport React, { memo, useEffect, useMemo, useState } from 'react';\n\nimport { Box, Flex, TextButton, VisuallyHidden } from '@strapi/design-system';\nimport { useCMEditViewDataManager, useNotification, useQuery } from '@strapi/helper-plugin';\nimport { Plus } from '@strapi/icons';\nimport get from 'lodash/get';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport { useContentTypeLayout } from '../../hooks';\nimport { getMaxTempKey, getTrad } from '../../utils';\nimport ComponentInitializer from '../ComponentInitializer';\n\nimport * as Accordion from './components/Accordion';\nimport Component from './components/Component';\nimport getComponentErrorKeys from './utils/getComponentErrorKeys';\n\nconst TextButtonCustom = styled(TextButton)`\n height: 100%;\n width: 100%;\n border-radius: 0 0 4px 4px;\n display: flex;\n justify-content: center;\n span {\n font-weight: 600;\n font-size: 14px;\n }\n`;\n\nconst RepeatableComponent = ({\n componentUid,\n componentValue,\n componentValueLength,\n isReadOnly,\n max,\n min,\n name,\n}) => {\n const { addRepeatableComponentToField, formErrors, moveComponentField } =\n useCMEditViewDataManager();\n const toggleNotification = useNotification();\n const { formatMessage } = useIntl();\n const [collapseToOpen, setCollapseToOpen] = useState('');\n const [liveText, setLiveText] = useState('');\n const { getComponentLayout, components } = useContentTypeLayout();\n const componentLayoutData = useMemo(\n () => getComponentLayout(componentUid),\n [componentUid, getComponentLayout]\n );\n\n const search = useQuery();\n\n /**\n * Get the temp key of the component that has the field that is currently focussed\n * as defined by the `field` query param. We can then force this specific component\n * to be in it's \"open\" state.\n */\n const componentTmpKeyWithFocussedField = useMemo(() => {\n if (search.has('field')) {\n const field = search.get('field');\n\n const [, path] = field.split(`${name}.`);\n\n if (get(componentValue, path, undefined) !== undefined) {\n const subpaths = path.split('.');\n\n return get(componentValue, subpaths[0], undefined)?.__temp_key__;\n }\n }\n\n // eslint-disable-next-line consistent-return\n return undefined;\n }, [componentValue, search, name]);\n\n useEffect(() => {\n if (typeof componentTmpKeyWithFocussedField === 'number') {\n setCollapseToOpen(componentTmpKeyWithFocussedField);\n }\n }, [componentTmpKeyWithFocussedField]);\n\n const nextTempKey = useMemo(() => getMaxTempKey(componentValue || []) + 1, [componentValue]);\n\n const componentErrorKeys = getComponentErrorKeys(name, formErrors);\n\n const missingComponentsValue = min - componentValueLength;\n\n const hasMinError = get(formErrors, name, { id: '' }).id.includes('min');\n\n const toggleCollapses = () => {\n setCollapseToOpen('');\n };\n\n const handleClick = () => {\n if (!isReadOnly) {\n if (componentValueLength < max) {\n const shouldCheckErrors = hasMinError;\n\n addRepeatableComponentToField(name, componentLayoutData, components, shouldCheckErrors);\n\n setCollapseToOpen(nextTempKey);\n } else if (componentValueLength >= max) {\n toggleNotification({\n type: 'info',\n message: { id: getTrad('components.notification.info.maximum-requirement') },\n });\n }\n }\n };\n\n const handleMoveComponentField = (newIndex, currentIndex) => {\n setLiveText(\n formatMessage(\n {\n id: getTrad('dnd.reorder'),\n defaultMessage: '{item}, moved. New position in list: {position}.',\n },\n {\n item: `${name}.${currentIndex}`,\n position: getItemPos(newIndex),\n }\n )\n );\n\n moveComponentField({\n name,\n newIndex,\n currentIndex,\n });\n };\n\n const mainField = get(componentLayoutData, ['settings', 'mainField'], 'id');\n\n const handleToggle = (key) => () => {\n if (collapseToOpen === key) {\n setCollapseToOpen('');\n } else {\n setCollapseToOpen(key);\n }\n };\n\n /**\n *\n * @param {number} index\n * @returns {string}\n */\n const getItemPos = (index) => `${index + 1} of ${componentValueLength}`;\n\n const handleCancel = (index) => {\n setLiveText(\n formatMessage(\n {\n id: getTrad('dnd.cancel-item'),\n defaultMessage: '{item}, dropped. Re-order cancelled.',\n },\n {\n item: `${name}.${index}`,\n }\n )\n );\n };\n\n const handleGrabItem = (index) => {\n setLiveText(\n formatMessage(\n {\n id: getTrad('dnd.grab-item'),\n defaultMessage: `{item}, grabbed. Current position in list: {position}. Press up and down arrow to change position, Spacebar to drop, Escape to cancel.`,\n },\n {\n item: `${name}.${index}`,\n position: getItemPos(index),\n }\n )\n );\n };\n\n const handleDropItem = (index) => {\n setLiveText(\n formatMessage(\n {\n id: getTrad('dnd.drop-item'),\n defaultMessage: `{item}, dropped. Final position in list: {position}.`,\n },\n {\n item: `${name}.${index}`,\n position: getItemPos(index),\n }\n )\n );\n };\n\n let errorMessage = formErrors[name];\n\n if (hasMinError) {\n errorMessage = {\n id: getTrad('components.DynamicZone.missing-components'),\n defaultMessage:\n 'There {number, plural, =0 {are # missing components} one {is # missing component} other {are # missing components}}',\n values: { number: missingComponentsValue },\n };\n } else if (componentErrorKeys.some((error) => error.split('.').length > 1) && !hasMinError) {\n errorMessage = {\n id: getTrad('components.RepeatableComponent.error-message'),\n defaultMessage: 'The component(s) contain error(s)',\n };\n }\n\n if (componentValueLength === 0) {\n return (\n <ComponentInitializer error={errorMessage} isReadOnly={isReadOnly} onClick={handleClick} />\n );\n }\n\n const ariaDescriptionId = `${name}-item-instructions`;\n\n return (\n <Box hasRadius>\n <VisuallyHidden id={ariaDescriptionId}>\n {formatMessage({\n id: getTrad('dnd.instructions'),\n defaultMessage: `Press spacebar to grab and re-order`,\n })}\n </VisuallyHidden>\n <VisuallyHidden aria-live=\"assertive\">{liveText}</VisuallyHidden>\n <Accordion.Group error={errorMessage} ariaDescribedBy={ariaDescriptionId}>\n <Accordion.Content aria-describedby={ariaDescriptionId}>\n {componentValue.map(({ __temp_key__: key }, index) => (\n <Component\n componentFieldName={`${name}.${index}`}\n componentUid={componentUid}\n fields={componentLayoutData.layouts.edit}\n key={key}\n index={index}\n isOpen={collapseToOpen === key}\n isReadOnly={isReadOnly}\n mainField={mainField}\n moveComponentField={handleMoveComponentField}\n onClickToggle={handleToggle(key)}\n toggleCollapses={toggleCollapses}\n onCancel={handleCancel}\n onDropItem={handleDropItem}\n onGrabItem={handleGrabItem}\n />\n ))}\n </Accordion.Content>\n <Accordion.Footer>\n <Flex justifyContent=\"center\" height=\"48px\" background=\"neutral0\">\n <TextButtonCustom disabled={isReadOnly} onClick={handleClick} startIcon={<Plus />}>\n {formatMessage({\n id: getTrad('containers.EditView.add.new-entry'),\n defaultMessage: 'Add an entry',\n })}\n </TextButtonCustom>\n </Flex>\n </Accordion.Footer>\n </Accordion.Group>\n </Box>\n );\n};\n\nRepeatableComponent.defaultProps = {\n componentValue: null,\n componentValueLength: 0,\n isReadOnly: false,\n max: Infinity,\n min: 0,\n};\n\nRepeatableComponent.propTypes = {\n componentUid: PropTypes.string.isRequired,\n componentValue: PropTypes.oneOfType([PropTypes.array, PropTypes.object]),\n componentValueLength: PropTypes.number,\n isReadOnly: PropTypes.bool,\n max: PropTypes.number,\n min: PropTypes.number,\n name: PropTypes.string.isRequired,\n};\n\nexport default memo(RepeatableComponent);\n\nexport { RepeatableComponent };\n","import React from 'react';\n\nimport { Box, Flex, Typography } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nconst LabelAction = styled(Box)`\n svg path {\n fill: ${({ theme }) => theme.colors.neutral500};\n }\n`;\n\nconst Label = ({\n intlLabel,\n id,\n labelAction,\n name,\n numberOfEntries,\n showNumberOfEntries,\n required,\n}) => {\n const { formatMessage } = useIntl();\n const label = intlLabel?.id ? formatMessage(intlLabel) : name;\n\n return (\n <Box paddingBottom={1}>\n <Flex>\n <Typography\n textColor=\"neutral800\"\n htmlFor={id || name}\n variant=\"pi\"\n fontWeight=\"bold\"\n as=\"label\"\n >\n {label}\n {showNumberOfEntries && <>&nbsp;({numberOfEntries})</>}\n {required && <Typography textColor=\"danger600\">*</Typography>}\n </Typography>\n {labelAction && <LabelAction paddingLeft={1}>{labelAction}</LabelAction>}\n </Flex>\n </Box>\n );\n};\n\nLabel.defaultProps = {\n id: undefined,\n labelAction: undefined,\n numberOfEntries: 0,\n required: false,\n showNumberOfEntries: false,\n};\n\nLabel.propTypes = {\n id: PropTypes.string,\n intlLabel: PropTypes.shape({\n id: PropTypes.string.isRequired,\n defaultMessage: PropTypes.string.isRequired,\n values: PropTypes.object,\n }).isRequired,\n labelAction: PropTypes.element,\n name: PropTypes.string.isRequired,\n numberOfEntries: PropTypes.number,\n required: PropTypes.bool,\n showNumberOfEntries: PropTypes.bool,\n};\n\nexport default Label;\n","import React from 'react';\n\nfunction connect(WrappedComponent, select) {\n return (props) => {\n // eslint-disable-next-line react/prop-types\n const selectors = select(props);\n\n return <WrappedComponent {...props} {...selectors} />;\n };\n}\n\nexport default connect;\n","import { useMemo } from 'react';\n\nimport { useCMEditViewDataManager } from '@strapi/helper-plugin';\nimport get from 'lodash/get';\nimport take from 'lodash/take';\n\nimport { useContentTypeLayout } from '../../../hooks';\nimport { getFieldName } from '../../../utils';\n\nfunction useSelect({ isFromDynamicZone, name }) {\n const {\n addNonRepeatableComponentToField,\n createActionAllowedFields,\n isCreatingEntry,\n modifiedData,\n removeComponentFromField,\n readActionAllowedFields,\n updateActionAllowedFields,\n formErrors,\n } = useCMEditViewDataManager();\n const { contentType } = useContentTypeLayout();\n\n // This is used for the readonly mode when updating an entry\n const allDynamicZoneFields = useMemo(() => {\n const attributes = get(contentType, ['attributes'], {});\n\n const dynamicZoneFields = Object.keys(attributes).filter((attrName) => {\n return get(attributes, [attrName, 'type'], '') === 'dynamiczone';\n });\n\n return dynamicZoneFields;\n }, [contentType]);\n\n const allowedFields = useMemo(() => {\n return isCreatingEntry ? createActionAllowedFields : updateActionAllowedFields;\n }, [isCreatingEntry, createActionAllowedFields, updateActionAllowedFields]);\n\n const componentValue = get(modifiedData, name, null);\n const compoName = useMemo(() => {\n return getFieldName(name);\n }, [name]);\n\n const hasChildrenAllowedFields = useMemo(() => {\n if (isFromDynamicZone && isCreatingEntry) {\n return true;\n }\n\n const includedDynamicZoneFields = allowedFields.filter((name) => name === compoName[0]);\n\n if (includedDynamicZoneFields.length > 0) {\n return true;\n }\n\n const relatedChildrenAllowedFields = allowedFields\n .map((fieldName) => {\n return fieldName.split('.');\n })\n .filter((fieldName) => {\n if (fieldName.length < compoName.length) {\n return false;\n }\n\n const joined = take(fieldName, compoName.length).join('.');\n\n return joined === compoName.join('.');\n });\n\n return relatedChildrenAllowedFields.length > 0;\n }, [isFromDynamicZone, isCreatingEntry, allowedFields, compoName]);\n\n // This is used only when updating an entry\n const hasChildrenReadableFields = useMemo(() => {\n if (isFromDynamicZone) {\n return true;\n }\n if (allDynamicZoneFields.includes(compoName[0])) {\n return true;\n }\n\n const allowedFields = isCreatingEntry ? [] : readActionAllowedFields;\n\n const relatedChildrenAllowedFields = allowedFields\n .map((fieldName) => {\n return fieldName.split('.');\n })\n .filter((fieldName) => {\n if (fieldName.length < compoName.length) {\n return false;\n }\n\n const joined = take(fieldName, compoName.length).join('.');\n\n return joined === compoName.join('.');\n });\n\n return relatedChildrenAllowedFields.length > 0;\n }, [\n isFromDynamicZone,\n allDynamicZoneFields,\n compoName,\n isCreatingEntry,\n readActionAllowedFields,\n ]);\n\n const isReadOnly = useMemo(() => {\n if (isCreatingEntry) {\n return false;\n }\n\n if (hasChildrenAllowedFields) {\n return false;\n }\n\n return hasChildrenReadableFields;\n }, [hasChildrenAllowedFields, hasChildrenReadableFields, isCreatingEntry]);\n\n return {\n addNonRepeatableComponentToField,\n formErrors,\n hasChildrenAllowedFields,\n hasChildrenReadableFields,\n isCreatingEntry,\n isReadOnly,\n removeComponentFromField,\n componentValue,\n };\n}\n\nexport default useSelect;\n","/* eslint-disable import/no-cycle */\nimport React, { memo, useMemo } from 'react';\n\nimport { Box, Flex, IconButton } from '@strapi/design-system';\nimport { NotAllowedInput } from '@strapi/helper-plugin';\nimport { Trash } from '@strapi/icons';\nimport isEqual from 'lodash/isEqual';\nimport size from 'lodash/size';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport { useContentTypeLayout } from '../../hooks';\nimport { getTrad } from '../../utils';\nimport ComponentInitializer from '../ComponentInitializer';\nimport NonRepeatableComponent from '../NonRepeatableComponent';\nimport RepeatableComponent from '../RepeatableComponent';\n\nimport Label from './Label';\nimport connect from './utils/connect';\nimport select from './utils/select';\n\nconst FieldComponent = ({\n addNonRepeatableComponentToField,\n componentUid,\n // TODO add error state\n // formErrors,\n intlLabel,\n isCreatingEntry,\n isFromDynamicZone,\n isRepeatable,\n isNested,\n labelAction,\n max,\n min,\n name,\n // Passed thanks to the connect function\n hasChildrenAllowedFields,\n hasChildrenReadableFields,\n isReadOnly,\n componentValue,\n removeComponentFromField,\n required,\n}) => {\n const { formatMessage } = useIntl();\n const componentValueLength = size(componentValue);\n const isInitialized = componentValue !== null || isFromDynamicZone;\n const showResetComponent =\n !isRepeatable && isInitialized && !isFromDynamicZone && hasChildrenAllowedFields;\n\n const { getComponentLayout, components } = useContentTypeLayout();\n const componentLayoutData = useMemo(\n () => getComponentLayout(componentUid),\n [componentUid, getComponentLayout]\n );\n\n if (!hasChildrenAllowedFields && isCreatingEntry) {\n return <NotAllowedInput labelAction={labelAction} intlLabel={intlLabel} name={name} />;\n }\n\n if (!hasChildrenAllowedFields && !isCreatingEntry && !hasChildrenReadableFields) {\n return <NotAllowedInput labelAction={labelAction} intlLabel={intlLabel} name={name} />;\n }\n\n const handleClickAddNonRepeatableComponentToField = () => {\n addNonRepeatableComponentToField(name, componentLayoutData, components);\n };\n\n return (\n <Box>\n <Flex justifyContent=\"space-between\">\n {intlLabel && (\n <Label\n intlLabel={intlLabel}\n labelAction={labelAction}\n name={name}\n numberOfEntries={componentValueLength}\n showNumberOfEntries={isRepeatable}\n required={required}\n />\n )}\n\n {showResetComponent && (\n <IconButton\n label={formatMessage({\n id: getTrad('components.reset-entry'),\n defaultMessage: 'Reset Entry',\n })}\n icon={<Trash />}\n noBorder\n onClick={() => {\n removeComponentFromField(name, componentUid);\n }}\n />\n )}\n </Flex>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={1}>\n {!isRepeatable && !isInitialized && (\n <ComponentInitializer\n isReadOnly={isReadOnly}\n onClick={handleClickAddNonRepeatableComponentToField}\n />\n )}\n {!isRepeatable && isInitialized && (\n <NonRepeatableComponent\n componentUid={componentUid}\n isFromDynamicZone={isFromDynamicZone}\n isNested={isNested}\n name={name}\n />\n )}\n {isRepeatable && (\n <RepeatableComponent\n componentValue={componentValue}\n componentValueLength={componentValueLength}\n componentUid={componentUid}\n isReadOnly={isReadOnly}\n max={max}\n min={min}\n name={name}\n />\n )}\n </Flex>\n </Box>\n );\n};\n\nFieldComponent.defaultProps = {\n componentValue: null,\n hasChildrenAllowedFields: false,\n hasChildrenReadableFields: false,\n intlLabel: undefined,\n isFromDynamicZone: false,\n isReadOnly: false,\n isRepeatable: false,\n isNested: false,\n labelAction: undefined,\n max: Infinity,\n min: -Infinity,\n required: false,\n};\n\nFieldComponent.propTypes = {\n addNonRepeatableComponentToField: PropTypes.func.isRequired,\n componentUid: PropTypes.string.isRequired,\n componentValue: PropTypes.oneOfType([PropTypes.object, PropTypes.array]),\n hasChildrenAllowedFields: PropTypes.bool,\n hasChildrenReadableFields: PropTypes.bool,\n isCreatingEntry: PropTypes.bool.isRequired,\n isFromDynamicZone: PropTypes.bool,\n isReadOnly: PropTypes.bool,\n isRepeatable: PropTypes.bool,\n isNested: PropTypes.bool,\n intlLabel: PropTypes.shape({\n id: PropTypes.string.isRequired,\n defaultMessage: PropTypes.string.isRequired,\n values: PropTypes.object,\n }),\n labelAction: PropTypes.element,\n max: PropTypes.number,\n min: PropTypes.number,\n name: PropTypes.string.isRequired,\n removeComponentFromField: PropTypes.func.isRequired,\n required: PropTypes.bool,\n};\n\nconst Memoized = memo(FieldComponent, isEqual);\n\nexport default connect(Memoized, select);\n","import React, { useEffect, useMemo, useState } from 'react';\n\nimport {\n Accordion,\n AccordionContent,\n AccordionToggle,\n Box,\n Flex,\n IconButton,\n VisuallyHidden,\n} from '@strapi/design-system';\nimport { Menu, MenuItem } from '@strapi/design-system/v2';\nimport { useCMEditViewDataManager } from '@strapi/helper-plugin';\nimport { Drag, More, Trash } from '@strapi/icons';\nimport get from 'lodash/get';\nimport PropTypes from 'prop-types';\nimport { getEmptyImage } from 'react-dnd-html5-backend';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport { useContentTypeLayout, useDragAndDrop } from '../../../hooks';\nimport { composeRefs, getTrad, ItemTypes } from '../../../utils';\nimport { ComponentIcon } from '../../ComponentIcon';\nimport FieldComponent from '../../FieldComponent';\n\nexport const DynamicComponent = ({\n componentUid,\n formErrors,\n index,\n isFieldAllowed,\n name,\n onRemoveComponentClick,\n onMoveComponent,\n onGrabItem,\n onDropItem,\n onCancel,\n dynamicComponentsByCategory,\n onAddComponent,\n}) => {\n const [isOpen, setIsOpen] = useState(true);\n const { formatMessage } = useIntl();\n const { getComponentLayout } = useContentTypeLayout();\n const { modifiedData } = useCMEditViewDataManager();\n const { icon, friendlyName, mainValue } = useMemo(() => {\n const componentLayoutData = getComponentLayout(componentUid);\n\n const {\n info: { icon, displayName },\n } = componentLayoutData;\n\n const mainFieldKey = get(componentLayoutData, ['settings', 'mainField'], 'id');\n\n const mainField = get(modifiedData, [name, index, mainFieldKey]) ?? '';\n\n const displayedValue = mainFieldKey === 'id' ? '' : String(mainField).trim();\n\n const mainValue = displayedValue.length > 0 ? ` - ${displayedValue}` : displayedValue;\n\n return { friendlyName: displayName, icon, mainValue };\n }, [componentUid, getComponentLayout, modifiedData, name, index]);\n\n const fieldsErrors = Object.keys(formErrors).filter((errorKey) => {\n const errorKeysArray = errorKey.split('.');\n\n if (`${errorKeysArray[0]}.${errorKeysArray[1]}` === `${name}.${index}`) {\n return true;\n }\n\n return false;\n });\n\n let errorMessage;\n\n if (fieldsErrors.length > 0) {\n errorMessage = formatMessage({\n id: getTrad('components.DynamicZone.error-message'),\n defaultMessage: 'The component contains error(s)',\n });\n }\n\n const handleToggle = () => {\n setIsOpen((s) => !s);\n };\n\n const [{ handlerId, isDragging, handleKeyDown }, boxRef, dropRef, dragRef, dragPreviewRef] =\n useDragAndDrop(isFieldAllowed, {\n type: `${ItemTypes.DYNAMIC_ZONE}_${name}`,\n index,\n item: {\n displayedValue: `${friendlyName}${mainValue}`,\n icon,\n },\n onMoveItem: onMoveComponent,\n onGrabItem,\n onDropItem,\n onCancel,\n });\n\n useEffect(() => {\n dragPreviewRef(getEmptyImage(), { captureDraggingState: false });\n }, [dragPreviewRef, index]);\n\n const composedBoxRefs = composeRefs(boxRef, dropRef);\n\n const accordionActions = !isFieldAllowed ? null : (\n <ActionsFlex gap={0} expanded={isOpen}>\n <IconButtonCustom\n noBorder\n label={formatMessage(\n {\n id: getTrad('components.DynamicZone.delete-label'),\n defaultMessage: 'Delete {name}',\n },\n { name: friendlyName }\n )}\n onClick={onRemoveComponentClick}\n >\n <Trash />\n </IconButtonCustom>\n <IconButton\n forwardedAs=\"div\"\n role=\"button\"\n noBorder\n tabIndex={0}\n onClick={(e) => e.stopPropagation()}\n data-handler-id={handlerId}\n ref={dragRef}\n label={formatMessage({\n id: getTrad('components.DragHandle-label'),\n defaultMessage: 'Drag',\n })}\n onKeyDown={handleKeyDown}\n >\n <Drag />\n </IconButton>\n <Menu.Root>\n <Menu.Trigger size=\"S\" endIcon={null} paddingLeft={2} paddingRight={2}>\n <More aria-hidden focusable={false} />\n <VisuallyHidden as=\"span\">\n {formatMessage({\n id: getTrad('components.DynamicZone.more-actions'),\n defaultMessage: 'More actions',\n })}\n </VisuallyHidden>\n </Menu.Trigger>\n <Menu.Content>\n <Menu.SubRoot>\n <Menu.SubTrigger>\n {formatMessage({\n id: getTrad('components.DynamicZone.add-item-above'),\n defaultMessage: 'Add component above',\n })}\n </Menu.SubTrigger>\n <Menu.SubContent>\n {Object.entries(dynamicComponentsByCategory).map(([category, components]) => (\n <React.Fragment key={category}>\n <Menu.Label>{category}</Menu.Label>\n {components.map(({ componentUid, info: { displayName } }) => (\n <MenuItem\n key={componentUid}\n onSelect={() => onAddComponent(componentUid, index)}\n >\n {displayName}\n </MenuItem>\n ))}\n </React.Fragment>\n ))}\n </Menu.SubContent>\n </Menu.SubRoot>\n <Menu.SubRoot>\n <Menu.SubTrigger>\n {formatMessage({\n id: getTrad('components.DynamicZone.add-item-below'),\n defaultMessage: 'Add component below',\n })}\n </Menu.SubTrigger>\n <Menu.SubContent>\n {Object.entries(dynamicComponentsByCategory).map(([category, components]) => (\n <React.Fragment key={category}>\n <Menu.Label>{category}</Menu.Label>\n {components.map(({ componentUid, info: { displayName } }) => (\n <MenuItem\n key={componentUid}\n onSelect={() => onAddComponent(componentUid, index + 1)}\n >\n {displayName}\n </MenuItem>\n ))}\n </React.Fragment>\n ))}\n </Menu.SubContent>\n </Menu.SubRoot>\n </Menu.Content>\n </Menu.Root>\n </ActionsFlex>\n );\n\n return (\n <ComponentContainer as=\"li\" width=\"100%\">\n <Flex justifyContent=\"center\">\n <Rectangle background=\"neutral200\" />\n </Flex>\n <StyledBox ref={composedBoxRefs} hasRadius>\n {isDragging ? (\n <Preview padding={6} background=\"primary100\" />\n ) : (\n <Accordion expanded={isOpen} onToggle={handleToggle} size=\"S\" error={errorMessage}>\n <AccordionToggle\n startIcon={<ComponentIcon icon={icon} showBackground={false} size=\"S\" />}\n action={accordionActions}\n title={`${friendlyName}${mainValue}`}\n togglePosition=\"left\"\n />\n <AccordionContent>\n <AccordionContentRadius background=\"neutral0\">\n <FieldComponent\n componentUid={componentUid}\n icon={icon}\n name={`${name}.${index}`}\n isFromDynamicZone\n />\n </AccordionContentRadius>\n </AccordionContent>\n </Accordion>\n )}\n </StyledBox>\n </ComponentContainer>\n );\n};\n\nconst ActionsFlex = styled(Flex)`\n /* \n we need to remove the background from the button but we can't \n wrap the element in styled because it breaks the forwardedAs which\n we need for drag handler to work on firefox\n */\n div[role='button'] {\n background: transparent;\n }\n`;\n\nconst IconButtonCustom = styled(IconButton)`\n background-color: transparent;\n\n svg path {\n fill: ${({ theme, expanded }) =>\n expanded ? theme.colors.primary600 : theme.colors.neutral600};\n }\n`;\n\n// TODO: Delete once https://github.com/strapi/design-system/pull/858\n// is merged and released.\nconst StyledBox = styled(Box)`\n > div:first-child {\n box-shadow: ${({ theme }) => theme.shadows.tableShadow};\n }\n`;\n\nconst AccordionContentRadius = styled(Box)`\n border-radius: 0 0 ${({ theme }) => theme.spaces[1]} ${({ theme }) => theme.spaces[1]};\n`;\n\nconst Rectangle = styled(Box)`\n width: ${({ theme }) => theme.spaces[2]};\n height: ${({ theme }) => theme.spaces[4]};\n`;\n\nconst Preview = styled.span`\n display: block;\n background-color: ${({ theme }) => theme.colors.primary100};\n outline: 1px dashed ${({ theme }) => theme.colors.primary500};\n outline-offset: -1px;\n padding: ${({ theme }) => theme.spaces[6]};\n`;\n\nconst ComponentContainer = styled(Box)`\n list-style: none;\n padding: 0;\n margin: 0;\n`;\n\nDynamicComponent.defaultProps = {\n dynamicComponentsByCategory: {},\n formErrors: {},\n index: 0,\n isFieldAllowed: true,\n onAddComponent: undefined,\n onGrabItem: undefined,\n onDropItem: undefined,\n onCancel: undefined,\n};\n\nDynamicComponent.propTypes = {\n componentUid: PropTypes.string.isRequired,\n dynamicComponentsByCategory: PropTypes.shape({\n components: PropTypes.arrayOf(\n PropTypes.shape({\n componentUid: PropTypes.string.isRequired,\n info: PropTypes.object,\n })\n ),\n }),\n formErrors: PropTypes.object,\n index: PropTypes.number,\n isFieldAllowed: PropTypes.bool,\n name: PropTypes.string.isRequired,\n onAddComponent: PropTypes.func,\n onGrabItem: PropTypes.func,\n onDropItem: PropTypes.func,\n onCancel: PropTypes.func,\n onMoveComponent: PropTypes.func.isRequired,\n onRemoveComponentClick: PropTypes.func.isRequired,\n};\n","/**\n *\n * DzLabel\n *\n */\n\nimport React from 'react';\n\nimport { Box, Flex, Typography } from '@strapi/design-system';\nimport { pxToRem } from '@strapi/helper-plugin';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nexport const DynamicZoneLabel = ({\n label,\n labelAction,\n name,\n numberOfComponents,\n required,\n intlDescription,\n}) => {\n const { formatMessage } = useIntl();\n const intlLabel = formatMessage({ id: label || name, defaultMessage: label || name });\n\n return (\n <Flex justifyContent=\"center\">\n <Box\n paddingTop={3}\n paddingBottom={3}\n paddingRight={4}\n paddingLeft={4}\n borderRadius=\"26px\"\n background=\"neutral0\"\n shadow=\"filterShadow\"\n color=\"neutral500\"\n >\n <Flex direction=\"column\" justifyContent=\"center\">\n <Flex maxWidth={pxToRem(356)}>\n <Typography variant=\"pi\" textColor=\"neutral600\" fontWeight=\"bold\" ellipsis>\n {intlLabel}&nbsp;\n </Typography>\n <Typography variant=\"pi\" textColor=\"neutral600\" fontWeight=\"bold\">\n ({numberOfComponents})\n </Typography>\n {required && <Typography textColor=\"danger600\">*</Typography>}\n {labelAction && <Box paddingLeft={1}>{labelAction}</Box>}\n </Flex>\n {intlDescription && (\n <Box paddingTop={1} maxWidth={pxToRem(356)}>\n <Typography variant=\"pi\" textColor=\"neutral600\" ellipsis>\n {formatMessage(intlDescription)}\n </Typography>\n </Box>\n )}\n </Flex>\n </Box>\n </Flex>\n );\n};\n\nDynamicZoneLabel.defaultProps = {\n intlDescription: undefined,\n label: '',\n labelAction: undefined,\n numberOfComponents: 0,\n required: false,\n};\n\nDynamicZoneLabel.propTypes = {\n intlDescription: PropTypes.shape({\n id: PropTypes.string.isRequired,\n defaultMessage: PropTypes.string.isRequired,\n }),\n label: PropTypes.string,\n labelAction: PropTypes.element,\n name: PropTypes.string.isRequired,\n numberOfComponents: PropTypes.number,\n required: PropTypes.bool,\n};\n","import React, { useMemo, useState } from 'react';\n\nimport { Box, Flex, VisuallyHidden } from '@strapi/design-system';\nimport { NotAllowedInput, useCMEditViewDataManager, useNotification } from '@strapi/helper-plugin';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport { useContentTypeLayout } from '../../hooks';\nimport { getTrad } from '../../utils';\n\nimport { AddComponentButton } from './components/AddComponentButton';\nimport { ComponentPicker } from './components/ComponentPicker';\nimport { DynamicComponent } from './components/DynamicComponent';\nimport { DynamicZoneLabel } from './components/DynamicZoneLabel';\n\nconst DynamicZone = ({ name, labelAction, fieldSchema, metadatas }) => {\n // We cannot use the default props here\n const { max = Infinity, min = -Infinity, components = [], required = false } = fieldSchema;\n\n const [addComponentIsOpen, setAddComponentIsOpen] = useState(false);\n const [liveText, setLiveText] = useState('');\n\n const {\n addComponentToDynamicZone,\n createActionAllowedFields,\n isCreatingEntry,\n formErrors,\n modifiedData,\n moveComponentField,\n removeComponentFromDynamicZone,\n readActionAllowedFields,\n updateActionAllowedFields,\n } = useCMEditViewDataManager();\n\n const dynamicDisplayedComponents = useMemo(\n () =>\n (modifiedData?.[name] ?? []).map((data) => {\n return {\n componentUid: data.__component,\n id: data.id ?? data.__temp_key__,\n };\n }),\n [modifiedData, name]\n );\n\n const { getComponentLayout, components: allComponents } = useContentTypeLayout();\n\n /**\n * @type {Record<string, Array<{category: string; info: unknown, attributes: Record<string, unknown>}>>}\n */\n const dynamicComponentsByCategory = useMemo(() => {\n return components.reduce((acc, componentUid) => {\n const { category, info, attributes } = getComponentLayout(componentUid);\n const component = { componentUid, info, attributes };\n\n if (!acc[category]) {\n acc[category] = [];\n }\n\n acc[category] = [...acc[category], component];\n\n return acc;\n }, {});\n }, [components, getComponentLayout]);\n\n const { formatMessage } = useIntl();\n\n const toggleNotification = useNotification();\n\n const isFieldAllowed = useMemo(() => {\n const allowedFields = isCreatingEntry ? createActionAllowedFields : updateActionAllowedFields;\n\n return allowedFields.includes(name);\n }, [name, isCreatingEntry, createActionAllowedFields, updateActionAllowedFields]);\n\n const isFieldReadable = useMemo(() => {\n const allowedFields = isCreatingEntry ? [] : readActionAllowedFields;\n\n return allowedFields.includes(name);\n }, [name, isCreatingEntry, readActionAllowedFields]);\n\n const dynamicDisplayedComponentsLength = dynamicDisplayedComponents.length;\n const intlDescription = metadatas.description\n ? { id: metadatas.description, defaultMessage: metadatas.description }\n : null;\n\n const dynamicZoneError = formErrors[name];\n\n const missingComponentNumber = min - dynamicDisplayedComponentsLength;\n const hasError = !!dynamicZoneError;\n\n const handleAddComponent = (componentUid, position) => {\n setAddComponentIsOpen(false);\n\n const componentLayoutData = getComponentLayout(componentUid);\n\n /**\n * You have to pass _every component_ because the EditViewDataManager is not part of redux\n * and you could have a dynamic component option that contains a component that is not part\n * of the former list. Therefore it's schema is inaccessible leading to a crash.\n */\n addComponentToDynamicZone(name, componentLayoutData, allComponents, hasError, position);\n };\n\n const handleClickOpenPicker = () => {\n if (dynamicDisplayedComponentsLength < max) {\n setAddComponentIsOpen((prev) => !prev);\n } else {\n toggleNotification({\n type: 'info',\n message: { id: getTrad('components.notification.info.maximum-requirement') },\n });\n }\n };\n\n const handleMoveComponent = (newIndex, currentIndex) => {\n setLiveText(\n formatMessage(\n {\n id: getTrad('dnd.reorder'),\n defaultMessage: '{item}, moved. New position in list: {position}.',\n },\n {\n item: `${name}.${currentIndex}`,\n position: getItemPos(newIndex),\n }\n )\n );\n\n moveComponentField({\n name,\n newIndex,\n currentIndex,\n });\n };\n\n /**\n *\n * @param {number} index\n * @returns {string}\n */\n const getItemPos = (index) => `${index + 1} of ${dynamicDisplayedComponents.length}`;\n\n const handleCancel = (index) => {\n setLiveText(\n formatMessage(\n {\n id: getTrad('dnd.cancel-item'),\n defaultMessage: '{item}, dropped. Re-order cancelled.',\n },\n {\n item: `${name}.${index}`,\n }\n )\n );\n };\n\n const handleGrabItem = (index) => {\n setLiveText(\n formatMessage(\n {\n id: getTrad('dnd.grab-item'),\n defaultMessage: `{item}, grabbed. Current position in list: {position}. Press up and down arrow to change position, Spacebar to drop, Escape to cancel.`,\n },\n {\n item: `${name}.${index}`,\n position: getItemPos(index),\n }\n )\n );\n };\n\n const handleDropItem = (index) => {\n setLiveText(\n formatMessage(\n {\n id: getTrad('dnd.drop-item'),\n defaultMessage: `{item}, dropped. Final position in list: {position}.`,\n },\n {\n item: `${name}.${index}`,\n position: getItemPos(index),\n }\n )\n );\n };\n\n const handleRemoveComponent = (name, currentIndex) => () => {\n removeComponentFromDynamicZone(name, currentIndex);\n };\n\n const renderButtonLabel = () => {\n if (addComponentIsOpen) {\n return formatMessage({ id: 'app.utils.close-label', defaultMessage: 'Close' });\n }\n\n if (hasError && dynamicZoneError.id.includes('max')) {\n return formatMessage({\n id: 'components.Input.error.validation.max',\n defaultMessage: 'The value is too high.',\n });\n }\n\n if (hasError && dynamicZoneError.id.includes('min')) {\n return formatMessage(\n {\n id: getTrad(`components.DynamicZone.missing-components`),\n defaultMessage:\n 'There {number, plural, =0 {are # missing components} one {is # missing component} other {are # missing components}}',\n },\n { number: missingComponentNumber }\n );\n }\n\n return formatMessage(\n {\n id: getTrad('components.DynamicZone.add-component'),\n defaultMessage: 'Add a component to {componentName}',\n },\n { componentName: metadatas.label || name }\n );\n };\n\n if (!isFieldAllowed && (isCreatingEntry || (!isFieldReadable && !isCreatingEntry))) {\n return (\n <NotAllowedInput\n description={intlDescription}\n intlLabel={{ id: metadatas.label, defaultMessage: metadatas.label }}\n labelAction={labelAction}\n name={name}\n />\n );\n }\n\n const ariaDescriptionId = `${name}-item-instructions`;\n\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n {dynamicDisplayedComponentsLength > 0 && (\n <Box>\n <DynamicZoneLabel\n intlDescription={intlDescription}\n label={metadatas.label}\n labelAction={labelAction}\n name={name}\n numberOfComponents={dynamicDisplayedComponentsLength}\n required={required}\n />\n <VisuallyHidden id={ariaDescriptionId}>\n {formatMessage({\n id: getTrad('dnd.instructions'),\n defaultMessage: `Press spacebar to grab and re-order`,\n })}\n </VisuallyHidden>\n <VisuallyHidden aria-live=\"assertive\">{liveText}</VisuallyHidden>\n <ol aria-describedby={ariaDescriptionId}>\n {dynamicDisplayedComponents.map(({ componentUid, id }, index) => (\n <DynamicComponent\n componentUid={componentUid}\n formErrors={formErrors}\n key={`${componentUid}-${id}`}\n index={index}\n isFieldAllowed={isFieldAllowed}\n name={name}\n onMoveComponent={handleMoveComponent}\n onRemoveComponentClick={handleRemoveComponent(name, index)}\n onCancel={handleCancel}\n onDropItem={handleDropItem}\n onGrabItem={handleGrabItem}\n onAddComponent={handleAddComponent}\n dynamicComponentsByCategory={dynamicComponentsByCategory}\n />\n ))}\n </ol>\n </Box>\n )}\n <Flex justifyContent=\"center\">\n <AddComponentButton\n hasError={hasError}\n isDisabled={!isFieldAllowed}\n isOpen={addComponentIsOpen}\n onClick={handleClickOpenPicker}\n >\n {renderButtonLabel()}\n </AddComponentButton>\n </Flex>\n <ComponentPicker\n dynamicComponentsByCategory={dynamicComponentsByCategory}\n isOpen={addComponentIsOpen}\n onClickAddComponent={handleAddComponent}\n />\n </Flex>\n );\n};\n\nDynamicZone.defaultProps = {\n fieldSchema: {},\n labelAction: null,\n};\n\nDynamicZone.propTypes = {\n fieldSchema: PropTypes.shape({\n components: PropTypes.array,\n max: PropTypes.number,\n min: PropTypes.number,\n required: PropTypes.bool,\n }),\n labelAction: PropTypes.element,\n metadatas: PropTypes.shape({\n description: PropTypes.string,\n label: PropTypes.string,\n }).isRequired,\n name: PropTypes.string.isRequired,\n};\n\nexport { DynamicZone };\n","const CREATOR_FIELDS = ['createdBy', 'updatedBy'];\n\nexport { CREATOR_FIELDS };\n","import get from 'lodash/get';\nimport isArray from 'lodash/isArray';\nimport isObject from 'lodash/isObject';\n\nimport { CREATOR_FIELDS } from '../../../constants/attributes';\nimport { getInitialDataPathUsingTempKeys } from '../../../utils/paths';\n\n/* eslint-disable indent */\n\n/**\n *\n * @param {{ browserState: object, serverState: object }} browserState – the modifiedData from REDUX, serverState - the initialData from REDUX\n * @param {object} currentSchema\n * @param {object} componentsSchema\n * @returns\n */\nconst cleanData = ({ browserState, serverState }, currentSchema, componentsSchema) => {\n const rootServerState = serverState;\n const rootBrowserState = browserState;\n const getType = (schema, attrName) => get(schema, ['attributes', attrName, 'type'], '');\n const getOtherInfos = (schema, arr) => get(schema, ['attributes', ...arr], '');\n\n /**\n *\n * @param {object} browserState – the modifiedData from REDUX\n * @param {object} serverState – the initialData from REDUX\n * @param {*} schema\n * @param {string} pathToParent - the path to the parent of the current entry\n * @returns\n */\n const recursiveCleanData = (browserState, serverState, schema, pathToParent) => {\n return Object.keys(browserState).reduce((acc, current) => {\n // Creator attributes can be safely ignored because they are handle on the backend\n if (CREATOR_FIELDS.includes(current)) {\n return acc;\n }\n\n const path = pathToParent ? `${pathToParent}.${current}` : current;\n const attrType = getType(schema, current);\n\n // This is the field value\n const value = get(browserState, current);\n const oldValue = get(serverState, current);\n const component = getOtherInfos(schema, [current, 'component']);\n const isRepeatable = getOtherInfos(schema, [current, 'repeatable']);\n let cleanedData;\n\n switch (attrType) {\n case 'json':\n cleanedData = JSON.parse(value);\n break;\n case 'time': {\n cleanedData = value;\n\n // FIXME\n if (value && value.split(':').length < 3) {\n cleanedData = `${value}:00`;\n }\n\n break;\n }\n case 'media':\n if (getOtherInfos(schema, [current, 'multiple']) === true) {\n cleanedData = value ? value.filter((file) => !(file instanceof File)) : null;\n } else {\n cleanedData = get(value, 0) instanceof File ? null : get(value, 'id', null);\n }\n break;\n case 'component':\n if (isRepeatable) {\n cleanedData = value\n ? value.map((data, index) => {\n const subCleanedData = recursiveCleanData(\n data,\n (oldValue ?? [])[index],\n componentsSchema[component],\n `${path}.${index}`\n );\n\n return subCleanedData;\n })\n : value;\n } else {\n cleanedData = value\n ? recursiveCleanData(value, oldValue, componentsSchema[component], path)\n : value;\n }\n\n break;\n\n case 'relation': {\n const trueInitialDataPath = getInitialDataPathUsingTempKeys(\n rootServerState,\n rootBrowserState\n )(path).join('.');\n\n /**\n * Because of how repeatable components work when you dig into them the server\n * will have no object to compare too therefore no relation array will be setup\n * because the component has not been initialized, therefore we can safely assume\n * it needs to be added and provide a default empty array.\n */\n let actualOldValue = get(rootServerState, trueInitialDataPath, []);\n\n /**\n * Instead of the full relation object, we only want to send its ID\n * connectedRelations are the items that are in the browserState\n * array but not in the serverState\n */\n const connectedRelations = value.reduce((acc, relation, currentIndex, array) => {\n const relationOnServer = actualOldValue.find(\n (oldRelation) => oldRelation.id === relation.id\n );\n\n const relationInFront = array[currentIndex + 1];\n\n if (!relationOnServer || relationOnServer.__temp_key__ !== relation.__temp_key__) {\n const position = relationInFront ? { before: relationInFront.id } : { end: true };\n\n return [...acc, { id: relation.id, position }];\n }\n\n return acc;\n }, []);\n\n /**\n * disconnectedRelations are the items that are in the serverState but\n * are no longer in the browserState\n */\n const disconnectedRelations = actualOldValue.reduce((acc, relation) => {\n if (!value.find((newRelation) => newRelation.id === relation.id)) {\n return [...acc, { id: relation.id }];\n }\n\n return acc;\n }, []);\n\n cleanedData = {\n disconnect: disconnectedRelations,\n /**\n * Reverse the array because the API sequentially goes through the list\n * so in an instance where you add two to the end it would fail because index0\n * would want to attach itself to index1 which doesn't exist yet.\n */\n connect: connectedRelations.reverse(),\n };\n\n break;\n }\n\n case 'dynamiczone':\n cleanedData = value.map((componentData, index) => {\n const subCleanedData = recursiveCleanData(\n componentData,\n (oldValue ?? [])[index],\n componentsSchema[componentData.__component],\n `${path}.${index}`\n );\n\n return subCleanedData;\n });\n break;\n default:\n cleanedData = helperCleanData(value, 'id');\n }\n\n acc[current] = cleanedData;\n\n return acc;\n }, {});\n };\n\n return recursiveCleanData(browserState, serverState, currentSchema, '');\n};\n\n// TODO: check which parts are still needed: I suspect the\n// isArray part can go away, but I'm not sure what could send\n// an object; in case both can go away we might be able to get\n// rid of the whole helper\nexport const helperCleanData = (value, key) => {\n if (isArray(value)) {\n return value.map((obj) => (obj[key] ? obj[key] : obj));\n }\n if (isObject(value)) {\n return value[key];\n }\n\n return value;\n};\n\nexport default cleanData;\n","/**\n * @typedef Attribute\n * @type { { type: string; repeatable: boolean }}\n *\n * @typedef Attributes\n * @type {{ [key: string]: Attribute }}\n *\n * @typedef ReplacementFn\n * @type {<TData extends object, TKey extends string>(data: TData[TKey], { path: string[]; parent: TData }) => any}\n */\n\n/**\n * This function will recursively find everything and replace it with a value\n * based on the boolean return of the predicate function e.g. `type === 'relation'`.\n *\n * If you provide a function it will call that function with data value you're replacing with\n * a second argument with the path to the value and it's parent.\n *\n * It's original use was for the preperation of action items for the INIT_FORM action. It requires\n * knowledge of the `components` in the entity, however `components` doesn't change nor does the predicate\n * function so we don't need to pass it everytime hence why it's curried.\n *\n * @type {<TData extends object = object>(data: { [key: string]: { attributes: Attributes } }, predicate?: (value: Attribute, { path: string[]; parent: TData }) => boolean, replacement?: ReplacementFn<TData, keyof TKey> | any) => (data: TData, attributes: Attributes) => TData}\n */\nconst findAllAndReplaceSetup = (components, predicate = () => false, replacement = undefined) => {\n /**\n * @type {<TData extends object = object>(data: TData, attributes: Attributes, options?: { ignoreFalseyValues?: boolean}) => TData}\n */\n const findAllAndReplace = (\n data,\n attributes,\n { ignoreFalseyValues = false, path = [], parent = attributes } = {}\n ) => {\n return Object.entries(attributes).reduce(\n (acc, [key, value]) => {\n if (\n ignoreFalseyValues &&\n (acc === null || acc === undefined || acc[key] === undefined || acc[key] === null)\n ) {\n return acc;\n }\n\n if (predicate(value, { path: [...path, key], parent })) {\n acc[key] =\n typeof replacement === 'function'\n ? replacement(acc[key], { path: [...path, key], parent: acc })\n : replacement;\n }\n\n if (value.type === 'component') {\n const componentAttributes = components[value.component].attributes;\n\n if (!value.repeatable && acc[key] && typeof acc[key] === 'object') {\n acc[key] = findAllAndReplace(acc[key], componentAttributes, {\n ignoreFalseyValues,\n path: [...path, key],\n parent: attributes[key],\n });\n } else if (value.repeatable && Array.isArray(acc[key])) {\n acc[key] = acc[key].map((datum, index) => {\n const data = findAllAndReplace(datum, componentAttributes, {\n ignoreFalseyValues,\n path: [...path, key, index],\n parent: attributes[key],\n });\n\n return data;\n });\n }\n } else if (value.type === 'dynamiczone' && Array.isArray(acc[key])) {\n acc[key] = acc[key].map((datum, index) => {\n const componentAttributes = components[datum.__component].attributes;\n const data = findAllAndReplace(datum, componentAttributes, {\n ignoreFalseyValues,\n path: [...path, key, index],\n parent: attributes[key],\n });\n\n return data;\n });\n }\n\n return acc;\n },\n { ...data }\n );\n };\n\n return findAllAndReplace;\n};\n\nexport { findAllAndReplaceSetup as findAllAndReplace };\n","const moveFields = (initialValue, from, to, value) => {\n const returnedValue = initialValue.slice();\n\n returnedValue.splice(from, 1);\n returnedValue.splice(to, 0, value);\n\n return returnedValue;\n};\n\nexport default moveFields;\n","import { generateNKeysBetween } from 'fractional-indexing';\nimport produce from 'immer';\nimport cloneDeep from 'lodash/cloneDeep';\nimport get from 'lodash/get';\nimport set from 'lodash/set';\nimport take from 'lodash/take';\nimport uniqBy from 'lodash/uniqBy';\nimport unset from 'lodash/unset';\n\nimport { CREATOR_FIELDS } from '../../constants/attributes';\nimport { getMaxTempKey } from '../../utils';\n\nimport { findAllAndReplace, moveFields } from './utils';\n\nconst initialState = {\n componentsDataStructure: {},\n contentTypeDataStructure: {},\n formErrors: {},\n initialData: {},\n modifiedData: null,\n shouldCheckErrors: false,\n modifiedDZName: null,\n publishConfirmation: {\n show: false,\n draftCount: 0,\n },\n};\n\nconst reducer = (state, action) =>\n // eslint-disable-next-line consistent-return\n produce(state, (draftState) => {\n switch (action.type) {\n case 'ADD_NON_REPEATABLE_COMPONENT_TO_FIELD': {\n const { componentLayoutData, allComponents } = action;\n\n const defaultDataStructure = {\n ...state.componentsDataStructure[componentLayoutData.uid],\n };\n\n const findAllRelationsAndReplaceWithEmptyArray = findAllAndReplace(\n allComponents,\n (value) => value.type === 'relation',\n []\n );\n\n const componentDataStructure = findAllRelationsAndReplaceWithEmptyArray(\n defaultDataStructure,\n componentLayoutData.attributes\n );\n\n set(draftState, ['modifiedData', ...action.keys], componentDataStructure);\n\n break;\n }\n case 'ADD_COMPONENT_TO_DYNAMIC_ZONE':\n case 'ADD_REPEATABLE_COMPONENT_TO_FIELD': {\n const {\n keys,\n allComponents,\n componentLayoutData,\n shouldCheckErrors,\n position = undefined,\n } = action;\n\n if (shouldCheckErrors) {\n draftState.shouldCheckErrors = !state.shouldCheckErrors;\n }\n\n if (action.type === 'ADD_COMPONENT_TO_DYNAMIC_ZONE') {\n draftState.modifiedDZName = keys[0];\n }\n\n const currentValue = [...get(state, ['modifiedData', ...keys], [])];\n\n let actualPosition = position;\n\n if (actualPosition === undefined) {\n actualPosition = currentValue.length;\n } else if (actualPosition < 0) {\n actualPosition = 0;\n }\n\n const defaultDataStructure =\n action.type === 'ADD_COMPONENT_TO_DYNAMIC_ZONE'\n ? {\n ...state.componentsDataStructure[componentLayoutData.uid],\n __component: componentLayoutData.uid,\n __temp_key__: getMaxTempKey(currentValue) + 1,\n }\n : {\n ...state.componentsDataStructure[componentLayoutData.uid],\n __temp_key__: getMaxTempKey(currentValue) + 1,\n };\n\n const findAllRelationsAndReplaceWithEmptyArray = findAllAndReplace(\n allComponents,\n (value) => value.type === 'relation',\n []\n );\n\n const componentDataStructure = findAllRelationsAndReplaceWithEmptyArray(\n defaultDataStructure,\n componentLayoutData.attributes\n );\n\n currentValue.splice(actualPosition, 0, componentDataStructure);\n\n set(draftState, ['modifiedData', ...keys], currentValue);\n\n break;\n }\n case 'LOAD_RELATION': {\n const { initialDataPath, modifiedDataPath, value } = action;\n\n const initialDataRelations = get(state, initialDataPath);\n const modifiedDataRelations = get(state, modifiedDataPath);\n\n const valuesToLoad = !initialDataRelations\n ? value\n : value.filter((relation) => {\n return !initialDataRelations.some((initialDataRelation) => {\n return initialDataRelation.id === relation.id;\n });\n });\n\n const keys = generateNKeysBetween(\n null,\n modifiedDataRelations[0]?.__temp_key__,\n valuesToLoad.length\n );\n\n /**\n * Check if the values we're loading are already in initial\n * data if they are then we don't need to load them at all\n */\n\n const valuesWithKeys = valuesToLoad.map((relation, index) => ({\n ...relation,\n __temp_key__: keys[index],\n }));\n\n /**\n * We need to set the value also on modifiedData, because initialData\n * and modifiedData need to stay in sync, so that the CM can compare\n * both states, to render the dirty UI state\n */\n set(\n draftState,\n initialDataPath,\n uniqBy([...valuesWithKeys, ...initialDataRelations], 'id')\n );\n set(\n draftState,\n modifiedDataPath,\n uniqBy([...valuesWithKeys, ...modifiedDataRelations], 'id')\n );\n\n break;\n }\n case 'CONNECT_RELATION': {\n const path = ['modifiedData', ...action.keys];\n const { value, toOneRelation } = action;\n\n /**\n * If the field is a single relation field we don't want to append\n * we just want to replace the value.\n */\n if (toOneRelation) {\n set(draftState, path, [value]);\n } else {\n const modifiedDataRelations = get(state, path);\n const [key] = generateNKeysBetween(modifiedDataRelations.at(-1)?.__temp_key__, null, 1);\n\n const newRelations = [...modifiedDataRelations, { ...value, __temp_key__: key }];\n set(draftState, path, newRelations);\n }\n\n break;\n }\n case 'DISCONNECT_RELATION': {\n const path = ['modifiedData', ...action.keys];\n const { id } = action;\n const modifiedDataRelation = get(state, [...path]);\n\n const newRelations = modifiedDataRelation.filter((rel) => rel.id !== id);\n\n set(draftState, path, newRelations);\n\n break;\n }\n case 'MOVE_COMPONENT_FIELD':\n case 'REORDER_RELATION': {\n const { oldIndex, newIndex, keys } = action;\n const path = ['modifiedData', ...keys];\n const modifiedDataRelations = get(state, [...path]);\n\n const currentItem = modifiedDataRelations[oldIndex];\n\n const newRelations = [...modifiedDataRelations];\n\n if (action.type === 'REORDER_RELATION') {\n const startKey =\n oldIndex > newIndex\n ? modifiedDataRelations[newIndex - 1]?.__temp_key__\n : modifiedDataRelations[newIndex]?.__temp_key__;\n const endKey =\n oldIndex > newIndex\n ? modifiedDataRelations[newIndex]?.__temp_key__\n : modifiedDataRelations[newIndex + 1]?.__temp_key__;\n const [newKey] = generateNKeysBetween(startKey, endKey, 1);\n\n newRelations.splice(oldIndex, 1);\n newRelations.splice(newIndex, 0, { ...currentItem, __temp_key__: newKey });\n } else {\n newRelations.splice(oldIndex, 1);\n newRelations.splice(newIndex, 0, currentItem);\n }\n\n set(draftState, path, newRelations);\n\n break;\n }\n /**\n * This action will be called when you open your entry (first load)\n * but also every time you press publish.\n */\n case 'INIT_FORM': {\n const { initialValues, components = {}, attributes = {}, setModifiedDataOnly } = action;\n\n /**\n * You can't mutate an actions value.\n * and spreading an object only clones\n * the first level, the deeply nested values\n * are a reference.\n */\n const data = cloneDeep(initialValues);\n\n const findAllRelationsAndReplaceWithEmptyArray = findAllAndReplace(\n components,\n (value, { path }) => {\n const fieldName = path[path.length - 1];\n // We don't replace creator fields because we already return them without need to populate them separately\n const isCreatorField = CREATOR_FIELDS.includes(fieldName);\n\n return value.type === 'relation' && !isCreatorField;\n },\n (_, { path }) => {\n if (state.modifiedData?.id === data.id && get(state.modifiedData, path)) {\n return get(state.modifiedData, path);\n }\n\n return [];\n }\n );\n\n const mergedDataWithPreparedRelations = findAllRelationsAndReplaceWithEmptyArray(\n data,\n attributes\n );\n\n const findComponentsAndReplaceWithTempKey = findAllAndReplace(\n components,\n (value) =>\n value.type === 'dynamiczone' || (value.type === 'component' && !value.repeatable),\n (data) => {\n /**\n * If the data is an array, we have the dynamic zone if it's not, its a regular component.\n */\n return Array.isArray(data)\n ? data.map((datum, index) => ({\n ...datum,\n __temp_key__: index,\n }))\n : {\n ...data,\n __temp_key__: 0,\n };\n }\n );\n\n const mergedDataWithTmpKeys = findComponentsAndReplaceWithTempKey(\n mergedDataWithPreparedRelations,\n attributes,\n { ignoreFalseyValues: true }\n );\n\n if (!setModifiedDataOnly) {\n draftState.initialData = mergedDataWithTmpKeys;\n }\n\n draftState.modifiedData = mergedDataWithTmpKeys;\n\n draftState.formErrors = {};\n\n draftState.modifiedDZName = null;\n draftState.shouldCheckErrors = false;\n break;\n }\n case 'MOVE_COMPONENT_UP':\n case 'MOVE_COMPONENT_DOWN': {\n const { currentIndex, dynamicZoneName, shouldCheckErrors } = action;\n\n if (shouldCheckErrors) {\n draftState.shouldCheckErrors = !state.shouldCheckErrors;\n }\n\n const currentValue = state.modifiedData[dynamicZoneName];\n const nextIndex = action.type === 'MOVE_COMPONENT_UP' ? currentIndex - 1 : currentIndex + 1;\n const valueToInsert = state.modifiedData[dynamicZoneName][currentIndex];\n const updatedValue = moveFields(currentValue, currentIndex, nextIndex, valueToInsert);\n\n set(draftState, ['modifiedData', action.dynamicZoneName], updatedValue);\n\n break;\n }\n case 'MOVE_FIELD': {\n const currentValue = get(state, ['modifiedData', ...action.keys], []).slice();\n const valueToInsert = get(state, ['modifiedData', ...action.keys, action.dragIndex]);\n const updatedValue = moveFields(\n currentValue,\n action.dragIndex,\n action.overIndex,\n valueToInsert\n );\n\n set(draftState, ['modifiedData', ...action.keys], updatedValue);\n\n break;\n }\n case 'ON_CHANGE': {\n const [nonRepeatableComponentKey] = action.keys;\n\n // This is used to set the initialData for inputs\n // that needs an asynchronous initial value like the UID field\n // This is just a temporary patch.\n // TODO : Refactor the default form creation (workflow) to accept async default values.\n if (action.shouldSetInitialValue) {\n set(draftState, ['initialData', ...action.keys], action.value);\n }\n\n // FIXME: not sure this is needed...\n if (\n action.keys.length === 2 &&\n get(state, ['modifiedData', nonRepeatableComponentKey]) === null\n ) {\n set(draftState, ['modifiedData', nonRepeatableComponentKey], {\n [action.keys[1]]: action.value,\n });\n\n break;\n }\n\n set(draftState, ['modifiedData', ...action.keys], action.value);\n\n break;\n }\n case 'REMOVE_COMPONENT_FROM_DYNAMIC_ZONE': {\n if (action.shouldCheckErrors) {\n draftState.shouldCheckErrors = !state.shouldCheckErrors;\n }\n\n draftState.modifiedData[action.dynamicZoneName].splice(action.index, 1);\n\n break;\n }\n case 'REMOVE_COMPONENT_FROM_FIELD': {\n const componentPathToRemove = ['modifiedData', ...action.keys];\n\n set(draftState, componentPathToRemove, null);\n\n break;\n }\n case 'REMOVE_PASSWORD_FIELD': {\n unset(draftState, ['modifiedData', ...action.keys]);\n\n break;\n }\n case 'REMOVE_REPEATABLE_FIELD': {\n const keysLength = action.keys.length - 1;\n const pathToComponentData = ['modifiedData', ...take(action.keys, keysLength)];\n const hasErrors = Object.keys(state.formErrors).length > 0;\n\n if (hasErrors) {\n draftState.shouldCheckErrors = !state.shouldCheckErrors;\n }\n\n const currentValue = get(state, pathToComponentData).slice();\n currentValue.splice(parseInt(action.keys[keysLength], 10), 1);\n\n set(draftState, pathToComponentData, currentValue);\n\n break;\n }\n case 'SET_DEFAULT_DATA_STRUCTURES': {\n draftState.componentsDataStructure = action.componentsDataStructure;\n draftState.contentTypeDataStructure = action.contentTypeDataStructure;\n\n break;\n }\n case 'SET_FORM_ERRORS': {\n draftState.modifiedDZName = null;\n draftState.formErrors = action.errors;\n break;\n }\n case 'TRIGGER_FORM_VALIDATION': {\n const hasErrors = Object.keys(state.formErrors).length > 0;\n\n if (hasErrors) {\n draftState.shouldCheckErrors = !state.shouldCheckErrors;\n }\n\n break;\n }\n case 'SET_PUBLISH_CONFIRMATION': {\n draftState.publishConfirmation = { ...action.publishConfirmation };\n break;\n }\n case 'RESET_PUBLISH_CONFIRMATION': {\n draftState.publishConfirmation = { ...state.publishConfirmation, show: false };\n break;\n }\n default:\n return draftState;\n }\n });\n\nexport default reducer;\nexport { initialState };\n","/* eslint-disable react/jsx-no-constructed-context-values */\nimport React, { useCallback, useEffect, useMemo, useReducer, useRef } from 'react';\n\nimport { Main } from '@strapi/design-system';\nimport {\n ContentManagerEditViewDataManagerContext,\n getAPIInnerErrors,\n getYupInnerErrors,\n LoadingIndicatorPage,\n useNotification,\n useOverlayBlocker,\n useTracking,\n} from '@strapi/helper-plugin';\nimport cloneDeep from 'lodash/cloneDeep';\nimport get from 'lodash/get';\nimport isEmpty from 'lodash/isEmpty';\nimport isEqual from 'lodash/isEqual';\nimport set from 'lodash/set';\nimport PropTypes from 'prop-types';\nimport { flushSync } from 'react-dom';\nimport { useIntl } from 'react-intl';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Prompt, Redirect } from 'react-router-dom';\n\nimport { usePrev } from '../../hooks';\nimport { clearSetModifiedDataOnly } from '../../sharedReducers/crudReducer/actions';\nimport selectCrudReducer from '../../sharedReducers/crudReducer/selectors';\nimport { createYupSchema, getTrad } from '../../utils';\n\nimport reducer, { initialState } from './reducer';\nimport { cleanData } from './utils';\n\nconst EditViewDataManagerProvider = ({\n allLayoutData,\n allowedActions: { canRead, canUpdate },\n children,\n componentsDataStructure,\n contentTypeDataStructure,\n createActionAllowedFields,\n from,\n initialValues,\n isCreatingEntry,\n isLoadingForData,\n isSingleType,\n onPost,\n onPublish,\n onDraftRelationCheck,\n onPut,\n onUnpublish,\n readActionAllowedFields,\n // Not sure this is needed anymore\n redirectToPreviousPage,\n slug,\n status,\n updateActionAllowedFields,\n}) => {\n const [isSaving, setIsSaving] = React.useState(false);\n /**\n * TODO: this should be moved into the global reducer\n * to match ever other reducer in the CM.\n */\n const [reducerState, dispatch] = useReducer(reducer, initialState);\n const {\n formErrors,\n initialData,\n modifiedData,\n modifiedDZName,\n shouldCheckErrors,\n publishConfirmation,\n } = reducerState;\n\n const { setModifiedDataOnly } = useSelector(selectCrudReducer);\n const reduxDispatch = useDispatch();\n\n const toggleNotification = useNotification();\n const { lockApp, unlockApp } = useOverlayBlocker();\n\n const currentContentTypeLayout = get(allLayoutData, ['contentType'], {});\n\n const hasDraftAndPublish = useMemo(() => {\n return get(currentContentTypeLayout, ['options', 'draftAndPublish'], false);\n }, [currentContentTypeLayout]);\n\n const shouldNotRunValidations = useMemo(() => {\n return hasDraftAndPublish && !initialData.publishedAt;\n }, [hasDraftAndPublish, initialData.publishedAt]);\n\n const { trackUsage } = useTracking();\n const { formatMessage } = useIntl();\n const trackUsageRef = useRef(trackUsage);\n\n const shouldRedirectToHomepageWhenEditingEntry = useMemo(() => {\n if (isLoadingForData) {\n return false;\n }\n\n if (isCreatingEntry) {\n return false;\n }\n\n if (canRead === false && canUpdate === false) {\n return true;\n }\n\n return false;\n }, [isLoadingForData, isCreatingEntry, canRead, canUpdate]);\n\n useEffect(() => {\n if (status === 'resolved') {\n unlockApp();\n } else {\n lockApp();\n }\n }, [lockApp, unlockApp, status]);\n\n // TODO check this effect if it is really needed (not prio)\n useEffect(() => {\n if (!isLoadingForData) {\n checkFormErrors();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [shouldCheckErrors]);\n\n useEffect(() => {\n const errorsInForm = Object.keys(formErrors);\n\n // TODO check if working with DZ, components...\n // TODO use querySelector querySelectorAll('[data-strapi-field-error]')\n if (errorsInForm.length > 0) {\n const firstError = errorsInForm[0];\n const el = document.getElementById(firstError);\n\n if (el) {\n el.focus();\n }\n }\n }, [formErrors]);\n\n useEffect(() => {\n if (shouldRedirectToHomepageWhenEditingEntry) {\n toggleNotification({\n type: 'info',\n message: { id: getTrad('permissions.not-allowed.update') },\n });\n }\n }, [shouldRedirectToHomepageWhenEditingEntry, toggleNotification]);\n\n useEffect(() => {\n dispatch({\n type: 'SET_DEFAULT_DATA_STRUCTURES',\n componentsDataStructure,\n contentTypeDataStructure,\n });\n }, [componentsDataStructure, contentTypeDataStructure]);\n\n const { components } = allLayoutData;\n\n const previousInitialValues = usePrev(initialValues);\n\n useEffect(() => {\n /**\n * Only fire this effect if the initialValues are different\n * otherwise it's a fruitless effort no matter what happens.\n */\n if (\n initialValues &&\n currentContentTypeLayout?.attributes &&\n !isEqual(previousInitialValues, initialValues)\n ) {\n dispatch({\n type: 'INIT_FORM',\n initialValues,\n components,\n attributes: currentContentTypeLayout.attributes,\n setModifiedDataOnly,\n });\n\n /**\n * TODO: This should be moved to a side-effect e.g. thunks\n * something to consider for V5\n */\n if (setModifiedDataOnly) {\n reduxDispatch(clearSetModifiedDataOnly());\n }\n }\n }, [\n initialValues,\n currentContentTypeLayout,\n components,\n setModifiedDataOnly,\n reduxDispatch,\n previousInitialValues,\n ]);\n\n const dispatchAddComponent = useCallback(\n (type) =>\n (\n keys,\n componentLayoutData,\n allComponents,\n shouldCheckErrors = false,\n position = undefined\n ) => {\n trackUsageRef.current('didAddComponentToDynamicZone');\n\n dispatch({\n type,\n keys: keys.split('.'),\n position,\n componentLayoutData,\n allComponents,\n shouldCheckErrors,\n });\n },\n []\n );\n\n const addComponentToDynamicZone = dispatchAddComponent('ADD_COMPONENT_TO_DYNAMIC_ZONE');\n\n const addNonRepeatableComponentToField = useCallback(\n (keys, componentLayoutData, allComponents) => {\n dispatch({\n type: 'ADD_NON_REPEATABLE_COMPONENT_TO_FIELD',\n keys: keys.split('.'),\n componentLayoutData,\n allComponents,\n });\n },\n []\n );\n\n /**\n * @type {({ name: string, value: Relation, toOneRelation: boolean}) => void}\n */\n const relationConnect = useCallback(({ name, value, toOneRelation }) => {\n dispatch({\n type: 'CONNECT_RELATION',\n keys: name.split('.'),\n value,\n toOneRelation,\n });\n }, []);\n\n const relationLoad = useCallback(\n ({ target: { initialDataPath, modifiedDataPath, value, modifiedDataOnly } }) => {\n dispatch({\n type: 'LOAD_RELATION',\n modifiedDataPath,\n initialDataPath,\n value,\n modifiedDataOnly,\n });\n },\n []\n );\n\n const addRepeatableComponentToField = dispatchAddComponent('ADD_REPEATABLE_COMPONENT_TO_FIELD');\n\n const yupSchema = useMemo(() => {\n const options = { isCreatingEntry, isDraft: shouldNotRunValidations, isFromComponent: false };\n\n return createYupSchema(\n currentContentTypeLayout,\n {\n components: allLayoutData.components || {},\n },\n options\n );\n }, [\n allLayoutData.components,\n currentContentTypeLayout,\n isCreatingEntry,\n shouldNotRunValidations,\n ]);\n\n const checkFormErrors = useCallback(\n async (dataToSet = {}) => {\n let errors = {};\n const updatedData = cloneDeep(modifiedData);\n\n if (!isEmpty(updatedData)) {\n set(updatedData, dataToSet.path, dataToSet.value);\n }\n\n try {\n // Validate the form using yup\n await yupSchema.validate(updatedData, { abortEarly: false });\n } catch (err) {\n errors = getYupInnerErrors(err);\n\n if (modifiedDZName) {\n errors = Object.keys(errors).reduce((acc, current) => {\n const dzName = current.split('.')[0];\n\n if (dzName !== modifiedDZName) {\n acc[current] = errors[current];\n }\n\n return acc;\n }, {});\n }\n }\n\n dispatch({\n type: 'SET_FORM_ERRORS',\n errors,\n });\n },\n [modifiedDZName, modifiedData, yupSchema]\n );\n\n const handleChange = useCallback(\n ({ target: { name, value, type } }, shouldSetInitialValue = false) => {\n let inputValue = value;\n\n // Allow to reset text, textarea, email, uid, select/enum, and number\n if (\n ['text', 'textarea', 'string', 'email', 'uid', 'select', 'select-one', 'number'].includes(\n type\n ) &&\n !value &&\n value !== 0\n ) {\n inputValue = null;\n }\n\n if (type === 'password' && !value) {\n dispatch({\n type: 'REMOVE_PASSWORD_FIELD',\n keys: name.split('.'),\n });\n\n return;\n }\n\n dispatch({\n type: 'ON_CHANGE',\n keys: name.split('.'),\n value: inputValue,\n shouldSetInitialValue,\n });\n },\n []\n );\n\n const createFormData = useCallback(\n (modifiedData, initialData) => {\n // Then we need to apply our helper\n const cleanedData = cleanData(\n { browserState: modifiedData, serverState: initialData },\n currentContentTypeLayout,\n allLayoutData.components\n );\n\n return cleanedData;\n },\n [allLayoutData.components, currentContentTypeLayout]\n );\n\n const trackerProperty = useMemo(() => {\n if (!hasDraftAndPublish) {\n return {};\n }\n\n return shouldNotRunValidations ? { status: 'draft' } : {};\n }, [hasDraftAndPublish, shouldNotRunValidations]);\n\n const handlePublishPromptDismissal = useCallback(async (e) => {\n e.preventDefault();\n\n return dispatch({\n type: 'RESET_PUBLISH_CONFIRMATION',\n });\n }, []);\n\n const handleSubmit = useCallback(\n async (e) => {\n e.preventDefault();\n let errors = {};\n\n try {\n await yupSchema.validate(modifiedData, { abortEarly: false });\n } catch (err) {\n errors = getYupInnerErrors(err);\n }\n\n try {\n if (isEmpty(errors)) {\n const formData = createFormData(modifiedData, initialData);\n flushSync(() => {\n setIsSaving(true);\n });\n\n if (isCreatingEntry) {\n await onPost(formData, trackerProperty);\n } else {\n await onPut(formData, trackerProperty);\n }\n\n setIsSaving(false);\n }\n } catch (err) {\n setIsSaving(false);\n errors = {\n ...errors,\n ...getAPIInnerErrors(err, { getTrad }),\n };\n }\n\n dispatch({\n type: 'SET_FORM_ERRORS',\n errors,\n });\n },\n [\n createFormData,\n isCreatingEntry,\n modifiedData,\n initialData,\n onPost,\n onPut,\n trackerProperty,\n yupSchema,\n ]\n );\n\n const handlePublish = useCallback(async () => {\n // Create yup schema here's we need to apply all the validations\n const schema = createYupSchema(\n currentContentTypeLayout,\n {\n components: get(allLayoutData, 'components', {}),\n },\n { isCreatingEntry, isDraft: false, isFromComponent: false }\n );\n\n const draftCount = await onDraftRelationCheck();\n\n if (!publishConfirmation.show && draftCount > 0) {\n // If the warning hasn't already been shown and draft relations are found,\n // abort the publish call and ask for confirmation from the user\n dispatch({\n type: 'SET_PUBLISH_CONFIRMATION',\n publishConfirmation: {\n show: true,\n draftCount,\n },\n });\n\n return;\n }\n dispatch({\n type: 'RESET_PUBLISH_CONFIRMATION',\n });\n\n let errors = {};\n try {\n await schema.validate(modifiedData, { abortEarly: false });\n } catch (err) {\n errors = getYupInnerErrors(err);\n }\n\n try {\n if (isEmpty(errors)) {\n flushSync(() => {\n setIsSaving(true);\n });\n await onPublish();\n setIsSaving(false);\n }\n } catch (err) {\n setIsSaving(false);\n errors = {\n ...errors,\n ...getAPIInnerErrors(err, { getTrad }),\n };\n }\n\n dispatch({\n type: 'SET_FORM_ERRORS',\n errors,\n });\n }, [\n allLayoutData,\n currentContentTypeLayout,\n isCreatingEntry,\n modifiedData,\n publishConfirmation.show,\n onPublish,\n onDraftRelationCheck,\n ]);\n\n const shouldCheckDZErrors = useCallback(\n (dzName) => {\n const doesDZHaveError = Object.keys(formErrors).some((key) => key.split('.')[0] === dzName);\n const shouldCheckErrors = !isEmpty(formErrors) && doesDZHaveError;\n\n return shouldCheckErrors;\n },\n [formErrors]\n );\n\n const moveComponentDown = useCallback(\n (dynamicZoneName, currentIndex) => {\n trackUsageRef.current('changeComponentsOrder');\n\n dispatch({\n type: 'MOVE_COMPONENT_DOWN',\n dynamicZoneName,\n currentIndex,\n shouldCheckErrors: shouldCheckDZErrors(dynamicZoneName),\n });\n },\n [shouldCheckDZErrors]\n );\n\n const moveComponentUp = useCallback(\n (dynamicZoneName, currentIndex) => {\n trackUsageRef.current('changeComponentsOrder');\n\n dispatch({\n type: 'MOVE_COMPONENT_UP',\n dynamicZoneName,\n currentIndex,\n shouldCheckErrors: shouldCheckDZErrors(dynamicZoneName),\n });\n },\n [shouldCheckDZErrors]\n );\n\n const moveComponentField = useCallback(({ name, newIndex, currentIndex }) => {\n dispatch({\n type: 'MOVE_COMPONENT_FIELD',\n keys: name.split('.'),\n newIndex,\n oldIndex: currentIndex,\n });\n }, []);\n\n const relationDisconnect = useCallback(({ name, id }) => {\n dispatch({\n type: 'DISCONNECT_RELATION',\n keys: name.split('.'),\n id,\n });\n }, []);\n\n /**\n * @typedef Payload\n * @type {object}\n * @property {string} name - The name of the field in `modifiedData`\n * @property {number} oldIndex - The relation's current index\n * @property {number} newIndex - The relation's new index\n *\n *\n * @type {(payload: Payload) => void}\n */\n const relationReorder = useCallback(({ name, oldIndex, newIndex }) => {\n dispatch({\n type: 'REORDER_RELATION',\n keys: name.split('.'),\n oldIndex,\n newIndex,\n });\n }, []);\n\n const removeComponentFromDynamicZone = useCallback(\n (dynamicZoneName, index) => {\n trackUsageRef.current('removeComponentFromDynamicZone');\n\n dispatch({\n type: 'REMOVE_COMPONENT_FROM_DYNAMIC_ZONE',\n dynamicZoneName,\n index,\n shouldCheckErrors: shouldCheckDZErrors(dynamicZoneName),\n });\n },\n [shouldCheckDZErrors]\n );\n\n const removeComponentFromField = useCallback((keys, componentUid) => {\n dispatch({\n type: 'REMOVE_COMPONENT_FROM_FIELD',\n keys: keys.split('.'),\n componentUid,\n });\n }, []);\n\n const removeRepeatableField = useCallback((keys, componentUid) => {\n dispatch({\n type: 'REMOVE_REPEATABLE_FIELD',\n keys: keys.split('.'),\n componentUid,\n });\n }, []);\n\n const triggerFormValidation = useCallback(() => {\n dispatch({\n type: 'TRIGGER_FORM_VALIDATION',\n });\n }, []);\n\n // Redirect the user to the previous page if he is not allowed to read/update a document\n if (shouldRedirectToHomepageWhenEditingEntry) {\n return <Redirect to={from} />;\n }\n\n if (!modifiedData) {\n return null;\n }\n\n return (\n <ContentManagerEditViewDataManagerContext.Provider\n value={{\n addComponentToDynamicZone,\n addNonRepeatableComponentToField,\n addRepeatableComponentToField,\n allLayoutData,\n checkFormErrors,\n createActionAllowedFields,\n formErrors,\n hasDraftAndPublish,\n initialData,\n isCreatingEntry,\n isSingleType,\n shouldNotRunValidations,\n status,\n layout: currentContentTypeLayout,\n modifiedData,\n moveComponentField,\n /**\n * @deprecated use `moveComponentField` instead. This will be removed in v5.\n */\n moveComponentDown,\n /**\n * @deprecated use `moveComponentField` instead. This will be removed in v5.\n */\n moveComponentUp,\n onChange: handleChange,\n onPublish: handlePublish,\n onUnpublish,\n readActionAllowedFields,\n redirectToPreviousPage,\n removeComponentFromDynamicZone,\n removeComponentFromField,\n removeRepeatableField,\n relationConnect,\n relationDisconnect,\n relationLoad,\n relationReorder,\n slug,\n triggerFormValidation,\n updateActionAllowedFields,\n onPublishPromptDismissal: handlePublishPromptDismissal,\n publishConfirmation,\n }}\n >\n {isLoadingForData || (!isCreatingEntry && !initialData.id) ? (\n <Main aria-busy=\"true\">\n <LoadingIndicatorPage />\n </Main>\n ) : (\n <>\n {!isSaving ? (\n <Prompt\n when={!isEqual(modifiedData, initialData)}\n message={formatMessage({ id: 'global.prompt.unsaved' })}\n />\n ) : null}\n <form noValidate onSubmit={handleSubmit}>\n {children}\n </form>\n </>\n )}\n </ContentManagerEditViewDataManagerContext.Provider>\n );\n};\n\nEditViewDataManagerProvider.defaultProps = {\n from: '/',\n initialValues: null,\n redirectToPreviousPage() {},\n};\n\nEditViewDataManagerProvider.propTypes = {\n allLayoutData: PropTypes.object.isRequired,\n allowedActions: PropTypes.object.isRequired,\n children: PropTypes.node.isRequired,\n componentsDataStructure: PropTypes.object.isRequired,\n contentTypeDataStructure: PropTypes.object.isRequired,\n createActionAllowedFields: PropTypes.array.isRequired,\n from: PropTypes.string,\n initialValues: PropTypes.object,\n isCreatingEntry: PropTypes.bool.isRequired,\n isLoadingForData: PropTypes.bool.isRequired,\n isSingleType: PropTypes.bool.isRequired,\n onPost: PropTypes.func.isRequired,\n onPublish: PropTypes.func.isRequired,\n onDraftRelationCheck: PropTypes.func.isRequired,\n onPut: PropTypes.func.isRequired,\n onUnpublish: PropTypes.func.isRequired,\n readActionAllowedFields: PropTypes.array.isRequired,\n redirectToPreviousPage: PropTypes.func,\n slug: PropTypes.string.isRequired,\n status: PropTypes.string.isRequired,\n updateActionAllowedFields: PropTypes.array.isRequired,\n};\n\nexport default EditViewDataManagerProvider;\n","const createPluginsFilter = (obj = {}) =>\n Object.values(obj).reduce((acc, current) => Object.assign(acc, current), {});\n\n/**\n * @description\n * Creates a valid query params object for get requests\n * ie. plugins[18n][locale]=en becomes locale=en\n * @param {object} [query={}] - The query params\n * @returns {object} - The modified query params\n */\nconst buildValidGetParams = (query = {}) => {\n // Extract pluginOptions from the query, they shouldn't be part of the URL\n const {\n plugins: _,\n _q: searchQuery,\n ...validQueryParams\n } = {\n ...query,\n ...createPluginsFilter(query.plugins),\n };\n\n if (searchQuery) {\n // Encode the search query here since the paramsSerializer will not\n validQueryParams._q = encodeURIComponent(searchQuery);\n }\n\n return validQueryParams;\n};\n\nexport default buildValidGetParams;\n","import { memo, useCallback, useEffect, useRef, useState, useMemo } from 'react';\n\nimport {\n formatContentTypeData,\n useAPIErrorHandler,\n useFetchClient,\n useGuidedTour,\n useNotification,\n useQueryParams,\n useTracking,\n} from '@strapi/helper-plugin';\nimport axios from 'axios';\nimport get from 'lodash/get';\nimport PropTypes from 'prop-types';\nimport { useQueryClient } from 'react-query';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useHistory } from 'react-router-dom';\n\nimport { buildValidGetParams } from '../../pages/ListView/utils';\nimport {\n getData,\n getDataSucceeded,\n initForm,\n resetProps,\n setDataStructures,\n setStatus,\n submitSucceeded,\n} from '../../sharedReducers/crudReducer/actions';\nimport selectCrudReducer from '../../sharedReducers/crudReducer/selectors';\nimport { createDefaultForm, getTrad, removePasswordFieldsFromData } from '../../utils';\n\n// This container is used to handle the CRUD\nconst SingleTypeFormWrapper = ({ allLayoutData, children, slug }) => {\n const queryClient = useQueryClient();\n const { trackUsage } = useTracking();\n const { push } = useHistory();\n const { setCurrentStep } = useGuidedTour();\n const trackUsageRef = useRef(trackUsage);\n const [isCreatingEntry, setIsCreatingEntry] = useState(true);\n const [{ query, rawQuery }] = useQueryParams();\n const params = useMemo(() => buildValidGetParams(query), [query]);\n const toggleNotification = useNotification();\n const dispatch = useDispatch();\n const { formatAPIError } = useAPIErrorHandler(getTrad);\n const fetchClient = useFetchClient();\n const { post, put, del } = fetchClient;\n\n const { componentsDataStructure, contentTypeDataStructure, data, isLoading, status } =\n useSelector(selectCrudReducer);\n\n const cleanReceivedData = useCallback(\n (data) => {\n const cleaned = removePasswordFieldsFromData(\n data,\n allLayoutData.contentType,\n allLayoutData.components\n );\n\n // This is needed in order to add a unique id for the repeatable components, in order to make the reorder easier\n return formatContentTypeData(cleaned, allLayoutData.contentType, allLayoutData.components);\n },\n [allLayoutData]\n );\n\n useEffect(() => {\n return () => {\n dispatch(resetProps());\n };\n }, [dispatch]);\n\n useEffect(() => {\n const componentsDataStructure = Object.keys(allLayoutData.components).reduce((acc, current) => {\n const defaultComponentForm = createDefaultForm(\n get(allLayoutData, ['components', current, 'attributes'], {}),\n allLayoutData.components\n );\n\n acc[current] = formatContentTypeData(\n defaultComponentForm,\n allLayoutData.components[current],\n allLayoutData.components\n );\n\n return acc;\n }, {});\n\n const contentTypeDataStructure = createDefaultForm(\n allLayoutData.contentType.attributes,\n allLayoutData.components\n );\n const contentTypeDataStructureFormatted = formatContentTypeData(\n contentTypeDataStructure,\n allLayoutData.contentType,\n allLayoutData.components\n );\n\n dispatch(setDataStructures(componentsDataStructure, contentTypeDataStructureFormatted));\n }, [allLayoutData, dispatch]);\n\n // Check if creation mode or editing mode\n useEffect(() => {\n const CancelToken = axios.CancelToken;\n const source = CancelToken.source();\n\n const fetchData = async (source) => {\n dispatch(getData());\n\n setIsCreatingEntry(true);\n\n try {\n const { data } = await fetchClient.get(`/content-manager/single-types/${slug}`, {\n cancelToken: source.token,\n params,\n });\n\n dispatch(getDataSucceeded(cleanReceivedData(data)));\n\n setIsCreatingEntry(false);\n } catch (err) {\n if (axios.isCancel(err)) {\n return;\n }\n\n const responseStatus = get(err, 'response.status', null);\n\n // Creating a single type\n if (responseStatus === 404) {\n dispatch(initForm(rawQuery, true));\n }\n\n if (responseStatus === 403) {\n toggleNotification({\n type: 'info',\n message: { id: getTrad('permissions.not-allowed.update') },\n });\n\n push('/');\n }\n }\n };\n\n fetchData(source);\n\n return () => source.cancel('Operation canceled by the user.');\n }, [fetchClient, cleanReceivedData, push, slug, dispatch, params, rawQuery, toggleNotification]);\n\n const displayErrors = useCallback(\n (err) => {\n toggleNotification({ type: 'warning', message: formatAPIError(err) });\n },\n [toggleNotification, formatAPIError]\n );\n\n const onDelete = useCallback(\n async (trackerProperty) => {\n try {\n trackUsageRef.current('willDeleteEntry', trackerProperty);\n\n const { data } = await del(`/content-manager/single-types/${slug}`, {\n params,\n });\n\n toggleNotification({\n type: 'success',\n message: { id: getTrad('success.record.delete') },\n });\n\n trackUsageRef.current('didDeleteEntry', trackerProperty);\n\n setIsCreatingEntry(true);\n dispatch(initForm(rawQuery, true));\n\n return Promise.resolve(data);\n } catch (err) {\n trackUsageRef.current('didNotDeleteEntry', { error: err, ...trackerProperty });\n\n displayErrors(err);\n\n return Promise.reject(err);\n }\n },\n [del, slug, params, toggleNotification, dispatch, rawQuery, displayErrors]\n );\n\n const onPost = useCallback(\n async (body, trackerProperty) => {\n const endPoint = `/content-manager/single-types/${slug}`;\n\n try {\n dispatch(setStatus('submit-pending'));\n\n const { data } = await put(endPoint, body, { params: query });\n\n trackUsageRef.current('didCreateEntry', trackerProperty);\n toggleNotification({\n type: 'success',\n message: { id: getTrad('success.record.save') },\n });\n\n setCurrentStep('contentManager.success');\n\n // TODO: need to find a better place, or a better abstraction\n queryClient.invalidateQueries(['relation']);\n\n dispatch(submitSucceeded(cleanReceivedData(data)));\n setIsCreatingEntry(false);\n\n dispatch(setStatus('resolved'));\n\n return Promise.resolve(data);\n } catch (err) {\n trackUsageRef.current('didNotCreateEntry', { error: err, trackerProperty });\n\n displayErrors(err);\n\n dispatch(setStatus('resolved'));\n\n return Promise.reject(err);\n }\n },\n [\n put,\n cleanReceivedData,\n displayErrors,\n slug,\n dispatch,\n query,\n toggleNotification,\n setCurrentStep,\n queryClient,\n ]\n );\n\n const onDraftRelationCheck = useCallback(async () => {\n try {\n trackUsageRef.current('willCheckDraftRelations');\n\n const endPoint = `/content-manager/single-types/${slug}/actions/countDraftRelations`;\n dispatch(setStatus('draft-relation-check-pending'));\n\n const numberOfDraftRelations = await fetchClient.get(endPoint);\n trackUsageRef.current('didCheckDraftRelations');\n\n dispatch(setStatus('resolved'));\n\n return numberOfDraftRelations.data.data;\n } catch (err) {\n displayErrors(err);\n dispatch(setStatus('resolved'));\n\n return Promise.reject(err);\n }\n }, [fetchClient, displayErrors, slug, dispatch]);\n\n const onPublish = useCallback(async () => {\n try {\n trackUsageRef.current('willPublishEntry');\n const endPoint = `/content-manager/single-types/${slug}/actions/publish`;\n\n dispatch(setStatus('publish-pending'));\n\n const { data } = await post(\n endPoint,\n {},\n {\n params,\n }\n );\n\n trackUsageRef.current('didPublishEntry');\n toggleNotification({\n type: 'success',\n message: { id: getTrad('success.record.publish') },\n });\n\n dispatch(submitSucceeded(cleanReceivedData(data)));\n\n dispatch(setStatus('resolved'));\n\n return Promise.resolve(data);\n } catch (err) {\n displayErrors(err);\n\n dispatch(setStatus('resolved'));\n\n return Promise.reject(err);\n }\n }, [slug, dispatch, post, params, toggleNotification, cleanReceivedData, displayErrors]);\n\n const onPut = useCallback(\n async (body, trackerProperty) => {\n const endPoint = `/content-manager/single-types/${slug}`;\n\n try {\n trackUsageRef.current('willEditEntry', trackerProperty);\n\n dispatch(setStatus('submit-pending'));\n\n const { data } = await put(endPoint, body, { params: query });\n\n toggleNotification({\n type: 'success',\n message: { id: getTrad('success.record.save') },\n });\n\n trackUsageRef.current('didEditEntry', { trackerProperty });\n\n // TODO: need to find a better place, or a better abstraction\n queryClient.invalidateQueries(['relation']);\n\n dispatch(submitSucceeded(cleanReceivedData(data)));\n\n dispatch(setStatus('resolved'));\n\n return Promise.resolve(data);\n } catch (err) {\n displayErrors(err);\n\n trackUsageRef.current('didNotEditEntry', { error: err, trackerProperty });\n\n dispatch(setStatus('resolved'));\n\n return Promise.reject(err);\n }\n },\n [put, cleanReceivedData, displayErrors, slug, dispatch, query, toggleNotification, queryClient]\n );\n\n // The publish and unpublish method could be refactored but let's leave the duplication for now\n const onUnpublish = useCallback(async () => {\n const endPoint = `/content-manager/single-types/${slug}/actions/unpublish`;\n\n dispatch(setStatus('unpublish-pending'));\n\n try {\n trackUsageRef.current('willUnpublishEntry');\n\n const { data } = await post(\n endPoint,\n {},\n {\n params,\n }\n );\n\n trackUsageRef.current('didUnpublishEntry');\n toggleNotification({\n type: 'success',\n message: { id: getTrad('success.record.unpublish') },\n });\n\n dispatch(submitSucceeded(cleanReceivedData(data)));\n\n dispatch(setStatus('resolved'));\n } catch (err) {\n dispatch(setStatus('resolved'));\n displayErrors(err);\n }\n }, [slug, dispatch, post, params, toggleNotification, cleanReceivedData, displayErrors]);\n\n return children({\n componentsDataStructure,\n contentTypeDataStructure,\n data,\n isCreatingEntry,\n isLoadingForData: isLoading,\n onDelete,\n onPost,\n onDraftRelationCheck,\n onPublish,\n onPut,\n onUnpublish,\n redirectionLink: '/',\n status,\n });\n};\n\nSingleTypeFormWrapper.propTypes = {\n allLayoutData: PropTypes.shape({\n components: PropTypes.object.isRequired,\n contentType: PropTypes.object.isRequired,\n }).isRequired,\n children: PropTypes.func.isRequired,\n slug: PropTypes.string.isRequired,\n};\n\nexport default memo(SingleTypeFormWrapper);\n","import React from 'react';\n\nfunction connect(WrappedComponent, select) {\n return (props) => {\n // eslint-disable-next-line react/prop-types\n const selectors = select();\n\n return <WrappedComponent {...props} {...selectors} />;\n };\n}\n\nexport default connect;\n","import { useCMEditViewDataManager } from '@strapi/helper-plugin';\nimport isEmpty from 'lodash/isEmpty';\n\nfunction useSelect() {\n const { hasDraftAndPublish, modifiedData } = useCMEditViewDataManager();\n\n let trackerProperty = {};\n\n if (hasDraftAndPublish) {\n const isDraft = isEmpty(modifiedData.publishedAt);\n\n trackerProperty = isDraft ? { status: 'draft' } : { status: 'published' };\n }\n\n return {\n hasDraftAndPublish,\n trackerProperty,\n };\n}\n\nexport default useSelect;\n","import React, { memo, useState } from 'react';\n\nimport { Button } from '@strapi/design-system';\nimport { ConfirmDialog, useAPIErrorHandler, useNotification } from '@strapi/helper-plugin';\nimport { Trash } from '@strapi/icons';\nimport isEqual from 'lodash/isEqual';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport { getTrad } from '../../../utils';\n\nimport { connect, select } from './utils';\n\nconst DeleteLink = ({ onDelete, trackerProperty }) => {\n const [displayDeleteConfirmation, setDisplayDeleteConfirmation] = useState(false);\n const [isModalConfirmButtonLoading, setIsModalConfirmButtonLoading] = useState(false);\n const { formatMessage } = useIntl();\n const { formatAPIError } = useAPIErrorHandler(getTrad);\n const toggleNotification = useNotification();\n\n const toggleWarningDelete = () => setDisplayDeleteConfirmation((prevState) => !prevState);\n\n const handleConfirmDelete = async () => {\n try {\n // Show the loading state\n setIsModalConfirmButtonLoading(true);\n\n await onDelete(trackerProperty);\n\n setIsModalConfirmButtonLoading(false);\n\n toggleWarningDelete();\n } catch (err) {\n setIsModalConfirmButtonLoading(false);\n toggleWarningDelete();\n toggleNotification({\n type: 'warning',\n message: formatAPIError(err),\n });\n }\n };\n\n return (\n <>\n <Button onClick={toggleWarningDelete} size=\"S\" startIcon={<Trash />} variant=\"danger-light\">\n {formatMessage({\n id: getTrad('containers.Edit.delete-entry'),\n defaultMessage: 'Delete this entry',\n })}\n </Button>\n\n <ConfirmDialog\n isConfirmButtonLoading={isModalConfirmButtonLoading}\n isOpen={displayDeleteConfirmation}\n onConfirm={handleConfirmDelete}\n onToggleDialog={toggleWarningDelete}\n />\n </>\n );\n};\n\nDeleteLink.propTypes = {\n onDelete: PropTypes.func.isRequired,\n trackerProperty: PropTypes.object.isRequired,\n};\n\nconst Memoized = memo(DeleteLink, isEqual);\n\nexport default connect(Memoized, select);\n","import React from 'react';\n\nfunction connect(WrappedComponent, select) {\n return (props) => {\n // eslint-disable-next-line react/prop-types\n const selectors = select();\n\n return <WrappedComponent {...props} {...selectors} />;\n };\n}\n\nexport default connect;\n","import { useCMEditViewDataManager } from '@strapi/helper-plugin';\n\nfunction useSelect() {\n const { initialData, hasDraftAndPublish } = useCMEditViewDataManager();\n\n const isPublished = initialData.publishedAt !== undefined && initialData.publishedAt !== null;\n\n return {\n hasDraftAndPublish,\n isPublished,\n };\n}\n\nexport default useSelect;\n","import React from 'react';\n\nimport { Box, Flex, Typography } from '@strapi/design-system';\nimport { pxToRem } from '@strapi/helper-plugin';\nimport { Dot } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport { getTrad } from '../../../utils';\n\nimport { connect, select } from './utils';\n\nconst CustomBullet = styled(Dot)`\n width: ${pxToRem(6)};\n height: ${pxToRem(6)};\n * {\n fill: ${({ theme, $bulletColor }) => theme.colors[$bulletColor]};\n }\n`;\n\nconst DraftAndPublishBadge = ({ hasDraftAndPublish, isPublished }) => {\n const { formatMessage } = useIntl();\n\n if (!hasDraftAndPublish) {\n return null;\n }\n\n const colors = {\n draft: {\n textColor: 'secondary700',\n bulletColor: 'secondary600',\n box: {\n background: 'secondary100',\n borderColor: 'secondary200',\n },\n },\n published: {\n textColor: 'success700',\n bulletColor: 'success600',\n box: {\n background: 'success100',\n borderColor: 'success200',\n },\n },\n };\n const colorProps = isPublished ? colors.published : colors.draft;\n\n return (\n <Box\n hasRadius\n as=\"aside\"\n paddingTop={4}\n paddingBottom={4}\n paddingLeft={5}\n paddingRight={5}\n {...colorProps.box}\n >\n <Box as={Flex}>\n <CustomBullet $bulletColor={colorProps.bulletColor} />\n <Box paddingLeft={3}>\n <Typography textColor={colorProps.textColor}>\n {formatMessage({\n id: getTrad('containers.Edit.information.editing'),\n defaultMessage: 'Editing',\n })}\n &nbsp;\n </Typography>\n <Typography fontWeight=\"bold\" textColor={colorProps.textColor}>\n {isPublished &&\n formatMessage({\n id: getTrad('containers.Edit.information.publishedVersion'),\n defaultMessage: 'published version',\n })}\n {!isPublished &&\n formatMessage({\n id: getTrad('containers.Edit.information.draftVersion'),\n defaultMessage: 'draft version',\n })}\n </Typography>\n </Box>\n </Box>\n </Box>\n );\n};\n\nDraftAndPublishBadge.propTypes = {\n hasDraftAndPublish: PropTypes.bool.isRequired,\n isPublished: PropTypes.bool.isRequired,\n};\n\nexport default connect(DraftAndPublishBadge, select);\nexport { DraftAndPublishBadge };\n","import React from 'react';\n\nimport { Grid, GridItem } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\n\nimport FieldComponent from '../../../components/FieldComponent';\nimport Inputs from '../../../components/Inputs';\n\nconst GridRow = ({ columns, customFieldInputs }) => {\n return (\n <Grid gap={4}>\n {columns.map(({ fieldSchema, labelAction, metadatas, name, size, queryInfos }) => {\n const isComponent = fieldSchema.type === 'component';\n\n if (isComponent) {\n const { component, max, min, repeatable = false, required = false } = fieldSchema;\n\n return (\n <GridItem col={size} s={12} xs={12} key={component}>\n <FieldComponent\n componentUid={component}\n labelAction={labelAction}\n isRepeatable={repeatable}\n intlLabel={{\n id: metadatas.label,\n defaultMessage: metadatas.label,\n }}\n max={max}\n min={min}\n name={name}\n required={required}\n />\n </GridItem>\n );\n }\n\n return (\n <GridItem col={size} key={name} s={12} xs={12}>\n <Inputs\n size={size}\n fieldSchema={fieldSchema}\n keys={name}\n labelAction={labelAction}\n metadatas={metadatas}\n queryInfos={queryInfos}\n customFieldInputs={customFieldInputs}\n />\n </GridItem>\n );\n })}\n </Grid>\n );\n};\n\nGridRow.defaultProps = {\n customFieldInputs: {},\n};\n\nGridRow.propTypes = {\n columns: PropTypes.array.isRequired,\n customFieldInputs: PropTypes.object,\n};\n\nexport default GridRow;\n","import React from 'react';\n\nfunction connect(WrappedComponent, select) {\n return (props) => {\n // eslint-disable-next-line react/prop-types\n const selectors = select();\n\n return <WrappedComponent {...props} {...selectors} />;\n };\n}\n\nexport default connect;\n","import { useCMEditViewDataManager } from '@strapi/helper-plugin';\n\nfunction useSelect() {\n const {\n initialData,\n isCreatingEntry,\n isSingleType,\n status,\n layout,\n hasDraftAndPublish,\n modifiedData,\n onPublish,\n onUnpublish,\n publishConfirmation,\n onPublishPromptDismissal,\n } = useCMEditViewDataManager();\n\n return {\n initialData,\n isCreatingEntry,\n isSingleType,\n status,\n layout,\n hasDraftAndPublish,\n modifiedData,\n onPublish,\n onUnpublish,\n publishConfirmation,\n onPublishPromptDismissal,\n };\n}\n\nexport default useSelect;\n","import React, { memo, useState } from 'react';\n\nimport {\n Box,\n Button,\n Dialog,\n DialogBody,\n DialogFooter,\n Flex,\n HeaderLayout,\n Typography,\n} from '@strapi/design-system';\nimport { Link } from '@strapi/helper-plugin';\nimport { ArrowLeft, Check, ExclamationMarkCircle } from '@strapi/icons';\nimport get from 'lodash/get';\nimport isEmpty from 'lodash/isEmpty';\nimport isEqualFastCompare from 'lodash/isEqual';\nimport isEqual from 'lodash/isEqual';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport { useHistory } from 'react-router-dom';\nimport styled from 'styled-components';\n\nimport { getTrad } from '../../../utils';\n\nimport { connect, select } from './utils';\n\n// TODO: replace with textAlign Typography props when available\nconst FlexTextAlign = styled(Flex)`\n text-align: center;\n`;\n\nconst Header = ({\n allowedActions: { canUpdate, canCreate, canPublish },\n initialData,\n isCreatingEntry,\n isSingleType,\n hasDraftAndPublish,\n layout,\n modifiedData,\n onPublish,\n onUnpublish,\n status,\n publishConfirmation: { show: showPublishConfirmation, draftCount },\n onPublishPromptDismissal,\n}) => {\n const { goBack } = useHistory();\n const [showWarningUnpublish, setWarningUnpublish] = useState(false);\n const { formatMessage } = useIntl();\n\n const currentContentTypeMainField = get(layout, ['settings', 'mainField'], 'id');\n const currentContentTypeName = get(layout, ['info', 'displayName'], 'NOT FOUND');\n const didChangeData =\n !isEqual(initialData, modifiedData) || (isCreatingEntry && !isEmpty(modifiedData));\n\n const createEntryIntlTitle = formatMessage({\n id: getTrad('containers.Edit.pluginHeader.title.new'),\n defaultMessage: 'Create an entry',\n });\n\n let title = createEntryIntlTitle;\n\n if (!isCreatingEntry && !isSingleType) {\n title = initialData[currentContentTypeMainField] || currentContentTypeName;\n }\n\n if (isSingleType) {\n title = currentContentTypeName;\n }\n\n let primaryAction = null;\n\n if (isCreatingEntry && canCreate) {\n primaryAction = (\n <Flex gap={2}>\n {hasDraftAndPublish && (\n <Button disabled startIcon={<Check />} variant=\"secondary\">\n {formatMessage({ id: 'app.utils.publish', defaultMessage: 'Publish' })}\n </Button>\n )}\n <Button disabled={!didChangeData} loading={status === 'submit-pending'} type=\"submit\">\n {formatMessage({\n id: getTrad('containers.Edit.submit'),\n defaultMessage: 'Save',\n })}\n </Button>\n </Flex>\n );\n }\n\n if (!isCreatingEntry && canUpdate) {\n const shouldShowPublishButton = hasDraftAndPublish && canPublish;\n const isPublished = !isEmpty(initialData.publishedAt);\n const isPublishButtonLoading = isPublished\n ? status === 'unpublish-pending'\n : status === 'publish-pending';\n const pubishButtonLabel = isPublished\n ? { id: 'app.utils.unpublish', defaultMessage: 'Unpublish' }\n : { id: 'app.utils.publish', defaultMessage: 'Publish' };\n\n const onClick = isPublished ? () => setWarningUnpublish(true) : () => onPublish();\n\n primaryAction = (\n <Flex>\n {shouldShowPublishButton && (\n <Button\n disabled={didChangeData}\n loading={isPublishButtonLoading}\n onClick={onClick}\n startIcon={<Check />}\n variant=\"secondary\"\n >\n {formatMessage(pubishButtonLabel)}\n </Button>\n )}\n <Box paddingLeft={shouldShowPublishButton ? 2 : 0}>\n <Button disabled={!didChangeData} loading={status === 'submit-pending'} type=\"submit\">\n {formatMessage({\n id: getTrad('containers.Edit.submit'),\n defaultMessage: 'Save',\n })}\n </Button>\n </Box>\n </Flex>\n );\n }\n\n const toggleWarningUnpublish = () => setWarningUnpublish((prevState) => !prevState);\n\n const handleUnpublish = () => {\n toggleWarningUnpublish();\n onUnpublish();\n };\n\n const subtitle = `${formatMessage({\n id: getTrad('api.id'),\n defaultMessage: 'API ID ',\n })} : ${layout.apiID}`;\n\n return (\n <>\n <HeaderLayout\n title={title.toString()}\n primaryAction={primaryAction}\n subtitle={subtitle}\n navigationAction={\n <Link\n startIcon={<ArrowLeft />}\n // Needed in order to redirect the user with the correct search params\n // Since parts is using a link from react-router-dom the best way to do it is to disable the\n // event\n onClick={(e) => {\n e.preventDefault();\n goBack();\n }}\n to=\"/\"\n >\n {formatMessage({\n id: 'global.back',\n defaultMessage: 'Back',\n })}\n </Link>\n }\n />\n <Dialog\n onClose={toggleWarningUnpublish}\n title=\"Confirmation\"\n labelledBy=\"confirmation\"\n describedBy=\"confirm-description\"\n isOpen={showWarningUnpublish}\n >\n <DialogBody icon={<ExclamationMarkCircle />}>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n <Flex justifyContent=\"center\" style={{ textAlign: 'center' }}>\n <Typography id=\"confirm-description\">\n {formatMessage(\n {\n id: getTrad('popUpWarning.warning.unpublish'),\n defaultMessage:\n 'Unpublish this content will automatically change it to a draft.',\n },\n {\n br: () => <br />,\n }\n )}\n </Typography>\n </Flex>\n <Flex justifyContent=\"center\" style={{ textAlign: 'center' }}>\n <Typography id=\"confirm-description\">\n {formatMessage({\n id: getTrad('popUpWarning.warning.unpublish-question'),\n defaultMessage: 'Are you sure you want to unpublish it?',\n })}\n </Typography>\n </Flex>\n </Flex>\n </DialogBody>\n <DialogFooter\n startAction={\n <Button onClick={toggleWarningUnpublish} variant=\"tertiary\">\n {formatMessage({\n id: 'components.popUpWarning.button.cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n }\n endAction={\n <Button variant=\"danger-light\" onClick={handleUnpublish}>\n {formatMessage({\n id: 'components.popUpWarning.button.confirm',\n defaultMessage: 'Confirm',\n })}\n </Button>\n }\n />\n </Dialog>\n <Dialog\n onClose={onPublishPromptDismissal}\n title={formatMessage({\n id: getTrad(`popUpWarning.warning.has-draft-relations.title`),\n defaultMessage: 'Confirmation',\n })}\n labelledBy=\"confirmation\"\n describedBy=\"confirm-description\"\n isOpen={showPublishConfirmation}\n >\n <DialogBody icon={<ExclamationMarkCircle />}>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n <FlexTextAlign justifyContent=\"center\">\n <Typography id=\"confirm-description\">\n {draftCount}\n {formatMessage(\n {\n id: getTrad(`popUpwarning.warning.has-draft-relations.message`),\n defaultMessage:\n '<b>{count, plural, one { relation is} other { relations are}}</b> not published yet and might lead to unexpected behavior.',\n },\n {\n b: (chunks) => <Typography fontWeight=\"bold\">{chunks}</Typography>,\n count: draftCount,\n }\n )}\n </Typography>\n </FlexTextAlign>\n <FlexTextAlign justifyContent=\"center\">\n <Typography id=\"confirm-description\">\n {formatMessage({\n id: getTrad('popUpWarning.warning.publish-question'),\n defaultMessage: 'Do you still want to publish?',\n })}\n </Typography>\n </FlexTextAlign>\n </Flex>\n </DialogBody>\n <DialogFooter\n startAction={\n <Button onClick={onPublishPromptDismissal} variant=\"tertiary\">\n {formatMessage({\n id: 'components.popUpWarning.button.cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n }\n endAction={\n <Button variant=\"success\" onClick={onPublish}>\n {formatMessage({\n id: getTrad('popUpwarning.warning.has-draft-relations.button-confirm'),\n defaultMessage: 'Publish',\n })}\n </Button>\n }\n />\n </Dialog>\n </>\n );\n};\n\nHeader.propTypes = {\n allowedActions: PropTypes.shape({\n canUpdate: PropTypes.bool.isRequired,\n canCreate: PropTypes.bool.isRequired,\n canPublish: PropTypes.bool.isRequired,\n }).isRequired,\n initialData: PropTypes.object.isRequired,\n isCreatingEntry: PropTypes.bool.isRequired,\n isSingleType: PropTypes.bool.isRequired,\n status: PropTypes.string.isRequired,\n layout: PropTypes.object.isRequired,\n hasDraftAndPublish: PropTypes.bool.isRequired,\n modifiedData: PropTypes.object.isRequired,\n onPublish: PropTypes.func.isRequired,\n onUnpublish: PropTypes.func.isRequired,\n publishConfirmation: PropTypes.shape({\n show: PropTypes.bool.isRequired,\n draftCount: PropTypes.number.isRequired,\n }).isRequired,\n onPublishPromptDismissal: PropTypes.func.isRequired,\n};\n\nconst Memoized = memo(Header, isEqualFastCompare);\n\nexport default connect(Memoized, select);\nexport { Header };\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport { useEffect } from 'react';\n\n/**\n *\n * @param {import('react').EffectCallback} effect\n * @returns void\n */\nexport const useOnce = (effect) => useEffect(effect, emptyDeps);\n\n/**\n * @type {import('react').DependencyList}\n */\nconst emptyDeps = [];\n","const msPerMinute = 60 * 1000;\nconst msPerHour = msPerMinute * 60;\nconst msPerDay = msPerHour * 24;\nconst msPerMonth = msPerDay * 30;\nconst msPerYear = msPerDay * 365;\n\nconst getUnits = (value) => {\n if (value < msPerMinute) {\n return { unit: 'second', value: -Math.round(value / 1000) };\n }\n if (value < msPerHour) {\n return { unit: 'minute', value: -Math.round(value / msPerMinute) };\n }\n if (value < msPerDay) {\n return { unit: 'hour', value: -Math.round(value / msPerHour) };\n }\n if (value < msPerMonth) {\n return { unit: 'day', value: -Math.round(value / msPerDay) };\n }\n if (value < msPerYear) {\n return { unit: 'month', value: -Math.round(value / msPerMonth) };\n }\n\n return { unit: 'year', value: -Math.round(value / msPerYear) };\n};\n\nexport default getUnits;\n","import React, { useRef } from 'react';\n\nimport { Box, Divider, Flex, Typography } from '@strapi/design-system';\nimport { useCMEditViewDataManager } from '@strapi/helper-plugin';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport { getTrad, getDisplayName } from '../../../utils';\n\nimport getUnits from './utils/getUnits';\n\nconst Title = () => {\n const { formatMessage } = useIntl();\n\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n <Typography variant=\"sigma\" textColor=\"neutral600\" id=\"additional-information\">\n {formatMessage({\n id: getTrad('containers.Edit.information'),\n defaultMessage: 'Information',\n })}\n </Typography>\n\n <Box>\n <Divider />\n </Box>\n </Flex>\n );\n};\n\nconst KeyValuePair = ({ label, value }) => {\n return (\n <Flex justifyContent=\"space-between\">\n <Typography as=\"dt\" fontWeight=\"bold\" textColor=\"neutral800\" variant=\"pi\">\n {label}\n </Typography>\n <Typography as=\"dd\" variant=\"pi\" textColor=\"neutral600\">\n {value}\n </Typography>\n </Flex>\n );\n};\n\nKeyValuePair.defaultProps = {\n value: '-',\n};\n\nKeyValuePair.propTypes = {\n label: PropTypes.string.isRequired,\n value: PropTypes.string,\n};\n\nconst Body = () => {\n const { formatMessage, formatRelativeTime } = useIntl();\n const { initialData, isCreatingEntry } = useCMEditViewDataManager();\n const currentTime = useRef(Date.now());\n\n const getFieldInfo = (atField, byField) => {\n const displayName = initialData[byField]\n ? getDisplayName(initialData[byField], formatMessage)\n : '-';\n const timestamp = initialData[atField] ? new Date(initialData[atField]).getTime() : Date.now();\n const elapsed = timestamp - currentTime.current;\n const { unit, value } = getUnits(-elapsed);\n\n return {\n at: formatRelativeTime(value, unit, { numeric: 'auto' }),\n by: isCreatingEntry ? '-' : displayName,\n };\n };\n\n const updated = getFieldInfo('updatedAt', 'updatedBy');\n const created = getFieldInfo('createdAt', 'createdBy');\n\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2} as=\"dl\">\n <KeyValuePair\n label={formatMessage({\n id: getTrad('containers.Edit.information.created'),\n defaultMessage: 'Created',\n })}\n value={created.at}\n />\n\n <KeyValuePair\n label={formatMessage({\n id: getTrad('containers.Edit.information.by'),\n defaultMessage: 'By',\n })}\n value={created.by}\n />\n </Flex>\n\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2} as=\"dl\">\n <KeyValuePair\n label={formatMessage({\n id: getTrad('containers.Edit.information.lastUpdate'),\n defaultMessage: 'Last update',\n })}\n value={updated.at}\n />\n\n <KeyValuePair\n label={formatMessage({\n id: getTrad('containers.Edit.information.by'),\n defaultMessage: 'By',\n })}\n value={updated.by}\n />\n </Flex>\n </Flex>\n );\n};\n\nconst Root = ({ children }) => {\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n {children}\n </Flex>\n );\n};\n\nRoot.propTypes = {\n children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired,\n};\n\nexport const Information = {\n Root,\n Title,\n Body,\n};\n","import React from 'react';\n\nimport { Information } from '../Information';\n\nexport function InformationBoxCE() {\n return (\n <Information.Root>\n <Information.Title />\n <Information.Body />\n </Information.Root>\n );\n}\n","import get from 'lodash/get';\nimport isEmpty from 'lodash/isEmpty';\n\nconst createAttributesLayout = (currentContentTypeLayoutData) => {\n if (!currentContentTypeLayoutData.layouts) {\n return [];\n }\n\n const currentLayout = currentContentTypeLayoutData.layouts.edit;\n const attributes = currentContentTypeLayoutData.attributes;\n\n const getType = (name) => get(attributes, [name, 'type'], '');\n\n let currentRowIndex = 0;\n const newLayout = [];\n\n currentLayout.forEach((row) => {\n const hasDynamicZone = row.some(({ name }) => getType(name) === 'dynamiczone');\n\n if (!newLayout[currentRowIndex]) {\n newLayout[currentRowIndex] = [];\n }\n\n if (hasDynamicZone) {\n currentRowIndex = currentRowIndex === 0 && isEmpty(newLayout[0]) ? 0 : currentRowIndex + 1;\n\n if (!newLayout[currentRowIndex]) {\n newLayout[currentRowIndex] = [];\n }\n newLayout[currentRowIndex].push(row);\n\n currentRowIndex += 1;\n } else {\n newLayout[currentRowIndex].push(row);\n }\n });\n\n return newLayout.filter((arr) => arr.length > 0);\n};\n\nexport default createAttributesLayout;\n","const getCustomFieldUidsFromLayout = (layout) => {\n if (!layout) return [];\n // Get all the fields on the content-type and its components\n const allFields = [\n ...layout.contentType.layouts.edit,\n ...Object.values(layout.components).flatMap((component) => component.layouts.edit),\n ].flat();\n // Filter that down to custom fields and map the uids\n const customFieldUids = allFields\n .filter((field) => field.fieldSchema.customField)\n .map((customField) => customField.fieldSchema.customField);\n // Make sure the list is unique\n const uniqueCustomFieldUids = [...new Set(customFieldUids)];\n\n return uniqueCustomFieldUids;\n};\n\nexport default getCustomFieldUidsFromLayout;\n","import { findMatchingPermissions } from '@strapi/helper-plugin';\nimport flatMap from 'lodash/flatMap';\nimport uniq from 'lodash/uniq';\n\nconst getFieldsActionMatchingPermissions = (userPermissions, slug) => {\n const getMatchingPermissions = (action) => {\n const matched = findMatchingPermissions(userPermissions, [\n {\n action: `plugin::content-manager.explorer.${action}`,\n subject: slug,\n },\n ]);\n\n return uniq(flatMap(matched, 'properties.fields'));\n };\n\n return {\n createActionAllowedFields: getMatchingPermissions('create'),\n readActionAllowedFields: getMatchingPermissions('read'),\n updateActionAllowedFields: getMatchingPermissions('update'),\n };\n};\n\nexport default getFieldsActionMatchingPermissions;\n","import { createSelector } from '@reduxjs/toolkit';\n\nimport { createAttributesLayout, getCustomFieldUidsFromLayout } from './utils';\n\nconst selectCurrentLayout = (state) => state['content-manager_editViewLayoutManager'].currentLayout;\n\nconst selectAttributesLayout = createSelector(selectCurrentLayout, (layout) =>\n createAttributesLayout(layout?.contentType ?? {})\n);\n\nconst selectCustomFieldUids = createSelector(selectCurrentLayout, (layout) =>\n getCustomFieldUidsFromLayout(layout)\n);\n\nexport { selectAttributesLayout, selectCurrentLayout, selectCustomFieldUids };\n","import * as React from 'react';\n\nimport { Main, ContentLayout, Grid, GridItem, Flex, Box } from '@strapi/design-system';\nimport {\n CheckPermissions,\n LinkButton,\n LoadingIndicatorPage,\n useNotification,\n useTracking,\n} from '@strapi/helper-plugin';\nimport { Layer, Pencil } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport { useSelector } from 'react-redux';\nimport { useLocation } from 'react-router-dom';\n\nimport { useEnterprise } from '../../../hooks/useEnterprise';\nimport { selectAdminPermissions } from '../../../selectors';\nimport { InjectionZone } from '../../../shared/components/InjectionZone';\nimport CollectionTypeFormWrapper from '../../components/CollectionTypeFormWrapper';\nimport { DynamicZone } from '../../components/DynamicZone';\nimport EditViewDataManagerProvider from '../../components/EditViewDataManagerProvider';\nimport SingleTypeFormWrapper from '../../components/SingleTypeFormWrapper';\nimport useLazyComponents from '../../hooks/useLazyComponents';\nimport { getTrad } from '../../utils';\n\nimport DeleteLink from './DeleteLink';\nimport DraftAndPublishBadge from './DraftAndPublishBadge';\nimport GridRow from './GridRow';\nimport Header from './Header';\nimport { useOnce } from './hooks/useOnce';\nimport { InformationBoxCE } from './InformationBox';\nimport { selectCurrentLayout, selectAttributesLayout, selectCustomFieldUids } from './selectors';\nimport { getFieldsActionMatchingPermissions } from './utils';\n\n// TODO: this seems suspicious\nconst CTB_PERMISSIONS = [{ action: 'plugin::content-type-builder.read', subject: null }];\n\n/* eslint-disable react/no-array-index-key */\nconst EditView = ({ allowedActions, isSingleType, goBack, slug, id, origin, userPermissions }) => {\n const { trackUsage } = useTracking();\n const { formatMessage } = useIntl();\n const permissions = useSelector(selectAdminPermissions);\n const location = useLocation();\n const toggleNotification = useNotification();\n const Information = useEnterprise(\n InformationBoxCE,\n async () =>\n (await import('../../../../../ee/admin/src/content-manager/pages/EditView/InformationBox'))\n .InformationBoxEE\n );\n\n useOnce(() => {\n /**\n * We only ever want to fire the notification once otherwise\n * whenever the app re-renders it'll pop up regardless of\n * what we do because the state comes from react-router-dom\n */\n if (location?.state && 'error' in location.state) {\n toggleNotification({\n type: 'warning',\n message: location.state.error,\n timeout: 5000,\n });\n }\n });\n\n const { layout, formattedContentTypeLayout, customFieldUids } = useSelector((state) => ({\n layout: selectCurrentLayout(state),\n formattedContentTypeLayout: selectAttributesLayout(state),\n customFieldUids: selectCustomFieldUids(state),\n }));\n\n const { isLazyLoading, lazyComponentStore } = useLazyComponents(customFieldUids);\n\n const { createActionAllowedFields, readActionAllowedFields, updateActionAllowedFields } =\n getFieldsActionMatchingPermissions(userPermissions, slug);\n\n const configurationPermissions = isSingleType\n ? permissions.contentManager.singleTypesConfigurations\n : permissions.contentManager.collectionTypesConfigurations;\n\n // // FIXME when changing the routing\n const configurationsURL = `/content-manager/${\n isSingleType ? 'singleType' : 'collectionType'\n }/${slug}/configurations/edit`;\n\n const DataManagementWrapper = isSingleType ? SingleTypeFormWrapper : CollectionTypeFormWrapper;\n\n // Check if a block is a dynamic zone\n const isDynamicZone = (block) => {\n return block.every((subBlock) => {\n return subBlock.every((obj) => obj.fieldSchema.type === 'dynamiczone');\n });\n };\n\n if (isLazyLoading) {\n return <LoadingIndicatorPage />;\n }\n\n // wait until the EE component is fully loaded before rendering, to prevent flickering\n if (!Information) {\n return null;\n }\n\n return (\n <DataManagementWrapper allLayoutData={layout} slug={slug} id={id} origin={origin}>\n {({\n componentsDataStructure,\n contentTypeDataStructure,\n data,\n isCreatingEntry,\n isLoadingForData,\n onDelete,\n onPost,\n onPublish,\n onDraftRelationCheck,\n onPut,\n onUnpublish,\n redirectionLink,\n status,\n }) => {\n return (\n <EditViewDataManagerProvider\n allowedActions={allowedActions}\n allLayoutData={layout}\n createActionAllowedFields={createActionAllowedFields}\n componentsDataStructure={componentsDataStructure}\n contentTypeDataStructure={contentTypeDataStructure}\n from={redirectionLink}\n initialValues={data}\n isCreatingEntry={isCreatingEntry}\n isLoadingForData={isLoadingForData}\n isSingleType={isSingleType}\n onPost={onPost}\n onPublish={onPublish}\n onDraftRelationCheck={onDraftRelationCheck}\n onPut={onPut}\n onUnpublish={onUnpublish}\n readActionAllowedFields={readActionAllowedFields}\n redirectToPreviousPage={goBack}\n slug={slug}\n status={status}\n updateActionAllowedFields={updateActionAllowedFields}\n >\n <Main aria-busy={status !== 'resolved'}>\n <Header allowedActions={allowedActions} />\n <ContentLayout>\n <Grid gap={4}>\n <GridItem col={9} s={12}>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n {formattedContentTypeLayout.map((row, index) => {\n if (isDynamicZone(row)) {\n const {\n 0: {\n 0: { name, fieldSchema, metadatas, labelAction },\n },\n } = row;\n\n return (\n <Box key={index}>\n <Grid gap={4}>\n <GridItem col={12} s={12} xs={12}>\n <DynamicZone\n name={name}\n fieldSchema={fieldSchema}\n labelAction={labelAction}\n metadatas={metadatas}\n />\n </GridItem>\n </Grid>\n </Box>\n );\n }\n\n return (\n <Box\n key={index}\n hasRadius\n background=\"neutral0\"\n shadow=\"tableShadow\"\n paddingLeft={6}\n paddingRight={6}\n paddingTop={6}\n paddingBottom={6}\n borderColor=\"neutral150\"\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n {row.map((grid, gridRowIndex) => (\n <GridRow\n columns={grid}\n customFieldInputs={lazyComponentStore}\n key={gridRowIndex}\n />\n ))}\n </Flex>\n </Box>\n );\n })}\n </Flex>\n </GridItem>\n <GridItem col={3} s={12}>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n <DraftAndPublishBadge />\n <Box\n as=\"aside\"\n aria-labelledby=\"additional-information\"\n background=\"neutral0\"\n borderColor=\"neutral150\"\n hasRadius\n paddingBottom={4}\n paddingLeft={4}\n paddingRight={4}\n paddingTop={6}\n shadow=\"tableShadow\"\n >\n <Information />\n <InjectionZone area=\"contentManager.editView.informations\" />\n </Box>\n <Box as=\"aside\" aria-labelledby=\"links\">\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n <InjectionZone area=\"contentManager.editView.right-links\" slug={slug} />\n {slug !== 'strapi::administrator' && (\n <CheckPermissions permissions={CTB_PERMISSIONS}>\n <LinkButton\n onClick={() => {\n trackUsage('willEditEditLayout');\n }}\n size=\"S\"\n startIcon={<Pencil />}\n style={{ width: '100%' }}\n to={`/plugins/content-type-builder/content-types/${slug}`}\n variant=\"secondary\"\n >\n {formatMessage({\n id: getTrad('link-to-ctb'),\n defaultMessage: 'Edit the model',\n })}\n </LinkButton>\n </CheckPermissions>\n )}\n\n <CheckPermissions permissions={configurationPermissions}>\n <LinkButton\n size=\"S\"\n startIcon={<Layer />}\n style={{ width: '100%' }}\n to={configurationsURL}\n variant=\"secondary\"\n >\n {formatMessage({\n id: 'app.links.configure-view',\n defaultMessage: 'Configure the view',\n })}\n </LinkButton>\n </CheckPermissions>\n\n {allowedActions.canDelete && !isCreatingEntry && (\n <DeleteLink onDelete={onDelete} />\n )}\n </Flex>\n </Box>\n </Flex>\n </GridItem>\n </Grid>\n </ContentLayout>\n </Main>\n </EditViewDataManagerProvider>\n );\n }}\n </DataManagementWrapper>\n );\n};\n\nEditView.defaultProps = {\n id: null,\n isSingleType: false,\n origin: null,\n userPermissions: [],\n};\n\nEditView.propTypes = {\n allowedActions: PropTypes.shape({\n canRead: PropTypes.bool.isRequired,\n canUpdate: PropTypes.bool.isRequired,\n canCreate: PropTypes.bool.isRequired,\n canDelete: PropTypes.bool.isRequired,\n }).isRequired,\n id: PropTypes.string,\n isSingleType: PropTypes.bool,\n goBack: PropTypes.func.isRequired,\n origin: PropTypes.string,\n slug: PropTypes.string.isRequired,\n userPermissions: PropTypes.array,\n};\n\nexport default EditView;\n","import React, { memo, useMemo } from 'react';\n\nimport { LoadingIndicatorPage, useRBAC } from '@strapi/helper-plugin';\nimport isEqual from 'lodash/isEqual';\nimport PropTypes from 'prop-types';\n\nimport { generatePermissionsObject } from '../../utils';\nimport EditView from '../EditView';\n\nconst Permissions = (props) => {\n const viewPermissions = useMemo(() => generatePermissionsObject(props.slug), [props.slug]);\n const { isLoading, allowedActions } = useRBAC(viewPermissions, props.userPermissions);\n\n if (isLoading) {\n return <LoadingIndicatorPage />;\n }\n\n return <EditView {...props} allowedActions={allowedActions} />;\n};\n\nPermissions.defaultProps = {\n permissions: [],\n};\n\nPermissions.propTypes = {\n permissions: PropTypes.array,\n slug: PropTypes.string.isRequired,\n userPermissions: PropTypes.array.isRequired,\n};\n\n// This avoids the components to rerender on params change causing multiple requests to be fired\nexport default memo(Permissions, isEqual);\n","import React, { useEffect } from 'react';\n\nimport { LoadingIndicatorPage, useQueryParams, useStrapiApp } from '@strapi/helper-plugin';\nimport PropTypes from 'prop-types';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { HOOKS } from '../../../constants';\nimport { useSyncRbac } from '../../hooks';\n\nimport { resetProps, setLayout } from './actions';\nimport Permissions from './Permissions';\nimport selectLayout from './selectors';\n\nconst { MUTATE_EDIT_VIEW_LAYOUT } = HOOKS;\n\nconst EditViewLayoutManager = ({ layout, ...rest }) => {\n const currentLayout = useSelector(selectLayout);\n const dispatch = useDispatch();\n const [{ query }] = useQueryParams();\n const { runHookWaterfall } = useStrapiApp();\n const { permissions, isValid: isValidPermissions } = useSyncRbac(query, rest.slug, 'editView');\n\n useEffect(() => {\n // Allow the plugins to extend the edit view layout\n const mutatedLayout = runHookWaterfall(MUTATE_EDIT_VIEW_LAYOUT, { layout, query });\n\n dispatch(setLayout(mutatedLayout.layout, query));\n\n return () => {\n dispatch(resetProps());\n };\n }, [layout, dispatch, query, runHookWaterfall]);\n\n if (!currentLayout || !isValidPermissions) {\n return <LoadingIndicatorPage />;\n }\n\n return <Permissions {...rest} userPermissions={permissions} />;\n};\n\nEditViewLayoutManager.propTypes = {\n layout: PropTypes.shape({\n components: PropTypes.object.isRequired,\n contentType: PropTypes.shape({\n uid: PropTypes.string.isRequired,\n settings: PropTypes.object.isRequired,\n metadatas: PropTypes.object.isRequired,\n options: PropTypes.object.isRequired,\n attributes: PropTypes.object.isRequired,\n }).isRequired,\n }).isRequired,\n};\n\nexport default EditViewLayoutManager;\n","import React from 'react';\n\nimport {\n Button,\n Flex,\n Grid,\n GridItem,\n ModalBody,\n ModalFooter,\n ModalHeader,\n ModalLayout,\n TextInput,\n ToggleInput,\n Typography,\n} from '@strapi/design-system';\nimport upperFirst from 'lodash/upperFirst';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport FieldTypeIcon from '../../../components/FieldTypeIcon';\nimport { getTrad } from '../../../utils';\n\nconst HeaderContainer = styled(Flex)`\n svg {\n width: ${32 / 16}rem;\n height: ${24 / 16}rem;\n margin-right: ${({ theme }) => theme.spaces[3]};\n }\n`;\n\nexport const EditFieldForm = ({\n attributes,\n fieldForm,\n fieldToEdit,\n onCloseModal,\n onChangeEditLabel,\n onSubmit,\n type,\n}) => {\n const { formatMessage } = useIntl();\n\n const relationType = attributes[fieldToEdit].relationType;\n\n let shouldDisplaySortToggle = !['media', 'relation'].includes(type);\n\n if (['oneWay', 'oneToOne', 'manyToOne'].includes(relationType)) {\n shouldDisplaySortToggle = true;\n }\n\n return (\n <ModalLayout onClose={onCloseModal} labelledBy=\"title\">\n <form onSubmit={onSubmit}>\n <ModalHeader>\n <HeaderContainer>\n <FieldTypeIcon type={type} />\n <Typography fontWeight=\"bold\" textColor=\"neutral800\" as=\"h2\" id=\"title\">\n {formatMessage(\n {\n id: getTrad('containers.ListSettingsView.modal-form.edit-label'),\n defaultMessage: 'Edit {fieldName}',\n },\n { fieldName: upperFirst(fieldToEdit) }\n )}\n </Typography>\n </HeaderContainer>\n </ModalHeader>\n <ModalBody>\n <Grid gap={4}>\n <GridItem s={12} col={6}>\n <TextInput\n id=\"label-input\"\n label={formatMessage({\n id: getTrad('form.Input.label'),\n defaultMessage: 'Label',\n })}\n name=\"label\"\n onChange={(e) => onChangeEditLabel(e)}\n value={fieldForm.label}\n hint={formatMessage({\n id: getTrad('form.Input.label.inputDescription'),\n defaultMessage: \"This value overrides the label displayed in the table's head\",\n })}\n />\n </GridItem>\n {shouldDisplaySortToggle && (\n <GridItem s={12} col={6}>\n <ToggleInput\n data-testid=\"Enable sort on this field\"\n checked={fieldForm.sortable}\n label={formatMessage({\n id: getTrad('form.Input.sort.field'),\n defaultMessage: 'Enable sort on this field',\n })}\n name=\"sortable\"\n onChange={(e) =>\n onChangeEditLabel({ target: { name: 'sortable', value: e.target.checked } })\n }\n onLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.on-label',\n defaultMessage: 'on',\n })}\n offLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.off-label',\n defaultMessage: 'off',\n })}\n />\n </GridItem>\n )}\n </Grid>\n </ModalBody>\n <ModalFooter\n startActions={\n <Button onClick={onCloseModal} variant=\"tertiary\">\n {formatMessage({ id: 'app.components.Button.cancel', defaultMessage: 'Cancel' })}\n </Button>\n }\n endActions={\n <Button type=\"submit\">\n {formatMessage({ id: 'global.finish', defaultMessage: 'Finish' })}\n </Button>\n }\n />\n </form>\n </ModalLayout>\n );\n};\n\nEditFieldForm.propTypes = {\n attributes: PropTypes.objectOf(\n PropTypes.shape({\n relationType: PropTypes.string,\n })\n ).isRequired,\n fieldForm: PropTypes.shape({\n label: PropTypes.string,\n sortable: PropTypes.bool,\n }).isRequired,\n fieldToEdit: PropTypes.string.isRequired,\n onChangeEditLabel: PropTypes.func.isRequired,\n onCloseModal: PropTypes.func.isRequired,\n onSubmit: PropTypes.func.isRequired,\n type: PropTypes.string.isRequired,\n};\n","import React from 'react';\n\nimport {\n Box,\n Flex,\n Grid,\n GridItem,\n Option,\n Select,\n ToggleInput,\n Typography,\n} from '@strapi/design-system';\nimport { useCollator } from '@strapi/helper-plugin';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport { useEnterprise } from '../../../../hooks/useEnterprise';\nimport { getTrad } from '../../../utils';\n\nexport const Settings = ({\n contentTypeOptions,\n modifiedData,\n onChange,\n sortOptions: sortOptionsCE,\n}) => {\n const { formatMessage, locale } = useIntl();\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n const sortOptions = useEnterprise(\n sortOptionsCE,\n async () =>\n (\n await import(\n '../../../../../../ee/admin/src/content-manager/pages/ListSettingsView/constants'\n )\n ).REVIEW_WORKFLOW_STAGE_SORT_OPTION_NAME,\n {\n combine(ceOptions, eeOption) {\n return [...ceOptions, { ...eeOption, label: formatMessage(eeOption.label) }];\n },\n\n defaultValue: sortOptionsCE,\n\n enabled: !!contentTypeOptions?.reviewWorkflows,\n }\n );\n\n const sortOptionsSorted = sortOptions.sort((a, b) => formatter.compare(a.label, b.label));\n const { settings } = modifiedData;\n\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Typography variant=\"delta\" as=\"h2\">\n {formatMessage({\n id: getTrad('containers.SettingPage.settings'),\n defaultMessage: 'Settings',\n })}\n </Typography>\n\n <Flex justifyContent=\"space-between\" gap={4}>\n <Box width=\"100%\">\n <ToggleInput\n label={formatMessage({\n id: getTrad('form.Input.search'),\n defaultMessage: 'Enable search',\n })}\n onChange={(e) => {\n onChange({ target: { name: 'settings.searchable', value: e.target.checked } });\n }}\n onLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.on-label',\n defaultMessage: 'on',\n })}\n offLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.off-label',\n defaultMessage: 'off',\n })}\n name=\"settings.searchable\"\n checked={settings.searchable}\n />\n </Box>\n\n <Box width=\"100%\">\n <ToggleInput\n label={formatMessage({\n id: getTrad('form.Input.filters'),\n defaultMessage: 'Enable filters',\n })}\n onChange={(e) => {\n onChange({ target: { name: 'settings.filterable', value: e.target.checked } });\n }}\n onLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.on-label',\n defaultMessage: 'on',\n })}\n offLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.off-label',\n defaultMessage: 'off',\n })}\n name=\"settings.filterable\"\n checked={settings.filterable}\n />\n </Box>\n\n <Box width=\"100%\">\n <ToggleInput\n label={formatMessage({\n id: getTrad('form.Input.bulkActions'),\n defaultMessage: 'Enable bulk actions',\n })}\n onChange={(e) => {\n onChange({ target: { name: 'settings.bulkable', value: e.target.checked } });\n }}\n onLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.on-label',\n defaultMessage: 'on',\n })}\n offLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.off-label',\n defaultMessage: 'off',\n })}\n name=\"settings.bulkable\"\n checked={settings.bulkable}\n />\n </Box>\n </Flex>\n\n <Grid gap={4}>\n <GridItem s={12} col={6}>\n <Select\n label={formatMessage({\n id: getTrad('form.Input.pageEntries'),\n defaultMessage: 'Entries per page',\n })}\n hint={formatMessage({\n id: getTrad('form.Input.pageEntries.inputDescription'),\n defaultMessage:\n 'Note: You can override this value in the Collection Type settings page.',\n })}\n onChange={(value) => onChange({ target: { name: 'settings.pageSize', value } })}\n name=\"settings.pageSize\"\n value={modifiedData.settings.pageSize || ''}\n >\n {[10, 20, 50, 100].map((pageSize) => (\n <Option key={pageSize} value={pageSize}>\n {pageSize}\n </Option>\n ))}\n </Select>\n </GridItem>\n <GridItem s={12} col={3}>\n <Select\n label={formatMessage({\n id: getTrad('form.Input.defaultSort'),\n defaultMessage: 'Default sort attribute',\n })}\n onChange={(value) => onChange({ target: { name: 'settings.defaultSortBy', value } })}\n name=\"settings.defaultSortBy\"\n value={modifiedData.settings.defaultSortBy || ''}\n >\n {sortOptionsSorted.map(({ value, label }) => (\n <Option key={value} value={value}>\n {label}\n </Option>\n ))}\n </Select>\n </GridItem>\n <GridItem s={12} col={3}>\n <Select\n label={formatMessage({\n id: getTrad('form.Input.sort.order'),\n defaultMessage: 'Default sort order',\n })}\n onChange={(value) => onChange({ target: { name: 'settings.defaultSortOrder', value } })}\n name=\"settings.defaultSortOrder\"\n value={modifiedData.settings.defaultSortOrder || ''}\n >\n {['ASC', 'DESC'].map((order) => (\n <Option key={order} value={order}>\n {order}\n </Option>\n ))}\n </Select>\n </GridItem>\n </Grid>\n </Flex>\n );\n};\n\nSettings.defaultProps = {\n modifiedData: {},\n sortOptions: [],\n};\n\nSettings.propTypes = {\n contentTypeOptions: PropTypes.object.isRequired,\n modifiedData: PropTypes.object,\n onChange: PropTypes.func.isRequired,\n sortOptions: PropTypes.arrayOf(\n PropTypes.shape({\n value: PropTypes.string,\n label: PropTypes.string,\n }).isRequired\n ),\n};\n","import React from 'react';\n\nimport { Flex, Typography } from '@strapi/design-system';\nimport { pxToRem } from '@strapi/helper-plugin';\nimport { Cross, Drag, Pencil } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\n\nconst ActionBox = styled(Flex)`\n height: ${({ theme }) => theme.spaces[7]};\n\n &:last-child {\n padding: 0 ${({ theme }) => theme.spaces[3]};\n }\n`;\n\nconst DragButton = styled(ActionBox)`\n border-right: 1px solid\n ${({ theme, isSibling }) => (isSibling ? theme.colors.neutral150 : theme.colors.primary200)};\n\n svg {\n width: ${12 / 16}rem;\n height: ${12 / 16}rem;\n }\n`;\n\nconst FieldContainer = styled(Flex)`\n border: 1px solid\n ${({ theme, isSibling }) => (isSibling ? theme.colors.neutral150 : theme.colors.primary200)};\n\n svg {\n width: ${10 / 16}rem;\n height: ${10 / 16}rem;\n\n path {\n fill: ${({ theme, isSibling }) => (isSibling ? undefined : theme.colors.primary600)};\n }\n }\n`;\n\nconst TypographyMaxWidth = styled(Typography)`\n max-width: ${72 / 16}rem;\n`;\n\nexport function CardDragPreview({ labelField, transparent, isSibling }) {\n return (\n <FieldContainer\n background={isSibling ? 'neutral100' : 'primary100'}\n display=\"inline-flex\"\n gap={3}\n hasRadius\n justifyContent=\"space-between\"\n transparent={transparent}\n isSibling={isSibling}\n max-height={pxToRem(32)}\n maxWidth=\"min-content\"\n opacity={transparent ? 0 : 1}\n >\n <Flex gap={3}>\n <DragButton alignItems=\"center\" cursor=\"all-scroll\" padding={3}>\n <Drag />\n </DragButton>\n\n <TypographyMaxWidth\n textColor={isSibling ? undefined : 'primary600'}\n fontWeight=\"bold\"\n ellipsis\n >\n {labelField}\n </TypographyMaxWidth>\n </Flex>\n\n <Flex>\n <ActionBox alignItems=\"center\">\n <Pencil />\n </ActionBox>\n\n <ActionBox alignItems=\"center\">\n <Cross />\n </ActionBox>\n </Flex>\n </FieldContainer>\n );\n}\n\nCardDragPreview.defaultProps = {\n isSibling: false,\n transparent: false,\n};\n\nCardDragPreview.propTypes = {\n isSibling: PropTypes.bool,\n labelField: PropTypes.string.isRequired,\n transparent: PropTypes.bool,\n};\n","import React, { useEffect, useRef, useState } from 'react';\n\nimport { Box, Flex, Typography } from '@strapi/design-system';\nimport { Cross, Drag, Pencil } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useDrag, useDrop } from 'react-dnd';\nimport { getEmptyImage } from 'react-dnd-html5-backend';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport { getTrad, ItemTypes } from '../../../utils';\nimport { CardDragPreview } from '../../App/components/CardDragPreview';\n\nconst ActionButton = styled.button`\n display: flex;\n align-items: center;\n height: ${({ theme }) => theme.spaces[7]};\n\n &:last-child {\n padding: 0 ${({ theme }) => theme.spaces[3]};\n }\n`;\n\nconst DragButton = styled(ActionButton)`\n padding: 0 ${({ theme }) => theme.spaces[3]};\n border-right: 1px solid ${({ theme }) => theme.colors.neutral150};\n cursor: all-scroll;\n\n svg {\n width: ${12 / 16}rem;\n height: ${12 / 16}rem;\n }\n`;\n\nconst FieldContainer = styled(Flex)`\n max-height: ${32 / 16}rem;\n cursor: pointer;\n\n svg {\n width: ${10 / 16}rem;\n height: ${10 / 16}rem;\n\n path {\n fill: ${({ theme }) => theme.colors.neutral600};\n }\n }\n\n &:hover {\n background-color: ${({ theme }) => theme.colors.primary100};\n border-color: ${({ theme }) => theme.colors.primary200};\n\n svg {\n path {\n fill: ${({ theme }) => theme.colors.primary600};\n }\n }\n\n ${Typography} {\n color: ${({ theme }) => theme.colors.primary600};\n }\n\n ${DragButton} {\n border-right: 1px solid ${({ theme }) => theme.colors.primary200};\n }\n }\n`;\n\nconst FieldWrapper = styled(Box)`\n &:last-child {\n padding-right: ${({ theme }) => theme.spaces[3]};\n }\n`;\n\nconst DraggableCard = ({\n index,\n isDraggingSibling,\n labelField,\n onClickEditField,\n onMoveField,\n onRemoveField,\n name,\n setIsDraggingSibling,\n}) => {\n const { formatMessage } = useIntl();\n const dragRef = useRef(null);\n const dropRef = useRef(null);\n const [, forceRerenderAfterDnd] = useState(false);\n const editButtonRef = useRef();\n\n const handleClickEditRow = () => {\n if (editButtonRef.current) {\n editButtonRef.current.click();\n }\n };\n\n // TODO: this can be simplified a lot by using the useDragAndDrop() hook\n const [, drop] = useDrop({\n accept: ItemTypes.FIELD,\n hover(item, monitor) {\n if (!dropRef.current) {\n return;\n }\n const dragIndex = item.index;\n const hoverIndex = index;\n\n // Don't replace items with themselves\n if (dragIndex === hoverIndex) {\n return;\n }\n\n // Determine rectangle on screen\n const hoverBoundingRect = dropRef.current.getBoundingClientRect();\n // Get vertical middle\n const hoverMiddleX = (hoverBoundingRect.right - hoverBoundingRect.left) / 2;\n // Determine mouse position\n const clientOffset = monitor.getClientOffset();\n // Get pixels to the top\n const hoverClientX = clientOffset.x - hoverBoundingRect.left;\n\n // Only perform the move when the mouse has crossed half of the items height\n // When dragging downwards, only move when the cursor is below 50%\n // When dragging upwards, only move when the cursor is above 50%\n // Dragging downwards\n if (dragIndex > hoverIndex && hoverClientX > hoverMiddleX) {\n return;\n }\n // Dragging upwards\n if (dragIndex < hoverIndex && hoverClientX < hoverMiddleX) {\n return;\n }\n\n onMoveField(dragIndex, hoverIndex);\n\n item.index = hoverIndex;\n },\n });\n\n const [{ isDragging }, drag, preview] = useDrag({\n type: ItemTypes.FIELD,\n item() {\n return { index, labelField, name };\n },\n collect: (monitor) => ({\n isDragging: monitor.isDragging(),\n }),\n end() {\n setIsDraggingSibling(false);\n },\n });\n\n useEffect(() => {\n preview(getEmptyImage(), { captureDraggingState: false });\n }, [preview]);\n\n useEffect(() => {\n if (isDragging) {\n setIsDraggingSibling(true);\n }\n }, [isDragging, setIsDraggingSibling]);\n\n // Effect in order to force a rerender after reordering the components\n // Since we are removing the Accordion when doing the DnD we are losing the dragRef, therefore the replaced element cannot be dragged\n // anymore, this hack forces a rerender in order to apply the dragRef\n useEffect(() => {\n if (!isDraggingSibling) {\n forceRerenderAfterDnd((prev) => !prev);\n }\n }, [isDraggingSibling]);\n\n // Create the refs\n // We need 1 for the drop target\n // 1 for the drag target\n const refs = {\n dragRef: drag(dragRef),\n dropRef: drop(dropRef),\n };\n\n return (\n <FieldWrapper ref={refs ? refs.dropRef : null}>\n {isDragging && <CardDragPreview transparent labelField={labelField} />}\n {!isDragging && isDraggingSibling && <CardDragPreview isSibling labelField={labelField} />}\n\n {!isDragging && !isDraggingSibling && (\n <FieldContainer\n borderColor=\"neutral150\"\n background=\"neutral100\"\n hasRadius\n justifyContent=\"space-between\"\n onClick={handleClickEditRow}\n isDragging={isDragging}\n >\n <Flex gap={3}>\n <DragButton\n as=\"span\"\n aria-label={formatMessage(\n {\n id: getTrad('components.DraggableCard.move.field'),\n defaultMessage: 'Move {item}',\n },\n { item: labelField }\n )}\n onClick={(e) => e.stopPropagation()}\n ref={refs.dragRef}\n type=\"button\"\n >\n <Drag />\n </DragButton>\n <Typography fontWeight=\"bold\">{labelField}</Typography>\n </Flex>\n <Flex paddingLeft={3}>\n <ActionButton\n ref={editButtonRef}\n onClick={(e) => {\n e.stopPropagation();\n onClickEditField(name);\n }}\n aria-label={formatMessage(\n {\n id: getTrad('components.DraggableCard.edit.field'),\n defaultMessage: 'Edit {item}',\n },\n { item: labelField }\n )}\n type=\"button\"\n >\n <Pencil />\n </ActionButton>\n <ActionButton\n onClick={onRemoveField}\n data-testid={`delete-${name}`}\n aria-label={formatMessage(\n {\n id: getTrad('components.DraggableCard.delete.field'),\n defaultMessage: 'Delete {item}',\n },\n { item: labelField }\n )}\n type=\"button\"\n >\n <Cross />\n </ActionButton>\n </Flex>\n </FieldContainer>\n )}\n </FieldWrapper>\n );\n};\n\nDraggableCard.propTypes = {\n index: PropTypes.number.isRequired,\n isDraggingSibling: PropTypes.bool.isRequired,\n labelField: PropTypes.string.isRequired,\n name: PropTypes.string.isRequired,\n onClickEditField: PropTypes.func.isRequired,\n onMoveField: PropTypes.func.isRequired,\n onRemoveField: PropTypes.func.isRequired,\n setIsDraggingSibling: PropTypes.func.isRequired,\n};\n\nexport default DraggableCard;\n","import React, { useEffect, useRef, useState } from 'react';\n\nimport { Box, Flex, VisuallyHidden, Typography } from '@strapi/design-system';\nimport { Menu } from '@strapi/design-system/v2';\nimport { Plus } from '@strapi/icons';\nimport { PropTypes } from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport { getTrad } from '../../../utils';\n\nimport DraggableCard from './DraggableCard';\n\nexport const SortDisplayedFields = ({\n displayedFields,\n listRemainingFields,\n metadatas,\n onAddField,\n onClickEditField,\n onMoveField,\n onRemoveField,\n}) => {\n const { formatMessage } = useIntl();\n const [isDraggingSibling, setIsDraggingSibling] = useState(false);\n const [lastAction, setLastAction] = useState(null);\n const scrollableContainerRef = useRef();\n\n function handleAddField(...args) {\n setLastAction('add');\n onAddField(...args);\n }\n\n function handleRemoveField(...args) {\n setLastAction('remove');\n onRemoveField(...args);\n }\n\n useEffect(() => {\n if (lastAction === 'add' && scrollableContainerRef?.current) {\n scrollableContainerRef.current.scrollLeft = scrollableContainerRef.current.scrollWidth;\n }\n }, [displayedFields, lastAction]);\n\n return (\n <Flex alignItems=\"stretch\" direction=\"column\" gap={4}>\n <Typography variant=\"delta\" as=\"h2\">\n {formatMessage({\n id: getTrad('containers.SettingPage.view'),\n defaultMessage: 'View',\n })}\n </Typography>\n\n <Flex padding={4} borderColor=\"neutral300\" borderStyle=\"dashed\" borderWidth=\"1px\" hasRadius>\n <Box flex=\"1\" overflow=\"scroll hidden\" ref={scrollableContainerRef}>\n <Flex gap={3}>\n {displayedFields.map((field, index) => (\n <DraggableCard\n key={field}\n index={index}\n isDraggingSibling={isDraggingSibling}\n onMoveField={onMoveField}\n onClickEditField={onClickEditField}\n onRemoveField={(e) => handleRemoveField(e, index)}\n name={field}\n labelField={metadatas[field].list.label || field}\n setIsDraggingSibling={setIsDraggingSibling}\n />\n ))}\n </Flex>\n </Box>\n\n <Menu.Root>\n <Menu.Trigger\n paddingLeft={2}\n paddingRight={2}\n justifyContent=\"center\"\n endIcon={null}\n disabled={listRemainingFields.length <= 0}\n variant=\"tertiary\"\n >\n <VisuallyHidden as=\"span\">\n {formatMessage({\n id: getTrad('components.FieldSelect.label'),\n defaultMessage: 'Add a field',\n })}\n </VisuallyHidden>\n <Plus aria-hidden focusable={false} style={{ position: 'relative', top: 2 }} />\n </Menu.Trigger>\n <Menu.Content>\n {listRemainingFields.map((field) => (\n <Menu.Item key={field} onSelect={() => handleAddField(field)}>\n {metadatas[field].list.label || field}\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Root>\n </Flex>\n </Flex>\n );\n};\n\nSortDisplayedFields.propTypes = {\n displayedFields: PropTypes.array.isRequired,\n listRemainingFields: PropTypes.array.isRequired,\n metadatas: PropTypes.objectOf(\n PropTypes.shape({\n list: PropTypes.shape({\n label: PropTypes.string,\n }),\n })\n ).isRequired,\n onAddField: PropTypes.func.isRequired,\n onClickEditField: PropTypes.func.isRequired,\n onMoveField: PropTypes.func.isRequired,\n onRemoveField: PropTypes.func.isRequired,\n};\n","export const EXCLUDED_SORT_ATTRIBUTE_TYPES = [\n 'media',\n 'richtext',\n 'dynamiczone',\n 'relation',\n 'component',\n 'json',\n 'blocks',\n];\n","import produce from 'immer'; // current\nimport get from 'lodash/get';\nimport set from 'lodash/set';\n\nimport { arrayMoveItem } from '../../utils';\n\nconst initialState = {\n fieldForm: {},\n fieldToEdit: '',\n initialData: {},\n modifiedData: {},\n};\n\nconst reducer = (state = initialState, action) =>\n // eslint-disable-next-line consistent-return\n produce(state, (draftState) => {\n const layoutFieldListPath = ['modifiedData', 'layouts', 'list'];\n switch (action.type) {\n case 'ADD_FIELD': {\n const layoutFieldList = get(state, layoutFieldListPath, []);\n set(draftState, layoutFieldListPath, [...layoutFieldList, action.item]);\n break;\n }\n case 'MOVE_FIELD': {\n const layoutFieldList = get(state, layoutFieldListPath, []);\n const { originalIndex, atIndex } = action;\n set(\n draftState,\n layoutFieldListPath,\n arrayMoveItem(layoutFieldList, originalIndex, atIndex)\n );\n break;\n }\n case 'ON_CHANGE': {\n set(draftState, ['modifiedData', ...action.keys.split('.')], action.value);\n break;\n }\n case 'ON_CHANGE_FIELD_METAS': {\n set(draftState, ['fieldForm', action.name], action.value);\n break;\n }\n case 'REMOVE_FIELD': {\n const layoutFieldList = get(state, layoutFieldListPath, []);\n set(\n draftState,\n layoutFieldListPath,\n layoutFieldList.filter((_, index) => action.index !== index)\n );\n break;\n }\n case 'SET_FIELD_TO_EDIT': {\n const { fieldToEdit } = action;\n draftState.fieldToEdit = fieldToEdit;\n draftState.fieldForm.label = get(\n draftState,\n ['modifiedData', 'metadatas', fieldToEdit, 'list', 'label'],\n ''\n );\n draftState.fieldForm.sortable = get(\n draftState,\n ['modifiedData', 'metadatas', fieldToEdit, 'list', 'sortable'],\n ''\n );\n break;\n }\n case 'UNSET_FIELD_TO_EDIT': {\n draftState.fieldForm = {};\n draftState.fieldToEdit = '';\n break;\n }\n case 'SUBMIT_FIELD_FORM': {\n const fieldMetadataPath = ['modifiedData', 'metadatas', state.fieldToEdit, 'list'];\n set(draftState, [...fieldMetadataPath, 'label'], state.fieldForm.label);\n set(draftState, [...fieldMetadataPath, 'sortable'], state.fieldForm.sortable);\n break;\n }\n default:\n return draftState;\n }\n });\n\nexport default reducer;\nexport { initialState };\n","import * as React from 'react';\n\nimport {\n Button,\n ContentLayout,\n Divider,\n Flex,\n HeaderLayout,\n Layout,\n Main,\n} from '@strapi/design-system';\nimport { Link, useFetchClient, useNotification, useTracking } from '@strapi/helper-plugin';\nimport { ArrowLeft, Check } from '@strapi/icons';\nimport isEqual from 'lodash/isEqual';\nimport upperFirst from 'lodash/upperFirst';\nimport PropTypes from 'prop-types';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { useMutation } from 'react-query';\n\nimport ModelsContext from '../../contexts/ModelsContext';\nimport { usePluginsQueryParams } from '../../hooks';\nimport { checkIfAttributeIsDisplayable, getTrad } from '../../utils';\n\nimport { EditFieldForm } from './components/EditFieldForm';\nimport { Settings } from './components/Settings';\nimport { SortDisplayedFields } from './components/SortDisplayedFields';\nimport { EXCLUDED_SORT_ATTRIBUTE_TYPES } from './constants';\nimport reducer, { initialState } from './reducer';\n\nexport const ListSettingsView = ({ layout, slug }) => {\n const { put } = useFetchClient();\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const pluginsQueryParams = usePluginsQueryParams();\n const toggleNotification = useNotification();\n const { refetchData } = React.useContext(ModelsContext);\n const [{ fieldToEdit, fieldForm, initialData, modifiedData }, dispatch] = React.useReducer(\n reducer,\n initialState,\n () => ({\n ...initialState,\n initialData: layout,\n modifiedData: layout,\n })\n );\n\n const isModalFormOpen = Object.keys(fieldForm).length !== 0;\n\n const { attributes, options } = layout;\n const displayedFields = modifiedData.layouts.list;\n\n const goBackUrl = () => {\n const {\n settings: { pageSize, defaultSortBy, defaultSortOrder },\n kind,\n uid,\n } = initialData;\n const sort = `${defaultSortBy}:${defaultSortOrder}`;\n const goBackSearch = `${stringify(\n {\n page: 1,\n pageSize,\n sort,\n },\n { encode: false }\n )}${pluginsQueryParams ? `&${pluginsQueryParams}` : ''}`;\n\n return `/content-manager/${kind}/${uid}?${goBackSearch}`;\n };\n\n const handleChange = ({ target: { name, value } }) => {\n dispatch({\n type: 'ON_CHANGE',\n keys: name,\n value: name === 'settings.pageSize' ? parseInt(value, 10) : value,\n });\n };\n\n const { isLoading: isSubmittingForm, mutate } = useMutation(\n (body) => put(`/content-manager/content-types/${slug}/configuration`, body),\n {\n onSuccess() {\n trackUsage('didEditListSettings');\n refetchData();\n },\n onError() {\n toggleNotification({\n type: 'warning',\n message: { id: 'notification.error' },\n });\n },\n }\n );\n\n const handleAddField = (item) => {\n dispatch({\n type: 'ADD_FIELD',\n item,\n });\n };\n\n const handleRemoveField = (e, index) => {\n e.stopPropagation();\n\n if (displayedFields.length === 1) {\n toggleNotification({\n type: 'info',\n message: { id: getTrad('notification.info.minimumFields') },\n });\n } else {\n dispatch({\n type: 'REMOVE_FIELD',\n index,\n });\n }\n };\n\n const handleSubmit = (event) => {\n event.preventDefault();\n\n const { layouts, settings, metadatas } = modifiedData;\n\n mutate({\n layouts,\n settings,\n metadatas,\n });\n\n trackUsage('willSaveContentTypeLayout');\n };\n\n const handleClickEditField = (fieldToEdit) => {\n dispatch({\n type: 'SET_FIELD_TO_EDIT',\n fieldToEdit,\n });\n };\n\n const handleCloseModal = () => {\n dispatch({\n type: 'UNSET_FIELD_TO_EDIT',\n });\n };\n\n const handleSubmitFieldEdit = (e) => {\n e.preventDefault();\n dispatch({\n type: 'SUBMIT_FIELD_FORM',\n });\n handleCloseModal();\n };\n\n const handleChangeEditLabel = ({ target: { name, value } }) => {\n dispatch({\n type: 'ON_CHANGE_FIELD_METAS',\n name,\n value,\n });\n };\n\n const listRemainingFields = Object.entries(attributes)\n .filter(\n ([name, attribute]) =>\n checkIfAttributeIsDisplayable(attribute) && !displayedFields.includes(name)\n )\n .map(([name]) => name)\n .sort();\n\n const sortOptions = Object.entries(attributes)\n .filter(([, attribute]) => !EXCLUDED_SORT_ATTRIBUTE_TYPES.includes(attribute.type))\n .map(([name]) => ({\n value: name,\n label: layout.metadatas[name].list.label,\n }));\n\n const move = (originalIndex, atIndex) => {\n dispatch({\n type: 'MOVE_FIELD',\n originalIndex,\n atIndex,\n });\n };\n\n return (\n <Layout>\n <Main aria-busy={isSubmittingForm}>\n <form onSubmit={handleSubmit}>\n <HeaderLayout\n navigationAction={\n <Link startIcon={<ArrowLeft />} to={goBackUrl} id=\"go-back\">\n {formatMessage({ id: 'global.back', defaultMessage: 'Back' })}\n </Link>\n }\n primaryAction={\n <Button\n size=\"S\"\n startIcon={<Check />}\n disabled={isEqual(modifiedData, initialData)}\n type=\"submit\"\n >\n {formatMessage({ id: 'global.save', defaultMessage: 'Save' })}\n </Button>\n }\n subtitle={formatMessage({\n id: getTrad('components.SettingsViewWrapper.pluginHeader.description.list-settings'),\n defaultMessage: 'Define the settings of the list view.',\n })}\n title={formatMessage(\n {\n id: getTrad('components.SettingsViewWrapper.pluginHeader.title'),\n defaultMessage: 'Configure the view - {name}',\n },\n { name: upperFirst(modifiedData.info.displayName) }\n )}\n />\n <ContentLayout>\n <Flex\n alignItems=\"stretch\"\n background=\"neutral0\"\n direction=\"column\"\n gap={6}\n hasRadius\n shadow=\"tableShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={7}\n paddingRight={7}\n >\n <Settings\n contentTypeOptions={options}\n modifiedData={modifiedData}\n onChange={handleChange}\n sortOptions={sortOptions}\n />\n\n <Divider />\n\n <SortDisplayedFields\n listRemainingFields={listRemainingFields}\n displayedFields={displayedFields}\n onAddField={handleAddField}\n onClickEditField={handleClickEditField}\n onMoveField={move}\n onRemoveField={handleRemoveField}\n metadatas={modifiedData.metadatas}\n />\n </Flex>\n </ContentLayout>\n </form>\n\n {isModalFormOpen && (\n <EditFieldForm\n attributes={attributes}\n fieldForm={fieldForm}\n fieldToEdit={fieldToEdit}\n onChangeEditLabel={handleChangeEditLabel}\n onCloseModal={handleCloseModal}\n onSubmit={handleSubmitFieldEdit}\n type={attributes?.[fieldToEdit]?.type ?? 'text'}\n />\n )}\n </Main>\n </Layout>\n );\n};\n\nListSettingsView.propTypes = {\n layout: PropTypes.shape({\n uid: PropTypes.string.isRequired,\n settings: PropTypes.shape({\n bulkable: PropTypes.bool,\n defaultSortBy: PropTypes.string,\n defaultSortOrder: PropTypes.string,\n filterable: PropTypes.bool,\n pageSize: PropTypes.number,\n searchable: PropTypes.bool,\n }).isRequired,\n metadatas: PropTypes.object.isRequired,\n options: PropTypes.object.isRequired,\n attributes: PropTypes.objectOf(\n PropTypes.shape({\n type: PropTypes.string,\n })\n ).isRequired,\n }).isRequired,\n slug: PropTypes.string.isRequired,\n};\n","import {\n GET_DATA,\n GET_DATA_SUCCEEDED,\n ON_CHANGE_LIST_HEADERS,\n ON_RESET_LIST_HEADERS,\n RESET_PROPS,\n SET_LIST_LAYOUT,\n} from './constants';\n\nexport const getData = () => ({ type: GET_DATA });\n\nexport const getDataSucceeded = (pagination, data) => ({\n type: GET_DATA_SUCCEEDED,\n pagination,\n data,\n});\n\nexport const onResetListHeaders = () => ({ type: ON_RESET_LIST_HEADERS });\n\nexport function resetProps() {\n return { type: RESET_PROPS };\n}\n\nexport const setLayout = ({ components, contentType }) => {\n const { layouts } = contentType;\n\n return {\n contentType,\n components,\n displayedHeaders: layouts.list,\n type: SET_LIST_LAYOUT,\n };\n};\n\nexport const onChangeListHeaders = (target) => ({ type: ON_CHANGE_LIST_HEADERS, target });\n","import React from 'react';\n\nimport { Button } from '@strapi/design-system';\nimport { FilterListURLQuery, FilterPopoverURLQuery, useTracking } from '@strapi/helper-plugin';\nimport { Filter as FilterIcon } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nexport const Filter = ({ displayedFilters }) => {\n const [isVisible, setIsVisible] = React.useState(false);\n const { formatMessage } = useIntl();\n const buttonRef = React.useRef();\n const { trackUsage } = useTracking();\n\n const handleToggle = () => {\n if (!isVisible) {\n trackUsage('willFilterEntries');\n }\n setIsVisible((prev) => !prev);\n };\n\n return (\n <>\n <Button\n variant=\"tertiary\"\n ref={buttonRef}\n startIcon={<FilterIcon />}\n onClick={handleToggle}\n size=\"S\"\n >\n {formatMessage({ id: 'app.utils.filters', defaultMessage: 'Filters' })}\n </Button>\n {isVisible && (\n <FilterPopoverURLQuery\n displayedFilters={displayedFilters}\n isVisible={isVisible}\n onToggle={handleToggle}\n source={buttonRef}\n />\n )}\n <FilterListURLQuery filtersSchema={displayedFilters} />\n </>\n );\n};\n\nFilter.propTypes = {\n displayedFilters: PropTypes.arrayOf(\n PropTypes.shape({\n name: PropTypes.string.isRequired,\n metadatas: PropTypes.shape({ label: PropTypes.string }),\n fieldSchema: PropTypes.shape({ type: PropTypes.string }),\n })\n ).isRequired,\n};\n","import React from 'react';\n\nimport { Combobox, ComboboxOption } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport { useAdminUsers } from '../../../../hooks/useAdminUsers';\nimport { getDisplayName } from '../../../utils';\n\nexport const AdminUsersFilter = ({ value, onChange }) => {\n const { formatMessage } = useIntl();\n const { users, isLoading } = useAdminUsers();\n\n return (\n <Combobox\n value={value}\n aria-label={formatMessage({\n id: 'content-manager.components.Filters.usersSelect.label',\n defaultMessage: 'Search and select an user to filter',\n })}\n onChange={onChange}\n loading={isLoading}\n >\n {users.map((user) => {\n return (\n <ComboboxOption key={user.id} value={user.id.toString()}>\n {getDisplayName(user, formatMessage)}\n </ComboboxOption>\n );\n })}\n </Combobox>\n );\n};\n\nAdminUsersFilter.propTypes = {\n onChange: PropTypes.func.isRequired,\n value: PropTypes.string,\n};\n\nAdminUsersFilter.defaultProps = {\n value: '',\n};\n","import { useRBACProvider, findMatchingPermissions } from '@strapi/helper-plugin';\n\nimport { CREATOR_FIELDS } from '../constants/attributes';\n\nconst NOT_ALLOWED_FILTERS = [\n 'json',\n 'component',\n 'media',\n 'richtext',\n 'dynamiczone',\n 'password',\n 'blocks',\n];\nconst TIMESTAMPS = ['createdAt', 'updatedAt'];\n\nexport const useAllowedAttributes = (contentType, slug) => {\n const { allPermissions } = useRBACProvider();\n\n const readPermissionsForSlug = findMatchingPermissions(allPermissions, [\n {\n action: 'plugin::content-manager.explorer.read',\n subject: slug,\n },\n ]);\n\n const canReadAdminUsers =\n findMatchingPermissions(allPermissions, [\n {\n action: 'admin::users.read',\n subject: null,\n },\n ]).length > 0;\n\n const attributesWithReadPermissions = readPermissionsForSlug?.[0]?.properties?.fields ?? [];\n\n const allowedAttributes = attributesWithReadPermissions.filter((attr) => {\n const current = contentType?.attributes?.[attr] ?? {};\n\n if (!current.type) {\n return false;\n }\n\n if (NOT_ALLOWED_FILTERS.includes(current.type)) {\n return false;\n }\n\n return true;\n });\n\n return ['id', ...allowedAttributes, ...TIMESTAMPS, ...(canReadAdminUsers ? CREATOR_FIELDS : [])];\n};\n","import React from 'react';\n\nimport { Box } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\n\nimport { useInjectionZone } from '../../../shared/hooks/useInjectionZone';\n\nconst InjectionZoneList = ({ area, ...props }) => {\n const compos = useInjectionZone(area);\n\n if (!compos) {\n return null;\n }\n\n // TODO\n return (\n <ul>\n {compos.map((compo) => {\n const component = compo.Component(props);\n\n if (component) {\n return (\n <Box key={compo.name} padding={3} style={{ textAlign: 'center' }}>\n <compo.Component {...props} />\n </Box>\n );\n }\n\n return null;\n })}\n </ul>\n );\n};\n\nInjectionZoneList.propTypes = {\n area: PropTypes.string.isRequired,\n};\n\nexport default InjectionZoneList;\n","import React from 'react';\n\nimport { Button, Dialog, DialogBody, DialogFooter, Flex, Typography } from '@strapi/design-system';\nimport { ExclamationMarkCircle, Trash } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport InjectionZoneList from '../../../../components/InjectionZoneList';\n\nexport const ConfirmDialogDelete = ({\n isConfirmButtonLoading,\n isOpen,\n onToggleDialog,\n onConfirm,\n}) => {\n const { formatMessage } = useIntl();\n\n return (\n <Dialog\n onClose={onToggleDialog}\n title={formatMessage({\n id: 'app.components.ConfirmDialog.title',\n defaultMessage: 'Confirmation',\n })}\n labelledBy=\"confirmation\"\n describedBy=\"confirm-description\"\n isOpen={isOpen}\n >\n <DialogBody icon={<ExclamationMarkCircle />}>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n <Flex justifyContent=\"center\">\n <Typography id=\"confirm-description\">\n {formatMessage({\n id: 'components.popUpWarning.message',\n defaultMessage: 'Are you sure you want to delete this?',\n })}\n </Typography>\n </Flex>\n <Flex>\n <InjectionZoneList area=\"contentManager.listView.deleteModalAdditionalInfos\" />\n </Flex>\n </Flex>\n </DialogBody>\n <DialogFooter\n startAction={\n <Button onClick={onToggleDialog} variant=\"tertiary\">\n {formatMessage({\n id: 'app.components.Button.cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n }\n endAction={\n <Button\n onClick={onConfirm}\n variant=\"danger-light\"\n startIcon={<Trash />}\n id=\"confirm-delete\"\n loading={isConfirmButtonLoading}\n >\n {formatMessage({\n id: 'app.components.Button.confirm',\n defaultMessage: 'Confirm',\n })}\n </Button>\n }\n />\n </Dialog>\n );\n};\n\nConfirmDialogDelete.propTypes = {\n isConfirmButtonLoading: PropTypes.bool.isRequired,\n isOpen: PropTypes.bool.isRequired,\n onConfirm: PropTypes.func.isRequired,\n onToggleDialog: PropTypes.func.isRequired,\n};\n","import React from 'react';\n\nimport { BaseCheckbox, IconButton, Flex } from '@strapi/design-system';\nimport { useTracking, useTableContext, Table } from '@strapi/helper-plugin';\nimport { Trash, Duplicate, Pencil } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport { Link, useHistory } from 'react-router-dom';\n\nimport { usePluginsQueryParams } from '../../../../hooks';\nimport { ConfirmDialogDelete } from '../ConfirmDialogDelete';\n\nconst stopPropagation = (e) => e.stopPropagation();\n\n/* -------------------------------------------------------------------------------------------------\n * CheckboxDataCell\n * -----------------------------------------------------------------------------------------------*/\n\nconst CheckboxDataCell = ({ rowId, index }) => {\n const { selectedEntries, onSelectRow } = useTableContext();\n const { formatMessage } = useIntl();\n const isChecked = selectedEntries.findIndex((id) => id === rowId) !== -1;\n const ariaLabel = formatMessage(\n {\n id: 'app.component.table.select.one-entry',\n defaultMessage: `Select {target}`,\n },\n { target: index + 1 }\n );\n\n return (\n <BaseCheckbox\n aria-label={ariaLabel}\n checked={isChecked}\n onClick={stopPropagation}\n onChange={() => {\n onSelectRow({ name: rowId, value: !isChecked });\n }}\n />\n );\n};\n\nCheckboxDataCell.propTypes = {\n rowId: PropTypes.number.isRequired,\n index: PropTypes.number.isRequired,\n};\n\n/* -------------------------------------------------------------------------------------------------\n * EntityActionsDataCell\n * -----------------------------------------------------------------------------------------------*/\n\nconst EntityActionsDataCell = ({\n rowId,\n index,\n canCreate,\n canDelete,\n setIsConfirmDeleteRowOpen,\n handleCloneClick,\n}) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const { setSelectedEntries } = useTableContext();\n const pluginsQueryParams = usePluginsQueryParams();\n const {\n location: { pathname },\n } = useHistory();\n\n const itemLineText = formatMessage(\n {\n id: 'content-manager.components.ListViewTable.row-line',\n defaultMessage: 'item line {number}',\n },\n { number: index + 1 }\n );\n\n return (\n <Flex gap={1} justifyContent=\"end\" onClick={stopPropagation}>\n <IconButton\n forwardedAs={Link}\n onClick={() => {\n trackUsage('willEditEntryFromButton');\n }}\n to={{\n pathname: `${pathname}/${rowId}`,\n state: { from: pathname },\n search: pluginsQueryParams,\n }}\n label={formatMessage(\n { id: 'app.component.table.edit', defaultMessage: 'Edit {target}' },\n { target: itemLineText }\n )}\n noBorder\n >\n <Pencil />\n </IconButton>\n\n {canCreate && (\n <IconButton\n onClick={handleCloneClick(rowId)}\n label={formatMessage(\n {\n id: 'app.component.table.duplicate',\n defaultMessage: 'Duplicate {target}',\n },\n { target: itemLineText }\n )}\n noBorder\n >\n <Duplicate />\n </IconButton>\n )}\n\n {canDelete && (\n <IconButton\n onClick={() => {\n trackUsage('willDeleteEntryFromList');\n setSelectedEntries([rowId]);\n setIsConfirmDeleteRowOpen(true);\n }}\n label={formatMessage(\n { id: 'global.delete-target', defaultMessage: 'Delete {target}' },\n { target: itemLineText }\n )}\n noBorder\n >\n <Trash />\n </IconButton>\n )}\n </Flex>\n );\n};\n\nEntityActionsDataCell.defaultProps = {\n canCreate: false,\n canDelete: false,\n};\n\nEntityActionsDataCell.propTypes = {\n rowId: PropTypes.number.isRequired,\n index: PropTypes.number.isRequired,\n setIsConfirmDeleteRowOpen: PropTypes.func.isRequired,\n handleCloneClick: PropTypes.func.isRequired,\n canCreate: PropTypes.bool,\n canDelete: PropTypes.bool,\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Root\n * -----------------------------------------------------------------------------------------------*/\n\nconst Root = ({ children, onConfirmDelete, isConfirmDeleteRowOpen, setIsConfirmDeleteRowOpen }) => {\n const [isLoading, setIsLoading] = React.useState(false);\n const { selectedEntries, setSelectedEntries } = useTableContext();\n\n const handleConfirmDelete = async () => {\n try {\n setIsLoading(true);\n await onConfirmDelete(selectedEntries[0]);\n setIsConfirmDeleteRowOpen(false);\n setIsLoading(false);\n setSelectedEntries([]);\n } catch (error) {\n setIsLoading(false);\n setIsConfirmDeleteRowOpen(false);\n }\n };\n\n return (\n <Table.Body>\n {children}\n <ConfirmDialogDelete\n isConfirmButtonLoading={isLoading}\n onConfirm={handleConfirmDelete}\n onToggleDialog={() => setIsConfirmDeleteRowOpen(!isConfirmDeleteRowOpen)}\n isOpen={isConfirmDeleteRowOpen}\n />\n </Table.Body>\n );\n};\n\nRoot.propTypes = {\n children: PropTypes.node.isRequired,\n onConfirmDelete: PropTypes.func.isRequired,\n isConfirmDeleteRowOpen: PropTypes.bool.isRequired,\n setIsConfirmDeleteRowOpen: PropTypes.func.isRequired,\n};\n\nexport const Body = { CheckboxDataCell, EntityActionsDataCell, Root };\n","import { createSelector } from '@reduxjs/toolkit';\n\nimport { initialState } from './reducer';\n\n/**\n * Direct selector to the listView state domain\n */\nconst listViewDomain = () => (state) => state['content-manager_listView'] || initialState;\n\n/**\n * Other specific selectors\n */\n\n/**\n * Default selector used by listView\n */\n\nconst makeSelectListView = () =>\n createSelector(listViewDomain(), (substate) => {\n return substate;\n });\n\nconst selectDisplayedHeaders = (state) => {\n const { displayedHeaders } = state['content-manager_listView'];\n\n return displayedHeaders;\n};\n\nexport default makeSelectListView;\nexport { listViewDomain, selectDisplayedHeaders };\n","import * as React from 'react';\n\nimport { Button, Flex, Dialog, DialogBody, DialogFooter, Typography } from '@strapi/design-system';\nimport {\n useTableContext,\n useFetchClient,\n useNotification,\n useAPIErrorHandler,\n useQueryParams,\n} from '@strapi/helper-plugin';\nimport { Check, ExclamationMarkCircle } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport { useQuery } from 'react-query';\nimport { useSelector } from 'react-redux';\n\nimport InjectionZoneList from '../../../../../components/InjectionZoneList';\nimport { getTrad } from '../../../../../utils';\nimport { listViewDomain } from '../../../selectors';\n\nconst ConfirmBulkActionDialog = ({ onToggleDialog, isOpen, dialogBody, endAction }) => {\n const { formatMessage } = useIntl();\n\n return (\n <Dialog\n onClose={onToggleDialog}\n title={formatMessage({\n id: 'app.components.ConfirmDialog.title',\n defaultMessage: 'Confirmation',\n })}\n isOpen={isOpen}\n >\n <DialogBody icon={<ExclamationMarkCircle />}>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n {dialogBody}\n </Flex>\n </DialogBody>\n <DialogFooter\n startAction={\n <Button onClick={onToggleDialog} variant=\"tertiary\">\n {formatMessage({\n id: 'app.components.Button.cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n }\n endAction={endAction}\n />\n </Dialog>\n );\n};\n\nConfirmBulkActionDialog.propTypes = {\n isOpen: PropTypes.bool.isRequired,\n onToggleDialog: PropTypes.func.isRequired,\n dialogBody: PropTypes.node.isRequired,\n endAction: PropTypes.node.isRequired,\n};\n\nexport const confirmDialogsPropTypes = {\n isConfirmButtonLoading: PropTypes.bool.isRequired,\n isOpen: PropTypes.bool.isRequired,\n onConfirm: PropTypes.func.isRequired,\n onToggleDialog: PropTypes.func.isRequired,\n};\n\n/* -------------------------------------------------------------------------------------------------\n * BoldChunk\n * -----------------------------------------------------------------------------------------------*/\n\nconst BoldChunk = (chunks) => <Typography fontWeight=\"bold\">{chunks}</Typography>;\n\n/* -------------------------------------------------------------------------------------------------\n * ConfirmDialogPublishAll\n * -----------------------------------------------------------------------------------------------*/\n\nconst ConfirmDialogPublishAll = ({ isOpen, onToggleDialog, isConfirmButtonLoading, onConfirm }) => {\n const { formatMessage } = useIntl();\n const { get } = useFetchClient();\n const { selectedEntries } = useTableContext();\n const toggleNotification = useNotification();\n const { formatAPIError } = useAPIErrorHandler(getTrad);\n const {\n contentType: { uid: slug },\n } = useSelector(listViewDomain());\n const [{ query }] = useQueryParams();\n\n const {\n data: countDraftRelations,\n isLoading,\n isError,\n } = useQuery(\n ['content-manager', 'draft-relations', slug, selectedEntries],\n async () => {\n const {\n data: { data },\n } = await get(\n `/content-manager/collection-types/${slug}/actions/countManyEntriesDraftRelations`,\n {\n params: {\n ids: selectedEntries,\n locale: query?.plugins?.i18n?.locale,\n },\n }\n );\n\n return data;\n },\n {\n // The API is called everytime you select/deselect an entry, this check avoids us sending a query with bad data\n enabled: selectedEntries.length > 0,\n onError(error) {\n toggleNotification({ type: 'warning', message: formatAPIError(error) });\n },\n }\n );\n\n if (isError) {\n return null;\n }\n\n return (\n <ConfirmBulkActionDialog\n isOpen={isOpen && !isLoading}\n onToggleDialog={onToggleDialog}\n dialogBody={\n <>\n <Typography id=\"confirm-description\" textAlign=\"center\">\n {countDraftRelations > 0 &&\n formatMessage(\n {\n id: getTrad(`popUpwarning.warning.bulk-has-draft-relations.message`),\n defaultMessage:\n '<b>{count} {count, plural, one { relation } other { relations } } out of {entities} { entities, plural, one { entry } other { entries } } {count, plural, one { is } other { are } }</b> not published yet and might lead to unexpected behavior. ',\n },\n {\n b: BoldChunk,\n count: countDraftRelations,\n entities: selectedEntries.length,\n }\n )}\n {formatMessage({\n id: getTrad('popUpWarning.bodyMessage.contentType.publish.all'),\n defaultMessage: 'Are you sure you want to publish these entries?',\n })}\n </Typography>\n <InjectionZoneList area=\"contentManager.listView.publishModalAdditionalInfos\" />\n </>\n }\n endAction={\n <Button\n onClick={onConfirm}\n variant=\"secondary\"\n startIcon={<Check />}\n loading={isConfirmButtonLoading}\n >\n {formatMessage({\n id: 'app.utils.publish',\n defaultMessage: 'Publish',\n })}\n </Button>\n }\n />\n );\n};\n\nConfirmDialogPublishAll.propTypes = confirmDialogsPropTypes;\n\nexport { ConfirmDialogPublishAll, ConfirmBulkActionDialog };\n","import React from 'react';\n\nimport {\n Box,\n Button,\n Typography,\n ModalLayout,\n ModalHeader,\n ModalBody,\n ModalFooter,\n Tr,\n Td,\n IconButton,\n Flex,\n Icon,\n Tooltip,\n Loader,\n} from '@strapi/design-system';\nimport {\n useTableContext,\n Table,\n getYupInnerErrors,\n useFetchClient,\n useQueryParams,\n useNotification,\n} from '@strapi/helper-plugin';\nimport { Pencil, CrossCircle, CheckCircle } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport { useMutation, useQuery } from 'react-query';\nimport { useSelector } from 'react-redux';\nimport { Link, useHistory } from 'react-router-dom';\nimport styled from 'styled-components';\n\nimport { formatAPIErrors } from '../../../../../../utils/formatAPIErrors';\nimport { getTrad, createYupSchema } from '../../../../../utils';\nimport { listViewDomain } from '../../../selectors';\nimport { Body } from '../../Body';\nimport { ConfirmDialogPublishAll } from '../ConfirmBulkActionDialog';\n\nconst TypographyMaxWidth = styled(Typography)`\n max-width: 300px;\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * EntryValidationText\n * -----------------------------------------------------------------------------------------------*/\n\nconst EntryValidationText = ({ validationErrors, isPublished }) => {\n const { formatMessage } = useIntl();\n\n if (validationErrors) {\n const validationErrorsMessages = Object.entries(validationErrors)\n .map(([key, value]) =>\n formatMessage(\n { id: `${value.id}.withField`, defaultMessage: value.defaultMessage },\n { field: key }\n )\n )\n .join(' ');\n\n return (\n <Flex gap={2}>\n <Icon color=\"danger600\" as={CrossCircle} />\n <Tooltip description={validationErrorsMessages}>\n <TypographyMaxWidth textColor=\"danger600\" variant=\"omega\" fontWeight=\"semiBold\" ellipsis>\n {validationErrorsMessages}\n </TypographyMaxWidth>\n </Tooltip>\n </Flex>\n );\n }\n\n if (isPublished) {\n return (\n <Flex gap={2}>\n <Icon color=\"success600\" as={CheckCircle} />\n <Typography textColor=\"success600\" fontWeight=\"bold\">\n {formatMessage({\n id: 'content-manager.bulk-publish.already-published',\n defaultMessage: 'Already Published',\n })}\n </Typography>\n </Flex>\n );\n }\n\n return (\n <Flex gap={2}>\n <Icon color=\"success600\" as={CheckCircle} />\n <Typography>\n {formatMessage({\n id: 'app.utils.ready-to-publish',\n defaultMessage: 'Ready to publish',\n })}\n </Typography>\n </Flex>\n );\n};\n\nEntryValidationText.defaultProps = {\n validationErrors: undefined,\n isPublished: false,\n};\n\nEntryValidationText.propTypes = {\n validationErrors: PropTypes.shape({\n [PropTypes.string]: PropTypes.shape({\n id: PropTypes.string,\n defaultMessage: PropTypes.string,\n }),\n }),\n isPublished: PropTypes.bool,\n};\n\n/* -------------------------------------------------------------------------------------------------\n * SelectedEntriesTableContent\n * -----------------------------------------------------------------------------------------------*/\n\nconst SelectedEntriesTableContent = ({\n isPublishing,\n rowsToDisplay,\n entriesToPublish,\n validationErrors,\n}) => {\n const {\n location: { pathname },\n } = useHistory();\n const { formatMessage } = useIntl();\n\n // Get main field from list view layout\n const listViewStore = useSelector(listViewDomain());\n const { mainField } = listViewStore.contentType.settings;\n const shouldDisplayMainField = mainField != null && mainField !== 'id';\n\n const getItemLineText = (count) =>\n formatMessage(\n {\n id: 'content-manager.components.ListViewTable.row-line',\n defaultMessage: 'item line {number}',\n },\n { number: count + 1 }\n );\n\n return (\n <Table.Content>\n <Table.Head>\n <Table.HeaderCheckboxCell />\n <Table.HeaderCell fieldSchemaType=\"number\" label=\"id\" name=\"id\" />\n {shouldDisplayMainField && (\n <Table.HeaderCell fieldSchemaType=\"string\" label=\"name\" name=\"name\" />\n )}\n <Table.HeaderCell fieldSchemaType=\"string\" label=\"status\" name=\"status\" />\n </Table.Head>\n <Table.LoadingBody />\n <Table.Body>\n {rowsToDisplay.map((row, index) => (\n <Tr key={row.id}>\n <Td>\n <Body.CheckboxDataCell rowId={row.id} index={index} />\n </Td>\n <Td>\n <Typography>{row.id}</Typography>\n </Td>\n {shouldDisplayMainField && (\n <Td>\n <Typography>{row[mainField]}</Typography>\n </Td>\n )}\n <Td>\n {isPublishing && entriesToPublish.includes(row.id) ? (\n <Flex gap={2}>\n <Typography>\n {formatMessage({\n id: 'content-manager.success.record.publishing',\n defaultMessage: 'Publishing...',\n })}\n </Typography>\n <Loader small />\n </Flex>\n ) : (\n <EntryValidationText\n validationErrors={validationErrors[row.id]}\n isPublished={row.publishedAt !== null}\n />\n )}\n </Td>\n <Td>\n <IconButton\n forwardedAs={Link}\n to={{\n pathname: `${pathname}/${row.id}`,\n state: { from: pathname },\n }}\n label={formatMessage(\n { id: 'app.component.table.edit', defaultMessage: 'Edit {target}' },\n { target: getItemLineText(index) }\n )}\n noBorder\n target=\"_blank\"\n marginLeft=\"auto\"\n >\n <Pencil />\n </IconButton>\n </Td>\n </Tr>\n ))}\n </Table.Body>\n </Table.Content>\n );\n};\n\nSelectedEntriesTableContent.defaultProps = {\n isPublishing: false,\n rowsToDisplay: [],\n entriesToPublish: [],\n validationErrors: {},\n};\n\nSelectedEntriesTableContent.propTypes = {\n isPublishing: PropTypes.bool,\n rowsToDisplay: PropTypes.arrayOf(PropTypes.object),\n entriesToPublish: PropTypes.arrayOf(PropTypes.number),\n validationErrors: PropTypes.shape({\n [PropTypes.string]: PropTypes.shape({\n id: PropTypes.string,\n defaultMessage: PropTypes.string,\n }),\n }),\n};\n\n/* -------------------------------------------------------------------------------------------------\n * BoldChunk\n * -----------------------------------------------------------------------------------------------*/\n\nconst BoldChunk = (chunks) => <Typography fontWeight=\"bold\">{chunks}</Typography>;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectedEntriesModalContent\n * -----------------------------------------------------------------------------------------------*/\n\nconst SelectedEntriesModalContent = ({\n toggleModal,\n refetchModalData,\n setEntriesToFetch,\n setSelectedListViewEntries,\n validationErrors,\n}) => {\n const { formatMessage } = useIntl();\n const { selectedEntries, rows, onSelectRow, isLoading, isFetching } = useTableContext();\n const [isDialogOpen, setIsDialogOpen] = React.useState(false);\n const [rowsToDisplay, setRowsToDisplay] = React.useState([]);\n const [publishedCount, setPublishedCount] = React.useState(0);\n\n const entriesToPublish = rows\n .filter(({ id }) => selectedEntries.includes(id) && !validationErrors[id])\n .map(({ id }) => id);\n\n const { post } = useFetchClient();\n const toggleNotification = useNotification();\n const { contentType } = useSelector(listViewDomain());\n\n const selectedEntriesWithErrorsCount = rowsToDisplay.filter(\n ({ id }) => selectedEntries.includes(id) && validationErrors[id]\n ).length;\n const selectedEntriesPublished = rowsToDisplay.filter(\n ({ id, publishedAt }) => selectedEntries.includes(id) && publishedAt\n ).length;\n const selectedEntriesWithNoErrorsCount =\n selectedEntries.length - selectedEntriesWithErrorsCount - selectedEntriesPublished;\n\n const bulkPublishMutation = useMutation(\n (data) =>\n post(`/content-manager/collection-types/${contentType.uid}/actions/bulkPublish`, data),\n {\n onSuccess() {\n const update = rowsToDisplay.filter((row) => {\n if (entriesToPublish.includes(row.id)) {\n // Deselect the entries that have been published from the modal table\n onSelectRow({ name: row.id, value: false });\n }\n\n // Remove the entries that have been published from the table\n return !entriesToPublish.includes(row.id);\n });\n\n setRowsToDisplay(update);\n const publishedIds = update.map(({ id }) => id);\n // Set the parent's entries to fetch when clicking refresh\n setEntriesToFetch(publishedIds);\n // Deselect the entries that were published in the list view\n setSelectedListViewEntries(publishedIds);\n\n if (update.length === 0) {\n toggleModal();\n }\n\n toggleNotification({\n type: 'success',\n message: { id: 'content-manager.success.record.publish', defaultMessage: 'Published' },\n });\n },\n onError(error) {\n toggleNotification({\n type: 'warning',\n message: formatAPIErrors(error),\n });\n },\n }\n );\n\n const toggleDialog = () => setIsDialogOpen((prev) => !prev);\n\n const handleConfirmBulkPublish = async () => {\n toggleDialog();\n const { data } = await bulkPublishMutation.mutateAsync({ ids: entriesToPublish });\n setPublishedCount(data.count);\n };\n\n const getFormattedCountMessage = () => {\n if (publishedCount) {\n return formatMessage(\n {\n id: getTrad('containers.ListPage.selectedEntriesModal.publishedCount'),\n defaultMessage:\n '<b>{publishedCount}</b> {publishedCount, plural, =0 {entries} one {entry} other {entries}} published. <b>{withErrorsCount}</b> {withErrorsCount, plural, =0 {entries} one {entry} other {entries}} waiting for action.',\n },\n {\n publishedCount,\n withErrorsCount: selectedEntriesWithErrorsCount,\n b: BoldChunk,\n }\n );\n }\n\n return formatMessage(\n {\n id: getTrad('containers.ListPage.selectedEntriesModal.selectedCount'),\n defaultMessage:\n '<b>{alreadyPublishedCount}</b> {alreadyPublishedCount, plural, =0 {entries} one {entry} other {entries}} already published. <b>{readyToPublishCount}</b> {readyToPublishCount, plural, =0 {entries} one {entry} other {entries}} ready to publish. <b>{withErrorsCount}</b> {withErrorsCount, plural, =0 {entries} one {entry} other {entries}} waiting for action.',\n },\n {\n readyToPublishCount: selectedEntriesWithNoErrorsCount,\n withErrorsCount: selectedEntriesWithErrorsCount,\n alreadyPublishedCount: selectedEntriesPublished,\n b: BoldChunk,\n }\n );\n };\n\n React.useEffect(() => {\n // When the api responds with data\n if (rows.length > 0) {\n // Update the rows to display\n setRowsToDisplay(rows);\n }\n }, [rows]);\n\n return (\n <ModalLayout onClose={toggleModal} labelledBy=\"title\">\n <ModalHeader>\n <Typography fontWeight=\"bold\" textColor=\"neutral800\" as=\"h2\" id=\"title\">\n {formatMessage({\n id: getTrad('containers.ListPage.selectedEntriesModal.title'),\n defaultMessage: 'Publish entries',\n })}\n </Typography>\n </ModalHeader>\n <ModalBody>\n <Typography>{getFormattedCountMessage()}</Typography>\n <Box marginTop={5}>\n <SelectedEntriesTableContent\n isPublishing={bulkPublishMutation.isLoading}\n rowsToDisplay={rowsToDisplay}\n entriesToPublish={entriesToPublish}\n validationErrors={validationErrors}\n />\n </Box>\n </ModalBody>\n <ModalFooter\n startActions={\n <Button onClick={toggleModal} variant=\"tertiary\">\n {formatMessage({\n id: 'app.components.Button.cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n }\n endActions={\n <Flex gap={2}>\n <Button onClick={refetchModalData} variant=\"tertiary\" loading={isFetching}>\n {formatMessage({ id: 'app.utils.refresh', defaultMessage: 'Refresh' })}\n </Button>\n <Button\n onClick={toggleDialog}\n disabled={\n selectedEntries.length === 0 ||\n selectedEntries.length === selectedEntriesWithErrorsCount ||\n isLoading\n }\n loading={bulkPublishMutation.isLoading}\n >\n {formatMessage({ id: 'app.utils.publish', defaultMessage: 'Publish' })}\n </Button>\n </Flex>\n }\n />\n <ConfirmDialogPublishAll\n isOpen={isDialogOpen}\n onToggleDialog={toggleDialog}\n isConfirmButtonLoading={bulkPublishMutation.isLoading}\n onConfirm={handleConfirmBulkPublish}\n />\n </ModalLayout>\n );\n};\n\nSelectedEntriesModalContent.defaultProps = {\n validationErrors: {},\n};\n\nSelectedEntriesModalContent.propTypes = {\n toggleModal: PropTypes.func.isRequired,\n refetchModalData: PropTypes.func.isRequired,\n setEntriesToFetch: PropTypes.func.isRequired,\n setSelectedListViewEntries: PropTypes.func.isRequired,\n validationErrors: PropTypes.shape({\n [PropTypes.string]: PropTypes.shape({\n id: PropTypes.string,\n defaultMessage: PropTypes.string,\n }),\n }),\n};\n\n/* -------------------------------------------------------------------------------------------------\n * SelectedEntriesModal\n * -----------------------------------------------------------------------------------------------*/\n\nconst SelectedEntriesModal = ({ onToggle }) => {\n const {\n selectedEntries: selectedListViewEntries,\n setSelectedEntries: setSelectedListViewEntries,\n } = useTableContext();\n const { contentType, components } = useSelector(listViewDomain());\n // The child table will update this value based on the entries that were published\n const [entriesToFetch, setEntriesToFetch] = React.useState(selectedListViewEntries);\n // We want to keep the selected entries order same as the list view\n const [\n {\n query: { sort, plugins },\n },\n ] = useQueryParams();\n\n const queryParams = {\n page: 1,\n pageSize: entriesToFetch.length,\n sort,\n filters: {\n id: {\n $in: entriesToFetch,\n },\n },\n locale: plugins?.i18n?.locale,\n };\n\n const { get } = useFetchClient();\n\n const { data, isLoading, isFetching, refetch } = useQuery(\n ['entries', contentType.uid, queryParams],\n async () => {\n const { data } = await get(`content-manager/collection-types/${contentType.uid}`, {\n params: queryParams,\n });\n\n if (data.results) {\n const schema = createYupSchema(\n contentType,\n { components },\n { isDraft: false, isJSONTestDisabled: true }\n );\n const validationErrors = {};\n const rows = data.results.map((entry) => {\n try {\n schema.validateSync(entry, { abortEarly: false });\n\n return entry;\n } catch (e) {\n validationErrors[entry.id] = getYupInnerErrors(e);\n\n return entry;\n }\n });\n\n return { rows, validationErrors };\n }\n\n return {\n rows: [],\n validationErrors: {},\n };\n }\n );\n\n return (\n <Table.Root\n rows={data?.rows}\n defaultSelectedEntries={selectedListViewEntries}\n colCount={4}\n isLoading={isLoading}\n isFetching={isFetching}\n >\n <SelectedEntriesModalContent\n setSelectedListViewEntries={setSelectedListViewEntries}\n setEntriesToFetch={setEntriesToFetch}\n toggleModal={onToggle}\n refetchModalData={refetch}\n validationErrors={data?.validationErrors}\n />\n </Table.Root>\n );\n};\n\nSelectedEntriesModal.propTypes = {\n onToggle: PropTypes.func.isRequired,\n};\n\nexport default SelectedEntriesModal;\n","import * as React from 'react';\n\nimport { Button, Typography } from '@strapi/design-system';\nimport { useTracking, useTableContext } from '@strapi/helper-plugin';\nimport { Check, Trash } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport { useSelector } from 'react-redux';\n\nimport InjectionZoneList from '../../../../components/InjectionZoneList';\nimport { getTrad } from '../../../../utils';\nimport { listViewDomain } from '../../selectors';\n\nimport { ConfirmBulkActionDialog, confirmDialogsPropTypes } from './ConfirmBulkActionDialog';\nimport SelectedEntriesModal from './SelectedEntriesModal';\n\n/* -------------------------------------------------------------------------------------------------\n * ConfirmDialogUnpublishAll\n * -----------------------------------------------------------------------------------------------*/\n\nconst ConfirmDialogUnpublishAll = ({\n isOpen,\n onToggleDialog,\n isConfirmButtonLoading,\n onConfirm,\n}) => {\n const { formatMessage } = useIntl();\n\n return (\n <ConfirmBulkActionDialog\n isOpen={isOpen}\n onToggleDialog={onToggleDialog}\n dialogBody={\n <>\n <Typography id=\"confirm-description\" textAlign=\"center\">\n {formatMessage({\n id: getTrad('popUpWarning.bodyMessage.contentType.unpublish.all'),\n defaultMessage: 'Are you sure you want to unpublish these entries?',\n })}\n </Typography>\n <InjectionZoneList area=\"contentManager.listView.unpublishModalAdditionalInfos\" />\n </>\n }\n endAction={\n <Button\n onClick={onConfirm}\n variant=\"secondary\"\n startIcon={<Check />}\n loading={isConfirmButtonLoading}\n >\n {formatMessage({\n id: 'app.utils.unpublish',\n defaultMessage: 'Unpublish',\n })}\n </Button>\n }\n />\n );\n};\n\nConfirmDialogUnpublishAll.propTypes = confirmDialogsPropTypes;\n\n/* -------------------------------------------------------------------------------------------------\n * ConfirmDialogDeleteAll\n * -----------------------------------------------------------------------------------------------*/\n\nconst ConfirmDialogDeleteAll = ({ isOpen, onToggleDialog, isConfirmButtonLoading, onConfirm }) => {\n const { formatMessage } = useIntl();\n\n return (\n <ConfirmBulkActionDialog\n isOpen={isOpen}\n onToggleDialog={onToggleDialog}\n dialogBody={\n <>\n <Typography id=\"confirm-description\" textAlign=\"center\">\n {formatMessage({\n id: getTrad('popUpWarning.bodyMessage.contentType.delete.all'),\n defaultMessage: 'Are you sure you want to delete these entries?',\n })}\n </Typography>\n <InjectionZoneList area=\"contentManager.listView.deleteModalAdditionalInfos\" />\n </>\n }\n endAction={\n <Button\n onClick={onConfirm}\n variant=\"danger-light\"\n startIcon={<Trash />}\n id=\"confirm-delete\"\n loading={isConfirmButtonLoading}\n >\n {formatMessage({\n id: 'app.components.Button.confirm',\n defaultMessage: 'Confirm',\n })}\n </Button>\n }\n />\n );\n};\n\nConfirmDialogDeleteAll.propTypes = confirmDialogsPropTypes;\n\n/* -------------------------------------------------------------------------------------------------\n * BulkActionButtons\n * -----------------------------------------------------------------------------------------------*/\n\nconst BulkActionButtons = ({\n showPublish,\n showDelete,\n onConfirmDeleteAll,\n onConfirmUnpublishAll,\n refetchData,\n}) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const { data } = useSelector(listViewDomain());\n const { selectedEntries, setSelectedEntries } = useTableContext();\n\n const [isConfirmButtonLoading, setIsConfirmButtonLoading] = React.useState(false);\n const [isSelectedEntriesModalOpen, setIsSelectedEntriesModalOpen] = React.useState(false);\n const [dialogToOpen, setDialogToOpen] = React.useState(null);\n\n // Filters for Bulk actions\n const selectedEntriesObjects = data.filter((entry) => selectedEntries.includes(entry.id));\n const publishButtonIsShown =\n showPublish && selectedEntriesObjects.some((entry) => !entry.publishedAt);\n const unpublishButtonIsShown =\n showPublish && selectedEntriesObjects.some((entry) => entry.publishedAt);\n\n const toggleDeleteDialog = () => {\n if (dialogToOpen === 'delete') {\n setDialogToOpen(null);\n } else {\n setDialogToOpen('delete');\n trackUsage('willBulkDeleteEntries');\n }\n };\n\n const toggleUnpublishDialog = () => {\n if (dialogToOpen === 'unpublish') {\n setDialogToOpen(null);\n } else {\n setDialogToOpen('unpublish');\n trackUsage('willBulkUnpublishEntries');\n }\n };\n\n const handleBulkAction = async (confirmAction, toggleDialog) => {\n try {\n setIsConfirmButtonLoading(true);\n await confirmAction(selectedEntries);\n setIsConfirmButtonLoading(false);\n toggleDialog();\n setSelectedEntries([]);\n } catch (error) {\n setIsConfirmButtonLoading(false);\n toggleDialog();\n }\n };\n\n const handleBulkDelete = () => handleBulkAction(onConfirmDeleteAll, toggleDeleteDialog);\n const handleBulkUnpublish = () => handleBulkAction(onConfirmUnpublishAll, toggleUnpublishDialog);\n const handleToggleSelectedEntriesModal = () => {\n setIsSelectedEntriesModalOpen((prev) => {\n if (prev) {\n refetchData();\n }\n\n return !prev;\n });\n };\n\n return (\n <>\n {publishButtonIsShown && (\n <>\n <Button variant=\"tertiary\" onClick={handleToggleSelectedEntriesModal}>\n {formatMessage({ id: 'app.utils.publish', defaultMessage: 'Publish' })}\n </Button>\n {isSelectedEntriesModalOpen && (\n <SelectedEntriesModal onToggle={handleToggleSelectedEntriesModal} />\n )}\n </>\n )}\n {unpublishButtonIsShown && (\n <>\n <Button variant=\"tertiary\" onClick={toggleUnpublishDialog}>\n {formatMessage({ id: 'app.utils.unpublish', defaultMessage: 'Unpublish' })}\n </Button>\n <ConfirmDialogUnpublishAll\n isOpen={dialogToOpen === 'unpublish'}\n onToggleDialog={toggleUnpublishDialog}\n isConfirmButtonLoading={isConfirmButtonLoading}\n onConfirm={handleBulkUnpublish}\n />\n </>\n )}\n {showDelete && (\n <>\n <Button variant=\"danger-light\" onClick={toggleDeleteDialog}>\n {formatMessage({ id: 'global.delete', defaultMessage: 'Delete' })}\n </Button>\n <ConfirmDialogDeleteAll\n isOpen={dialogToOpen === 'delete'}\n onToggleDialog={toggleDeleteDialog}\n isConfirmButtonLoading={isConfirmButtonLoading}\n onConfirm={handleBulkDelete}\n />\n </>\n )}\n </>\n );\n};\n\nBulkActionButtons.defaultProps = {\n showPublish: false,\n showDelete: false,\n onConfirmDeleteAll() {},\n onConfirmUnpublishAll() {},\n refetchData() {},\n};\n\nBulkActionButtons.propTypes = {\n showPublish: PropTypes.bool,\n showDelete: PropTypes.bool,\n onConfirmDeleteAll: PropTypes.func,\n onConfirmUnpublishAll: PropTypes.func,\n refetchData: PropTypes.func,\n};\n\nexport default BulkActionButtons;\n","import parseISO from 'date-fns/parseISO';\nimport toString from 'lodash/toString';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nconst CellValue = ({ type, value }) => {\n const { formatDate, formatTime, formatNumber } = useIntl();\n let formattedValue = value;\n\n if (type === 'date') {\n formattedValue = formatDate(parseISO(value), { dateStyle: 'full' });\n }\n\n if (type === 'datetime') {\n formattedValue = formatDate(value, { dateStyle: 'full', timeStyle: 'short' });\n }\n\n if (type === 'time') {\n const [hour, minute, second] = value.split(':');\n const date = new Date();\n date.setHours(hour);\n date.setMinutes(minute);\n date.setSeconds(second);\n\n formattedValue = formatTime(date, {\n numeric: 'auto',\n style: 'short',\n });\n }\n\n if (['float', 'decimal'].includes(type)) {\n formattedValue = formatNumber(value, {\n // Should be kept in sync with the corresponding value\n // in the design-system/NumberInput: https://github.com/strapi/design-system/blob/main/packages/strapi-design-system/src/NumberInput/NumberInput.js#L53\n maximumFractionDigits: 20,\n });\n }\n\n if (['integer', 'biginteger'].includes(type)) {\n formattedValue = formatNumber(value, { maximumFractionDigits: 0 });\n }\n\n return toString(formattedValue);\n};\n\nCellValue.propTypes = {\n type: PropTypes.string.isRequired,\n value: PropTypes.any.isRequired,\n};\n\nexport default CellValue;\n","import React from 'react';\n\nimport { Flex, Typography } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\n\nconst Wrapper = styled(Flex)`\n position: relative;\n border-radius: 50%;\n width: 26px;\n height: 26px;\n border: 1px solid ${({ theme }) => theme.colors.neutral200};\n background: ${({ theme }) => theme.colors.neutral150};\n padding-left: 1px;\n\n span {\n line-height: 0.6rem;\n font-size: 0.6rem;\n }\n`;\n\nconst FileWrapper = ({ children, ...props }) => {\n return (\n <Wrapper justifyContent=\"center\" alignItems=\"center\" as=\"span\" {...props}>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {children}\n </Typography>\n </Wrapper>\n );\n};\n\nFileWrapper.propTypes = {\n children: PropTypes.string.isRequired,\n};\n\nexport default FileWrapper;\n","import React from 'react';\n\nimport { Avatar, Tooltip } from '@strapi/design-system';\nimport { getFileExtension, prefixFileUrlWithBackendUrl } from '@strapi/helper-plugin';\nimport PropTypes from 'prop-types';\n\nimport FileWrapper from './FileWrapper';\n\nconst Media = ({ url, mime, alternativeText, name, ext, formats }) => {\n const fileURL = prefixFileUrlWithBackendUrl(url);\n\n if (mime.includes('image')) {\n const thumbnail = formats?.thumbnail?.url || null;\n const mediaURL = prefixFileUrlWithBackendUrl(thumbnail) || fileURL;\n\n return <Avatar src={mediaURL} alt={alternativeText || name} preview />;\n }\n\n const fileExtension = getFileExtension(ext);\n const fileName = name.length > 100 ? `${name.substring(0, 100)}...` : name;\n\n return (\n <Tooltip description={fileName}>\n <FileWrapper>{fileExtension}</FileWrapper>\n </Tooltip>\n );\n};\n\nMedia.defaultProps = {\n alternativeText: null,\n formats: null,\n};\n\nMedia.propTypes = {\n alternativeText: PropTypes.string,\n ext: PropTypes.string.isRequired,\n formats: PropTypes.object,\n mime: PropTypes.string.isRequired,\n name: PropTypes.string.isRequired,\n url: PropTypes.string.isRequired,\n};\n\nexport default Media;\n","import React from 'react';\n\nimport { AvatarGroup } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\n\nimport Media from './Media';\nimport FileWrapper from './Media/FileWrapper';\n\nconst MultipleMedia = ({ value }) => {\n return (\n <AvatarGroup>\n {value.map((file, index) => {\n const key = `${file.id}${index}`;\n\n if (index === 3) {\n const remainingFiles = `+${value.length - 3}`;\n\n return (\n <FileWrapper key={key} preview={false}>\n {remainingFiles}\n </FileWrapper>\n );\n }\n\n if (index > 3) {\n return null;\n }\n\n return <Media key={key} {...file} />;\n })}\n </AvatarGroup>\n );\n};\n\nMultipleMedia.propTypes = {\n value: PropTypes.arrayOf(\n PropTypes.shape({\n alternativeText: PropTypes.string,\n ext: PropTypes.string.isRequired,\n formats: PropTypes.object,\n mime: PropTypes.string.isRequired,\n name: PropTypes.string.isRequired,\n url: PropTypes.string.isRequired,\n })\n ).isRequired,\n};\n\nexport default MultipleMedia;\n","import React, { useEffect, useState } from 'react';\n\nimport { Badge, Flex, Loader, Typography, useNotifyAT } from '@strapi/design-system';\nimport { Menu } from '@strapi/design-system/v2';\nimport { useFetchClient } from '@strapi/helper-plugin';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport { useQuery } from 'react-query';\nimport styled from 'styled-components';\n\nimport { getTrad } from '../../../../../utils';\nimport CellValue from '../CellValue';\n\nconst RelationMultiple = ({ fieldSchema, metadatas, name, entityId, value, contentType }) => {\n const { formatMessage } = useIntl();\n const { notifyStatus } = useNotifyAT();\n const [isOpen, setIsOpen] = useState(false);\n\n const { get } = useFetchClient();\n\n const { data, status } = useQuery(\n [fieldSchema.targetModel, entityId],\n async () => {\n const {\n data: { results, pagination },\n } = await get(\n `/content-manager/relations/${contentType.uid}/${entityId}/${name.split('.')[0]}`\n );\n\n return { results, pagination };\n },\n {\n enabled: isOpen,\n staleTime: 0,\n select: (data) => ({\n ...data,\n results: [...data.results].reverse(),\n }),\n }\n );\n\n useEffect(() => {\n if (data) {\n notifyStatus(\n formatMessage({\n id: getTrad('DynamicTable.relation-loaded'),\n defaultMessage: 'Relations have been loaded',\n })\n );\n }\n }, [data, formatMessage, notifyStatus]);\n\n return (\n <Menu.Root onOpenChange={(isOpen) => setIsOpen(isOpen)}>\n <MenuTrigger onClick={(e) => e.stopPropagation()}>\n <Flex gap={1} wrap=\"nowrap\">\n <Badge>{value.count}</Badge>\n {formatMessage(\n {\n id: 'content-manager.containers.ListPage.items',\n defaultMessage: '{number, plural, =0 {items} one {item} other {items}}',\n },\n { number: value.count }\n )}\n </Flex>\n </MenuTrigger>\n <Menu.Content>\n {status !== 'success' && (\n <Menu.Item disabled>\n <Loader small>\n {formatMessage({\n id: getTrad('ListViewTable.relation-loading'),\n defaultMessage: 'Relations are loading',\n })}\n </Loader>\n </Menu.Item>\n )}\n\n {status === 'success' && (\n <>\n {data?.results.map((entry) => (\n <Menu.Item key={entry.id} disabled>\n <TypographyMaxWidth ellipsis>\n <CellValue\n type={metadatas.mainField.schema.type}\n value={entry[metadatas.mainField.name] || entry.id}\n />\n </TypographyMaxWidth>\n </Menu.Item>\n ))}\n\n {data?.pagination.total > 10 && (\n <Menu.Item\n aria-disabled\n aria-label={formatMessage({\n id: getTrad('ListViewTable.relation-more'),\n defaultMessage: 'This relation contains more entities than displayed',\n })}\n >\n <Typography>…</Typography>\n </Menu.Item>\n )}\n </>\n )}\n </Menu.Content>\n </Menu.Root>\n );\n};\n\nRelationMultiple.propTypes = {\n contentType: PropTypes.shape({\n uid: PropTypes.string.isRequired,\n }).isRequired,\n fieldSchema: PropTypes.shape({\n relation: PropTypes.string,\n targetModel: PropTypes.string,\n type: PropTypes.string.isRequired,\n }).isRequired,\n metadatas: PropTypes.shape({\n mainField: PropTypes.shape({\n name: PropTypes.string.isRequired,\n schema: PropTypes.shape({ type: PropTypes.string.isRequired }).isRequired,\n }),\n }).isRequired,\n name: PropTypes.string.isRequired,\n entityId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\n value: PropTypes.object.isRequired,\n};\n\nconst TypographyMaxWidth = styled(Typography)`\n max-width: 500px;\n`;\n\n/**\n * TODO: this needs to be solved in the Design-System\n */\nconst MenuTrigger = styled(Menu.Trigger)`\n svg {\n width: ${6 / 16}rem;\n height: ${4 / 16}rem;\n }\n`;\n\nexport default RelationMultiple;\n","import React from 'react';\n\nimport { Typography } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\n\nimport CellValue from '../CellValue';\n\nconst TypographyMaxWidth = styled(Typography)`\n max-width: 500px;\n`;\n\nconst RelationSingle = ({ metadatas, value }) => {\n return (\n <TypographyMaxWidth textColor=\"neutral800\" ellipsis>\n <CellValue\n type={metadatas.mainField.schema.type}\n value={value[metadatas.mainField.name] ?? value.id}\n />\n </TypographyMaxWidth>\n );\n};\n\nRelationSingle.propTypes = {\n metadatas: PropTypes.shape({\n mainField: PropTypes.shape({\n name: PropTypes.string.isRequired,\n schema: PropTypes.shape({ type: PropTypes.string.isRequired }).isRequired,\n }),\n }).isRequired,\n value: PropTypes.object.isRequired,\n};\n\nexport default RelationSingle;\n","import React from 'react';\n\nimport { Badge, Typography } from '@strapi/design-system';\nimport { Menu } from '@strapi/design-system/v2';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport CellValue from '../CellValue';\n\nconst TypographyMaxWidth = styled(Typography)`\n max-width: 500px;\n`;\n\nconst RepeatableComponentCell = ({ value, metadatas }) => {\n const { formatMessage } = useIntl();\n const {\n mainField: { type: mainFieldType, name: mainFieldName },\n } = metadatas;\n\n return (\n <Menu.Root>\n <MenuTrigger onClick={(e) => e.stopPropagation()}>\n <Badge>{value.length}</Badge>{' '}\n {formatMessage(\n {\n id: 'content-manager.containers.ListPage.items',\n defaultMessage: '{number, plural, =0 {items} one {item} other {items}}',\n },\n { number: value.length }\n )}\n </MenuTrigger>\n <Menu.Content>\n {value.map((item) => (\n <Menu.Item key={item.id} disabled>\n <TypographyMaxWidth ellipsis>\n <CellValue type={mainFieldType} value={item[mainFieldName] || item.id} />\n </TypographyMaxWidth>\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Root>\n );\n};\n\nRepeatableComponentCell.propTypes = {\n metadatas: PropTypes.shape({\n mainField: PropTypes.shape({\n name: PropTypes.string,\n type: PropTypes.string,\n value: PropTypes.string,\n }),\n }).isRequired,\n value: PropTypes.array.isRequired,\n};\n\n/**\n * TODO: this needs to be solved in the Design-System\n */\nconst MenuTrigger = styled(Menu.Trigger)`\n svg {\n width: ${6 / 16}rem;\n height: ${4 / 16}rem;\n }\n`;\n\nexport default RepeatableComponentCell;\n","import React from 'react';\n\nimport { Tooltip, Typography } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\n\nimport CellValue from '../CellValue';\n\nconst TypographyMaxWidth = styled(Typography)`\n max-width: 250px;\n`;\n\nconst SingleComponentCell = ({ value, metadatas }) => {\n const { mainField } = metadatas;\n const content = value[mainField.name];\n\n return (\n <Tooltip label={content}>\n <TypographyMaxWidth textColor=\"neutral800\" ellipsis>\n <CellValue type={mainField.type} value={content} />\n </TypographyMaxWidth>\n </Tooltip>\n );\n};\n\nSingleComponentCell.propTypes = {\n metadatas: PropTypes.shape({\n mainField: PropTypes.shape({\n name: PropTypes.string,\n type: PropTypes.string,\n value: PropTypes.string,\n }),\n }).isRequired,\n value: PropTypes.object.isRequired,\n};\n\nexport default SingleComponentCell;\n","export default function isSingleRelation(type) {\n return ['oneToOne', 'manyToOne', 'oneToOneMorph'].includes(type);\n}\n","import isEmpty from 'lodash/isEmpty';\nimport isNumber from 'lodash/isNumber';\n\nimport isFieldTypeNumber from '../../../../../utils/isFieldTypeNumber';\n\nimport isSingleRelation from './isSingleRelation';\n\nexport default function hasContent(type, content, metadatas, fieldSchema) {\n if (type === 'component') {\n const {\n mainField: { name: mainFieldName, type: mainFieldType },\n } = metadatas;\n\n // Repeatable fields show the ID as fallback, in case the mainField\n // doesn't have any content\n if (fieldSchema?.repeatable) {\n return content.length > 0;\n }\n\n const value = content?.[mainFieldName];\n\n // relations, media ... show the id as fallback\n if (mainFieldName === 'id' && ![undefined, null].includes(value)) {\n return true;\n }\n\n /* The ID field reports itself as type `integer`, which makes it\n impossible to distinguish it from other number fields.\n\n Biginteger fields need to be treated as strings, as `isNumber`\n doesn't deal with them.\n */\n if (\n isFieldTypeNumber(mainFieldType) &&\n mainFieldType !== 'biginteger' &&\n mainFieldName !== 'id'\n ) {\n return isNumber(value);\n }\n\n return !isEmpty(value);\n }\n\n if (type === 'relation') {\n if (isSingleRelation(fieldSchema.relation)) {\n return !isEmpty(content);\n }\n\n return content?.count > 0;\n }\n\n /* \n Biginteger fields need to be treated as strings, as `isNumber`\n doesn't deal with them.\n */\n if (isFieldTypeNumber(type) && type !== 'biginteger') {\n return isNumber(content);\n }\n\n if (type === 'boolean') {\n return content !== null;\n }\n\n return !isEmpty(content);\n}\n","import React from 'react';\n\nimport { Tooltip, Typography } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\n\nimport CellValue from './CellValue';\nimport Media from './Media';\nimport MultipleMedias from './MultipleMedias';\nimport RelationMultiple from './RelationMultiple';\nimport RelationSingle from './RelationSingle';\nimport RepeatableComponent from './RepeatableComponent';\nimport SingleComponent from './SingleComponent';\nimport hasContent from './utils/hasContent';\nimport isSingleRelation from './utils/isSingleRelation';\n\nconst TypographyMaxWidth = styled(Typography)`\n max-width: 300px;\n`;\n\nconst CellContent = ({ content, fieldSchema, metadatas, name, rowId, contentType }) => {\n const { type } = fieldSchema;\n\n if (!hasContent(type, content, metadatas, fieldSchema)) {\n return <Typography textColor=\"neutral800\">-</Typography>;\n }\n\n switch (type) {\n case 'media':\n if (!fieldSchema.multiple) {\n return <Media {...content} />;\n }\n\n return <MultipleMedias value={content} />;\n\n case 'relation': {\n if (isSingleRelation(fieldSchema.relation)) {\n return <RelationSingle metadatas={metadatas} value={content} />;\n }\n\n return (\n <RelationMultiple\n fieldSchema={fieldSchema}\n metadatas={metadatas}\n value={content}\n name={name}\n entityId={rowId}\n contentType={contentType}\n />\n );\n }\n\n case 'component':\n if (fieldSchema.repeatable === true) {\n return <RepeatableComponent value={content} metadatas={metadatas} />;\n }\n\n return <SingleComponent value={content} metadatas={metadatas} />;\n\n case 'string':\n return (\n <Tooltip description={content}>\n <TypographyMaxWidth ellipsis textColor=\"neutral800\">\n <CellValue type={type} value={content} />\n </TypographyMaxWidth>\n </Tooltip>\n );\n\n default:\n return (\n <TypographyMaxWidth ellipsis textColor=\"neutral800\">\n <CellValue type={type} value={content} />\n </TypographyMaxWidth>\n );\n }\n};\n\nCellContent.defaultProps = {\n content: undefined,\n};\n\nCellContent.propTypes = {\n content: PropTypes.any,\n contentType: PropTypes.shape({\n uid: PropTypes.string.isRequired,\n }).isRequired,\n fieldSchema: PropTypes.shape({\n component: PropTypes.string,\n multiple: PropTypes.bool,\n type: PropTypes.string.isRequired,\n repeatable: PropTypes.bool,\n relation: PropTypes.string,\n }).isRequired,\n metadatas: PropTypes.object.isRequired,\n name: PropTypes.string.isRequired,\n rowId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\n};\n\nexport default CellContent;\n","import React from 'react';\n\nimport { Flex, BaseCheckbox, TextButton, Typography } from '@strapi/design-system';\nimport { useCollator, useTracking } from '@strapi/helper-plugin';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport { useDispatch, useSelector } from 'react-redux';\nimport styled from 'styled-components';\n\nimport { checkIfAttributeIsDisplayable } from '../../../../utils';\nimport { onChangeListHeaders, onResetListHeaders } from '../../actions';\nimport { selectDisplayedHeaders } from '../../selectors';\n\nconst ChackboxWrapper = styled(Flex)`\n :hover {\n background-color: ${(props) => props.theme.colors.primary100};\n }\n`;\n\nexport const FieldPicker = ({ layout }) => {\n const dispatch = useDispatch();\n const displayedHeaders = useSelector(selectDisplayedHeaders);\n const { trackUsage } = useTracking();\n const { formatMessage, locale } = useIntl();\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n\n const columns = Object.keys(layout.contentType.attributes)\n .filter((name) => checkIfAttributeIsDisplayable(layout.contentType.attributes[name]))\n .map((name) => ({\n name,\n label: layout.contentType.metadatas[name].list.label,\n }))\n .sort((a, b) => formatter.compare(a.label, b.label));\n\n const displayedHeaderKeys = displayedHeaders.map(({ name }) => name);\n\n const handleChange = (name) => {\n trackUsage('didChangeDisplayedFields');\n dispatch(onChangeListHeaders({ name, value: displayedHeaderKeys.includes(name) }));\n };\n\n const handleReset = () => {\n dispatch(onResetListHeaders());\n };\n\n return (\n <Flex as=\"fieldset\" direction=\"column\" alignItems=\"stretch\" gap={3}>\n <Flex justifyContent=\"space-between\">\n <Typography as=\"legend\" variant=\"pi\" fontWeight=\"bold\">\n {formatMessage({\n id: 'containers.ListPage.displayedFields',\n defaultMessage: 'Displayed fields',\n })}\n </Typography>\n\n <TextButton onClick={handleReset}>\n {formatMessage({\n id: 'app.components.Button.reset',\n defaultMessage: 'Reset',\n })}\n </TextButton>\n </Flex>\n\n <Flex direction=\"column\" alignItems=\"stretch\">\n {columns.map((header) => {\n const isActive = displayedHeaderKeys.includes(header.name);\n\n return (\n <ChackboxWrapper\n wrap=\"wrap\"\n gap={2}\n as=\"label\"\n background={isActive ? 'primary100' : 'transparent'}\n hasRadius\n padding={2}\n key={header.name}\n >\n <BaseCheckbox\n onChange={() => handleChange(header.name)}\n value={isActive}\n name={header.name}\n />\n <Typography fontSize={1}>{header.label}</Typography>\n </ChackboxWrapper>\n );\n })}\n </Flex>\n </Flex>\n );\n};\n\nFieldPicker.propTypes = {\n layout: PropTypes.shape({\n contentType: PropTypes.shape({\n attributes: PropTypes.object.isRequired,\n metadatas: PropTypes.object.isRequired,\n layouts: PropTypes.shape({\n list: PropTypes.array.isRequired,\n }).isRequired,\n options: PropTypes.object.isRequired,\n settings: PropTypes.object.isRequired,\n }).isRequired,\n }).isRequired,\n};\n","import React from 'react';\n\nimport { Flex, IconButton, Popover } from '@strapi/design-system';\nimport { CheckPermissions, LinkButton } from '@strapi/helper-plugin';\nimport { Cog, Layer } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport { useSelector } from 'react-redux';\n\nimport { selectAdminPermissions } from '../../../../../selectors';\nimport { FieldPicker } from '../FieldPicker';\n\nexport const ViewSettingsMenu = ({ slug, layout }) => {\n const [isVisible, setIsVisible] = React.useState(false);\n const cogButtonRef = React.useRef();\n const permissions = useSelector(selectAdminPermissions);\n const { formatMessage } = useIntl();\n\n const handleToggle = () => {\n setIsVisible((prev) => !prev);\n };\n\n return (\n <>\n <IconButton\n icon={<Cog />}\n label={formatMessage({\n id: 'components.ViewSettings.tooltip',\n defaultMessage: 'View Settings',\n })}\n ref={cogButtonRef}\n onClick={handleToggle}\n />\n {isVisible && (\n <Popover\n placement=\"bottom-end\"\n source={cogButtonRef}\n onDismiss={handleToggle}\n spacing={4}\n padding={3}\n >\n <Flex alignItems=\"stretch\" direction=\"column\" gap={3}>\n <CheckPermissions\n permissions={permissions.contentManager.collectionTypesConfigurations}\n >\n <LinkButton\n size=\"S\"\n startIcon={<Layer />}\n to={`${slug}/configurations/list`}\n variant=\"secondary\"\n >\n {formatMessage({\n id: 'app.links.configure-view',\n defaultMessage: 'Configure the view',\n })}\n </LinkButton>\n </CheckPermissions>\n\n <FieldPicker layout={layout} />\n </Flex>\n </Popover>\n )}\n </>\n );\n};\n\nViewSettingsMenu.propTypes = {\n slug: PropTypes.string.isRequired,\n layout: PropTypes.shape({\n contentType: PropTypes.shape({\n attributes: PropTypes.object.isRequired,\n metadatas: PropTypes.object.isRequired,\n layouts: PropTypes.shape({\n list: PropTypes.array.isRequired,\n }).isRequired,\n options: PropTypes.object.isRequired,\n settings: PropTypes.object.isRequired,\n }).isRequired,\n }).isRequired,\n};\n","import * as React from 'react';\n\nimport { bindActionCreators } from '@reduxjs/toolkit';\nimport {\n Main,\n ActionLayout,\n Button,\n ContentLayout,\n HeaderLayout,\n useNotifyAT,\n Flex,\n Td,\n Tr,\n Typography,\n Status,\n lightTheme,\n} from '@strapi/design-system';\nimport {\n findMatchingPermissions,\n NoPermissions,\n SearchURLQuery,\n useFetchClient,\n useFocusWhenNavigate,\n useQueryParams,\n useNotification,\n useRBACProvider,\n useTracking,\n Link,\n useAPIErrorHandler,\n useCollator,\n useStrapiApp,\n Table,\n PaginationURLQuery,\n PageSizeURLQuery,\n} from '@strapi/helper-plugin';\nimport { ArrowLeft, Plus } from '@strapi/icons';\nimport axios, { AxiosError } from 'axios';\nimport isEqual from 'lodash/isEqual';\nimport PropTypes from 'prop-types';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { useMutation } from 'react-query';\nimport { useDispatch } from 'react-redux';\nimport { useHistory, useLocation, Link as ReactRouterLink } from 'react-router-dom';\n\nimport { HOOKS } from '../../../constants';\nimport { useTypedSelector } from '../../../core/store/hooks';\nimport { useAdminUsers } from '../../../hooks/useAdminUsers';\nimport { useEnterprise } from '../../../hooks/useEnterprise';\nimport { InjectionZone } from '../../../shared/components/InjectionZone';\nimport { Filter } from '../../components/Filter';\nimport { AdminUsersFilter } from '../../components/Filter/CustomInputs/AdminUsersFilter';\nimport { CREATOR_FIELDS } from '../../constants/attributes';\nimport { useAllowedAttributes } from '../../hooks/useAllowedAttributes';\nimport { getTrad, getDisplayName } from '../../utils';\n\nimport * as Actions from './actions';\nimport { Body } from './components/Body';\nimport BulkActionButtons from './components/BulkActionButtons';\nimport CellContent from './components/CellContent';\nimport { ViewSettingsMenu } from './components/ViewSettingsMenu';\nimport makeSelectListView, { selectDisplayedHeaders } from './selectors';\nimport { buildValidGetParams } from './utils';\n\nconst { INJECT_COLUMN_IN_TABLE } = HOOKS;\nconst REVIEW_WORKFLOW_COLUMNS_CE = null;\nconst REVIEW_WORKFLOW_COLUMNS_CELL_CE = () => null;\nconst REVIEW_WORKFLOW_FILTER_CE = [];\nconst USER_FILTER_ATTRIBUTES = [...CREATOR_FIELDS, 'strapi_assignee'];\n\nfunction ListView({ canCreate, canDelete, canRead, canPublish, layout, slug }) {\n const dispatch = useDispatch();\n const { getData, getDataSucceeded } = React.useMemo(\n () =>\n bindActionCreators(\n { getData: Actions.getData, getDataSucceeded: Actions.getDataSucceeded },\n dispatch\n ),\n [dispatch]\n );\n const { pagination, isLoading, data } = useTypedSelector(makeSelectListView());\n const { total } = pagination;\n const { contentType } = layout;\n const {\n info,\n options,\n metadatas,\n settings: { bulkable: isBulkable, filterable: isFilterable, searchable: isSearchable },\n } = contentType;\n const [isConfirmDeleteRowOpen, setIsConfirmDeleteRowOpen] = React.useState(false);\n const toggleNotification = useNotification();\n const { trackUsage } = useTracking();\n const { allPermissions, refetchPermissions } = useRBACProvider();\n const trackUsageRef = React.useRef(trackUsage);\n const fetchPermissionsRef = React.useRef(refetchPermissions);\n const { notifyStatus } = useNotifyAT();\n const { formatAPIError } = useAPIErrorHandler(getTrad);\n const allowedAttributes = useAllowedAttributes(contentType, slug);\n const [{ query }] = useQueryParams();\n const { pathname } = useLocation();\n const { push } = useHistory();\n const { formatMessage, locale } = useIntl();\n const fetchClient = useFetchClient();\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n\n const selectedUserIds =\n query?.filters?.$and?.reduce((acc, filter) => {\n const [key, value] = Object.entries(filter)[0];\n const id = value.id?.$eq || value.id?.$ne;\n\n // TODO: strapi_assignee should not be in here and rather defined\n // in the ee directory.\n if (USER_FILTER_ATTRIBUTES.includes(key) && !acc.includes(id)) {\n acc.push(id);\n }\n\n return acc;\n }, []) ?? [];\n\n const { users, isLoading: isLoadingAdminUsers } = useAdminUsers(\n { filter: { id: { in: selectedUserIds } } },\n {\n // fetch the list of admin users only if the filter contains users and the\n // current user has permissions to display users\n enabled:\n selectedUserIds.length > 0 &&\n findMatchingPermissions(allPermissions, [\n {\n action: 'admin::users.read',\n subject: null,\n },\n ]).length > 0,\n }\n );\n\n useFocusWhenNavigate();\n\n const params = React.useMemo(() => buildValidGetParams(query), [query]);\n const pluginsQueryParams = stringify({ plugins: query.plugins }, { encode: false });\n\n const displayedAttributeFilters = allowedAttributes.map((name) => {\n const attribute = contentType.attributes[name];\n const { type, enum: options } = attribute;\n\n const trackedEvent = {\n name: 'didFilterEntries',\n properties: { useRelation: type === 'relation' },\n };\n\n const { mainField, label } = metadatas[name].list;\n\n const filter = {\n name,\n metadatas: { label: formatMessage({ id: label, defaultMessage: label }) },\n fieldSchema: { type, options, mainField },\n trackedEvent,\n };\n\n if (attribute.type === 'relation' && attribute.target === 'admin::user') {\n filter.metadatas = {\n ...filter.metadatas,\n customOperators: [\n {\n intlLabel: {\n id: 'components.FilterOptions.FILTER_TYPES.$eq',\n defaultMessage: 'is',\n },\n value: '$eq',\n },\n {\n intlLabel: {\n id: 'components.FilterOptions.FILTER_TYPES.$ne',\n defaultMessage: 'is not',\n },\n value: '$ne',\n },\n ],\n customInput: AdminUsersFilter,\n options: users.map((user) => ({\n label: getDisplayName(user, formatMessage),\n customValue: user.id.toString(),\n })),\n };\n\n filter.fieldSchema.mainField = {\n ...mainField,\n name: 'id',\n };\n }\n\n return filter;\n });\n\n const hasDraftAndPublish = options?.draftAndPublish ?? false;\n const hasReviewWorkflows = options?.reviewWorkflows ?? false;\n\n const reviewWorkflowColumns = useEnterprise(\n REVIEW_WORKFLOW_COLUMNS_CE,\n async () =>\n (\n await import(\n '../../../../../ee/admin/src/content-manager/pages/ListView/ReviewWorkflowsColumn/constants'\n )\n ).REVIEW_WORKFLOW_COLUMNS_EE,\n {\n enabled: !!options?.reviewWorkflows,\n }\n );\n const ReviewWorkflowsColumns = useEnterprise(\n REVIEW_WORKFLOW_COLUMNS_CELL_CE,\n async () => {\n const { ReviewWorkflowsStageEE, ReviewWorkflowsAssigneeEE } = await import(\n '../../../../../ee/admin/src/content-manager/pages/ListView/ReviewWorkflowsColumn'\n );\n\n return { ReviewWorkflowsStageEE, ReviewWorkflowsAssigneeEE };\n },\n {\n enabled: hasReviewWorkflows,\n }\n );\n\n const reviewWorkflowFilter = useEnterprise(\n REVIEW_WORKFLOW_FILTER_CE,\n async () =>\n (\n await import(\n '../../../../../ee/admin/src/content-manager/components/Filter/CustomInputs/ReviewWorkflows/constants'\n )\n ).REVIEW_WORKFLOW_FILTERS,\n {\n combine(ceFilters, eeFilters) {\n return [\n ...ceFilters,\n ...eeFilters\n .filter((eeFilter) => {\n // do not display the filter at all, if the current user does\n // not have permissions to read admin users\n if (eeFilter.name === 'strapi_assignee') {\n return (\n findMatchingPermissions(allPermissions, [\n {\n action: 'admin::users.read',\n subject: null,\n },\n ]).length > 0\n );\n }\n\n return true;\n })\n .map((eeFilter) => ({\n ...eeFilter,\n metadatas: {\n ...eeFilter.metadatas,\n // the stage filter needs the current content-type uid to fetch\n // the list of stages that can be assigned to this content-type\n ...(eeFilter.name === 'strapi_stage' ? { uid: contentType.uid } : {}),\n\n // translate the filter label\n label: formatMessage(eeFilter.metadatas.label),\n\n // `options` allows the filter-tag to render the displayname\n // of a user over a plain id\n options:\n eeFilter.name === 'strapi_assignee' &&\n users.map((user) => ({\n label: getDisplayName(user, formatMessage),\n customValue: user.id.toString(),\n })),\n },\n })),\n ];\n },\n\n defaultValue: [],\n\n // we have to wait for admin users to be fully loaded, because otherwise\n // combine is called to early and does not contain the latest state of\n // the users array\n enabled: hasReviewWorkflows && !isLoadingAdminUsers,\n }\n );\n\n const { post, del } = fetchClient;\n\n const bulkUnpublishMutation = useMutation(\n (data) =>\n post(`/content-manager/collection-types/${contentType.uid}/actions/bulkUnpublish`, data),\n {\n onSuccess() {\n toggleNotification({\n type: 'success',\n message: {\n id: 'content-manager.success.record.unpublish',\n defaultMessage: 'Unpublished',\n },\n });\n\n fetchData(`/content-manager/collection-types/${slug}`, { params });\n },\n onError(error) {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(error),\n });\n },\n }\n );\n\n // FIXME\n // Using a ref to avoid requests being fired multiple times on slug on change\n // We need it because the hook as mulitple dependencies so it may run before the permissions have checked\n const requestUrlRef = React.useRef('');\n /**\n * TODO: re-write all of this, it's a mess.\n */\n const fetchData = React.useCallback(\n async (endPoint, options) => {\n getData();\n\n try {\n const {\n data: { results, pagination: paginationResult },\n } = await fetchClient.get(endPoint, options);\n\n // If user enters a page number that doesn't exist, redirect him to the last page\n if (paginationResult.page > paginationResult.pageCount && paginationResult.pageCount > 0) {\n const query = {\n ...params,\n page: paginationResult.pageCount,\n };\n\n push({\n pathname,\n state: { from: pathname },\n search: stringify(query),\n });\n\n return;\n }\n\n notifyStatus(\n formatMessage(\n {\n id: getTrad('utils.data-loaded'),\n defaultMessage:\n '{number, plural, =1 {# entry has} other {# entries have}} successfully been loaded',\n },\n // Using the plural form\n { number: paginationResult.count }\n )\n );\n\n getDataSucceeded(paginationResult, results);\n } catch (err) {\n if (axios.isCancel(err)) {\n return;\n }\n\n const resStatus = err?.response?.status ?? null;\n\n if (resStatus === 403) {\n await fetchPermissionsRef.current();\n\n toggleNotification({\n type: 'info',\n message: { id: getTrad('permissions.not-allowed.update') },\n });\n\n push('/');\n\n return;\n }\n\n toggleNotification({\n type: 'warning',\n message: { id: getTrad('error.model.fetch') },\n });\n }\n },\n [\n formatMessage,\n getData,\n getDataSucceeded,\n notifyStatus,\n push,\n toggleNotification,\n fetchClient,\n params,\n pathname,\n ]\n );\n\n const handleConfirmDeleteAllData = React.useCallback(\n async (ids) => {\n try {\n await post(`/content-manager/collection-types/${slug}/actions/bulkDelete`, {\n ids,\n });\n\n fetchData(`/content-manager/collection-types/${slug}`, { params });\n\n trackUsageRef.current('didBulkDeleteEntries');\n } catch (err) {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(err),\n });\n }\n },\n [slug, toggleNotification, formatAPIError, post, fetchData, params]\n );\n\n const handleConfirmDeleteData = React.useCallback(\n async (idToDelete) => {\n try {\n await del(`/content-manager/collection-types/${slug}/${idToDelete}`);\n\n const requestUrl = `/content-manager/collection-types/${slug}`;\n fetchData(requestUrl, { params });\n\n toggleNotification({\n type: 'success',\n message: { id: getTrad('success.record.delete') },\n });\n } catch (err) {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(err),\n });\n }\n },\n [slug, toggleNotification, formatAPIError, del, fetchData, params]\n );\n\n const handleConfirmUnpublishAllData = (selectedEntries) => {\n return bulkUnpublishMutation.mutateAsync({ ids: selectedEntries });\n };\n\n React.useEffect(() => {\n const CancelToken = axios.CancelToken;\n const source = CancelToken.source();\n\n const shouldSendRequest = canRead;\n const requestUrl = `/content-manager/collection-types/${slug}`;\n\n if (shouldSendRequest && requestUrl.includes(requestUrlRef.current)) {\n fetchData(requestUrl, { cancelToken: source.token, params });\n }\n\n return () => {\n requestUrlRef.current = slug;\n\n source.cancel('Operation canceled by the user.');\n };\n }, [canRead, getData, slug, params, getDataSucceeded, fetchData]);\n\n const defaultHeaderLayoutTitle = formatMessage({\n id: getTrad('header.name'),\n defaultMessage: 'Content',\n });\n const headerLayoutTitle = formatMessage({\n id: info.displayName,\n defaultMessage: info.displayName || defaultHeaderLayoutTitle,\n });\n\n const { runHookWaterfall } = useStrapiApp();\n const displayedHeaders = useTypedSelector(selectDisplayedHeaders);\n\n const tableHeaders = React.useMemo(() => {\n const headers = runHookWaterfall(INJECT_COLUMN_IN_TABLE, {\n displayedHeaders,\n layout,\n });\n\n const formattedHeaders = headers.displayedHeaders.map((header) => {\n const { metadatas } = header;\n\n if (header.fieldSchema.type === 'relation') {\n const sortFieldValue = `${header.name}.${header.metadatas.mainField.name}`;\n\n return {\n ...header,\n metadatas: {\n ...metadatas,\n label: formatMessage({\n id: getTrad(`containers.ListPage.table-headers.${header.name}`),\n defaultMessage: metadatas.label,\n }),\n },\n name: sortFieldValue,\n };\n }\n\n return {\n ...header,\n metadatas: {\n ...metadatas,\n label: formatMessage({\n id: getTrad(`containers.ListPage.table-headers.${header.name}`),\n defaultMessage: metadatas.label,\n }),\n },\n };\n });\n\n if (hasDraftAndPublish) {\n formattedHeaders.push({\n key: '__published_at_temp_key__',\n name: 'publishedAt',\n fieldSchema: {\n type: 'custom',\n },\n metadatas: {\n label: formatMessage({\n id: getTrad(`containers.ListPage.table-headers.publishedAt`),\n defaultMessage: 'publishedAt',\n }),\n searchable: false,\n sortable: true,\n },\n });\n }\n\n if (reviewWorkflowColumns) {\n // Make sure the column header label is translated\n reviewWorkflowColumns.map((column) => {\n if (typeof column.metadatas.label !== 'string') {\n column.metadatas.label = formatMessage(column.metadatas.label);\n }\n\n return column;\n });\n\n formattedHeaders.push(...reviewWorkflowColumns);\n }\n\n return formattedHeaders;\n }, [\n runHookWaterfall,\n displayedHeaders,\n layout,\n reviewWorkflowColumns,\n hasDraftAndPublish,\n formatMessage,\n ]);\n\n const subtitle = canRead\n ? formatMessage(\n {\n id: getTrad('pages.ListView.header-subtitle'),\n defaultMessage: '{number, plural, =0 {# entries} one {# entry} other {# entries}} found',\n },\n { number: total }\n )\n : null;\n\n const getCreateAction = (props) =>\n canCreate ? (\n <Button\n {...props}\n forwardedAs={ReactRouterLink}\n onClick={() => {\n const trackerProperty = hasDraftAndPublish ? { status: 'draft' } : {};\n\n trackUsageRef.current('willCreateEntry', trackerProperty);\n }}\n to={{\n pathname: `${pathname}/create`,\n search: query.plugins ? pluginsQueryParams : '',\n }}\n startIcon={<Plus />}\n style={{ textDecoration: 'none' }}\n >\n {formatMessage({\n id: getTrad('HeaderLayout.button.label-add-entry'),\n defaultMessage: 'Create new entry',\n })}\n </Button>\n ) : null;\n\n /**\n *\n * @param {string} id\n * @returns void\n */\n const handleRowClick = (id) => () => {\n trackUsage('willEditEntryFromList');\n push({\n pathname: `${pathname}/${id}`,\n state: { from: pathname },\n search: pluginsQueryParams,\n });\n };\n\n const handleCloneClick = (id) => async () => {\n try {\n const { data } = await post(\n `/content-manager/collection-types/${contentType.uid}/auto-clone/${id}?${pluginsQueryParams}`\n );\n\n if ('id' in data) {\n push({\n pathname: `${pathname}/${data.id}`,\n state: { from: pathname },\n search: pluginsQueryParams,\n });\n }\n } catch (err) {\n if (err instanceof AxiosError) {\n push({\n pathname: `${pathname}/create/clone/${id}`,\n state: { from: pathname, error: formatAPIError(err) },\n search: pluginsQueryParams,\n });\n }\n }\n };\n\n // Add 1 column for the checkbox and 1 for the actions\n const colCount = tableHeaders.length + 2;\n\n // We have this function to refetch data when selected entries modal is closed\n const refetchData = () => {\n fetchData(`/content-manager/collection-types/${slug}`, { params });\n };\n\n // Block rendering until the review stage component is fully loaded in EE\n if (!ReviewWorkflowsColumns) {\n return null;\n }\n\n return (\n <Main aria-busy={isLoading}>\n <HeaderLayout\n primaryAction={getCreateAction()}\n subtitle={subtitle}\n title={headerLayoutTitle}\n navigationAction={\n <Link startIcon={<ArrowLeft />} to=\"/content-manager/\">\n {formatMessage({\n id: 'global.back',\n defaultMessage: 'Back',\n })}\n </Link>\n }\n />\n {!canRead && (\n <ActionLayout endActions={<InjectionZone area=\"contentManager.listView.actions\" />} />\n )}\n {canRead && (\n <ActionLayout\n endActions={\n <>\n <InjectionZone area=\"contentManager.listView.actions\" />\n <ViewSettingsMenu slug={slug} layout={layout} />\n </>\n }\n startActions={\n <>\n {isSearchable && (\n <SearchURLQuery\n label={formatMessage(\n { id: 'app.component.search.label', defaultMessage: 'Search for {target}' },\n { target: headerLayoutTitle }\n )}\n placeholder={formatMessage({\n id: 'global.search',\n defaultMessage: 'Search',\n })}\n trackedEvent=\"didSearch\"\n />\n )}\n {isFilterable && !isLoadingAdminUsers && (\n <Filter\n displayedFilters={[...displayedAttributeFilters, ...reviewWorkflowFilter].sort(\n (a, b) => formatter.compare(a.metadatas.label, b.metadatas.label)\n )}\n />\n )}\n </>\n }\n />\n )}\n <ContentLayout>\n {canRead ? (\n <Flex gap={4} direction=\"column\" alignItems=\"stretch\">\n <Table.Root rows={data} isLoading={isLoading} colCount={colCount}>\n <Table.ActionBar>\n <BulkActionButtons\n showPublish={canPublish && hasDraftAndPublish}\n showDelete={canDelete}\n onConfirmDeleteAll={handleConfirmDeleteAllData}\n onConfirmUnpublishAll={handleConfirmUnpublishAllData}\n refetchData={refetchData}\n />\n </Table.ActionBar>\n <Table.Content>\n <Table.Head>\n {/* Bulk action select all checkbox */}\n <Table.HeaderCheckboxCell />\n {/* Dynamic headers based on fields */}\n {tableHeaders.map(({ fieldSchema, key, name, metadatas }) => (\n <Table.HeaderCell\n key={key}\n name={name}\n fieldSchemaType={fieldSchema.type}\n relationFieldName={metadatas.mainField?.name}\n isSortable={metadatas.sortable}\n label={metadatas.label}\n />\n ))}\n {/* Visually hidden header for actions */}\n <Table.HeaderHiddenActionsCell />\n </Table.Head>\n {/* Loading content */}\n <Table.LoadingBody />\n {/* Empty content */}\n <Table.EmptyBody\n contentType={headerLayoutTitle}\n action={getCreateAction({ variant: 'secondary' })}\n />\n {/* Content */}\n <Body.Root\n onConfirmDelete={handleConfirmDeleteData}\n isConfirmDeleteRowOpen={isConfirmDeleteRowOpen}\n setIsConfirmDeleteRowOpen={setIsConfirmDeleteRowOpen}\n >\n {data.map((rowData, index) => {\n return (\n <Tr cursor=\"pointer\" key={rowData.id} onClick={handleRowClick(rowData.id)}>\n {/* Bulk action row checkbox */}\n <Td>\n <Body.CheckboxDataCell rowId={rowData.id} index={index} />\n </Td>\n {/* Field data */}\n {tableHeaders.map(({ key, name, cellFormatter, ...rest }) => {\n if (hasDraftAndPublish && name === 'publishedAt') {\n return (\n <Td key={key}>\n <Status\n width=\"min-content\"\n showBullet={false}\n variant={rowData.publishedAt ? 'success' : 'secondary'}\n size=\"S\"\n >\n <Typography\n fontWeight=\"bold\"\n textColor={`${\n rowData.publishedAt ? 'success' : 'secondary'\n }700`}\n >\n {formatMessage({\n id: getTrad(\n `containers.List.${\n rowData.publishedAt ? 'published' : 'draft'\n }`\n ),\n defaultMessage: rowData.publishedAt ? 'Published' : 'Draft',\n })}\n </Typography>\n </Status>\n </Td>\n );\n }\n\n if (hasReviewWorkflows) {\n if (name === 'strapi_stage') {\n return (\n <Td key={key}>\n {rowData.strapi_stage ? (\n <ReviewWorkflowsColumns.ReviewWorkflowsStageEE\n color={\n rowData.strapi_stage.color ?? lightTheme.colors.primary600\n }\n name={rowData.strapi_stage.name}\n />\n ) : (\n <Typography textColor=\"neutral800\">-</Typography>\n )}\n </Td>\n );\n }\n if (name === 'strapi_assignee') {\n return (\n <Td key={key}>\n {rowData.strapi_assignee ? (\n <ReviewWorkflowsColumns.ReviewWorkflowsAssigneeEE\n user={rowData.strapi_assignee}\n />\n ) : (\n <Typography textColor=\"neutral800\">-</Typography>\n )}\n </Td>\n );\n }\n }\n\n if (['createdBy', 'updatedBy'].includes(name.split('.')[0])) {\n // Display the users full name\n // Some entries doesn't have a user assigned as creator/updater (ex: entries created through content API)\n // In this case, we display a dash\n return (\n <Td key={key}>\n <Typography textColor=\"neutral800\">\n {rowData[name.split('.')[0]]\n ? getDisplayName(rowData[name.split('.')[0]], formatMessage)\n : '-'}\n </Typography>\n </Td>\n );\n }\n\n if (typeof cellFormatter === 'function') {\n return (\n <Td key={key}>{cellFormatter(rowData, { key, name, ...rest })}</Td>\n );\n }\n\n return (\n <Td key={key}>\n <CellContent\n content={rowData[name.split('.')[0]]}\n name={name}\n contentType={layout.contentType}\n {...rest}\n rowId={rowData.id}\n />\n </Td>\n );\n })}\n {/* Actions: edit, duplicate, delete */}\n {(canDelete || canPublish) && isBulkable && (\n <Td>\n <Body.EntityActionsDataCell\n rowId={rowData.id}\n index={index}\n setIsConfirmDeleteRowOpen={setIsConfirmDeleteRowOpen}\n canCreate={canCreate}\n canDelete={canDelete}\n handleCloneClick={handleCloneClick}\n />\n </Td>\n )}\n </Tr>\n );\n })}\n </Body.Root>\n </Table.Content>\n </Table.Root>\n <Flex alignItems=\"flex-end\" justifyContent=\"space-between\">\n <PageSizeURLQuery trackedEvent=\"willChangeNumberOfEntriesPerPage\" />\n <PaginationURLQuery pagination={{ pageCount: pagination?.pageCount || 1 }} />\n </Flex>\n </Flex>\n ) : (\n <NoPermissions />\n )}\n </ContentLayout>\n </Main>\n );\n}\n\nListView.propTypes = {\n canCreate: PropTypes.bool.isRequired,\n canDelete: PropTypes.bool.isRequired,\n canRead: PropTypes.bool.isRequired,\n canPublish: PropTypes.bool.isRequired,\n layout: PropTypes.exact({\n components: PropTypes.object.isRequired,\n contentType: PropTypes.shape({\n uid: PropTypes.string.isRequired,\n attributes: PropTypes.object.isRequired,\n metadatas: PropTypes.object.isRequired,\n info: PropTypes.shape({ displayName: PropTypes.string.isRequired }).isRequired,\n layouts: PropTypes.shape({\n list: PropTypes.array.isRequired,\n }).isRequired,\n options: PropTypes.object.isRequired,\n settings: PropTypes.object.isRequired,\n }).isRequired,\n }).isRequired,\n slug: PropTypes.string.isRequired,\n};\n\nexport default React.memo(ListView, isEqual);\n","import React, { memo, useMemo } from 'react';\n\nimport { difference, LoadingIndicatorPage, useRBAC } from '@strapi/helper-plugin';\nimport PropTypes from 'prop-types';\n\nimport { generatePermissionsObject } from '../../utils';\nimport ListView from '../ListView';\n\nconst Permissions = (props) => {\n const viewPermissions = useMemo(() => generatePermissionsObject(props.slug), [props.slug]);\n\n const { isLoading, allowedActions } = useRBAC(viewPermissions, props.permissions);\n\n if (isLoading) {\n return <LoadingIndicatorPage />;\n }\n\n return <ListView {...props} {...allowedActions} />;\n};\n\nPermissions.defaultProps = {\n permissions: [],\n};\n\nPermissions.propTypes = {\n permissions: PropTypes.array,\n slug: PropTypes.string.isRequired,\n};\n\n// This avoids the components to rerender on params change causing multiple requests to be fired\nexport default memo(Permissions, (prev, next) => {\n const differenceBetweenRerenders = difference(prev, next);\n // Here the submenu is using a navlink which doesn't support the state\n // When we navigate from the EV to the LV using the menu the state is lost at some point\n // and this causes the component to rerender twice and firing requests twice\n // this hack prevents this\n // TODO: at some point we will need to refactor the LV and migrate to react-query\n const propNamesThatHaveChanged = Object.keys(differenceBetweenRerenders).filter(\n (propName) => propName !== 'state'\n );\n\n return propNamesThatHaveChanged.length > 0;\n});\n","import React, { useEffect } from 'react';\n\nimport { useQueryParams } from '@strapi/helper-plugin';\nimport PropTypes from 'prop-types';\nimport { useDispatch } from 'react-redux';\nimport { useHistory } from 'react-router-dom';\n\nimport { useFindRedirectionLink, useSyncRbac } from '../../hooks';\nimport { resetProps, setLayout } from '../ListView/actions';\n\nimport Permissions from './Permissions';\n\nconst ListViewLayout = ({ layout, ...props }) => {\n const dispatch = useDispatch();\n const { replace } = useHistory();\n const [{ query, rawQuery }] = useQueryParams();\n const { permissions, isValid: isValidPermissions } = useSyncRbac(query, props.slug, 'listView');\n const redirectionLink = useFindRedirectionLink(props.slug);\n\n useEffect(() => {\n if (!rawQuery) {\n replace(redirectionLink);\n }\n }, [rawQuery, replace, redirectionLink]);\n\n useEffect(() => {\n dispatch(setLayout(layout));\n }, [dispatch, layout]);\n\n useEffect(() => {\n return () => {\n dispatch(resetProps());\n };\n }, [dispatch]);\n\n if (!isValidPermissions) {\n return null;\n }\n\n return <Permissions {...props} layout={layout} permissions={permissions} />;\n};\n\nListViewLayout.propTypes = {\n layout: PropTypes.exact({\n components: PropTypes.object.isRequired,\n contentType: PropTypes.shape({\n attributes: PropTypes.object.isRequired,\n metadatas: PropTypes.object.isRequired,\n layouts: PropTypes.shape({\n list: PropTypes.array.isRequired,\n }).isRequired,\n options: PropTypes.object.isRequired,\n settings: PropTypes.object.isRequired,\n pluginOptions: PropTypes.object,\n }).isRequired,\n }).isRequired,\n slug: PropTypes.string.isRequired,\n};\n\nexport default ListViewLayout;\n","import React from 'react';\n\nimport { Box } from '@strapi/design-system';\nimport { AnErrorOccurred } from '@strapi/helper-plugin';\n\nconst ErrorFallback = () => {\n return (\n <Box padding={8}>\n <AnErrorOccurred />\n </Box>\n );\n};\n\nexport default ErrorFallback;\n","import React, { memo, useMemo } from 'react';\n\nimport { CheckPagePermissions, LoadingIndicatorPage } from '@strapi/helper-plugin';\nimport PropTypes from 'prop-types';\nimport { ErrorBoundary } from 'react-error-boundary';\nimport { useSelector } from 'react-redux';\nimport { Route, Switch } from 'react-router-dom';\n\nimport { selectAdminPermissions } from '../../../selectors';\nimport { ContentTypeLayoutContext } from '../../contexts';\nimport { useFetchContentTypeLayout } from '../../hooks';\nimport { formatLayoutToApi } from '../../utils';\nimport EditSettingsView from '../EditSettingsView';\nimport EditViewLayoutManager from '../EditViewLayoutManager';\nimport { ListSettingsView } from '../ListSettingsView';\nimport ListViewLayout from '../ListViewLayoutManager';\n\nimport ErrorFallback from './components/ErrorFallback';\n\nconst CollectionTypeRecursivePath = ({\n match: {\n params: { slug },\n url,\n },\n}) => {\n const permissions = useSelector(selectAdminPermissions);\n const { isLoading, layout, updateLayout } = useFetchContentTypeLayout(slug);\n\n const { rawContentTypeLayout, rawComponentsLayouts } = useMemo(() => {\n let rawContentTypeLayout = {};\n let rawComponentsLayouts = {};\n\n if (layout.contentType) {\n rawContentTypeLayout = formatLayoutToApi(layout.contentType);\n }\n\n if (layout.components) {\n rawComponentsLayouts = Object.keys(layout.components).reduce((acc, current) => {\n acc[current] = formatLayoutToApi(layout.components[current]);\n\n return acc;\n }, {});\n }\n\n return { rawContentTypeLayout, rawComponentsLayouts };\n }, [layout]);\n\n const uid = layout?.contentType?.uid ?? null;\n\n // This statement is needed in order to prevent the CollectionTypeFormWrapper effects clean up phase to be run twice.\n // What can happen is that when navigating from one entry to another the cleanup phase of the fetch data effect is run twice : once when\n // unmounting, once when the url changes.\n // Since it can happen that the layout there's a delay when the layout is being fetched and the url changes adding the uid ! == slug\n // statement prevent the component from being mounted and unmounted twice.\n if (uid !== slug || isLoading) {\n return <LoadingIndicatorPage />;\n }\n\n const renderRoute = (\n {\n location: { state },\n history: { goBack },\n match: {\n params: { id, origin },\n },\n },\n Component\n ) => {\n return (\n <Component\n slug={slug}\n layout={layout}\n state={state}\n goBack={goBack}\n id={id}\n origin={origin}\n />\n );\n };\n\n const routes = [\n { path: 'create/clone/:origin', comp: EditViewLayoutManager },\n { path: 'create', comp: EditViewLayoutManager },\n { path: ':id', comp: EditViewLayoutManager },\n { path: '', comp: ListViewLayout },\n ].map(({ path, comp }) => (\n <Route key={path} path={`${url}/${path}`} render={(props) => renderRoute(props, comp)} />\n ));\n\n return (\n <ErrorBoundary FallbackComponent={ErrorFallback}>\n <ContentTypeLayoutContext.Provider value={layout}>\n <Switch>\n <Route path={`${url}/configurations/list`}>\n <CheckPagePermissions\n permissions={permissions.contentManager.collectionTypesConfigurations}\n >\n <ListSettingsView\n layout={rawContentTypeLayout}\n slug={slug}\n updateLayout={updateLayout}\n />\n </CheckPagePermissions>\n </Route>\n <Route path={`${url}/configurations/edit`}>\n <CheckPagePermissions\n permissions={permissions.contentManager.collectionTypesConfigurations}\n >\n <EditSettingsView\n components={rawComponentsLayouts}\n isContentTypeView\n mainLayout={rawContentTypeLayout}\n slug={slug}\n updateLayout={updateLayout}\n />\n </CheckPagePermissions>\n </Route>\n {routes}\n </Switch>\n </ContentTypeLayoutContext.Provider>\n </ErrorBoundary>\n );\n};\n\nCollectionTypeRecursivePath.propTypes = {\n match: PropTypes.shape({\n url: PropTypes.string.isRequired,\n params: PropTypes.shape({\n slug: PropTypes.string.isRequired,\n }).isRequired,\n }).isRequired,\n};\n\nexport default memo(CollectionTypeRecursivePath);\n","import React, { memo, useEffect, useMemo, useReducer } from 'react';\n\nimport { CheckPagePermissions, LoadingIndicatorPage, useFetchClient } from '@strapi/helper-plugin';\nimport axios from 'axios';\nimport { shallowEqual, useSelector } from 'react-redux';\nimport { useParams } from 'react-router-dom';\n\nimport { selectAdminPermissions } from '../../../selectors';\nimport { getData, getDataSucceeded } from '../../sharedReducers/crudReducer/actions';\nimport crudReducer, { crudInitialState } from '../../sharedReducers/crudReducer/reducer';\nimport { mergeMetasWithSchema } from '../../utils';\nimport { makeSelectModelAndComponentSchemas } from '../App/selectors';\nimport EditSettingsView from '../EditSettingsView';\n\nconst ComponentSettingsView = () => {\n const [{ isLoading, data: layout }, dispatch] = useReducer(crudReducer, crudInitialState);\n const schemasSelector = useMemo(makeSelectModelAndComponentSchemas, []);\n const { schemas } = useSelector((state) => schemasSelector(state), shallowEqual);\n const permissions = useSelector(selectAdminPermissions);\n const { uid } = useParams();\n const { get } = useFetchClient();\n\n useEffect(() => {\n const CancelToken = axios.CancelToken;\n const source = CancelToken.source();\n const fetchData = async (source) => {\n try {\n dispatch(getData());\n\n const {\n data: { data },\n } = await get(`/content-manager/components/${uid}/configuration`, {\n cancelToken: source.token,\n });\n dispatch(getDataSucceeded(mergeMetasWithSchema(data, schemas, 'component')));\n } catch (err) {\n if (axios.isCancel(err)) {\n return;\n }\n console.error(err);\n }\n };\n\n fetchData(source);\n\n return () => {\n source.cancel('Operation canceled by the user.');\n };\n }, [uid, schemas, get]);\n\n if (isLoading) {\n return <LoadingIndicatorPage />;\n }\n\n return (\n <CheckPagePermissions permissions={permissions.contentManager.componentsConfigurations}>\n <EditSettingsView components={layout.components} mainLayout={layout.component} slug={uid} />\n </CheckPagePermissions>\n );\n};\n\nexport default memo(ComponentSettingsView);\n","import React from 'react';\n\nimport { ContentLayout, EmptyStateLayout, HeaderLayout, Main } from '@strapi/design-system';\nimport { LinkButton, useFocusWhenNavigate } from '@strapi/helper-plugin';\nimport { EmptyDocuments, Plus } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { getTrad } from '../../utils';\n\nconst NoContentType = () => {\n const { formatMessage } = useIntl();\n useFocusWhenNavigate();\n\n return (\n <Main>\n <HeaderLayout\n title={formatMessage({\n id: getTrad('header.name'),\n defaultMessage: 'Content',\n })}\n />\n <ContentLayout>\n <EmptyStateLayout\n action={\n <LinkButton\n variant=\"secondary\"\n startIcon={<Plus />}\n to=\"/plugins/content-type-builder/content-types/create-content-type\"\n >\n {formatMessage({\n id: 'app.components.HomePage.create',\n defaultMessage: 'Create your first Content-type',\n })}\n </LinkButton>\n }\n content={formatMessage({\n id: 'content-manager.pages.NoContentType.text',\n defaultMessage:\n \"You don't have any content yet, we recommend you to create your first Content-Type.\",\n })}\n hasRadius\n icon={<EmptyDocuments width=\"10rem\" />}\n shadow=\"tableShadow\"\n />\n </ContentLayout>\n </Main>\n );\n};\n\nexport default NoContentType;\n","import React from 'react';\n\nimport { ContentLayout, HeaderLayout, Main } from '@strapi/design-system';\nimport { NoPermissions as NoPermissionsCompo, useFocusWhenNavigate } from '@strapi/helper-plugin';\nimport { useIntl } from 'react-intl';\n\nimport { getTrad } from '../../utils';\n\nconst NoPermissions = () => {\n const { formatMessage } = useIntl();\n useFocusWhenNavigate();\n\n return (\n <Main>\n <HeaderLayout\n title={formatMessage({\n id: getTrad('header.name'),\n defaultMessage: 'Content',\n })}\n />\n <ContentLayout>\n <NoPermissionsCompo />\n </ContentLayout>\n </Main>\n );\n};\n\nexport default NoPermissions;\n","import React, { memo, useMemo } from 'react';\n\nimport { CheckPagePermissions, LoadingIndicatorPage } from '@strapi/helper-plugin';\nimport PropTypes from 'prop-types';\nimport { useSelector } from 'react-redux';\nimport { Route, Switch } from 'react-router-dom';\n\nimport { selectAdminPermissions } from '../../../selectors';\nimport { ContentTypeLayoutContext } from '../../contexts';\nimport { useFetchContentTypeLayout } from '../../hooks';\nimport { formatLayoutToApi } from '../../utils';\nimport EditSettingsView from '../EditSettingsView';\nimport EditViewLayoutManager from '../EditViewLayoutManager';\n\nconst SingleTypeRecursivePath = ({\n match: {\n params: { slug },\n url,\n },\n}) => {\n const permissions = useSelector(selectAdminPermissions);\n const { isLoading, layout, updateLayout } = useFetchContentTypeLayout(slug);\n\n const { rawContentTypeLayout, rawComponentsLayouts } = useMemo(() => {\n let rawComponentsLayouts = {};\n let rawContentTypeLayout = {};\n\n if (layout.contentType) {\n rawContentTypeLayout = formatLayoutToApi(layout.contentType);\n }\n\n if (layout.components) {\n rawComponentsLayouts = Object.keys(layout.components).reduce((acc, current) => {\n acc[current] = formatLayoutToApi(layout.components[current]);\n\n return acc;\n }, {});\n }\n\n return { rawContentTypeLayout, rawComponentsLayouts };\n }, [layout]);\n\n if (isLoading) {\n return <LoadingIndicatorPage />;\n }\n\n return (\n <ContentTypeLayoutContext.Provider value={layout}>\n <Switch>\n <Route path={`${url}/configurations/edit`}>\n <CheckPagePermissions permissions={permissions.contentManager.singleTypesConfigurations}>\n <EditSettingsView\n components={rawComponentsLayouts}\n isContentTypeView\n mainLayout={rawContentTypeLayout}\n slug={slug}\n updateLayout={updateLayout}\n />\n </CheckPagePermissions>\n </Route>\n <Route\n path={url}\n render={({ location: { state }, history: { goBack } }) => {\n return (\n <EditViewLayoutManager\n layout={layout}\n slug={slug}\n isSingleType\n state={state}\n goBack={goBack}\n />\n );\n }}\n />\n </Switch>\n </ContentTypeLayoutContext.Provider>\n );\n};\n\nSingleTypeRecursivePath.propTypes = {\n match: PropTypes.shape({\n url: PropTypes.string.isRequired,\n params: PropTypes.shape({\n slug: PropTypes.string.isRequired,\n }).isRequired,\n }).isRequired,\n};\nexport default memo(SingleTypeRecursivePath);\n","import React from 'react';\n\nimport { Flex, IconButton, Typography } from '@strapi/design-system';\nimport { pxToRem } from '@strapi/helper-plugin';\nimport { CarretDown, Drag, Trash } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\n\nconst DropdownIconWrapper = styled(Flex)`\n border-radius: 50%;\n\n svg {\n height: ${6 / 16}rem;\n width: ${11 / 16}rem;\n > path {\n fill: ${({ theme }) => theme.colors.neutral600};\n }\n }\n`;\n\n// TODO: we shouldn't have to reset a whole button\nconst ToggleButton = styled.button`\n border: none;\n background: transparent;\n display: block;\n width: 100%;\n text-align: unset;\n padding: 0;\n`;\n\nexport function ComponentDragPreview({ displayedValue }) {\n return (\n <Flex\n background=\"neutral0\"\n borderColor=\"neutral200\"\n justifyContent=\"space-between\"\n gap={3}\n padding={3}\n width={pxToRem(300)}\n >\n <ToggleButton type=\"button\">\n <Flex gap={6}>\n <DropdownIconWrapper\n alignItems=\"center\"\n justifyContent=\"center\"\n background=\"neutral200\"\n height={pxToRem(32)}\n width={pxToRem(32)}\n >\n <CarretDown />\n </DropdownIconWrapper>\n\n <Flex maxWidth={pxToRem(150)}>\n <Typography textColor=\"neutral700\" ellipsis>\n {displayedValue}\n </Typography>\n </Flex>\n </Flex>\n </ToggleButton>\n\n <Flex gap={2}>\n <IconButton noBorder>\n <Trash />\n </IconButton>\n\n <IconButton noBorder>\n <Drag />\n </IconButton>\n </Flex>\n </Flex>\n );\n}\n\nComponentDragPreview.propTypes = {\n displayedValue: PropTypes.string.isRequired,\n};\n","import * as React from 'react';\n\nimport { Box, Flex, Icon, IconButton, Status, Typography } from '@strapi/design-system';\nimport { Cross, Drag } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport { DisconnectButton, LinkEllipsis } from '../../../components/RelationInput';\nimport {\n ChildrenWrapper,\n FlexWrapper,\n} from '../../../components/RelationInput/components/RelationItem';\nimport { PUBLICATION_STATES } from '../../../components/RelationInputDataManager/constants';\nimport { getTrad } from '../../../utils';\n\nexport const RelationDragPreview = ({ status, displayedValue, width }) => {\n const { formatMessage } = useIntl();\n\n const stateMessage = {\n [PUBLICATION_STATES.DRAFT]: formatMessage({\n id: getTrad('relation.publicationState.draft'),\n defaultMessage: 'Draft',\n }),\n\n [PUBLICATION_STATES.PUBLISHED]: formatMessage({\n id: getTrad('relation.publicationState.published'),\n defaultMessage: 'Published',\n }),\n };\n\n const statusColor = status === PUBLICATION_STATES.DRAFT ? 'secondary' : 'success';\n\n return (\n <Box style={{ width }}>\n <Flex\n paddingTop={2}\n paddingBottom={2}\n paddingLeft={2}\n paddingRight={4}\n hasRadius\n borderSize={1}\n background=\"neutral0\"\n borderColor=\"neutral200\"\n justifyContent=\"space-between\"\n >\n <FlexWrapper gap={1}>\n <IconButton noBorder>\n <Drag />\n </IconButton>\n <ChildrenWrapper maxWidth=\"100%\" justifyContent=\"space-between\">\n <Box minWidth={0} paddingTop={1} paddingBottom={1} paddingRight={4}>\n <LinkEllipsis>\n <Typography textColor=\"primary600\" ellipsis>\n {displayedValue}\n </Typography>\n </LinkEllipsis>\n </Box>\n {status && (\n <Status variant={statusColor} showBullet={false} size=\"S\">\n <Typography fontWeight=\"bold\" textColor={`${statusColor}700`}>\n {stateMessage[status]}\n </Typography>\n </Status>\n )}\n </ChildrenWrapper>\n </FlexWrapper>\n <Box paddingLeft={4}>\n <DisconnectButton type=\"button\">\n <Icon width=\"12px\" as={Cross} />\n </DisconnectButton>\n </Box>\n </Flex>\n </Box>\n );\n};\n\nRelationDragPreview.propTypes = {\n status: PropTypes.string.isRequired,\n displayedValue: PropTypes.string.isRequired,\n width: PropTypes.number.isRequired,\n};\n","/**\n *\n * LeftMenu\n *\n */\n\nimport React, { useMemo, useState } from 'react';\n\nimport {\n SubNav,\n SubNavHeader,\n SubNavLink,\n SubNavSection,\n SubNavSections,\n} from '@strapi/design-system/v2';\nimport { useCollator, useFilter } from '@strapi/helper-plugin';\nimport { useIntl } from 'react-intl';\nimport { shallowEqual, useSelector } from 'react-redux';\nimport { NavLink } from 'react-router-dom';\n\nimport getTrad from '../../../utils/getTrad';\nimport { makeSelectModelLinks } from '../selectors';\n\nconst LeftMenu = () => {\n const [search, setSearch] = useState('');\n const { formatMessage, locale } = useIntl();\n const modelLinksSelector = useMemo(makeSelectModelLinks, []);\n const { collectionTypeLinks, singleTypeLinks } = useSelector(modelLinksSelector, shallowEqual);\n\n const { startsWith } = useFilter(locale, {\n sensitivity: 'base',\n });\n\n /**\n * @type {Intl.Collator}\n */\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n\n const menu = useMemo(\n () =>\n [\n {\n id: 'collectionTypes',\n title: {\n id: getTrad('components.LeftMenu.collection-types'),\n defaultMessage: 'Collection Types',\n },\n searchable: true,\n links: collectionTypeLinks,\n },\n {\n id: 'singleTypes',\n title: {\n id: getTrad('components.LeftMenu.single-types'),\n defaultMessage: 'Single Types',\n },\n searchable: true,\n links: singleTypeLinks,\n },\n ].map((section) => ({\n ...section,\n links: section.links\n /**\n * Filter by the search value\n */\n .filter((link) => startsWith(link.title, search))\n /**\n * Sort correctly using the language\n */\n .sort((a, b) => formatter.compare(a.title, b.title))\n /**\n * Apply the formated strings to the links from react-intl\n */\n .map((link) => {\n return {\n ...link,\n title: formatMessage({ id: link.title, defaultMessage: link.title }),\n };\n }),\n })),\n [collectionTypeLinks, search, singleTypeLinks, startsWith, formatMessage, formatter]\n );\n\n const handleClear = () => {\n setSearch('');\n };\n\n const handleChangeSearch = ({ target: { value } }) => {\n setSearch(value);\n };\n\n const label = formatMessage({\n id: getTrad('header.name'),\n defaultMessage: 'Content',\n });\n\n return (\n <SubNav ariaLabel={label}>\n <SubNavHeader\n label={label}\n searchable\n value={search}\n onChange={handleChangeSearch}\n onClear={handleClear}\n searchLabel={formatMessage({\n id: 'content-manager.components.LeftMenu.Search.label',\n defaultMessage: 'Search for a content type',\n })}\n />\n <SubNavSections>\n {menu.map((section) => {\n const label = formatMessage(\n { id: section.title.id, defaultMessage: section.title.defaultMessage },\n section.title.values\n );\n\n return (\n <SubNavSection\n key={section.id}\n label={label}\n badgeLabel={section.links.length.toString()}\n >\n {section.links.map((link) => {\n const search = link.search ? `?${link.search}` : '';\n\n return (\n <SubNavLink as={NavLink} key={link.uid} to={`${link.to}${search}`}>\n {link.title}\n </SubNavLink>\n );\n })}\n </SubNavSection>\n );\n })}\n </SubNavSections>\n </SubNav>\n );\n};\n\nexport default LeftMenu;\n","import { GET_INIT_DATA, RESET_INIT_DATA, SET_INIT_DATA } from './constants';\n\nexport const getInitData = () => ({\n type: GET_INIT_DATA,\n});\n\nexport const resetInitData = () => ({ type: RESET_INIT_DATA });\n\nexport const setInitData = ({\n authorizedCollectionTypeLinks,\n authorizedSingleTypeLinks,\n contentTypeSchemas,\n components,\n fieldSizes,\n}) => ({\n type: SET_INIT_DATA,\n data: {\n authorizedCollectionTypeLinks,\n authorizedSingleTypeLinks,\n components,\n contentTypeSchemas,\n fieldSizes,\n },\n});\n","import { hasPermissions } from '@strapi/helper-plugin';\n\n/**\n * This function resolves an array of Promises<boolean>\n * It puts at a specific index the status of a specific permission.\n * While this might look weird, we then iterate on this array\n * and check the different CT/ST/general/plugin sections\n * and make an index based comparisons\n */\nconst checkPermissions = (userPermissions, permissionsToCheck) =>\n permissionsToCheck.map(({ permissions }) => hasPermissions(userPermissions, permissions));\n\nexport default checkPermissions;\n","import groupBy from 'lodash/groupBy';\nimport sortBy from 'lodash/sortBy';\nimport { stringify } from 'qs';\n\nconst generateLinks = (links, type, configurations = []) => {\n return links\n .filter((link) => link.isDisplayed)\n .map((link) => {\n const collectionTypesPermissions = [\n { action: 'plugin::content-manager.explorer.create', subject: link.uid },\n { action: 'plugin::content-manager.explorer.read', subject: link.uid },\n ];\n const singleTypesPermissions = [\n { action: 'plugin::content-manager.explorer.read', subject: link.uid },\n ];\n const permissions =\n type === 'collectionTypes' ? collectionTypesPermissions : singleTypesPermissions;\n\n const currentContentTypeConfig = configurations.find(({ uid }) => uid === link.uid);\n\n let search = null;\n\n if (currentContentTypeConfig) {\n const searchParams = {\n page: 1,\n pageSize: currentContentTypeConfig.settings.pageSize,\n sort: `${currentContentTypeConfig.settings.defaultSortBy}:${currentContentTypeConfig.settings.defaultSortOrder}`,\n };\n\n search = stringify(searchParams, { encode: false });\n }\n\n return {\n permissions,\n search,\n kind: link.kind,\n title: link.info.displayName,\n to: `/content-manager/${link.kind}/${link.uid}`,\n uid: link.uid,\n // Used for the list item key in the helper plugin\n name: link.uid,\n isDisplayed: link.isDisplayed,\n };\n });\n};\n\nconst generateModelsLinks = (models, modelsConfigurations) => {\n const groupedModels = Object.entries(groupBy(models, 'kind')).map(([key, value]) => ({\n name: key,\n links: value,\n }));\n const [collectionTypes, singleTypes] = sortBy(groupedModels, 'name');\n\n return {\n collectionTypeSectionLinks: generateLinks(\n collectionTypes?.links || [],\n 'collectionTypes',\n modelsConfigurations\n ),\n singleTypeSectionLinks: generateLinks(singleTypes?.links ?? [], 'singleTypes'),\n };\n};\n\nexport default generateModelsLinks;\nexport { generateLinks };\n","import { getFetchClient } from '@strapi/helper-plugin';\n\nimport checkPermissions from './checkPermissions';\nimport generateModelsLinks from './generateModelsLinks';\n\nconst getContentTypeLinks = async ({ models, userPermissions, toggleNotification }) => {\n const { get } = getFetchClient();\n try {\n const {\n data: { data: contentTypeConfigurations },\n } = await get('/content-manager/content-types-settings');\n\n const { collectionTypeSectionLinks, singleTypeSectionLinks } = generateModelsLinks(\n models,\n contentTypeConfigurations\n );\n\n // Collection Types verifications\n const collectionTypeLinksPermissions = await Promise.all(\n checkPermissions(userPermissions, collectionTypeSectionLinks)\n );\n const authorizedCollectionTypeLinks = collectionTypeSectionLinks.filter(\n (_, index) => collectionTypeLinksPermissions[index]\n );\n\n // Single Types verifications\n const singleTypeLinksPermissions = await Promise.all(\n checkPermissions(userPermissions, singleTypeSectionLinks)\n );\n const authorizedSingleTypeLinks = singleTypeSectionLinks.filter(\n (_, index) => singleTypeLinksPermissions[index]\n );\n\n return {\n authorizedCollectionTypeLinks,\n authorizedSingleTypeLinks,\n };\n } catch (err) {\n console.error(err);\n\n toggleNotification({\n type: 'warning',\n message: { id: 'notification.error' },\n });\n\n return { authorizedCollectionTypeLinks: [], authorizedSingleTypeLinks: [] };\n }\n};\n\nexport default getContentTypeLinks;\n","import { useEffect, useRef } from 'react';\n\nimport { useNotifyAT } from '@strapi/design-system';\nimport {\n useFetchClient,\n useNotification,\n useRBACProvider,\n useStrapiApp,\n} from '@strapi/helper-plugin';\nimport axios from 'axios';\nimport { useIntl } from 'react-intl';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { HOOKS } from '../../../constants';\nimport { getTrad } from '../../utils';\n\nimport { getInitData, resetInitData, setInitData } from './actions';\nimport { selectAppDomain } from './selectors';\nimport getContentTypeLinks from './utils/getContentTypeLinks';\n\nconst { MUTATE_COLLECTION_TYPES_LINKS, MUTATE_SINGLE_TYPES_LINKS } = HOOKS;\n\nconst useContentManagerInitData = () => {\n const dispatch = useDispatch();\n const toggleNotification = useNotification();\n const state = useSelector(selectAppDomain());\n const fetchDataRef = useRef();\n const { allPermissions } = useRBACProvider();\n const { runHookWaterfall } = useStrapiApp();\n const CancelToken = axios.CancelToken;\n const source = CancelToken.source();\n const { notifyStatus } = useNotifyAT();\n const { formatMessage } = useIntl();\n const { get } = useFetchClient();\n\n const fetchData = async () => {\n dispatch(getInitData());\n\n try {\n const {\n data: {\n data: { components, contentTypes: models, fieldSizes },\n },\n } = await get('/content-manager/init', { cancelToken: source.token });\n notifyStatus(\n formatMessage({\n id: getTrad('App.schemas.data-loaded'),\n defaultMessage: 'The schemas have been successfully loaded.',\n })\n );\n\n const unmutatedContentTypeLinks = await getContentTypeLinks({\n models,\n userPermissions: allPermissions,\n toggleNotification,\n });\n\n const { ctLinks: authorizedCollectionTypeLinks } = runHookWaterfall(\n MUTATE_COLLECTION_TYPES_LINKS,\n {\n ctLinks: unmutatedContentTypeLinks.authorizedCollectionTypeLinks,\n models,\n }\n );\n const { stLinks: authorizedSingleTypeLinks } = runHookWaterfall(MUTATE_SINGLE_TYPES_LINKS, {\n stLinks: unmutatedContentTypeLinks.authorizedSingleTypeLinks,\n models,\n });\n\n const actionToDispatch = setInitData({\n authorizedCollectionTypeLinks,\n authorizedSingleTypeLinks,\n contentTypeSchemas: models,\n components,\n fieldSizes,\n });\n\n dispatch(actionToDispatch);\n } catch (err) {\n if (axios.isCancel(err)) {\n return;\n }\n console.error(err);\n\n toggleNotification({ type: 'warning', message: { id: 'notification.error' } });\n }\n };\n\n fetchDataRef.current = fetchData;\n\n useEffect(() => {\n fetchDataRef.current();\n\n return () => {\n source.cancel('Operation canceled by the user.');\n dispatch(resetInitData());\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [dispatch, toggleNotification]);\n\n return { ...state, refetchData: fetchDataRef.current };\n};\n\nexport default useContentManagerInitData;\n","import React, { useEffect, useRef } from 'react';\n\nimport { HeaderLayout, Layout, Main } from '@strapi/design-system';\nimport {\n AnErrorOccurred,\n CheckPagePermissions,\n LoadingIndicatorPage,\n useGuidedTour,\n} from '@strapi/helper-plugin';\nimport sortBy from 'lodash/sortBy';\nimport { Helmet } from 'react-helmet';\nimport { useIntl } from 'react-intl';\nimport { useSelector } from 'react-redux';\nimport { Redirect, Route, Switch, useLocation, useRouteMatch } from 'react-router-dom';\n\nimport { DragLayer } from '../../../components/DragLayer';\nimport { selectAdminPermissions } from '../../../selectors';\nimport ModelsContext from '../../contexts/ModelsContext';\nimport getTrad from '../../utils/getTrad';\nimport ItemTypes from '../../utils/ItemTypes';\nimport CollectionTypeRecursivePath from '../CollectionTypeRecursivePath';\nimport ComponentSettingsView from '../ComponentSetttingsView';\nimport NoContentType from '../NoContentType';\nimport NoPermissions from '../NoPermissions';\nimport SingleTypeRecursivePath from '../SingleTypeRecursivePath';\n\nimport { CardDragPreview } from './components/CardDragPreview';\nimport { ComponentDragPreview } from './components/ComponentDragPreview';\nimport { RelationDragPreview } from './components/RelationDragPreview';\nimport LeftMenu from './LeftMenu';\nimport useContentManagerInitData from './useContentManagerInitData';\n\nfunction renderDraglayerItem({ type, item }) {\n if ([ItemTypes.EDIT_FIELD, ItemTypes.FIELD].includes(type)) {\n return <CardDragPreview labelField={item.labelField} />;\n }\n\n /**\n * Because a user may have multiple relations / dynamic zones / repeable fields in the same content type,\n * we append the fieldName for the item type to make them unique, however, we then want to extract that\n * first type to apply the correct preview.\n */\n const [actualType] = type.split('_');\n\n switch (actualType) {\n case ItemTypes.COMPONENT:\n case ItemTypes.DYNAMIC_ZONE:\n return <ComponentDragPreview displayedValue={item.displayedValue} />;\n\n case ItemTypes.RELATION:\n return (\n <RelationDragPreview\n displayedValue={item.displayedValue}\n status={item.status}\n width={item.width}\n />\n );\n\n default:\n return null;\n }\n}\n\nconst App = () => {\n const contentTypeMatch = useRouteMatch(`/content-manager/:kind/:uid`);\n const { status, collectionTypeLinks, singleTypeLinks, models, refetchData } =\n useContentManagerInitData();\n const authorisedModels = sortBy([...collectionTypeLinks, ...singleTypeLinks], (model) =>\n model.title.toLowerCase()\n );\n const { pathname } = useLocation();\n const { formatMessage } = useIntl();\n const { startSection } = useGuidedTour();\n const startSectionRef = useRef(startSection);\n const permissions = useSelector(selectAdminPermissions);\n\n useEffect(() => {\n if (startSectionRef.current) {\n startSectionRef.current('contentManager');\n }\n }, []);\n\n if (status === 'loading') {\n return (\n <Main aria-busy=\"true\">\n <HeaderLayout\n title={formatMessage({\n id: getTrad('header.name'),\n defaultMessage: 'Content',\n })}\n />\n <LoadingIndicatorPage />\n </Main>\n );\n }\n\n // Array of models that are displayed in the content manager\n const supportedModelsToDisplay = models.filter(({ isDisplayed }) => isDisplayed);\n\n // Redirect the user to the 403 page\n if (\n authorisedModels.length === 0 &&\n supportedModelsToDisplay.length > 0 &&\n pathname !== '/content-manager/403'\n ) {\n return <Redirect to=\"/content-manager/403\" />;\n }\n\n // Redirect the user to the create content type page\n if (supportedModelsToDisplay.length === 0 && pathname !== '/content-manager/no-content-types') {\n return <Redirect to=\"/content-manager/no-content-types\" />;\n }\n\n if (!contentTypeMatch && authorisedModels.length > 0) {\n return (\n <Redirect\n to={`${authorisedModels[0].to}${\n authorisedModels[0].search ? `?${authorisedModels[0].search}` : ''\n }`}\n />\n );\n }\n\n return (\n <Layout sideNav={<LeftMenu />}>\n <DragLayer renderItem={renderDraglayerItem} />\n <ModelsContext.Provider value={{ refetchData }}>\n <Switch>\n <Route path=\"/content-manager/components/:uid/configurations/edit\">\n <CheckPagePermissions permissions={permissions.contentManager.componentsConfigurations}>\n <ComponentSettingsView />\n </CheckPagePermissions>\n </Route>\n <Route\n path=\"/content-manager/collectionType/:slug\"\n component={CollectionTypeRecursivePath}\n />\n <Route path=\"/content-manager/singleType/:slug\" component={SingleTypeRecursivePath} />\n\n <Route path=\"/content-manager/403\">\n <NoPermissions />\n </Route>\n <Route path=\"/content-manager/no-content-types\">\n <NoContentType />\n </Route>\n <Route path=\"\" component={AnErrorOccurred} />\n </Switch>\n </ModelsContext.Provider>\n </Layout>\n );\n};\n\nexport { App };\n\nexport default function () {\n const { formatMessage } = useIntl();\n\n return (\n <>\n <Helmet\n title={formatMessage({ id: getTrad('plugin.name'), defaultMessage: 'Content Manager' })}\n />\n <App />\n </>\n );\n}\n"],"names":["createContext","useSelector","useCallback","initialState","reducer","produce","cloneDeep","get","omit","size","permissions","isNaN","set","merge","data","schema","getType","getOtherInfos","useReducer","useMemo","makeSelectModelAndComponentSchemas","shallowEqual","useRef","useFetchClient","getData","error","axios","useEffect","isObject","to","parse","stringify","useQueryParams","useLocation","SET_PERMISSIONS","RESET_PERMISSIONS","useDispatch","React","jsx","PropTypes","useTracking","useIntl","CheckPermissions","LinkButton","Pencil","getTrad","jsxs","Box","index","Grid","GridItem","Flex","Typography","Link","Cog","Icons","Icon","styled","CustomIconButton","IconButton","Trash","Wrapper","Drag","DragButton","useState","useDrop","clientOffset","useDrag","getEmptyImage","Menu","Plus","Number","Boolean","Date","Email","Enumeration","Media","Relation","Text","Json","Uid","Component","DynamicZone","useCustomFields","options","TextInput","ToggleInput","Select","value","Option","selectFieldSizes","Fragment","HeaderContainer","ModalLayout","ModalHeader","upperFirst","ModalBody","ModalFooter","Button","useNotification","useHistory","useMutation","Main","HeaderLayout","ArrowLeft","isEqual","Check","ContentLayout","Divider","ConfirmDialog","ModalForm","resetProps","RESET_PROPS","setLayout","SET_LAYOUT","GET_DATA","getDataSucceeded","GET_DATA_SUCCEEDED","INIT_FORM","SET_DATA_STRUCTURES","SET_STATUS","SUBMIT_SUCCEEDED","CLEAR_SET_MODIFIED_DATA_ONLY","useQueryClient","useGuidedTour","useAPIErrorHandler","formatContentTypeData","componentsDataStructure","contentTypeDataStructure","source","init","id","memo","PlusCircle","BaseButton","Accordion","AccordionToggle","AccordionContent","pxToRem","KeyboardNavigable","Transforms","Editor","SlateElement","Range","Node","BaseLink","css","Path","Tooltip","useSlate","ReactEditor","composeRefs","Popover","Field","FieldLabel","FieldInput","Paragraph","HeadingOne","HeadingTwo","HeadingThree","HeadingFour","HeadingFive","HeadingSix","NumberList","BulletList","Picture","Quote","Code","Bold","Italic","Underline","StrikeThrough","block","useTheme","Editable","insertText","Point","Element","Toolbar","useLibrary","prefixFileUrlWithBackendUrl","SingleSelect","SingleSelectOption","TypographyAsterisk","LabelAction","withHistory","withReact","createEditor","Slate","InputWrapper","FieldAction","keyframes","useDebounce","useCMEditViewDataManager","useQuery","CheckCircle","ExclamationMarkCircle","Loader","Refresh","connect","useSelect","useRouteMatch","useInfiniteQuery","useCallbackRef","ComboboxOption","useDragAndDrop","useFocusInputField","Combobox","TextButton","VisuallyHidden","List","Cross","Status","shouldDisplayRelationLink","NotAllowedInput","pick","Memoized","select","Markdown","getLanguage","highlight","highlightAuto","abbr","container","deflist","emoji","footnote","ins","mark","sub","sup","sanitizeHtml","CodeMirror","forwardRef","useImperativeHandle","PreviewWysiwyg","ExpandButton","useLockScroll","Portal","FocusTrap","Collapse","IconButtonGroup","Expand","More","Image","toLower","VALIDATIONS_TO_OMIT","take","RelationInputDataManager","Blocks","GenericInput","FieldComponent","Inputs","Preview","ActionsFlex","toString","componentUid","Accordion.Group","Accordion.Content","Accordion.Footer","name","allowedFields","RepeatableComponent","icon","mainValue","MenuItem","browserState","serverState","acc","isArray","findAllAndReplace","generateNKeysBetween","uniqBy","unset","useOverlayBlocker","shouldCheckErrors","createYupSchema","isEmpty","getYupInnerErrors","modifiedData","initialData","flushSync","getAPIInnerErrors","Redirect","ContentManagerEditViewDataManagerContext","LoadingIndicatorPage","Prompt","Dot","Dialog","DialogBody","DialogFooter","isEqualFastCompare","Body","Root","findMatchingPermissions","uniq","flatMap","createSelector","selectAdminPermissions","Information","useEnterprise","SingleTypeFormWrapper","CollectionTypeFormWrapper","Header","DraftAndPublishBadge","InjectionZone","Layer","DeleteLink","Permissions","useRBAC","HOOKS","useStrapiApp","useCollator","FieldContainer","TypographyMaxWidth","fieldToEdit","Layout","ON_RESET_LIST_HEADERS","SET_LIST_LAYOUT","ON_CHANGE_LIST_HEADERS","FilterIcon","FilterPopoverURLQuery","FilterListURLQuery","useAdminUsers","useRBACProvider","useInjectionZone","useTableContext","BaseCheckbox","Duplicate","Table","BoldChunk","CrossCircle","Tr","Td","formatAPIErrors","parseISO","Avatar","getFileExtension","AvatarGroup","useNotifyAT","isOpen","MenuTrigger","Badge","isFieldTypeNumber","isNumber","MultipleMedias","SingleComponent","bindActionCreators","useTypedSelector","useFocusWhenNavigate","query","metadatas","ReactRouterLink","AxiosError","ActionLayout","SearchURLQuery","lightTheme","PageSizeURLQuery","PaginationURLQuery","NoPermissions","ListView","difference","AnErrorOccurred","rawContentTypeLayout","rawComponentsLayouts","Route","ErrorBoundary","ContentTypeLayoutContext","Switch","CheckPagePermissions","crudReducer","crudInitialState","useParams","EmptyStateLayout","EmptyDocuments","NoPermissionsCompo","CarretDown","makeSelectModelLinks","useFilter","SubNav","SubNavHeader","SubNavSections","label","SubNavSection","search","SubNavLink","NavLink","GET_INIT_DATA","RESET_INIT_DATA","SET_INIT_DATA","hasPermissions","groupBy","sortBy","getFetchClient","selectAppDomain","DragLayer","ComponentSettingsView","CollectionTypeRecursivePath","SingleTypeRecursivePath","Helmet"],"mappings":"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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAiI/C,CAAC,EAAE,YAAY,GAAG,MAAM,OAAO,QAAQ,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAsIvC,CAAC,EAAE,YAAY,GAAG,MAAM,OAAO,UAAU,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAuB7C,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAuB3C,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,UAAU;AAAA;AAAA;ACvcnD,MAAM,aAAa,CAAC,KAAK,UACvB,GAAG,GAAG,GAAG,KAAK,MAAM,QAAQ,GAAG,EAC5B,SAAS,EAAE,EACX,SAAS,GAAG,CAAC,CAAC;AAEnB,MAAM,gBAAgBA,gBAAAA,QAAON,aAAAA,IAAI;AAAA,gBACjB,CAAC,EAAE,MAAM,MAAM,WAAW,MAAM,OAAO,YAAY,GAAG,CAAC;AAAA;AAGvE,MAAM,gBAAgBM,gBAAAA,QAAOV,aAAAA,GAAG;AAAA,4BACJ,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,UAAU;AAAA;AAGrD,MAAA6L,iBAAenL,gBAAAA,QAAO6E,aAAAA,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAM1B,CAAC,EAAE,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,CAAC,EAAE;AAAA;AAAA;AAAA,cAGxC,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,UAAU;AAAA,eACrC,KAAK,EAAE;AAAA,gBACN,KAAK,EAAE;AAAA;AAAA;AAAA;AAKV,MAAA,eAAe,CAAC,EAAE,UAAU,cAAc,OAAO,gBAAgB,iBAAiB;AACvF,QAAA,EAAE,kBAAkB7F,UAAAA;AAE1BoM,eAAA,cAAc,YAAY;AAE1B,MAAI,cAAc;AAEd,WAAAvM,2BAAA,IAACwM,uBAAO,MAAK,UAAS,cAAY,OAChC,UAAAxM,2BAAAA,IAACyM,aAAAA,WAAU,EAAA,UAAU,YACnB,UAAAzM,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,UAAS;AAAA,QACT,KAAK;AAAA,QACL,MAAM;AAAA,QACN,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,gBAAe;AAAA,QACf,SAAS;AAAA,QAET,UAAAA,2BAAA;AAAA,UAACS,aAAA;AAAA,UAAA;AAAA,YACC,YAAW;AAAA,YACX,WAAS;AAAA,YACT,QAAO;AAAA,YACP,UAAS;AAAA,YACT,OAAM;AAAA,YACN,QAAO;AAAA,YACP,SAAS,CAAC,MAAM,EAAE,gBAAgB;AAAA,YAElC,UAACD,2BAAAA,KAAAK,aAAAA,MAAA,EAAK,QAAO,QAAO,YAAW,cAC7B,UAAA;AAAA,cAAAb,2BAAA,IAAC,eAAc,EAAA,MAAK,KAAI,QAAO,QAC5B,UACH;AAAA,cACAQ,2BAAAA,KAACK,aAAAA,MAAK,EAAA,YAAW,SAAQ,WAAU,UAAS,MAAM,GAAG,QAAO,QAAO,OAAM,QACvE,UAAA;AAAA,gBAAAb,2BAAA;AAAA,kBAACa,aAAA;AAAA,kBAAA;AAAA,oBACC,QAAQuF,qBAAQ,EAAE;AAAA,oBAClB,YAAW;AAAA,oBACX,gBAAe;AAAA,oBACf,QAAQ;AAAA,oBACR,OAAM;AAAA,oBAEN,UAAA5F,2BAAA,KAAC8L,gBAAa,EAAA,SAAS,YACrB,UAAA;AAAA,sBAAAtM,2BAAAA,IAACc,2BACE,UAAc,cAAA;AAAA,wBACb,IAAI;AAAA,wBACJ,gBAAgB;AAAA,sBACjB,CAAA,GACH;AAAA,qDACC4L,MAAS,UAAA,EAAA;AAAA,oBAAA,GACZ;AAAA,kBAAA;AAAA,gBACF;AAAA,gBAEC1M,2BAAA,IAAAS,aAAA,KAAA,EAAI,UAAS,YAAW,QAAO,QAAO,OAAM,QAC3C,UAACT,2BAAA,IAAAqM,kBAAA,EAAe,MAAM,eAAgB,CAAA,GACxC;AAAA,cAAA,GACF;AAAA,YAAA,GACF;AAAA,UAAA;AAAA,QACF;AAAA,MAAA;AAAA,IAAA,EAEJ,CAAA,EACF,CAAA;AAAA,EAEJ;AAGE,SAAArM,2BAAA;AAAA,IAACS,aAAA;AAAA,IAAA;AAAA,MACC,aAAa,QAAQ,cAAc;AAAA,MACnC,aAAY;AAAA,MACZ,aAAY;AAAA,MACZ,WAAS;AAAA,MAER;AAAA,IAAA;AAAA,EAAA;AAGP;AAEA,aAAa,eAAe;AAAA,EAC1B,OAAO;AAAA,EACP,gBAAgB;AAClB;AAEA,aAAa,YAAY;AAAA,EACvB,UAAUR,mBAAAA,QAAU,KAAK;AAAA,EACzB,OAAOA,mBAAU,QAAA;AAAA,EACjB,cAAcA,mBAAAA,QAAU,KAAK;AAAA,EAC7B,gBAAgBA,mBAAU,QAAA;AAAA,EAC1B,YAAYA,mBAAAA,QAAU,KAAK;AAC7B;AC9Ha,MAAA,cAAc,CAAC,cAAc,iBAAiB;AACrD,MAAA;AAEJ,UAAQ,cAAc;AAAA,IACpB,KAAK;AACH,mBAAa,KAAK,YAAY;AAC9B;AAAA,IACF,KAAK;AACH,mBAAa,KAAK,YAAY;AAC9B;AAAA,IACF,KAAK;AACH,mBAAa,IAAI,YAAY;AAC7B;AAAA,IACF,KAAK;AACH,mBAAa,MAAM,YAAY;AAC/B;AAAA,IACF,KAAK;AACU,mBAAA;AAAA,EAAW,YAAY;AAAA;AACpC;AAAA,IACF,KAAK;AACH,mBAAa,IAAI,YAAY;AAC7B;AAAA,IACF,KAAK;AACH,mBAAa,IAAI,YAAY;AAC7B;AAAA,IACF;AACe,mBAAA;AAAA,EACjB;AAEO,SAAA;AACT;AAEa,MAAA,aAAa,CAAC,iBAAiB;AACtC,MAAA;AAEJ,MAAI,YAAY,EAAE,OAAO,aAAa,QAAQ,KAAK;AAEnD,UAAQ,cAAc;AAAA,IACpB,KAAK;AACH,mBAAa,KAAK,YAAY;AAC9B,gBAAU,MAAM;AAChB;AAAA,IACF,KAAK;AACH,mBAAa,KAAK,YAAY;AAC9B,gBAAU,MAAM;AAChB;AAAA,IACF,KAAK;AACH,mBAAa,IAAI,YAAY;AAC7B,gBAAU,MAAM;AAChB;AAAA,IACF,KAAK;AACH,mBAAa,IAAI,YAAY;AAC7B,gBAAU,MAAM;AAChB;AAAA,IACF,KAAK;AACH,mBAAa,MAAM,YAAY;AAC/B,gBAAU,MAAM;AAChB;AAAA,IACF,KAAK;AACU,mBAAA;AAAA,EAAW,YAAY;AAAA;AACpC,gBAAU,MAAM;AAChB;AAAA,IACF,KAAK;AACH,mBAAa,IAAI,YAAY;AAC7B,gBAAU,MAAM;AAChB;AAAA,IACF,KAAK;AACH,mBAAa,IAAI,YAAY;AAC7B,gBAAU,MAAM;AAChB;AAAA,IACF;AACe,mBAAA;AAAA,EACjB;AAEO,SAAA,EAAE,YAAY;AACvB;AAEa,MAAA,oBAAoB,CAAC,aAAa;AACzC,MAAA;AAEJ,UAAQ,UAAU;AAAA,IAChB,KAAK;AACY,qBAAA;AACf;AAAA,IACF,KAAK;AACY,qBAAA;AACf;AAAA,IACF,KAAK;AACY,qBAAA;AACf;AAAA,IACF,KAAK;AACY,qBAAA;AACf;AAAA,IACF,KAAK;AACY,qBAAA;AACf;AAAA,IACF,KAAK;AACY,qBAAA;AACf;AAAA,IACF,KAAK;AACY,qBAAA;AACf;AAAA,IACF,KAAK;AACY,qBAAA;AACf;AAAA,IACF;AACS,aAAA;AAAA,EACX;AAEO,SAAA;AACT;AAIa,MAAA,kBAAkB,CAAC,QAAQ,iBAAiB;AACjD,QAAA,aAAa,OAAO,QAAQ,aAAa;AAC3C,MAAA;AAEJ,MAAI,YAAY;AACR,UAAA,aAAa,YAAY,cAAc,UAAU;AAChD,WAAA,QAAQ,iBAAiB,UAAU;AAC1C,WAAO,QAAQ;EAAM,OAChB;AACL,mBAAe,WAAW,YAAY;AAC/B,WAAA,QAAQ,iBAAiB,aAAa,UAAU;AACvD,WAAO,QAAQ;AAEf,UAAM,EAAE,MAAM,GAAA,IAAO,OAAO,QAAQ;AAC9B,UAAA,eAAe,KAAK,aAAa,UAAU;AACjD,UAAM,iBAAiB,KAAK,aAAa,UAAU,MAAM,aAAa,UAAU;AACzE,WAAA,QAAQ,aAAa,EAAE,MAAM,IAAI,eAAe,GAAG,EAAE,MAAM,IAAI,aAAc,CAAA;AAAA,EACtF;AACF;AAEa,MAAA,cAAc,CAAC,QAAQ,aAAa;AACzC,QAAA,MAAM,OAAO,QAAQ,OAAO;AAC5B,QAAA,YAAY,aAAa,eAAe,OAAO;AAEjD,MAAA,IAAI,qBAAqB;AACrB,UAAA,aAAa,IAAI;AACvB,QAAI,SAAS;AAEN,WAAA,QAAQ,UAAU,WAAY;AACxB,iBAAA,QAAQ,SAAU,WAAW;AAChC,cAAA,MAAM,CAAC,UAAU,KAAK,MAAM,UAAU,OAAO,IAAI,EAAE;AAGzD,YAAI,UAAU,MAAM;AAClB,mBAAS,IAAI,QAAQ,IAAI,CAAC,CAAC,EAAE,WAAW,SAAS;AAAA,QACnD;AAES,iBAAA,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,KAAK;AACrC,cAAI,QAAQ;AAEV,gBAAI,IAAI,QAAQ,CAAC,EAAE,WAAW,SAAS,GAAG;AACxC,kBAAI,aAAa,IAAI,EAAE,MAAM,GAAG,IAAI,EAAK,GAAA,EAAE,MAAM,GAAG,IAAI,UAAU,OAAQ,CAAA;AAAA,YAC5E;AAAA,UAAA,OACK;AACL,kBAAM,gBAAgB,aAAa,eAAe,OAAO,GAAG,IAAI,CAAC;AACjE,gBAAI,aAAa,eAAe,EAAE,MAAM,GAAG,IAAI,GAAG;AAAA,UACpD;AAAA,QACF;AAAA,MAAA,CACD;AAAA,IAAA,CACF;AAAA,EAAA,OACI;AACL,QAAI,EAAE,MAAM,YAAY,IAAI,IAAI,UAAU;AACpC,UAAA,eAAe,kBAAkB,QAAQ;AAC/C,UAAM,cAAc,OAAO,QAAQ,QAAQ,WAAW;AAEtD,UAAM,eAAe,eAAe;AACpC,WAAO,QAAQ;AAAA,MACb,EAAE,MAAM,aAAa,IAAI,EAAE;AAAA,MAC3B,EAAE,MAAM,aAAa,IAAI,YAAY,OAAO;AAAA,IAAA;AAEvC,WAAA,QAAQ,iBAAiB,YAAY;AAAA,EAC9C;AAEA,SAAO,QAAQ;AACjB;AAEa,MAAA,eAAe,CAAC,QAAQ,cAAc;AACjD,MAAI,EAAE,MAAM,YAAA,IAAgB,OAAO,QAAQ;AACrC,QAAA,gBAAgB,kBAAkB,SAAS;AACjD,QAAM,cAAc,OAAO,QAAQ,QAAQ,WAAW;AAGtD,QAAM,kBAAkB,YAAY,QAAQ,aAAa,EAAE,EAAE;AAE7D,QAAM,eAAe,gBAAgB;AACrC,SAAO,QAAQ;AAAA,IACb,EAAE,MAAM,aAAa,IAAI,EAAE;AAAA,IAC3B,EAAE,MAAM,aAAa,IAAI,YAAY,OAAO;AAAA,EAAA;AAEvC,SAAA,QAAQ,iBAAiB,YAAY;AAE5C,aAAW,MAAM;AACf,UAAM,oBAAoB,OAAO,QAAQ,QAAQ,WAAW,EAAE;AAC9D,WAAO,QAAQ;AACf,WAAO,QAAQ,UAAU,EAAE,MAAM,aAAa,IAAI,mBAAmB;AAAA,KACpE,CAAC;AACN;AAEa,MAAA,aAAa,CAAC,QAAQ,UAAU;AAC3C,MAAI,EAAE,MAAM,GAAA,IAAO,OAAO,QAAQ;AAE5B,QAAA,QAAQ,CAAC,MAAM,MAAM;AACzB,QAAI,gBAAgB,OAAO,QAAQ,QAAQ,IAAI,EAAE;AACjD,WAAO,QAAQ,UAAU,EAAE,MAAM,IAAI,eAAe;AAIpD,QAAI,IAAI,KAAM,MAAM,KAAK,OAAO,GAAI;AAClC,sBAAgB,OAAO,QAAQ,QAAQ,IAAI,EAAE;AAC7C,aAAO,QAAQ,UAAU,EAAE,MAAM,IAAI,eAAe;AACpD;AACO,aAAA,QAAQ,iBAAiB,IAAI;AAAA,IACtC;AAEA,QAAI,KAAK,KAAK,SAAS,OAAO,GAAG;AACxB,aAAA,QAAQ,iBAAiB,KAAK,KAAK,GAAG,KAAK,KAAK,GAAG,GAAG;AAAA,IAAA,OACxD;AACE,aAAA,QAAQ,iBAAiB,IAAI,KAAK,GAAG,KAAK,KAAK,GAAG,GAAG;AAAA,IAC9D;AAAA,EAAA,CACD;AAED,aAAW,MAAM,OAAO,QAAQ,SAAS,CAAC;AAC5C;AAIA,MAAM,uBAAuB,CAAC,QAAQ,cAAc,MAAM,eAAe,eAAe;AAChF,QAAA,eAAe,YAAY,cAAc,UAAU;AAGnD,QAAA,gBAAgB,OAAO,QAAQ;AAAA,IACnC,EAAE,MAAM,OAAO,GAAG,IAAI,EAAE;AAAA,IACxB,EAAE,MAAM,UAAU,IAAI,SAAS;AAAA,EAAA;AAEjC,SAAO,QAAQ,aAAa,IAAI,EAAE,MAAM,OAAO,GAAG,IAAI,EAAA,GAAK,EAAE,MAAM,UAAU,IAAI,UAAU;AAKpF,SAAA,QAAQ,iBAAiB,EAAE;AAClC,SAAO,QAAQ,UAAU,EAAE,MAAM,IAAI,eAAe;AAC7C,SAAA,QAAQ,iBAAiB,IAAI;AAC7B,SAAA,QAAQ,iBAAiB,YAAY;AAE5C,MAAI,iBAAiB,QAAQ;AAC3B,QAAI,EAAE,MAAM,QAAA,IAAY,OAAO,QAAQ;AAChC,WAAA,QAAQ,UAAU,EAAE,MAAM,UAAU,GAAG,IAAI,WAAW,OAAA,CAAQ;AAAA,EACvE;AAGA,SAAO,QAAQ;AAAA,IACb;AAAA,IACA,EAAE,MAAM,OAAO,GAAG,IAAI,EAAE;AAAA,IACxB,EAAE,MAAM,UAAU,IAAI,SAAS;AAAA,EAAA;AAGjC,SAAO,QAAQ;AACjB;AAEA,MAAM,0BAA0B,CAAC,QAAQ,cAAc,MAAM,kBAAkB;AACvE,QAAA,eAAe,WAAW,YAAY;AAGtC,QAAA,gBAAgB,OAAO,QAAQ;AAAA,IACnC,EAAE,MAAM,OAAO,GAAG,IAAI,EAAE;AAAA,IACxB,EAAE,MAAM,UAAU,IAAI,SAAS;AAAA,EAAA;AAEjC,SAAO,QAAQ,aAAa,IAAI,EAAE,MAAM,OAAO,GAAG,IAAI,EAAA,GAAK,EAAE,MAAM,UAAU,IAAI,UAAU;AAG3F,SAAO,QAAQ,UAAU,EAAE,MAAM,IAAI,eAAe;AAC7C,SAAA,QAAQ,iBAAiB,IAAI;AAC7B,SAAA,QAAQ,iBAAiB,aAAa,UAAU;AAIvD,MAAI,iBAAiB,QAAQ;AACnB,YAAA;AAED,WAAA,QAAQ,aAAa,EAAE,MAAM,IAAI,EAAE,GAAG,EAAE,MAAM,IAAI,EAAG,CAAA;AAAA,EAAA,OACvD;AACG,YAAA;AAER,QAAI,EAAE,GAAO,IAAA,OAAO,QAAQ,UAAU;AAClC,QAAA,eAAe,KAAK,aAAa,UAAU;AAC/C,QAAI,iBAAiB,KAAK,aAAa,UAAU,MAAM,aAAa,UAAU;AACvE,WAAA,QAAQ,aAAa,EAAE,MAAM,IAAI,eAAe,GAAG,EAAE,MAAM,IAAI,aAAc,CAAA;AAAA,EACtF;AAGA,SAAO,QAAQ;AAAA,IACb;AAAA,IACA,EAAE,MAAM,OAAO,GAAG,IAAI,EAAE;AAAA,IACxB,EAAE,MAAM,UAAU,IAAI,SAAS;AAAA,EAAA;AAEjC,SAAO,QAAQ;AACjB;AAEa,MAAA,sBAAsB,CAAC,QAAQ,iBAAiB;AACrD,QAAA,aAAa,OAAO,QAAQ,aAAa;AAC/C,MAAI,EAAE,KAAS,IAAA,OAAO,QAAQ,UAAU;AACxC,MAAI,gBAAgB,OAAO,QAAQ,QAAQ,IAAI,EAAE;AAEjD,MAAI,YAAY;AACd,yBAAqB,QAAQ,cAAc,MAAM,eAAe,UAAU;AAAA,EAAA,OACrE;AACmB,4BAAA,QAAQ,cAAc,MAAM,aAAa;AAAA,EACnE;AACF;ACpTa,MAAAmB,qBAAmBD,gBAAAA,QAAOE,aAAAA,UAAU;AAAA,aACpC,CAAC,EAAE,YAAY,MAAM,OAAO,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,aAK9B,KAAK,EAAE;AAAA,cACN,KAAK,EAAE;AAAA;AAAA;AAIR,MAAA,uBAAuBF,gBAAAA,QAAOC,kBAAgB;AAAA;AAAA,aAE9C,IAAI,EAAE;AAAA,cACL,IAAI,EAAE;AAAA;AAAA;AAIP,MAAA,cAAcD,gBAAAA,QAAOwL,aAAAA,eAAe;AAAA,iBAChC,CAAC,EAAE,YAAY,MAAM,OAAO,CAAC,CAAC;AAAA;AAGlC,MAAA,aAAaxL,gBAAAA,QAAOE,aAAAA,UAAU;AAAA,YAC/B,CAAC,EAAE,MAAM,MAAM,KAAK,MAAM,OAAO,CAAC,CAAC,EAAE;AAAA,aACpC,CAAC,EAAE,YAAY,MAAM,OAAO,CAAC,CAAC;AAAA;AAAA;AAAA,aAG9B,KAAK,EAAE;AAAA,cACN,KAAK,EAAE;AAAA;AAAA;AAMR,MAAA,wBAAwBF,gBAAAA,QAAOwL,aAAAA,eAAe;AAAA,kBACzC,CAAC,EAAE,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,CAAC,EAAE;AAAA;AAIxC,MAAA,eAAexL,gBAAAA,QAAO6E,aAAAA,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAM1B,CAAC,EAAE,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,CAAC,EAAE;AAAA;AAAA,cAExC,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,UAAU;AAAA,eACrC,KAAK,EAAE;AAAA,gBACN,KAAK,EAAE;AAAA;AAAA;AAAA;AC5CvB,MAAM,gBAAgB,CAAC,EAAE,qBAAqB;AACtC,QAAA,EAAE,kBAAkB7F,UAAAA;AAGxB,SAAAH,2BAAAA,IAACS,aAAAA,KAAI,EAAA,SAAS,GAAG,YAAW,cAAa,cAAc,OAAO,IAAI,EAAE,OAAO,IAAI,EAAE,OAC/E,UAAAT,2BAAAA,IAACa,aAAAA,MAAK,EAAA,gBAAe,YAAW,YAAW,YACzC,UAAAL,2BAAAA,KAAC,cAAa,EAAA,IAAG,UAAS,SAAS,gBACjC,UAAA;AAAA,IAAAR,2BAAAA,IAACc,2BACE,UAAc,cAAA;AAAA,MACb,IAAI;AAAA,MACJ,gBAAgB;AAAA,IACjB,CAAA,GACH;AAAA,mCACC8L,MAAO,QAAA,EAAA;AAAA,EAAA,GACV,GACF,EACF,CAAA;AAEJ;AAEA,cAAc,eAAe;AAAA,EAC3B,iBAAiB;AAAA,EAAC;AACpB;AAEA,cAAc,YAAY;AAAA,EACxB,gBAAgB3M,mBAAU,QAAA;AAC5B;ACGA,MAAM,aAAa,CAAC;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,CAAC,gBAAgB,iBAAiB,IAAIyB,eAAS,KAAK;AACpD,QAAA,EAAE,kBAAkBvB,UAAAA;AAC1B,QAAM,oBAAoB,cAAc;AAAA,IACtC,IAAI;AAAA,IACJ,gBAAgB;AAAA,EAAA,CACjB;AACD,QAAM,gBAAgBnB,MAAAA;AAEtB,QAAM,sBAAsB,MAAM;AACd,sBAAA,CAAC,SAAS,CAAC,IAAI;AAAA,EAAA;AAGnC,MAAI,YAAY,eAAe;AAE3B,WAAAwB,2BAAA;AAAA,MAACK,aAAA;AAAA,MAAA;AAAA,QACC,SAAS;AAAA,QACT,YAAW;AAAA,QACX,gBAAe;AAAA,QACf,cAAc,GAAG,IAAI,EAAE,OAAO,IAAI,EAAE;AAAA,QAEpC,UAAA;AAAA,UAAAL,gCAAC,YACC,EAAA,UAAA;AAAA,YAACA,2BAAAA,KAAAuI,aAAA,cAAA,EAAa,UAAQ,MAAC,aAAa,mBAAmB,MAAK,KAAI,OAAO,mBACrE,UAAA;AAAA,cAAC/I,2BAAA,IAAAgJ,aAAA,oBAAA,EAAmB,OAAM,MAAK,UAAE,MAAA;AAAA,cAChChJ,2BAAA,IAAAgJ,aAAA,oBAAA,EAAmB,OAAM,MAAK,UAAE,MAAA;AAAA,cAChChJ,2BAAA,IAAAgJ,aAAA,oBAAA,EAAmB,OAAM,MAAK,UAAE,MAAA;AAAA,cAChChJ,2BAAA,IAAAgJ,aAAA,oBAAA,EAAmB,OAAM,MAAK,UAAE,MAAA;AAAA,cAChChJ,2BAAA,IAAAgJ,aAAA,oBAAA,EAAmB,OAAM,MAAK,UAAE,MAAA;AAAA,cAChChJ,2BAAA,IAAAgJ,aAAA,oBAAA,EAAmB,OAAM,MAAK,UAAE,MAAA;AAAA,YAAA,GACnC;AAAA,4CAEC,aACC,EAAA,UAAA;AAAA,cAAChJ,2BAAAA,IAAAoB,oBAAA,EAAiB,UAAQ,MAAC,OAAM,QAAO,MAAK,QAAO,MAAOpB,2BAAAA,IAAAkI,MAAAA,MAAA,CAAA,CAAK,EAAI,CAAA;AAAA,cACpElI,2BAAAA,IAACoB,oBAAiB,EAAA,UAAQ,MAAC,OAAM,UAAS,MAAK,UAAS,MAAOpB,2BAAAA,IAAAmI,MAAAA,QAAA,CAAA,CAAO,EAAI,CAAA;AAAA,cAC1EnI,2BAAAA,IAACoB,oBAAiB,EAAA,UAAQ,MAAC,OAAM,aAAY,MAAK,aAAY,MAAOpB,2BAAAA,IAAAoI,MAAAA,WAAA,CAAA,CAAU,EAAI,CAAA;AAAA,YAAA,GACrF;AAAA,YAEApI,2BAAAA,IAAC,cAAW,UAAQ,MAAC,OAAM,QAAO,MAAOA,2BAAA,IAAA6M,YAAA,CAAA,CAAK,EAAI,CAAA;AAAA,UAAA,GACpD;AAAA,UAEC,CAAC,gBACC7M,+BAAA4D,aAAAA,QAAA,EAAO,SAAS,qBAAqB,SAAQ,YAC3C,UAAc,cAAA;AAAA,YACb,IAAI;AAAA,YACJ,gBAAgB;AAAA,UACjB,CAAA,GACH;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAIR;AAGE,SAAApD,2BAAA;AAAA,IAACK,aAAA;AAAA,IAAA;AAAA,MACC,SAAS;AAAA,MACT,YAAW;AAAA,MACX,gBAAe;AAAA,MACf,cAAc,GAAG,IAAI,EAAE,OAAO,IAAI,EAAE;AAAA,MAEpC,UAAA;AAAA,QAAAL,gCAAC,YACC,EAAA,UAAA;AAAA,UAAAA,2BAAA;AAAA,YAACuI,aAAA;AAAA,YAAA;AAAA,cACC,aAAa;AAAA,cACb,OAAO;AAAA,cACP,MAAK;AAAA,cACL,UAAU,CAAC,UAAU,cAAc,OAAO,SAAS;AAAA,cAEnD,UAAA;AAAA,gBAAC/I,2BAAA,IAAAgJ,aAAA,oBAAA,EAAmB,OAAM,MAAK,UAAE,MAAA;AAAA,gBAChChJ,2BAAA,IAAAgJ,aAAA,oBAAA,EAAmB,OAAM,MAAK,UAAE,MAAA;AAAA,gBAChChJ,2BAAA,IAAAgJ,aAAA,oBAAA,EAAmB,OAAM,MAAK,UAAE,MAAA;AAAA,gBAChChJ,2BAAA,IAAAgJ,aAAA,oBAAA,EAAmB,OAAM,MAAK,UAAE,MAAA;AAAA,gBAChChJ,2BAAA,IAAAgJ,aAAA,oBAAA,EAAmB,OAAM,MAAK,UAAE,MAAA;AAAA,gBAChChJ,2BAAA,IAAAgJ,aAAA,oBAAA,EAAmB,OAAM,MAAK,UAAE,MAAA;AAAA,cAAA;AAAA,YAAA;AAAA,UACnC;AAAA,0CAEC,aACC,EAAA,UAAA;AAAA,YAAAhJ,2BAAA;AAAA,cAACoB;AAAAA,cAAA;AAAA,gBACC,SAAS,MAAM,cAAc,QAAQ,SAAS;AAAA,gBAC9C,OAAM;AAAA,gBACN,MAAK;AAAA,gBACL,qCAAO8G,MAAK,MAAA,EAAA;AAAA,cAAA;AAAA,YACd;AAAA,YACAlI,2BAAA;AAAA,cAACoB;AAAAA,cAAA;AAAA,gBACC,SAAS,MAAM,cAAc,UAAU,SAAS;AAAA,gBAChD,OAAM;AAAA,gBACN,MAAK;AAAA,gBACL,qCAAO+G,MAAO,QAAA,EAAA;AAAA,cAAA;AAAA,YAChB;AAAA,YACAnI,2BAAA;AAAA,cAACoB;AAAAA,cAAA;AAAA,gBACC,SAAS,MAAM,cAAc,aAAa,SAAS;AAAA,gBACnD,OAAM;AAAA,gBACN,MAAK;AAAA,gBACL,qCAAOgH,MAAU,WAAA,EAAA;AAAA,cAAA;AAAA,YACnB;AAAA,UAAA,GACF;AAAA,UAEApI,2BAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,KAAK;AAAA,cACL,SAAS;AAAA,cACT,OAAM;AAAA,cACN,qCAAO6M,MAAK,MAAA,EAAA;AAAA,YAAA;AAAA,UACd;AAAA,UACC,kBACC7M,2BAAA,IAACkH,aAAQ,SAAA,EAAA,WAAW,qBAAqB,UAAQ,MAAC,QAAQ,eAAe,SAAS,GAChF,UAAA1G,2BAAAA,KAACK,aAAAA,MACC,EAAA,UAAA;AAAA,YAAAL,gCAAC,uBACC,EAAA,UAAA;AAAA,cAAAR,2BAAA;AAAA,gBAACoB;AAAAA,gBAAA;AAAA,kBACC,SAAS,MAAM,cAAc,iBAAiB,WAAW,mBAAmB;AAAA,kBAC5E,OAAM;AAAA,kBACN,MAAK;AAAA,kBACL,qCAAOiH,MAAc,eAAA,EAAA;AAAA,gBAAA;AAAA,cACvB;AAAA,cACArI,2BAAA;AAAA,gBAACoB;AAAAA,gBAAA;AAAA,kBACC,SAAS,MAAM,cAAc,cAAc,WAAW,mBAAmB;AAAA,kBACzE,OAAM;AAAA,kBACN,MAAK;AAAA,kBACL,qCAAO0G,MAAW,YAAA,EAAA;AAAA,gBAAA;AAAA,cACpB;AAAA,cACA9H,2BAAA;AAAA,gBAACoB;AAAAA,gBAAA;AAAA,kBACC,SAAS,MAAM,cAAc,cAAc,WAAW,mBAAmB;AAAA,kBACzE,OAAM;AAAA,kBACN,MAAK;AAAA,kBACL,qCAAOyG,MAAW,YAAA,EAAA;AAAA,gBAAA;AAAA,cACpB;AAAA,YAAA,GACF;AAAA,4CACC8E,aAAAA,iBACC,EAAA,UAAA;AAAA,cAAA3M,2BAAA;AAAA,gBAACoB;AAAAA,gBAAA;AAAA,kBACC,SAAS,MAAM,cAAc,QAAQ,WAAW,mBAAmB;AAAA,kBACnE,OAAM;AAAA,kBACN,MAAK;AAAA,kBACL,qCAAO6G,MAAK,MAAA,EAAA;AAAA,gBAAA;AAAA,cACd;AAAA,cACAjI,2BAAA;AAAA,gBAACoB;AAAAA,gBAAA;AAAA,kBACC,SAAS,MAAM;AACO;AACH;kBACnB;AAAA,kBACA,OAAM;AAAA,kBACN,MAAK;AAAA,kBACL,qCAAO0L,MAAM,SAAA,EAAA;AAAA,gBAAA;AAAA,cACf;AAAA,cACA9M,2BAAA;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,SAAS,MAAM,cAAc,QAAQ,WAAW,mBAAmB;AAAA,kBACnE,OAAM;AAAA,kBACN,MAAK;AAAA,kBAEL,qCAAOe,MAAK,MAAA,EAAA;AAAA,gBAAA;AAAA,cACd;AAAA,cACAf,2BAAA;AAAA,gBAACoB;AAAAA,gBAAA;AAAA,kBACC,SAAS,MAAM,cAAc,SAAS,WAAW,mBAAmB;AAAA,kBACpE,OAAM;AAAA,kBACN,MAAK;AAAA,kBACL,qCAAO4G,MAAM,OAAA,EAAA;AAAA,gBAAA;AAAA,cACf;AAAA,YAAA,GACF;AAAA,UAAA,EAAA,CACF,EACF,CAAA;AAAA,QAAA,GAEJ;AAAA,QAEC,uBACEhI,2BAAAA,IAAA4D,aAAA,QAAA,EAAO,SAAS,qBAAqB,SAAQ,YAC3C,UAAc,cAAA;AAAA,UACb,IAAI;AAAA,UACJ,gBAAgB;AAAA,QACjB,CAAA,GACH;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIR;AAEA,WAAW,eAAe;AAAA,EACxB,eAAe;AAAA,EACf,gBAAgB;AAAA,EAAC;AAAA,EACjB,mBAAmB;AAAA,EAAC;AAAA,EACpB,qBAAqB;AACvB;AAEA,WAAW,YAAY;AAAA,EACrB,UAAU3D,mBAAAA,QAAU,KAAK;AAAA,EACzB,WAAWA,2BAAU,MAAM,EAAE,SAASA,2BAAU,IAAK,CAAA,EAAE;AAAA,EACvD,cAAcA,mBAAAA,QAAU,KAAK;AAAA,EAC7B,eAAeA,mBAAU,QAAA;AAAA,EACzB,eAAeA,mBAAU,QAAA;AAAA,EACzB,kBAAkBA,mBAAU,QAAA;AAAA,EAC5B,qBAAqBA,mBAAU,QAAA;AACjC;AAIA,MAAM,aAAakB,gBAAAA,QAAON,aAAAA,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACtN9B,MAAMqI,gBAAc/H,gBAAAA,QAAOV,aAAAA,GAAG;AAAA;AAAA,YAElB,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,UAAU;AAAA;AAAA;AAIlD,MAAM,qBAAqBU,gBAAAA,QAAOL,aAAAA,UAAU;AAAA;AAAA;AAI5C,MAAM,UAAUqL,MAAA;AAAA,EACd,CACE,EAAE,MAAM,UAAU,OAAO,WAAW,aAAa,MAAM,UAAU,aAAa,OAAO,SAAA,GACrF,iBACG;AACG,UAAA,EAAE,kBAAkBhM,UAAAA;AACpB,UAAA,cAAcnB,aAAO,IAAI;AACzB,UAAA,YAAYA,aAAO,IAAI;AAC7B,UAAM,CAAC,eAAe,gBAAgB,IAAI0C,eAAS,KAAK;AACxD,UAAM,CAAC,iBAAiB,kBAAkB,IAAIA,eAAS,KAAK;AAC5D,UAAM,CAAC,cAAc,eAAe,IAAIA,eAAS,KAAK;AAChD,UAAA,EAAE,eAAemH,aAAAA;AAEjB,UAAA,qBAAqB,WAAW,eAAe;AAErD,UAAM,uBAAuB,MAAM,mBAAmB,CAAC,SAAS,CAAC,IAAI;AACrE,UAAM,0BAA0B,MAAM,iBAAiB,CAAC,SAAS,CAAC,IAAI;AACtE,UAAM,qBAAqB,MAAM;AAC/B,uBAAiB,KAAK;AACN,sBAAA,CAAC,SAAS,CAAC,IAAI;AAAA,IAAA;AAGjC,UAAM,oBAAoB,CAAC3F,QAAO,kBAAkB,kBAAkB;AACpE,cAAQA,QAAO;AAAA,QACb,KAAK;AAAA,QACL,KAAK,iBAAiB;AACpB,0BAAgB,kBAAkBA,MAAK;AACzB;AACd;AAAA,QACF;AAAA,QACA,KAAK;AAAA,QACL,KAAK,SAAS;AACZ,8BAAoB,kBAAkBA,MAAK;AAC7B;AACd;AAAA,QACF;AAAA,QACA,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK,aAAa;AAChB,0BAAgB,kBAAkBA,MAAK;AACvC;AAAA,QACF;AAAA,QACA,KAAK;AAAA,QACL,KAAK,cAAc;AACjB,sBAAY,kBAAkBA,MAAK;AACrB;AACd;AAAA,QACF;AAAA,QACA,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK,MAAM;AACT,uBAAa,kBAAkBA,MAAK;AACpC;AAAA,QACF;AAAA,MAIF;AAAA,IAAA;AAGI,UAAA,qBAAqB,CAAC,UAAU;AACpC,YAAM,iBAAiB,MAAM,IAAI,CAAC,OAAO;AAAA,QACvC,KAAK,EAAE,mBAAmB,EAAE;AAAA,QAC5B,KAAK4F,aAAAA,4BAA4B,EAAE,GAAG;AAAA,QACtC,MAAM,EAAE;AAAA,MACR,EAAA;AAEF,iBAAW,WAAW,cAAc;AACpC,yBAAmB,KAAK;AAAA,IAAA;AAG1B,UAAM,uBAAuB,cACzB;AAAA,MACE,EAAE,IAAI,YAAY,IAAI,gBAAgB,YAAY,eAAe;AAAA,MACjE,EAAE,GAAG,YAAY,OAAO;AAAA,IAE1B,IAAA;AAEE,UAAA,QAAQ,UAAU,KACpB;AAAA,MACE,EAAE,IAAI,UAAU,IAAI,gBAAgB,UAAU,eAAe;AAAA,MAC7D,EAAE,GAAG,UAAU,OAAO;AAAA,IAExB,IAAA;AAEJ,WAEItI,2BAAA,KAAA6C,qBAAA,EAAA,UAAA;AAAA,MAAA7C,gCAACK,aAAAA,QAAK,WAAU,UAAS,YAAW,WAAU,KAAK,GACjD,UAAA;AAAA,QAACL,2BAAAA,KAAAK,aAAAA,MAAA,EAAK,KAAK,GACT,UAAA;AAAA,UAAAL,gCAACM,aAAAA,cAAW,SAAQ,MAAK,YAAW,QAAO,WAAU,cAClD,UAAA;AAAA,YAAA;AAAA,YACA,YAAYd,2BAAA,IAAC,oBAAmB,EAAA,WAAU,aAAY,UAAC,KAAA;AAAA,UAAA,GAC1D;AAAA,UACC,eAAeA,2BAAA,IAACkJ,eAAY,EAAA,aAAa,GAAI,UAAY,aAAA;AAAA,QAAA,GAC5D;AAAA,QAEA1I,2BAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC;AAAA,YACA;AAAA,YACA,gBAAgB;AAAA,YAChB,YAAY;AAAA,YAEZ,UAAA;AAAA,cAAAR,2BAAA;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA,eAAe;AAAA,kBACf,kBAAkB;AAAA,kBAClB,qBAAqB,eAAe,SAAY;AAAA,kBAChD;AAAA,gBAAA;AAAA,cACF;AAAA,cAEAA,2BAAA;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA,aAAa;AAAA,kBACb;AAAA,kBACA;AAAA,kBACA,KAAK;AAAA,gBAAA;AAAA,cACP;AAAA,cAEC,CAAC,gBAAiBA,2BAAAA,IAAA,eAAA,EAAc,gBAAgB,mBAAoB,CAAA;AAAA,YAAA;AAAA,UAAA;AAAA,QACvE;AAAA,QACCA,2BAAAA,IAAA,MAAA,EAAK,MAAY,MAAY,MAAc,CAAA;AAAA,MAAA,GAC9C;AAAA,MAEC,SACCA,2BAAAA,IAACS,aAAAA,KAAI,EAAA,YAAY,GACf,UAACT,2BAAA,IAAAc,yBAAA,EAAW,SAAQ,MAAK,WAAU,aAAY,2BAAuB,MACnE,gBACH,CAAA,GACF;AAAA,MAGD,mBACEd,2BAAA,IAAA,oBAAA,EAAmB,SAAS,sBAAsB,gBAAgB,oBAAoB;AAAA,IAE3F,EAAA,CAAA;AAAA,EAEJ;AACF;AAEA,QAAQ,eAAe;AAAA,EACrB,UAAU;AAAA,EACV,OAAO;AAAA,EACP,aAAa;AAAA,EACb,aAAa;AAAA,EACb,UAAU;AAAA,EACV,OAAO;AAAA,EACP,MAAM;AACR;AAEA,QAAQ,YAAY;AAAA,EAClB,MAAMC,2BAAU,UAAU,CAACA,2BAAU,QAAQA,mBAAAA,QAAU,KAAK,CAAC;AAAA,EAC7D,UAAUA,mBAAU,QAAA;AAAA,EACpB,OAAOA,mBAAU,QAAA;AAAA,EACjB,WAAWA,2BAAU,MAAM;AAAA,IACzB,IAAIA,mBAAAA,QAAU,OAAO;AAAA,IACrB,gBAAgBA,mBAAAA,QAAU,OAAO;AAAA,IACjC,QAAQA,mBAAU,QAAA;AAAA,EACnB,CAAA,EAAE;AAAA,EACH,aAAaA,mBAAU,QAAA;AAAA,EACvB,MAAMA,mBAAAA,QAAU,OAAO;AAAA,EACvB,UAAUA,mBAAAA,QAAU,KAAK;AAAA,EACzB,aAAaA,2BAAU,MAAM;AAAA,IAC3B,IAAIA,mBAAAA,QAAU,OAAO;AAAA,IACrB,gBAAgBA,mBAAAA,QAAU,OAAO;AAAA,IACjC,QAAQA,mBAAU,QAAA;AAAA,EAAA,CACnB;AAAA,EACD,UAAUA,mBAAU,QAAA;AAAA,EACpB,OAAOA,mBAAU,QAAA;AACnB;ACjNA,SAASgK,UAAQ,kBAAkB,QAAQ;AACzC,SAAO,CAAC,UAAU;AAEV,UAAA,YAAY,OAAO,MAAM,IAAI;AAEnC,WAAQjK,2BAAAA,IAAA,kBAAA,EAAkB,GAAG,OAAQ,GAAG,UAAW,CAAA;AAAA,EAAA;AAEvD;ACTA,MAAM,kBAAkB,CAAC8C,UAAS,aAAa,UAAU;AAChD,SAAA;AAAA,IACL;AAAA,MACE,WAAW;AAAA,QACT,WAAW;AAAA,UACT,IAAI;AAAA,UACJ,gBAAgB;AAAA,QAClB;AAAA,QACA,UAAU;AAAA,QACV,QAAQ;AAAA,MACV;AAAA,MACA,KAAK;AAAA,MACL,OAAO;AAAA,IACT;AAAA,IACA,GAAGA,SAAQ,IAAI,CAAC,WAAW;AAClB,aAAA;AAAA,QACL,WAAW;AAAA,UACT,WAAW;AAAA,YACT,IAAI;AAAA,YACJ,gBAAgB;AAAA,UAClB;AAAA,UACA,QAAQ;AAAA,UACR,UAAU;AAAA,QACZ;AAAA,QACA,KAAK;AAAA,QACL,OAAO;AAAA,MAAA;AAAA,IACT,CACD;AAAA,EAAA;AAEL;AC3BA,MAAM,eAAe,CAAC,OAAO,OAAO;AAC1B,UAAAiK,iBAAAA,QAAQ,IAAI,GAAG;AAAA,IACrB,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT;AACE,aAAO,QAAQ;AAAA,EACnB;AACF;ACtCA,SAAS7C,YAAU,MAAM;AACjB,QAAA;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,MACEP,aAAyB,yBAAA;AAEvB,QAAA,gBAAgB9K,MAAAA,QAAQ,MAAM;AAClC,WAAO,kBAAkB,4BAA4B;AAAA,EACpD,GAAA,CAAC,iBAAiB,2BAA2B,yBAAyB,CAAC;AAEpE,QAAA,iBAAiBA,MAAAA,QAAQ,MAAM;AAC5B,WAAA,kBAAkB,CAAK,IAAA;AAAA,EAAA,GAC7B,CAAC,iBAAiB,uBAAuB,CAAC;AAE7C,QAAM,QAAQZ,aAAA,QAAI,cAAc,MAAM,IAAI;AAEnC,SAAA;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;ACpCA,MAAM,oBAAoB;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;ACSA,SAAS,OAAO;AAAA,EACd;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,MAAAE;AAAA,EACA;AACF,GAAG;AACK,QAAA,EAAE,WAAW0K,aAAAA;AACb,QAAA,EAAE,kBAAkB1I,UAAAA;AAC1B,QAAM,EAAE,aAAa,yBAAyB,IAAI,qBAAqB;AAEjE,QAAA,WAAWtB,MAAAA,QAAQ,MAAM,CAACZ,qBAAI,WAAW,YAAY,IAAI,GAAG,CAAC,SAAS,CAAC;AAC7E,QAAM,EAAE,MAAM,aAAa,eAAA,IAAmB;AAC9C,QAAM,QAAQA,aAAAA,QAAI,YAAY,CAAC,IAAI,GAAG,IAAI;AAEpC,QAAA,YAAYY,MAAAA,QAAQ,MAAM;AAC9B,WAAO,aAAa,IAAI;AAAA,EAAA,GACvB,CAAC,IAAI,CAAC;AAEH,QAAA,cAAcA,MAAAA,QAAQ,MAAM;AAChC,UAAM,mBAAmBX,cAAA;AAAA,MACvB;AAAA,MACA,0BACI,CAAC,GAAG8O,mBAAqB,YAAY,WAAW,IAChDA;AAAAA,IAAA;AAGA,UAAA,eAAe,YAAY,SAAS;AAE1C,QAAI,cAAc;AACV,YAAA,SAAS,IAAI,OAAO,YAAY;AAEtC,UAAI,QAAQ;AACV,yBAAiB,QAAQ;AAAA,MAC3B;AAAA,IACF;AAEO,WAAA;AAAA,EAAA,GACN,CAAC,aAAa,uBAAuB,CAAC;AAEzC,QAAM,aAAanO,MAAAA,QAAQ,MAAMZ,aAAAA,QAAI,aAAa,CAAC,UAAU,GAAG,KAAK,GAAG,CAAC,WAAW,CAAC;AAE/E,QAAA,uBAAuBY,MAAAA,QAAQ,MAAM;AACzC,UAAM,aAAaZ,aAAAA,QAAI,0BAA0B,CAAC,YAAY,GAAG,CAAA,CAAE;AAC7D,UAAA,qBAAqBA,qBAAI,YAAY,CAAC,UAAU,CAAC,GAAG,MAAM,GAAG,IAAI;AAEvE,WAAO,uBAAuB;AAAA,EAAA,GAC7B,CAAC,0BAA0B,SAAS,CAAC;AAElC,QAAA,YAAY,aAAa,IAAI;AAEnC,QAAM,aAAa,SAAS,WAAW,CAAC,QAAQ,CAAK,IAAA;AAE/C,QAAA,2BAA2BY,MAAAA,QAAQ,MAAM;AACvC,UAAA,aAAa,UAAU,KAAK,GAAG;AAEjC,QAAA,cAAc,SAAS,UAAU,GAAG;AAC/B,aAAA;AAAA,IACT;AAEA,QAAI,sBAAsB;AACxB,aAAO,cAAc,SAAS,UAAU,CAAC,CAAC;AAAA,IAC5C;AAEM,UAAA,qBAAqB,UAAU,SAAS;AAE9C,QAAI,oBAAoB;AAChB,YAAA,kBAAkBoO,sBAAK,WAAW,UAAU,SAAS,CAAC,EAAE,KAAK,GAAG;AAE/D,aAAA,cAAc,SAAS,eAAe;AAAA,IAC/C;AAEO,WAAA;AAAA,EACN,GAAA,CAAC,eAAe,WAAW,oBAAoB,CAAC;AAE7C,QAAA,2BAA2BpO,MAAAA,QAAQ,MAAM;AACvC,UAAA,aAAa,UAAU,KAAK,GAAG;AAEjC,QAAA,eAAe,SAAS,UAAU,GAAG;AAChC,aAAA;AAAA,IACT;AAEA,QAAI,sBAAsB;AACxB,aAAO,eAAe,SAAS,UAAU,CAAC,CAAC;AAAA,IAC7C;AAEM,UAAA,qBAAqB,UAAU,SAAS;AAE9C,QAAI,oBAAoB;AAChB,YAAA,kBAAkBoO,sBAAK,WAAW,UAAU,SAAS,CAAC,EAAE,KAAK,GAAG;AAE/D,aAAA,eAAe,SAAS,eAAe;AAAA,IAChD;AAEO,WAAA;AAAA,EACN,GAAA,CAAC,gBAAgB,WAAW,oBAAoB,CAAC;AAE9C,QAAA,+BAA+BpO,MAAAA,QAAQ,MAAM;AACjD,WAAO,4BAA4B;AAAA,EAAA,GAClC,CAAC,0BAA0B,wBAAwB,CAAC;AAEjD,QAAA,qBAAqBA,MAAAA,QAAQ,MAAM;AACvC,QAAI,CAAC,iBAAiB;AACd,YAAA,mBAAmB,4BAA4B,CAAC;AAEtD,UAAI,kBAAkB;AACb,eAAA;AAAA,MACT;AAEO,aAAA;AAAA,IACT;AAEO,WAAA;AAAA,KACN,CAAC,UAAU,iBAAiB,0BAA0B,wBAAwB,CAAC;AAElF,QAAMiE,WAAUjE,MAAA;AAAA,IACd,MAAM,gBAAgB,YAAY,QAAQ,CAAA,GAAI,UAAU;AAAA,IACxD,CAAC,aAAa,UAAU;AAAA,EAAA;AAG1B,QAAM,EAAE,OAAO,aAAa,aAAa,YAAY;AAErD,MAAI,YAAY,OAAO;AACd,WAAA;AAAA,EACT;AAEA,MAAI,CAAC,8BAA8B;AAE/B,WAAAmB,2BAAA;AAAA,MAACgL,aAAA;AAAA,MAAA;AAAA,QACC,aAAa,cAAc,EAAE,IAAI,aAAa,gBAAgB,gBAAgB;AAAA,QAC9E,WAAW,EAAE,IAAI,OAAO,gBAAgB,MAAM;AAAA,QAC9C;AAAA,QACA,OAAO,SAAS,cAAc,KAAK;AAAA,QACnC,MAAM;AAAA,QACN,UAAU;AAAA,MAAA;AAAA,IAAA;AAAA,EAGhB;AAEA,MAAI,SAAS,YAAY;AAErB,WAAAhL,2BAAA;AAAA,MAACkN;AAAAA,MAAA;AAAA,QACE,GAAG;AAAA,QACH,GAAG;AAAA,QACJ;AAAA,QACA,aACE,UAAU,cACN,cAAc;AAAA,UACZ,IAAI,UAAU;AAAA,UACd,gBAAgB,UAAU;AAAA,QAC3B,CAAA,IACD;AAAA,QAEN,WAAW;AAAA,UACT,IAAI,UAAU;AAAA,UACd,gBAAgB,UAAU;AAAA,QAC5B;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,MAAM;AAAA,QACN,aACE,UAAU,cACN;AAAA,UACE,IAAI,UAAU;AAAA,UACd,gBAAgB,UAAU;AAAA,QAAA,IAE5B;AAAA,QAEN;AAAA,QACA,MAAA/O;AAAA,QACA;AAAA,QACA,OAAO,SAAS,cAAc,KAAK;AAAA,MAAA;AAAA,IAAA;AAAA,EAGzC;AAEA,QAAM,eAAe;AAAA,IACnB,KAAK;AAAA,IACL,OAAO,OAAO;AAAA,IACd,SAAS;AAAA,IACT,QAAQgP;AAAAA,IACR,GAAG;AAAA,IACH,GAAG;AAAA,EAAA;AAIH,SAAAnN,2BAAA;AAAA,IAACoN,aAAA;AAAA,IAAA;AAAA,MACC,WAAW;AAAA,MACX,cAAa;AAAA,MACb,WAAW,EAAE,IAAI,OAAO,gBAAgB,MAAM;AAAA,MAE9C,YAAY,cAAc,UAAU,CAAC,MAAM,MAAS,EAAE,SAAS,YAAY,OAAO;AAAA,MAClF,aAAa,cAAc,EAAE,IAAI,aAAa,gBAAgB,gBAAgB;AAAA,MAC9E,UAAU;AAAA,MACV;AAAA,MACA;AAAA,MACA,gBAAgB,yBAAyB;AAAA,MACzC;AAAA,MACA,UAAU,YAAY,YAAY;AAAA,MAClC,MAAM;AAAA,MACN;AAAA,MACA,SAAAtK;AAAA,MACA,aAAa,cAAc,EAAE,IAAI,aAAa,gBAAgB,gBAAgB;AAAA,MAC9E,UAAU,YAAY,YAAY;AAAA,MAClC,MAAM,QAAQ,IAAI;AAAA,MAClB,MAAM,kBAAkB;AAAA,MAExB,OAAO;AAAA,MACP,kBAAkB;AAAA,IAAA;AAAA,EAAA;AAGxB;AAEA,OAAO,eAAe;AAAA,EACpB,cAAc;AAAA,EACd,YAAY,CAAC;AAAA,EACb,aAAa;AAAA,EACb,MAAM;AAAA,EACN,OAAO;AAAA,EACP,YAAY,CAAC;AAAA,EACb,mBAAmB,CAAC;AACtB;AAEA,OAAO,YAAY;AAAA,EACjB,eAAe7C,mBAAAA,QAAU,MAAM;AAAA,EAC/B,cAAcA,mBAAU,QAAA;AAAA,EACxB,aAAaA,mBAAAA,QAAU,OAAO;AAAA,EAC9B,YAAYA,mBAAU,QAAA;AAAA,EACtB,MAAMA,mBAAAA,QAAU,OAAO;AAAA,EACvB,iBAAiBA,mBAAAA,QAAU,KAAK;AAAA,EAChC,aAAaA,mBAAU,QAAA;AAAA,EACvB,WAAWA,mBAAAA,QAAU,OAAO;AAAA,EAC5B,UAAUA,mBAAAA,QAAU,KAAK;AAAA,EACzB,gBAAgBA,mBAAAA,QAAU,MAAM;AAAA,EAChC,MAAMA,mBAAU,QAAA;AAAA,EAChB,yBAAyBA,mBAAAA,QAAU,KAAK;AAAA,EACxC,OAAOA,mBAAU,QAAA;AAAA,EACjB,YAAYA,2BAAU,MAAM;AAAA,IAC1B,aAAaA,mBAAU,QAAA;AAAA,IACvB,eAAeA,mBAAU,QAAA;AAAA,IACzB,UAAUA,mBAAU,QAAA;AAAA,EAAA,CACrB;AAAA,EACD,mBAAmBA,mBAAU,QAAA;AAC/B;AAEA,MAAM,UAAU,CAAC,SAAS;AACxB,UAAQ,MAAM;AAAA,IACZ,KAAK;AAAA,IACL,KAAK;AACI,aAAA;AAAA,IACT;AACS,aAAA;AAAA,EACX;AACF;AAEA,MAAMiL,aAAWpF,MAAK,KAAA,QAAQ3B,iBAAAA,OAAO;AAErC,MAAA,WAAe8F,UAAQiB,YAAUC,WAAM;AClRvC,MAAM,yBAAyB,CAAC,EAAE,cAAc,mBAAmB,UAAU,WAAW;AAChF,QAAA,EAAE,uBAAuB;AAC/B,QAAM,sBAAsBtM,MAAA;AAAA,IAC1B,MAAM,mBAAmB,YAAY;AAAA,IACrC,CAAC,cAAc,kBAAkB;AAAA,EAAA;AAE7B,QAAA,SAAS,oBAAoB,QAAQ;AAErC,QAAA,EAAE,uBAAuB;AAG7B,SAAAmB,2BAAA;AAAA,IAACS,aAAA;AAAA,IAAA;AAAA,MACC,YAAY,oBAAoB,KAAK;AAAA,MACrC,aAAa;AAAA,MACb,cAAc;AAAA,MACd,YAAY;AAAA,MACZ,eAAe;AAAA,MACf,WAAW;AAAA,MACX,aAAa,WAAW,eAAe;AAAA,MAEvC,UAACT,2BAAA,IAAAa,aAAA,MAAA,EAAK,WAAU,UAAS,YAAW,WAAU,KAAK,GAChD,UAAO,OAAA,IAAI,CAAC,UAAU,QAAQ;AAC7B,eACGb,2BAAAA,IAAAW,aAAAA,MAAA,EAAK,KAAK,GACR,mBAAS,IAAI,CAAC,EAAE,MAAM,WAAW,MAAAxC,OAAM,WAAW,aAAa,iBAAiB;AACzE,gBAAA,cAAc,YAAY,SAAS;AACzC,gBAAM,OAAO,GAAG,IAAI,IAAI,SAAS;AAEjC,cAAI,aAAa;AACf,kBAAM,WAAW,YAAY;AAE7B,kDACGyC,aAAAA,UAAS,EAAA,KAAKzC,OAAM,GAAG,IAAI,IAAI,IAC9B,UAAA6B,2BAAA;AAAA,cAACqN;AAAAA,cAAA;AAAA,gBACC,cAAc;AAAA,gBACd,WAAW;AAAA,kBACT,IAAI,UAAU;AAAA,kBACd,gBAAgB,UAAU;AAAA,gBAC5B;AAAA,gBACA,UAAQ;AAAA,gBACR,cAAc,YAAY;AAAA,gBAC1B,KAAK,YAAY;AAAA,gBACjB,KAAK,YAAY;AAAA,gBACjB,MAAM;AAAA,gBACN,UAAU,YAAY,YAAY;AAAA,cAAA;AAAA,YAAA,KAZG,SAczC;AAAA,UAEJ;AAEA,gDACGzM,aAAAA,UAAS,EAAA,KAAKzC,OAAsB,GAAG,IAAI,IAAI,IAC9C,UAAA6B,2BAAA;AAAA,YAACsN;AAAAA,YAAA;AAAA,cACC;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA,MAAAnP;AAAA,cACA,mBAAmB;AAAA,YAAA;AAAA,UAAA,KARG,SAU1B;AAAA,QAAA,CAEH,KAxCgB,GAyCnB;AAAA,MAEH,CAAA,GACH;AAAA,IAAA;AAAA,EAAA;AAGN;AAEA,uBAAuB,eAAe;AAAA,EACpC,mBAAmB;AAAA,EACnB,UAAU;AACZ;AAEA,uBAAuB,YAAY;AAAA,EACjC,cAAc8B,mBAAAA,QAAU,OAAO;AAAA,EAC/B,mBAAmBA,mBAAU,QAAA;AAAA,EAC7B,UAAUA,mBAAU,QAAA;AAAA,EACpB,MAAMA,mBAAAA,QAAU,OAAO;AACzB;ACxFa,MAAA,SAASkB,gBAAAA,QAAOV,aAAAA,GAAG;AAAA;AAAA,6BAEH,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,UAAU;AAAA,4BACvC,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,UAAU;AAAA,2BACvC,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,UAAU;AAAA,uBAC1C,CAAC,EAAE,YAAY,MAAM,YAAY,IAAI,CAAC,EAAE,MAAA,MAAY,MAAM,YAAY;AAAA;AAGhF,MAAA,UAAUU,gBAAAA,QAAOV,aAAAA,GAAG;AAAA;AAAA;AAAA;AAAA;AAAA,wBAKT,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAMlC,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAY7C,CAAC,EAAE,YAAY,MAAM,YAAY,IAAI,CAAC,EAAE,MAAA,MAAY,MAAM,YAAY;AAAA;AAAA;AAAA;AAAA,wBAInE,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,UAAU;AAAA;AAAA;AAIvD,MAAM,QAAQ,CAAC,EAAE,UAAU,YAAY;AACtC,QAAA,EAAE,kBAAkBN,UAAAA;AAGxB,SAAAK,2BAAA,KAAC6F,aAAkB,mBAAA,EAAA,eAAc,gCAC9B,UAAA;AAAA,IAAA;AAAA,IACA,SACErG,2BAAA,IAAAS,aAAA,KAAA,EAAI,YAAY,GACf,yCAACK,aAAAA,YAAW,EAAA,SAAQ,MAAK,WAAU,aAChC,UAAA;AAAA,MACC,EAAE,IAAI,MAAM,IAAI,gBAAgB,MAAM,eAAe;AAAA,MACrD,EAAE,GAAG,MAAM,OAAO;AAAA,OAEtB,EACF,CAAA;AAAA,EAEJ,EAAA,CAAA;AAEJ;AAEA,MAAM,eAAe;AAAA,EACnB,OAAO;AACT;AAEA,MAAM,YAAY;AAAA,EAChB,UAAUb,mBAAAA,QAAU,KAAK;AAAA,EACzB,OAAOA,2BAAU,MAAM;AAAA,IACrB,IAAIA,mBAAAA,QAAU,OAAO;AAAA,IACrB,gBAAgBA,mBAAAA,QAAU,OAAO;AAAA,IACjC,QAAQA,mBAAU,QAAA;AAAA,EAAA,CACnB;AACH;ACzEA,MAAM,aAAakB,gBAAO,QAAA;AAAA;AAAA,sBAEJ,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,UAAU;AAAA,wBACpC,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,UAAU;AAAA;AAAA,aAEjD,CAAC,EAAE,YAAY,MAAM,OAAO,CAAC,CAAC;AAAA;AAG3C,MAAMoM,YAAU,MAAM;AACpB,SAAQvN,2BAAAA,IAAA,YAAA,EAAW,SAAS,GAAG,YAAW,aAAa,CAAA;AACzD;ACgBA,MAAM,mBAAmBmB,gBAAAA,QAAOE,aAAAA,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA,cAK5B,CAAC,EAAE,OAAO,SAAS,MACzB,WAAW,MAAM,OAAO,aAAa,MAAM,OAAO,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAOpD,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,UAAU;AAAA;AAAA;AAAA;AAAA;AAMtD,MAAMmM,gBAAcrM,gBAAAA,QAAON,aAAAA,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAMf,CAAC,EAAE,OAAO,eAAgB,WAAW,MAAM,OAAO,aAAa,MAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAQvE,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAWxD,MAAM,cAAc,CAAC;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAAH;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,EAAE,cAAc,uBAAuB,0BAA0BiJ,aAAyB,yBAAA;AAEhG,QAAM,iBAAiB8D,kBAAA;AAAA,IACrBxP,qBAAI,cAAc,CAAC,GAAG,mBAAmB,MAAM,GAAG,GAAG,SAAS,GAAG,EAAE;AAAA,EAAA;AAE/D,QAAA,eAAee,aAAO,IAAI;AAC1B,QAAA,EAAE,kBAAkBmB,UAAAA;AAQpB,QAAA,eAAe,mBAAmB,MAAM,GAAG,EAAE,MAAM,GAAG,EAAE,EAAE,KAAK,GAAG;AAExE,QAAM,CAAC,EAAE,WAAW,YAAY,cAAc,GAAG,QAAQ,SAAS,SAAS,cAAc,IACvFoK,OAAA,eAAe,CAAC,YAAY;AAAA,IAC1B,MAAM,GAAG,UAAU,SAAS,IAAI,YAAY;AAAA,IAC5C,OAAA7J;AAAA,IACA,MAAM;AAAA,MACJ;AAAA,IACF;AAAA,IACA,YAAY;AAAA,IACZ,UAAU;AAEQ;IAClB;AAAA,IACA,QAAQ;AAEgB;IACxB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,CACD;AAEHrB,QAAAA,UAAU,MAAM;AACd,mBAAeyC,qBAAAA,cAAc,GAAG,EAAE,sBAAsB,MAAO,CAAA;AAAA,EAAA,GAC9D,CAAC,gBAAgBpB,MAAK,CAAC;AAEpB,QAAA,wBAAwBuG,OAAAA,YAAY,cAAc,OAAO;AACzD,QAAA,kBAAkBA,OAAAA,YAAY,QAAQ,OAAO;AAE7C,QAAA,EAAE,uBAAuB;AAE/B,wCACGxG,kBAAI,EAAA,KAAK,iBACP,UAAA,4CACE8M,WAAQ,EAAA,IAER/M,gCAAAyF,aAAAA,WAAA,EAAU,UAAU,QAAQ,UAAU,eAAe,IAAI,oBAAoB,MAAK,KACjF,UAAA;AAAA,IAAAjG,2BAAA;AAAA,MAACkG,aAAA;AAAA,MAAA;AAAA,QACC,QACE,aAAa,OACX1F,2BAAAA,KAACgN,iBAAY,KAAK,GAAG,UAAU,QAC7B,UAAA;AAAA,UAAAxN,2BAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,UAAU;AAAA,cACV,UAAQ;AAAA,cACR,SAAS,MAAM;AACb,sCAAsB,kBAAkB;AACxB;cAClB;AAAA,cACA,OAAO,cAAc;AAAA,gBACnB,IAAIO,eAAQ,wBAAwB;AAAA,gBACpC,gBAAgB;AAAA,cAAA,CACjB;AAAA,cACD,qCAAOe,MAAM,OAAA,EAAA;AAAA,YAAA;AAAA,UACf;AAAA,UACAtB,2BAAA;AAAA,YAACqB,aAAA;AAAA,YAAA;AAAA,cACC,WAAU;AAAA,cACV,KAAK;AAAA,cACL,aAAY;AAAA,cACZ,MAAK;AAAA,cACL,UAAQ;AAAA,cACR,UAAU;AAAA,cACV,SAAS,CAAC,MAAM,EAAE,gBAAgB;AAAA,cAClC,mBAAiB;AAAA,cACjB,OAAO,cAAc;AAAA,gBACnB,IAAId,eAAQ,6BAA6B;AAAA,gBACzC,gBAAgB;AAAA,cAAA,CACjB;AAAA,cACD,WAAW;AAAA,cAEX,yCAACiB,MAAK,MAAA,EAAA;AAAA,YAAA;AAAA,UACR;AAAA,QAAA,GACF;AAAA,QAGJ,OAAO;AAAA,QACP,gBAAe;AAAA,MAAA;AAAA,IACjB;AAAA,mCACC2E,aAAAA,kBACC,EAAA,UAAAnG,2BAAA;AAAA,MAACa,aAAA;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,YAAW;AAAA,QACX,YAAW;AAAA,QACX,SAAS;AAAA,QACT,KAAK;AAAA,QAEJ,UAAO,OAAA,IAAI,CAAC,UAAU,QAAQ;AAC7B;AAAA;AAAA,YAEGb,2BAAAA,IAAAW,aAAAA,MAAA,EAAK,KAAK,GACR,UAAS,SAAA,IAAI,CAAC,EAAE,MAAM,aAAa,WAAW,YAAY,MAAAxC,YAAW;AAC9D,oBAAA,cAAc,YAAY,SAAS;AACzC,oBAAM,OAAO,GAAG,kBAAkB,IAAI,IAAI;AAE1C,kBAAI,aAAa;AACf,sBAAMuP,gBAAe,YAAY;AAEjC,sDACG9M,aAAAA,UAAS,EAAA,KAAKzC,OAAM,GAAG,IAAI,IAAI,IAC9B,UAAA6B,2BAAA;AAAA,kBAACqN;AAAAA,kBAAA;AAAA,oBACC,cAAcK;AAAAA,oBACd,WAAW;AAAA,sBACT,IAAI,UAAU;AAAA,sBACd,gBAAgB,UAAU;AAAA,oBAC5B;AAAA,oBACA,cAAc,YAAY;AAAA,oBAC1B,UAAQ;AAAA,oBACR,MAAM;AAAA,oBACN,KAAK,YAAY;AAAA,oBACjB,KAAK,YAAY;AAAA,oBACjB,UAAU,YAAY;AAAA,kBAAA;AAAA,gBAAA,KAZe,IAczC;AAAA,cAEJ;AAEA,oDACG9M,aAAAA,UAAoB,EAAA,KAAKzC,OAAM,GAAG,IAAI,IAAI,IACzC,UAAA6B,2BAAA;AAAA,gBAACsN;AAAAA,gBAAA;AAAA,kBACC;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA,MAAAnP;AAAA,kBACA,mBAAmB;AAAA,gBAAA;AAAA,cAAA,KARR,IAUf;AAAA,YAAA,CAEH,KAxCgB,GAyCnB;AAAA;AAAA,QAAA,CAEH;AAAA,MAAA;AAAA,IAAA,GAEL;AAAA,EAAA,EACF,CAAA,EAEJ,CAAA;AAEJ;AAEA,YAAY,eAAe;AAAA,EACzB,cAAc;AAAA,EACd,QAAQ,CAAC;AAAA,EACT,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,kBAAkB;AAAA,EAAC;AACrB;AAEA,YAAY,YAAY;AAAA,EACtB,oBAAoB8B,mBAAAA,QAAU,OAAO;AAAA,EACrC,cAAcA,mBAAU,QAAA;AAAA,EACxB,QAAQA,mBAAU,QAAA;AAAA,EAClB,OAAOA,mBAAAA,QAAU,OAAO;AAAA,EACxB,QAAQA,mBAAU,QAAA;AAAA,EAClB,YAAYA,mBAAU,QAAA;AAAA,EACtB,WAAWA,mBAAAA,QAAU,OAAO;AAAA,EAC5B,oBAAoBA,mBAAAA,QAAU,KAAK;AAAA,EACnC,YAAYA,mBAAU,QAAA;AAAA,EACtB,YAAYA,mBAAU,QAAA;AAAA,EACtB,UAAUA,mBAAU,QAAA;AAAA,EACpB,eAAeA,mBAAAA,QAAU,KAAK;AAAA,EAC9B,iBAAiBA,mBAAU,QAAA;AAC7B;AAEA,MAAe6F,YAAAA,MAAAA,KAAK,WAAW;AC/Q/B,SAAwB,sBAAsB,MAAM,aAAa,IAAI;AAC5D,SAAA,OAAO,KAAK,UAAU,EAC1B,OAAO,CAAC,aAAa,SAAS,WAAW,IAAI,CAAC,EAC9C;AAAA,IAAI,CAAC,aACJ,SACG,MAAM,GAAG,EACT,MAAM,GAAG,KAAK,MAAM,GAAG,EAAE,SAAS,CAAC,EACnC,KAAK,GAAG;AAAA,EAAA;AAEjB;ACUA,MAAM,mBAAmB3E,gBAAAA,QAAOuJ,aAAAA,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAY1C,MAAM,sBAAsB,CAAC;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,EAAE,+BAA+B,YAAY,uBACjDf,aAAyB,yBAAA;AAC3B,QAAM,qBAAqB9F,aAAAA;AACrB,QAAA,EAAE,kBAAkB1D,UAAAA;AAC1B,QAAM,CAAC,gBAAgB,iBAAiB,IAAIuB,eAAS,EAAE;AACvD,QAAM,CAAC,UAAU,WAAW,IAAIA,eAAS,EAAE;AAC3C,QAAM,EAAE,oBAAoB,WAAW,IAAI,qBAAqB;AAChE,QAAM,sBAAsB7C,MAAA;AAAA,IAC1B,MAAM,mBAAmB,YAAY;AAAA,IACrC,CAAC,cAAc,kBAAkB;AAAA,EAAA;AAGnC,QAAM,SAAS+K,aAAAA;AAOT,QAAA,mCAAmC/K,MAAAA,QAAQ,MAAM;AACjD,QAAA,OAAO,IAAI,OAAO,GAAG;AACjB,YAAA,QAAQ,OAAO,IAAI,OAAO;AAE1B,YAAA,CAAG,EAAA,IAAI,IAAI,MAAM,MAAM,GAAG,IAAI,GAAG;AAEvC,UAAIZ,aAAAA,QAAI,gBAAgB,MAAM,MAAS,MAAM,QAAW;AAChD,cAAA,WAAW,KAAK,MAAM,GAAG;AAE/B,eAAOA,aAAAA,QAAI,gBAAgB,SAAS,CAAC,GAAG,MAAS,GAAG;AAAA,MACtD;AAAA,IACF;AAGO,WAAA;AAAA,EACN,GAAA,CAAC,gBAAgB,QAAQ,IAAI,CAAC;AAEjCoB,QAAAA,UAAU,MAAM;AACV,QAAA,OAAO,qCAAqC,UAAU;AACxD,wBAAkB,gCAAgC;AAAA,IACpD;AAAA,EAAA,GACC,CAAC,gCAAgC,CAAC;AAE/B,QAAA,cAAcR,cAAQ,MAAM,cAAc,kBAAkB,CAAE,CAAA,IAAI,GAAG,CAAC,cAAc,CAAC;AAErF,QAAA,qBAAqB,sBAAsB,MAAM,UAAU;AAEjE,QAAM,yBAAyB,MAAM;AAE/B,QAAA,cAAcZ,aAAAA,QAAI,YAAY,MAAM,EAAE,IAAI,GAAA,CAAI,EAAE,GAAG,SAAS,KAAK;AAEvE,QAAM,kBAAkB,MAAM;AAC5B,sBAAkB,EAAE;AAAA,EAAA;AAGtB,QAAM,cAAc,MAAM;AACxB,QAAI,CAAC,YAAY;AACf,UAAI,uBAAuB,KAAK;AAC9B,cAAM,oBAAoB;AAEI,sCAAA,MAAM,qBAAqB,YAAY,iBAAiB;AAEtF,0BAAkB,WAAW;AAAA,MAAA,WACpB,wBAAwB,KAAK;AACnB,2BAAA;AAAA,UACjB,MAAM;AAAA,UACN,SAAS,EAAE,IAAIsC,OAAA,QAAQ,kDAAkD,EAAE;AAAA,QAAA,CAC5E;AAAA,MACH;AAAA,IACF;AAAA,EAAA;AAGI,QAAA,2BAA2B,CAAC,UAAU,iBAAiB;AAC3D;AAAA,MACE;AAAA,QACE;AAAA,UACE,IAAIA,eAAQ,aAAa;AAAA,UACzB,gBAAgB;AAAA,QAClB;AAAA,QACA;AAAA,UACE,MAAM,GAAG,IAAI,IAAI,YAAY;AAAA,UAC7B,UAAU,WAAW,QAAQ;AAAA,QAC/B;AAAA,MACF;AAAA,IAAA;AAGiB,uBAAA;AAAA,MACjB;AAAA,MACA;AAAA,MACA;AAAA,IAAA,CACD;AAAA,EAAA;AAGH,QAAM,YAAYtC,aAAAA,QAAI,qBAAqB,CAAC,YAAY,WAAW,GAAG,IAAI;AAEpE,QAAA,eAAe,CAAC,QAAQ,MAAM;AAClC,QAAI,mBAAmB,KAAK;AAC1B,wBAAkB,EAAE;AAAA,IAAA,OACf;AACL,wBAAkB,GAAG;AAAA,IACvB;AAAA,EAAA;AAQF,QAAM,aAAa,CAACyC,WAAU,GAAGA,SAAQ,CAAC,OAAO,oBAAoB;AAE/D,QAAA,eAAe,CAACA,WAAU;AAC9B;AAAA,MACE;AAAA,QACE;AAAA,UACE,IAAIH,eAAQ,iBAAiB;AAAA,UAC7B,gBAAgB;AAAA,QAClB;AAAA,QACA;AAAA,UACE,MAAM,GAAG,IAAI,IAAIG,MAAK;AAAA,QACxB;AAAA,MACF;AAAA,IAAA;AAAA,EACF;AAGI,QAAA,iBAAiB,CAACA,WAAU;AAChC;AAAA,MACE;AAAA,QACE;AAAA,UACE,IAAIH,eAAQ,eAAe;AAAA,UAC3B,gBAAgB;AAAA,QAClB;AAAA,QACA;AAAA,UACE,MAAM,GAAG,IAAI,IAAIG,MAAK;AAAA,UACtB,UAAU,WAAWA,MAAK;AAAA,QAC5B;AAAA,MACF;AAAA,IAAA;AAAA,EACF;AAGI,QAAA,iBAAiB,CAACA,WAAU;AAChC;AAAA,MACE;AAAA,QACE;AAAA,UACE,IAAIH,eAAQ,eAAe;AAAA,UAC3B,gBAAgB;AAAA,QAClB;AAAA,QACA;AAAA,UACE,MAAM,GAAG,IAAI,IAAIG,MAAK;AAAA,UACtB,UAAU,WAAWA,MAAK;AAAA,QAC5B;AAAA,MACF;AAAA,IAAA;AAAA,EACF;AAGE,MAAA,eAAe,WAAW,IAAI;AAElC,MAAI,aAAa;AACA,mBAAA;AAAA,MACb,IAAIH,eAAQ,2CAA2C;AAAA,MACvD,gBACE;AAAA,MACF,QAAQ,EAAE,QAAQ,uBAAuB;AAAA,IAAA;AAAA,EAElC,WAAA,mBAAmB,KAAK,CAAC,UAAU,MAAM,MAAM,GAAG,EAAE,SAAS,CAAC,KAAK,CAAC,aAAa;AAC3E,mBAAA;AAAA,MACb,IAAIA,eAAQ,8CAA8C;AAAA,MAC1D,gBAAgB;AAAA,IAAA;AAAA,EAEpB;AAEA,MAAI,yBAAyB,GAAG;AAC9B,0CACG,sBAAqB,EAAA,OAAO,cAAc,YAAwB,SAAS,YAAa,CAAA;AAAA,EAE7F;AAEM,QAAA,oBAAoB,GAAG,IAAI;AAG/B,SAAAC,2BAAA,KAACC,aAAI,KAAA,EAAA,WAAS,MACZ,UAAA;AAAA,IAACT,2BAAA,IAAA2K,aAAA,gBAAA,EAAe,IAAI,mBACjB,UAAc,cAAA;AAAA,MACb,IAAIpK,eAAQ,kBAAkB;AAAA,MAC9B,gBAAgB;AAAA,IACjB,CAAA,GACH;AAAA,IACCP,2BAAA,IAAA2K,aAAA,gBAAA,EAAe,aAAU,aAAa,UAAS,UAAA;AAAA,oCAC/CgD,OAAA,EAAgB,OAAO,cAAc,iBAAiB,mBACrD,UAAA;AAAA,MAAA3N,2BAAAA,IAAC4N,SAAA,EAAkB,oBAAkB,mBAClC,UAAA,eAAe,IAAI,CAAC,EAAE,cAAc,IAAI,GAAGlN,WAC1CV,2BAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,oBAAoB,GAAG,IAAI,IAAIU,MAAK;AAAA,UACpC;AAAA,UACA,QAAQ,oBAAoB,QAAQ;AAAA,UAEpC,OAAAA;AAAA,UACA,QAAQ,mBAAmB;AAAA,UAC3B;AAAA,UACA;AAAA,UACA,oBAAoB;AAAA,UACpB,eAAe,aAAa,GAAG;AAAA,UAC/B;AAAA,UACA,UAAU;AAAA,UACV,YAAY;AAAA,UACZ,YAAY;AAAA,QAAA;AAAA,QAVP;AAAA,MAYR,CAAA,GACH;AAAA,MACAV,2BAAAA,IAAC6N,QAAA,EACC,yCAAChN,aAAK,MAAA,EAAA,gBAAe,UAAS,QAAO,QAAO,YAAW,YACrD,UAACb,2BAAA,IAAA,kBAAA,EAAiB,UAAU,YAAY,SAAS,aAAa,WAAWA,2BAAAA,IAACgC,MAAAA,MAAK,CAAA,CAAA,GAC5E,UAAc,cAAA;AAAA,QACb,IAAIzB,eAAQ,mCAAmC;AAAA,QAC/C,gBAAgB;AAAA,MAAA,CACjB,EACH,CAAA,EACF,CAAA,GACF;AAAA,IAAA,GACF;AAAA,EACF,EAAA,CAAA;AAEJ;AAEA,oBAAoB,eAAe;AAAA,EACjC,gBAAgB;AAAA,EAChB,sBAAsB;AAAA,EACtB,YAAY;AAAA,EACZ,KAAK;AAAA,EACL,KAAK;AACP;AAEA,oBAAoB,YAAY;AAAA,EAC9B,cAAcN,mBAAAA,QAAU,OAAO;AAAA,EAC/B,gBAAgBA,2BAAU,UAAU,CAACA,2BAAU,OAAOA,mBAAAA,QAAU,MAAM,CAAC;AAAA,EACvE,sBAAsBA,mBAAU,QAAA;AAAA,EAChC,YAAYA,mBAAU,QAAA;AAAA,EACtB,KAAKA,mBAAU,QAAA;AAAA,EACf,KAAKA,mBAAU,QAAA;AAAA,EACf,MAAMA,mBAAAA,QAAU,OAAO;AACzB;AAEA,MAAe6F,wBAAAA,MAAAA,KAAK,mBAAmB;ACjRvC,MAAM,cAAc3E,gBAAAA,QAAOV,aAAAA,GAAG;AAAA;AAAA,YAElB,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,UAAU;AAAA;AAAA;AAIlD,MAAM,QAAQ,CAAC;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACE,QAAA,EAAE,kBAAkBN,UAAAA;AAC1B,QAAM,QAAQ,WAAW,KAAK,cAAc,SAAS,IAAI;AAEzD,SACGH,2BAAA,IAAAS,kBAAA,EAAI,eAAe,GAClB,0CAACI,mBACC,EAAA,UAAA;AAAA,IAAAL,2BAAA;AAAA,MAACM,aAAA;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,SAAS,MAAM;AAAA,QACf,SAAQ;AAAA,QACR,YAAW;AAAA,QACX,IAAG;AAAA,QAEF,UAAA;AAAA,UAAA;AAAA,UACA,uBAAyBN,2BAAA,KAAA6C,qBAAA,EAAA,UAAA;AAAA,YAAA;AAAA,YAAQ;AAAA,YAAgB;AAAA,UAAA,GAAC;AAAA,UAClD,YAAYrD,2BAAA,IAACc,yBAAW,EAAA,WAAU,aAAY,UAAC,KAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IAClD;AAAA,IACC,eAAed,2BAAA,IAAC,aAAY,EAAA,aAAa,GAAI,UAAY,aAAA;AAAA,EAAA,EAC5D,CAAA,EACF,CAAA;AAEJ;AAEA,MAAM,eAAe;AAAA,EACnB,IAAI;AAAA,EACJ,aAAa;AAAA,EACb,iBAAiB;AAAA,EACjB,UAAU;AAAA,EACV,qBAAqB;AACvB;AAEA,MAAM,YAAY;AAAA,EAChB,IAAIC,mBAAU,QAAA;AAAA,EACd,WAAWA,2BAAU,MAAM;AAAA,IACzB,IAAIA,mBAAAA,QAAU,OAAO;AAAA,IACrB,gBAAgBA,mBAAAA,QAAU,OAAO;AAAA,IACjC,QAAQA,mBAAU,QAAA;AAAA,EACnB,CAAA,EAAE;AAAA,EACH,aAAaA,mBAAU,QAAA;AAAA,EACvB,MAAMA,mBAAAA,QAAU,OAAO;AAAA,EACvB,iBAAiBA,mBAAU,QAAA;AAAA,EAC3B,UAAUA,mBAAU,QAAA;AAAA,EACpB,qBAAqBA,mBAAU,QAAA;AACjC;AC/DA,SAASgK,UAAQ,kBAAkB,QAAQ;AACzC,SAAO,CAAC,UAAU;AAEV,UAAA,YAAY,OAAO,KAAK;AAE9B,WAAQjK,2BAAAA,IAAA,kBAAA,EAAkB,GAAG,OAAQ,GAAG,UAAW,CAAA;AAAA,EAAA;AAEvD;ACAA,SAASkK,YAAU,EAAE,mBAAmB,QAAQ;AACxC,QAAA;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,MACEP,aAAyB,yBAAA;AACvB,QAAA,EAAE,gBAAgB;AAGlB,QAAA,uBAAuB9K,MAAAA,QAAQ,MAAM;AACzC,UAAM,aAAaZ,aAAAA,QAAI,aAAa,CAAC,YAAY,GAAG,CAAA,CAAE;AAEtD,UAAM,oBAAoB,OAAO,KAAK,UAAU,EAAE,OAAO,CAAC,aAAa;AACrE,aAAOA,aAAAA,QAAI,YAAY,CAAC,UAAU,MAAM,GAAG,EAAE,MAAM;AAAA,IAAA,CACpD;AAEM,WAAA;AAAA,EAAA,GACN,CAAC,WAAW,CAAC;AAEV,QAAA,gBAAgBY,MAAAA,QAAQ,MAAM;AAClC,WAAO,kBAAkB,4BAA4B;AAAA,EACpD,GAAA,CAAC,iBAAiB,2BAA2B,yBAAyB,CAAC;AAE1E,QAAM,iBAAiBZ,aAAA,QAAI,cAAc,MAAM,IAAI;AAC7C,QAAA,YAAYY,MAAAA,QAAQ,MAAM;AAC9B,WAAO,aAAa,IAAI;AAAA,EAAA,GACvB,CAAC,IAAI,CAAC;AAEH,QAAA,2BAA2BA,MAAAA,QAAQ,MAAM;AAC7C,QAAI,qBAAqB,iBAAiB;AACjC,aAAA;AAAA,IACT;AAEM,UAAA,4BAA4B,cAAc,OAAO,CAACiP,UAASA,UAAS,UAAU,CAAC,CAAC;AAElF,QAAA,0BAA0B,SAAS,GAAG;AACjC,aAAA;AAAA,IACT;AAEA,UAAM,+BAA+B,cAClC,IAAI,CAAC,cAAc;AACX,aAAA,UAAU,MAAM,GAAG;AAAA,IAAA,CAC3B,EACA,OAAO,CAAC,cAAc;AACjB,UAAA,UAAU,SAAS,UAAU,QAAQ;AAChC,eAAA;AAAA,MACT;AAEA,YAAM,SAASb,cAAK,QAAA,WAAW,UAAU,MAAM,EAAE,KAAK,GAAG;AAElD,aAAA,WAAW,UAAU,KAAK,GAAG;AAAA,IAAA,CACrC;AAEH,WAAO,6BAA6B,SAAS;AAAA,KAC5C,CAAC,mBAAmB,iBAAiB,eAAe,SAAS,CAAC;AAG3D,QAAA,4BAA4BpO,MAAAA,QAAQ,MAAM;AAC9C,QAAI,mBAAmB;AACd,aAAA;AAAA,IACT;AACA,QAAI,qBAAqB,SAAS,UAAU,CAAC,CAAC,GAAG;AACxC,aAAA;AAAA,IACT;AAEMkP,UAAAA,iBAAgB,kBAAkB,CAAK,IAAA;AAE7C,UAAM,+BAA+BA,eAClC,IAAI,CAAC,cAAc;AACX,aAAA,UAAU,MAAM,GAAG;AAAA,IAAA,CAC3B,EACA,OAAO,CAAC,cAAc;AACjB,UAAA,UAAU,SAAS,UAAU,QAAQ;AAChC,eAAA;AAAA,MACT;AAEA,YAAM,SAASd,cAAK,QAAA,WAAW,UAAU,MAAM,EAAE,KAAK,GAAG;AAElD,aAAA,WAAW,UAAU,KAAK,GAAG;AAAA,IAAA,CACrC;AAEH,WAAO,6BAA6B,SAAS;AAAA,EAAA,GAC5C;AAAA,IACD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,CACD;AAEK,QAAA,aAAapO,MAAAA,QAAQ,MAAM;AAC/B,QAAI,iBAAiB;AACZ,aAAA;AAAA,IACT;AAEA,QAAI,0BAA0B;AACrB,aAAA;AAAA,IACT;AAEO,WAAA;AAAA,EACN,GAAA,CAAC,0BAA0B,2BAA2B,eAAe,CAAC;AAElE,SAAA;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;ACzGA,MAAM,iBAAiB,CAAC;AAAA,EACtB;AAAA,EACA;AAAA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACE,QAAA,EAAE,kBAAkBsB,UAAAA;AACpB,QAAA,uBAAuBhC,sBAAK,cAAc;AAC1C,QAAA,gBAAgB,mBAAmB,QAAQ;AACjD,QAAM,qBACJ,CAAC,gBAAgB,iBAAiB,CAAC,qBAAqB;AAE1D,QAAM,EAAE,oBAAoB,WAAW,IAAI,qBAAqB;AAChE,QAAM,sBAAsBU,MAAA;AAAA,IAC1B,MAAM,mBAAmB,YAAY;AAAA,IACrC,CAAC,cAAc,kBAAkB;AAAA,EAAA;AAG/B,MAAA,CAAC,4BAA4B,iBAAiB;AAChD,WAAQmB,2BAAAA,IAAAgL,aAAAA,iBAAA,EAAgB,aAA0B,WAAsB,KAAY,CAAA;AAAA,EACtF;AAEA,MAAI,CAAC,4BAA4B,CAAC,mBAAmB,CAAC,2BAA2B;AAC/E,WAAQhL,2BAAAA,IAAAgL,aAAAA,iBAAA,EAAgB,aAA0B,WAAsB,KAAY,CAAA;AAAA,EACtF;AAEA,QAAM,8CAA8C,MAAM;AACvB,qCAAA,MAAM,qBAAqB,UAAU;AAAA,EAAA;AAGxE,yCACGvK,kBACC,EAAA,UAAA;AAAA,IAACD,2BAAAA,KAAAK,aAAAA,MAAA,EAAK,gBAAe,iBAClB,UAAA;AAAA,MACC,aAAAb,2BAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC;AAAA,UACA;AAAA,UACA;AAAA,UACA,iBAAiB;AAAA,UACjB,qBAAqB;AAAA,UACrB;AAAA,QAAA;AAAA,MACF;AAAA,MAGD,sBACCA,2BAAA;AAAA,QAACqB,aAAA;AAAA,QAAA;AAAA,UACC,OAAO,cAAc;AAAA,YACnB,IAAId,eAAQ,wBAAwB;AAAA,YACpC,gBAAgB;AAAA,UAAA,CACjB;AAAA,UACD,qCAAOe,MAAM,OAAA,EAAA;AAAA,UACb,UAAQ;AAAA,UACR,SAAS,MAAM;AACb,qCAAyB,MAAM,YAAY;AAAA,UAC7C;AAAA,QAAA;AAAA,MACF;AAAA,IAAA,GAEJ;AAAA,oCACCT,aAAAA,MAAK,EAAA,WAAU,UAAS,YAAW,WAAU,KAAK,GAChD,UAAA;AAAA,MAAC,CAAA,gBAAgB,CAAC,iBACjBb,2BAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC;AAAA,UACA,SAAS;AAAA,QAAA;AAAA,MACX;AAAA,MAED,CAAC,gBAAgB,iBAChBA,2BAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QAAA;AAAA,MACF;AAAA,MAED,gBACCA,2BAAA;AAAA,QAACgO;AAAAA,QAAA;AAAA,UACC;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QAAA;AAAA,MACF;AAAA,IAAA,GAEJ;AAAA,EACF,EAAA,CAAA;AAEJ;AAEA,eAAe,eAAe;AAAA,EAC5B,gBAAgB;AAAA,EAChB,0BAA0B;AAAA,EAC1B,2BAA2B;AAAA,EAC3B,WAAW;AAAA,EACX,mBAAmB;AAAA,EACnB,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,UAAU;AAAA,EACV,aAAa;AAAA,EACb,KAAK;AAAA,EACL,KAAK;AAAA,EACL,UAAU;AACZ;AAEA,eAAe,YAAY;AAAA,EACzB,kCAAkC/N,mBAAAA,QAAU,KAAK;AAAA,EACjD,cAAcA,mBAAAA,QAAU,OAAO;AAAA,EAC/B,gBAAgBA,2BAAU,UAAU,CAACA,2BAAU,QAAQA,mBAAAA,QAAU,KAAK,CAAC;AAAA,EACvE,0BAA0BA,mBAAU,QAAA;AAAA,EACpC,2BAA2BA,mBAAU,QAAA;AAAA,EACrC,iBAAiBA,mBAAAA,QAAU,KAAK;AAAA,EAChC,mBAAmBA,mBAAU,QAAA;AAAA,EAC7B,YAAYA,mBAAU,QAAA;AAAA,EACtB,cAAcA,mBAAU,QAAA;AAAA,EACxB,UAAUA,mBAAU,QAAA;AAAA,EACpB,WAAWA,2BAAU,MAAM;AAAA,IACzB,IAAIA,mBAAAA,QAAU,OAAO;AAAA,IACrB,gBAAgBA,mBAAAA,QAAU,OAAO;AAAA,IACjC,QAAQA,mBAAU,QAAA;AAAA,EAAA,CACnB;AAAA,EACD,aAAaA,mBAAU,QAAA;AAAA,EACvB,KAAKA,mBAAU,QAAA;AAAA,EACf,KAAKA,mBAAU,QAAA;AAAA,EACf,MAAMA,mBAAAA,QAAU,OAAO;AAAA,EACvB,0BAA0BA,mBAAAA,QAAU,KAAK;AAAA,EACzC,UAAUA,mBAAU,QAAA;AACtB;AAEA,MAAMiL,aAAWpF,MAAK,KAAA,gBAAgB3B,iBAAAA,OAAO;AAE7C,MAAA,mBAAe8F,UAAQiB,YAAUC,WAAM;AC9IhC,MAAM,mBAAmB,CAAC;AAAA,EAC/B;AAAA,EACA;AAAA,EACA,OAAAzK;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,CAAC,QAAQ,SAAS,IAAIgB,eAAS,IAAI;AACnC,QAAA,EAAE,kBAAkBvB,UAAAA;AACpB,QAAA,EAAE,uBAAuB;AACzB,QAAA,EAAE,iBAAiBwJ,aAAAA;AACzB,QAAM,EAAE,MAAM,cAAc,UAAU,IAAI9K,cAAQ,MAAM;AAChD,UAAA,sBAAsB,mBAAmB,YAAY;AAErD,UAAA;AAAA,MACJ,MAAM,EAAE,MAAAoP,OAAM,YAAY;AAAA,IACxB,IAAA;AAEJ,UAAM,eAAehQ,aAAAA,QAAI,qBAAqB,CAAC,YAAY,WAAW,GAAG,IAAI;AAEvE,UAAA,YAAYA,qBAAI,cAAc,CAAC,MAAMyC,QAAO,YAAY,CAAC,KAAK;AAEpE,UAAM,iBAAiB,iBAAiB,OAAO,KAAK,OAAO,SAAS,EAAE;AAEtE,UAAMwN,aAAY,eAAe,SAAS,IAAI,MAAM,cAAc,KAAK;AAEvE,WAAO,EAAE,cAAc,aAAa,MAAAD,OAAM,WAAAC;EAAU,GACnD,CAAC,cAAc,oBAAoB,cAAc,MAAMxN,MAAK,CAAC;AAEhE,QAAM,eAAe,OAAO,KAAK,UAAU,EAAE,OAAO,CAAC,aAAa;AAC1D,UAAA,iBAAiB,SAAS,MAAM,GAAG;AAEzC,QAAI,GAAG,eAAe,CAAC,CAAC,IAAI,eAAe,CAAC,CAAC,OAAO,GAAG,IAAI,IAAIA,MAAK,IAAI;AAC/D,aAAA;AAAA,IACT;AAEO,WAAA;AAAA,EAAA,CACR;AAEG,MAAA;AAEA,MAAA,aAAa,SAAS,GAAG;AAC3B,mBAAe,cAAc;AAAA,MAC3B,IAAIH,eAAQ,sCAAsC;AAAA,MAClD,gBAAgB;AAAA,IAAA,CACjB;AAAA,EACH;AAEA,QAAM,eAAe,MAAM;AACf,cAAA,CAAC,MAAM,CAAC,CAAC;AAAA,EAAA;AAGrB,QAAM,CAAC,EAAE,WAAW,YAAY,cAAc,GAAG,QAAQ,SAAS,SAAS,cAAc,IACvFgK,OAAAA,eAAe,gBAAgB;AAAA,IAC7B,MAAM,GAAG,UAAU,YAAY,IAAI,IAAI;AAAA,IACvC,OAAA7J;AAAA,IACA,MAAM;AAAA,MACJ,gBAAgB,GAAG,YAAY,GAAG,SAAS;AAAA,MAC3C;AAAA,IACF;AAAA,IACA,YAAY;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,EAAA,CACD;AAEHrB,QAAAA,UAAU,MAAM;AACd,mBAAeyC,qBAAAA,cAAc,GAAG,EAAE,sBAAsB,MAAO,CAAA;AAAA,EAAA,GAC9D,CAAC,gBAAgBpB,MAAK,CAAC;AAEpB,QAAA,kBAAkBuG,OAAAA,YAAY,QAAQ,OAAO;AAE7C,QAAA,mBAAmB,CAAC,iBAAiB,uCACxC,aAAY,EAAA,KAAK,GAAG,UAAU,QAC7B,UAAA;AAAA,IAAAjH,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,UAAQ;AAAA,QACR,OAAO;AAAA,UACL;AAAA,YACE,IAAIO,eAAQ,qCAAqC;AAAA,YACjD,gBAAgB;AAAA,UAClB;AAAA,UACA,EAAE,MAAM,aAAa;AAAA,QACvB;AAAA,QACA,SAAS;AAAA,QAET,yCAACe,MAAM,OAAA,EAAA;AAAA,MAAA;AAAA,IACT;AAAA,IACAtB,2BAAA;AAAA,MAACqB,aAAA;AAAA,MAAA;AAAA,QACC,aAAY;AAAA,QACZ,MAAK;AAAA,QACL,UAAQ;AAAA,QACR,UAAU;AAAA,QACV,SAAS,CAAC,MAAM,EAAE,gBAAgB;AAAA,QAClC,mBAAiB;AAAA,QACjB,KAAK;AAAA,QACL,OAAO,cAAc;AAAA,UACnB,IAAId,eAAQ,6BAA6B;AAAA,UACzC,gBAAgB;AAAA,QAAA,CACjB;AAAA,QACD,WAAW;AAAA,QAEX,yCAACiB,MAAK,MAAA,EAAA;AAAA,MAAA;AAAA,IACR;AAAA,IACAhB,2BAAAA,KAACuB,GAAK,KAAA,MAAL,EACC,UAAA;AAAA,MAACvB,2BAAAA,KAAAuB,GAAAA,KAAK,SAAL,EAAa,MAAK,KAAI,SAAS,MAAM,aAAa,GAAG,cAAc,GAClE,UAAA;AAAA,QAAA/B,2BAAA,IAAC6M,MAAK,MAAA,EAAA,eAAW,MAAC,WAAW,OAAO;AAAA,QACnC7M,2BAAA,IAAA2K,aAAA,gBAAA,EAAe,IAAG,QAChB,UAAc,cAAA;AAAA,UACb,IAAIpK,eAAQ,qCAAqC;AAAA,UACjD,gBAAgB;AAAA,QACjB,CAAA,GACH;AAAA,MAAA,GACF;AAAA,MACAC,2BAAAA,KAACuB,GAAK,KAAA,SAAL,EACC,UAAA;AAAA,QAACvB,2BAAAA,KAAAuB,GAAA,KAAK,SAAL,EACC,UAAA;AAAA,UAAC/B,2BAAAA,IAAA+B,GAAAA,KAAK,YAAL,EACE,UAAc,cAAA;AAAA,YACb,IAAIxB,eAAQ,uCAAuC;AAAA,YACnD,gBAAgB;AAAA,UACjB,CAAA,GACH;AAAA,yCACCwB,GAAK,KAAA,YAAL,EACE,UAAA,OAAO,QAAQ,2BAA2B,EAAE,IAAI,CAAC,CAAC,UAAU,UAAU,MACpEvB,2BAAA,KAAAT,yBAAM,UAAN,EACC,UAAA;AAAA,YAACC,2BAAAA,IAAA+B,GAAAA,KAAK,OAAL,EAAY,UAAS,SAAA,CAAA;AAAA,YACrB,WAAW,IAAI,CAAC,EAAE,cAAA2L,eAAc,MAAM,EAAE,YAAY,EAAA,MACnD1N,2BAAA;AAAA,cAACmO,GAAA;AAAA,cAAA;AAAA,gBAEC,UAAU,MAAM,eAAeT,eAAchN,MAAK;AAAA,gBAEjD,UAAA;AAAA,cAAA;AAAA,cAHIgN;AAAAA,YAAA,CAKR;AAAA,UAAA,KATkB,QAUrB,CACD,GACH;AAAA,QAAA,GACF;AAAA,QACAlN,2BAAAA,KAACuB,GAAK,KAAA,SAAL,EACC,UAAA;AAAA,UAAC/B,2BAAAA,IAAA+B,GAAAA,KAAK,YAAL,EACE,UAAc,cAAA;AAAA,YACb,IAAIxB,eAAQ,uCAAuC;AAAA,YACnD,gBAAgB;AAAA,UACjB,CAAA,GACH;AAAA,yCACCwB,GAAK,KAAA,YAAL,EACE,UAAA,OAAO,QAAQ,2BAA2B,EAAE,IAAI,CAAC,CAAC,UAAU,UAAU,MACpEvB,2BAAA,KAAAT,yBAAM,UAAN,EACC,UAAA;AAAA,YAACC,2BAAAA,IAAA+B,GAAAA,KAAK,OAAL,EAAY,UAAS,SAAA,CAAA;AAAA,YACrB,WAAW,IAAI,CAAC,EAAE,cAAA2L,eAAc,MAAM,EAAE,YAAY,EAAA,MACnD1N,2BAAA;AAAA,cAACmO,GAAA;AAAA,cAAA;AAAA,gBAEC,UAAU,MAAM,eAAeT,eAAchN,SAAQ,CAAC;AAAA,gBAErD,UAAA;AAAA,cAAA;AAAA,cAHIgN;AAAAA,YAAA,CAKR;AAAA,UAAA,KATkB,QAUrB,CACD,GACH;AAAA,QAAA,GACF;AAAA,MAAA,GACF;AAAA,IAAA,GACF;AAAA,EACF,EAAA,CAAA;AAGF,SACGlN,2BAAAA,KAAA,oBAAA,EAAmB,IAAG,MAAK,OAAM,QAChC,UAAA;AAAA,IAAAR,2BAAAA,IAACa,qBAAK,gBAAe,UACnB,yCAAC,WAAU,EAAA,YAAW,cAAa,EACrC,CAAA;AAAA,IACAb,2BAAAA,IAAC,aAAU,KAAK,iBAAiB,WAAS,MACvC,UAAA,aACEA,2BAAA,IAAA,SAAA,EAAQ,SAAS,GAAG,YAAW,aAAa,CAAA,IAE5CQ,2BAAA,KAAAyF,wBAAA,EAAU,UAAU,QAAQ,UAAU,cAAc,MAAK,KAAI,OAAO,cACnE,UAAA;AAAA,MAAAjG,2BAAA;AAAA,QAACkG,aAAA;AAAA,QAAA;AAAA,UACC,WAAYlG,2BAAAA,IAAA,eAAA,EAAc,MAAY,gBAAgB,OAAO,MAAK,KAAI;AAAA,UACtE,QAAQ;AAAA,UACR,OAAO,GAAG,YAAY,GAAG,SAAS;AAAA,UAClC,gBAAe;AAAA,QAAA;AAAA,MACjB;AAAA,MACCA,+BAAAmG,aAAAA,kBAAA,EACC,UAACnG,2BAAA,IAAA,wBAAA,EAAuB,YAAW,YACjC,UAAAA,2BAAA;AAAA,QAACqN;AAAAA,QAAA;AAAA,UACC;AAAA,UACA;AAAA,UACA,MAAM,GAAG,IAAI,IAAI3M,MAAK;AAAA,UACtB,mBAAiB;AAAA,QAAA;AAAA,SAErB,EACF,CAAA;AAAA,IAAA,EAAA,CACF,EAEJ,CAAA;AAAA,EACF,EAAA,CAAA;AAEJ;AAEA,MAAM,cAAcS,gBAAAA,QAAON,aAAAA,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAW/B,MAAM,mBAAmBM,gBAAAA,QAAOE,aAAAA,UAAU;AAAA;AAAA;AAAA;AAAA,YAI9B,CAAC,EAAE,OAAO,SAAS,MACzB,WAAW,MAAM,OAAO,aAAa,MAAM,OAAO,UAAU;AAAA;AAAA;AAMlE,MAAM,YAAYF,gBAAAA,QAAOV,aAAAA,GAAG;AAAA;AAAA,kBAEV,CAAC,EAAE,MAAA,MAAY,MAAM,QAAQ,WAAW;AAAA;AAAA;AAI1D,MAAM,yBAAyBU,gBAAAA,QAAOV,aAAAA,GAAG;AAAA,uBAClB,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,MAAM,MAAM,OAAO,CAAC,CAAC;AAAA;AAGvF,MAAM,YAAYU,gBAAAA,QAAOV,aAAAA,GAAG;AAAA,WACjB,CAAC,EAAE,YAAY,MAAM,OAAO,CAAC,CAAC;AAAA,YAC7B,CAAC,EAAE,YAAY,MAAM,OAAO,CAAC,CAAC;AAAA;AAG1C,MAAM,UAAUU,gBAAO,QAAA;AAAA;AAAA,sBAED,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,UAAU;AAAA,wBACpC,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,UAAU;AAAA;AAAA,aAEjD,CAAC,EAAE,YAAY,MAAM,OAAO,CAAC,CAAC;AAAA;AAG3C,MAAM,qBAAqBA,gBAAAA,QAAOV,aAAAA,GAAG;AAAA;AAAA;AAAA;AAAA;AAMrC,iBAAiB,eAAe;AAAA,EAC9B,6BAA6B,CAAC;AAAA,EAC9B,YAAY,CAAC;AAAA,EACb,OAAO;AAAA,EACP,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,UAAU;AACZ;AAEA,iBAAiB,YAAY;AAAA,EAC3B,cAAcR,mBAAAA,QAAU,OAAO;AAAA,EAC/B,6BAA6BA,2BAAU,MAAM;AAAA,IAC3C,YAAYA,mBAAU,QAAA;AAAA,MACpBA,mBAAAA,QAAU,MAAM;AAAA,QACd,cAAcA,mBAAAA,QAAU,OAAO;AAAA,QAC/B,MAAMA,mBAAU,QAAA;AAAA,MAAA,CACjB;AAAA,IACH;AAAA,EAAA,CACD;AAAA,EACD,YAAYA,mBAAU,QAAA;AAAA,EACtB,OAAOA,mBAAU,QAAA;AAAA,EACjB,gBAAgBA,mBAAU,QAAA;AAAA,EAC1B,MAAMA,mBAAAA,QAAU,OAAO;AAAA,EACvB,gBAAgBA,mBAAU,QAAA;AAAA,EAC1B,YAAYA,mBAAU,QAAA;AAAA,EACtB,YAAYA,mBAAU,QAAA;AAAA,EACtB,UAAUA,mBAAU,QAAA;AAAA,EACpB,iBAAiBA,mBAAAA,QAAU,KAAK;AAAA,EAChC,wBAAwBA,mBAAAA,QAAU,KAAK;AACzC;AC3SO,MAAM,mBAAmB,CAAC;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACE,QAAA,EAAE,kBAAkBE,UAAAA;AACpB,QAAA,YAAY,cAAc,EAAE,IAAI,SAAS,MAAM,gBAAgB,SAAS,KAAA,CAAM;AAGlF,SAAAH,2BAAAA,IAACa,aAAAA,MAAK,EAAA,gBAAe,UACnB,UAAAb,2BAAA;AAAA,IAACS,aAAA;AAAA,IAAA;AAAA,MACC,YAAY;AAAA,MACZ,eAAe;AAAA,MACf,cAAc;AAAA,MACd,aAAa;AAAA,MACb,cAAa;AAAA,MACb,YAAW;AAAA,MACX,QAAO;AAAA,MACP,OAAM;AAAA,MAEN,UAACD,2BAAAA,KAAAK,aAAAA,MAAA,EAAK,WAAU,UAAS,gBAAe,UACtC,UAAA;AAAA,QAAAL,2BAAA,KAACK,aAAK,MAAA,EAAA,UAAUuF,aAAAA,QAAQ,GAAG,GACzB,UAAA;AAAA,UAAC5F,2BAAAA,KAAAM,aAAA,YAAA,EAAW,SAAQ,MAAK,WAAU,cAAa,YAAW,QAAO,UAAQ,MACvE,UAAA;AAAA,YAAA;AAAA,YAAU;AAAA,UAAA,GACb;AAAA,0CACCA,aAAAA,YAAW,EAAA,SAAQ,MAAK,WAAU,cAAa,YAAW,QAAO,UAAA;AAAA,YAAA;AAAA,YAC9D;AAAA,YAAmB;AAAA,UAAA,GACvB;AAAA,UACC,YAAYd,2BAAA,IAACc,yBAAW,EAAA,WAAU,aAAY,UAAC,KAAA;AAAA,UAC/C,eAAed,2BAAA,IAACS,kBAAI,EAAA,aAAa,GAAI,UAAY,aAAA;AAAA,QAAA,GACpD;AAAA,QACC,kDACEA,kBAAI,EAAA,YAAY,GAAG,UAAU2F,qBAAQ,GAAG,GACvC,UAAApG,2BAAAA,IAACc,aAAAA,cAAW,SAAQ,MAAK,WAAU,cAAa,UAAQ,MACrD,UAAc,cAAA,eAAe,GAChC,EACF,CAAA;AAAA,MAAA,GAEJ;AAAA,IAAA;AAAA,EAEJ,EAAA,CAAA;AAEJ;AAEA,iBAAiB,eAAe;AAAA,EAC9B,iBAAiB;AAAA,EACjB,OAAO;AAAA,EACP,aAAa;AAAA,EACb,oBAAoB;AAAA,EACpB,UAAU;AACZ;AAEA,iBAAiB,YAAY;AAAA,EAC3B,iBAAiBb,2BAAU,MAAM;AAAA,IAC/B,IAAIA,mBAAAA,QAAU,OAAO;AAAA,IACrB,gBAAgBA,mBAAAA,QAAU,OAAO;AAAA,EAAA,CAClC;AAAA,EACD,OAAOA,mBAAU,QAAA;AAAA,EACjB,aAAaA,mBAAU,QAAA;AAAA,EACvB,MAAMA,mBAAAA,QAAU,OAAO;AAAA,EACvB,oBAAoBA,mBAAU,QAAA;AAAA,EAC9B,UAAUA,mBAAU,QAAA;AACtB;AC/DA,MAAM,cAAc,CAAC,EAAE,MAAM,aAAa,aAAa,gBAAgB;AAE/D,QAAA,EAAE,MAAM,UAAU,MAAM,WAAW,aAAa,IAAI,WAAW,MAAA,IAAU;AAE/E,QAAM,CAAC,oBAAoB,qBAAqB,IAAIyB,eAAS,KAAK;AAClE,QAAM,CAAC,UAAU,WAAW,IAAIA,eAAS,EAAE;AAErC,QAAA;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,MACEiI,aAAyB,yBAAA;AAE7B,QAAM,6BAA6B9K,MAAA;AAAA,IACjC,OACG,eAAe,IAAI,KAAK,CAAA,GAAI,IAAI,CAAC,SAAS;AAClC,aAAA;AAAA,QACL,cAAc,KAAK;AAAA,QACnB,IAAI,KAAK,MAAM,KAAK;AAAA,MAAA;AAAA,IACtB,CACD;AAAA,IACH,CAAC,cAAc,IAAI;AAAA,EAAA;AAGrB,QAAM,EAAE,oBAAoB,YAAY,kBAAkB,qBAAqB;AAKzE,QAAA,8BAA8BA,MAAAA,QAAQ,MAAM;AAChD,WAAO,WAAW,OAAO,CAAC,KAAK,iBAAiB;AAC9C,YAAM,EAAE,UAAU,MAAM,WAAW,IAAI,mBAAmB,YAAY;AACtE,YAAM,YAAY,EAAE,cAAc,MAAM,WAAW;AAE/C,UAAA,CAAC,IAAI,QAAQ,GAAG;AACd,YAAA,QAAQ,IAAI;MAClB;AAEA,UAAI,QAAQ,IAAI,CAAC,GAAG,IAAI,QAAQ,GAAG,SAAS;AAErC,aAAA;AAAA,IACT,GAAG,CAAE,CAAA;AAAA,EAAA,GACJ,CAAC,YAAY,kBAAkB,CAAC;AAE7B,QAAA,EAAE,kBAAkBsB,UAAAA;AAE1B,QAAM,qBAAqB0D,aAAAA;AAErB,QAAA,iBAAiBhF,MAAAA,QAAQ,MAAM;AAC7B,UAAA,gBAAgB,kBAAkB,4BAA4B;AAE7D,WAAA,cAAc,SAAS,IAAI;AAAA,KACjC,CAAC,MAAM,iBAAiB,2BAA2B,yBAAyB,CAAC;AAE1E,QAAA,kBAAkBA,MAAAA,QAAQ,MAAM;AAC9B,UAAA,gBAAgB,kBAAkB,CAAK,IAAA;AAEtC,WAAA,cAAc,SAAS,IAAI;AAAA,EACjC,GAAA,CAAC,MAAM,iBAAiB,uBAAuB,CAAC;AAEnD,QAAM,mCAAmC,2BAA2B;AAC9D,QAAA,kBAAkB,UAAU,cAC9B,EAAE,IAAI,UAAU,aAAa,gBAAgB,UAAU,YAAA,IACvD;AAEE,QAAA,mBAAmB,WAAW,IAAI;AAExC,QAAM,yBAAyB,MAAM;AAC/B,QAAA,WAAW,CAAC,CAAC;AAEb,QAAA,qBAAqB,CAAC,cAAc,aAAa;AACrD,0BAAsB,KAAK;AAErB,UAAA,sBAAsB,mBAAmB,YAAY;AAO3D,8BAA0B,MAAM,qBAAqB,eAAe,UAAU,QAAQ;AAAA,EAAA;AAGxF,QAAM,wBAAwB,MAAM;AAClC,QAAI,mCAAmC,KAAK;AACpB,4BAAA,CAAC,SAAS,CAAC,IAAI;AAAA,IAAA,OAChC;AACc,yBAAA;AAAA,QACjB,MAAM;AAAA,QACN,SAAS,EAAE,IAAI0B,OAAA,QAAQ,kDAAkD,EAAE;AAAA,MAAA,CAC5E;AAAA,IACH;AAAA,EAAA;AAGI,QAAA,sBAAsB,CAAC,UAAU,iBAAiB;AACtD;AAAA,MACE;AAAA,QACE;AAAA,UACE,IAAIA,eAAQ,aAAa;AAAA,UACzB,gBAAgB;AAAA,QAClB;AAAA,QACA;AAAA,UACE,MAAM,GAAG,IAAI,IAAI,YAAY;AAAA,UAC7B,UAAU,WAAW,QAAQ;AAAA,QAC/B;AAAA,MACF;AAAA,IAAA;AAGiB,uBAAA;AAAA,MACjB;AAAA,MACA;AAAA,MACA;AAAA,IAAA,CACD;AAAA,EAAA;AAQG,QAAA,aAAa,CAACG,WAAU,GAAGA,SAAQ,CAAC,OAAO,2BAA2B,MAAM;AAE5E,QAAA,eAAe,CAACA,WAAU;AAC9B;AAAA,MACE;AAAA,QACE;AAAA,UACE,IAAIH,eAAQ,iBAAiB;AAAA,UAC7B,gBAAgB;AAAA,QAClB;AAAA,QACA;AAAA,UACE,MAAM,GAAG,IAAI,IAAIG,MAAK;AAAA,QACxB;AAAA,MACF;AAAA,IAAA;AAAA,EACF;AAGI,QAAA,iBAAiB,CAACA,WAAU;AAChC;AAAA,MACE;AAAA,QACE;AAAA,UACE,IAAIH,eAAQ,eAAe;AAAA,UAC3B,gBAAgB;AAAA,QAClB;AAAA,QACA;AAAA,UACE,MAAM,GAAG,IAAI,IAAIG,MAAK;AAAA,UACtB,UAAU,WAAWA,MAAK;AAAA,QAC5B;AAAA,MACF;AAAA,IAAA;AAAA,EACF;AAGI,QAAA,iBAAiB,CAACA,WAAU;AAChC;AAAA,MACE;AAAA,QACE;AAAA,UACE,IAAIH,eAAQ,eAAe;AAAA,UAC3B,gBAAgB;AAAA,QAClB;AAAA,QACA;AAAA,UACE,MAAM,GAAG,IAAI,IAAIG,MAAK;AAAA,UACtB,UAAU,WAAWA,MAAK;AAAA,QAC5B;AAAA,MACF;AAAA,IAAA;AAAA,EACF;AAGF,QAAM,wBAAwB,CAACoN,OAAM,iBAAiB,MAAM;AAC1D,mCAA+BA,OAAM,YAAY;AAAA,EAAA;AAGnD,QAAM,oBAAoB,MAAM;AAC9B,QAAI,oBAAoB;AACtB,aAAO,cAAc,EAAE,IAAI,yBAAyB,gBAAgB,SAAS;AAAA,IAC/E;AAEA,QAAI,YAAY,iBAAiB,GAAG,SAAS,KAAK,GAAG;AACnD,aAAO,cAAc;AAAA,QACnB,IAAI;AAAA,QACJ,gBAAgB;AAAA,MAAA,CACjB;AAAA,IACH;AAEA,QAAI,YAAY,iBAAiB,GAAG,SAAS,KAAK,GAAG;AAC5C,aAAA;AAAA,QACL;AAAA,UACE,IAAIvN,OAAAA,QAAQ,2CAA2C;AAAA,UACvD,gBACE;AAAA,QACJ;AAAA,QACA,EAAE,QAAQ,uBAAuB;AAAA,MAAA;AAAA,IAErC;AAEO,WAAA;AAAA,MACL;AAAA,QACE,IAAIA,eAAQ,sCAAsC;AAAA,QAClD,gBAAgB;AAAA,MAClB;AAAA,MACA,EAAE,eAAe,UAAU,SAAS,KAAK;AAAA,IAAA;AAAA,EAC3C;AAGF,MAAI,CAAC,mBAAmB,mBAAoB,CAAC,mBAAmB,CAAC,kBAAmB;AAEhF,WAAAP,2BAAA;AAAA,MAACgL,aAAA;AAAA,MAAA;AAAA,QACC,aAAa;AAAA,QACb,WAAW,EAAE,IAAI,UAAU,OAAO,gBAAgB,UAAU,MAAM;AAAA,QAClE;AAAA,QACA;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AAEM,QAAA,oBAAoB,GAAG,IAAI;AAEjC,yCACGnK,mBAAK,EAAA,WAAU,UAAS,YAAW,WAAU,KAAK,GAChD,UAAA;AAAA,IAAmC,mCAAA,qCACjCJ,aACC,KAAA,EAAA,UAAA;AAAA,MAAAT,2BAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC;AAAA,UACA,OAAO,UAAU;AAAA,UACjB;AAAA,UACA;AAAA,UACA,oBAAoB;AAAA,UACpB;AAAA,QAAA;AAAA,MACF;AAAA,MACCA,2BAAA,IAAA2K,aAAA,gBAAA,EAAe,IAAI,mBACjB,UAAc,cAAA;AAAA,QACb,IAAIpK,eAAQ,kBAAkB;AAAA,QAC9B,gBAAgB;AAAA,MACjB,CAAA,GACH;AAAA,MACCP,2BAAA,IAAA2K,aAAA,gBAAA,EAAe,aAAU,aAAa,UAAS,UAAA;AAAA,MAChD3K,2BAAAA,IAAC,MAAG,EAAA,oBAAkB,mBACnB,UAAA,2BAA2B,IAAI,CAAC,EAAE,cAAc,GAAG,GAAGU,WACrDV,2BAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC;AAAA,UACA;AAAA,UAEA,OAAAU;AAAA,UACA;AAAA,UACA;AAAA,UACA,iBAAiB;AAAA,UACjB,wBAAwB,sBAAsB,MAAMA,MAAK;AAAA,UACzD,UAAU;AAAA,UACV,YAAY;AAAA,UACZ,YAAY;AAAA,UACZ,gBAAgB;AAAA,UAChB;AAAA,QAAA;AAAA,QAVK,GAAG,YAAY,IAAI,EAAE;AAAA,MAY7B,CAAA,GACH;AAAA,IAAA,GACF;AAAA,IAEFV,2BAAAA,IAACa,aAAAA,MAAK,EAAA,gBAAe,UACnB,UAAAb,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA,YAAY,CAAC;AAAA,QACb,QAAQ;AAAA,QACR,SAAS;AAAA,QAER,UAAkB,kBAAA;AAAA,MAAA;AAAA,IAAA,GAEvB;AAAA,IACAA,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA,QAAQ;AAAA,QACR,qBAAqB;AAAA,MAAA;AAAA,IACvB;AAAA,EACF,EAAA,CAAA;AAEJ;AAEA,YAAY,eAAe;AAAA,EACzB,aAAa,CAAC;AAAA,EACd,aAAa;AACf;AAEA,YAAY,YAAY;AAAA,EACtB,aAAaC,2BAAU,MAAM;AAAA,IAC3B,YAAYA,mBAAU,QAAA;AAAA,IACtB,KAAKA,mBAAU,QAAA;AAAA,IACf,KAAKA,mBAAU,QAAA;AAAA,IACf,UAAUA,mBAAU,QAAA;AAAA,EAAA,CACrB;AAAA,EACD,aAAaA,mBAAU,QAAA;AAAA,EACvB,WAAWA,2BAAU,MAAM;AAAA,IACzB,aAAaA,mBAAU,QAAA;AAAA,IACvB,OAAOA,mBAAU,QAAA;AAAA,EAClB,CAAA,EAAE;AAAA,EACH,MAAMA,mBAAAA,QAAU,OAAO;AACzB;ACzTA,MAAM,iBAAiB,CAAC,aAAa,WAAW;ACgBhD,MAAM,YAAY,CAAC,EAAE,cAAc,YAAY,GAAG,eAAe,qBAAqB;AACpF,QAAM,kBAAkB;AACxB,QAAM,mBAAmB;AACnB,QAAA,UAAU,CAACxB,SAAQ,aAAaR,aAAAA,QAAIQ,SAAQ,CAAC,cAAc,UAAU,MAAM,GAAG,EAAE;AAChF,QAAA,gBAAgB,CAACA,SAAQ,QAAQR,aAAA,QAAIQ,SAAQ,CAAC,cAAc,GAAG,GAAG,GAAG,EAAE;AAU7E,QAAM,qBAAqB,CAAC2P,eAAcC,cAAa5P,SAAQ,iBAAiB;AAC9E,WAAO,OAAO,KAAK2P,aAAY,EAAE,OAAO,CAAC,KAAK,YAAY;AAEpD,UAAA,eAAe,SAAS,OAAO,GAAG;AAC7B,eAAA;AAAA,MACT;AAEA,YAAM,OAAO,eAAe,GAAG,YAAY,IAAI,OAAO,KAAK;AACrD,YAAA,WAAW,QAAQ3P,SAAQ,OAAO;AAGlC,YAAA,QAAQR,aAAAA,QAAImQ,eAAc,OAAO;AACjC,YAAA,WAAWnQ,aAAAA,QAAIoQ,cAAa,OAAO;AACzC,YAAM,YAAY,cAAc5P,SAAQ,CAAC,SAAS,WAAW,CAAC;AAC9D,YAAM,eAAe,cAAcA,SAAQ,CAAC,SAAS,YAAY,CAAC;AAC9D,UAAA;AAEJ,cAAQ,UAAU;AAAA,QAChB,KAAK;AACW,wBAAA,KAAK,MAAM,KAAK;AAC9B;AAAA,QACF,KAAK,QAAQ;AACG,wBAAA;AAGd,cAAI,SAAS,MAAM,MAAM,GAAG,EAAE,SAAS,GAAG;AACxC,0BAAc,GAAG,KAAK;AAAA,UACxB;AAEA;AAAA,QACF;AAAA,QACA,KAAK;AACH,cAAI,cAAcA,SAAQ,CAAC,SAAS,UAAU,CAAC,MAAM,MAAM;AAC3C,0BAAA,QAAQ,MAAM,OAAO,CAAC,SAAS,EAAE,gBAAgB,KAAK,IAAI;AAAA,UAAA,OACnE;AACS,0BAAAR,aAAA,QAAI,OAAO,CAAC,aAAa,OAAO,OAAOA,qBAAI,OAAO,MAAM,IAAI;AAAA,UAC5E;AACA;AAAA,QACF,KAAK;AACH,cAAI,cAAc;AAChB,0BAAc,QACV,MAAM,IAAI,CAAC,MAAMyC,WAAU;AACzB,oBAAM,iBAAiB;AAAA,gBACrB;AAAA,iBACC,YAAY,CAAC,GAAGA,MAAK;AAAA,gBACtB,iBAAiB,SAAS;AAAA,gBAC1B,GAAG,IAAI,IAAIA,MAAK;AAAA,cAAA;AAGX,qBAAA;AAAA,YACR,CAAA,IACD;AAAA,UAAA,OACC;AACS,0BAAA,QACV,mBAAmB,OAAO,UAAU,iBAAiB,SAAS,GAAG,IAAI,IACrE;AAAA,UACN;AAEA;AAAA,QAEF,KAAK,YAAY;AACf,gBAAM,sBAAsB;AAAA,YAC1B;AAAA,YACA;AAAA,UACA,EAAA,IAAI,EAAE,KAAK,GAAG;AAQhB,cAAI,iBAAiBzC,aAAA,QAAI,iBAAiB,qBAAqB,CAAE,CAAA;AAOjE,gBAAM,qBAAqB,MAAM,OAAO,CAACqQ,MAAK,UAAU,cAAc,UAAU;AAC9E,kBAAM,mBAAmB,eAAe;AAAA,cACtC,CAAC,gBAAgB,YAAY,OAAO,SAAS;AAAA,YAAA;AAGzC,kBAAA,kBAAkB,MAAM,eAAe,CAAC;AAE9C,gBAAI,CAAC,oBAAoB,iBAAiB,iBAAiB,SAAS,cAAc;AAC1E,oBAAA,WAAW,kBAAkB,EAAE,QAAQ,gBAAgB,OAAO,EAAE,KAAK;AAEpE,qBAAA,CAAC,GAAGA,MAAK,EAAE,IAAI,SAAS,IAAI,UAAU;AAAA,YAC/C;AAEOA,mBAAAA;AAAAA,UACT,GAAG,CAAE,CAAA;AAML,gBAAM,wBAAwB,eAAe,OAAO,CAACA,MAAK,aAAa;AACjE,gBAAA,CAAC,MAAM,KAAK,CAAC,gBAAgB,YAAY,OAAO,SAAS,EAAE,GAAG;AAChE,qBAAO,CAAC,GAAGA,MAAK,EAAE,IAAI,SAAS,IAAI;AAAA,YACrC;AAEOA,mBAAAA;AAAAA,UACT,GAAG,CAAE,CAAA;AAES,wBAAA;AAAA,YACZ,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAMZ,SAAS,mBAAmB,QAAQ;AAAA,UAAA;AAGtC;AAAA,QACF;AAAA,QAEA,KAAK;AACH,wBAAc,MAAM,IAAI,CAAC,eAAe5N,WAAU;AAChD,kBAAM,iBAAiB;AAAA,cACrB;AAAA,eACC,YAAY,CAAC,GAAGA,MAAK;AAAA,cACtB,iBAAiB,cAAc,WAAW;AAAA,cAC1C,GAAG,IAAI,IAAIA,MAAK;AAAA,YAAA;AAGX,mBAAA;AAAA,UAAA,CACR;AACD;AAAA,QACF;AACgB,wBAAA,gBAAgB,OAAO,IAAI;AAAA,MAC7C;AAEA,UAAI,OAAO,IAAI;AAER,aAAA;AAAA,IACT,GAAG,CAAE,CAAA;AAAA,EAAA;AAGP,SAAO,mBAAmB,cAAc,aAAa,eAAe,EAAE;AACxE;AAMa,MAAA,kBAAkB,CAAC,OAAO,QAAQ;AACzC,MAAA6N,iBAAAA,QAAQ,KAAK,GAAG;AACX,WAAA,MAAM,IAAI,CAAC,QAAS,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,GAAI;AAAA,EACvD;AACI,MAAAjP,kBAAAA,QAAS,KAAK,GAAG;AACnB,WAAO,MAAM,GAAG;AAAA,EAClB;AAEO,SAAA;AACT;ACpKA,MAAM,yBAAyB,CAAC,YAAY,YAAY,MAAM,OAAO,cAAc,WAAc;AAI/F,QAAM,oBAAoB,CACxB,MACA,YACA,EAAE,qBAAqB,OAAO,OAAO,CAAA,GAAI,SAAS,WAAW,IAAI,CAAA,MAC9D;AACI,WAAA,OAAO,QAAQ,UAAU,EAAE;AAAA,MAChC,CAAC,KAAK,CAAC,KAAK,KAAK,MAAM;AACrB,YACE,uBACC,QAAQ,QAAQ,QAAQ,UAAa,IAAI,GAAG,MAAM,UAAa,IAAI,GAAG,MAAM,OAC7E;AACO,iBAAA;AAAA,QACT;AAEI,YAAA,UAAU,OAAO,EAAE,MAAM,CAAC,GAAG,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG;AACtD,cAAI,GAAG,IACL,OAAO,gBAAgB,aACnB,YAAY,IAAI,GAAG,GAAG,EAAE,MAAM,CAAC,GAAG,MAAM,GAAG,GAAG,QAAQ,IAAA,CAAK,IAC3D;AAAA,QACR;AAEI,YAAA,MAAM,SAAS,aAAa;AAC9B,gBAAM,sBAAsB,WAAW,MAAM,SAAS,EAAE;AAEpD,cAAA,CAAC,MAAM,cAAc,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,MAAM,UAAU;AACjE,gBAAI,GAAG,IAAI,kBAAkB,IAAI,GAAG,GAAG,qBAAqB;AAAA,cAC1D;AAAA,cACA,MAAM,CAAC,GAAG,MAAM,GAAG;AAAA,cACnB,QAAQ,WAAW,GAAG;AAAA,YAAA,CACvB;AAAA,UAAA,WACQ,MAAM,cAAc,MAAM,QAAQ,IAAI,GAAG,CAAC,GAAG;AAClD,gBAAA,GAAG,IAAI,IAAI,GAAG,EAAE,IAAI,CAAC,OAAOoB,WAAU;AAClClC,oBAAAA,QAAO,kBAAkB,OAAO,qBAAqB;AAAA,gBACzD;AAAA,gBACA,MAAM,CAAC,GAAG,MAAM,KAAKkC,MAAK;AAAA,gBAC1B,QAAQ,WAAW,GAAG;AAAA,cAAA,CACvB;AAEMlC,qBAAAA;AAAAA,YAAA,CACR;AAAA,UACH;AAAA,QAAA,WACS,MAAM,SAAS,iBAAiB,MAAM,QAAQ,IAAI,GAAG,CAAC,GAAG;AAC9D,cAAA,GAAG,IAAI,IAAI,GAAG,EAAE,IAAI,CAAC,OAAOkC,WAAU;AACxC,kBAAM,sBAAsB,WAAW,MAAM,WAAW,EAAE;AACpDlC,kBAAAA,QAAO,kBAAkB,OAAO,qBAAqB;AAAA,cACzD;AAAA,cACA,MAAM,CAAC,GAAG,MAAM,KAAKkC,MAAK;AAAA,cAC1B,QAAQ,WAAW,GAAG;AAAA,YAAA,CACvB;AAEMlC,mBAAAA;AAAAA,UAAA,CACR;AAAA,QACH;AAEO,eAAA;AAAA,MACT;AAAA,MACA,EAAE,GAAG,KAAK;AAAA,IAAA;AAAA,EACZ;AAGK,SAAA;AACT;ACzFA,MAAM,aAAa,CAAC,cAAc,MAAM,IAAI,UAAU;AAC9C,QAAA,gBAAgB,aAAa;AAErB,gBAAA,OAAO,MAAM,CAAC;AACd,gBAAA,OAAO,IAAI,GAAG,KAAK;AAE1B,SAAA;AACT;ACOA,MAAMX,iBAAe;AAAA,EACnB,yBAAyB,CAAC;AAAA,EAC1B,0BAA0B,CAAC;AAAA,EAC3B,YAAY,CAAC;AAAA,EACb,aAAa,CAAC;AAAA,EACd,cAAc;AAAA,EACd,mBAAmB;AAAA,EACnB,gBAAgB;AAAA,EAChB,qBAAqB;AAAA,IACnB,MAAM;AAAA,IACN,YAAY;AAAA,EACd;AACF;AAEA,MAAMC,YAAU,CAAC,OAAO;AAAA;AAAA,EAEtBC,yBAAQ,OAAO,CAAC,eAAe;AAC7B,YAAQ,OAAO,MAAM;AAAA,MACnB,KAAK,yCAAyC;AACtC,cAAA,EAAE,qBAAqB,cAAkB,IAAA;AAE/C,cAAM,uBAAuB;AAAA,UAC3B,GAAG,MAAM,wBAAwB,oBAAoB,GAAG;AAAA,QAAA;AAG1D,cAAM,2CAA2CyQ;AAAAA,UAC/C;AAAA,UACA,CAAC,UAAU,MAAM,SAAS;AAAA,UAC1B,CAAC;AAAA,QAAA;AAGH,cAAM,yBAAyB;AAAA,UAC7B;AAAA,UACA,oBAAoB;AAAA,QAAA;AAGtBlQ,qBAAA,QAAI,YAAY,CAAC,gBAAgB,GAAG,OAAO,IAAI,GAAG,sBAAsB;AAExE;AAAA,MACF;AAAA,MACA,KAAK;AAAA,MACL,KAAK,qCAAqC;AAClC,cAAA;AAAA,UACJ;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,WAAW;AAAA,QACT,IAAA;AAEJ,YAAI,mBAAmB;AACV,qBAAA,oBAAoB,CAAC,MAAM;AAAA,QACxC;AAEI,YAAA,OAAO,SAAS,iCAAiC;AACxC,qBAAA,iBAAiB,KAAK,CAAC;AAAA,QACpC;AAEA,cAAM,eAAe,CAAC,GAAGL,aAAAA,QAAI,OAAO,CAAC,gBAAgB,GAAG,IAAI,GAAG,CAAE,CAAA,CAAC;AAElE,YAAI,iBAAiB;AAErB,YAAI,mBAAmB,QAAW;AAChC,2BAAiB,aAAa;AAAA,QAAA,WACrB,iBAAiB,GAAG;AACZ,2BAAA;AAAA,QACnB;AAEM,cAAA,uBACJ,OAAO,SAAS,kCACZ;AAAA,UACE,GAAG,MAAM,wBAAwB,oBAAoB,GAAG;AAAA,UACxD,aAAa,oBAAoB;AAAA,UACjC,cAAc,cAAc,YAAY,IAAI;AAAA,QAAA,IAE9C;AAAA,UACE,GAAG,MAAM,wBAAwB,oBAAoB,GAAG;AAAA,UACxD,cAAc,cAAc,YAAY,IAAI;AAAA,QAAA;AAGpD,cAAM,2CAA2CuQ;AAAAA,UAC/C;AAAA,UACA,CAAC,UAAU,MAAM,SAAS;AAAA,UAC1B,CAAC;AAAA,QAAA;AAGH,cAAM,yBAAyB;AAAA,UAC7B;AAAA,UACA,oBAAoB;AAAA,QAAA;AAGT,qBAAA,OAAO,gBAAgB,GAAG,sBAAsB;AAE7DlQ,qBAAA,QAAI,YAAY,CAAC,gBAAgB,GAAG,IAAI,GAAG,YAAY;AAEvD;AAAA,MACF;AAAA,MACA,KAAK,iBAAiB;AACpB,cAAM,EAAE,iBAAiB,kBAAkB,MAAA,IAAU;AAE/C,cAAA,uBAAuBL,aAAAA,QAAI,OAAO,eAAe;AACjD,cAAA,wBAAwBA,aAAAA,QAAI,OAAO,gBAAgB;AAEzD,cAAM,eAAe,CAAC,uBAClB,QACA,MAAM,OAAO,CAAC,aAAa;AACzB,iBAAO,CAAC,qBAAqB,KAAK,CAAC,wBAAwB;AAClD,mBAAA,oBAAoB,OAAO,SAAS;AAAA,UAAA,CAC5C;AAAA,QAAA,CACF;AAEL,cAAM,OAAOwQ,mBAAA;AAAA,UACX;AAAA,UACA,sBAAsB,CAAC,GAAG;AAAA,UAC1B,aAAa;AAAA,QAAA;AAQf,cAAM,iBAAiB,aAAa,IAAI,CAAC,UAAU/N,YAAW;AAAA,UAC5D,GAAG;AAAA,UACH,cAAc,KAAKA,MAAK;AAAA,QACxB,EAAA;AAOFpC,qBAAA;AAAA,UACE;AAAA,UACA;AAAA,UACAoQ,gBAAAA,QAAO,CAAC,GAAG,gBAAgB,GAAG,oBAAoB,GAAG,IAAI;AAAA,QAAA;AAE3DpQ,qBAAA;AAAA,UACE;AAAA,UACA;AAAA,UACAoQ,gBAAAA,QAAO,CAAC,GAAG,gBAAgB,GAAG,qBAAqB,GAAG,IAAI;AAAA,QAAA;AAG5D;AAAA,MACF;AAAA,MACA,KAAK,oBAAoB;AACvB,cAAM,OAAO,CAAC,gBAAgB,GAAG,OAAO,IAAI;AACtC,cAAA,EAAE,OAAO,cAAkB,IAAA;AAMjC,YAAI,eAAe;AACjBpQ,uBAAAA,QAAI,YAAY,MAAM,CAAC,KAAK,CAAC;AAAA,QAAA,OACxB;AACC,gBAAA,wBAAwBL,aAAAA,QAAI,OAAO,IAAI;AACvC,gBAAA,CAAC,GAAG,IAAIwQ,mBAAqB,qBAAA,sBAAsB,GAAG,EAAE,GAAG,cAAc,MAAM,CAAC;AAEhF,gBAAA,eAAe,CAAC,GAAG,uBAAuB,EAAE,GAAG,OAAO,cAAc,IAAA,CAAK;AAC3EnQ,uBAAAA,QAAA,YAAY,MAAM,YAAY;AAAA,QACpC;AAEA;AAAA,MACF;AAAA,MACA,KAAK,uBAAuB;AAC1B,cAAM,OAAO,CAAC,gBAAgB,GAAG,OAAO,IAAI;AACtC,cAAA,EAAE,GAAO,IAAA;AACf,cAAM,uBAAuBL,aAAAA,QAAI,OAAO,CAAC,GAAG,IAAI,CAAC;AAEjD,cAAM,eAAe,qBAAqB,OAAO,CAAC,QAAQ,IAAI,OAAO,EAAE;AAEnEK,qBAAAA,QAAA,YAAY,MAAM,YAAY;AAElC;AAAA,MACF;AAAA,MACA,KAAK;AAAA,MACL,KAAK,oBAAoB;AACvB,cAAM,EAAE,UAAU,UAAU,KAAA,IAAS;AACrC,cAAM,OAAO,CAAC,gBAAgB,GAAG,IAAI;AACrC,cAAM,wBAAwBL,aAAAA,QAAI,OAAO,CAAC,GAAG,IAAI,CAAC;AAE5C,cAAA,cAAc,sBAAsB,QAAQ;AAE5C,cAAA,eAAe,CAAC,GAAG,qBAAqB;AAE1C,YAAA,OAAO,SAAS,oBAAoB;AAChC,gBAAA,WACJ,WAAW,WACP,sBAAsB,WAAW,CAAC,GAAG,eACrC,sBAAsB,QAAQ,GAAG;AACjC,gBAAA,SACJ,WAAW,WACP,sBAAsB,QAAQ,GAAG,eACjC,sBAAsB,WAAW,CAAC,GAAG;AAC3C,gBAAM,CAAC,MAAM,IAAIwQ,mBAAAA,qBAAqB,UAAU,QAAQ,CAAC;AAE5C,uBAAA,OAAO,UAAU,CAAC;AAClB,uBAAA,OAAO,UAAU,GAAG,EAAE,GAAG,aAAa,cAAc,QAAQ;AAAA,QAAA,OACpE;AACQ,uBAAA,OAAO,UAAU,CAAC;AAClB,uBAAA,OAAO,UAAU,GAAG,WAAW;AAAA,QAC9C;AAEInQ,qBAAAA,QAAA,YAAY,MAAM,YAAY;AAElC;AAAA,MACF;AAAA,MAKA,KAAK,aAAa;AACV,cAAA,EAAE,eAAe,aAAa,IAAI,aAAa,IAAI,oBAAwB,IAAA;AAQ3E,cAAA,OAAON,2BAAU,aAAa;AAEpC,cAAM,2CAA2CwQ;AAAAA,UAC/C;AAAA,UACA,CAAC,OAAO,EAAE,WAAW;AACnB,kBAAM,YAAY,KAAK,KAAK,SAAS,CAAC;AAEhC,kBAAA,iBAAiB,eAAe,SAAS,SAAS;AAEjD,mBAAA,MAAM,SAAS,cAAc,CAAC;AAAA,UACvC;AAAA,UACA,CAAC,GAAG,EAAE,WAAW;AACX,gBAAA,MAAM,cAAc,OAAO,KAAK,MAAMvQ,aAAAA,QAAI,MAAM,cAAc,IAAI,GAAG;AAChE,qBAAAA,qBAAI,MAAM,cAAc,IAAI;AAAA,YACrC;AAEA,mBAAO;UACT;AAAA,QAAA;AAGF,cAAM,kCAAkC;AAAA,UACtC;AAAA,UACA;AAAA,QAAA;AAGF,cAAM,sCAAsCuQ;AAAAA,UAC1C;AAAA,UACA,CAAC,UACC,MAAM,SAAS,iBAAkB,MAAM,SAAS,eAAe,CAAC,MAAM;AAAA,UACxE,CAAChQ,UAAS;AAID,mBAAA,MAAM,QAAQA,KAAI,IACrBA,MAAK,IAAI,CAAC,OAAOkC,YAAW;AAAA,cAC1B,GAAG;AAAA,cACH,cAAcA;AAAA,cACd,IACF;AAAA,cACE,GAAGlC;AAAAA,cACH,cAAc;AAAA,YAAA;AAAA,UAEtB;AAAA,QAAA;AAGF,cAAM,wBAAwB;AAAA,UAC5B;AAAA,UACA;AAAA,UACA,EAAE,oBAAoB,KAAK;AAAA,QAAA;AAG7B,YAAI,CAAC,qBAAqB;AACxB,qBAAW,cAAc;AAAA,QAC3B;AAEA,mBAAW,eAAe;AAE1B,mBAAW,aAAa;AAExB,mBAAW,iBAAiB;AAC5B,mBAAW,oBAAoB;AAC/B;AAAA,MACF;AAAA,MACA,KAAK;AAAA,MACL,KAAK,uBAAuB;AAC1B,cAAM,EAAE,cAAc,iBAAiB,kBAAA,IAAsB;AAE7D,YAAI,mBAAmB;AACV,qBAAA,oBAAoB,CAAC,MAAM;AAAA,QACxC;AAEM,cAAA,eAAe,MAAM,aAAa,eAAe;AACvD,cAAM,YAAY,OAAO,SAAS,sBAAsB,eAAe,IAAI,eAAe;AAC1F,cAAM,gBAAgB,MAAM,aAAa,eAAe,EAAE,YAAY;AACtE,cAAM,eAAe,WAAW,cAAc,cAAc,WAAW,aAAa;AAEpFF,qBAAA,QAAI,YAAY,CAAC,gBAAgB,OAAO,eAAe,GAAG,YAAY;AAEtE;AAAA,MACF;AAAA,MACA,KAAK,cAAc;AACjB,cAAM,eAAeL,aAAAA,QAAI,OAAO,CAAC,gBAAgB,GAAG,OAAO,IAAI,GAAG,EAAE,EAAE,MAAM;AACtE,cAAA,gBAAgBA,aAAAA,QAAI,OAAO,CAAC,gBAAgB,GAAG,OAAO,MAAM,OAAO,SAAS,CAAC;AACnF,cAAM,eAAe;AAAA,UACnB;AAAA,UACA,OAAO;AAAA,UACP,OAAO;AAAA,UACP;AAAA,QAAA;AAGFK,qBAAA,QAAI,YAAY,CAAC,gBAAgB,GAAG,OAAO,IAAI,GAAG,YAAY;AAE9D;AAAA,MACF;AAAA,MACA,KAAK,aAAa;AACV,cAAA,CAAC,yBAAyB,IAAI,OAAO;AAM3C,YAAI,OAAO,uBAAuB;AAC5BA,+BAAA,YAAY,CAAC,eAAe,GAAG,OAAO,IAAI,GAAG,OAAO,KAAK;AAAA,QAC/D;AAIE,YAAA,OAAO,KAAK,WAAW,KACvBL,aAAAA,QAAI,OAAO,CAAC,gBAAgB,yBAAyB,CAAC,MAAM,MAC5D;AACAK,uBAAAA,QAAI,YAAY,CAAC,gBAAgB,yBAAyB,GAAG;AAAA,YAC3D,CAAC,OAAO,KAAK,CAAC,CAAC,GAAG,OAAO;AAAA,UAAA,CAC1B;AAED;AAAA,QACF;AAEIA,6BAAA,YAAY,CAAC,gBAAgB,GAAG,OAAO,IAAI,GAAG,OAAO,KAAK;AAE9D;AAAA,MACF;AAAA,MACA,KAAK,sCAAsC;AACzC,YAAI,OAAO,mBAAmB;AACjB,qBAAA,oBAAoB,CAAC,MAAM;AAAA,QACxC;AAEA,mBAAW,aAAa,OAAO,eAAe,EAAE,OAAO,OAAO,OAAO,CAAC;AAEtE;AAAA,MACF;AAAA,MACA,KAAK,+BAA+B;AAClC,cAAM,wBAAwB,CAAC,gBAAgB,GAAG,OAAO,IAAI;AAEzDA,qBAAAA,QAAA,YAAY,uBAAuB,IAAI;AAE3C;AAAA,MACF;AAAA,MACA,KAAK,yBAAyB;AAC5BqQ,uBAAA,QAAM,YAAY,CAAC,gBAAgB,GAAG,OAAO,IAAI,CAAC;AAElD;AAAA,MACF;AAAA,MACA,KAAK,2BAA2B;AACxB,cAAA,aAAa,OAAO,KAAK,SAAS;AAClC,cAAA,sBAAsB,CAAC,gBAAgB,GAAG1B,cAAAA,QAAK,OAAO,MAAM,UAAU,CAAC;AAC7E,cAAM,YAAY,OAAO,KAAK,MAAM,UAAU,EAAE,SAAS;AAEzD,YAAI,WAAW;AACF,qBAAA,oBAAoB,CAAC,MAAM;AAAA,QACxC;AAEA,cAAM,eAAehP,aAAAA,QAAI,OAAO,mBAAmB,EAAE,MAAM;AAC9C,qBAAA,OAAO,SAAS,OAAO,KAAK,UAAU,GAAG,EAAE,GAAG,CAAC;AAExDK,qBAAAA,QAAA,YAAY,qBAAqB,YAAY;AAEjD;AAAA,MACF;AAAA,MACA,KAAK,+BAA+B;AAClC,mBAAW,0BAA0B,OAAO;AAC5C,mBAAW,2BAA2B,OAAO;AAE7C;AAAA,MACF;AAAA,MACA,KAAK,mBAAmB;AACtB,mBAAW,iBAAiB;AAC5B,mBAAW,aAAa,OAAO;AAC/B;AAAA,MACF;AAAA,MACA,KAAK,2BAA2B;AAC9B,cAAM,YAAY,OAAO,KAAK,MAAM,UAAU,EAAE,SAAS;AAEzD,YAAI,WAAW;AACF,qBAAA,oBAAoB,CAAC,MAAM;AAAA,QACxC;AAEA;AAAA,MACF;AAAA,MACA,KAAK,4BAA4B;AAC/B,mBAAW,sBAAsB,EAAE,GAAG,OAAO,oBAAoB;AACjE;AAAA,MACF;AAAA,MACA,KAAK,8BAA8B;AACjC,mBAAW,sBAAsB,EAAE,GAAG,MAAM,qBAAqB,MAAM;AACvE;AAAA,MACF;AAAA,MACA;AACS,eAAA;AAAA,IACX;AAAA,EAAA,CACD;AAAA;ACxYH,MAAM,8BAA8B,CAAC;AAAA,EACnC;AAAA,EACA,gBAAgB,EAAE,SAAS,UAAU;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,CAAC,UAAU,WAAW,IAAIyB,iBAAAA,QAAM,SAAS,KAAK;AAKpD,QAAM,CAAC,cAAc,QAAQ,IAAInB,MAAAA,WAAWd,WAASD,cAAY;AAC3D,QAAA;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACE,IAAA;AAEJ,QAAM,EAAE,oBAAA,IAAwBF,WAAA,YAAY,iBAAiB;AAC7D,QAAM,gBAAgBmC,WAAAA;AAEtB,QAAM,qBAAqB+D,aAAAA;AAC3B,QAAM,EAAE,SAAS,UAAU,IAAI+K,aAAkB,kBAAA;AAEjD,QAAM,2BAA2B3Q,aAAAA,QAAI,eAAe,CAAC,aAAa,GAAG,CAAA,CAAE;AAEjE,QAAA,qBAAqBY,MAAAA,QAAQ,MAAM;AACvC,WAAOZ,aAAAA,QAAI,0BAA0B,CAAC,WAAW,iBAAiB,GAAG,KAAK;AAAA,EAAA,GACzE,CAAC,wBAAwB,CAAC;AAEvB,QAAA,0BAA0BY,MAAAA,QAAQ,MAAM;AACrC,WAAA,sBAAsB,CAAC,YAAY;AAAA,EACzC,GAAA,CAAC,oBAAoB,YAAY,WAAW,CAAC;AAE1C,QAAA,EAAE,eAAeqB,aAAAA;AACjB,QAAA,EAAE,kBAAkBC,UAAAA;AACpB,QAAA,gBAAgBnB,aAAO,UAAU;AAEjC,QAAA,2CAA2CH,MAAAA,QAAQ,MAAM;AAC7D,QAAI,kBAAkB;AACb,aAAA;AAAA,IACT;AAEA,QAAI,iBAAiB;AACZ,aAAA;AAAA,IACT;AAEI,QAAA,YAAY,SAAS,cAAc,OAAO;AACrC,aAAA;AAAA,IACT;AAEO,WAAA;AAAA,KACN,CAAC,kBAAkB,iBAAiB,SAAS,SAAS,CAAC;AAE1DQ,QAAAA,UAAU,MAAM;AACd,QAAI,WAAW,YAAY;AACf;IAAA,OACL;AACG;IACV;AAAA,EACC,GAAA,CAAC,SAAS,WAAW,MAAM,CAAC;AAG/BA,QAAAA,UAAU,MAAM;AACd,QAAI,CAAC,kBAAkB;AACL;IAClB;AAAA,EAAA,GAEC,CAAC,iBAAiB,CAAC;AAEtBA,QAAAA,UAAU,MAAM;AACR,UAAA,eAAe,OAAO,KAAK,UAAU;AAIvC,QAAA,aAAa,SAAS,GAAG;AACrB,YAAA,aAAa,aAAa,CAAC;AAC3B,YAAA,KAAK,SAAS,eAAe,UAAU;AAE7C,UAAI,IAAI;AACN,WAAG,MAAM;AAAA,MACX;AAAA,IACF;AAAA,EAAA,GACC,CAAC,UAAU,CAAC;AAEfA,QAAAA,UAAU,MAAM;AACd,QAAI,0CAA0C;AACzB,yBAAA;AAAA,QACjB,MAAM;AAAA,QACN,SAAS,EAAE,IAAIkB,OAAA,QAAQ,gCAAgC,EAAE;AAAA,MAAA,CAC1D;AAAA,IACH;AAAA,EAAA,GACC,CAAC,0CAA0C,kBAAkB,CAAC;AAEjElB,QAAAA,UAAU,MAAM;AACL,aAAA;AAAA,MACP,MAAM;AAAA,MACN;AAAA,MACA;AAAA,IAAA,CACD;AAAA,EAAA,GACA,CAAC,yBAAyB,wBAAwB,CAAC;AAEhD,QAAA,EAAE,WAAe,IAAA;AAEjB,QAAA,wBAAwB,QAAQ,aAAa;AAEnDA,QAAAA,UAAU,MAAM;AAKd,QACE,iBACA,0BAA0B,cAC1B,CAAC8E,iBAAAA,QAAQ,uBAAuB,aAAa,GAC7C;AACS,eAAA;AAAA,QACP,MAAM;AAAA,QACN;AAAA,QACA;AAAA,QACA,YAAY,yBAAyB;AAAA,QACrC;AAAA,MAAA,CACD;AAMD,UAAI,qBAAqB;AACvB,sBAAc,0BAA0B;AAAA,MAC1C;AAAA,IACF;AAAA,EAAA,GACC;AAAA,IACD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,CACD;AAED,QAAM,uBAAuBvG,MAAA;AAAA,IAC3B,CAAC,SACC,CACE,MACA,qBACA,eACAiR,qBAAoB,OACpB,WAAW,WACR;AACH,oBAAc,QAAQ,8BAA8B;AAE3C,eAAA;AAAA,QACP;AAAA,QACA,MAAM,KAAK,MAAM,GAAG;AAAA,QACpB;AAAA,QACA;AAAA,QACA;AAAA,QACA,mBAAAA;AAAAA,MAAA,CACD;AAAA,IACH;AAAA,IACF,CAAC;AAAA,EAAA;AAGG,QAAA,4BAA4B,qBAAqB,+BAA+B;AAEtF,QAAM,mCAAmCjR,MAAA;AAAA,IACvC,CAAC,MAAM,qBAAqB,kBAAkB;AACnC,eAAA;AAAA,QACP,MAAM;AAAA,QACN,MAAM,KAAK,MAAM,GAAG;AAAA,QACpB;AAAA,QACA;AAAA,MAAA,CACD;AAAA,IACH;AAAA,IACA,CAAC;AAAA,EAAA;AAMH,QAAM,kBAAkBA,MAAAA,YAAY,CAAC,EAAE,MAAM,OAAO,oBAAoB;AAC7D,aAAA;AAAA,MACP,MAAM;AAAA,MACN,MAAM,KAAK,MAAM,GAAG;AAAA,MACpB;AAAA,MACA;AAAA,IAAA,CACD;AAAA,EACH,GAAG,CAAE,CAAA;AAEL,QAAM,eAAeA,MAAA;AAAA,IACnB,CAAC,EAAE,QAAQ,EAAE,iBAAiB,kBAAkB,OAAO,iBAAiB,QAAQ;AACrE,eAAA;AAAA,QACP,MAAM;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MAAA,CACD;AAAA,IACH;AAAA,IACA,CAAC;AAAA,EAAA;AAGG,QAAA,gCAAgC,qBAAqB,mCAAmC;AAExF,QAAA,YAAYiB,MAAAA,QAAQ,MAAM;AAC9B,UAAMiE,WAAU,EAAE,iBAAiB,SAAS,yBAAyB,iBAAiB;AAE/E,WAAAgM,OAAA;AAAA,MACL;AAAA,MACA;AAAA,QACE,YAAY,cAAc,cAAc,CAAC;AAAA,MAC3C;AAAA,MACAhM;AAAA,IAAA;AAAA,EACF,GACC;AAAA,IACD,cAAc;AAAA,IACd;AAAA,IACA;AAAA,IACA;AAAA,EAAA,CACD;AAED,QAAM,kBAAkBlF,MAAA;AAAA,IACtB,OAAO,YAAY,CAAA,MAAO;AACxB,UAAI,SAAS,CAAA;AACP,YAAA,cAAcI,2BAAU,YAAY;AAEtC,UAAA,CAAC+Q,iBAAAA,QAAQ,WAAW,GAAG;AACzBzQ,qBAAA,QAAI,aAAa,UAAU,MAAM,UAAU,KAAK;AAAA,MAClD;AAEI,UAAA;AAEF,cAAM,UAAU,SAAS,aAAa,EAAE,YAAY,OAAO;AAAA,eACpD,KAAK;AACZ,iBAAS0Q,aAAAA,kBAAkB,GAAG;AAE9B,YAAI,gBAAgB;AAClB,mBAAS,OAAO,KAAK,MAAM,EAAE,OAAO,CAAC,KAAK,YAAY;AACpD,kBAAM,SAAS,QAAQ,MAAM,GAAG,EAAE,CAAC;AAEnC,gBAAI,WAAW,gBAAgB;AACzB,kBAAA,OAAO,IAAI,OAAO,OAAO;AAAA,YAC/B;AAEO,mBAAA;AAAA,UACT,GAAG,CAAE,CAAA;AAAA,QACP;AAAA,MACF;AAES,eAAA;AAAA,QACP,MAAM;AAAA,QACN;AAAA,MAAA,CACD;AAAA,IACH;AAAA,IACA,CAAC,gBAAgB,cAAc,SAAS;AAAA,EAAA;AAG1C,QAAM,eAAepR,MAAA;AAAA,IACnB,CAAC,EAAE,QAAQ,EAAE,MAAM,OAAO,OAAU,GAAA,wBAAwB,UAAU;AACpE,UAAI,aAAa;AAIf,UAAA,CAAC,QAAQ,YAAY,UAAU,SAAS,OAAO,UAAU,cAAc,QAAQ,EAAE;AAAA,QAC/E;AAAA,MAAA,KAEF,CAAC,SACD,UAAU,GACV;AACa,qBAAA;AAAA,MACf;AAEI,UAAA,SAAS,cAAc,CAAC,OAAO;AACxB,iBAAA;AAAA,UACP,MAAM;AAAA,UACN,MAAM,KAAK,MAAM,GAAG;AAAA,QAAA,CACrB;AAED;AAAA,MACF;AAES,eAAA;AAAA,QACP,MAAM;AAAA,QACN,MAAM,KAAK,MAAM,GAAG;AAAA,QACpB,OAAO;AAAA,QACP;AAAA,MAAA,CACD;AAAA,IACH;AAAA,IACA,CAAC;AAAA,EAAA;AAGH,QAAM,iBAAiBA,MAAA;AAAA,IACrB,CAACqR,eAAcC,iBAAgB;AAE7B,YAAM,cAAc;AAAA,QAClB,EAAE,cAAcD,eAAc,aAAaC,aAAY;AAAA,QACvD;AAAA,QACA,cAAc;AAAA,MAAA;AAGT,aAAA;AAAA,IACT;AAAA,IACA,CAAC,cAAc,YAAY,wBAAwB;AAAA,EAAA;AAG/C,QAAA,kBAAkBrQ,MAAAA,QAAQ,MAAM;AACpC,QAAI,CAAC,oBAAoB;AACvB,aAAO;IACT;AAEA,WAAO,0BAA0B,EAAE,QAAQ,QAAA,IAAY,CAAA;AAAA,EAAC,GACvD,CAAC,oBAAoB,uBAAuB,CAAC;AAE1C,QAAA,+BAA+BjB,kBAAY,OAAO,MAAM;AAC5D,MAAE,eAAe;AAEjB,WAAO,SAAS;AAAA,MACd,MAAM;AAAA,IAAA,CACP;AAAA,EACH,GAAG,CAAE,CAAA;AAEL,QAAM,eAAeA,MAAA;AAAA,IACnB,OAAO,MAAM;AACX,QAAE,eAAe;AACjB,UAAI,SAAS,CAAA;AAET,UAAA;AACF,cAAM,UAAU,SAAS,cAAc,EAAE,YAAY,OAAO;AAAA,eACrD,KAAK;AACZ,iBAASoR,aAAAA,kBAAkB,GAAG;AAAA,MAChC;AAEI,UAAA;AACE,YAAAD,iBAAAA,QAAQ,MAAM,GAAG;AACb,gBAAA,WAAW,eAAe,cAAc,WAAW;AACzDI,mBAAAA,UAAU,MAAM;AACd,wBAAY,IAAI;AAAA,UAAA,CACjB;AAED,cAAI,iBAAiB;AACb,kBAAA,OAAO,UAAU,eAAe;AAAA,UAAA,OACjC;AACC,kBAAA,MAAM,UAAU,eAAe;AAAA,UACvC;AAEA,sBAAY,KAAK;AAAA,QACnB;AAAA,eACO,KAAK;AACZ,oBAAY,KAAK;AACR,iBAAA;AAAA,UACP,GAAG;AAAA,UACH,GAAGC,+BAAkB,KAAK,EAAE7O,SAAAA,OAAAA,SAAS;AAAA,QAAA;AAAA,MAEzC;AAES,eAAA;AAAA,QACP,MAAM;AAAA,QACN;AAAA,MAAA,CACD;AAAA,IACH;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EAAA;AAGI,QAAA,gBAAgB3C,MAAAA,YAAY,YAAY;AAE5C,UAAMa,WAASqQ,OAAA;AAAA,MACb;AAAA,MACA;AAAA,QACE,YAAY7Q,aAAA,QAAI,eAAe,cAAc,CAAA,CAAE;AAAA,MACjD;AAAA,MACA,EAAE,iBAAiB,SAAS,OAAO,iBAAiB,MAAM;AAAA,IAAA;AAGtD,UAAA,aAAa,MAAM;AAEzB,QAAI,CAAC,oBAAoB,QAAQ,aAAa,GAAG;AAGtC,eAAA;AAAA,QACP,MAAM;AAAA,QACN,qBAAqB;AAAA,UACnB,MAAM;AAAA,UACN;AAAA,QACF;AAAA,MAAA,CACD;AAED;AAAA,IACF;AACS,aAAA;AAAA,MACP,MAAM;AAAA,IAAA,CACP;AAED,QAAI,SAAS,CAAA;AACT,QAAA;AACF,YAAMQ,SAAO,SAAS,cAAc,EAAE,YAAY,OAAO;AAAA,aAClD,KAAK;AACZ,eAASuQ,aAAAA,kBAAkB,GAAG;AAAA,IAChC;AAEI,QAAA;AACE,UAAAD,iBAAAA,QAAQ,MAAM,GAAG;AACnBI,iBAAAA,UAAU,MAAM;AACd,sBAAY,IAAI;AAAA,QAAA,CACjB;AACD,cAAM,UAAU;AAChB,oBAAY,KAAK;AAAA,MACnB;AAAA,aACO,KAAK;AACZ,kBAAY,KAAK;AACR,eAAA;AAAA,QACP,GAAG;AAAA,QACH,GAAGC,+BAAkB,KAAK,EAAE7O,SAAAA,OAAAA,SAAS;AAAA,MAAA;AAAA,IAEzC;AAES,aAAA;AAAA,MACP,MAAM;AAAA,MACN;AAAA,IAAA,CACD;AAAA,EAAA,GACA;AAAA,IACD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,oBAAoB;AAAA,IACpB;AAAA,IACA;AAAA,EAAA,CACD;AAED,QAAM,sBAAsB3C,MAAA;AAAA,IAC1B,CAAC,WAAW;AACV,YAAM,kBAAkB,OAAO,KAAK,UAAU,EAAE,KAAK,CAAC,QAAQ,IAAI,MAAM,GAAG,EAAE,CAAC,MAAM,MAAM;AAC1F,YAAMiR,qBAAoB,CAACE,iBAAAA,QAAQ,UAAU,KAAK;AAE3CF,aAAAA;AAAAA,IACT;AAAA,IACA,CAAC,UAAU;AAAA,EAAA;AAGb,QAAM,oBAAoBjR,MAAA;AAAA,IACxB,CAAC,iBAAiB,iBAAiB;AACjC,oBAAc,QAAQ,uBAAuB;AAEpC,eAAA;AAAA,QACP,MAAM;AAAA,QACN;AAAA,QACA;AAAA,QACA,mBAAmB,oBAAoB,eAAe;AAAA,MAAA,CACvD;AAAA,IACH;AAAA,IACA,CAAC,mBAAmB;AAAA,EAAA;AAGtB,QAAM,kBAAkBA,MAAA;AAAA,IACtB,CAAC,iBAAiB,iBAAiB;AACjC,oBAAc,QAAQ,uBAAuB;AAEpC,eAAA;AAAA,QACP,MAAM;AAAA,QACN;AAAA,QACA;AAAA,QACA,mBAAmB,oBAAoB,eAAe;AAAA,MAAA,CACvD;AAAA,IACH;AAAA,IACA,CAAC,mBAAmB;AAAA,EAAA;AAGtB,QAAM,qBAAqBA,MAAAA,YAAY,CAAC,EAAE,MAAM,UAAU,mBAAmB;AAClE,aAAA;AAAA,MACP,MAAM;AAAA,MACN,MAAM,KAAK,MAAM,GAAG;AAAA,MACpB;AAAA,MACA,UAAU;AAAA,IAAA,CACX;AAAA,EACH,GAAG,CAAE,CAAA;AAEL,QAAM,qBAAqBA,MAAY,YAAA,CAAC,EAAE,MAAM,SAAS;AAC9C,aAAA;AAAA,MACP,MAAM;AAAA,MACN,MAAM,KAAK,MAAM,GAAG;AAAA,MACpB;AAAA,IAAA,CACD;AAAA,EACH,GAAG,CAAE,CAAA;AAYL,QAAM,kBAAkBA,MAAAA,YAAY,CAAC,EAAE,MAAM,UAAU,eAAe;AAC3D,aAAA;AAAA,MACP,MAAM;AAAA,MACN,MAAM,KAAK,MAAM,GAAG;AAAA,MACpB;AAAA,MACA;AAAA,IAAA,CACD;AAAA,EACH,GAAG,CAAE,CAAA;AAEL,QAAM,iCAAiCA,MAAA;AAAA,IACrC,CAAC,iBAAiB8C,WAAU;AAC1B,oBAAc,QAAQ,gCAAgC;AAE7C,eAAA;AAAA,QACP,MAAM;AAAA,QACN;AAAA,QACA,OAAAA;AAAA,QACA,mBAAmB,oBAAoB,eAAe;AAAA,MAAA,CACvD;AAAA,IACH;AAAA,IACA,CAAC,mBAAmB;AAAA,EAAA;AAGtB,QAAM,2BAA2B9C,MAAAA,YAAY,CAAC,MAAM,iBAAiB;AAC1D,aAAA;AAAA,MACP,MAAM;AAAA,MACN,MAAM,KAAK,MAAM,GAAG;AAAA,MACpB;AAAA,IAAA,CACD;AAAA,EACH,GAAG,CAAE,CAAA;AAEL,QAAM,wBAAwBA,MAAAA,YAAY,CAAC,MAAM,iBAAiB;AACvD,aAAA;AAAA,MACP,MAAM;AAAA,MACN,MAAM,KAAK,MAAM,GAAG;AAAA,MACpB;AAAA,IAAA,CACD;AAAA,EACH,GAAG,CAAE,CAAA;AAEC,QAAA,wBAAwBA,MAAAA,YAAY,MAAM;AACrC,aAAA;AAAA,MACP,MAAM;AAAA,IAAA,CACP;AAAA,EACH,GAAG,CAAE,CAAA;AAGL,MAAI,0CAA0C;AACrC,WAAAoC,2BAAA,IAACqP,eAAS,UAAA,EAAA,IAAI,KAAM,CAAA;AAAA,EAC7B;AAEA,MAAI,CAAC,cAAc;AACV,WAAA;AAAA,EACT;AAGE,SAAArP,2BAAA;AAAA,IAACsP,aAAAA,yCAAyC;AAAA,IAAzC;AAAA,MACC,OAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,QAAQ;AAAA,QACR;AAAA,QACA;AAAA;AAAA;AAAA;AAAA,QAIA;AAAA;AAAA;AAAA;AAAA,QAIA;AAAA,QACA,UAAU;AAAA,QACV,WAAW;AAAA,QACX;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,0BAA0B;AAAA,QAC1B;AAAA,MACF;AAAA,MAEC,UAAqB,oBAAA,CAAC,mBAAmB,CAAC,YAAY,KACrDtP,2BAAAA,IAACgE,aAAK,MAAA,EAAA,aAAU,QACd,UAAAhE,2BAAAA,IAACuP,aAAAA,sBAAqB,CAAA,CAAA,EACxB,CAAA,IAGG/O,2BAAA,KAAA6C,qBAAA,EAAA,UAAA;AAAA,QAAA,CAAC,WACArD,2BAAA;AAAA,UAACwP,eAAA;AAAA,UAAA;AAAA,YACC,MAAM,CAACrL,iBAAAA,QAAQ,cAAc,WAAW;AAAA,YACxC,SAAS,cAAc,EAAE,IAAI,yBAAyB;AAAA,UAAA;AAAA,QAAA,IAEtD;AAAA,uCACH,QAAK,EAAA,YAAU,MAAC,UAAU,cACxB,UACH;AAAA,MAAA,GACF;AAAA,IAAA;AAAA,EAAA;AAIR;AAEA,4BAA4B,eAAe;AAAA,EACzC,MAAM;AAAA,EACN,eAAe;AAAA,EACf,yBAAyB;AAAA,EAAC;AAC5B;AAEA,4BAA4B,YAAY;AAAA,EACtC,eAAelE,mBAAAA,QAAU,OAAO;AAAA,EAChC,gBAAgBA,mBAAAA,QAAU,OAAO;AAAA,EACjC,UAAUA,mBAAAA,QAAU,KAAK;AAAA,EACzB,yBAAyBA,mBAAAA,QAAU,OAAO;AAAA,EAC1C,0BAA0BA,mBAAAA,QAAU,OAAO;AAAA,EAC3C,2BAA2BA,mBAAAA,QAAU,MAAM;AAAA,EAC3C,MAAMA,mBAAU,QAAA;AAAA,EAChB,eAAeA,mBAAU,QAAA;AAAA,EACzB,iBAAiBA,mBAAAA,QAAU,KAAK;AAAA,EAChC,kBAAkBA,mBAAAA,QAAU,KAAK;AAAA,EACjC,cAAcA,mBAAAA,QAAU,KAAK;AAAA,EAC7B,QAAQA,mBAAAA,QAAU,KAAK;AAAA,EACvB,WAAWA,mBAAAA,QAAU,KAAK;AAAA,EAC1B,sBAAsBA,mBAAAA,QAAU,KAAK;AAAA,EACrC,OAAOA,mBAAAA,QAAU,KAAK;AAAA,EACtB,aAAaA,mBAAAA,QAAU,KAAK;AAAA,EAC5B,yBAAyBA,mBAAAA,QAAU,MAAM;AAAA,EACzC,wBAAwBA,mBAAU,QAAA;AAAA,EAClC,MAAMA,mBAAAA,QAAU,OAAO;AAAA,EACvB,QAAQA,mBAAAA,QAAU,OAAO;AAAA,EACzB,2BAA2BA,mBAAAA,QAAU,MAAM;AAC7C;AClsBA,MAAM,sBAAsB,CAAC,MAAM,CACjC,MAAA,OAAO,OAAO,GAAG,EAAE,OAAO,CAAC,KAAK,YAAY,OAAO,OAAO,KAAK,OAAO,GAAG,CAAA,CAAE;AAS7E,MAAM,sBAAsB,CAAC,QAAQ,OAAO;AAEpC,QAAA;AAAA,IACJ,SAAS;AAAA,IACT,IAAI;AAAA,IACJ,GAAG;AAAA,EAAA,IACD;AAAA,IACF,GAAG;AAAA,IACH,GAAG,oBAAoB,MAAM,OAAO;AAAA,EAAA;AAGtC,MAAI,aAAa;AAEE,qBAAA,KAAK,mBAAmB,WAAW;AAAA,EACtD;AAEO,SAAA;AACT;ACKA,MAAM,wBAAwB,CAAC,EAAE,eAAe,UAAU,WAAW;AACnE,QAAM,cAAcoF,WAAAA;AACd,QAAA,EAAE,eAAenF,aAAAA;AACjB,QAAA,EAAE,SAAS4D,eAAAA;AACX,QAAA,EAAE,mBAAmBwB,aAAAA;AACrB,QAAA,gBAAgBtG,aAAO,UAAU;AACvC,QAAM,CAAC,iBAAiB,kBAAkB,IAAI0C,eAAS,IAAI;AAC3D,QAAM,CAAC,EAAE,OAAO,SAAS,CAAC,IAAIhC,aAAe,eAAA;AACvC,QAAA,SAASb,MAAAA,QAAQ,MAAM,oBAAoB,KAAK,GAAG,CAAC,KAAK,CAAC;AAChE,QAAM,qBAAqBgF,aAAAA;AAC3B,QAAM,WAAW/D,WAAAA;AACjB,QAAM,EAAE,eAAA,IAAmByF,aAAA,mBAAmBhF,OAAO,OAAA;AACrD,QAAM,cAActB,aAAAA;AACpB,QAAM,EAAE,MAAM,KAAK,IAAA,IAAQ;AAErB,QAAA,EAAE,yBAAyB,0BAA0B,MAAM,WAAW,OAAO,IACjFtB,uBAAY,iBAAiB;AAE/B,QAAM,oBAAoBC,MAAA;AAAA,IACxB,CAACY,UAAS;AACR,YAAM,UAAU;AAAA,QACdA;AAAAA,QACA,cAAc;AAAA,QACd,cAAc;AAAA,MAAA;AAIhB,aAAOgH,aAAAA,sBAAsB,SAAS,cAAc,aAAa,cAAc,UAAU;AAAA,IAC3F;AAAA,IACA,CAAC,aAAa;AAAA,EAAA;AAGhBnG,QAAAA,UAAU,MAAM;AACd,WAAO,MAAM;AACX,eAASoF,cAAY;AAAA,IAAA;AAAA,EACvB,GACC,CAAC,QAAQ,CAAC;AAEbpF,QAAAA,UAAU,MAAM;AACRoG,UAAAA,2BAA0B,OAAO,KAAK,cAAc,UAAU,EAAE,OAAO,CAAC,KAAK,YAAY;AAC7F,YAAM,uBAAuB;AAAA,QAC3BxH,aAAA,QAAI,eAAe,CAAC,cAAc,SAAS,YAAY,GAAG,EAAE;AAAA,QAC5D,cAAc;AAAA,MAAA;AAGhB,UAAI,OAAO,IAAIuH,aAAA;AAAA,QACb;AAAA,QACA,cAAc,WAAW,OAAO;AAAA,QAChC,cAAc;AAAA,MAAA;AAGT,aAAA;AAAA,IACT,GAAG,CAAE,CAAA;AAEL,UAAME,4BAA2B;AAAA,MAC/B,cAAc,YAAY;AAAA,MAC1B,cAAc;AAAA,IAAA;AAEhB,UAAM,oCAAoCF,aAAA;AAAA,MACxCE;AAAAA,MACA,cAAc;AAAA,MACd,cAAc;AAAA,IAAA;AAGP,aAAA,kBAAkBD,0BAAyB,iCAAiC,CAAC;AAAA,EAAA,GACrF,CAAC,eAAe,QAAQ,CAAC;AAG5BpG,QAAAA,UAAU,MAAM;AACd,UAAM,cAAcD,eAAM,QAAA;AACpB,UAAA,SAAS,YAAY;AAErB,UAAA,YAAY,OAAOuG,YAAW;AAClC,eAASzG,WAAS;AAElB,yBAAmB,IAAI;AAEnB,UAAA;AACI,cAAA,EAAE,MAAAV,MAAK,IAAI,MAAM,YAAY,IAAI,iCAAiC,IAAI,IAAI;AAAA,UAC9E,aAAamH,QAAO;AAAA,UACpB;AAAA,QAAA,CACD;AAED,iBAASb,mBAAiB,kBAAkBtG,KAAI,CAAC,CAAC;AAElD,2BAAmB,KAAK;AAAA,eACjB,KAAK;AACR,YAAAY,eAAA,QAAM,SAAS,GAAG,GAAG;AACvB;AAAA,QACF;AAEA,cAAM,iBAAiBnB,aAAA,QAAI,KAAK,mBAAmB,IAAI;AAGvD,YAAI,mBAAmB,KAAK;AACjB,mBAAA,SAAS,UAAU,IAAI,CAAC;AAAA,QACnC;AAEA,YAAI,mBAAmB,KAAK;AACP,6BAAA;AAAA,YACjB,MAAM;AAAA,YACN,SAAS,EAAE,IAAIsC,OAAA,QAAQ,gCAAgC,EAAE;AAAA,UAAA,CAC1D;AAED,eAAK,GAAG;AAAA,QACV;AAAA,MACF;AAAA,IAAA;AAGF,cAAU,MAAM;AAET,WAAA,MAAM,OAAO,OAAO,iCAAiC;AAAA,EAAA,GAC3D,CAAC,aAAa,mBAAmB,MAAM,MAAM,UAAU,QAAQ,UAAU,kBAAkB,CAAC;AAE/F,QAAM,gBAAgB3C,MAAA;AAAA,IACpB,CAAC,QAAQ;AACP,yBAAmB,EAAE,MAAM,WAAW,SAAS,eAAe,GAAG,GAAG;AAAA,IACtE;AAAA,IACA,CAAC,oBAAoB,cAAc;AAAA,EAAA;AAGrC,QAAM,WAAWA,MAAA;AAAA,IACf,OAAO,oBAAoB;AACrB,UAAA;AACY,sBAAA,QAAQ,mBAAmB,eAAe;AAElD,cAAA,EAAE,MAAAY,UAAS,MAAM,IAAI,iCAAiC,IAAI,IAAI;AAAA,UAClE;AAAA,QAAA,CACD;AAEkB,2BAAA;AAAA,UACjB,MAAM;AAAA,UACN,SAAS,EAAE,IAAI+B,OAAA,QAAQ,uBAAuB,EAAE;AAAA,QAAA,CACjD;AAEa,sBAAA,QAAQ,kBAAkB,eAAe;AAEvD,2BAAmB,IAAI;AACd,iBAAA,SAAS,UAAU,IAAI,CAAC;AAE1B,eAAA,QAAQ,QAAQ/B,KAAI;AAAA,eACpB,KAAK;AACZ,sBAAc,QAAQ,qBAAqB,EAAE,OAAO,KAAK,GAAG,iBAAiB;AAE7E,sBAAc,GAAG;AAEV,eAAA,QAAQ,OAAO,GAAG;AAAA,MAC3B;AAAA,IACF;AAAA,IACA,CAAC,KAAK,MAAM,QAAQ,oBAAoB,UAAU,UAAU,aAAa;AAAA,EAAA;AAG3E,QAAM,SAASZ,MAAA;AAAA,IACb,OAAO,MAAM,oBAAoB;AACzB,YAAA,WAAW,iCAAiC,IAAI;AAElD,UAAA;AACO,iBAAA,UAAU,gBAAgB,CAAC;AAE9B,cAAA,EAAE,MAAAY,MAAS,IAAA,MAAM,IAAI,UAAU,MAAM,EAAE,QAAQ,MAAA,CAAO;AAE9C,sBAAA,QAAQ,kBAAkB,eAAe;AACpC,2BAAA;AAAA,UACjB,MAAM;AAAA,UACN,SAAS,EAAE,IAAI+B,OAAA,QAAQ,qBAAqB,EAAE;AAAA,QAAA,CAC/C;AAED,uBAAe,wBAAwB;AAG3B,oBAAA,kBAAkB,CAAC,UAAU,CAAC;AAE1C,iBAAS,gBAAgB,kBAAkB/B,KAAI,CAAC,CAAC;AACjD,2BAAmB,KAAK;AAEf,iBAAA,UAAU,UAAU,CAAC;AAEvB,eAAA,QAAQ,QAAQA,KAAI;AAAA,eACpB,KAAK;AACZ,sBAAc,QAAQ,qBAAqB,EAAE,OAAO,KAAK,iBAAiB;AAE1E,sBAAc,GAAG;AAER,iBAAA,UAAU,UAAU,CAAC;AAEvB,eAAA,QAAQ,OAAO,GAAG;AAAA,MAC3B;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EAAA;AAGI,QAAA,uBAAuBZ,MAAAA,YAAY,YAAY;AAC/C,QAAA;AACF,oBAAc,QAAQ,yBAAyB;AAEzC,YAAA,WAAW,iCAAiC,IAAI;AAC7C,eAAA,UAAU,8BAA8B,CAAC;AAElD,YAAM,yBAAyB,MAAM,YAAY,IAAI,QAAQ;AAC7D,oBAAc,QAAQ,wBAAwB;AAErC,eAAA,UAAU,UAAU,CAAC;AAE9B,aAAO,uBAAuB,KAAK;AAAA,aAC5B,KAAK;AACZ,oBAAc,GAAG;AACR,eAAA,UAAU,UAAU,CAAC;AAEvB,aAAA,QAAQ,OAAO,GAAG;AAAA,IAC3B;AAAA,KACC,CAAC,aAAa,eAAe,MAAM,QAAQ,CAAC;AAEzC,QAAA,YAAYA,MAAAA,YAAY,YAAY;AACpC,QAAA;AACF,oBAAc,QAAQ,kBAAkB;AAClC,YAAA,WAAW,iCAAiC,IAAI;AAE7C,eAAA,UAAU,iBAAiB,CAAC;AAErC,YAAM,EAAE,MAAAY,MAAK,IAAI,MAAM;AAAA,QACrB;AAAA,QACA,CAAC;AAAA,QACD;AAAA,UACE;AAAA,QACF;AAAA,MAAA;AAGF,oBAAc,QAAQ,iBAAiB;AACpB,yBAAA;AAAA,QACjB,MAAM;AAAA,QACN,SAAS,EAAE,IAAI+B,OAAA,QAAQ,wBAAwB,EAAE;AAAA,MAAA,CAClD;AAED,eAAS,gBAAgB,kBAAkB/B,KAAI,CAAC,CAAC;AAExC,eAAA,UAAU,UAAU,CAAC;AAEvB,aAAA,QAAQ,QAAQA,KAAI;AAAA,aACpB,KAAK;AACZ,oBAAc,GAAG;AAER,eAAA,UAAU,UAAU,CAAC;AAEvB,aAAA,QAAQ,OAAO,GAAG;AAAA,IAC3B;AAAA,EAAA,GACC,CAAC,MAAM,UAAU,MAAM,QAAQ,oBAAoB,mBAAmB,aAAa,CAAC;AAEvF,QAAM,QAAQZ,MAAA;AAAA,IACZ,OAAO,MAAM,oBAAoB;AACzB,YAAA,WAAW,iCAAiC,IAAI;AAElD,UAAA;AACY,sBAAA,QAAQ,iBAAiB,eAAe;AAE7C,iBAAA,UAAU,gBAAgB,CAAC;AAE9B,cAAA,EAAE,MAAAY,MAAS,IAAA,MAAM,IAAI,UAAU,MAAM,EAAE,QAAQ,MAAA,CAAO;AAEzC,2BAAA;AAAA,UACjB,MAAM;AAAA,UACN,SAAS,EAAE,IAAI+B,OAAA,QAAQ,qBAAqB,EAAE;AAAA,QAAA,CAC/C;AAED,sBAAc,QAAQ,gBAAgB,EAAE,gBAAiB,CAAA;AAG7C,oBAAA,kBAAkB,CAAC,UAAU,CAAC;AAE1C,iBAAS,gBAAgB,kBAAkB/B,KAAI,CAAC,CAAC;AAExC,iBAAA,UAAU,UAAU,CAAC;AAEvB,eAAA,QAAQ,QAAQA,KAAI;AAAA,eACpB,KAAK;AACZ,sBAAc,GAAG;AAEjB,sBAAc,QAAQ,mBAAmB,EAAE,OAAO,KAAK,iBAAiB;AAE/D,iBAAA,UAAU,UAAU,CAAC;AAEvB,eAAA,QAAQ,OAAO,GAAG;AAAA,MAC3B;AAAA,IACF;AAAA,IACA,CAAC,KAAK,mBAAmB,eAAe,MAAM,UAAU,OAAO,oBAAoB,WAAW;AAAA,EAAA;AAI1F,QAAA,cAAcZ,MAAAA,YAAY,YAAY;AACpC,UAAA,WAAW,iCAAiC,IAAI;AAE7C,aAAA,UAAU,mBAAmB,CAAC;AAEnC,QAAA;AACF,oBAAc,QAAQ,oBAAoB;AAE1C,YAAM,EAAE,MAAAY,MAAK,IAAI,MAAM;AAAA,QACrB;AAAA,QACA,CAAC;AAAA,QACD;AAAA,UACE;AAAA,QACF;AAAA,MAAA;AAGF,oBAAc,QAAQ,mBAAmB;AACtB,yBAAA;AAAA,QACjB,MAAM;AAAA,QACN,SAAS,EAAE,IAAI+B,OAAA,QAAQ,0BAA0B,EAAE;AAAA,MAAA,CACpD;AAED,eAAS,gBAAgB,kBAAkB/B,KAAI,CAAC,CAAC;AAExC,eAAA,UAAU,UAAU,CAAC;AAAA,aACvB,KAAK;AACH,eAAA,UAAU,UAAU,CAAC;AAC9B,oBAAc,GAAG;AAAA,IACnB;AAAA,EAAA,GACC,CAAC,MAAM,UAAU,MAAM,QAAQ,oBAAoB,mBAAmB,aAAa,CAAC;AAEvF,SAAO,SAAS;AAAA,IACd;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,kBAAkB;AAAA,IAClB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,iBAAiB;AAAA,IACjB;AAAA,EAAA,CACD;AACH;AAEA,sBAAsB,YAAY;AAAA,EAChC,eAAeyB,2BAAU,MAAM;AAAA,IAC7B,YAAYA,mBAAAA,QAAU,OAAO;AAAA,IAC7B,aAAaA,mBAAAA,QAAU,OAAO;AAAA,EAC/B,CAAA,EAAE;AAAA,EACH,UAAUA,mBAAAA,QAAU,KAAK;AAAA,EACzB,MAAMA,mBAAAA,QAAU,OAAO;AACzB;AAEA,MAAe6F,0BAAAA,MAAAA,KAAK,qBAAqB;AChYzC,SAASmE,UAAQ,kBAAkB,QAAQ;AACzC,SAAO,CAAC,UAAU;AAEhB,UAAM,YAAY;AAElB,WAAQjK,2BAAAA,IAAA,kBAAA,EAAkB,GAAG,OAAQ,GAAG,UAAW,CAAA;AAAA,EAAA;AAEvD;ACNA,SAASkK,cAAY;AACnB,QAAM,EAAE,oBAAoB,aAAa,IAAIP,aAAyB,yBAAA;AAEtE,MAAI,kBAAkB,CAAA;AAEtB,MAAI,oBAAoB;AAChB,UAAA,UAAUoF,iBAAAA,QAAQ,aAAa,WAAW;AAEhD,sBAAkB,UAAU,EAAE,QAAQ,YAAY,EAAE,QAAQ;EAC9D;AAEO,SAAA;AAAA,IACL;AAAA,IACA;AAAA,EAAA;AAEJ;ACLA,MAAM,aAAa,CAAC,EAAE,UAAU,sBAAsB;AACpD,QAAM,CAAC,2BAA2B,4BAA4B,IAAIrN,eAAS,KAAK;AAChF,QAAM,CAAC,6BAA6B,8BAA8B,IAAIA,eAAS,KAAK;AAC9E,QAAA,EAAE,kBAAkBvB,UAAAA;AAC1B,QAAM,EAAE,eAAA,IAAmBoF,aAAA,mBAAmBhF,OAAO,OAAA;AACrD,QAAM,qBAAqBsD,aAAAA;AAE3B,QAAM,sBAAsB,MAAM,6BAA6B,CAAC,cAAc,CAAC,SAAS;AAExF,QAAM,sBAAsB,YAAY;AAClC,QAAA;AAEF,qCAA+B,IAAI;AAEnC,YAAM,SAAS,eAAe;AAE9B,qCAA+B,KAAK;AAEhB;aACb,KAAK;AACZ,qCAA+B,KAAK;AAChB;AACD,yBAAA;AAAA,QACjB,MAAM;AAAA,QACN,SAAS,eAAe,GAAG;AAAA,MAAA,CAC5B;AAAA,IACH;AAAA,EAAA;AAGF,SAEIrD,2BAAA,KAAA6C,qBAAA,EAAA,UAAA;AAAA,IAACrD,2BAAA,IAAA4D,aAAA,QAAA,EAAO,SAAS,qBAAqB,MAAK,KAAI,WAAW5D,2BAAAA,IAACsB,MAAAA,OAAM,CAAA,CAAA,GAAI,SAAQ,gBAC1E,UAAc,cAAA;AAAA,MACb,IAAIf,eAAQ,8BAA8B;AAAA,MAC1C,gBAAgB;AAAA,IACjB,CAAA,GACH;AAAA,IAEAP,2BAAA;AAAA,MAACuE,aAAA;AAAA,MAAA;AAAA,QACC,wBAAwB;AAAA,QACxB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,gBAAgB;AAAA,MAAA;AAAA,IAClB;AAAA,EACF,EAAA,CAAA;AAEJ;AAEA,WAAW,YAAY;AAAA,EACrB,UAAUtE,mBAAAA,QAAU,KAAK;AAAA,EACzB,iBAAiBA,mBAAAA,QAAU,OAAO;AACpC;AAEA,MAAMiL,aAAWpF,MAAK,KAAA,YAAY3B,iBAAAA,OAAO;AAEzC,MAAA,eAAe8F,UAAQiB,YAAUC,WAAM;AClEvC,SAASlB,UAAQ,kBAAkB,QAAQ;AACzC,SAAO,CAAC,UAAU;AAEhB,UAAM,YAAY;AAElB,WAAQjK,2BAAAA,IAAA,kBAAA,EAAkB,GAAG,OAAQ,GAAG,UAAW,CAAA;AAAA,EAAA;AAEvD;ACPA,SAASkK,cAAY;AACnB,QAAM,EAAE,aAAa,mBAAmB,IAAIP,aAAyB,yBAAA;AAErE,QAAM,cAAc,YAAY,gBAAgB,UAAa,YAAY,gBAAgB;AAElF,SAAA;AAAA,IACL;AAAA,IACA;AAAA,EAAA;AAEJ;ACEA,MAAM,eAAexI,gBAAAA,QAAOsO,MAAAA,GAAG;AAAA,WACpBrJ,aAAAA,QAAQ,CAAC,CAAC;AAAA,YACTA,aAAAA,QAAQ,CAAC,CAAC;AAAA;AAAA,YAEV,CAAC,EAAE,OAAO,aAAA,MAAmB,MAAM,OAAO,YAAY,CAAC;AAAA;AAAA;AAInE,MAAM,uBAAuB,CAAC,EAAE,oBAAoB,kBAAkB;AAC9D,QAAA,EAAE,kBAAkBjG,UAAAA;AAE1B,MAAI,CAAC,oBAAoB;AAChB,WAAA;AAAA,EACT;AAEA,QAAM,SAAS;AAAA,IACb,OAAO;AAAA,MACL,WAAW;AAAA,MACX,aAAa;AAAA,MACb,KAAK;AAAA,QACH,YAAY;AAAA,QACZ,aAAa;AAAA,MACf;AAAA,IACF;AAAA,IACA,WAAW;AAAA,MACT,WAAW;AAAA,MACX,aAAa;AAAA,MACb,KAAK;AAAA,QACH,YAAY;AAAA,QACZ,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EAAA;AAEF,QAAM,aAAa,cAAc,OAAO,YAAY,OAAO;AAGzD,SAAAH,2BAAA;AAAA,IAACS,aAAA;AAAA,IAAA;AAAA,MACC,WAAS;AAAA,MACT,IAAG;AAAA,MACH,YAAY;AAAA,MACZ,eAAe;AAAA,MACf,aAAa;AAAA,MACb,cAAc;AAAA,MACb,GAAG,WAAW;AAAA,MAEf,UAAAD,2BAAA,KAACC,aAAI,KAAA,EAAA,IAAII,aAAAA,MACP,UAAA;AAAA,QAACb,2BAAAA,IAAA,cAAA,EAAa,cAAc,WAAW,YAAa,CAAA;AAAA,QACpDQ,2BAAAA,KAACC,aAAAA,KAAI,EAAA,aAAa,GAChB,UAAA;AAAA,UAACD,2BAAA,KAAAM,aAAA,YAAA,EAAW,WAAW,WAAW,WAC/B,UAAA;AAAA,YAAc,cAAA;AAAA,cACb,IAAIP,eAAQ,qCAAqC;AAAA,cACjD,gBAAgB;AAAA,YAAA,CACjB;AAAA,YAAE;AAAA,UAAA,GAEL;AAAA,0CACCO,aAAAA,YAAW,EAAA,YAAW,QAAO,WAAW,WAAW,WACjD,UAAA;AAAA,YAAA,eACC,cAAc;AAAA,cACZ,IAAIP,eAAQ,8CAA8C;AAAA,cAC1D,gBAAgB;AAAA,YAAA,CACjB;AAAA,YACF,CAAC,eACA,cAAc;AAAA,cACZ,IAAIA,eAAQ,0CAA0C;AAAA,cACtD,gBAAgB;AAAA,YAAA,CACjB;AAAA,UAAA,GACL;AAAA,QAAA,GACF;AAAA,MAAA,GACF;AAAA,IAAA;AAAA,EAAA;AAGN;AAEA,qBAAqB,YAAY;AAAA,EAC/B,oBAAoBN,mBAAAA,QAAU,KAAK;AAAA,EACnC,aAAaA,mBAAAA,QAAU,KAAK;AAC9B;AAEA,MAAA,yBAAegK,UAAQ,sBAAsBkB,WAAM;ACnFnD,MAAM,UAAU,CAAC,EAAE,SAAS,wBAAwB;AAClD,SACGnL,2BAAAA,IAAAW,aAAAA,MAAA,EAAK,KAAK,GACR,kBAAQ,IAAI,CAAC,EAAE,aAAa,aAAa,WAAW,MAAM,MAAAxC,OAAM,iBAAiB;AAC1E,UAAA,cAAc,YAAY,SAAS;AAEzC,QAAI,aAAa;AACT,YAAA,EAAE,WAAW,KAAK,KAAK,aAAa,OAAO,WAAW,MAAU,IAAA;AAEtE,4CACGyC,aAAAA,UAAS,EAAA,KAAKzC,OAAM,GAAG,IAAI,IAAI,IAC9B,UAAA6B,2BAAA;AAAA,QAACqN;AAAAA,QAAA;AAAA,UACC,cAAc;AAAA,UACd;AAAA,UACA,cAAc;AAAA,UACd,WAAW;AAAA,YACT,IAAI,UAAU;AAAA,YACd,gBAAgB,UAAU;AAAA,UAC5B;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QAAA;AAAA,MAAA,KAZqC,SAczC;AAAA,IAEJ;AAEA,0CACGzM,aAAAA,UAAS,EAAA,KAAKzC,OAAiB,GAAG,IAAI,IAAI,IACzC,UAAA6B,2BAAA;AAAA,MAACsN;AAAAA,MAAA;AAAA,QACC,MAAAnP;AAAA,QACA;AAAA,QACA,MAAM;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,IAAA,KARsB,IAU1B;AAAA,EAEH,CAAA,EACH,CAAA;AAEJ;AAEA,QAAQ,eAAe;AAAA,EACrB,mBAAmB,CAAC;AACtB;AAEA,QAAQ,YAAY;AAAA,EAClB,SAAS8B,mBAAAA,QAAU,MAAM;AAAA,EACzB,mBAAmBA,mBAAU,QAAA;AAC/B;AC3DA,SAAS,QAAQ,kBAAkB,QAAQ;AACzC,SAAO,CAAC,UAAU;AAEhB,UAAM,YAAY;AAElB,WAAQD,2BAAAA,IAAA,kBAAA,EAAkB,GAAG,OAAQ,GAAG,UAAW,CAAA;AAAA,EAAA;AAEvD;ACPA,SAAS,YAAY;AACb,QAAA;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,MACE2J,aAAyB,yBAAA;AAEtB,SAAA;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;ACFA,MAAM,gBAAgBxI,gBAAAA,QAAON,aAAAA,IAAI;AAAA;AAAA;AAIjC,MAAM,SAAS,CAAC;AAAA,EACd,gBAAgB,EAAE,WAAW,WAAW,WAAW;AAAA,EACnD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,qBAAqB,EAAE,MAAM,yBAAyB,WAAW;AAAA,EACjE;AACF,MAAM;AACE,QAAA,EAAE,WAAWiD,eAAAA;AACnB,QAAM,CAAC,sBAAsB,mBAAmB,IAAIpC,eAAS,KAAK;AAC5D,QAAA,EAAE,kBAAkBvB,UAAAA;AAE1B,QAAM,8BAA8BlC,aAAAA,QAAI,QAAQ,CAAC,YAAY,WAAW,GAAG,IAAI;AAC/E,QAAM,yBAAyBA,aAAAA,QAAI,QAAQ,CAAC,QAAQ,aAAa,GAAG,WAAW;AACzE,QAAA,gBACJ,CAACkG,iBAAQ,QAAA,aAAa,YAAY,KAAM,mBAAmB,CAAC4K,yBAAQ,YAAY;AAElF,QAAM,uBAAuB,cAAc;AAAA,IACzC,IAAIxO,eAAQ,wCAAwC;AAAA,IACpD,gBAAgB;AAAA,EAAA,CACjB;AAED,MAAI,QAAQ;AAER,MAAA,CAAC,mBAAmB,CAAC,cAAc;AAC7B,YAAA,YAAY,2BAA2B,KAAK;AAAA,EACtD;AAEA,MAAI,cAAc;AACR,YAAA;AAAA,EACV;AAEA,MAAI,gBAAgB;AAEpB,MAAI,mBAAmB,WAAW;AAE9B,oBAAAC,2BAAA,KAACK,aAAK,MAAA,EAAA,KAAK,GACR,UAAA;AAAA,MAAA,qDACE+C,aAAAA,QAAO,EAAA,UAAQ,MAAC,0CAAYQ,MAAAA,OAAM,CAAA,CAAA,GAAI,SAAQ,aAC5C,wBAAc,EAAE,IAAI,qBAAqB,gBAAgB,UAAW,CAAA,GACvE;AAAA,MAEFpE,2BAAAA,IAAC4D,aAAO,QAAA,EAAA,UAAU,CAAC,eAAe,SAAS,WAAW,kBAAkB,MAAK,UAC1E,UAAc,cAAA;AAAA,QACb,IAAIrD,eAAQ,wBAAwB;AAAA,QACpC,gBAAgB;AAAA,MACjB,CAAA,GACH;AAAA,IACF,EAAA,CAAA;AAAA,EAEJ;AAEI,MAAA,CAAC,mBAAmB,WAAW;AACjC,UAAM,0BAA0B,sBAAsB;AACtD,UAAM,cAAc,CAACwO,iBAAAA,QAAQ,YAAY,WAAW;AACpD,UAAM,yBAAyB,cAC3B,WAAW,sBACX,WAAW;AACf,UAAM,oBAAoB,cACtB,EAAE,IAAI,uBAAuB,gBAAgB,YAAY,IACzD,EAAE,IAAI,qBAAqB,gBAAgB,UAAU;AAEzD,UAAM,UAAU,cAAc,MAAM,oBAAoB,IAAI,IAAI,MAAM;AAEtE,oDACGlO,mBACE,EAAA,UAAA;AAAA,MACC,2BAAAb,2BAAA;AAAA,QAAC4D,aAAA;AAAA,QAAA;AAAA,UACC,UAAU;AAAA,UACV,SAAS;AAAA,UACT;AAAA,UACA,0CAAYQ,MAAM,OAAA,EAAA;AAAA,UAClB,SAAQ;AAAA,UAEP,wBAAc,iBAAiB;AAAA,QAAA;AAAA,MAClC;AAAA,qCAED3D,aAAAA,KAAI,EAAA,aAAa,0BAA0B,IAAI,GAC9C,UAACT,2BAAAA,IAAA4D,aAAA,QAAA,EAAO,UAAU,CAAC,eAAe,SAAS,WAAW,kBAAkB,MAAK,UAC1E,UAAc,cAAA;AAAA,QACb,IAAIrD,eAAQ,wBAAwB;AAAA,QACpC,gBAAgB;AAAA,MAAA,CACjB,GACH,EACF,CAAA;AAAA,IACF,EAAA,CAAA;AAAA,EAEJ;AAEA,QAAM,yBAAyB,MAAM,oBAAoB,CAAC,cAAc,CAAC,SAAS;AAElF,QAAM,kBAAkB,MAAM;AACL;AACX;EAAA;AAGR,QAAA,WAAW,GAAG,cAAc;AAAA,IAChC,IAAIA,eAAQ,QAAQ;AAAA,IACpB,gBAAgB;AAAA,EACjB,CAAA,CAAC,MAAM,OAAO,KAAK;AAEpB,SAEIC,2BAAA,KAAA6C,qBAAA,EAAA,UAAA;AAAA,IAAArD,2BAAA;AAAA,MAACiE,aAAA;AAAA,MAAA;AAAA,QACC,OAAO,MAAM,SAAS;AAAA,QACtB;AAAA,QACA;AAAA,QACA,kBACEjE,2BAAA;AAAA,UAACe,aAAA;AAAA,UAAA;AAAA,YACC,0CAAYmD,MAAU,WAAA,EAAA;AAAA,YAItB,SAAS,CAAC,MAAM;AACd,gBAAE,eAAe;AACV;YACT;AAAA,YACA,IAAG;AAAA,YAEF,UAAc,cAAA;AAAA,cACb,IAAI;AAAA,cACJ,gBAAgB;AAAA,YAAA,CACjB;AAAA,UAAA;AAAA,QACH;AAAA,MAAA;AAAA,IAEJ;AAAA,IACA1D,2BAAA;AAAA,MAACkP,aAAA;AAAA,MAAA;AAAA,QACC,SAAS;AAAA,QACT,OAAM;AAAA,QACN,YAAW;AAAA,QACX,aAAY;AAAA,QACZ,QAAQ;AAAA,QAER,UAAA;AAAA,UAAA1P,2BAAA,IAAC2P,aAAW,YAAA,EAAA,MAAO3P,2BAAA,IAAA8J,6BAAA,CAAA,CAAsB,GACvC,UAAAtJ,2BAAAA,KAACK,aAAAA,MAAK,EAAA,WAAU,UAAS,YAAW,WAAU,KAAK,GACjD,UAAA;AAAA,YAACb,2BAAA,IAAAa,aAAA,MAAA,EAAK,gBAAe,UAAS,OAAO,EAAE,WAAW,SAChD,GAAA,UAAAb,2BAAA,IAACc,aAAW,YAAA,EAAA,IAAG,uBACZ,UAAA;AAAA,cACC;AAAA,gBACE,IAAIP,eAAQ,gCAAgC;AAAA,gBAC5C,gBACE;AAAA,cACJ;AAAA,cACA;AAAA,gBACE,IAAI,MAAMP,2BAAAA,IAAC,MAAG,EAAA;AAAA,cAChB;AAAA,eAEJ,EACF,CAAA;AAAA,YACCA,2BAAA,IAAAa,aAAA,MAAA,EAAK,gBAAe,UAAS,OAAO,EAAE,WAAW,SAChD,GAAA,UAAAb,2BAAA,IAACc,yBAAW,EAAA,IAAG,uBACZ,UAAc,cAAA;AAAA,cACb,IAAIP,eAAQ,yCAAyC;AAAA,cACrD,gBAAgB;AAAA,YAAA,CACjB,GACH,EACF,CAAA;AAAA,UAAA,EAAA,CACF,EACF,CAAA;AAAA,UACAP,2BAAA;AAAA,YAAC4P,aAAA;AAAA,YAAA;AAAA,cACC,aACG5P,2BAAAA,IAAA4D,aAAA,QAAA,EAAO,SAAS,wBAAwB,SAAQ,YAC9C,UAAc,cAAA;AAAA,gBACb,IAAI;AAAA,gBACJ,gBAAgB;AAAA,cACjB,CAAA,GACH;AAAA,cAEF,WACG5D,2BAAAA,IAAA4D,aAAA,QAAA,EAAO,SAAQ,gBAAe,SAAS,iBACrC,UAAc,cAAA;AAAA,gBACb,IAAI;AAAA,gBACJ,gBAAgB;AAAA,cACjB,CAAA,GACH;AAAA,YAAA;AAAA,UAEJ;AAAA,QAAA;AAAA,MAAA;AAAA,IACF;AAAA,IACApD,2BAAA;AAAA,MAACkP,aAAA;AAAA,MAAA;AAAA,QACC,SAAS;AAAA,QACT,OAAO,cAAc;AAAA,UACnB,IAAInP,OAAAA,QAAQ,gDAAgD;AAAA,UAC5D,gBAAgB;AAAA,QAAA,CACjB;AAAA,QACD,YAAW;AAAA,QACX,aAAY;AAAA,QACZ,QAAQ;AAAA,QAER,UAAA;AAAA,UAAAP,2BAAA,IAAC2P,aAAW,YAAA,EAAA,MAAO3P,2BAAA,IAAA8J,6BAAA,CAAA,CAAsB,GACvC,UAAAtJ,2BAAAA,KAACK,aAAAA,MAAK,EAAA,WAAU,UAAS,YAAW,WAAU,KAAK,GACjD,UAAA;AAAA,YAAAb,2BAAAA,IAAC,iBAAc,gBAAe,UAC5B,UAACQ,2BAAA,KAAAM,yBAAA,EAAW,IAAG,uBACZ,UAAA;AAAA,cAAA;AAAA,cACA;AAAA,gBACC;AAAA,kBACE,IAAIP,OAAAA,QAAQ,kDAAkD;AAAA,kBAC9D,gBACE;AAAA,gBACJ;AAAA,gBACA;AAAA,kBACE,GAAG,CAAC,0CAAYO,aAAW,YAAA,EAAA,YAAW,QAAQ,UAAO,QAAA;AAAA,kBACrD,OAAO;AAAA,gBACT;AAAA,cACF;AAAA,YAAA,EAAA,CACF,EACF,CAAA;AAAA,YACAd,2BAAAA,IAAC,iBAAc,gBAAe,UAC5B,yCAACc,aAAAA,YAAW,EAAA,IAAG,uBACZ,UAAc,cAAA;AAAA,cACb,IAAIP,eAAQ,uCAAuC;AAAA,cACnD,gBAAgB;AAAA,YAAA,CACjB,GACH,EACF,CAAA;AAAA,UAAA,EAAA,CACF,EACF,CAAA;AAAA,UACAP,2BAAA;AAAA,YAAC4P,aAAA;AAAA,YAAA;AAAA,cACC,aACG5P,2BAAAA,IAAA4D,aAAA,QAAA,EAAO,SAAS,0BAA0B,SAAQ,YAChD,UAAc,cAAA;AAAA,gBACb,IAAI;AAAA,gBACJ,gBAAgB;AAAA,cACjB,CAAA,GACH;AAAA,cAEF,WACG5D,2BAAAA,IAAA4D,aAAA,QAAA,EAAO,SAAQ,WAAU,SAAS,WAChC,UAAc,cAAA;AAAA,gBACb,IAAIrD,eAAQ,yDAAyD;AAAA,gBACrE,gBAAgB;AAAA,cACjB,CAAA,GACH;AAAA,YAAA;AAAA,UAEJ;AAAA,QAAA;AAAA,MAAA;AAAA,IACF;AAAA,EACF,EAAA,CAAA;AAEJ;AAEA,OAAO,YAAY;AAAA,EACjB,gBAAgBN,2BAAU,MAAM;AAAA,IAC9B,WAAWA,mBAAAA,QAAU,KAAK;AAAA,IAC1B,WAAWA,mBAAAA,QAAU,KAAK;AAAA,IAC1B,YAAYA,mBAAAA,QAAU,KAAK;AAAA,EAC5B,CAAA,EAAE;AAAA,EACH,aAAaA,mBAAAA,QAAU,OAAO;AAAA,EAC9B,iBAAiBA,mBAAAA,QAAU,KAAK;AAAA,EAChC,cAAcA,mBAAAA,QAAU,KAAK;AAAA,EAC7B,QAAQA,mBAAAA,QAAU,OAAO;AAAA,EACzB,QAAQA,mBAAAA,QAAU,OAAO;AAAA,EACzB,oBAAoBA,mBAAAA,QAAU,KAAK;AAAA,EACnC,cAAcA,mBAAAA,QAAU,OAAO;AAAA,EAC/B,WAAWA,mBAAAA,QAAU,KAAK;AAAA,EAC1B,aAAaA,mBAAAA,QAAU,KAAK;AAAA,EAC5B,qBAAqBA,2BAAU,MAAM;AAAA,IACnC,MAAMA,mBAAAA,QAAU,KAAK;AAAA,IACrB,YAAYA,mBAAAA,QAAU,OAAO;AAAA,EAC9B,CAAA,EAAE;AAAA,EACH,0BAA0BA,mBAAAA,QAAU,KAAK;AAC3C;AAEA,MAAM,WAAW6F,MAAK,KAAA,QAAQ+J,iBAAAA,OAAkB;AAEhD,MAAA,WAAe,QAAQ,UAAU1E,SAAM;ACrShC,MAAM,UAAU,CAAC,WAAW9L,MAAA,UAAU,QAAQ,SAAS;AAK9D,MAAM,YAAY,CAAC;ACbnB,MAAM,cAAc,KAAK;AACzB,MAAM,YAAY,cAAc;AAChC,MAAM,WAAW,YAAY;AAC7B,MAAM,aAAa,WAAW;AAC9B,MAAM,YAAY,WAAW;AAE7B,MAAM,WAAW,CAAC,UAAU;AAC1B,MAAI,QAAQ,aAAa;AAChB,WAAA,EAAE,MAAM,UAAU,OAAO,CAAC,KAAK,MAAM,QAAQ,GAAI;EAC1D;AACA,MAAI,QAAQ,WAAW;AACd,WAAA,EAAE,MAAM,UAAU,OAAO,CAAC,KAAK,MAAM,QAAQ,WAAW;EACjE;AACA,MAAI,QAAQ,UAAU;AACb,WAAA,EAAE,MAAM,QAAQ,OAAO,CAAC,KAAK,MAAM,QAAQ,SAAS;EAC7D;AACA,MAAI,QAAQ,YAAY;AACf,WAAA,EAAE,MAAM,OAAO,OAAO,CAAC,KAAK,MAAM,QAAQ,QAAQ;EAC3D;AACA,MAAI,QAAQ,WAAW;AACd,WAAA,EAAE,MAAM,SAAS,OAAO,CAAC,KAAK,MAAM,QAAQ,UAAU;EAC/D;AAEO,SAAA,EAAE,MAAM,QAAQ,OAAO,CAAC,KAAK,MAAM,QAAQ,SAAS;AAC7D;ACbA,MAAM,QAAQ,MAAM;AACZ,QAAA,EAAE,kBAAkBc,UAAAA;AAE1B,yCACGU,mBAAK,EAAA,WAAU,UAAS,YAAW,WAAU,KAAK,GACjD,UAAA;AAAA,IAAAb,2BAAAA,IAACc,2BAAW,SAAQ,SAAQ,WAAU,cAAa,IAAG,0BACnD,UAAc,cAAA;AAAA,MACb,IAAIP,eAAQ,6BAA6B;AAAA,MACzC,gBAAgB;AAAA,IACjB,CAAA,GACH;AAAA,IAECP,2BAAA,IAAAS,aAAA,KAAA,EACC,UAACT,2BAAA,IAAAsE,aAAA,SAAA,CAAQ,CAAA,GACX;AAAA,EACF,EAAA,CAAA;AAEJ;AAEA,MAAM,eAAe,CAAC,EAAE,OAAO,YAAY;AAEvC,SAAA9D,2BAAA,KAACK,aAAK,MAAA,EAAA,gBAAe,iBACnB,UAAA;AAAA,IAACb,2BAAAA,IAAAc,aAAAA,YAAA,EAAW,IAAG,MAAK,YAAW,QAAO,WAAU,cAAa,SAAQ,MAClE,UACH,MAAA,CAAA;AAAA,IACAd,2BAAAA,IAACc,2BAAW,IAAG,MAAK,SAAQ,MAAK,WAAU,cACxC,UACH,MAAA,CAAA;AAAA,EACF,EAAA,CAAA;AAEJ;AAEA,aAAa,eAAe;AAAA,EAC1B,OAAO;AACT;AAEA,aAAa,YAAY;AAAA,EACvB,OAAOb,mBAAAA,QAAU,OAAO;AAAA,EACxB,OAAOA,mBAAU,QAAA;AACnB;AAEA,MAAM6P,SAAO,MAAM;AACjB,QAAM,EAAE,eAAe,mBAAmB,IAAI3P,UAAQ,QAAA;AACtD,QAAM,EAAE,aAAa,gBAAgB,IAAIwJ,aAAyB,yBAAA;AAClE,QAAM,cAAc3K,MAAA,OAAO,KAAK,IAAK,CAAA;AAE/B,QAAA,eAAe,CAAC,SAAS,YAAY;AACnC,UAAA,cAAc,YAAY,OAAO,IACnC,eAAe,YAAY,OAAO,GAAG,aAAa,IAClD;AACJ,UAAM,YAAY,YAAY,OAAO,IAAI,IAAI,KAAK,YAAY,OAAO,CAAC,EAAE,QAAQ,IAAI,KAAK,IAAI;AACvF,UAAA,UAAU,YAAY,YAAY;AACxC,UAAM,EAAE,MAAM,MAAA,IAAU,SAAS,CAAC,OAAO;AAElC,WAAA;AAAA,MACL,IAAI,mBAAmB,OAAO,MAAM,EAAE,SAAS,QAAQ;AAAA,MACvD,IAAI,kBAAkB,MAAM;AAAA,IAAA;AAAA,EAC9B;AAGI,QAAA,UAAU,aAAa,aAAa,WAAW;AAC/C,QAAA,UAAU,aAAa,aAAa,WAAW;AAErD,yCACG6B,mBAAK,EAAA,WAAU,UAAS,YAAW,WAAU,KAAK,GACjD,UAAA;AAAA,IAACL,2BAAAA,KAAAK,aAAA,MAAA,EAAK,WAAU,UAAS,YAAW,WAAU,KAAK,GAAG,IAAG,MACvD,UAAA;AAAA,MAAAb,2BAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,OAAO,cAAc;AAAA,YACnB,IAAIO,eAAQ,qCAAqC;AAAA,YACjD,gBAAgB;AAAA,UAAA,CACjB;AAAA,UACD,OAAO,QAAQ;AAAA,QAAA;AAAA,MACjB;AAAA,MAEAP,2BAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,OAAO,cAAc;AAAA,YACnB,IAAIO,eAAQ,gCAAgC;AAAA,YAC5C,gBAAgB;AAAA,UAAA,CACjB;AAAA,UACD,OAAO,QAAQ;AAAA,QAAA;AAAA,MACjB;AAAA,IAAA,GACF;AAAA,IAEAC,2BAAAA,KAACK,qBAAK,WAAU,UAAS,YAAW,WAAU,KAAK,GAAG,IAAG,MACvD,UAAA;AAAA,MAAAb,2BAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,OAAO,cAAc;AAAA,YACnB,IAAIO,eAAQ,wCAAwC;AAAA,YACpD,gBAAgB;AAAA,UAAA,CACjB;AAAA,UACD,OAAO,QAAQ;AAAA,QAAA;AAAA,MACjB;AAAA,MAEAP,2BAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,OAAO,cAAc;AAAA,YACnB,IAAIO,eAAQ,gCAAgC;AAAA,YAC5C,gBAAgB;AAAA,UAAA,CACjB;AAAA,UACD,OAAO,QAAQ;AAAA,QAAA;AAAA,MACjB;AAAA,IAAA,GACF;AAAA,EACF,EAAA,CAAA;AAEJ;AAEA,MAAMwP,SAAO,CAAC,EAAE,eAAe;AAE3B,SAAA/P,+BAACa,aAAAA,QAAK,WAAU,UAAS,YAAW,WAAU,KAAK,GAChD,SACH,CAAA;AAEJ;AAEAkP,OAAK,YAAY;AAAA,EACf,UAAU9P,mBAAA,QAAU,UAAU,CAACA,mBAAU,QAAA,QAAQA,2BAAU,IAAI,GAAGA,mBAAAA,QAAU,IAAI,CAAC,EAAE;AACrF;AAEO,MAAM,cAAc;AAAA,EAAA,MACzB8P;AAAAA,EACA;AAAA,EAAA,MACAD;AACF;AC/HO,SAAS,mBAAmB;AAE/B,SAAAtP,gCAAC,YAAY,MAAZ,EACC,UAAA;AAAA,IAACR,+BAAA,YAAY,OAAZ,EAAkB;AAAA,IACnBA,+BAAC,YAAY,MAAZ,EAAiB;AAAA,EACpB,EAAA,CAAA;AAEJ;ACRA,MAAM,yBAAyB,CAAC,iCAAiC;AAC3D,MAAA,CAAC,6BAA6B,SAAS;AACzC,WAAO;EACT;AAEM,QAAA,gBAAgB,6BAA6B,QAAQ;AAC3D,QAAM,aAAa,6BAA6B;AAE1C,QAAA,UAAU,CAAC,SAAS/B,qBAAI,YAAY,CAAC,MAAM,MAAM,GAAG,EAAE;AAE5D,MAAI,kBAAkB;AACtB,QAAM,YAAY,CAAA;AAEJ,gBAAA,QAAQ,CAAC,QAAQ;AACvB,UAAA,iBAAiB,IAAI,KAAK,CAAC,EAAE,KAAW,MAAA,QAAQ,IAAI,MAAM,aAAa;AAEzE,QAAA,CAAC,UAAU,eAAe,GAAG;AACrB,gBAAA,eAAe,IAAI;IAC/B;AAEA,QAAI,gBAAgB;AACA,wBAAA,oBAAoB,KAAK8Q,yBAAQ,UAAU,CAAC,CAAC,IAAI,IAAI,kBAAkB;AAErF,UAAA,CAAC,UAAU,eAAe,GAAG;AACrB,kBAAA,eAAe,IAAI;MAC/B;AACU,gBAAA,eAAe,EAAE,KAAK,GAAG;AAEhB,yBAAA;AAAA,IAAA,OACd;AACK,gBAAA,eAAe,EAAE,KAAK,GAAG;AAAA,IACrC;AAAA,EAAA,CACD;AAED,SAAO,UAAU,OAAO,CAAC,QAAQ,IAAI,SAAS,CAAC;AACjD;ACtCA,MAAM,+BAA+B,CAAC,WAAW;AAC/C,MAAI,CAAC;AAAQ,WAAO;AAEpB,QAAM,YAAY;AAAA,IAChB,GAAG,OAAO,YAAY,QAAQ;AAAA,IAC9B,GAAG,OAAO,OAAO,OAAO,UAAU,EAAE,QAAQ,CAAC,cAAc,UAAU,QAAQ,IAAI;AAAA,IACjF,KAAK;AAEP,QAAM,kBAAkB,UACrB,OAAO,CAAC,UAAU,MAAM,YAAY,WAAW,EAC/C,IAAI,CAAC,gBAAgB,YAAY,YAAY,WAAW;AAE3D,QAAM,wBAAwB,CAAC,GAAG,IAAI,IAAI,eAAe,CAAC;AAEnD,SAAA;AACT;ACXA,MAAM,qCAAqC,CAAC,iBAAiB,SAAS;AAC9D,QAAA,yBAAyB,CAAC,WAAW;AACnC,UAAA,UAAUiB,qCAAwB,iBAAiB;AAAA,MACvD;AAAA,QACE,QAAQ,oCAAoC,MAAM;AAAA,QAClD,SAAS;AAAA,MACX;AAAA,IAAA,CACD;AAED,WAAOC,cAAK,QAAAC,iBAAA,QAAQ,SAAS,mBAAmB,CAAC;AAAA,EAAA;AAG5C,SAAA;AAAA,IACL,2BAA2B,uBAAuB,QAAQ;AAAA,IAC1D,yBAAyB,uBAAuB,MAAM;AAAA,IACtD,2BAA2B,uBAAuB,QAAQ;AAAA,EAAA;AAE9D;ACjBA,MAAM,sBAAsB,CAAC,UAAU,MAAM,uCAAuC,EAAE;AAEtF,MAAM,yBAAyBC,QAAA;AAAA,EAAe;AAAA,EAAqB,CAAC,WAClE,uBAAuB,QAAQ,eAAe,CAAA,CAAE;AAClD;AAEA,MAAM,wBAAwBA,QAAA;AAAA,EAAe;AAAA,EAAqB,CAAC,WACjE,6BAA6B,MAAM;AACrC;ACwBA,MAAM,kBAAkB,CAAC,EAAE,QAAQ,qCAAqC,SAAS,MAAM;AAGvF,MAAM,WAAW,CAAC,EAAE,gBAAgB,cAAc,QAAQ,MAAM,IAAI,QAAQ,sBAAsB;AAC1F,QAAA,EAAE,eAAejQ,aAAAA;AACjB,QAAA,EAAE,kBAAkBC,UAAAA;AACpB,QAAA/B,eAAcT,uBAAYyS,iBAAAA,sBAAsB;AACtD,QAAM,WAAWzQ,eAAAA;AACjB,QAAM,qBAAqBkE,aAAAA;AAC3B,QAAMwM,eAAcC,QAAA;AAAA,IAClB;AAAA,IACA,aACG,MAAM,qCAAO,qBAA2E,CAAA,GACtF;AAAA,EAAA;AAGP,UAAQ,MAAM;AAMZ,QAAI,UAAU,SAAS,WAAW,SAAS,OAAO;AAC7B,yBAAA;AAAA,QACjB,MAAM;AAAA,QACN,SAAS,SAAS,MAAM;AAAA,QACxB,SAAS;AAAA,MAAA,CACV;AAAA,IACH;AAAA,EAAA,CACD;AAED,QAAM,EAAE,QAAQ,4BAA4B,oBAAoB3S,WAAAA,YAAY,CAAC,WAAW;AAAA,IACtF,QAAQ,oBAAoB,KAAK;AAAA,IACjC,4BAA4B,uBAAuB,KAAK;AAAA,IACxD,iBAAiB,sBAAsB,KAAK;AAAA,EAC5C,EAAA;AAEF,QAAM,EAAE,eAAe,mBAAmB,IAAI,kBAAkB,eAAe;AAE/E,QAAM,EAAE,2BAA2B,yBAAyB,0BAC1D,IAAA,mCAAmC,iBAAiB,IAAI;AAE1D,QAAM,2BAA2B,eAC7BS,aAAY,eAAe,4BAC3BA,aAAY,eAAe;AAG/B,QAAM,oBAAoB,oBACxB,eAAe,eAAe,gBAChC,IAAI,IAAI;AAEF,QAAA,wBAAwB,eAAemS,0BAAwBC;AAG/D,QAAA,gBAAgB,CAAC,UAAU;AACxB,WAAA,MAAM,MAAM,CAAC,aAAa;AAC/B,aAAO,SAAS,MAAM,CAAC,QAAQ,IAAI,YAAY,SAAS,aAAa;AAAA,IAAA,CACtE;AAAA,EAAA;AAGH,MAAI,eAAe;AACjB,0CAAQjB,mCAAqB,CAAA,CAAA;AAAA,EAC/B;AAGA,MAAI,CAACc,cAAa;AACT,WAAA;AAAA,EACT;AAEA,wCACG,uBAAsB,EAAA,eAAe,QAAQ,MAAY,IAAQ,QAC/D,UAAC,CAAA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,MACI;AAEF,WAAArQ,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA,eAAe;AAAA,QACf;AAAA,QACA;AAAA,QACA;AAAA,QACA,MAAM;AAAA,QACN,eAAe;AAAA,QACf;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,wBAAwB;AAAA,QACxB;AAAA,QACA;AAAA,QACA;AAAA,QAEA,UAACQ,2BAAA,KAAAwD,mBAAA,EAAK,aAAW,WAAW,YAC1B,UAAA;AAAA,UAAAhE,+BAACyQ,YAAO,gBAAgC;AAAA,UACvCzQ,+BAAAqE,aAAAA,eAAA,EACC,UAAC7D,2BAAAA,KAAAG,aAAAA,MAAA,EAAK,KAAK,GACT,UAAA;AAAA,YAAAX,+BAACY,aAAAA,YAAS,KAAK,GAAG,GAAG,IACnB,yCAACC,aAAAA,MAAK,EAAA,WAAU,UAAS,YAAW,WAAU,KAAK,GAChD,qCAA2B,IAAI,CAAC,KAAKH,WAAU;AAC1C,kBAAA,cAAc,GAAG,GAAG;AAChB,sBAAA;AAAA,kBACJ,GAAG;AAAA,oBACD,GAAG,EAAE,MAAM,aAAa,WAAW,YAAY;AAAA,kBACjD;AAAA,gBACE,IAAA;AAEJ,uBACGV,2BAAA,IAAAS,aAAA,KAAA,EACC,UAACT,2BAAA,IAAAW,mBAAA,EAAK,KAAK,GACT,UAACX,2BAAA,IAAAY,uBAAA,EAAS,KAAK,IAAI,GAAG,IAAI,IAAI,IAC5B,UAAAZ,2BAAA;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,kBAAA;AAAA,gBACF,EAAA,CACF,EACF,CAAA,KAVQU,MAWV;AAAA,cAEJ;AAGE,qBAAAV,2BAAA;AAAA,gBAACS,aAAA;AAAA,gBAAA;AAAA,kBAEC,WAAS;AAAA,kBACT,YAAW;AAAA,kBACX,QAAO;AAAA,kBACP,aAAa;AAAA,kBACb,cAAc;AAAA,kBACd,YAAY;AAAA,kBACZ,eAAe;AAAA,kBACf,aAAY;AAAA,kBAEZ,UAACT,2BAAA,IAAAa,aAAA,MAAA,EAAK,WAAU,UAAS,YAAW,WAAU,KAAK,GAChD,UAAI,IAAA,IAAI,CAAC,MAAM,iBACdb,2BAAA;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACC,SAAS;AAAA,sBACT,mBAAmB;AAAA,oBAAA;AAAA,oBACd;AAAA,kBAER,CAAA,GACH;AAAA,gBAAA;AAAA,gBAlBKU;AAAA,cAAA;AAAA,YAmBP,CAEH,GACH,EACF,CAAA;AAAA,YACCV,2BAAA,IAAAY,aAAA,UAAA,EAAS,KAAK,GAAG,GAAG,IACnB,UAACJ,2BAAAA,KAAAK,aAAAA,MAAA,EAAK,WAAU,UAAS,YAAW,WAAU,KAAK,GACjD,UAAA;AAAA,cAAAb,2BAAA,IAAC0Q,wBAAqB,EAAA;AAAA,cACtBlQ,2BAAA;AAAA,gBAACC,aAAA;AAAA,gBAAA;AAAA,kBACC,IAAG;AAAA,kBACH,mBAAgB;AAAA,kBAChB,YAAW;AAAA,kBACX,aAAY;AAAA,kBACZ,WAAS;AAAA,kBACT,eAAe;AAAA,kBACf,aAAa;AAAA,kBACb,cAAc;AAAA,kBACd,YAAY;AAAA,kBACZ,QAAO;AAAA,kBAEP,UAAA;AAAA,oBAAAT,2BAAA,IAACqQ,cAAY,EAAA;AAAA,oBACbrQ,2BAAAA,IAAC2Q,QAAc,eAAA,EAAA,MAAK,uCAAuC,CAAA;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAC7D;AAAA,cACC3Q,2BAAA,IAAAS,aAAA,KAAA,EAAI,IAAG,SAAQ,mBAAgB,SAC9B,UAACD,2BAAAA,KAAAK,aAAAA,MAAA,EAAK,WAAU,UAAS,YAAW,WAAU,KAAK,GACjD,UAAA;AAAA,gBAACb,2BAAAA,IAAA2Q,QAAAA,eAAA,EAAc,MAAK,uCAAsC,KAAY,CAAA;AAAA,gBACrE,SAAS,2BACP3Q,+BAAAI,aAAAA,kBAAA,EAAiB,aAAa,iBAC7B,UAAAJ,2BAAA;AAAA,kBAACK,aAAA;AAAA,kBAAA;AAAA,oBACC,SAAS,MAAM;AACb,iCAAW,oBAAoB;AAAA,oBACjC;AAAA,oBACA,MAAK;AAAA,oBACL,0CAAYC,MAAO,QAAA,EAAA;AAAA,oBACnB,OAAO,EAAE,OAAO,OAAO;AAAA,oBACvB,IAAI,+CAA+C,IAAI;AAAA,oBACvD,SAAQ;AAAA,oBAEP,UAAc,cAAA;AAAA,sBACb,IAAIC,eAAQ,aAAa;AAAA,sBACzB,gBAAgB;AAAA,oBAAA,CACjB;AAAA,kBAAA;AAAA,gBAAA,GAEL;AAAA,gBAGFP,2BAAAA,IAACI,aAAAA,kBAAiB,EAAA,aAAa,0BAC7B,UAAAJ,2BAAA;AAAA,kBAACK,aAAA;AAAA,kBAAA;AAAA,oBACC,MAAK;AAAA,oBACL,0CAAYuQ,MAAM,OAAA,EAAA;AAAA,oBAClB,OAAO,EAAE,OAAO,OAAO;AAAA,oBACvB,IAAI;AAAA,oBACJ,SAAQ;AAAA,oBAEP,UAAc,cAAA;AAAA,sBACb,IAAI;AAAA,sBACJ,gBAAgB;AAAA,oBAAA,CACjB;AAAA,kBAAA;AAAA,gBAAA,GAEL;AAAA,gBAEC,eAAe,aAAa,CAAC,mBAC5B5Q,2BAAA,IAAC6Q,gBAAW,UAAoB;AAAA,cAAA,EAAA,CAEpC,EACF,CAAA;AAAA,YAAA,EAAA,CACF,EACF,CAAA;AAAA,UAAA,EAAA,CACF,EACF,CAAA;AAAA,QAAA,GACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAIR,EAAA,CAAA;AAEJ;AAEA,SAAS,eAAe;AAAA,EACtB,IAAI;AAAA,EACJ,cAAc;AAAA,EACd,QAAQ;AAAA,EACR,iBAAiB,CAAC;AACpB;AAEA,SAAS,YAAY;AAAA,EACnB,gBAAgB5Q,2BAAU,MAAM;AAAA,IAC9B,SAASA,mBAAAA,QAAU,KAAK;AAAA,IACxB,WAAWA,mBAAAA,QAAU,KAAK;AAAA,IAC1B,WAAWA,mBAAAA,QAAU,KAAK;AAAA,IAC1B,WAAWA,mBAAAA,QAAU,KAAK;AAAA,EAC3B,CAAA,EAAE;AAAA,EACH,IAAIA,mBAAU,QAAA;AAAA,EACd,cAAcA,mBAAU,QAAA;AAAA,EACxB,QAAQA,mBAAAA,QAAU,KAAK;AAAA,EACvB,QAAQA,mBAAU,QAAA;AAAA,EAClB,MAAMA,mBAAAA,QAAU,OAAO;AAAA,EACvB,iBAAiBA,mBAAU,QAAA;AAC7B;AC7RA,MAAM6Q,gBAAc,CAAC,UAAU;AACvB,QAAA,kBAAkBjS,cAAQ,MAAM,0BAA0B,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC;AACzF,QAAM,EAAE,WAAW,mBAAmBkS,aAAQ,QAAA,iBAAiB,MAAM,eAAe;AAEpF,MAAI,WAAW;AACb,0CAAQxB,mCAAqB,CAAA,CAAA;AAAA,EAC/B;AAEA,SAAQvP,2BAAAA,IAAA,UAAA,EAAU,GAAG,OAAO,eAAgC,CAAA;AAC9D;AAEA8Q,cAAY,eAAe;AAAA,EACzB,aAAa,CAAC;AAChB;AAEAA,cAAY,YAAY;AAAA,EACtB,aAAa7Q,mBAAU,QAAA;AAAA,EACvB,MAAMA,mBAAAA,QAAU,OAAO;AAAA,EACvB,iBAAiBA,mBAAAA,QAAU,MAAM;AACnC;AAGA,MAAA,gBAAe6F,MAAA,KAAKgL,eAAa3M,wBAAO;AClBxC,MAAM,EAAE,wBAA4B,IAAA6M;AAEpC,MAAM,wBAAwB,CAAC,EAAE,QAAQ,GAAG,WAAW;AAC/C,QAAA,gBAAgBrT,uBAAY,YAAY;AAC9C,QAAM,WAAWmC,WAAAA;AACjB,QAAM,CAAC,EAAE,OAAO,IAAIJ,aAAe,eAAA;AAC7B,QAAA,EAAE,qBAAqBuR,aAAAA;AACvB,QAAA,EAAE,aAAA7S,cAAa,SAAS,uBAAuB,YAAY,OAAO,KAAK,MAAM,UAAU;AAE7FiB,QAAAA,UAAU,MAAM;AAEd,UAAM,gBAAgB,iBAAiB,yBAAyB,EAAE,QAAQ,OAAO;AAEjF,aAASsF,YAAU,cAAc,QAAQ,KAAK,CAAC;AAE/C,WAAO,MAAM;AACX,eAASF,cAAY;AAAA,IAAA;AAAA,KAEtB,CAAC,QAAQ,UAAU,OAAO,gBAAgB,CAAC;AAE1C,MAAA,CAAC,iBAAiB,CAAC,oBAAoB;AACzC,0CAAQ8K,mCAAqB,CAAA,CAAA;AAAA,EAC/B;AAEA,SAAQvP,2BAAAA,IAAA8Q,eAAA,EAAa,GAAG,MAAM,iBAAiB1S,aAAa,CAAA;AAC9D;AAEA,sBAAsB,YAAY;AAAA,EAChC,QAAQ6B,2BAAU,MAAM;AAAA,IACtB,YAAYA,mBAAAA,QAAU,OAAO;AAAA,IAC7B,aAAaA,2BAAU,MAAM;AAAA,MAC3B,KAAKA,mBAAAA,QAAU,OAAO;AAAA,MACtB,UAAUA,mBAAAA,QAAU,OAAO;AAAA,MAC3B,WAAWA,mBAAAA,QAAU,OAAO;AAAA,MAC5B,SAASA,mBAAAA,QAAU,OAAO;AAAA,MAC1B,YAAYA,mBAAAA,QAAU,OAAO;AAAA,IAC9B,CAAA,EAAE;AAAA,EACJ,CAAA,EAAE;AACL;AC5BA,MAAM,kBAAkBkB,gBAAAA,QAAON,aAAAA,IAAI;AAAA;AAAA,aAEtB,KAAK,EAAE;AAAA,cACN,KAAK,EAAE;AAAA,oBACD,CAAC,EAAE,YAAY,MAAM,OAAO,CAAC,CAAC;AAAA;AAAA;AAI3C,MAAM,gBAAgB,CAAC;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACE,QAAA,EAAE,kBAAkBV,UAAAA;AAEpB,QAAA,eAAe,WAAW,WAAW,EAAE;AAE7C,MAAI,0BAA0B,CAAC,CAAC,SAAS,UAAU,EAAE,SAAS,IAAI;AAElE,MAAI,CAAC,UAAU,YAAY,WAAW,EAAE,SAAS,YAAY,GAAG;AACpC,8BAAA;AAAA,EAC5B;AAGE,SAAAH,2BAAA,IAACuD,4BAAY,SAAS,cAAc,YAAW,SAC7C,UAAA/C,2BAAAA,KAAC,UAAK,UACJ,UAAA;AAAA,IAACR,2BAAA,IAAAwD,aAAA,aAAA,EACC,0CAAC,iBACC,EAAA,UAAA;AAAA,MAAAxD,+BAAC,iBAAc,MAAY;AAAA,MAC3BA,2BAAAA,IAACc,2BAAW,YAAW,QAAO,WAAU,cAAa,IAAG,MAAK,IAAG,SAC7D,UAAA;AAAA,QACC;AAAA,UACE,IAAIP,eAAQ,mDAAmD;AAAA,UAC/D,gBAAgB;AAAA,QAClB;AAAA,QACA,EAAE,WAAWkD,4BAAW,WAAW,EAAE;AAAA,MAAA,GAEzC;AAAA,IAAA,EAAA,CACF,EACF,CAAA;AAAA,IACCzD,+BAAA0D,aAAAA,WAAA,EACC,UAAClD,2BAAAA,KAAAG,aAAAA,MAAA,EAAK,KAAK,GACT,UAAA;AAAA,MAAAX,2BAAA,IAACY,aAAS,UAAA,EAAA,GAAG,IAAI,KAAK,GACpB,UAAAZ,2BAAA;AAAA,QAAC+C,aAAA;AAAA,QAAA;AAAA,UACC,IAAG;AAAA,UACH,OAAO,cAAc;AAAA,YACnB,IAAIxC,eAAQ,kBAAkB;AAAA,YAC9B,gBAAgB;AAAA,UAAA,CACjB;AAAA,UACD,MAAK;AAAA,UACL,UAAU,CAAC,MAAM,kBAAkB,CAAC;AAAA,UACpC,OAAO,UAAU;AAAA,UACjB,MAAM,cAAc;AAAA,YAClB,IAAIA,eAAQ,mCAAmC;AAAA,YAC/C,gBAAgB;AAAA,UAAA,CACjB;AAAA,QAAA;AAAA,MAAA,GAEL;AAAA,MACC,2BACEP,2BAAAA,IAAAY,aAAAA,UAAA,EAAS,GAAG,IAAI,KAAK,GACpB,UAAAZ,2BAAA;AAAA,QAACgD,aAAA;AAAA,QAAA;AAAA,UACC,eAAY;AAAA,UACZ,SAAS,UAAU;AAAA,UACnB,OAAO,cAAc;AAAA,YACnB,IAAIzC,eAAQ,uBAAuB;AAAA,YACnC,gBAAgB;AAAA,UAAA,CACjB;AAAA,UACD,MAAK;AAAA,UACL,UAAU,CAAC,MACT,kBAAkB,EAAE,QAAQ,EAAE,MAAM,YAAY,OAAO,EAAE,OAAO,WAAW;AAAA,UAE7E,SAAS,cAAc;AAAA,YACrB,IAAI;AAAA,YACJ,gBAAgB;AAAA,UAAA,CACjB;AAAA,UACD,UAAU,cAAc;AAAA,YACtB,IAAI;AAAA,YACJ,gBAAgB;AAAA,UAAA,CACjB;AAAA,QAAA;AAAA,MAAA,GAEL;AAAA,IAAA,EAAA,CAEJ,EACF,CAAA;AAAA,IACAP,2BAAA;AAAA,MAAC2D,aAAA;AAAA,MAAA;AAAA,QACC,cACE3D,2BAAA,IAAC4D,aAAO,QAAA,EAAA,SAAS,cAAc,SAAQ,YACpC,UAAc,cAAA,EAAE,IAAI,gCAAgC,gBAAgB,SAAU,CAAA,GACjF;AAAA,QAEF,YACE5D,2BAAAA,IAAC4D,aAAAA,QAAO,EAAA,MAAK,UACV,UAAA,cAAc,EAAE,IAAI,iBAAiB,gBAAgB,SAAS,CAAC,EAClE,CAAA;AAAA,MAAA;AAAA,IAEJ;AAAA,EAAA,EACF,CAAA,EACF,CAAA;AAEJ;AAEA,cAAc,YAAY;AAAA,EACxB,YAAY3D,mBAAU,QAAA;AAAA,IACpBA,mBAAAA,QAAU,MAAM;AAAA,MACd,cAAcA,mBAAU,QAAA;AAAA,IAAA,CACzB;AAAA,EAAA,EACD;AAAA,EACF,WAAWA,2BAAU,MAAM;AAAA,IACzB,OAAOA,mBAAU,QAAA;AAAA,IACjB,UAAUA,mBAAU,QAAA;AAAA,EACrB,CAAA,EAAE;AAAA,EACH,aAAaA,mBAAAA,QAAU,OAAO;AAAA,EAC9B,mBAAmBA,mBAAAA,QAAU,KAAK;AAAA,EAClC,cAAcA,mBAAAA,QAAU,KAAK;AAAA,EAC7B,UAAUA,mBAAAA,QAAU,KAAK;AAAA,EACzB,MAAMA,mBAAAA,QAAU,OAAO;AACzB;AC5HO,MAAM,WAAW,CAAC;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA,aAAa;AACf,MAAM;AACJ,QAAM,EAAE,eAAe,OAAO,IAAIE,UAAQ,QAAA;AACpC,QAAA,YAAY+Q,yBAAY,QAAQ;AAAA,IACpC,aAAa;AAAA,EAAA,CACd;AACD,QAAM,cAAcZ,QAAA;AAAA,IAClB;AAAA,IACA,aAEI,MAAM,qCACJ,yBACF,CAAA,GACA;AAAA,IACJ;AAAA,MACE,QAAQ,WAAW,UAAU;AACpB,eAAA,CAAC,GAAG,WAAW,EAAE,GAAG,UAAU,OAAO,cAAc,SAAS,KAAK,EAAA,CAAG;AAAA,MAC7E;AAAA,MAEA,cAAc;AAAA,MAEd,SAAS,CAAC,CAAC,oBAAoB;AAAA,IACjC;AAAA,EAAA;AAGF,QAAM,oBAAoB,YAAY,KAAK,CAAC,GAAG,MAAM,UAAU,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC;AAClF,QAAA,EAAE,SAAa,IAAA;AAErB,yCACGzP,mBAAK,EAAA,WAAU,UAAS,YAAW,WAAU,KAAK,GACjD,UAAA;AAAA,IAAAb,+BAACc,aAAAA,YAAW,EAAA,SAAQ,SAAQ,IAAG,MAC5B,UAAc,cAAA;AAAA,MACb,IAAIP,eAAQ,iCAAiC;AAAA,MAC7C,gBAAgB;AAAA,IACjB,CAAA,GACH;AAAA,IAECC,2BAAA,KAAAK,aAAA,MAAA,EAAK,gBAAe,iBAAgB,KAAK,GACxC,UAAA;AAAA,MAACb,2BAAAA,IAAAS,aAAAA,KAAA,EAAI,OAAM,QACT,UAAAT,2BAAA;AAAA,QAACgD,aAAA;AAAA,QAAA;AAAA,UACC,OAAO,cAAc;AAAA,YACnB,IAAIzC,eAAQ,mBAAmB;AAAA,YAC/B,gBAAgB;AAAA,UAAA,CACjB;AAAA,UACD,UAAU,CAAC,MAAM;AACN,qBAAA,EAAE,QAAQ,EAAE,MAAM,uBAAuB,OAAO,EAAE,OAAO,QAAQ,EAAA,CAAG;AAAA,UAC/E;AAAA,UACA,SAAS,cAAc;AAAA,YACrB,IAAI;AAAA,YACJ,gBAAgB;AAAA,UAAA,CACjB;AAAA,UACD,UAAU,cAAc;AAAA,YACtB,IAAI;AAAA,YACJ,gBAAgB;AAAA,UAAA,CACjB;AAAA,UACD,MAAK;AAAA,UACL,SAAS,SAAS;AAAA,QAAA;AAAA,MAAA,GAEtB;AAAA,MAEAP,2BAAAA,IAACS,aAAAA,KAAI,EAAA,OAAM,QACT,UAAAT,2BAAA;AAAA,QAACgD,aAAA;AAAA,QAAA;AAAA,UACC,OAAO,cAAc;AAAA,YACnB,IAAIzC,eAAQ,oBAAoB;AAAA,YAChC,gBAAgB;AAAA,UAAA,CACjB;AAAA,UACD,UAAU,CAAC,MAAM;AACN,qBAAA,EAAE,QAAQ,EAAE,MAAM,uBAAuB,OAAO,EAAE,OAAO,QAAQ,EAAA,CAAG;AAAA,UAC/E;AAAA,UACA,SAAS,cAAc;AAAA,YACrB,IAAI;AAAA,YACJ,gBAAgB;AAAA,UAAA,CACjB;AAAA,UACD,UAAU,cAAc;AAAA,YACtB,IAAI;AAAA,YACJ,gBAAgB;AAAA,UAAA,CACjB;AAAA,UACD,MAAK;AAAA,UACL,SAAS,SAAS;AAAA,QAAA;AAAA,MAAA,GAEtB;AAAA,MAEAP,2BAAAA,IAACS,aAAAA,KAAI,EAAA,OAAM,QACT,UAAAT,2BAAA;AAAA,QAACgD,aAAA;AAAA,QAAA;AAAA,UACC,OAAO,cAAc;AAAA,YACnB,IAAIzC,eAAQ,wBAAwB;AAAA,YACpC,gBAAgB;AAAA,UAAA,CACjB;AAAA,UACD,UAAU,CAAC,MAAM;AACN,qBAAA,EAAE,QAAQ,EAAE,MAAM,qBAAqB,OAAO,EAAE,OAAO,QAAQ,EAAA,CAAG;AAAA,UAC7E;AAAA,UACA,SAAS,cAAc;AAAA,YACrB,IAAI;AAAA,YACJ,gBAAgB;AAAA,UAAA,CACjB;AAAA,UACD,UAAU,cAAc;AAAA,YACtB,IAAI;AAAA,YACJ,gBAAgB;AAAA,UAAA,CACjB;AAAA,UACD,MAAK;AAAA,UACL,SAAS,SAAS;AAAA,QAAA;AAAA,MAAA,GAEtB;AAAA,IAAA,GACF;AAAA,IAEAC,2BAAAA,KAACG,aAAAA,MAAK,EAAA,KAAK,GACT,UAAA;AAAA,MAAAX,2BAAA,IAACY,aAAS,UAAA,EAAA,GAAG,IAAI,KAAK,GACpB,UAAAZ,2BAAA;AAAA,QAACiD,aAAA;AAAA,QAAA;AAAA,UACC,OAAO,cAAc;AAAA,YACnB,IAAI1C,eAAQ,wBAAwB;AAAA,YACpC,gBAAgB;AAAA,UAAA,CACjB;AAAA,UACD,MAAM,cAAc;AAAA,YAClB,IAAIA,eAAQ,yCAAyC;AAAA,YACrD,gBACE;AAAA,UAAA,CACH;AAAA,UACD,UAAU,CAAC,UAAU,SAAS,EAAE,QAAQ,EAAE,MAAM,qBAAqB,MAAM,GAAG;AAAA,UAC9E,MAAK;AAAA,UACL,OAAO,aAAa,SAAS,YAAY;AAAA,UAExC,UAAC,CAAA,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,CAAC,4CACrB4C,aAAAA,QAAsB,EAAA,OAAO,UAC3B,UAAA,SAAA,GADU,QAEb,CACD;AAAA,QAAA;AAAA,MAAA,GAEL;AAAA,MACCnD,2BAAA,IAAAY,aAAA,UAAA,EAAS,GAAG,IAAI,KAAK,GACpB,UAAAZ,2BAAA;AAAA,QAACiD,aAAA;AAAA,QAAA;AAAA,UACC,OAAO,cAAc;AAAA,YACnB,IAAI1C,eAAQ,wBAAwB;AAAA,YACpC,gBAAgB;AAAA,UAAA,CACjB;AAAA,UACD,UAAU,CAAC,UAAU,SAAS,EAAE,QAAQ,EAAE,MAAM,0BAA0B,MAAM,GAAG;AAAA,UACnF,MAAK;AAAA,UACL,OAAO,aAAa,SAAS,iBAAiB;AAAA,UAE7C,UAAkB,kBAAA,IAAI,CAAC,EAAE,OAAO,MAC/B,MAAAP,2BAAA,IAACmD,aAAmB,QAAA,EAAA,OACjB,UADU,MAAA,GAAA,KAEb,CACD;AAAA,QAAA;AAAA,MAAA,GAEL;AAAA,MACCnD,2BAAA,IAAAY,aAAA,UAAA,EAAS,GAAG,IAAI,KAAK,GACpB,UAAAZ,2BAAA;AAAA,QAACiD,aAAA;AAAA,QAAA;AAAA,UACC,OAAO,cAAc;AAAA,YACnB,IAAI1C,eAAQ,uBAAuB;AAAA,YACnC,gBAAgB;AAAA,UAAA,CACjB;AAAA,UACD,UAAU,CAAC,UAAU,SAAS,EAAE,QAAQ,EAAE,MAAM,6BAA6B,MAAM,GAAG;AAAA,UACtF,MAAK;AAAA,UACL,OAAO,aAAa,SAAS,oBAAoB;AAAA,UAEhD,UAAC,CAAA,OAAO,MAAM,EAAE,IAAI,CAAC,UACpBP,2BAAAA,IAACmD,aAAAA,QAAmB,EAAA,OAAO,OACxB,UAAA,MAAA,GADU,KAEb,CACD;AAAA,QAAA;AAAA,MAAA,GAEL;AAAA,IAAA,GACF;AAAA,EACF,EAAA,CAAA;AAEJ;AAEA,SAAS,eAAe;AAAA,EACtB,cAAc,CAAC;AAAA,EACf,aAAa,CAAC;AAChB;AAEA,SAAS,YAAY;AAAA,EACnB,oBAAoBlD,mBAAAA,QAAU,OAAO;AAAA,EACrC,cAAcA,mBAAU,QAAA;AAAA,EACxB,UAAUA,mBAAAA,QAAU,KAAK;AAAA,EACzB,aAAaA,mBAAU,QAAA;AAAA,IACrBA,mBAAAA,QAAU,MAAM;AAAA,MACd,OAAOA,mBAAU,QAAA;AAAA,MACjB,OAAOA,mBAAU,QAAA;AAAA,IAClB,CAAA,EAAE;AAAA,EACL;AACF;ACrMA,MAAM,YAAYkB,gBAAAA,QAAON,aAAAA,IAAI;AAAA,YACjB,CAAC,EAAE,YAAY,MAAM,OAAO,CAAC,CAAC;AAAA;AAAA;AAAA,iBAGzB,CAAC,EAAE,YAAY,MAAM,OAAO,CAAC,CAAC;AAAA;AAAA;AAI/C,MAAMY,eAAaN,gBAAAA,QAAO,SAAS;AAAA;AAAA,MAE7B,CAAC,EAAE,OAAO,UAAU,MAAO,YAAY,MAAM,OAAO,aAAa,MAAM,OAAO,UAAW;AAAA;AAAA;AAAA,aAGlF,KAAK,EAAE;AAAA,cACN,KAAK,EAAE;AAAA;AAAA;AAIrB,MAAMgQ,mBAAiBhQ,gBAAAA,QAAON,aAAAA,IAAI;AAAA;AAAA,MAE5B,CAAC,EAAE,OAAO,UAAU,MAAO,YAAY,MAAM,OAAO,aAAa,MAAM,OAAO,UAAW;AAAA;AAAA;AAAA,aAGlF,KAAK,EAAE;AAAA,cACN,KAAK,EAAE;AAAA;AAAA;AAAA,cAGP,CAAC,EAAE,OAAO,gBAAiB,YAAY,SAAY,MAAM,OAAO,UAAW;AAAA;AAAA;AAAA;AAKzF,MAAMuQ,uBAAqBjQ,gBAAAA,QAAOL,aAAAA,UAAU;AAAA,eAC7B,KAAK,EAAE;AAAA;AAGf,SAAS,gBAAgB,EAAE,YAAY,aAAa,aAAa;AAEpE,SAAAN,2BAAA;AAAA,IAAC2Q;AAAAA,IAAA;AAAA,MACC,YAAY,YAAY,eAAe;AAAA,MACvC,SAAQ;AAAA,MACR,KAAK;AAAA,MACL,WAAS;AAAA,MACT,gBAAe;AAAA,MACf;AAAA,MACA;AAAA,MACA,cAAY/K,qBAAQ,EAAE;AAAA,MACtB,UAAS;AAAA,MACT,SAAS,cAAc,IAAI;AAAA,MAE3B,UAAA;AAAA,QAAC5F,2BAAAA,KAAAK,aAAAA,MAAA,EAAK,KAAK,GACT,UAAA;AAAA,UAACb,2BAAAA,IAAAyB,cAAA,EAAW,YAAW,UAAS,QAAO,cAAa,SAAS,GAC3D,UAACzB,2BAAAA,IAAAwB,MAAAA,MAAA,CAAA,CAAK,EACR,CAAA;AAAA,UAEAxB,2BAAA;AAAA,YAACoR;AAAAA,YAAA;AAAA,cACC,WAAW,YAAY,SAAY;AAAA,cACnC,YAAW;AAAA,cACX,UAAQ;AAAA,cAEP,UAAA;AAAA,YAAA;AAAA,UACH;AAAA,QAAA,GACF;AAAA,wCAECvQ,aAAAA,MACC,EAAA,UAAA;AAAA,UAAAb,+BAAC,WAAU,EAAA,YAAW,UACpB,UAAAA,+BAACM,MAAAA,SAAO,CAAA,GACV;AAAA,yCAEC,WAAU,EAAA,YAAW,UACpB,UAAAN,+BAAC6K,MAAAA,QAAM,CAAA,GACT;AAAA,QAAA,GACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN;AAEA,gBAAgB,eAAe;AAAA,EAC7B,WAAW;AAAA,EACX,aAAa;AACf;AAEA,gBAAgB,YAAY;AAAA,EAC1B,WAAW5K,mBAAU,QAAA;AAAA,EACrB,YAAYA,mBAAAA,QAAU,OAAO;AAAA,EAC7B,aAAaA,mBAAU,QAAA;AACzB;ACjFA,MAAM,eAAekB,gBAAO,QAAA;AAAA;AAAA;AAAA,YAGhB,CAAC,EAAE,YAAY,MAAM,OAAO,CAAC,CAAC;AAAA;AAAA;AAAA,iBAGzB,CAAC,EAAE,YAAY,MAAM,OAAO,CAAC,CAAC;AAAA;AAAA;AAI/C,MAAM,aAAaA,gBAAAA,QAAO,YAAY;AAAA,eACvB,CAAC,EAAE,YAAY,MAAM,OAAO,CAAC,CAAC;AAAA,4BACjB,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,UAAU;AAAA;AAAA;AAAA;AAAA,aAIrD,KAAK,EAAE;AAAA,cACN,KAAK,EAAE;AAAA;AAAA;AAIrB,MAAM,iBAAiBA,gBAAAA,QAAON,aAAAA,IAAI;AAAA,gBAClB,KAAK,EAAE;AAAA;AAAA;AAAA;AAAA,aAIV,KAAK,EAAE;AAAA,cACN,KAAK,EAAE;AAAA;AAAA;AAAA,cAGP,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA,wBAK5B,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,UAAU;AAAA,oBAC1C,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,UAAU;AAAA;AAAA;AAAA;AAAA,gBAI1C,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,UAAU;AAAA;AAAA;AAAA;AAAA,MAIhDC,uBAAU;AAAA,eACD,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,UAAU;AAAA;AAAA;AAAA,MAG/C,UAAU;AAAA,gCACgB,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,UAAU;AAAA;AAAA;AAAA;AAKtE,MAAM,eAAeK,gBAAAA,QAAOV,aAAAA,GAAG;AAAA;AAAA,qBAEV,CAAC,EAAE,YAAY,MAAM,OAAO,CAAC,CAAC;AAAA;AAAA;AAInD,MAAM,gBAAgB,CAAC;AAAA,EACrB,OAAAC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACE,QAAA,EAAE,kBAAkBP,UAAAA;AACpB,QAAA,UAAUnB,aAAO,IAAI;AACrB,QAAA,UAAUA,aAAO,IAAI;AAC3B,QAAM,GAAG,qBAAqB,IAAI0C,eAAS,KAAK;AAChD,QAAM,gBAAgB1C,MAAAA;AAEtB,QAAM,qBAAqB,MAAM;AAC/B,QAAI,cAAc,SAAS;AACzB,oBAAc,QAAQ;IACxB;AAAA,EAAA;AAIF,QAAM,CAAG,EAAA,IAAI,IAAI2C,iBAAQ;AAAA,IACvB,QAAQ,UAAU;AAAA,IAClB,MAAM,MAAM,SAAS;AACf,UAAA,CAAC,QAAQ,SAAS;AACpB;AAAA,MACF;AACA,YAAM,YAAY,KAAK;AACvB,YAAM,aAAajB;AAGnB,UAAI,cAAc,YAAY;AAC5B;AAAA,MACF;AAGM,YAAA,oBAAoB,QAAQ,QAAQ,sBAAsB;AAEhE,YAAM,gBAAgB,kBAAkB,QAAQ,kBAAkB,QAAQ;AAEpE,YAAA,eAAe,QAAQ;AAEvB,YAAA,eAAe,aAAa,IAAI,kBAAkB;AAMpD,UAAA,YAAY,cAAc,eAAe,cAAc;AACzD;AAAA,MACF;AAEI,UAAA,YAAY,cAAc,eAAe,cAAc;AACzD;AAAA,MACF;AAEA,kBAAY,WAAW,UAAU;AAEjC,WAAK,QAAQ;AAAA,IACf;AAAA,EAAA,CACD;AAED,QAAM,CAAC,EAAE,cAAc,MAAM,OAAO,IAAImB,SAAAA,QAAQ;AAAA,IAC9C,MAAM,UAAU;AAAA,IAChB,OAAO;AACE,aAAA,EAAE,OAAAnB,QAAO,YAAY;IAC9B;AAAA,IACA,SAAS,CAAC,aAAa;AAAA,MACrB,YAAY,QAAQ,WAAW;AAAA,IAAA;AAAA,IAEjC,MAAM;AACJ,2BAAqB,KAAK;AAAA,IAC5B;AAAA,EAAA,CACD;AAEDrB,QAAAA,UAAU,MAAM;AACd,YAAQyC,qBAAAA,cAAc,GAAG,EAAE,sBAAsB,MAAO,CAAA;AAAA,EAAA,GACvD,CAAC,OAAO,CAAC;AAEZzC,QAAAA,UAAU,MAAM;AACd,QAAI,YAAY;AACd,2BAAqB,IAAI;AAAA,IAC3B;AAAA,EAAA,GACC,CAAC,YAAY,oBAAoB,CAAC;AAKrCA,QAAAA,UAAU,MAAM;AACd,QAAI,CAAC,mBAAmB;AACA,4BAAA,CAAC,SAAS,CAAC,IAAI;AAAA,IACvC;AAAA,EAAA,GACC,CAAC,iBAAiB,CAAC;AAKtB,QAAM,OAAO;AAAA,IACX,SAAS,KAAK,OAAO;AAAA,IACrB,SAAS,KAAK,OAAO;AAAA,EAAA;AAGvB,yCACG,cAAa,EAAA,KAAK,OAAO,KAAK,UAAU,MACtC,UAAA;AAAA,IAAA,cAAeW,2BAAA,IAAA,iBAAA,EAAgB,aAAW,MAAC,YAAwB;AAAA,IACnE,CAAC,cAAc,oDAAsB,iBAAgB,EAAA,WAAS,MAAC,YAAwB;AAAA,IAEvF,CAAC,cAAc,CAAC,qBACfQ,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,aAAY;AAAA,QACZ,YAAW;AAAA,QACX,WAAS;AAAA,QACT,gBAAe;AAAA,QACf,SAAS;AAAA,QACT;AAAA,QAEA,UAAA;AAAA,UAACA,2BAAAA,KAAAK,aAAAA,MAAA,EAAK,KAAK,GACT,UAAA;AAAA,YAAAb,2BAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,IAAG;AAAA,gBACH,cAAY;AAAA,kBACV;AAAA,oBACE,IAAIO,eAAQ,qCAAqC;AAAA,oBACjD,gBAAgB;AAAA,kBAClB;AAAA,kBACA,EAAE,MAAM,WAAW;AAAA,gBACrB;AAAA,gBACA,SAAS,CAAC,MAAM,EAAE,gBAAgB;AAAA,gBAClC,KAAK,KAAK;AAAA,gBACV,MAAK;AAAA,gBAEL,yCAACiB,MAAK,MAAA,EAAA;AAAA,cAAA;AAAA,YACR;AAAA,YACCxB,2BAAA,IAAAc,aAAA,YAAA,EAAW,YAAW,QAAQ,UAAW,YAAA;AAAA,UAAA,GAC5C;AAAA,UACAN,2BAAAA,KAACK,aAAAA,MAAK,EAAA,aAAa,GACjB,UAAA;AAAA,YAAAb,2BAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,KAAK;AAAA,gBACL,SAAS,CAAC,MAAM;AACd,oBAAE,gBAAgB;AAClB,mCAAiB,IAAI;AAAA,gBACvB;AAAA,gBACA,cAAY;AAAA,kBACV;AAAA,oBACE,IAAIO,eAAQ,qCAAqC;AAAA,oBACjD,gBAAgB;AAAA,kBAClB;AAAA,kBACA,EAAE,MAAM,WAAW;AAAA,gBACrB;AAAA,gBACA,MAAK;AAAA,gBAEL,yCAACD,MAAO,QAAA,EAAA;AAAA,cAAA;AAAA,YACV;AAAA,YACAN,2BAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,SAAS;AAAA,gBACT,eAAa,UAAU,IAAI;AAAA,gBAC3B,cAAY;AAAA,kBACV;AAAA,oBACE,IAAIO,eAAQ,uCAAuC;AAAA,oBACnD,gBAAgB;AAAA,kBAClB;AAAA,kBACA,EAAE,MAAM,WAAW;AAAA,gBACrB;AAAA,gBACA,MAAK;AAAA,gBAEL,yCAACsK,MAAM,OAAA,EAAA;AAAA,cAAA;AAAA,YACT;AAAA,UAAA,GACF;AAAA,QAAA;AAAA,MAAA;AAAA,IACF;AAAA,EAEJ,EAAA,CAAA;AAEJ;AAEA,cAAc,YAAY;AAAA,EACxB,OAAO5K,mBAAAA,QAAU,OAAO;AAAA,EACxB,mBAAmBA,mBAAAA,QAAU,KAAK;AAAA,EAClC,YAAYA,mBAAAA,QAAU,OAAO;AAAA,EAC7B,MAAMA,mBAAAA,QAAU,OAAO;AAAA,EACvB,kBAAkBA,mBAAAA,QAAU,KAAK;AAAA,EACjC,aAAaA,mBAAAA,QAAU,KAAK;AAAA,EAC5B,eAAeA,mBAAAA,QAAU,KAAK;AAAA,EAC9B,sBAAsBA,mBAAAA,QAAU,KAAK;AACvC;ACrPO,MAAM,sBAAsB,CAAC;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACE,QAAA,EAAE,kBAAkBE,UAAAA;AAC1B,QAAM,CAAC,mBAAmB,oBAAoB,IAAIuB,eAAS,KAAK;AAChE,QAAM,CAAC,YAAY,aAAa,IAAIA,eAAS,IAAI;AACjD,QAAM,yBAAyB1C,MAAAA;AAE/B,WAAS,kBAAkB,MAAM;AAC/B,kBAAc,KAAK;AACnB,eAAW,GAAG,IAAI;AAAA,EACpB;AAEA,WAAS,qBAAqB,MAAM;AAClC,kBAAc,QAAQ;AACtB,kBAAc,GAAG,IAAI;AAAA,EACvB;AAEAK,QAAAA,UAAU,MAAM;AACV,QAAA,eAAe,SAAS,wBAAwB,SAAS;AACpC,6BAAA,QAAQ,aAAa,uBAAuB,QAAQ;AAAA,IAC7E;AAAA,EAAA,GACC,CAAC,iBAAiB,UAAU,CAAC;AAEhC,yCACGwB,mBAAK,EAAA,YAAW,WAAU,WAAU,UAAS,KAAK,GACjD,UAAA;AAAA,IAAAb,+BAACc,aAAAA,YAAW,EAAA,SAAQ,SAAQ,IAAG,MAC5B,UAAc,cAAA;AAAA,MACb,IAAIP,eAAQ,6BAA6B;AAAA,MACzC,gBAAgB;AAAA,IACjB,CAAA,GACH;AAAA,IAEAC,2BAAAA,KAACK,aAAAA,MAAK,EAAA,SAAS,GAAG,aAAY,cAAa,aAAY,UAAS,aAAY,OAAM,WAAS,MACzF,UAAA;AAAA,MAAAb,+BAACS,aAAAA,KAAI,EAAA,MAAK,KAAI,UAAS,iBAAgB,KAAK,wBAC1C,UAACT,2BAAA,IAAAa,mBAAA,EAAK,KAAK,GACR,UAAA,gBAAgB,IAAI,CAAC,OAAOH,WAC3BV,2BAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UAEC,OAAAU;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,eAAe,CAAC,MAAM,kBAAkB,GAAGA,MAAK;AAAA,UAChD,MAAM;AAAA,UACN,YAAY,UAAU,KAAK,EAAE,KAAK,SAAS;AAAA,UAC3C;AAAA,QAAA;AAAA,QARK;AAAA,MAAA,CAUR,GACH,EACF,CAAA;AAAA,MAEAF,2BAAAA,KAACuB,GAAK,KAAA,MAAL,EACC,UAAA;AAAA,QAAAvB,2BAAA;AAAA,UAACuB,GAAAA,KAAK;AAAA,UAAL;AAAA,YACC,aAAa;AAAA,YACb,cAAc;AAAA,YACd,gBAAe;AAAA,YACf,SAAS;AAAA,YACT,UAAU,oBAAoB,UAAU;AAAA,YACxC,SAAQ;AAAA,YAER,UAAA;AAAA,cAAC/B,2BAAA,IAAA2K,aAAA,gBAAA,EAAe,IAAG,QAChB,UAAc,cAAA;AAAA,gBACb,IAAIpK,eAAQ,8BAA8B;AAAA,gBAC1C,gBAAgB;AAAA,cACjB,CAAA,GACH;AAAA,cACCP,2BAAAA,IAAAgC,MAAAA,MAAA,EAAK,eAAW,MAAC,WAAW,OAAO,OAAO,EAAE,UAAU,YAAY,KAAK,EAAK,EAAA,CAAA;AAAA,YAAA;AAAA,UAAA;AAAA,QAC/E;AAAA,QACAhC,2BAAAA,IAAC+B,GAAK,KAAA,SAAL,EACE,UAAA,oBAAoB,IAAI,CAAC,UACvB/B,2BAAAA,IAAA+B,GAAA,KAAK,MAAL,EAAsB,UAAU,MAAM,eAAe,KAAK,GACxD,UAAU,UAAA,KAAK,EAAE,KAAK,SAAS,MAAA,GADlB,KAEhB,CACD,EACH,CAAA;AAAA,MAAA,GACF;AAAA,IAAA,GACF;AAAA,EACF,EAAA,CAAA;AAEJ;AAEA,oBAAoB,YAAY;AAAA,EAC9B,iBAAiB9B,UAAAA,UAAU,MAAM;AAAA,EACjC,qBAAqBA,UAAAA,UAAU,MAAM;AAAA,EACrC,WAAWA,UAAU,UAAA;AAAA,IACnBA,UAAAA,UAAU,MAAM;AAAA,MACd,MAAMA,oBAAU,MAAM;AAAA,QACpB,OAAOA,UAAU,UAAA;AAAA,MAAA,CAClB;AAAA,IAAA,CACF;AAAA,EAAA,EACD;AAAA,EACF,YAAYA,UAAAA,UAAU,KAAK;AAAA,EAC3B,kBAAkBA,UAAAA,UAAU,KAAK;AAAA,EACjC,aAAaA,UAAAA,UAAU,KAAK;AAAA,EAC5B,eAAeA,UAAAA,UAAU,KAAK;AAChC;AClHO,MAAM,gCAAgC;AAAA,EAC3C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;ACFA,MAAM,eAAe;AAAA,EACnB,WAAW,CAAC;AAAA,EACZ,aAAa;AAAA,EACb,aAAa,CAAC;AAAA,EACd,cAAc,CAAC;AACjB;AAEA,MAAM,UAAU,CAAC,QAAQ,cAAc;AAAA;AAAA,EAErClC,yBAAQ,OAAO,CAAC,eAAe;AAC7B,UAAM,sBAAsB,CAAC,gBAAgB,WAAW,MAAM;AAC9D,YAAQ,OAAO,MAAM;AAAA,MACnB,KAAK,aAAa;AAChB,cAAM,kBAAkBE,aAAA,QAAI,OAAO,qBAAqB,CAAE,CAAA;AAC1DK,qBAAA,QAAI,YAAY,qBAAqB,CAAC,GAAG,iBAAiB,OAAO,IAAI,CAAC;AACtE;AAAA,MACF;AAAA,MACA,KAAK,cAAc;AACjB,cAAM,kBAAkBL,aAAA,QAAI,OAAO,qBAAqB,CAAE,CAAA;AACpD,cAAA,EAAE,eAAe,QAAY,IAAA;AACnCK,qBAAA;AAAA,UACE;AAAA,UACA;AAAA,UACA,cAAc,iBAAiB,eAAe,OAAO;AAAA,QAAA;AAEvD;AAAA,MACF;AAAA,MACA,KAAK,aAAa;AACZA,qBAAAA,QAAA,YAAY,CAAC,gBAAgB,GAAG,OAAO,KAAK,MAAM,GAAG,CAAC,GAAG,OAAO,KAAK;AACzE;AAAA,MACF;AAAA,MACA,KAAK,yBAAyB;AAC5BA,6BAAI,YAAY,CAAC,aAAa,OAAO,IAAI,GAAG,OAAO,KAAK;AACxD;AAAA,MACF;AAAA,MACA,KAAK,gBAAgB;AACnB,cAAM,kBAAkBL,aAAA,QAAI,OAAO,qBAAqB,CAAE,CAAA;AAC1DK,qBAAA;AAAA,UACE;AAAA,UACA;AAAA,UACA,gBAAgB,OAAO,CAAC,GAAGoC,WAAU,OAAO,UAAUA,MAAK;AAAA,QAAA;AAE7D;AAAA,MACF;AAAA,MACA,KAAK,qBAAqB;AAClB,cAAA,EAAE,YAAgB,IAAA;AACxB,mBAAW,cAAc;AACzB,mBAAW,UAAU,QAAQzC,aAAA;AAAA,UAC3B;AAAA,UACA,CAAC,gBAAgB,aAAa,aAAa,QAAQ,OAAO;AAAA,UAC1D;AAAA,QAAA;AAEF,mBAAW,UAAU,WAAWA,aAAA;AAAA,UAC9B;AAAA,UACA,CAAC,gBAAgB,aAAa,aAAa,QAAQ,UAAU;AAAA,UAC7D;AAAA,QAAA;AAEF;AAAA,MACF;AAAA,MACA,KAAK,uBAAuB;AAC1B,mBAAW,YAAY;AACvB,mBAAW,cAAc;AACzB;AAAA,MACF;AAAA,MACA,KAAK,qBAAqB;AACxB,cAAM,oBAAoB,CAAC,gBAAgB,aAAa,MAAM,aAAa,MAAM;AAC7EK,6BAAA,YAAY,CAAC,GAAG,mBAAmB,OAAO,GAAG,MAAM,UAAU,KAAK;AAClEA,6BAAA,YAAY,CAAC,GAAG,mBAAmB,UAAU,GAAG,MAAM,UAAU,QAAQ;AAC5E;AAAA,MACF;AAAA,MACA;AACS,eAAA;AAAA,IACX;AAAA,EAAA,CACD;AAAA;ACjDI,MAAM,mBAAmB,CAAC,EAAE,QAAQ,WAAW;AAC9C,QAAA,EAAE,QAAQW,aAAAA;AACV,QAAA,EAAE,kBAAkBkB,UAAAA;AACpB,QAAA,EAAE,eAAeD,aAAAA;AACvB,QAAM,qBAAqB;AAC3B,QAAM,qBAAqB2D,aAAAA;AAC3B,QAAM,EAAE,YAAgB,IAAA9D,iBAAM,WAAW,aAAa;AAChD,QAAA,CAAC,EAAE,aAAa,WAAW,aAAa,gBAAgB,QAAQ,IAAIA,iBAAM;AAAA,IAC9E;AAAA,IACA;AAAA,IACA,OAAO;AAAA,MACL,GAAG;AAAA,MACH,aAAa;AAAA,MACb,cAAc;AAAA,IAAA;AAAA,EAChB;AAGF,QAAM,kBAAkB,OAAO,KAAK,SAAS,EAAE,WAAW;AAEpD,QAAA,EAAE,YAAY,SAAA+C,SAAY,IAAA;AAC1B,QAAA,kBAAkB,aAAa,QAAQ;AAE7C,QAAM,YAAY,MAAM;AAChB,UAAA;AAAA,MACJ,UAAU,EAAE,UAAU,eAAe,iBAAiB;AAAA,MACtD;AAAA,MACA;AAAA,IACE,IAAA;AACJ,UAAM,OAAO,GAAG,aAAa,IAAI,gBAAgB;AACjD,UAAM,eAAe,GAAGrD,GAAA;AAAA,MACtB;AAAA,QACE,MAAM;AAAA,QACN;AAAA,QACA;AAAA,MACF;AAAA,MACA,EAAE,QAAQ,MAAM;AAAA,IAAA,CACjB,GAAG,qBAAqB,IAAI,kBAAkB,KAAK,EAAE;AAEtD,WAAO,oBAAoB,IAAI,IAAI,GAAG,IAAI,YAAY;AAAA,EAAA;AAGlD,QAAA,eAAe,CAAC,EAAE,QAAQ,EAAE,MAAM,MAAA,QAAc;AAC3C,aAAA;AAAA,MACP,MAAM;AAAA,MACN,MAAM;AAAA,MACN,OAAO,SAAS,sBAAsB,SAAS,OAAO,EAAE,IAAI;AAAA,IAAA,CAC7D;AAAA,EAAA;AAGH,QAAM,EAAE,WAAW,kBAAkB,OAAW,IAAAsE,WAAA;AAAA,IAC9C,CAAC,SAAS,IAAI,kCAAkC,IAAI,kBAAkB,IAAI;AAAA,IAC1E;AAAA,MACE,YAAY;AACV,mBAAW,qBAAqB;AACpB;MACd;AAAA,MACA,UAAU;AACW,2BAAA;AAAA,UACjB,MAAM;AAAA,UACN,SAAS,EAAE,IAAI,qBAAqB;AAAA,QAAA,CACrC;AAAA,MACH;AAAA,IACF;AAAA,EAAA;AAGI,QAAA,iBAAiB,CAAC,SAAS;AACtB,aAAA;AAAA,MACP,MAAM;AAAA,MACN;AAAA,IAAA,CACD;AAAA,EAAA;AAGG,QAAA,oBAAoB,CAAC,GAAGrD,WAAU;AACtC,MAAE,gBAAgB;AAEd,QAAA,gBAAgB,WAAW,GAAG;AACb,yBAAA;AAAA,QACjB,MAAM;AAAA,QACN,SAAS,EAAE,IAAIH,OAAA,QAAQ,iCAAiC,EAAE;AAAA,MAAA,CAC3D;AAAA,IAAA,OACI;AACI,eAAA;AAAA,QACP,MAAM;AAAA,QACN,OAAAG;AAAA,MAAA,CACD;AAAA,IACH;AAAA,EAAA;AAGI,QAAA,eAAe,CAAC,UAAU;AAC9B,UAAM,eAAe;AAErB,UAAM,EAAE,SAAS,UAAU,UAAA,IAAc;AAElC,WAAA;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,IAAA,CACD;AAED,eAAW,2BAA2B;AAAA,EAAA;AAGlC,QAAA,uBAAuB,CAAC2Q,iBAAgB;AACnC,aAAA;AAAA,MACP,MAAM;AAAA,MACN,aAAAA;AAAAA,IAAA,CACD;AAAA,EAAA;AAGH,QAAM,mBAAmB,MAAM;AACpB,aAAA;AAAA,MACP,MAAM;AAAA,IAAA,CACP;AAAA,EAAA;AAGG,QAAA,wBAAwB,CAAC,MAAM;AACnC,MAAE,eAAe;AACR,aAAA;AAAA,MACP,MAAM;AAAA,IAAA,CACP;AACgB;EAAA;AAGb,QAAA,wBAAwB,CAAC,EAAE,QAAQ,EAAE,MAAM,MAAA,QAAc;AACpD,aAAA;AAAA,MACP,MAAM;AAAA,MACN;AAAA,MACA;AAAA,IAAA,CACD;AAAA,EAAA;AAGH,QAAM,sBAAsB,OAAO,QAAQ,UAAU,EAClD;AAAA,IACC,CAAC,CAAC,MAAM,SAAS,MACf,8BAA8B,SAAS,KAAK,CAAC,gBAAgB,SAAS,IAAI;AAAA,EAAA,EAE7E,IAAI,CAAC,CAAC,IAAI,MAAM,IAAI,EACpB;AAEG,QAAA,cAAc,OAAO,QAAQ,UAAU,EAC1C,OAAO,CAAC,CAAA,EAAG,SAAS,MAAM,CAAC,8BAA8B,SAAS,UAAU,IAAI,CAAC,EACjF,IAAI,CAAC,CAAC,IAAI,OAAO;AAAA,IAChB,OAAO;AAAA,IACP,OAAO,OAAO,UAAU,IAAI,EAAE,KAAK;AAAA,EACnC,EAAA;AAEE,QAAA,OAAO,CAAC,eAAe,YAAY;AAC9B,aAAA;AAAA,MACP,MAAM;AAAA,MACN;AAAA,MACA;AAAA,IAAA,CACD;AAAA,EAAA;AAGH,SACGrR,2BAAA,IAAAsR,qBAAA,EACC,UAAC9Q,2BAAAA,KAAAwD,aAAAA,MAAA,EAAK,aAAW,kBACf,UAAA;AAAA,IAACxD,2BAAAA,KAAA,QAAA,EAAK,UAAU,cACd,UAAA;AAAA,MAAAR,2BAAA;AAAA,QAACiE,aAAA;AAAA,QAAA;AAAA,UACC,kBACGjE,2BAAAA,IAAAe,aAAAA,MAAA,EAAK,WAAYf,2BAAAA,IAAAkE,MAAA,WAAA,EAAU,GAAI,IAAI,WAAW,IAAG,WAC/C,wBAAc,EAAE,IAAI,eAAe,gBAAgB,OAAQ,CAAA,GAC9D;AAAA,UAEF,eACElE,2BAAA;AAAA,YAAC4D,aAAA;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,0CAAYQ,MAAM,OAAA,EAAA;AAAA,cAClB,UAAUD,iBAAAA,QAAQ,cAAc,WAAW;AAAA,cAC3C,MAAK;AAAA,cAEJ,wBAAc,EAAE,IAAI,eAAe,gBAAgB,QAAQ;AAAA,YAAA;AAAA,UAC9D;AAAA,UAEF,UAAU,cAAc;AAAA,YACtB,IAAI5D,eAAQ,uEAAuE;AAAA,YACnF,gBAAgB;AAAA,UAAA,CACjB;AAAA,UACD,OAAO;AAAA,YACL;AAAA,cACE,IAAIA,eAAQ,mDAAmD;AAAA,cAC/D,gBAAgB;AAAA,YAClB;AAAA,YACA,EAAE,MAAMkD,oBAAA,QAAW,aAAa,KAAK,WAAW,EAAE;AAAA,UACpD;AAAA,QAAA;AAAA,MACF;AAAA,qCACCY,aAAAA,eACC,EAAA,UAAA7D,2BAAA;AAAA,QAACK,aAAA;AAAA,QAAA;AAAA,UACC,YAAW;AAAA,UACX,YAAW;AAAA,UACX,WAAU;AAAA,UACV,KAAK;AAAA,UACL,WAAS;AAAA,UACT,QAAO;AAAA,UACP,YAAY;AAAA,UACZ,eAAe;AAAA,UACf,aAAa;AAAA,UACb,cAAc;AAAA,UAEd,UAAA;AAAA,YAAAb,2BAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,oBAAoB8C;AAAA,gBACpB;AAAA,gBACA,UAAU;AAAA,gBACV;AAAA,cAAA;AAAA,YACF;AAAA,2CAECwB,aAAQ,SAAA,EAAA;AAAA,YAETtE,2BAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC;AAAA,gBACA;AAAA,gBACA,YAAY;AAAA,gBACZ,kBAAkB;AAAA,gBAClB,aAAa;AAAA,gBACb,eAAe;AAAA,gBACf,WAAW,aAAa;AAAA,cAAA;AAAA,YAC1B;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA,GAEJ;AAAA,IAAA,GACF;AAAA,IAEC,mBACCA,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA,mBAAmB;AAAA,QACnB,cAAc;AAAA,QACd,UAAU;AAAA,QACV,MAAM,aAAa,WAAW,GAAG,QAAQ;AAAA,MAAA;AAAA,IAC3C;AAAA,EAAA,EAEJ,CAAA,EACF,CAAA;AAEJ;AAEA,iBAAiB,YAAY;AAAA,EAC3B,QAAQC,2BAAU,MAAM;AAAA,IACtB,KAAKA,mBAAAA,QAAU,OAAO;AAAA,IACtB,UAAUA,2BAAU,MAAM;AAAA,MACxB,UAAUA,mBAAU,QAAA;AAAA,MACpB,eAAeA,mBAAU,QAAA;AAAA,MACzB,kBAAkBA,mBAAU,QAAA;AAAA,MAC5B,YAAYA,mBAAU,QAAA;AAAA,MACtB,UAAUA,mBAAU,QAAA;AAAA,MACpB,YAAYA,mBAAU,QAAA;AAAA,IACvB,CAAA,EAAE;AAAA,IACH,WAAWA,mBAAAA,QAAU,OAAO;AAAA,IAC5B,SAASA,mBAAAA,QAAU,OAAO;AAAA,IAC1B,YAAYA,mBAAU,QAAA;AAAA,MACpBA,mBAAAA,QAAU,MAAM;AAAA,QACd,MAAMA,mBAAU,QAAA;AAAA,MAAA,CACjB;AAAA,IAAA,EACD;AAAA,EACH,CAAA,EAAE;AAAA,EACH,MAAMA,mBAAAA,QAAU,OAAO;AACzB;ACtRO,MAAM,UAAU,OAAO,EAAE,MAAM4E,QAAAA,WAAS;AAElC,MAAA,mBAAmB,CAAC,YAAY,UAAU;AAAA,EACrD,MAAME,QAAA;AAAA,EACN;AAAA,EACA;AACF;AAEO,MAAM,qBAAqB,OAAO,EAAE,MAAMwM,QAAAA,sBAAsB;AAEhE,SAAS,aAAa;AACpB,SAAA,EAAE,MAAM7M,QAAAA;AACjB;AAEO,MAAM,YAAY,CAAC,EAAE,YAAY,kBAAkB;AAClD,QAAA,EAAE,QAAY,IAAA;AAEb,SAAA;AAAA,IACL;AAAA,IACA;AAAA,IACA,kBAAkB,QAAQ;AAAA,IAC1B,MAAM8M,QAAA;AAAA,EAAA;AAEV;AAEO,MAAM,sBAAsB,CAAC,YAAY,EAAE,MAAMC,gCAAwB,OAAO;AC1BhF,MAAM,SAAS,CAAC,EAAE,uBAAuB;AAC9C,QAAM,CAAC,WAAW,YAAY,IAAI1R,iBAAAA,QAAM,SAAS,KAAK;AAChD,QAAA,EAAE,kBAAkBI,UAAAA;AACpB,QAAA,YAAYJ,yBAAM;AAClB,QAAA,EAAE,eAAeG,aAAAA;AAEvB,QAAM,eAAe,MAAM;AACzB,QAAI,CAAC,WAAW;AACd,iBAAW,mBAAmB;AAAA,IAChC;AACa,iBAAA,CAAC,SAAS,CAAC,IAAI;AAAA,EAAA;AAG9B,SAEIM,2BAAA,KAAA6C,qBAAA,EAAA,UAAA;AAAA,IAAArD,2BAAA;AAAA,MAAC4D,aAAA;AAAA,MAAA;AAAA,QACC,SAAQ;AAAA,QACR,KAAK;AAAA,QACL,0CAAY8N,MAAW,QAAA,EAAA;AAAA,QACvB,SAAS;AAAA,QACT,MAAK;AAAA,QAEJ,wBAAc,EAAE,IAAI,qBAAqB,gBAAgB,WAAW;AAAA,MAAA;AAAA,IACvE;AAAA,IACC,aACC1R,2BAAA;AAAA,MAAC2R,aAAA;AAAA,MAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA,UAAU;AAAA,QACV,QAAQ;AAAA,MAAA;AAAA,IACV;AAAA,IAEF3R,2BAAAA,IAAC4R,aAAmB,oBAAA,EAAA,eAAe,iBAAkB,CAAA;AAAA,EACvD,EAAA,CAAA;AAEJ;AAEA,OAAO,YAAY;AAAA,EACjB,kBAAkB3R,mBAAU,QAAA;AAAA,IAC1BA,mBAAAA,QAAU,MAAM;AAAA,MACd,MAAMA,mBAAAA,QAAU,OAAO;AAAA,MACvB,WAAWA,mBAAU,QAAA,MAAM,EAAE,OAAOA,mBAAAA,QAAU,QAAQ;AAAA,MACtD,aAAaA,mBAAU,QAAA,MAAM,EAAE,MAAMA,mBAAAA,QAAU,QAAQ;AAAA,IAAA,CACxD;AAAA,EAAA,EACD;AACJ;AC5CO,MAAM,mBAAmB,CAAC,EAAE,OAAO,eAAe;AACjD,QAAA,EAAE,kBAAkBE,UAAAA;AAC1B,QAAM,EAAE,OAAO,UAAU,IAAI0R,cAAc,cAAA;AAGzC,SAAA7R,2BAAA;AAAA,IAACyK,aAAA;AAAA,IAAA;AAAA,MACC;AAAA,MACA,cAAY,cAAc;AAAA,QACxB,IAAI;AAAA,QACJ,gBAAgB;AAAA,MAAA,CACjB;AAAA,MACD;AAAA,MACA,SAAS;AAAA,MAER,UAAA,MAAM,IAAI,CAAC,SAAS;AACnB,eACGzK,2BAAAA,IAAAsK,aAAAA,gBAAA,EAA6B,OAAO,KAAK,GAAG,SAAA,GAC1C,UAAA,eAAe,MAAM,aAAa,EADhB,GAAA,KAAK,EAE1B;AAAA,MAAA,CAEH;AAAA,IAAA;AAAA,EAAA;AAGP;AAEA,iBAAiB,YAAY;AAAA,EAC3B,UAAUrK,mBAAAA,QAAU,KAAK;AAAA,EACzB,OAAOA,mBAAU,QAAA;AACnB;AAEA,iBAAiB,eAAe;AAAA,EAC9B,OAAO;AACT;ACrCA,MAAM,sBAAsB;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AACA,MAAM,aAAa,CAAC,aAAa,WAAW;AAE/B,MAAA,uBAAuB,CAAC,aAAa,SAAS;AACnD,QAAA,EAAE,mBAAmB6R,aAAAA;AAErB,QAAA,yBAAyB9B,qCAAwB,gBAAgB;AAAA,IACrE;AAAA,MACE,QAAQ;AAAA,MACR,SAAS;AAAA,IACX;AAAA,EAAA,CACD;AAEK,QAAA,oBACJA,qCAAwB,gBAAgB;AAAA,IACtC;AAAA,MACE,QAAQ;AAAA,MACR,SAAS;AAAA,IACX;AAAA,EAAA,CACD,EAAE,SAAS;AAEd,QAAM,gCAAgC,yBAAyB,CAAC,GAAG,YAAY,UAAU;AAEzF,QAAM,oBAAoB,8BAA8B,OAAO,CAAC,SAAS;AACvE,UAAM,UAAU,aAAa,aAAa,IAAI,KAAK,CAAA;AAE/C,QAAA,CAAC,QAAQ,MAAM;AACV,aAAA;AAAA,IACT;AAEA,QAAI,oBAAoB,SAAS,QAAQ,IAAI,GAAG;AACvC,aAAA;AAAA,IACT;AAEO,WAAA;AAAA,EAAA,CACR;AAEM,SAAA,CAAC,MAAM,GAAG,mBAAmB,GAAG,YAAY,GAAI,oBAAoB,iBAAiB,CAAA,CAAG;AACjG;AC3CA,MAAM,oBAAoB,CAAC,EAAE,MAAM,GAAG,YAAY;AAC1C,QAAA,SAAS+B,yBAAiB,IAAI;AAEpC,MAAI,CAAC,QAAQ;AACJ,WAAA;AAAA,EACT;AAGA,SACG/R,2BAAAA,IAAA,MAAA,EACE,UAAO,OAAA,IAAI,CAAC,UAAU;AACf,UAAA,YAAY,MAAM,UAAU,KAAK;AAEvC,QAAI,WAAW;AACb,4CACGS,aAAqB,KAAA,EAAA,SAAS,GAAG,OAAO,EAAE,WAAW,SACpD,GAAA,UAAAT,+BAAC,MAAM,WAAN,EAAiB,GAAG,MAAO,CAAA,EAAA,GADpB,MAAM,IAEhB;AAAA,IAEJ;AAEO,WAAA;AAAA,EACR,CAAA,EACH,CAAA;AAEJ;AAEA,kBAAkB,YAAY;AAAA,EAC5B,MAAMC,mBAAAA,QAAU,OAAO;AACzB;AC3BO,MAAM,sBAAsB,CAAC;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACE,QAAA,EAAE,kBAAkBE,UAAAA;AAGxB,SAAAK,2BAAA;AAAA,IAACkP,aAAA;AAAA,IAAA;AAAA,MACC,SAAS;AAAA,MACT,OAAO,cAAc;AAAA,QACnB,IAAI;AAAA,QACJ,gBAAgB;AAAA,MAAA,CACjB;AAAA,MACD,YAAW;AAAA,MACX,aAAY;AAAA,MACZ;AAAA,MAEA,UAAA;AAAA,QAAA1P,2BAAA,IAAC2P,aAAW,YAAA,EAAA,MAAO3P,2BAAA,IAAA8J,6BAAA,CAAA,CAAsB,GACvC,UAAAtJ,2BAAAA,KAACK,aAAAA,MAAK,EAAA,WAAU,UAAS,YAAW,WAAU,KAAK,GACjD,UAAA;AAAA,UAAAb,2BAAAA,IAACa,qBAAK,gBAAe,UACnB,yCAACC,aAAAA,YAAW,EAAA,IAAG,uBACZ,UAAc,cAAA;AAAA,YACb,IAAI;AAAA,YACJ,gBAAgB;AAAA,UAAA,CACjB,GACH,EACF,CAAA;AAAA,yCACCD,aAAAA,MACC,EAAA,UAAAb,2BAAA,IAAC,mBAAkB,EAAA,MAAK,qDAAqD,CAAA,GAC/E;AAAA,QAAA,EAAA,CACF,EACF,CAAA;AAAA,QACAA,2BAAA;AAAA,UAAC4P,aAAA;AAAA,UAAA;AAAA,YACC,aACG5P,2BAAAA,IAAA4D,aAAA,QAAA,EAAO,SAAS,gBAAgB,SAAQ,YACtC,UAAc,cAAA;AAAA,cACb,IAAI;AAAA,cACJ,gBAAgB;AAAA,YACjB,CAAA,GACH;AAAA,YAEF,WACE5D,2BAAA;AAAA,cAAC4D,aAAA;AAAA,cAAA;AAAA,gBACC,SAAS;AAAA,gBACT,SAAQ;AAAA,gBACR,0CAAYtC,MAAM,OAAA,EAAA;AAAA,gBAClB,IAAG;AAAA,gBACH,SAAS;AAAA,gBAER,UAAc,cAAA;AAAA,kBACb,IAAI;AAAA,kBACJ,gBAAgB;AAAA,gBAAA,CACjB;AAAA,cAAA;AAAA,YACH;AAAA,UAAA;AAAA,QAEJ;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN;AAEA,oBAAoB,YAAY;AAAA,EAC9B,wBAAwBrB,mBAAAA,QAAU,KAAK;AAAA,EACvC,QAAQA,mBAAAA,QAAU,KAAK;AAAA,EACvB,WAAWA,mBAAAA,QAAU,KAAK;AAAA,EAC1B,gBAAgBA,mBAAAA,QAAU,KAAK;AACjC;AChEA,MAAM,kBAAkB,CAAC,MAAM,EAAE,gBAAgB;AAMjD,MAAM,mBAAmB,CAAC,EAAE,OAAO,OAAAS,aAAY;AAC7C,QAAM,EAAE,iBAAiB,YAAY,IAAIsR,aAAgB,gBAAA;AACnD,QAAA,EAAE,kBAAkB7R,UAAAA;AAC1B,QAAM,YAAY,gBAAgB,UAAU,CAAC,OAAO,OAAO,KAAK,MAAM;AACtE,QAAM,YAAY;AAAA,IAChB;AAAA,MACE,IAAI;AAAA,MACJ,gBAAgB;AAAA,IAClB;AAAA,IACA,EAAE,QAAQO,SAAQ,EAAE;AAAA,EAAA;AAIpB,SAAAV,2BAAA;AAAA,IAACiS,aAAA;AAAA,IAAA;AAAA,MACC,cAAY;AAAA,MACZ,SAAS;AAAA,MACT,SAAS;AAAA,MACT,UAAU,MAAM;AACd,oBAAY,EAAE,MAAM,OAAO,OAAO,CAAC,WAAW;AAAA,MAChD;AAAA,IAAA;AAAA,EAAA;AAGN;AAEA,iBAAiB,YAAY;AAAA,EAC3B,OAAOhS,mBAAAA,QAAU,OAAO;AAAA,EACxB,OAAOA,mBAAAA,QAAU,OAAO;AAC1B;AAMA,MAAM,wBAAwB,CAAC;AAAA,EAC7B;AAAA,EACA,OAAAS;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACE,QAAA,EAAE,kBAAkBP,UAAAA;AACpB,QAAA,EAAE,eAAeD,aAAAA;AACjB,QAAA,EAAE,uBAAuB8R,aAAAA;AAC/B,QAAM,qBAAqB;AACrB,QAAA;AAAA,IACJ,UAAU,EAAE,SAAS;AAAA,MACnBlO,eAAW,WAAA;AAEf,QAAM,eAAe;AAAA,IACnB;AAAA,MACE,IAAI;AAAA,MACJ,gBAAgB;AAAA,IAClB;AAAA,IACA,EAAE,QAAQpD,SAAQ,EAAE;AAAA,EAAA;AAGtB,yCACGG,mBAAK,EAAA,KAAK,GAAG,gBAAe,OAAM,SAAS,iBAC1C,UAAA;AAAA,IAAAb,2BAAA;AAAA,MAACqB,aAAA;AAAA,MAAA;AAAA,QACC,aAAaN,eAAA;AAAA,QACb,SAAS,MAAM;AACb,qBAAW,yBAAyB;AAAA,QACtC;AAAA,QACA,IAAI;AAAA,UACF,UAAU,GAAG,QAAQ,IAAI,KAAK;AAAA,UAC9B,OAAO,EAAE,MAAM,SAAS;AAAA,UACxB,QAAQ;AAAA,QACV;AAAA,QACA,OAAO;AAAA,UACL,EAAE,IAAI,4BAA4B,gBAAgB,gBAAgB;AAAA,UAClE,EAAE,QAAQ,aAAa;AAAA,QACzB;AAAA,QACA,UAAQ;AAAA,QAER,yCAACT,MAAO,QAAA,EAAA;AAAA,MAAA;AAAA,IACV;AAAA,IAEC,aACCN,2BAAA;AAAA,MAACqB,aAAA;AAAA,MAAA;AAAA,QACC,SAAS,iBAAiB,KAAK;AAAA,QAC/B,OAAO;AAAA,UACL;AAAA,YACE,IAAI;AAAA,YACJ,gBAAgB;AAAA,UAClB;AAAA,UACA,EAAE,QAAQ,aAAa;AAAA,QACzB;AAAA,QACA,UAAQ;AAAA,QAER,yCAAC6Q,MAAU,WAAA,EAAA;AAAA,MAAA;AAAA,IACb;AAAA,IAGD,aACClS,2BAAA;AAAA,MAACqB,aAAA;AAAA,MAAA;AAAA,QACC,SAAS,MAAM;AACb,qBAAW,yBAAyB;AACjB,6BAAA,CAAC,KAAK,CAAC;AAC1B,oCAA0B,IAAI;AAAA,QAChC;AAAA,QACA,OAAO;AAAA,UACL,EAAE,IAAI,wBAAwB,gBAAgB,kBAAkB;AAAA,UAChE,EAAE,QAAQ,aAAa;AAAA,QACzB;AAAA,QACA,UAAQ;AAAA,QAER,yCAACC,MAAM,OAAA,EAAA;AAAA,MAAA;AAAA,IACT;AAAA,EAEJ,EAAA,CAAA;AAEJ;AAEA,sBAAsB,eAAe;AAAA,EACnC,WAAW;AAAA,EACX,WAAW;AACb;AAEA,sBAAsB,YAAY;AAAA,EAChC,OAAOrB,mBAAAA,QAAU,OAAO;AAAA,EACxB,OAAOA,mBAAAA,QAAU,OAAO;AAAA,EACxB,2BAA2BA,mBAAAA,QAAU,KAAK;AAAA,EAC1C,kBAAkBA,mBAAAA,QAAU,KAAK;AAAA,EACjC,WAAWA,mBAAU,QAAA;AAAA,EACrB,WAAWA,mBAAU,QAAA;AACvB;AAMA,MAAM,OAAO,CAAC,EAAE,UAAU,iBAAiB,wBAAwB,gCAAgC;AACjG,QAAM,CAAC,WAAW,YAAY,IAAIF,iBAAAA,QAAM,SAAS,KAAK;AACtD,QAAM,EAAE,iBAAiB,mBAAmB,IAAIiS,aAAgB,gBAAA;AAEhE,QAAM,sBAAsB,YAAY;AAClC,QAAA;AACF,mBAAa,IAAI;AACX,YAAA,gBAAgB,gBAAgB,CAAC,CAAC;AACxC,gCAA0B,KAAK;AAC/B,mBAAa,KAAK;AAClB,yBAAmB,CAAE,CAAA;AAAA,aACd,OAAO;AACd,mBAAa,KAAK;AAClB,gCAA0B,KAAK;AAAA,IACjC;AAAA,EAAA;AAIA,SAAAxR,gCAAC2R,aAAAA,MAAM,MAAN,EACE,UAAA;AAAA,IAAA;AAAA,IACDnS,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,wBAAwB;AAAA,QACxB,WAAW;AAAA,QACX,gBAAgB,MAAM,0BAA0B,CAAC,sBAAsB;AAAA,QACvE,QAAQ;AAAA,MAAA;AAAA,IACV;AAAA,EACF,EAAA,CAAA;AAEJ;AAEA,KAAK,YAAY;AAAA,EACf,UAAUC,mBAAAA,QAAU,KAAK;AAAA,EACzB,iBAAiBA,mBAAAA,QAAU,KAAK;AAAA,EAChC,wBAAwBA,mBAAAA,QAAU,KAAK;AAAA,EACvC,2BAA2BA,mBAAAA,QAAU,KAAK;AAC5C;AAEO,MAAM,OAAO,EAAE,kBAAkB,uBAAuB,KAAK;ACpLpE,MAAM,iBAAiB,MAAM,CAAC,UAAU,MAAM,0BAA0B,KAAKpC,QAAAA;AAU7E,MAAM,qBAAqB,MACzBsS,QAAA,eAAe,eAAe,GAAG,CAAC,aAAa;AACtC,SAAA;AACT,CAAC;AAEH,MAAM,yBAAyB,CAAC,UAAU;AACxC,QAAM,EAAE,iBAAA,IAAqB,MAAM,0BAA0B;AAEtD,SAAA;AACT;ACNA,MAAM,0BAA0B,CAAC,EAAE,gBAAgB,QAAQ,YAAY,gBAAgB;AAC/E,QAAA,EAAE,kBAAkBhQ,UAAAA;AAGxB,SAAAK,2BAAA;AAAA,IAACkP,aAAA;AAAA,IAAA;AAAA,MACC,SAAS;AAAA,MACT,OAAO,cAAc;AAAA,QACnB,IAAI;AAAA,QACJ,gBAAgB;AAAA,MAAA,CACjB;AAAA,MACD;AAAA,MAEA,UAAA;AAAA,QAAA1P,+BAAC2P,aAAAA,YAAW,EAAA,MAAO3P,2BAAAA,IAAA8J,MAAAA,uBAAA,CAAsB,CAAA,GACvC,UAAC9J,+BAAAa,aAAAA,MAAA,EAAK,WAAU,UAAS,YAAW,WAAU,KAAK,GAChD,qBACH,CAAA,GACF;AAAA,QACAb,2BAAA;AAAA,UAAC4P,aAAA;AAAA,UAAA;AAAA,YACC,aACG5P,2BAAAA,IAAA4D,aAAA,QAAA,EAAO,SAAS,gBAAgB,SAAQ,YACtC,UAAc,cAAA;AAAA,cACb,IAAI;AAAA,cACJ,gBAAgB;AAAA,YACjB,CAAA,GACH;AAAA,YAEF;AAAA,UAAA;AAAA,QACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN;AAEA,wBAAwB,YAAY;AAAA,EAClC,QAAQ3D,mBAAAA,QAAU,KAAK;AAAA,EACvB,gBAAgBA,mBAAAA,QAAU,KAAK;AAAA,EAC/B,YAAYA,mBAAAA,QAAU,KAAK;AAAA,EAC3B,WAAWA,mBAAAA,QAAU,KAAK;AAC5B;AAEO,MAAM,0BAA0B;AAAA,EACrC,wBAAwBA,mBAAAA,QAAU,KAAK;AAAA,EACvC,QAAQA,mBAAAA,QAAU,KAAK;AAAA,EACvB,WAAWA,mBAAAA,QAAU,KAAK;AAAA,EAC1B,gBAAgBA,mBAAAA,QAAU,KAAK;AACjC;AAMA,MAAMmS,cAAY,CAAC,0CAAYtR,aAAW,YAAA,EAAA,YAAW,QAAQ,UAAO,OAAA,CAAA;AAMpE,MAAM,0BAA0B,CAAC,EAAE,QAAQ,gBAAgB,wBAAwB,gBAAgB;AAC3F,QAAA,EAAE,kBAAkBX,UAAAA;AACpB,QAAA,EAAE,KAAAlC,SAAQgB,aAAAA;AACV,QAAA,EAAE,oBAAoB+S,aAAAA;AAC5B,QAAM,qBAAqBnO,aAAAA;AAC3B,QAAM,EAAE,eAAA,IAAmB0B,aAAA,mBAAmBhF,OAAO,OAAA;AAC/C,QAAA;AAAA,IACJ,aAAa,EAAE,KAAK,KAAK;AAAA,EAAA,IACvB5C,WAAY,YAAA,eAAA,CAAgB;AAChC,QAAM,CAAC,EAAE,OAAO,IAAI+B,aAAe,eAAA;AAE7B,QAAA;AAAA,IACJ,MAAM;AAAA,IACN;AAAA,IACA;AAAA,EAAA,IACEkK,WAAA;AAAA,IACF,CAAC,mBAAmB,mBAAmB,MAAM,eAAe;AAAA,IAC5D,YAAY;AACJ,YAAA;AAAA,QACJ,MAAM,EAAE,KAAK;AAAA,UACX,MAAM3L;AAAA,QACR,qCAAqC,IAAI;AAAA,QACzC;AAAA,UACE,QAAQ;AAAA,YACN,KAAK;AAAA,YACL,QAAQ,OAAO,SAAS,MAAM;AAAA,UAChC;AAAA,QACF;AAAA,MAAA;AAGK,aAAA;AAAA,IACT;AAAA,IACA;AAAA;AAAA,MAEE,SAAS,gBAAgB,SAAS;AAAA,MAClC,QAAQ,OAAO;AACb,2BAAmB,EAAE,MAAM,WAAW,SAAS,eAAe,KAAK,GAAG;AAAA,MACxE;AAAA,IACF;AAAA,EAAA;AAGF,MAAI,SAAS;AACJ,WAAA;AAAA,EACT;AAGE,SAAA+B,2BAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,QAAQ,UAAU,CAAC;AAAA,MACnB;AAAA,MACA,YAEIQ,2BAAA,KAAA6C,qBAAA,EAAA,UAAA;AAAA,QAAA7C,2BAAA,KAACM,aAAW,YAAA,EAAA,IAAG,uBAAsB,WAAU,UAC5C,UAAA;AAAA,UAAA,sBAAsB,KACrB;AAAA,YACE;AAAA,cACE,IAAIP,OAAAA,QAAQ,uDAAuD;AAAA,cACnE,gBACE;AAAA,YACJ;AAAA,YACA;AAAA,cACE,GAAG6R;AAAAA,cACH,OAAO;AAAA,cACP,UAAU,gBAAgB;AAAA,YAC5B;AAAA,UACF;AAAA,UACD,cAAc;AAAA,YACb,IAAI7R,eAAQ,kDAAkD;AAAA,YAC9D,gBAAgB;AAAA,UAAA,CACjB;AAAA,QAAA,GACH;AAAA,QACAP,2BAAAA,IAAC,mBAAkB,EAAA,MAAK,sDAAsD,CAAA;AAAA,MAAA,GAChF;AAAA,MAEF,WACEA,2BAAA;AAAA,QAAC4D,aAAA;AAAA,QAAA;AAAA,UACC,SAAS;AAAA,UACT,SAAQ;AAAA,UACR,0CAAYQ,MAAM,OAAA,EAAA;AAAA,UAClB,SAAS;AAAA,UAER,UAAc,cAAA;AAAA,YACb,IAAI;AAAA,YACJ,gBAAgB;AAAA,UAAA,CACjB;AAAA,QAAA;AAAA,MACH;AAAA,IAAA;AAAA,EAAA;AAIR;AAEA,wBAAwB,YAAY;AC9HpC,MAAMgN,uBAAqBjQ,gBAAAA,QAAOL,aAAAA,UAAU;AAAA;AAAA;AAQ5C,MAAM,sBAAsB,CAAC,EAAE,kBAAkB,kBAAkB;AAC3D,QAAA,EAAE,kBAAkBX,UAAAA;AAE1B,MAAI,kBAAkB;AACpB,UAAM,2BAA2B,OAAO,QAAQ,gBAAgB,EAC7D;AAAA,MAAI,CAAC,CAAC,KAAK,KAAK,MACf;AAAA,QACE,EAAE,IAAI,GAAG,MAAM,EAAE,cAAc,gBAAgB,MAAM,eAAe;AAAA,QACpE,EAAE,OAAO,IAAI;AAAA,MACf;AAAA,IAAA,EAED,KAAK,GAAG;AAGT,WAAAK,2BAAA,KAACK,aAAK,MAAA,EAAA,KAAK,GACT,UAAA;AAAA,MAAAb,2BAAA,IAACkB,aAAK,MAAA,EAAA,OAAM,aAAY,IAAImR,MAAAA,aAAa;AAAA,MACxCrS,+BAAA8G,aAAAA,SAAA,EAAQ,aAAa,0BACpB,yCAACsK,sBAAmB,EAAA,WAAU,aAAY,SAAQ,SAAQ,YAAW,YAAW,UAAQ,MACrF,mCACH,CAAA,GACF;AAAA,IACF,EAAA,CAAA;AAAA,EAEJ;AAEA,MAAI,aAAa;AAEb,WAAA5Q,2BAAA,KAACK,aAAK,MAAA,EAAA,KAAK,GACT,UAAA;AAAA,MAAAb,2BAAA,IAACkB,aAAK,MAAA,EAAA,OAAM,cAAa,IAAI2I,MAAAA,aAAa;AAAA,qCACzC/I,aAAAA,YAAW,EAAA,WAAU,cAAa,YAAW,QAC3C,UAAc,cAAA;AAAA,QACb,IAAI;AAAA,QACJ,gBAAgB;AAAA,MACjB,CAAA,GACH;AAAA,IACF,EAAA,CAAA;AAAA,EAEJ;AAGE,SAAAN,2BAAA,KAACK,aAAK,MAAA,EAAA,KAAK,GACT,UAAA;AAAA,IAAAb,2BAAA,IAACkB,aAAK,MAAA,EAAA,OAAM,cAAa,IAAI2I,MAAAA,aAAa;AAAA,IAC1C7J,2BAAAA,IAACc,2BACE,UAAc,cAAA;AAAA,MACb,IAAI;AAAA,MACJ,gBAAgB;AAAA,IACjB,CAAA,GACH;AAAA,EACF,EAAA,CAAA;AAEJ;AAEA,oBAAoB,eAAe;AAAA,EACjC,kBAAkB;AAAA,EAClB,aAAa;AACf;AAEA,oBAAoB,YAAY;AAAA,EAC9B,kBAAkBb,2BAAU,MAAM;AAAA,IAChC,CAACA,2BAAU,MAAM,GAAGA,2BAAU,MAAM;AAAA,MAClC,IAAIA,mBAAU,QAAA;AAAA,MACd,gBAAgBA,mBAAU,QAAA;AAAA,IAAA,CAC3B;AAAA,EAAA,CACF;AAAA,EACD,aAAaA,mBAAU,QAAA;AACzB;AAMA,MAAM,8BAA8B,CAAC;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACE,QAAA;AAAA,IACJ,UAAU,EAAE,SAAS;AAAA,MACnB6D,eAAW,WAAA;AACT,QAAA,EAAE,kBAAkB3D,UAAAA;AAGpB,QAAA,gBAAgBxC,WAAAA,YAAY,eAAA,CAAgB;AAClD,QAAM,EAAE,UAAc,IAAA,cAAc,YAAY;AAC1C,QAAA,yBAAyB,aAAa,QAAQ,cAAc;AAE5D,QAAA,kBAAkB,CAAC,UACvB;AAAA,IACE;AAAA,MACE,IAAI;AAAA,MACJ,gBAAgB;AAAA,IAClB;AAAA,IACA,EAAE,QAAQ,QAAQ,EAAE;AAAA,EAAA;AAItB,SAAA6C,gCAAC2R,aAAAA,MAAM,SAAN,EACC,UAAA;AAAA,IAAC3R,2BAAAA,KAAA2R,aAAA,MAAM,MAAN,EACC,UAAA;AAAA,MAACnS,+BAAAmS,aAAAA,MAAM,oBAAN,EAAyB;AAAA,MAC1BnS,+BAACmS,aAAAA,MAAM,YAAN,EAAiB,iBAAgB,UAAS,OAAM,MAAK,MAAK,MAAK;AAAA,MAC/D,0BACEnS,2BAAA,IAAAmS,mBAAM,YAAN,EAAiB,iBAAgB,UAAS,OAAM,QAAO,MAAK,OAAO,CAAA;AAAA,MAEtEnS,+BAACmS,aAAAA,MAAM,YAAN,EAAiB,iBAAgB,UAAS,OAAM,UAAS,MAAK,UAAS;AAAA,IAAA,GAC1E;AAAA,IACAnS,+BAACmS,aAAAA,MAAM,aAAN,EAAkB;AAAA,IACnBnS,2BAAAA,IAACmS,aAAAA,MAAM,MAAN,EACE,UAAA,cAAc,IAAI,CAAC,KAAKzR,WACvBF,2BAAAA,KAAC8R,aACC,IAAA,EAAA,UAAA;AAAA,MAACtS,2BAAAA,IAAAuS,aAAAA,IAAA,EACC,yCAAC,KAAK,kBAAL,EAAsB,OAAO,IAAI,IAAI,OAAA7R,OAAA,CAAc,EACtD,CAAA;AAAA,qCACC6R,aACC,IAAA,EAAA,UAAAvS,+BAACc,aAAAA,YAAY,EAAA,UAAA,IAAI,GAAG,CAAA,GACtB;AAAA,MACC,yDACEyR,iBACC,EAAA,UAAAvS,2BAAA,IAACc,2BAAY,UAAI,IAAA,SAAS,GAAE,EAC9B,CAAA;AAAA,MAEFd,2BAAA,IAACuS,aACE,IAAA,EAAA,UAAA,gBAAgB,iBAAiB,SAAS,IAAI,EAAE,IAC/C/R,2BAAA,KAACK,aAAK,MAAA,EAAA,KAAK,GACT,UAAA;AAAA,QAAAb,2BAAAA,IAACc,2BACE,UAAc,cAAA;AAAA,UACb,IAAI;AAAA,UACJ,gBAAgB;AAAA,QACjB,CAAA,GACH;AAAA,QACAd,2BAAAA,IAAC+J,aAAO,QAAA,EAAA,OAAK,KAAC,CAAA;AAAA,MAAA,EAAA,CAChB,IAEA/J,2BAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,kBAAkB,iBAAiB,IAAI,EAAE;AAAA,UACzC,aAAa,IAAI,gBAAgB;AAAA,QAAA;AAAA,MAAA,GAGvC;AAAA,qCACCuS,aAAAA,IACC,EAAA,UAAAvS,2BAAA;AAAA,QAACqB,aAAA;AAAA,QAAA;AAAA,UACC,aAAaN,eAAA;AAAA,UACb,IAAI;AAAA,YACF,UAAU,GAAG,QAAQ,IAAI,IAAI,EAAE;AAAA,YAC/B,OAAO,EAAE,MAAM,SAAS;AAAA,UAC1B;AAAA,UACA,OAAO;AAAA,YACL,EAAE,IAAI,4BAA4B,gBAAgB,gBAAgB;AAAA,YAClE,EAAE,QAAQ,gBAAgBL,MAAK,EAAE;AAAA,UACnC;AAAA,UACA,UAAQ;AAAA,UACR,QAAO;AAAA,UACP,YAAW;AAAA,UAEX,yCAACJ,MAAO,QAAA,EAAA;AAAA,QAAA;AAAA,MAAA,GAEZ;AAAA,IA/CO,EAAA,GAAA,IAAI,EAgDb,CACD,GACH;AAAA,EACF,EAAA,CAAA;AAEJ;AAEA,4BAA4B,eAAe;AAAA,EACzC,cAAc;AAAA,EACd,eAAe,CAAC;AAAA,EAChB,kBAAkB,CAAC;AAAA,EACnB,kBAAkB,CAAC;AACrB;AAEA,4BAA4B,YAAY;AAAA,EACtC,cAAcL,mBAAU,QAAA;AAAA,EACxB,eAAeA,mBAAA,QAAU,QAAQA,mBAAAA,QAAU,MAAM;AAAA,EACjD,kBAAkBA,mBAAA,QAAU,QAAQA,mBAAAA,QAAU,MAAM;AAAA,EACpD,kBAAkBA,2BAAU,MAAM;AAAA,IAChC,CAACA,2BAAU,MAAM,GAAGA,2BAAU,MAAM;AAAA,MAClC,IAAIA,mBAAU,QAAA;AAAA,MACd,gBAAgBA,mBAAU,QAAA;AAAA,IAAA,CAC3B;AAAA,EAAA,CACF;AACH;AAMA,MAAM,YAAY,CAAC,0CAAYa,aAAW,YAAA,EAAA,YAAW,QAAQ,UAAO,OAAA,CAAA;AAMpE,MAAM,8BAA8B,CAAC;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACE,QAAA,EAAE,kBAAkBX,UAAAA;AAC1B,QAAM,EAAE,iBAAiB,MAAM,aAAa,WAAW,WAAA,IAAe6R,aAAAA;AACtE,QAAM,CAAC,cAAc,eAAe,IAAIjS,iBAAAA,QAAM,SAAS,KAAK;AAC5D,QAAM,CAAC,eAAe,gBAAgB,IAAIA,iBAAAA,QAAM,SAAS,CAAA,CAAE;AAC3D,QAAM,CAAC,gBAAgB,iBAAiB,IAAIA,iBAAAA,QAAM,SAAS,CAAC;AAEtD,QAAA,mBAAmB,KACtB,OAAO,CAAC,EAAE,GAAG,MAAM,gBAAgB,SAAS,EAAE,KAAK,CAAC,iBAAiB,EAAE,CAAC,EACxE,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE;AAEf,QAAA,EAAE,SAASd,aAAAA;AACjB,QAAM,qBAAqB4E,aAAAA;AAC3B,QAAM,EAAE,YAAgB,IAAAlG,uBAAY,eAAgB,CAAA;AAEpD,QAAM,iCAAiC,cAAc;AAAA,IACnD,CAAC,EAAE,GAAG,MAAM,gBAAgB,SAAS,EAAE,KAAK,iBAAiB,EAAE;AAAA,EAC/D,EAAA;AACF,QAAM,2BAA2B,cAAc;AAAA,IAC7C,CAAC,EAAE,IAAI,kBAAkB,gBAAgB,SAAS,EAAE,KAAK;AAAA,EACzD,EAAA;AACI,QAAA,mCACJ,gBAAgB,SAAS,iCAAiC;AAE5D,QAAM,sBAAsBoG,WAAA;AAAA,IAC1B,CAAC,SACC,KAAK,qCAAqC,YAAY,GAAG,wBAAwB,IAAI;AAAA,IACvF;AAAA,MACE,YAAY;AACV,cAAM,SAAS,cAAc,OAAO,CAAC,QAAQ;AAC3C,cAAI,iBAAiB,SAAS,IAAI,EAAE,GAAG;AAErC,wBAAY,EAAE,MAAM,IAAI,IAAI,OAAO,OAAO;AAAA,UAC5C;AAGA,iBAAO,CAAC,iBAAiB,SAAS,IAAI,EAAE;AAAA,QAAA,CACzC;AAED,yBAAiB,MAAM;AACvB,cAAM,eAAe,OAAO,IAAI,CAAC,EAAE,GAAA,MAAS,EAAE;AAE9C,0BAAkB,YAAY;AAE9B,mCAA2B,YAAY;AAEnC,YAAA,OAAO,WAAW,GAAG;AACX;QACd;AAEmB,2BAAA;AAAA,UACjB,MAAM;AAAA,UACN,SAAS,EAAE,IAAI,0CAA0C,gBAAgB,YAAY;AAAA,QAAA,CACtF;AAAA,MACH;AAAA,MACA,QAAQ,OAAO;AACM,2BAAA;AAAA,UACjB,MAAM;AAAA,UACN,SAASyO,gCAAgB,KAAK;AAAA,QAAA,CAC/B;AAAA,MACH;AAAA,IACF;AAAA,EAAA;AAGF,QAAM,eAAe,MAAM,gBAAgB,CAAC,SAAS,CAAC,IAAI;AAE1D,QAAM,2BAA2B,YAAY;AAC9B;AACP,UAAA,EAAE,KAAS,IAAA,MAAM,oBAAoB,YAAY,EAAE,KAAK,iBAAA,CAAkB;AAChF,sBAAkB,KAAK,KAAK;AAAA,EAAA;AAG9B,QAAM,2BAA2B,MAAM;AACrC,QAAI,gBAAgB;AACX,aAAA;AAAA,QACL;AAAA,UACE,IAAIjS,eAAQ,yDAAyD;AAAA,UACrE,gBACE;AAAA,QACJ;AAAA,QACA;AAAA,UACE;AAAA,UACA,iBAAiB;AAAA,UACjB,GAAG;AAAA,QACL;AAAA,MAAA;AAAA,IAEJ;AAEO,WAAA;AAAA,MACL;AAAA,QACE,IAAIA,eAAQ,wDAAwD;AAAA,QACpE,gBACE;AAAA,MACJ;AAAA,MACA;AAAA,QACE,qBAAqB;AAAA,QACrB,iBAAiB;AAAA,QACjB,uBAAuB;AAAA,QACvB,GAAG;AAAA,MACL;AAAA,IAAA;AAAA,EACF;AAGFR,mBAAA,QAAM,UAAU,MAAM;AAEhB,QAAA,KAAK,SAAS,GAAG;AAEnB,uBAAiB,IAAI;AAAA,IACvB;AAAA,EAAA,GACC,CAAC,IAAI,CAAC;AAET,SACGS,2BAAAA,KAAA+C,aAAAA,aAAA,EAAY,SAAS,aAAa,YAAW,SAC5C,UAAA;AAAA,IAACvD,2BAAA,IAAAwD,aAAA,aAAA,EACC,UAACxD,2BAAAA,IAAAc,aAAAA,YAAA,EAAW,YAAW,QAAO,WAAU,cAAa,IAAG,MAAK,IAAG,SAC7D,UAAc,cAAA;AAAA,MACb,IAAIP,eAAQ,gDAAgD;AAAA,MAC5D,gBAAgB;AAAA,IAAA,CACjB,GACH,EACF,CAAA;AAAA,oCACCmD,aAAAA,WACC,EAAA,UAAA;AAAA,MAAC1D,2BAAAA,IAAAc,aAAAA,YAAA,EAAY,mCAA2B,EAAA,CAAA;AAAA,MACxCd,2BAAAA,IAACS,aAAAA,KAAI,EAAA,WAAW,GACd,UAAAT,2BAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,cAAc,oBAAoB;AAAA,UAClC;AAAA,UACA;AAAA,UACA;AAAA,QAAA;AAAA,MAAA,GAEJ;AAAA,IAAA,GACF;AAAA,IACAA,2BAAA;AAAA,MAAC2D,aAAA;AAAA,MAAA;AAAA,QACC,cACG3D,2BAAAA,IAAA4D,aAAA,QAAA,EAAO,SAAS,aAAa,SAAQ,YACnC,UAAc,cAAA;AAAA,UACb,IAAI;AAAA,UACJ,gBAAgB;AAAA,QACjB,CAAA,GACH;AAAA,QAEF,YACEpD,2BAAA,KAACK,aAAK,MAAA,EAAA,KAAK,GACT,UAAA;AAAA,UAAAb,2BAAA,IAAC4D,aAAO,QAAA,EAAA,SAAS,kBAAkB,SAAQ,YAAW,SAAS,YAC5D,UAAc,cAAA,EAAE,IAAI,qBAAqB,gBAAgB,UAAW,CAAA,GACvE;AAAA,UACA5D,2BAAA;AAAA,YAAC4D,aAAA;AAAA,YAAA;AAAA,cACC,SAAS;AAAA,cACT,UACE,gBAAgB,WAAW,KAC3B,gBAAgB,WAAW,kCAC3B;AAAA,cAEF,SAAS,oBAAoB;AAAA,cAE5B,wBAAc,EAAE,IAAI,qBAAqB,gBAAgB,WAAW;AAAA,YAAA;AAAA,UACvE;AAAA,QAAA,GACF;AAAA,MAAA;AAAA,IAEJ;AAAA,IACA5D,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,QAAQ;AAAA,QACR,gBAAgB;AAAA,QAChB,wBAAwB,oBAAoB;AAAA,QAC5C,WAAW;AAAA,MAAA;AAAA,IACb;AAAA,EACF,EAAA,CAAA;AAEJ;AAEA,4BAA4B,eAAe;AAAA,EACzC,kBAAkB,CAAC;AACrB;AAEA,4BAA4B,YAAY;AAAA,EACtC,aAAaC,mBAAAA,QAAU,KAAK;AAAA,EAC5B,kBAAkBA,mBAAAA,QAAU,KAAK;AAAA,EACjC,mBAAmBA,mBAAAA,QAAU,KAAK;AAAA,EAClC,4BAA4BA,mBAAAA,QAAU,KAAK;AAAA,EAC3C,kBAAkBA,2BAAU,MAAM;AAAA,IAChC,CAACA,2BAAU,MAAM,GAAGA,2BAAU,MAAM;AAAA,MAClC,IAAIA,mBAAU,QAAA;AAAA,MACd,gBAAgBA,mBAAU,QAAA;AAAA,IAAA,CAC3B;AAAA,EAAA,CACF;AACH;AAMA,MAAM,uBAAuB,CAAC,EAAE,eAAe;AACvC,QAAA;AAAA,IACJ,iBAAiB;AAAA,IACjB,oBAAoB;AAAA,MAClB+R,aAAgB,gBAAA;AACpB,QAAM,EAAE,aAAa,WAAA,IAAerU,WAAAA,YAAY,eAAgB,CAAA;AAEhE,QAAM,CAAC,gBAAgB,iBAAiB,IAAIoC,iBAAAA,QAAM,SAAS,uBAAuB;AAE5E,QAAA;AAAA,IACJ;AAAA,MACE,OAAO,EAAE,MAAM,QAAQ;AAAA,IACzB;AAAA,MACEL,aAAe,eAAA;AAEnB,QAAM,cAAc;AAAA,IAClB,MAAM;AAAA,IACN,UAAU,eAAe;AAAA,IACzB;AAAA,IACA,SAAS;AAAA,MACP,IAAI;AAAA,QACF,KAAK;AAAA,MACP;AAAA,IACF;AAAA,IACA,QAAQ,SAAS,MAAM;AAAA,EAAA;AAGnB,QAAA,EAAE,KAAAzB,SAAQgB,aAAAA;AAEhB,QAAM,EAAE,MAAM,WAAW,YAAY,QAAY,IAAA2K,WAAA;AAAA,IAC/C,CAAC,WAAW,YAAY,KAAK,WAAW;AAAA,IACxC,YAAY;AACJ,YAAA,EAAE,MAAApL,MAAK,IAAI,MAAMP,KAAI,oCAAoC,YAAY,GAAG,IAAI;AAAA,QAChF,QAAQ;AAAA,MAAA,CACT;AAED,UAAIO,MAAK,SAAS;AAChB,cAAMC,WAASqQ,OAAA;AAAA,UACb;AAAA,UACA,EAAE,WAAW;AAAA,UACb,EAAE,SAAS,OAAO,oBAAoB,KAAK;AAAA,QAAA;AAE7C,cAAM,mBAAmB,CAAA;AACzB,cAAM,OAAOtQ,MAAK,QAAQ,IAAI,CAAC,UAAU;AACnC,cAAA;AACFC,qBAAO,aAAa,OAAO,EAAE,YAAY,MAAO,CAAA;AAEzC,mBAAA;AAAA,mBACA,GAAG;AACV,6BAAiB,MAAM,EAAE,IAAIuQ,aAAA,kBAAkB,CAAC;AAEzC,mBAAA;AAAA,UACT;AAAA,QAAA,CACD;AAEM,eAAA,EAAE,MAAM;MACjB;AAEO,aAAA;AAAA,QACL,MAAM,CAAC;AAAA,QACP,kBAAkB,CAAC;AAAA,MAAA;AAAA,IAEvB;AAAA,EAAA;AAIA,SAAAhP,2BAAA;AAAA,IAACmS,aAAAA,MAAM;AAAA,IAAN;AAAA,MACC,MAAM,MAAM;AAAA,MACZ,wBAAwB;AAAA,MACxB,UAAU;AAAA,MACV;AAAA,MACA;AAAA,MAEA,UAAAnS,2BAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC;AAAA,UACA;AAAA,UACA,aAAa;AAAA,UACb,kBAAkB;AAAA,UAClB,kBAAkB,MAAM;AAAA,QAAA;AAAA,MAC1B;AAAA,IAAA;AAAA,EAAA;AAGN;AAEA,qBAAqB,YAAY;AAAA,EAC/B,UAAUC,mBAAAA,QAAU,KAAK;AAC3B;ACxfA,MAAM,4BAA4B,CAAC;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACE,QAAA,EAAE,kBAAkBE,UAAAA;AAGxB,SAAAH,2BAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA,YAEIQ,2BAAA,KAAA6C,qBAAA,EAAA,UAAA;AAAA,QAAArD,+BAACc,aAAAA,YAAW,EAAA,IAAG,uBAAsB,WAAU,UAC5C,UAAc,cAAA;AAAA,UACb,IAAIP,eAAQ,oDAAoD;AAAA,UAChE,gBAAgB;AAAA,QACjB,CAAA,GACH;AAAA,QACAP,2BAAAA,IAAC,mBAAkB,EAAA,MAAK,wDAAwD,CAAA;AAAA,MAAA,GAClF;AAAA,MAEF,WACEA,2BAAA;AAAA,QAAC4D,aAAA;AAAA,QAAA;AAAA,UACC,SAAS;AAAA,UACT,SAAQ;AAAA,UACR,0CAAYQ,MAAM,OAAA,EAAA;AAAA,UAClB,SAAS;AAAA,UAER,UAAc,cAAA;AAAA,YACb,IAAI;AAAA,YACJ,gBAAgB;AAAA,UAAA,CACjB;AAAA,QAAA;AAAA,MACH;AAAA,IAAA;AAAA,EAAA;AAIR;AAEA,0BAA0B,YAAY;AAMtC,MAAM,yBAAyB,CAAC,EAAE,QAAQ,gBAAgB,wBAAwB,gBAAgB;AAC1F,QAAA,EAAE,kBAAkBjE,UAAAA;AAGxB,SAAAH,2BAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA,YAEIQ,2BAAA,KAAA6C,qBAAA,EAAA,UAAA;AAAA,QAAArD,+BAACc,aAAAA,YAAW,EAAA,IAAG,uBAAsB,WAAU,UAC5C,UAAc,cAAA;AAAA,UACb,IAAIP,eAAQ,iDAAiD;AAAA,UAC7D,gBAAgB;AAAA,QACjB,CAAA,GACH;AAAA,QACAP,2BAAAA,IAAC,mBAAkB,EAAA,MAAK,qDAAqD,CAAA;AAAA,MAAA,GAC/E;AAAA,MAEF,WACEA,2BAAA;AAAA,QAAC4D,aAAA;AAAA,QAAA;AAAA,UACC,SAAS;AAAA,UACT,SAAQ;AAAA,UACR,0CAAYtC,MAAM,OAAA,EAAA;AAAA,UAClB,IAAG;AAAA,UACH,SAAS;AAAA,UAER,UAAc,cAAA;AAAA,YACb,IAAI;AAAA,YACJ,gBAAgB;AAAA,UAAA,CACjB;AAAA,QAAA;AAAA,MACH;AAAA,IAAA;AAAA,EAAA;AAIR;AAEA,uBAAuB,YAAY;AAMnC,MAAM,oBAAoB,CAAC;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACE,QAAA,EAAE,kBAAkBnB,UAAAA;AACpB,QAAA,EAAE,eAAeD,aAAAA;AACvB,QAAM,EAAE,KAAS,IAAAvC,uBAAY,eAAgB,CAAA;AAC7C,QAAM,EAAE,iBAAiB,mBAAmB,IAAIqU,aAAgB,gBAAA;AAEhE,QAAM,CAAC,wBAAwB,yBAAyB,IAAIjS,iBAAM,SAAS,KAAK;AAChF,QAAM,CAAC,4BAA4B,6BAA6B,IAAIA,iBAAM,SAAS,KAAK;AACxF,QAAM,CAAC,cAAc,eAAe,IAAIA,iBAAM,SAAS,IAAI;AAGrD,QAAA,yBAAyB,KAAK,OAAO,CAAC,UAAU,gBAAgB,SAAS,MAAM,EAAE,CAAC;AAClF,QAAA,uBACJ,eAAe,uBAAuB,KAAK,CAAC,UAAU,CAAC,MAAM,WAAW;AAC1E,QAAM,yBACJ,eAAe,uBAAuB,KAAK,CAAC,UAAU,MAAM,WAAW;AAEzE,QAAM,qBAAqB,MAAM;AAC/B,QAAI,iBAAiB,UAAU;AAC7B,sBAAgB,IAAI;AAAA,IAAA,OACf;AACL,sBAAgB,QAAQ;AACxB,iBAAW,uBAAuB;AAAA,IACpC;AAAA,EAAA;AAGF,QAAM,wBAAwB,MAAM;AAClC,QAAI,iBAAiB,aAAa;AAChC,sBAAgB,IAAI;AAAA,IAAA,OACf;AACL,sBAAgB,WAAW;AAC3B,iBAAW,0BAA0B;AAAA,IACvC;AAAA,EAAA;AAGI,QAAA,mBAAmB,OAAO,eAAe,iBAAiB;AAC1D,QAAA;AACF,gCAA0B,IAAI;AAC9B,YAAM,cAAc,eAAe;AACnC,gCAA0B,KAAK;AAClB;AACb,yBAAmB,CAAE,CAAA;AAAA,aACd,OAAO;AACd,gCAA0B,KAAK;AAClB;IACf;AAAA,EAAA;AAGF,QAAM,mBAAmB,MAAM,iBAAiB,oBAAoB,kBAAkB;AACtF,QAAM,sBAAsB,MAAM,iBAAiB,uBAAuB,qBAAqB;AAC/F,QAAM,mCAAmC,MAAM;AAC7C,kCAA8B,CAAC,SAAS;AACtC,UAAI,MAAM;AACI;MACd;AAEA,aAAO,CAAC;AAAA,IAAA,CACT;AAAA,EAAA;AAGH,SAEKS,2BAAA,KAAA6C,qBAAA,EAAA,UAAA;AAAA,IAAA,wBAEG7C,2BAAA,KAAA6C,qBAAA,EAAA,UAAA;AAAA,MAAArD,2BAAA,IAAC4D,aAAO,QAAA,EAAA,SAAQ,YAAW,SAAS,kCACjC,UAAA,cAAc,EAAE,IAAI,qBAAqB,gBAAgB,UAAU,CAAC,EACvE,CAAA;AAAA,MACC,8BACC5D,2BAAAA,IAAC,sBAAqB,EAAA,UAAU,iCAAkC,CAAA;AAAA,IAAA,GAEtE;AAAA,IAED,0BAEGQ,2BAAA,KAAA6C,qBAAA,EAAA,UAAA;AAAA,MAAArD,2BAAA,IAAC4D,aAAO,QAAA,EAAA,SAAQ,YAAW,SAAS,uBACjC,UAAA,cAAc,EAAE,IAAI,uBAAuB,gBAAgB,YAAY,CAAC,EAC3E,CAAA;AAAA,MACA5D,2BAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,QAAQ,iBAAiB;AAAA,UACzB,gBAAgB;AAAA,UAChB;AAAA,UACA,WAAW;AAAA,QAAA;AAAA,MACb;AAAA,IAAA,GACF;AAAA,IAED,cAEGQ,2BAAA,KAAA6C,qBAAA,EAAA,UAAA;AAAA,MAAArD,2BAAA,IAAC4D,aAAO,QAAA,EAAA,SAAQ,gBAAe,SAAS,oBACrC,UAAA,cAAc,EAAE,IAAI,iBAAiB,gBAAgB,SAAS,CAAC,EAClE,CAAA;AAAA,MACA5D,2BAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,QAAQ,iBAAiB;AAAA,UACzB,gBAAgB;AAAA,UAChB;AAAA,UACA,WAAW;AAAA,QAAA;AAAA,MACb;AAAA,IAAA,GACF;AAAA,EAEJ,EAAA,CAAA;AAEJ;AAEA,kBAAkB,eAAe;AAAA,EAC/B,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,qBAAqB;AAAA,EAAC;AAAA,EACtB,wBAAwB;AAAA,EAAC;AAAA,EACzB,cAAc;AAAA,EAAC;AACjB;AAEA,kBAAkB,YAAY;AAAA,EAC5B,aAAaC,mBAAU,QAAA;AAAA,EACvB,YAAYA,mBAAU,QAAA;AAAA,EACtB,oBAAoBA,mBAAU,QAAA;AAAA,EAC9B,uBAAuBA,mBAAU,QAAA;AAAA,EACjC,aAAaA,mBAAU,QAAA;AACzB;ACjOA,MAAM,YAAY,CAAC,EAAE,MAAM,YAAY;AACrC,QAAM,EAAE,YAAY,YAAY,iBAAiBE,UAAQ,QAAA;AACzD,MAAI,iBAAiB;AAErB,MAAI,SAAS,QAAQ;AACnB,qBAAiB,WAAWsS,0BAAS,KAAK,GAAG,EAAE,WAAW,QAAQ;AAAA,EACpE;AAEA,MAAI,SAAS,YAAY;AACvB,qBAAiB,WAAW,OAAO,EAAE,WAAW,QAAQ,WAAW,SAAS;AAAA,EAC9E;AAEA,MAAI,SAAS,QAAQ;AACnB,UAAM,CAAC,MAAM,QAAQ,MAAM,IAAI,MAAM,MAAM,GAAG;AACxC,UAAA,2BAAW;AACjB,SAAK,SAAS,IAAI;AAClB,SAAK,WAAW,MAAM;AACtB,SAAK,WAAW,MAAM;AAEtB,qBAAiB,WAAW,MAAM;AAAA,MAChC,SAAS;AAAA,MACT,OAAO;AAAA,IAAA,CACR;AAAA,EACH;AAEA,MAAI,CAAC,SAAS,SAAS,EAAE,SAAS,IAAI,GAAG;AACvC,qBAAiB,aAAa,OAAO;AAAA;AAAA;AAAA,MAGnC,uBAAuB;AAAA,IAAA,CACxB;AAAA,EACH;AAEA,MAAI,CAAC,WAAW,YAAY,EAAE,SAAS,IAAI,GAAG;AAC5C,qBAAiB,aAAa,OAAO,EAAE,uBAAuB,EAAG,CAAA;AAAA,EACnE;AAEA,SAAOhF,kBAAAA,QAAS,cAAc;AAChC;AAEA,UAAU,YAAY;AAAA,EACpB,MAAMxN,mBAAAA,QAAU,OAAO;AAAA,EACvB,OAAOA,mBAAAA,QAAU,IAAI;AACvB;AC1CA,MAAM,UAAUkB,gBAAAA,QAAON,aAAAA,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA,sBAKL,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,UAAU;AAAA,gBAC5C,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAStD,MAAM,cAAc,CAAC,EAAE,UAAU,GAAG,YAAY;AAC9C,wCACG,SAAQ,EAAA,gBAAe,UAAS,YAAW,UAAS,IAAG,QAAQ,GAAG,OACjE,yCAACC,yBAAW,EAAA,SAAQ,SAAQ,WAAU,cACnC,UACH,EACF,CAAA;AAEJ;AAEA,YAAY,YAAY;AAAA,EACtB,UAAUb,mBAAAA,QAAU,OAAO;AAC7B;ACzBA,MAAM,QAAQ,CAAC,EAAE,KAAK,MAAM,iBAAiB,MAAM,KAAK,cAAc;AAC9D,QAAA,UAAU6I,yCAA4B,GAAG;AAE3C,MAAA,KAAK,SAAS,OAAO,GAAG;AACpB,UAAA,YAAY,SAAS,WAAW,OAAO;AACvC,UAAA,WAAWA,aAAAA,4BAA4B,SAAS,KAAK;AAEpD,WAAA9I,+BAAC0S,aAAAA,UAAO,KAAK,UAAU,KAAK,mBAAmB,MAAM,SAAO,KAAC,CAAA;AAAA,EACtE;AAEM,QAAA,gBAAgBC,8BAAiB,GAAG;AACpC,QAAA,WAAW,KAAK,SAAS,MAAM,GAAG,KAAK,UAAU,GAAG,GAAG,CAAC,QAAQ;AAEtE,wCACG7L,aAAQ,SAAA,EAAA,aAAa,UACpB,UAAC9G,+BAAA,aAAA,EAAa,wBAAc,CAAA,EAC9B,CAAA;AAEJ;AAEA,MAAM,eAAe;AAAA,EACnB,iBAAiB;AAAA,EACjB,SAAS;AACX;AAEA,MAAM,YAAY;AAAA,EAChB,iBAAiBC,mBAAU,QAAA;AAAA,EAC3B,KAAKA,mBAAAA,QAAU,OAAO;AAAA,EACtB,SAASA,mBAAU,QAAA;AAAA,EACnB,MAAMA,mBAAAA,QAAU,OAAO;AAAA,EACvB,MAAMA,mBAAAA,QAAU,OAAO;AAAA,EACvB,KAAKA,mBAAAA,QAAU,OAAO;AACxB;AChCA,MAAM,gBAAgB,CAAC,EAAE,YAAY;AACnC,wCACG2S,aACE,aAAA,EAAA,UAAA,MAAM,IAAI,CAAC,MAAMlS,WAAU;AAC1B,UAAM,MAAM,GAAG,KAAK,EAAE,GAAGA,MAAK;AAE9B,QAAIA,WAAU,GAAG;AACf,YAAM,iBAAiB,IAAI,MAAM,SAAS,CAAC;AAE3C,aACGV,2BAAA,IAAA,aAAA,EAAsB,SAAS,OAC7B,4BADe,GAElB;AAAA,IAEJ;AAEA,QAAIU,SAAQ,GAAG;AACN,aAAA;AAAA,IACT;AAEA,WAAQV,2BAAAA,IAAA,OAAA,EAAiB,GAAG,KAAA,GAAT,GAAe;AAAA,EACnC,CAAA,EACH,CAAA;AAEJ;AAEA,cAAc,YAAY;AAAA,EACxB,OAAOC,mBAAU,QAAA;AAAA,IACfA,mBAAAA,QAAU,MAAM;AAAA,MACd,iBAAiBA,mBAAU,QAAA;AAAA,MAC3B,KAAKA,mBAAAA,QAAU,OAAO;AAAA,MACtB,SAASA,mBAAU,QAAA;AAAA,MACnB,MAAMA,mBAAAA,QAAU,OAAO;AAAA,MACvB,MAAMA,mBAAAA,QAAU,OAAO;AAAA,MACvB,KAAKA,mBAAAA,QAAU,OAAO;AAAA,IAAA,CACvB;AAAA,EAAA,EACD;AACJ;AChCA,MAAM,mBAAmB,CAAC,EAAE,aAAa,WAAW,MAAM,UAAU,OAAO,kBAAkB;AACrF,QAAA,EAAE,kBAAkBE,UAAAA;AACpB,QAAA,EAAE,iBAAiB0S,aAAAA;AACzB,QAAM,CAAC,QAAQ,SAAS,IAAInR,eAAS,KAAK;AAEpC,QAAA,EAAE,KAAAzD,SAAQgB,aAAAA;AAEV,QAAA,EAAE,MAAM,OAAA,IAAW2K,WAAA;AAAA,IACvB,CAAC,YAAY,aAAa,QAAQ;AAAA,IAClC,YAAY;AACJ,YAAA;AAAA,QACJ,MAAM,EAAE,SAAS,WAAW;AAAA,UAC1B,MAAM3L;AAAA,QACR,8BAA8B,YAAY,GAAG,IAAI,QAAQ,IAAI,KAAK,MAAM,GAAG,EAAE,CAAC,CAAC;AAAA,MAAA;AAG1E,aAAA,EAAE,SAAS;IACpB;AAAA,IACA;AAAA,MACE,SAAS;AAAA,MACT,WAAW;AAAA,MACX,QAAQ,CAACO,WAAU;AAAA,QACjB,GAAGA;AAAAA,QACH,SAAS,CAAC,GAAGA,MAAK,OAAO,EAAE,QAAQ;AAAA,MAAA;AAAA,IAEvC;AAAA,EAAA;AAGFa,QAAAA,UAAU,MAAM;AACd,QAAI,MAAM;AACR;AAAA,QACE,cAAc;AAAA,UACZ,IAAIkB,eAAQ,8BAA8B;AAAA,UAC1C,gBAAgB;AAAA,QAAA,CACjB;AAAA,MAAA;AAAA,IAEL;AAAA,EACC,GAAA,CAAC,MAAM,eAAe,YAAY,CAAC;AAGpC,SAAAC,2BAAA,KAACuB,QAAK,MAAL,EAAU,cAAc,CAAC+Q,YAAW,UAAUA,OAAM,GACnD,UAAA;AAAA,IAAA9S,2BAAA,IAAC+S,eAAY,EAAA,SAAS,CAAC,MAAM,EAAE,gBAC7B,GAAA,UAAAvS,2BAAA,KAACK,aAAK,MAAA,EAAA,KAAK,GAAG,MAAK,UACjB,UAAA;AAAA,MAACb,2BAAAA,IAAAgT,aAAAA,OAAA,EAAO,gBAAM,MAAM,CAAA;AAAA,MACnB;AAAA,QACC;AAAA,UACE,IAAI;AAAA,UACJ,gBAAgB;AAAA,QAClB;AAAA,QACA,EAAE,QAAQ,MAAM,MAAM;AAAA,MACxB;AAAA,IAAA,EAAA,CACF,EACF,CAAA;AAAA,IACAxS,2BAAAA,KAACuB,GAAK,KAAA,SAAL,EACE,UAAA;AAAA,MAAW,WAAA,aACT/B,2BAAA,IAAA+B,GAAA,KAAK,MAAL,EAAU,UAAQ,MACjB,UAAC/B,2BAAAA,IAAA+J,aAAAA,QAAA,EAAO,OAAK,MACV,UAAc,cAAA;AAAA,QACb,IAAIxJ,eAAQ,gCAAgC;AAAA,QAC5C,gBAAgB;AAAA,MAAA,CACjB,GACH,EACF,CAAA;AAAA,MAGD,WAAW,aAEPC,2BAAAA,KAAA6C,WAAA,UAAA,EAAA,UAAA;AAAA,QAAA,MAAM,QAAQ,IAAI,CAAC,UACjBrD,2BAAA,IAAA+B,GAAA,KAAK,MAAL,EAAyB,UAAQ,MAChC,UAAC/B,+BAAAoR,sBAAA,EAAmB,UAAQ,MAC1B,UAAApR,2BAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAM,UAAU,UAAU,OAAO;AAAA,YACjC,OAAO,MAAM,UAAU,UAAU,IAAI,KAAK,MAAM;AAAA,UAAA;AAAA,QAEpD,EAAA,CAAA,EAAA,GANc,MAAM,EAOtB,CACD;AAAA,QAEA,MAAM,WAAW,QAAQ,MACxBA,2BAAA;AAAA,UAAC+B,GAAAA,KAAK;AAAA,UAAL;AAAA,YACC,iBAAa;AAAA,YACb,cAAY,cAAc;AAAA,cACxB,IAAIxB,eAAQ,6BAA6B;AAAA,cACzC,gBAAgB;AAAA,YAAA,CACjB;AAAA,YAED,UAAAP,2BAAAA,IAACc,aAAAA,cAAW,UAAC,IAAA,CAAA;AAAA,UAAA;AAAA,QACf;AAAA,MAAA,GAEJ;AAAA,IAAA,GAEJ;AAAA,EACF,EAAA,CAAA;AAEJ;AAEA,iBAAiB,YAAY;AAAA,EAC3B,aAAab,2BAAU,MAAM;AAAA,IAC3B,KAAKA,mBAAAA,QAAU,OAAO;AAAA,EACvB,CAAA,EAAE;AAAA,EACH,aAAaA,2BAAU,MAAM;AAAA,IAC3B,UAAUA,mBAAU,QAAA;AAAA,IACpB,aAAaA,mBAAU,QAAA;AAAA,IACvB,MAAMA,mBAAAA,QAAU,OAAO;AAAA,EACxB,CAAA,EAAE;AAAA,EACH,WAAWA,2BAAU,MAAM;AAAA,IACzB,WAAWA,2BAAU,MAAM;AAAA,MACzB,MAAMA,mBAAAA,QAAU,OAAO;AAAA,MACvB,QAAQA,mBAAAA,QAAU,MAAM,EAAE,MAAMA,mBAAAA,QAAU,OAAO,WAAY,CAAA,EAAE;AAAA,IAAA,CAChE;AAAA,EACF,CAAA,EAAE;AAAA,EACH,MAAMA,mBAAAA,QAAU,OAAO;AAAA,EACvB,UAAUA,mBAAAA,QAAU,UAAU,CAACA,mBAAAA,QAAU,QAAQA,mBAAA,QAAU,MAAM,CAAC,EAAE;AAAA,EACpE,OAAOA,mBAAAA,QAAU,OAAO;AAC1B;AAEA,MAAMmR,uBAAqBjQ,gBAAAA,QAAOL,aAAAA,UAAU;AAAA;AAAA;AAO5C,MAAMiS,gBAAc5R,gBAAO,QAAAY,QAAK,OAAO;AAAA;AAAA,aAE1B,IAAI,EAAE;AAAA,cACL,IAAI,EAAE;AAAA;AAAA;ACnIpB,MAAMqP,uBAAqBjQ,gBAAAA,QAAOL,aAAAA,UAAU;AAAA;AAAA;AAI5C,MAAM,iBAAiB,CAAC,EAAE,WAAW,YAAY;AAC/C,SACGd,2BAAA,IAAAoR,sBAAA,EAAmB,WAAU,cAAa,UAAQ,MACjD,UAAApR,2BAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAM,UAAU,UAAU,OAAO;AAAA,MACjC,OAAO,MAAM,UAAU,UAAU,IAAI,KAAK,MAAM;AAAA,IAAA;AAAA,EAEpD,EAAA,CAAA;AAEJ;AAEA,eAAe,YAAY;AAAA,EACzB,WAAWC,2BAAU,MAAM;AAAA,IACzB,WAAWA,2BAAU,MAAM;AAAA,MACzB,MAAMA,mBAAAA,QAAU,OAAO;AAAA,MACvB,QAAQA,mBAAAA,QAAU,MAAM,EAAE,MAAMA,mBAAAA,QAAU,OAAO,WAAY,CAAA,EAAE;AAAA,IAAA,CAChE;AAAA,EACF,CAAA,EAAE;AAAA,EACH,OAAOA,mBAAAA,QAAU,OAAO;AAC1B;ACrBA,MAAMmR,uBAAqBjQ,gBAAAA,QAAOL,aAAAA,UAAU;AAAA;AAAA;AAI5C,MAAM,0BAA0B,CAAC,EAAE,OAAO,gBAAgB;AAClD,QAAA,EAAE,kBAAkBX,UAAAA;AACpB,QAAA;AAAA,IACJ,WAAW,EAAE,MAAM,eAAe,MAAM,cAAc;AAAA,EACpD,IAAA;AAGF,SAAAK,gCAACuB,GAAAA,KAAK,MAAL,EACC,UAAA;AAAA,IAAAvB,gCAAC,eAAY,SAAS,CAAC,MAAM,EAAE,gBAC7B,GAAA,UAAA;AAAA,MAACR,2BAAAA,IAAAgT,aAAAA,OAAA,EAAO,gBAAM,OAAO,CAAA;AAAA,MAAS;AAAA,MAC7B;AAAA,QACC;AAAA,UACE,IAAI;AAAA,UACJ,gBAAgB;AAAA,QAClB;AAAA,QACA,EAAE,QAAQ,MAAM,OAAO;AAAA,MACzB;AAAA,IAAA,GACF;AAAA,IACChT,2BAAA,IAAA+B,GAAA,KAAK,SAAL,EACE,gBAAM,IAAI,CAAC,SACV/B,2BAAA,IAAC+B,GAAK,KAAA,MAAL,EAAwB,UAAQ,MAC/B,UAAC/B,2BAAAA,IAAAoR,sBAAA,EAAmB,UAAQ,MAC1B,UAACpR,2BAAAA,IAAA,WAAA,EAAU,MAAM,eAAe,OAAO,KAAK,aAAa,KAAK,KAAK,IAAI,EACzE,CAAA,EAAA,GAHc,KAAK,EAIrB,CACD,GACH;AAAA,EACF,EAAA,CAAA;AAEJ;AAEA,wBAAwB,YAAY;AAAA,EAClC,WAAWC,2BAAU,MAAM;AAAA,IACzB,WAAWA,2BAAU,MAAM;AAAA,MACzB,MAAMA,mBAAU,QAAA;AAAA,MAChB,MAAMA,mBAAU,QAAA;AAAA,MAChB,OAAOA,mBAAU,QAAA;AAAA,IAAA,CAClB;AAAA,EACF,CAAA,EAAE;AAAA,EACH,OAAOA,mBAAAA,QAAU,MAAM;AACzB;AAKA,MAAM,cAAckB,gBAAO,QAAAY,QAAK,OAAO;AAAA;AAAA,aAE1B,IAAI,EAAE;AAAA,cACL,IAAI,EAAE;AAAA;AAAA;ACtDpB,MAAMqP,uBAAqBjQ,gBAAAA,QAAOL,aAAAA,UAAU;AAAA;AAAA;AAI5C,MAAM,sBAAsB,CAAC,EAAE,OAAO,gBAAgB;AAC9C,QAAA,EAAE,UAAc,IAAA;AAChB,QAAA,UAAU,MAAM,UAAU,IAAI;AAEpC,wCACGgG,aAAAA,SAAQ,EAAA,OAAO,SACd,UAAC9G,2BAAAA,IAAAoR,sBAAA,EAAmB,WAAU,cAAa,UAAQ,MACjD,UAAApR,2BAAA,IAAC,aAAU,MAAM,UAAU,MAAM,OAAO,QAAA,CAAS,EACnD,CAAA,EACF,CAAA;AAEJ;AAEA,oBAAoB,YAAY;AAAA,EAC9B,WAAWC,2BAAU,MAAM;AAAA,IACzB,WAAWA,2BAAU,MAAM;AAAA,MACzB,MAAMA,mBAAU,QAAA;AAAA,MAChB,MAAMA,mBAAU,QAAA;AAAA,MAChB,OAAOA,mBAAU,QAAA;AAAA,IAAA,CAClB;AAAA,EACF,CAAA,EAAE;AAAA,EACH,OAAOA,mBAAAA,QAAU,OAAO;AAC1B;AClCA,SAAwB,iBAAiB,MAAM;AAC7C,SAAO,CAAC,YAAY,aAAa,eAAe,EAAE,SAAS,IAAI;AACjE;ACKA,SAAwB,WAAW,MAAM,SAAS,WAAW,aAAa;AACxE,MAAI,SAAS,aAAa;AAClB,UAAA;AAAA,MACJ,WAAW,EAAE,MAAM,eAAe,MAAM,cAAc;AAAA,IACpD,IAAA;AAIJ,QAAI,aAAa,YAAY;AAC3B,aAAO,QAAQ,SAAS;AAAA,IAC1B;AAEM,UAAA,QAAQ,UAAU,aAAa;AAGjC,QAAA,kBAAkB,QAAQ,CAAC,CAAC,QAAW,IAAI,EAAE,SAAS,KAAK,GAAG;AACzD,aAAA;AAAA,IACT;AAQA,QACEgT,OAAAA,kBAAkB,aAAa,KAC/B,kBAAkB,gBAClB,kBAAkB,MAClB;AACA,aAAOC,kBAAAA,QAAS,KAAK;AAAA,IACvB;AAEO,WAAA,CAACnE,iBAAAA,QAAQ,KAAK;AAAA,EACvB;AAEA,MAAI,SAAS,YAAY;AACnB,QAAA,iBAAiB,YAAY,QAAQ,GAAG;AACnC,aAAA,CAACA,iBAAAA,QAAQ,OAAO;AAAA,IACzB;AAEA,WAAO,SAAS,QAAQ;AAAA,EAC1B;AAMA,MAAIkE,yBAAkB,IAAI,KAAK,SAAS,cAAc;AACpD,WAAOC,kBAAAA,QAAS,OAAO;AAAA,EACzB;AAEA,MAAI,SAAS,WAAW;AACtB,WAAO,YAAY;AAAA,EACrB;AAEO,SAAA,CAACnE,iBAAAA,QAAQ,OAAO;AACzB;AChDA,MAAM,qBAAqB5N,gBAAAA,QAAOL,aAAAA,UAAU;AAAA;AAAA;AAI5C,MAAM,cAAc,CAAC,EAAE,SAAS,aAAa,WAAW,MAAM,OAAO,kBAAkB;AAC/E,QAAA,EAAE,KAAS,IAAA;AAEjB,MAAI,CAAC,WAAW,MAAM,SAAS,WAAW,WAAW,GAAG;AACtD,WAAQd,2BAAAA,IAAAc,aAAAA,YAAA,EAAW,WAAU,cAAa,UAAC,IAAA,CAAA;AAAA,EAC7C;AAEA,UAAQ,MAAM;AAAA,IACZ,KAAK;AACC,UAAA,CAAC,YAAY,UAAU;AAClB,eAAAd,2BAAA,IAAC,OAAO,EAAA,GAAG,QAAS,CAAA;AAAA,MAC7B;AAEO,aAAAA,2BAAA,IAACmT,eAAe,EAAA,OAAO,QAAS,CAAA;AAAA,IAEzC,KAAK,YAAY;AACX,UAAA,iBAAiB,YAAY,QAAQ,GAAG;AAC1C,eAAQnT,2BAAAA,IAAA,gBAAA,EAAe,WAAsB,OAAO,QAAS,CAAA;AAAA,MAC/D;AAGE,aAAAA,2BAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC;AAAA,UACA;AAAA,UACA,OAAO;AAAA,UACP;AAAA,UACA,UAAU;AAAA,UACV;AAAA,QAAA;AAAA,MAAA;AAAA,IAGN;AAAA,IAEA,KAAK;AACC,UAAA,YAAY,eAAe,MAAM;AACnC,eAAQA,2BAAAA,IAAAgO,yBAAA,EAAoB,OAAO,SAAS,UAAsB,CAAA;AAAA,MACpE;AAEA,aAAQhO,2BAAAA,IAAAoT,qBAAA,EAAgB,OAAO,SAAS,UAAsB,CAAA;AAAA,IAEhE,KAAK;AACH,4CACGtM,sBAAQ,EAAA,aAAa,SACpB,UAAA9G,+BAAC,sBAAmB,UAAQ,MAAC,WAAU,cACrC,yCAAC,WAAU,EAAA,MAAY,OAAO,QAAS,CAAA,GACzC,EACF,CAAA;AAAA,IAGJ;AAEI,aAAAA,2BAAAA,IAAC,oBAAmB,EAAA,UAAQ,MAAC,WAAU,cACrC,UAAAA,2BAAAA,IAAC,WAAU,EAAA,MAAY,OAAO,QAAA,CAAS,EACzC,CAAA;AAAA,EAEN;AACF;AAEA,YAAY,eAAe;AAAA,EACzB,SAAS;AACX;AAEA,YAAY,YAAY;AAAA,EACtB,SAASC,mBAAU,QAAA;AAAA,EACnB,aAAaA,2BAAU,MAAM;AAAA,IAC3B,KAAKA,mBAAAA,QAAU,OAAO;AAAA,EACvB,CAAA,EAAE;AAAA,EACH,aAAaA,2BAAU,MAAM;AAAA,IAC3B,WAAWA,mBAAU,QAAA;AAAA,IACrB,UAAUA,mBAAU,QAAA;AAAA,IACpB,MAAMA,mBAAAA,QAAU,OAAO;AAAA,IACvB,YAAYA,mBAAU,QAAA;AAAA,IACtB,UAAUA,mBAAU,QAAA;AAAA,EACrB,CAAA,EAAE;AAAA,EACH,WAAWA,mBAAAA,QAAU,OAAO;AAAA,EAC5B,MAAMA,mBAAAA,QAAU,OAAO;AAAA,EACvB,OAAOA,mBAAAA,QAAU,UAAU,CAACA,mBAAAA,QAAU,QAAQA,mBAAA,QAAU,MAAM,CAAC,EAAE;AACnE;ACnFA,MAAM,kBAAkBkB,gBAAAA,QAAON,aAAAA,IAAI;AAAA;AAAA,wBAEX,CAAC,UAAU,MAAM,MAAM,OAAO,UAAU;AAAA;AAAA;AAIzD,MAAM,cAAc,CAAC,EAAE,aAAa;AACzC,QAAM,WAAWf,WAAAA;AACX,QAAA,mBAAmBnC,uBAAY,sBAAsB;AACrD,QAAA,EAAE,eAAeuC,aAAAA;AACvB,QAAM,EAAE,eAAe,OAAO,IAAIC,UAAQ,QAAA;AACpC,QAAA,YAAY+Q,yBAAY,QAAQ;AAAA,IACpC,aAAa;AAAA,EAAA,CACd;AAEK,QAAA,UAAU,OAAO,KAAK,OAAO,YAAY,UAAU,EACtD,OAAO,CAAC,SAAS,8BAA8B,OAAO,YAAY,WAAW,IAAI,CAAC,CAAC,EACnF,IAAI,CAAC,UAAU;AAAA,IACd;AAAA,IACA,OAAO,OAAO,YAAY,UAAU,IAAI,EAAE,KAAK;AAAA,EAC/C,EAAA,EACD,KAAK,CAAC,GAAG,MAAM,UAAU,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC;AAErD,QAAM,sBAAsB,iBAAiB,IAAI,CAAC,EAAE,KAAA,MAAW,IAAI;AAE7D,QAAA,eAAe,CAAC,SAAS;AAC7B,eAAW,0BAA0B;AAC5B,aAAA,oBAAoB,EAAE,MAAM,OAAO,oBAAoB,SAAS,IAAI,EAAG,CAAA,CAAC;AAAA,EAAA;AAGnF,QAAM,cAAc,MAAM;AACxB,aAAS,oBAAoB;AAAA,EAAA;AAI7B,SAAA1Q,gCAACK,aAAAA,QAAK,IAAG,YAAW,WAAU,UAAS,YAAW,WAAU,KAAK,GAC/D,UAAA;AAAA,IAACL,2BAAAA,KAAAK,aAAAA,MAAA,EAAK,gBAAe,iBACnB,UAAA;AAAA,MAAAb,2BAAAA,IAACc,2BAAW,IAAG,UAAS,SAAQ,MAAK,YAAW,QAC7C,UAAc,cAAA;AAAA,QACb,IAAI;AAAA,QACJ,gBAAgB;AAAA,MACjB,CAAA,GACH;AAAA,MAECd,2BAAA,IAAA0K,aAAA,YAAA,EAAW,SAAS,aAClB,UAAc,cAAA;AAAA,QACb,IAAI;AAAA,QACJ,gBAAgB;AAAA,MACjB,CAAA,GACH;AAAA,IAAA,GACF;AAAA,IAEA1K,2BAAAA,IAACa,qBAAK,WAAU,UAAS,YAAW,WACjC,UAAA,QAAQ,IAAI,CAAC,WAAW;AACvB,YAAM,WAAW,oBAAoB,SAAS,OAAO,IAAI;AAGvD,aAAAL,2BAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,KAAK;AAAA,UACL,IAAG;AAAA,UACH,YAAY,WAAW,eAAe;AAAA,UACtC,WAAS;AAAA,UACT,SAAS;AAAA,UAGT,UAAA;AAAA,YAAAR,2BAAA;AAAA,cAACiS,aAAA;AAAA,cAAA;AAAA,gBACC,UAAU,MAAM,aAAa,OAAO,IAAI;AAAA,gBACxC,OAAO;AAAA,gBACP,MAAM,OAAO;AAAA,cAAA;AAAA,YACf;AAAA,YACCjS,2BAAA,IAAAc,aAAA,YAAA,EAAW,UAAU,GAAI,iBAAO,OAAM;AAAA,UAAA;AAAA,QAAA;AAAA,QAPlC,OAAO;AAAA,MAAA;AAAA,IAUjB,CAAA,GACH;AAAA,EACF,EAAA,CAAA;AAEJ;AAEA,YAAY,YAAY;AAAA,EACtB,QAAQb,2BAAU,MAAM;AAAA,IACtB,aAAaA,2BAAU,MAAM;AAAA,MAC3B,YAAYA,mBAAAA,QAAU,OAAO;AAAA,MAC7B,WAAWA,mBAAAA,QAAU,OAAO;AAAA,MAC5B,SAASA,2BAAU,MAAM;AAAA,QACvB,MAAMA,mBAAAA,QAAU,MAAM;AAAA,MACvB,CAAA,EAAE;AAAA,MACH,SAASA,mBAAAA,QAAU,OAAO;AAAA,MAC1B,UAAUA,mBAAAA,QAAU,OAAO;AAAA,IAC5B,CAAA,EAAE;AAAA,EACJ,CAAA,EAAE;AACL;AC7FO,MAAM,mBAAmB,CAAC,EAAE,MAAM,aAAa;AACpD,QAAM,CAAC,WAAW,YAAY,IAAIF,iBAAAA,QAAM,SAAS,KAAK;AAChD,QAAA,eAAeA,yBAAM;AACrB,QAAA3B,eAAcT,uBAAYyS,iBAAAA,sBAAsB;AAChD,QAAA,EAAE,kBAAkBjQ,UAAAA;AAE1B,QAAM,eAAe,MAAM;AACZ,iBAAA,CAAC,SAAS,CAAC,IAAI;AAAA,EAAA;AAG9B,SAEIK,2BAAA,KAAA6C,qBAAA,EAAA,UAAA;AAAA,IAAArD,2BAAA;AAAA,MAACqB,aAAA;AAAA,MAAA;AAAA,QACC,qCAAOL,MAAI,KAAA,EAAA;AAAA,QACX,OAAO,cAAc;AAAA,UACnB,IAAI;AAAA,UACJ,gBAAgB;AAAA,QAAA,CACjB;AAAA,QACD,KAAK;AAAA,QACL,SAAS;AAAA,MAAA;AAAA,IACX;AAAA,IACC,aACChB,2BAAA;AAAA,MAACkH,aAAA;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,SAAS;AAAA,QACT,SAAS;AAAA,QAET,0CAACrG,mBAAK,EAAA,YAAW,WAAU,WAAU,UAAS,KAAK,GACjD,UAAA;AAAA,UAAAb,2BAAA;AAAA,YAACI,aAAA;AAAA,YAAA;AAAA,cACC,aAAahC,aAAY,eAAe;AAAA,cAExC,UAAA4B,2BAAA;AAAA,gBAACK,aAAA;AAAA,gBAAA;AAAA,kBACC,MAAK;AAAA,kBACL,0CAAYuQ,MAAM,OAAA,EAAA;AAAA,kBAClB,IAAI,GAAG,IAAI;AAAA,kBACX,SAAQ;AAAA,kBAEP,UAAc,cAAA;AAAA,oBACb,IAAI;AAAA,oBACJ,gBAAgB;AAAA,kBAAA,CACjB;AAAA,gBAAA;AAAA,cACH;AAAA,YAAA;AAAA,UACF;AAAA,UAEA5Q,+BAAC,eAAY,QAAgB;AAAA,QAAA,GAC/B;AAAA,MAAA;AAAA,IACF;AAAA,EAEJ,EAAA,CAAA;AAEJ;AAEA,iBAAiB,YAAY;AAAA,EAC3B,MAAMC,mBAAAA,QAAU,OAAO;AAAA,EACvB,QAAQA,2BAAU,MAAM;AAAA,IACtB,aAAaA,2BAAU,MAAM;AAAA,MAC3B,YAAYA,mBAAAA,QAAU,OAAO;AAAA,MAC7B,WAAWA,mBAAAA,QAAU,OAAO;AAAA,MAC5B,SAASA,2BAAU,MAAM;AAAA,QACvB,MAAMA,mBAAAA,QAAU,MAAM;AAAA,MACvB,CAAA,EAAE;AAAA,MACH,SAASA,mBAAAA,QAAU,OAAO;AAAA,MAC1B,UAAUA,mBAAAA,QAAU,OAAO;AAAA,IAC5B,CAAA,EAAE;AAAA,EACJ,CAAA,EAAE;AACL;ACfA,MAAM,EAAE,uBAA2B,IAAA+Q;AACnC,MAAM,6BAA6B;AACnC,MAAM,kCAAkC,MAAM;AAC9C,MAAM,4BAA4B,CAAA;AAClC,MAAM,yBAAyB,CAAC,GAAG,gBAAgB,iBAAiB;AAEpE,SAAS,SAAS,EAAE,WAAW,WAAW,SAAS,YAAY,QAAQ,QAAQ;AAC7E,QAAM,WAAWlR,WAAAA;AACjB,QAAM,WAAEZ,YAAA,kBAAS4F,oBAAiB,IAAI/E,iBAAM;AAAA,IAC1C,MACEsT,QAAA;AAAA,MACE,EAAE,SAA0B,iBAA2C;AAAA,MACvE;AAAA,IACF;AAAA,IACF,CAAC,QAAQ;AAAA,EAAA;AAEX,QAAM,EAAE,YAAY,WAAW,KAAS,IAAAC,QAAA,iBAAiB,oBAAoB;AACvE,QAAA,EAAE,MAAU,IAAA;AACZ,QAAA,EAAE,YAAgB,IAAA;AAClB,QAAA;AAAA,IACJ;AAAA,IACA,SAAAxQ;AAAA,IACA;AAAA,IACA,UAAU,EAAE,UAAU,YAAY,YAAY,cAAc,YAAY,aAAa;AAAA,EACnF,IAAA;AACJ,QAAM,CAAC,wBAAwB,yBAAyB,IAAI/C,iBAAM,SAAS,KAAK;AAChF,QAAM,qBAAqB8D,aAAAA;AACrB,QAAA,EAAE,eAAe3D,aAAAA;AACvB,QAAM,EAAE,gBAAgB,mBAAmB,IAAI4R,aAAgB,gBAAA;AACzD,QAAA,gBAAgB/R,iBAAM,OAAO,UAAU;AACvC,QAAA,sBAAsBA,iBAAM,OAAO,kBAAkB;AACrD,QAAA,EAAE,iBAAiB8S,aAAAA;AACzB,QAAM,EAAE,eAAA,IAAmBtN,aAAA,mBAAmBhF,OAAO,OAAA;AAC/C,QAAA,oBAAoB,qBAAqB,aAAa,IAAI;AAChE,QAAM,CAAC,EAAE,OAAO,IAAIb,aAAe,eAAA;AAC7B,QAAA,EAAE,aAAaC,eAAAA;AACf,QAAA,EAAE,SAASmE,eAAAA;AACjB,QAAM,EAAE,eAAe,OAAO,IAAI3D,UAAQ,QAAA;AAC1C,QAAM,cAAclB,aAAAA;AACd,QAAA,YAAYiS,yBAAY,QAAQ;AAAA,IACpC,aAAa;AAAA,EAAA,CACd;AAED,QAAM,kBACJ,OAAO,SAAS,MAAM,OAAO,CAAC,KAAK,WAAW;AACtC,UAAA,CAAC,KAAK,KAAK,IAAI,OAAO,QAAQ,MAAM,EAAE,CAAC;AAC7C,UAAM,KAAK,MAAM,IAAI,OAAO,MAAM,IAAI;AAIlC,QAAA,uBAAuB,SAAS,GAAG,KAAK,CAAC,IAAI,SAAS,EAAE,GAAG;AAC7D,UAAI,KAAK,EAAE;AAAA,IACb;AAEO,WAAA;AAAA,EAAA,GACN,CAAA,CAAE,KAAK;AAEZ,QAAM,EAAE,OAAO,WAAW,oBAAwB,IAAAW,cAAA;AAAA,IAChD,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,oBAAoB;AAAA,IAC1C;AAAA;AAAA;AAAA,MAGE,SACE,gBAAgB,SAAS,KACzB7B,aAAAA,wBAAwB,gBAAgB;AAAA,QACtC;AAAA,UACE,QAAQ;AAAA,UACR,SAAS;AAAA,QACX;AAAA,MAAA,CACD,EAAE,SAAS;AAAA,IAChB;AAAA,EAAA;AAGmBuD,eAAAA;AAEf,QAAA,SAASxT,iBAAM,QAAQ,MAAM,oBAAoB,KAAK,GAAG,CAAC,KAAK,CAAC;AAChE,QAAA,qBAAqBN,aAAU,EAAE,SAAS,MAAM,WAAW,EAAE,QAAQ,MAAA,CAAO;AAElF,QAAM,4BAA4B,kBAAkB,IAAI,CAAC,SAAS;AAC1D,UAAA,YAAY,YAAY,WAAW,IAAI;AAC7C,UAAM,EAAE,MAAM,MAAMqD,UAAAA,IAAY;AAEhC,UAAM,eAAe;AAAA,MACnB,MAAM;AAAA,MACN,YAAY,EAAE,aAAa,SAAS,WAAW;AAAA,IAAA;AAGjD,UAAM,EAAE,WAAW,MAAA,IAAU,UAAU,IAAI,EAAE;AAE7C,UAAM,SAAS;AAAA,MACb;AAAA,MACA,WAAW,EAAE,OAAO,cAAc,EAAE,IAAI,OAAO,gBAAgB,MAAM,CAAC,EAAE;AAAA,MACxE,aAAa,EAAE,MAAM,SAAAA,WAAS,UAAU;AAAA,MACxC;AAAA,IAAA;AAGF,QAAI,UAAU,SAAS,cAAc,UAAU,WAAW,eAAe;AACvE,aAAO,YAAY;AAAA,QACjB,GAAG,OAAO;AAAA,QACV,iBAAiB;AAAA,UACf;AAAA,YACE,WAAW;AAAA,cACT,IAAI;AAAA,cACJ,gBAAgB;AAAA,YAClB;AAAA,YACA,OAAO;AAAA,UACT;AAAA,UACA;AAAA,YACE,WAAW;AAAA,cACT,IAAI;AAAA,cACJ,gBAAgB;AAAA,YAClB;AAAA,YACA,OAAO;AAAA,UACT;AAAA,QACF;AAAA,QACA,aAAa;AAAA,QACb,SAAS,MAAM,IAAI,CAAC,UAAU;AAAA,UAC5B,OAAO,eAAe,MAAM,aAAa;AAAA,UACzC,aAAa,KAAK,GAAG,SAAS;AAAA,QAAA,EAC9B;AAAA,MAAA;AAGJ,aAAO,YAAY,YAAY;AAAA,QAC7B,GAAG;AAAA,QACH,MAAM;AAAA,MAAA;AAAA,IAEV;AAEO,WAAA;AAAA,EAAA,CACR;AAEK,QAAA,qBAAqBA,UAAS,mBAAmB;AACjD,QAAA,qBAAqBA,UAAS,mBAAmB;AAEvD,QAAM,wBAAwBwN,QAAA;AAAA,IAC5B;AAAA,IACA,aAEI,MAAM,qCACJ,yBACF,CAAA,GACA;AAAA,IACJ;AAAA,MACE,SAAS,CAAC,CAACxN,UAAS;AAAA,IACtB;AAAA,EAAA;AAEF,QAAM,yBAAyBwN,QAAA;AAAA,IAC7B;AAAA,IACA,YAAY;AACV,YAAM,EAAE,wBAAwB,0BAA8B,IAAA,MAAM,QAAA,QAAA,EAAA,KAAA,MAAA,QAClE,qBACF,CAAA;AAEO,aAAA,EAAE,wBAAwB;IACnC;AAAA,IACA;AAAA,MACE,SAAS;AAAA,IACX;AAAA,EAAA;AAGF,QAAM,uBAAuBA,QAAA;AAAA,IAC3B;AAAA,IACA,aAEI,MAAM,qCACJ,yBACF,CAAA,GACA;AAAA,IACJ;AAAA,MACE,QAAQ,WAAW,WAAW;AACrB,eAAA;AAAA,UACL,GAAG;AAAA,UACH,GAAG,UACA,OAAO,CAAC,aAAa;AAGhB,gBAAA,SAAS,SAAS,mBAAmB;AACvC,qBACEN,aAAAA,wBAAwB,gBAAgB;AAAA,gBACtC;AAAA,kBACE,QAAQ;AAAA,kBACR,SAAS;AAAA,gBACX;AAAA,cAAA,CACD,EAAE,SAAS;AAAA,YAEhB;AAEO,mBAAA;AAAA,UAAA,CACR,EACA,IAAI,CAAC,cAAc;AAAA,YAClB,GAAG;AAAA,YACH,WAAW;AAAA,cACT,GAAG,SAAS;AAAA;AAAA;AAAA,cAGZ,GAAI,SAAS,SAAS,iBAAiB,EAAE,KAAK,YAAY,IAAI,IAAI,CAAC;AAAA;AAAA,cAGnE,OAAO,cAAc,SAAS,UAAU,KAAK;AAAA;AAAA;AAAA,cAI7C,SACE,SAAS,SAAS,qBAClB,MAAM,IAAI,CAAC,UAAU;AAAA,gBACnB,OAAO,eAAe,MAAM,aAAa;AAAA,gBACzC,aAAa,KAAK,GAAG,SAAS;AAAA,cAAA,EAC9B;AAAA,YACN;AAAA,UAAA,EACA;AAAA,QAAA;AAAA,MAER;AAAA,MAEA,cAAc,CAAC;AAAA;AAAA;AAAA;AAAA,MAKf,SAAS,sBAAsB,CAAC;AAAA,IAClC;AAAA,EAAA;AAGI,QAAA,EAAE,MAAM,IAAQ,IAAA;AAEtB,QAAM,wBAAwBjM,WAAA;AAAA,IAC5B,CAACvF,UACC,KAAK,qCAAqC,YAAY,GAAG,0BAA0BA,KAAI;AAAA,IACzF;AAAA,MACE,YAAY;AACS,2BAAA;AAAA,UACjB,MAAM;AAAA,UACN,SAAS;AAAA,YACP,IAAI;AAAA,YACJ,gBAAgB;AAAA,UAClB;AAAA,QAAA,CACD;AAED,kBAAU,qCAAqC,IAAI,IAAI,EAAE,QAAQ;AAAA,MACnE;AAAA,MACA,QAAQ,OAAO;AACM,2BAAA;AAAA,UACjB,MAAM;AAAA,UACN,SAAS,eAAe,KAAK;AAAA,QAAA,CAC9B;AAAA,MACH;AAAA,IACF;AAAA,EAAA;AAMI,QAAA,gBAAgBuB,iBAAM,OAAO,EAAE;AAIrC,QAAM,YAAYA,iBAAM;AAAA,IACtB,OAAO,UAAU+C,cAAY;AACnB5D,MAAAA;AAEJ,UAAA;AACI,cAAA;AAAA,UACJ,MAAM,EAAE,SAAS,YAAY,iBAAiB;AAAA,QAC5C,IAAA,MAAM,YAAY,IAAI,UAAU4D,SAAO;AAG3C,YAAI,iBAAiB,OAAO,iBAAiB,aAAa,iBAAiB,YAAY,GAAG;AACxF,gBAAM0Q,SAAQ;AAAA,YACZ,GAAG;AAAA,YACH,MAAM,iBAAiB;AAAA,UAAA;AAGpB,eAAA;AAAA,YACH;AAAA,YACA,OAAO,EAAE,MAAM,SAAS;AAAA,YACxB,QAAQ/T,aAAU+T,MAAK;AAAA,UAAA,CACxB;AAED;AAAA,QACF;AAEA;AAAA,UACE;AAAA,YACE;AAAA,cACE,IAAIjT,eAAQ,mBAAmB;AAAA,cAC/B,gBACE;AAAA,YACJ;AAAA;AAAA,YAEA,EAAE,QAAQ,iBAAiB,MAAM;AAAA,UACnC;AAAA,QAAA;AAGFuE,QAAAA,oBAAiB,kBAAkB,OAAO;AAAA,eACnC,KAAK;AACR,YAAA1F,eAAA,QAAM,SAAS,GAAG,GAAG;AACvB;AAAA,QACF;AAEM,cAAA,YAAY,KAAK,UAAU,UAAU;AAE3C,YAAI,cAAc,KAAK;AACrB,gBAAM,oBAAoB;AAEP,6BAAA;AAAA,YACjB,MAAM;AAAA,YACN,SAAS,EAAE,IAAImB,OAAA,QAAQ,gCAAgC,EAAE;AAAA,UAAA,CAC1D;AAED,eAAK,GAAG;AAER;AAAA,QACF;AAEmB,2BAAA;AAAA,UACjB,MAAM;AAAA,UACN,SAAS,EAAE,IAAIA,OAAA,QAAQ,mBAAmB,EAAE;AAAA,QAAA,CAC7C;AAAA,MACH;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACArB;AAAAA,MACA4F;AAAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EAAA;AAGF,QAAM,6BAA6B/E,iBAAM;AAAA,IACvC,OAAO,QAAQ;AACT,UAAA;AACI,cAAA,KAAK,qCAAqC,IAAI,uBAAuB;AAAA,UACzE;AAAA,QAAA,CACD;AAED,kBAAU,qCAAqC,IAAI,IAAI,EAAE,QAAQ;AAEjE,sBAAc,QAAQ,sBAAsB;AAAA,eACrC,KAAK;AACO,2BAAA;AAAA,UACjB,MAAM;AAAA,UACN,SAAS,eAAe,GAAG;AAAA,QAAA,CAC5B;AAAA,MACH;AAAA,IACF;AAAA,IACA,CAAC,MAAM,oBAAoB,gBAAgB,MAAM,WAAW,MAAM;AAAA,EAAA;AAGpE,QAAM,0BAA0BA,iBAAM;AAAA,IACpC,OAAO,eAAe;AAChB,UAAA;AACF,cAAM,IAAI,qCAAqC,IAAI,IAAI,UAAU,EAAE;AAE7D,cAAA,aAAa,qCAAqC,IAAI;AAClD,kBAAA,YAAY,EAAE,OAAA,CAAQ;AAEb,2BAAA;AAAA,UACjB,MAAM;AAAA,UACN,SAAS,EAAE,IAAIQ,OAAA,QAAQ,uBAAuB,EAAE;AAAA,QAAA,CACjD;AAAA,eACM,KAAK;AACO,2BAAA;AAAA,UACjB,MAAM;AAAA,UACN,SAAS,eAAe,GAAG;AAAA,QAAA,CAC5B;AAAA,MACH;AAAA,IACF;AAAA,IACA,CAAC,MAAM,oBAAoB,gBAAgB,KAAK,WAAW,MAAM;AAAA,EAAA;AAG7D,QAAA,gCAAgC,CAAC,oBAAoB;AACzD,WAAO,sBAAsB,YAAY,EAAE,KAAK,gBAAiB,CAAA;AAAA,EAAA;AAGnER,mBAAM,UAAU,MAAM;AACpB,UAAM,cAAcX,eAAM,QAAA;AACpB,UAAA,SAAS,YAAY;AAE3B,UAAM,oBAAoB;AACpB,UAAA,aAAa,qCAAqC,IAAI;AAE5D,QAAI,qBAAqB,WAAW,SAAS,cAAc,OAAO,GAAG;AACnE,gBAAU,YAAY,EAAE,aAAa,OAAO,OAAO,QAAQ;AAAA,IAC7D;AAEA,WAAO,MAAM;AACX,oBAAc,UAAU;AAExB,aAAO,OAAO,iCAAiC;AAAA,IAAA;AAAA,EACjD,GACC,CAAC,SAASF,YAAS,MAAM,QAAQ4F,qBAAkB,SAAS,CAAC;AAEhE,QAAM,2BAA2B,cAAc;AAAA,IAC7C,IAAIvE,eAAQ,aAAa;AAAA,IACzB,gBAAgB;AAAA,EAAA,CACjB;AACD,QAAM,oBAAoB,cAAc;AAAA,IACtC,IAAI,KAAK;AAAA,IACT,gBAAgB,KAAK,eAAe;AAAA,EAAA,CACrC;AAEK,QAAA,EAAE,qBAAqB0Q,aAAAA;AACvB,QAAA,mBAAmBqC,yBAAiB,sBAAsB;AAE1D,QAAA,eAAevT,iBAAM,QAAQ,MAAM;AACjC,UAAA,UAAU,iBAAiB,wBAAwB;AAAA,MACvD;AAAA,MACA;AAAA,IAAA,CACD;AAED,UAAM,mBAAmB,QAAQ,iBAAiB,IAAI,CAAC,WAAW;AAC1D,YAAA,EAAE,WAAA0T,WAAc,IAAA;AAElB,UAAA,OAAO,YAAY,SAAS,YAAY;AACpC,cAAA,iBAAiB,GAAG,OAAO,IAAI,IAAI,OAAO,UAAU,UAAU,IAAI;AAEjE,eAAA;AAAA,UACL,GAAG;AAAA,UACH,WAAW;AAAA,YACT,GAAGA;AAAAA,YACH,OAAO,cAAc;AAAA,cACnB,IAAIlT,OAAA,QAAQ,qCAAqC,OAAO,IAAI,EAAE;AAAA,cAC9D,gBAAgBkT,WAAU;AAAA,YAAA,CAC3B;AAAA,UACH;AAAA,UACA,MAAM;AAAA,QAAA;AAAA,MAEV;AAEO,aAAA;AAAA,QACL,GAAG;AAAA,QACH,WAAW;AAAA,UACT,GAAGA;AAAAA,UACH,OAAO,cAAc;AAAA,YACnB,IAAIlT,OAAA,QAAQ,qCAAqC,OAAO,IAAI,EAAE;AAAA,YAC9D,gBAAgBkT,WAAU;AAAA,UAAA,CAC3B;AAAA,QACH;AAAA,MAAA;AAAA,IACF,CACD;AAED,QAAI,oBAAoB;AACtB,uBAAiB,KAAK;AAAA,QACpB,KAAK;AAAA,QACL,MAAM;AAAA,QACN,aAAa;AAAA,UACX,MAAM;AAAA,QACR;AAAA,QACA,WAAW;AAAA,UACT,OAAO,cAAc;AAAA,YACnB,IAAIlT,OAAAA,QAAQ,+CAA+C;AAAA,YAC3D,gBAAgB;AAAA,UAAA,CACjB;AAAA,UACD,YAAY;AAAA,UACZ,UAAU;AAAA,QACZ;AAAA,MAAA,CACD;AAAA,IACH;AAEA,QAAI,uBAAuB;AAEH,4BAAA,IAAI,CAAC,WAAW;AACpC,YAAI,OAAO,OAAO,UAAU,UAAU,UAAU;AAC9C,iBAAO,UAAU,QAAQ,cAAc,OAAO,UAAU,KAAK;AAAA,QAC/D;AAEO,eAAA;AAAA,MAAA,CACR;AAEgB,uBAAA,KAAK,GAAG,qBAAqB;AAAA,IAChD;AAEO,WAAA;AAAA,EAAA,GACN;AAAA,IACD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,CACD;AAED,QAAM,WAAW,UACb;AAAA,IACE;AAAA,MACE,IAAIA,eAAQ,gCAAgC;AAAA,MAC5C,gBAAgB;AAAA,IAClB;AAAA,IACA,EAAE,QAAQ,MAAM;AAAA,EAElB,IAAA;AAEE,QAAA,kBAAkB,CAAC,UACvB,YACEP,2BAAA;AAAA,IAAC4D,aAAA;AAAA,IAAA;AAAA,MACE,GAAG;AAAA,MACJ,aAAa8P,eAAA;AAAA,MACb,SAAS,MAAM;AACb,cAAM,kBAAkB,qBAAqB,EAAE,QAAQ,QAAA,IAAY,CAAA;AAErD,sBAAA,QAAQ,mBAAmB,eAAe;AAAA,MAC1D;AAAA,MACA,IAAI;AAAA,QACF,UAAU,GAAG,QAAQ;AAAA,QACrB,QAAQ,MAAM,UAAU,qBAAqB;AAAA,MAC/C;AAAA,MACA,0CAAY1R,MAAK,MAAA,EAAA;AAAA,MACjB,OAAO,EAAE,gBAAgB,OAAO;AAAA,MAE/B,UAAc,cAAA;AAAA,QACb,IAAIzB,eAAQ,qCAAqC;AAAA,QACjD,gBAAgB;AAAA,MAAA,CACjB;AAAA,IAAA;AAAA,EAED,IAAA;AAOA,QAAA,iBAAiB,CAAC,OAAO,MAAM;AACnC,eAAW,uBAAuB;AAC7B,SAAA;AAAA,MACH,UAAU,GAAG,QAAQ,IAAI,EAAE;AAAA,MAC3B,OAAO,EAAE,MAAM,SAAS;AAAA,MACxB,QAAQ;AAAA,IAAA,CACT;AAAA,EAAA;AAGG,QAAA,mBAAmB,CAAC,OAAO,YAAY;AACvC,QAAA;AACF,YAAM,EAAE,MAAA/B,MAAK,IAAI,MAAM;AAAA,QACrB,qCAAqC,YAAY,GAAG,eAAe,EAAE,IAAI,kBAAkB;AAAA,MAAA;AAG7F,UAAI,QAAQA,OAAM;AACX,aAAA;AAAA,UACH,UAAU,GAAG,QAAQ,IAAIA,MAAK,EAAE;AAAA,UAChC,OAAO,EAAE,MAAM,SAAS;AAAA,UACxB,QAAQ;AAAA,QAAA,CACT;AAAA,MACH;AAAA,aACO,KAAK;AACZ,UAAI,eAAemV,MAAAA,YAAY;AACxB,aAAA;AAAA,UACH,UAAU,GAAG,QAAQ,iBAAiB,EAAE;AAAA,UACxC,OAAO,EAAE,MAAM,UAAU,OAAO,eAAe,GAAG,EAAE;AAAA,UACpD,QAAQ;AAAA,QAAA,CACT;AAAA,MACH;AAAA,IACF;AAAA,EAAA;AAII,QAAA,WAAW,aAAa,SAAS;AAGvC,QAAM,cAAc,MAAM;AACxB,cAAU,qCAAqC,IAAI,IAAI,EAAE,QAAQ;AAAA,EAAA;AAInE,MAAI,CAAC,wBAAwB;AACpB,WAAA;AAAA,EACT;AAGE,SAAAnT,2BAAA,KAACwD,aAAK,MAAA,EAAA,aAAW,WACf,UAAA;AAAA,IAAAhE,2BAAA;AAAA,MAACiE,aAAA;AAAA,MAAA;AAAA,QACC,eAAe,gBAAgB;AAAA,QAC/B;AAAA,QACA,OAAO;AAAA,QACP,iDACGlD,mBAAK,EAAA,0CAAYmD,iBAAU,CAAA,CAAA,GAAI,IAAG,qBAChC,UAAc,cAAA;AAAA,UACb,IAAI;AAAA,UACJ,gBAAgB;AAAA,QACjB,CAAA,GACH;AAAA,MAAA;AAAA,IAEJ;AAAA,IACC,CAAC,WACClE,2BAAAA,IAAA4T,aAAA,cAAA,EAAa,YAAa5T,+BAAA2Q,QAAAA,eAAA,EAAc,MAAK,kCAAA,CAAkC,EAAI,CAAA;AAAA,IAErF,WACC3Q,2BAAA;AAAA,MAAC4T,aAAA;AAAA,MAAA;AAAA,QACC,YAEIpT,2BAAA,KAAA6C,qBAAA,EAAA,UAAA;AAAA,UAACrD,2BAAAA,IAAA2Q,QAAA,eAAA,EAAc,MAAK,kCAAkC,CAAA;AAAA,UACtD3Q,2BAAAA,IAAC,kBAAiB,EAAA,MAAY,OAAgB,CAAA;AAAA,QAAA,GAChD;AAAA,QAEF,cAEKQ,2BAAA,KAAA6C,qBAAA,EAAA,UAAA;AAAA,UACC,gBAAArD,2BAAA;AAAA,YAAC6T,aAAA;AAAA,YAAA;AAAA,cACC,OAAO;AAAA,gBACL,EAAE,IAAI,8BAA8B,gBAAgB,sBAAsB;AAAA,gBAC1E,EAAE,QAAQ,kBAAkB;AAAA,cAC9B;AAAA,cACA,aAAa,cAAc;AAAA,gBACzB,IAAI;AAAA,gBACJ,gBAAgB;AAAA,cAAA,CACjB;AAAA,cACD,cAAa;AAAA,YAAA;AAAA,UACf;AAAA,UAED,gBAAgB,CAAC,uBAChB7T,2BAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,kBAAkB,CAAC,GAAG,2BAA2B,GAAG,oBAAoB,EAAE;AAAA,gBACxE,CAAC,GAAG,MAAM,UAAU,QAAQ,EAAE,UAAU,OAAO,EAAE,UAAU,KAAK;AAAA,cAClE;AAAA,YAAA;AAAA,UACF;AAAA,QAAA,GAEJ;AAAA,MAAA;AAAA,IAEJ;AAAA,IAEFA,2BAAAA,IAACqE,aAAAA,eACE,EAAA,UAAA,UACE7D,2BAAA,KAAAK,aAAA,MAAA,EAAK,KAAK,GAAG,WAAU,UAAS,YAAW,WAC1C,UAAA;AAAA,MAAAL,gCAAC2R,aAAAA,MAAM,MAAN,EAAW,MAAM,MAAM,WAAsB,UAC5C,UAAA;AAAA,QAACnS,2BAAAA,IAAAmS,aAAA,MAAM,WAAN,EACC,UAAAnS,2BAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,aAAa,cAAc;AAAA,YAC3B,YAAY;AAAA,YACZ,oBAAoB;AAAA,YACpB,uBAAuB;AAAA,YACvB;AAAA,UAAA;AAAA,QAAA,GAEJ;AAAA,QACAQ,2BAAAA,KAAC2R,aAAM,MAAA,SAAN,EACC,UAAA;AAAA,UAAC3R,2BAAAA,KAAA2R,aAAA,MAAM,MAAN,EAEC,UAAA;AAAA,YAACnS,+BAAAmS,aAAAA,MAAM,oBAAN,EAAyB;AAAA,YAEzB,aAAa,IAAI,CAAC,EAAE,aAAa,KAAK,MAAM,WAAAsB,WAAAA,MAC3CzT,2BAAA;AAAA,cAACmS,aAAAA,MAAM;AAAA,cAAN;AAAA,gBAEC;AAAA,gBACA,iBAAiB,YAAY;AAAA,gBAC7B,mBAAmBsB,WAAU,WAAW;AAAA,gBACxC,YAAYA,WAAU;AAAA,gBACtB,OAAOA,WAAU;AAAA,cAAA;AAAA,cALZ;AAAA,YAAA,CAOR;AAAA,YAEDzT,+BAACmS,aAAAA,MAAM,yBAAN,EAA8B;AAAA,UAAA,GACjC;AAAA,UAEAnS,+BAACmS,aAAAA,MAAM,aAAN,EAAkB;AAAA,UAEnBnS,2BAAA;AAAA,YAACmS,aAAAA,MAAM;AAAA,YAAN;AAAA,cACC,aAAa;AAAA,cACb,QAAQ,gBAAgB,EAAE,SAAS,aAAa;AAAA,YAAA;AAAA,UAClD;AAAA,UAEAnS,2BAAA;AAAA,YAAC,KAAK;AAAA,YAAL;AAAA,cACC,iBAAiB;AAAA,cACjB;AAAA,cACA;AAAA,cAEC,UAAK,KAAA,IAAI,CAAC,SAASU,WAAU;AAE1B,uBAAAF,gCAAC8R,aAAAA,MAAG,QAAO,WAA2B,SAAS,eAAe,QAAQ,EAAE,GAEtE,UAAA;AAAA,kBAACtS,2BAAAA,IAAAuS,aAAAA,IAAA,EACC,yCAAC,KAAK,kBAAL,EAAsB,OAAO,QAAQ,IAAI,OAAA7R,OAAA,CAAc,EAC1D,CAAA;AAAA,kBAEC,aAAa,IAAI,CAAC,EAAE,KAAK,MAAM,eAAe,GAAG,WAAW;AACvD,wBAAA,sBAAsB,SAAS,eAAe;AAChD,4DACG6R,aAAAA,IACC,EAAA,UAAAvS,2BAAA;AAAA,wBAAC8K,aAAA;AAAA,wBAAA;AAAA,0BACC,OAAM;AAAA,0BACN,YAAY;AAAA,0BACZ,SAAS,QAAQ,cAAc,YAAY;AAAA,0BAC3C,MAAK;AAAA,0BAEL,UAAA9K,2BAAA;AAAA,4BAACc,aAAA;AAAA,4BAAA;AAAA,8BACC,YAAW;AAAA,8BACX,WAAW,GACT,QAAQ,cAAc,YAAY,WACpC;AAAA,8BAEC,UAAc,cAAA;AAAA,gCACb,IAAIP,OAAA;AAAA,kCACF,mBACE,QAAQ,cAAc,cAAc,OACtC;AAAA,gCACF;AAAA,gCACA,gBAAgB,QAAQ,cAAc,cAAc;AAAA,8BAAA,CACrD;AAAA,4BAAA;AAAA,0BACH;AAAA,wBAAA;AAAA,sBAAA,KArBK,GAuBT;AAAA,oBAEJ;AAEA,wBAAI,oBAAoB;AACtB,0BAAI,SAAS,gBAAgB;AAEzB,+BAAAP,2BAAAA,IAACuS,aAAAA,IACE,EAAA,UAAA,QAAQ,eACPvS,2BAAA;AAAA,0BAAC,uBAAuB;AAAA,0BAAvB;AAAA,4BACC,OACE,QAAQ,aAAa,SAAS8T,wBAAW,OAAO;AAAA,4BAElD,MAAM,QAAQ,aAAa;AAAA,0BAAA;AAAA,wBAAA,IAG5B9T,2BAAA,IAAAc,yBAAA,EAAW,WAAU,cAAa,UAAA,IAAC,CAAA,KAT/B,GAWT;AAAA,sBAEJ;AACA,0BAAI,SAAS,mBAAmB;AAE5B,+BAAAd,2BAAAA,IAACuS,aAAAA,IACE,EAAA,UAAA,QAAQ,kBACPvS,2BAAA;AAAA,0BAAC,uBAAuB;AAAA,0BAAvB;AAAA,4BACC,MAAM,QAAQ;AAAA,0BAAA;AAAA,wBAAA,IAGfA,2BAAA,IAAAc,yBAAA,EAAW,WAAU,cAAa,UAAA,IAAC,CAAA,KAN/B,GAQT;AAAA,sBAEJ;AAAA,oBACF;AAEI,wBAAA,CAAC,aAAa,WAAW,EAAE,SAAS,KAAK,MAAM,GAAG,EAAE,CAAC,CAAC,GAAG;AAKzD,6BAAAd,2BAAA,IAACuS,aACC,IAAA,EAAA,UAAAvS,2BAAAA,IAACc,aAAAA,YAAW,EAAA,WAAU,cACnB,UAAA,QAAQ,KAAK,MAAM,GAAG,EAAE,CAAC,CAAC,IACvB,eAAe,QAAQ,KAAK,MAAM,GAAG,EAAE,CAAC,CAAC,GAAG,aAAa,IACzD,IACN,CAAA,EAAA,GALO,GAMT;AAAA,oBAEJ;AAEI,wBAAA,OAAO,kBAAkB,YAAY;AAErC,6BAAAd,2BAAA,IAACuS,aAAc,IAAA,EAAA,UAAA,cAAc,SAAS,EAAE,KAAK,MAAM,GAAG,KAAM,CAAA,EAAA,GAAnD,GAAqD;AAAA,oBAElE;AAEA,0DACGA,aAAAA,IACC,EAAA,UAAAvS,2BAAA;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,SAAS,QAAQ,KAAK,MAAM,GAAG,EAAE,CAAC,CAAC;AAAA,wBACnC;AAAA,wBACA,aAAa,OAAO;AAAA,wBACnB,GAAG;AAAA,wBACJ,OAAO,QAAQ;AAAA,sBAAA;AAAA,oBAAA,KANV,GAQT;AAAA,kBAAA,CAEH;AAAA,mBAEC,aAAa,eAAe,cAC5BA,2BAAA,IAACuS,aACC,IAAA,EAAA,UAAAvS,2BAAA;AAAA,oBAAC,KAAK;AAAA,oBAAL;AAAA,sBACC,OAAO,QAAQ;AAAA,sBACf,OAAAU;AAAA,sBACA;AAAA,sBACA;AAAA,sBACA;AAAA,sBACA;AAAA,oBAAA;AAAA,kBAAA,GAEJ;AAAA,gBAAA,KAhHsB,QAAQ,EAkHlC;AAAA,cAAA,CAEH;AAAA,YAAA;AAAA,UACH;AAAA,QAAA,GACF;AAAA,MAAA,GACF;AAAA,MACCF,2BAAA,KAAAK,aAAA,MAAA,EAAK,YAAW,YAAW,gBAAe,iBACzC,UAAA;AAAA,QAACb,2BAAAA,IAAA+T,aAAA,kBAAA,EAAiB,cAAa,mCAAmC,CAAA;AAAA,QAClE/T,+BAACgU,aAAAA,sBAAmB,YAAY,EAAE,WAAW,YAAY,aAAa,KAAK;AAAA,MAAA,GAC7E;AAAA,IACF,EAAA,CAAA,IAEChU,2BAAA,IAAAiU,4BAAA,CAAA,CAAc,EAEnB,CAAA;AAAA,EACF,EAAA,CAAA;AAEJ;AAEA,SAAS,YAAY;AAAA,EACnB,WAAWhU,mBAAAA,QAAU,KAAK;AAAA,EAC1B,WAAWA,mBAAAA,QAAU,KAAK;AAAA,EAC1B,SAASA,mBAAAA,QAAU,KAAK;AAAA,EACxB,YAAYA,mBAAAA,QAAU,KAAK;AAAA,EAC3B,QAAQA,2BAAU,MAAM;AAAA,IACtB,YAAYA,mBAAAA,QAAU,OAAO;AAAA,IAC7B,aAAaA,2BAAU,MAAM;AAAA,MAC3B,KAAKA,mBAAAA,QAAU,OAAO;AAAA,MACtB,YAAYA,mBAAAA,QAAU,OAAO;AAAA,MAC7B,WAAWA,mBAAAA,QAAU,OAAO;AAAA,MAC5B,MAAMA,mBAAAA,QAAU,MAAM,EAAE,aAAaA,mBAAAA,QAAU,OAAO,WAAY,CAAA,EAAE;AAAA,MACpE,SAASA,2BAAU,MAAM;AAAA,QACvB,MAAMA,mBAAAA,QAAU,MAAM;AAAA,MACvB,CAAA,EAAE;AAAA,MACH,SAASA,mBAAAA,QAAU,OAAO;AAAA,MAC1B,UAAUA,mBAAAA,QAAU,OAAO;AAAA,IAC5B,CAAA,EAAE;AAAA,EACJ,CAAA,EAAE;AAAA,EACH,MAAMA,mBAAAA,QAAU,OAAO;AACzB;AAEA,MAAA,aAAeF,iBAAM,KAAK,UAAUoE,wBAAO;ACh3B3C,MAAM,cAAc,CAAC,UAAU;AACvB,QAAA,kBAAkBtF,cAAQ,MAAM,0BAA0B,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC;AAEzF,QAAM,EAAE,WAAW,mBAAmBkS,aAAQ,QAAA,iBAAiB,MAAM,WAAW;AAEhF,MAAI,WAAW;AACb,0CAAQxB,mCAAqB,CAAA,CAAA;AAAA,EAC/B;AAEA,SAAQvP,2BAAAA,IAAAkU,YAAA,EAAU,GAAG,OAAQ,GAAG,eAAgB,CAAA;AAClD;AAEA,YAAY,eAAe;AAAA,EACzB,aAAa,CAAC;AAChB;AAEA,YAAY,YAAY;AAAA,EACtB,aAAajU,mBAAU,QAAA;AAAA,EACvB,MAAMA,mBAAAA,QAAU,OAAO;AACzB;AAGA,MAAe6F,gBAAAA,MAAAA,KAAK,aAAa,CAAC,MAAM,SAAS;AACzC,QAAA,6BAA6BqO,aAAAA,WAAW,MAAM,IAAI;AAMxD,QAAM,2BAA2B,OAAO,KAAK,0BAA0B,EAAE;AAAA,IACvE,CAAC,aAAa,aAAa;AAAA,EAAA;AAG7B,SAAO,yBAAyB,SAAS;AAC3C,CAAC;AC9BD,MAAM,iBAAiB,CAAC,EAAE,QAAQ,GAAG,YAAY;AAC/C,QAAM,WAAWrU,WAAAA;AACX,QAAA,EAAE,YAAYgE,eAAAA;AACpB,QAAM,CAAC,EAAE,OAAO,SAAS,CAAC,IAAIpE,aAAe,eAAA;AACvC,QAAA,EAAE,aAAAtB,cAAa,SAAS,uBAAuB,YAAY,OAAO,MAAM,MAAM,UAAU;AACxF,QAAA,kBAAkB,uBAAuB,MAAM,IAAI;AAEzDiB,QAAAA,UAAU,MAAM;AACd,QAAI,CAAC,UAAU;AACb,cAAQ,eAAe;AAAA,IACzB;AAAA,EACC,GAAA,CAAC,UAAU,SAAS,eAAe,CAAC;AAEvCA,QAAAA,UAAU,MAAM;AACL,aAAA,UAAU,MAAM,CAAC;AAAA,EAAA,GACzB,CAAC,UAAU,MAAM,CAAC;AAErBA,QAAAA,UAAU,MAAM;AACd,WAAO,MAAM;AACX,eAAS,YAAY;AAAA,IAAA;AAAA,EACvB,GACC,CAAC,QAAQ,CAAC;AAEb,MAAI,CAAC,oBAAoB;AAChB,WAAA;AAAA,EACT;AAEA,SAAQW,2BAAAA,IAAA8Q,eAAA,EAAa,GAAG,OAAO,QAAgB,aAAA1S,aAA0B,CAAA;AAC3E;AAEA,eAAe,YAAY;AAAA,EACzB,QAAQ6B,2BAAU,MAAM;AAAA,IACtB,YAAYA,mBAAAA,QAAU,OAAO;AAAA,IAC7B,aAAaA,2BAAU,MAAM;AAAA,MAC3B,YAAYA,mBAAAA,QAAU,OAAO;AAAA,MAC7B,WAAWA,mBAAAA,QAAU,OAAO;AAAA,MAC5B,SAASA,2BAAU,MAAM;AAAA,QACvB,MAAMA,mBAAAA,QAAU,MAAM;AAAA,MACvB,CAAA,EAAE;AAAA,MACH,SAASA,mBAAAA,QAAU,OAAO;AAAA,MAC1B,UAAUA,mBAAAA,QAAU,OAAO;AAAA,MAC3B,eAAeA,mBAAU,QAAA;AAAA,IAC1B,CAAA,EAAE;AAAA,EACJ,CAAA,EAAE;AAAA,EACH,MAAMA,mBAAAA,QAAU,OAAO;AACzB;ACpDA,MAAM,gBAAgB,MAAM;AAC1B,wCACGQ,aAAAA,KAAI,EAAA,SAAS,GACZ,UAAAT,2BAAAA,IAACoU,gCAAgB,EACnB,CAAA;AAEJ;ACQA,MAAM,8BAA8B,CAAC;AAAA,EACnC,OAAO;AAAA,IACL,QAAQ,EAAE,KAAK;AAAA,IACf;AAAA,EACF;AACF,MAAM;AACE,QAAAhW,eAAcT,uBAAYyS,iBAAAA,sBAAsB;AACtD,QAAM,EAAE,WAAW,QAAQ,aAAa,IAAI,0BAA0B,IAAI;AAE1E,QAAM,EAAE,sBAAsB,qBAAqB,IAAIvR,cAAQ,MAAM;AACnE,QAAIwV,wBAAuB,CAAA;AAC3B,QAAIC,wBAAuB,CAAA;AAE3B,QAAI,OAAO,aAAa;AACtBD,8BAAuB,kBAAkB,OAAO,WAAW;AAAA,IAC7D;AAEA,QAAI,OAAO,YAAY;AACrBC,8BAAuB,OAAO,KAAK,OAAO,UAAU,EAAE,OAAO,CAAC,KAAK,YAAY;AAC7E,YAAI,OAAO,IAAI,kBAAkB,OAAO,WAAW,OAAO,CAAC;AAEpD,eAAA;AAAA,MACT,GAAG,CAAE,CAAA;AAAA,IACP;AAEA,WAAO,EAAE,sBAAAD,uBAAsB,sBAAAC,sBAAqB;AAAA,EAAA,GACnD,CAAC,MAAM,CAAC;AAEL,QAAA,MAAM,QAAQ,aAAa,OAAO;AAOpC,MAAA,QAAQ,QAAQ,WAAW;AAC7B,0CAAQ/E,mCAAqB,CAAA,CAAA;AAAA,EAC/B;AAEA,QAAM,cAAc,CAClB;AAAA,IACE,UAAU,EAAE,MAAM;AAAA,IAClB,SAAS,EAAE,OAAO;AAAA,IAClB,OAAO;AAAA,MACL,QAAQ,EAAE,IAAI,OAAO;AAAA,IACvB;AAAA,KAEF5M,eACG;AAED,WAAA3C,2BAAA;AAAA,MAAC2C;AAAA,MAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,IAAA;AAAA,EACF;AAIJ,QAAM,SAAS;AAAA,IACb,EAAE,MAAM,wBAAwB,MAAM,sBAAsB;AAAA,IAC5D,EAAE,MAAM,UAAU,MAAM,sBAAsB;AAAA,IAC9C,EAAE,MAAM,OAAO,MAAM,sBAAsB;AAAA,IAC3C,EAAE,MAAM,IAAI,MAAM,eAAe;AAAA,EAAA,EACjC,IAAI,CAAC,EAAE,MAAM,KAAK,MACjB3C,2BAAA,IAAAuU,sBAAA,EAAiB,MAAM,GAAG,GAAG,IAAI,IAAI,IAAI,QAAQ,CAAC,UAAU,YAAY,OAAO,IAAI,EAAxE,GAAA,IAA2E,CACxF;AAGC,SAAAvU,2BAAAA,IAACwU,mBAAAA,eAAc,EAAA,mBAAmB,eAChC,UAAAxU,+BAACyU,kBAAyB,UAAzB,EAAkC,OAAO,QACxC,UAAAjU,2BAAAA,KAACkU,eAAAA,QACC,EAAA,UAAA;AAAA,IAAA1U,+BAACuU,eAAAA,OAAM,EAAA,MAAM,GAAG,GAAG,wBACjB,UAAAvU,2BAAA;AAAA,MAAC2U,aAAA;AAAA,MAAA;AAAA,QACC,aAAavW,aAAY,eAAe;AAAA,QAExC,UAAA4B,2BAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,QAAQ;AAAA,YACR;AAAA,YACA;AAAA,UAAA;AAAA,QACF;AAAA,MAAA;AAAA,IAAA,GAEJ;AAAA,IACCA,+BAAAuU,eAAAA,OAAA,EAAM,MAAM,GAAG,GAAG,wBACjB,UAAAvU,2BAAA;AAAA,MAAC2U,aAAA;AAAA,MAAA;AAAA,QACC,aAAavW,aAAY,eAAe;AAAA,QAExC,UAAA4B,2BAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,YAAY;AAAA,YACZ,mBAAiB;AAAA,YACjB,YAAY;AAAA,YACZ;AAAA,YACA;AAAA,UAAA;AAAA,QACF;AAAA,MAAA;AAAA,IAAA,GAEJ;AAAA,IACC;AAAA,EAAA,GACH,GACF,EACF,CAAA;AAEJ;AAEA,4BAA4B,YAAY;AAAA,EACtC,OAAOC,2BAAU,MAAM;AAAA,IACrB,KAAKA,mBAAAA,QAAU,OAAO;AAAA,IACtB,QAAQA,2BAAU,MAAM;AAAA,MACtB,MAAMA,mBAAAA,QAAU,OAAO;AAAA,IACxB,CAAA,EAAE;AAAA,EACJ,CAAA,EAAE;AACL;AAEA,MAAe6F,gCAAAA,MAAAA,KAAK,2BAA2B;ACvH/C,MAAM,wBAAwB,MAAM;AAC5B,QAAA,CAAC,EAAE,WAAW,MAAM,OAAA,GAAU,QAAQ,IAAIlH,MAAW,WAAAgW,qBAAaC,QAAAA,gBAAgB;AACxF,QAAM,kBAAkBhW,MAAAA,QAAQC,OAAoC,oCAAA,CAAE,CAAA;AAChE,QAAA,EAAE,QAAY,IAAAnB,uBAAY,CAAC,UAAU,gBAAgB,KAAK,GAAGoB,WAAAA,YAAY;AACzE,QAAAX,eAAcT,uBAAYyS,iBAAAA,sBAAsB;AAChD,QAAA,EAAE,QAAQ0E,eAAAA;AACV,QAAA,EAAE,KAAA7W,SAAQgB,aAAAA;AAEhBI,QAAAA,UAAU,MAAM;AACd,UAAM,cAAcD,eAAM,QAAA;AACpB,UAAA,SAAS,YAAY;AACrB,UAAA,YAAY,OAAOuG,YAAW;AAC9B,UAAA;AACF,iBAASzG,WAAS;AAEZ,cAAA;AAAA,UACJ,MAAM,EAAE,KAAK;AAAA,QACX,IAAA,MAAMjB,KAAI,+BAA+B,GAAG,kBAAkB;AAAA,UAChE,aAAa0H,QAAO;AAAA,QAAA,CACrB;AACD,iBAASb,mBAAiB,qBAAqB,MAAM,SAAS,WAAW,CAAC,CAAC;AAAA,eACpE,KAAK;AACR,YAAA1F,eAAA,QAAM,SAAS,GAAG,GAAG;AACvB;AAAA,QACF;AACA,gBAAQ,MAAM,GAAG;AAAA,MACnB;AAAA,IAAA;AAGF,cAAU,MAAM;AAEhB,WAAO,MAAM;AACX,aAAO,OAAO,iCAAiC;AAAA,IAAA;AAAA,EAEhD,GAAA,CAAC,KAAK,SAASnB,IAAG,CAAC;AAEtB,MAAI,WAAW;AACb,0CAAQsR,mCAAqB,CAAA,CAAA;AAAA,EAC/B;AAEA,wCACGoF,mCAAqB,EAAA,aAAavW,aAAY,eAAe,0BAC5D,UAAC4B,2BAAAA,IAAA,kBAAA,EAAiB,YAAY,OAAO,YAAY,YAAY,OAAO,WAAW,MAAM,KAAK,EAC5F,CAAA;AAEJ;AAEA,MAAe8F,0BAAAA,MAAAA,KAAK,qBAAqB;ACpDzC,MAAM,gBAAgB,MAAM;AACpB,QAAA,EAAE,kBAAkB3F,UAAAA;AACLoT,eAAAA;AAErB,yCACGvP,mBACC,EAAA,UAAA;AAAA,IAAAhE,2BAAA;AAAA,MAACiE,aAAA;AAAA,MAAA;AAAA,QACC,OAAO,cAAc;AAAA,UACnB,IAAI1D,eAAQ,aAAa;AAAA,UACzB,gBAAgB;AAAA,QAAA,CACjB;AAAA,MAAA;AAAA,IACH;AAAA,mCACC8D,aAAAA,eACC,EAAA,UAAArE,2BAAA;AAAA,MAAC+U,aAAA;AAAA,MAAA;AAAA,QACC,QACE/U,2BAAA;AAAA,UAACK,aAAA;AAAA,UAAA;AAAA,YACC,SAAQ;AAAA,YACR,0CAAY2B,MAAK,MAAA,EAAA;AAAA,YACjB,IAAG;AAAA,YAEF,UAAc,cAAA;AAAA,cACb,IAAI;AAAA,cACJ,gBAAgB;AAAA,YAAA,CACjB;AAAA,UAAA;AAAA,QACH;AAAA,QAEF,SAAS,cAAc;AAAA,UACrB,IAAI;AAAA,UACJ,gBACE;AAAA,QAAA,CACH;AAAA,QACD,WAAS;AAAA,QACT,MAAMhC,2BAAAA,IAACgV,MAAAA,gBAAe,EAAA,OAAM,QAAQ,CAAA;AAAA,QACpC,QAAO;AAAA,MAAA;AAAA,IAAA,GAEX;AAAA,EACF,EAAA,CAAA;AAEJ;ACvCA,MAAM,gBAAgB,MAAM;AACpB,QAAA,EAAE,kBAAkB7U,UAAAA;AACLoT,eAAAA;AAErB,yCACGvP,mBACC,EAAA,UAAA;AAAA,IAAAhE,2BAAA;AAAA,MAACiE,aAAA;AAAA,MAAA;AAAA,QACC,OAAO,cAAc;AAAA,UACnB,IAAI1D,eAAQ,aAAa;AAAA,UACzB,gBAAgB;AAAA,QAAA,CACjB;AAAA,MAAA;AAAA,IACH;AAAA,IACCP,2BAAA,IAAAqE,aAAA,eAAA,EACC,UAACrE,2BAAA,IAAAiV,aAAA,eAAA,CAAmB,CAAA,GACtB;AAAA,EACF,EAAA,CAAA;AAEJ;ACXA,MAAM,0BAA0B,CAAC;AAAA,EAC/B,OAAO;AAAA,IACL,QAAQ,EAAE,KAAK;AAAA,IACf;AAAA,EACF;AACF,MAAM;AACE,QAAA7W,eAAcT,uBAAYyS,iBAAAA,sBAAsB;AACtD,QAAM,EAAE,WAAW,QAAQ,aAAa,IAAI,0BAA0B,IAAI;AAE1E,QAAM,EAAE,sBAAsB,qBAAqB,IAAIvR,cAAQ,MAAM;AACnE,QAAIyV,wBAAuB,CAAA;AAC3B,QAAID,wBAAuB,CAAA;AAE3B,QAAI,OAAO,aAAa;AACtBA,8BAAuB,kBAAkB,OAAO,WAAW;AAAA,IAC7D;AAEA,QAAI,OAAO,YAAY;AACrBC,8BAAuB,OAAO,KAAK,OAAO,UAAU,EAAE,OAAO,CAAC,KAAK,YAAY;AAC7E,YAAI,OAAO,IAAI,kBAAkB,OAAO,WAAW,OAAO,CAAC;AAEpD,eAAA;AAAA,MACT,GAAG,CAAE,CAAA;AAAA,IACP;AAEA,WAAO,EAAE,sBAAAD,uBAAsB,sBAAAC,sBAAqB;AAAA,EAAA,GACnD,CAAC,MAAM,CAAC;AAEX,MAAI,WAAW;AACb,0CAAQ/E,mCAAqB,CAAA,CAAA;AAAA,EAC/B;AAEA,wCACGkF,kBAAyB,UAAzB,EAAkC,OAAO,QACxC,0CAACC,uBACC,EAAA,UAAA;AAAA,IAAC1U,2BAAA,IAAAuU,eAAA,OAAA,EAAM,MAAM,GAAG,GAAG,wBACjB,yCAACI,aAAAA,sBAAqB,EAAA,aAAavW,aAAY,eAAe,2BAC5D,UAAA4B,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,YAAY;AAAA,QACZ,mBAAiB;AAAA,QACjB,YAAY;AAAA,QACZ;AAAA,QACA;AAAA,MAAA;AAAA,OAEJ,EACF,CAAA;AAAA,IACAA,2BAAA;AAAA,MAACuU,eAAA;AAAA,MAAA;AAAA,QACC,MAAM;AAAA,QACN,QAAQ,CAAC,EAAE,UAAU,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,QAAQ;AAEtD,iBAAAvU,2BAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC;AAAA,cACA;AAAA,cACA,cAAY;AAAA,cACZ;AAAA,cACA;AAAA,YAAA;AAAA,UAAA;AAAA,QAGN;AAAA,MAAA;AAAA,IACF;AAAA,EAAA,EACF,CAAA,EACF,CAAA;AAEJ;AAEA,wBAAwB,YAAY;AAAA,EAClC,OAAOC,2BAAU,MAAM;AAAA,IACrB,KAAKA,mBAAAA,QAAU,OAAO;AAAA,IACtB,QAAQA,2BAAU,MAAM;AAAA,MACtB,MAAMA,mBAAAA,QAAU,OAAO;AAAA,IACxB,CAAA,EAAE;AAAA,EACJ,CAAA,EAAE;AACL;AACA,MAAe6F,4BAAAA,MAAAA,KAAK,uBAAuB;AC/E3C,MAAM,sBAAsB3E,gBAAAA,QAAON,aAAAA,IAAI;AAAA;AAAA;AAAA;AAAA,cAIzB,IAAI,EAAE;AAAA,aACP,KAAK,EAAE;AAAA;AAAA,cAEN,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,UAAU;AAAA;AAAA;AAAA;AAMpD,MAAM,eAAeM,gBAAO,QAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASZ,SAAA,qBAAqB,EAAE,kBAAkB;AAErD,SAAAX,2BAAA;AAAA,IAACK,aAAA;AAAA,IAAA;AAAA,MACC,YAAW;AAAA,MACX,aAAY;AAAA,MACZ,gBAAe;AAAA,MACf,KAAK;AAAA,MACL,SAAS;AAAA,MACT,OAAOuF,qBAAQ,GAAG;AAAA,MAElB,UAAA;AAAA,QAAApG,2BAAAA,IAAC,gBAAa,MAAK,UACjB,UAACQ,2BAAA,KAAAK,mBAAA,EAAK,KAAK,GACT,UAAA;AAAA,UAAAb,2BAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,YAAW;AAAA,cACX,gBAAe;AAAA,cACf,YAAW;AAAA,cACX,QAAQoG,qBAAQ,EAAE;AAAA,cAClB,OAAOA,qBAAQ,EAAE;AAAA,cAEjB,yCAAC8O,MAAW,YAAA,EAAA;AAAA,YAAA;AAAA,UACd;AAAA,UAEClV,2BAAA,IAAAa,aAAA,MAAA,EAAK,UAAUuF,aAAA,QAAQ,GAAG,GACzB,UAACpG,2BAAA,IAAAc,aAAA,YAAA,EAAW,WAAU,cAAa,UAAQ,MACxC,yBACH,CAAA,GACF;AAAA,QAAA,EAAA,CACF,EACF,CAAA;AAAA,QAEAN,2BAAAA,KAACK,aAAAA,MAAK,EAAA,KAAK,GACT,UAAA;AAAA,UAAAb,+BAACqB,aAAAA,YAAW,EAAA,UAAQ,MAClB,UAAArB,+BAACsB,MAAAA,QAAM,CAAA,GACT;AAAA,yCAECD,aAAAA,YAAW,EAAA,UAAQ,MAClB,UAAArB,+BAACwB,MAAAA,OAAK,CAAA,GACR;AAAA,QAAA,GACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN;AAEA,qBAAqB,YAAY;AAAA,EAC/B,gBAAgBvB,mBAAAA,QAAU,OAAO;AACnC;AC5DO,MAAM,sBAAsB,CAAC,EAAE,QAAQ,gBAAgB,YAAY;AAClE,QAAA,EAAE,kBAAkBE,UAAAA;AAE1B,QAAM,eAAe;AAAA,IACnB,CAAC,mBAAmB,KAAK,GAAG,cAAc;AAAA,MACxC,IAAII,eAAQ,iCAAiC;AAAA,MAC7C,gBAAgB;AAAA,IAAA,CACjB;AAAA,IAED,CAAC,mBAAmB,SAAS,GAAG,cAAc;AAAA,MAC5C,IAAIA,eAAQ,qCAAqC;AAAA,MACjD,gBAAgB;AAAA,IAAA,CACjB;AAAA,EAAA;AAGH,QAAM,cAAc,WAAW,mBAAmB,QAAQ,cAAc;AAExE,SACGP,2BAAAA,IAAAS,aAAAA,KAAA,EAAI,OAAO,EAAE,SACZ,UAAAD,2BAAA;AAAA,IAACK,aAAA;AAAA,IAAA;AAAA,MACC,YAAY;AAAA,MACZ,eAAe;AAAA,MACf,aAAa;AAAA,MACb,cAAc;AAAA,MACd,WAAS;AAAA,MACT,YAAY;AAAA,MACZ,YAAW;AAAA,MACX,aAAY;AAAA,MACZ,gBAAe;AAAA,MAEf,UAAA;AAAA,QAACL,2BAAAA,KAAA,aAAA,EAAY,KAAK,GAChB,UAAA;AAAA,UAAAR,+BAACqB,aAAAA,YAAW,EAAA,UAAQ,MAClB,UAAArB,+BAACwB,MAAAA,OAAK,CAAA,GACR;AAAA,UACChB,2BAAA,KAAA,iBAAA,EAAgB,UAAS,QAAO,gBAAe,iBAC9C,UAAA;AAAA,YAAAR,2BAAAA,IAACS,oBAAI,UAAU,GAAG,YAAY,GAAG,eAAe,GAAG,cAAc,GAC/D,yCAAC,cACC,EAAA,UAAAT,2BAAA,IAACc,2BAAW,WAAU,cAAa,UAAQ,MACxC,UAAA,gBACH,GACF,EACF,CAAA;AAAA,YACC,yCACEgK,qBAAO,EAAA,SAAS,aAAa,YAAY,OAAO,MAAK,KACpD,UAAA9K,2BAAAA,IAACc,aAAAA,cAAW,YAAW,QAAO,WAAW,GAAG,WAAW,OACpD,UAAa,aAAA,MAAM,GACtB,EACF,CAAA;AAAA,UAAA,GAEJ;AAAA,QAAA,GACF;AAAA,QACCd,+BAAAS,aAAAA,KAAA,EAAI,aAAa,GAChB,yCAAC,kBAAiB,EAAA,MAAK,UACrB,UAAAT,2BAAA,IAACkB,qBAAK,OAAM,QAAO,IAAI2J,MAAA,MAAA,CAAO,EAChC,CAAA,GACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAEJ,EAAA,CAAA;AAEJ;AAEA,oBAAoB,YAAY;AAAA,EAC9B,QAAQ5K,mBAAAA,QAAU,OAAO;AAAA,EACzB,gBAAgBA,mBAAAA,QAAU,OAAO;AAAA,EACjC,OAAOA,mBAAAA,QAAU,OAAO;AAC1B;ACzDA,MAAM,WAAW,MAAM;AACrB,QAAM,CAAC,QAAQ,SAAS,IAAIyB,eAAS,EAAE;AACvC,QAAM,EAAE,eAAe,OAAO,IAAIvB,UAAQ,QAAA;AAC1C,QAAM,qBAAqBtB,MAAAA,QAAQsW,OAAsB,sBAAA,CAAE,CAAA;AAC3D,QAAM,EAAE,qBAAqB,gBAAA,IAAoBxX,WAAAA,YAAY,oBAAoBoB,WAAAA,YAAY;AAE7F,QAAM,EAAE,WAAA,IAAeqW,aAAA,UAAU,QAAQ;AAAA,IACvC,aAAa;AAAA,EAAA,CACd;AAKK,QAAA,YAAYlE,yBAAY,QAAQ;AAAA,IACpC,aAAa;AAAA,EAAA,CACd;AAED,QAAM,OAAOrS,MAAA;AAAA,IACX,MACE;AAAA,MACE;AAAA,QACE,IAAI;AAAA,QACJ,OAAO;AAAA,UACL,IAAI0B,eAAQ,sCAAsC;AAAA,UAClD,gBAAgB;AAAA,QAClB;AAAA,QACA,YAAY;AAAA,QACZ,OAAO;AAAA,MACT;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,OAAO;AAAA,UACL,IAAIA,eAAQ,kCAAkC;AAAA,UAC9C,gBAAgB;AAAA,QAClB;AAAA,QACA,YAAY;AAAA,QACZ,OAAO;AAAA,MACT;AAAA,IAAA,EACA,IAAI,CAAC,aAAa;AAAA,MAClB,GAAG;AAAA,MACH,OAAO,QAAQ,MAIZ,OAAO,CAAC,SAAS,WAAW,KAAK,OAAO,MAAM,CAAC,EAI/C,KAAK,CAAC,GAAG,MAAM,UAAU,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,EAIlD,IAAI,CAAC,SAAS;AACN,eAAA;AAAA,UACL,GAAG;AAAA,UACH,OAAO,cAAc,EAAE,IAAI,KAAK,OAAO,gBAAgB,KAAK,OAAO;AAAA,QAAA;AAAA,MACrE,CACD;AAAA,IAAA,EACH;AAAA,IACJ,CAAC,qBAAqB,QAAQ,iBAAiB,YAAY,eAAe,SAAS;AAAA,EAAA;AAGrF,QAAM,cAAc,MAAM;AACxB,cAAU,EAAE;AAAA,EAAA;AAGd,QAAM,qBAAqB,CAAC,EAAE,QAAQ,EAAE,cAAc;AACpD,cAAU,KAAK;AAAA,EAAA;AAGjB,QAAM,QAAQ,cAAc;AAAA,IAC1B,IAAIA,eAAQ,aAAa;AAAA,IACzB,gBAAgB;AAAA,EAAA,CACjB;AAGC,SAAAC,2BAAA,KAAC6U,GAAO,QAAA,EAAA,WAAW,OACjB,UAAA;AAAA,IAAArV,2BAAA;AAAA,MAACsV,GAAA;AAAA,MAAA;AAAA,QACC;AAAA,QACA,YAAU;AAAA,QACV,OAAO;AAAA,QACP,UAAU;AAAA,QACV,SAAS;AAAA,QACT,aAAa,cAAc;AAAA,UACzB,IAAI;AAAA,UACJ,gBAAgB;AAAA,QAAA,CACjB;AAAA,MAAA;AAAA,IACH;AAAA,IACCtV,2BAAA,IAAAuV,GAAA,gBAAA,EACE,UAAK,KAAA,IAAI,CAAC,YAAY;AACrB,YAAMC,SAAQ;AAAA,QACZ,EAAE,IAAI,QAAQ,MAAM,IAAI,gBAAgB,QAAQ,MAAM,eAAe;AAAA,QACrE,QAAQ,MAAM;AAAA,MAAA;AAId,aAAAxV,2BAAA;AAAA,QAACyV,GAAA;AAAA,QAAA;AAAA,UAEC,OAAOD;AAAAA,UACP,YAAY,QAAQ,MAAM,OAAO,SAAS;AAAA,UAEzC,UAAQ,QAAA,MAAM,IAAI,CAAC,SAAS;AAC3B,kBAAME,UAAS,KAAK,SAAS,IAAI,KAAK,MAAM,KAAK;AAEjD,mBACG1V,2BAAAA,IAAA2V,GAAAA,YAAA,EAAW,IAAIC,eAAAA,SAAwB,IAAI,GAAG,KAAK,EAAE,GAAGF,OAAM,IAC5D,UAAK,KAAA,SADsB,KAAK,GAEnC;AAAA,UAAA,CAEH;AAAA,QAAA;AAAA,QAZI,QAAQ;AAAA,MAAA;AAAA,IAelB,CAAA,GACH;AAAA,EACF,EAAA,CAAA;AAEJ;ACzIO,MAAM,cAAc,OAAO;AAAA,EAChC,MAAMG,QAAA;AACR;AAEO,MAAM,gBAAgB,OAAO,EAAE,MAAMC,QAAAA,gBAAgB;AAErD,MAAM,cAAc,CAAC;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,OAAO;AAAA,EACL,MAAMC,QAAA;AAAA,EACN,MAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;ACdA,MAAM,mBAAmB,CAAC,iBAAiB,uBACzC,mBAAmB,IAAI,CAAC,EAAE,aAAA3X,mBAAkB4X,aAAAA,eAAe,iBAAiB5X,YAAW,CAAC;ACN1F,MAAM,gBAAgB,CAAC,OAAO,MAAM,iBAAiB,CAAA,MAAO;AACnD,SAAA,MACJ,OAAO,CAAC,SAAS,KAAK,WAAW,EACjC,IAAI,CAAC,SAAS;AACb,UAAM,6BAA6B;AAAA,MACjC,EAAE,QAAQ,2CAA2C,SAAS,KAAK,IAAI;AAAA,MACvE,EAAE,QAAQ,yCAAyC,SAAS,KAAK,IAAI;AAAA,IAAA;AAEvE,UAAM,yBAAyB;AAAA,MAC7B,EAAE,QAAQ,yCAAyC,SAAS,KAAK,IAAI;AAAA,IAAA;AAEjE,UAAAA,eACJ,SAAS,oBAAoB,6BAA6B;AAEtD,UAAA,2BAA2B,eAAe,KAAK,CAAC,EAAE,IAAI,MAAM,QAAQ,KAAK,GAAG;AAElF,QAAI,SAAS;AAEb,QAAI,0BAA0B;AAC5B,YAAM,eAAe;AAAA,QACnB,MAAM;AAAA,QACN,UAAU,yBAAyB,SAAS;AAAA,QAC5C,MAAM,GAAG,yBAAyB,SAAS,aAAa,IAAI,yBAAyB,SAAS,gBAAgB;AAAA,MAAA;AAGhH,eAASqB,GAAU,UAAA,cAAc,EAAE,QAAQ,MAAO,CAAA;AAAA,IACpD;AAEO,WAAA;AAAA,MACL,aAAArB;AAAA,MACA;AAAA,MACA,MAAM,KAAK;AAAA,MACX,OAAO,KAAK,KAAK;AAAA,MACjB,IAAI,oBAAoB,KAAK,IAAI,IAAI,KAAK,GAAG;AAAA,MAC7C,KAAK,KAAK;AAAA;AAAA,MAEV,MAAM,KAAK;AAAA,MACX,aAAa,KAAK;AAAA,IAAA;AAAA,EACpB,CACD;AACL;AAEA,MAAM,sBAAsB,CAAC,QAAQ,yBAAyB;AAC5D,QAAM,gBAAgB,OAAO,QAAQ6X,iBAAA,QAAQ,QAAQ,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,KAAK,KAAK,OAAO;AAAA,IACnF,MAAM;AAAA,IACN,OAAO;AAAA,EACP,EAAA;AACF,QAAM,CAAC,iBAAiB,WAAW,IAAIC,gBAAAA,QAAO,eAAe,MAAM;AAE5D,SAAA;AAAA,IACL,4BAA4B;AAAA,MAC1B,iBAAiB,SAAS,CAAC;AAAA,MAC3B;AAAA,MACA;AAAA,IACF;AAAA,IACA,wBAAwB,cAAc,aAAa,SAAS,CAAA,GAAI,aAAa;AAAA,EAAA;AAEjF;ACxDA,MAAM,sBAAsB,OAAO,EAAE,QAAQ,iBAAiB,yBAAyB;AAC/E,QAAA,EAAE,KAAAjY,SAAQkY,aAAAA;AACZ,MAAA;AACI,UAAA;AAAA,MACJ,MAAM,EAAE,MAAM,0BAA0B;AAAA,IAAA,IACtC,MAAMlY,KAAI,yCAAyC;AAEjD,UAAA,EAAE,4BAA4B,uBAAA,IAA2B;AAAA,MAC7D;AAAA,MACA;AAAA,IAAA;AAII,UAAA,iCAAiC,MAAM,QAAQ;AAAA,MACnD,iBAAiB,iBAAiB,0BAA0B;AAAA,IAAA;AAE9D,UAAM,gCAAgC,2BAA2B;AAAA,MAC/D,CAAC,GAAGyC,WAAU,+BAA+BA,MAAK;AAAA,IAAA;AAI9C,UAAA,6BAA6B,MAAM,QAAQ;AAAA,MAC/C,iBAAiB,iBAAiB,sBAAsB;AAAA,IAAA;AAE1D,UAAM,4BAA4B,uBAAuB;AAAA,MACvD,CAAC,GAAGA,WAAU,2BAA2BA,MAAK;AAAA,IAAA;AAGzC,WAAA;AAAA,MACL;AAAA,MACA;AAAA,IAAA;AAAA,WAEK,KAAK;AACZ,YAAQ,MAAM,GAAG;AAEE,uBAAA;AAAA,MACjB,MAAM;AAAA,MACN,SAAS,EAAE,IAAI,qBAAqB;AAAA,IAAA,CACrC;AAED,WAAO,EAAE,+BAA+B,CAAA,GAAI,2BAA2B,CAAG,EAAA;AAAA,EAC5E;AACF;AC3BA,MAAM,EAAE,+BAA+B,0BAA8B,IAAAsQ;AAErE,MAAM,4BAA4B,MAAM;AACtC,QAAM,WAAWlR,WAAAA;AACjB,QAAM,qBAAqB+D,aAAAA;AACrB,QAAA,QAAQlG,WAAAA,YAAYyY,OAAA,gBAAA,CAAiB;AAC3C,QAAM,eAAepX,MAAAA;AACf,QAAA,EAAE,mBAAmB8S,aAAAA;AACrB,QAAA,EAAE,qBAAqBb,aAAAA;AAC7B,QAAM,cAAc7R,eAAM,QAAA;AACpB,QAAA,SAAS,YAAY;AACrB,QAAA,EAAE,iBAAiByT,aAAAA;AACnB,QAAA,EAAE,kBAAkB1S,UAAAA;AACpB,QAAA,EAAE,KAAAlC,SAAQgB,aAAAA;AAEhB,QAAM,YAAY,YAAY;AAC5B,aAAS,aAAa;AAElB,QAAA;AACI,YAAA;AAAA,QACJ,MAAM;AAAA,UACJ,MAAM,EAAE,YAAY,cAAc,QAAQ,WAAW;AAAA,QACvD;AAAA,MAAA,IACE,MAAMhB,KAAI,yBAAyB,EAAE,aAAa,OAAO,OAAO;AACpE;AAAA,QACE,cAAc;AAAA,UACZ,IAAIsC,eAAQ,yBAAyB;AAAA,UACrC,gBAAgB;AAAA,QAAA,CACjB;AAAA,MAAA;AAGG,YAAA,4BAA4B,MAAM,oBAAoB;AAAA,QAC1D;AAAA,QACA,iBAAiB;AAAA,QACjB;AAAA,MAAA,CACD;AAEK,YAAA,EAAE,SAAS,8BAAA,IAAkC;AAAA,QACjD;AAAA,QACA;AAAA,UACE,SAAS,0BAA0B;AAAA,UACnC;AAAA,QACF;AAAA,MAAA;AAEF,YAAM,EAAE,SAAS,8BAA8B,iBAAiB,2BAA2B;AAAA,QACzF,SAAS,0BAA0B;AAAA,QACnC;AAAA,MAAA,CACD;AAED,YAAM,mBAAmB,YAAY;AAAA,QACnC;AAAA,QACA;AAAA,QACA,oBAAoB;AAAA,QACpB;AAAA,QACA;AAAA,MAAA,CACD;AAED,eAAS,gBAAgB;AAAA,aAClB,KAAK;AACR,UAAAnB,eAAA,QAAM,SAAS,GAAG,GAAG;AACvB;AAAA,MACF;AACA,cAAQ,MAAM,GAAG;AAEE,yBAAA,EAAE,MAAM,WAAW,SAAS,EAAE,IAAI,wBAAwB;AAAA,IAC/E;AAAA,EAAA;AAGF,eAAa,UAAU;AAEvBC,QAAAA,UAAU,MAAM;AACd,iBAAa,QAAQ;AAErB,WAAO,MAAM;AACX,aAAO,OAAO,iCAAiC;AAC/C,eAAS,eAAe;AAAA,IAAA;AAAA,EAC1B,GAEC,CAAC,UAAU,kBAAkB,CAAC;AAEjC,SAAO,EAAE,GAAG,OAAO,aAAa,aAAa,QAAQ;AACvD;ACrEA,SAAS,oBAAoB,EAAE,MAAM,QAAQ;AACvC,MAAA,CAAC,UAAU,YAAY,UAAU,KAAK,EAAE,SAAS,IAAI,GAAG;AAC1D,WAAQW,2BAAAA,IAAA,iBAAA,EAAgB,YAAY,KAAK,WAAY,CAAA;AAAA,EACvD;AAOA,QAAM,CAAC,UAAU,IAAI,KAAK,MAAM,GAAG;AAEnC,UAAQ,YAAY;AAAA,IAClB,KAAK,UAAU;AAAA,IACf,KAAK,UAAU;AACb,aAAQA,2BAAAA,IAAA,sBAAA,EAAqB,gBAAgB,KAAK,eAAgB,CAAA;AAAA,IAEpE,KAAK,UAAU;AAEX,aAAAA,2BAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,gBAAgB,KAAK;AAAA,UACrB,QAAQ,KAAK;AAAA,UACb,OAAO,KAAK;AAAA,QAAA;AAAA,MAAA;AAAA,IAIlB;AACS,aAAA;AAAA,EACX;AACF;AAEA,MAAM,MAAM,MAAM;AACV,QAAA,mBAAmBmK,eAAAA,cAAc,6BAA6B;AACpE,QAAM,EAAE,QAAQ,qBAAqB,iBAAiB,QAAQ,YAAA,IAC5D;AACF,QAAM,mBAAmB+L,gBAAA;AAAA,IAAO,CAAC,GAAG,qBAAqB,GAAG,eAAe;AAAA,IAAG,CAAC,UAC7E,MAAM,MAAM,YAAY;AAAA,EAAA;AAEpB,QAAA,EAAE,aAAavW,eAAAA;AACf,QAAA,EAAE,kBAAkBQ,UAAAA;AACpB,QAAA,EAAE,iBAAiBmF,aAAAA;AACnB,QAAA,kBAAkBtG,aAAO,YAAY;AACrC,QAAAZ,eAAcT,uBAAYyS,iBAAAA,sBAAsB;AAEtD/Q,QAAAA,UAAU,MAAM;AACd,QAAI,gBAAgB,SAAS;AAC3B,sBAAgB,QAAQ,gBAAgB;AAAA,IAC1C;AAAA,EACF,GAAG,CAAE,CAAA;AAEL,MAAI,WAAW,WAAW;AAEtB,WAAAmB,2BAAA,KAACwD,aAAK,MAAA,EAAA,aAAU,QACd,UAAA;AAAA,MAAAhE,2BAAA;AAAA,QAACiE,aAAA;AAAA,QAAA;AAAA,UACC,OAAO,cAAc;AAAA,YACnB,IAAI1D,eAAQ,aAAa;AAAA,YACzB,gBAAgB;AAAA,UAAA,CACjB;AAAA,QAAA;AAAA,MACH;AAAA,qCACCgP,aAAqB,sBAAA,EAAA;AAAA,IACxB,EAAA,CAAA;AAAA,EAEJ;AAGA,QAAM,2BAA2B,OAAO,OAAO,CAAC,EAAE,YAAA,MAAkB,WAAW;AAG/E,MACE,iBAAiB,WAAW,KAC5B,yBAAyB,SAAS,KAClC,aAAa,wBACb;AACO,WAAAvP,2BAAA,IAACqP,eAAS,UAAA,EAAA,IAAG,uBAAuB,CAAA;AAAA,EAC7C;AAGA,MAAI,yBAAyB,WAAW,KAAK,aAAa,qCAAqC;AACtF,WAAArP,2BAAA,IAACqP,eAAS,UAAA,EAAA,IAAG,oCAAoC,CAAA;AAAA,EAC1D;AAEA,MAAI,CAAC,oBAAoB,iBAAiB,SAAS,GAAG;AAElD,WAAArP,2BAAA;AAAA,MAACqP,eAAA;AAAA,MAAA;AAAA,QACC,IAAI,GAAG,iBAAiB,CAAC,EAAE,EAAE,GAC3B,iBAAiB,CAAC,EAAE,SAAS,IAAI,iBAAiB,CAAC,EAAE,MAAM,KAAK,EAClE;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AAEA,SACG7O,2BAAA,KAAA8Q,aAAA,QAAA,EAAO,SAAStR,2BAAA,IAAC,YAAS,GACzB,UAAA;AAAA,IAACA,2BAAAA,IAAAqW,UAAA,WAAA,EAAU,YAAY,oBAAqB,CAAA;AAAA,IAC5CrW,2BAAAA,IAAC,cAAc,UAAd,EAAuB,OAAO,EAAE,YAC/B,GAAA,UAAAQ,2BAAAA,KAACkU,eACC,QAAA,EAAA,UAAA;AAAA,MAAA1U,2BAAA,IAACuU,eAAM,OAAA,EAAA,MAAK,wDACV,UAAAvU,2BAAAA,IAAC2U,aAAAA,sBAAqB,EAAA,aAAavW,aAAY,eAAe,0BAC5D,UAAA4B,2BAAAA,IAACsW,yBAAsB,CAAA,CAAA,EACzB,CAAA,GACF;AAAA,MACAtW,2BAAA;AAAA,QAACuU,eAAA;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,WAAWgC;AAAAA,QAAA;AAAA,MACb;AAAA,MACCvW,2BAAA,IAAAuU,eAAA,OAAA,EAAM,MAAK,qCAAoC,WAAWiC,2BAAyB;AAAA,qCAEnFjC,eAAAA,OAAM,EAAA,MAAK,wBACV,UAAAvU,+BAAC,gBAAc,CAAA,GACjB;AAAA,qCACCuU,eAAAA,OAAM,EAAA,MAAK,qCACV,UAAAvU,+BAAC,gBAAc,CAAA,GACjB;AAAA,MACCA,2BAAA,IAAAuU,eAAA,OAAA,EAAM,MAAK,IAAG,WAAWH,aAAAA,iBAAiB;AAAA,IAAA,EAAA,CAC7C,EACF,CAAA;AAAA,EACF,EAAA,CAAA;AAEJ;AAI2B,SAAA,QAAA;AACnB,QAAA,EAAE,kBAAkBjU,UAAAA;AAE1B,SAEIK,2BAAA,KAAA6C,qBAAA,EAAA,UAAA;AAAA,IAAArD,2BAAA;AAAA,MAACyW,YAAA;AAAA,MAAA;AAAA,QACC,OAAO,cAAc,EAAE,IAAIlW,OAAAA,QAAQ,aAAa,GAAG,gBAAgB,mBAAmB;AAAA,MAAA;AAAA,IACxF;AAAA,mCACC,KAAI,EAAA;AAAA,EACP,EAAA,CAAA;AAEJ;;;;;;;;;"}