@strapi/content-manager 0.0.0-experimental.bffd3c1819cd08304e7d270e88b4973e9fcbc183 → 0.0.0-experimental.c23f51fc41b3ef5de081f427d07e87af93cdcb2c

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 (1284) hide show
  1. package/dist/admin/components/ComponentIcon.js +176 -0
  2. package/dist/admin/components/ComponentIcon.js.map +1 -0
  3. package/dist/admin/components/ComponentIcon.mjs +153 -0
  4. package/dist/admin/components/ComponentIcon.mjs.map +1 -0
  5. package/dist/admin/components/ConfigurationForm/EditFieldForm.js +259 -0
  6. package/dist/admin/components/ConfigurationForm/EditFieldForm.js.map +1 -0
  7. package/dist/admin/components/ConfigurationForm/EditFieldForm.mjs +238 -0
  8. package/dist/admin/components/ConfigurationForm/EditFieldForm.mjs.map +1 -0
  9. package/dist/admin/components/ConfigurationForm/Fields.js +534 -0
  10. package/dist/admin/components/ConfigurationForm/Fields.js.map +1 -0
  11. package/dist/admin/components/ConfigurationForm/Fields.mjs +512 -0
  12. package/dist/admin/components/ConfigurationForm/Fields.mjs.map +1 -0
  13. package/dist/admin/components/ConfigurationForm/Form.js +253 -0
  14. package/dist/admin/components/ConfigurationForm/Form.js.map +1 -0
  15. package/dist/admin/components/ConfigurationForm/Form.mjs +232 -0
  16. package/dist/admin/components/ConfigurationForm/Form.mjs.map +1 -0
  17. package/dist/admin/components/DragLayer.js +50 -0
  18. package/dist/admin/components/DragLayer.js.map +1 -0
  19. package/dist/admin/components/DragLayer.mjs +48 -0
  20. package/dist/admin/components/DragLayer.mjs.map +1 -0
  21. package/dist/admin/components/DragPreviews/CardDragPreview.js +82 -0
  22. package/dist/admin/components/DragPreviews/CardDragPreview.js.map +1 -0
  23. package/dist/admin/components/DragPreviews/CardDragPreview.mjs +80 -0
  24. package/dist/admin/components/DragPreviews/CardDragPreview.mjs.map +1 -0
  25. package/dist/admin/components/DragPreviews/ComponentDragPreview.js +83 -0
  26. package/dist/admin/components/DragPreviews/ComponentDragPreview.js.map +1 -0
  27. package/dist/admin/components/DragPreviews/ComponentDragPreview.mjs +81 -0
  28. package/dist/admin/components/DragPreviews/ComponentDragPreview.mjs.map +1 -0
  29. package/dist/admin/components/DragPreviews/RelationDragPreview.js +73 -0
  30. package/dist/admin/components/DragPreviews/RelationDragPreview.js.map +1 -0
  31. package/dist/admin/components/DragPreviews/RelationDragPreview.mjs +71 -0
  32. package/dist/admin/components/DragPreviews/RelationDragPreview.mjs.map +1 -0
  33. package/dist/admin/components/FieldTypeIcon.js +58 -0
  34. package/dist/admin/components/FieldTypeIcon.js.map +1 -0
  35. package/dist/admin/components/FieldTypeIcon.mjs +56 -0
  36. package/dist/admin/components/FieldTypeIcon.mjs.map +1 -0
  37. package/dist/admin/components/InjectionZone.js +44 -0
  38. package/dist/admin/components/InjectionZone.js.map +1 -0
  39. package/dist/admin/components/InjectionZone.mjs +40 -0
  40. package/dist/admin/components/InjectionZone.mjs.map +1 -0
  41. package/dist/admin/components/LeftMenu.js +172 -0
  42. package/dist/admin/components/LeftMenu.js.map +1 -0
  43. package/dist/admin/components/LeftMenu.mjs +151 -0
  44. package/dist/admin/components/LeftMenu.mjs.map +1 -0
  45. package/dist/admin/components/RelativeTime.js +76 -0
  46. package/dist/admin/components/RelativeTime.js.map +1 -0
  47. package/dist/admin/components/RelativeTime.mjs +55 -0
  48. package/dist/admin/components/RelativeTime.mjs.map +1 -0
  49. package/dist/admin/constants/attributes.js +48 -0
  50. package/dist/admin/constants/attributes.js.map +1 -0
  51. package/dist/admin/constants/attributes.mjs +38 -0
  52. package/dist/admin/constants/attributes.mjs.map +1 -0
  53. package/dist/admin/constants/collections.js +8 -0
  54. package/dist/admin/constants/collections.js.map +1 -0
  55. package/dist/admin/constants/collections.mjs +5 -0
  56. package/dist/admin/constants/collections.mjs.map +1 -0
  57. package/dist/admin/constants/dragAndDrop.js +13 -0
  58. package/dist/admin/constants/dragAndDrop.js.map +1 -0
  59. package/dist/admin/constants/dragAndDrop.mjs +11 -0
  60. package/dist/admin/constants/dragAndDrop.mjs.map +1 -0
  61. package/dist/admin/constants/hooks.js +27 -0
  62. package/dist/admin/constants/hooks.js.map +1 -0
  63. package/dist/admin/constants/hooks.mjs +25 -0
  64. package/dist/admin/constants/hooks.mjs.map +1 -0
  65. package/dist/admin/constants/plugin.js +14 -0
  66. package/dist/admin/constants/plugin.js.map +1 -0
  67. package/dist/admin/constants/plugin.mjs +11 -0
  68. package/dist/admin/constants/plugin.mjs.map +1 -0
  69. package/dist/admin/content-manager.js +133 -0
  70. package/dist/admin/content-manager.js.map +1 -0
  71. package/dist/admin/content-manager.mjs +131 -0
  72. package/dist/admin/content-manager.mjs.map +1 -0
  73. package/dist/admin/features/DocumentRBAC.js +125 -0
  74. package/dist/admin/features/DocumentRBAC.js.map +1 -0
  75. package/dist/admin/features/DocumentRBAC.mjs +103 -0
  76. package/dist/admin/features/DocumentRBAC.mjs.map +1 -0
  77. package/dist/admin/history/components/HistoryAction.js +61 -0
  78. package/dist/admin/history/components/HistoryAction.js.map +1 -0
  79. package/dist/admin/history/components/HistoryAction.mjs +59 -0
  80. package/dist/admin/history/components/HistoryAction.mjs.map +1 -0
  81. package/dist/admin/history/components/VersionContent.js +264 -0
  82. package/dist/admin/history/components/VersionContent.js.map +1 -0
  83. package/dist/admin/history/components/VersionContent.mjs +242 -0
  84. package/dist/admin/history/components/VersionContent.mjs.map +1 -0
  85. package/dist/admin/history/components/VersionHeader.js +210 -0
  86. package/dist/admin/history/components/VersionHeader.js.map +1 -0
  87. package/dist/admin/history/components/VersionHeader.mjs +189 -0
  88. package/dist/admin/history/components/VersionHeader.mjs.map +1 -0
  89. package/dist/admin/history/components/VersionInputRenderer.js +490 -0
  90. package/dist/admin/history/components/VersionInputRenderer.js.map +1 -0
  91. package/dist/admin/history/components/VersionInputRenderer.mjs +469 -0
  92. package/dist/admin/history/components/VersionInputRenderer.mjs.map +1 -0
  93. package/dist/admin/history/components/VersionsList.js +210 -0
  94. package/dist/admin/history/components/VersionsList.js.map +1 -0
  95. package/dist/admin/history/components/VersionsList.mjs +208 -0
  96. package/dist/admin/history/components/VersionsList.mjs.map +1 -0
  97. package/dist/admin/history/index.js +21 -0
  98. package/dist/admin/history/index.js.map +1 -0
  99. package/dist/admin/history/index.mjs +19 -0
  100. package/dist/admin/history/index.mjs.map +1 -0
  101. package/dist/admin/history/pages/History.js +220 -0
  102. package/dist/admin/history/pages/History.js.map +1 -0
  103. package/dist/admin/history/pages/History.mjs +197 -0
  104. package/dist/admin/history/pages/History.mjs.map +1 -0
  105. package/dist/admin/history/routes.js +41 -0
  106. package/dist/admin/history/routes.js.map +1 -0
  107. package/dist/admin/history/routes.mjs +20 -0
  108. package/dist/admin/history/routes.mjs.map +1 -0
  109. package/dist/admin/history/services/historyVersion.js +46 -0
  110. package/dist/admin/history/services/historyVersion.js.map +1 -0
  111. package/dist/admin/history/services/historyVersion.mjs +43 -0
  112. package/dist/admin/history/services/historyVersion.mjs.map +1 -0
  113. package/dist/admin/hooks/useContentManagerInitData.js +166 -0
  114. package/dist/admin/hooks/useContentManagerInitData.js.map +1 -0
  115. package/dist/admin/hooks/useContentManagerInitData.mjs +164 -0
  116. package/dist/admin/hooks/useContentManagerInitData.mjs.map +1 -0
  117. package/dist/admin/hooks/useContentTypeSchema.js +115 -0
  118. package/dist/admin/hooks/useContentTypeSchema.js.map +1 -0
  119. package/dist/admin/hooks/useContentTypeSchema.mjs +93 -0
  120. package/dist/admin/hooks/useContentTypeSchema.mjs.map +1 -0
  121. package/dist/admin/hooks/useDebounce.js +22 -0
  122. package/dist/admin/hooks/useDebounce.js.map +1 -0
  123. package/dist/admin/hooks/useDebounce.mjs +20 -0
  124. package/dist/admin/hooks/useDebounce.mjs.map +1 -0
  125. package/dist/admin/hooks/useDocument.js +244 -0
  126. package/dist/admin/hooks/useDocument.js.map +1 -0
  127. package/dist/admin/hooks/useDocument.mjs +221 -0
  128. package/dist/admin/hooks/useDocument.mjs.map +1 -0
  129. package/dist/admin/hooks/useDocumentActions.js +587 -0
  130. package/dist/admin/hooks/useDocumentActions.js.map +1 -0
  131. package/dist/admin/hooks/useDocumentActions.mjs +566 -0
  132. package/dist/admin/hooks/useDocumentActions.mjs.map +1 -0
  133. package/dist/admin/hooks/useDocumentLayout.js +311 -0
  134. package/dist/admin/hooks/useDocumentLayout.js.map +1 -0
  135. package/dist/admin/hooks/useDocumentLayout.mjs +286 -0
  136. package/dist/admin/hooks/useDocumentLayout.mjs.map +1 -0
  137. package/dist/admin/hooks/useDragAndDrop.js +193 -0
  138. package/dist/admin/hooks/useDragAndDrop.js.map +1 -0
  139. package/dist/admin/hooks/useDragAndDrop.mjs +170 -0
  140. package/dist/admin/hooks/useDragAndDrop.mjs.map +1 -0
  141. package/dist/admin/hooks/useKeyboardDragAndDrop.js +94 -0
  142. package/dist/admin/hooks/useKeyboardDragAndDrop.js.map +1 -0
  143. package/dist/admin/hooks/useKeyboardDragAndDrop.mjs +73 -0
  144. package/dist/admin/hooks/useKeyboardDragAndDrop.mjs.map +1 -0
  145. package/dist/admin/hooks/useLazyComponents.js +61 -0
  146. package/dist/admin/hooks/useLazyComponents.js.map +1 -0
  147. package/dist/admin/hooks/useLazyComponents.mjs +59 -0
  148. package/dist/admin/hooks/useLazyComponents.mjs.map +1 -0
  149. package/dist/admin/hooks/useOnce.js +28 -0
  150. package/dist/admin/hooks/useOnce.js.map +1 -0
  151. package/dist/admin/hooks/useOnce.mjs +7 -0
  152. package/dist/admin/hooks/useOnce.mjs.map +1 -0
  153. package/dist/admin/hooks/usePrev.js +16 -0
  154. package/dist/admin/hooks/usePrev.js.map +1 -0
  155. package/dist/admin/hooks/usePrev.mjs +14 -0
  156. package/dist/admin/hooks/usePrev.mjs.map +1 -0
  157. package/dist/admin/index.js +126 -13
  158. package/dist/admin/index.js.map +1 -1
  159. package/dist/admin/index.mjs +111 -12
  160. package/dist/admin/index.mjs.map +1 -1
  161. package/dist/admin/layout.js +142 -0
  162. package/dist/admin/layout.js.map +1 -0
  163. package/dist/admin/layout.mjs +121 -0
  164. package/dist/admin/layout.mjs.map +1 -0
  165. package/dist/admin/modules/app.js +33 -0
  166. package/dist/admin/modules/app.js.map +1 -0
  167. package/dist/admin/modules/app.mjs +30 -0
  168. package/dist/admin/modules/app.mjs.map +1 -0
  169. package/dist/admin/modules/hooks.js +10 -0
  170. package/dist/admin/modules/hooks.js.map +1 -0
  171. package/dist/admin/modules/hooks.mjs +7 -0
  172. package/dist/admin/modules/hooks.mjs.map +1 -0
  173. package/dist/admin/modules/reducers.js +11 -0
  174. package/dist/admin/modules/reducers.js.map +1 -0
  175. package/dist/admin/modules/reducers.mjs +9 -0
  176. package/dist/admin/modules/reducers.mjs.map +1 -0
  177. package/dist/admin/pages/ComponentConfigurationPage.js +248 -0
  178. package/dist/admin/pages/ComponentConfigurationPage.js.map +1 -0
  179. package/dist/admin/pages/ComponentConfigurationPage.mjs +226 -0
  180. package/dist/admin/pages/ComponentConfigurationPage.mjs.map +1 -0
  181. package/dist/admin/pages/EditConfigurationPage.js +164 -0
  182. package/dist/admin/pages/EditConfigurationPage.js.map +1 -0
  183. package/dist/admin/pages/EditConfigurationPage.mjs +142 -0
  184. package/dist/admin/pages/EditConfigurationPage.mjs.map +1 -0
  185. package/dist/admin/pages/EditView/EditViewPage.js +232 -0
  186. package/dist/admin/pages/EditView/EditViewPage.js.map +1 -0
  187. package/dist/admin/pages/EditView/EditViewPage.mjs +228 -0
  188. package/dist/admin/pages/EditView/EditViewPage.mjs.map +1 -0
  189. package/dist/admin/pages/EditView/components/DocumentActions.js +946 -0
  190. package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -0
  191. package/dist/admin/pages/EditView/components/DocumentActions.mjs +922 -0
  192. package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -0
  193. package/dist/admin/pages/EditView/components/DocumentStatus.js +35 -0
  194. package/dist/admin/pages/EditView/components/DocumentStatus.js.map +1 -0
  195. package/dist/admin/pages/EditView/components/DocumentStatus.mjs +33 -0
  196. package/dist/admin/pages/EditView/components/DocumentStatus.mjs.map +1 -0
  197. package/dist/admin/pages/EditView/components/EditorToolbarObserver.js +120 -0
  198. package/dist/admin/pages/EditView/components/EditorToolbarObserver.js.map +1 -0
  199. package/dist/admin/pages/EditView/components/EditorToolbarObserver.mjs +99 -0
  200. package/dist/admin/pages/EditView/components/EditorToolbarObserver.mjs.map +1 -0
  201. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.js +224 -0
  202. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.js.map +1 -0
  203. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.mjs +201 -0
  204. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.mjs.map +1 -0
  205. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Heading.js +165 -0
  206. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Heading.js.map +1 -0
  207. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Heading.mjs +163 -0
  208. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Heading.mjs.map +1 -0
  209. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.js +230 -0
  210. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.js.map +1 -0
  211. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.mjs +209 -0
  212. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.mjs.map +1 -0
  213. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.js +232 -0
  214. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.js.map +1 -0
  215. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.mjs +211 -0
  216. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.mjs.map +1 -0
  217. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.js +360 -0
  218. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.js.map +1 -0
  219. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.mjs +358 -0
  220. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.mjs.map +1 -0
  221. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Paragraph.js +95 -0
  222. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Paragraph.js.map +1 -0
  223. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Paragraph.mjs +93 -0
  224. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Paragraph.mjs.map +1 -0
  225. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Quote.js +49 -0
  226. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Quote.js.map +1 -0
  227. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Quote.mjs +47 -0
  228. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Quote.mjs.map +1 -0
  229. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js +532 -0
  230. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js.map +1 -0
  231. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs +511 -0
  232. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs.map +1 -0
  233. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js +222 -0
  234. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js.map +1 -0
  235. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs +198 -0
  236. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs.map +1 -0
  237. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksInput.js +64 -0
  238. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksInput.js.map +1 -0
  239. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksInput.mjs +43 -0
  240. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksInput.mjs.map +1 -0
  241. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js +635 -0
  242. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js.map +1 -0
  243. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs +612 -0
  244. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs.map +1 -0
  245. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js +138 -0
  246. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js.map +1 -0
  247. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs +117 -0
  248. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs.map +1 -0
  249. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Modifiers.js +134 -0
  250. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Modifiers.js.map +1 -0
  251. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Modifiers.mjs +132 -0
  252. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Modifiers.mjs.map +1 -0
  253. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withImages.js +17 -0
  254. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withImages.js.map +1 -0
  255. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withImages.mjs +15 -0
  256. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withImages.mjs.map +1 -0
  257. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withLinks.js +75 -0
  258. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withLinks.js.map +1 -0
  259. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withLinks.mjs +73 -0
  260. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withLinks.mjs.map +1 -0
  261. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withStrapiSchema.js +32 -0
  262. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withStrapiSchema.js.map +1 -0
  263. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withStrapiSchema.mjs +30 -0
  264. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withStrapiSchema.mjs.map +1 -0
  265. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/constants.js +223 -0
  266. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/constants.js.map +1 -0
  267. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/constants.mjs +221 -0
  268. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/constants.mjs.map +1 -0
  269. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/conversions.js +48 -0
  270. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/conversions.js.map +1 -0
  271. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/conversions.mjs +45 -0
  272. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/conversions.mjs.map +1 -0
  273. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/enterKey.js +64 -0
  274. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/enterKey.js.map +1 -0
  275. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/enterKey.mjs +62 -0
  276. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/enterKey.mjs.map +1 -0
  277. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/links.js +84 -0
  278. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/links.js.map +1 -0
  279. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/links.mjs +80 -0
  280. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/links.mjs.map +1 -0
  281. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/types.js +18 -0
  282. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/types.js.map +1 -0
  283. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/types.mjs +13 -0
  284. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/types.mjs.map +1 -0
  285. package/dist/admin/pages/EditView/components/FormInputs/Component/Initializer.js +59 -0
  286. package/dist/admin/pages/EditView/components/FormInputs/Component/Initializer.js.map +1 -0
  287. package/dist/admin/pages/EditView/components/FormInputs/Component/Initializer.mjs +57 -0
  288. package/dist/admin/pages/EditView/components/FormInputs/Component/Initializer.mjs.map +1 -0
  289. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js +106 -0
  290. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js.map +1 -0
  291. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.mjs +85 -0
  292. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.mjs.map +1 -0
  293. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js +67 -0
  294. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js.map +1 -0
  295. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs +65 -0
  296. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs.map +1 -0
  297. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js +412 -0
  298. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -0
  299. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs +391 -0
  300. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs.map +1 -0
  301. package/dist/admin/pages/EditView/components/FormInputs/ComponentContext.js +21 -0
  302. package/dist/admin/pages/EditView/components/FormInputs/ComponentContext.js.map +1 -0
  303. package/dist/admin/pages/EditView/components/FormInputs/ComponentContext.mjs +18 -0
  304. package/dist/admin/pages/EditView/components/FormInputs/ComponentContext.mjs.map +1 -0
  305. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/AddComponentButton.js +58 -0
  306. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/AddComponentButton.js.map +1 -0
  307. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/AddComponentButton.mjs +56 -0
  308. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/AddComponentButton.mjs.map +1 -0
  309. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js +94 -0
  310. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js.map +1 -0
  311. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs +92 -0
  312. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs.map +1 -0
  313. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentPicker.js +56 -0
  314. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentPicker.js.map +1 -0
  315. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentPicker.mjs +54 -0
  316. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentPicker.mjs.map +1 -0
  317. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +322 -0
  318. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -0
  319. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +301 -0
  320. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -0
  321. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicZoneLabel.js +73 -0
  322. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicZoneLabel.js.map +1 -0
  323. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicZoneLabel.mjs +71 -0
  324. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicZoneLabel.mjs.map +1 -0
  325. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js +252 -0
  326. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js.map +1 -0
  327. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs +230 -0
  328. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs.map +1 -0
  329. package/dist/admin/pages/EditView/components/FormInputs/NotAllowed.js +38 -0
  330. package/dist/admin/pages/EditView/components/FormInputs/NotAllowed.js.map +1 -0
  331. package/dist/admin/pages/EditView/components/FormInputs/NotAllowed.mjs +36 -0
  332. package/dist/admin/pages/EditView/components/FormInputs/NotAllowed.mjs.map +1 -0
  333. package/dist/admin/pages/EditView/components/FormInputs/Relations.js +845 -0
  334. package/dist/admin/pages/EditView/components/FormInputs/Relations.js.map +1 -0
  335. package/dist/admin/pages/EditView/components/FormInputs/Relations.mjs +821 -0
  336. package/dist/admin/pages/EditView/components/FormInputs/Relations.mjs.map +1 -0
  337. package/dist/admin/pages/EditView/components/FormInputs/UID.js +294 -0
  338. package/dist/admin/pages/EditView/components/FormInputs/UID.js.map +1 -0
  339. package/dist/admin/pages/EditView/components/FormInputs/UID.mjs +273 -0
  340. package/dist/admin/pages/EditView/components/FormInputs/UID.mjs.map +1 -0
  341. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js +463 -0
  342. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js.map +1 -0
  343. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.mjs +442 -0
  344. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.mjs.map +1 -0
  345. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.js +161 -0
  346. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.js.map +1 -0
  347. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.mjs +139 -0
  348. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.mjs.map +1 -0
  349. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Field.js +119 -0
  350. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Field.js.map +1 -0
  351. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Field.mjs +98 -0
  352. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Field.mjs.map +1 -0
  353. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/PreviewWysiwyg.js +209 -0
  354. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/PreviewWysiwyg.js.map +1 -0
  355. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/PreviewWysiwyg.mjs +188 -0
  356. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/PreviewWysiwyg.mjs.map +1 -0
  357. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygFooter.js +39 -0
  358. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygFooter.js.map +1 -0
  359. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygFooter.mjs +37 -0
  360. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygFooter.mjs.map +1 -0
  361. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.js +528 -0
  362. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.js.map +1 -0
  363. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.mjs +526 -0
  364. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.mjs.map +1 -0
  365. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygStyles.js +42 -0
  366. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygStyles.js.map +1 -0
  367. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygStyles.mjs +40 -0
  368. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygStyles.mjs.map +1 -0
  369. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/continueList.js +84 -0
  370. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/continueList.js.map +1 -0
  371. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/continueList.mjs +82 -0
  372. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/continueList.mjs.map +1 -0
  373. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/mdRenderer.js +45 -0
  374. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/mdRenderer.js.map +1 -0
  375. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/mdRenderer.mjs +43 -0
  376. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/mdRenderer.mjs.map +1 -0
  377. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/utils.js +364 -0
  378. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/utils.js.map +1 -0
  379. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/utils.mjs +355 -0
  380. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/utils.mjs.map +1 -0
  381. package/dist/admin/pages/EditView/components/FormLayout.js +99 -0
  382. package/dist/admin/pages/EditView/components/FormLayout.js.map +1 -0
  383. package/dist/admin/pages/EditView/components/FormLayout.mjs +94 -0
  384. package/dist/admin/pages/EditView/components/FormLayout.mjs.map +1 -0
  385. package/dist/admin/pages/EditView/components/Header.js +472 -0
  386. package/dist/admin/pages/EditView/components/Header.js.map +1 -0
  387. package/dist/admin/pages/EditView/components/Header.mjs +450 -0
  388. package/dist/admin/pages/EditView/components/Header.mjs.map +1 -0
  389. package/dist/admin/pages/EditView/components/InputRenderer.js +229 -0
  390. package/dist/admin/pages/EditView/components/InputRenderer.js.map +1 -0
  391. package/dist/admin/pages/EditView/components/InputRenderer.mjs +226 -0
  392. package/dist/admin/pages/EditView/components/InputRenderer.mjs.map +1 -0
  393. package/dist/admin/pages/EditView/components/Panels.js +141 -0
  394. package/dist/admin/pages/EditView/components/Panels.js.map +1 -0
  395. package/dist/admin/pages/EditView/components/Panels.mjs +119 -0
  396. package/dist/admin/pages/EditView/components/Panels.mjs.map +1 -0
  397. package/dist/admin/pages/EditView/utils/data.js +135 -0
  398. package/dist/admin/pages/EditView/utils/data.js.map +1 -0
  399. package/dist/admin/pages/EditView/utils/data.mjs +129 -0
  400. package/dist/admin/pages/EditView/utils/data.mjs.map +1 -0
  401. package/dist/admin/pages/EditView/utils/forms.js +32 -0
  402. package/dist/admin/pages/EditView/utils/forms.js.map +1 -0
  403. package/dist/admin/pages/EditView/utils/forms.mjs +30 -0
  404. package/dist/admin/pages/EditView/utils/forms.mjs.map +1 -0
  405. package/dist/admin/pages/ListConfiguration/ListConfigurationPage.js +178 -0
  406. package/dist/admin/pages/ListConfiguration/ListConfigurationPage.js.map +1 -0
  407. package/dist/admin/pages/ListConfiguration/ListConfigurationPage.mjs +156 -0
  408. package/dist/admin/pages/ListConfiguration/ListConfigurationPage.mjs.map +1 -0
  409. package/dist/admin/pages/ListConfiguration/components/DraggableCard.js +200 -0
  410. package/dist/admin/pages/ListConfiguration/components/DraggableCard.js.map +1 -0
  411. package/dist/admin/pages/ListConfiguration/components/DraggableCard.mjs +179 -0
  412. package/dist/admin/pages/ListConfiguration/components/DraggableCard.mjs.map +1 -0
  413. package/dist/admin/pages/ListConfiguration/components/EditFieldForm.js +158 -0
  414. package/dist/admin/pages/ListConfiguration/components/EditFieldForm.js.map +1 -0
  415. package/dist/admin/pages/ListConfiguration/components/EditFieldForm.mjs +137 -0
  416. package/dist/admin/pages/ListConfiguration/components/EditFieldForm.mjs.map +1 -0
  417. package/dist/admin/pages/ListConfiguration/components/Header.js +45 -0
  418. package/dist/admin/pages/ListConfiguration/components/Header.js.map +1 -0
  419. package/dist/admin/pages/ListConfiguration/components/Header.mjs +43 -0
  420. package/dist/admin/pages/ListConfiguration/components/Header.mjs.map +1 -0
  421. package/dist/admin/pages/ListConfiguration/components/Settings.js +201 -0
  422. package/dist/admin/pages/ListConfiguration/components/Settings.js.map +1 -0
  423. package/dist/admin/pages/ListConfiguration/components/Settings.mjs +180 -0
  424. package/dist/admin/pages/ListConfiguration/components/Settings.mjs.map +1 -0
  425. package/dist/admin/pages/ListConfiguration/components/SortDisplayedFields.js +171 -0
  426. package/dist/admin/pages/ListConfiguration/components/SortDisplayedFields.js.map +1 -0
  427. package/dist/admin/pages/ListConfiguration/components/SortDisplayedFields.mjs +150 -0
  428. package/dist/admin/pages/ListConfiguration/components/SortDisplayedFields.mjs.map +1 -0
  429. package/dist/admin/pages/ListView/ListViewPage.js +433 -0
  430. package/dist/admin/pages/ListView/ListViewPage.js.map +1 -0
  431. package/dist/admin/pages/ListView/ListViewPage.mjs +411 -0
  432. package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -0
  433. package/dist/admin/pages/ListView/components/AutoCloneFailureModal.js +88 -0
  434. package/dist/admin/pages/ListView/components/AutoCloneFailureModal.js.map +1 -0
  435. package/dist/admin/pages/ListView/components/AutoCloneFailureModal.mjs +86 -0
  436. package/dist/admin/pages/ListView/components/AutoCloneFailureModal.mjs.map +1 -0
  437. package/dist/admin/pages/ListView/components/BulkActions/Actions.js +233 -0
  438. package/dist/admin/pages/ListView/components/BulkActions/Actions.js.map +1 -0
  439. package/dist/admin/pages/ListView/components/BulkActions/Actions.mjs +210 -0
  440. package/dist/admin/pages/ListView/components/BulkActions/Actions.mjs.map +1 -0
  441. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js +171 -0
  442. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js.map +1 -0
  443. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs +149 -0
  444. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs.map +1 -0
  445. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js +568 -0
  446. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js.map +1 -0
  447. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs +546 -0
  448. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs.map +1 -0
  449. package/dist/admin/pages/ListView/components/Filters.js +243 -0
  450. package/dist/admin/pages/ListView/components/Filters.js.map +1 -0
  451. package/dist/admin/pages/ListView/components/Filters.mjs +222 -0
  452. package/dist/admin/pages/ListView/components/Filters.mjs.map +1 -0
  453. package/dist/admin/pages/ListView/components/TableActions.js +217 -0
  454. package/dist/admin/pages/ListView/components/TableActions.js.map +1 -0
  455. package/dist/admin/pages/ListView/components/TableActions.mjs +195 -0
  456. package/dist/admin/pages/ListView/components/TableActions.mjs.map +1 -0
  457. package/dist/admin/pages/ListView/components/TableCells/CellContent.js +130 -0
  458. package/dist/admin/pages/ListView/components/TableCells/CellContent.js.map +1 -0
  459. package/dist/admin/pages/ListView/components/TableCells/CellContent.mjs +128 -0
  460. package/dist/admin/pages/ListView/components/TableCells/CellContent.mjs.map +1 -0
  461. package/dist/admin/pages/ListView/components/TableCells/CellValue.js +53 -0
  462. package/dist/admin/pages/ListView/components/TableCells/CellValue.js.map +1 -0
  463. package/dist/admin/pages/ListView/components/TableCells/CellValue.mjs +51 -0
  464. package/dist/admin/pages/ListView/components/TableCells/CellValue.mjs.map +1 -0
  465. package/dist/admin/pages/ListView/components/TableCells/Components.js +65 -0
  466. package/dist/admin/pages/ListView/components/TableCells/Components.js.map +1 -0
  467. package/dist/admin/pages/ListView/components/TableCells/Components.mjs +62 -0
  468. package/dist/admin/pages/ListView/components/TableCells/Components.mjs.map +1 -0
  469. package/dist/admin/pages/ListView/components/TableCells/Media.js +76 -0
  470. package/dist/admin/pages/ListView/components/TableCells/Media.js.map +1 -0
  471. package/dist/admin/pages/ListView/components/TableCells/Media.mjs +73 -0
  472. package/dist/admin/pages/ListView/components/TableCells/Media.mjs.map +1 -0
  473. package/dist/admin/pages/ListView/components/TableCells/Relations.js +129 -0
  474. package/dist/admin/pages/ListView/components/TableCells/Relations.js.map +1 -0
  475. package/dist/admin/pages/ListView/components/TableCells/Relations.mjs +107 -0
  476. package/dist/admin/pages/ListView/components/TableCells/Relations.mjs.map +1 -0
  477. package/dist/admin/pages/ListView/components/ViewSettingsMenu.js +154 -0
  478. package/dist/admin/pages/ListView/components/ViewSettingsMenu.js.map +1 -0
  479. package/dist/admin/pages/ListView/components/ViewSettingsMenu.mjs +152 -0
  480. package/dist/admin/pages/ListView/components/ViewSettingsMenu.mjs.map +1 -0
  481. package/dist/admin/pages/NoContentTypePage.js +50 -0
  482. package/dist/admin/pages/NoContentTypePage.js.map +1 -0
  483. package/dist/admin/pages/NoContentTypePage.mjs +48 -0
  484. package/dist/admin/pages/NoContentTypePage.mjs.map +1 -0
  485. package/dist/admin/pages/NoPermissionsPage.js +26 -0
  486. package/dist/admin/pages/NoPermissionsPage.js.map +1 -0
  487. package/dist/admin/pages/NoPermissionsPage.mjs +24 -0
  488. package/dist/admin/pages/NoPermissionsPage.mjs.map +1 -0
  489. package/dist/admin/preview/components/PreviewContent.js +25 -0
  490. package/dist/admin/preview/components/PreviewContent.js.map +1 -0
  491. package/dist/admin/preview/components/PreviewContent.mjs +23 -0
  492. package/dist/admin/preview/components/PreviewContent.mjs.map +1 -0
  493. package/dist/admin/preview/components/PreviewHeader.js +336 -0
  494. package/dist/admin/preview/components/PreviewHeader.js.map +1 -0
  495. package/dist/admin/preview/components/PreviewHeader.mjs +333 -0
  496. package/dist/admin/preview/components/PreviewHeader.mjs.map +1 -0
  497. package/dist/admin/preview/components/PreviewSidePanel.js +91 -0
  498. package/dist/admin/preview/components/PreviewSidePanel.js.map +1 -0
  499. package/dist/admin/preview/components/PreviewSidePanel.mjs +89 -0
  500. package/dist/admin/preview/components/PreviewSidePanel.mjs.map +1 -0
  501. package/dist/admin/preview/index.js +15 -0
  502. package/dist/admin/preview/index.js.map +1 -0
  503. package/dist/admin/preview/index.mjs +13 -0
  504. package/dist/admin/preview/index.mjs.map +1 -0
  505. package/dist/admin/preview/pages/Preview.js +286 -0
  506. package/dist/admin/preview/pages/Preview.js.map +1 -0
  507. package/dist/admin/preview/pages/Preview.mjs +264 -0
  508. package/dist/admin/preview/pages/Preview.mjs.map +1 -0
  509. package/dist/admin/preview/routes.js +39 -0
  510. package/dist/admin/preview/routes.js.map +1 -0
  511. package/dist/admin/preview/routes.mjs +18 -0
  512. package/dist/admin/preview/routes.mjs.map +1 -0
  513. package/dist/admin/preview/services/preview.js +23 -0
  514. package/dist/admin/preview/services/preview.js.map +1 -0
  515. package/dist/admin/preview/services/preview.mjs +21 -0
  516. package/dist/admin/preview/services/preview.mjs.map +1 -0
  517. package/dist/admin/router.js +86 -0
  518. package/dist/admin/router.js.map +1 -0
  519. package/dist/admin/router.mjs +82 -0
  520. package/dist/admin/router.mjs.map +1 -0
  521. package/dist/admin/services/api.js +20 -0
  522. package/dist/admin/services/api.js.map +1 -0
  523. package/dist/admin/services/api.mjs +18 -0
  524. package/dist/admin/services/api.mjs.map +1 -0
  525. package/dist/admin/services/components.js +42 -0
  526. package/dist/admin/services/components.js.map +1 -0
  527. package/dist/admin/services/components.mjs +39 -0
  528. package/dist/admin/services/components.mjs.map +1 -0
  529. package/dist/admin/services/contentTypes.js +63 -0
  530. package/dist/admin/services/contentTypes.js.map +1 -0
  531. package/dist/admin/services/contentTypes.mjs +59 -0
  532. package/dist/admin/services/contentTypes.mjs.map +1 -0
  533. package/dist/admin/services/documents.js +374 -0
  534. package/dist/admin/services/documents.js.map +1 -0
  535. package/dist/admin/services/documents.mjs +357 -0
  536. package/dist/admin/services/documents.mjs.map +1 -0
  537. package/dist/admin/services/init.js +19 -0
  538. package/dist/admin/services/init.js.map +1 -0
  539. package/dist/admin/services/init.mjs +17 -0
  540. package/dist/admin/services/init.mjs.map +1 -0
  541. package/dist/admin/services/relations.js +144 -0
  542. package/dist/admin/services/relations.js.map +1 -0
  543. package/dist/admin/services/relations.mjs +141 -0
  544. package/dist/admin/services/relations.mjs.map +1 -0
  545. package/dist/admin/services/uid.js +54 -0
  546. package/dist/admin/services/uid.js.map +1 -0
  547. package/dist/admin/services/uid.mjs +50 -0
  548. package/dist/admin/services/uid.mjs.map +1 -0
  549. package/dist/admin/src/components/InjectionZone.d.ts +7 -1
  550. package/dist/admin/src/content-manager.d.ts +4 -0
  551. package/dist/admin/src/history/services/historyVersion.d.ts +1 -1
  552. package/dist/admin/src/hooks/useDocument.d.ts +4 -2
  553. package/dist/admin/src/hooks/useDocumentActions.d.ts +1 -0
  554. package/dist/admin/src/index.d.ts +1 -0
  555. package/dist/admin/src/pages/EditView/components/DocumentActions.d.ts +2 -1
  556. package/dist/admin/src/pages/EditView/components/EditorToolbarObserver.d.ts +11 -0
  557. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.d.ts +49 -1
  558. package/dist/admin/src/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.d.ts +1 -2
  559. package/dist/admin/src/pages/EditView/components/FormLayout.d.ts +2 -1
  560. package/dist/admin/src/preview/components/PreviewHeader.d.ts +2 -1
  561. package/dist/admin/src/preview/index.d.ts +2 -3
  562. package/dist/admin/src/preview/pages/Preview.d.ts +4 -0
  563. package/dist/admin/translations/ar.json.js +229 -0
  564. package/dist/admin/translations/ar.json.js.map +1 -0
  565. package/dist/admin/translations/ar.json.mjs +222 -0
  566. package/dist/admin/translations/ar.json.mjs.map +1 -0
  567. package/dist/admin/translations/ca.json.js +204 -0
  568. package/dist/admin/translations/ca.json.js.map +1 -0
  569. package/dist/admin/translations/ca.json.mjs +197 -0
  570. package/dist/admin/translations/ca.json.mjs.map +1 -0
  571. package/dist/admin/translations/cs.json.js +128 -0
  572. package/dist/admin/translations/cs.json.js.map +1 -0
  573. package/dist/admin/translations/cs.json.mjs +122 -0
  574. package/dist/admin/translations/cs.json.mjs.map +1 -0
  575. package/dist/admin/translations/de.json.js +202 -0
  576. package/dist/admin/translations/de.json.js.map +1 -0
  577. package/dist/admin/translations/de.json.mjs +195 -0
  578. package/dist/admin/translations/de.json.mjs.map +1 -0
  579. package/dist/admin/translations/en.json.js +317 -0
  580. package/dist/admin/translations/en.json.js.map +1 -0
  581. package/dist/admin/translations/en.json.mjs +310 -0
  582. package/dist/admin/translations/en.json.mjs.map +1 -0
  583. package/dist/admin/translations/es.json.js +199 -0
  584. package/dist/admin/translations/es.json.js.map +1 -0
  585. package/dist/admin/translations/es.json.mjs +192 -0
  586. package/dist/admin/translations/es.json.mjs.map +1 -0
  587. package/dist/admin/translations/eu.json.js +205 -0
  588. package/dist/admin/translations/eu.json.js.map +1 -0
  589. package/dist/admin/translations/eu.json.mjs +198 -0
  590. package/dist/admin/translations/eu.json.mjs.map +1 -0
  591. package/dist/admin/translations/fr.json.js +222 -0
  592. package/dist/admin/translations/fr.json.js.map +1 -0
  593. package/dist/admin/translations/fr.json.mjs +215 -0
  594. package/dist/admin/translations/fr.json.mjs.map +1 -0
  595. package/dist/admin/translations/gu.json.js +203 -0
  596. package/dist/admin/translations/gu.json.js.map +1 -0
  597. package/dist/admin/translations/gu.json.mjs +196 -0
  598. package/dist/admin/translations/gu.json.mjs.map +1 -0
  599. package/dist/admin/translations/hi.json.js +203 -0
  600. package/dist/admin/translations/hi.json.js.map +1 -0
  601. package/dist/admin/translations/hi.json.mjs +196 -0
  602. package/dist/admin/translations/hi.json.mjs.map +1 -0
  603. package/dist/admin/translations/hu.json.js +205 -0
  604. package/dist/admin/translations/hu.json.js.map +1 -0
  605. package/dist/admin/translations/hu.json.mjs +198 -0
  606. package/dist/admin/translations/hu.json.mjs.map +1 -0
  607. package/dist/admin/translations/id.json.js +163 -0
  608. package/dist/admin/translations/id.json.js.map +1 -0
  609. package/dist/admin/translations/id.json.mjs +156 -0
  610. package/dist/admin/translations/id.json.mjs.map +1 -0
  611. package/dist/admin/translations/it.json.js +165 -0
  612. package/dist/admin/translations/it.json.js.map +1 -0
  613. package/dist/admin/translations/it.json.mjs +158 -0
  614. package/dist/admin/translations/it.json.mjs.map +1 -0
  615. package/dist/admin/translations/ja.json.js +199 -0
  616. package/dist/admin/translations/ja.json.js.map +1 -0
  617. package/dist/admin/translations/ja.json.mjs +192 -0
  618. package/dist/admin/translations/ja.json.mjs.map +1 -0
  619. package/dist/admin/translations/ko.json.js +198 -0
  620. package/dist/admin/translations/ko.json.js.map +1 -0
  621. package/dist/admin/translations/ko.json.mjs +191 -0
  622. package/dist/admin/translations/ko.json.mjs.map +1 -0
  623. package/dist/admin/translations/ml.json.js +203 -0
  624. package/dist/admin/translations/ml.json.js.map +1 -0
  625. package/dist/admin/translations/ml.json.mjs +196 -0
  626. package/dist/admin/translations/ml.json.mjs.map +1 -0
  627. package/dist/admin/translations/ms.json.js +147 -0
  628. package/dist/admin/translations/ms.json.js.map +1 -0
  629. package/dist/admin/translations/ms.json.mjs +140 -0
  630. package/dist/admin/translations/ms.json.mjs.map +1 -0
  631. package/dist/admin/translations/nl.json.js +205 -0
  632. package/dist/admin/translations/nl.json.js.map +1 -0
  633. package/dist/admin/translations/nl.json.mjs +198 -0
  634. package/dist/admin/translations/nl.json.mjs.map +1 -0
  635. package/dist/admin/translations/pl.json.js +202 -0
  636. package/dist/admin/translations/pl.json.js.map +1 -0
  637. package/dist/admin/translations/pl.json.mjs +195 -0
  638. package/dist/admin/translations/pl.json.mjs.map +1 -0
  639. package/dist/admin/translations/pt-BR.json.js +204 -0
  640. package/dist/admin/translations/pt-BR.json.js.map +1 -0
  641. package/dist/admin/translations/pt-BR.json.mjs +197 -0
  642. package/dist/admin/translations/pt-BR.json.mjs.map +1 -0
  643. package/dist/admin/translations/pt.json.js +98 -0
  644. package/dist/admin/translations/pt.json.js.map +1 -0
  645. package/dist/admin/translations/pt.json.mjs +93 -0
  646. package/dist/admin/translations/pt.json.mjs.map +1 -0
  647. package/dist/admin/translations/ru.json.js +232 -0
  648. package/dist/admin/translations/ru.json.js.map +1 -0
  649. package/dist/admin/translations/ru.json.mjs +230 -0
  650. package/dist/admin/translations/ru.json.mjs.map +1 -0
  651. package/dist/admin/translations/sa.json.js +203 -0
  652. package/dist/admin/translations/sa.json.js.map +1 -0
  653. package/dist/admin/translations/sa.json.mjs +196 -0
  654. package/dist/admin/translations/sa.json.mjs.map +1 -0
  655. package/dist/admin/translations/sk.json.js +205 -0
  656. package/dist/admin/translations/sk.json.js.map +1 -0
  657. package/dist/admin/translations/sk.json.mjs +198 -0
  658. package/dist/admin/translations/sk.json.mjs.map +1 -0
  659. package/dist/admin/translations/sv.json.js +205 -0
  660. package/dist/admin/translations/sv.json.js.map +1 -0
  661. package/dist/admin/translations/sv.json.mjs +198 -0
  662. package/dist/admin/translations/sv.json.mjs.map +1 -0
  663. package/dist/admin/translations/th.json.js +151 -0
  664. package/dist/admin/translations/th.json.js.map +1 -0
  665. package/dist/admin/translations/th.json.mjs +144 -0
  666. package/dist/admin/translations/th.json.mjs.map +1 -0
  667. package/dist/admin/translations/tr.json.js +202 -0
  668. package/dist/admin/translations/tr.json.js.map +1 -0
  669. package/dist/admin/translations/tr.json.mjs +195 -0
  670. package/dist/admin/translations/tr.json.mjs.map +1 -0
  671. package/dist/admin/translations/uk.json.js +320 -0
  672. package/dist/admin/translations/uk.json.js.map +1 -0
  673. package/dist/admin/translations/uk.json.mjs +313 -0
  674. package/dist/admin/translations/uk.json.mjs.map +1 -0
  675. package/dist/admin/translations/vi.json.js +114 -0
  676. package/dist/admin/translations/vi.json.js.map +1 -0
  677. package/dist/admin/translations/vi.json.mjs +108 -0
  678. package/dist/admin/translations/vi.json.mjs.map +1 -0
  679. package/dist/admin/translations/zh-Hans.json.js +955 -0
  680. package/dist/admin/translations/zh-Hans.json.js.map +1 -0
  681. package/dist/admin/translations/zh-Hans.json.mjs +934 -0
  682. package/dist/admin/translations/zh-Hans.json.mjs.map +1 -0
  683. package/dist/admin/translations/zh.json.js +212 -0
  684. package/dist/admin/translations/zh.json.js.map +1 -0
  685. package/dist/admin/translations/zh.json.mjs +205 -0
  686. package/dist/admin/translations/zh.json.mjs.map +1 -0
  687. package/dist/admin/utils/api.js +22 -0
  688. package/dist/admin/utils/api.js.map +1 -0
  689. package/dist/admin/utils/api.mjs +19 -0
  690. package/dist/admin/utils/api.mjs.map +1 -0
  691. package/dist/admin/utils/attributes.js +34 -0
  692. package/dist/admin/utils/attributes.js.map +1 -0
  693. package/dist/admin/utils/attributes.mjs +31 -0
  694. package/dist/admin/utils/attributes.mjs.map +1 -0
  695. package/dist/admin/utils/objects.js +78 -0
  696. package/dist/admin/utils/objects.js.map +1 -0
  697. package/dist/admin/utils/objects.mjs +73 -0
  698. package/dist/admin/utils/objects.mjs.map +1 -0
  699. package/dist/admin/utils/relations.js +19 -0
  700. package/dist/admin/utils/relations.js.map +1 -0
  701. package/dist/admin/utils/relations.mjs +17 -0
  702. package/dist/admin/utils/relations.mjs.map +1 -0
  703. package/dist/admin/utils/strings.js +6 -0
  704. package/dist/admin/utils/strings.js.map +1 -0
  705. package/dist/admin/utils/strings.mjs +4 -0
  706. package/dist/admin/utils/strings.mjs.map +1 -0
  707. package/dist/admin/utils/translations.js +13 -0
  708. package/dist/admin/utils/translations.js.map +1 -0
  709. package/dist/admin/utils/translations.mjs +10 -0
  710. package/dist/admin/utils/translations.mjs.map +1 -0
  711. package/dist/admin/utils/urls.js +8 -0
  712. package/dist/admin/utils/urls.js.map +1 -0
  713. package/dist/admin/utils/urls.mjs +6 -0
  714. package/dist/admin/utils/urls.mjs.map +1 -0
  715. package/dist/admin/utils/users.js +17 -0
  716. package/dist/admin/utils/users.js.map +1 -0
  717. package/dist/admin/utils/users.mjs +15 -0
  718. package/dist/admin/utils/users.mjs.map +1 -0
  719. package/dist/admin/utils/validation.js +290 -0
  720. package/dist/admin/utils/validation.js.map +1 -0
  721. package/dist/admin/utils/validation.mjs +269 -0
  722. package/dist/admin/utils/validation.mjs.map +1 -0
  723. package/dist/server/bootstrap.js +25 -0
  724. package/dist/server/bootstrap.js.map +1 -0
  725. package/dist/server/bootstrap.mjs +23 -0
  726. package/dist/server/bootstrap.mjs.map +1 -0
  727. package/dist/server/constants/index.js +9 -0
  728. package/dist/server/constants/index.js.map +1 -0
  729. package/dist/server/constants/index.mjs +7 -0
  730. package/dist/server/constants/index.mjs.map +1 -0
  731. package/dist/server/controllers/collection-types.js +647 -0
  732. package/dist/server/controllers/collection-types.js.map +1 -0
  733. package/dist/server/controllers/collection-types.mjs +645 -0
  734. package/dist/server/controllers/collection-types.mjs.map +1 -0
  735. package/dist/server/controllers/components.js +60 -0
  736. package/dist/server/controllers/components.js.map +1 -0
  737. package/dist/server/controllers/components.mjs +58 -0
  738. package/dist/server/controllers/components.mjs.map +1 -0
  739. package/dist/server/controllers/content-types.js +108 -0
  740. package/dist/server/controllers/content-types.js.map +1 -0
  741. package/dist/server/controllers/content-types.mjs +106 -0
  742. package/dist/server/controllers/content-types.mjs.map +1 -0
  743. package/dist/server/controllers/index.js +26 -0
  744. package/dist/server/controllers/index.js.map +1 -0
  745. package/dist/server/controllers/index.mjs +24 -0
  746. package/dist/server/controllers/index.mjs.map +1 -0
  747. package/dist/server/controllers/init.js +22 -0
  748. package/dist/server/controllers/init.js.map +1 -0
  749. package/dist/server/controllers/init.mjs +20 -0
  750. package/dist/server/controllers/init.mjs.map +1 -0
  751. package/dist/server/controllers/relations.js +432 -0
  752. package/dist/server/controllers/relations.js.map +1 -0
  753. package/dist/server/controllers/relations.mjs +430 -0
  754. package/dist/server/controllers/relations.mjs.map +1 -0
  755. package/dist/server/controllers/single-types.js +302 -0
  756. package/dist/server/controllers/single-types.js.map +1 -0
  757. package/dist/server/controllers/single-types.mjs +300 -0
  758. package/dist/server/controllers/single-types.mjs.map +1 -0
  759. package/dist/server/controllers/uid.js +48 -0
  760. package/dist/server/controllers/uid.js.map +1 -0
  761. package/dist/server/controllers/uid.mjs +46 -0
  762. package/dist/server/controllers/uid.mjs.map +1 -0
  763. package/dist/server/controllers/utils/clone.js +138 -0
  764. package/dist/server/controllers/utils/clone.js.map +1 -0
  765. package/dist/server/controllers/utils/clone.mjs +135 -0
  766. package/dist/server/controllers/utils/clone.mjs.map +1 -0
  767. package/dist/server/controllers/utils/metadata.js +26 -0
  768. package/dist/server/controllers/utils/metadata.js.map +1 -0
  769. package/dist/server/controllers/utils/metadata.mjs +24 -0
  770. package/dist/server/controllers/utils/metadata.mjs.map +1 -0
  771. package/dist/server/controllers/validation/dimensions.js +41 -0
  772. package/dist/server/controllers/validation/dimensions.js.map +1 -0
  773. package/dist/server/controllers/validation/dimensions.mjs +39 -0
  774. package/dist/server/controllers/validation/dimensions.mjs.map +1 -0
  775. package/dist/server/controllers/validation/index.js +56 -0
  776. package/dist/server/controllers/validation/index.js.map +1 -0
  777. package/dist/server/controllers/validation/index.mjs +50 -0
  778. package/dist/server/controllers/validation/index.mjs.map +1 -0
  779. package/dist/server/controllers/validation/model-configuration.js +81 -0
  780. package/dist/server/controllers/validation/model-configuration.js.map +1 -0
  781. package/dist/server/controllers/validation/model-configuration.mjs +79 -0
  782. package/dist/server/controllers/validation/model-configuration.mjs.map +1 -0
  783. package/dist/server/controllers/validation/relations.js +37 -0
  784. package/dist/server/controllers/validation/relations.js.map +1 -0
  785. package/dist/server/controllers/validation/relations.mjs +34 -0
  786. package/dist/server/controllers/validation/relations.mjs.map +1 -0
  787. package/dist/server/destroy.js +12 -0
  788. package/dist/server/destroy.js.map +1 -0
  789. package/dist/server/destroy.mjs +10 -0
  790. package/dist/server/destroy.mjs.map +1 -0
  791. package/dist/server/history/constants.js +16 -0
  792. package/dist/server/history/constants.js.map +1 -0
  793. package/dist/server/history/constants.mjs +13 -0
  794. package/dist/server/history/constants.mjs.map +1 -0
  795. package/dist/server/history/controllers/history-version.js +107 -0
  796. package/dist/server/history/controllers/history-version.js.map +1 -0
  797. package/dist/server/history/controllers/history-version.mjs +105 -0
  798. package/dist/server/history/controllers/history-version.mjs.map +1 -0
  799. package/dist/server/history/controllers/index.js +10 -0
  800. package/dist/server/history/controllers/index.js.map +1 -0
  801. package/dist/server/history/controllers/index.mjs +8 -0
  802. package/dist/server/history/controllers/index.mjs.map +1 -0
  803. package/dist/server/history/controllers/validation/history-version.js +31 -0
  804. package/dist/server/history/controllers/validation/history-version.js.map +1 -0
  805. package/dist/server/history/controllers/validation/history-version.mjs +10 -0
  806. package/dist/server/history/controllers/validation/history-version.mjs.map +1 -0
  807. package/dist/server/history/index.js +42 -0
  808. package/dist/server/history/index.js.map +1 -0
  809. package/dist/server/history/index.mjs +40 -0
  810. package/dist/server/history/index.mjs.map +1 -0
  811. package/dist/server/history/models/history-version.js +59 -0
  812. package/dist/server/history/models/history-version.js.map +1 -0
  813. package/dist/server/history/models/history-version.mjs +57 -0
  814. package/dist/server/history/models/history-version.mjs.map +1 -0
  815. package/dist/server/history/routes/history-version.js +36 -0
  816. package/dist/server/history/routes/history-version.js.map +1 -0
  817. package/dist/server/history/routes/history-version.mjs +34 -0
  818. package/dist/server/history/routes/history-version.mjs.map +1 -0
  819. package/dist/server/history/routes/index.js +13 -0
  820. package/dist/server/history/routes/index.js.map +1 -0
  821. package/dist/server/history/routes/index.mjs +11 -0
  822. package/dist/server/history/routes/index.mjs.map +1 -0
  823. package/dist/server/history/services/history.js +203 -0
  824. package/dist/server/history/services/history.js.map +1 -0
  825. package/dist/server/history/services/history.mjs +201 -0
  826. package/dist/server/history/services/history.mjs.map +1 -0
  827. package/dist/server/history/services/index.js +12 -0
  828. package/dist/server/history/services/index.js.map +1 -0
  829. package/dist/server/history/services/index.mjs +10 -0
  830. package/dist/server/history/services/index.mjs.map +1 -0
  831. package/dist/server/history/services/lifecycles.js +153 -0
  832. package/dist/server/history/services/lifecycles.js.map +1 -0
  833. package/dist/server/history/services/lifecycles.mjs +151 -0
  834. package/dist/server/history/services/lifecycles.mjs.map +1 -0
  835. package/dist/server/history/services/utils.js +281 -0
  836. package/dist/server/history/services/utils.js.map +1 -0
  837. package/dist/server/history/services/utils.mjs +279 -0
  838. package/dist/server/history/services/utils.mjs.map +1 -0
  839. package/dist/server/history/utils.js +9 -0
  840. package/dist/server/history/utils.js.map +1 -0
  841. package/dist/server/history/utils.mjs +7 -0
  842. package/dist/server/history/utils.mjs.map +1 -0
  843. package/dist/server/index.js +22 -4693
  844. package/dist/server/index.js.map +1 -1
  845. package/dist/server/index.mjs +21 -4671
  846. package/dist/server/index.mjs.map +1 -1
  847. package/dist/server/middlewares/routing.js +40 -0
  848. package/dist/server/middlewares/routing.js.map +1 -0
  849. package/dist/server/middlewares/routing.mjs +38 -0
  850. package/dist/server/middlewares/routing.mjs.map +1 -0
  851. package/dist/server/policies/hasPermissions.js +24 -0
  852. package/dist/server/policies/hasPermissions.js.map +1 -0
  853. package/dist/server/policies/hasPermissions.mjs +22 -0
  854. package/dist/server/policies/hasPermissions.mjs.map +1 -0
  855. package/dist/server/policies/index.js +10 -0
  856. package/dist/server/policies/index.js.map +1 -0
  857. package/dist/server/policies/index.mjs +8 -0
  858. package/dist/server/policies/index.mjs.map +1 -0
  859. package/dist/server/preview/controllers/index.js +10 -0
  860. package/dist/server/preview/controllers/index.js.map +1 -0
  861. package/dist/server/preview/controllers/index.mjs +8 -0
  862. package/dist/server/preview/controllers/index.mjs.map +1 -0
  863. package/dist/server/preview/controllers/preview.js +34 -0
  864. package/dist/server/preview/controllers/preview.js.map +1 -0
  865. package/dist/server/preview/controllers/preview.mjs +32 -0
  866. package/dist/server/preview/controllers/preview.mjs.map +1 -0
  867. package/dist/server/preview/controllers/validation/preview.js +70 -0
  868. package/dist/server/preview/controllers/validation/preview.js.map +1 -0
  869. package/dist/server/preview/controllers/validation/preview.mjs +49 -0
  870. package/dist/server/preview/controllers/validation/preview.mjs.map +1 -0
  871. package/dist/server/preview/index.js +27 -0
  872. package/dist/server/preview/index.js.map +1 -0
  873. package/dist/server/preview/index.mjs +25 -0
  874. package/dist/server/preview/index.mjs.map +1 -0
  875. package/dist/server/preview/routes/index.js +13 -0
  876. package/dist/server/preview/routes/index.js.map +1 -0
  877. package/dist/server/preview/routes/index.mjs +11 -0
  878. package/dist/server/preview/routes/index.mjs.map +1 -0
  879. package/dist/server/preview/routes/preview.js +25 -0
  880. package/dist/server/preview/routes/preview.js.map +1 -0
  881. package/dist/server/preview/routes/preview.mjs +23 -0
  882. package/dist/server/preview/routes/preview.mjs.map +1 -0
  883. package/dist/server/preview/services/index.js +12 -0
  884. package/dist/server/preview/services/index.js.map +1 -0
  885. package/dist/server/preview/services/index.mjs +10 -0
  886. package/dist/server/preview/services/index.mjs.map +1 -0
  887. package/dist/server/preview/services/preview-config.js +91 -0
  888. package/dist/server/preview/services/preview-config.js.map +1 -0
  889. package/dist/server/preview/services/preview-config.mjs +89 -0
  890. package/dist/server/preview/services/preview-config.mjs.map +1 -0
  891. package/dist/server/preview/services/preview.js +27 -0
  892. package/dist/server/preview/services/preview.js.map +1 -0
  893. package/dist/server/preview/services/preview.mjs +25 -0
  894. package/dist/server/preview/services/preview.mjs.map +1 -0
  895. package/dist/server/preview/utils.js +9 -0
  896. package/dist/server/preview/utils.js.map +1 -0
  897. package/dist/server/preview/utils.mjs +7 -0
  898. package/dist/server/preview/utils.mjs.map +1 -0
  899. package/dist/server/register.js +16 -0
  900. package/dist/server/register.js.map +1 -0
  901. package/dist/server/register.mjs +14 -0
  902. package/dist/server/register.mjs.map +1 -0
  903. package/dist/server/routes/admin.js +599 -0
  904. package/dist/server/routes/admin.js.map +1 -0
  905. package/dist/server/routes/admin.mjs +597 -0
  906. package/dist/server/routes/admin.mjs.map +1 -0
  907. package/dist/server/routes/index.js +14 -0
  908. package/dist/server/routes/index.js.map +1 -0
  909. package/dist/server/routes/index.mjs +12 -0
  910. package/dist/server/routes/index.mjs.map +1 -0
  911. package/dist/server/services/components.js +73 -0
  912. package/dist/server/services/components.js.map +1 -0
  913. package/dist/server/services/components.mjs +71 -0
  914. package/dist/server/services/components.mjs.map +1 -0
  915. package/dist/server/services/configuration.js +58 -0
  916. package/dist/server/services/configuration.js.map +1 -0
  917. package/dist/server/services/configuration.mjs +56 -0
  918. package/dist/server/services/configuration.mjs.map +1 -0
  919. package/dist/server/services/content-types.js +60 -0
  920. package/dist/server/services/content-types.js.map +1 -0
  921. package/dist/server/services/content-types.mjs +58 -0
  922. package/dist/server/services/content-types.mjs.map +1 -0
  923. package/dist/server/services/data-mapper.js +66 -0
  924. package/dist/server/services/data-mapper.js.map +1 -0
  925. package/dist/server/services/data-mapper.mjs +64 -0
  926. package/dist/server/services/data-mapper.mjs.map +1 -0
  927. package/dist/server/services/document-manager.js +238 -0
  928. package/dist/server/services/document-manager.js.map +1 -0
  929. package/dist/server/services/document-manager.mjs +236 -0
  930. package/dist/server/services/document-manager.mjs.map +1 -0
  931. package/dist/server/services/document-metadata.js +237 -0
  932. package/dist/server/services/document-metadata.js.map +1 -0
  933. package/dist/server/services/document-metadata.mjs +235 -0
  934. package/dist/server/services/document-metadata.mjs.map +1 -0
  935. package/dist/server/services/field-sizes.js +90 -0
  936. package/dist/server/services/field-sizes.js.map +1 -0
  937. package/dist/server/services/field-sizes.mjs +88 -0
  938. package/dist/server/services/field-sizes.mjs.map +1 -0
  939. package/dist/server/services/index.js +34 -0
  940. package/dist/server/services/index.js.map +1 -0
  941. package/dist/server/services/index.mjs +32 -0
  942. package/dist/server/services/index.mjs.map +1 -0
  943. package/dist/server/services/metrics.js +35 -0
  944. package/dist/server/services/metrics.js.map +1 -0
  945. package/dist/server/services/metrics.mjs +33 -0
  946. package/dist/server/services/metrics.mjs.map +1 -0
  947. package/dist/server/services/permission-checker.js +112 -0
  948. package/dist/server/services/permission-checker.js.map +1 -0
  949. package/dist/server/services/permission-checker.mjs +110 -0
  950. package/dist/server/services/permission-checker.mjs.map +1 -0
  951. package/dist/server/services/permission.js +93 -0
  952. package/dist/server/services/permission.js.map +1 -0
  953. package/dist/server/services/permission.mjs +91 -0
  954. package/dist/server/services/permission.mjs.map +1 -0
  955. package/dist/server/services/populate-builder.js +75 -0
  956. package/dist/server/services/populate-builder.js.map +1 -0
  957. package/dist/server/services/populate-builder.mjs +73 -0
  958. package/dist/server/services/populate-builder.mjs.map +1 -0
  959. package/dist/server/services/uid.js +85 -0
  960. package/dist/server/services/uid.js.map +1 -0
  961. package/dist/server/services/uid.mjs +83 -0
  962. package/dist/server/services/uid.mjs.map +1 -0
  963. package/dist/server/services/utils/configuration/attributes.js +185 -0
  964. package/dist/server/services/utils/configuration/attributes.js.map +1 -0
  965. package/dist/server/services/utils/configuration/attributes.mjs +175 -0
  966. package/dist/server/services/utils/configuration/attributes.mjs.map +1 -0
  967. package/dist/server/services/utils/configuration/index.js +37 -0
  968. package/dist/server/services/utils/configuration/index.js.map +1 -0
  969. package/dist/server/services/utils/configuration/index.mjs +34 -0
  970. package/dist/server/services/utils/configuration/index.mjs.map +1 -0
  971. package/dist/server/services/utils/configuration/layouts.js +120 -0
  972. package/dist/server/services/utils/configuration/layouts.js.map +1 -0
  973. package/dist/server/services/utils/configuration/layouts.mjs +117 -0
  974. package/dist/server/services/utils/configuration/layouts.mjs.map +1 -0
  975. package/dist/server/services/utils/configuration/metadatas.js +147 -0
  976. package/dist/server/services/utils/configuration/metadatas.js.map +1 -0
  977. package/dist/server/services/utils/configuration/metadatas.mjs +144 -0
  978. package/dist/server/services/utils/configuration/metadatas.mjs.map +1 -0
  979. package/dist/server/services/utils/configuration/settings.js +66 -0
  980. package/dist/server/services/utils/configuration/settings.js.map +1 -0
  981. package/dist/server/services/utils/configuration/settings.mjs +62 -0
  982. package/dist/server/services/utils/configuration/settings.mjs.map +1 -0
  983. package/dist/server/services/utils/draft.js +51 -0
  984. package/dist/server/services/utils/draft.js.map +1 -0
  985. package/dist/server/services/utils/draft.mjs +49 -0
  986. package/dist/server/services/utils/draft.mjs.map +1 -0
  987. package/dist/server/services/utils/populate.js +289 -0
  988. package/dist/server/services/utils/populate.js.map +1 -0
  989. package/dist/server/services/utils/populate.mjs +283 -0
  990. package/dist/server/services/utils/populate.mjs.map +1 -0
  991. package/dist/server/services/utils/store.js +71 -0
  992. package/dist/server/services/utils/store.js.map +1 -0
  993. package/dist/server/services/utils/store.mjs +69 -0
  994. package/dist/server/services/utils/store.mjs.map +1 -0
  995. package/dist/server/src/controllers/utils/metadata.d.ts +1 -1
  996. package/dist/server/src/controllers/utils/metadata.d.ts.map +1 -1
  997. package/dist/server/src/history/services/utils.d.ts.map +1 -1
  998. package/dist/server/src/services/utils/count.d.ts +1 -1
  999. package/dist/server/src/services/utils/count.d.ts.map +1 -1
  1000. package/dist/server/src/services/utils/populate.d.ts +1 -1
  1001. package/dist/server/src/services/utils/populate.d.ts.map +1 -1
  1002. package/dist/server/utils/index.js +10 -0
  1003. package/dist/server/utils/index.js.map +1 -0
  1004. package/dist/server/utils/index.mjs +8 -0
  1005. package/dist/server/utils/index.mjs.map +1 -0
  1006. package/dist/server/validation/policies/hasPermissions.js +12 -0
  1007. package/dist/server/validation/policies/hasPermissions.js.map +1 -0
  1008. package/dist/server/validation/policies/hasPermissions.mjs +10 -0
  1009. package/dist/server/validation/policies/hasPermissions.mjs.map +1 -0
  1010. package/dist/shared/contracts/collection-types.d.ts +0 -1
  1011. package/dist/shared/contracts/collection-types.js +3 -0
  1012. package/dist/shared/contracts/collection-types.js.map +1 -0
  1013. package/dist/shared/contracts/collection-types.mjs +2 -0
  1014. package/dist/shared/contracts/collection-types.mjs.map +1 -0
  1015. package/dist/shared/contracts/components.d.ts +0 -1
  1016. package/dist/shared/contracts/components.js +3 -0
  1017. package/dist/shared/contracts/components.js.map +1 -0
  1018. package/dist/shared/contracts/components.mjs +2 -0
  1019. package/dist/shared/contracts/components.mjs.map +1 -0
  1020. package/dist/shared/contracts/content-types.d.ts +0 -1
  1021. package/dist/shared/contracts/content-types.js +3 -0
  1022. package/dist/shared/contracts/content-types.js.map +1 -0
  1023. package/dist/shared/contracts/content-types.mjs +2 -0
  1024. package/dist/shared/contracts/content-types.mjs.map +1 -0
  1025. package/dist/shared/contracts/history-versions.d.ts +0 -1
  1026. package/dist/shared/contracts/history-versions.js +3 -0
  1027. package/dist/shared/contracts/history-versions.js.map +1 -0
  1028. package/dist/shared/contracts/history-versions.mjs +2 -0
  1029. package/dist/shared/contracts/history-versions.mjs.map +1 -0
  1030. package/dist/shared/contracts/index.d.ts +0 -1
  1031. package/dist/shared/contracts/index.js +26 -0
  1032. package/dist/shared/contracts/index.js.map +1 -0
  1033. package/dist/shared/contracts/index.mjs +21 -0
  1034. package/dist/shared/contracts/index.mjs.map +1 -0
  1035. package/dist/shared/contracts/init.d.ts +0 -1
  1036. package/dist/shared/contracts/init.js +3 -0
  1037. package/dist/shared/contracts/init.js.map +1 -0
  1038. package/dist/shared/contracts/init.mjs +2 -0
  1039. package/dist/shared/contracts/init.mjs.map +1 -0
  1040. package/dist/shared/contracts/preview.d.ts +0 -1
  1041. package/dist/shared/contracts/preview.js +3 -0
  1042. package/dist/shared/contracts/preview.js.map +1 -0
  1043. package/dist/shared/contracts/preview.mjs +2 -0
  1044. package/dist/shared/contracts/preview.mjs.map +1 -0
  1045. package/dist/shared/contracts/relations.d.ts +1 -2
  1046. package/dist/shared/contracts/relations.d.ts.map +1 -1
  1047. package/dist/shared/contracts/relations.js +3 -0
  1048. package/dist/shared/contracts/relations.js.map +1 -0
  1049. package/dist/shared/contracts/relations.mjs +2 -0
  1050. package/dist/shared/contracts/relations.mjs.map +1 -0
  1051. package/dist/shared/contracts/review-workflows.d.ts +0 -1
  1052. package/dist/shared/contracts/review-workflows.js +3 -0
  1053. package/dist/shared/contracts/review-workflows.js.map +1 -0
  1054. package/dist/shared/contracts/review-workflows.mjs +2 -0
  1055. package/dist/shared/contracts/review-workflows.mjs.map +1 -0
  1056. package/dist/shared/contracts/single-types.d.ts +0 -1
  1057. package/dist/shared/contracts/single-types.js +3 -0
  1058. package/dist/shared/contracts/single-types.js.map +1 -0
  1059. package/dist/shared/contracts/single-types.mjs +2 -0
  1060. package/dist/shared/contracts/single-types.mjs.map +1 -0
  1061. package/dist/shared/contracts/uid.d.ts +0 -1
  1062. package/dist/shared/contracts/uid.js +3 -0
  1063. package/dist/shared/contracts/uid.js.map +1 -0
  1064. package/dist/shared/contracts/uid.mjs +2 -0
  1065. package/dist/shared/contracts/uid.mjs.map +1 -0
  1066. package/dist/shared/index.d.ts +0 -1
  1067. package/dist/shared/index.js +6 -45
  1068. package/dist/shared/index.js.map +1 -1
  1069. package/dist/shared/index.mjs +2 -46
  1070. package/dist/shared/index.mjs.map +1 -1
  1071. package/package.json +16 -13
  1072. package/dist/_chunks/CardDragPreview-C0QyJgRA.js +0 -69
  1073. package/dist/_chunks/CardDragPreview-C0QyJgRA.js.map +0 -1
  1074. package/dist/_chunks/CardDragPreview-DOxamsuj.mjs +0 -70
  1075. package/dist/_chunks/CardDragPreview-DOxamsuj.mjs.map +0 -1
  1076. package/dist/_chunks/ComponentConfigurationPage-9_4yUE9L.mjs +0 -236
  1077. package/dist/_chunks/ComponentConfigurationPage-9_4yUE9L.mjs.map +0 -1
  1078. package/dist/_chunks/ComponentConfigurationPage-DBSh-kET.js +0 -254
  1079. package/dist/_chunks/ComponentConfigurationPage-DBSh-kET.js.map +0 -1
  1080. package/dist/_chunks/ComponentIcon-CRbtQEUV.js +0 -175
  1081. package/dist/_chunks/ComponentIcon-CRbtQEUV.js.map +0 -1
  1082. package/dist/_chunks/ComponentIcon-u4bIXTFY.mjs +0 -157
  1083. package/dist/_chunks/ComponentIcon-u4bIXTFY.mjs.map +0 -1
  1084. package/dist/_chunks/EditConfigurationPage-Bl_U2JgH.js +0 -150
  1085. package/dist/_chunks/EditConfigurationPage-Bl_U2JgH.js.map +0 -1
  1086. package/dist/_chunks/EditConfigurationPage-COe6hjPC.mjs +0 -132
  1087. package/dist/_chunks/EditConfigurationPage-COe6hjPC.mjs.map +0 -1
  1088. package/dist/_chunks/EditViewPage-D4yFJET6.js +0 -209
  1089. package/dist/_chunks/EditViewPage-D4yFJET6.js.map +0 -1
  1090. package/dist/_chunks/EditViewPage-DrmVmYN0.mjs +0 -191
  1091. package/dist/_chunks/EditViewPage-DrmVmYN0.mjs.map +0 -1
  1092. package/dist/_chunks/FieldTypeIcon-CMlNO8PE.mjs +0 -50
  1093. package/dist/_chunks/FieldTypeIcon-CMlNO8PE.mjs.map +0 -1
  1094. package/dist/_chunks/FieldTypeIcon-Dnwq_IRF.js +0 -49
  1095. package/dist/_chunks/FieldTypeIcon-Dnwq_IRF.js.map +0 -1
  1096. package/dist/_chunks/Form-C4rSaGsz.js +0 -778
  1097. package/dist/_chunks/Form-C4rSaGsz.js.map +0 -1
  1098. package/dist/_chunks/Form-DamaxNpG.mjs +0 -758
  1099. package/dist/_chunks/Form-DamaxNpG.mjs.map +0 -1
  1100. package/dist/_chunks/History-D1PreDSY.mjs +0 -999
  1101. package/dist/_chunks/History-D1PreDSY.mjs.map +0 -1
  1102. package/dist/_chunks/History-DTm8UCCQ.js +0 -1019
  1103. package/dist/_chunks/History-DTm8UCCQ.js.map +0 -1
  1104. package/dist/_chunks/Input-B7sapvBG.js +0 -5617
  1105. package/dist/_chunks/Input-B7sapvBG.js.map +0 -1
  1106. package/dist/_chunks/Input-CZ1YvjHR.mjs +0 -5585
  1107. package/dist/_chunks/Input-CZ1YvjHR.mjs.map +0 -1
  1108. package/dist/_chunks/ListConfigurationPage-Bbi32isk.mjs +0 -633
  1109. package/dist/_chunks/ListConfigurationPage-Bbi32isk.mjs.map +0 -1
  1110. package/dist/_chunks/ListConfigurationPage-ysFMjKI3.js +0 -652
  1111. package/dist/_chunks/ListConfigurationPage-ysFMjKI3.js.map +0 -1
  1112. package/dist/_chunks/ListViewPage-Bud_jBDQ.mjs +0 -854
  1113. package/dist/_chunks/ListViewPage-Bud_jBDQ.mjs.map +0 -1
  1114. package/dist/_chunks/ListViewPage-DTuuxU3n.js +0 -877
  1115. package/dist/_chunks/ListViewPage-DTuuxU3n.js.map +0 -1
  1116. package/dist/_chunks/NoContentTypePage-CL7VVeYs.js +0 -51
  1117. package/dist/_chunks/NoContentTypePage-CL7VVeYs.js.map +0 -1
  1118. package/dist/_chunks/NoContentTypePage-DVhkugsf.mjs +0 -51
  1119. package/dist/_chunks/NoContentTypePage-DVhkugsf.mjs.map +0 -1
  1120. package/dist/_chunks/NoPermissionsPage-CMdM-dCo.mjs +0 -23
  1121. package/dist/_chunks/NoPermissionsPage-CMdM-dCo.mjs.map +0 -1
  1122. package/dist/_chunks/NoPermissionsPage-v7I599vC.js +0 -23
  1123. package/dist/_chunks/NoPermissionsPage-v7I599vC.js.map +0 -1
  1124. package/dist/_chunks/Preview-BNuU0SuQ.mjs +0 -287
  1125. package/dist/_chunks/Preview-BNuU0SuQ.mjs.map +0 -1
  1126. package/dist/_chunks/Preview-Cxq-uI6D.js +0 -305
  1127. package/dist/_chunks/Preview-Cxq-uI6D.js.map +0 -1
  1128. package/dist/_chunks/Relations-C2Ahkrdg.mjs +0 -728
  1129. package/dist/_chunks/Relations-C2Ahkrdg.mjs.map +0 -1
  1130. package/dist/_chunks/Relations-CWS79QQn.js +0 -747
  1131. package/dist/_chunks/Relations-CWS79QQn.js.map +0 -1
  1132. package/dist/_chunks/ar-BUUWXIYu.js +0 -226
  1133. package/dist/_chunks/ar-BUUWXIYu.js.map +0 -1
  1134. package/dist/_chunks/ar-CCEVvqGG.mjs +0 -226
  1135. package/dist/_chunks/ar-CCEVvqGG.mjs.map +0 -1
  1136. package/dist/_chunks/ca-5U32ON2v.mjs +0 -201
  1137. package/dist/_chunks/ca-5U32ON2v.mjs.map +0 -1
  1138. package/dist/_chunks/ca-Cmk45QO6.js +0 -201
  1139. package/dist/_chunks/ca-Cmk45QO6.js.map +0 -1
  1140. package/dist/_chunks/cs-CM2aBUar.mjs +0 -125
  1141. package/dist/_chunks/cs-CM2aBUar.mjs.map +0 -1
  1142. package/dist/_chunks/cs-CkJy6B2v.js +0 -125
  1143. package/dist/_chunks/cs-CkJy6B2v.js.map +0 -1
  1144. package/dist/_chunks/de-C72KDNOl.mjs +0 -199
  1145. package/dist/_chunks/de-C72KDNOl.mjs.map +0 -1
  1146. package/dist/_chunks/de-CCEmbAah.js +0 -199
  1147. package/dist/_chunks/de-CCEmbAah.js.map +0 -1
  1148. package/dist/_chunks/en-BR48D_RH.js +0 -312
  1149. package/dist/_chunks/en-BR48D_RH.js.map +0 -1
  1150. package/dist/_chunks/en-D65uIF6Y.mjs +0 -312
  1151. package/dist/_chunks/en-D65uIF6Y.mjs.map +0 -1
  1152. package/dist/_chunks/es-9K52xZIr.js +0 -196
  1153. package/dist/_chunks/es-9K52xZIr.js.map +0 -1
  1154. package/dist/_chunks/es-D34tqjMw.mjs +0 -196
  1155. package/dist/_chunks/es-D34tqjMw.mjs.map +0 -1
  1156. package/dist/_chunks/eu-CdALomew.mjs +0 -202
  1157. package/dist/_chunks/eu-CdALomew.mjs.map +0 -1
  1158. package/dist/_chunks/eu-VDH-3ovk.js +0 -202
  1159. package/dist/_chunks/eu-VDH-3ovk.js.map +0 -1
  1160. package/dist/_chunks/fr-C43IbhA_.js +0 -219
  1161. package/dist/_chunks/fr-C43IbhA_.js.map +0 -1
  1162. package/dist/_chunks/fr-DBseuRuB.mjs +0 -219
  1163. package/dist/_chunks/fr-DBseuRuB.mjs.map +0 -1
  1164. package/dist/_chunks/gu-BRmF601H.js +0 -200
  1165. package/dist/_chunks/gu-BRmF601H.js.map +0 -1
  1166. package/dist/_chunks/gu-CNpaMDpH.mjs +0 -200
  1167. package/dist/_chunks/gu-CNpaMDpH.mjs.map +0 -1
  1168. package/dist/_chunks/hi-CCJBptSq.js +0 -200
  1169. package/dist/_chunks/hi-CCJBptSq.js.map +0 -1
  1170. package/dist/_chunks/hi-Dwvd04m3.mjs +0 -200
  1171. package/dist/_chunks/hi-Dwvd04m3.mjs.map +0 -1
  1172. package/dist/_chunks/hooks-BAaaKPS_.js +0 -7
  1173. package/dist/_chunks/hooks-BAaaKPS_.js.map +0 -1
  1174. package/dist/_chunks/hooks-E5u1mcgM.mjs +0 -8
  1175. package/dist/_chunks/hooks-E5u1mcgM.mjs.map +0 -1
  1176. package/dist/_chunks/hu-CeYvaaO0.mjs +0 -202
  1177. package/dist/_chunks/hu-CeYvaaO0.mjs.map +0 -1
  1178. package/dist/_chunks/hu-sNV_yLYy.js +0 -202
  1179. package/dist/_chunks/hu-sNV_yLYy.js.map +0 -1
  1180. package/dist/_chunks/id-B5Ser98A.js +0 -160
  1181. package/dist/_chunks/id-B5Ser98A.js.map +0 -1
  1182. package/dist/_chunks/id-BtwA9WJT.mjs +0 -160
  1183. package/dist/_chunks/id-BtwA9WJT.mjs.map +0 -1
  1184. package/dist/_chunks/index-DQsvBb_N.js +0 -4500
  1185. package/dist/_chunks/index-DQsvBb_N.js.map +0 -1
  1186. package/dist/_chunks/index-ZKrsjv-2.mjs +0 -4481
  1187. package/dist/_chunks/index-ZKrsjv-2.mjs.map +0 -1
  1188. package/dist/_chunks/it-BrVPqaf1.mjs +0 -162
  1189. package/dist/_chunks/it-BrVPqaf1.mjs.map +0 -1
  1190. package/dist/_chunks/it-DkBIs7vD.js +0 -162
  1191. package/dist/_chunks/it-DkBIs7vD.js.map +0 -1
  1192. package/dist/_chunks/ja-7sfIbjxE.js +0 -196
  1193. package/dist/_chunks/ja-7sfIbjxE.js.map +0 -1
  1194. package/dist/_chunks/ja-BHqhDq4V.mjs +0 -196
  1195. package/dist/_chunks/ja-BHqhDq4V.mjs.map +0 -1
  1196. package/dist/_chunks/ko-HVQRlfUI.mjs +0 -195
  1197. package/dist/_chunks/ko-HVQRlfUI.mjs.map +0 -1
  1198. package/dist/_chunks/ko-woFZPmLk.js +0 -195
  1199. package/dist/_chunks/ko-woFZPmLk.js.map +0 -1
  1200. package/dist/_chunks/layout-Cl0NhlQB.js +0 -488
  1201. package/dist/_chunks/layout-Cl0NhlQB.js.map +0 -1
  1202. package/dist/_chunks/layout-fQk1rMk9.mjs +0 -471
  1203. package/dist/_chunks/layout-fQk1rMk9.mjs.map +0 -1
  1204. package/dist/_chunks/ml-BihZwQit.mjs +0 -200
  1205. package/dist/_chunks/ml-BihZwQit.mjs.map +0 -1
  1206. package/dist/_chunks/ml-C2W8N8k1.js +0 -200
  1207. package/dist/_chunks/ml-C2W8N8k1.js.map +0 -1
  1208. package/dist/_chunks/ms-BuFotyP_.js +0 -144
  1209. package/dist/_chunks/ms-BuFotyP_.js.map +0 -1
  1210. package/dist/_chunks/ms-m_WjyWx7.mjs +0 -144
  1211. package/dist/_chunks/ms-m_WjyWx7.mjs.map +0 -1
  1212. package/dist/_chunks/nl-D4R9gHx5.mjs +0 -202
  1213. package/dist/_chunks/nl-D4R9gHx5.mjs.map +0 -1
  1214. package/dist/_chunks/nl-bbEOHChV.js +0 -202
  1215. package/dist/_chunks/nl-bbEOHChV.js.map +0 -1
  1216. package/dist/_chunks/objects-BcXOv6_9.js +0 -47
  1217. package/dist/_chunks/objects-BcXOv6_9.js.map +0 -1
  1218. package/dist/_chunks/objects-D6yBsdmx.mjs +0 -45
  1219. package/dist/_chunks/objects-D6yBsdmx.mjs.map +0 -1
  1220. package/dist/_chunks/pl-sbx9mSt_.mjs +0 -199
  1221. package/dist/_chunks/pl-sbx9mSt_.mjs.map +0 -1
  1222. package/dist/_chunks/pl-uzwG-hk7.js +0 -199
  1223. package/dist/_chunks/pl-uzwG-hk7.js.map +0 -1
  1224. package/dist/_chunks/pt-BR-BiOz37D9.js +0 -201
  1225. package/dist/_chunks/pt-BR-BiOz37D9.js.map +0 -1
  1226. package/dist/_chunks/pt-BR-C71iDxnh.mjs +0 -201
  1227. package/dist/_chunks/pt-BR-C71iDxnh.mjs.map +0 -1
  1228. package/dist/_chunks/pt-BsaFvS8-.mjs +0 -95
  1229. package/dist/_chunks/pt-BsaFvS8-.mjs.map +0 -1
  1230. package/dist/_chunks/pt-CeXQuq50.js +0 -95
  1231. package/dist/_chunks/pt-CeXQuq50.js.map +0 -1
  1232. package/dist/_chunks/relations-BRfBxVbX.js +0 -133
  1233. package/dist/_chunks/relations-BRfBxVbX.js.map +0 -1
  1234. package/dist/_chunks/relations-BakOFl_1.mjs +0 -134
  1235. package/dist/_chunks/relations-BakOFl_1.mjs.map +0 -1
  1236. package/dist/_chunks/ru-BE6A4Exp.mjs +0 -231
  1237. package/dist/_chunks/ru-BE6A4Exp.mjs.map +0 -1
  1238. package/dist/_chunks/ru-BT3ybNny.js +0 -231
  1239. package/dist/_chunks/ru-BT3ybNny.js.map +0 -1
  1240. package/dist/_chunks/sa-CcvkYInH.js +0 -200
  1241. package/dist/_chunks/sa-CcvkYInH.js.map +0 -1
  1242. package/dist/_chunks/sa-Dag0k-Z8.mjs +0 -200
  1243. package/dist/_chunks/sa-Dag0k-Z8.mjs.map +0 -1
  1244. package/dist/_chunks/sk-BFg-R8qJ.mjs +0 -202
  1245. package/dist/_chunks/sk-BFg-R8qJ.mjs.map +0 -1
  1246. package/dist/_chunks/sk-CvY09Xjv.js +0 -202
  1247. package/dist/_chunks/sk-CvY09Xjv.js.map +0 -1
  1248. package/dist/_chunks/sv-CUnfWGsh.mjs +0 -202
  1249. package/dist/_chunks/sv-CUnfWGsh.mjs.map +0 -1
  1250. package/dist/_chunks/sv-MYDuzgvT.js +0 -202
  1251. package/dist/_chunks/sv-MYDuzgvT.js.map +0 -1
  1252. package/dist/_chunks/th-BqbI8lIT.mjs +0 -148
  1253. package/dist/_chunks/th-BqbI8lIT.mjs.map +0 -1
  1254. package/dist/_chunks/th-D9_GfAjc.js +0 -148
  1255. package/dist/_chunks/th-D9_GfAjc.js.map +0 -1
  1256. package/dist/_chunks/tr-CgeK3wJM.mjs +0 -199
  1257. package/dist/_chunks/tr-CgeK3wJM.mjs.map +0 -1
  1258. package/dist/_chunks/tr-D9UH-O_R.js +0 -199
  1259. package/dist/_chunks/tr-D9UH-O_R.js.map +0 -1
  1260. package/dist/_chunks/uk-C8EiqJY7.js +0 -144
  1261. package/dist/_chunks/uk-C8EiqJY7.js.map +0 -1
  1262. package/dist/_chunks/uk-CR-zDhAY.mjs +0 -144
  1263. package/dist/_chunks/uk-CR-zDhAY.mjs.map +0 -1
  1264. package/dist/_chunks/useDragAndDrop-BMtgCYzL.js +0 -245
  1265. package/dist/_chunks/useDragAndDrop-BMtgCYzL.js.map +0 -1
  1266. package/dist/_chunks/useDragAndDrop-DJ6jqvZN.mjs +0 -228
  1267. package/dist/_chunks/useDragAndDrop-DJ6jqvZN.mjs.map +0 -1
  1268. package/dist/_chunks/usePrev-CZGy2Vjf.mjs +0 -29
  1269. package/dist/_chunks/usePrev-CZGy2Vjf.mjs.map +0 -1
  1270. package/dist/_chunks/usePrev-D5J_2fEu.js +0 -28
  1271. package/dist/_chunks/usePrev-D5J_2fEu.js.map +0 -1
  1272. package/dist/_chunks/vi-CJlYDheJ.js +0 -111
  1273. package/dist/_chunks/vi-CJlYDheJ.js.map +0 -1
  1274. package/dist/_chunks/vi-DUXIk_fw.mjs +0 -111
  1275. package/dist/_chunks/vi-DUXIk_fw.mjs.map +0 -1
  1276. package/dist/_chunks/zh-BWZspA60.mjs +0 -209
  1277. package/dist/_chunks/zh-BWZspA60.mjs.map +0 -1
  1278. package/dist/_chunks/zh-CQQfszqR.js +0 -209
  1279. package/dist/_chunks/zh-CQQfszqR.js.map +0 -1
  1280. package/dist/_chunks/zh-Hans-9kOncHGw.js +0 -952
  1281. package/dist/_chunks/zh-Hans-9kOncHGw.js.map +0 -1
  1282. package/dist/_chunks/zh-Hans-BPQcRIyH.mjs +0 -952
  1283. package/dist/_chunks/zh-Hans-BPQcRIyH.mjs.map +0 -1
  1284. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/Blocks/utils/prismLanguages.d.ts +0 -49
@@ -1 +0,0 @@
1
- {"version":3,"file":"Input-CZ1YvjHR.mjs","sources":["../../admin/src/hooks/useLazyComponents.ts","../../admin/src/pages/EditView/components/FormInputs/BlocksInput/utils/constants.ts","../../admin/src/pages/EditView/components/FormInputs/BlocksInput/utils/conversions.ts","../../admin/src/pages/EditView/components/FormInputs/BlocksInput/utils/enterKey.ts","../../admin/src/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.tsx","../../admin/src/pages/EditView/components/FormInputs/BlocksInput/Blocks/Heading.tsx","../../admin/src/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.tsx","../../admin/src/pages/EditView/components/FormInputs/BlocksInput/utils/links.ts","../../admin/src/pages/EditView/components/FormInputs/BlocksInput/utils/types.ts","../../admin/src/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.tsx","../../admin/src/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.tsx","../../admin/src/pages/EditView/components/FormInputs/BlocksInput/Blocks/Paragraph.tsx","../../admin/src/pages/EditView/components/FormInputs/BlocksInput/Blocks/Quote.tsx","../../admin/src/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.tsx","../../admin/src/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.tsx","../../admin/src/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.tsx","../../admin/src/pages/EditView/components/FormInputs/BlocksInput/Modifiers.tsx","../../admin/src/pages/EditView/components/FormInputs/BlocksInput/plugins/withImages.ts","../../admin/src/pages/EditView/components/FormInputs/BlocksInput/plugins/withLinks.ts","../../admin/src/pages/EditView/components/FormInputs/BlocksInput/plugins/withStrapiSchema.ts","../../admin/src/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.tsx","../../admin/src/pages/EditView/components/FormInputs/BlocksInput/BlocksInput.tsx","../../admin/src/pages/EditView/components/FormInputs/Component/Initializer.tsx","../../admin/src/pages/EditView/components/FormInputs/DynamicZone/AddComponentButton.tsx","../../admin/src/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.tsx","../../admin/src/pages/EditView/components/FormInputs/DynamicZone/ComponentPicker.tsx","../../admin/src/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.tsx","../../admin/src/pages/EditView/components/FormInputs/DynamicZone/DynamicZoneLabel.tsx","../../admin/src/pages/EditView/components/FormInputs/DynamicZone/Field.tsx","../../admin/src/pages/EditView/components/FormInputs/NotAllowed.tsx","../../admin/src/services/uid.ts","../../admin/src/pages/EditView/components/FormInputs/UID.tsx","../../admin/src/pages/EditView/components/FormInputs/Wysiwyg/utils/mdRenderer.ts","../../admin/src/pages/EditView/components/FormInputs/Wysiwyg/PreviewWysiwyg.tsx","../../admin/src/pages/EditView/components/FormInputs/Wysiwyg/utils/continueList.ts","../../admin/src/pages/EditView/components/FormInputs/Wysiwyg/Editor.tsx","../../admin/src/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.tsx","../../admin/src/pages/EditView/components/FormInputs/Wysiwyg/utils/utils.ts","../../admin/src/pages/EditView/components/FormInputs/Wysiwyg/WysiwygStyles.tsx","../../admin/src/pages/EditView/components/FormInputs/Wysiwyg/WysiwygFooter.tsx","../../admin/src/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.tsx","../../admin/src/pages/EditView/components/FormInputs/Wysiwyg/Field.tsx","../../admin/src/pages/EditView/components/InputRenderer.tsx","../../admin/src/pages/EditView/components/FormLayout.tsx","../../admin/src/pages/EditView/components/FormInputs/Component/NonRepeatable.tsx","../../admin/src/pages/EditView/components/FormInputs/Component/Repeatable.tsx","../../admin/src/pages/EditView/components/FormInputs/Component/Input.tsx"],"sourcesContent":["import { ComponentType, useCallback, useEffect, useState } from 'react';\n\nimport { StrapiAppContextValue, useStrapiApp } from '@strapi/admin/strapi-admin';\n\nconst componentStore = new Map<string, ComponentType | undefined>();\n\ntype LazyComponentStore = Record<string, ComponentType | undefined>;\n\ntype CustomField = NonNullable<ReturnType<StrapiAppContextValue['customFields']['get']>>;\n\ninterface UseLazyComponentsReturn {\n isLazyLoading: boolean;\n lazyComponentStore: LazyComponentStore;\n cleanup: () => void;\n}\n\n/**\n * @description A hook to lazy load custom field components\n */\nconst useLazyComponents = (componentUids: string[] = []): UseLazyComponentsReturn => {\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 getCustomField = useStrapiApp('useLazyComponents', (state) => state.customFields.get);\n\n useEffect(() => {\n const setStore = (store: Record<string, ComponentType | undefined>) => {\n setLazyComponentStore(store);\n setLoading(false);\n };\n\n const lazyLoadComponents = async (\n uids: string[],\n components: Array<ReturnType<CustomField['components']['Input']>>\n ) => {\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<\n Array<ReturnType<CustomField['components']['Input']>>\n >((arrayOfPromises, uid) => {\n const customField = getCustomField(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, getCustomField]);\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 { useLazyComponents };\nexport type { UseLazyComponentsReturn, LazyComponentStore };\n","export const codeLanguages: {\n value: string;\n label: string;\n decorate?: string;\n}[] = [\n {\n value: 'asm',\n label: 'Assembly',\n decorate: 'asmatmel',\n },\n {\n value: 'bash',\n label: 'Bash',\n },\n {\n value: 'c',\n label: 'C',\n },\n {\n value: 'clojure',\n label: 'Clojure',\n },\n {\n value: 'cobol',\n label: 'COBOL',\n },\n {\n value: 'cpp',\n label: 'C++',\n },\n {\n value: 'csharp',\n label: 'C#',\n },\n {\n value: 'css',\n label: 'CSS',\n },\n {\n value: 'dart',\n label: 'Dart',\n },\n {\n value: 'dockerfile',\n label: 'Dockerfile',\n decorate: 'docker',\n },\n {\n value: 'elixir',\n label: 'Elixir',\n },\n {\n value: 'erlang',\n label: 'Erlang',\n },\n {\n value: 'fortran',\n label: 'Fortran',\n },\n {\n value: 'fsharp',\n label: 'F#',\n },\n {\n value: 'go',\n label: 'Go',\n },\n {\n value: 'graphql',\n label: 'GraphQL',\n },\n {\n value: 'groovy',\n label: 'Groovy',\n },\n {\n value: 'haskell',\n label: 'Haskell',\n },\n {\n value: 'haxe',\n label: 'Haxe',\n },\n {\n value: 'html',\n label: 'HTML',\n },\n {\n value: 'ini',\n label: 'INI',\n },\n {\n value: 'java',\n label: 'Java',\n },\n {\n value: 'javascript',\n label: 'JavaScript',\n },\n {\n value: 'jsx',\n label: 'JavaScript (React)',\n },\n {\n value: 'json',\n label: 'JSON',\n },\n {\n value: 'julia',\n label: 'Julia',\n },\n {\n value: 'kotlin',\n label: 'Kotlin',\n },\n {\n value: 'latex',\n label: 'LaTeX',\n },\n {\n value: 'lua',\n label: 'Lua',\n },\n {\n value: 'markdown',\n label: 'Markdown',\n },\n {\n value: 'matlab',\n label: 'MATLAB',\n },\n {\n value: 'makefile',\n label: 'Makefile',\n },\n {\n value: 'objectivec',\n label: 'Objective-C',\n },\n {\n value: 'perl',\n label: 'Perl',\n },\n {\n value: 'php',\n label: 'PHP',\n },\n {\n value: 'plaintext',\n label: 'Plain text',\n },\n {\n value: 'powershell',\n label: 'PowerShell',\n },\n {\n value: 'python',\n label: 'Python',\n },\n {\n value: 'r',\n label: 'R',\n },\n {\n value: 'ruby',\n label: 'Ruby',\n },\n {\n value: 'rust',\n label: 'Rust',\n },\n {\n value: 'sas',\n label: 'SAS',\n },\n {\n value: 'scala',\n label: 'Scala',\n },\n {\n value: 'scheme',\n label: 'Scheme',\n },\n {\n value: 'shell',\n label: 'Shell',\n },\n {\n value: 'sql',\n label: 'SQL',\n },\n {\n value: 'stata',\n label: 'Stata',\n },\n {\n value: 'swift',\n label: 'Swift',\n },\n {\n value: 'typescript',\n label: 'TypeScript',\n decorate: 'ts',\n },\n {\n value: 'tsx',\n label: 'TypeScript (React)',\n },\n {\n value: 'vbnet',\n label: 'VB.NET',\n },\n {\n value: 'xml',\n label: 'XML',\n },\n {\n value: 'yaml',\n label: 'YAML',\n decorate: 'yml',\n },\n];\n","import { type Element, type Path, Editor, Transforms } from 'slate';\n\n/**\n * Extracts some logic that is common to most blocks' handleConvert functions.\n * @returns The path of the converted block\n */\nconst baseHandleConvert = <T extends Element>(\n editor: Editor,\n attributesToSet: Partial<T> & { type: T['type'] }\n): void | Path => {\n // If there is no selection, convert last inserted node\n const [_, lastNodePath] = Editor.last(editor, []);\n\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) => !Editor.isEditor(node) && node.type === 'list',\n split: true,\n at: editor.selection ?? lastNodePath,\n });\n\n // Make sure we get a block node, not an inline node\n const [, updatedLastNodePath] = Editor.last(editor, []);\n const entry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type !== 'text' && node.type !== 'link',\n at: editor.selection ?? updatedLastNodePath,\n });\n\n if (!entry || Editor.isEditor(entry[0])) {\n return;\n }\n\n const [element, elementPath] = entry;\n\n Transforms.setNodes(\n editor,\n {\n ...getAttributesToClear(element),\n ...attributesToSet,\n } as Partial<Element>,\n { at: elementPath }\n );\n\n return elementPath;\n};\n\n/**\n * Set all attributes except type and children to null so that Slate deletes them\n */\nconst getAttributesToClear = (element: Element) => {\n const { children: _children, type: _type, ...extra } = element;\n\n const attributesToClear = Object.keys(extra).reduce(\n (currentAttributes, key) => ({ ...currentAttributes, [key]: null }),\n {}\n );\n\n return attributesToClear as Record<string, null>;\n};\n\nexport { baseHandleConvert, getAttributesToClear };\n","import { type Text, Editor, Node, Transforms } from 'slate';\n\nconst isText = (node: unknown): node is Text => {\n return Node.isNode(node) && !Editor.isEditor(node) && node.type === 'text';\n};\n\n/**\n * Inserts a line break the first time the user presses enter, and exits the node the second time.\n */\nconst pressEnterTwiceToExit = (editor: Editor) => {\n /**\n * To determine if we should break out of the node, check 2 things:\n * 1. If the cursor is at the end of the node\n * 2. If the last line of the node is empty\n */\n const nodeEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && !['link', 'text'].includes(node.type),\n });\n if (!nodeEntry || !editor.selection) {\n return;\n }\n const [node, nodePath] = nodeEntry;\n const isNodeEnd = Editor.isEnd(editor, editor.selection.anchor, nodePath);\n const lastTextNode = node.children.at(-1);\n const isEmptyLine = isText(lastTextNode) && lastTextNode.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 node by creating a new paragraph\n Transforms.insertNodes(editor, {\n type: 'paragraph',\n children: [{ type: 'text', text: '' }],\n });\n return;\n }\n\n // Otherwise insert a new line within the node\n Transforms.insertText(editor, '\\n');\n\n // If there's nothing after the cursor, disable modifiers\n if (isNodeEnd) {\n ['bold', 'italic', 'underline', 'strikethrough', 'code'].forEach((modifier) => {\n Editor.removeMark(editor, modifier);\n });\n }\n};\n\nexport { pressEnterTwiceToExit };\n","import * as React from 'react';\n\nimport { Box, SingleSelect, SingleSelectOption } from '@strapi/design-system';\nimport { CodeBlock as CodeBlockIcon } from '@strapi/icons';\nimport * as Prism from 'prismjs';\nimport { useIntl } from 'react-intl';\nimport { BaseRange, Element, Editor, Node, NodeEntry, Transforms } from 'slate';\nimport { useSelected, type RenderElementProps, useFocused, ReactEditor } from 'slate-react';\nimport { styled } from 'styled-components';\n\nimport { useBlocksEditorContext, type BlocksStore } from '../BlocksEditor';\nimport { codeLanguages } from '../utils/constants';\nimport { baseHandleConvert } from '../utils/conversions';\nimport { pressEnterTwiceToExit } from '../utils/enterKey';\nimport { type Block } from '../utils/types';\n// Import the PrismJS theme to highlight the code\nimport 'prismjs/themes/prism-solarizedlight.css';\nimport './utils/prismLanguages';\n\ntype BaseRangeCustom = BaseRange & { className: string };\n\nexport const decorateCode = ([node, path]: NodeEntry) => {\n const ranges: BaseRangeCustom[] = [];\n\n // make sure it is an Slate Element\n if (!Element.isElement(node) || node.type !== 'code') return ranges;\n // transform the Element into a string\n const text = Node.string(node);\n const language = codeLanguages.find((lang) => lang.value === node.language);\n const decorateKey = language?.decorate ?? language?.value;\n\n const selectedLanguage = Prism.languages[decorateKey || 'plaintext'];\n\n // create \"tokens\" with \"prismjs\" and put them in \"ranges\"\n const tokens = Prism.tokenize(text, selectedLanguage);\n let start = 0;\n for (const token of tokens) {\n const length = token.length;\n const end = start + length;\n if (typeof token !== 'string') {\n ranges.push({\n anchor: { path, offset: start },\n focus: { path, offset: end },\n className: `token ${token.type}`,\n });\n }\n start = end;\n }\n\n // these will be found in \"renderLeaf\" in \"leaf\" and their \"className\" will be applied\n return ranges;\n};\n\nconst CodeBlock = styled.pre`\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: 1;\n\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 CodeEditor = (props: RenderElementProps) => {\n const { editor } = useBlocksEditorContext('ImageDialog');\n const editorIsFocused = useFocused();\n const imageIsSelected = useSelected();\n const { formatMessage } = useIntl();\n const [isSelectOpen, setIsSelectOpen] = React.useState(false);\n const shouldDisplayLanguageSelect = (editorIsFocused && imageIsSelected) || isSelectOpen;\n\n return (\n <Box position=\"relative\" width=\"100%\">\n <CodeBlock {...props.attributes}>\n <code>{props.children}</code>\n </CodeBlock>\n {shouldDisplayLanguageSelect && (\n <Box\n position=\"absolute\"\n background=\"neutral0\"\n borderColor=\"neutral150\"\n borderStyle=\"solid\"\n borderWidth=\"0.5px\"\n shadow=\"tableShadow\"\n top=\"100%\"\n marginTop={1}\n right={0}\n padding={1}\n hasRadius\n >\n <SingleSelect\n onChange={(open) => {\n Transforms.setNodes(\n editor,\n { language: open.toString() },\n { match: (node) => !Editor.isEditor(node) && node.type === 'code' }\n );\n }}\n value={(props.element.type === 'code' && props.element.language) || 'plaintext'}\n onOpenChange={(open) => {\n setIsSelectOpen(open);\n\n // Focus the editor again when closing the select so the user can continue typing\n if (!open) {\n ReactEditor.focus(editor);\n }\n }}\n onCloseAutoFocus={(e) => e.preventDefault()}\n aria-label={formatMessage({\n id: 'components.Blocks.blocks.code.languageLabel',\n defaultMessage: 'Select a language',\n })}\n >\n {codeLanguages.map(({ value, label }) => (\n <SingleSelectOption value={value} key={value}>\n {label}\n </SingleSelectOption>\n ))}\n </SingleSelect>\n </Box>\n )}\n </Box>\n );\n};\n\nconst codeBlocks: Pick<BlocksStore, 'code'> = {\n code: {\n renderElement: (props) => <CodeEditor {...props} />,\n icon: CodeBlockIcon,\n label: {\n id: 'components.Blocks.blocks.code',\n defaultMessage: 'Code block',\n },\n matchNode: (node) => node.type === 'code',\n isInBlocksSelector: true,\n handleConvert(editor) {\n baseHandleConvert<Block<'code'>>(editor, { type: 'code', language: 'plaintext' });\n },\n handleEnterKey(editor) {\n pressEnterTwiceToExit(editor);\n },\n snippets: ['```'],\n },\n};\n\nexport { codeBlocks };\n","import * as React from 'react';\n\nimport { Typography, TypographyComponent } from '@strapi/design-system';\nimport {\n HeadingFive,\n HeadingFour,\n HeadingOne,\n HeadingSix,\n HeadingThree,\n HeadingTwo,\n} from '@strapi/icons';\nimport { Editor } from 'slate';\nimport { styled } from 'styled-components';\n\nimport { type BlocksStore } from '../BlocksEditor';\nimport { baseHandleConvert } from '../utils/conversions';\nimport { type Block } from '../utils/types';\n\nconst H1 = styled<TypographyComponent<'h1'>>(Typography).attrs({ tag: 'h1' })`\n font-size: 4.2rem;\n line-height: ${({ theme }) => theme.lineHeights[1]};\n`;\n\nconst H2 = styled<TypographyComponent<'h2'>>(Typography).attrs({ tag: 'h2' })`\n font-size: 3.5rem;\n line-height: ${({ theme }) => theme.lineHeights[1]};\n`;\n\nconst H3 = styled<TypographyComponent<'h3'>>(Typography).attrs({ tag: 'h3' })`\n font-size: 2.9rem;\n line-height: ${({ theme }) => theme.lineHeights[1]};\n`;\n\nconst H4 = styled<TypographyComponent<'h4'>>(Typography).attrs({ tag: 'h4' })`\n font-size: 2.4rem;\n line-height: ${({ theme }) => theme.lineHeights[1]};\n`;\n\nconst H5 = styled<TypographyComponent<'h5'>>(Typography).attrs({ tag: 'h5' })`\n font-size: 2rem;\n line-height: ${({ theme }) => theme.lineHeights[1]};\n`;\n\nconst H6 = styled<TypographyComponent<'h6'>>(Typography).attrs({ tag: 'h6' })`\n font-size: 1.6rem;\n line-height: ${({ theme }) => theme.lineHeights[1]};\n`;\n\n/**\n * Common handler for converting a node to a heading\n */\nconst handleConvertToHeading = (editor: Editor, level: Block<'heading'>['level']) => {\n baseHandleConvert<Block<'heading'>>(editor, { type: 'heading', level });\n};\n\nconst headingBlocks: Pick<\n BlocksStore,\n 'heading-one' | 'heading-two' | 'heading-three' | 'heading-four' | 'heading-five' | 'heading-six'\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 handleConvert: (editor) => handleConvertToHeading(editor, 1),\n matchNode: (node) => node.type === 'heading' && node.level === 1,\n isInBlocksSelector: true,\n snippets: ['#'],\n dragHandleTopMargin: '14px',\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 handleConvert: (editor) => handleConvertToHeading(editor, 2),\n matchNode: (node) => node.type === 'heading' && node.level === 2,\n isInBlocksSelector: true,\n snippets: ['##'],\n dragHandleTopMargin: '10px',\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 handleConvert: (editor) => handleConvertToHeading(editor, 3),\n matchNode: (node) => node.type === 'heading' && node.level === 3,\n isInBlocksSelector: true,\n snippets: ['###'],\n dragHandleTopMargin: '7px',\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 handleConvert: (editor) => handleConvertToHeading(editor, 4),\n matchNode: (node) => node.type === 'heading' && node.level === 4,\n isInBlocksSelector: true,\n snippets: ['####'],\n dragHandleTopMargin: '4px',\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 handleConvert: (editor) => handleConvertToHeading(editor, 5),\n matchNode: (node) => node.type === 'heading' && node.level === 5,\n isInBlocksSelector: true,\n snippets: ['#####'],\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 handleConvert: (editor) => handleConvertToHeading(editor, 6),\n matchNode: (node) => node.type === 'heading' && node.level === 6,\n isInBlocksSelector: true,\n snippets: ['######'],\n dragHandleTopMargin: '-2px',\n },\n};\n\nexport { headingBlocks };\n","import * as React from 'react';\n\nimport { useStrapiApp } from '@strapi/admin/strapi-admin';\nimport { Box, Flex, FlexComponent } from '@strapi/design-system';\nimport { Image as Picture } from '@strapi/icons';\nimport { type Element, Transforms, Editor } from 'slate';\nimport { useFocused, type RenderElementProps, useSelected } from 'slate-react';\nimport { styled, css } from 'styled-components';\n\nimport { prefixFileUrlWithBackendUrl } from '../../../../../../utils/urls';\nimport { useBlocksEditorContext, type BlocksStore } from '../BlocksEditor';\nimport { type Block } from '../utils/types';\n\nimport type { Schema } from '@strapi/types';\n\nconst ImageWrapper = styled<FlexComponent>(Flex)<{ $isFocused?: boolean }>`\n transition-property: box-shadow;\n transition-duration: 0.2s;\n ${(props) =>\n props.$isFocused &&\n css`\n box-shadow: ${props.theme.colors.primary600} 0px 0px 0px 3px;\n `}\n\n & > img {\n height: auto;\n // The max-height is decided with the design team, the 56px is the height of the toolbar\n max-height: calc(512px - 56px);\n max-width: 100%;\n object-fit: contain;\n }\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 = <T extends object, K extends keyof T>(object: T, keys: K[]): Pick<T, K> => {\n const entries = keys.map((key) => [key, object[key]]);\n return Object.fromEntries(entries);\n};\n\n// Type guard to force TypeScript to narrow the type of the element in Blocks component\nconst isImage = (element: Element): element is Block<'image'> => {\n return element.type === 'image';\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 }: RenderElementProps) => {\n const editorIsFocused = useFocused();\n const imageIsSelected = useSelected();\n\n if (!isImage(element)) {\n return null;\n }\n const { url, alternativeText, width, height } = element.image;\n\n return (\n <Box {...attributes}>\n {children}\n <ImageWrapper\n background=\"neutral100\"\n contentEditable={false}\n justifyContent=\"center\"\n $isFocused={editorIsFocused && imageIsSelected}\n hasRadius\n >\n <img src={url} alt={alternativeText} width={width} height={height} />\n </ImageWrapper>\n </Box>\n );\n};\n\nconst ImageDialog = () => {\n const [isOpen, setIsOpen] = React.useState(true);\n const { editor } = useBlocksEditorContext('ImageDialog');\n const components = useStrapiApp('ImageDialog', (state) => state.components);\n\n if (!components || !isOpen) return null;\n\n const MediaLibraryDialog = components['media-library'] as React.ComponentType<{\n allowedTypes: Schema.Attribute.MediaKind[];\n onClose: () => void;\n onSelectAssets: (_images: Schema.Attribute.MediaValue<true>) => void;\n }>;\n\n const insertImages = (images: Block<'image'>['image'][]) => {\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) => !Editor.isEditor(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 nodeEntryBeingReplaced = Editor.above(editor, {\n match(node) {\n if (Editor.isEditor(node)) return false;\n\n const isInlineNode = ['text', 'link'].includes(node.type);\n\n return !isInlineNode;\n },\n });\n\n if (!nodeEntryBeingReplaced) return;\n const [, pathToInsert] = nodeEntryBeingReplaced;\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 const imageNode: Block<'image'> = {\n type: 'image',\n image,\n children: [{ type: 'text', text: '' }],\n };\n return imageNode;\n });\n Transforms.insertNodes(editor, nodesToInsert, { at: pathToInsert });\n\n // Set the selection on the image since it was cleared by calling removeNodes\n Transforms.select(editor, pathToInsert);\n };\n\n const handleSelectAssets = (images: Schema.Attribute.MediaValue<true>) => {\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 const nodeImage: Block<'image'>['image'] = {\n ...expectedImage,\n alternativeText: expectedImage.alternativeText || expectedImage.name,\n url: prefixFileUrlWithBackendUrl(image.url),\n };\n\n return nodeImage;\n });\n\n insertImages(formattedImages);\n setIsOpen(false);\n };\n\n return (\n <MediaLibraryDialog\n allowedTypes={['images']}\n onClose={() => setIsOpen(false)}\n onSelectAssets={handleSelectAssets}\n />\n );\n};\n\nconst imageBlocks: Pick<BlocksStore, 'image'> = {\n image: {\n renderElement: (props) => <Image {...props} />,\n icon: Picture,\n label: {\n id: 'components.Blocks.blocks.image',\n defaultMessage: 'Image',\n },\n matchNode: (node) => node.type === 'image',\n isInBlocksSelector: true,\n handleBackspaceKey(editor) {\n // Prevent issue where the image remains when it's the only block in the document\n if (editor.children.length === 1) {\n Transforms.setNodes(editor, {\n type: 'paragraph',\n // @ts-expect-error we're only setting image as null so that Slate deletes it\n image: null,\n children: [{ type: 'text', text: '' }],\n });\n } else {\n Transforms.removeNodes(editor);\n }\n },\n handleEnterKey(editor) {\n Transforms.insertNodes(editor, {\n type: 'paragraph',\n children: [{ type: 'text', text: '' }],\n });\n },\n handleConvert: () => {\n /**\n * All the logic is managed inside the ImageDialog component,\n * because the blocks are only created when the user selects images in the modal and submits\n * and if he closes the modal, then no changes are made to the editor\n */\n return () => <ImageDialog />;\n },\n snippets: ['!['],\n },\n};\n\nexport { imageBlocks };\n","import { Transforms, Editor, Element as SlateElement, Node, Range } from 'slate';\n\nimport { type Block } from './types';\n\nconst removeLink = (editor: Editor) => {\n Transforms.unwrapNodes(editor, {\n match: (node) => !Editor.isEditor(node) && SlateElement.isElement(node) && node.type === 'link',\n });\n};\n\nconst insertLink = (editor: Editor, { url }: { url: string }) => {\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) => !Editor.isEditor(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: Block<'link'> = {\n type: 'link',\n url: url ?? '',\n children: [{ type: 'text', text: url }],\n };\n\n Transforms.insertNodes(editor, link);\n } else {\n Transforms.wrapNodes(editor, { type: 'link', url: url ?? '' } as Block<'link'>, {\n split: true,\n });\n }\n }\n};\n\nconst editLink = (editor: Editor, link: { url: string; text: string }) => {\n const { url, text } = link;\n\n if (!editor.selection) {\n return;\n }\n\n const linkEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'link',\n });\n\n if (linkEntry) {\n const [, linkPath] = linkEntry;\n Transforms.setNodes(editor, { 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, [{ type: 'text', text }], { at: linkPath.concat(0) });\n }\n }\n};\n\nexport { insertLink, editLink, removeLink };\n","import type { Schema } from '@strapi/types';\nimport type { Element, Node } from 'slate';\n\ntype Block<T extends Element['type']> = Extract<Node, { type: T }>;\n\n// Wrap Object.entries to get the correct types\nconst getEntries = <T extends object>(object: T) =>\n Object.entries(object) as [keyof T, T[keyof T]][];\n\n// Wrap Object.keys to get the correct types\nconst getKeys = <T extends object>(object: T) => Object.keys(object) as (keyof T)[];\n\nconst isLinkNode = (element: Element): element is Schema.Attribute.LinkInlineNode => {\n return element.type === 'link';\n};\n\nconst isListNode = (element: Element): element is Schema.Attribute.ListBlockNode => {\n return element.type === 'list';\n};\n\nexport { type Block, getEntries, getKeys, isLinkNode, isListNode };\n","import * as React from 'react';\n\nimport { BaseLink, Button, Field, Flex, Popover, useComposedRefs } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { Editor, Path, Range, Transforms } from 'slate';\nimport { type RenderElementProps, ReactEditor } from 'slate-react';\nimport { styled } from 'styled-components';\n\nimport { type BlocksStore, useBlocksEditorContext } from '../BlocksEditor';\nimport { editLink, removeLink } from '../utils/links';\nimport { isLinkNode, type Block } from '../utils/types';\n\nconst StyledBaseLink = styled(BaseLink)`\n text-decoration: none;\n`;\n\nconst RemoveButton = styled(Button)<{ $visible: boolean }>`\n visibility: ${(props) => (props.$visible ? 'visible' : 'hidden')};\n`;\n\ninterface LinkContentProps extends RenderElementProps {\n link: Block<'link'>;\n}\n\nconst LinkContent = React.forwardRef<HTMLAnchorElement, LinkContentProps>(\n ({ link, children, attributes }, forwardedRef) => {\n const { formatMessage } = useIntl();\n const { editor } = useBlocksEditorContext('Link');\n const path = ReactEditor.findPath(editor, link);\n const [popoverOpen, setPopoverOpen] = React.useState(\n editor.lastInsertedLinkPath ? Path.equals(path, editor.lastInsertedLinkPath) : false\n );\n const elementText = link.children.map((child) => child.text).join('');\n const [linkText, setLinkText] = React.useState(elementText);\n const [linkUrl, setLinkUrl] = React.useState(link.url);\n const linkInputRef = React.useRef<HTMLInputElement>(null);\n const isLastInsertedLink = editor.lastInsertedLinkPath\n ? !Path.equals(path, editor.lastInsertedLinkPath)\n : true;\n const [isSaveDisabled, setIsSaveDisabled] = React.useState(false);\n\n const onLinkChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setIsSaveDisabled(false);\n setLinkUrl(e.target.value);\n\n try {\n // eslint-disable-next-line no-new\n new URL(\n e.target.value?.startsWith('/') ? `https://strapi.io${e.target.value}` : e.target.value\n );\n } catch (error) {\n setIsSaveDisabled(true);\n }\n };\n\n const handleSave: React.FormEventHandler = (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 (editor.selection && 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 setPopoverOpen(false);\n editor.lastInsertedLinkPath = null;\n ReactEditor.focus(editor);\n };\n\n const handleClose = () => {\n if (link.url === '') {\n removeLink(editor);\n }\n\n setPopoverOpen(false);\n ReactEditor.focus(editor);\n };\n\n React.useEffect(() => {\n // Focus on the link input element when the popover opens\n if (popoverOpen) linkInputRef.current?.focus();\n }, [popoverOpen]);\n\n const inputNotDirty =\n !linkText ||\n !linkUrl ||\n (link.url && link.url === linkUrl && elementText && elementText === linkText);\n\n return (\n <Popover.Root open={popoverOpen}>\n <Popover.Trigger>\n <StyledBaseLink\n {...attributes}\n ref={forwardedRef}\n href={link.url}\n onClick={() => setPopoverOpen(true)}\n color=\"primary600\"\n >\n {children}\n </StyledBaseLink>\n </Popover.Trigger>\n <Popover.Content onPointerDownOutside={handleClose}>\n <Flex padding={4} direction=\"column\" gap={4}>\n <Field.Root width=\"368px\">\n <Flex direction=\"column\" gap={1} alignItems=\"stretch\">\n <Field.Label>\n {formatMessage({\n id: 'components.Blocks.popover.text',\n defaultMessage: 'Text',\n })}\n </Field.Label>\n <Field.Input\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) => {\n setLinkText(e.target.value);\n }}\n />\n </Flex>\n </Field.Root>\n <Field.Root width=\"368px\">\n <Flex direction=\"column\" gap={1} alignItems=\"stretch\">\n <Field.Label>\n {formatMessage({\n id: 'components.Blocks.popover.link',\n defaultMessage: 'Link',\n })}\n </Field.Label>\n <Field.Input\n ref={linkInputRef}\n name=\"url\"\n placeholder={formatMessage({\n id: 'components.Blocks.popover.link.placeholder',\n defaultMessage: 'Paste link',\n })}\n value={linkUrl}\n onChange={onLinkChange}\n />\n </Flex>\n </Field.Root>\n <Flex justifyContent=\"space-between\" width=\"100%\">\n <RemoveButton\n variant=\"danger-light\"\n onClick={() => removeLink(editor)}\n $visible={isLastInsertedLink}\n >\n {formatMessage({\n id: 'components.Blocks.popover.remove',\n defaultMessage: 'Remove',\n })}\n </RemoveButton>\n <Flex gap={2}>\n <Button variant=\"tertiary\" onClick={handleClose}>\n {formatMessage({\n id: 'global.cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n <Button disabled={Boolean(inputNotDirty) || isSaveDisabled} onClick={handleSave}>\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n </Flex>\n </Flex>\n </Flex>\n </Popover.Content>\n </Popover.Root>\n );\n }\n);\n\nconst Link = React.forwardRef<HTMLAnchorElement, RenderElementProps>((props, forwardedRef) => {\n if (!isLinkNode(props.element)) {\n return null;\n }\n\n // LinkContent uses React hooks that rely on props.element being a link. If the type guard above\n // doesn't pass, those hooks would be called conditionnally, which is not allowed.\n // Hence the need for a separate component.\n return <LinkContent {...props} link={props.element} ref={forwardedRef} />;\n});\n\nconst linkBlocks: Pick<BlocksStore, 'link'> = {\n link: {\n renderElement: (props) => (\n <Link element={props.element} attributes={props.attributes}>\n {props.children}\n </Link>\n ),\n // No handleConvert here, links are created via the link button in the toolbar\n matchNode: (node) => node.type === 'link',\n isInBlocksSelector: false,\n },\n};\n\nexport { linkBlocks };\n","import * as React from 'react';\n\nimport { Typography } from '@strapi/design-system';\nimport { BulletList, NumberList } from '@strapi/icons';\nimport { type Text, Editor, Node, Transforms, Path } from 'slate';\nimport { type RenderElementProps, ReactEditor } from 'slate-react';\nimport { styled, type CSSProperties, css } from 'styled-components';\n\nimport { type BlocksStore } from '../BlocksEditor';\nimport { baseHandleConvert } from '../utils/conversions';\nimport { isListNode, type Block } from '../utils/types';\n\nconst listStyle = css`\n display: flex;\n flex-direction: column;\n gap: ${({ theme }) => theme.spaces[2]};\n margin-inline-start: ${({ theme }) => theme.spaces[0]};\n margin-inline-end: ${({ theme }) => theme.spaces[0]};\n padding-inline-start: ${({ theme }) => theme.spaces[2]};\n\n ol,\n ul {\n margin-block-start: ${({ theme }) => theme.spaces[0]};\n margin-block-end: ${({ theme }) => theme.spaces[0]};\n }\n\n li {\n margin-inline-start: ${({ theme }) => theme.spaces[3]};\n }\n`;\n\nconst Orderedlist = styled.ol<{ $listStyleType: CSSProperties['listStyleType'] }>`\n list-style-type: ${(props) => props.$listStyleType};\n ${listStyle}\n`;\n\nconst Unorderedlist = styled.ul<{ $listStyleType: CSSProperties['listStyleType'] }>`\n list-style-type: ${(props) => props.$listStyleType};\n ${listStyle}\n`;\n\nconst orderedStyles = ['decimal', 'lower-alpha', 'upper-roman'];\nconst unorderedStyles = ['disc', 'circle', 'square'];\n\nconst List = ({ attributes, children, element }: RenderElementProps) => {\n if (!isListNode(element)) {\n return null;\n }\n\n // Decide the subsequent style by referencing the given styles according to the format,\n // allowing for infinite nested lists\n const listStyles = element.format === 'ordered' ? orderedStyles : unorderedStyles;\n const nextIndex = (element.indentLevel || 0) % listStyles!.length;\n const listStyleType = listStyles![nextIndex];\n\n if (element.format === 'ordered') {\n return (\n <Orderedlist $listStyleType={listStyleType} {...attributes}>\n {children}\n </Orderedlist>\n );\n }\n\n return (\n <Unorderedlist $listStyleType={listStyleType} {...attributes}>\n {children}\n </Unorderedlist>\n );\n};\n\nconst replaceListWithEmptyBlock = (editor: Editor, currentListPath: Path) => {\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\nconst isText = (node: unknown): node is Text => {\n return Node.isNode(node) && !Editor.isEditor(node) && node.type === 'text';\n};\n\n/**\n * Common handler for the backspace event on ordered and unordered lists\n */\nconst handleBackspaceKeyOnList = (editor: Editor, event: React.KeyboardEvent<HTMLElement>) => {\n if (!editor.selection) return;\n\n const [currentListItem, currentListItemPath] = Editor.parent(editor, editor.selection.anchor);\n const [currentList, currentListPath] = Editor.parent(editor, currentListItemPath);\n const isListEmpty =\n currentList.children.length === 1 &&\n isText(currentListItem.children[0]) &&\n currentListItem.children[0].text === '';\n const isListItemEmpty =\n currentListItem.children.length === 1 &&\n isText(currentListItem.children[0]) &&\n currentListItem.children[0].text === '';\n const isFocusAtTheBeginningOfAChild =\n editor.selection.focus.offset === 0 && editor.selection.focus.path.at(-2) === 0;\n\n if (isListEmpty) {\n const parentListEntry = Editor.above(editor, {\n at: currentListPath,\n match: (node) => !Editor.isEditor(node) && node.type === 'list',\n });\n if (!parentListEntry) {\n event.preventDefault();\n replaceListWithEmptyBlock(editor, currentListPath);\n }\n } else if (isFocusAtTheBeginningOfAChild) {\n // If the focus is at the beginning of a child node we need to replace it with a paragraph\n Transforms.liftNodes(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list-item',\n });\n Transforms.setNodes(editor, { type: 'paragraph' });\n } else if (isListItemEmpty) {\n const previousEntry = Editor.previous(editor, {\n at: currentListItemPath,\n });\n const nextEntry = Editor.next(editor, {\n at: currentListItemPath,\n });\n\n if (previousEntry && nextEntry) {\n // If previous and next nodes are lists or list-items, delete empty list item\n event.preventDefault();\n Transforms.removeNodes(editor, {\n at: currentListItemPath,\n });\n\n // If previous and next nodes are lists with same format and indent Levels, then merge the nodes\n const [previousList] = previousEntry;\n const [nextList] = nextEntry;\n if (\n !Editor.isEditor(previousList) &&\n !isText(previousList) &&\n isListNode(previousList) &&\n !Editor.isEditor(nextList) &&\n !isText(nextList) &&\n isListNode(nextList)\n ) {\n if (\n previousList.type === 'list' &&\n nextList.type === 'list' &&\n previousList.format === nextList.format &&\n previousList.indentLevel === nextList.indentLevel\n ) {\n Transforms.mergeNodes(editor, {\n at: currentListItemPath,\n });\n }\n }\n }\n }\n};\n\n/**\n * Common handler for the enter key on ordered and unordered lists\n */\nconst handleEnterKeyOnList = (editor: Editor) => {\n const currentListItemEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list-item',\n });\n\n if (!currentListItemEntry || !editor.selection) {\n return;\n }\n\n const [currentListItem, currentListItemPath] = currentListItemEntry;\n const [currentList, currentListPath] = Editor.parent(editor, currentListItemPath);\n const isListEmpty =\n currentList.children.length === 1 &&\n isText(currentListItem.children[0]) &&\n currentListItem.children[0].text === '';\n const isListItemEmpty =\n currentListItem.children.length === 1 &&\n isText(currentListItem.children[0]) &&\n currentListItem.children[0].text === '';\n const isFocusAtTheBeginningOfAChild =\n editor.selection.focus.offset === 0 && editor.selection.focus.path.at(-1) === 0;\n\n if (isListEmpty) {\n replaceListWithEmptyBlock(editor, currentListPath);\n } else if (isFocusAtTheBeginningOfAChild && !isListItemEmpty) {\n // If the focus is at the beginning of a child node, shift below the list item and create a new list-item\n const currentNode = Editor.above(editor, { at: editor.selection.anchor });\n Transforms.insertNodes(editor, { type: 'list-item', children: [{ type: 'text', text: '' }] });\n if (currentNode) {\n const path = currentNode[1];\n const updatedPath = [...path.slice(0, -1), path[path.length - 1] + 1];\n Transforms.select(editor, {\n anchor: { path: updatedPath.concat(0), offset: 0 },\n focus: { path: updatedPath.concat(0), offset: 0 },\n });\n }\n } else if (isListItemEmpty) {\n // Check if there is a list above the current list and shift list-item under it\n if (\n !Editor.isEditor(currentList) &&\n isListNode(currentList) &&\n currentList?.indentLevel &&\n currentList.indentLevel > 0\n ) {\n const previousIndentLevel = currentList.indentLevel - 1;\n\n const parentListNodeEntry = Editor.above(editor, {\n match: (node) =>\n !Editor.isEditor(node) &&\n node.type === 'list' &&\n (node.indentLevel || 0) === previousIndentLevel,\n });\n\n if (parentListNodeEntry) {\n // Get the parent list path and add 1 to it to exit from the current list\n const modifiedPath = currentListItemPath.slice(0, -1);\n if (modifiedPath.length > 0) {\n modifiedPath[modifiedPath.length - 1] += 1;\n }\n\n // Shift list-item under parent list\n Transforms.moveNodes(editor, {\n at: currentListItemPath,\n to: modifiedPath,\n });\n return;\n }\n }\n\n // Otherwise delete the empty list item and create a new paragraph below the parent list\n Transforms.removeNodes(editor, { at: currentListItemPath });\n\n const createdParagraphPath = Path.next(currentListPath);\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/**\n * Common handler for converting a node to a list\n */\nconst handleConvertToList = (editor: Editor, format: Block<'list'>['format']) => {\n const convertedPath = baseHandleConvert<Block<'list-item'>>(editor, { type: 'list-item' });\n\n if (!convertedPath) return;\n\n Transforms.wrapNodes(editor, { type: 'list', format, children: [] }, { at: convertedPath });\n};\n\n/**\n * Common handler for the tab key on ordered and unordered lists\n */\nconst handleTabOnList = (editor: Editor) => {\n const currentListItemEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list-item',\n });\n\n if (!currentListItemEntry || !editor.selection) {\n return;\n }\n\n const [currentListItem, currentListItemPath] = currentListItemEntry;\n const [currentList] = Editor.parent(editor, currentListItemPath);\n\n // Skip tabbing if list-item is the first item in the list\n if (currentListItem === currentList.children[0]) return;\n\n const currentListItemIndex = currentList.children.findIndex((item) => item === currentListItem);\n const previousNode = currentList.children[currentListItemIndex - 1];\n\n // If previous node is a list block then move the list-item under it\n if (previousNode.type === 'list') {\n const nodePath = ReactEditor.findPath(editor, previousNode);\n const insertAtPath = previousNode.children.length;\n\n Transforms.moveNodes(editor, {\n at: currentListItemPath,\n to: nodePath.concat(insertAtPath),\n });\n return;\n }\n\n if (!Editor.isEditor(currentList) && isListNode(currentList)) {\n // Wrap list-item with list block on tab\n Transforms.wrapNodes(editor, {\n type: 'list',\n format: currentList.format,\n indentLevel: (currentList.indentLevel || 0) + 1,\n children: [],\n });\n }\n};\n\nconst listBlocks: Pick<BlocksStore, 'list-ordered' | 'list-unordered' | 'list-item'> = {\n 'list-ordered': {\n renderElement: (props) => <List {...props} />,\n label: {\n id: 'components.Blocks.blocks.orderedList',\n defaultMessage: 'Numbered list',\n },\n icon: NumberList,\n matchNode: (node) => node.type === 'list' && node.format === 'ordered',\n isInBlocksSelector: true,\n handleConvert: (editor) => handleConvertToList(editor, 'ordered'),\n handleEnterKey: handleEnterKeyOnList,\n handleBackspaceKey: handleBackspaceKeyOnList,\n handleTab: handleTabOnList,\n snippets: ['1.'],\n },\n 'list-unordered': {\n renderElement: (props) => <List {...props} />,\n label: {\n id: 'components.Blocks.blocks.unorderedList',\n defaultMessage: 'Bulleted list',\n },\n icon: BulletList,\n matchNode: (node) => node.type === 'list' && node.format === 'unordered',\n isInBlocksSelector: true,\n handleConvert: (editor) => handleConvertToList(editor, 'unordered'),\n handleEnterKey: handleEnterKeyOnList,\n handleBackspaceKey: handleBackspaceKeyOnList,\n handleTab: handleTabOnList,\n snippets: ['-', '*', '+'],\n },\n 'list-item': {\n renderElement: (props) => (\n <Typography tag=\"li\" {...props.attributes}>\n {props.children}\n </Typography>\n ),\n // No handleConvert, list items are created when converting to the parent list\n matchNode: (node) => node.type === 'list-item',\n isInBlocksSelector: false,\n dragHandleTopMargin: '-2px',\n },\n};\n\nexport { listBlocks };\n","import * as React from 'react';\n\nimport { Typography } from '@strapi/design-system';\nimport { Paragraph } from '@strapi/icons';\nimport { type Text, Editor, Transforms } from 'slate';\n\nimport { type BlocksStore } from '../BlocksEditor';\nimport { baseHandleConvert } from '../utils/conversions';\nimport { type Block } from '../utils/types';\n\nconst paragraphBlocks: Pick<BlocksStore, 'paragraph'> = {\n paragraph: {\n renderElement: (props) => (\n <Typography tag=\"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 matchNode: (node) => node.type === 'paragraph',\n isInBlocksSelector: true,\n dragHandleTopMargin: '-2px',\n handleConvert(editor) {\n baseHandleConvert<Block<'paragraph'>>(editor, { type: 'paragraph' });\n },\n handleEnterKey(editor) {\n if (!editor.selection) {\n return;\n }\n\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 parentBlockEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type !== 'text',\n });\n if (!parentBlockEntry) {\n return;\n }\n const [, parentBlockPath] = parentBlockEntry;\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);\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) as Text[],\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 * Make sure to 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};\n\nexport { paragraphBlocks };\n","import { Quotes } from '@strapi/icons';\nimport { styled } from 'styled-components';\n\nimport { type BlocksStore } from '../BlocksEditor';\nimport { baseHandleConvert } from '../utils/conversions';\nimport { pressEnterTwiceToExit } from '../utils/enterKey';\nimport { type Block } from '../utils/types';\n\nconst Blockquote = styled.blockquote.attrs({ role: 'blockquote' })`\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[4]};\n color: ${({ theme }) => theme.colors.neutral600};\n`;\n\nconst quoteBlocks: Pick<BlocksStore, 'quote'> = {\n quote: {\n renderElement: (props) => (\n // The div is needed to make sure the padding bottom from BlocksContent is applied properly\n // when the quote is the last block in the editor\n <div>\n <Blockquote {...props.attributes}>{props.children}</Blockquote>\n </div>\n ),\n icon: Quotes,\n label: {\n id: 'components.Blocks.blocks.quote',\n defaultMessage: 'Quote',\n },\n matchNode: (node) => node.type === 'quote',\n isInBlocksSelector: true,\n handleConvert(editor) {\n baseHandleConvert<Block<'quote'>>(editor, { type: 'quote' });\n },\n handleEnterKey(editor) {\n pressEnterTwiceToExit(editor);\n },\n snippets: ['>'],\n },\n};\n\nexport { quoteBlocks };\n","import * as React from 'react';\n\nimport * as Toolbar from '@radix-ui/react-toolbar';\nimport {\n Flex,\n Tooltip,\n SingleSelect,\n SingleSelectOption,\n Box,\n FlexComponent,\n BoxComponent,\n} from '@strapi/design-system';\nimport { Link } from '@strapi/icons';\nimport { MessageDescriptor, useIntl } from 'react-intl';\nimport { Editor, Transforms, Element as SlateElement, Node, type Ancestor } from 'slate';\nimport { ReactEditor } from 'slate-react';\nimport { styled } from 'styled-components';\n\nimport {\n type BlocksStore,\n type SelectorBlockKey,\n isSelectorBlockKey,\n useBlocksEditorContext,\n} from './BlocksEditor';\nimport { insertLink } from './utils/links';\nimport { type Block, getEntries, getKeys } from './utils/types';\n\nconst ToolbarWrapper = styled<FlexComponent>(Flex)`\n &[aria-disabled='true'] {\n cursor: not-allowed;\n background: ${({ theme }) => theme.colors.neutral150};\n }\n`;\n\nconst Separator = styled(Toolbar.Separator)`\n background: ${({ theme }) => theme.colors.neutral150};\n width: 1px;\n height: 2.4rem;\n`;\n\nconst FlexButton = styled<FlexComponent<'button'>>(Flex)`\n // Inherit the not-allowed cursor from ToolbarWrapper when disabled\n &[aria-disabled] {\n cursor: not-allowed;\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<BoxComponent>(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\n/**\n * Handles the modal component that may be returned by a block when converting it\n */\nfunction useConversionModal() {\n const [modalElement, setModalComponent] = React.useState<React.JSX.Element | null>(null);\n\n const handleConversionResult = (renderModal: void | (() => React.JSX.Element) | undefined) => {\n // Not all blocks return a modal\n if (renderModal) {\n // Use cloneElement to apply a key because to create a new instance of the component\n // Without the new key, the state is kept from previous times that option was picked\n setModalComponent(React.cloneElement(renderModal(), { key: Date.now() }));\n }\n };\n\n return { modalElement, handleConversionResult };\n}\n\ninterface ToolbarButtonProps {\n icon: React.ComponentType<React.SVGProps<SVGSVGElement>>;\n name: string;\n label: MessageDescriptor;\n isActive: boolean;\n disabled: boolean;\n handleClick: () => void;\n}\n\nconst ToolbarButton = ({\n icon: Icon,\n name,\n label,\n isActive,\n disabled,\n handleClick,\n}: ToolbarButtonProps) => {\n const { editor } = useBlocksEditorContext('ToolbarButton');\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 ReactEditor.focus(editor);\n }}\n aria-disabled={disabled}\n disabled={disabled}\n aria-label={labelMessage}\n asChild\n >\n <FlexButton\n tag=\"button\"\n background={isActive ? 'primary100' : ''}\n alignItems=\"center\"\n justifyContent=\"center\"\n width={7}\n height={7}\n hasRadius\n >\n <Icon fill={disabled ? 'neutral300' : enabledColor} />\n </FlexButton>\n </Toolbar.ToggleItem>\n </Tooltip>\n );\n};\n\nconst BlocksDropdown = () => {\n const { editor, blocks, disabled } = useBlocksEditorContext('BlocksDropdown');\n const { formatMessage } = useIntl();\n const { modalElement, handleConversionResult } = useConversionModal();\n\n const blockKeysToInclude: SelectorBlockKey[] = getEntries(blocks).reduce<\n ReturnType<typeof getEntries>\n >((currentKeys, entry) => {\n const [key, block] = entry;\n\n return block.isInBlocksSelector ? [...currentKeys, key] : currentKeys;\n }, []);\n\n const [blockSelected, setBlockSelected] = React.useState<SelectorBlockKey>('paragraph');\n\n const handleSelect = (optionKey: unknown) => {\n if (!isSelectorBlockKey(optionKey)) {\n return;\n }\n\n const editorIsEmpty =\n editor.children.length === 1 && Editor.isEmpty(editor, editor.children[0]);\n\n if (!editor.selection && !editorIsEmpty) {\n // When there is no selection, create an empty block at the end of the editor\n // so that it can be converted to the selected block\n Transforms.insertNodes(\n editor,\n {\n type: 'quote',\n children: [{ type: 'text', text: '' }],\n },\n {\n select: true,\n // Since there's no selection, Slate will automatically insert the node at the end\n }\n );\n } else if (!editor.selection && editorIsEmpty) {\n // When there is no selection and the editor is empty,\n // select the empty paragraph from Slate's initialValue so it gets converted\n Transforms.select(editor, Editor.start(editor, [0, 0]));\n }\n\n // If selection is already a list block, toggle its format\n const currentListEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list',\n });\n\n if (currentListEntry && ['list-ordered', 'list-unordered'].includes(optionKey)) {\n const [currentList, currentListPath] = currentListEntry;\n const format = optionKey === 'list-ordered' ? 'ordered' : 'unordered';\n\n if (!Editor.isEditor(currentList) && isListNode(currentList)) {\n // Format is different, toggle list format\n if (currentList.format !== format) {\n Transforms.setNodes(editor, { format }, { at: currentListPath });\n }\n }\n return;\n }\n\n // Let the block handle the Slate conversion logic\n const maybeRenderModal = blocks[optionKey].handleConvert?.(editor);\n handleConversionResult(maybeRenderModal);\n\n setBlockSelected(optionKey);\n\n ReactEditor.focus(editor);\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: Event) => 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 let selectedNode: Ancestor;\n\n // If selection anchor is a list-item, get its parent\n const currentListEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list',\n at: editor.selection.anchor,\n });\n\n if (currentListEntry) {\n const [currentList] = currentListEntry;\n selectedNode = currentList;\n } else {\n // Get the parent node of the anchor other than list-item\n const [anchorNode] = Editor.parent(editor, editor.selection.anchor, {\n edge: 'start',\n depth: 2,\n });\n\n // @ts-expect-error slate's delete behaviour creates an exceptional type\n if (anchorNode.type === 'list-item') {\n // When the last node in the selection is a list item,\n // slate's default delete operation leaves an empty list-item instead of converting it into a paragraph.\n // Issue: https://github.com/ianstormtaylor/slate/issues/2500\n\n Transforms.setNodes(editor, { type: 'paragraph' });\n // @ts-expect-error convert explicitly type to paragraph\n selectedNode = { ...anchorNode, type: 'paragraph' };\n } else {\n selectedNode = anchorNode;\n }\n }\n\n // Find the block key that matches the anchor node\n const anchorBlockKey = getKeys(blocks).find(\n (blockKey) => !Editor.isEditor(selectedNode) && blocks[blockKey].matchNode(selectedNode)\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 as SelectorBlockKey);\n }\n }\n }, [editor.selection, editor, blocks, blockSelected]);\n\n const Icon = blocks[blockSelected].icon;\n\n return (\n <>\n <SelectWrapper>\n <SingleSelect\n startIcon={<Icon />}\n onChange={handleSelect}\n placeholder={formatMessage(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 {modalElement}\n </>\n );\n};\n\ninterface BlockOptionProps {\n value: string;\n icon: React.ComponentType<React.SVGProps<SVGElement>>;\n label: MessageDescriptor;\n blockSelected: string;\n}\n\nconst BlockOption = ({ value, icon: Icon, label, blockSelected }: BlockOptionProps) => {\n const { formatMessage } = useIntl();\n\n const isSelected = value === blockSelected;\n\n return (\n <SingleSelectOption\n startIcon={<Icon fill={isSelected ? 'primary600' : 'neutral600'} />}\n value={value}\n >\n {formatMessage(label)}\n </SingleSelectOption>\n );\n};\n\nconst isListNode = (node: unknown): node is Block<'list'> => {\n return Node.isNode(node) && !Editor.isEditor(node) && node.type === 'list';\n};\n\ninterface ListButtonProps {\n block: BlocksStore['list-ordered'] | BlocksStore['list-unordered'];\n format: Block<'list'>['format'];\n}\n\nconst ListButton = ({ block, format }: ListButtonProps) => {\n const { editor, disabled, blocks } = useBlocksEditorContext('ListButton');\n\n const isListActive = () => {\n if (!editor.selection) return false;\n\n // Get the parent list at selection anchor node\n const currentListEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list',\n at: editor.selection.anchor,\n });\n\n if (currentListEntry) {\n const [currentList] = currentListEntry;\n if (!Editor.isEditor(currentList) && isListNode(currentList) && currentList.format === format)\n return true;\n }\n return false;\n };\n\n /**\n * @TODO: Currently, applying list while multiple blocks are selected is not supported.\n * We should implement this feature in the future.\n */\n const isListDisabled = () => {\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) => !Editor.isEditor(node) && node.type !== 'text',\n });\n const focusNodeEntry = Editor.above(editor, {\n at: editor.selection.focus,\n match: (node) => !Editor.isEditor(node) && node.type !== 'text',\n });\n\n if (!anchorNodeEntry || !focusNodeEntry) {\n return false;\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 toggleList = (format: Block<'list'>['format']) => {\n let currentListEntry;\n if (editor.selection) {\n currentListEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list',\n });\n } else {\n // If no selection, toggle last inserted node\n const [_, lastNodePath] = Editor.last(editor, []);\n currentListEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list',\n at: lastNodePath,\n });\n }\n\n if (!currentListEntry) {\n // If selection is not a list then convert it to list\n blocks[`list-${format}`].handleConvert!(editor);\n return;\n }\n\n // If selection is already a list then toggle format\n const [currentList, currentListPath] = currentListEntry;\n\n if (!Editor.isEditor(currentList) && isListNode(currentList)) {\n if (currentList.format !== format) {\n // Format is different, toggle list format\n Transforms.setNodes(editor, { format }, { at: currentListPath });\n } else {\n // Format is same, convert selected list-item to paragraph\n blocks['paragraph'].handleConvert!(editor);\n }\n }\n };\n\n return (\n <ToolbarButton\n icon={block.icon}\n name={format}\n label={block.label}\n isActive={isListActive()}\n disabled={isListDisabled()}\n handleClick={() => toggleList(format)}\n />\n );\n};\n\nconst LinkButton = ({ disabled }: { disabled: boolean }) => {\n const { editor } = useBlocksEditorContext('LinkButton');\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) => !Editor.isEditor(node) && node.type !== 'text',\n });\n const focusNodeEntry = Editor.above(editor, {\n at: editor.selection.focus,\n match: (node) => !Editor.isEditor(node) && node.type !== 'text',\n });\n\n if (!anchorNodeEntry || !focusNodeEntry) {\n return false;\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 editor.shouldSaveLinkPath = true;\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\nconst BlocksToolbar = () => {\n const { editor, blocks, modifiers, disabled } = useBlocksEditorContext('BlocksToolbar');\n\n /**\n * The modifier buttons are disabled when an image is selected.\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} width=\"100%\">\n <BlocksDropdown />\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(editor)}\n handleClick={() => modifier.handleToggle(editor)}\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']} format=\"unordered\" />\n <ListButton block={blocks['list-ordered']} format=\"ordered\" />\n </Flex>\n </Toolbar.ToggleGroup>\n </ToolbarWrapper>\n </Toolbar.Root>\n );\n};\n\nexport { BlocksToolbar, useConversionModal };\n","import * as React from 'react';\n\nimport {\n Box,\n BoxComponent,\n Flex,\n FlexComponent,\n IconButton,\n IconButtonComponent,\n useComposedRefs,\n} from '@strapi/design-system';\nimport { Drag } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { Editor, Range, Transforms } from 'slate';\nimport { ReactEditor, type RenderElementProps, type RenderLeafProps, Editable } from 'slate-react';\nimport { styled, CSSProperties, css } from 'styled-components';\n\nimport { ItemTypes } from '../../../../../constants/dragAndDrop';\nimport { useDragAndDrop, DIRECTIONS } from '../../../../../hooks/useDragAndDrop';\nimport { getTranslation } from '../../../../../utils/translations';\n\nimport { decorateCode } from './Blocks/Code';\nimport { type BlocksStore, useBlocksEditorContext } from './BlocksEditor';\nimport { useConversionModal } from './BlocksToolbar';\nimport { type ModifiersStore } from './Modifiers';\nimport { getEntries, isLinkNode, isListNode } from './utils/types';\n\nconst StyledEditable = styled(Editable)<{ isExpandedMode: boolean }>`\n // The outline style is set on the wrapper with :focus-within\n outline: none;\n display: flex;\n flex-direction: column;\n gap: ${({ theme }) => theme.spaces[3]};\n height: 100%;\n // For fullscreen align input in the center with fixed width\n width: ${(props) => (props.isExpandedMode ? '512px' : '100%')};\n margin: auto;\n\n > *:last-child {\n padding-bottom: ${({ theme }) => theme.spaces[3]};\n }\n`;\n\nconst Wrapper = styled<BoxComponent>(Box)<{ isOverDropTarget: boolean }>`\n position: ${({ isOverDropTarget }) => isOverDropTarget && 'relative'};\n`;\n\ntype DragDirection = (typeof DIRECTIONS)[keyof typeof DIRECTIONS];\n\nconst DropPlaceholder = styled<BoxComponent>(Box)<{\n dragDirection: DragDirection | null;\n placeholderMargin: 1 | 2;\n}>`\n position: absolute;\n right: 0;\n\n // Show drop placeholder 8px above or below the drop target\n ${({ dragDirection, theme, placeholderMargin }) => css`\n top: ${dragDirection === DIRECTIONS.UPWARD && `-${theme.spaces[placeholderMargin]}`};\n bottom: ${dragDirection === DIRECTIONS.DOWNWARD && `-${theme.spaces[placeholderMargin]}`};\n `}\n`;\n\nconst DragItem = styled<FlexComponent>(Flex)<{ $dragVisibility: CSSProperties['visibility'] }>`\n // Style each block rendered using renderElement()\n & > [data-slate-node='element'] {\n width: 100%;\n opacity: inherit;\n }\n\n // Set the visibility of drag button\n [role='button'] {\n visibility: ${(props) => props.$dragVisibility};\n opacity: inherit;\n }\n &[aria-disabled='true'] {\n user-drag: none;\n }\n`;\n\nconst DragIconButton = styled<IconButtonComponent<'div'>>(IconButton)<{\n $dragHandleTopMargin?: CSSProperties['marginTop'];\n}>`\n user-select: none;\n display: flex;\n align-items: center;\n justify-content: center;\n border: none;\n border-radius: ${({ theme }) => theme.borderRadius};\n padding-left: ${({ theme }) => theme.spaces[0]};\n padding-right: ${({ theme }) => theme.spaces[0]};\n padding-top: ${({ theme }) => theme.spaces[1]};\n padding-bottom: ${({ theme }) => theme.spaces[1]};\n visibility: hidden;\n cursor: grab;\n opacity: inherit;\n margin-top: ${(props) => props.$dragHandleTopMargin ?? 0};\n\n &:hover {\n background: ${({ theme }) => theme.colors.neutral100};\n }\n &:active {\n cursor: grabbing;\n background: ${({ theme }) => theme.colors.neutral150};\n }\n &[aria-disabled='true'] {\n visibility: hidden;\n }\n svg {\n min-width: ${({ theme }) => theme.spaces[3]};\n\n path {\n fill: ${({ theme }) => theme.colors.neutral500};\n }\n }\n`;\n\ntype Direction = {\n setDragDirection: (direction: DragDirection) => void;\n dragDirection: DragDirection | null;\n};\n\ntype DragAndDropElementProps = Direction & {\n children: RenderElementProps['children'];\n index: Array<number>;\n dragHandleTopMargin?: CSSProperties['marginTop'];\n};\n\nconst DragAndDropElement = ({\n children,\n index,\n setDragDirection,\n dragDirection,\n dragHandleTopMargin,\n}: DragAndDropElementProps) => {\n const { editor, disabled, name, setLiveText } = useBlocksEditorContext('drag-and-drop');\n const { formatMessage } = useIntl();\n const [dragVisibility, setDragVisibility] = React.useState<CSSProperties['visibility']>('hidden');\n\n const handleMoveBlock = React.useCallback(\n (newIndex: Array<number>, currentIndex: Array<number>) => {\n Transforms.moveNodes(editor, {\n at: currentIndex,\n to: newIndex,\n });\n\n // Add 1 to the index for the live text message\n const currentIndexPosition = [currentIndex[0] + 1, ...currentIndex.slice(1)];\n const newIndexPosition = [newIndex[0] + 1, ...newIndex.slice(1)];\n\n setLiveText(\n formatMessage(\n {\n id: getTranslation('components.Blocks.dnd.reorder'),\n defaultMessage: '{item}, moved. New position in the editor: {position}.',\n },\n {\n item: `${name}.${currentIndexPosition.join(',')}`,\n position: `${newIndexPosition.join(',')} of ${editor.children.length}`,\n }\n )\n );\n },\n [editor, formatMessage, name, setLiveText]\n );\n\n const [{ handlerId, isDragging, isOverDropTarget, direction }, blockRef, dropRef, dragRef] =\n useDragAndDrop(!disabled, {\n type: `${ItemTypes.BLOCKS}_${name}`,\n index,\n item: {\n index,\n displayedValue: children,\n },\n onDropItem(currentIndex, newIndex) {\n if (newIndex) handleMoveBlock(newIndex, currentIndex);\n },\n });\n\n const composedBoxRefs = useComposedRefs(blockRef, dropRef);\n\n // Set Drag direction before loosing state while dragging\n React.useEffect(() => {\n if (direction) {\n setDragDirection(direction);\n }\n }, [direction, setDragDirection]);\n\n // On selection change hide drag handle\n React.useEffect(() => {\n setDragVisibility('hidden');\n }, [editor.selection]);\n\n return (\n <Wrapper ref={composedBoxRefs} isOverDropTarget={isOverDropTarget}>\n {isOverDropTarget && (\n <DropPlaceholder\n borderStyle=\"solid\"\n borderColor=\"secondary200\"\n borderWidth=\"2px\"\n width=\"calc(100% - 24px)\"\n marginLeft=\"auto\"\n dragDirection={dragDirection}\n // For list items placeholder reduce the margin around\n placeholderMargin={children.props.as && children.props.as === 'li' ? 1 : 2}\n />\n )}\n {isDragging ? (\n <CloneDragItem dragHandleTopMargin={dragHandleTopMargin}>{children}</CloneDragItem>\n ) : (\n <DragItem\n ref={dragRef}\n data-handler-id={handlerId}\n gap={2}\n paddingLeft={2}\n alignItems=\"start\"\n onDragStart={(event) => {\n const target = event.target as HTMLElement;\n const currentTarget = event.currentTarget as HTMLElement;\n\n // Dragging action should only trigger drag event when button is dragged, however update styles on the whole dragItem.\n if (target.getAttribute('role') !== 'button') {\n event.preventDefault();\n } else {\n // Setting styles using dragging state is not working, so set it on current target element as nodes get dragged\n currentTarget.style.opacity = '0.5';\n }\n }}\n onDragEnd={(event) => {\n const currentTarget = event.currentTarget as HTMLElement;\n currentTarget.style.opacity = '1';\n }}\n onMouseMove={() => setDragVisibility('visible')}\n onSelect={() => setDragVisibility('visible')}\n onMouseLeave={() => setDragVisibility('hidden')}\n aria-disabled={disabled}\n $dragVisibility={dragVisibility}\n >\n <DragIconButton\n tag=\"div\"\n contentEditable={false}\n role=\"button\"\n tabIndex={0}\n withTooltip={false}\n label={formatMessage({\n id: getTranslation('components.DragHandle-label'),\n defaultMessage: 'Drag',\n })}\n onClick={(e) => e.stopPropagation()}\n aria-disabled={disabled}\n disabled={disabled}\n draggable\n // For some blocks top margin added to drag handle to align at the text level\n $dragHandleTopMargin={dragHandleTopMargin}\n >\n <Drag color=\"primary500\" />\n </DragIconButton>\n {children}\n </DragItem>\n )}\n </Wrapper>\n );\n};\n\ninterface CloneDragItemProps {\n children: RenderElementProps['children'];\n dragHandleTopMargin?: CSSProperties['marginTop'];\n}\n\n// To prevent applying opacity to the original item being dragged, display a cloned element without opacity.\nconst CloneDragItem = ({ children, dragHandleTopMargin }: CloneDragItemProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <DragItem gap={2} paddingLeft={2} alignItems=\"start\" $dragVisibility=\"visible\">\n <DragIconButton\n tag=\"div\"\n role=\"button\"\n withTooltip={false}\n label={formatMessage({\n id: getTranslation('components.DragHandle-label'),\n defaultMessage: 'Drag',\n })}\n $dragHandleTopMargin={dragHandleTopMargin}\n >\n <Drag color=\"neutral600\" />\n </DragIconButton>\n {children}\n </DragItem>\n );\n};\n\ninterface ExtendedRenderLeafProps extends RenderLeafProps {\n leaf: RenderLeafProps['leaf'] & { className?: string };\n}\n\nconst baseRenderLeaf = (props: ExtendedRenderLeafProps, modifiers: ModifiersStore) => {\n // Recursively wrap the children for each active modifier\n const wrappedChildren = getEntries(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 (\n <span {...props.attributes} className={props.leaf.className}>\n {wrappedChildren}\n </span>\n );\n};\n\ntype BaseRenderElementProps = Direction & {\n props: RenderElementProps['children'];\n blocks: BlocksStore;\n editor: Editor;\n};\n\nconst baseRenderElement = ({\n props,\n blocks,\n editor,\n setDragDirection,\n dragDirection,\n}: BaseRenderElementProps) => {\n const { element } = props;\n\n const blockMatch = Object.values(blocks).find((block) => block.matchNode(element));\n const block = blockMatch || blocks.paragraph;\n const nodePath = ReactEditor.findPath(editor, element);\n\n // Link is inline block so it cannot be dragged\n // List items and nested list blocks i.e. lists with indent level higher than 0 are skipped from dragged items\n if (\n isLinkNode(element) ||\n (isListNode(element) && element.indentLevel && element.indentLevel > 0) ||\n element.type === 'list-item'\n ) {\n return block.renderElement(props);\n }\n\n return (\n <DragAndDropElement\n index={nodePath}\n setDragDirection={setDragDirection}\n dragDirection={dragDirection}\n dragHandleTopMargin={block.dragHandleTopMargin}\n >\n {block.renderElement(props)}\n </DragAndDropElement>\n );\n};\n\ninterface BlocksContentProps {\n placeholder?: string;\n ariaLabelId: string;\n}\n\nconst BlocksContent = ({ placeholder, ariaLabelId }: BlocksContentProps) => {\n const { editor, disabled, blocks, modifiers, setLiveText, isExpandedMode } =\n useBlocksEditorContext('BlocksContent');\n const blocksRef = React.useRef<HTMLDivElement>(null);\n const { formatMessage } = useIntl();\n const [dragDirection, setDragDirection] = React.useState<DragDirection | null>(null);\n const { modalElement, handleConversionResult } = useConversionModal();\n\n // Create renderLeaf function based on the modifiers store\n const renderLeaf = React.useCallback(\n (props: ExtendedRenderLeafProps) => baseRenderLeaf(props, modifiers),\n [modifiers]\n );\n\n const handleMoveBlocks = (editor: Editor, event: React.KeyboardEvent<HTMLElement>) => {\n if (!editor.selection) return;\n\n const start = Range.start(editor.selection);\n const currentIndex = [start.path[0]];\n let newIndexPosition = 0;\n\n if (event.key === 'ArrowUp') {\n newIndexPosition = currentIndex[0] > 0 ? currentIndex[0] - 1 : currentIndex[0];\n } else {\n newIndexPosition =\n currentIndex[0] < editor.children.length - 1 ? currentIndex[0] + 1 : currentIndex[0];\n }\n\n const newIndex = [newIndexPosition];\n\n if (newIndexPosition !== currentIndex[0]) {\n Transforms.moveNodes(editor, {\n at: currentIndex,\n to: newIndex,\n });\n\n setLiveText(\n formatMessage(\n {\n id: getTranslation('components.Blocks.dnd.reorder'),\n defaultMessage: '{item}, moved. New position in the editor: {position}.',\n },\n {\n item: `${name}.${currentIndex[0] + 1}`,\n position: `${newIndex[0] + 1} of ${editor.children.length}`,\n }\n )\n );\n\n event.preventDefault();\n }\n };\n\n // Create renderElement function base on the blocks store\n const renderElement = React.useCallback(\n (props: RenderElementProps) =>\n baseRenderElement({ props, blocks, editor, dragDirection, setDragDirection }),\n [blocks, editor, dragDirection, setDragDirection]\n );\n\n const checkSnippet = (event: React.KeyboardEvent<HTMLElement>) => {\n // Get current text block\n if (!editor.selection) {\n return;\n }\n\n const [textNode, textNodePath] = Editor.node(editor, editor.selection.anchor.path);\n\n // Narrow the type to a text node\n if (Editor.isEditor(textNode) || textNode.type !== 'text') {\n return;\n }\n\n // Don't check for snippets if we're not at the start of a block\n if (textNodePath.at(-1) !== 0) {\n return;\n }\n\n // Check if the text node starts with a known snippet\n const blockMatchingSnippet = Object.values(blocks).find((block) => {\n return block.snippets?.includes(textNode.text);\n });\n\n if (blockMatchingSnippet?.handleConvert) {\n // Prevent the space from being created and delete the snippet\n event.preventDefault();\n Transforms.delete(editor, {\n distance: textNode.text.length,\n unit: 'character',\n reverse: true,\n });\n\n // Convert the selected block\n const maybeRenderModal = blockMatchingSnippet.handleConvert(editor);\n handleConversionResult(maybeRenderModal);\n }\n };\n\n const handleEnter = (event: React.KeyboardEvent<HTMLElement>) => {\n if (!editor.selection) {\n return;\n }\n\n const selectedNode = editor.children[editor.selection.anchor.path[0]];\n const selectedBlock = Object.values(blocks).find((block) => block.matchNode(selectedNode));\n if (!selectedBlock) {\n return;\n }\n\n // Allow forced line breaks when shift is pressed\n if (event.shiftKey && selectedNode.type !== 'image') {\n Transforms.insertText(editor, '\\n');\n return;\n }\n\n // Check if there's an enter handler for the selected block\n if (selectedBlock.handleEnterKey) {\n selectedBlock.handleEnterKey(editor);\n } else {\n blocks.paragraph.handleEnterKey!(editor);\n }\n };\n\n const handleBackspaceEvent = (event: React.KeyboardEvent<HTMLElement>) => {\n if (!editor.selection) {\n return;\n }\n\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) {\n return;\n }\n\n if (selectedBlock.handleBackspaceKey) {\n selectedBlock.handleBackspaceKey(editor, event);\n }\n };\n\n const handleTab = (event: React.KeyboardEvent<HTMLElement>) => {\n if (!editor.selection) {\n return;\n }\n\n const selectedNode = editor.children[editor.selection.anchor.path[0]];\n const selectedBlock = Object.values(blocks).find((block) => block.matchNode(selectedNode));\n if (!selectedBlock) {\n return;\n }\n\n if (selectedBlock.handleTab) {\n event.preventDefault();\n selectedBlock.handleTab(editor);\n }\n };\n\n const handleKeyboardShortcuts = (event: React.KeyboardEvent<HTMLElement>) => {\n const isCtrlOrCmd = event.metaKey || event.ctrlKey;\n\n if (isCtrlOrCmd) {\n // Check if there's a modifier to toggle\n Object.values(modifiers).forEach((value) => {\n if (value.isValidEventKey(event)) {\n value.handleToggle(editor);\n return;\n }\n });\n if (event.shiftKey && ['ArrowUp', 'ArrowDown'].includes(event.key)) {\n handleMoveBlocks(editor, event);\n }\n }\n };\n\n const handleKeyDown: React.KeyboardEventHandler<HTMLElement> = (event) => {\n // Find the right block-specific handlers for enter and backspace key presses\n switch (event.key) {\n case 'Enter':\n event.preventDefault();\n return handleEnter(event);\n case 'Backspace':\n return handleBackspaceEvent(event);\n case 'Tab':\n return handleTab(event);\n case 'Escape':\n return ReactEditor.blur(editor);\n }\n\n handleKeyboardShortcuts(event);\n\n // Check if a snippet was triggered\n if (event.key === ' ') {\n checkSnippet(event);\n }\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 = () => {\n if (!editor.selection) return;\n const domRange = ReactEditor.toDOMRange(editor, editor.selection);\n const domRect = domRange.getBoundingClientRect();\n const blocksInput = blocksRef.current;\n\n if (!blocksInput) {\n return;\n }\n\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 paddingRight={7}\n paddingTop={6}\n paddingBottom={3}\n >\n <StyledEditable\n aria-labelledby={ariaLabelId}\n readOnly={disabled}\n placeholder={placeholder}\n isExpandedMode={isExpandedMode}\n decorate={decorateCode}\n renderElement={renderElement}\n renderLeaf={renderLeaf}\n onKeyDown={handleKeyDown}\n scrollSelectionIntoView={handleScrollSelectionIntoView}\n // As we have our own handler to drag and drop the elements returing true will skip slate's own event handler\n onDrop={() => {\n return true;\n }}\n onDragStart={() => {\n return true;\n }}\n />\n {modalElement}\n </Box>\n );\n};\n\nexport { BlocksContent, BlocksContentProps };\n","import * as React from 'react';\n\nimport { Box, Flex, FocusTrap, Portal, IconButton, FlexComponent } from '@strapi/design-system';\nimport { Collapse } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { css, styled } from 'styled-components';\n\nimport { getTranslation } from '../../../../../utils/translations';\n\nimport { useBlocksEditorContext } from './BlocksEditor';\n\nconst CollapseIconButton = styled(IconButton)`\n position: absolute;\n bottom: 1.2rem;\n right: 1.2rem;\n`;\n\nconst ExpandWrapper = styled<FlexComponent>(Flex)`\n // Background with 20% opacity\n background: ${({ theme }) => `${theme.colors.neutral800}1F`};\n`;\n\ninterface EditorLayoutProps {\n children: React.ReactNode;\n error?: string;\n onCollapse: () => void;\n disabled: boolean;\n ariaDescriptionId: string;\n}\n\nconst EditorLayout = ({\n children,\n error,\n disabled,\n onCollapse,\n ariaDescriptionId,\n}: EditorLayoutProps) => {\n const { formatMessage } = useIntl();\n const { isExpandedMode } = useBlocksEditorContext('editorLayout');\n\n React.useEffect(() => {\n if (isExpandedMode) {\n document.body.classList.add('lock-body-scroll');\n }\n\n return () => {\n document.body.classList.remove('lock-body-scroll');\n };\n }, [isExpandedMode]);\n\n if (isExpandedMode) {\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<'div'>\n background=\"neutral0\"\n hasRadius\n shadow=\"popupShadow\"\n overflow=\"hidden\"\n width=\"90%\"\n height=\"90%\"\n onClick={(e) => e.stopPropagation()}\n aria-describedby={ariaDescriptionId}\n position=\"relative\"\n >\n <Flex height=\"100%\" alignItems=\"flex-start\" direction=\"column\">\n {children}\n <CollapseIconButton\n label={formatMessage({\n id: getTranslation('components.Blocks.collapse'),\n defaultMessage: 'Collapse',\n })}\n onClick={onCollapse}\n >\n <Collapse />\n </CollapseIconButton>\n </Flex>\n </Box>\n </ExpandWrapper>\n </FocusTrap>\n </Portal>\n );\n }\n\n return (\n <InputWrapper\n direction=\"column\"\n alignItems=\"flex-start\"\n height=\"512px\"\n $disabled={disabled}\n $hasError={Boolean(error)}\n style={{ overflow: 'hidden' }}\n aria-describedby={ariaDescriptionId}\n position=\"relative\"\n >\n {children}\n </InputWrapper>\n );\n};\n\nconst InputWrapper = styled<FlexComponent>(Flex)<{ $disabled?: boolean; $hasError?: boolean }>`\n border: 1px solid\n ${({ theme, $hasError }) => ($hasError ? theme.colors.danger600 : theme.colors.neutral200)};\n border-radius: ${({ theme }) => theme.borderRadius};\n background: ${({ theme }) => theme.colors.neutral0};\n\n ${({ theme, $hasError = false }) => css`\n outline: none;\n box-shadow: 0;\n transition-property: border-color, box-shadow, fill;\n transition-duration: 0.2s;\n\n &:focus-within {\n border: 1px solid ${$hasError ? theme.colors.danger600 : theme.colors.primary600};\n box-shadow: ${$hasError ? theme.colors.danger600 : theme.colors.primary600} 0px 0px 0px 2px;\n }\n `}\n\n ${({ theme, $disabled }) =>\n $disabled\n ? css`\n color: ${theme.colors.neutral600};\n background: ${theme.colors.neutral150};\n `\n : undefined}\n`;\n\nexport { EditorLayout };\n","import * as React from 'react';\n\nimport { Typography, TypographyComponent } from '@strapi/design-system';\nimport { Bold, Italic, Underline, StrikeThrough, Code } from '@strapi/icons';\nimport { type MessageDescriptor } from 'react-intl';\nimport { Editor, Text, Transforms } from 'slate';\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<TypographyComponent>(Typography).attrs({ fontWeight: 'bold' })`\n ${stylesToInherit}\n`;\n\nconst ItalicText = styled<TypographyComponent>(Typography)`\n font-style: italic;\n ${stylesToInherit}\n`;\n\nconst UnderlineText = styled<TypographyComponent>(Typography).attrs({\n textDecoration: 'underline',\n})`\n ${stylesToInherit}\n`;\n\nconst StrikeThroughText = styled<TypographyComponent>(Typography).attrs({\n textDecoration: 'line-through',\n})`\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\ntype ModifierKey = Exclude<keyof Text, 'type' | 'text'>;\n\ntype ModifiersStore = {\n [K in ModifierKey]: {\n icon: React.ComponentType;\n isValidEventKey: (event: React.KeyboardEvent<HTMLElement>) => boolean;\n label: MessageDescriptor;\n checkIsActive: (editor: Editor) => boolean;\n handleToggle: (editor: Editor) => void;\n renderLeaf: (children: React.JSX.Element | string) => React.JSX.Element;\n };\n};\n\n/**\n * The default handler for checking if a modifier is active\n */\nconst baseCheckIsActive = (editor: Editor, name: ModifierKey) => {\n const marks = Editor.marks(editor);\n if (!marks) return false;\n\n return Boolean(marks[name]);\n};\n\n/**\n * The default handler for toggling a modifier\n */\nconst baseHandleToggle = (editor: Editor, name: ModifierKey) => {\n const marks = Editor.marks(editor);\n\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\n // Toggle the modifier\n if (marks?.[name]) {\n Editor.removeMark(editor, name);\n } else {\n Editor.addMark(editor, name, true);\n }\n};\n\nconst modifiers: ModifiersStore = {\n bold: {\n icon: Bold,\n isValidEventKey: (event) => event.key === 'b',\n label: { id: 'components.Blocks.modifiers.bold', defaultMessage: 'Bold' },\n checkIsActive: (editor) => baseCheckIsActive(editor, 'bold'),\n handleToggle: (editor) => baseHandleToggle(editor, '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: (editor) => baseCheckIsActive(editor, 'italic'),\n handleToggle: (editor) => baseHandleToggle(editor, '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: (editor) => baseCheckIsActive(editor, 'underline'),\n handleToggle: (editor) => baseHandleToggle(editor, '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: (editor) => baseCheckIsActive(editor, 'strikethrough'),\n handleToggle: (editor) => baseHandleToggle(editor, '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: 'Inline code' },\n checkIsActive: (editor) => baseCheckIsActive(editor, 'code'),\n handleToggle: (editor) => baseHandleToggle(editor, 'code'),\n renderLeaf: (children) => <InlineCode>{children}</InlineCode>,\n },\n};\n\nexport { type ModifiersStore, modifiers };\n","import { type Editor } from 'slate';\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 */\nconst withImages = (editor: 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\nexport { withImages };\n","import { type BaseEditor, Path, Transforms, Range, Point, Editor } from 'slate';\n\nimport { insertLink } from '../utils/links';\n\ninterface LinkEditor extends BaseEditor {\n lastInsertedLinkPath: Path | null;\n shouldSaveLinkPath: boolean;\n}\n\nconst withLinks = (editor: 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 (\n !Editor.isEditor(operation.node) &&\n operation.node.type === 'link' &&\n editor.shouldSaveLinkPath\n ) {\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 (\n Path.hasPrevious(operation.path) &&\n editor.lastInsertedLinkPath &&\n editor.shouldSaveLinkPath\n ) {\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 (editor.selection && Range.isCollapsed(editor.selection) && text === ' ') {\n const linksInSelection = Array.from(\n Editor.nodes(editor, {\n at: editor.selection,\n match: (node) => !Editor.isEditor(node) && node.type === 'link',\n })\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 // Do not show link popup on copy-paste a link, so do not save its path\n editor.shouldSaveLinkPath = false;\n insertLink(editor, { url: pastedText });\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, type LinkEditor };\n","import { type Text, Node, Editor, Element, Transforms } from 'slate';\n\nconst isText = (node: unknown): node is Text => {\n return Node.isNode(node) && !Editor.isEditor(node) && node.type === 'text';\n};\n\n/**\n * This plugin is used to normalize the Slate document to match the Strapi schema.\n */\nconst withStrapiSchema = (editor: 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) && !isText(node)) {\n Transforms.setNodes(editor, { type: 'text' }, { at: path });\n\n return;\n }\n\n normalizeNode(entry);\n };\n\n return editor;\n};\n\nexport { withStrapiSchema };\n","import * as React from 'react';\n\nimport { createContext, type FieldValue } from '@strapi/admin/strapi-admin';\nimport { IconButton, Divider, VisuallyHidden } from '@strapi/design-system';\nimport { Expand } from '@strapi/icons';\nimport { MessageDescriptor, useIntl } from 'react-intl';\nimport { Editor, type Descendant, createEditor } from 'slate';\nimport { withHistory } from 'slate-history';\nimport { type RenderElementProps, Slate, withReact, ReactEditor, useSlate } from 'slate-react';\nimport { styled, type CSSProperties } from 'styled-components';\n\nimport { getTranslation } from '../../../../../utils/translations';\n\nimport { codeBlocks } from './Blocks/Code';\nimport { headingBlocks } from './Blocks/Heading';\nimport { imageBlocks } from './Blocks/Image';\nimport { linkBlocks } from './Blocks/Link';\nimport { listBlocks } from './Blocks/List';\nimport { paragraphBlocks } from './Blocks/Paragraph';\nimport { quoteBlocks } from './Blocks/Quote';\nimport { BlocksContent, type BlocksContentProps } from './BlocksContent';\nimport { BlocksToolbar } from './BlocksToolbar';\nimport { EditorLayout } from './EditorLayout';\nimport { type ModifiersStore, modifiers } from './Modifiers';\nimport { withImages } from './plugins/withImages';\nimport { withLinks } from './plugins/withLinks';\nimport { withStrapiSchema } from './plugins/withStrapiSchema';\n\nimport type { Schema } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * BlocksEditorProvider\n * -----------------------------------------------------------------------------------------------*/\n\ninterface BaseBlock {\n renderElement: (props: RenderElementProps) => React.JSX.Element;\n matchNode: (node: Schema.Attribute.BlocksNode) => boolean;\n handleConvert?: (editor: Editor) => void | (() => React.JSX.Element);\n handleEnterKey?: (editor: Editor) => void;\n handleBackspaceKey?: (editor: Editor, event: React.KeyboardEvent<HTMLElement>) => void;\n handleTab?: (editor: Editor) => void;\n snippets?: string[];\n dragHandleTopMargin?: CSSProperties['marginTop'];\n}\n\ninterface NonSelectorBlock extends BaseBlock {\n isInBlocksSelector: false;\n}\n\ninterface SelectorBlock extends BaseBlock {\n isInBlocksSelector: true;\n icon: React.ComponentType;\n label: MessageDescriptor;\n}\n\ntype NonSelectorBlockKey = 'list-item' | 'link';\n\nconst selectorBlockKeys = [\n 'paragraph',\n 'heading-one',\n 'heading-two',\n 'heading-three',\n 'heading-four',\n 'heading-five',\n 'heading-six',\n 'list-ordered',\n 'list-unordered',\n 'image',\n 'quote',\n 'code',\n] as const;\n\ntype SelectorBlockKey = (typeof selectorBlockKeys)[number];\n\nconst isSelectorBlockKey = (key: unknown): key is SelectorBlockKey => {\n return typeof key === 'string' && selectorBlockKeys.includes(key as SelectorBlockKey);\n};\n\ntype BlocksStore = {\n [K in SelectorBlockKey]: SelectorBlock;\n} & {\n [K in NonSelectorBlockKey]: NonSelectorBlock;\n};\n\ninterface BlocksEditorContextValue {\n blocks: BlocksStore;\n modifiers: ModifiersStore;\n disabled: boolean;\n name: string;\n setLiveText: (text: string) => void;\n isExpandedMode: boolean;\n}\n\nconst [BlocksEditorProvider, usePartialBlocksEditorContext] =\n createContext<BlocksEditorContextValue>('BlocksEditor');\n\nfunction useBlocksEditorContext(\n consumerName: string\n): BlocksEditorContextValue & { editor: Editor } {\n const context = usePartialBlocksEditorContext(consumerName, (state) => state);\n const editor = useSlate();\n\n return {\n ...context,\n editor,\n };\n}\n\n/* -------------------------------------------------------------------------------------------------\n * BlocksEditor\n * -----------------------------------------------------------------------------------------------*/\n\nconst EditorDivider = styled(Divider)`\n background: ${({ theme }) => theme.colors.neutral200};\n`;\n\nconst ExpandIconButton = styled(IconButton)`\n position: absolute;\n bottom: 1.2rem;\n right: 1.2rem;\n box-shadow: ${({ theme }) => theme.shadows.filterShadow};\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 */\nfunction useResetKey(value?: Schema.Attribute.BlocksValue): {\n key: number;\n incrementSlateUpdatesCount: () => void;\n} {\n // Keep track 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: ((baseEditor: Editor) => Editor)[]) =>\n (value: Editor) =>\n fns.reduce<Editor>((prev, fn) => fn(prev), value);\n\ninterface BlocksEditorProps\n extends Pick<FieldValue<Schema.Attribute.BlocksValue>, 'onChange' | 'value' | 'error'>,\n BlocksContentProps {\n disabled?: boolean;\n name: string;\n}\n\nconst BlocksEditor = React.forwardRef<{ focus: () => void }, BlocksEditorProps>(\n ({ disabled = false, name, onChange, value, error, ...contentProps }, forwardedRef) => {\n const { formatMessage } = useIntl();\n const [editor] = React.useState(() =>\n pipe(withHistory, withImages, withStrapiSchema, withReact, withLinks)(createEditor())\n );\n const [liveText, setLiveText] = React.useState('');\n const ariaDescriptionId = React.useId();\n const [isExpandedMode, setIsExpandedMode] = React.useState(false);\n\n const handleToggleExpand = () => {\n setIsExpandedMode((prev) => !prev);\n };\n\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 forwardedRef,\n () => ({\n focus() {\n ReactEditor.focus(editor);\n },\n }),\n [editor]\n );\n\n const { key, incrementSlateUpdatesCount } = useResetKey(value);\n\n const handleSlateChange = (state: Descendant[]) => {\n const isAstChange = editor.operations.some((op) => op.type !== 'set_selection');\n\n if (isAstChange) {\n incrementSlateUpdatesCount();\n\n onChange(name, state as Schema.Attribute.BlocksValue);\n }\n };\n\n const blocks: BlocksStore = {\n ...paragraphBlocks,\n ...headingBlocks,\n ...listBlocks,\n ...linkBlocks,\n ...imageBlocks,\n ...quoteBlocks,\n ...codeBlocks,\n };\n\n return (\n <>\n <VisuallyHidden id={ariaDescriptionId}>\n {formatMessage({\n id: getTranslation('components.Blocks.dnd.instruction'),\n defaultMessage: `To reorder blocks, press Command or Control along with Shift and the Up or Down arrow keys`,\n })}\n </VisuallyHidden>\n <VisuallyHidden aria-live=\"assertive\">{liveText}</VisuallyHidden>\n <Slate\n editor={editor}\n initialValue={value || [{ type: 'paragraph', children: [{ type: 'text', text: '' }] }]}\n onChange={handleSlateChange}\n key={key}\n >\n <BlocksEditorProvider\n blocks={blocks}\n modifiers={modifiers}\n disabled={disabled}\n name={name}\n setLiveText={setLiveText}\n isExpandedMode={isExpandedMode}\n >\n <EditorLayout\n error={error}\n disabled={disabled}\n onCollapse={handleToggleExpand}\n ariaDescriptionId={ariaDescriptionId}\n >\n <BlocksToolbar />\n <EditorDivider width=\"100%\" />\n <BlocksContent {...contentProps} />\n {!isExpandedMode && (\n <ExpandIconButton\n label={formatMessage({\n id: getTranslation('components.Blocks.expand'),\n defaultMessage: 'Expand',\n })}\n onClick={handleToggleExpand}\n >\n <Expand />\n </ExpandIconButton>\n )}\n </EditorLayout>\n </BlocksEditorProvider>\n </Slate>\n </>\n );\n }\n);\n\nexport {\n type BlocksStore,\n type SelectorBlockKey,\n BlocksEditor,\n BlocksEditorProvider,\n useBlocksEditorContext,\n isSelectorBlockKey,\n};\n","import * as React from 'react';\n\nimport { useField, type InputProps } from '@strapi/admin/strapi-admin';\nimport { Field, Flex } from '@strapi/design-system';\n\nimport { BlocksEditor } from './BlocksEditor';\n\nimport type { Schema } from '@strapi/types';\n\ninterface BlocksInputProps extends Omit<InputProps, 'type'> {\n labelAction?: React.ReactNode;\n type: Schema.Attribute.Blocks['type'];\n}\n\nconst BlocksInput = React.forwardRef<{ focus: () => void }, BlocksInputProps>(\n ({ label, name, required = false, hint, labelAction, ...editorProps }, forwardedRef) => {\n const id = React.useId();\n const field = useField(name);\n\n return (\n <Field.Root id={id} name={name} hint={hint} error={field.error} required={required}>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={1}>\n <Field.Label action={labelAction}>{label}</Field.Label>\n <BlocksEditor\n name={name}\n error={field.error}\n ref={forwardedRef}\n value={field.value}\n onChange={field.onChange}\n ariaLabelId={id}\n {...editorProps}\n />\n <Field.Hint />\n <Field.Error />\n </Flex>\n </Field.Root>\n );\n }\n);\n\nconst MemoizedBlocksInput = React.memo(BlocksInput);\n\nexport { MemoizedBlocksInput as BlocksInput };\n","import * as React from 'react';\n\nimport { useField } from '@strapi/admin/strapi-admin';\nimport { Box, Flex, Typography } from '@strapi/design-system';\nimport { PlusCircle } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { getTranslation } from '../../../../../utils/translations';\n\ninterface InitializerProps {\n disabled?: boolean;\n name: string;\n onClick?: React.MouseEventHandler<HTMLButtonElement> & React.MouseEventHandler<HTMLDivElement>;\n}\n\nconst Initializer = ({ disabled, name, onClick }: InitializerProps) => {\n const { formatMessage } = useIntl();\n\n const field = useField(name);\n\n return (\n <>\n <Box\n tag=\"button\"\n background={disabled ? 'neutral150' : 'neutral100'}\n borderColor={field.error ? 'danger600' : 'neutral200'}\n hasRadius\n disabled={disabled}\n onClick={onClick}\n paddingTop={9}\n paddingBottom={9}\n type=\"button\"\n style={{ cursor: disabled ? 'not-allowed' : 'pointer' }}\n >\n <Flex direction=\"column\" gap={2}>\n <Flex justifyContent=\"center\" color={disabled ? 'neutral500' : 'primary600'}>\n <PlusCircle width=\"3.2rem\" height=\"3.2rem\" />\n </Flex>\n <Flex justifyContent=\"center\">\n <Typography\n textColor={disabled ? 'neutral600' : 'primary600'}\n variant=\"pi\"\n fontWeight=\"bold\"\n >\n {formatMessage({\n id: getTranslation('components.empty-repeatable'),\n defaultMessage: 'No entry yet. Click to add one.',\n })}\n </Typography>\n </Flex>\n </Flex>\n </Box>\n </>\n );\n};\n\nexport { Initializer };\nexport type { InitializerProps };\n","import * as React from 'react';\n\nimport { Button, Flex, Typography, TypographyComponent } from '@strapi/design-system';\nimport { PlusCircle } from '@strapi/icons';\nimport { styled } from 'styled-components';\n\ninterface AddComponentButtonProps {\n children: React.ReactNode;\n hasError?: boolean;\n isDisabled?: boolean;\n isOpen?: boolean;\n onClick: React.MouseEventHandler<HTMLButtonElement> & React.MouseEventHandler<HTMLDivElement>;\n}\n\nconst AddComponentButton = ({\n hasError,\n isDisabled,\n isOpen,\n children,\n onClick,\n}: AddComponentButtonProps) => {\n return (\n <StyledButton\n type=\"button\"\n onClick={onClick}\n disabled={isDisabled}\n background=\"neutral0\"\n style={{ cursor: isDisabled ? 'not-allowed' : 'pointer' }}\n variant=\"tertiary\"\n >\n <Flex tag=\"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' : 'neutral600'}\n >\n {children}\n </Typography>\n </Flex>\n </StyledButton>\n );\n};\n\nconst StyledAddIcon = styled(PlusCircle)<{ $isOpen?: boolean; $hasError?: boolean }>`\n height: ${({ theme }) => theme.spaces[6]};\n width: ${({ theme }) => theme.spaces[6]};\n transform: ${({ $isOpen }) => ($isOpen ? 'rotate(45deg)' : 'rotate(0deg)')};\n\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.neutral500};\n }\n`;\n\nconst StyledButton = styled(Button)`\n padding-left: ${({ theme }) => theme.spaces[3]};\n border-radius: 26px;\n box-shadow: ${({ theme }) => theme.shadows.filterShadow};\n height: 5rem;\n`;\n\nexport { AddComponentButton };\nexport type { AddComponentButtonProps };\n","import * as React from 'react';\n\nimport { Accordion, Box, Flex, FlexComponent, Typography } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { ComponentIcon } from '../../../../../components/ComponentIcon';\nimport { RESPONSIVE_CONTAINER_BREAKPOINTS } from '../../FormLayout';\n\ninterface ComponentCategoryProps {\n category: string;\n components?: Array<{\n uid: string;\n displayName: string;\n icon?: string;\n }>;\n onAddComponent: (\n componentUid: string\n ) => React.MouseEventHandler<HTMLButtonElement> & React.MouseEventHandler<HTMLDivElement>;\n variant?: Accordion.Variant;\n}\n\nconst ComponentCategory = ({\n category,\n components = [],\n variant = 'primary',\n onAddComponent,\n}: ComponentCategoryProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <Accordion.Item value={category}>\n <Accordion.Header variant={variant}>\n <Accordion.Trigger>\n {formatMessage({ id: category, defaultMessage: category })}\n </Accordion.Trigger>\n </Accordion.Header>\n <ResponsiveAccordionContent>\n <Grid paddingTop={4} paddingBottom={4} paddingLeft={3} paddingRight={3}>\n {components.map(({ uid, displayName, icon }) => (\n <ComponentBox\n key={uid}\n tag=\"button\"\n type=\"button\"\n background=\"neutral100\"\n justifyContent=\"center\"\n onClick={onAddComponent(uid)}\n hasRadius\n height=\"8.4rem\"\n shrink={0}\n borderColor=\"neutral200\"\n >\n <Flex direction=\"column\" gap={1} alignItems=\"center\" justifyContent=\"center\">\n <ComponentIcon color=\"currentColor\" background=\"primary200\" icon={icon} />\n\n <Typography variant=\"pi\" fontWeight=\"bold\">\n {displayName}\n </Typography>\n </Flex>\n </ComponentBox>\n ))}\n </Grid>\n </ResponsiveAccordionContent>\n </Accordion.Item>\n );\n};\n\nconst ResponsiveAccordionContent = styled(Accordion.Content)`\n container-type: inline-size;\n`;\n\nconst Grid = styled(Box)`\n display: grid;\n grid-template-columns: repeat(auto-fill, 100%);\n grid-gap: ${({ theme }) => theme.spaces[1]};\n\n @container (min-width: ${() => RESPONSIVE_CONTAINER_BREAKPOINTS.sm}) {\n grid-template-columns: repeat(auto-fill, 14rem);\n }\n`;\n\nconst ComponentBox = styled<FlexComponent<'button'>>(Flex)`\n color: ${({ theme }) => theme.colors.neutral600};\n cursor: pointer;\n\n @media (prefers-reduced-motion: no-preference) {\n transition: color 120ms ${(props) => props.theme.motion.easings.easeOutQuad};\n }\n\n &:focus,\n &:hover {\n border: 1px solid ${({ theme }) => theme.colors.primary200};\n background: ${({ theme }) => theme.colors.primary100};\n color: ${({ theme }) => theme.colors.primary600};\n }\n`;\n\nexport { ComponentCategory };\nexport type { ComponentCategoryProps };\n","import * as React from 'react';\n\nimport { Box, Flex, Accordion, Typography } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { getTranslation } from '../../../../../utils/translations';\n\nimport { ComponentCategory, ComponentCategoryProps } from './ComponentCategory';\n\ninterface ComponentPickerProps {\n dynamicComponentsByCategory?: Record<string, NonNullable<ComponentCategoryProps['components']>>;\n isOpen?: boolean;\n onClickAddComponent: (componentUid: string) => void;\n}\n\nconst ComponentPicker = ({\n dynamicComponentsByCategory = {},\n isOpen,\n onClickAddComponent,\n}: ComponentPickerProps) => {\n const { formatMessage } = useIntl();\n\n const handleAddComponentToDz = (componentUid: string) => () => {\n onClickAddComponent(componentUid);\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: getTranslation('components.DynamicZone.ComponentPicker-label'),\n defaultMessage: 'Pick one component',\n })}\n </Typography>\n </Flex>\n <Box paddingTop={2}>\n <Accordion.Root defaultValue={Object.keys(dynamicComponentsByCategory)[0]}>\n {Object.entries(dynamicComponentsByCategory).map(([category, components], index) => (\n <ComponentCategory\n key={category}\n category={category}\n components={components}\n onAddComponent={handleAddComponentToDz}\n variant={index % 2 === 1 ? 'primary' : 'secondary'}\n />\n ))}\n </Accordion.Root>\n </Box>\n </Box>\n );\n};\n\nexport { ComponentPicker };\nexport type { ComponentPickerProps };\n","import * as React from 'react';\n\nimport { useForm, useField } from '@strapi/admin/strapi-admin';\nimport {\n Accordion,\n Box,\n Flex,\n Grid,\n IconButton,\n useComposedRefs,\n Menu,\n MenuItem,\n BoxComponent,\n} from '@strapi/design-system';\nimport { Drag, More, Trash } from '@strapi/icons';\nimport { getEmptyImage } from 'react-dnd-html5-backend';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { COMPONENT_ICONS } from '../../../../../components/ComponentIcon';\nimport { ItemTypes } from '../../../../../constants/dragAndDrop';\nimport { useDocLayout } from '../../../../../hooks/useDocumentLayout';\nimport { type UseDragAndDropOptions, useDragAndDrop } from '../../../../../hooks/useDragAndDrop';\nimport { getIn } from '../../../../../utils/objects';\nimport { getTranslation } from '../../../../../utils/translations';\nimport { ResponsiveGridItem, ResponsiveGridRoot } from '../../FormLayout';\nimport { InputRenderer, type InputRendererProps } from '../../InputRenderer';\n\nimport type { ComponentPickerProps } from './ComponentPicker';\n\ninterface DynamicComponentProps\n extends Pick<UseDragAndDropOptions, 'onGrabItem' | 'onDropItem' | 'onCancel'>,\n Pick<ComponentPickerProps, 'dynamicComponentsByCategory'> {\n componentUid: string;\n disabled?: boolean;\n index: number;\n name: string;\n onAddComponent: (componentUid: string, index: number) => void;\n onRemoveComponentClick: () => void;\n onMoveComponent: (dragIndex: number, hoverIndex: number) => void;\n children?: (props: InputRendererProps) => React.ReactNode;\n}\n\nconst DynamicComponent = ({\n componentUid,\n disabled,\n index,\n name,\n onRemoveComponentClick,\n onMoveComponent,\n onGrabItem,\n onDropItem,\n onCancel,\n dynamicComponentsByCategory = {},\n onAddComponent,\n children,\n}: DynamicComponentProps) => {\n const { formatMessage } = useIntl();\n const formValues = useForm('DynamicComponent', (state) => state.values);\n const {\n edit: { components },\n } = useDocLayout();\n\n const title = React.useMemo(() => {\n const { mainField } = components[componentUid]?.settings ?? { mainField: 'id' };\n\n const mainFieldValue = getIn(formValues, `${name}.${index}.${mainField}`);\n\n const displayedValue =\n mainField === 'id' || !mainFieldValue ? '' : String(mainFieldValue).trim();\n\n const mainValue = displayedValue.length > 0 ? `- ${displayedValue}` : displayedValue;\n\n return mainValue;\n }, [componentUid, components, formValues, name, index]);\n\n const { icon, displayName } = React.useMemo(() => {\n const [category] = componentUid.split('.');\n const { icon, displayName } = (dynamicComponentsByCategory[category] ?? []).find(\n (component) => component.uid === componentUid\n ) ?? { icon: null, displayName: null };\n\n return { icon, displayName };\n }, [componentUid, dynamicComponentsByCategory]);\n\n const [{ handlerId, isDragging, handleKeyDown }, boxRef, dropRef, dragRef, dragPreviewRef] =\n useDragAndDrop(!disabled, {\n type: `${ItemTypes.DYNAMIC_ZONE}_${name}`,\n index,\n item: {\n index,\n displayedValue: `${displayName} ${title}`,\n icon,\n },\n onMoveItem: onMoveComponent,\n onDropItem,\n onGrabItem,\n onCancel,\n });\n\n React.useEffect(() => {\n dragPreviewRef(getEmptyImage(), { captureDraggingState: false });\n }, [dragPreviewRef, index]);\n\n /**\n * We don't need the accordion's to communicate with each other,\n * so a unique value for their state is enough.\n */\n const accordionValue = React.useId();\n\n const { value = [], rawError } = useField(`${name}.${index}`);\n\n const [collapseToOpen, setCollapseToOpen] = React.useState<string>('');\n\n React.useEffect(() => {\n if (rawError && value) {\n setCollapseToOpen(accordionValue);\n }\n }, [rawError, value, accordionValue]);\n\n const composedBoxRefs = useComposedRefs(boxRef, dropRef);\n\n const accordionActions = disabled ? null : (\n <>\n <IconButton\n variant=\"ghost\"\n label={formatMessage(\n {\n id: getTranslation('components.DynamicZone.delete-label'),\n defaultMessage: 'Delete {name}',\n },\n { name: title }\n )}\n onClick={onRemoveComponentClick}\n >\n <Trash />\n </IconButton>\n <IconButton\n variant=\"ghost\"\n onClick={(e) => e.stopPropagation()}\n data-handler-id={handlerId}\n ref={dragRef}\n label={formatMessage({\n id: getTranslation('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={0} paddingRight={0}>\n <IconButton\n variant=\"ghost\"\n label={formatMessage({\n id: getTranslation('components.DynamicZone.more-actions'),\n defaultMessage: 'More actions',\n })}\n tag=\"span\"\n >\n <More aria-hidden focusable={false} />\n </IconButton>\n </Menu.Trigger>\n <Menu.Content>\n <Menu.SubRoot>\n <Menu.SubTrigger>\n {formatMessage({\n id: getTranslation('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(({ displayName, uid }) => (\n <MenuItem key={componentUid} onSelect={() => onAddComponent(uid, index)}>\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: getTranslation('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(({ displayName, uid }) => (\n <MenuItem key={componentUid} onSelect={() => onAddComponent(uid, index + 1)}>\n {displayName}\n </MenuItem>\n ))}\n </React.Fragment>\n ))}\n </Menu.SubContent>\n </Menu.SubRoot>\n </Menu.Content>\n </Menu.Root>\n </>\n );\n\n const accordionTitle = title ? `${displayName} ${title}` : displayName;\n\n return (\n <ComponentContainer tag=\"li\" width=\"100%\">\n <Flex justifyContent=\"center\">\n <Rectangle background=\"neutral200\" />\n </Flex>\n <StyledBox ref={composedBoxRefs} hasRadius>\n {isDragging ? (\n <Preview />\n ) : (\n <Accordion.Root value={collapseToOpen} onValueChange={setCollapseToOpen}>\n <Accordion.Item value={accordionValue}>\n <Accordion.Header>\n <Accordion.Trigger\n icon={\n icon && COMPONENT_ICONS[icon]\n ? COMPONENT_ICONS[icon]\n : COMPONENT_ICONS.dashboard\n }\n >\n {accordionTitle}\n </Accordion.Trigger>\n <Accordion.Actions>{accordionActions}</Accordion.Actions>\n </Accordion.Header>\n <Accordion.Content>\n <AccordionContentRadius background=\"neutral0\">\n <Box paddingLeft={6} paddingRight={6} paddingTop={6} paddingBottom={6}>\n <Grid.Root gap={4}>\n {components[componentUid]?.layout?.map((row, rowInd) => (\n <Grid.Item\n col={12}\n key={rowInd}\n s={12}\n xs={12}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <ResponsiveGridRoot gap={4}>\n {row.map(({ size, ...field }) => {\n const fieldName = `${name}.${index}.${field.name}`;\n\n const fieldWithTranslatedLabel = {\n ...field,\n label: formatMessage({\n id: `content-manager.components.${componentUid}.${field.name}`,\n defaultMessage: field.label,\n }),\n };\n\n return (\n <ResponsiveGridItem\n col={size}\n key={fieldName}\n s={12}\n xs={12}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n {children ? (\n children({ ...fieldWithTranslatedLabel, name: fieldName })\n ) : (\n <InputRenderer {...fieldWithTranslatedLabel} name={fieldName} />\n )}\n </ResponsiveGridItem>\n );\n })}\n </ResponsiveGridRoot>\n </Grid.Item>\n ))}\n </Grid.Root>\n </Box>\n </AccordionContentRadius>\n </Accordion.Content>\n </Accordion.Item>\n </Accordion.Root>\n )}\n </StyledBox>\n </ComponentContainer>\n );\n};\n\n// TODO: Delete once https://github.com/strapi/design-system/pull/858\n// is merged and released.\nconst StyledBox = styled<BoxComponent>(Box)`\n > div:first-child {\n box-shadow: ${({ theme }) => theme.shadows.tableShadow};\n }\n`;\n\nconst AccordionContentRadius = styled<BoxComponent>(Box)`\n border-radius: 0 0 ${({ theme }) => theme.spaces[1]} ${({ theme }) => theme.spaces[1]};\n`;\n\nconst Rectangle = styled<BoxComponent>(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<BoxComponent<'li'>>(Box)`\n list-style: none;\n padding: 0;\n margin: 0;\n`;\n\nexport { DynamicComponent };\nexport type { DynamicComponentProps };\n","import * as React from 'react';\n\nimport { Box, Flex, Typography } from '@strapi/design-system';\n\ninterface DynamicZoneLabelProps {\n label?: React.ReactNode;\n labelAction?: React.ReactNode;\n name: string;\n numberOfComponents?: number;\n required?: boolean;\n hint?: React.ReactNode;\n}\n\nconst DynamicZoneLabel = ({\n hint,\n label,\n labelAction,\n name,\n numberOfComponents = 0,\n required,\n}: DynamicZoneLabelProps) => {\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=\"35.6rem\">\n <Typography variant=\"pi\" textColor=\"neutral600\" fontWeight=\"bold\" ellipsis>\n {label || name}&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 {hint && (\n <Box paddingTop={1} maxWidth=\"35.6rem\">\n <Typography variant=\"pi\" textColor=\"neutral600\" ellipsis>\n {hint}\n </Typography>\n </Box>\n )}\n </Flex>\n </Box>\n </Flex>\n );\n};\n\nexport { DynamicZoneLabel };\nexport type { DynamicZoneLabelProps };\n","import * as React from 'react';\n\nimport {\n createContext,\n InputProps,\n useField,\n useForm,\n useNotification,\n} from '@strapi/admin/strapi-admin';\nimport { Box, Flex, VisuallyHidden } from '@strapi/design-system';\nimport pipe from 'lodash/fp/pipe';\nimport { useIntl } from 'react-intl';\n\nimport { useDoc } from '../../../../../hooks/useDocument';\nimport { type EditFieldLayout } from '../../../../../hooks/useDocumentLayout';\nimport { getTranslation } from '../../../../../utils/translations';\nimport { transformDocument } from '../../../utils/data';\nimport { createDefaultForm } from '../../../utils/forms';\nimport { ComponentProvider, useComponent } from '../ComponentContext';\n\nimport { AddComponentButton } from './AddComponentButton';\nimport { ComponentPicker } from './ComponentPicker';\nimport { DynamicComponent, DynamicComponentProps } from './DynamicComponent';\nimport { DynamicZoneLabel, DynamicZoneLabelProps } from './DynamicZoneLabel';\n\nimport type { InputRendererProps } from '../../InputRenderer';\nimport type { Schema } from '@strapi/types';\n\ninterface DynamicZoneContextValue {\n isInDynamicZone: boolean;\n}\n\nconst [DynamicZoneProvider, useDynamicZone] = createContext<DynamicZoneContextValue>(\n 'DynamicZone',\n {\n isInDynamicZone: false,\n }\n);\n\ninterface DynamicZoneProps\n extends Omit<Extract<EditFieldLayout, { type: 'dynamiczone' }>, 'size' | 'hint'>,\n Pick<InputProps, 'hint'>,\n Pick<DynamicZoneLabelProps, 'labelAction'> {\n children?: (props: InputRendererProps) => React.ReactNode;\n}\n\nconst DynamicZone = ({\n attribute,\n disabled: disabledProp,\n hint,\n label,\n labelAction,\n name,\n required = false,\n children,\n}: DynamicZoneProps) => {\n // We cannot use the default props here\n const { max = Infinity, min = -Infinity } = attribute ?? {};\n\n const [addComponentIsOpen, setAddComponentIsOpen] = React.useState(false);\n const [liveText, setLiveText] = React.useState('');\n const { components, isLoading } = useDoc();\n const disabled = disabledProp || isLoading;\n const { addFieldRow, removeFieldRow, moveFieldRow } = useForm(\n 'DynamicZone',\n ({ addFieldRow, removeFieldRow, moveFieldRow }) => ({\n addFieldRow,\n removeFieldRow,\n moveFieldRow,\n })\n );\n\n type DzWithTempKey =\n Schema.Attribute.GetDynamicZoneValue<Schema.Attribute.DynamicZone>[number] & {\n __temp_key__: number;\n };\n\n const { value = [], error } = useField<Array<DzWithTempKey>>(name);\n\n const dynamicComponentsByCategory = React.useMemo(() => {\n return attribute.components.reduce<\n NonNullable<DynamicComponentProps['dynamicComponentsByCategory']>\n >((acc, componentUid) => {\n const { category, info } = components[componentUid] ?? { info: {} };\n\n const component = { uid: componentUid, displayName: info.displayName, icon: info.icon };\n\n if (!acc[category]) {\n acc[category] = [];\n }\n\n acc[category] = [...acc[category], component];\n\n return acc;\n }, {});\n }, [attribute.components, components]);\n\n const { formatMessage } = useIntl();\n\n const { toggleNotification } = useNotification();\n\n const dynamicDisplayedComponentsLength = value.length;\n\n const handleAddComponent = (uid: string, position?: number) => {\n setAddComponentIsOpen(false);\n\n const schema = components[uid];\n const form = createDefaultForm(schema, components);\n const transformations = pipe(transformDocument(schema, components), (data) => ({\n ...data,\n __component: uid,\n }));\n\n const data = transformations(form);\n\n addFieldRow(name, data, position);\n };\n\n const handleClickOpenPicker = () => {\n if (dynamicDisplayedComponentsLength < max) {\n setAddComponentIsOpen((prev) => !prev);\n } else {\n toggleNotification({\n type: 'info',\n message: formatMessage({\n id: getTranslation('components.notification.info.maximum-requirement'),\n }),\n });\n }\n };\n\n const handleMoveComponent = (newIndex: number, currentIndex: number) => {\n setLiveText(\n formatMessage(\n {\n id: getTranslation('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 moveFieldRow(name, currentIndex, newIndex);\n };\n\n const getItemPos = (index: number) => `${index + 1} of ${value.length}`;\n\n const handleCancel = (index: number) => {\n setLiveText(\n formatMessage(\n {\n id: getTranslation('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: number) => {\n setLiveText(\n formatMessage(\n {\n id: getTranslation('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: number) => {\n setLiveText(\n formatMessage(\n {\n id: getTranslation('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: string, currentIndex: number) => () => {\n removeFieldRow(name, currentIndex);\n };\n\n const hasError = error !== undefined;\n\n const renderButtonLabel = () => {\n if (addComponentIsOpen) {\n return formatMessage({ id: 'app.utils.close-label', defaultMessage: 'Close' });\n }\n\n if (hasError && dynamicDisplayedComponentsLength > max) {\n return formatMessage(\n {\n id: getTranslation(`components.DynamicZone.extra-components`),\n defaultMessage:\n 'There {number, plural, =0 {are # extra components} one {is # extra component} other {are # extra components}}',\n },\n {\n number: dynamicDisplayedComponentsLength - max,\n }\n );\n }\n\n if (hasError && dynamicDisplayedComponentsLength < min) {\n return formatMessage(\n {\n id: getTranslation(`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: min - dynamicDisplayedComponentsLength }\n );\n }\n\n return formatMessage(\n {\n id: getTranslation('components.DynamicZone.add-component'),\n defaultMessage: 'Add a component to {componentName}',\n },\n { componentName: label || name }\n );\n };\n\n const level = useComponent('DynamicZone', (state) => state.level);\n\n const ariaDescriptionId = React.useId();\n\n return (\n <DynamicZoneProvider isInDynamicZone>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n {dynamicDisplayedComponentsLength > 0 && (\n <Box>\n <DynamicZoneLabel\n hint={hint}\n label={label}\n labelAction={labelAction}\n name={name}\n numberOfComponents={dynamicDisplayedComponentsLength}\n required={required}\n />\n <VisuallyHidden id={ariaDescriptionId}>\n {formatMessage({\n id: getTranslation('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 {value.map((field, index) => (\n <ComponentProvider\n key={field.__temp_key__}\n level={level + 1}\n uid={field.__component}\n // id is always a number in a dynamic zone.\n id={field.id as number}\n type=\"dynamiczone\"\n >\n <DynamicComponent\n disabled={disabled}\n name={name}\n index={index}\n componentUid={field.__component}\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 {children}\n </DynamicComponent>\n </ComponentProvider>\n ))}\n </ol>\n </Box>\n )}\n <Flex justifyContent=\"center\">\n <AddComponentButton\n hasError={hasError}\n isDisabled={disabled}\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 </DynamicZoneProvider>\n );\n};\n\nexport { DynamicZone, useDynamicZone };\nexport type { DynamicZoneProps };\n","import { Field, TextInput } from '@strapi/design-system';\nimport { EyeStriked } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport type { InputProps } from '@strapi/admin/strapi-admin';\nimport type { Schema } from '@strapi/types';\n\ninterface NotAllowedInputProps extends Omit<InputProps, 'type'> {\n type: Schema.Attribute.Kind;\n}\n\nconst NotAllowedInput = ({ hint, label, required, name }: NotAllowedInputProps) => {\n const { formatMessage } = useIntl();\n\n const placeholder = formatMessage({\n id: 'components.NotAllowedInput.text',\n defaultMessage: 'No permissions to see this field',\n });\n\n return (\n <Field.Root id={name} hint={hint} name={name} required={required}>\n <Field.Label>{label}</Field.Label>\n <TextInput\n disabled\n placeholder={placeholder}\n startAction={<EyeStriked fill=\"neutral600\" />}\n type=\"text\"\n value=\"\"\n />\n <Field.Hint />\n </Field.Root>\n );\n};\n\nexport { NotAllowedInput };\n","/**\n * Related to the InputUID component, not the UIDs of content-types.\n */\n\nimport { GenerateUID, CheckUIDAvailability } from '../../../shared/contracts/uid';\n\nimport { contentManagerApi } from './api';\n\nconst uidApi = contentManagerApi.injectEndpoints({\n endpoints: (builder) => ({\n getDefaultUID: builder.query<\n GenerateUID.Response['data'],\n GenerateUID.Request['body'] & {\n params: GenerateUID.Request['query'];\n }\n >({\n query: ({ params, ...data }) => {\n return {\n url: '/content-manager/uid/generate',\n method: 'POST',\n data,\n config: {\n params,\n },\n };\n },\n transformResponse: (response: GenerateUID.Response) => response.data,\n }),\n generateUID: builder.mutation<\n GenerateUID.Response['data'],\n GenerateUID.Request['body'] & {\n params: GenerateUID.Request['query'];\n }\n >({\n query: ({ params, ...data }) => ({\n url: '/content-manager/uid/generate',\n method: 'POST',\n data,\n config: {\n params,\n },\n }),\n transformResponse: (response: GenerateUID.Response) => response.data,\n }),\n getAvailability: builder.query<\n CheckUIDAvailability.Response,\n CheckUIDAvailability.Request['body'] & {\n params: CheckUIDAvailability.Request['query'];\n }\n >({\n query: ({ params, ...data }) => ({\n url: '/content-manager/uid/check-availability',\n method: 'POST',\n data,\n config: {\n params,\n },\n }),\n providesTags: (_res, _error, params) => [\n { type: 'UidAvailability', id: params.contentTypeUID },\n ],\n }),\n }),\n});\n\nconst { useGenerateUIDMutation, useGetDefaultUIDQuery, useGetAvailabilityQuery } = uidApi;\n\nexport { useGenerateUIDMutation, useGetDefaultUIDQuery, useGetAvailabilityQuery };\n","import * as React from 'react';\n\nimport {\n type InputProps,\n useField,\n useForm,\n useNotification,\n useAPIErrorHandler,\n useQueryParams,\n useFocusInputField,\n} from '@strapi/admin/strapi-admin';\nimport {\n Field,\n Flex,\n FlexComponent,\n TextInput,\n Typography,\n useComposedRefs,\n} from '@strapi/design-system';\nimport { CheckCircle, WarningCircle, Loader, ArrowClockwise } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { useMatch } from 'react-router-dom';\nimport { styled, keyframes } from 'styled-components';\n\nimport { useDebounce } from '../../../../hooks/useDebounce';\nimport { useDoc } from '../../../../hooks/useDocument';\nimport { CLONE_PATH } from '../../../../router';\nimport {\n useGenerateUIDMutation,\n useGetAvailabilityQuery,\n useGetDefaultUIDQuery,\n} from '../../../../services/uid';\nimport { buildValidParams } from '../../../../utils/api';\n\nimport type { CheckUIDAvailability } from '../../../../../../shared/contracts/uid';\nimport type { Schema } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * InputUID\n * -----------------------------------------------------------------------------------------------*/\n\nconst UID_REGEX = /^[A-Za-z0-9-_.~]*$/;\n\ninterface UIDInputProps extends Omit<InputProps, 'type'> {\n type: Schema.Attribute.TypeOf<Schema.Attribute.UID>;\n}\n\nconst UIDInput = React.forwardRef<any, UIDInputProps>(\n ({ hint, label, labelAction, name, required, ...props }, ref) => {\n const { model, id } = useDoc();\n const allFormValues = useForm('InputUID', (form) => form.values);\n const [availability, setAvailability] = React.useState<CheckUIDAvailability.Response>();\n const [showRegenerate, setShowRegenerate] = React.useState(false);\n const isCloning = useMatch(CLONE_PATH) !== null;\n const field = useField(name);\n const debouncedValue = useDebounce(field.value, 300);\n const hasChanged = debouncedValue !== field.initialValue;\n const { toggleNotification } = useNotification();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n const { formatMessage } = useIntl();\n const [{ query }] = useQueryParams();\n const params = React.useMemo(() => buildValidParams(query), [query]);\n\n const {\n data: defaultGeneratedUID,\n isLoading: isGeneratingDefaultUID,\n error: apiError,\n } = useGetDefaultUIDQuery(\n {\n contentTypeUID: model,\n field: name,\n data: {\n id: id ?? '',\n ...allFormValues,\n },\n params,\n },\n {\n skip: field.value || !required,\n }\n );\n\n React.useEffect(() => {\n if (apiError) {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(apiError),\n });\n }\n }, [apiError, formatAPIError, toggleNotification]);\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 && field.value === undefined) {\n field.onChange(name, defaultGeneratedUID);\n }\n }, [defaultGeneratedUID, field, name]);\n\n const [generateUID, { isLoading: isGeneratingUID }] = useGenerateUIDMutation();\n\n const handleRegenerateClick = async () => {\n try {\n const res = await generateUID({\n contentTypeUID: model,\n field: name,\n data: { id: id ?? '', ...allFormValues },\n params,\n });\n\n if ('data' in res) {\n field.onChange(name, res.data);\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'notification.error',\n defaultMessage: 'An error occurred.',\n }),\n });\n }\n };\n\n const {\n data: availabilityData,\n isLoading: isCheckingAvailability,\n error: availabilityError,\n } = useGetAvailabilityQuery(\n {\n contentTypeUID: model,\n field: name,\n value: debouncedValue ? debouncedValue.trim() : '',\n params,\n },\n {\n // Don't check availability if the value is empty or wasn't changed\n skip: !Boolean(\n (hasChanged || isCloning) && debouncedValue && UID_REGEX.test(debouncedValue.trim())\n ),\n }\n );\n\n React.useEffect(() => {\n if (availabilityError) {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(availabilityError),\n });\n }\n }, [availabilityError, formatAPIError, toggleNotification]);\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: number;\n\n if (availabilityData?.isAvailable) {\n timer = window.setTimeout(() => {\n setAvailability(undefined);\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 const fieldRef = useFocusInputField(name);\n const composedRefs = useComposedRefs(ref, fieldRef);\n\n const shouldShowAvailability =\n (hasChanged || isCloning) && debouncedValue != null && availability && !showRegenerate;\n\n return (\n <Field.Root hint={hint} name={name} error={field.error} required={required}>\n <Field.Label action={labelAction}>{label}</Field.Label>\n <TextInput\n ref={composedRefs}\n disabled={props.disabled}\n endAction={\n <Flex position=\"relative\" gap={1}>\n {shouldShowAvailability && (\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 /> : <WarningCircle />}\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 {!props.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={handleRegenerateClick}\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 <ArrowClockwise />\n )}\n </FieldActionWrapper>\n </>\n )}\n </Flex>\n }\n onChange={field.onChange}\n value={field.value ?? ''}\n {...props}\n />\n <Field.Error />\n <Field.Hint />\n </Field.Root>\n );\n }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * FieldActionWrapper\n * -----------------------------------------------------------------------------------------------*/\n\nconst FieldActionWrapper = styled(Field.Action)`\n width: 1.6rem;\n\n svg {\n height: 1.6rem;\n width: 1.6rem;\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\n/* -------------------------------------------------------------------------------------------------\n * TextValidation\n * -----------------------------------------------------------------------------------------------*/\n\nconst TextValidation = styled<FlexComponent>(Flex)<{ $available?: boolean }>`\n svg {\n height: 1.2rem;\n width: 1.2rem;\n\n path {\n fill: ${({ theme, $available }) =>\n $available ? theme.colors.success600 : theme.colors.danger600};\n }\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * LoadingWrapper\n * -----------------------------------------------------------------------------------------------*/\n\nconst rotation = keyframes`\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(359deg);\n }\n`;\n\nconst LoadingWrapper = styled<FlexComponent>(Flex)`\n animation: ${rotation} 2s infinite linear;\n`;\n\nconst MemoizedUIDInput = React.memo(UIDInput);\n\nexport { MemoizedUIDInput as UIDInput };\nexport type { UIDInputProps };\n","import { getLanguage, highlight, highlightAuto } from 'highlight.js';\nimport Markdown from 'markdown-it';\n// @ts-expect-error - library does not export types\nimport abbr from 'markdown-it-abbr';\nimport container from 'markdown-it-container';\n// @ts-expect-error - library does not export types\nimport deflist from 'markdown-it-deflist';\nimport emoji from 'markdown-it-emoji';\nimport footnote from 'markdown-it-footnote';\n// @ts-expect-error - library does not export types\nimport ins from 'markdown-it-ins';\n// @ts-expect-error - library does not export types\nimport mark from 'markdown-it-mark';\n// @ts-expect-error - library does not export types\nimport sub from 'markdown-it-sub';\n// @ts-expect-error - library does not export types\nimport sup from 'markdown-it-sup';\n\nimport 'highlight.js/styles/solarized-dark.css';\n\nconst md: Markdown = 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 { md };\n","import * as React from 'react';\n\nimport sanitizeHtml from 'sanitize-html';\nimport { styled } from 'styled-components';\n\nimport { md } from './utils/mdRenderer';\n\ninterface PreviewWysiwygProps {\n data?: string;\n}\n\nconst PreviewWysiwyg = ({ data = '' }: PreviewWysiwygProps) => {\n const html = React.useMemo(\n () =>\n sanitizeHtml(md.render(data.replaceAll('\\\\n', '\\n') || ''), {\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 [data]\n );\n\n return (\n <Wrapper>\n <div dangerouslySetInnerHTML={{ __html: html }} />\n </Wrapper>\n );\n};\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: 1.4rem;\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: 3.6rem;\n font-weight: 600;\n }\n\n h2 {\n font-size: 3rem;\n font-weight: 500;\n }\n\n h3 {\n font-size: 2.4rem;\n font-weight: 500;\n }\n\n h4 {\n font-size: 2rem;\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: 1.4rem;\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: 1.4rem;\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 { 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: CodeMirror.Editor) {\n // @ts-expect-error - cm does not recognize disableInput.\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: CodeMirror.Editor, pos: CodeMirror.Position) {\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 { newlineAndIndentContinueMarkdownList };\n","import * as React from 'react';\n\nimport CodeMirror, { EditorFromTextArea } from 'codemirror5';\nimport { styled } from 'styled-components';\n\nimport { PreviewWysiwyg } from './PreviewWysiwyg';\nimport { newlineAndIndentContinueMarkdownList } from './utils/continueList';\n\nimport type { FieldValue, InputProps } from '@strapi/admin/strapi-admin';\n\nimport 'codemirror5/addon/display/placeholder';\n\ninterface EditorApi {\n focus: () => void;\n scrollIntoView: (args?: Parameters<HTMLElement['scrollIntoView']>[0]) => void;\n}\n\ninterface EditorProps extends Omit<FieldValue, 'initialValue'>, Omit<InputProps, 'type' | 'label'> {\n editorRef: React.MutableRefObject<EditorFromTextArea>;\n isPreviewMode?: boolean;\n isExpandMode?: boolean;\n textareaRef: React.RefObject<HTMLTextAreaElement>;\n}\n\nconst Editor = React.forwardRef<EditorApi, EditorProps>(\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 = React.useRef(onChange);\n\n React.useEffect(() => {\n if (editorRef.current) {\n // Ensure the editor and its wrapper are cleaned up whenever this view is re-rendered\n // e.g. in case of re-ordering wysiwyg components in a DynamicZone\n editorRef.current.toTextArea();\n }\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 // @ts-expect-error – doesn't think command exists?\n CodeMirror.commands.newlineAndIndentContinueMarkdownList =\n newlineAndIndentContinueMarkdownList;\n editorRef.current.on('change', (doc) => {\n onChangeRef.current(name, doc.getValue());\n });\n }, [editorRef, textareaRef, name, placeholder]);\n\n React.useEffect(() => {\n if (value && !editorRef.current.hasFocus()) {\n editorRef.current.setValue(value);\n }\n }, [editorRef, value]);\n\n React.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 React.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 React.useImperativeHandle(\n forwardedRef,\n () => ({\n focus() {\n editorRef.current.getInputField().focus();\n },\n scrollIntoView(args?: Parameters<HTMLElement['scrollIntoView']>[0]) {\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\nconst EditorAndPreviewWrapper = styled.div`\n position: relative;\n height: calc(100% - 48px);\n`;\n\nconst EditorStylesContainer = styled.div<{ $disabled?: boolean; $isExpandMode?: boolean }>`\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: 1.4rem;\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 { Editor };\nexport type { EditorProps, EditorApi };\n","import * as React from 'react';\n\nimport {\n Button,\n Box,\n BoxComponent,\n Flex,\n FlexComponent,\n FocusTrap,\n Portal,\n Typography,\n} from '@strapi/design-system';\nimport { Collapse } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { PreviewWysiwyg } from './PreviewWysiwyg';\n\ninterface EditorLayoutProps {\n children: React.ReactNode;\n isExpandMode: boolean;\n error?: string;\n previewContent?: string;\n onCollapse: () => void;\n}\n\nconst EditorLayout = ({\n children,\n isExpandMode,\n error,\n previewContent = '',\n onCollapse,\n}: EditorLayoutProps) => {\n const { formatMessage } = useIntl();\n\n React.useEffect(() => {\n if (isExpandMode) {\n document.body.classList.add('lock-body-scroll');\n }\n\n return () => {\n document.body.classList.remove('lock-body-scroll');\n };\n }, [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<'div'>\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=\"4.8rem\"\n background=\"neutral100\"\n justifyContent=\"flex-end\"\n shrink={0}\n width=\"100%\"\n >\n <ExpandButton onClick={onCollapse} variant=\"tertiary\" size=\"M\">\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 <Flex\n borderColor={error ? 'danger600' : 'neutral200'}\n borderStyle=\"solid\"\n borderWidth=\"1px\"\n hasRadius\n direction=\"column\"\n alignItems=\"stretch\"\n >\n {children}\n </Flex>\n );\n};\n\nconst ExpandWrapper = styled<FlexComponent>(Flex)`\n background: ${({ theme }) =>\n `${theme.colors.neutral800}${Math.floor(0.2 * 255)\n .toString(16)\n .padStart(2, '0')}`};\n`;\n\nconst BoxWithBorder = styled<BoxComponent>(Box)`\n border-right: 1px solid ${({ theme }) => theme.colors.neutral200};\n`;\n\nconst ExpandButton = styled(Button)`\n background-color: transparent;\n border: none;\n align-items: center;\n\n & > span {\n display: flex;\n justify-content: space-between;\n align-items: center;\n width: 100%;\n font-weight: ${({ theme }) => theme.fontWeights.regular};\n }\n\n svg {\n margin-left: ${({ theme }) => `${theme.spaces[2]}`};\n\n path {\n fill: ${({ theme }) => theme.colors.neutral700};\n width: 1.2rem;\n height: 1.2rem;\n }\n }\n`;\n\nexport { EditorLayout, ExpandButton };\nexport type { EditorLayoutProps };\n","import { MutableRefObject } from 'react';\n\nimport CodeMirror from 'codemirror5';\n\nexport const replaceText = (markdownName: string, textToChange: string) => {\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: string) => {\n let editedText;\n // object to calculate text that will be selected after insert of markdown\n const 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: string) => {\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 = (\n editor: MutableRefObject<CodeMirror.EditorFromTextArea>,\n markdownType: string\n) => {\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 = (\n editor: MutableRefObject<CodeMirror.EditorFromTextArea>,\n listType: string\n) => {\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: boolean | null = 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 const { 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 = (\n editor: MutableRefObject<CodeMirror.EditorFromTextArea>,\n titleType: string\n) => {\n const { 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 = (\n editor: MutableRefObject<CodeMirror.EditorFromTextArea>,\n files: any[]\n) => {\n let { line } = editor.current.getCursor();\n const { 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 = (\n editor: MutableRefObject<CodeMirror.EditorFromTextArea>,\n markdownType: string,\n line: number,\n contentLength: number,\n textToEdit: string\n) => {\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 const { 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 = (\n editor: MutableRefObject<CodeMirror.EditorFromTextArea>,\n markdownType: string,\n line: number,\n contentLength: number\n) => {\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 const { 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 // 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 = (\n editor: MutableRefObject<CodeMirror.EditorFromTextArea>,\n markdownType: string\n) => {\n const textToEdit = editor.current.getSelection();\n const { line } = editor.current.getCursor();\n const 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 { Button, IconButton, IconButtonComponent, IconButtonGroup } from '@strapi/design-system';\nimport { styled } from 'styled-components';\n\n// NAV BUTTONS\nexport const MainButtons = styled(IconButtonGroup)`\n margin-left: ${({ theme }) => theme.spaces[4]};\n`;\n\nexport const MoreButton = styled<IconButtonComponent>(IconButton)`\n margin: ${({ theme }) => `0 ${theme.spaces[2]}`};\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(Button)`\n background-color: transparent;\n border: none;\n align-items: center;\n\n & > span {\n display: flex;\n justify-content: space-between;\n align-items: center;\n width: 100%;\n font-weight: ${({ theme }) => theme.fontWeights.regular};\n }\n\n svg {\n margin-left: ${({ theme }) => `${theme.spaces[2]}`};\n path {\n fill: ${({ theme }) => theme.colors.neutral700};\n width: 1.2rem;\n height: 1.2rem;\n }\n }\n`;\n","import { ButtonProps, Box, Flex, Typography } from '@strapi/design-system';\nimport { Expand } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { ExpandButton } from './WysiwygStyles';\n\ninterface WysiwygFooterProps {\n onToggleExpand: ButtonProps['onClick'];\n}\n\nconst WysiwygFooter = ({ onToggleExpand }: WysiwygFooterProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <Box padding={2} background=\"neutral100\" borderRadius={`0 0 0.4rem 0.4rem`}>\n <Flex justifyContent=\"flex-end\" alignItems=\"flex-end\">\n <ExpandButton id=\"expand\" onClick={onToggleExpand} variant=\"tertiary\" size=\"M\">\n <Typography textColor=\"neutral800\">\n {formatMessage({\n id: 'components.WysiwygBottomControls.fullscreen',\n defaultMessage: 'Expand',\n })}\n </Typography>\n <Expand />\n </ExpandButton>\n </Flex>\n </Box>\n );\n};\n\nexport { WysiwygFooter };\nexport type { WysiwygFooterProps };\n","import * as React from 'react';\n\nimport {\n Button,\n Flex,\n IconButton,\n IconButtonGroup,\n SingleSelectOption,\n Popover,\n SingleSelect,\n Field,\n} from '@strapi/design-system';\nimport {\n Bold,\n BulletList,\n Code,\n Italic,\n Link,\n More,\n NumberList,\n Image,\n Quotes,\n StrikeThrough,\n Underline,\n} from '@strapi/icons';\nimport { EditorFromTextArea } from 'codemirror5';\nimport { useIntl } from 'react-intl';\n\nimport { IconButtonGroupMargin, MainButtons, MoreButton } from './WysiwygStyles';\n\ninterface WysiwygNavProps {\n disabled?: boolean;\n editorRef: React.MutableRefObject<EditorFromTextArea>;\n isExpandMode?: boolean;\n isPreviewMode?: boolean;\n onActionClick: (\n action: string,\n editorRef: React.MutableRefObject<EditorFromTextArea>,\n callback?: () => void\n ) => void;\n onToggleMediaLib: () => void;\n onTogglePreviewMode?: () => void;\n}\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}: WysiwygNavProps) => {\n const [visiblePopover, setVisiblePopover] = React.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 = React.useRef<HTMLButtonElement>(null!);\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={`0.4rem 0.4rem 0 0`}\n >\n <Flex>\n <Field.Root>\n <SingleSelect\n disabled\n placeholder={selectPlaceholder}\n aria-label={selectPlaceholder}\n size=\"S\"\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 </Field.Root>\n\n <MainButtons>\n <IconButton disabled label=\"Bold\" name=\"Bold\">\n <Bold />\n </IconButton>\n <IconButton disabled label=\"Italic\" name=\"Italic\">\n <Italic />\n </IconButton>\n <IconButton disabled label=\"Underline\" name=\"Underline\">\n <Underline />\n </IconButton>\n </MainButtons>\n\n <MoreButton disabled label=\"More\">\n <More />\n </MoreButton>\n </Flex>\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={`0.4rem 0.4rem 0 0`}\n >\n <Flex>\n <Field.Root>\n <SingleSelect\n placeholder={selectPlaceholder}\n aria-label={selectPlaceholder}\n // @ts-expect-error – DS v2 will only allow strings.\n onChange={(value) => onActionClick(value, editorRef)}\n size=\"S\"\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 </Field.Root>\n\n <MainButtons>\n <IconButton onClick={() => onActionClick('Bold', editorRef)} label=\"Bold\" name=\"Bold\">\n <Bold />\n </IconButton>\n <IconButton\n onClick={() => onActionClick('Italic', editorRef)}\n label=\"Italic\"\n name=\"Italic\"\n >\n <Italic />\n </IconButton>\n <IconButton\n onClick={() => onActionClick('Underline', editorRef)}\n label=\"Underline\"\n name=\"Underline\"\n >\n <Underline />\n </IconButton>\n </MainButtons>\n <Popover.Root>\n <Popover.Trigger>\n <MoreButton label=\"More\">\n <More />\n </MoreButton>\n </Popover.Trigger>\n <Popover.Content sideOffset={12}>\n <Flex padding={2}>\n <IconButtonGroupMargin>\n <IconButton\n onClick={() => onActionClick('Strikethrough', editorRef, handleTogglePopover)}\n label=\"Strikethrough\"\n name=\"Strikethrough\"\n >\n <StrikeThrough />\n </IconButton>\n <IconButton\n onClick={() => onActionClick('BulletList', editorRef, handleTogglePopover)}\n label=\"BulletList\"\n name=\"BulletList\"\n >\n <BulletList />\n </IconButton>\n <IconButton\n onClick={() => onActionClick('NumberList', editorRef, handleTogglePopover)}\n label=\"NumberList\"\n name=\"NumberList\"\n >\n <NumberList />\n </IconButton>\n </IconButtonGroupMargin>\n <IconButtonGroup>\n <IconButton\n onClick={() => onActionClick('Code', editorRef, handleTogglePopover)}\n label=\"Code\"\n name=\"Code\"\n >\n <Code />\n </IconButton>\n <IconButton\n onClick={() => {\n handleTogglePopover();\n onToggleMediaLib();\n }}\n label=\"Image\"\n name=\"Image\"\n >\n <Image />\n </IconButton>\n <IconButton\n onClick={() => onActionClick('Link', editorRef, handleTogglePopover)}\n label=\"Link\"\n name=\"Link\"\n >\n <Link />\n </IconButton>\n <IconButton\n onClick={() => onActionClick('Quote', editorRef, handleTogglePopover)}\n label=\"Quote\"\n name=\"Quote\"\n >\n <Quotes />\n </IconButton>\n </IconButtonGroup>\n </Flex>\n </Popover.Content>\n </Popover.Root>\n </Flex>\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\nexport { WysiwygNav };\nexport type { WysiwygNavProps };\n","import * as React from 'react';\n\nimport { useField, useStrapiApp, type InputProps } from '@strapi/admin/strapi-admin';\nimport { Field, Flex } from '@strapi/design-system';\nimport { EditorFromTextArea } from 'codemirror5';\n\nimport { prefixFileUrlWithBackendUrl } from '../../../../../utils/urls';\n\nimport { Editor, EditorApi } 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\nimport type { Schema } from '@strapi/types';\n\ninterface WysiwygProps extends Omit<InputProps, 'type'> {\n labelAction?: React.ReactNode;\n type: Schema.Attribute.RichText['type'];\n}\n\nconst Wysiwyg = React.forwardRef<EditorApi, WysiwygProps>(\n ({ hint, disabled, label, name, placeholder, required, labelAction }, forwardedRef) => {\n const field = useField(name);\n const textareaRef = React.useRef<HTMLTextAreaElement>(null);\n const editorRef = React.useRef<EditorFromTextArea>(\n null\n ) as React.MutableRefObject<EditorFromTextArea>;\n const [isPreviewMode, setIsPreviewMode] = React.useState(false);\n const [mediaLibVisible, setMediaLibVisible] = React.useState(false);\n const [isExpandMode, setIsExpandMode] = React.useState(false);\n const components = useStrapiApp('ImageDialog', (state) => state.components);\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 = (\n value: string,\n currentEditorRef: React.MutableRefObject<EditorFromTextArea>,\n togglePopover?: () => void\n ) => {\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: any[]) => {\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 return (\n <Field.Root name={name} hint={hint} error={field.error} required={required}>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={1}>\n <Field.Label action={labelAction}>{label}</Field.Label>\n <EditorLayout\n isExpandMode={isExpandMode}\n error={field.error}\n previewContent={field.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={field.error}\n isPreviewMode={isPreviewMode}\n name={name}\n onChange={field.onChange}\n placeholder={placeholder}\n textareaRef={textareaRef}\n value={field.value}\n ref={forwardedRef}\n />\n\n {!isExpandMode && <WysiwygFooter onToggleExpand={handleToggleExpand} />}\n </EditorLayout>\n <Field.Hint />\n <Field.Error />\n </Flex>\n {mediaLibVisible && (\n // @ts-expect-error – TODO: fix this way of injecting because it's not really typeable without a registry.\n <MediaLibraryDialog onClose={handleToggleMediaLib} onSelectAssets={handleSelectAssets} />\n )}\n </Field.Root>\n );\n }\n);\n\nconst MemoizedWysiwyg = React.memo(Wysiwyg);\n\nexport { MemoizedWysiwyg as Wysiwyg };\nexport type { WysiwygProps };\n","import { ReactNode, memo } from 'react';\n\nimport {\n useStrapiApp,\n useForm,\n InputRenderer as FormInputRenderer,\n useField,\n} from '@strapi/admin/strapi-admin';\nimport { useIntl } from 'react-intl';\n\nimport { SINGLE_TYPES } from '../../../constants/collections';\nimport { useDocumentRBAC } from '../../../features/DocumentRBAC';\nimport { useDoc } from '../../../hooks/useDocument';\nimport { useDocLayout } from '../../../hooks/useDocumentLayout';\nimport { useLazyComponents } from '../../../hooks/useLazyComponents';\n\nimport { BlocksInput } from './FormInputs/BlocksInput/BlocksInput';\nimport { ComponentInput } from './FormInputs/Component/Input';\nimport { DynamicZone, useDynamicZone } from './FormInputs/DynamicZone/Field';\nimport { NotAllowedInput } from './FormInputs/NotAllowed';\nimport { RelationsInput } from './FormInputs/Relations';\nimport { UIDInput } from './FormInputs/UID';\nimport { Wysiwyg } from './FormInputs/Wysiwyg/Field';\n\nimport type { EditFieldLayout } from '../../../hooks/useDocumentLayout';\nimport type { Schema } from '@strapi/types';\nimport type { DistributiveOmit } from 'react-redux';\n\ntype InputRendererProps = DistributiveOmit<EditFieldLayout, 'size'>;\n/**\n * @internal\n *\n * @description An abstraction around the regular form input renderer designed\n * specifically to be used in the EditView of the content-manager this understands\n * the complete EditFieldLayout and will handle RBAC conditions and rendering CM specific\n * components such as Blocks / Relations.\n */\nconst InputRenderer = ({ visible, hint: providedHint, ...props }: InputRendererProps) => {\n const { id, document, collectionType } = useDoc();\n const isFormDisabled = useForm('InputRenderer', (state) => state.disabled);\n\n const isInDynamicZone = useDynamicZone('isInDynamicZone', (state) => state.isInDynamicZone);\n\n const canCreateFields = useDocumentRBAC('InputRenderer', (rbac) => rbac.canCreateFields);\n const canReadFields = useDocumentRBAC('InputRenderer', (rbac) => rbac.canReadFields);\n const canUpdateFields = useDocumentRBAC('InputRenderer', (rbac) => rbac.canUpdateFields);\n const canUserAction = useDocumentRBAC('InputRenderer', (rbac) => rbac.canUserAction);\n\n let idToCheck = id;\n if (collectionType === SINGLE_TYPES) {\n idToCheck = document?.documentId;\n }\n\n const editableFields = idToCheck ? canUpdateFields : canCreateFields;\n const readableFields = idToCheck ? canReadFields : canCreateFields;\n\n /**\n * Component fields are always readable and editable,\n * however the fields within them may not be.\n */\n const canUserReadField = canUserAction(props.name, readableFields, props.type);\n const canUserEditField = canUserAction(props.name, editableFields, props.type);\n\n const fields = useStrapiApp('InputRenderer', (app) => app.fields);\n const { lazyComponentStore } = useLazyComponents(\n attributeHasCustomFieldProperty(props.attribute) ? [props.attribute.customField] : undefined\n );\n\n const hint = useFieldHint(providedHint, props.attribute);\n const {\n edit: { components },\n } = useDocLayout();\n\n // We pass field in case of Custom Fields to keep backward compatibility\n const field = useField(props.name);\n\n if (!visible) {\n return null;\n }\n\n /**\n * If the user can't read the field then we don't want to ever render it.\n */\n if (!canUserReadField && !isInDynamicZone) {\n return <NotAllowedInput hint={hint} {...props} />;\n }\n\n const fieldIsDisabled =\n (!canUserEditField && !isInDynamicZone) || props.disabled || isFormDisabled;\n\n /**\n * Because a custom field has a unique prop but the type could be confused with either\n * the useField hook or the type of the field we need to handle it separately and first.\n */\n if (attributeHasCustomFieldProperty(props.attribute)) {\n const CustomInput = lazyComponentStore[props.attribute.customField];\n\n if (CustomInput) {\n // @ts-expect-error – TODO: fix this type error in the useLazyComponents hook.\n return <CustomInput {...props} {...field} hint={hint} disabled={fieldIsDisabled} />;\n }\n\n return (\n <FormInputRenderer\n {...props}\n hint={hint}\n // @ts-expect-error – this workaround lets us display that the custom field is missing.\n type={props.attribute.customField}\n disabled={fieldIsDisabled}\n />\n );\n }\n\n /**\n * This is where we handle ONLY the fields from the `useLibrary` hook.\n */\n const addedInputTypes = Object.keys(fields);\n if (!attributeHasCustomFieldProperty(props.attribute) && addedInputTypes.includes(props.type)) {\n const CustomInput = fields[props.type];\n // @ts-expect-error – TODO: fix this type error in the useLibrary hook.\n return <CustomInput {...props} hint={hint} disabled={fieldIsDisabled} />;\n }\n\n /**\n * These include the content-manager specific fields, failing that we fall back\n * to the more generic form input renderer.\n */\n switch (props.type) {\n case 'blocks':\n return <BlocksInput {...props} hint={hint} type={props.type} disabled={fieldIsDisabled} />;\n case 'component':\n return (\n <ComponentInput\n {...props}\n hint={hint}\n layout={components[props.attribute.component].layout}\n disabled={fieldIsDisabled}\n >\n {(inputProps) => <InputRenderer {...inputProps} />}\n </ComponentInput>\n );\n case 'dynamiczone':\n return <DynamicZone {...props} hint={hint} disabled={fieldIsDisabled} />;\n case 'relation':\n return <RelationsInput {...props} hint={hint} disabled={fieldIsDisabled} />;\n case 'richtext':\n return <Wysiwyg {...props} hint={hint} type={props.type} disabled={fieldIsDisabled} />;\n case 'uid':\n return <UIDInput {...props} hint={hint} type={props.type} disabled={fieldIsDisabled} />;\n /**\n * Enumerations are a special case because they require options.\n */\n case 'enumeration':\n return (\n <FormInputRenderer\n {...props}\n hint={hint}\n options={props.attribute.enum.map((value) => ({ value }))}\n // @ts-expect-error – Temp workaround so we don't forget custom-fields don't work!\n type={props.customField ? 'custom-field' : props.type}\n disabled={fieldIsDisabled}\n />\n );\n default:\n // These props are not needed for the generic form input renderer.\n const { unique: _unique, mainField: _mainField, ...restProps } = props;\n return (\n <FormInputRenderer\n {...restProps}\n hint={hint}\n // @ts-expect-error – Temp workaround so we don't forget custom-fields don't work!\n type={props.customField ? 'custom-field' : props.type}\n disabled={fieldIsDisabled}\n />\n );\n }\n};\n\nconst attributeHasCustomFieldProperty = (\n attribute: Schema.Attribute.AnyAttribute\n): attribute is Schema.Attribute.AnyAttribute & Schema.Attribute.CustomField<string> =>\n 'customField' in attribute && typeof attribute.customField === 'string';\n\nconst useFieldHint = (hint: ReactNode = undefined, attribute: Schema.Attribute.AnyAttribute) => {\n const { formatMessage } = useIntl();\n\n const { maximum, minimum } = getMinMax(attribute);\n\n if (!maximum && !minimum) {\n return hint;\n }\n\n const units = !['biginteger', 'integer', 'number', 'dynamiczone', 'component'].includes(\n attribute.type\n )\n ? formatMessage(\n {\n id: 'content-manager.form.Input.hint.character.unit',\n defaultMessage: '{maxValue, plural, one { character} other { characters}}',\n },\n {\n maxValue: Math.max(minimum || 0, maximum || 0),\n }\n )\n : null;\n\n const hasMinAndMax = typeof minimum === 'number' && typeof maximum === 'number';\n\n return formatMessage(\n {\n id: 'content-manager.form.Input.hint.text',\n defaultMessage:\n '{min, select, undefined {} other {min. {min}}}{divider}{max, select, undefined {} other {max. {max}}}{unit}{br}{description}',\n },\n {\n min: minimum,\n max: maximum,\n description: hint,\n unit: units,\n divider: hasMinAndMax\n ? formatMessage({\n id: 'content-manager.form.Input.hint.minMaxDivider',\n defaultMessage: ' / ',\n })\n : null,\n br: <br />,\n }\n );\n};\n\nconst getMinMax = (attribute: Schema.Attribute.AnyAttribute) => {\n if ('min' in attribute || 'max' in attribute) {\n return {\n maximum: !Number.isNaN(Number(attribute.max)) ? Number(attribute.max) : undefined,\n minimum: !Number.isNaN(Number(attribute.min)) ? Number(attribute.min) : undefined,\n };\n } else if ('maxLength' in attribute || 'minLength' in attribute) {\n return { maximum: attribute.maxLength, minimum: attribute.minLength };\n } else {\n return { maximum: undefined, minimum: undefined };\n }\n};\n\nconst MemoizedInputRenderer = memo(InputRenderer);\n\nexport type { InputRendererProps };\nexport { MemoizedInputRenderer as InputRenderer, useFieldHint };\n","import { Box, Flex, Grid } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { useDoc } from '../../../hooks/useDocument';\nimport { EditLayout } from '../../../hooks/useDocumentLayout';\n\nimport { InputRenderer } from './InputRenderer';\n\nexport const RESPONSIVE_CONTAINER_BREAKPOINTS = {\n sm: '27.5rem', // 440px\n};\n\nexport const ResponsiveGridRoot = styled(Grid.Root)`\n container-type: inline-size;\n`;\n\nexport const ResponsiveGridItem = styled(Grid.Item)`\n grid-column: span 12;\n\n @container (min-width: ${RESPONSIVE_CONTAINER_BREAKPOINTS.sm}) {\n ${({ col }) => col && `grid-column: span ${col};`}\n }\n`;\n\ninterface FormLayoutProps extends Pick<EditLayout, 'layout'> {}\n\nconst FormLayout = ({ layout }: FormLayoutProps) => {\n const { formatMessage } = useIntl();\n const { model } = useDoc();\n\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n {layout.map((panel, index) => {\n if (panel.some((row) => row.some((field) => field.type === 'dynamiczone'))) {\n const [row] = panel;\n const [field] = row;\n\n const fieldWithTranslatedLabel = {\n ...field,\n label: formatMessage({\n id: `content-manager.content-types.${model}.${field.name}`,\n defaultMessage: field.label,\n }),\n };\n\n return (\n <Grid.Root key={field.name} gap={4}>\n <Grid.Item col={12} s={12} xs={12} direction=\"column\" alignItems=\"stretch\">\n <InputRenderer {...fieldWithTranslatedLabel} />\n </Grid.Item>\n </Grid.Root>\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 {panel.map((row, gridRowIndex) => (\n <ResponsiveGridRoot key={gridRowIndex} gap={4}>\n {row.map(({ size, ...field }) => {\n const fieldWithTranslatedLabel = {\n ...field,\n label: formatMessage({\n id: `content-manager.content-types.${model}.${field.name}`,\n defaultMessage: field.label,\n }),\n };\n return (\n <ResponsiveGridItem\n col={size}\n key={field.name}\n s={12}\n xs={12}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <InputRenderer {...fieldWithTranslatedLabel} />\n </ResponsiveGridItem>\n );\n })}\n </ResponsiveGridRoot>\n ))}\n </Flex>\n </Box>\n );\n })}\n </Flex>\n );\n};\n\nexport { FormLayout, FormLayoutProps };\n","import { useField } from '@strapi/admin/strapi-admin';\nimport { Box, Flex } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { ResponsiveGridItem, ResponsiveGridRoot } from '../../FormLayout';\nimport { ComponentProvider, useComponent } from '../ComponentContext';\n\nimport type { ComponentInputProps } from './Input';\n\ntype NonRepeatableComponentProps = Omit<ComponentInputProps, 'required' | 'label'>;\n\nconst NonRepeatableComponent = ({\n attribute,\n name,\n children,\n layout,\n}: NonRepeatableComponentProps) => {\n const { formatMessage } = useIntl();\n const { value } = useField(name);\n const level = useComponent('NonRepeatableComponent', (state) => state.level);\n const isNested = level > 0;\n\n return (\n <ComponentProvider id={value?.id} uid={attribute.component} level={level + 1} type=\"component\">\n <Box\n background={'neutral100'}\n paddingLeft={6}\n paddingRight={6}\n paddingTop={6}\n paddingBottom={6}\n hasRadius={isNested}\n borderColor={isNested ? 'neutral200' : undefined}\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n {layout.map((row, index) => {\n return (\n <ResponsiveGridRoot gap={4} key={index}>\n {row.map(({ size, ...field }) => {\n /**\n * Layouts are built from schemas so they don't understand the complete\n * schema tree, for components we append the parent name to the field name\n * because this is the structure for the data & permissions also understand\n * the nesting involved.\n */\n const completeFieldName = `${name}.${field.name}`;\n\n const translatedLabel = formatMessage({\n id: `content-manager.components.${attribute.component}.${field.name}`,\n defaultMessage: field.label,\n });\n\n return (\n <ResponsiveGridItem\n col={size}\n key={completeFieldName}\n s={12}\n xs={12}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n {children({ ...field, label: translatedLabel, name: completeFieldName })}\n </ResponsiveGridItem>\n );\n })}\n </ResponsiveGridRoot>\n );\n })}\n </Flex>\n </Box>\n </ComponentProvider>\n );\n};\n\nexport { NonRepeatableComponent };\nexport type { NonRepeatableComponentProps };\n","import * as React from 'react';\n\nimport { useField, useNotification, useForm } from '@strapi/admin/strapi-admin';\nimport {\n Box,\n Flex,\n TextButton,\n VisuallyHidden,\n Accordion,\n IconButton,\n useComposedRefs,\n BoxComponent,\n} from '@strapi/design-system';\nimport { Plus, Drag, Trash } from '@strapi/icons';\nimport { getEmptyImage } from 'react-dnd-html5-backend';\nimport { useIntl } from 'react-intl';\nimport { useLocation } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { ItemTypes } from '../../../../../constants/dragAndDrop';\nimport { useDoc } from '../../../../../hooks/useDocument';\nimport { useDragAndDrop, type UseDragAndDropOptions } from '../../../../../hooks/useDragAndDrop';\nimport { usePrev } from '../../../../../hooks/usePrev';\nimport { getIn } from '../../../../../utils/objects';\nimport { getTranslation } from '../../../../../utils/translations';\nimport { transformDocument } from '../../../utils/data';\nimport { createDefaultForm } from '../../../utils/forms';\nimport { ResponsiveGridItem, ResponsiveGridRoot } from '../../FormLayout';\nimport { ComponentProvider, useComponent } from '../ComponentContext';\n\nimport { Initializer } from './Initializer';\n\nimport type { ComponentInputProps } from './Input';\nimport type { Schema } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * RepeatableComponent\n * -----------------------------------------------------------------------------------------------*/\n\ntype RepeatableComponentProps = Omit<ComponentInputProps, 'required' | 'label'>;\n\nconst RepeatableComponent = ({\n attribute,\n disabled,\n name,\n mainField,\n children,\n layout,\n}: RepeatableComponentProps) => {\n const { toggleNotification } = useNotification();\n const { formatMessage } = useIntl();\n const { search: searchString } = useLocation();\n const search = React.useMemo(() => new URLSearchParams(searchString), [searchString]);\n const { components } = useDoc();\n\n const {\n value = [],\n error,\n rawError,\n } = useField<Schema.Attribute.ComponentValue<`${string}.${string}`, true>>(name);\n const addFieldRow = useForm('RepeatableComponent', (state) => state.addFieldRow);\n const moveFieldRow = useForm('RepeatableComponent', (state) => state.moveFieldRow);\n const removeFieldRow = useForm('RepeatableComponent', (state) => state.removeFieldRow);\n const { max = Infinity } = attribute;\n\n const [collapseToOpen, setCollapseToOpen] = React.useState<string>('');\n const [liveText, setLiveText] = React.useState('');\n\n React.useEffect(() => {\n const hasNestedErrors = rawError && Array.isArray(rawError) && rawError.length > 0;\n const hasNestedValue = value && Array.isArray(value) && value.length > 0;\n\n if (hasNestedErrors && hasNestedValue) {\n const errorOpenItems = rawError\n .map((_: unknown, idx: number) => {\n return value[idx] ? value[idx].__temp_key__ : null;\n })\n .filter((value) => !!value);\n\n if (errorOpenItems && errorOpenItems.length > 0) {\n setCollapseToOpen((collapseToOpen) => {\n if (!errorOpenItems.includes(collapseToOpen)) {\n return errorOpenItems[0];\n }\n\n return collapseToOpen;\n });\n }\n }\n }, [rawError, value]);\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 its \"open\" state.\n */\n const componentTmpKeyWithFocussedField = React.useMemo(() => {\n if (search.has('field')) {\n const fieldParam = search.get('field');\n\n if (!fieldParam) {\n return undefined;\n }\n\n const [, path] = fieldParam.split(`${name}.`);\n\n if (getIn(value, path, undefined) !== undefined) {\n const [subpath] = path.split('.');\n\n return getIn(value, subpath, undefined)?.__temp_key__;\n }\n }\n\n return undefined;\n }, [search, name, value]);\n\n const prevValue = usePrev(value);\n\n React.useEffect(() => {\n /**\n * When we add a new item to the array, we want to open the collapse.\n */\n if (prevValue && prevValue.length < value.length) {\n setCollapseToOpen(value[value.length - 1].__temp_key__);\n }\n }, [value, prevValue]);\n\n React.useEffect(() => {\n if (typeof componentTmpKeyWithFocussedField === 'string') {\n setCollapseToOpen(componentTmpKeyWithFocussedField);\n }\n }, [componentTmpKeyWithFocussedField]);\n\n const toggleCollapses = () => {\n setCollapseToOpen('');\n };\n\n const handleClick = () => {\n if (value.length < max) {\n const schema = components[attribute.component];\n const form = createDefaultForm(schema, components);\n const data = transformDocument(schema, components)(form);\n\n addFieldRow(name, data);\n // setCollapseToOpen(nextTempKey);\n } else if (value.length >= max) {\n toggleNotification({\n type: 'info',\n message: formatMessage({\n id: getTranslation('components.notification.info.maximum-requirement'),\n }),\n });\n }\n };\n\n const handleMoveComponentField: ComponentProps['onMoveItem'] = (newIndex, currentIndex) => {\n setLiveText(\n formatMessage(\n {\n id: getTranslation('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 moveFieldRow(name, currentIndex, newIndex);\n };\n\n const handleValueChange = (key: string) => {\n setCollapseToOpen(key);\n };\n\n const getItemPos = (index: number) => `${index + 1} of ${value.length}`;\n\n const handleCancel = (index: number) => {\n setLiveText(\n formatMessage(\n {\n id: getTranslation('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: number) => {\n setLiveText(\n formatMessage(\n {\n id: getTranslation('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: number) => {\n setLiveText(\n formatMessage(\n {\n id: getTranslation('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 ariaDescriptionId = React.useId();\n\n const level = useComponent('RepeatableComponent', (state) => state.level);\n\n if (value.length === 0) {\n return <Initializer disabled={disabled} name={name} onClick={handleClick} />;\n }\n\n return (\n <Box hasRadius>\n <VisuallyHidden id={ariaDescriptionId}>\n {formatMessage({\n id: getTranslation('dnd.instructions'),\n defaultMessage: `Press spacebar to grab and re-order`,\n })}\n </VisuallyHidden>\n <VisuallyHidden aria-live=\"assertive\">{liveText}</VisuallyHidden>\n <AccordionRoot\n $error={error}\n value={collapseToOpen}\n onValueChange={handleValueChange}\n aria-describedby={ariaDescriptionId}\n >\n {value.map(({ __temp_key__: key, id }, index) => {\n const nameWithIndex = `${name}.${index}`;\n return (\n <ComponentProvider\n key={key}\n // id is always a number in a component\n id={id as number}\n uid={attribute.component}\n level={level + 1}\n type=\"repeatable\"\n >\n <Component\n disabled={disabled}\n name={nameWithIndex}\n attribute={attribute}\n index={index}\n mainField={mainField}\n onMoveItem={handleMoveComponentField}\n onDeleteComponent={() => {\n removeFieldRow(name, index);\n toggleCollapses();\n }}\n toggleCollapses={toggleCollapses}\n onCancel={handleCancel}\n onDropItem={handleDropItem}\n onGrabItem={handleGrabItem}\n __temp_key__={key}\n >\n {layout.map((row, index) => {\n return (\n <ResponsiveGridRoot gap={4} key={index}>\n {row.map(({ size, ...field }) => {\n /**\n * Layouts are built from schemas so they don't understand the complete\n * schema tree, for components we append the parent name to the field name\n * because this is the structure for the data & permissions also understand\n * the nesting involved.\n */\n const completeFieldName = `${nameWithIndex}.${field.name}`;\n\n const translatedLabel = formatMessage({\n id: `content-manager.components.${attribute.component}.${field.name}`,\n defaultMessage: field.label,\n });\n\n return (\n <ResponsiveGridItem\n col={size}\n key={completeFieldName}\n s={12}\n xs={12}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n {children({\n ...field,\n label: translatedLabel,\n name: completeFieldName,\n })}\n </ResponsiveGridItem>\n );\n })}\n </ResponsiveGridRoot>\n );\n })}\n </Component>\n </ComponentProvider>\n );\n })}\n <TextButtonCustom disabled={disabled} onClick={handleClick} startIcon={<Plus />}>\n {formatMessage({\n id: getTranslation('containers.EditView.add.new-entry'),\n defaultMessage: 'Add an entry',\n })}\n </TextButtonCustom>\n </AccordionRoot>\n </Box>\n );\n};\n\nconst AccordionRoot = styled(Accordion.Root)<{ $error?: string }>`\n border: 1px solid\n ${({ theme, $error }) => ($error ? theme.colors.danger600 : theme.colors.neutral200)};\n`;\n\nconst TextButtonCustom = styled(TextButton)`\n width: 100%;\n display: flex;\n justify-content: center;\n border-top: 1px solid ${({ theme }) => theme.colors.neutral200};\n padding-inline: ${(props) => props.theme.spaces[6]};\n padding-block: ${(props) => props.theme.spaces[3]};\n\n &:not([disabled]) {\n cursor: pointer;\n\n &:hover {\n background-color: ${(props) => props.theme.colors.primary100};\n }\n }\n\n span {\n font-weight: 600;\n font-size: 1.4rem;\n line-height: 2.4rem;\n }\n\n @media (prefers-reduced-motion: no-preference) {\n transition: background-color 120ms ${(props) => props.theme.motion.easings.easeOutQuad};\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * Field\n * -----------------------------------------------------------------------------------------------*/\n\ninterface ComponentProps\n extends Pick<UseDragAndDropOptions, 'onGrabItem' | 'onDropItem' | 'onCancel' | 'onMoveItem'>,\n Pick<RepeatableComponentProps, 'mainField'> {\n attribute: Schema.Attribute.Component<`${string}.${string}`, boolean>;\n disabled?: boolean;\n index: number;\n name: string;\n onDeleteComponent?: React.MouseEventHandler<HTMLButtonElement>;\n toggleCollapses: () => void;\n children: React.ReactNode;\n __temp_key__: string;\n}\n\nconst Component = ({\n disabled,\n index,\n name,\n mainField = {\n name: 'id',\n type: 'integer',\n },\n children,\n onDeleteComponent,\n toggleCollapses,\n __temp_key__,\n ...dragProps\n}: ComponentProps) => {\n const { formatMessage } = useIntl();\n\n const displayValue = useForm('RepeatableComponent', (state) => {\n return getIn(state.values, [...name.split('.'), mainField.name]);\n });\n\n const accordionRef = React.useRef<HTMLButtonElement>(null!);\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 = name.split('.').slice(0, -1).join('.');\n\n const [{ handlerId, isDragging, handleKeyDown }, boxRef, dropRef, dragRef, dragPreviewRef] =\n useDragAndDrop(!disabled, {\n type: `${ItemTypes.COMPONENT}_${componentKey}`,\n index,\n item: {\n index,\n displayedValue: displayValue,\n },\n onStart() {\n // Close all collapses\n toggleCollapses();\n },\n ...dragProps,\n });\n\n React.useEffect(() => {\n dragPreviewRef(getEmptyImage(), { captureDraggingState: false });\n }, [dragPreviewRef, index]);\n\n const composedAccordionRefs = useComposedRefs<HTMLButtonElement>(accordionRef, dragRef);\n const composedBoxRefs = useComposedRefs<HTMLDivElement>(\n boxRef as React.RefObject<HTMLDivElement>,\n dropRef\n );\n\n return (\n <>\n {isDragging ? (\n <Preview />\n ) : (\n <Accordion.Item ref={composedBoxRefs} value={__temp_key__}>\n <Accordion.Header>\n <Accordion.Trigger>{displayValue}</Accordion.Trigger>\n <Accordion.Actions>\n <IconButton\n variant=\"ghost\"\n onClick={onDeleteComponent}\n label={formatMessage({\n id: getTranslation('containers.Edit.delete'),\n defaultMessage: 'Delete',\n })}\n >\n <Trash />\n </IconButton>\n <IconButton\n ref={composedAccordionRefs}\n variant=\"ghost\"\n onClick={(e) => e.stopPropagation()}\n data-handler-id={handlerId}\n label={formatMessage({\n id: getTranslation('components.DragHandle-label'),\n defaultMessage: 'Drag',\n })}\n onKeyDown={handleKeyDown}\n >\n <Drag />\n </IconButton>\n </Accordion.Actions>\n </Accordion.Header>\n <Accordion.Content>\n <Flex\n direction=\"column\"\n alignItems=\"stretch\"\n background=\"neutral100\"\n padding={6}\n gap={6}\n >\n {children}\n </Flex>\n </Accordion.Content>\n </Accordion.Item>\n )}\n </>\n );\n};\n\nconst Preview = () => {\n return <StyledSpan tag=\"span\" padding={6} background=\"primary100\" />;\n};\n\nconst StyledSpan = styled<BoxComponent<'span'>>(Box)`\n display: block;\n outline: 1px dashed ${({ theme }) => theme.colors.primary500};\n outline-offset: -1px;\n`;\n\nexport { RepeatableComponent };\nexport type { RepeatableComponentProps };\n","import * as React from 'react';\n\nimport { InputProps, useField } from '@strapi/admin/strapi-admin';\nimport { Field, Flex, IconButton } from '@strapi/design-system';\nimport { Trash } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { useDoc } from '../../../../../hooks/useDocument';\nimport { EditFieldLayout } from '../../../../../hooks/useDocumentLayout';\nimport { getTranslation } from '../../../../../utils/translations';\nimport { transformDocument } from '../../../utils/data';\nimport { createDefaultForm } from '../../../utils/forms';\nimport { type InputRendererProps } from '../../InputRenderer';\n\nimport { Initializer } from './Initializer';\nimport { NonRepeatableComponent } from './NonRepeatable';\nimport { RepeatableComponent } from './Repeatable';\n\ninterface ComponentInputProps\n extends Omit<Extract<EditFieldLayout, { type: 'component' }>, 'size' | 'hint'>,\n Pick<InputProps, 'hint'> {\n labelAction?: React.ReactNode;\n children: (props: InputRendererProps) => React.ReactNode;\n /**\n * We need layout to come from the props, and not via a hook, because Content History needs\n * a way to modify the normal component layout to add hidden fields.\n */\n layout: EditFieldLayout[][];\n}\n\nconst ComponentInput = ({\n label,\n required,\n name,\n attribute,\n disabled,\n labelAction,\n ...props\n}: ComponentInputProps) => {\n const { formatMessage } = useIntl();\n const field = useField(name);\n\n const showResetComponent = !attribute.repeatable && field.value && !disabled;\n\n const { components } = useDoc();\n\n const handleInitialisationClick = () => {\n const schema = components[attribute.component];\n const form = createDefaultForm(schema, components);\n const data = transformDocument(schema, components)(form);\n\n field.onChange(name, data);\n };\n\n return (\n <Field.Root error={field.error} required={required}>\n <Flex justifyContent=\"space-between\">\n <Field.Label action={labelAction}>\n {label}\n {attribute.repeatable && (\n <>&nbsp;({Array.isArray(field.value) ? field.value.length : 0})</>\n )}\n </Field.Label>\n\n {showResetComponent && (\n <IconButton\n label={formatMessage({\n id: getTranslation('components.reset-entry'),\n defaultMessage: 'Reset Entry',\n })}\n variant=\"ghost\"\n onClick={() => {\n field.onChange(name, null);\n }}\n >\n <Trash />\n </IconButton>\n )}\n </Flex>\n {/**\n * if the field isn't repeatable then we display a button to start the field\n * TODO: should this just live in the `NonRepeatableComponent`?\n */}\n {!attribute.repeatable && !field.value && (\n <Initializer disabled={disabled} name={name} onClick={handleInitialisationClick} />\n )}\n {!attribute.repeatable && field.value ? (\n <NonRepeatableComponent attribute={attribute} name={name} disabled={disabled} {...props}>\n {props.children}\n </NonRepeatableComponent>\n ) : null}\n {attribute.repeatable && (\n <RepeatableComponent attribute={attribute} name={name} disabled={disabled} {...props}>\n {props.children}\n </RepeatableComponent>\n )}\n <Field.Error />\n </Field.Root>\n );\n};\n\nconst MemoizedComponentInput = React.memo(ComponentInput);\n\nexport { MemoizedComponentInput as ComponentInput };\nexport type { ComponentInputProps };\n"],"names":["Editor","isText","node","CodeBlockIcon","Picture","SlateElement","isListNode","name","format","Link","modifiers","Wrapper","block","editor","ExpandWrapper","EditorLayout","insertText","icon","displayName","components","Preview","Grid","InputRenderer","addFieldRow","removeFieldRow","moveFieldRow","pipe","data","ExpandButton","Image","document","FormInputRenderer","BlocksInput","ComponentInput","RelationsInput","Wysiwyg","UIDInput","value","collapseToOpen","index"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,MAAM,qCAAqB,IAAuC;AAelE,MAAM,oBAAoB,CAAC,gBAA0B,OAAgC;AAC7E,QAAA,CAAC,oBAAoB,qBAAqB,IAAI,SAAS,OAAO,YAAY,cAAc,CAAC;AAKzF,QAAA,UAAU,cAAc,OAAO,CAAC,QAAQ,CAAC,eAAe,IAAI,GAAG,CAAC;AAChE,QAAA,CAAC,SAAS,UAAU,IAAI,SAAS,MAAM,CAAC,CAAC,QAAQ,MAAM;AAC7D,QAAM,iBAAiB,aAAa,qBAAqB,CAAC,UAAU,MAAM,aAAa,GAAG;AAE1F,YAAU,MAAM;AACR,UAAA,WAAW,CAAC,UAAqD;AACrE,4BAAsB,KAAK;AAC3B,iBAAW,KAAK;AAAA,IAClB;AAEM,UAAA,qBAAqB,OACzB,MACA,eACG;AACH,YAAM,UAAU,MAAM,QAAQ,IAAI,UAAU;AAEvC,WAAA,QAAQ,CAAC,KAAK,UAAU;AAC3B,uBAAe,IAAI,KAAK,QAAQ,KAAK,EAAE,OAAO;AAAA,MAAA,CAC/C;AAEQ,eAAA,OAAO,YAAY,cAAc,CAAC;AAAA,IAC7C;AAEI,QAAA,QAAQ,SAAS,GAAG;AACtB,iBAAW,IAAI;AAEf,YAAM,oBAAoB,QAAQ,OAEhC,CAAC,iBAAiB,QAAQ;AACpB,cAAA,cAAc,eAAe,GAAG;AAEtC,YAAI,aAAa;AACf,0BAAgB,KAAK,YAAY,WAAW,MAAA,CAAO;AAAA,QAAA;AAG9C,eAAA;AAAA,MACT,GAAG,EAAE;AAED,UAAA,kBAAkB,SAAS,GAAG;AAChC,2BAAmB,SAAS,iBAAiB;AAAA,MAAA;AAAA,IAC/C;AAAA,EACF,GACC,CAAC,SAAS,cAAc,CAAC;AAMtB,QAAA,UAAU,YAAY,MAAM;AAChC,mBAAe,MAAM;AACrB,0BAAsB,CAAA,CAAE;AAAA,EAC1B,GAAG,EAAE;AAEL,SAAO,EAAE,eAAe,SAAS,oBAAoB,QAAQ;AAC/D;AC/EO,MAAM,gBAIP;AAAA,EACJ;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,IACP,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,IACP,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,IACP,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,IACP,UAAU;AAAA,EAAA;AAEd;ACvNA,MAAM,oBAAoB,CACxB,QACA,oBACgB;AAEV,QAAA,CAAC,GAAG,YAAY,IAAIA,SAAO,KAAK,QAAQ,EAAE;AAGhD,aAAW,YAAY,QAAQ;AAAA,IAC7B,OAAO,CAAC,SAAS,CAACA,SAAO,SAAS,IAAI,KAAK,KAAK,SAAS;AAAA,IACzD,OAAO;AAAA,IACP,IAAI,OAAO,aAAa;AAAA,EAAA,CACzB;AAGK,QAAA,CAAA,EAAG,mBAAmB,IAAIA,SAAO,KAAK,QAAQ,CAAA,CAAE;AAChD,QAAA,QAAQA,SAAO,MAAM,QAAQ;AAAA,IACjC,OAAO,CAAC,SAAS,CAACA,SAAO,SAAS,IAAI,KAAK,KAAK,SAAS,UAAU,KAAK,SAAS;AAAA,IACjF,IAAI,OAAO,aAAa;AAAA,EAAA,CACzB;AAED,MAAI,CAAC,SAASA,SAAO,SAAS,MAAM,CAAC,CAAC,GAAG;AACvC;AAAA,EAAA;AAGI,QAAA,CAAC,SAAS,WAAW,IAAI;AAEpB,aAAA;AAAA,IACT;AAAA,IACA;AAAA,MACE,GAAG,qBAAqB,OAAO;AAAA,MAC/B,GAAG;AAAA,IACL;AAAA,IACA,EAAE,IAAI,YAAY;AAAA,EACpB;AAEO,SAAA;AACT;AAKA,MAAM,uBAAuB,CAAC,YAAqB;AACjD,QAAM,EAAE,UAAU,WAAW,MAAM,OAAO,GAAG,UAAU;AAEvD,QAAM,oBAAoB,OAAO,KAAK,KAAK,EAAE;AAAA,IAC3C,CAAC,mBAAmB,SAAS,EAAE,GAAG,mBAAmB,CAAC,GAAG,GAAG;IAC5D,CAAA;AAAA,EACF;AAEO,SAAA;AACT;ACvDA,MAAMC,WAAS,CAAC,SAAgC;AACvC,SAAA,KAAK,OAAO,IAAI,KAAK,CAACD,SAAO,SAAS,IAAI,KAAK,KAAK,SAAS;AACtE;AAKA,MAAM,wBAAwB,CAAC,WAAmB;AAM1C,QAAA,YAAYA,SAAO,MAAM,QAAQ;AAAA,IACrC,OAAO,CAACE,UAAS,CAACF,SAAO,SAASE,KAAI,KAAK,CAAC,CAAC,QAAQ,MAAM,EAAE,SAASA,MAAK,IAAI;AAAA,EAAA,CAChF;AACD,MAAI,CAAC,aAAa,CAAC,OAAO,WAAW;AACnC;AAAA,EAAA;AAEI,QAAA,CAAC,MAAM,QAAQ,IAAI;AACzB,QAAM,YAAYF,SAAO,MAAM,QAAQ,OAAO,UAAU,QAAQ,QAAQ;AACxE,QAAM,eAAe,KAAK,SAAS,GAAG,EAAE;AACxC,QAAM,cAAcC,SAAO,YAAY,KAAK,aAAa,KAAK,SAAS,IAAI;AAE3E,MAAI,aAAa,aAAa;AAEjB,eAAA,OAAO,QAAQ,EAAE,UAAU,GAAG,MAAM,aAAa,SAAS,MAAM;AAE3E,eAAW,YAAY,QAAQ;AAAA,MAC7B,MAAM;AAAA,MACN,UAAU,CAAC,EAAE,MAAM,QAAQ,MAAM,GAAI,CAAA;AAAA,IAAA,CACtC;AACD;AAAA,EAAA;AAIS,aAAA,WAAW,QAAQ,IAAI;AAGlC,MAAI,WAAW;AACZ,KAAA,QAAQ,UAAU,aAAa,iBAAiB,MAAM,EAAE,QAAQ,CAAC,aAAa;AACtED,eAAA,WAAW,QAAQ,QAAQ;AAAA,IAAA,CACnC;AAAA,EAAA;AAEL;ACzBO,MAAM,eAAe,CAAC,CAAC,MAAM,IAAI,MAAiB;AACvD,QAAM,SAA4B,CAAC;AAG/B,MAAA,CAAC,QAAQ,UAAU,IAAI,KAAK,KAAK,SAAS,OAAe,QAAA;AAEvD,QAAA,OAAO,KAAK,OAAO,IAAI;AACvB,QAAA,WAAW,cAAc,KAAK,CAAC,SAAS,KAAK,UAAU,KAAK,QAAQ;AACpE,QAAA,cAAc,UAAU,YAAY,UAAU;AAEpD,QAAM,mBAAmB,MAAM,UAAU,eAAe,WAAW;AAGnE,QAAM,SAAS,MAAM,SAAS,MAAM,gBAAgB;AACpD,MAAI,QAAQ;AACZ,aAAW,SAAS,QAAQ;AAC1B,UAAM,SAAS,MAAM;AACrB,UAAM,MAAM,QAAQ;AAChB,QAAA,OAAO,UAAU,UAAU;AAC7B,aAAO,KAAK;AAAA,QACV,QAAQ,EAAE,MAAM,QAAQ,MAAM;AAAA,QAC9B,OAAO,EAAE,MAAM,QAAQ,IAAI;AAAA,QAC3B,WAAW,SAAS,MAAM,IAAI;AAAA,MAAA,CAC/B;AAAA,IAAA;AAEK,YAAA;AAAA,EAAA;AAIH,SAAA;AACT;AAEA,MAAM,YAAY,OAAO;AAAA,mBACN,CAAC,EAAE,YAAY,MAAM,YAAY;AAAA,sBAC9B,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,UAAU;AAAA;AAAA;AAAA,aAG/C,CAAC,EAAE,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,CAAC,IAAI,MAAM,OAAO,CAAC,CAAC,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAMtD,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,UAAU;AAAA;AAAA;AAAA;AAAA;AAMnD,MAAM,aAAa,CAAC,UAA8B;AAChD,QAAM,EAAE,OAAA,IAAW,uBAAuB,aAAa;AACvD,QAAM,kBAAkB,WAAW;AACnC,QAAM,kBAAkB,YAAY;AAC9B,QAAA,EAAE,cAAc,IAAI,QAAQ;AAClC,QAAM,CAAC,cAAc,eAAe,IAAI,MAAM,SAAS,KAAK;AACtD,QAAA,8BAA+B,mBAAmB,mBAAoB;AAE5E,SACG,qBAAA,KAAA,EAAI,UAAS,YAAW,OAAM,QAC7B,UAAA;AAAA,IAAC,oBAAA,WAAA,EAAW,GAAG,MAAM,YACnB,8BAAC,QAAM,EAAA,UAAA,MAAM,UAAS,EACxB,CAAA;AAAA,IACC,+BACC;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,UAAS;AAAA,QACT,YAAW;AAAA,QACX,aAAY;AAAA,QACZ,aAAY;AAAA,QACZ,aAAY;AAAA,QACZ,QAAO;AAAA,QACP,KAAI;AAAA,QACJ,WAAW;AAAA,QACX,OAAO;AAAA,QACP,SAAS;AAAA,QACT,WAAS;AAAA,QAET,UAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,UAAU,CAAC,SAAS;AACP,yBAAA;AAAA,gBACT;AAAA,gBACA,EAAE,UAAU,KAAK,WAAW;AAAA,gBAC5B,EAAE,OAAO,CAAC,SAAS,CAACA,SAAO,SAAS,IAAI,KAAK,KAAK,SAAS,OAAO;AAAA,cACpE;AAAA,YACF;AAAA,YACA,OAAQ,MAAM,QAAQ,SAAS,UAAU,MAAM,QAAQ,YAAa;AAAA,YACpE,cAAc,CAAC,SAAS;AACtB,8BAAgB,IAAI;AAGpB,kBAAI,CAAC,MAAM;AACT,4BAAY,MAAM,MAAM;AAAA,cAAA;AAAA,YAE5B;AAAA,YACA,kBAAkB,CAAC,MAAM,EAAE,eAAe;AAAA,YAC1C,cAAY,cAAc;AAAA,cACxB,IAAI;AAAA,cACJ,gBAAgB;AAAA,YAAA,CACjB;AAAA,YAEA,UAAc,cAAA,IAAI,CAAC,EAAE,OAAO,MAC3B,MAAA,oBAAC,oBAAmB,EAAA,OACjB,UADoC,MAAA,GAAA,KAEvC,CACD;AAAA,UAAA;AAAA,QAAA;AAAA,MACH;AAAA,IAAA;AAAA,EACF,GAEJ;AAEJ;AAEA,MAAM,aAAwC;AAAA,EAC5C,MAAM;AAAA,IACJ,eAAe,CAAC,UAAW,oBAAA,YAAA,EAAY,GAAG,OAAO;AAAA,IACjD,MAAMG;AAAAA,IACN,OAAO;AAAA,MACL,IAAI;AAAA,MACJ,gBAAgB;AAAA,IAClB;AAAA,IACA,WAAW,CAAC,SAAS,KAAK,SAAS;AAAA,IACnC,oBAAoB;AAAA,IACpB,cAAc,QAAQ;AACpB,wBAAiC,QAAQ,EAAE,MAAM,QAAQ,UAAU,aAAa;AAAA,IAClF;AAAA,IACA,eAAe,QAAQ;AACrB,4BAAsB,MAAM;AAAA,IAC9B;AAAA,IACA,UAAU,CAAC,KAAK;AAAA,EAAA;AAEpB;ACpIA,MAAM,KAAK,OAAkC,UAAU,EAAE,MAAM,EAAE,KAAK,MAAM;AAAA;AAAA,iBAE3D,CAAC,EAAE,YAAY,MAAM,YAAY,CAAC,CAAC;AAAA;AAGpD,MAAM,KAAK,OAAkC,UAAU,EAAE,MAAM,EAAE,KAAK,MAAM;AAAA;AAAA,iBAE3D,CAAC,EAAE,YAAY,MAAM,YAAY,CAAC,CAAC;AAAA;AAGpD,MAAM,KAAK,OAAkC,UAAU,EAAE,MAAM,EAAE,KAAK,MAAM;AAAA;AAAA,iBAE3D,CAAC,EAAE,YAAY,MAAM,YAAY,CAAC,CAAC;AAAA;AAGpD,MAAM,KAAK,OAAkC,UAAU,EAAE,MAAM,EAAE,KAAK,MAAM;AAAA;AAAA,iBAE3D,CAAC,EAAE,YAAY,MAAM,YAAY,CAAC,CAAC;AAAA;AAGpD,MAAM,KAAK,OAAkC,UAAU,EAAE,MAAM,EAAE,KAAK,MAAM;AAAA;AAAA,iBAE3D,CAAC,EAAE,YAAY,MAAM,YAAY,CAAC,CAAC;AAAA;AAGpD,MAAM,KAAK,OAAkC,UAAU,EAAE,MAAM,EAAE,KAAK,MAAM;AAAA;AAAA,iBAE3D,CAAC,EAAE,YAAY,MAAM,YAAY,CAAC,CAAC;AAAA;AAMpD,MAAM,yBAAyB,CAAC,QAAgB,UAAqC;AACnF,oBAAoC,QAAQ,EAAE,MAAM,WAAW,OAAO;AACxE;AAEA,MAAM,gBAGF;AAAA,EACF,eAAe;AAAA,IACb,eAAe,CAAC,UAAU,oBAAC,MAAI,GAAG,MAAM,YAAa,UAAA,MAAM,SAAS,CAAA;AAAA,IACpE,MAAM;AAAA,IACN,OAAO;AAAA,MACL,IAAI;AAAA,MACJ,gBAAgB;AAAA,IAClB;AAAA,IACA,eAAe,CAAC,WAAW,uBAAuB,QAAQ,CAAC;AAAA,IAC3D,WAAW,CAAC,SAAS,KAAK,SAAS,aAAa,KAAK,UAAU;AAAA,IAC/D,oBAAoB;AAAA,IACpB,UAAU,CAAC,GAAG;AAAA,IACd,qBAAqB;AAAA,EACvB;AAAA,EACA,eAAe;AAAA,IACb,eAAe,CAAC,UAAU,oBAAC,MAAI,GAAG,MAAM,YAAa,UAAA,MAAM,SAAS,CAAA;AAAA,IACpE,MAAM;AAAA,IACN,OAAO;AAAA,MACL,IAAI;AAAA,MACJ,gBAAgB;AAAA,IAClB;AAAA,IACA,eAAe,CAAC,WAAW,uBAAuB,QAAQ,CAAC;AAAA,IAC3D,WAAW,CAAC,SAAS,KAAK,SAAS,aAAa,KAAK,UAAU;AAAA,IAC/D,oBAAoB;AAAA,IACpB,UAAU,CAAC,IAAI;AAAA,IACf,qBAAqB;AAAA,EACvB;AAAA,EACA,iBAAiB;AAAA,IACf,eAAe,CAAC,UAAU,oBAAC,MAAI,GAAG,MAAM,YAAa,UAAA,MAAM,SAAS,CAAA;AAAA,IACpE,MAAM;AAAA,IACN,OAAO;AAAA,MACL,IAAI;AAAA,MACJ,gBAAgB;AAAA,IAClB;AAAA,IACA,eAAe,CAAC,WAAW,uBAAuB,QAAQ,CAAC;AAAA,IAC3D,WAAW,CAAC,SAAS,KAAK,SAAS,aAAa,KAAK,UAAU;AAAA,IAC/D,oBAAoB;AAAA,IACpB,UAAU,CAAC,KAAK;AAAA,IAChB,qBAAqB;AAAA,EACvB;AAAA,EACA,gBAAgB;AAAA,IACd,eAAe,CAAC,UAAU,oBAAC,MAAI,GAAG,MAAM,YAAa,UAAA,MAAM,SAAS,CAAA;AAAA,IACpE,MAAM;AAAA,IACN,OAAO;AAAA,MACL,IAAI;AAAA,MACJ,gBAAgB;AAAA,IAClB;AAAA,IACA,eAAe,CAAC,WAAW,uBAAuB,QAAQ,CAAC;AAAA,IAC3D,WAAW,CAAC,SAAS,KAAK,SAAS,aAAa,KAAK,UAAU;AAAA,IAC/D,oBAAoB;AAAA,IACpB,UAAU,CAAC,MAAM;AAAA,IACjB,qBAAqB;AAAA,EACvB;AAAA,EACA,gBAAgB;AAAA,IACd,eAAe,CAAC,UAAU,oBAAC,MAAI,GAAG,MAAM,YAAa,UAAA,MAAM,SAAS,CAAA;AAAA,IACpE,MAAM;AAAA,IACN,OAAO;AAAA,MACL,IAAI;AAAA,MACJ,gBAAgB;AAAA,IAClB;AAAA,IACA,eAAe,CAAC,WAAW,uBAAuB,QAAQ,CAAC;AAAA,IAC3D,WAAW,CAAC,SAAS,KAAK,SAAS,aAAa,KAAK,UAAU;AAAA,IAC/D,oBAAoB;AAAA,IACpB,UAAU,CAAC,OAAO;AAAA,EACpB;AAAA,EACA,eAAe;AAAA,IACb,eAAe,CAAC,UAAU,oBAAC,MAAI,GAAG,MAAM,YAAa,UAAA,MAAM,SAAS,CAAA;AAAA,IACpE,MAAM;AAAA,IACN,OAAO;AAAA,MACL,IAAI;AAAA,MACJ,gBAAgB;AAAA,IAClB;AAAA,IACA,eAAe,CAAC,WAAW,uBAAuB,QAAQ,CAAC;AAAA,IAC3D,WAAW,CAAC,SAAS,KAAK,SAAS,aAAa,KAAK,UAAU;AAAA,IAC/D,oBAAoB;AAAA,IACpB,UAAU,CAAC,QAAQ;AAAA,IACnB,qBAAqB;AAAA,EAAA;AAEzB;ACzHA,MAAM,eAAe,OAAsB,IAAI;AAAA;AAAA;AAAA,IAG3C,CAAC,UACD,MAAM,cACN;AAAA,oBACgB,MAAM,MAAM,OAAO,UAAU;AAAA,KAC5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWL,MAAM,sBAAsB;AAAA,EAC1B;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,EACA;AACF;AAEA,MAAM,OAAO,CAAsC,QAAW,SAA0B;AAChF,QAAA,UAAU,KAAK,IAAI,CAAC,QAAQ,CAAC,KAAK,OAAO,GAAG,CAAC,CAAC;AAC7C,SAAA,OAAO,YAAY,OAAO;AACnC;AAGA,MAAM,UAAU,CAAC,YAAgD;AAC/D,SAAO,QAAQ,SAAS;AAC1B;AAGA,MAAM,QAAQ,CAAC,EAAE,YAAY,UAAU,cAAkC;AACvE,QAAM,kBAAkB,WAAW;AACnC,QAAM,kBAAkB,YAAY;AAEhC,MAAA,CAAC,QAAQ,OAAO,GAAG;AACd,WAAA;AAAA,EAAA;AAET,QAAM,EAAE,KAAK,iBAAiB,OAAO,OAAA,IAAW,QAAQ;AAGtD,SAAA,qBAAC,KAAK,EAAA,GAAG,YACN,UAAA;AAAA,IAAA;AAAA,IACD;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,YAAW;AAAA,QACX,iBAAiB;AAAA,QACjB,gBAAe;AAAA,QACf,YAAY,mBAAmB;AAAA,QAC/B,WAAS;AAAA,QAET,8BAAC,OAAI,EAAA,KAAK,KAAK,KAAK,iBAAiB,OAAc,OAAgB,CAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EACrE,GACF;AAEJ;AAEA,MAAM,cAAc,MAAM;AACxB,QAAM,CAAC,QAAQ,SAAS,IAAI,MAAM,SAAS,IAAI;AAC/C,QAAM,EAAE,OAAA,IAAW,uBAAuB,aAAa;AACvD,QAAM,aAAa,aAAa,eAAe,CAAC,UAAU,MAAM,UAAU;AAE1E,MAAI,CAAC,cAAc,CAAC,OAAe,QAAA;AAE7B,QAAA,qBAAqB,WAAW,eAAe;AAM/C,QAAA,eAAe,CAAC,WAAsC;AAE1D,eAAW,YAAY,QAAQ;AAAA,MAC7B,OAAO,CAAC,SAAS,CAACH,SAAO,SAAS,IAAI,KAAK,KAAK,SAAS;AAAA,MACzD,OAAO;AAAA,IAAA,CACR;AAIK,UAAA,yBAAyBA,SAAO,MAAM,QAAQ;AAAA,MAClD,MAAM,MAAM;AACV,YAAIA,SAAO,SAAS,IAAI,EAAU,QAAA;AAElC,cAAM,eAAe,CAAC,QAAQ,MAAM,EAAE,SAAS,KAAK,IAAI;AAExD,eAAO,CAAC;AAAA,MAAA;AAAA,IACV,CACD;AAED,QAAI,CAAC,uBAAwB;AACvB,UAAA,CAAA,EAAG,YAAY,IAAI;AAGzB,eAAW,YAAY,MAAM;AAG7B,UAAM,gBAAgB,OAAO,IAAI,CAAC,UAAU;AAC1C,YAAM,YAA4B;AAAA,QAChC,MAAM;AAAA,QACN;AAAA,QACA,UAAU,CAAC,EAAE,MAAM,QAAQ,MAAM,GAAI,CAAA;AAAA,MACvC;AACO,aAAA;AAAA,IAAA,CACR;AACD,eAAW,YAAY,QAAQ,eAAe,EAAE,IAAI,cAAc;AAGvD,eAAA,OAAO,QAAQ,YAAY;AAAA,EACxC;AAEM,QAAA,qBAAqB,CAAC,WAA8C;AACxE,UAAM,kBAAkB,OAAO,IAAI,CAAC,UAAU;AAEtC,YAAA,gBAAgB,KAAK,OAAO,mBAAmB;AAErD,YAAM,YAAqC;AAAA,QACzC,GAAG;AAAA,QACH,iBAAiB,cAAc,mBAAmB,cAAc;AAAA,QAChE,KAAK,4BAA4B,MAAM,GAAG;AAAA,MAC5C;AAEO,aAAA;AAAA,IAAA,CACR;AAED,iBAAa,eAAe;AAC5B,cAAU,KAAK;AAAA,EACjB;AAGE,SAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,cAAc,CAAC,QAAQ;AAAA,MACvB,SAAS,MAAM,UAAU,KAAK;AAAA,MAC9B,gBAAgB;AAAA,IAAA;AAAA,EAClB;AAEJ;AAEA,MAAM,cAA0C;AAAA,EAC9C,OAAO;AAAA,IACL,eAAe,CAAC,UAAW,oBAAA,OAAA,EAAO,GAAG,OAAO;AAAA,IAC5C,MAAMI;AAAAA,IACN,OAAO;AAAA,MACL,IAAI;AAAA,MACJ,gBAAgB;AAAA,IAClB;AAAA,IACA,WAAW,CAAC,SAAS,KAAK,SAAS;AAAA,IACnC,oBAAoB;AAAA,IACpB,mBAAmB,QAAQ;AAErB,UAAA,OAAO,SAAS,WAAW,GAAG;AAChC,mBAAW,SAAS,QAAQ;AAAA,UAC1B,MAAM;AAAA;AAAA,UAEN,OAAO;AAAA,UACP,UAAU,CAAC,EAAE,MAAM,QAAQ,MAAM,GAAI,CAAA;AAAA,QAAA,CACtC;AAAA,MAAA,OACI;AACL,mBAAW,YAAY,MAAM;AAAA,MAAA;AAAA,IAEjC;AAAA,IACA,eAAe,QAAQ;AACrB,iBAAW,YAAY,QAAQ;AAAA,QAC7B,MAAM;AAAA,QACN,UAAU,CAAC,EAAE,MAAM,QAAQ,MAAM,GAAI,CAAA;AAAA,MAAA,CACtC;AAAA,IACH;AAAA,IACA,eAAe,MAAM;AAMZ,aAAA,0BAAO,aAAY,EAAA;AAAA,IAC5B;AAAA,IACA,UAAU,CAAC,IAAI;AAAA,EAAA;AAEnB;AC3MA,MAAM,aAAa,CAAC,WAAmB;AACrC,aAAW,YAAY,QAAQ;AAAA,IAC7B,OAAO,CAAC,SAAS,CAACJ,SAAO,SAAS,IAAI,KAAKK,QAAa,UAAU,IAAI,KAAK,KAAK,SAAS;AAAA,EAAA,CAC1F;AACH;AAEA,MAAM,aAAa,CAAC,QAAgB,EAAE,UAA2B;AAC/D,MAAI,OAAO,WAAW;AAEpB,UAAM,YAAY,MAAM;AAAA,MACtBL,SAAO,MAAM,QAAQ;AAAA,QACnB,IAAI,OAAO;AAAA,QACX,OAAO,CAAC,SAAS,CAACA,SAAO,SAAS,IAAI,KAAK,KAAK,SAAS;AAAA,MAC1D,CAAA;AAAA,IACH;AAEA,cAAU,QAAQ,CAAC,CAAG,EAAA,IAAI,MAAM;AAC9B,iBAAW,YAAY,QAAQ,EAAE,IAAI,MAAM;AAAA,IAAA,CAC5C;AAED,QAAI,MAAM,YAAY,OAAO,SAAS,GAAG;AACvC,YAAM,OAAsB;AAAA,QAC1B,MAAM;AAAA,QACN,KAAK,OAAO;AAAA,QACZ,UAAU,CAAC,EAAE,MAAM,QAAQ,MAAM,IAAK,CAAA;AAAA,MACxC;AAEW,iBAAA,YAAY,QAAQ,IAAI;AAAA,IAAA,OAC9B;AACM,iBAAA,UAAU,QAAQ,EAAE,MAAM,QAAQ,KAAK,OAAO,MAAuB;AAAA,QAC9E,OAAO;AAAA,MAAA,CACR;AAAA,IAAA;AAAA,EACH;AAEJ;AAEA,MAAM,WAAW,CAAC,QAAgB,SAAwC;AAClE,QAAA,EAAE,KAAK,KAAA,IAAS;AAElB,MAAA,CAAC,OAAO,WAAW;AACrB;AAAA,EAAA;AAGI,QAAA,YAAYA,SAAO,MAAM,QAAQ;AAAA,IACrC,OAAO,CAAC,SAAS,CAACA,SAAO,SAAS,IAAI,KAAK,KAAK,SAAS;AAAA,EAAA,CAC1D;AAED,MAAI,WAAW;AACP,UAAA,CAAA,EAAG,QAAQ,IAAI;AACV,eAAA,SAAS,QAAQ,EAAE,IAAA,GAAO,EAAE,IAAI,UAAU;AAGrD,QAAI,SAAS,MAAM,SAASA,SAAO,OAAO,QAAQ,QAAQ,GAAG;AACrD,YAAA,oBAAoB,MAAM,KAAK,KAAK,SAAS,QAAQ,UAAU,EAAE,SAAS,KAAM,CAAA,CAAC;AAEvF,wBAAkB,QAAQ,CAAC,CAAG,EAAA,SAAS,MAAM;AAC3C,mBAAW,YAAY,QAAQ,EAAE,IAAI,WAAW;AAAA,MAAA,CACjD;AAED,iBAAW,YAAY,QAAQ,CAAC,EAAE,MAAM,QAAQ,MAAM,GAAG,EAAE,IAAI,SAAS,OAAO,CAAC,GAAG;AAAA,IAAA;AAAA,EACrF;AAEJ;AC5DA,MAAM,aAAa,CAAmB,WACpC,OAAO,QAAQ,MAAM;AAGvB,MAAM,UAAU,CAAmB,WAAc,OAAO,KAAK,MAAM;AAEnE,MAAM,aAAa,CAAC,YAAiE;AACnF,SAAO,QAAQ,SAAS;AAC1B;AAEA,MAAMM,eAAa,CAAC,YAAgE;AAClF,SAAO,QAAQ,SAAS;AAC1B;ACNA,MAAM,iBAAiB,OAAO,QAAQ;AAAA;AAAA;AAItC,MAAM,eAAe,OAAO,MAAM;AAAA,gBAClB,CAAC,UAAW,MAAM,WAAW,YAAY,QAAS;AAAA;AAOlE,MAAM,cAAc,MAAM;AAAA,EACxB,CAAC,EAAE,MAAM,UAAU,WAAA,GAAc,iBAAiB;AAC1C,UAAA,EAAE,cAAc,IAAI,QAAQ;AAClC,UAAM,EAAE,OAAA,IAAW,uBAAuB,MAAM;AAChD,UAAM,OAAO,YAAY,SAAS,QAAQ,IAAI;AAC9C,UAAM,CAAC,aAAa,cAAc,IAAI,MAAM;AAAA,MAC1C,OAAO,uBAAuB,KAAK,OAAO,MAAM,OAAO,oBAAoB,IAAI;AAAA,IACjF;AACM,UAAA,cAAc,KAAK,SAAS,IAAI,CAAC,UAAU,MAAM,IAAI,EAAE,KAAK,EAAE;AACpE,UAAM,CAAC,UAAU,WAAW,IAAI,MAAM,SAAS,WAAW;AAC1D,UAAM,CAAC,SAAS,UAAU,IAAI,MAAM,SAAS,KAAK,GAAG;AAC/C,UAAA,eAAe,MAAM,OAAyB,IAAI;AAClD,UAAA,qBAAqB,OAAO,uBAC9B,CAAC,KAAK,OAAO,MAAM,OAAO,oBAAoB,IAC9C;AACJ,UAAM,CAAC,gBAAgB,iBAAiB,IAAI,MAAM,SAAS,KAAK;AAE1D,UAAA,eAAe,CAAC,MAA2C;AAC/D,wBAAkB,KAAK;AACZ,iBAAA,EAAE,OAAO,KAAK;AAErB,UAAA;AAEE,YAAA;AAAA,UACF,EAAE,OAAO,OAAO,WAAW,GAAG,IAAI,oBAAoB,EAAE,OAAO,KAAK,KAAK,EAAE,OAAO;AAAA,QACpF;AAAA,eACO,OAAO;AACd,0BAAkB,IAAI;AAAA,MAAA;AAAA,IAE1B;AAEM,UAAA,aAAqC,CAAC,MAAM;AAChD,QAAE,gBAAgB;AAGlB,UAAI,OAAO,aAAa,MAAM,YAAY,OAAO,SAAS,GAAG;AACrD,cAAA,CAAG,EAAA,UAAU,IAAIN,SAAO,OAAO,QAAQ,OAAO,UAAU,OAAO,IAAI;AAC9D,mBAAA,OAAO,QAAQ,UAAU;AAAA,MAAA;AAGtC,eAAS,QAAQ,EAAE,KAAK,SAAS,MAAM,UAAU;AACjD,qBAAe,KAAK;AACpB,aAAO,uBAAuB;AAC9B,kBAAY,MAAM,MAAM;AAAA,IAC1B;AAEA,UAAM,cAAc,MAAM;AACpB,UAAA,KAAK,QAAQ,IAAI;AACnB,mBAAW,MAAM;AAAA,MAAA;AAGnB,qBAAe,KAAK;AACpB,kBAAY,MAAM,MAAM;AAAA,IAC1B;AAEA,UAAM,UAAU,MAAM;AAEhB,UAAA,YAA0B,cAAA,SAAS,MAAM;AAAA,IAAA,GAC5C,CAAC,WAAW,CAAC;AAEV,UAAA,gBACJ,CAAC,YACD,CAAC,WACA,KAAK,OAAO,KAAK,QAAQ,WAAW,eAAe,gBAAgB;AAEtE,WACG,qBAAA,QAAQ,MAAR,EAAa,MAAM,aAClB,UAAA;AAAA,MAAC,oBAAA,QAAQ,SAAR,EACC,UAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACE,GAAG;AAAA,UACJ,KAAK;AAAA,UACL,MAAM,KAAK;AAAA,UACX,SAAS,MAAM,eAAe,IAAI;AAAA,UAClC,OAAM;AAAA,UAEL;AAAA,QAAA;AAAA,MAAA,GAEL;AAAA,MACC,oBAAA,QAAQ,SAAR,EAAgB,sBAAsB,aACrC,UAAC,qBAAA,MAAA,EAAK,SAAS,GAAG,WAAU,UAAS,KAAK,GACxC,UAAA;AAAA,QAAA,oBAAC,MAAM,MAAN,EAAW,OAAM,SAChB,UAAA,qBAAC,MAAK,EAAA,WAAU,UAAS,KAAK,GAAG,YAAW,WAC1C,UAAA;AAAA,UAAC,oBAAA,MAAM,OAAN,EACE,UAAc,cAAA;AAAA,YACb,IAAI;AAAA,YACJ,gBAAgB;AAAA,UACjB,CAAA,GACH;AAAA,UACA;AAAA,YAAC,MAAM;AAAA,YAAN;AAAA,cACC,MAAK;AAAA,cACL,aAAa,cAAc;AAAA,gBACzB,IAAI;AAAA,gBACJ,gBAAgB;AAAA,cAAA,CACjB;AAAA,cACD,OAAO;AAAA,cACP,UAAU,CAAC,MAAM;AACH,4BAAA,EAAE,OAAO,KAAK;AAAA,cAAA;AAAA,YAC5B;AAAA,UAAA;AAAA,QACF,EAAA,CACF,EACF,CAAA;AAAA,QACC,oBAAA,MAAM,MAAN,EAAW,OAAM,SAChB,UAAC,qBAAA,MAAA,EAAK,WAAU,UAAS,KAAK,GAAG,YAAW,WAC1C,UAAA;AAAA,UAAC,oBAAA,MAAM,OAAN,EACE,UAAc,cAAA;AAAA,YACb,IAAI;AAAA,YACJ,gBAAgB;AAAA,UACjB,CAAA,GACH;AAAA,UACA;AAAA,YAAC,MAAM;AAAA,YAAN;AAAA,cACC,KAAK;AAAA,cACL,MAAK;AAAA,cACL,aAAa,cAAc;AAAA,gBACzB,IAAI;AAAA,gBACJ,gBAAgB;AAAA,cAAA,CACjB;AAAA,cACD,OAAO;AAAA,cACP,UAAU;AAAA,YAAA;AAAA,UAAA;AAAA,QACZ,EAAA,CACF,EACF,CAAA;AAAA,QACC,qBAAA,MAAA,EAAK,gBAAe,iBAAgB,OAAM,QACzC,UAAA;AAAA,UAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,SAAQ;AAAA,cACR,SAAS,MAAM,WAAW,MAAM;AAAA,cAChC,UAAU;AAAA,cAET,UAAc,cAAA;AAAA,gBACb,IAAI;AAAA,gBACJ,gBAAgB;AAAA,cACjB,CAAA;AAAA,YAAA;AAAA,UACH;AAAA,UACA,qBAAC,MAAK,EAAA,KAAK,GACT,UAAA;AAAA,YAAA,oBAAC,QAAO,EAAA,SAAQ,YAAW,SAAS,aACjC,UAAc,cAAA;AAAA,cACb,IAAI;AAAA,cACJ,gBAAgB;AAAA,YACjB,CAAA,GACH;AAAA,YACA,oBAAC,UAAO,UAAU,QAAQ,aAAa,KAAK,gBAAgB,SAAS,YAClE,UAAc,cAAA;AAAA,cACb,IAAI;AAAA,cACJ,gBAAgB;AAAA,YAAA,CACjB,EACH,CAAA;AAAA,UAAA,EACF,CAAA;AAAA,QAAA,EACF,CAAA;AAAA,MAAA,EAAA,CACF,EACF,CAAA;AAAA,IAAA,GACF;AAAA,EAAA;AAGN;AAEA,MAAM,OAAO,MAAM,WAAkD,CAAC,OAAO,iBAAiB;AAC5F,MAAI,CAAC,WAAW,MAAM,OAAO,GAAG;AACvB,WAAA;AAAA,EAAA;AAMF,SAAA,oBAAC,eAAa,GAAG,OAAO,MAAM,MAAM,SAAS,KAAK,cAAc;AACzE,CAAC;AAED,MAAM,aAAwC;AAAA,EAC5C,MAAM;AAAA,IACJ,eAAe,CAAC,UACd,oBAAC,MAAK,EAAA,SAAS,MAAM,SAAS,YAAY,MAAM,YAC7C,UAAA,MAAM,SACT,CAAA;AAAA;AAAA,IAGF,WAAW,CAAC,SAAS,KAAK,SAAS;AAAA,IACnC,oBAAoB;AAAA,EAAA;AAExB;AC5LA,MAAM,YAAY;AAAA;AAAA;AAAA,SAGT,CAAC,EAAE,YAAY,MAAM,OAAO,CAAC,CAAC;AAAA,yBACd,CAAC,EAAE,YAAY,MAAM,OAAO,CAAC,CAAC;AAAA,uBAChC,CAAC,EAAE,YAAY,MAAM,OAAO,CAAC,CAAC;AAAA,0BAC3B,CAAC,EAAE,YAAY,MAAM,OAAO,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA,0BAI9B,CAAC,EAAE,YAAY,MAAM,OAAO,CAAC,CAAC;AAAA,wBAChC,CAAC,EAAE,YAAY,MAAM,OAAO,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA,2BAI3B,CAAC,EAAE,YAAY,MAAM,OAAO,CAAC,CAAC;AAAA;AAAA;AAIzD,MAAM,cAAc,OAAO;AAAA,qBACN,CAAC,UAAU,MAAM,cAAc;AAAA,IAChD,SAAS;AAAA;AAGb,MAAM,gBAAgB,OAAO;AAAA,qBACR,CAAC,UAAU,MAAM,cAAc;AAAA,IAChD,SAAS;AAAA;AAGb,MAAM,gBAAgB,CAAC,WAAW,eAAe,aAAa;AAC9D,MAAM,kBAAkB,CAAC,QAAQ,UAAU,QAAQ;AAEnD,MAAM,OAAO,CAAC,EAAE,YAAY,UAAU,cAAkC;AAClE,MAAA,CAACM,aAAW,OAAO,GAAG;AACjB,WAAA;AAAA,EAAA;AAKT,QAAM,aAAa,QAAQ,WAAW,YAAY,gBAAgB;AAClE,QAAM,aAAa,QAAQ,eAAe,KAAK,WAAY;AACrD,QAAA,gBAAgB,WAAY,SAAS;AAEvC,MAAA,QAAQ,WAAW,WAAW;AAChC,+BACG,aAAY,EAAA,gBAAgB,eAAgB,GAAG,YAC7C,UACH;AAAA,EAAA;AAIJ,6BACG,eAAc,EAAA,gBAAgB,eAAgB,GAAG,YAC/C,UACH;AAEJ;AAEA,MAAM,4BAA4B,CAAC,QAAgB,oBAA0B;AAE3E,aAAW,YAAY,QAAQ,EAAE,IAAI,iBAAiB;AAElD,MAAA,gBAAgB,CAAC,MAAM,GAAG;AAEjB,eAAA;AAAA,MACT;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,UAAU,CAAC,EAAE,MAAM,QAAQ,MAAM,GAAI,CAAA;AAAA,MACvC;AAAA,MACA,EAAE,IAAI,gBAAgB;AAAA,IACxB;AACW,eAAA,OAAO,QAAQ,eAAe;AAAA,EAAA;AAE7C;AAEA,MAAML,WAAS,CAAC,SAAgC;AACvC,SAAA,KAAK,OAAO,IAAI,KAAK,CAACD,SAAO,SAAS,IAAI,KAAK,KAAK,SAAS;AACtE;AAKA,MAAM,2BAA2B,CAAC,QAAgB,UAA4C;AACxF,MAAA,CAAC,OAAO,UAAW;AAEjB,QAAA,CAAC,iBAAiB,mBAAmB,IAAIA,SAAO,OAAO,QAAQ,OAAO,UAAU,MAAM;AAC5F,QAAM,CAAC,aAAa,eAAe,IAAIA,SAAO,OAAO,QAAQ,mBAAmB;AAChF,QAAM,cACJ,YAAY,SAAS,WAAW,KAChCC,SAAO,gBAAgB,SAAS,CAAC,CAAC,KAClC,gBAAgB,SAAS,CAAC,EAAE,SAAS;AACvC,QAAM,kBACJ,gBAAgB,SAAS,WAAW,KACpCA,SAAO,gBAAgB,SAAS,CAAC,CAAC,KAClC,gBAAgB,SAAS,CAAC,EAAE,SAAS;AACvC,QAAM,gCACJ,OAAO,UAAU,MAAM,WAAW,KAAK,OAAO,UAAU,MAAM,KAAK,GAAG,EAAE,MAAM;AAEhF,MAAI,aAAa;AACT,UAAA,kBAAkBD,SAAO,MAAM,QAAQ;AAAA,MAC3C,IAAI;AAAA,MACJ,OAAO,CAAC,SAAS,CAACA,SAAO,SAAS,IAAI,KAAK,KAAK,SAAS;AAAA,IAAA,CAC1D;AACD,QAAI,CAAC,iBAAiB;AACpB,YAAM,eAAe;AACrB,gCAA0B,QAAQ,eAAe;AAAA,IAAA;AAAA,aAE1C,+BAA+B;AAExC,eAAW,UAAU,QAAQ;AAAA,MAC3B,OAAO,CAAC,SAAS,CAACA,SAAO,SAAS,IAAI,KAAK,KAAK,SAAS;AAAA,IAAA,CAC1D;AACD,eAAW,SAAS,QAAQ,EAAE,MAAM,aAAa;AAAA,aACxC,iBAAiB;AACpB,UAAA,gBAAgBA,SAAO,SAAS,QAAQ;AAAA,MAC5C,IAAI;AAAA,IAAA,CACL;AACK,UAAA,YAAYA,SAAO,KAAK,QAAQ;AAAA,MACpC,IAAI;AAAA,IAAA,CACL;AAED,QAAI,iBAAiB,WAAW;AAE9B,YAAM,eAAe;AACrB,iBAAW,YAAY,QAAQ;AAAA,QAC7B,IAAI;AAAA,MAAA,CACL;AAGK,YAAA,CAAC,YAAY,IAAI;AACjB,YAAA,CAAC,QAAQ,IAAI;AAEjB,UAAA,CAACA,SAAO,SAAS,YAAY,KAC7B,CAACC,SAAO,YAAY,KACpBK,aAAW,YAAY,KACvB,CAACN,SAAO,SAAS,QAAQ,KACzB,CAACC,SAAO,QAAQ,KAChBK,aAAW,QAAQ,GACnB;AACA,YACE,aAAa,SAAS,UACtB,SAAS,SAAS,UAClB,aAAa,WAAW,SAAS,UACjC,aAAa,gBAAgB,SAAS,aACtC;AACA,qBAAW,WAAW,QAAQ;AAAA,YAC5B,IAAI;AAAA,UAAA,CACL;AAAA,QAAA;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAEJ;AAKA,MAAM,uBAAuB,CAAC,WAAmB;AACzC,QAAA,uBAAuBN,SAAO,MAAM,QAAQ;AAAA,IAChD,OAAO,CAAC,SAAS,CAACA,SAAO,SAAS,IAAI,KAAK,KAAK,SAAS;AAAA,EAAA,CAC1D;AAED,MAAI,CAAC,wBAAwB,CAAC,OAAO,WAAW;AAC9C;AAAA,EAAA;AAGI,QAAA,CAAC,iBAAiB,mBAAmB,IAAI;AAC/C,QAAM,CAAC,aAAa,eAAe,IAAIA,SAAO,OAAO,QAAQ,mBAAmB;AAChF,QAAM,cACJ,YAAY,SAAS,WAAW,KAChCC,SAAO,gBAAgB,SAAS,CAAC,CAAC,KAClC,gBAAgB,SAAS,CAAC,EAAE,SAAS;AACvC,QAAM,kBACJ,gBAAgB,SAAS,WAAW,KACpCA,SAAO,gBAAgB,SAAS,CAAC,CAAC,KAClC,gBAAgB,SAAS,CAAC,EAAE,SAAS;AACvC,QAAM,gCACJ,OAAO,UAAU,MAAM,WAAW,KAAK,OAAO,UAAU,MAAM,KAAK,GAAG,EAAE,MAAM;AAEhF,MAAI,aAAa;AACf,8BAA0B,QAAQ,eAAe;AAAA,EAAA,WACxC,iCAAiC,CAAC,iBAAiB;AAEtD,UAAA,cAAcD,SAAO,MAAM,QAAQ,EAAE,IAAI,OAAO,UAAU,QAAQ;AACxE,eAAW,YAAY,QAAQ,EAAE,MAAM,aAAa,UAAU,CAAC,EAAE,MAAM,QAAQ,MAAM,GAAG,CAAC,GAAG;AAC5F,QAAI,aAAa;AACT,YAAA,OAAO,YAAY,CAAC;AAC1B,YAAM,cAAc,CAAC,GAAG,KAAK,MAAM,GAAG,EAAE,GAAG,KAAK,KAAK,SAAS,CAAC,IAAI,CAAC;AACpE,iBAAW,OAAO,QAAQ;AAAA,QACxB,QAAQ,EAAE,MAAM,YAAY,OAAO,CAAC,GAAG,QAAQ,EAAE;AAAA,QACjD,OAAO,EAAE,MAAM,YAAY,OAAO,CAAC,GAAG,QAAQ,EAAE;AAAA,MAAA,CACjD;AAAA,IAAA;AAAA,aAEM,iBAAiB;AAE1B,QACE,CAACA,SAAO,SAAS,WAAW,KAC5BM,aAAW,WAAW,KACtB,aAAa,eACb,YAAY,cAAc,GAC1B;AACM,YAAA,sBAAsB,YAAY,cAAc;AAEhD,YAAA,sBAAsBN,SAAO,MAAM,QAAQ;AAAA,QAC/C,OAAO,CAAC,SACN,CAACA,SAAO,SAAS,IAAI,KACrB,KAAK,SAAS,WACb,KAAK,eAAe,OAAO;AAAA,MAAA,CAC/B;AAED,UAAI,qBAAqB;AAEvB,cAAM,eAAe,oBAAoB,MAAM,GAAG,EAAE;AAChD,YAAA,aAAa,SAAS,GAAG;AACd,uBAAA,aAAa,SAAS,CAAC,KAAK;AAAA,QAAA;AAI3C,mBAAW,UAAU,QAAQ;AAAA,UAC3B,IAAI;AAAA,UACJ,IAAI;AAAA,QAAA,CACL;AACD;AAAA,MAAA;AAAA,IACF;AAIF,eAAW,YAAY,QAAQ,EAAE,IAAI,qBAAqB;AAEpD,UAAA,uBAAuB,KAAK,KAAK,eAAe;AAC3C,eAAA;AAAA,MACT;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,UAAU,CAAC,EAAE,MAAM,QAAQ,MAAM,GAAI,CAAA;AAAA,MACvC;AAAA,MACA,EAAE,IAAI,qBAAqB;AAAA,IAC7B;AAGW,eAAA,OAAO,QAAQ,oBAAoB;AAAA,EAAA,OACzC;AAEL,UAAM,YAAYA,SAAO,MAAM,QAAQ,OAAO,UAAU,QAAQ,mBAAmB;AAEnF,QAAI,WAAW;AAGb,iBAAW,YAAY,QAAQ,EAAE,MAAM,aAAa,UAAU,CAAC,EAAE,MAAM,QAAQ,MAAM,GAAG,CAAC,GAAG;AAAA,IAAA,OACvF;AAGL,iBAAW,WAAW,MAAM;AAAA,IAAA;AAAA,EAC9B;AAEJ;AAKA,MAAM,sBAAsB,CAAC,QAAgB,WAAoC;AAC/E,QAAM,gBAAgB,kBAAsC,QAAQ,EAAE,MAAM,aAAa;AAEzF,MAAI,CAAC,cAAe;AAEpB,aAAW,UAAU,QAAQ,EAAE,MAAM,QAAQ,QAAQ,UAAU,CAAA,EAAG,GAAG,EAAE,IAAI,eAAe;AAC5F;AAKA,MAAM,kBAAkB,CAAC,WAAmB;AACpC,QAAA,uBAAuBA,SAAO,MAAM,QAAQ;AAAA,IAChD,OAAO,CAAC,SAAS,CAACA,SAAO,SAAS,IAAI,KAAK,KAAK,SAAS;AAAA,EAAA,CAC1D;AAED,MAAI,CAAC,wBAAwB,CAAC,OAAO,WAAW;AAC9C;AAAA,EAAA;AAGI,QAAA,CAAC,iBAAiB,mBAAmB,IAAI;AAC/C,QAAM,CAAC,WAAW,IAAIA,SAAO,OAAO,QAAQ,mBAAmB;AAG/D,MAAI,oBAAoB,YAAY,SAAS,CAAC,EAAG;AAEjD,QAAM,uBAAuB,YAAY,SAAS,UAAU,CAAC,SAAS,SAAS,eAAe;AAC9F,QAAM,eAAe,YAAY,SAAS,uBAAuB,CAAC;AAG9D,MAAA,aAAa,SAAS,QAAQ;AAChC,UAAM,WAAW,YAAY,SAAS,QAAQ,YAAY;AACpD,UAAA,eAAe,aAAa,SAAS;AAE3C,eAAW,UAAU,QAAQ;AAAA,MAC3B,IAAI;AAAA,MACJ,IAAI,SAAS,OAAO,YAAY;AAAA,IAAA,CACjC;AACD;AAAA,EAAA;AAGF,MAAI,CAACA,SAAO,SAAS,WAAW,KAAKM,aAAW,WAAW,GAAG;AAE5D,eAAW,UAAU,QAAQ;AAAA,MAC3B,MAAM;AAAA,MACN,QAAQ,YAAY;AAAA,MACpB,cAAc,YAAY,eAAe,KAAK;AAAA,MAC9C,UAAU,CAAA;AAAA,IAAC,CACZ;AAAA,EAAA;AAEL;AAEA,MAAM,aAAiF;AAAA,EACrF,gBAAgB;AAAA,IACd,eAAe,CAAC,UAAW,oBAAA,MAAA,EAAM,GAAG,OAAO;AAAA,IAC3C,OAAO;AAAA,MACL,IAAI;AAAA,MACJ,gBAAgB;AAAA,IAClB;AAAA,IACA,MAAM;AAAA,IACN,WAAW,CAAC,SAAS,KAAK,SAAS,UAAU,KAAK,WAAW;AAAA,IAC7D,oBAAoB;AAAA,IACpB,eAAe,CAAC,WAAW,oBAAoB,QAAQ,SAAS;AAAA,IAChE,gBAAgB;AAAA,IAChB,oBAAoB;AAAA,IACpB,WAAW;AAAA,IACX,UAAU,CAAC,IAAI;AAAA,EACjB;AAAA,EACA,kBAAkB;AAAA,IAChB,eAAe,CAAC,UAAW,oBAAA,MAAA,EAAM,GAAG,OAAO;AAAA,IAC3C,OAAO;AAAA,MACL,IAAI;AAAA,MACJ,gBAAgB;AAAA,IAClB;AAAA,IACA,MAAM;AAAA,IACN,WAAW,CAAC,SAAS,KAAK,SAAS,UAAU,KAAK,WAAW;AAAA,IAC7D,oBAAoB;AAAA,IACpB,eAAe,CAAC,WAAW,oBAAoB,QAAQ,WAAW;AAAA,IAClE,gBAAgB;AAAA,IAChB,oBAAoB;AAAA,IACpB,WAAW;AAAA,IACX,UAAU,CAAC,KAAK,KAAK,GAAG;AAAA,EAC1B;AAAA,EACA,aAAa;AAAA,IACX,eAAe,CAAC,UACb,oBAAA,YAAA,EAAW,KAAI,MAAM,GAAG,MAAM,YAC5B,UAAA,MAAM,SACT,CAAA;AAAA;AAAA,IAGF,WAAW,CAAC,SAAS,KAAK,SAAS;AAAA,IACnC,oBAAoB;AAAA,IACpB,qBAAqB;AAAA,EAAA;AAEzB;ACrWA,MAAM,kBAAkD;AAAA,EACtD,WAAW;AAAA,IACT,eAAe,CAAC,UACd,oBAAC,YAAW,EAAA,KAAI,KAAI,SAAQ,SAAS,GAAG,MAAM,YAC3C,gBAAM,UACT;AAAA,IAEF,MAAM;AAAA,IACN,OAAO;AAAA,MACL,IAAI;AAAA,MACJ,gBAAgB;AAAA,IAClB;AAAA,IACA,WAAW,CAAC,SAAS,KAAK,SAAS;AAAA,IACnC,oBAAoB;AAAA,IACpB,qBAAqB;AAAA,IACrB,cAAc,QAAQ;AACpB,wBAAsC,QAAQ,EAAE,MAAM,YAAA,CAAa;AAAA,IACrE;AAAA,IACA,eAAe,QAAQ;AACjB,UAAA,CAAC,OAAO,WAAW;AACrB;AAAA,MAAA;AAII,YAAA,4BAA4B,OAAO,UAAU,OAAO;AAK1D,iBAAW,WAAW,QAAQ;AAAA;AAAA;AAAA,QAG5B,QAAQ;AAAA,MAAA,CACT;AAIK,YAAA,mBAAmBN,SAAO,MAAM,QAAQ;AAAA,QAC5C,OAAO,CAAC,SAAS,CAACA,SAAO,SAAS,IAAI,KAAK,KAAK,SAAS;AAAA,MAAA,CAC1D;AACD,UAAI,CAAC,kBAAkB;AACrB;AAAA,MAAA;AAEI,YAAA,CAAA,EAAG,eAAe,IAAI;AAC5B,YAAM,YAAYA,SAAO,MAAM,QAAQ,OAAO,UAAU,QAAQ,eAAe;AASzE,YAAA,CAAC,cAAc,IAAIA,SAAO,OAAO,QAAQ,OAAO,UAAU,OAAO,IAAI;AAC3E,iBAAW,YAAY,MAAM;AAG7B,YAAM,cAAc,OAAO,SAAS,SAAS,0BAA0B,CAAC,IAAI;AAIjE,iBAAA;AAAA,QACT;AAAA,QACA;AAAA,UACE,MAAM;AAAA;AAAA,UAEN,UAAW,YAAY,CAAC,EAAE,MAAM,QAAQ,MAAM,IAAI,IAAI,eAAe;AAAA,QACvE;AAAA,QACA;AAAA,UACE,IAAI,cAAc,CAAC,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,SAAS,MAAM;AAAA,QAAA;AAAA,MAElF;AAOW,iBAAA,OAAO,QAAQ,OAAO,MAAM,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAAC,CAAC;AAAA,IAAA;AAAA,EAC5E;AAEJ;ACnFA,MAAM,aAAa,OAAO,WAAW,MAAM,EAAE,MAAM,cAAc;AAAA,iBAChD,CAAC,EAAE,MAAA,MAAY,MAAM,YAAY,OAAO;AAAA,iBACxC,CAAC,EAAE,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,CAAC,UAAU,MAAM,OAAO,UAAU,EAAE;AAAA,aACxE,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,MAAM,MAAM,OAAO,CAAC,CAAC;AAAA,WAClE,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,UAAU;AAAA;AAGjD,MAAM,cAA0C;AAAA,EAC9C,OAAO;AAAA,IACL,eAAe,CAAC;AAAA;AAAA;AAAA,MAGd,oBAAC,SACC,UAAC,oBAAA,YAAA,EAAY,GAAG,MAAM,YAAa,UAAM,MAAA,SAAS,CAAA,EACpD,CAAA;AAAA;AAAA,IAEF,MAAM;AAAA,IACN,OAAO;AAAA,MACL,IAAI;AAAA,MACJ,gBAAgB;AAAA,IAClB;AAAA,IACA,WAAW,CAAC,SAAS,KAAK,SAAS;AAAA,IACnC,oBAAoB;AAAA,IACpB,cAAc,QAAQ;AACpB,wBAAkC,QAAQ,EAAE,MAAM,QAAA,CAAS;AAAA,IAC7D;AAAA,IACA,eAAe,QAAQ;AACrB,4BAAsB,MAAM;AAAA,IAC9B;AAAA,IACA,UAAU,CAAC,GAAG;AAAA,EAAA;AAElB;ACZA,MAAM,iBAAiB,OAAsB,IAAI;AAAA;AAAA;AAAA,kBAG/B,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,UAAU;AAAA;AAAA;AAIxD,MAAM,YAAY,OAAO,QAAQ,SAAS;AAAA,gBAC1B,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,UAAU;AAAA;AAAA;AAAA;AAKtD,MAAM,aAAa,OAAgC,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAWnC,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,UAAU;AAAA;AAAA;AAAA;AAK1D,MAAM,gBAAgB,OAAqB,GAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAW1B,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBASzC,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,UAAU;AAAA;AAAA;AAAA;AAAA;AASvD,SAAS,qBAAqB;AAC5B,QAAM,CAAC,cAAc,iBAAiB,IAAI,MAAM,SAAmC,IAAI;AAEjF,QAAA,yBAAyB,CAAC,gBAA8D;AAE5F,QAAI,aAAa;AAGG,wBAAA,MAAM,aAAa,YAAe,GAAA,EAAE,KAAK,KAAK,IAAM,EAAA,CAAC,CAAC;AAAA,IAAA;AAAA,EAE5E;AAEO,SAAA,EAAE,cAAc,uBAAuB;AAChD;AAWA,MAAM,gBAAgB,CAAC;AAAA,EACrB,MAAM;AAAA,EACN,MAAAO;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAA0B;AACxB,QAAM,EAAE,OAAA,IAAW,uBAAuB,eAAe;AACnD,QAAA,EAAE,cAAc,IAAI,QAAQ;AAC5B,QAAA,eAAe,cAAc,KAAK;AAElC,QAAA,eAAe,WAAW,eAAe;AAG7C,SAAA,oBAAC,SAAQ,EAAA,aAAa,cACpB,UAAA;AAAA,IAAC,QAAQ;AAAA,IAAR;AAAA,MACC,OAAOA;AAAA,MACP,cAAY,WAAW,OAAO;AAAA,MAC9B,aAAa,CAAC,MAAM;AAClB,UAAE,eAAe;AACL,oBAAA;AACZ,oBAAY,MAAM,MAAM;AAAA,MAC1B;AAAA,MACA,iBAAe;AAAA,MACf;AAAA,MACA,cAAY;AAAA,MACZ,SAAO;AAAA,MAEP,UAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,KAAI;AAAA,UACJ,YAAY,WAAW,eAAe;AAAA,UACtC,YAAW;AAAA,UACX,gBAAe;AAAA,UACf,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,WAAS;AAAA,UAET,UAAC,oBAAA,MAAA,EAAK,MAAM,WAAW,eAAe,aAAc,CAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IACtD;AAAA,EAAA,GAEJ;AAEJ;AAEA,MAAM,iBAAiB,MAAM;AAC3B,QAAM,EAAE,QAAQ,QAAQ,SAAS,IAAI,uBAAuB,gBAAgB;AACtE,QAAA,EAAE,cAAc,IAAI,QAAQ;AAClC,QAAM,EAAE,cAAc,uBAAuB,IAAI,mBAAmB;AAEpE,QAAM,qBAAyC,WAAW,MAAM,EAAE,OAEhE,CAAC,aAAa,UAAU;AAClB,UAAA,CAAC,KAAK,KAAK,IAAI;AAErB,WAAO,MAAM,qBAAqB,CAAC,GAAG,aAAa,GAAG,IAAI;AAAA,EAC5D,GAAG,EAAE;AAEL,QAAM,CAAC,eAAe,gBAAgB,IAAI,MAAM,SAA2B,WAAW;AAEhF,QAAA,eAAe,CAAC,cAAuB;AACvC,QAAA,CAAC,mBAAmB,SAAS,GAAG;AAClC;AAAA,IAAA;AAGI,UAAA,gBACJ,OAAO,SAAS,WAAW,KAAKP,SAAO,QAAQ,QAAQ,OAAO,SAAS,CAAC,CAAC;AAE3E,QAAI,CAAC,OAAO,aAAa,CAAC,eAAe;AAG5B,iBAAA;AAAA,QACT;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,UAAU,CAAC,EAAE,MAAM,QAAQ,MAAM,GAAI,CAAA;AAAA,QACvC;AAAA,QACA;AAAA,UACE,QAAQ;AAAA;AAAA,QAAA;AAAA,MAGZ;AAAA,IACS,WAAA,CAAC,OAAO,aAAa,eAAe;AAGlC,iBAAA,OAAO,QAAQA,SAAO,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;AAAA,IAAA;AAIlD,UAAA,mBAAmBA,SAAO,MAAM,QAAQ;AAAA,MAC5C,OAAO,CAAC,SAAS,CAACA,SAAO,SAAS,IAAI,KAAK,KAAK,SAAS;AAAA,IAAA,CAC1D;AAED,QAAI,oBAAoB,CAAC,gBAAgB,gBAAgB,EAAE,SAAS,SAAS,GAAG;AACxE,YAAA,CAAC,aAAa,eAAe,IAAI;AACjC,YAAA,SAAS,cAAc,iBAAiB,YAAY;AAE1D,UAAI,CAACA,SAAO,SAAS,WAAW,KAAK,WAAW,WAAW,GAAG;AAExD,YAAA,YAAY,WAAW,QAAQ;AACtB,qBAAA,SAAS,QAAQ,EAAE,OAAA,GAAU,EAAE,IAAI,iBAAiB;AAAA,QAAA;AAAA,MACjE;AAEF;AAAA,IAAA;AAIF,UAAM,mBAAmB,OAAO,SAAS,EAAE,gBAAgB,MAAM;AACjE,2BAAuB,gBAAgB;AAEvC,qBAAiB,SAAS;AAE1B,gBAAY,MAAM,MAAM;AAAA,EAC1B;AAUA,QAAM,qBAAqB,CAAC,MAAa,EAAE,eAAe;AAG1D,QAAM,UAAU,MAAM;AACpB,QAAI,OAAO,WAAW;AAChB,UAAA;AAGE,YAAA,mBAAmBA,SAAO,MAAM,QAAQ;AAAA,QAC5C,OAAO,CAAC,SAAS,CAACA,SAAO,SAAS,IAAI,KAAK,KAAK,SAAS;AAAA,QACzD,IAAI,OAAO,UAAU;AAAA,MAAA,CACtB;AAED,UAAI,kBAAkB;AACd,cAAA,CAAC,WAAW,IAAI;AACP,uBAAA;AAAA,MAAA,OACV;AAEC,cAAA,CAAC,UAAU,IAAIA,SAAO,OAAO,QAAQ,OAAO,UAAU,QAAQ;AAAA,UAClE,MAAM;AAAA,UACN,OAAO;AAAA,QAAA,CACR;AAGG,YAAA,WAAW,SAAS,aAAa;AAKnC,qBAAW,SAAS,QAAQ,EAAE,MAAM,aAAa;AAEjD,yBAAe,EAAE,GAAG,YAAY,MAAM,YAAY;AAAA,QAAA,OAC7C;AACU,yBAAA;AAAA,QAAA;AAAA,MACjB;AAII,YAAA,iBAAiB,QAAQ,MAAM,EAAE;AAAA,QACrC,CAAC,aAAa,CAACA,SAAO,SAAS,YAAY,KAAK,OAAO,QAAQ,EAAE,UAAU,YAAY;AAAA,MACzF;AAGI,UAAA,kBAAkB,mBAAmB,eAAe;AACtD,yBAAiB,cAAkC;AAAA,MAAA;AAAA,IACrD;AAAA,EACF,GACC,CAAC,OAAO,WAAW,QAAQ,QAAQ,aAAa,CAAC;AAE9C,QAAA,OAAO,OAAO,aAAa,EAAE;AAEnC,SAEI,qBAAA,UAAA,EAAA,UAAA;AAAA,IAAA,oBAAC,eACC,EAAA,UAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,+BAAY,MAAK,EAAA;AAAA,QACjB,UAAU;AAAA,QACV,aAAa,cAAc,OAAO,aAAa,EAAE,KAAK;AAAA,QACtD,OAAO;AAAA,QACP,kBAAkB;AAAA,QAClB,cAAY,cAAc;AAAA,UACxB,IAAI;AAAA,UACJ,gBAAgB;AAAA,QAAA,CACjB;AAAA,QACD;AAAA,QAEC,UAAA,mBAAmB,IAAI,CAAC,QACvB;AAAA,UAAC;AAAA,UAAA;AAAA,YAEC,OAAO;AAAA,YACP,OAAO,OAAO,GAAG,EAAE;AAAA,YACnB,MAAM,OAAO,GAAG,EAAE;AAAA,YAClB;AAAA,UAAA;AAAA,UAJK;AAAA,QAMR,CAAA;AAAA,MAAA;AAAA,IAAA,GAEL;AAAA,IACC;AAAA,EAAA,GACH;AAEJ;AASA,MAAM,cAAc,CAAC,EAAE,OAAO,MAAM,MAAM,OAAO,oBAAsC;AAC/E,QAAA,EAAE,cAAc,IAAI,QAAQ;AAElC,QAAM,aAAa,UAAU;AAG3B,SAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAY,oBAAA,MAAA,EAAK,MAAM,aAAa,eAAe,cAAc;AAAA,MACjE;AAAA,MAEC,wBAAc,KAAK;AAAA,IAAA;AAAA,EACtB;AAEJ;AAEA,MAAM,aAAa,CAAC,SAAyC;AACpD,SAAA,KAAK,OAAO,IAAI,KAAK,CAACA,SAAO,SAAS,IAAI,KAAK,KAAK,SAAS;AACtE;AAOA,MAAM,aAAa,CAAC,EAAE,OAAO,aAA8B;AACzD,QAAM,EAAE,QAAQ,UAAU,OAAO,IAAI,uBAAuB,YAAY;AAExE,QAAM,eAAe,MAAM;AACrB,QAAA,CAAC,OAAO,UAAkB,QAAA;AAGxB,UAAA,mBAAmBA,SAAO,MAAM,QAAQ;AAAA,MAC5C,OAAO,CAAC,SAAS,CAACA,SAAO,SAAS,IAAI,KAAK,KAAK,SAAS;AAAA,MACzD,IAAI,OAAO,UAAU;AAAA,IAAA,CACtB;AAED,QAAI,kBAAkB;AACd,YAAA,CAAC,WAAW,IAAI;AAClB,UAAA,CAACA,SAAO,SAAS,WAAW,KAAK,WAAW,WAAW,KAAK,YAAY,WAAW;AAC9E,eAAA;AAAA,IAAA;AAEJ,WAAA;AAAA,EACT;AAMA,QAAM,iBAAiB,MAAM;AAE3B,QAAI,UAAU;AACL,aAAA;AAAA,IAAA;AAIL,QAAA,CAAC,OAAO,WAAW;AACd,aAAA;AAAA,IAAA;AAIH,UAAA,kBAAkBA,SAAO,MAAM,QAAQ;AAAA,MAC3C,IAAI,OAAO,UAAU;AAAA,MACrB,OAAO,CAAC,SAAS,CAACA,SAAO,SAAS,IAAI,KAAK,KAAK,SAAS;AAAA,IAAA,CAC1D;AACK,UAAA,iBAAiBA,SAAO,MAAM,QAAQ;AAAA,MAC1C,IAAI,OAAO,UAAU;AAAA,MACrB,OAAO,CAAC,SAAS,CAACA,SAAO,SAAS,IAAI,KAAK,KAAK,SAAS;AAAA,IAAA,CAC1D;AAEG,QAAA,CAAC,mBAAmB,CAAC,gBAAgB;AAChC,aAAA;AAAA,IAAA;AAIT,WAAO,gBAAgB,CAAC,MAAM,eAAe,CAAC;AAAA,EAChD;AAEM,QAAA,aAAa,CAACQ,YAAoC;AAClD,QAAA;AACJ,QAAI,OAAO,WAAW;AACD,yBAAAR,SAAO,MAAM,QAAQ;AAAA,QACtC,OAAO,CAAC,SAAS,CAACA,SAAO,SAAS,IAAI,KAAK,KAAK,SAAS;AAAA,MAAA,CAC1D;AAAA,IAAA,OACI;AAEC,YAAA,CAAC,GAAG,YAAY,IAAIA,SAAO,KAAK,QAAQ,EAAE;AAC7B,yBAAAA,SAAO,MAAM,QAAQ;AAAA,QACtC,OAAO,CAAC,SAAS,CAACA,SAAO,SAAS,IAAI,KAAK,KAAK,SAAS;AAAA,QACzD,IAAI;AAAA,MAAA,CACL;AAAA,IAAA;AAGH,QAAI,CAAC,kBAAkB;AAErB,aAAO,QAAQQ,OAAM,EAAE,EAAE,cAAe,MAAM;AAC9C;AAAA,IAAA;AAII,UAAA,CAAC,aAAa,eAAe,IAAI;AAEvC,QAAI,CAACR,SAAO,SAAS,WAAW,KAAK,WAAW,WAAW,GAAG;AACxD,UAAA,YAAY,WAAWQ,SAAQ;AAEtB,mBAAA,SAAS,QAAQ,EAAE,QAAAA,WAAU,EAAE,IAAI,iBAAiB;AAAA,MAAA,OAC1D;AAEE,eAAA,WAAW,EAAE,cAAe,MAAM;AAAA,MAAA;AAAA,IAC3C;AAAA,EAEJ;AAGE,SAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAM,MAAM;AAAA,MACZ,MAAM;AAAA,MACN,OAAO,MAAM;AAAA,MACb,UAAU,aAAa;AAAA,MACvB,UAAU,eAAe;AAAA,MACzB,aAAa,MAAM,WAAW,MAAM;AAAA,IAAA;AAAA,EACtC;AAEJ;AAEA,MAAM,aAAa,CAAC,EAAE,eAAsC;AAC1D,QAAM,EAAE,OAAA,IAAW,uBAAuB,YAAY;AAEtD,QAAM,eAAe,MAAM;AACnB,UAAA,EAAE,cAAc;AAElB,QAAA,CAAC,UAAkB,QAAA;AAEjB,UAAA,CAAC,KAAK,IAAI,MAAM;AAAA,MACpBR,SAAO,MAAM,QAAQ;AAAA,QACnB,IAAIA,SAAO,YAAY,QAAQ,SAAS;AAAA,QACxC,OAAO,CAAC,SAASK,QAAa,UAAU,IAAI,KAAK,KAAK,SAAS;AAAA,MAChE,CAAA;AAAA,IACH;AAEA,WAAO,QAAQ,KAAK;AAAA,EACtB;AAEA,QAAM,iBAAiB,MAAM;AAE3B,QAAI,UAAU;AACL,aAAA;AAAA,IAAA;AAIL,QAAA,CAAC,OAAO,WAAW;AACd,aAAA;AAAA,IAAA;AAIH,UAAA,kBAAkBL,SAAO,MAAM,QAAQ;AAAA,MAC3C,IAAI,OAAO,UAAU;AAAA,MACrB,OAAO,CAAC,SAAS,CAACA,SAAO,SAAS,IAAI,KAAK,KAAK,SAAS;AAAA,IAAA,CAC1D;AACK,UAAA,iBAAiBA,SAAO,MAAM,QAAQ;AAAA,MAC1C,IAAI,OAAO,UAAU;AAAA,MACrB,OAAO,CAAC,SAAS,CAACA,SAAO,SAAS,IAAI,KAAK,KAAK,SAAS;AAAA,IAAA,CAC1D;AAEG,QAAA,CAAC,mBAAmB,CAAC,gBAAgB;AAChC,aAAA;AAAA,IAAA;AAIT,WAAO,gBAAgB,CAAC,MAAM,eAAe,CAAC;AAAA,EAChD;AAEA,QAAM,UAAU,MAAM;AACpB,WAAO,qBAAqB;AAE5B,eAAW,QAAQ,EAAE,KAAK,GAAA,CAAI;AAAA,EAChC;AAGE,SAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAMS;AAAAA,MACN,MAAK;AAAA,MACL,OAAO;AAAA,QACL,IAAI;AAAA,QACJ,gBAAgB;AAAA,MAClB;AAAA,MACA,UAAU,aAAa;AAAA,MACvB,aAAa;AAAA,MACb,UAAU,eAAe;AAAA,IAAA;AAAA,EAC3B;AAEJ;AAEA,MAAM,gBAAgB,MAAM;AAC1B,QAAM,EAAE,QAAQ,QAAQ,WAAAC,YAAW,SAAS,IAAI,uBAAuB,eAAe;AAKtF,QAAM,sBAAsB,MAAM;AAEhC,QAAI,UAAU;AACL,aAAA;AAAA,IAAA;AAGL,QAAA,CAAC,OAAO,WAAW;AACd,aAAA;AAAA,IAAA;AAGH,UAAA,eAAe,OAAO,SAAS,OAAO,UAAU,OAAO,KAAK,CAAC,CAAC;AAEpE,QAAI,CAAC,SAAS,MAAM,EAAE,SAAS,aAAa,IAAI,GAAG;AAC1C,aAAA;AAAA,IAAA;AAGF,WAAA;AAAA,EACT;AAEA,QAAM,mBAAmB,oBAAoB;AAE7C,SACG,oBAAA,QAAQ,MAAR,EAAa,iBAAe,UAAU,SAAO,MAC5C,UAAA,qBAAC,kBAAe,KAAK,GAAG,SAAS,GAAG,OAAM,QACxC,UAAA;AAAA,IAAA,oBAAC,gBAAe,EAAA;AAAA,wBACf,WAAU,EAAA;AAAA,IACX,oBAAC,QAAQ,aAAR,EAAoB,MAAK,YAAW,SAAO,MAC1C,UAAA,qBAAC,MAAK,EAAA,KAAK,GACR,UAAA;AAAA,MAAO,OAAA,QAAQA,UAAS,EAAE,IAAI,CAAC,CAACH,OAAM,QAAQ,MAC7C;AAAA,QAAC;AAAA,QAAA;AAAA,UAEC,MAAAA;AAAA,UACA,MAAM,SAAS;AAAA,UACf,OAAO,SAAS;AAAA,UAChB,UAAU,SAAS,cAAc,MAAM;AAAA,UACvC,aAAa,MAAM,SAAS,aAAa,MAAM;AAAA,UAC/C,UAAU;AAAA,QAAA;AAAA,QANLA;AAAA,MAAA,CAQR;AAAA,MACD,oBAAC,YAAW,EAAA,UAAU,iBAAkB,CAAA;AAAA,IAAA,EAAA,CAC1C,EACF,CAAA;AAAA,wBACC,WAAU,EAAA;AAAA,IACX,oBAAC,QAAQ,aAAR,EAAoB,MAAK,UAAS,SAAO,MACxC,UAAA,qBAAC,MAAK,EAAA,KAAK,GACT,UAAA;AAAA,MAAA,oBAAC,cAAW,OAAO,OAAO,gBAAgB,GAAG,QAAO,aAAY;AAAA,0BAC/D,YAAW,EAAA,OAAO,OAAO,cAAc,GAAG,QAAO,UAAU,CAAA;AAAA,IAAA,EAAA,CAC9D,EACF,CAAA;AAAA,EAAA,EAAA,CACF,EACF,CAAA;AAEJ;AChiBA,MAAM,iBAAiB,OAAO,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,SAK7B,CAAC,EAAE,YAAY,MAAM,OAAO,CAAC,CAAC;AAAA;AAAA;AAAA,WAG5B,CAAC,UAAW,MAAM,iBAAiB,UAAU,MAAO;AAAA;AAAA;AAAA;AAAA,sBAIzC,CAAC,EAAE,YAAY,MAAM,OAAO,CAAC,CAAC;AAAA;AAAA;AAIpD,MAAMI,YAAU,OAAqB,GAAG;AAAA,cAC1B,CAAC,EAAE,uBAAuB,oBAAoB,UAAU;AAAA;AAKtE,MAAM,kBAAkB,OAAqB,GAAG;AAAA;AAAA;AAAA;AAAA;AAAA,IAQ5C,CAAC,EAAE,eAAe,OAAO,kBAAwB,MAAA;AAAA,WAC1C,kBAAkB,WAAW,UAAU,IAAI,MAAM,OAAO,iBAAiB,CAAC,EAAE;AAAA,cACzE,kBAAkB,WAAW,YAAY,IAAI,MAAM,OAAO,iBAAiB,CAAC,EAAE;AAAA,GACzF;AAAA;AAGH,MAAM,WAAW,OAAsB,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBASzB,CAAC,UAAU,MAAM,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQlD,MAAM,iBAAiB,OAAmC,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAQjD,CAAC,EAAE,YAAY,MAAM,YAAY;AAAA,kBAClC,CAAC,EAAE,YAAY,MAAM,OAAO,CAAC,CAAC;AAAA,mBAC7B,CAAC,EAAE,YAAY,MAAM,OAAO,CAAC,CAAC;AAAA,iBAChC,CAAC,EAAE,YAAY,MAAM,OAAO,CAAC,CAAC;AAAA,oBAC3B,CAAC,EAAE,YAAY,MAAM,OAAO,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA,gBAIlC,CAAC,UAAU,MAAM,wBAAwB,CAAC;AAAA;AAAA;AAAA,kBAGxC,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,UAAU;AAAA;AAAA;AAAA;AAAA,kBAItC,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAMvC,CAAC,EAAE,YAAY,MAAM,OAAO,CAAC,CAAC;AAAA;AAAA;AAAA,cAGjC,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,UAAU;AAAA;AAAA;AAAA;AAgBpD,MAAM,qBAAqB,CAAC;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAA+B;AACvB,QAAA,EAAE,QAAQ,UAAU,MAAAJ,OAAM,YAAY,IAAI,uBAAuB,eAAe;AAChF,QAAA,EAAE,cAAc,IAAI,QAAQ;AAClC,QAAM,CAAC,gBAAgB,iBAAiB,IAAI,MAAM,SAAsC,QAAQ;AAEhG,QAAM,kBAAkB,MAAM;AAAA,IAC5B,CAAC,UAAyB,iBAAgC;AACxD,iBAAW,UAAU,QAAQ;AAAA,QAC3B,IAAI;AAAA,QACJ,IAAI;AAAA,MAAA,CACL;AAGK,YAAA,uBAAuB,CAAC,aAAa,CAAC,IAAI,GAAG,GAAG,aAAa,MAAM,CAAC,CAAC;AACrE,YAAA,mBAAmB,CAAC,SAAS,CAAC,IAAI,GAAG,GAAG,SAAS,MAAM,CAAC,CAAC;AAE/D;AAAA,QACE;AAAA,UACE;AAAA,YACE,IAAI,eAAe,+BAA+B;AAAA,YAClD,gBAAgB;AAAA,UAClB;AAAA,UACA;AAAA,YACE,MAAM,GAAGA,KAAI,IAAI,qBAAqB,KAAK,GAAG,CAAC;AAAA,YAC/C,UAAU,GAAG,iBAAiB,KAAK,GAAG,CAAC,OAAO,OAAO,SAAS,MAAM;AAAA,UAAA;AAAA,QACtE;AAAA,MAEJ;AAAA,IACF;AAAA,IACA,CAAC,QAAQ,eAAeA,OAAM,WAAW;AAAA,EAC3C;AAEA,QAAM,CAAC,EAAE,WAAW,YAAY,kBAAkB,UAAA,GAAa,UAAU,SAAS,OAAO,IACvF,eAAe,CAAC,UAAU;AAAA,IACxB,MAAM,GAAG,UAAU,MAAM,IAAIA,KAAI;AAAA,IACjC;AAAA,IACA,MAAM;AAAA,MACJ;AAAA,MACA,gBAAgB;AAAA,IAClB;AAAA,IACA,WAAW,cAAc,UAAU;AAC7B,UAAA,SAA0B,iBAAA,UAAU,YAAY;AAAA,IAAA;AAAA,EACtD,CACD;AAEG,QAAA,kBAAkB,gBAAgB,UAAU,OAAO;AAGzD,QAAM,UAAU,MAAM;AACpB,QAAI,WAAW;AACb,uBAAiB,SAAS;AAAA,IAAA;AAAA,EAC5B,GACC,CAAC,WAAW,gBAAgB,CAAC;AAGhC,QAAM,UAAU,MAAM;AACpB,sBAAkB,QAAQ;AAAA,EAAA,GACzB,CAAC,OAAO,SAAS,CAAC;AAErB,SACG,qBAAAI,WAAA,EAAQ,KAAK,iBAAiB,kBAC5B,UAAA;AAAA,IACC,oBAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,aAAY;AAAA,QACZ,aAAY;AAAA,QACZ,aAAY;AAAA,QACZ,OAAM;AAAA,QACN,YAAW;AAAA,QACX;AAAA,QAEA,mBAAmB,SAAS,MAAM,MAAM,SAAS,MAAM,OAAO,OAAO,IAAI;AAAA,MAAA;AAAA,IAC3E;AAAA,IAED,aACC,oBAAC,eAAc,EAAA,qBAA2C,SAAS,CAAA,IAEnE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAK;AAAA,QACL,mBAAiB;AAAA,QACjB,KAAK;AAAA,QACL,aAAa;AAAA,QACb,YAAW;AAAA,QACX,aAAa,CAAC,UAAU;AACtB,gBAAM,SAAS,MAAM;AACrB,gBAAM,gBAAgB,MAAM;AAG5B,cAAI,OAAO,aAAa,MAAM,MAAM,UAAU;AAC5C,kBAAM,eAAe;AAAA,UAAA,OAChB;AAEL,0BAAc,MAAM,UAAU;AAAA,UAAA;AAAA,QAElC;AAAA,QACA,WAAW,CAAC,UAAU;AACpB,gBAAM,gBAAgB,MAAM;AAC5B,wBAAc,MAAM,UAAU;AAAA,QAChC;AAAA,QACA,aAAa,MAAM,kBAAkB,SAAS;AAAA,QAC9C,UAAU,MAAM,kBAAkB,SAAS;AAAA,QAC3C,cAAc,MAAM,kBAAkB,QAAQ;AAAA,QAC9C,iBAAe;AAAA,QACf,iBAAiB;AAAA,QAEjB,UAAA;AAAA,UAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,KAAI;AAAA,cACJ,iBAAiB;AAAA,cACjB,MAAK;AAAA,cACL,UAAU;AAAA,cACV,aAAa;AAAA,cACb,OAAO,cAAc;AAAA,gBACnB,IAAI,eAAe,6BAA6B;AAAA,gBAChD,gBAAgB;AAAA,cAAA,CACjB;AAAA,cACD,SAAS,CAAC,MAAM,EAAE,gBAAgB;AAAA,cAClC,iBAAe;AAAA,cACf;AAAA,cACA,WAAS;AAAA,cAET,sBAAsB;AAAA,cAEtB,UAAA,oBAAC,MAAK,EAAA,OAAM,aAAa,CAAA;AAAA,YAAA;AAAA,UAC3B;AAAA,UACC;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EACH,GAEJ;AAEJ;AAQA,MAAM,gBAAgB,CAAC,EAAE,UAAU,0BAA8C;AACzE,QAAA,EAAE,cAAc,IAAI,QAAQ;AAGhC,SAAA,qBAAC,YAAS,KAAK,GAAG,aAAa,GAAG,YAAW,SAAQ,iBAAgB,WACnE,UAAA;AAAA,IAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAI;AAAA,QACJ,MAAK;AAAA,QACL,aAAa;AAAA,QACb,OAAO,cAAc;AAAA,UACnB,IAAI,eAAe,6BAA6B;AAAA,UAChD,gBAAgB;AAAA,QAAA,CACjB;AAAA,QACD,sBAAsB;AAAA,QAEtB,UAAA,oBAAC,MAAK,EAAA,OAAM,aAAa,CAAA;AAAA,MAAA;AAAA,IAC3B;AAAA,IACC;AAAA,EAAA,GACH;AAEJ;AAMA,MAAM,iBAAiB,CAAC,OAAgCD,eAA8B;AAEpF,QAAM,kBAAkB,WAAWA,UAAS,EAAE,OAAO,CAAC,iBAAiB,kBAAkB;AACjF,UAAA,CAACH,OAAM,QAAQ,IAAI;AAErB,QAAA,MAAM,KAAKA,KAAI,GAAG;AACb,aAAA,SAAS,WAAW,eAAe;AAAA,IAAA;AAGrC,WAAA;AAAA,EAAA,GACN,MAAM,QAAQ;AAGf,SAAA,oBAAC,UAAM,GAAG,MAAM,YAAY,WAAW,MAAM,KAAK,WAC/C,UACH,gBAAA,CAAA;AAEJ;AAQA,MAAM,oBAAoB,CAAC;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAA8B;AACtB,QAAA,EAAE,YAAY;AAEd,QAAA,aAAa,OAAO,OAAO,MAAM,EAAE,KAAK,CAACK,WAAUA,OAAM,UAAU,OAAO,CAAC;AAC3E,QAAA,QAAQ,cAAc,OAAO;AACnC,QAAM,WAAW,YAAY,SAAS,QAAQ,OAAO;AAIrD,MACE,WAAW,OAAO,KACjBN,aAAW,OAAO,KAAK,QAAQ,eAAe,QAAQ,cAAc,KACrE,QAAQ,SAAS,aACjB;AACO,WAAA,MAAM,cAAc,KAAK;AAAA,EAAA;AAIhC,SAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAO;AAAA,MACP;AAAA,MACA;AAAA,MACA,qBAAqB,MAAM;AAAA,MAE1B,UAAA,MAAM,cAAc,KAAK;AAAA,IAAA;AAAA,EAC5B;AAEJ;AAOA,MAAM,gBAAgB,CAAC,EAAE,aAAa,kBAAsC;AACpE,QAAA,EAAE,QAAQ,UAAU,QAAQ,WAAAI,YAAW,aAAa,eAAA,IACxD,uBAAuB,eAAe;AAClC,QAAA,YAAY,MAAM,OAAuB,IAAI;AAC7C,QAAA,EAAE,cAAc,IAAI,QAAQ;AAClC,QAAM,CAAC,eAAe,gBAAgB,IAAI,MAAM,SAA+B,IAAI;AACnF,QAAM,EAAE,cAAc,uBAAuB,IAAI,mBAAmB;AAGpE,QAAM,aAAa,MAAM;AAAA,IACvB,CAAC,UAAmC,eAAe,OAAOA,UAAS;AAAA,IACnE,CAACA,UAAS;AAAA,EACZ;AAEM,QAAA,mBAAmB,CAACG,SAAgB,UAA4C;AAChF,QAAA,CAACA,QAAO,UAAW;AAEvB,UAAM,QAAQ,MAAM,MAAMA,QAAO,SAAS;AAC1C,UAAM,eAAe,CAAC,MAAM,KAAK,CAAC,CAAC;AACnC,QAAI,mBAAmB;AAEnB,QAAA,MAAM,QAAQ,WAAW;AACR,yBAAA,aAAa,CAAC,IAAI,IAAI,aAAa,CAAC,IAAI,IAAI,aAAa,CAAC;AAAA,IAAA,OACxE;AACL,yBACE,aAAa,CAAC,IAAIA,QAAO,SAAS,SAAS,IAAI,aAAa,CAAC,IAAI,IAAI,aAAa,CAAC;AAAA,IAAA;AAGjF,UAAA,WAAW,CAAC,gBAAgB;AAE9B,QAAA,qBAAqB,aAAa,CAAC,GAAG;AACxC,iBAAW,UAAUA,SAAQ;AAAA,QAC3B,IAAI;AAAA,QACJ,IAAI;AAAA,MAAA,CACL;AAED;AAAA,QACE;AAAA,UACE;AAAA,YACE,IAAI,eAAe,+BAA+B;AAAA,YAClD,gBAAgB;AAAA,UAClB;AAAA,UACA;AAAA,YACE,MAAM,GAAG,IAAI,IAAI,aAAa,CAAC,IAAI,CAAC;AAAA,YACpC,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC,OAAOA,QAAO,SAAS,MAAM;AAAA,UAAA;AAAA,QAC3D;AAAA,MAEJ;AAEA,YAAM,eAAe;AAAA,IAAA;AAAA,EAEzB;AAGA,QAAM,gBAAgB,MAAM;AAAA,IAC1B,CAAC,UACC,kBAAkB,EAAE,OAAO,QAAQ,QAAQ,eAAe,kBAAkB;AAAA,IAC9E,CAAC,QAAQ,QAAQ,eAAe,gBAAgB;AAAA,EAClD;AAEM,QAAA,eAAe,CAAC,UAA4C;AAE5D,QAAA,CAAC,OAAO,WAAW;AACrB;AAAA,IAAA;AAGI,UAAA,CAAC,UAAU,YAAY,IAAIb,SAAO,KAAK,QAAQ,OAAO,UAAU,OAAO,IAAI;AAGjF,QAAIA,SAAO,SAAS,QAAQ,KAAK,SAAS,SAAS,QAAQ;AACzD;AAAA,IAAA;AAIF,QAAI,aAAa,GAAG,EAAE,MAAM,GAAG;AAC7B;AAAA,IAAA;AAIF,UAAM,uBAAuB,OAAO,OAAO,MAAM,EAAE,KAAK,CAAC,UAAU;AACjE,aAAO,MAAM,UAAU,SAAS,SAAS,IAAI;AAAA,IAAA,CAC9C;AAED,QAAI,sBAAsB,eAAe;AAEvC,YAAM,eAAe;AACrB,iBAAW,OAAO,QAAQ;AAAA,QACxB,UAAU,SAAS,KAAK;AAAA,QACxB,MAAM;AAAA,QACN,SAAS;AAAA,MAAA,CACV;AAGK,YAAA,mBAAmB,qBAAqB,cAAc,MAAM;AAClE,6BAAuB,gBAAgB;AAAA,IAAA;AAAA,EAE3C;AAEM,QAAA,cAAc,CAAC,UAA4C;AAC3D,QAAA,CAAC,OAAO,WAAW;AACrB;AAAA,IAAA;AAGI,UAAA,eAAe,OAAO,SAAS,OAAO,UAAU,OAAO,KAAK,CAAC,CAAC;AAC9D,UAAA,gBAAgB,OAAO,OAAO,MAAM,EAAE,KAAK,CAAC,UAAU,MAAM,UAAU,YAAY,CAAC;AACzF,QAAI,CAAC,eAAe;AAClB;AAAA,IAAA;AAIF,QAAI,MAAM,YAAY,aAAa,SAAS,SAAS;AACxC,iBAAA,WAAW,QAAQ,IAAI;AAClC;AAAA,IAAA;AAIF,QAAI,cAAc,gBAAgB;AAChC,oBAAc,eAAe,MAAM;AAAA,IAAA,OAC9B;AACE,aAAA,UAAU,eAAgB,MAAM;AAAA,IAAA;AAAA,EAE3C;AAEM,QAAA,uBAAuB,CAAC,UAA4C;AACpE,QAAA,CAAC,OAAO,WAAW;AACrB;AAAA,IAAA;AAGI,UAAA,eAAe,OAAO,SAAS,OAAO,UAAU,OAAO,KAAK,CAAC,CAAC;AAC9D,UAAA,gBAAgB,OAAO,OAAO,MAAM,EAAE,KAAK,CAAC,UAAU,MAAM,UAAU,YAAY,CAAC;AAEzF,QAAI,CAAC,eAAe;AAClB;AAAA,IAAA;AAGF,QAAI,cAAc,oBAAoB;AACtB,oBAAA,mBAAmB,QAAQ,KAAK;AAAA,IAAA;AAAA,EAElD;AAEM,QAAA,YAAY,CAAC,UAA4C;AACzD,QAAA,CAAC,OAAO,WAAW;AACrB;AAAA,IAAA;AAGI,UAAA,eAAe,OAAO,SAAS,OAAO,UAAU,OAAO,KAAK,CAAC,CAAC;AAC9D,UAAA,gBAAgB,OAAO,OAAO,MAAM,EAAE,KAAK,CAAC,UAAU,MAAM,UAAU,YAAY,CAAC;AACzF,QAAI,CAAC,eAAe;AAClB;AAAA,IAAA;AAGF,QAAI,cAAc,WAAW;AAC3B,YAAM,eAAe;AACrB,oBAAc,UAAU,MAAM;AAAA,IAAA;AAAA,EAElC;AAEM,QAAA,0BAA0B,CAAC,UAA4C;AACrE,UAAA,cAAc,MAAM,WAAW,MAAM;AAE3C,QAAI,aAAa;AAEf,aAAO,OAAOU,UAAS,EAAE,QAAQ,CAAC,UAAU;AACtC,YAAA,MAAM,gBAAgB,KAAK,GAAG;AAChC,gBAAM,aAAa,MAAM;AACzB;AAAA,QAAA;AAAA,MACF,CACD;AACG,UAAA,MAAM,YAAY,CAAC,WAAW,WAAW,EAAE,SAAS,MAAM,GAAG,GAAG;AAClE,yBAAiB,QAAQ,KAAK;AAAA,MAAA;AAAA,IAChC;AAAA,EAEJ;AAEM,QAAA,gBAAyD,CAAC,UAAU;AAExE,YAAQ,MAAM,KAAK;AAAA,MACjB,KAAK;AACH,cAAM,eAAe;AACrB,eAAO,YAAY,KAAK;AAAA,MAC1B,KAAK;AACH,eAAO,qBAAqB,KAAK;AAAA,MACnC,KAAK;AACH,eAAO,UAAU,KAAK;AAAA,MACxB,KAAK;AACI,eAAA,YAAY,KAAK,MAAM;AAAA,IAAA;AAGlC,4BAAwB,KAAK;AAGzB,QAAA,MAAM,QAAQ,KAAK;AACrB,mBAAa,KAAK;AAAA,IAAA;AAAA,EAEtB;AAQA,QAAM,gCAAgC,MAAM;AACtC,QAAA,CAAC,OAAO,UAAW;AACvB,UAAM,WAAW,YAAY,WAAW,QAAQ,OAAO,SAAS;AAC1D,UAAA,UAAU,SAAS,sBAAsB;AAC/C,UAAM,cAAc,UAAU;AAE9B,QAAI,CAAC,aAAa;AAChB;AAAA,IAAA;AAGI,UAAA,aAAa,YAAY,sBAAsB;AAGrD,QAAI,QAAQ,MAAM,WAAW,OAAO,QAAQ,SAAS,WAAW,QAAQ;AAEtE,kBAAY,SAAS;AAAA,QACnB,KAAK;AAAA;AAAA,QACL,UAAU;AAAA,MAAA,CACX;AAAA,IAAA;AAAA,EAEL;AAGE,SAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAK;AAAA,MACL,MAAM;AAAA,MACN,OAAM;AAAA,MACN,UAAS;AAAA,MACT,UAAU;AAAA,MACV,YAAW;AAAA,MACX,OAAM;AAAA,MACN,YAAY;AAAA,MACZ,cAAc;AAAA,MACd,YAAY;AAAA,MACZ,eAAe;AAAA,MAEf,UAAA;AAAA,QAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,mBAAiB;AAAA,YACjB,UAAU;AAAA,YACV;AAAA,YACA;AAAA,YACA,UAAU;AAAA,YACV;AAAA,YACA;AAAA,YACA,WAAW;AAAA,YACX,yBAAyB;AAAA,YAEzB,QAAQ,MAAM;AACL,qBAAA;AAAA,YACT;AAAA,YACA,aAAa,MAAM;AACV,qBAAA;AAAA,YAAA;AAAA,UACT;AAAA,QACF;AAAA,QACC;AAAA,MAAA;AAAA,IAAA;AAAA,EACH;AAEJ;ACjmBA,MAAM,qBAAqB,OAAO,UAAU;AAAA;AAAA;AAAA;AAAA;AAM5C,MAAMI,kBAAgB,OAAsB,IAAI;AAAA;AAAA,gBAEhC,CAAC,EAAE,MAAM,MAAM,GAAG,MAAM,OAAO,UAAU,IAAI;AAAA;AAW7D,MAAMC,iBAAe,CAAC;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAyB;AACjB,QAAA,EAAE,cAAc,IAAI,QAAQ;AAClC,QAAM,EAAE,eAAA,IAAmB,uBAAuB,cAAc;AAEhE,QAAM,UAAU,MAAM;AACpB,QAAI,gBAAgB;AACT,eAAA,KAAK,UAAU,IAAI,kBAAkB;AAAA,IAAA;AAGhD,WAAO,MAAM;AACF,eAAA,KAAK,UAAU,OAAO,kBAAkB;AAAA,IACnD;AAAA,EAAA,GACC,CAAC,cAAc,CAAC;AAEnB,MAAI,gBAAgB;AAEhB,WAAA,oBAAC,UAAO,MAAK,UAAS,cAAY,OAChC,UAAA,oBAAC,WAAU,EAAA,UAAU,YACnB,UAAA;AAAA,MAACD;AAAAA,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,UAAA;AAAA,UAAC;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,YAClC,oBAAkB;AAAA,YAClB,UAAS;AAAA,YAET,+BAAC,MAAK,EAAA,QAAO,QAAO,YAAW,cAAa,WAAU,UACnD,UAAA;AAAA,cAAA;AAAA,cACD;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,OAAO,cAAc;AAAA,oBACnB,IAAI,eAAe,4BAA4B;AAAA,oBAC/C,gBAAgB;AAAA,kBAAA,CACjB;AAAA,kBACD,SAAS;AAAA,kBAET,8BAAC,UAAS,CAAA,CAAA;AAAA,gBAAA;AAAA,cAAA;AAAA,YACZ,EACF,CAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MACF;AAAA,OAEJ,EACF,CAAA;AAAA,EAAA;AAKF,SAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,YAAW;AAAA,MACX,QAAO;AAAA,MACP,WAAW;AAAA,MACX,WAAW,QAAQ,KAAK;AAAA,MACxB,OAAO,EAAE,UAAU,SAAS;AAAA,MAC5B,oBAAkB;AAAA,MAClB,UAAS;AAAA,MAER;AAAA,IAAA;AAAA,EACH;AAEJ;AAEA,MAAM,eAAe,OAAsB,IAAI;AAAA;AAAA,MAEzC,CAAC,EAAE,OAAO,UAAU,MAAO,YAAY,MAAM,OAAO,YAAY,MAAM,OAAO,UAAW;AAAA,mBAC3E,CAAC,EAAE,YAAY,MAAM,YAAY;AAAA,gBACpC,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,QAAQ;AAAA;AAAA,IAEhD,CAAC,EAAE,OAAO,YAAY,MAAY,MAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BAOZ,YAAY,MAAM,OAAO,YAAY,MAAM,OAAO,UAAU;AAAA,oBAClE,YAAY,MAAM,OAAO,YAAY,MAAM,OAAO,UAAU;AAAA;AAAA,GAE7E;AAAA;AAAA,IAEC,CAAC,EAAE,OAAO,gBACV,YACI;AAAA,mBACW,MAAM,OAAO,UAAU;AAAA,wBAClB,MAAM,OAAO,UAAU;AAAA,YAEvC,MAAS;AAAA;AC9HjB,MAAM,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAMxB,MAAM,WAAW,OAA4B,UAAU,EAAE,MAAM,EAAE,YAAY,QAAQ;AAAA,IACjF,eAAe;AAAA;AAGnB,MAAM,aAAa,OAA4B,UAAU;AAAA;AAAA,IAErD,eAAe;AAAA;AAGnB,MAAM,gBAAgB,OAA4B,UAAU,EAAE,MAAM;AAAA,EAClE,gBAAgB;AAClB,CAAC;AAAA,IACG,eAAe;AAAA;AAGnB,MAAM,oBAAoB,OAA4B,UAAU,EAAE,MAAM;AAAA,EACtE,gBAAgB;AAClB,CAAC;AAAA,IACG,eAAe;AAAA;AAGnB,MAAM,aAAa,OAAO;AAAA,sBACJ,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,UAAU;AAAA,mBACzC,CAAC,EAAE,YAAY,MAAM,YAAY;AAAA,aACvC,CAAC,EAAE,MAAM,MAAM,KAAK,MAAM,OAAO,CAAC,CAAC,EAAE;AAAA;AAAA;AAAA;AAAA;AAsBlD,MAAM,oBAAoB,CAAC,QAAgBP,UAAsB;AACzD,QAAA,QAAQP,SAAO,MAAM,MAAM;AAC7B,MAAA,CAAC,MAAc,QAAA;AAEZ,SAAA,QAAQ,MAAMO,KAAI,CAAC;AAC5B;AAKA,MAAM,mBAAmB,CAAC,QAAgBA,UAAsB;AACxD,QAAA,QAAQP,SAAO,MAAM,MAAM;AAG7B,MAAA,CAAC,OAAO,WAAW;AACrB,UAAM,cAAcA,SAAO,IAAI,QAAQ,CAAA,CAAE;AAC9B,eAAA,OAAO,QAAQ,WAAW;AAAA,EAAA;AAInC,MAAA,QAAQO,KAAI,GAAG;AACVP,aAAA,WAAW,QAAQO,KAAI;AAAA,EAAA,OACzB;AACEP,aAAA,QAAQ,QAAQO,OAAM,IAAI;AAAA,EAAA;AAErC;AAEA,MAAM,YAA4B;AAAA,EAChC,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,iBAAiB,CAAC,UAAU,MAAM,QAAQ;AAAA,IAC1C,OAAO,EAAE,IAAI,oCAAoC,gBAAgB,OAAO;AAAA,IACxE,eAAe,CAAC,WAAW,kBAAkB,QAAQ,MAAM;AAAA,IAC3D,cAAc,CAAC,WAAW,iBAAiB,QAAQ,MAAM;AAAA,IACzD,YAAY,CAAC,aAAa,oBAAC,YAAU,SAAS,CAAA;AAAA,EAChD;AAAA,EACA,QAAQ;AAAA,IACN,MAAM;AAAA,IACN,iBAAiB,CAAC,UAAU,MAAM,QAAQ;AAAA,IAC1C,OAAO,EAAE,IAAI,sCAAsC,gBAAgB,SAAS;AAAA,IAC5E,eAAe,CAAC,WAAW,kBAAkB,QAAQ,QAAQ;AAAA,IAC7D,cAAc,CAAC,WAAW,iBAAiB,QAAQ,QAAQ;AAAA,IAC3D,YAAY,CAAC,aAAa,oBAAC,cAAY,SAAS,CAAA;AAAA,EAClD;AAAA,EACA,WAAW;AAAA,IACT,MAAM;AAAA,IACN,iBAAiB,CAAC,UAAU,MAAM,QAAQ;AAAA,IAC1C,OAAO,EAAE,IAAI,yCAAyC,gBAAgB,YAAY;AAAA,IAClF,eAAe,CAAC,WAAW,kBAAkB,QAAQ,WAAW;AAAA,IAChE,cAAc,CAAC,WAAW,iBAAiB,QAAQ,WAAW;AAAA,IAC9D,YAAY,CAAC,aAAa,oBAAC,iBAAe,SAAS,CAAA;AAAA,EACrD;AAAA,EACA,eAAe;AAAA,IACb,MAAM;AAAA,IACN,iBAAiB,CAAC,UAAU,MAAM,QAAQ,OAAO,MAAM;AAAA,IACvD,OAAO,EAAE,IAAI,6CAA6C,gBAAgB,gBAAgB;AAAA,IAC1F,eAAe,CAAC,WAAW,kBAAkB,QAAQ,eAAe;AAAA,IACpE,cAAc,CAAC,WAAW,iBAAiB,QAAQ,eAAe;AAAA,IAClE,YAAY,CAAC,aAAa,oBAAC,qBAAmB,SAAS,CAAA;AAAA,EACzD;AAAA,EACA,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,iBAAiB,CAAC,UAAU,MAAM,QAAQ;AAAA,IAC1C,OAAO,EAAE,IAAI,oCAAoC,gBAAgB,cAAc;AAAA,IAC/E,eAAe,CAAC,WAAW,kBAAkB,QAAQ,MAAM;AAAA,IAC3D,cAAc,CAAC,WAAW,iBAAiB,QAAQ,MAAM;AAAA,IACzD,YAAY,CAAC,aAAa,oBAAC,cAAY,SAAS,CAAA;AAAA,EAAA;AAEpD;ACxHA,MAAM,aAAa,CAAC,WAAmB;AAC/B,QAAA,EAAE,WAAW;AAEZ,SAAA,SAAS,CAAC,YAAY;AAC3B,WAAO,QAAQ,SAAS,UAAU,OAAO,OAAO,OAAO;AAAA,EACzD;AAEO,SAAA;AACT;ACPA,MAAM,YAAY,CAAC,WAAmB;AACpC,QAAM,EAAE,UAAU,OAAO,YAAAS,aAAY,WAAe,IAAA;AAG7C,SAAA,WAAW,CAAC,YAAY;AAC7B,WAAO,QAAQ,SAAS,SAAS,OAAO,SAAS,OAAO;AAAA,EAC1D;AAIA,SAAO,uBAAuB;AAGvB,SAAA,QAAQ,CAAC,cAAc;AACxB,QAAA,UAAU,SAAS,eAAe;AAElC,UAAA,CAAChB,SAAO,SAAS,UAAU,IAAI,KAC/B,UAAU,KAAK,SAAS,UACxB,OAAO,oBACP;AACA,eAAO,uBAAuB,UAAU;AAAA,MAAA;AAAA,IAC1C,WACS,UAAU,SAAS,aAAa;AAIvC,UAAA,KAAK,YAAY,UAAU,IAAI,KAC/B,OAAO,wBACP,OAAO,oBACP;AACA,eAAO,uBAAuB,KAAK,UAAU,OAAO,sBAAsB,SAAS;AAAA,MAAA;AAAA,IACrF;AAGF,UAAM,SAAS;AAAA,EACjB;AAEO,SAAA,aAAa,CAAC,SAAS;AAExB,QAAA,OAAO,aAAa,MAAM,YAAY,OAAO,SAAS,KAAK,SAAS,KAAK;AAC3E,YAAM,mBAAmB,MAAM;AAAA,QAC7BA,SAAO,MAAM,QAAQ;AAAA,UACnB,IAAI,OAAO;AAAA,UACX,OAAO,CAAC,SAAS,CAACA,SAAO,SAAS,IAAI,KAAK,KAAK,SAAS;AAAA,QAC1D,CAAA;AAAA,MACH;AAEA,YAAM,oBAAoB,OAAO,aAAa,iBAAiB,SAAS;AACxE,YAAM,yBACJ,qBACA,MAAM,OAAO,OAAO,UAAU,QAAQA,SAAO,IAAI,QAAQ,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC;AAElF,UAAI,wBAAwB;AACf,mBAAA;AAAA,UACT;AAAA,UACA,EAAE,MAAM,KAAK,MAAM,OAAO;AAAA,UAC1B,EAAE,IAAI,KAAK,KAAK,iBAAiB,CAAC,EAAE,CAAC,CAAC,GAAG,QAAQ,KAAK;AAAA,QACxD;AAEA;AAAA,MAAA;AAAA,IACF;AAGF,IAAAgB,YAAW,IAAI;AAAA,EACjB;AAGO,SAAA,aAAa,CAAC,SAAS;AACtB,UAAA,aAAa,KAAK,QAAQ,YAAY;AAE5C,QAAI,YAAY;AACV,UAAA;AAEF,YAAI,IAAI,UAAU;AAElB,eAAO,qBAAqB;AAC5B,mBAAW,QAAQ,EAAE,KAAK,WAAA,CAAY;AACtC;AAAA,eACO,OAAO;AAAA,MAAA;AAAA,IAEhB;AAGF,eAAW,IAAI;AAAA,EACjB;AAEO,SAAA;AACT;AC9FA,MAAM,SAAS,CAAC,SAAgC;AACvC,SAAA,KAAK,OAAO,IAAI,KAAK,CAAChB,SAAO,SAAS,IAAI,KAAK,KAAK,SAAS;AACtE;AAKA,MAAM,mBAAmB,CAAC,WAAmB;AACrC,QAAA,EAAE,kBAAkB;AAOnB,SAAA,gBAAgB,CAAC,UAAU;AAC1B,UAAA,CAAC,MAAM,IAAI,IAAI;AAEjB,QAAA,CAAC,QAAQ,UAAU,IAAI,KAAK,CAAC,OAAO,IAAI,GAAG;AAClC,iBAAA,SAAS,QAAQ,EAAE,MAAM,UAAU,EAAE,IAAI,MAAM;AAE1D;AAAA,IAAA;AAGF,kBAAc,KAAK;AAAA,EACrB;AAEO,SAAA;AACT;AC2BA,MAAM,oBAAoB;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAIA,MAAM,qBAAqB,CAAC,QAA0C;AACpE,SAAO,OAAO,QAAQ,YAAY,kBAAkB,SAAS,GAAuB;AACtF;AAiBA,MAAM,CAAC,sBAAsB,6BAA6B,IACxD,cAAwC,cAAc;AAExD,SAAS,uBACP,cAC+C;AAC/C,QAAM,UAAU,8BAA8B,cAAc,CAAC,UAAU,KAAK;AAC5E,QAAM,SAAS,SAAS;AAEjB,SAAA;AAAA,IACL,GAAG;AAAA,IACH;AAAA,EACF;AACF;AAMA,MAAM,gBAAgB,OAAO,OAAO;AAAA,gBACpB,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,UAAU;AAAA;AAGtD,MAAM,mBAAmB,OAAO,UAAU;AAAA;AAAA;AAAA;AAAA,gBAI1B,CAAC,EAAE,MAAA,MAAY,MAAM,QAAQ,YAAY;AAAA;AAWzD,SAAS,YAAY,OAGnB;AAEM,QAAA,oBAAoB,MAAM,OAAO,CAAC;AAElC,QAAA,oBAAoB,MAAM,OAAO,CAAC;AAExC,QAAM,CAAC,KAAK,MAAM,IAAI,MAAM,SAAS,CAAC;AAEtC,QAAM,UAAU,MAAM;AACpB,sBAAkB,WAAW;AAGzB,QAAA,kBAAkB,YAAY,kBAAkB,SAAS;AAGpD,aAAA,CAAC,gBAAgB,cAAc,CAAC;AAGvC,wBAAkB,UAAU,kBAAkB;AAAA,IAAA;AAAA,EAChD,GACC,CAAC,KAAK,CAAC;AAEV,SAAO,EAAE,KAAK,4BAA4B,MAAO,kBAAkB,WAAW,EAAG;AACnF;AAEA,MAAM,OACJ,IAAI,QACJ,CAAC,UACC,IAAI,OAAe,CAAC,MAAM,OAAO,GAAG,IAAI,GAAG,KAAK;AASpD,MAAM,eAAe,MAAM;AAAA,EACzB,CAAC,EAAE,WAAW,OAAO,MAAAO,OAAM,UAAU,OAAO,OAAO,GAAG,aAAa,GAAG,iBAAiB;AAC/E,UAAA,EAAE,cAAc,IAAI,QAAQ;AAC5B,UAAA,CAAC,MAAM,IAAI,MAAM;AAAA,MAAS,MAC9B,KAAK,aAAa,YAAY,kBAAkB,WAAW,SAAS,EAAE,aAAc,CAAA;AAAA,IACtF;AACA,UAAM,CAAC,UAAU,WAAW,IAAI,MAAM,SAAS,EAAE;AAC3C,UAAA,oBAAoB,MAAM,MAAM;AACtC,UAAM,CAAC,gBAAgB,iBAAiB,IAAI,MAAM,SAAS,KAAK;AAEhE,UAAM,qBAAqB,MAAM;AACb,wBAAA,CAAC,SAAS,CAAC,IAAI;AAAA,IACnC;AAOM,UAAA;AAAA,MACJ;AAAA,MACA,OAAO;AAAA,QACL,QAAQ;AACN,sBAAY,MAAM,MAAM;AAAA,QAAA;AAAA,MAC1B;AAAA,MAEF,CAAC,MAAM;AAAA,IACT;AAEA,UAAM,EAAE,KAAK,+BAA+B,YAAY,KAAK;AAEvD,UAAA,oBAAoB,CAAC,UAAwB;AAC3C,YAAA,cAAc,OAAO,WAAW,KAAK,CAAC,OAAO,GAAG,SAAS,eAAe;AAE9E,UAAI,aAAa;AACY,mCAAA;AAE3B,iBAASA,OAAM,KAAqC;AAAA,MAAA;AAAA,IAExD;AAEA,UAAM,SAAsB;AAAA,MAC1B,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,IACL;AAEA,WAEI,qBAAA,UAAA,EAAA,UAAA;AAAA,MAAC,oBAAA,gBAAA,EAAe,IAAI,mBACjB,UAAc,cAAA;AAAA,QACb,IAAI,eAAe,mCAAmC;AAAA,QACtD,gBAAgB;AAAA,MACjB,CAAA,GACH;AAAA,MACC,oBAAA,gBAAA,EAAe,aAAU,aAAa,UAAS,UAAA;AAAA,MAChD;AAAA,QAAC;AAAA,QAAA;AAAA,UACC;AAAA,UACA,cAAc,SAAS,CAAC,EAAE,MAAM,aAAa,UAAU,CAAC,EAAE,MAAM,QAAQ,MAAM,GAAG,CAAC,GAAG;AAAA,UACrF,UAAU;AAAA,UAGV,UAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC;AAAA,cACA;AAAA,cACA;AAAA,cACA,MAAAA;AAAA,cACA;AAAA,cACA;AAAA,cAEA,UAAA;AAAA,gBAACQ;AAAAA,gBAAA;AAAA,kBACC;AAAA,kBACA;AAAA,kBACA,YAAY;AAAA,kBACZ;AAAA,kBAEA,UAAA;AAAA,oBAAA,oBAAC,eAAc,EAAA;AAAA,oBACf,oBAAC,eAAc,EAAA,OAAM,OAAO,CAAA;AAAA,oBAC5B,oBAAC,eAAe,EAAA,GAAG,cAAc;AAAA,oBAChC,CAAC,kBACA;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,OAAO,cAAc;AAAA,0BACnB,IAAI,eAAe,0BAA0B;AAAA,0BAC7C,gBAAgB;AAAA,wBAAA,CACjB;AAAA,wBACD,SAAS;AAAA,wBAET,8BAAC,QAAO,CAAA,CAAA;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBACV;AAAA,gBAAA;AAAA,cAAA;AAAA,YAEJ;AAAA,UAAA;AAAA,QACF;AAAA,QA/BK;AAAA,MAAA;AAAA,IAgCP,GACF;AAAA,EAAA;AAGN;ACjQA,MAAM,cAAc,MAAM;AAAA,EACxB,CAAC,EAAE,OAAO,MAAAR,OAAM,WAAW,OAAO,MAAM,aAAa,GAAG,YAAY,GAAG,iBAAiB;AAChF,UAAA,KAAK,MAAM,MAAM;AACjB,UAAA,QAAQ,SAASA,KAAI;AAE3B,+BACG,MAAM,MAAN,EAAW,IAAQ,MAAAA,OAAY,MAAY,OAAO,MAAM,OAAO,UAC9D,+BAAC,MAAK,EAAA,WAAU,UAAS,YAAW,WAAU,KAAK,GACjD,UAAA;AAAA,MAAA,oBAAC,MAAM,OAAN,EAAY,QAAQ,aAAc,UAAM,OAAA;AAAA,MACzC;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAAA;AAAA,UACA,OAAO,MAAM;AAAA,UACb,KAAK;AAAA,UACL,OAAO,MAAM;AAAA,UACb,UAAU,MAAM;AAAA,UAChB,aAAa;AAAA,UACZ,GAAG;AAAA,QAAA;AAAA,MACN;AAAA,MACA,oBAAC,MAAM,MAAN,EAAW;AAAA,MACZ,oBAAC,MAAM,OAAN,CAAY,CAAA;AAAA,IAAA,EAAA,CACf,EACF,CAAA;AAAA,EAAA;AAGN;AAEM,MAAA,sBAAsB,MAAM,KAAK,WAAW;ACxBlD,MAAM,cAAc,CAAC,EAAE,UAAU,MAAAA,OAAM,cAAgC;AAC/D,QAAA,EAAE,cAAc,IAAI,QAAQ;AAE5B,QAAA,QAAQ,SAASA,KAAI;AAE3B,SAEI,oBAAA,UAAA,EAAA,UAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAI;AAAA,MACJ,YAAY,WAAW,eAAe;AAAA,MACtC,aAAa,MAAM,QAAQ,cAAc;AAAA,MACzC,WAAS;AAAA,MACT;AAAA,MACA;AAAA,MACA,YAAY;AAAA,MACZ,eAAe;AAAA,MACf,MAAK;AAAA,MACL,OAAO,EAAE,QAAQ,WAAW,gBAAgB,UAAU;AAAA,MAEtD,UAAC,qBAAA,MAAA,EAAK,WAAU,UAAS,KAAK,GAC5B,UAAA;AAAA,QAAA,oBAAC,MAAK,EAAA,gBAAe,UAAS,OAAO,WAAW,eAAe,cAC7D,UAAA,oBAAC,YAAW,EAAA,OAAM,UAAS,QAAO,SAAS,CAAA,GAC7C;AAAA,QACA,oBAAC,MAAK,EAAA,gBAAe,UACnB,UAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAW,WAAW,eAAe;AAAA,YACrC,SAAQ;AAAA,YACR,YAAW;AAAA,YAEV,UAAc,cAAA;AAAA,cACb,IAAI,eAAe,6BAA6B;AAAA,cAChD,gBAAgB;AAAA,YACjB,CAAA;AAAA,UAAA;AAAA,QAAA,EAEL,CAAA;AAAA,MAAA,EACF,CAAA;AAAA,IAAA;AAAA,EAAA,GAEJ;AAEJ;ACzCA,MAAM,qBAAqB,CAAC;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAA+B;AAE3B,SAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL;AAAA,MACA,UAAU;AAAA,MACV,YAAW;AAAA,MACX,OAAO,EAAE,QAAQ,aAAa,gBAAgB,UAAU;AAAA,MACxD,SAAQ;AAAA,MAER,UAAC,qBAAA,MAAA,EAAK,KAAI,QAAO,KAAK,GACpB,UAAA;AAAA,QAAC,oBAAA,eAAA,EAAc,eAAW,MAAC,SAAS,QAAQ,WAAW,YAAY,CAAC,QAAQ;AAAA,QAC5E;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,SAAQ;AAAA,YACR,YAAW;AAAA,YACX,WAAW,YAAY,CAAC,SAAS,cAAc;AAAA,YAE9C;AAAA,UAAA;AAAA,QAAA;AAAA,MACH,EACF,CAAA;AAAA,IAAA;AAAA,EACF;AAEJ;AAEA,MAAM,gBAAgB,OAAO,UAAU;AAAA,YAC3B,CAAC,EAAE,YAAY,MAAM,OAAO,CAAC,CAAC;AAAA,WAC/B,CAAC,EAAE,YAAY,MAAM,OAAO,CAAC,CAAC;AAAA,eAC1B,CAAC,EAAE,QAAA,MAAe,UAAU,kBAAkB,cAAe;AAAA;AAAA;AAAA,YAGhE,CAAC,EAAE,OAAO,UAAU,MAC1B,YAAY,MAAM,OAAO,YAAY,MAAM,OAAO,UAAU;AAAA;AAAA;AAAA,YAGtD,CAAC,EAAE,OAAO,UAAU,MAC1B,YAAY,MAAM,OAAO,YAAY,MAAM,OAAO,UAAU;AAAA;AAAA;AAIlE,MAAM,eAAe,OAAO,MAAM;AAAA,kBAChB,CAAC,EAAE,YAAY,MAAM,OAAO,CAAC,CAAC;AAAA;AAAA,gBAEhC,CAAC,EAAE,MAAA,MAAY,MAAM,QAAQ,YAAY;AAAA;AAAA;ACxCzD,MAAM,oBAAoB,CAAC;AAAA,EACzB;AAAA,EACA,aAAa,CAAC;AAAA,EACd,UAAU;AAAA,EACV;AACF,MAA8B;AACtB,QAAA,EAAE,cAAc,IAAI,QAAQ;AAElC,SACG,qBAAA,UAAU,MAAV,EAAe,OAAO,UACrB,UAAA;AAAA,IAAA,oBAAC,UAAU,QAAV,EAAiB,SAChB,UAAA,oBAAC,UAAU,SAAV,EACE,UAAc,cAAA,EAAE,IAAI,UAAU,gBAAgB,SAAU,CAAA,EAC3D,CAAA,GACF;AAAA,wBACC,4BACC,EAAA,UAAA,oBAAC,QAAK,YAAY,GAAG,eAAe,GAAG,aAAa,GAAG,cAAc,GAClE,qBAAW,IAAI,CAAC,EAAE,KAAK,aAAa,WACnC;AAAA,MAAC;AAAA,MAAA;AAAA,QAEC,KAAI;AAAA,QACJ,MAAK;AAAA,QACL,YAAW;AAAA,QACX,gBAAe;AAAA,QACf,SAAS,eAAe,GAAG;AAAA,QAC3B,WAAS;AAAA,QACT,QAAO;AAAA,QACP,QAAQ;AAAA,QACR,aAAY;AAAA,QAEZ,UAAA,qBAAC,QAAK,WAAU,UAAS,KAAK,GAAG,YAAW,UAAS,gBAAe,UAClE,UAAA;AAAA,UAAA,oBAAC,eAAc,EAAA,OAAM,gBAAe,YAAW,cAAa,MAAY;AAAA,8BAEvE,YAAW,EAAA,SAAQ,MAAK,YAAW,QACjC,UACH,YAAA,CAAA;AAAA,QAAA,EACF,CAAA;AAAA,MAAA;AAAA,MAjBK;AAAA,IAmBR,CAAA,EACH,CAAA,EACF,CAAA;AAAA,EAAA,GACF;AAEJ;AAEA,MAAM,6BAA6B,OAAO,UAAU,OAAO;AAAA;AAAA;AAI3D,MAAM,OAAO,OAAO,GAAG;AAAA;AAAA;AAAA,cAGT,CAAC,EAAE,YAAY,MAAM,OAAO,CAAC,CAAC;AAAA;AAAA,2BAEjB,MAAM,iCAAiC,EAAE;AAAA;AAAA;AAAA;AAKpE,MAAM,eAAe,OAAgC,IAAI;AAAA,WAC9C,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,UAAU;AAAA;AAAA;AAAA;AAAA,8BAInB,CAAC,UAAU,MAAM,MAAM,OAAO,QAAQ,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA,wBAKvD,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,UAAU;AAAA,kBAC5C,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,UAAU;AAAA,aAC3C,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,UAAU;AAAA;AAAA;AC9EnD,MAAM,kBAAkB,CAAC;AAAA,EACvB,8BAA8B,CAAC;AAAA,EAC/B;AAAA,EACA;AACF,MAA4B;AACpB,QAAA,EAAE,cAAc,IAAI,QAAQ;AAE5B,QAAA,yBAAyB,CAAC,iBAAyB,MAAM;AAC7D,wBAAoB,YAAY;AAAA,EAClC;AAEA,MAAI,CAAC,QAAQ;AACJ,WAAA;AAAA,EAAA;AAIP,SAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,YAAY;AAAA,MACZ,eAAe;AAAA,MACf,aAAa;AAAA,MACb,cAAc;AAAA,MACd,YAAW;AAAA,MACX,QAAO;AAAA,MACP,aAAY;AAAA,MACZ,WAAS;AAAA,MAET,UAAA;AAAA,QAAC,oBAAA,MAAA,EAAK,gBAAe,UACnB,UAAA,oBAAC,cAAW,YAAW,QAAO,WAAU,cACrC,UAAc,cAAA;AAAA,UACb,IAAI,eAAe,8CAA8C;AAAA,UACjE,gBAAgB;AAAA,QAAA,CACjB,GACH,EACF,CAAA;AAAA,QACA,oBAAC,KAAI,EAAA,YAAY,GACf,UAAA,oBAAC,UAAU,MAAV,EAAe,cAAc,OAAO,KAAK,2BAA2B,EAAE,CAAC,GACrE,UAAO,OAAA,QAAQ,2BAA2B,EAAE,IAAI,CAAC,CAAC,UAAU,UAAU,GAAG,UACxE;AAAA,UAAC;AAAA,UAAA;AAAA,YAEC;AAAA,YACA;AAAA,YACA,gBAAgB;AAAA,YAChB,SAAS,QAAQ,MAAM,IAAI,YAAY;AAAA,UAAA;AAAA,UAJlC;AAAA,QAMR,CAAA,EACH,CAAA,EACF,CAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EACF;AAEJ;ACrBA,MAAM,mBAAmB,CAAC;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA,MAAAA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,8BAA8B,CAAC;AAAA,EAC/B;AAAA,EACA;AACF,MAA6B;AACrB,QAAA,EAAE,cAAc,IAAI,QAAQ;AAClC,QAAM,aAAa,QAAQ,oBAAoB,CAAC,UAAU,MAAM,MAAM;AAChE,QAAA;AAAA,IACJ,MAAM,EAAE,WAAW;AAAA,MACjB,aAAa;AAEX,QAAA,QAAQ,MAAM,QAAQ,MAAM;AAC1B,UAAA,EAAE,UAAc,IAAA,WAAW,YAAY,GAAG,YAAY,EAAE,WAAW,KAAK;AAExE,UAAA,iBAAiB,MAAM,YAAY,GAAGA,KAAI,IAAI,KAAK,IAAI,SAAS,EAAE;AAElE,UAAA,iBACJ,cAAc,QAAQ,CAAC,iBAAiB,KAAK,OAAO,cAAc,EAAE,KAAK;AAE3E,UAAM,YAAY,eAAe,SAAS,IAAI,KAAK,cAAc,KAAK;AAE/D,WAAA;AAAA,EAAA,GACN,CAAC,cAAc,YAAY,YAAYA,OAAM,KAAK,CAAC;AAEtD,QAAM,EAAE,MAAM,YAAgB,IAAA,MAAM,QAAQ,MAAM;AAChD,UAAM,CAAC,QAAQ,IAAI,aAAa,MAAM,GAAG;AACnC,UAAA,EAAE,MAAAU,OAAM,aAAAC,kBAAiB,4BAA4B,QAAQ,KAAK,CAAA,GAAI;AAAA,MAC1E,CAAC,cAAc,UAAU,QAAQ;AAAA,IAC9B,KAAA,EAAE,MAAM,MAAM,aAAa,KAAK;AAErC,WAAO,EAAE,MAAAD,OAAM,aAAAC,aAAY;AAAA,EAAA,GAC1B,CAAC,cAAc,2BAA2B,CAAC;AAE9C,QAAM,CAAC,EAAE,WAAW,YAAY,cAAc,GAAG,QAAQ,SAAS,SAAS,cAAc,IACvF,eAAe,CAAC,UAAU;AAAA,IACxB,MAAM,GAAG,UAAU,YAAY,IAAIX,KAAI;AAAA,IACvC;AAAA,IACA,MAAM;AAAA,MACJ;AAAA,MACA,gBAAgB,GAAG,WAAW,IAAI,KAAK;AAAA,MACvC;AAAA,IACF;AAAA,IACA,YAAY;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,EAAA,CACD;AAEH,QAAM,UAAU,MAAM;AACpB,mBAAe,cAAc,GAAG,EAAE,sBAAsB,OAAO;AAAA,EAAA,GAC9D,CAAC,gBAAgB,KAAK,CAAC;AAMpB,QAAA,iBAAiB,MAAM,MAAM;AAE7B,QAAA,EAAE,QAAQ,IAAI,aAAa,SAAS,GAAGA,KAAI,IAAI,KAAK,EAAE;AAE5D,QAAM,CAAC,gBAAgB,iBAAiB,IAAI,MAAM,SAAiB,EAAE;AAErE,QAAM,UAAU,MAAM;AACpB,QAAI,YAAY,OAAO;AACrB,wBAAkB,cAAc;AAAA,IAAA;AAAA,EAEjC,GAAA,CAAC,UAAU,OAAO,cAAc,CAAC;AAE9B,QAAA,kBAAkB,gBAAgB,QAAQ,OAAO;AAEjD,QAAA,mBAAmB,WAAW,OAEhC,qBAAA,UAAA,EAAA,UAAA;AAAA,IAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,SAAQ;AAAA,QACR,OAAO;AAAA,UACL;AAAA,YACE,IAAI,eAAe,qCAAqC;AAAA,YACxD,gBAAgB;AAAA,UAClB;AAAA,UACA,EAAE,MAAM,MAAM;AAAA,QAChB;AAAA,QACA,SAAS;AAAA,QAET,8BAAC,OAAM,CAAA,CAAA;AAAA,MAAA;AAAA,IACT;AAAA,IACA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,SAAQ;AAAA,QACR,SAAS,CAAC,MAAM,EAAE,gBAAgB;AAAA,QAClC,mBAAiB;AAAA,QACjB,KAAK;AAAA,QACL,OAAO,cAAc;AAAA,UACnB,IAAI,eAAe,6BAA6B;AAAA,UAChD,gBAAgB;AAAA,QAAA,CACjB;AAAA,QACD,WAAW;AAAA,QAEX,8BAAC,MAAK,CAAA,CAAA;AAAA,MAAA;AAAA,IACR;AAAA,IACA,qBAAC,KAAK,MAAL,EACC,UAAA;AAAA,MAAC,oBAAA,KAAK,SAAL,EAAa,MAAK,KAAI,SAAS,MAAM,aAAa,GAAG,cAAc,GAClE,UAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,SAAQ;AAAA,UACR,OAAO,cAAc;AAAA,YACnB,IAAI,eAAe,qCAAqC;AAAA,YACxD,gBAAgB;AAAA,UAAA,CACjB;AAAA,UACD,KAAI;AAAA,UAEJ,UAAC,oBAAA,MAAA,EAAK,eAAW,MAAC,WAAW,MAAO,CAAA;AAAA,QAAA;AAAA,MAAA,GAExC;AAAA,MACA,qBAAC,KAAK,SAAL,EACC,UAAA;AAAA,QAAC,qBAAA,KAAK,SAAL,EACC,UAAA;AAAA,UAAC,oBAAA,KAAK,YAAL,EACE,UAAc,cAAA;AAAA,YACb,IAAI,eAAe,uCAAuC;AAAA,YAC1D,gBAAgB;AAAA,UACjB,CAAA,GACH;AAAA,8BACC,KAAK,YAAL,EACE,UAAA,OAAO,QAAQ,2BAA2B,EAAE,IAAI,CAAC,CAAC,UAAUY,WAAU,MACpE,qBAAA,MAAM,UAAN,EACC,UAAA;AAAA,YAAC,oBAAA,KAAK,OAAL,EAAY,UAAS,SAAA,CAAA;AAAA,YACrBA,YAAW,IAAI,CAAC,EAAE,aAAAD,cAAa,UAC9B,oBAAC,YAA4B,UAAU,MAAM,eAAe,KAAK,KAAK,GACnE,UAAAA,aAAAA,GADY,YAEf,CACD;AAAA,UAAA,EANkB,GAAA,QAOrB,CACD,EACH,CAAA;AAAA,QAAA,GACF;AAAA,QACA,qBAAC,KAAK,SAAL,EACC,UAAA;AAAA,UAAC,oBAAA,KAAK,YAAL,EACE,UAAc,cAAA;AAAA,YACb,IAAI,eAAe,uCAAuC;AAAA,YAC1D,gBAAgB;AAAA,UACjB,CAAA,GACH;AAAA,8BACC,KAAK,YAAL,EACE,UAAA,OAAO,QAAQ,2BAA2B,EAAE,IAAI,CAAC,CAAC,UAAUC,WAAU,MACpE,qBAAA,MAAM,UAAN,EACC,UAAA;AAAA,YAAC,oBAAA,KAAK,OAAL,EAAY,UAAS,SAAA,CAAA;AAAA,YACrBA,YAAW,IAAI,CAAC,EAAE,aAAAD,cAAa,UAC7B,oBAAA,UAAA,EAA4B,UAAU,MAAM,eAAe,KAAK,QAAQ,CAAC,GACvE,UAAAA,aAAAA,GADY,YAEf,CACD;AAAA,UAAA,EANkB,GAAA,QAOrB,CACD,EACH,CAAA;AAAA,QAAA,EACF,CAAA;AAAA,MAAA,EACF,CAAA;AAAA,IAAA,EACF,CAAA;AAAA,EAAA,GACF;AAGF,QAAM,iBAAiB,QAAQ,GAAG,WAAW,IAAI,KAAK,KAAK;AAE3D,SACG,qBAAA,oBAAA,EAAmB,KAAI,MAAK,OAAM,QACjC,UAAA;AAAA,IAAA,oBAAC,QAAK,gBAAe,UACnB,8BAAC,WAAU,EAAA,YAAW,cAAa,EACrC,CAAA;AAAA,IACA,oBAAC,aAAU,KAAK,iBAAiB,WAAS,MACvC,UAAA,aACE,oBAAAE,WAAA,CAAA,CAAQ,IAET,oBAAC,UAAU,MAAV,EAAe,OAAO,gBAAgB,eAAe,mBACpD,+BAAC,UAAU,MAAV,EAAe,OAAO,gBACrB,UAAA;AAAA,MAAC,qBAAA,UAAU,QAAV,EACC,UAAA;AAAA,QAAA;AAAA,UAAC,UAAU;AAAA,UAAV;AAAA,YACC,MACE,QAAQ,gBAAgB,IAAI,IACxB,gBAAgB,IAAI,IACpB,gBAAgB;AAAA,YAGrB,UAAA;AAAA,UAAA;AAAA,QACH;AAAA,QACC,oBAAA,UAAU,SAAV,EAAmB,UAAiB,iBAAA,CAAA;AAAA,MAAA,GACvC;AAAA,MACC,oBAAA,UAAU,SAAV,EACC,UAAC,oBAAA,wBAAA,EAAuB,YAAW,YACjC,UAAC,oBAAA,KAAA,EAAI,aAAa,GAAG,cAAc,GAAG,YAAY,GAAG,eAAe,GAClE,UAAA,oBAACC,OAAK,MAAL,EAAU,KAAK,GACb,UAAW,WAAA,YAAY,GAAG,QAAQ,IAAI,CAAC,KAAK,WAC3C;AAAA,QAACA,OAAK;AAAA,QAAL;AAAA,UACC,KAAK;AAAA,UAEL,GAAG;AAAA,UACH,IAAI;AAAA,UACJ,WAAU;AAAA,UACV,YAAW;AAAA,UAEX,UAAA,oBAAC,oBAAmB,EAAA,KAAK,GACtB,UAAA,IAAI,IAAI,CAAC,EAAE,MAAM,GAAG,MAAA,MAAY;AAC/B,kBAAM,YAAY,GAAGd,KAAI,IAAI,KAAK,IAAI,MAAM,IAAI;AAEhD,kBAAM,2BAA2B;AAAA,cAC/B,GAAG;AAAA,cACH,OAAO,cAAc;AAAA,gBACnB,IAAI,8BAA8B,YAAY,IAAI,MAAM,IAAI;AAAA,gBAC5D,gBAAgB,MAAM;AAAA,cACvB,CAAA;AAAA,YACH;AAGE,mBAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,KAAK;AAAA,gBAEL,GAAG;AAAA,gBACH,IAAI;AAAA,gBACJ,WAAU;AAAA,gBACV,YAAW;AAAA,gBAEV,UACC,WAAA,SAAS,EAAE,GAAG,0BAA0B,MAAM,UAAW,CAAA,IAExD,oBAAAe,uBAAA,EAAe,GAAG,0BAA0B,MAAM,UAAW,CAAA;AAAA,cAAA;AAAA,cAT3D;AAAA,YAWP;AAAA,UAAA,CAEH,EACH,CAAA;AAAA,QAAA;AAAA,QAnCK;AAAA,MAAA,CAqCR,EACH,CAAA,GACF,EAAA,CACF,EACF,CAAA;AAAA,IAAA,EACF,CAAA,EACF,CAAA,EAEJ,CAAA;AAAA,EAAA,GACF;AAEJ;AAIA,MAAM,YAAY,OAAqB,GAAG;AAAA;AAAA,kBAExB,CAAC,EAAE,MAAA,MAAY,MAAM,QAAQ,WAAW;AAAA;AAAA;AAI1D,MAAM,yBAAyB,OAAqB,GAAG;AAAA,uBAChC,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,MAAM,MAAM,OAAO,CAAC,CAAC;AAAA;AAGvF,MAAM,YAAY,OAAqB,GAAG;AAAA,WAC/B,CAAC,EAAE,YAAY,MAAM,OAAO,CAAC,CAAC;AAAA,YAC7B,CAAC,EAAE,YAAY,MAAM,OAAO,CAAC,CAAC;AAAA;AAG1C,MAAMF,YAAU,OAAO;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,qBAAqB,OAA2B,GAAG;AAAA;AAAA;AAAA;AAAA;AC/SzD,MAAM,mBAAmB,CAAC;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA,MAAAb;AAAA,EACA,qBAAqB;AAAA,EACrB;AACF,MAA6B;AAEzB,SAAA,oBAAC,MAAK,EAAA,gBAAe,UACnB,UAAA;AAAA,IAAC;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,UAAC,qBAAA,MAAA,EAAK,WAAU,UAAS,gBAAe,UACtC,UAAA;AAAA,QAAC,qBAAA,MAAA,EAAK,UAAS,WACb,UAAA;AAAA,UAAC,qBAAA,YAAA,EAAW,SAAQ,MAAK,WAAU,cAAa,YAAW,QAAO,UAAQ,MACvE,UAAA;AAAA,YAAS,SAAAA;AAAA,YAAK;AAAA,UAAA,GACjB;AAAA,+BACC,YAAW,EAAA,SAAQ,MAAK,WAAU,cAAa,YAAW,QAAO,UAAA;AAAA,YAAA;AAAA,YAC9D;AAAA,YAAmB;AAAA,UAAA,GACvB;AAAA,UACC,YAAY,oBAAC,YAAW,EAAA,WAAU,aAAY,UAAC,KAAA;AAAA,UAC/C,eAAe,oBAAC,KAAI,EAAA,aAAa,GAAI,UAAY,YAAA,CAAA;AAAA,QAAA,GACpD;AAAA,QACC,QACE,oBAAA,KAAA,EAAI,YAAY,GAAG,UAAS,WAC3B,UAAA,oBAAC,YAAW,EAAA,SAAQ,MAAK,WAAU,cAAa,UAAQ,MACrD,gBACH,EACF,CAAA;AAAA,MAAA,EAEJ,CAAA;AAAA,IAAA;AAAA,EAAA,GAEJ;AAEJ;ACvBM,MAAA,CAAC,qBAAqB,cAAc,IAAI;AAAA,EAC5C;AAAA,EACA;AAAA,IACE,iBAAiB;AAAA,EAAA;AAErB;AASA,MAAM,cAAc,CAAC;AAAA,EACnB;AAAA,EACA,UAAU;AAAA,EACV;AAAA,EACA;AAAA,EACA;AAAA,EACA,MAAAA;AAAA,EACA,WAAW;AAAA,EACX;AACF,MAAwB;AAEtB,QAAM,EAAE,MAAM,UAAU,MAAM,UAAU,IAAI,aAAa,CAAC;AAE1D,QAAM,CAAC,oBAAoB,qBAAqB,IAAI,MAAM,SAAS,KAAK;AACxE,QAAM,CAAC,UAAU,WAAW,IAAI,MAAM,SAAS,EAAE;AACjD,QAAM,EAAE,YAAY,UAAU,IAAI,OAAO;AACzC,QAAM,WAAW,gBAAgB;AACjC,QAAM,EAAE,aAAa,gBAAgB,aAAiB,IAAA;AAAA,IACpD;AAAA,IACA,CAAC,EAAE,aAAAgB,cAAa,gBAAAC,iBAAgB,cAAAC,qBAAoB;AAAA,MAClD,aAAAF;AAAAA,MACA,gBAAAC;AAAAA,MACA,cAAAC;AAAAA,IACF;AAAA,EACF;AAOA,QAAM,EAAE,QAAQ,IAAI,MAAM,IAAI,SAA+BlB,KAAI;AAE3D,QAAA,8BAA8B,MAAM,QAAQ,MAAM;AACtD,WAAO,UAAU,WAAW,OAE1B,CAAC,KAAK,iBAAiB;AACjB,YAAA,EAAE,UAAU,SAAS,WAAW,YAAY,KAAK,EAAE,MAAM,GAAG;AAE5D,YAAA,YAAY,EAAE,KAAK,cAAc,aAAa,KAAK,aAAa,MAAM,KAAK,KAAK;AAElF,UAAA,CAAC,IAAI,QAAQ,GAAG;AACd,YAAA,QAAQ,IAAI,CAAC;AAAA,MAAA;AAGnB,UAAI,QAAQ,IAAI,CAAC,GAAG,IAAI,QAAQ,GAAG,SAAS;AAErC,aAAA;AAAA,IACT,GAAG,EAAE;AAAA,EACJ,GAAA,CAAC,UAAU,YAAY,UAAU,CAAC;AAE/B,QAAA,EAAE,cAAc,IAAI,QAAQ;AAE5B,QAAA,EAAE,mBAAmB,IAAI,gBAAgB;AAE/C,QAAM,mCAAmC,MAAM;AAEzC,QAAA,qBAAqB,CAAC,KAAa,aAAsB;AAC7D,0BAAsB,KAAK;AAErB,UAAA,SAAS,WAAW,GAAG;AACvB,UAAA,OAAO,kBAAkB,QAAQ,UAAU;AACjD,UAAM,kBAAkBmB,OAAK,kBAAkB,QAAQ,UAAU,GAAG,CAACC,WAAU;AAAA,MAC7E,GAAGA;AAAAA,MACH,aAAa;AAAA,IAAA,EACb;AAEI,UAAA,OAAO,gBAAgB,IAAI;AAErB,gBAAApB,OAAM,MAAM,QAAQ;AAAA,EAClC;AAEA,QAAM,wBAAwB,MAAM;AAClC,QAAI,mCAAmC,KAAK;AACpB,4BAAA,CAAC,SAAS,CAAC,IAAI;AAAA,IAAA,OAChC;AACc,yBAAA;AAAA,QACjB,MAAM;AAAA,QACN,SAAS,cAAc;AAAA,UACrB,IAAI,eAAe,kDAAkD;AAAA,QACtE,CAAA;AAAA,MAAA,CACF;AAAA,IAAA;AAAA,EAEL;AAEM,QAAA,sBAAsB,CAAC,UAAkB,iBAAyB;AACtE;AAAA,MACE;AAAA,QACE;AAAA,UACE,IAAI,eAAe,aAAa;AAAA,UAChC,gBAAgB;AAAA,QAClB;AAAA,QACA;AAAA,UACE,MAAM,GAAGA,KAAI,IAAI,YAAY;AAAA,UAC7B,UAAU,WAAW,QAAQ;AAAA,QAAA;AAAA,MAC/B;AAAA,IAEJ;AAEa,iBAAAA,OAAM,cAAc,QAAQ;AAAA,EAC3C;AAEM,QAAA,aAAa,CAAC,UAAkB,GAAG,QAAQ,CAAC,OAAO,MAAM,MAAM;AAE/D,QAAA,eAAe,CAAC,UAAkB;AACtC;AAAA,MACE;AAAA,QACE;AAAA,UACE,IAAI,eAAe,iBAAiB;AAAA,UACpC,gBAAgB;AAAA,QAClB;AAAA,QACA;AAAA,UACE,MAAM,GAAGA,KAAI,IAAI,KAAK;AAAA,QAAA;AAAA,MACxB;AAAA,IAEJ;AAAA,EACF;AAEM,QAAA,iBAAiB,CAAC,UAAkB;AACxC;AAAA,MACE;AAAA,QACE;AAAA,UACE,IAAI,eAAe,eAAe;AAAA,UAClC,gBAAgB;AAAA,QAClB;AAAA,QACA;AAAA,UACE,MAAM,GAAGA,KAAI,IAAI,KAAK;AAAA,UACtB,UAAU,WAAW,KAAK;AAAA,QAAA;AAAA,MAC5B;AAAA,IAEJ;AAAA,EACF;AAEM,QAAA,iBAAiB,CAAC,UAAkB;AACxC;AAAA,MACE;AAAA,QACE;AAAA,UACE,IAAI,eAAe,eAAe;AAAA,UAClC,gBAAgB;AAAA,QAClB;AAAA,QACA;AAAA,UACE,MAAM,GAAGA,KAAI,IAAI,KAAK;AAAA,UACtB,UAAU,WAAW,KAAK;AAAA,QAAA;AAAA,MAC5B;AAAA,IAEJ;AAAA,EACF;AAEA,QAAM,wBAAwB,CAACA,QAAc,iBAAyB,MAAM;AAC1E,mBAAeA,QAAM,YAAY;AAAA,EACnC;AAEA,QAAM,WAAW,UAAU;AAE3B,QAAM,oBAAoB,MAAM;AAC9B,QAAI,oBAAoB;AACtB,aAAO,cAAc,EAAE,IAAI,yBAAyB,gBAAgB,SAAS;AAAA,IAAA;AAG3E,QAAA,YAAY,mCAAmC,KAAK;AAC/C,aAAA;AAAA,QACL;AAAA,UACE,IAAI,eAAe,yCAAyC;AAAA,UAC5D,gBACE;AAAA,QACJ;AAAA,QACA;AAAA,UACE,QAAQ,mCAAmC;AAAA,QAAA;AAAA,MAE/C;AAAA,IAAA;AAGE,QAAA,YAAY,mCAAmC,KAAK;AAC/C,aAAA;AAAA,QACL;AAAA,UACE,IAAI,eAAe,2CAA2C;AAAA,UAC9D,gBACE;AAAA,QACJ;AAAA,QACA,EAAE,QAAQ,MAAM,iCAAiC;AAAA,MACnD;AAAA,IAAA;AAGK,WAAA;AAAA,MACL;AAAA,QACE,IAAI,eAAe,sCAAsC;AAAA,QACzD,gBAAgB;AAAA,MAClB;AAAA,MACA,EAAE,eAAe,SAASA,MAAK;AAAA,IACjC;AAAA,EACF;AAEA,QAAM,QAAQ,aAAa,eAAe,CAAC,UAAU,MAAM,KAAK;AAE1D,QAAA,oBAAoB,MAAM,MAAM;AAGpC,SAAA,oBAAC,qBAAoB,EAAA,iBAAe,MAClC,UAAA,qBAAC,MAAK,EAAA,WAAU,UAAS,YAAW,WAAU,KAAK,GAChD,UAAA;AAAA,IAAmC,mCAAA,0BACjC,KACC,EAAA,UAAA;AAAA,MAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC;AAAA,UACA;AAAA,UACA;AAAA,UACA,MAAAA;AAAA,UACA,oBAAoB;AAAA,UACpB;AAAA,QAAA;AAAA,MACF;AAAA,MACC,oBAAA,gBAAA,EAAe,IAAI,mBACjB,UAAc,cAAA;AAAA,QACb,IAAI,eAAe,kBAAkB;AAAA,QACrC,gBAAgB;AAAA,MACjB,CAAA,GACH;AAAA,MACC,oBAAA,gBAAA,EAAe,aAAU,aAAa,UAAS,UAAA;AAAA,MAChD,oBAAC,QAAG,oBAAkB,mBACnB,gBAAM,IAAI,CAAC,OAAO,UACjB;AAAA,QAAC;AAAA,QAAA;AAAA,UAEC,OAAO,QAAQ;AAAA,UACf,KAAK,MAAM;AAAA,UAEX,IAAI,MAAM;AAAA,UACV,MAAK;AAAA,UAEL,UAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC;AAAA,cACA,MAAAA;AAAA,cACA;AAAA,cACA,cAAc,MAAM;AAAA,cACpB,iBAAiB;AAAA,cACjB,wBAAwB,sBAAsBA,OAAM,KAAK;AAAA,cACzD,UAAU;AAAA,cACV,YAAY;AAAA,cACZ,YAAY;AAAA,cACZ,gBAAgB;AAAA,cAChB;AAAA,cAEC;AAAA,YAAA;AAAA,UAAA;AAAA,QACH;AAAA,QArBK,MAAM;AAAA,MAAA,CAuBd,EACH,CAAA;AAAA,IAAA,GACF;AAAA,IAEF,oBAAC,MAAK,EAAA,gBAAe,UACnB,UAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA,YAAY;AAAA,QACZ,QAAQ;AAAA,QACR,SAAS;AAAA,QAER,UAAkB,kBAAA;AAAA,MAAA;AAAA,IAAA,GAEvB;AAAA,IACA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA,QAAQ;AAAA,QACR,qBAAqB;AAAA,MAAA;AAAA,IAAA;AAAA,EACvB,EAAA,CACF,EACF,CAAA;AAEJ;AC3SA,MAAM,kBAAkB,CAAC,EAAE,MAAM,OAAO,UAAU,MAAAA,YAAiC;AAC3E,QAAA,EAAE,cAAc,IAAI,QAAQ;AAElC,QAAM,cAAc,cAAc;AAAA,IAChC,IAAI;AAAA,IACJ,gBAAgB;AAAA,EAAA,CACjB;AAGC,SAAA,qBAAC,MAAM,MAAN,EAAW,IAAIA,OAAM,MAAY,MAAAA,OAAY,UAC5C,UAAA;AAAA,IAAC,oBAAA,MAAM,OAAN,EAAa,UAAM,MAAA,CAAA;AAAA,IACpB;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,UAAQ;AAAA,QACR;AAAA,QACA,aAAa,oBAAC,YAAW,EAAA,MAAK,aAAa,CAAA;AAAA,QAC3C,MAAK;AAAA,QACL,OAAM;AAAA,MAAA;AAAA,IACR;AAAA,IACA,oBAAC,MAAM,MAAN,CAAW,CAAA;AAAA,EAAA,GACd;AAEJ;ACxBA,MAAM,SAAS,kBAAkB,gBAAgB;AAAA,EAC/C,WAAW,CAAC,aAAa;AAAA,IACvB,eAAe,QAAQ,MAKrB;AAAA,MACA,OAAO,CAAC,EAAE,QAAQ,GAAG,WAAW;AACvB,eAAA;AAAA,UACL,KAAK;AAAA,UACL,QAAQ;AAAA,UACR;AAAA,UACA,QAAQ;AAAA,YACN;AAAA,UAAA;AAAA,QAEJ;AAAA,MACF;AAAA,MACA,mBAAmB,CAAC,aAAmC,SAAS;AAAA,IAAA,CACjE;AAAA,IACD,aAAa,QAAQ,SAKnB;AAAA,MACA,OAAO,CAAC,EAAE,QAAQ,GAAG,YAAY;AAAA,QAC/B,KAAK;AAAA,QACL,QAAQ;AAAA,QACR;AAAA,QACA,QAAQ;AAAA,UACN;AAAA,QAAA;AAAA,MACF;AAAA,MAEF,mBAAmB,CAAC,aAAmC,SAAS;AAAA,IAAA,CACjE;AAAA,IACD,iBAAiB,QAAQ,MAKvB;AAAA,MACA,OAAO,CAAC,EAAE,QAAQ,GAAG,YAAY;AAAA,QAC/B,KAAK;AAAA,QACL,QAAQ;AAAA,QACR;AAAA,QACA,QAAQ;AAAA,UACN;AAAA,QAAA;AAAA,MACF;AAAA,MAEF,cAAc,CAAC,MAAM,QAAQ,WAAW;AAAA,QACtC,EAAE,MAAM,mBAAmB,IAAI,OAAO,eAAe;AAAA,MAAA;AAAA,IAExD,CAAA;AAAA,EACH;AACF,CAAC;AAED,MAAM,EAAE,wBAAwB,uBAAuB,wBAAA,IAA4B;ACxBnF,MAAM,YAAY;AAMlB,MAAM,WAAW,MAAM;AAAA,EACrB,CAAC,EAAE,MAAM,OAAO,aAAa,MAAAA,OAAM,UAAU,GAAG,MAAM,GAAG,QAAQ;AAC/D,UAAM,EAAE,OAAO,GAAG,IAAI,OAAO;AAC7B,UAAM,gBAAgB,QAAQ,YAAY,CAAC,SAAS,KAAK,MAAM;AAC/D,UAAM,CAAC,cAAc,eAAe,IAAI,MAAM,SAAwC;AACtF,UAAM,CAAC,gBAAgB,iBAAiB,IAAI,MAAM,SAAS,KAAK;AAC1D,UAAA,YAAY,SAAS,UAAU,MAAM;AACrC,UAAA,QAAQ,SAASA,KAAI;AAC3B,UAAM,iBAAiB,YAAY,MAAM,OAAO,GAAG;AAC7C,UAAA,aAAa,mBAAmB,MAAM;AACtC,UAAA,EAAE,mBAAmB,IAAI,gBAAgB;AAC/C,UAAM,EAAE,yBAAyB,eAAe,IAAI,mBAAmB;AACjE,UAAA,EAAE,cAAc,IAAI,QAAQ;AAClC,UAAM,CAAC,EAAE,OAAO,IAAI,eAAe;AAC7B,UAAA,SAAS,MAAM,QAAQ,MAAM,iBAAiB,KAAK,GAAG,CAAC,KAAK,CAAC;AAE7D,UAAA;AAAA,MACJ,MAAM;AAAA,MACN,WAAW;AAAA,MACX,OAAO;AAAA,IAAA,IACL;AAAA,MACF;AAAA,QACE,gBAAgB;AAAA,QAChB,OAAOA;AAAA,QACP,MAAM;AAAA,UACJ,IAAI,MAAM;AAAA,UACV,GAAG;AAAA,QACL;AAAA,QACA;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM,MAAM,SAAS,CAAC;AAAA,MAAA;AAAA,IAE1B;AAEA,UAAM,UAAU,MAAM;AACpB,UAAI,UAAU;AACO,2BAAA;AAAA,UACjB,MAAM;AAAA,UACN,SAAS,eAAe,QAAQ;AAAA,QAAA,CACjC;AAAA,MAAA;AAAA,IAEF,GAAA,CAAC,UAAU,gBAAgB,kBAAkB,CAAC;AAMjD,UAAM,UAAU,MAAM;AAChB,UAAA,uBAAuB,MAAM,UAAU,QAAW;AAC9C,cAAA,SAASA,OAAM,mBAAmB;AAAA,MAAA;AAAA,IAEzC,GAAA,CAAC,qBAAqB,OAAOA,KAAI,CAAC;AAErC,UAAM,CAAC,aAAa,EAAE,WAAW,gBAAiB,CAAA,IAAI,uBAAuB;AAE7E,UAAM,wBAAwB,YAAY;AACpC,UAAA;AACI,cAAA,MAAM,MAAM,YAAY;AAAA,UAC5B,gBAAgB;AAAA,UAChB,OAAOA;AAAA,UACP,MAAM,EAAE,IAAI,MAAM,IAAI,GAAG,cAAc;AAAA,UACvC;AAAA,QAAA,CACD;AAED,YAAI,UAAU,KAAK;AACX,gBAAA,SAASA,OAAM,IAAI,IAAI;AAAA,QAAA,OACxB;AACc,6BAAA;AAAA,YACjB,MAAM;AAAA,YACN,SAAS,eAAe,IAAI,KAAK;AAAA,UAAA,CAClC;AAAA,QAAA;AAAA,eAEI,KAAK;AACO,2BAAA;AAAA,UACjB,MAAM;AAAA,UACN,SAAS,cAAc;AAAA,YACrB,IAAI;AAAA,YACJ,gBAAgB;AAAA,UACjB,CAAA;AAAA,QAAA,CACF;AAAA,MAAA;AAAA,IAEL;AAEM,UAAA;AAAA,MACJ,MAAM;AAAA,MACN,WAAW;AAAA,MACX,OAAO;AAAA,IAAA,IACL;AAAA,MACF;AAAA,QACE,gBAAgB;AAAA,QAChB,OAAOA;AAAA,QACP,OAAO,iBAAiB,eAAe,KAAS,IAAA;AAAA,QAChD;AAAA,MACF;AAAA,MACA;AAAA;AAAA,QAEE,MAAM,CAAC;AAAA,WACJ,cAAc,cAAc,kBAAkB,UAAU,KAAK,eAAe,KAAM,CAAA;AAAA,QAAA;AAAA,MACrF;AAAA,IAEJ;AAEA,UAAM,UAAU,MAAM;AACpB,UAAI,mBAAmB;AACF,2BAAA;AAAA,UACjB,MAAM;AAAA,UACN,SAAS,eAAe,iBAAiB;AAAA,QAAA,CAC1C;AAAA,MAAA;AAAA,IAEF,GAAA,CAAC,mBAAmB,gBAAgB,kBAAkB,CAAC;AAE1D,UAAM,UAAU,MAAM;AAKpB,sBAAgB,gBAAgB;AAE5B,UAAA;AAEJ,UAAI,kBAAkB,aAAa;AACzB,gBAAA,OAAO,WAAW,MAAM;AAC9B,0BAAgB,MAAS;AAAA,WACxB,GAAI;AAAA,MAAA;AAGT,aAAO,MAAM;AACX,YAAI,OAAO;AACT,uBAAa,KAAK;AAAA,QAAA;AAAA,MAEtB;AAAA,IAAA,GACC,CAAC,gBAAgB,CAAC;AAEf,UAAA,YAAY,0BAA0B,mBAAmB;AAEzD,UAAA,WAAW,mBAAmBA,KAAI;AAClC,UAAA,eAAe,gBAAgB,KAAK,QAAQ;AAElD,UAAM,0BACH,cAAc,cAAc,kBAAkB,QAAQ,gBAAgB,CAAC;AAGxE,WAAA,qBAAC,MAAM,MAAN,EAAW,MAAY,MAAAA,OAAY,OAAO,MAAM,OAAO,UACtD,UAAA;AAAA,MAAA,oBAAC,MAAM,OAAN,EAAY,QAAQ,aAAc,UAAM,OAAA;AAAA,MACzC;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,KAAK;AAAA,UACL,UAAU,MAAM;AAAA,UAChB,WACG,qBAAA,MAAA,EAAK,UAAS,YAAW,KAAK,GAC5B,UAAA;AAAA,YACC,0BAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,YAAW;AAAA,gBACX,KAAK;AAAA,gBACL,gBAAe;AAAA,gBACf,YAAY,CAAC,CAAC,cAAc;AAAA,gBAC5B,uBAAmB;AAAA,gBACnB,UAAS;AAAA,gBACT,eAAc;AAAA,gBACd,OAAO;AAAA,gBACP,OAAM;AAAA,gBAEL,UAAA;AAAA,kBAAA,cAAc,cAAc,oBAAC,aAAY,CAAA,CAAA,wBAAM,eAAc,EAAA;AAAA,kBAE9D;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACC,WAAW,aAAa,cAAc,eAAe;AAAA,sBACrD,SAAQ;AAAA,sBAEP,UAAA;AAAA,wBACC,aAAa,cACT;AAAA,0BACE,IAAI;AAAA,0BACJ,gBAAgB;AAAA,wBAAA,IAElB;AAAA,0BACE,IAAI;AAAA,0BACJ,gBAAgB;AAAA,wBAAA;AAAA,sBAClB;AAAA,oBACN;AAAA,kBAAA;AAAA,gBACF;AAAA,cAAA;AAAA,YACF;AAAA,YAGD,CAAC,MAAM,YAEH,qBAAA,UAAA,EAAA,UAAA;AAAA,cAAA,kBACE,oBAAA,gBAAA,EAAe,YAAW,UAAS,gBAAe,YAAW,KAAK,GACjE,UAAA,oBAAC,YAAW,EAAA,WAAU,cAAa,SAAQ,MACxC,UAAc,cAAA;AAAA,gBACb,IAAI;AAAA,gBACJ,gBAAgB;AAAA,cAAA,CACjB,GACH,EACF,CAAA;AAAA,cAGF;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,SAAS;AAAA,kBACT,OAAO,cAAc;AAAA,oBACnB,IAAI;AAAA,oBACJ,gBAAgB;AAAA,kBAAA,CACjB;AAAA,kBACD,cAAc,MAAM,kBAAkB,IAAI;AAAA,kBAC1C,cAAc,MAAM,kBAAkB,KAAK;AAAA,kBAE1C,UAAA,YACE,oBAAA,gBAAA,EAAe,eAAY,mBAC1B,8BAAC,QAAO,CAAA,CAAA,EAAA,CACV,IAEA,oBAAC,gBAAe,CAAA,CAAA;AAAA,gBAAA;AAAA,cAAA;AAAA,YAEpB,EACF,CAAA;AAAA,UAAA,GAEJ;AAAA,UAEF,UAAU,MAAM;AAAA,UAChB,OAAO,MAAM,SAAS;AAAA,UACrB,GAAG;AAAA,QAAA;AAAA,MACN;AAAA,MACA,oBAAC,MAAM,OAAN,EAAY;AAAA,MACb,oBAAC,MAAM,MAAN,CAAW,CAAA;AAAA,IAAA,GACd;AAAA,EAAA;AAGN;AAMA,MAAM,qBAAqB,OAAO,MAAM,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAOhC,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAMtC,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,UAAU;AAAA;AAAA;AAAA;AASpD,MAAM,iBAAiB,OAAsB,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAMnC,CAAC,EAAE,OAAO,WAAW,MAC3B,aAAa,MAAM,OAAO,aAAa,MAAM,OAAO,SAAS;AAAA;AAAA;AAAA;AASrE,MAAM,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASjB,MAAM,iBAAiB,OAAsB,IAAI;AAAA,eAClC,QAAQ;AAAA;AAGjB,MAAA,mBAAmB,MAAM,KAAK,QAAQ;ACtT5C,MAAM,KAAe,IAAI,SAAS;AAAA,EAChC,MAAM;AAAA;AAAA,EACN,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,aAAa;AAAA;AAAA,EAEb,UAAU,KAAK,MAAM;AACnB,QAAI,QAAQ,SAAS,UAAU,YAAY,IAAI,GAAG;AAChD,aACE,+BACA,GAAG,MAAM,WAAW,KAAK,YAAa,CAAA,IACtC,aACA,UAAU,MAAM,KAAK,IAAI,EAAE,QAC3B;AAAA,IAAA;AAIJ,QAAI,SAAS,QAAQ;AACb,YAAA,SAAS,cAAc,GAAG;AAG9B,aAAA,+BACA,GAAG,MAAM,WAAW,OAAO,QAAS,IACpC,aACA,OAAO,QACP;AAAA,IAAA;AAIJ,WAAO,6BAA6B,GAAG,MAAM,WAAW,GAAG,IAAI;AAAA,EAAA;AAEnE,CAAC,EACE,IAAI,IAAI,EACR,IAAI,WAAW,SAAS,EACxB,IAAI,WAAW,KAAK,EACpB,IAAI,OAAO,EACX,IAAI,KAAK,EACT,IAAI,QAAQ,EACZ,IAAI,GAAG,EACP,IAAI,IAAI,EACR,IAAI,GAAG,EACP,IAAI,GAAG;AAGV,GAAG,SAAS,MAAM,eAAe,CAAC,QAAQ,KAAK,SAAS,KAAK,QAAQ;AAC7D,QAAA,UAAU,IAAI,MAAM,mBAAmB,QAAQ,KAAK,SAAS,KAAK,GAAG;AAE3E,SAAO,qCAAqC,UAAU;AACxD;AAEA,GAAG,SAAS,MAAM,kBAAkB,MAAM;AAEjC,SAAA;AACT;AChEA,MAAM,iBAAiB,CAAC,EAAE,OAAO,SAA8B;AAC7D,QAAM,OAAO,MAAM;AAAA,IACjB,MACE,aAAa,GAAG,OAAO,KAAK,WAAW,OAAO,IAAI,KAAK,EAAE,GAAG;AAAA,MAC1D,GAAG,aAAa;AAAA,MAChB,aAAa;AAAA,MACb,mBAAmB;AAAA,QACjB,KAAK,CAAC,QAAQ,SAAS,OAAO,UAAU,SAAS,UAAU,QAAQ,YAAY,QAAQ;AAAA,QACvF,KAAK,CAAC,OAAO,KAAK;AAAA,QAClB,QAAQ,CAAC,OAAO,MAAM;AAAA,MAAA;AAAA,IACxB,CACD;AAAA,IACH,CAAC,IAAI;AAAA,EACP;AAGE,SAAA,oBAAC,WACC,UAAC,oBAAA,OAAA,EAAI,yBAAyB,EAAE,QAAQ,KAAK,EAAA,CAAG,EAClD,CAAA;AAEJ;AAEA,MAAM,UAAU,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAMV,CAAC,EAAE,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,CAAC,IAAI,MAAM,OAAO,CAAC,CAAC,EAAE;AAAA;AAAA,sBAE7C,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,QAAQ;AAAA,WAC/C,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,UAAU;AAAA,iBAChC,CAAC,EAAE,YAAY,MAAM,YAAY,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BAQ1B,CAAC,EAAE,YAAY,MAAM,OAAO,CAAC,CAAC;AAAA,wBAChC,CAAC,EAAE,YAAY,MAAM,OAAO,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA,qBAIjC,CAAC,EAAE,YAAY,MAAM,OAAO,CAAC,CAAC;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,kBAgCjC,CAAC,EAAE,YAAY,MAAM,OAAO,CAAC,CAAC;AAAA,qBAC3B,CAAC,EAAE,YAAY,MAAM,OAAO,CAAC,CAAC;AAAA;AAAA;AAAA,6BAGtB,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,UAAU;AAAA;AAAA,eAEpD,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,MAAM,MAAM,OAAO,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAS3D,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,UAAU;AAAA;AAAA;AAAA,mBAGvC,CAAC,EAAE,YAAY,MAAM,OAAO,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA,0BAIvB,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,UAAU;AAAA;AAAA;AAAA;AAAA,iBAI/C,CAAC,EAAE,YAAY,MAAM,OAAO,CAAC,CAAC;AAAA,0BACrB,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,eAmBjD,CAAC,EAAE,YAAY,MAAM,OAAO,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BAcnB,CAAC,EAAE,YAAY,MAAM,OAAO,CAAC,CAAC;AAAA,wBAChC,CAAC,EAAE,YAAY,MAAM,OAAO,CAAC,CAAC;AAAA;AAAA;AAAA,4BAG1B,CAAC,EAAE,YAAY,MAAM,OAAO,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BAWhC,CAAC,EAAE,YAAY,MAAM,OAAO,CAAC,CAAC;AAAA,wBAChC,CAAC,EAAE,YAAY,MAAM,OAAO,CAAC,CAAC;AAAA;AAAA;AAAA,4BAG1B,CAAC,EAAE,YAAY,MAAM,OAAO,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AClK1D,IAAI,SAAS,4DACX,cAAc,uDACd,kBAAkB;AAWpB,SAAS,qCAAqC,IAAuB;AAEnE,MAAI,GAAG,UAAU,cAAc,UAAU,WAAW;AACpD,MAAI,SAAS,GAAG,eAAe,GAC7B,eAAe,CAAC;AAClB,WAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AAClC,QAAA,MAAM,OAAO,CAAC,EAAE;AAEpB,QAAI,WAAW,GAAG,cAAc,IAAI,IAAI;AACpC,QAAA,SAAS,SAAS,SAAS;AAC3B,QAAA,UAAU,SAAS,UAAU;AAE7B,QAAA,OAAO,GAAG,QAAQ,IAAI,IAAI,GAC5B,QAAQ,OAAO,KAAK,IAAI;AACtB,QAAA,qBAAqB,QAAQ,KAAK,KAAK,MAAM,GAAG,IAAI,EAAE,CAAC;AAC3D,QAAI,CAAC,OAAO,CAAC,EAAE,MAAM,KAAM,CAAC,UAAU,CAAC,WAAY,CAAC,SAAS,oBAAoB;AAC/E,SAAG,YAAY,kBAAkB;AACjC;AAAA,IAAA;AAEE,QAAA,YAAY,KAAK,IAAI,GAAG;AAC1B,UAAI,aAAa,WAAW,QAAQ,KAAK,IAAI;AAC7C,UAAI,YAAY,CAAC,QAAQ,KAAK,IAAI;AAClC,UAAI,cAAc;AACb,WAAA;AAAA,UACD;AAAA,UACA;AAAA,YACE,MAAM,IAAI;AAAA,YACV,IAAI;AAAA,UACN;AAAA,UACA;AAAA,YACE,MAAM,IAAI;AAAA,YACV,IAAI,IAAI,KAAK;AAAA,UAAA;AAAA,QAEjB;AACF,mBAAa,CAAC,IAAI;AAAA,IAAA,OACb;AACL,UAAI,SAAS,MAAM,CAAC,GAClB,QAAQ,MAAM,CAAC;AACjB,UAAI,WAAW,EAAE,gBAAgB,KAAK,MAAM,CAAC,CAAC,KAAK,MAAM,CAAC,EAAE,QAAQ,GAAG,KAAK;AAC5E,UAAI,SAAS,WAAW,SAAS,MAAM,CAAC,GAAG,EAAE,IAAI,IAAI,MAAM,CAAC,IAAI,MAAM,CAAC,EAAE,QAAQ,KAAK,GAAG;AACzF,mBAAa,CAAC,IAAI,OAAO,SAAS,SAAS;AAEvC,UAAA,SAAgD,uCAAA,IAAI,GAAG;AAAA,IAAA;AAAA,EAC7D;AAGF,KAAG,kBAAkB,YAAY;AACnC;AAEA,SAAS,sCAAsC,IAAuB,KAA0B;AAC9F,MAAI,YAAY,IAAI,MAClB,YAAY,GACZ,YAAY;AACV,MAAA,YAAY,OAAO,KAAK,GAAG,QAAQ,SAAS,CAAC,GAC/C,cAAc,UAAW,CAAC;AAEzB,KAAA;AACY,iBAAA;AACb,QAAI,iBAAiB,YAAY;AAC7B,QAAA,WAAW,GAAG,QAAQ,cAAc;AACpC,QAAA,WAAW,OAAO,KAAK,QAAQ;AAEnC,QAAI,UAAU;AACR,UAAA,aAAa,SAAS,CAAC;AAC3B,UAAI,YAAY,SAAS,UAAW,CAAC,GAAG,EAAE,IAAI,YAAY;AAC1D,UAAI,aAAa,SAAS,SAAS,CAAC,GAAG,EAAE,GACvC,aAAa;AAEf,UAAI,gBAAgB,cAAc,CAAC,MAAM,UAAU,GAAG;AAChD,YAAA,cAAc,WAAY,cAAa,aAAa;AACpD,YAAA,YAAY,WAAY,cAAa,YAAY;AAClD,WAAA;AAAA,UACD,SAAS,QAAQ,QAAQ,aAAa,aAAa,SAAS,CAAC,IAAI,SAAS,CAAC,CAAC;AAAA,UAC5E;AAAA,YACE,MAAM;AAAA,YACN,IAAI;AAAA,UACN;AAAA,UACA;AAAA,YACE,MAAM;AAAA,YACN,IAAI,SAAS;AAAA,UAAA;AAAA,QAEjB;AAAA,MAAA,OACK;AACD,YAAA,YAAY,SAAS,WAAW,OAAQ;AAG5C,YAAI,YAAY,SAAS,WAAW,UAAU,cAAc,EAAG;AAClD,qBAAA;AAAA,MAAA;AAAA,IACf;AAAA,EACF,SACO;AACX;ACrFA,MAAM,SAAS,MAAM;AAAA,EACnB,CACE;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,MAAAA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,KAEF,iBACG;AACG,UAAA,cAAc,MAAM,OAAO,QAAQ;AAEzC,UAAM,UAAU,MAAM;AACpB,UAAI,UAAU,SAAS;AAGrB,kBAAU,QAAQ,WAAW;AAAA,MAAA;AAE/B,gBAAU,UAAU,WAAW,aAAa,YAAY,SAAU;AAAA,QAChE,cAAc;AAAA,QACd,WAAW;AAAA,UACT,OAAO;AAAA,UACP,KAAK;AAAA,UACL,aAAa;AAAA,QACf;AAAA,QACA,UAAU;AAAA,QACV,aAAa;AAAA,QACb;AAAA,QACA,YAAY;AAAA,QACZ,YAAY;AAAA,MAAA,CACb;AAGD,iBAAW,SAAS,uCAClB;AACF,gBAAU,QAAQ,GAAG,UAAU,CAAC,QAAQ;AACtC,oBAAY,QAAQA,OAAM,IAAI,SAAA,CAAU;AAAA,MAAA,CACzC;AAAA,OACA,CAAC,WAAW,aAAaA,OAAM,WAAW,CAAC;AAE9C,UAAM,UAAU,MAAM;AACpB,UAAI,SAAS,CAAC,UAAU,QAAQ,YAAY;AAChC,kBAAA,QAAQ,SAAS,KAAK;AAAA,MAAA;AAAA,IAClC,GACC,CAAC,WAAW,KAAK,CAAC;AAErB,UAAM,UAAU,MAAM;AACpB,UAAI,iBAAiB,UAAU;AACnB,kBAAA,QAAQ,UAAU,YAAY,UAAU;AAAA,MAAA,OAC7C;AACK,kBAAA,QAAQ,UAAU,YAAY,KAAK;AAAA,MAAA;AAAA,IAE9C,GAAA,CAAC,UAAU,eAAe,SAAS,CAAC;AAEvC,UAAM,UAAU,MAAM;AACpB,UAAI,OAAO;AACC,kBAAA,QAAQ,UAAU,qBAAqB,KAAK;AAAA,MAAA,OACjD;AAEK,kBAAA,QAAQ,UAAU,qBAAqB,QAAQ;AAAA,MAAA;AAAA,IAC3D,GACC,CAAC,WAAW,KAAK,CAAC;AAEf,UAAA;AAAA,MACJ;AAAA,MACA,OAAO;AAAA,QACL,QAAQ;AACI,oBAAA,QAAQ,cAAc,EAAE,MAAM;AAAA,QAC1C;AAAA,QACA,eAAe,MAAqD;AAClE,oBAAU,QAAQ,gBAAgB,eAAe,IAAI;AAAA,QAAA;AAAA,MACvD;AAAA,MAEF,CAAC,SAAS;AAAA,IACZ;AAEA,gCACG,yBACC,EAAA,UAAA;AAAA,MAAC,oBAAA,uBAAA,EAAsB,eAAe,cAAc,WAAW,YAAY,eACzE,UAAC,oBAAA,YAAA,EAAS,KAAK,YAAA,CAAa,EAC9B,CAAA;AAAA,MACC,iBAAiB,oBAAC,gBAAe,EAAA,MAAM,MAAO,CAAA;AAAA,IAAA,GACjD;AAAA,EAAA;AAGN;AAEA,MAAM,0BAA0B,OAAO;AAAA;AAAA;AAAA;AAKvC,MAAM,wBAAwB,OAAO;AAAA,YACzB,CAAC,EAAE,UAAA,MAAiB,YAAY,2BAA2B,MAAO;AAAA;AAAA;AAAA;AAAA,aAIjE,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAMrC,CAAC,EAAE,cAAA,MACX,gBACI,SACA,OAAO;AAAA,aACJ,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eASpC,CAAC,EAAE,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,CAAC,IAAI,MAAM,OAAO,CAAC,CAAC,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAO7C,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,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;ACpbnD,MAAM,eAAe,CAAC;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AAAA,EACA,iBAAiB;AAAA,EACjB;AACF,MAAyB;AACjB,QAAA,EAAE,cAAc,IAAI,QAAQ;AAElC,QAAM,UAAU,MAAM;AACpB,QAAI,cAAc;AACP,eAAA,KAAK,UAAU,IAAI,kBAAkB;AAAA,IAAA;AAGhD,WAAO,MAAM;AACF,eAAA,KAAK,UAAU,OAAO,kBAAkB;AAAA,IACnD;AAAA,EAAA,GACC,CAAC,YAAY,CAAC;AAEjB,MAAI,cAAc;AAEd,WAAA,oBAAC,UAAO,MAAK,UAAS,cAAY,OAChC,UAAA,oBAAC,WAAU,EAAA,UAAU,YACnB,UAAA;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,UAAA;AAAA,UAAC;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,UAAC,qBAAA,MAAA,EAAK,QAAO,QAAO,YAAW,cAC7B,UAAA;AAAA,cAAA,oBAAC,eAAc,EAAA,MAAK,KAAI,QAAO,QAC5B,UACH;AAAA,cACA,qBAAC,MAAK,EAAA,YAAW,SAAQ,WAAU,UAAS,MAAM,GAAG,QAAO,QAAO,OAAM,QACvE,UAAA;AAAA,gBAAA;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,QAAO;AAAA,oBACP,YAAW;AAAA,oBACX,gBAAe;AAAA,oBACf,QAAQ;AAAA,oBACR,OAAM;AAAA,oBAEN,+BAACqB,gBAAa,EAAA,SAAS,YAAY,SAAQ,YAAW,MAAK,KACzD,UAAA;AAAA,sBAAA,oBAAC,cACE,UAAc,cAAA;AAAA,wBACb,IAAI;AAAA,wBACJ,gBAAgB;AAAA,sBACjB,CAAA,GACH;AAAA,0CACC,UAAS,CAAA,CAAA;AAAA,oBAAA,EACZ,CAAA;AAAA,kBAAA;AAAA,gBACF;AAAA,gBAEC,oBAAA,KAAA,EAAI,UAAS,YAAW,QAAO,QAAO,OAAM,QAC3C,UAAC,oBAAA,gBAAA,EAAe,MAAM,eAAA,CAAgB,EACxC,CAAA;AAAA,cAAA,EACF,CAAA;AAAA,YAAA,EACF,CAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MACF;AAAA,OAEJ,EACF,CAAA;AAAA,EAAA;AAKF,SAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAa,QAAQ,cAAc;AAAA,MACnC,aAAY;AAAA,MACZ,aAAY;AAAA,MACZ,WAAS;AAAA,MACT,WAAU;AAAA,MACV,YAAW;AAAA,MAEV;AAAA,IAAA;AAAA,EACH;AAEJ;AAEA,MAAM,gBAAgB,OAAsB,IAAI;AAAA,gBAChC,CAAC,EAAE,MAAM,MACrB,GAAG,MAAM,OAAO,UAAU,GAAG,KAAK,MAAM,MAAM,GAAG,EAC9C,SAAS,EAAE,EACX,SAAS,GAAG,GAAG,CAAC,EAAE;AAAA;AAGzB,MAAM,gBAAgB,OAAqB,GAAG;AAAA,4BAClB,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,UAAU;AAAA;AAGlE,MAAMA,iBAAe,OAAO,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAUf,CAAC,EAAE,MAAA,MAAY,MAAM,YAAY,OAAO;AAAA;AAAA;AAAA;AAAA,mBAIxC,CAAC,EAAE,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,CAAC,EAAE;AAAA;AAAA;AAAA,cAGxC,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AC7IvC,MAAA,cAAc,CAAC,cAAsB,iBAAyB;AACrE,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,EAAA;AAGV,SAAA;AACT;AAEa,MAAA,aAAa,CAAC,iBAAyB;AAC9C,MAAA;AAEJ,QAAM,YAAY,EAAE,OAAO,aAAa,QAAQ,KAAK,EAAE;AAEvD,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,EAAA;AAGV,SAAA,EAAE,YAAY,UAAU;AACjC;AAEa,MAAA,oBAAoB,CAAC,aAAqB;AACjD,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,EAAA;AAGJ,SAAA;AACT;AAIa,MAAA,kBAAkB,CAC7B,QACA,iBACG;AACG,QAAA,aAAa,OAAO,QAAQ,aAAa;AAC3C,MAAA;AAEJ,MAAI,YAAY;AACR,UAAA,aAAa,YAAY,cAAc,UAAU;AAChD,WAAA,QAAQ,iBAAiB,UAAU;AAC1C,WAAO,QAAQ,MAAM;AAAA,EAAA,OAChB;AACL,mBAAe,WAAW,YAAY;AAC/B,WAAA,QAAQ,iBAAiB,aAAa,UAAU;AACvD,WAAO,QAAQ,MAAM;AAErB,UAAM,EAAE,MAAM,GAAA,IAAO,OAAO,QAAQ,UAAU;AACxC,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,aAAA,CAAc;AAAA,EAAA;AAExF;AAEa,MAAA,cAAc,CACzB,QACA,aACG;AACG,QAAA,MAAM,OAAO,QAAQ,OAAO;AAC5B,QAAA,YAAY,aAAa,eAAe,OAAO;AAEjD,MAAA,IAAI,qBAAqB;AACrB,UAAA,aAAa,IAAI,eAAe;AACtC,QAAI,SAAyB;AAEtB,WAAA,QAAQ,UAAU,WAAY;AACxB,iBAAA,QAAQ,SAAU,WAAW;AAChC,cAAA,MAAM,CAAC,UAAU,KAAK,MAAM,UAAU,OAAO,IAAI,EAAE,KAAK;AAG9D,YAAI,UAAU,MAAM;AAClB,mBAAS,IAAI,QAAQ,IAAI,CAAC,CAAC,EAAE,WAAW,SAAS;AAAA,QAAA;AAG1C,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,EAAA,GAAK,EAAE,MAAM,GAAG,IAAI,UAAU,QAAQ;AAAA,YAAA;AAAA,UAC5E,OACK;AACL,kBAAM,gBAAgB,aAAa,eAAe,OAAO,GAAG,IAAI,CAAC;AACjE,gBAAI,aAAa,eAAe,EAAE,MAAM,GAAG,IAAI,GAAG;AAAA,UAAA;AAAA,QACpD;AAAA,MACF,CACD;AAAA,IAAA,CACF;AAAA,EAAA,OACI;AACL,UAAM,EAAE,MAAM,gBAAgB,IAAI,UAAU;AACtC,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,IAC9C;AACO,WAAA,QAAQ,iBAAiB,YAAY;AAAA,EAAA;AAG9C,SAAO,QAAQ,MAAM;AACvB;AAEa,MAAA,eAAe,CAC1B,QACA,cACG;AACH,QAAM,EAAE,MAAM,YAAA,IAAgB,OAAO,QAAQ,UAAU;AACjD,QAAA,gBAAgB,kBAAkB,SAAS;AACjD,QAAM,cAAc,OAAO,QAAQ,QAAQ,WAAW;AAGtD,QAAM,kBAAkB,YAAY,QAAQ,aAAa,EAAE,EAAE,KAAK;AAElE,QAAM,eAAe,gBAAgB;AACrC,SAAO,QAAQ;AAAA,IACb,EAAE,MAAM,aAAa,IAAI,EAAE;AAAA,IAC3B,EAAE,MAAM,aAAa,IAAI,YAAY,OAAO;AAAA,EAC9C;AACO,SAAA,QAAQ,iBAAiB,YAAY;AAE5C,aAAW,MAAM;AACf,UAAM,oBAAoB,OAAO,QAAQ,QAAQ,WAAW,EAAE;AAC9D,WAAO,QAAQ,MAAM;AACrB,WAAO,QAAQ,UAAU,EAAE,MAAM,aAAa,IAAI,mBAAmB;AAAA,KACpE,CAAC;AACN;AAEa,MAAA,aAAa,CACxB,QACA,UACG;AACH,MAAI,EAAE,KAAS,IAAA,OAAO,QAAQ,UAAU;AACxC,QAAM,EAAE,GAAO,IAAA,OAAO,QAAQ,UAAU;AAElC,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,IAAA;AAGtC,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,IAAA;AAAA,EAC9D,CACD;AAED,aAAW,MAAM,OAAO,QAAQ,MAAA,GAAS,CAAC;AAC5C;AAIA,MAAM,uBAAuB,CAC3B,QACA,cACA,MACA,eACA,eACG;AACG,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,EACjC;AACA,SAAO,QAAQ,aAAa,IAAI,EAAE,MAAM,OAAO,GAAG,IAAI,KAAK,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,UAAM,EAAE,MAAM,QAAA,IAAY,OAAO,QAAQ,UAAU;AAC5C,WAAA,QAAQ,UAAU,EAAE,MAAM,UAAU,GAAG,IAAI,WAAW,QAAQ;AAAA,EAAA;AAIvE,SAAO,QAAQ;AAAA,IACb;AAAA,IACA,EAAE,MAAM,OAAO,GAAG,IAAI,EAAE;AAAA,IACxB,EAAE,MAAM,UAAU,IAAI,SAAS;AAAA,EACjC;AAEA,SAAO,QAAQ,MAAM;AACvB;AAEA,MAAM,0BAA0B,CAC9B,QACA,cACA,MACA,kBACG;AACG,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,EACjC;AACA,SAAO,QAAQ,aAAa,IAAI,EAAE,MAAM,OAAO,GAAG,IAAI,KAAK,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,EAAA,CAAG;AAAA,EAAA,OACvD;AACG,YAAA;AAER,UAAM,EAAE,GAAO,IAAA,OAAO,QAAQ,UAAU;AAClC,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,aAAA,CAAc;AAAA,EAAA;AAItF,SAAO,QAAQ;AAAA,IACb;AAAA,IACA,EAAE,MAAM,OAAO,GAAG,IAAI,EAAE;AAAA,IACxB,EAAE,MAAM,UAAU,IAAI,SAAS;AAAA,EACjC;AACA,SAAO,QAAQ,MAAM;AACvB;AAEa,MAAA,sBAAsB,CACjC,QACA,iBACG;AACG,QAAA,aAAa,OAAO,QAAQ,aAAa;AAC/C,QAAM,EAAE,KAAS,IAAA,OAAO,QAAQ,UAAU;AAC1C,QAAM,gBAAgB,OAAO,QAAQ,QAAQ,IAAI,EAAE;AAEnD,MAAI,YAAY;AACd,yBAAqB,QAAQ,cAAc,MAAM,eAAe,UAAU;AAAA,EAAA,OACrE;AACmB,4BAAA,QAAQ,cAAc,MAAM,aAAa;AAAA,EAAA;AAErE;ACnVa,MAAA,cAAc,OAAO,eAAe;AAAA,iBAChC,CAAC,EAAE,YAAY,MAAM,OAAO,CAAC,CAAC;AAAA;AAGlC,MAAA,aAAa,OAA4B,UAAU;AAAA,YACpD,CAAC,EAAE,MAAM,MAAM,KAAK,MAAM,OAAO,CAAC,CAAC,EAAE;AAAA;AAKpC,MAAA,wBAAwB,OAAO,eAAe;AAAA,kBACzC,CAAC,EAAE,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,CAAC,EAAE;AAAA;AAIxC,MAAA,eAAe,OAAO,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAUtB,CAAC,EAAE,MAAA,MAAY,MAAM,YAAY,OAAO;AAAA;AAAA;AAAA;AAAA,mBAIxC,CAAC,EAAE,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,CAAC,EAAE;AAAA;AAAA,cAExC,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;ACzBpD,MAAM,gBAAgB,CAAC,EAAE,qBAAyC;AAC1D,QAAA,EAAE,cAAc,IAAI,QAAQ;AAGhC,SAAA,oBAAC,OAAI,SAAS,GAAG,YAAW,cAAa,cAAc,qBACrD,UAAA,oBAAC,MAAK,EAAA,gBAAe,YAAW,YAAW,YACzC,UAAC,qBAAA,cAAA,EAAa,IAAG,UAAS,SAAS,gBAAgB,SAAQ,YAAW,MAAK,KACzE,UAAA;AAAA,IAAC,oBAAA,YAAA,EAAW,WAAU,cACnB,UAAc,cAAA;AAAA,MACb,IAAI;AAAA,MACJ,gBAAgB;AAAA,IACjB,CAAA,GACH;AAAA,wBACC,QAAO,CAAA,CAAA;AAAA,EAAA,EACV,CAAA,EACF,CAAA,GACF;AAEJ;ACmBA,MAAM,aAAa,CAAC;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAuB;AACrB,QAAM,CAAC,gBAAgB,iBAAiB,IAAI,MAAM,SAAS,KAAK;AAC1D,QAAA,EAAE,cAAc,IAAI,QAAQ;AAClC,QAAM,oBAAoB,cAAc;AAAA,IACtC,IAAI;AAAA,IACJ,gBAAgB;AAAA,EAAA,CACjB;AACqB,QAAM,OAA0B,IAAK;AAE3D,QAAM,sBAAsB,MAAM;AACd,sBAAA,CAAC,SAAS,CAAC,IAAI;AAAA,EACnC;AAEA,MAAI,YAAY,eAAe;AAE3B,WAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,SAAS;AAAA,QACT,YAAW;AAAA,QACX,gBAAe;AAAA,QACf,cAAc;AAAA,QAEd,UAAA;AAAA,UAAA,qBAAC,MACC,EAAA,UAAA;AAAA,YAAC,oBAAA,MAAM,MAAN,EACC,UAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,UAAQ;AAAA,gBACR,aAAa;AAAA,gBACb,cAAY;AAAA,gBACZ,MAAK;AAAA,gBAEL,UAAA;AAAA,kBAAC,oBAAA,oBAAA,EAAmB,OAAM,MAAK,UAAE,MAAA;AAAA,kBAChC,oBAAA,oBAAA,EAAmB,OAAM,MAAK,UAAE,MAAA;AAAA,kBAChC,oBAAA,oBAAA,EAAmB,OAAM,MAAK,UAAE,MAAA;AAAA,kBAChC,oBAAA,oBAAA,EAAmB,OAAM,MAAK,UAAE,MAAA;AAAA,kBAChC,oBAAA,oBAAA,EAAmB,OAAM,MAAK,UAAE,MAAA;AAAA,kBAChC,oBAAA,oBAAA,EAAmB,OAAM,MAAK,UAAE,KAAA,CAAA;AAAA,gBAAA;AAAA,cAAA;AAAA,YAAA,GAErC;AAAA,iCAEC,aACC,EAAA,UAAA;AAAA,cAAC,oBAAA,YAAA,EAAW,UAAQ,MAAC,OAAM,QAAO,MAAK,QACrC,UAAC,oBAAA,MAAA,CAAA,CAAK,EACR,CAAA;AAAA,cACA,oBAAC,YAAW,EAAA,UAAQ,MAAC,OAAM,UAAS,MAAK,UACvC,UAAC,oBAAA,QAAA,CAAA,CAAO,EACV,CAAA;AAAA,cACA,oBAAC,YAAW,EAAA,UAAQ,MAAC,OAAM,aAAY,MAAK,aAC1C,UAAC,oBAAA,WAAA,CAAU,CAAA,EACb,CAAA;AAAA,YAAA,GACF;AAAA,YAEA,oBAAC,cAAW,UAAQ,MAAC,OAAM,QACzB,UAAA,oBAAC,OAAK,CAAA,EACR,CAAA;AAAA,UAAA,GACF;AAAA,UAEC,CAAC,gBACC,oBAAA,QAAA,EAAO,SAAS,qBAAqB,SAAQ,YAC3C,UAAc,cAAA;AAAA,YACb,IAAI;AAAA,YACJ,gBAAgB;AAAA,UAAA,CACjB,EACH,CAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IAEJ;AAAA,EAAA;AAKF,SAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,SAAS;AAAA,MACT,YAAW;AAAA,MACX,gBAAe;AAAA,MACf,cAAc;AAAA,MAEd,UAAA;AAAA,QAAA,qBAAC,MACC,EAAA,UAAA;AAAA,UAAC,oBAAA,MAAM,MAAN,EACC,UAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,aAAa;AAAA,cACb,cAAY;AAAA,cAEZ,UAAU,CAAC,UAAU,cAAc,OAAO,SAAS;AAAA,cACnD,MAAK;AAAA,cAEL,UAAA;AAAA,gBAAC,oBAAA,oBAAA,EAAmB,OAAM,MAAK,UAAE,MAAA;AAAA,gBAChC,oBAAA,oBAAA,EAAmB,OAAM,MAAK,UAAE,MAAA;AAAA,gBAChC,oBAAA,oBAAA,EAAmB,OAAM,MAAK,UAAE,MAAA;AAAA,gBAChC,oBAAA,oBAAA,EAAmB,OAAM,MAAK,UAAE,MAAA;AAAA,gBAChC,oBAAA,oBAAA,EAAmB,OAAM,MAAK,UAAE,MAAA;AAAA,gBAChC,oBAAA,oBAAA,EAAmB,OAAM,MAAK,UAAE,KAAA,CAAA;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA,GAErC;AAAA,+BAEC,aACC,EAAA,UAAA;AAAA,YAAA,oBAAC,YAAW,EAAA,SAAS,MAAM,cAAc,QAAQ,SAAS,GAAG,OAAM,QAAO,MAAK,QAC7E,UAAA,oBAAC,OAAK,CAAA,GACR;AAAA,YACA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,SAAS,MAAM,cAAc,UAAU,SAAS;AAAA,gBAChD,OAAM;AAAA,gBACN,MAAK;AAAA,gBAEL,8BAAC,QAAO,CAAA,CAAA;AAAA,cAAA;AAAA,YACV;AAAA,YACA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,SAAS,MAAM,cAAc,aAAa,SAAS;AAAA,gBACnD,OAAM;AAAA,gBACN,MAAK;AAAA,gBAEL,8BAAC,WAAU,CAAA,CAAA;AAAA,cAAA;AAAA,YAAA;AAAA,UACb,GACF;AAAA,UACA,qBAAC,QAAQ,MAAR,EACC,UAAA;AAAA,YAAC,oBAAA,QAAQ,SAAR,EACC,UAAC,oBAAA,YAAA,EAAW,OAAM,QAChB,UAAA,oBAAC,MAAK,CAAA,CAAA,EACR,CAAA,GACF;AAAA,YACA,oBAAC,QAAQ,SAAR,EAAgB,YAAY,IAC3B,UAAA,qBAAC,MAAK,EAAA,SAAS,GACb,UAAA;AAAA,cAAA,qBAAC,uBACC,EAAA,UAAA;AAAA,gBAAA;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,SAAS,MAAM,cAAc,iBAAiB,WAAW,mBAAmB;AAAA,oBAC5E,OAAM;AAAA,oBACN,MAAK;AAAA,oBAEL,8BAAC,eAAc,CAAA,CAAA;AAAA,kBAAA;AAAA,gBACjB;AAAA,gBACA;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,SAAS,MAAM,cAAc,cAAc,WAAW,mBAAmB;AAAA,oBACzE,OAAM;AAAA,oBACN,MAAK;AAAA,oBAEL,8BAAC,YAAW,CAAA,CAAA;AAAA,kBAAA;AAAA,gBACd;AAAA,gBACA;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,SAAS,MAAM,cAAc,cAAc,WAAW,mBAAmB;AAAA,oBACzE,OAAM;AAAA,oBACN,MAAK;AAAA,oBAEL,8BAAC,YAAW,CAAA,CAAA;AAAA,kBAAA;AAAA,gBAAA;AAAA,cACd,GACF;AAAA,mCACC,iBACC,EAAA,UAAA;AAAA,gBAAA;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,SAAS,MAAM,cAAc,QAAQ,WAAW,mBAAmB;AAAA,oBACnE,OAAM;AAAA,oBACN,MAAK;AAAA,oBAEL,8BAAC,MAAK,CAAA,CAAA;AAAA,kBAAA;AAAA,gBACR;AAAA,gBACA;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,SAAS,MAAM;AACO,0CAAA;AACH,uCAAA;AAAA,oBACnB;AAAA,oBACA,OAAM;AAAA,oBACN,MAAK;AAAA,oBAEL,8BAACC,SAAM,CAAA,CAAA;AAAA,kBAAA;AAAA,gBACT;AAAA,gBACA;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,SAAS,MAAM,cAAc,QAAQ,WAAW,mBAAmB;AAAA,oBACnE,OAAM;AAAA,oBACN,MAAK;AAAA,oBAEL,8BAACpB,QAAK,CAAA,CAAA;AAAA,kBAAA;AAAA,gBACR;AAAA,gBACA;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,SAAS,MAAM,cAAc,SAAS,WAAW,mBAAmB;AAAA,oBACpE,OAAM;AAAA,oBACN,MAAK;AAAA,oBAEL,8BAAC,QAAO,CAAA,CAAA;AAAA,kBAAA;AAAA,gBAAA;AAAA,cACV,EACF,CAAA;AAAA,YAAA,EAAA,CACF,EACF,CAAA;AAAA,UAAA,EACF,CAAA;AAAA,QAAA,GACF;AAAA,QAEC,uBACE,oBAAA,QAAA,EAAO,SAAS,qBAAqB,SAAQ,YAC3C,UAAc,cAAA;AAAA,UACb,IAAI;AAAA,UACJ,gBAAgB;AAAA,QAAA,CACjB,EACH,CAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAEJ;AAEJ;AC1NA,MAAM,UAAU,MAAM;AAAA,EACpB,CAAC,EAAE,MAAM,UAAU,OAAO,MAAAF,OAAM,aAAa,UAAU,YAAY,GAAG,iBAAiB;AAC/E,UAAA,QAAQ,SAASA,KAAI;AACrB,UAAA,cAAc,MAAM,OAA4B,IAAI;AAC1D,UAAM,YAAY,MAAM;AAAA,MACtB;AAAA,IACF;AACA,UAAM,CAAC,eAAe,gBAAgB,IAAI,MAAM,SAAS,KAAK;AAC9D,UAAM,CAAC,iBAAiB,kBAAkB,IAAI,MAAM,SAAS,KAAK;AAClE,UAAM,CAAC,cAAc,eAAe,IAAI,MAAM,SAAS,KAAK;AAC5D,UAAM,aAAa,aAAa,eAAe,CAAC,UAAU,MAAM,UAAU;AAEpE,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,IACjC;AAEA,UAAM,oBAAoB,CACxB,OACA,kBACA,kBACG;AACH,cAAQ,OAAO;AAAA,QACb,KAAK;AAAA,QACL,KAAK,iBAAiB;AACpB,0BAAgB,kBAAkB,KAAK;AACvB,0BAAA;AAChB;AAAA,QAAA;AAAA,QAEF,KAAK;AAAA,QACL,KAAK,SAAS;AACZ,8BAAoB,kBAAkB,KAAK;AAC3B,0BAAA;AAChB;AAAA,QAAA;AAAA,QAEF,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK,aAAa;AAChB,0BAAgB,kBAAkB,KAAK;AACvC;AAAA,QAAA;AAAA,QAEF,KAAK;AAAA,QACL,KAAK,cAAc;AACjB,sBAAY,kBAAkB,KAAK;AACnB,0BAAA;AAChB;AAAA,QAAA;AAAA,QAEF,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK,MAAM;AACT,uBAAa,kBAAkB,KAAK;AACpC;AAAA,QAAA;AAAA,MAIF;AAAA,IAEJ;AAEM,UAAA,qBAAqB,CAAC,UAAiB;AAC3C,YAAM,iBAAiB,MAAM,IAAI,CAAC,OAAO;AAAA,QACvC,KAAK,EAAE,mBAAmB,EAAE;AAAA,QAC5B,KAAK,4BAA4B,EAAE,GAAG;AAAA,QACtC,MAAM,EAAE;AAAA,MAAA,EACR;AAEF,iBAAW,WAAW,cAAc;AACpC,yBAAmB,KAAK;AAAA,IAC1B;AAGE,WAAA,qBAAC,MAAM,MAAN,EAAW,MAAAA,OAAY,MAAY,OAAO,MAAM,OAAO,UACtD,UAAA;AAAA,MAAA,qBAAC,QAAK,WAAU,UAAS,YAAW,WAAU,KAAK,GACjD,UAAA;AAAA,QAAA,oBAAC,MAAM,OAAN,EAAY,QAAQ,aAAc,UAAM,OAAA;AAAA,QACzC;AAAA,UAAC;AAAA,UAAA;AAAA,YACC;AAAA,YACA,OAAO,MAAM;AAAA,YACb,gBAAgB,MAAM;AAAA,YACtB,YAAY;AAAA,YAEZ,UAAA;AAAA,cAAA;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,cAEA;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA,OAAO,MAAM;AAAA,kBACb;AAAA,kBACA,MAAAA;AAAA,kBACA,UAAU,MAAM;AAAA,kBAChB;AAAA,kBACA;AAAA,kBACA,OAAO,MAAM;AAAA,kBACb,KAAK;AAAA,gBAAA;AAAA,cACP;AAAA,cAEC,CAAC,gBAAiB,oBAAA,eAAA,EAAc,gBAAgB,mBAAoB,CAAA;AAAA,YAAA;AAAA,UAAA;AAAA,QACvE;AAAA,QACA,oBAAC,MAAM,MAAN,EAAW;AAAA,QACZ,oBAAC,MAAM,OAAN,CAAY,CAAA;AAAA,MAAA,GACf;AAAA,MACC;AAAA,MAEE,oBAAA,oBAAA,EAAmB,SAAS,sBAAsB,gBAAgB,mBAAoB,CAAA;AAAA,IAAA,GAE3F;AAAA,EAAA;AAGN;AAEM,MAAA,kBAAkB,MAAM,KAAK,OAAO;ACnH1C,MAAM,gBAAgB,CAAC,EAAE,SAAS,MAAM,cAAc,GAAG,YAAgC;AACvF,QAAM,EAAE,IAAI,UAAAuB,WAAU,eAAA,IAAmB,OAAO;AAChD,QAAM,iBAAiB,QAAQ,iBAAiB,CAAC,UAAU,MAAM,QAAQ;AAEzE,QAAM,kBAAkB,eAAe,mBAAmB,CAAC,UAAU,MAAM,eAAe;AAE1F,QAAM,kBAAkB,gBAAgB,iBAAiB,CAAC,SAAS,KAAK,eAAe;AACvF,QAAM,gBAAgB,gBAAgB,iBAAiB,CAAC,SAAS,KAAK,aAAa;AACnF,QAAM,kBAAkB,gBAAgB,iBAAiB,CAAC,SAAS,KAAK,eAAe;AACvF,QAAM,gBAAgB,gBAAgB,iBAAiB,CAAC,SAAS,KAAK,aAAa;AAEnF,MAAI,YAAY;AAChB,MAAI,mBAAmB,cAAc;AACnC,gBAAYA,WAAU;AAAA,EAAA;AAGlB,QAAA,iBAAiB,YAAY,kBAAkB;AAC/C,QAAA,iBAAiB,YAAY,gBAAgB;AAMnD,QAAM,mBAAmB,cAAc,MAAM,MAAM,gBAAgB,MAAM,IAAI;AAC7E,QAAM,mBAAmB,cAAc,MAAM,MAAM,gBAAgB,MAAM,IAAI;AAE7E,QAAM,SAAS,aAAa,iBAAiB,CAAC,QAAQ,IAAI,MAAM;AAC1D,QAAA,EAAE,uBAAuB;AAAA,IAC7B,gCAAgC,MAAM,SAAS,IAAI,CAAC,MAAM,UAAU,WAAW,IAAI;AAAA,EACrF;AAEA,QAAM,OAAO,aAAa,cAAc,MAAM,SAAS;AACjD,QAAA;AAAA,IACJ,MAAM,EAAE,WAAW;AAAA,MACjB,aAAa;AAGX,QAAA,QAAQ,SAAS,MAAM,IAAI;AAEjC,MAAI,CAAC,SAAS;AACL,WAAA;AAAA,EAAA;AAML,MAAA,CAAC,oBAAoB,CAAC,iBAAiB;AACzC,WAAQ,oBAAA,iBAAA,EAAgB,MAAa,GAAG,MAAO,CAAA;AAAA,EAAA;AAGjD,QAAM,kBACH,CAAC,oBAAoB,CAAC,mBAAoB,MAAM,YAAY;AAM3D,MAAA,gCAAgC,MAAM,SAAS,GAAG;AACpD,UAAM,cAAc,mBAAmB,MAAM,UAAU,WAAW;AAElE,QAAI,aAAa;AAER,aAAA,oBAAC,eAAa,GAAG,OAAQ,GAAG,OAAO,MAAY,UAAU,iBAAiB;AAAA,IAAA;AAIjF,WAAA;AAAA,MAACC;AAAAA,MAAA;AAAA,QACE,GAAG;AAAA,QACJ;AAAA,QAEA,MAAM,MAAM,UAAU;AAAA,QACtB,UAAU;AAAA,MAAA;AAAA,IACZ;AAAA,EAAA;AAOE,QAAA,kBAAkB,OAAO,KAAK,MAAM;AACtC,MAAA,CAAC,gCAAgC,MAAM,SAAS,KAAK,gBAAgB,SAAS,MAAM,IAAI,GAAG;AACvF,UAAA,cAAc,OAAO,MAAM,IAAI;AAErC,+BAAQ,aAAa,EAAA,GAAG,OAAO,MAAY,UAAU,iBAAiB;AAAA,EAAA;AAOxE,UAAQ,MAAM,MAAM;AAAA,IAClB,KAAK;AACI,aAAA,oBAACC,uBAAa,GAAG,OAAO,MAAY,MAAM,MAAM,MAAM,UAAU,gBAAiB,CAAA;AAAA,IAC1F,KAAK;AAED,aAAA;AAAA,QAACC;AAAAA,QAAA;AAAA,UACE,GAAG;AAAA,UACJ;AAAA,UACA,QAAQ,WAAW,MAAM,UAAU,SAAS,EAAE;AAAA,UAC9C,UAAU;AAAA,UAET,UAAC,CAAA,eAAgB,oBAAA,eAAA,EAAe,GAAG,WAAY,CAAA;AAAA,QAAA;AAAA,MAClD;AAAA,IAEJ,KAAK;AACH,iCAAQ,aAAa,EAAA,GAAG,OAAO,MAAY,UAAU,iBAAiB;AAAA,IACxE,KAAK;AACH,iCAAQC,wBAAgB,EAAA,GAAG,OAAO,MAAY,UAAU,iBAAiB;AAAA,IAC3E,KAAK;AACI,aAAA,oBAACC,mBAAS,GAAG,OAAO,MAAY,MAAM,MAAM,MAAM,UAAU,gBAAiB,CAAA;AAAA,IACtF,KAAK;AACI,aAAA,oBAACC,oBAAU,GAAG,OAAO,MAAY,MAAM,MAAM,MAAM,UAAU,gBAAiB,CAAA;AAAA,IAIvF,KAAK;AAED,aAAA;AAAA,QAACL;AAAAA,QAAA;AAAA,UACE,GAAG;AAAA,UACJ;AAAA,UACA,SAAS,MAAM,UAAU,KAAK,IAAI,CAAC,WAAW,EAAE,MAAA,EAAQ;AAAA,UAExD,MAAM,MAAM,cAAc,iBAAiB,MAAM;AAAA,UACjD,UAAU;AAAA,QAAA;AAAA,MACZ;AAAA,IAEJ;AAEE,YAAM,EAAE,QAAQ,SAAS,WAAW,YAAY,GAAG,cAAc;AAE/D,aAAA;AAAA,QAACA;AAAAA,QAAA;AAAA,UACE,GAAG;AAAA,UACJ;AAAA,UAEA,MAAM,MAAM,cAAc,iBAAiB,MAAM;AAAA,UACjD,UAAU;AAAA,QAAA;AAAA,MACZ;AAAA,EAAA;AAGR;AAEA,MAAM,kCAAkC,CACtC,cAEA,iBAAiB,aAAa,OAAO,UAAU,gBAAgB;AAEjE,MAAM,eAAe,CAAC,OAAkB,QAAW,cAA6C;AACxF,QAAA,EAAE,cAAc,IAAI,QAAQ;AAElC,QAAM,EAAE,SAAS,YAAY,UAAU,SAAS;AAE5C,MAAA,CAAC,WAAW,CAAC,SAAS;AACjB,WAAA;AAAA,EAAA;AAGH,QAAA,QAAQ,CAAC,CAAC,cAAc,WAAW,UAAU,eAAe,WAAW,EAAE;AAAA,IAC7E,UAAU;AAAA,EAAA,IAER;AAAA,IACE;AAAA,MACE,IAAI;AAAA,MACJ,gBAAgB;AAAA,IAClB;AAAA,IACA;AAAA,MACE,UAAU,KAAK,IAAI,WAAW,GAAG,WAAW,CAAC;AAAA,IAAA;AAAA,EAC/C,IAEF;AAEJ,QAAM,eAAe,OAAO,YAAY,YAAY,OAAO,YAAY;AAEhE,SAAA;AAAA,IACL;AAAA,MACE,IAAI;AAAA,MACJ,gBACE;AAAA,IACJ;AAAA,IACA;AAAA,MACE,KAAK;AAAA,MACL,KAAK;AAAA,MACL,aAAa;AAAA,MACb,MAAM;AAAA,MACN,SAAS,eACL,cAAc;AAAA,QACZ,IAAI;AAAA,QACJ,gBAAgB;AAAA,MACjB,CAAA,IACD;AAAA,MACJ,wBAAK,MAAG,CAAA,CAAA;AAAA,IAAA;AAAA,EAEZ;AACF;AAEA,MAAM,YAAY,CAAC,cAA6C;AAC1D,MAAA,SAAS,aAAa,SAAS,WAAW;AACrC,WAAA;AAAA,MACL,SAAS,CAAC,OAAO,MAAM,OAAO,UAAU,GAAG,CAAC,IAAI,OAAO,UAAU,GAAG,IAAI;AAAA,MACxE,SAAS,CAAC,OAAO,MAAM,OAAO,UAAU,GAAG,CAAC,IAAI,OAAO,UAAU,GAAG,IAAI;AAAA,IAC1E;AAAA,EACS,WAAA,eAAe,aAAa,eAAe,WAAW;AAC/D,WAAO,EAAE,SAAS,UAAU,WAAW,SAAS,UAAU,UAAU;AAAA,EAAA,OAC/D;AACL,WAAO,EAAE,SAAS,QAAW,SAAS,OAAU;AAAA,EAAA;AAEpD;AAEA,MAAM,wBAAwB,KAAK,aAAa;AC1OzC,MAAM,mCAAmC;AAAA,EAC9C,IAAI;AAAA;AACN;AAEa,MAAA,qBAAqB,OAAOV,OAAK,IAAI;AAAA;AAAA;AAIrC,MAAA,qBAAqB,OAAOA,OAAK,IAAI;AAAA;AAAA;AAAA,2BAGvB,iCAAiC,EAAE;AAAA,MACxD,CAAC,EAAE,UAAU,OAAO,qBAAqB,GAAG,GAAG;AAAA;AAAA;AAMrD,MAAM,aAAa,CAAC,EAAE,aAA8B;AAC5C,QAAA,EAAE,cAAc,IAAI,QAAQ;AAC5B,QAAA,EAAE,MAAM,IAAI,OAAO;AAEzB,SACG,oBAAA,MAAA,EAAK,WAAU,UAAS,YAAW,WAAU,KAAK,GAChD,UAAO,OAAA,IAAI,CAAC,OAAO,UAAU;AAC5B,QAAI,MAAM,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,UAAU,MAAM,SAAS,aAAa,CAAC,GAAG;AACpE,YAAA,CAAC,GAAG,IAAI;AACR,YAAA,CAAC,KAAK,IAAI;AAEhB,YAAM,2BAA2B;AAAA,QAC/B,GAAG;AAAA,QACH,OAAO,cAAc;AAAA,UACnB,IAAI,iCAAiC,KAAK,IAAI,MAAM,IAAI;AAAA,UACxD,gBAAgB,MAAM;AAAA,QACvB,CAAA;AAAA,MACH;AAGE,aAAA,oBAACA,OAAK,MAAL,EAA2B,KAAK,GAC/B,UAAA,oBAACA,OAAK,MAAL,EAAU,KAAK,IAAI,GAAG,IAAI,IAAI,IAAI,WAAU,UAAS,YAAW,WAC/D,UAAA,oBAACC,uBAAe,EAAA,GAAG,yBAA0B,CAAA,EAAA,CAC/C,EAHc,GAAA,MAAM,IAItB;AAAA,IAAA;AAKF,WAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QAEC,WAAS;AAAA,QACT,YAAW;AAAA,QACX,QAAO;AAAA,QACP,aAAa;AAAA,QACb,cAAc;AAAA,QACd,YAAY;AAAA,QACZ,eAAe;AAAA,QACf,aAAY;AAAA,QAEZ,UAAA,oBAAC,MAAK,EAAA,WAAU,UAAS,YAAW,WAAU,KAAK,GAChD,UAAM,MAAA,IAAI,CAAC,KAAK,iBACd,oBAAA,oBAAA,EAAsC,KAAK,GACzC,UAAI,IAAA,IAAI,CAAC,EAAE,MAAM,GAAG,MAAA,MAAY;AAC/B,gBAAM,2BAA2B;AAAA,YAC/B,GAAG;AAAA,YACH,OAAO,cAAc;AAAA,cACnB,IAAI,iCAAiC,KAAK,IAAI,MAAM,IAAI;AAAA,cACxD,gBAAgB,MAAM;AAAA,YACvB,CAAA;AAAA,UACH;AAEE,iBAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,KAAK;AAAA,cAEL,GAAG;AAAA,cACH,IAAI;AAAA,cACJ,WAAU;AAAA,cACV,YAAW;AAAA,cAEX,UAAA,oBAACA,uBAAe,EAAA,GAAG,yBAA0B,CAAA;AAAA,YAAA;AAAA,YANxC,MAAM;AAAA,UAOb;AAAA,QAAA,CAEH,EAAA,GArBsB,YAsBzB,CACD,EACH,CAAA;AAAA,MAAA;AAAA,MApCK;AAAA,IAqCP;AAAA,EAEH,CAAA,GACH;AAEJ;ACxFA,MAAM,yBAAyB,CAAC;AAAA,EAC9B;AAAA,EACA,MAAAf;AAAA,EACA;AAAA,EACA;AACF,MAAmC;AAC3B,QAAA,EAAE,cAAc,IAAI,QAAQ;AAClC,QAAM,EAAE,MAAA,IAAU,SAASA,KAAI;AAC/B,QAAM,QAAQ,aAAa,0BAA0B,CAAC,UAAU,MAAM,KAAK;AAC3E,QAAM,WAAW,QAAQ;AAEzB,SACG,oBAAA,mBAAA,EAAkB,IAAI,OAAO,IAAI,KAAK,UAAU,WAAW,OAAO,QAAQ,GAAG,MAAK,aACjF,UAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,YAAY;AAAA,MACZ,aAAa;AAAA,MACb,cAAc;AAAA,MACd,YAAY;AAAA,MACZ,eAAe;AAAA,MACf,WAAW;AAAA,MACX,aAAa,WAAW,eAAe;AAAA,MAEvC,UAAC,oBAAA,MAAA,EAAK,WAAU,UAAS,YAAW,WAAU,KAAK,GAChD,UAAO,OAAA,IAAI,CAAC,KAAK,UAAU;AAExB,eAAA,oBAAC,oBAAmB,EAAA,KAAK,GACtB,UAAA,IAAI,IAAI,CAAC,EAAE,MAAM,GAAG,MAAA,MAAY;AAO/B,gBAAM,oBAAoB,GAAGA,KAAI,IAAI,MAAM,IAAI;AAE/C,gBAAM,kBAAkB,cAAc;AAAA,YACpC,IAAI,8BAA8B,UAAU,SAAS,IAAI,MAAM,IAAI;AAAA,YACnE,gBAAgB,MAAM;AAAA,UAAA,CACvB;AAGC,iBAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,KAAK;AAAA,cAEL,GAAG;AAAA,cACH,IAAI;AAAA,cACJ,WAAU;AAAA,cACV,YAAW;AAAA,cAEV,UAAA,SAAS,EAAE,GAAG,OAAO,OAAO,iBAAiB,MAAM,kBAAmB,CAAA;AAAA,YAAA;AAAA,YANlE;AAAA,UAOP;AAAA,QAAA,CAEH,KA3B8B,KA4BjC;AAAA,MAAA,CAEH,EACH,CAAA;AAAA,IAAA;AAAA,EAAA,GAEJ;AAEJ;AC9BA,MAAM,sBAAsB,CAAC;AAAA,EAC3B;AAAA,EACA;AAAA,EACA,MAAAA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAgC;AACxB,QAAA,EAAE,mBAAmB,IAAI,gBAAgB;AACzC,QAAA,EAAE,cAAc,IAAI,QAAQ;AAClC,QAAM,EAAE,QAAQ,aAAa,IAAI,YAAY;AACvC,QAAA,SAAS,MAAM,QAAQ,MAAM,IAAI,gBAAgB,YAAY,GAAG,CAAC,YAAY,CAAC;AAC9E,QAAA,EAAE,WAAW,IAAI,OAAO;AAExB,QAAA;AAAA,IACJ,QAAQ,CAAC;AAAA,IACT;AAAA,IACA;AAAA,EAAA,IACE,SAAuEA,KAAI;AAC/E,QAAM,cAAc,QAAQ,uBAAuB,CAAC,UAAU,MAAM,WAAW;AAC/E,QAAM,eAAe,QAAQ,uBAAuB,CAAC,UAAU,MAAM,YAAY;AACjF,QAAM,iBAAiB,QAAQ,uBAAuB,CAAC,UAAU,MAAM,cAAc;AAC/E,QAAA,EAAE,MAAM,SAAA,IAAa;AAE3B,QAAM,CAAC,gBAAgB,iBAAiB,IAAI,MAAM,SAAiB,EAAE;AACrE,QAAM,CAAC,UAAU,WAAW,IAAI,MAAM,SAAS,EAAE;AAEjD,QAAM,UAAU,MAAM;AACpB,UAAM,kBAAkB,YAAY,MAAM,QAAQ,QAAQ,KAAK,SAAS,SAAS;AACjF,UAAM,iBAAiB,SAAS,MAAM,QAAQ,KAAK,KAAK,MAAM,SAAS;AAEvE,QAAI,mBAAmB,gBAAgB;AACrC,YAAM,iBAAiB,SACpB,IAAI,CAAC,GAAY,QAAgB;AAChC,eAAO,MAAM,GAAG,IAAI,MAAM,GAAG,EAAE,eAAe;AAAA,MAC/C,CAAA,EACA,OAAO,CAAC8B,WAAU,CAAC,CAACA,MAAK;AAExB,UAAA,kBAAkB,eAAe,SAAS,GAAG;AAC/C,0BAAkB,CAACC,oBAAmB;AACpC,cAAI,CAAC,eAAe,SAASA,eAAc,GAAG;AAC5C,mBAAO,eAAe,CAAC;AAAA,UAAA;AAGlBA,iBAAAA;AAAAA,QAAA,CACR;AAAA,MAAA;AAAA,IACH;AAAA,EACF,GACC,CAAC,UAAU,KAAK,CAAC;AAOd,QAAA,mCAAmC,MAAM,QAAQ,MAAM;AACvD,QAAA,OAAO,IAAI,OAAO,GAAG;AACjB,YAAA,aAAa,OAAO,IAAI,OAAO;AAErC,UAAI,CAAC,YAAY;AACR,eAAA;AAAA,MAAA;AAGH,YAAA,CAAA,EAAG,IAAI,IAAI,WAAW,MAAM,GAAG/B,KAAI,GAAG;AAE5C,UAAI,MAAM,OAAO,MAAM,MAAS,MAAM,QAAW;AAC/C,cAAM,CAAC,OAAO,IAAI,KAAK,MAAM,GAAG;AAEhC,eAAO,MAAM,OAAO,SAAS,MAAS,GAAG;AAAA,MAAA;AAAA,IAC3C;AAGK,WAAA;AAAA,EACN,GAAA,CAAC,QAAQA,OAAM,KAAK,CAAC;AAElB,QAAA,YAAY,QAAQ,KAAK;AAE/B,QAAM,UAAU,MAAM;AAIpB,QAAI,aAAa,UAAU,SAAS,MAAM,QAAQ;AAChD,wBAAkB,MAAM,MAAM,SAAS,CAAC,EAAE,YAAY;AAAA,IAAA;AAAA,EACxD,GACC,CAAC,OAAO,SAAS,CAAC;AAErB,QAAM,UAAU,MAAM;AAChB,QAAA,OAAO,qCAAqC,UAAU;AACxD,wBAAkB,gCAAgC;AAAA,IAAA;AAAA,EACpD,GACC,CAAC,gCAAgC,CAAC;AAErC,QAAM,kBAAkB,MAAM;AAC5B,sBAAkB,EAAE;AAAA,EACtB;AAEA,QAAM,cAAc,MAAM;AACpB,QAAA,MAAM,SAAS,KAAK;AAChB,YAAA,SAAS,WAAW,UAAU,SAAS;AACvC,YAAA,OAAO,kBAAkB,QAAQ,UAAU;AACjD,YAAM,OAAO,kBAAkB,QAAQ,UAAU,EAAE,IAAI;AAEvD,kBAAYA,OAAM,IAAI;AAAA,IAAA,WAEb,MAAM,UAAU,KAAK;AACX,yBAAA;AAAA,QACjB,MAAM;AAAA,QACN,SAAS,cAAc;AAAA,UACrB,IAAI,eAAe,kDAAkD;AAAA,QACtE,CAAA;AAAA,MAAA,CACF;AAAA,IAAA;AAAA,EAEL;AAEM,QAAA,2BAAyD,CAAC,UAAU,iBAAiB;AACzF;AAAA,MACE;AAAA,QACE;AAAA,UACE,IAAI,eAAe,aAAa;AAAA,UAChC,gBAAgB;AAAA,QAClB;AAAA,QACA;AAAA,UACE,MAAM,GAAGA,KAAI,IAAI,YAAY;AAAA,UAC7B,UAAU,WAAW,QAAQ;AAAA,QAAA;AAAA,MAC/B;AAAA,IAEJ;AAEa,iBAAAA,OAAM,cAAc,QAAQ;AAAA,EAC3C;AAEM,QAAA,oBAAoB,CAAC,QAAgB;AACzC,sBAAkB,GAAG;AAAA,EACvB;AAEM,QAAA,aAAa,CAAC,UAAkB,GAAG,QAAQ,CAAC,OAAO,MAAM,MAAM;AAE/D,QAAA,eAAe,CAAC,UAAkB;AACtC;AAAA,MACE;AAAA,QACE;AAAA,UACE,IAAI,eAAe,iBAAiB;AAAA,UACpC,gBAAgB;AAAA,QAClB;AAAA,QACA;AAAA,UACE,MAAM,GAAGA,KAAI,IAAI,KAAK;AAAA,QAAA;AAAA,MACxB;AAAA,IAEJ;AAAA,EACF;AAEM,QAAA,iBAAiB,CAAC,UAAkB;AACxC;AAAA,MACE;AAAA,QACE;AAAA,UACE,IAAI,eAAe,eAAe;AAAA,UAClC,gBAAgB;AAAA,QAClB;AAAA,QACA;AAAA,UACE,MAAM,GAAGA,KAAI,IAAI,KAAK;AAAA,UACtB,UAAU,WAAW,KAAK;AAAA,QAAA;AAAA,MAC5B;AAAA,IAEJ;AAAA,EACF;AAEM,QAAA,iBAAiB,CAAC,UAAkB;AACxC;AAAA,MACE;AAAA,QACE;AAAA,UACE,IAAI,eAAe,eAAe;AAAA,UAClC,gBAAgB;AAAA,QAClB;AAAA,QACA;AAAA,UACE,MAAM,GAAGA,KAAI,IAAI,KAAK;AAAA,UACtB,UAAU,WAAW,KAAK;AAAA,QAAA;AAAA,MAC5B;AAAA,IAEJ;AAAA,EACF;AAEM,QAAA,oBAAoB,MAAM,MAAM;AAEtC,QAAM,QAAQ,aAAa,uBAAuB,CAAC,UAAU,MAAM,KAAK;AAEpE,MAAA,MAAM,WAAW,GAAG;AACtB,WAAQ,oBAAA,aAAA,EAAY,UAAoB,MAAAA,OAAY,SAAS,aAAa;AAAA,EAAA;AAI1E,SAAA,qBAAC,KAAI,EAAA,WAAS,MACZ,UAAA;AAAA,IAAC,oBAAA,gBAAA,EAAe,IAAI,mBACjB,UAAc,cAAA;AAAA,MACb,IAAI,eAAe,kBAAkB;AAAA,MACrC,gBAAgB;AAAA,IACjB,CAAA,GACH;AAAA,IACC,oBAAA,gBAAA,EAAe,aAAU,aAAa,UAAS,UAAA;AAAA,IAChD;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,eAAe;AAAA,QACf,oBAAkB;AAAA,QAEjB,UAAA;AAAA,UAAA,MAAM,IAAI,CAAC,EAAE,cAAc,KAAK,MAAM,UAAU;AAC/C,kBAAM,gBAAgB,GAAGA,KAAI,IAAI,KAAK;AAEpC,mBAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBAGC;AAAA,gBACA,KAAK,UAAU;AAAA,gBACf,OAAO,QAAQ;AAAA,gBACf,MAAK;AAAA,gBAEL,UAAA;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC;AAAA,oBACA,MAAM;AAAA,oBACN;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA,YAAY;AAAA,oBACZ,mBAAmB,MAAM;AACvB,qCAAeA,OAAM,KAAK;AACV,sCAAA;AAAA,oBAClB;AAAA,oBACA;AAAA,oBACA,UAAU;AAAA,oBACV,YAAY;AAAA,oBACZ,YAAY;AAAA,oBACZ,cAAc;AAAA,oBAEb,UAAO,OAAA,IAAI,CAAC,KAAKgC,WAAU;AAExB,6BAAA,oBAAC,oBAAmB,EAAA,KAAK,GACtB,UAAA,IAAI,IAAI,CAAC,EAAE,MAAM,GAAG,MAAA,MAAY;AAO/B,8BAAM,oBAAoB,GAAG,aAAa,IAAI,MAAM,IAAI;AAExD,8BAAM,kBAAkB,cAAc;AAAA,0BACpC,IAAI,8BAA8B,UAAU,SAAS,IAAI,MAAM,IAAI;AAAA,0BACnE,gBAAgB,MAAM;AAAA,wBAAA,CACvB;AAGC,+BAAA;AAAA,0BAAC;AAAA,0BAAA;AAAA,4BACC,KAAK;AAAA,4BAEL,GAAG;AAAA,4BACH,IAAI;AAAA,4BACJ,WAAU;AAAA,4BACV,YAAW;AAAA,4BAEV,UAAS,SAAA;AAAA,8BACR,GAAG;AAAA,8BACH,OAAO;AAAA,8BACP,MAAM;AAAA,4BACP,CAAA;AAAA,0BAAA;AAAA,0BAVI;AAAA,wBAWP;AAAA,sBAAA,CAEH,KA/B8BA,MAgCjC;AAAA,oBAEH,CAAA;AAAA,kBAAA;AAAA,gBAAA;AAAA,cACH;AAAA,cA7DK;AAAA,YA8DP;AAAA,UAAA,CAEH;AAAA,UACD,oBAAC,oBAAiB,UAAoB,SAAS,aAAa,WAAW,oBAAC,MAAK,CAAA,CAAA,GAC1E,UAAc,cAAA;AAAA,YACb,IAAI,eAAe,mCAAmC;AAAA,YACtD,gBAAgB;AAAA,UAAA,CACjB,EACH,CAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,GACF;AAEJ;AAEA,MAAM,gBAAgB,OAAO,UAAU,IAAI;AAAA;AAAA,MAErC,CAAC,EAAE,OAAO,OAAO,MAAO,SAAS,MAAM,OAAO,YAAY,MAAM,OAAO,UAAW;AAAA;AAGxF,MAAM,mBAAmB,OAAO,UAAU;AAAA;AAAA;AAAA;AAAA,0BAIhB,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,UAAU;AAAA,oBAC5C,CAAC,UAAU,MAAM,MAAM,OAAO,CAAC,CAAC;AAAA,mBACjC,CAAC,UAAU,MAAM,MAAM,OAAO,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BAMzB,CAAC,UAAU,MAAM,MAAM,OAAO,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yCAWzB,CAAC,UAAU,MAAM,MAAM,OAAO,QAAQ,WAAW;AAAA;AAAA;AAqB1F,MAAM,YAAY,CAAC;AAAA,EACjB;AAAA,EACA;AAAA,EACA,MAAAhC;AAAA,EACA,YAAY;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAsB;AACd,QAAA,EAAE,cAAc,IAAI,QAAQ;AAElC,QAAM,eAAe,QAAQ,uBAAuB,CAAC,UAAU;AACtD,WAAA,MAAM,MAAM,QAAQ,CAAC,GAAGA,MAAK,MAAM,GAAG,GAAG,UAAU,IAAI,CAAC;AAAA,EAAA,CAChE;AAEK,QAAA,eAAe,MAAM,OAA0B,IAAK;AAQpD,QAAA,eAAeA,MAAK,MAAM,GAAG,EAAE,MAAM,GAAG,EAAE,EAAE,KAAK,GAAG;AAE1D,QAAM,CAAC,EAAE,WAAW,YAAY,cAAc,GAAG,QAAQ,SAAS,SAAS,cAAc,IACvF,eAAe,CAAC,UAAU;AAAA,IACxB,MAAM,GAAG,UAAU,SAAS,IAAI,YAAY;AAAA,IAC5C;AAAA,IACA,MAAM;AAAA,MACJ;AAAA,MACA,gBAAgB;AAAA,IAClB;AAAA,IACA,UAAU;AAEQ,sBAAA;AAAA,IAClB;AAAA,IACA,GAAG;AAAA,EAAA,CACJ;AAEH,QAAM,UAAU,MAAM;AACpB,mBAAe,cAAc,GAAG,EAAE,sBAAsB,OAAO;AAAA,EAAA,GAC9D,CAAC,gBAAgB,KAAK,CAAC;AAEpB,QAAA,wBAAwB,gBAAmC,cAAc,OAAO;AACtF,QAAM,kBAAkB;AAAA,IACtB;AAAA,IACA;AAAA,EACF;AAEA,SAEK,oBAAA,UAAA,EAAA,UAAA,aACE,oBAAA,SAAA,CAAQ,CAAA,IAET,qBAAC,UAAU,MAAV,EAAe,KAAK,iBAAiB,OAAO,cAC3C,UAAA;AAAA,IAAC,qBAAA,UAAU,QAAV,EACC,UAAA;AAAA,MAAC,oBAAA,UAAU,SAAV,EAAmB,UAAa,aAAA,CAAA;AAAA,MACjC,qBAAC,UAAU,SAAV,EACC,UAAA;AAAA,QAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,SAAQ;AAAA,YACR,SAAS;AAAA,YACT,OAAO,cAAc;AAAA,cACnB,IAAI,eAAe,wBAAwB;AAAA,cAC3C,gBAAgB;AAAA,YAAA,CACjB;AAAA,YAED,8BAAC,OAAM,CAAA,CAAA;AAAA,UAAA;AAAA,QACT;AAAA,QACA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,KAAK;AAAA,YACL,SAAQ;AAAA,YACR,SAAS,CAAC,MAAM,EAAE,gBAAgB;AAAA,YAClC,mBAAiB;AAAA,YACjB,OAAO,cAAc;AAAA,cACnB,IAAI,eAAe,6BAA6B;AAAA,cAChD,gBAAgB;AAAA,YAAA,CACjB;AAAA,YACD,WAAW;AAAA,YAEX,8BAAC,MAAK,CAAA,CAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MACR,EACF,CAAA;AAAA,IAAA,GACF;AAAA,IACA,oBAAC,UAAU,SAAV,EACC,UAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,YAAW;AAAA,QACX,YAAW;AAAA,QACX,SAAS;AAAA,QACT,KAAK;AAAA,QAEJ;AAAA,MAAA;AAAA,IAAA,EAEL,CAAA;AAAA,EAAA,EAAA,CACF,EAEJ,CAAA;AAEJ;AAEA,MAAM,UAAU,MAAM;AACpB,6BAAQ,YAAW,EAAA,KAAI,QAAO,SAAS,GAAG,YAAW,cAAa;AACpE;AAEA,MAAM,aAAa,OAA6B,GAAG;AAAA;AAAA,wBAE3B,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,UAAU;AAAA;AAAA;ACxc9D,MAAM,iBAAiB,CAAC;AAAA,EACtB;AAAA,EACA;AAAA,EACA,MAAAA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAA2B;AACnB,QAAA,EAAE,cAAc,IAAI,QAAQ;AAC5B,QAAA,QAAQ,SAASA,KAAI;AAE3B,QAAM,qBAAqB,CAAC,UAAU,cAAc,MAAM,SAAS,CAAC;AAE9D,QAAA,EAAE,WAAW,IAAI,OAAO;AAE9B,QAAM,4BAA4B,MAAM;AAChC,UAAA,SAAS,WAAW,UAAU,SAAS;AACvC,UAAA,OAAO,kBAAkB,QAAQ,UAAU;AACjD,UAAM,OAAO,kBAAkB,QAAQ,UAAU,EAAE,IAAI;AAEjD,UAAA,SAASA,OAAM,IAAI;AAAA,EAC3B;AAEA,8BACG,MAAM,MAAN,EAAW,OAAO,MAAM,OAAO,UAC9B,UAAA;AAAA,IAAC,qBAAA,MAAA,EAAK,gBAAe,iBACnB,UAAA;AAAA,MAAA,qBAAC,MAAM,OAAN,EAAY,QAAQ,aAClB,UAAA;AAAA,QAAA;AAAA,QACA,UAAU,cACP,qBAAA,UAAA,EAAA,UAAA;AAAA,UAAA;AAAA,UAAQ,MAAM,QAAQ,MAAM,KAAK,IAAI,MAAM,MAAM,SAAS;AAAA,UAAE;AAAA,QAAA,EAAC,CAAA;AAAA,MAAA,GAEnE;AAAA,MAEC,sBACC;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,OAAO,cAAc;AAAA,YACnB,IAAI,eAAe,wBAAwB;AAAA,YAC3C,gBAAgB;AAAA,UAAA,CACjB;AAAA,UACD,SAAQ;AAAA,UACR,SAAS,MAAM;AACP,kBAAA,SAASA,OAAM,IAAI;AAAA,UAC3B;AAAA,UAEA,8BAAC,OAAM,CAAA,CAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IACT,GAEJ;AAAA,IAKC,CAAC,UAAU,cAAc,CAAC,MAAM,SAC/B,oBAAC,aAAY,EAAA,UAAoB,MAAAA,OAAY,SAAS,0BAA2B,CAAA;AAAA,IAElF,CAAC,UAAU,cAAc,MAAM,QAC7B,oBAAA,wBAAA,EAAuB,WAAsB,MAAAA,OAAY,UAAqB,GAAG,OAC/E,UAAA,MAAM,SACT,CAAA,IACE;AAAA,IACH,UAAU,cACT,oBAAC,qBAAoB,EAAA,WAAsB,MAAAA,OAAY,UAAqB,GAAG,OAC5E,UAAA,MAAM,SACT,CAAA;AAAA,IAEF,oBAAC,MAAM,OAAN,CAAY,CAAA;AAAA,EAAA,GACf;AAEJ;AAEM,MAAA,yBAAyB,MAAM,KAAK,cAAc;"}