@maketribe/ms-app 4.0.0-beta.1 → 4.0.0-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (413) hide show
  1. package/dist/cjs/{404-BLjjFiPC.cjs → 404-BRjYbK7n.cjs} +2 -2
  2. package/dist/cjs/{404-BLjjFiPC.cjs.map → 404-BRjYbK7n.cjs.map} +1 -1
  3. package/dist/cjs/{dialog-B8fGi0y_.cjs → dialog-Dgx1Tr8V.cjs} +3 -2
  4. package/dist/cjs/{dialog-B8fGi0y_.cjs.map → dialog-Dgx1Tr8V.cjs.map} +1 -1
  5. package/dist/cjs/{dialog-C3SD87uY.cjs → dialog-vC5hDH7E.cjs} +5 -4
  6. package/dist/cjs/{dialog-C3SD87uY.cjs.map → dialog-vC5hDH7E.cjs.map} +1 -1
  7. package/dist/cjs/{dialog-B9gDOGH7.cjs → dialog-wWmfFF-W.cjs} +5 -4
  8. package/dist/cjs/{dialog-B9gDOGH7.cjs.map → dialog-wWmfFF-W.cjs.map} +1 -1
  9. package/dist/cjs/{edit-FgCiEZTp.cjs → edit-Drr2v9av.cjs} +3 -2
  10. package/dist/cjs/{edit-FgCiEZTp.cjs.map → edit-Drr2v9av.cjs.map} +1 -1
  11. package/dist/cjs/{index-zTzCVKVY.cjs → index-45SkBKZ7.cjs} +20 -32
  12. package/dist/cjs/index-45SkBKZ7.cjs.map +1 -0
  13. package/dist/cjs/{index-B_yj5cRD.cjs → index-B4rnzgMr.cjs} +13 -2
  14. package/dist/cjs/{index-B_yj5cRD.cjs.map → index-B4rnzgMr.cjs.map} +1 -1
  15. package/dist/cjs/{index-BfWagFfi.cjs → index-B4vRehuD.cjs} +14 -3
  16. package/dist/cjs/{index-BfWagFfi.cjs.map → index-B4vRehuD.cjs.map} +1 -1
  17. package/dist/cjs/{index-DPxvVnMV.cjs → index-B76QDubl.cjs} +4 -3
  18. package/dist/cjs/{index-DPxvVnMV.cjs.map → index-B76QDubl.cjs.map} +1 -1
  19. package/dist/cjs/{index-DAN-V2W2.cjs → index-BIWoK4yb.cjs} +13 -2
  20. package/dist/cjs/index-BIWoK4yb.cjs.map +1 -0
  21. package/dist/cjs/{index-BoHtMP0u.cjs → index-BVgK1tkF.cjs} +2 -2
  22. package/dist/cjs/{index-BoHtMP0u.cjs.map → index-BVgK1tkF.cjs.map} +1 -1
  23. package/dist/cjs/{index-Dp0uf4OA.cjs → index-BZZrc9JZ.cjs} +13 -2
  24. package/dist/cjs/{index-Dp0uf4OA.cjs.map → index-BZZrc9JZ.cjs.map} +1 -1
  25. package/dist/cjs/{index-DMz-Jp1a.cjs → index-BahbAd3X.cjs} +7 -4
  26. package/dist/cjs/{index-DMz-Jp1a.cjs.map → index-BahbAd3X.cjs.map} +1 -1
  27. package/dist/cjs/{index-VsQhouOO.cjs → index-BfS83KRz.cjs} +3 -2
  28. package/dist/cjs/index-BfS83KRz.cjs.map +1 -0
  29. package/dist/cjs/{index-bLuJXybo.cjs → index-Bf_CyhB2.cjs} +4 -3
  30. package/dist/cjs/{index-bLuJXybo.cjs.map → index-Bf_CyhB2.cjs.map} +1 -1
  31. package/dist/cjs/{index-DYe4VYfx.cjs → index-Bndk11Xb.cjs} +5 -2
  32. package/dist/cjs/index-Bndk11Xb.cjs.map +1 -0
  33. package/dist/cjs/{index-DJR8wNp6.cjs → index-BznEiNqn.cjs} +10 -10
  34. package/dist/cjs/index-BznEiNqn.cjs.map +1 -0
  35. package/dist/cjs/{index-D9bZ9D5l.cjs → index-CCCHNdbX.cjs} +13 -2
  36. package/dist/cjs/{index-D9bZ9D5l.cjs.map → index-CCCHNdbX.cjs.map} +1 -1
  37. package/dist/cjs/{index-Cqx6has-.cjs → index-CDgXyOV4.cjs} +13449 -13948
  38. package/dist/cjs/index-CDgXyOV4.cjs.map +1 -0
  39. package/dist/cjs/{index-B0lo8WAq.cjs → index-CN7a-RVh.cjs} +2 -2
  40. package/dist/cjs/{index-B0lo8WAq.cjs.map → index-CN7a-RVh.cjs.map} +1 -1
  41. package/dist/cjs/{index-bmb2snX4.cjs → index-CTQjhHj6.cjs} +3 -3
  42. package/dist/cjs/index-CTQjhHj6.cjs.map +1 -0
  43. package/dist/cjs/{index-Uf_SF_Do.cjs → index-CV_49YUy.cjs} +2 -2
  44. package/dist/cjs/{index-Uf_SF_Do.cjs.map → index-CV_49YUy.cjs.map} +1 -1
  45. package/dist/cjs/{index-bLFLjrAU.cjs → index-CVwa-7Nm.cjs} +2 -2
  46. package/dist/cjs/{index-bLFLjrAU.cjs.map → index-CVwa-7Nm.cjs.map} +1 -1
  47. package/dist/cjs/{index-DXRQ5Ssv.cjs → index-CYeHYdaB.cjs} +13 -2
  48. package/dist/cjs/{index-DXRQ5Ssv.cjs.map → index-CYeHYdaB.cjs.map} +1 -1
  49. package/dist/cjs/{index-DmDkzklD.cjs → index-CrCPtLxR.cjs} +14 -3
  50. package/dist/cjs/{index-DmDkzklD.cjs.map → index-CrCPtLxR.cjs.map} +1 -1
  51. package/dist/cjs/{index-yY6nqi0P.cjs → index-Czy9zQT_.cjs} +6 -6
  52. package/dist/cjs/index-Czy9zQT_.cjs.map +1 -0
  53. package/dist/cjs/{index-Cv8xCuqB.cjs → index-DciGuGCu.cjs} +13 -2
  54. package/dist/cjs/{index-Cv8xCuqB.cjs.map → index-DciGuGCu.cjs.map} +1 -1
  55. package/dist/cjs/{index-CvLoEFhT.cjs → index-DpVpRBIK.cjs} +7 -7
  56. package/dist/cjs/{index-CvLoEFhT.cjs.map → index-DpVpRBIK.cjs.map} +1 -1
  57. package/dist/cjs/{index-CuQ1S-Jk.cjs → index-DrzxuwKo.cjs} +2 -2
  58. package/dist/cjs/{index-CuQ1S-Jk.cjs.map → index-DrzxuwKo.cjs.map} +1 -1
  59. package/dist/cjs/{index-D1rwP_XD.cjs → index-I5CInyzI.cjs} +2 -2
  60. package/dist/cjs/index-I5CInyzI.cjs.map +1 -0
  61. package/dist/cjs/{index-Bsx_khJ-.cjs → index-gNetAwMm.cjs} +13 -2
  62. package/dist/cjs/{index-Bsx_khJ-.cjs.map → index-gNetAwMm.cjs.map} +1 -1
  63. package/dist/cjs/{index-CB-k5J93.cjs → index-t6dZjteA.cjs} +14 -3
  64. package/dist/cjs/{index-CB-k5J93.cjs.map → index-t6dZjteA.cjs.map} +1 -1
  65. package/dist/cjs/{index-02NQSY_C.cjs → index-vSL8Jmey.cjs} +13 -2
  66. package/dist/cjs/{index-02NQSY_C.cjs.map → index-vSL8Jmey.cjs.map} +1 -1
  67. package/dist/cjs/index.js +6 -18
  68. package/dist/cjs/index.js.map +1 -1
  69. package/dist/cjs/{index.vue_vue_type_script_setup_true_lang-CEEFTQ9-.cjs → index.vue_vue_type_script_setup_true_lang-CnkRqWo2.cjs} +14 -2
  70. package/dist/cjs/{index.vue_vue_type_script_setup_true_lang-CEEFTQ9-.cjs.map → index.vue_vue_type_script_setup_true_lang-CnkRqWo2.cjs.map} +1 -1
  71. package/dist/cjs/{json-editor-BsH6BSd6.cjs → json-editor-Dheg9PUp.cjs} +2 -2
  72. package/dist/cjs/{json-editor-BsH6BSd6.cjs.map → json-editor-Dheg9PUp.cjs.map} +1 -1
  73. package/dist/cjs/{markdown-editor-Ct8Osg84.cjs → markdown-editor-bExLhxuW.cjs} +2 -2
  74. package/dist/{esm/markdown-editor-CUiWKbbs.js.map → cjs/markdown-editor-bExLhxuW.cjs.map} +1 -1
  75. package/dist/cjs/{normal-D7Rp95AR.cjs → normal-CEd0wat_.cjs} +5 -4
  76. package/dist/cjs/{normal-D7Rp95AR.cjs.map → normal-CEd0wat_.cjs.map} +1 -1
  77. package/dist/cjs/{normal-dqEGDOGY.cjs → normal-COqs_jmO.cjs} +3 -2
  78. package/dist/cjs/{normal-dqEGDOGY.cjs.map → normal-COqs_jmO.cjs.map} +1 -1
  79. package/dist/cjs/{permission-manage-B3iyzdss.cjs → permission-manage-CwsrhUMl.cjs} +2 -2
  80. package/dist/cjs/permission-manage-CwsrhUMl.cjs.map +1 -0
  81. package/dist/cjs/{resource-select-input-CDZgQch4.cjs → resource-select-input-DmnMD4vA.cjs} +2 -2
  82. package/dist/cjs/{resource-select-input-CDZgQch4.cjs.map → resource-select-input-DmnMD4vA.cjs.map} +1 -1
  83. package/dist/cjs/style.css +256 -774
  84. package/dist/cjs/{table-ClUbbr-e.cjs → table-HYo7Pxe0.cjs} +3 -2
  85. package/dist/cjs/{table-ClUbbr-e.cjs.map → table-HYo7Pxe0.cjs.map} +1 -1
  86. package/dist/esm/{404-RkNqwMKN.js → 404-BZMLT9Yx.js} +2 -2
  87. package/dist/esm/{404-RkNqwMKN.js.map → 404-BZMLT9Yx.js.map} +1 -1
  88. package/dist/esm/{dialog-BdLPb4lA.js → dialog-B7EWJtb2.js} +3 -2
  89. package/dist/esm/{dialog-BdLPb4lA.js.map → dialog-B7EWJtb2.js.map} +1 -1
  90. package/dist/esm/{dialog-rkNJ6ASL.js → dialog-BW-Zx6ij.js} +5 -4
  91. package/dist/esm/{dialog-rkNJ6ASL.js.map → dialog-BW-Zx6ij.js.map} +1 -1
  92. package/dist/esm/{dialog-B-I18GZi.js → dialog-VR2w0Itk.js} +5 -4
  93. package/dist/esm/{dialog-B-I18GZi.js.map → dialog-VR2w0Itk.js.map} +1 -1
  94. package/dist/esm/{edit-DbgetOeZ.js → edit-DO8tyKOW.js} +3 -2
  95. package/dist/esm/{edit-DbgetOeZ.js.map → edit-DO8tyKOW.js.map} +1 -1
  96. package/dist/esm/{index-DL9Z0m-9.js → index-B5inJ9bx.js} +14 -3
  97. package/dist/esm/{index-DL9Z0m-9.js.map → index-B5inJ9bx.js.map} +1 -1
  98. package/dist/esm/{index-DXo-05N5.js → index-B74_dBRR.js} +13 -2
  99. package/dist/esm/{index-DXo-05N5.js.map → index-B74_dBRR.js.map} +1 -1
  100. package/dist/esm/{index-Zd8aDHyM.js → index-BFHdP-vE.js} +2 -2
  101. package/dist/esm/index-BFHdP-vE.js.map +1 -0
  102. package/dist/esm/{index-CtiIWsZ3.js → index-BPfrHDXj.js} +5 -5
  103. package/dist/esm/{index-CtiIWsZ3.js.map → index-BPfrHDXj.js.map} +1 -1
  104. package/dist/esm/index-BSJKbZy0.js +25 -0
  105. package/dist/esm/index-BSJKbZy0.js.map +1 -0
  106. package/dist/esm/{index-CEw1aqJR.js → index-Bb9K0FbR.js} +14 -3
  107. package/dist/esm/{index-CEw1aqJR.js.map → index-Bb9K0FbR.js.map} +1 -1
  108. package/dist/esm/{index-B9YALjzh.js → index-Bl1BMhpO.js} +13 -2
  109. package/dist/esm/{index-B9YALjzh.js.map → index-Bl1BMhpO.js.map} +1 -1
  110. package/dist/esm/{index-Jh3JnsYu.js → index-BwGfu4rz.js} +20 -15
  111. package/dist/esm/index-BwGfu4rz.js.map +1 -0
  112. package/dist/esm/{index-CffE92oq.js → index-C-R_oHgZ.js} +2 -2
  113. package/dist/esm/{index-CffE92oq.js.map → index-C-R_oHgZ.js.map} +1 -1
  114. package/dist/esm/{index-BDH5T7gf.js → index-C2l8Oc1M.js} +2 -2
  115. package/dist/esm/{index-BDH5T7gf.js.map → index-C2l8Oc1M.js.map} +1 -1
  116. package/dist/esm/{index-BUZk09qi.js → index-C6ZB4ABl.js} +13 -2
  117. package/dist/esm/{index-BUZk09qi.js.map → index-C6ZB4ABl.js.map} +1 -1
  118. package/dist/esm/{index-DmWaO9cf.js → index-C90oNwfa.js} +14 -3
  119. package/dist/esm/{index-DmWaO9cf.js.map → index-C90oNwfa.js.map} +1 -1
  120. package/dist/esm/{index-Bz1GMIuS.js → index-CBDLSALB.js} +7 -4
  121. package/dist/esm/{index-Bz1GMIuS.js.map → index-CBDLSALB.js.map} +1 -1
  122. package/dist/esm/{index-ZHtzpWRH.js → index-CJOSz7P8.js} +2 -2
  123. package/dist/esm/{index-ZHtzpWRH.js.map → index-CJOSz7P8.js.map} +1 -1
  124. package/dist/esm/{index-yv8R8mhU.js → index-CZjTcHk4.js} +13 -2
  125. package/dist/esm/{index-yv8R8mhU.js.map → index-CZjTcHk4.js.map} +1 -1
  126. package/dist/esm/{index-DBPdHhnJ.js → index-CcUMpo0S.js} +4 -3
  127. package/dist/esm/{index-DBPdHhnJ.js.map → index-CcUMpo0S.js.map} +1 -1
  128. package/dist/esm/{index-DDi06DRi.js → index-CgB2vm-h.js} +13 -2
  129. package/dist/esm/{index-DDi06DRi.js.map → index-CgB2vm-h.js.map} +1 -1
  130. package/dist/esm/{index-Cq7SIfSQ.js → index-Cu_dI7Yt.js} +6 -6
  131. package/dist/esm/index-Cu_dI7Yt.js.map +1 -0
  132. package/dist/esm/{index-CnlhRGCS.js → index-D2VCdmdw.js} +13 -2
  133. package/dist/esm/{index-CnlhRGCS.js.map → index-D2VCdmdw.js.map} +1 -1
  134. package/dist/esm/{index-D4y4KL7W.js → index-DBrfCgXs.js} +13 -2
  135. package/dist/esm/index-DBrfCgXs.js.map +1 -0
  136. package/dist/esm/{index-D7NWJqQD.js → index-DZ-g6DFt.js} +7 -7
  137. package/dist/esm/index-DZ-g6DFt.js.map +1 -0
  138. package/dist/esm/{index-B9QqVCIZ.js → index-Ddhplmaw.js} +2 -2
  139. package/dist/esm/{index-B9QqVCIZ.js.map → index-Ddhplmaw.js.map} +1 -1
  140. package/dist/esm/{index-B2zPAvcK.js → index-Gx1_4YOq.js} +4 -3
  141. package/dist/esm/{index-B2zPAvcK.js.map → index-Gx1_4YOq.js.map} +1 -1
  142. package/dist/esm/{index-C42dLA9d.js → index-Ml5zsJ0R.js} +13 -2
  143. package/dist/esm/{index-C42dLA9d.js.map → index-Ml5zsJ0R.js.map} +1 -1
  144. package/dist/esm/{index-Bja6wZ1k.js → index-n6kNQFWx.js} +3 -2
  145. package/dist/esm/index-n6kNQFWx.js.map +1 -0
  146. package/dist/esm/{index-B9JJR2kb.js → index-qI6Rplj0.js} +2 -2
  147. package/dist/esm/{index-B9JJR2kb.js.map → index-qI6Rplj0.js.map} +1 -1
  148. package/dist/esm/{index-CIcMtB-s.js → index-vF_UCtwr.js} +3 -3
  149. package/dist/esm/index-vF_UCtwr.js.map +1 -0
  150. package/dist/esm/{index-BJVZ0yS1.js → index-z4wR2aph.js} +13662 -14161
  151. package/dist/esm/index-z4wR2aph.js.map +1 -0
  152. package/dist/esm/index.js +213 -225
  153. package/dist/esm/index.js.map +1 -1
  154. package/dist/esm/{index.vue_vue_type_script_setup_true_lang-ZuOpqJUd.js → index.vue_vue_type_script_setup_true_lang-GX9oQmNw.js} +14 -2
  155. package/dist/esm/{index.vue_vue_type_script_setup_true_lang-ZuOpqJUd.js.map → index.vue_vue_type_script_setup_true_lang-GX9oQmNw.js.map} +1 -1
  156. package/dist/esm/{json-editor-DsM_FDfo.js → json-editor-Bltvw7JG.js} +2 -2
  157. package/dist/esm/{json-editor-DsM_FDfo.js.map → json-editor-Bltvw7JG.js.map} +1 -1
  158. package/dist/esm/{markdown-editor-CUiWKbbs.js → markdown-editor-D71rtiur.js} +2 -2
  159. package/dist/esm/markdown-editor-D71rtiur.js.map +1 -0
  160. package/dist/esm/{normal-CnXnNfbw.js → normal-1XtWtQLJ.js} +5 -4
  161. package/dist/esm/{normal-CnXnNfbw.js.map → normal-1XtWtQLJ.js.map} +1 -1
  162. package/dist/esm/{normal-CZXCM1-D.js → normal-B10Eundv.js} +3 -2
  163. package/dist/esm/{normal-CZXCM1-D.js.map → normal-B10Eundv.js.map} +1 -1
  164. package/dist/esm/{permission-manage-DA6XtD6L.js → permission-manage-BAtOVFKi.js} +2 -2
  165. package/dist/esm/permission-manage-BAtOVFKi.js.map +1 -0
  166. package/dist/esm/{resource-select-input-DDxljeSs.js → resource-select-input-CmYrG5hr.js} +2 -2
  167. package/dist/esm/{resource-select-input-DDxljeSs.js.map → resource-select-input-CmYrG5hr.js.map} +1 -1
  168. package/dist/esm/style.css +256 -774
  169. package/dist/esm/{table-B_CNvs27.js → table-D3Mr3Fvx.js} +3 -2
  170. package/dist/esm/{table-B_CNvs27.js.map → table-D3Mr3Fvx.js.map} +1 -1
  171. package/dist/types/components/basic/index.d.ts +2 -0
  172. package/dist/types/components/basic/lexical-editor/composables/lexicalEditor.d.ts +4 -2
  173. package/dist/types/components/basic/lexical-editor/composables/useLexicalCommandsLog.d.ts +1 -1
  174. package/dist/types/components/basic/lexical-editor/nodes/HtmlElementDecoratorNode.d.ts +5 -5
  175. package/dist/types/components/basic/lexical-editor/nodes/HtmlElementNode.d.ts +3 -3
  176. package/dist/types/{modules/ms/material-upload-context → components/basic/upload-file/context}/MaterialUploadContext.d.ts +2 -2
  177. package/dist/types/components/basic/upload-file/context/index.d.ts +3 -0
  178. package/dist/types/components/business/index.d.ts +3 -0
  179. package/dist/types/{modules/ms/components → components/business}/material-list/index.d.ts +2 -2
  180. package/dist/types/{modules/ms/components → components/business}/material-list/material-group-form-popover.d.ts +1 -1
  181. package/dist/types/{modules/ms/components → components/business}/material-list/material-group.d.ts +1 -1
  182. package/dist/types/{modules/ms/components → components/business}/material-list/material-item.vue.d.ts +4 -5
  183. package/dist/types/{modules/ms/components → components/business}/material-list/material-list-options.d.ts +1 -2
  184. package/dist/types/{modules/ms/components → components/business}/material-list/material-list.d.ts +2 -3
  185. package/dist/types/{modules/ms/components → components/business}/material-select/material-select-api.d.ts +1 -1
  186. package/dist/types/components/business/resource-list/components/resource-item/index.vue.d.ts +13 -1
  187. package/dist/types/components/business/resource-manager/index.d.ts +4 -4
  188. package/dist/types/components/data-model/data-table/views/table/index.d.ts +1 -1
  189. package/dist/types/components/data-model/data-table/views/table/table.d.ts +1 -1
  190. package/dist/types/constants/index.d.ts +1 -0
  191. package/dist/types/core/MSAppClient.d.ts +8 -6
  192. package/dist/types/core/UserInfo.d.ts +1 -1
  193. package/dist/types/{modules/ms/dataviews → dataviews}/index.d.ts +1 -0
  194. package/dist/types/{modules/ms/dataviews → dataviews}/log/login-log/LoginLogTable.d.ts +1 -1
  195. package/dist/types/{modules/ms/dataviews → dataviews}/ms-config/MsConfigForm.d.ts +2 -2
  196. package/dist/types/{modules/ms/dataviews → dataviews}/ms-config/MsConfigTable.d.ts +1 -1
  197. package/dist/types/{modules/ms/dataviews → dataviews}/ms-deny-ip-access-list/MsDenyIPAccessListForm.d.ts +1 -1
  198. package/dist/types/{modules/ms/dataviews → dataviews}/ms-deny-ip-access-list/MsDenyIPAccessListTable.d.ts +1 -1
  199. package/dist/types/{modules/ms/dataviews → dataviews}/ms-ip-white-list/MsIPWhitelistForm.d.ts +1 -1
  200. package/dist/types/{modules/ms/dataviews → dataviews}/ms-ip-white-list/MsIPWhitelistTable.d.ts +1 -1
  201. package/dist/types/dataviews/ms-material/MsMaterialComponents.d.ts +0 -0
  202. package/dist/types/{modules/ms/dataviews → dataviews}/ms-material/MsMaterialForm.d.ts +1 -1
  203. package/dist/types/{modules/ms/dataviews → dataviews}/ms-material/MsMaterialTable.d.ts +2 -2
  204. package/dist/types/{modules/ms/dataviews → dataviews}/ms-material/ms-material-group/MsMaterialGroupForm.d.ts +1 -1
  205. package/dist/types/{modules/ms/dataviews → dataviews}/ms-material/ms-material-group/MsMaterialGroupTree.d.ts +1 -1
  206. package/dist/types/{modules/ms/dataviews → dataviews}/ms-member/MsMemberForm.d.ts +1 -1
  207. package/dist/types/{modules/ms/dataviews → dataviews}/ms-member/MsMemberTable.d.ts +1 -1
  208. package/dist/types/{modules/ms/dataviews → dataviews}/ms-member-role/MsMemberRoleForm.d.ts +1 -1
  209. package/dist/types/{modules/ms/dataviews → dataviews}/ms-member-role/MsMemberRoleTable.d.ts +1 -1
  210. package/dist/types/{modules/ms/dataviews → dataviews}/ms-menu/MsMenuForm.d.ts +2 -2
  211. package/dist/types/{modules/ms/dataviews → dataviews}/ms-menu/MsMenuTable.d.ts +1 -1
  212. package/dist/types/{modules/ms/dataviews → dataviews}/ms-menu/MsMenuTree.d.ts +1 -1
  213. package/dist/types/{modules/ms/dataviews → dataviews}/ms-menu/ms-permission-point/MsPermissionPointDefineForm.d.ts +2 -2
  214. package/dist/types/{modules/ms/dataviews → dataviews}/ms-menu/ms-permission-point/MsPermissionPointDefineTable.d.ts +1 -1
  215. package/dist/types/{modules/ms/dataviews → dataviews}/ms-menu/ms-route/MsRouteForm.d.ts +2 -2
  216. package/dist/types/{modules/ms/dataviews → dataviews}/ms-menu/ms-route/MsRouteTable.d.ts +1 -1
  217. package/dist/types/{modules/ms/dataviews → dataviews}/ms-message/MsMessageForm.d.ts +1 -1
  218. package/dist/types/dataviews/ms-message/MsMessageNotifyTable.d.ts +18 -0
  219. package/dist/types/{modules/ms/dataviews → dataviews}/ms-message/MsMessageTable.d.ts +2 -1
  220. package/dist/types/{modules/ms/dataviews → dataviews}/ms-message/SendForm.d.ts +2 -2
  221. package/dist/types/dataviews/ms-message/index.d.ts +3 -0
  222. package/dist/types/{modules/ms/dataviews → dataviews}/ms-region/MsRegionForm.d.ts +1 -1
  223. package/dist/types/{modules/ms/dataviews → dataviews}/ms-region/MsRegionTable.d.ts +1 -1
  224. package/dist/types/{modules/ms/dataviews → dataviews}/ms-role/MsRoleForm.d.ts +2 -2
  225. package/dist/types/{modules/ms/dataviews → dataviews}/ms-role/MsRoleTable.d.ts +1 -1
  226. package/dist/types/{modules/ms/dataviews → dataviews}/ms-role/ms-role-permission-point/MsRolePermissionPointTable.d.ts +1 -1
  227. package/dist/types/{modules/ms/dataviews → dataviews}/ms-role/ms-role-route/MsRoleRouteTable.d.ts +1 -1
  228. package/dist/types/dataviews/request-log/MsRequestLogTable.d.ts +8 -0
  229. package/dist/types/dataviews/request-log/index.d.ts +1 -0
  230. package/dist/types/{modules/ms/image-upload-context → image-upload-context}/index.d.ts +1 -1
  231. package/dist/types/index.d.ts +3 -3
  232. package/dist/types/init-application.d.ts +3 -1
  233. package/dist/types/layouts/new/components/Menu/index.vue.d.ts +1 -1
  234. package/dist/types/layouts/new/components/Topbar/Toolbar/Message/index.d.ts +3 -0
  235. package/dist/types/layouts/new/components/Topbar/Toolbar/Message/message-list.vue.d.ts +27 -0
  236. package/dist/types/layouts/new/components/Topbar/Toolbar/Message/message.d.ts +1 -0
  237. package/dist/types/layouts/new/components/Topbar/Toolbar/Message/notify.d.ts +13 -0
  238. package/dist/types/layouts/new/ui-kit/HInput.vue.d.ts +2 -2
  239. package/dist/types/layouts/new/ui-kit/HTabList.vue.d.ts +2 -2
  240. package/dist/types/message-impl/DialogerImpl.d.ts +3 -1
  241. package/dist/types/{modules/ms/pages → page}/to-do/ToDoForm.d.ts +1 -1
  242. package/dist/types/store/modules/tabbar.d.ts +6 -6
  243. package/package.json +4 -6
  244. package/dist/cjs/article-edit-add-page-DOHWFoYx.cjs +0 -882
  245. package/dist/cjs/article-edit-add-page-DOHWFoYx.cjs.map +0 -1
  246. package/dist/cjs/cms-settings-CreshwVH.cjs +0 -49
  247. package/dist/cjs/cms-settings-CreshwVH.cjs.map +0 -1
  248. package/dist/cjs/index-BKHmJq9t.cjs +0 -110
  249. package/dist/cjs/index-BKHmJq9t.cjs.map +0 -1
  250. package/dist/cjs/index-CCRCg477.cjs +0 -393
  251. package/dist/cjs/index-CCRCg477.cjs.map +0 -1
  252. package/dist/cjs/index-CgY5IPuU.cjs +0 -48
  253. package/dist/cjs/index-CgY5IPuU.cjs.map +0 -1
  254. package/dist/cjs/index-Cqx6has-.cjs.map +0 -1
  255. package/dist/cjs/index-D1rwP_XD.cjs.map +0 -1
  256. package/dist/cjs/index-D6oqYqr5.cjs +0 -406
  257. package/dist/cjs/index-D6oqYqr5.cjs.map +0 -1
  258. package/dist/cjs/index-DAN-V2W2.cjs.map +0 -1
  259. package/dist/cjs/index-DJR8wNp6.cjs.map +0 -1
  260. package/dist/cjs/index-DYe4VYfx.cjs.map +0 -1
  261. package/dist/cjs/index-VsQhouOO.cjs.map +0 -1
  262. package/dist/cjs/index-bjNfIJ9l.cjs +0 -79
  263. package/dist/cjs/index-bjNfIJ9l.cjs.map +0 -1
  264. package/dist/cjs/index-bmb2snX4.cjs.map +0 -1
  265. package/dist/cjs/index-mI0uOelq.cjs +0 -1605
  266. package/dist/cjs/index-mI0uOelq.cjs.map +0 -1
  267. package/dist/cjs/index-tJqqtY57.cjs +0 -39
  268. package/dist/cjs/index-tJqqtY57.cjs.map +0 -1
  269. package/dist/cjs/index-yY6nqi0P.cjs.map +0 -1
  270. package/dist/cjs/index-zTzCVKVY.cjs.map +0 -1
  271. package/dist/cjs/markdown-editor-Ct8Osg84.cjs.map +0 -1
  272. package/dist/cjs/permission-manage-B3iyzdss.cjs.map +0 -1
  273. package/dist/esm/article-edit-add-page-CdwMEUo9.js +0 -882
  274. package/dist/esm/article-edit-add-page-CdwMEUo9.js.map +0 -1
  275. package/dist/esm/cms-settings-Drin7wFi.js +0 -50
  276. package/dist/esm/cms-settings-Drin7wFi.js.map +0 -1
  277. package/dist/esm/index-8jPb4Wj9.js +0 -110
  278. package/dist/esm/index-8jPb4Wj9.js.map +0 -1
  279. package/dist/esm/index-BJVZ0yS1.js.map +0 -1
  280. package/dist/esm/index-Bja6wZ1k.js.map +0 -1
  281. package/dist/esm/index-C8z_gFCT.js +0 -39
  282. package/dist/esm/index-C8z_gFCT.js.map +0 -1
  283. package/dist/esm/index-CEnaU3CC.js +0 -406
  284. package/dist/esm/index-CEnaU3CC.js.map +0 -1
  285. package/dist/esm/index-CIcMtB-s.js.map +0 -1
  286. package/dist/esm/index-CZs0cX5Z.js +0 -48
  287. package/dist/esm/index-CZs0cX5Z.js.map +0 -1
  288. package/dist/esm/index-CmlDmGjs.js +0 -1605
  289. package/dist/esm/index-CmlDmGjs.js.map +0 -1
  290. package/dist/esm/index-Cq7SIfSQ.js.map +0 -1
  291. package/dist/esm/index-D4y4KL7W.js.map +0 -1
  292. package/dist/esm/index-D7NWJqQD.js.map +0 -1
  293. package/dist/esm/index-DVQ4uHey.js +0 -22
  294. package/dist/esm/index-DVQ4uHey.js.map +0 -1
  295. package/dist/esm/index-DWQX_Oq-.js +0 -393
  296. package/dist/esm/index-DWQX_Oq-.js.map +0 -1
  297. package/dist/esm/index-Jh3JnsYu.js.map +0 -1
  298. package/dist/esm/index-Zd8aDHyM.js.map +0 -1
  299. package/dist/esm/index-mTGOVfMi.js +0 -79
  300. package/dist/esm/index-mTGOVfMi.js.map +0 -1
  301. package/dist/esm/permission-manage-DA6XtD6L.js.map +0 -1
  302. package/dist/types/modules/cms/cms-settings.d.ts +0 -85
  303. package/dist/types/modules/cms/components/index.d.ts +0 -1
  304. package/dist/types/modules/cms/components/part-tree/index.d.ts +0 -22
  305. package/dist/types/modules/cms/components/part-tree/index.vue.d.ts +0 -28
  306. package/dist/types/modules/cms/composables/part-extensions.d.ts +0 -34
  307. package/dist/types/modules/cms/constants/index.d.ts +0 -1
  308. package/dist/types/modules/cms/dataviews/cms-ad-contents/CmsAdContentsForm.d.ts +0 -11
  309. package/dist/types/modules/cms/dataviews/cms-ad-contents/CmsAdContentsTable.d.ts +0 -7
  310. package/dist/types/modules/cms/dataviews/cms-ad-contents/index.d.ts +0 -2
  311. package/dist/types/modules/cms/dataviews/cms-ad-defines/CmsAdDefinesForm.d.ts +0 -7
  312. package/dist/types/modules/cms/dataviews/cms-ad-defines/CmsAdDefinesTable.d.ts +0 -7
  313. package/dist/types/modules/cms/dataviews/cms-ad-defines/index.d.ts +0 -2
  314. package/dist/types/modules/cms/dataviews/cms-articles/CmsArticlesForm.d.ts +0 -22
  315. package/dist/types/modules/cms/dataviews/cms-articles/CmsArticlesTable.d.ts +0 -7
  316. package/dist/types/modules/cms/dataviews/cms-articles/cms-article-atlas/CmsArticleAtlasForm.d.ts +0 -7
  317. package/dist/types/modules/cms/dataviews/cms-articles/cms-article-atlas/CmsArticleAtlasTable.d.ts +0 -7
  318. package/dist/types/modules/cms/dataviews/cms-articles/cms-article-atlas/index.d.ts +0 -2
  319. package/dist/types/modules/cms/dataviews/cms-articles/index.d.ts +0 -2
  320. package/dist/types/modules/cms/dataviews/cms-part-types/CmsPartTypesForm.d.ts +0 -7
  321. package/dist/types/modules/cms/dataviews/cms-part-types/CmsPartTypesTable.d.ts +0 -7
  322. package/dist/types/modules/cms/dataviews/cms-part-types/index.d.ts +0 -2
  323. package/dist/types/modules/cms/dataviews/cms-parts/CmsContentManPartForm.d.ts +0 -8
  324. package/dist/types/modules/cms/dataviews/cms-parts/CmsPartForm.d.ts +0 -35
  325. package/dist/types/modules/cms/dataviews/cms-parts/CmsPartMiniForm.d.ts +0 -4
  326. package/dist/types/modules/cms/dataviews/cms-parts/CmsPartTree.d.ts +0 -13
  327. package/dist/types/modules/cms/dataviews/cms-parts/index.d.ts +0 -4
  328. package/dist/types/modules/cms/dataviews/cms-tags/CmsTagsForm.d.ts +0 -7
  329. package/dist/types/modules/cms/dataviews/cms-tags/CmsTagsTable.d.ts +0 -7
  330. package/dist/types/modules/cms/dataviews/cms-tags/index.d.ts +0 -2
  331. package/dist/types/modules/cms/dataviews/index.d.ts +0 -6
  332. package/dist/types/modules/cms/index.d.ts +0 -6
  333. package/dist/types/modules/cms/pages/cms-contents/article-edit-add-page.vue.d.ts +0 -2
  334. package/dist/types/modules/cms/pages/cms-contents/components/article-atlas.vue.d.ts +0 -57
  335. package/dist/types/modules/cms/pages/cms-contents/components/article-list.vue.d.ts +0 -14
  336. package/dist/types/modules/cms/pages/cms-contents/components/part-banner-edit.vue.d.ts +0 -16
  337. package/dist/types/modules/cms/pages/cms-contents/components/part-banner.vue.d.ts +0 -32
  338. package/dist/types/modules/cms/pages/cms-contents/components/part-info.vue.d.ts +0 -24
  339. package/dist/types/modules/cms/pages/cms-settigns/DocModuleEditForm.vue.d.ts +0 -44
  340. package/dist/types/modules/ms/components/index.d.ts +0 -5
  341. package/dist/types/modules/ms/constants/index.d.ts +0 -1
  342. package/dist/types/modules/ms/dataviews/ms-message/index.d.ts +0 -2
  343. package/dist/types/modules/ms/index.d.ts +0 -7
  344. package/dist/types/modules/ms/material-upload-context/index.d.ts +0 -3
  345. package/dist/types/modules/ms/pages/local-log/index.vue.d.ts +0 -2
  346. package/dist/types/modules/ms/pages/ms-material/MsMaterialComponents.d.ts +0 -4
  347. package/dist/types/modules/ms/pages/ms-material/index.vue.d.ts +0 -2
  348. package/dist/types/modules/ms/pages/ms-menu/index.vue.d.ts +0 -2
  349. package/dist/types/modules/ms/pages/ms-role/index.vue.d.ts +0 -2
  350. package/dist/types/modules/ms/pages/to-do/index.vue.d.ts +0 -2
  351. /package/dist/types/{modules/ms/components → components/basic}/markdown-editor/index.d.ts +0 -0
  352. /package/dist/types/{modules/ms/components → components/basic}/markdown-editor/markdown-editor-options.d.ts +0 -0
  353. /package/dist/types/{modules/ms/components → components/basic}/markdown-editor/markdown-editor.d.ts +0 -0
  354. /package/dist/types/{modules/ms/components → components/basic}/rich-text-editor/index.d.ts +0 -0
  355. /package/dist/types/{modules/ms/components → components/basic}/rich-text-editor/rich-text-editor-options.d.ts +0 -0
  356. /package/dist/types/{modules/ms/components → components/basic}/rich-text-editor/rich-text-editor.d.ts +0 -0
  357. /package/dist/types/{modules/ms/material-upload-context → components/basic/upload-file/context}/material-upload-context-options.d.ts +0 -0
  358. /package/dist/types/{modules/ms/material-upload-context → components/basic/upload-file/context}/material-upload-context.d.ts +0 -0
  359. /package/dist/types/{modules/ms/components → components/business}/image-select/image-select-api.d.ts +0 -0
  360. /package/dist/types/{modules/ms/components → components/business}/image-select/image-select-panel.d.ts +0 -0
  361. /package/dist/types/{modules/ms/components → components/business}/image-select/index.d.ts +0 -0
  362. /package/dist/types/{modules/ms/dataviews/ms-material → components/business/material-list}/MsMaterialComponents.d.ts +0 -0
  363. /package/dist/types/{modules/ms/components → components/business}/material-list/components/file-view/file-view-options.d.ts +0 -0
  364. /package/dist/types/{modules/ms/components → components/business}/material-list/components/file-view/file-view.d.ts +0 -0
  365. /package/dist/types/{modules/ms/components → components/business}/material-list/components/file-view/index.d.ts +0 -0
  366. /package/dist/types/{modules/ms/components → components/business}/material-list/components/image-view/image-view-options.d.ts +0 -0
  367. /package/dist/types/{modules/ms/components → components/business}/material-list/components/image-view/image-view.d.ts +0 -0
  368. /package/dist/types/{modules/ms/components → components/business}/material-list/components/image-view/index.d.ts +0 -0
  369. /package/dist/types/{modules/ms/components → components/business}/material-list/components/index.d.ts +0 -0
  370. /package/dist/types/{modules/ms/components → components/business}/material-list/components/video-view/index.d.ts +0 -0
  371. /package/dist/types/{modules/ms/components → components/business}/material-list/components/video-view/video-view-options.d.ts +0 -0
  372. /package/dist/types/{modules/ms/components → components/business}/material-list/components/video-view/video-view.d.ts +0 -0
  373. /package/dist/types/{modules/ms/components → components/business}/material-select/index.d.ts +0 -0
  374. /package/dist/types/{modules/ms/dataviews → dataviews}/department/DepartmentForm.d.ts +0 -0
  375. /package/dist/types/{modules/ms/dataviews → dataviews}/department/DepartmentTable.d.ts +0 -0
  376. /package/dist/types/{modules/ms/dataviews → dataviews}/department/DepartmentTree.d.ts +0 -0
  377. /package/dist/types/{modules/ms/dataviews → dataviews}/department/index.d.ts +0 -0
  378. /package/dist/types/{modules/ms/dataviews → dataviews}/log/index.d.ts +0 -0
  379. /package/dist/types/{modules/ms/dataviews → dataviews}/log/local-log/LocalLogTree.d.ts +0 -0
  380. /package/dist/types/{modules/ms/dataviews → dataviews}/log/local-log/index.d.ts +0 -0
  381. /package/dist/types/{modules/ms/dataviews → dataviews}/log/login-log/index.d.ts +0 -0
  382. /package/dist/types/{modules/ms/dataviews → dataviews}/log/operate-log/OperateLogTable.d.ts +0 -0
  383. /package/dist/types/{modules/ms/dataviews → dataviews}/log/operate-log/index.d.ts +0 -0
  384. /package/dist/types/{modules/ms/dataviews → dataviews}/log/request-log/RequestLogTable.d.ts +0 -0
  385. /package/dist/types/{modules/ms/dataviews → dataviews}/log/request-log/index.d.ts +0 -0
  386. /package/dist/types/{modules/ms/dataviews → dataviews}/ms-config/index.d.ts +0 -0
  387. /package/dist/types/{modules/ms/dataviews → dataviews}/ms-deny-ip-access-list/index.d.ts +0 -0
  388. /package/dist/types/{modules/ms/dataviews → dataviews}/ms-ip-white-list/index.d.ts +0 -0
  389. /package/dist/types/{modules/ms/dataviews → dataviews}/ms-material/index.d.ts +0 -0
  390. /package/dist/types/{modules/ms/dataviews → dataviews}/ms-material/ms-material-group/index.d.ts +0 -0
  391. /package/dist/types/{modules/ms/dataviews → dataviews}/ms-member/components/MemberNickNameColumn.d.ts +0 -0
  392. /package/dist/types/{modules/ms/dataviews → dataviews}/ms-member/components/MemberRolesColumn.d.ts +0 -0
  393. /package/dist/types/{modules/ms/dataviews → dataviews}/ms-member/index.d.ts +0 -0
  394. /package/dist/types/{modules/ms/dataviews → dataviews}/ms-member-role/index.d.ts +0 -0
  395. /package/dist/types/{modules/ms/dataviews → dataviews}/ms-menu/index.d.ts +0 -0
  396. /package/dist/types/{modules/ms/dataviews → dataviews}/ms-menu/ms-permission-point/index.d.ts +0 -0
  397. /package/dist/types/{modules/ms/dataviews → dataviews}/ms-menu/ms-route/index.d.ts +0 -0
  398. /package/dist/types/{modules/ms/dataviews → dataviews}/ms-region/index.d.ts +0 -0
  399. /package/dist/types/{modules/ms/dataviews → dataviews}/ms-role/MsRolePermissionConfigTable.d.ts +0 -0
  400. /package/dist/types/{modules/ms/dataviews → dataviews}/ms-role/index.d.ts +0 -0
  401. /package/dist/types/{modules/ms/dataviews → dataviews}/ms-role/ms-role-permission-point/index.d.ts +0 -0
  402. /package/dist/types/{modules/ms/dataviews → dataviews}/ms-role/ms-role-route/index.d.ts +0 -0
  403. /package/dist/types/{modules/cms/pages/cms-ad → page/icons}/index.vue.d.ts +0 -0
  404. /package/dist/types/{modules/cms/pages/cms-contents → page/local-log}/index.vue.d.ts +0 -0
  405. /package/dist/types/{modules/cms/pages/cms-resource → page/ms-material}/index.vue.d.ts +0 -0
  406. /package/dist/types/{modules/cms/pages/cms-settigns → page/ms-menu}/index.vue.d.ts +0 -0
  407. /package/dist/types/{modules/ms/pages → page}/ms-role/components/aside.vue.d.ts +0 -0
  408. /package/dist/types/{modules/ms/pages → page}/ms-role/components/role-permission-config/index.d.ts +0 -0
  409. /package/dist/types/{modules/ms/pages → page}/ms-role/components/role-permission-config/role-permission-config-options.d.ts +0 -0
  410. /package/dist/types/{modules/ms/pages → page}/ms-role/components/role-permission-config/role-permission-config.d.ts +0 -0
  411. /package/dist/types/{modules/cms/pages/test → page/ms-role}/index.vue.d.ts +0 -0
  412. /package/dist/types/{modules/ms/pages → page}/ms-role/permission-manage.vue.d.ts +0 -0
  413. /package/dist/types/{modules/ms/pages/icons → page/to-do}/index.vue.d.ts +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-BJVZ0yS1.js","sources":["../../src/assets/iconfonts/iconfont.js","../../src/assets/iconfonts/oa-iconfont.js","../../src/constants/data-model.ts","../../src/constants/pattern.ts","../../src/constants/route.ts","../../src/constants/menu.ts","../../src/constants/region.ts","../../src/constants/log.ts","../../src/core/component/DataTableComponents.ts","../../src/core/component/DataTableHeaderComponents.ts","../../src/core/component/DataFormComponents.ts","../../src/core/component/DataFilterComponents.ts","../../src/core/component/ConfigComponents.ts","../../src/core/menu/MenuNode.ts","../../src/core/menu/Menu.ts","../../src/core/tabs/Tab.ts","../../src/core/tabs/Tabs.ts","../../src/core/DataModelDefines.ts","../../src/core/UserInfo.ts","../../src/core/Router.ts","../../src/core/PermissionPointManager.ts","../../src/core/UserSession.ts","../../src/settings.default.ts","../../src/settings.ts","../../src/store/modules/settings.ts","../../src/utils/index.ts","../../src/store/modules/menu.ts","../../src/router-middleware/auth.ts","../../src/core/PageManager.ts","../../src/core/MkModule.ts","../../src/core/MSAppClient.ts","../../src/message-impl/MessagerImpl.ts","../../src/message-impl/NotificationerImpl.ts","../../src/components/abstract/abstract-select/abstract-select-options.ts","../../src/components/abstract/abstract-select/abstract-select.ts","../../src/components/abstract/abstract-select/index.ts","../../src/components/basic/svg-icon/svg-icon.vue","../../src/components/basic/svg-icon/index.ts","../../src/components/basic/button/button-options.ts","../../src/components/basic/button/button.tsx","../../src/components/basic/button/index.ts","../../src/components/basic/config-provider/constants.ts","../../src/components/basic/config-provider/use-global-config.ts","../../src/components/basic/config-provider/config-provider-options.ts","../../src/components/basic/config-provider/config-provider.tsx","../../src/components/basic/config-provider/index.ts","../../src/components/basic/data-table-select/data-table-select-options.ts","../../src/components/basic/data-table-select/data-table-select.tsx","../../src/components/basic/data-table-select/index.ts","../../src/components/basic/data-select/data-select-options.ts","../../src/components/basic/data-select/data-select.tsx","../../src/components/basic/data-select/index.ts","../../src/components/basic/pagination/pagination-options.tsx","../../src/components/basic/pagination/pagination.tsx","../../src/components/basic/pagination/index.ts","../../src/components/basic/system-provider/system-provider.tsx","../../src/components/basic/system-provider/index.ts","../../src/components/basic/code-editor/index.ts","../../src/components/basic/json-editor/index.ts","../../src/components/basic/page-container/index.ts","../../src/components/basic/date-picker/date-picker-options.ts","../../src/components/basic/date-picker/date-picker.tsx","../../src/components/basic/date-picker/index.ts","../../src/components/basic/icon-select/icon-select-options.ts","../../src/components/basic/icon-select/icon-select.tsx","../../src/components/basic/icon-select/index.ts","../../src/components/basic/upload-file/context/UploadContext.ts","../../src/components/basic/upload-file/context/WebFileUploadContext.ts","../../src/components/basic/upload-file/context/web-file-upload-context-options.ts","../../src/components/basic/upload-file/context/web-file-upload-context.tsx","../../src/components/basic/upload-file/upload-file-options.ts","../../src/components/basic/upload-file/upload-file.tsx","../../src/components/basic/upload-file/ui/upload-image/upload-image-options.ts","../../src/components/basic/upload-file/ui/upload-image/upload-image.tsx","../../src/components/basic/upload-file/ui/upload-image/index.ts","../../src/components/basic/upload-file/ui/upload-file/upload-file-options.ts","../../src/components/basic/upload-file/ui/upload-file/upload-file.tsx","../../src/components/basic/upload-file/ui/upload-file/index.ts","../../src/components/basic/upload-file/ui/upload-video/upload-video-options.ts","../../src/components/basic/upload-file/ui/upload-video/upload-video.tsx","../../src/components/basic/upload-file/ui/upload-video/index.ts","../../src/components/basic/lexical-editor/assets/iconfont.js","../../src/components/basic/lexical-editor/composables/utils.ts","../../src/components/basic/lexical-editor/composables/useCharacterLimit.ts","../../src/components/basic/lexical-editor/composables/listenerManager.ts","../../src/components/basic/lexical-editor/composables/useLexicalCommandsLog.ts","../../src/components/basic/lexical-editor/composables/useLexicalIsTextContentEmpty.ts","../../src/components/basic/lexical-editor/nodes/HtmlElementNode.ts","../../src/components/basic/lexical-editor/nodes/HtmlElementDecoratorNode.ts","../../src/components/basic/lexical-editor/nodes/ModuleDecoratorNode.ts","../../src/components/basic/lexical-editor/nodes/ModuleDecoratorWarpNode.ts","../../src/components/basic/lexical-editor/nodes/ImageNode.ts","../../src/components/basic/lexical-editor/nodes/ImageTextWarpNode.ts","../../src/components/basic/lexical-editor/nodes/Template.ts","../../src/components/basic/lexical-editor/nodes/index.ts","../../src/components/basic/lexical-editor/utils/html.ts","../../src/components/basic/lexical-editor/utils/url.ts","../../src/components/basic/lexical-editor/utils/css.ts","../../src/components/basic/lexical-editor/utils/link-edit-dialog.tsx","../../src/modules/ms/constants/index.ts","../../src/modules/ms/dataviews/ms-material/ms-material-group/MsMaterialGroupForm.ts","../../src/modules/ms/dataviews/ms-material/ms-material-group/MsMaterialGroupTree.ts","../../src/modules/ms/dataviews/ms-material/MsMaterialForm.ts","../../src/modules/ms/dataviews/ms-config/MsConfigForm.ts","../../src/modules/ms/dataviews/ms-config/MsConfigTable.ts","../../src/modules/ms/dataviews/ms-material/MsMaterialComponents.ts","../../src/modules/ms/dataviews/ms-material/MsMaterialTable.ts","../../src/modules/ms/dataviews/ms-role/MsRoleForm.ts","../../src/modules/ms/dataviews/ms-role/MsRoleTable.ts","../../src/modules/ms/dataviews/ms-role/ms-role-permission-point/MsRolePermissionPointTable.ts","../../src/modules/ms/dataviews/ms-role/ms-role-route/MsRoleRouteTable.ts","../../src/modules/ms/dataviews/ms-menu/MsMenuTable.ts","../../src/modules/ms/dataviews/ms-menu/ms-route/MsRouteForm.ts","../../src/modules/ms/dataviews/ms-menu/ms-route/MsRouteTable.ts","../../src/modules/ms/dataviews/ms-menu/ms-permission-point/MsPermissionPointDefineForm.ts","../../src/modules/ms/dataviews/ms-menu/ms-permission-point/MsPermissionPointDefineTable.ts","../../src/modules/ms/dataviews/ms-menu/MsMenuTree.ts","../../src/modules/ms/dataviews/ms-menu/MsMenuForm.ts","../../src/modules/ms/dataviews/ms-role/MsRolePermissionConfigTable.ts","../../src/modules/ms/dataviews/ms-member/MsMemberForm.ts","../../src/components/data-model/data-form/data-form-options.ts","../../src/components/data-model/data-form/token.ts","../../src/components/data-model/data-form/views/form/form-options.ts","../../src/composables/create-data-table.ts","../../src/composables/create-data-form.ts","../../src/composables/use-column-component.ts","../../src/composables/use-i18n.ts","../../src/composables/on-tab-before-close.ts","../../src/composables/on-tab-refresh.ts","../../src/composables/on-tab-before-switch.ts","../../src/composables/use-current-tab.ts","../../src/composables/use-http-request.ts","../../src/tokens/ms-app-client.ts","../../src/composables/use-ms-app-client.ts","../../src/composables/use-user-info.ts","../../src/composables/use-single-view.ts","../../src/components/data-model/data-form/data-form-item/data-form-item-options.ts","../../src/components/data-model/data-form/data-form-item/data-form-item.tsx","../../src/components/data-model/data-form/data-form-item/index.ts","../../src/components/data-model/data-form/views/form/form.tsx","../../src/components/data-model/data-form/views/form/index.ts","../../src/components/data-model/data-form/views/form-view/form-view-options.ts","../../src/components/data-model/data-form/views/form-view/form-view.tsx","../../src/components/data-model/data-form/views/form-view/index.ts","../../src/components/data-model/data-form/data-form.vue","../../src/components/data-model/data-form/index.ts","../../src/components/data-model/data-table/data-table-options.ts","../../src/components/data-model/data-table/composables/use-column.ts","../../src/components/data-model/data-table/composables/use-query-params.ts","../../src/components/data-model/data-table/token.ts","../../src/components/data-model/data-table-pagination/data-table-pagination-options.ts","../../src/components/data-model/data-table-pagination/data-table-pagination.tsx","../../src/components/data-model/data-table-pagination/index.ts","../../src/components/data-model/data-table/data-table-column/data-table-column-options.ts","../../src/components/data-model/data-table/data-table-column/data-table-column.tsx","../../src/components/data-model/data-table/data-table-column/index.ts","../../src/components/data-model/data-table/views/table/table-options.ts","../../src/components/data-model/data-table/views/table/table.tsx","../../src/components/data-model/data-table/views/table/index.ts","../../src/components/data-model/data-table/views/table-view/table-view-options.ts","../../src/components/data-model/data-table/views/table-view/header/header-item.tsx","../../src/components/data-model/data-table/views/table-view/header/header.tsx","../../src/components/data-model/data-table/views/table-view/header/index.ts","../../src/components/data-model/data-table/views/table-view/table-view.tsx","../../src/components/data-model/data-table/views/table-view/classify-search/classify-search-item/classify-search-item-options.ts","../../src/components/data-model/data-table/views/table-view/classify-search/classify-search-item/classify-search-item.tsx","../../src/components/data-model/data-table/views/table-view/classify-search/classify-search-item/index.ts","../../src/components/data-model/data-table/views/table-view/classify-search/classify-search.tsx","../../src/components/data-model/data-table/views/table-view/classify-search/index.ts","../../src/components/data-model/data-table/views/table-view/index.ts","../../src/components/data-model/data-table/data-table.vue","../../src/components/data-model/data-table/views/table-tree/table-tree-options.ts","../../src/components/data-model/data-table/views/table-tree/table-tree.tsx","../../src/components/data-model/data-table/views/table-tree/index.ts","../../src/components/data-model/data-table/views/tree/tree-options.ts","../../src/components/data-model/data-table/views/tree/tree.tsx","../../src/components/data-model/data-table/views/tree/index.ts","../../src/components/data-model/data-table/views/tree-view/tree-view-options.ts","../../src/components/data-model/data-table/views/tree-view/tree-view.tsx","../../src/components/data-model/data-table/views/tree-view/index.ts","../../src/components/data-model/data-table/index.ts","../../src/modules/ms/dataviews/ms-member/components/MemberNickNameColumn.tsx","../../src/modules/ms/dataviews/ms-member/components/MemberRolesColumn.tsx","../../src/modules/ms/dataviews/ms-member/MsMemberTable.tsx","../../src/modules/ms/dataviews/ms-member-role/MsMemberRoleTable.ts","../../src/modules/ms/dataviews/ms-member-role/MsMemberRoleForm.ts","../../src/modules/ms/dataviews/ms-ip-white-list/MsIPWhitelistForm.ts","../../src/modules/ms/dataviews/ms-ip-white-list/MsIPWhitelistTable.ts","../../src/modules/ms/dataviews/ms-deny-ip-access-list/MsDenyIPAccessListForm.ts","../../src/modules/ms/dataviews/ms-deny-ip-access-list/MsDenyIPAccessListTable.ts","../../src/modules/ms/dataviews/ms-region/MsRegionForm.ts","../../src/modules/ms/dataviews/ms-region/MsRegionTable.ts","../../src/define-data-form.ts","../../src/modules/ms/dataviews/department/DepartmentForm.ts","../../src/define-data-table.ts","../../src/modules/ms/dataviews/department/DepartmentTable.ts","../../src/define-data-tree.ts","../../src/modules/ms/dataviews/department/DepartmentTree.ts","../../src/modules/ms/dataviews/log/operate-log/OperateLogTable.ts","../../src/modules/ms/dataviews/log/login-log/LoginLogTable.ts","../../src/modules/ms/dataviews/log/request-log/RequestLogTable.ts","../../src/modules/ms/dataviews/log/local-log/LocalLogTree.ts","../../src/modules/ms/dataviews/ms-message/MsMessageForm.ts","../../src/modules/ms/dataviews/ms-message/SendForm.ts","../../src/modules/ms/dataviews/ms-message/MsMessageTable.ts","../../src/modules/ms/components/material-list/material-list-options.ts","../../src/modules/ms/components/material-list/material-group-form-popover.tsx","../../src/modules/ms/components/material-list/material-group.tsx","../../src/components/basic/image-cropper/image-cropper-content-options.ts","../../src/components/basic/image-cropper/image-cropper-content.tsx","../../src/components/basic/image-cropper/image-cropper-api.tsx","../../src/components/basic/image-cropper/index.ts","../../src/modules/ms/components/material-list/material-item.vue","../../src/modules/ms/components/material-list/material-list.tsx","../../src/modules/ms/components/material-list/index.ts","../../src/components/basic/lexical-editor/utils/image.tsx","../../src/components/basic/lexical-editor/utils/module.tsx","../../src/components/basic/lexical-editor/utils/template.tsx","../../src/components/basic/lexical-editor/composables/lexicalEditor.ts","../../src/components/basic/lexical-editor/composables/useLexicalEditorState.ts","../../src/components/basic/lexical-editor/composables/useElementBlockSelection.ts","../../src/components/basic/lexical-editor/composables/useTableOfContents.ts","../../src/components/basic/lexical-editor/plugins/AutoFocusPlugin.vue","../../src/components/basic/lexical-editor/plugins/HistoryPlugin.vue","../../src/components/basic/lexical-editor/plugins/TabIndentationPlugin.vue","../../src/components/basic/lexical-editor/plugins/NodeTreeViewPlugin.vue","../../src/components/basic/lexical-editor/plugins/ElementBlockSelectionPlugin.vue","../../src/components/basic/lexical-editor/plugins/ToolbarPlugin.vue","../../src/components/basic/dynamic-form-panel/utils.ts","../../src/modules/ms/components/image-select/image-select-panel.tsx","../../src/modules/ms/components/image-select/image-select-api.tsx","../../src/modules/ms/components/image-select/index.ts","../../src/modules/ms/image-upload-context/index.ts","../../src/components/basic/dynamic-form-panel/DynamicFormPanel.tsx","../../src/components/basic/dynamic-form-panel/dialog.ts","../../src/components/basic/lexical-editor/plugins/RichTextEditorPlugin.ts","../../src/components/basic/lexical-editor/plugins/HashtagPlugin.ts","../../src/components/basic/lexical-editor/plugins/ListPlugin.ts","../../src/components/basic/lexical-editor/plugins/CheckListPlugin.ts","../../src/components/basic/lexical-editor/plugins/TablePlugin.ts","../../src/components/basic/lexical-editor/DocTheme.ts","../../src/components/basic/lexical-editor/LexicalComposer.vue","../../src/components/basic/lexical-editor/stage/composables.ts","../../src/components/basic/lexical-editor/stage/ContentEditable.vue","../../src/components/basic/lexical-editor/stage/DecoratedTeleports.ts","../../src/components/basic/lexical-editor/assets/doc-editor-stage.css?raw","../../src/components/basic/lexical-editor/assets/doc-editor.css?raw","../../src/components/basic/lexical-editor/stage/index.vue","../../src/components/basic/doc-editor/editor.vue","../../src/components/basic/doc-editor/index.ts","../../src/components/basic/copy-container/copy-container.tsx","../../src/components/basic/copy-container/index.ts","../../src/components/basic/visual-page-editor/core/VisvalPageEditor.ts","../../src/components/basic/visual-page-editor/core/Dialog.tsx","../../src/components/basic/visual-page-editor/core/index.ts","../../src/components/basic/visual-page-editor/toolbar.vue","../../src/components/basic/visual-page-editor/core/BlockRender.ts","../../src/components/basic/visual-page-editor/content-editable.vue","../../src/components/basic/visual-page-editor/editor.vue","../../src/components/basic/visual-page-editor/modules/BaseImageModule.ts","../../src/components/basic/visual-page-editor/index.ts","../../src/components/business/verify-dialog/verify-dialog-option.ts","../../src/components/business/verify-dialog/verify-panel.tsx","../../src/components/business/verify-dialog/verify-dialog-api.tsx","../../src/components/business/verify-dialog/index.ts","../../src/components/business/resource-list/ResourceManager.ts","../../src/components/business/resource-list/components/resource-item/index.vue","../../src/components/business/resource-list/resource-list.vue","../../src/components/business/resource-list/index.ts","../../src/components/business/resource-manager/resource-manager.vue","../../src/components/business/resource-manager/index.ts","../../src/components/business/resource-select/resource-select-api.tsx","../../src/components/business/resource-select/index.ts","../../src/message-impl/DialogerImpl.tsx","../../src/layouts/components/dialogs/dialogs.tsx","../../src/layouts/components/dialogs/index.ts","../../src/installer.ts","../../src/layouts/new/components/Logo/index.vue","../../src/utils/eventBus.ts","../../src/layouts/new/ui-kit/HKbd.vue","../../src/layouts/new/common/components/SvgIcon/index.vue","../../src/layouts/new/components/Topbar/Toolbar/NavSearch/index.vue","../../src/layouts/new/components/Topbar/Toolbar/Fullscreen/index.vue","../../src/utils/composables/useMainPage.ts","../../src/layouts/new/components/Topbar/Toolbar/PageReload/index.vue","../../src/utils/composables/useViewTransition.ts","../../src/layouts/new/components/Topbar/Toolbar/ColorScheme/index.vue","../../src/layouts/new/ui-kit/HDropdownMenu.vue","../../src/layouts/new/components/Topbar/Toolbar/rightSide.vue","../../src/utils/composables/useMenu.ts","../../src/layouts/new/components/Header/index.vue","../../src/layouts/new/components/MainSidebar/index.vue","../../src/layouts/new/components/Menu/types.ts","../../src/layouts/new/components/Menu/item.vue","../../src/layouts/new/components/Menu/sub.vue","../../src/layouts/new/components/Menu/index.vue","../../src/layouts/new/components/SubSidebar/index.vue","../../src/store/modules/keepAlive.ts","../../src/store/modules/tabbar.ts","../../src/utils/composables/useTabbar.ts","../../src/layouts/new/components/Topbar/Tabbar/index.vue","../../src/layouts/new/components/Breadcrumb/index.vue","../../src/layouts/new/components/Breadcrumb/item.vue","../../src/layouts/new/components/Topbar/Toolbar/Breadcrumb/index.vue","../../src/layouts/new/components/Topbar/Toolbar/leftSide.vue","../../src/layouts/new/components/Topbar/Toolbar/index.vue","../../src/layouts/new/components/Topbar/index.vue","../../src/layouts/new/components/Search/index.vue","../../src/layouts/new/ui-kit/HDialog.vue","../../src/layouts/new/components/HotkeysIntro/index.vue","../../src/layouts/new/ui-kit/HSlideover.vue","../../src/layouts/new/ui-kit/HButton.vue","../../src/layouts/new/ui-kit/HInput.vue","../../src/layouts/new/ui-kit/HCheckList.vue","../../src/layouts/new/ui-kit/HToggle.vue","../../src/layouts/new/ui-kit/HTabList.vue","../../src/layouts/new/components/AppSetting/index.vue","../../src/layouts/new/components/views/link.vue","../../src/layouts/new/components/Copyright/index.vue","../../src/layouts/new/components/BackTop/index.vue","../../src/layouts/new/index.vue","../../src/layouts/layout.tsx","../../src/layouts/index.ts","../../src/modules/ms/components/material-select/material-select-api.tsx","../../src/modules/ms/components/material-select/index.ts","../../src/modules/ms/components/markdown-editor/markdown-editor-options.ts","../../src/modules/ms/components/markdown-editor/index.ts","../../src/modules/ms/components/rich-text-editor/langs/zh-Hans.js","../../src/modules/ms/components/rich-text-editor/skins/ui/ms/skin.js","../../src/modules/ms/components/rich-text-editor/skins/ui/ms/content.js","../../src/modules/ms/components/rich-text-editor/skins/content/ms/content.js","../../src/modules/ms/components/rich-text-editor/content.css?raw","../../src/modules/ms/components/rich-text-editor/rich-text-editor-options.ts","../../src/modules/ms/components/rich-text-editor/rich-text-editor.tsx","../../src/modules/ms/components/rich-text-editor/index.ts","../../src/modules/ms/material-upload-context/MaterialUploadContext.ts","../../src/modules/ms/material-upload-context/material-upload-context-options.ts","../../src/modules/ms/material-upload-context/material-upload-context.tsx","../../src/modules/ms/index.ts","../../src/modules/cms/composables/part-extensions.ts","../../src/modules/cms/constants/index.ts","../../src/modules/cms/dataviews/cms-ad-contents/CmsAdContentsForm.ts","../../src/modules/cms/dataviews/cms-ad-contents/CmsAdContentsTable.ts","../../src/modules/cms/dataviews/cms-ad-defines/CmsAdDefinesForm.ts","../../src/modules/cms/dataviews/cms-ad-defines/CmsAdDefinesTable.ts","../../src/modules/cms/dataviews/cms-articles/CmsArticlesTable.ts","../../src/modules/cms/dataviews/cms-parts/CmsPartTree.ts","../../src/modules/cms/dataviews/cms-tags/CmsTagsTable.ts","../../src/modules/cms/dataviews/cms-tags/CmsTagsForm.ts","../../src/modules/cms/dataviews/cms-articles/cms-article-atlas/CmsArticleAtlasForm.ts","../../src/modules/cms/dataviews/cms-articles/cms-article-atlas/CmsArticleAtlasTable.ts","../../src/modules/cms/dataviews/cms-articles/CmsArticlesForm.ts","../../src/modules/cms/dataviews/cms-part-types/CmsPartTypesForm.ts","../../src/modules/cms/dataviews/cms-part-types/CmsPartTypesTable.ts","../../src/modules/cms/dataviews/cms-parts/CmsPartForm.ts","../../src/modules/cms/dataviews/cms-parts/CmsContentManPartForm.ts","../../src/modules/cms/dataviews/cms-parts/CmsPartMiniForm.ts","../../src/modules/cms/index.ts","../../src/utils.ts","../../src/store/index.ts","../../src/init-application.ts","../../src/index.ts"],"sourcesContent":["window._iconfont_svg_string_2806063='<svg><symbol id=\"icon-doc-sub\" viewBox=\"0 0 1024 1024\"><path d=\"M761.19442603 690.23548073c9.92824551 0 19.58032287-0.8285045 28.95623205-2.48551349 9.37590918-1.65700898 17.85427184-4.40488223 25.43508797-8.27123652 7.58081612-3.8525459 14.07076798-8.82357285 19.4422388-14.88546407 5.37147079-6.06189122 8.8926149-13.50462325 10.54962388-22.34200453h38.47022534v289.54851217h-51.71248883V727.46294931h-71.14091921v-37.2274686zM146.9273859 94.66502533v124.67611791h260.96510715v264.11342423h144.32548282V219.34114324h262.11120503V94.66502533z\" ></path><path d=\"M407.89249305 465.66933766h144.32548282V903.42349539H407.89249305z\" ></path></symbol><symbol id=\"icon-doc-sup\" viewBox=\"0 0 1024 1024\"><path d=\"M839.60172358 113.69252772c10.59012854 0 20.88567773-0.88373813 30.88664752-2.65121438 10.00096979-1.76747625 19.04455663-4.69854105 27.13076051-8.82265229 8.08620386-4.10938229 15.00881918-9.41181104 20.73838804-15.87782835 5.72956884-6.4660173 9.48545589-14.40493147 11.25293215-23.83147149h41.03490701v308.85174634h-55.15998807V153.40182754h-75.88364716v-39.70929982zM63.50290068 113.78090153v132.98785912h278.36278095v281.72098584h153.94718168V246.76876065h279.58528536v-132.98785912z\" ></path><path d=\"M341.86568163 509.5188347h153.94718168v466.93776824H341.86568163z\" ></path></symbol><symbol id=\"icon-save\" viewBox=\"0 0 1024 1024\"><path d=\"M432.00000031 152h-140.00000062v219.79999969c0 11.32000031 8.86000031 20.20000031 19.88000062 20.20000031h280.23999938c10.90000031 0 19.87999969-9 19.88000062-20.20000031V152h-60v140.16c0 22.00000031-17.95999969 39.84-39.96 39.84h-40.08A40.00000031 40.00000031 0 0 1 432.00000031 292.16V152zM212 872V652.20000031C212 596.82000031 256.80000031 552.00000031 312.15999969 552.00000031h399.68000062A100.03999969 100.03999969 0 0 1 812 652.20000031V872h39.85999969A19.98 19.98 0 0 0 872 852.08V288.56L735.44 152H692v219.79999969c0 55.27999969-44.71999969 100.2-99.88000031 100.2H311.88000031A99.9 99.9 0 0 1 212 371.79999969V152H171.92A19.93999969 19.93999969 0 0 0 152 172.14000031v679.71999938C152 863.01999969 160.98000031 872 172.14000031 872H212zM72.00000031 172.14000031A99.94000031 99.94000031 0 0 1 171.92 72.00000031H752a40.00000031 40.00000031 0 0 1 28.27999969 11.71999969l160.00000031 160.00000031A40.00000031 40.00000031 0 0 1 951.99999969 272v580.08A99.97999969 99.97999969 0 0 1 851.85999969 951.99999969H172.14000031A100.08 100.08 0 0 1 72.00000031 851.85999969V172.14000031z m660 480.03999938c0-11.26000031-8.94-20.17999969-20.16-20.17999969H312.15999969C300.99999969 632 291.99999969 641 291.99999969 652.20000031V872h440.00000062V652.20000031z\" ></path></symbol><symbol id=\"icon-richtext-outline\" viewBox=\"0 0 1024 1024\"><path d=\"M921.09091484 307.45454697H675.63636787c-22.58373604 0-40.90653457-18.28444658-40.90653457-40.90653457S653.05263183 225.63380761 675.63636787 225.63380761h245.45454697c22.58373604 0 40.90653457 18.29403457 40.90653458 40.91420479S943.67465088 307.45454697 921.09091484 307.45454697z m0 1e-8M921.09091484 143.82073935H675.63636787c-22.58373604 0-40.90653457-18.29403457-40.90653457-40.91420478S653.05263183 62 675.63636787 62h245.45454697c22.58373604 0 40.90653457 18.28444658 40.90653458 40.90653457S943.67465088 143.82073935 921.09091484 143.82073935z m0 0M921.09091484 471.08835547H675.63636787c-22.58373604 0-40.90653457-18.28444658-40.90653457-40.90653458s18.32279854-40.90653457 40.90653457-40.90653456h245.45454697c22.58373604 0 40.90653457 18.28444658 40.90653458 40.90653456s-18.32279854 40.90653457-40.90653458 40.90653458z m0 0M921.09091484 634.7298333H102.90653457C80.33046875 634.7298333 62 616.43579961 62 593.81562852S80.33046875 552.90909482 102.90653457 552.90909482H921.09091484c22.58373604 0 40.90653457 18.28444658 40.90653457 40.9065337s-18.32279854 40.91420479-40.90653457 40.91420478z m0 0M921.09091484 798.3636418H102.90653457C80.33046875 798.3636418 62 780.07919521 62 757.45710723s18.33046875-40.91420479 40.90653457-40.91420479H921.09091484c22.58373604 0 40.90653457 18.29403457 40.90653457 40.91420479S943.67465088 798.3636418 921.09091484 798.3636418z m0 0M921.09091484 961.99744942H102.90653457C80.33046875 961.99744942 62 943.71300371 62 921.09091484s18.33046875-40.90653457 40.90653457-40.90653369H921.09091484c22.58373604 0 40.90653457 18.28444658 40.90653457 40.90653369s-18.32279854 40.90653457-40.90653457 40.90653457z m0-1e-8M491.54545742 62H123.36363652C89.52734375 62 62 89.52734375 62 123.36363652v286.36108155c0 33.83629277 27.52734375 61.36363652 61.36363652 61.3636374h368.1818209c33.83629277 0 61.36363652-27.52734375 61.3636374-61.3636374V123.36363652c0-33.83629277-27.52734375-61.36363652-61.3636374-61.36363652z m-20.45710195 81.82073935v165.06434795l-58.12670566-52.32208886c-16.45120722-14.72727305-41.65056826-13.86434707-56.94545479 2.2090913l-66.47982979 69.62663409-32.19481581-30.26953213c-16.36683222-15.38693174-42.13380674-14.68892021-57.63963077 1.59545478l-55.8811793 58.62144902V143.82073935z m0 0\" ></path></symbol><symbol id=\"icon-doc-bold\" viewBox=\"0 0 1024 1024\"><path d=\"M187.34407017 82.66844496h384.97105698c71.0083585 0 127.95055178 17.86623914 170.85603784 53.5839884 42.89075709 35.73247826 64.3508646 89.71414884 64.3508646 161.97446967 0 43.84814006-9.80949321 81.40701044-29.3990217 112.64715322-19.60425744 31.26960071-47.53038226 55.41038055-83.76364544 72.4665264v2.43027984c48.81180252 11.38549285 85.79624313 36.7487771 110.93859286 76.11931065 25.14234971 39.38526253 37.72088905 88.71257895 37.72088904 147.96722036 0 34.09756272-5.55282123 65.97105116-16.64373473 95.60573635-11.09091348 29.64941415-28.48582561 55.21890396-52.14054948 76.72319837-23.6841818 21.51902339-53.99639954 38.57516923-90.96611118 51.15370857-36.99916958 12.5932683-80.99459931 18.88253797-132.01574716 18.88253798H187.34407017V82.66844496z m138.67324106 364.12956615h226.32533424c33.28746944 0 61.02211765-10.35446506 83.20394464-31.04866618 22.18182698-20.7089301 33.28746944-50.53509188 33.28746946-89.50794328 0-43.84814006-9.98624083-74.69060067-29.9587225-92.55683982-19.97248167-17.85151015-48.81180252-26.79199422-86.5326916-26.79199421H326.01731123V446.79801111z m0 381.18571201h245.1784143c42.15430864 0 74.88207728-11.97465162 98.18330586-35.92395486 23.30122862-23.93457426 34.95184291-57.84066038 34.95184292-101.68880046 0-43.0233178-11.6506143-76.11931065-34.95184292-99.25852059s-56.02899724-34.70145045-98.18330586-34.70145046H326.01731123V827.98372312z\" ></path></symbol><symbol id=\"icon-doc-italic\" viewBox=\"0 0 1024 1024\"><path d=\"M655.81757889 97.3224012l-152.5057066 838.85208534H370.91611771l152.50570662-838.85208534h132.39575456z\" ></path><path d=\"M823.06010971 208.66554972H315.70801501l21.80672925-119.96843264h507.35209471l-21.80672926 119.96843264zM690.60151156 937.17998415H183.24941685l21.80672923-119.95272174h507.35209471l-21.80672923 119.95272174z\" ></path></symbol><symbol id=\"icon-doc-underline\" viewBox=\"0 0 1024 1024\"><path d=\"M209.89412137 63.05682318h129.24670104V493.17216947c0 24.81831238 1.19304647 49.99012004 3.62332632 75.471236 2.40082192 25.51057392 9.30870826 48.42884934 20.67947216 68.75482627 11.37076391 20.34070589 28.58892839 37.05808544 51.69868041 50.13740973 23.08029408 13.10878221 55.66077301 19.64844434 97.71197888 19.64844434 42.0364769 0 74.60222688-6.53966213 97.71197889-19.64844434 23.08029408-13.07932428 40.32791651-29.8114328 51.69868042-50.13740973 11.37076391-20.32597692 18.24919231-43.24425233 20.67947217-68.75482627 2.40082192-25.49584496 3.62332633-50.66765259 3.62332631-75.471236V63.05682318h129.24670104v472.50531842c0 47.5598402-7.23192367 88.91878453-21.71049997 124.07683299-14.4785763 35.15804846-34.99602981 64.61598603-61.52290261 88.40327064-26.54160174 23.78728459-58.41509018 41.53569195-95.63519428 53.24522211-37.22010412 11.70953017-78.57904845 17.57165975-124.07683299 17.57165976-45.49778454 0-86.84199993-5.86212956-124.076833-17.57165976-37.22010412-11.70953017-69.1083215-29.47266653-95.63519427-53.24522211-26.54160174-23.78728459-47.04432627-53.24522213-61.5229026-88.40327064-14.4785763-35.15804846-21.71049999-76.5169928-21.71049999-124.07683299v-472.50531842zM162.7466923 880.07272135h692.48246716v69.74166716H162.7466923z\" ></path></symbol><symbol id=\"icon-doc-strikethrough\" viewBox=\"0 0 1024 1024\"><path d=\"M164.21958918 83.53010109v132.98785911h278.34805198v281.72098583h153.96191067V216.5179602H876.10010823V83.53010109zM442.56764116 621.71189132h153.9471817V946.20580248H442.56764116z\" ></path><path d=\"M165.10332731 535.0908259h711.48283688v50.07849387H165.10332731z\" ></path></symbol><symbol id=\"icon-doc-link\" viewBox=\"0 0 1024 1024\"><path d=\"M398.85206183 657.20116607l-14.61113703-14.61113704c-117.9937689-117.9937689-117.9937689-309.97114795 0-427.95018789l66.53075199-66.53075197c117.9937689-117.9937689 309.97114795-117.9937689 427.95018787 0 57.14839887 57.16312782 88.63893411 133.14987776 88.63893411 213.98245844 0 80.83258066-31.47580627 156.81933059-88.63893411 213.98245843l-66.53075197 66.53075197-89.13971905-89.13971907 66.53075197-66.53075196c33.34638531-33.34638531 51.71340939-77.68058134 51.7134094-124.84273937s-18.36702407-91.49635406-51.7134094-124.84273936c-68.8284711-68.8284711-180.84227867-68.8284711-249.67074977 0l-66.53075198 66.53075196c-68.8284711 68.8284711-68.8284711 180.84227867 0 249.67074977l14.61113703 14.59640807-89.13971906 89.15444802z\" ></path><path d=\"M325.38396556 968.98397718c-80.83258066 0-156.81933059-31.47580627-213.98245841-88.63893411-117.9937689-117.9937689-117.9937689-309.97114795 0-427.95018787l66.53075196-66.53075199 89.13971907 89.13971905-66.53075198 66.53075197c-68.8284711 68.8284711-68.8284711 180.84227867 0 249.67074978 33.34638531 33.34638531 77.68058134 51.71340939 124.84273936 51.7134094s91.49635406-18.36702407 124.84273938-51.7134094l66.53075197-66.53075197c68.8284711-68.8284711 68.8284711-180.84227867 0-249.67074978l-14.3902025-14.37547352 89.13971906-89.13971905 14.3902025 14.39020249c117.9937689 117.97903991 117.9937689 309.97114795 0 427.95018787L539.366424 880.34504307c-57.16312782 57.16312782-133.14987776 88.63893411-213.98245844 88.63893411z\" ></path></symbol><symbol id=\"icon-doc-align-left\" viewBox=\"0 0 1024 1024\"><path d=\"M66.09888142 143.79879453h899.27258601v138.34644207H66.09888142zM66.09888142 445.65059845H632.54740385v138.34644206H66.09888142zM66.09888142 747.50240237h899.27258601v138.34644206H66.09888142z\" ></path></symbol><symbol id=\"icon-doc-align-right\" viewBox=\"0 0 1024 1024\"><path d=\"M69.81334323 143.79879453h899.27258602v138.34644207H69.81334323zM402.63740682 445.65059845h566.44852243v138.34644206H402.63740682zM69.81334323 747.50240237h899.27258602v138.34644206H69.81334323z\" ></path></symbol><symbol id=\"icon-doc-align-center\" viewBox=\"0 0 1024 1024\"><path d=\"M65.67082077 104.306747h899.272586v138.34644207H65.67082077zM232.07594835 406.15855091H798.52447078v138.34644206H232.07594835zM65.67082077 708.01035483h899.272586v138.34644207H65.67082077z\" ></path></symbol><symbol id=\"icon-doc-align-justify\" viewBox=\"0 0 1024 1024\"><path d=\"M64.42806403 460.93650637h899.27258601v138.34644206H64.42806403zM64.42806403 159.08470243h899.27258601v138.34644207H64.42806403zM64.42806403 762.78831028h566.44852243v138.34644205H64.42806403z\" ></path></symbol><symbol id=\"icon-doc-background-color\" viewBox=\"0 0 1024 1024\"><path d=\"M513.35926518 750.77947209c-8.10380958 0-16.24645531-0.47897917-24.38910103-1.44988288-102.78633876-12.23338667-183.00887547-107.27838657-178.84046223-211.87707891 2.27838736-57.23153698 24.95869787-114.12649403 67.39366243-169.10553443 32.3634568-41.93009461 68.92121758-73.30970231 93.89286083-92.24879722 24.95869787-18.92614953 59.83355891-18.91320415 84.81814757 0.03883616 48.53223981 36.82961383 161.42892247 136.93625837 161.42892245 270.83035178 0 58.21538608-24.98458864 113.78991408-68.53285609 152.47071763-37.45099219 33.23079743-85.89261431 51.34138785-135.77117393 51.34138787z m0.42719764-402.70496555c-18.21415348 14.51177403-46.25385245 39.22450963-70.69473501 70.88891576-31.71618765 41.10159013-48.6099121 82.08667181-50.18924879 121.80310598-2.44667733 61.34816869 46.02083555 119.18813867 105.84144908 126.30809915 35.2761679 4.194304 69.1283437-6.31734676 95.34274371-29.59314489 25.86487467-22.96510894 40.70028325-55.96288948 40.70028325-90.51411595 0-40.82973709-16.28529147-83.0575755-48.40278597-125.49254005-24.85513482-32.85538133-53.82690133-58.46134835-72.59770627-73.40032z\" ></path><path d=\"M792.29342657 955.69193509H235.30538983c-94.2294408 0-170.87905185-76.64961106-170.87905186-170.87905185V227.82484651c0-94.2294408 76.64961106-170.87905185 170.87905186-170.87905186h556.98803674c94.2294408 0 170.87905185 76.64961106 170.87905185 170.87905186v556.98803673c0 94.2294408-76.64961106 170.87905185-170.87905185 170.87905185zM235.30538983 139.79624402c-48.54518518 0-88.02860247 39.48341728-88.02860247 88.02860249v556.98803673c0 48.54518518 39.48341728 88.02860247 88.02860247 88.02860247h556.98803674c48.54518518 0 88.02860247-39.48341728 88.02860246-88.02860247V227.82484651c0-48.54518518-39.48341728-88.02860247-88.02860246-88.02860249H235.30538983z\" ></path></symbol><symbol id=\"icon-richtext\" viewBox=\"0 0 1024 1024\"><path d=\"M218.316 307.727h87.886v205.06h-29.297v29.295h117.179v-29.294H364.79V307.727h87.882v29.293h29.294v-87.882H189.022v87.882h29.294v-29.293z m322.242 58.59h292.945v58.588H540.558v-58.588z m0 117.177h292.945v58.588H540.558v-58.588z m-351.536 117.18h644.481v58.588h-644.48v-58.587z m0 117.176h644.481v58.588h-644.48V717.85z m351.536-468.713h292.945v58.589H540.558v-58.589z m420.923 713.13H61.045V63.309h900.436v898.958z m-864.62-35.816h828.804V99.125H96.861V926.45z\" ></path></symbol><symbol id=\"icon-html-code\" viewBox=\"0 0 1024 1024\"><path d=\"M951.90520135 72.09479865v879.8104027H72.09479865V72.09479865h879.8104027z m-62.8436006 62.8436006H134.93839925v754.1232015h754.1232015V134.93839925z\" fill=\"#2c2c2c\" ></path><path d=\"M951.90520135 260.62559901v62.84360063H103.51659967V260.62559901zM536.38331734 404.66313051l60.45554283 17.0934602-109.22217751 386.11107916-60.45554283-17.09346021zM364.2546966 426.90976495l44.43042479 44.49326887-135.05089716 134.98805307 135.05089716 135.05089715-44.43042479 44.43042481-179.48132197-179.48132196zM682.11762603 426.90976495l-44.43042628 44.49326887 135.05089717 134.98805307L637.68719975 741.44198404l44.43042628 44.43042481 179.48132196-179.48132196z\" fill=\"#2c2c2c\" ></path></symbol><symbol id=\"icon-doc-table\" viewBox=\"0 0 1024 1024\"><path d=\"M700.53080036 323.46919964v565.59240111h-62.84360061V323.46919964z\" ></path><path d=\"M951.90520135 72.09479865v879.8104027H72.09479865V72.09479865h879.8104027z m-62.8436006 62.8436006H134.93839925v754.1232015h754.1232015V134.93839925z\" ></path><path d=\"M951.90520135 260.62559901v62.84360063H103.51659967V260.62559901zM951.90520135 700.53080036v62.84360063H72.09479865v-62.84360063zM889.06160075 449.15639939v62.84360061H134.93839925v-62.84360061z\" ></path><path d=\"M386.31280025 323.46919964v565.59240111H323.46919964V323.46919964z\" ></path></symbol><symbol id=\"icon-doc-line\" viewBox=\"0 0 1024 1024\"><path d=\"M953.86906294 456.76636665v110.4672667H70.13093706v-110.4672667z\" ></path></symbol><symbol id=\"icon-dll\" viewBox=\"0 0 1024 1024\"><path d=\"M173.64753652 74.22955332H652.57890752l253.94892978 245.51208897v575.39259228a55.61284746 55.61284746 0 0 1-56.24560986 54.69885527H173.64753652a55.61284746 55.61284746 0 0 1-56.24561074-54.69885527V128.92840948a55.61284746 55.61284746 0 0 1 56.24561075-54.69885616z\" fill=\"#F1F5F8\" ></path><path d=\"M173.64753652 961.99620312a67.91657432 67.91657432 0 0 1-68.54933759-66.86196855V128.92840948A67.91657432 67.91657432 0 0 1 173.64753652 62.06644004h483.99347549l261.19055215 252.54278965v580.52500489a67.84626709 67.84626709 0 0 1-68.54933672 66.86196855z m1e-8-875.60353652a43.52004052 43.52004052 0 0 0-44.22311104 42.53574287v766.34643868a43.44973417 43.44973417 0 0 0 44.22311104 42.53574287h676.63469091a43.52004052 43.52004052 0 0 0 44.22311104-42.53574287V324.87405401L647.79803018 86.39266661z\" fill=\"#657084\" ></path><path d=\"M652.57890752 74.22955332l253.94892978 245.51208897-184.62621533-1.82798262A68.9711792 68.9711792 0 0 1 652.57890752 249.92677812z\" fill=\"#E0F0FF\" ></path><path d=\"M906.66845088 331.90475469l-184.5559081-1.82798174a81.4155205 81.4155205 0 0 1-81.41552051-80.14999482v-175.76753204a12.2334205 12.2334205 0 0 1 7.03070068-11.17881474 12.09280606 12.09280606 0 0 1 13.21771905 2.46074501l253.94892978 245.51208897a12.09280606 12.09280606 0 0 1 2.81228027 13.35833262 12.30372685 12.30372685 0 0 1-11.03820117 7.59315674zM664.88263438 102.91481474v147.01196339a57.0189876 57.0189876 0 0 0 57.30021562 55.82376825l154.11297217 1.54675459z\" fill=\"#657084\" ></path><path d=\"M74.16311328 484.33035869m34.94258526 0l805.71836601 0q34.94258526 0 34.94258525 34.94258526l0 202.06235478q0 34.94258526-34.94258525 34.94258525l-805.71836601 0q-34.94258526 0-34.94258526-34.94258525l0-202.06235478q0-34.94258526 34.94258526-34.94258526Z\" fill=\"#717F88\" ></path><path d=\"M914.82406455 768.44099727H109.10569854a47.17600576 47.17600576 0 0 1-47.10569854-47.10569854V519.06202315a47.17600576 47.17600576 0 0 1 47.10569854-47.10569854h805.71836601A47.17600576 47.17600576 0 0 1 961.92976309 519.06202315v202.27327558a47.17600576 47.17600576 0 0 1-47.10569854 47.10569854zM109.10569854 496.49347197A22.8497792 22.8497792 0 0 0 86.32622656 519.06202315v202.27327558A22.77947197 22.77947197 0 0 0 109.10569854 744.04446348h805.71836601a22.77947197 22.77947197 0 0 0 22.77947197-22.77947197V519.06202315a22.8497792 22.8497792 0 0 0-22.77947197-22.77947198z\" fill=\"#657084\" ></path><path d=\"M381.47506631 550.62987207c24.32622656 0 42.6060501 6.53855185 55.19100498 19.54534921s18.06890185 30.02109433 18.06890186 53.29271603-6.04640303 40.84837471-18.06890186 53.29271513-30.86477842 19.61565644-55.19100498 19.61565644h-54.83947061V550.62987207z m-30.30232324 125.28709629h25.66206035c18.70166513 0 32.34122578-4.28872763 40.91868106-12.65526211s12.65526211-21.79517432 12.6552621-39.79376894-4.21842041-31.84907695-12.6552621-40.00469063-22.21701592-12.44434131-40.91868106-12.44434131h-25.66206035zM502.26251416 550.62987207v125.28709629h81.13429248v20.45934052h-105.46051904V550.62987207zM626.70592636 550.62987207v125.28709629h81.06398614v20.45934052h-105.46051904V550.62987207z\" fill=\"#FFFFFF\" ></path></symbol><symbol id=\"icon-bmp\" viewBox=\"0 0 1024 1024\"><path d=\"M193.625 62C154.25 62 120.5 92.9375 120.5 132.3125V888.875c0 42.1875 33.75 73.125 73.125 73.125h644.0625c39.375 0 70.3125-30.9375 70.3125-70.3125V346.0625L640.8125 62H193.625z\" fill=\"#84A9BC\" ></path><path d=\"M908 348.875v14.0625h-180s-87.1875-16.875-84.375-92.8125c0 0 2.8125 78.75 84.375 78.75h180z\" fill=\"#0D4A6B\" ></path><path d=\"M564.02 623.618c4.581 0 8.523 1.4625 11.718 4.365 2.943 2.6775 4.896 6.57 5.895 11.628l0.234 1.287 22.689 147.996 0.1665 1.3545c0.3285 3.276 0.135 6.3405-0.5985 9.18-1.0485 4.0725-4.6935 6.147-10.368 6.3495-3.6765 0-6.525-1.152-8.343-3.5325-1.467-1.926-2.52-4.8285-3.249-8.775l-0.2115-1.215-14.6115-100.5165-1.89-11.835a121.1535 121.1535 0 0 0-2.4705-11.997 30.9375 30.9375 0 0 0-0.99-3.114l-0.2475-0.5985-0.1845-0.405-0.306 0.855-0.144 0.441-37.7595 129.9735-0.3015 1.0665c-0.873 2.952-1.962 5.1975-3.33 6.75-1.737 1.9665-4.3245 2.9025-7.6095 2.9025-3.42 0-6.021-0.81-7.695-2.6055-1.3275-1.422-2.448-3.735-3.456-6.966l-0.333-1.116a8550.405 8550.405 0 0 0-19.269-64.494 3027.519 3027.519 0 0 1-18.783-64.5345 23.8275 23.8275 0 0 0-1.1295-3.177l-0.234-0.468-0.09 0.252a16.3395 16.3395 0 0 0-0.4455 1.6785l-0.135 0.675-0.135 0.738-18.837 127.296c-0.585 3.555-1.5975 6.4215-3.0735 8.586-1.9035 2.808-5.256 4.1355-9.7965 4.1355-7.722 0-11.025-5.2335-9.693-14.2155l0.162-0.9765 23.13-151.2135c0.837-4.869 2.61-8.667 5.373-11.34 3.042-2.9475 7.011-4.4145 11.772-4.4145 4.68 0 8.6625 1.2465 11.8485 3.7575 2.9475 2.322 5.256 6.12 7.02 11.3985l0.432 1.35 33.5925 118.521 32.895-118.8 0.3735-1.2465c1.611-5.13 3.861-8.8875 6.822-11.223 3.1815-2.5065 7.0785-3.7575 11.5965-3.7575z m117.45 2.772l2.034 0.018c18.477 0.297 32.3595 4.7025 41.571 13.3155 9.585 8.964 14.319 22.95 14.319 41.8365 0 36.666-19.017 55.62-56.2635 56.1645l-1.6785 0.0135h-32.022v55.7685l-0.0315 1.1025c-0.1755 3.159-1.0845 5.76-2.7765 7.74-2.0025 2.331-5.1435 3.429-9.27 3.429-4.329 0-7.587-1.2105-9.585-3.762-1.629-2.0835-2.529-4.59-2.7135-7.47l-0.0315-1.098v-152.7435l0.018-1.1295c0.1395-4.815 1.1835-8.235 3.3705-10.2105 2.151-1.9485 6.0795-2.853 11.9385-2.961l1.287-0.0135h39.834z m-342.72 0l2.268 0.0225c8.3295 0.1665 15.606 1.2375 21.8385 3.2355 6.849 2.196 12.51 5.337 16.965 9.432a37.944 37.944 0 0 1 9.9 14.589c2.115 5.5575 3.1725 11.7495 3.1725 18.567 0 10.1025-2.9115 18.5265-8.748 25.173a41.4585 41.4585 0 0 1-12.582 9.738l-1.6245 0.7785-0.2475 0.1035 1.251 0.36c6.93 2.1195 13.014 5.3325 18.225 9.63l1.395 1.2015 1.26 1.1565c7.947 7.596 11.907 18.225 11.907 31.743 0 15.867-4.716 28.4265-14.175 37.53-9.09 8.7525-21.6675 13.266-37.6245 13.59l-1.8585 0.018H298.6055l-1.098-0.0315c-3.5505-0.1935-6.39-1.323-8.4105-3.438-1.9575-2.052-3.0375-4.617-3.2355-7.6005l-0.0315-1.008v-152.793l0.0405-1.0215c0.225-2.97 1.3635-5.517 3.3885-7.5465 2.097-2.0925 4.914-3.213 8.352-3.402l1.053-0.027h40.0905z m-2.286 94.212h-26.2305v60.768h31.7745c12.9825 0 22.5045-2.439 28.602-7.209 5.9535-4.6575 8.964-12.105 8.964-22.545 0-11.223-3.537-19.0305-10.584-23.7015-6.975-4.626-17.1675-7.083-30.5865-7.299l-1.9395-0.0135z m344.988-72.072h-32.022v67.572h32.022c12.375 0 21.0285-2.754 26.082-8.1135 5.094-5.4 7.704-14.0985 7.704-26.1765 0-12.015-2.898-20.475-8.5725-25.5375-5.472-4.8825-13.302-7.479-23.571-7.7265l-1.6425-0.018z m-342.972-0.252l-28.2465-0.0045v49.9365h28.2465c10.0845 0 17.6355-2.241 22.725-6.633 5.0265-4.3425 7.533-10.3095 7.533-18.081 0-7.47-2.412-13.4775-7.254-18.1665-4.5765-4.428-11.6955-6.8085-21.4425-7.0335l-1.5615-0.018zM640.8125 62L908 348.875h-182.8125c-70.3125 0-84.375-56.25-84.375-81.5625V62z\" fill=\"#FFFFFF\" ></path></symbol><symbol id=\"icon-mp4\" viewBox=\"0 0 1024 1024\"><path d=\"M193.625 62C154.25 62 120.5 92.9375 120.5 132.3125V888.875c0 42.1875 33.75 73.125 73.125 73.125h644.0625c39.375 0 70.3125-30.9375 70.3125-70.3125V346.0625L640.8125 62H193.625z\" fill=\"#497CB3\" ></path><path d=\"M908 348.875v14.0625h-180s-87.1875-16.875-84.375-92.8125c0 0 2.8125 78.75 84.375 78.75h180z\" fill=\"#0D3A6B\" ></path><path d=\"M429.416 632.618c4.581 0 8.523 1.4625 11.718 4.365 2.943 2.6775 4.896 6.57 5.895 11.628l0.234 1.287 22.689 147.996 0.1665 1.3545c0.3285 3.276 0.135 6.3405-0.5985 9.18-1.0485 4.0725-4.6935 6.147-10.368 6.3495-3.6765 0-6.525-1.152-8.343-3.5325-1.467-1.926-2.52-4.8285-3.249-8.775l-0.2115-1.215-14.6115-100.5165-1.89-11.835a121.1535 121.1535 0 0 0-2.4705-11.997 30.9375 30.9375 0 0 0-0.99-3.114l-0.2475-0.5985-0.1845-0.405-0.306 0.855-0.144 0.441-37.7595 129.9735-0.3015 1.0665c-0.873 2.952-1.962 5.1975-3.33 6.75-1.737 1.9665-4.3245 2.9025-7.6095 2.9025-3.42 0-6.021-0.81-7.695-2.6055-1.3275-1.422-2.448-3.735-3.456-6.966l-0.333-1.116a8550.405 8550.405 0 0 0-19.269-64.494 3027.519 3027.519 0 0 1-18.783-64.5345 23.8275 23.8275 0 0 0-1.1295-3.177l-0.234-0.468-0.09 0.252a16.3395 16.3395 0 0 0-0.4455 1.6785l-0.135 0.675-0.135 0.738-18.837 127.296c-0.585 3.555-1.5975 6.4215-3.0735 8.586-1.9035 2.808-5.256 4.1355-9.7965 4.1355-7.722 0-11.025-5.2335-9.693-14.2155l0.162-0.9765 23.13-151.2135c0.837-4.869 2.61-8.667 5.373-11.34 3.042-2.9475 7.011-4.4145 11.772-4.4145 4.68 0 8.6625 1.2465 11.8485 3.7575 2.9475 2.322 5.256 6.12 7.02 11.3985l0.432 1.35 33.5925 118.521 32.895-118.8 0.3735-1.2465c1.611-5.13 3.861-8.8875 6.822-11.223 3.1815-2.5065 7.0785-3.7575 11.5965-3.7575z m117.45 2.772l2.034 0.018c18.477 0.297 32.3595 4.7025 41.571 13.3155 9.585 8.964 14.319 22.95 14.319 41.8365 0 36.666-19.017 55.62-56.2635 56.1645l-1.6785 0.0135h-32.022v55.7685l-0.0315 1.1025c-0.1755 3.159-1.0845 5.76-2.7765 7.74-2.0025 2.331-5.1435 3.429-9.27 3.429-4.329 0-7.587-1.2105-9.585-3.762-1.629-2.0835-2.529-4.59-2.7135-7.47l-0.0315-1.098v-152.7435l0.018-1.1295c0.1395-4.815 1.1835-8.235 3.3705-10.2105 2.151-1.9485 6.0795-2.853 11.9385-2.961l1.287-0.0135h39.834z m166.806-3.024c4.086 0 7.2135 1.485 9.09 4.455 1.5975 2.5425 2.376 6.7815 2.475 12.8475l0.009 1.3275v101.322h9.414l0.765 0.027c5.5845 0.378 8.469 4.4775 8.469 11.295 0 6.885-2.9565 10.971-8.559 11.2995l-0.747 0.0225h-9.342v29.0385l-0.018 0.936c-0.135 3.447-1.0035 5.9625-2.8305 7.4475-1.8495 1.503-4.8915 2.142-9.2295 2.142-4.2165 0-7.245-0.756-9.099-2.4975-1.701-1.5975-2.565-3.9915-2.7045-7.11l-0.0225-0.9585v-28.998h-68.355l-0.99-0.0225c-6.4575-0.288-10.575-3.3975-11.7765-9.216-0.3825-2.6775-0.1035-5.7465 0.81-9.207 0.8235-3.141 2.5785-6.8535 5.2515-11.178l0.828-1.314 54.675-84.654 1.0845-1.7235c4.4055-6.867 8.613-12.15 12.645-15.867 4.131-3.798 9.432-6.732 15.885-8.82l1.6425-0.504 0.63-0.09z m-12.33 35.9955l-52.893 83.9565h52.893v-83.9565z m-154.494-10.8315h-32.022v67.572h32.022c12.375 0 21.0285-2.754 26.082-8.1135 5.094-5.4 7.704-14.0985 7.704-26.1765 0-12.015-2.898-20.475-8.5725-25.5375-5.472-4.8825-13.302-7.479-23.571-7.7265l-1.6425-0.018zM640.8125 62L908 348.875h-182.8125c-70.3125 0-84.375-56.25-84.375-81.5625V62z\" fill=\"#FFFFFF\" ></path></symbol><symbol id=\"icon-tiff\" viewBox=\"0 0 1024 1024\"><path d=\"M193.625 62C154.25 62 120.5 92.9375 120.5 132.3125V888.875c0 42.1875 33.75 73.125 73.125 73.125h644.0625c39.375 0 70.3125-30.9375 70.3125-70.3125V346.0625L640.8125 62H193.625z\" fill=\"#9D75E2\" ></path><path d=\"M908 348.875v14.0625h-180s-87.1875-16.875-84.375-92.8125c0 0 2.8125 78.75 84.375 78.75h180z\" fill=\"#2F0D6B\" ></path><path d=\"M377.378 649.565l1.08 0.0315c2.9115 0.18 5.4225 1.071 7.4475 2.691 2.376 1.9035 3.5505 4.6215 3.5505 7.9965 0 3.7845-1.3905 6.615-4.2435 8.2035a15.948 15.948 0 0 1-6.804 2.0115l-1.0305 0.0315h-38.322v133.7625l-0.027 1.0575c-0.153 3.015-0.954 5.427-2.484 7.1955-1.854 2.1465-5.085 3.114-9.567 3.114-4.5 0-7.749-1.0215-9.603-3.2715-1.485-1.809-2.286-4.1715-2.4435-7.0425l-0.0315-1.1025v-133.7175l-38.3805 0.0045-1.044-0.0225c-2.988-0.144-5.49-0.8865-7.443-2.268-2.403-1.692-3.5325-4.4865-3.5325-8.19 0-3.555 1.188-6.309 3.645-8.064 2.016-1.44 4.482-2.232 7.3395-2.3895l1.0935-0.0315h100.8zM438.38 647c3.8475 0 6.876 0.792 9.018 2.475 2.0655 1.629 3.1275 4.113 3.2895 7.344l0.0225 0.9v147.042l-0.0225 0.801c-0.3375 6.5655-4.7205 10.098-12.3075 10.098-7.3215 0-11.4975-3.51-11.808-9.9315l-0.018-0.783V657.665l0.0225-0.783c0.324-6.4125 4.527-9.8865 11.8035-9.8865z m160.29 2.565l0.99 0.018c7.614 0.2745 11.844 3.9375 11.844 10.467 0 3.7215-1.143 6.4935-3.5865 8.109-1.989 1.3185-4.752 1.998-8.289 2.1195l-1.2105 0.0225H530.36v48.3255l61.299 0.0045 1.035 0.018c5.6475 0.216 9.3915 2.241 10.5435 5.868 1.125 2.286 1.0125 4.833-0.1125 7.182-1.2015 4.6485-4.923 7.173-10.5975 7.4115l-0.9135 0.018H530.36v66.1095l-0.0315 0.927c-0.18 2.7-1.125 4.9365-2.853 6.6285-2.016 1.971-5.274 2.8665-9.6975 2.8665-4.293 0-7.425-0.918-9.279-2.9565-1.53-1.683-2.349-3.87-2.5155-6.516l-0.0315-1.0125v-143.5275l0.018-0.9855c0.1485-3.8835 1.17-6.7275 3.249-8.46 2.016-1.6785 5.175-2.502 9.477-2.619l1.098-0.018h78.876z m145.674 0l0.99 0.018c7.614 0.2745 11.844 3.9375 11.844 10.467 0 3.7215-1.143 6.4935-3.5865 8.109-1.989 1.3185-4.752 1.998-8.289 2.1195l-1.2105 0.0225h-68.058v48.3255l61.299 0.0045 1.035 0.018c5.6475 0.216 9.3915 2.241 10.548 5.868 1.1205 2.286 1.008 4.833-0.1125 7.182-1.206 4.6485-4.9275 7.173-10.602 7.4115l-0.9135 0.018h-61.254v66.1095l-0.0315 0.927c-0.18 2.7-1.125 4.9365-2.853 6.6285-2.016 1.971-5.274 2.8665-9.6975 2.8665-4.293 0-7.425-0.918-9.279-2.9565-1.53-1.683-2.349-3.87-2.5155-6.516l-0.0315-1.0125v-143.5275l0.0225-0.9855c0.144-3.8835 1.1655-6.7275 3.2445-8.46 2.016-1.6785 5.175-2.502 9.477-2.619l1.098-0.018h78.876zM640.8125 62L908 348.875h-182.8125c-70.3125 0-84.375-56.25-84.375-81.5625V62z\" fill=\"#FFFFFF\" ></path></symbol><symbol id=\"icon-audio\" viewBox=\"0 0 1024 1024\"><path d=\"M190.8125 62C154.25 62 120.5 92.9375 120.5 132.3125V888.875C120.5 928.25 151.4375 962 190.8125 962H834.875c39.375 0 70.3125-30.9375 70.3125-70.3125V346.0625L640.8125 62h-450z\" fill=\"#379FD3\" ></path><path d=\"M908 348.875v14.0625h-180s-87.1875-16.875-84.375-95.625c0 0 2.8125 81.5625 84.375 81.5625h180z\" fill=\"#2987C8\" ></path><path d=\"M640.8125 62v205.3125c0 22.5 14.0625 81.5625 84.375 81.5625H908L640.8125 62zM536.75 540.125l-199.6875 28.125v188.4375c-11.25-2.8125-22.5-2.8125-33.75 0-28.125 5.625-45 25.3125-39.375 42.1875s30.9375 28.125 61.875 22.5c25.3125-2.8125 42.1875-19.6875 42.1875-33.75V635.75l146.25-16.875v115.3125c-11.25-2.8125-22.5-2.8125-33.75 0-30.9375 5.625-47.8125 25.3125-42.1875 42.1875s30.9375 28.125 61.875 22.5c25.3125-5.625 42.1875-22.5 42.1875-36.5625V540.125h-5.625z\" fill=\"#FFFFFF\" ></path></symbol><symbol id=\"icon-wenjianjia\" viewBox=\"0 0 1024 1024\"><path d=\"M958.6925 399.032c0-19.674-5.6205-25.299-25.2945-25.299H92.915c-19.674 0-28.107 5.625-28.107 28.1115v441.3195c0 59.031 25.299 84.33 81.5175 84.33h733.6575c56.2185 0 81.5175-25.299 81.5175-81.5175-2.8125-154.602-2.8125-297.963-2.8125-446.94zM87.299 328.76h823.608c47.79 0 47.79 0 47.79-44.9775 0-53.406-22.491-73.08-73.089-73.08h-354.177c-44.9775 0-44.9775 0-44.9775-44.9775 0-47.79-22.4865-67.464-70.272-67.464H135.08C84.4865 95.4485 64.8125 115.127 62 165.725v137.736c0 22.4865 5.625 25.299 25.299 25.299z\" fill=\"#F6CC20\" ></path></symbol><symbol id=\"icon-weizhiwenjian\" viewBox=\"0 0 1024 1024\"><path d=\"M187.748 62c-40.68 0-71.19 30.51-71.19 71.19v757.62c0 40.68 30.51 71.19 71.19 71.19h640.6785c40.68 0 71.1855-30.51 71.1855-71.19V346.751L635.2055 62H187.748z\" fill=\"#8199AF\" ></path><path d=\"M904.697 346.7465v15.255h-177.966s-86.445-20.34-86.445-96.615c0 0 5.085 81.36 86.445 81.36h177.966z\" fill=\"#617F9B\" ></path><path d=\"M635.2055 62v203.391c0 20.34 15.255 81.3555 86.4405 81.3555h177.966L635.2055 62zM462.32 753.524c-10.17 0-15.255-5.085-15.255-5.085v-35.595c10.17-61.0155 66.105-66.096 66.105-101.691 0-25.425-20.34-30.51-40.68-35.595-15.255 0-30.51 5.085-50.85 20.34 0 0-5.085 5.085-10.17 5.085-10.17 0-15.255-5.085-15.255-15.255 0-5.085 0-5.085 5.085-5.085 25.425-20.34 40.68-30.51 71.19-30.51 40.68 0 61.02 20.34 66.1005 55.935 5.085 50.85-55.935 66.105-61.02 106.7805v35.595s-5.085 5.085-15.255 5.085m-15.2505 45.7605c0 10.17 10.17 20.34 20.34 20.34s20.34-10.17 20.34-20.34-10.17-20.34-20.34-20.34c-15.255 0-20.34 10.17-20.34 20.34z\" fill=\"#FFFFFF\" ></path></symbol><symbol id=\"icon-yasuo\" viewBox=\"0 0 1024 1024\"><path d=\"M186.506 62C146.51 62 116.5085 97.001 116.5085 132.002v754.9965c0 40.005 30.0015 75.0015 69.9975 75.0015h640.0035c40.0005 0 69.9975-30.0015 69.9975-70.002V347.003L631.5065 62H186.506z\" fill=\"#F4B900\" ></path><path d=\"M906.506 346.9985v15.003h-180s-90-20.0025-84.996-94.9995c0 0 4.995 79.9965 84.996 79.9965h180z\" fill=\"#D4A100\" ></path><path d=\"M641.51 62v205.002c0 19.998 14.9985 79.9965 84.996 79.9965h180L641.51 62z\" fill=\"#FFFFFF\" ></path><path d=\"M326.51 66.9995h79.9965V147.005H326.51V66.995zM241.505 142.001h80.001v80.001H241.5095V142.001z m85.005 85.0005h79.9965v79.9965H326.51V227.0015zM241.505 306.998h80.001v80.001H241.5095V306.998z m85.005 80.001h79.9965V467H326.51V386.999z m59.9985 220.005H266.507c-9.999 0-19.998-10.0035-19.998-20.0025V467h164.997v120.0015c-4.995 14.9985-14.9985 19.998-24.9975 19.998z\" ></path><path d=\"M261.5075 512h135v49.9995h-135z\" fill=\"#FFFFFF\" ></path></symbol><symbol id=\"icon-image1\" viewBox=\"0 0 1024 1024\"><path d=\"M190.8125 62C151.4375 62 120.5 92.9375 120.5 132.3125v759.375C120.5 931.0625 151.4375 962 190.8125 962H834.875c39.375 0 70.3125-30.9375 70.3125-70.3125V348.875L640.8125 62h-450z\" fill=\"#49C9A7\" ></path><path d=\"M908 348.875v14.0625h-180s-87.1875-16.875-87.1875-95.625c0 0 2.8125 81.5625 84.375 81.5625H908z\" fill=\"#37BB91\" ></path><path d=\"M640.8125 62v205.3125c0 22.5 14.0625 81.5625 84.375 81.5625H908L640.8125 62zM261.125 818.5625V523.25h292.5v292.5s-292.5 0-292.5 2.8125z m264.375-264.375H292.0625v177.1875h236.25v-177.1875H525.5z m-135 118.125l53.4375-73.125 16.875 28.125 16.875-5.625 14.0625 78.75h-180l50.625-47.8125S390.5 669.5 390.5 672.3125zM337.0625 618.875c-11.25 0-25.3125-8.4375-25.3125-22.5 0-11.25 11.25-22.5 25.3125-22.5 11.25 0 22.5 11.25 22.5 22.5 0 14.0625-8.4375 22.5-22.5 22.5z\" fill=\"#FFFFFF\" ></path></symbol><symbol id=\"icon-html\" viewBox=\"0 0 1024 1024\"><path d=\"M190.8125 62C151.4375 62 120.5 92.9375 120.5 132.3125V888.875C120.5 928.25 151.4375 962 190.8125 962H834.875c39.375 0 70.3125-30.9375 70.3125-70.3125V346.0625L640.8125 62h-450z\" fill=\"#F7622C\" ></path><path d=\"M908 348.875v14.0625h-180s-87.1875-16.875-87.1875-95.625c0 0 2.8125 81.5625 84.375 81.5625H908z\" fill=\"#F54921\" ></path><path d=\"M640.8125 62v205.3125c0 22.5 14.0625 81.5625 84.375 81.5625H908L640.8125 62zM384.875 776.375H379.25l-106.875-47.8125c-5.625-2.8125-11.25-8.4375-11.25-16.875 0-5.625 5.625-14.0625 11.25-16.875L379.25 647h2.8125c5.625 0 11.25 5.625 11.25 14.0625 0 5.625-2.8125 11.25-5.625 14.0625L289.25 717.3125 387.6875 759.5c2.8125 2.8125 5.625 5.625 5.625 14.0625 2.8125 0-2.8125 2.8125-8.4375 2.8125zM503 621.6875l-61.875 185.625c-2.8125 5.625-5.625 8.4375-11.25 8.4375-8.4375 0-14.0625-5.625-14.0625-14.0625l2.8125-2.8125L480.5 613.25c2.8125-5.625 5.625-11.25 11.25-11.25 8.4375 0 11.25 5.625 11.25 14.0625v5.625z m146.25 106.875l-106.875 47.8125h-2.8125c-5.625 0-14.0625-2.8125-14.0625-11.25 0-5.625 2.8125-11.25 5.625-14.0625l98.4375-42.1875-98.4375-42.1875c-2.8125-2.8125-5.625-5.625-5.625-14.0625 0-5.625 5.625-14.0625 14.0625-14.0625h2.8125l106.875 47.8125c5.625 2.8125 11.25 11.25 11.25 16.875-2.8125 14.0625-5.625 22.5-11.25 25.3125z\" fill=\"#FFFFFF\" ></path></symbol><symbol id=\"icon-apk\" viewBox=\"0 0 1024 1024\"><path d=\"M195.623 71.8685c-38.619 0-70.443 31.716-70.443 70.443v742.851c0 38.619 31.716 70.443 70.443 70.443h632.385c38.619 0 70.443-31.716 70.443-70.443V352.1375l-260.955-280.269H195.623z\" fill=\"#8199AF\" ></path><path d=\"M898.451 353.537v13.8105H721.745s-86.949-17.91-85.653-92.5605c0 0 2.8035 78.75 82.8495 78.75h179.5095z\" fill=\"#617F9B\" ></path><path d=\"M352.412 628.118c3.978 0 7.2945 0.927 9.8955 2.826 2.295 1.674 3.9645 3.87 4.986 6.5025l53.5455 155.5515 0.3465 1.134c1.1475 4.023 1.116 7.578-0.1755 10.62-1.476 3.483-4.752 5.292-9.387 5.5035l-2.0655 0.0405-0.981-0.0585a10.3815 10.3815 0 0 1-6.4755-3.015 17.514 17.514 0 0 1-4.0635-6.624l-0.369-1.134-13.3245-37.0665H320.7275l-9.7965 27.495-0.8415 2.331c-0.5625 1.5435-1.125 3.0465-1.692 4.5135-0.8865 2.2995-1.9035 4.428-3.06 6.39-1.2375 2.0835-2.682 3.7755-4.3515 5.049-1.8225 1.395-3.942 2.1015-6.282 2.1015-3.978 0-7.2-1.3005-9.4995-3.915-2.376-2.6955-2.5155-6.9615-0.7875-12.816l0.3465-1.1205 53.298-155.0385c1.0215-2.6145 2.628-4.77 4.797-6.417 2.52-1.917 5.7285-2.853 9.5535-2.853z m266.904 0c4.1085 0 7.2315 1.0395 9.234 3.267 1.728 1.9215 2.6505 4.518 2.817 7.722l0.027 1.089v56.9115l63.585-57.6225 2.97-2.5065 2.925-2.511c2.061-1.791 4.14-3.24 6.2325-4.329 2.268-1.1835 4.5-1.746 6.6915-1.638 2.34 0.108 4.617 1.2195 6.93 3.33 4.86 5.0625 3.9195 11.0025-2.205 16.956l-0.7065 0.6615-72.9945 63.9 76.662 73.4625 0.864 0.8955c2.9565 3.1815 4.7025 6.309 5.1615 9.4095 0.5085 3.474-0.288 6.5565-2.349 9.027-4.4415 5.652-10.62 5.454-17.685-0.1575l-0.7875-0.6435-75.294-74.817v68.49l-0.027 0.99c-0.1575 2.8755-0.9855 5.256-2.52 7.0785-1.8585 2.2095-5.067 3.195-9.531 3.195-4.275 0-7.4745-1.035-9.486-3.267-1.692-1.8765-2.6235-4.239-2.808-7.002l-0.036-1.053v-158.823l0.0315-1.053c0.18-3.0285 1.0935-5.5665 2.7765-7.5285 2.007-2.34 5.229-3.4335 9.522-3.4335z m-106.47 2.772l2.034 0.018c18.477 0.297 32.3595 4.7025 41.571 13.3155 9.585 8.964 14.319 22.95 14.319 41.8365 0 36.666-19.017 55.62-56.2635 56.1645l-1.6785 0.0135h-32.0265v55.7685l-0.027 1.1025c-0.1755 3.159-1.0845 5.76-2.7765 7.74-2.0025 2.331-5.1435 3.429-9.27 3.429-4.329 0-7.587-1.2105-9.585-3.762-1.629-2.0835-2.529-4.59-2.7135-7.47l-0.0315-1.098v-152.7435l0.018-1.1295c0.1395-4.815 1.1835-8.235 3.3705-10.2105 2.151-1.9485 6.0795-2.853 11.9385-2.961l1.287-0.0135h39.834z m-160.1865 32.3145L327.05 740.258h51.2235l-25.614-77.0535z m160.1685-10.1745h-32.0265v67.572h32.0265c12.375 0 21.0285-2.754 26.082-8.1135 5.094-5.4 7.704-14.0985 7.704-26.1765 0-12.015-2.898-20.475-8.5725-25.5375-5.472-4.8825-13.302-7.479-23.571-7.7265l-1.6425-0.018zM637.496 71.8685l260.955 281.6685H721.745c-69.039 0-84.249-57.9285-84.249-80.046V71.8685z\" fill=\"#FFFFFF\" ></path></symbol><symbol id=\"icon-video\" viewBox=\"0 0 1024 1024\"><path d=\"M190.8125 62C154.25 62 120.5 92.9375 120.5 132.3125V888.875C120.5 928.25 151.4375 962 190.8125 962H834.875c39.375 0 70.3125-30.9375 70.3125-70.3125V346.0625L640.8125 62h-450z\" fill=\"#8E4C9E\" ></path><path d=\"M908 348.875v14.0625h-180s-87.1875-16.875-87.1875-95.625c0 0 2.8125 81.5625 84.375 81.5625H908z\" fill=\"#713985\" ></path><path d=\"M640.8125 62v205.3125c0 22.5 14.0625 81.5625 84.375 81.5625H908L640.8125 62zM463.625 703.25c0 5.625-2.8125 11.25-5.625 14.0625s-75.9375 61.875-165.9375 98.4375h-5.625c-2.8125 0-5.625 0-8.4375-2.8125-5.625-2.8125-8.4375-5.625-8.4375-14.0625 0 0-5.625-47.8125-5.625-98.4375s5.625-95.625 5.625-98.4375c2.8125-5.625 2.8125-11.25 8.4375-14.0625 2.8125 0 5.625-2.8125 8.4375-2.8125s5.625 0 5.625 2.8125C384.875 624.5 458 686.375 458 686.375c2.8125 5.625 5.625 11.25 5.625 16.875z\" fill=\"#FFFFFF\" ></path></symbol><symbol id=\"icon-eps\" viewBox=\"0 0 1024 1024\"><path d=\"M193.625 62C154.25 62 120.5 92.9375 120.5 132.3125V888.875c0 42.1875 33.75 73.125 73.125 73.125h644.0625c39.375 0 70.3125-30.9375 70.3125-70.3125V346.0625L640.8125 62H193.625z\" fill=\"#9D4513\" ></path><path d=\"M908 348.875v14.0625h-180s-87.1875-16.875-84.375-92.8125c0 0 2.8125 78.75 84.375 78.75h180z\" fill=\"#6B2F0D\" ></path><path d=\"M662.984 631.106c6.597 0 13.023 0.9135 19.278 2.736 6.228 1.818 11.574 4.077 16.038 6.7905 4.59 2.79 7.9335 5.994 9.99 9.6345 2.2365 3.969 2.2365 8.0505-0.0315 11.97-1.935 3.222-4.968 4.8465-8.7975 4.743a16.56 16.56 0 0 1-8.5815-2.646l-0.963-0.657c-3.2535-2.277-7.3485-4.6125-12.285-7.002a30.987 30.987 0 0 0-13.131-3.186l-1.5165 0.009c-8.019 0-14.31 2.2365-18.99 6.687-4.6665 4.4415-6.984 10.062-6.984 17.019 0 4.284 0.9765 7.893 2.9115 10.872a30.564 30.564 0 0 0 7.992 8.2125c3.411 2.439 7.371 4.725 11.8755 6.8535 4.6035 2.178 9.3375 4.356 14.193 6.534a164.025 164.025 0 0 1 17.3745 8.9415c5.22 3.1365 9.675 6.714 13.356 10.746a42.2865 42.2865 0 0 1 8.514 14.0985c1.9485 5.301 2.9115 11.4435 2.9115 18.414 0 7.6905-1.404 14.8365-4.212 21.42a50.841 50.841 0 0 1-11.862 17.1315c-5.0895 4.8285-11.1825 8.595-18.2565 11.304-6.4125 2.4525-13.3515 3.861-20.826 4.23l-2.2545 0.0765-2.196 0.0225-2.1465-0.045a69.192 69.192 0 0 1-15.0255-2.1915c-6.2685-1.6335-11.907-3.654-16.965-6.0975-7.5915-3.8835-12.6225-8.019-15.066-12.5235-2.5695-4.7475-2.5695-9.198 0.2115-13.0455 2.2815-2.907 5.121-4.3515 8.3475-4.131 2.8575 0.198 5.85 1.341 9.0315 3.3975a90.9135 90.9135 0 0 0 16.11 8.4825c5.688 2.322 11.907 3.4875 18.6795 3.4875 4.077 0 8.028-0.783 11.88-2.3535a35.3565 35.3565 0 0 0 10.305-6.399 30.339 30.339 0 0 0 7.1595-9.63 27.6795 27.6795 0 0 0 2.6775-12.1275c0-4.3695-0.8505-8.2755-2.5425-11.736a33.777 33.777 0 0 0-6.858-9.459 45.756 45.756 0 0 0-9.729-7.2 102.636 102.636 0 0 0-10.935-5.292 263.6595 263.6595 0 0 1-19.3185-8.388c-6.0525-2.9385-11.295-6.3225-15.7365-10.1475a40.734 40.734 0 0 1-10.53-13.995c-2.493-5.445-3.7305-12.015-3.7305-19.7145 0-7.056 1.4175-13.4865 4.2615-19.26a44.9055 44.9055 0 0 1 11.2725-14.5845 48.177 48.177 0 0 1 16.119-8.9865c6.03-2.0115 12.357-3.015 18.981-3.015z m-155.502 4.284l2.034 0.018c18.477 0.297 32.3595 4.7025 41.571 13.3155 9.585 8.964 14.319 22.95 14.319 41.8365 0 36.666-19.017 55.62-56.2635 56.1645l-1.6785 0.0135h-32.022v55.7685l-0.0315 1.1025c-0.1755 3.159-1.0845 5.76-2.7765 7.74-2.0025 2.331-5.1435 3.429-9.27 3.429-4.329 0-7.587-1.2105-9.585-3.762-1.629-2.0835-2.529-4.59-2.7135-7.47l-0.0315-1.098v-152.7435l0.018-1.1295c0.1395-4.815 1.1835-8.235 3.3705-10.2105 2.151-1.9485 6.0795-2.853 11.9385-2.961l1.287-0.0135h39.834z m-126.261 0l1.1925 0.027c3.3615 0.1395 6.039 0.873 8.01 2.2815 2.403 1.719 3.636 4.6665 3.8385 8.7615 0 3.8745-1.215 6.8085-3.753 8.5365-2.0475 1.395-4.7745 2.1285-8.1765 2.259l-1.1565 0.0225-69.318-0.0045v52.704l66.8385 0.0045 1.17 0.0225c3.717 0.135 6.561 0.927 8.5095 2.4885 2.295 1.8315 3.366 4.8285 3.366 8.811 0 3.8565-1.107 6.732-3.4785 8.397-1.944 1.359-4.752 2.0385-8.4645 2.151l-1.143 0.018H311.858v58.5h62.5275l2.655 0.0135 1.737 0.027 3.357 0.09a30.465 30.465 0 0 1 6.9435 0.9585c2.232 0.6075 4.0725 1.6605 5.463 3.159 1.5165 1.629 2.241 3.8565 2.241 6.57 0 4.221-1.206 7.2945-3.816 8.955-2.07 1.3185-5.0805 1.989-9.054 2.097l-1.224 0.018H301.2515l-1.179-0.0225c-3.717-0.144-6.66-0.972-8.811-2.5605-2.439-1.8-3.636-4.995-3.7935-9.45l-0.018-1.053v-150.7365l0.018-1.026c0.1485-4.041 1.1655-7.0695 3.204-9.009 2.016-1.917 5.193-2.862 9.5175-2.9925l1.1025-0.018h79.929z m126.243 22.14h-32.022v67.572h32.022c12.375 0 21.0285-2.754 26.082-8.1135 5.094-5.4 7.704-14.0985 7.704-26.1765 0-12.015-2.898-20.475-8.5725-25.5375-5.472-4.8825-13.302-7.479-23.571-7.7265l-1.6425-0.018zM640.8125 62L908 348.875h-182.8125c-70.3125 0-84.375-56.25-84.375-81.5625V62z\" fill=\"#FFFFFF\" ></path></symbol><symbol id=\"icon-ppt\" viewBox=\"0 0 1024 1024\"><path d=\"M193.625 62C154.25 62 120.5 92.9375 120.5 132.3125V888.875c0 42.1875 33.75 73.125 73.125 73.125h644.0625c39.375 0 70.3125-30.9375 70.3125-70.3125V346.0625L640.8125 62H193.625z\" fill=\"#E34221\" ></path><path d=\"M908 348.875v14.0625h-180s-87.1875-16.875-87.1875-95.625c0 0 2.8125 81.5625 84.375 81.5625H908z\" fill=\"#DC3119\" ></path><path d=\"M356.534 635.39l2.034 0.018c18.477 0.297 32.3595 4.7025 41.571 13.3155 9.585 8.964 14.319 22.95 14.319 41.8365 0 36.666-19.017 55.62-56.2635 56.1645l-1.6785 0.0135h-32.022v55.7685l-0.0315 1.1025c-0.1755 3.159-1.0845 5.76-2.7765 7.74-2.0025 2.331-5.1435 3.429-9.27 3.429-4.329 0-7.587-1.2105-9.585-3.762-1.629-2.0835-2.529-4.59-2.7135-7.47l-0.0315-1.098v-152.7435l0.018-1.1295c0.1395-4.815 1.1835-8.235 3.3705-10.2105 2.151-1.9485 6.0795-2.853 11.9385-2.961l1.287-0.0135h39.834z m150.588 0l2.034 0.018c18.477 0.297 32.3595 4.7025 41.571 13.3155 9.585 8.964 14.319 22.95 14.319 41.8365 0 36.666-19.017 55.62-56.2635 56.1645l-1.6785 0.0135h-32.0265v55.7685l-0.027 1.1025c-0.1755 3.159-1.0845 5.76-2.7765 7.74-2.0025 2.331-5.1435 3.429-9.27 3.429-4.329 0-7.587-1.2105-9.585-3.762-1.629-2.0835-2.529-4.59-2.7135-7.47l-0.0315-1.098v-152.7435l0.018-1.1295c0.1395-4.815 1.1835-8.235 3.3705-10.2105 2.151-1.9485 6.0795-2.853 11.9385-2.961l1.287-0.0135h39.834z m202.05 0l1.008 0.036c2.9115 0.1845 5.4225 1.1565 7.4475 2.907 2.376 2.052 3.5505 4.9905 3.5505 8.631 0 4.0905-1.3905 7.1505-4.2435 8.8605a15.0885 15.0885 0 0 1-6.804 2.1735l-1.0305 0.036h-38.322v144.4635l-0.027 1.143c-0.153 3.258-0.954 5.8635-2.484 7.7715-1.854 2.322-5.085 3.366-9.567 3.366-4.5 0-7.749-1.1025-9.603-3.5325-1.485-1.9575-2.286-4.5-2.4435-7.605l-0.0315-1.1925v-144.414h-38.3805l-1.044-0.027c-2.988-0.1575-5.49-0.9585-7.443-2.448-2.403-1.8315-3.5325-4.8465-3.5325-8.847 0-3.8385 1.188-6.813 3.645-8.712 2.016-1.5525 4.482-2.4075 7.3395-2.5785l1.0935-0.0315h100.872z m-352.656 22.14h-32.022v67.572h32.022c12.375 0 21.0285-2.754 26.082-8.1135 5.094-5.4 7.704-14.0985 7.704-26.1765 0-12.015-2.898-20.475-8.5725-25.5375-5.472-4.8825-13.302-7.479-23.571-7.7265l-1.6425-0.018z m150.588 0h-32.0265v67.572h32.0265c12.375 0 21.0285-2.754 26.082-8.1135 5.094-5.4 7.704-14.0985 7.704-26.1765 0-12.015-2.898-20.475-8.5725-25.5375-5.472-4.8825-13.302-7.479-23.571-7.7265l-1.6425-0.018zM640.8125 62L908 348.875h-182.8125c-70.3125 0-84.375-59.0625-84.375-81.5625V62z\" fill=\"#FFFFFF\" ></path></symbol><symbol id=\"icon-xml\" viewBox=\"0 0 1024 1024\"><path d=\"M193.625 62C154.25 62 120.5 92.9375 120.5 132.3125v759.375C120.5 931.0625 154.25 962 193.625 962h644.0625c39.375 0 70.3125-30.9375 70.3125-70.3125V346.0625L640.8125 62H193.625z\" fill=\"#FC7B24\" ></path><path d=\"M908 348.875v14.0625h-180s-87.1875-16.875-87.1875-95.625c0 0 2.8125 81.5625 84.375 81.5625H908z\" fill=\"#FB5C1B\" ></path><path d=\"M280.2905 632.24c2.637 0.1125 5.1345 1.845 7.668 5.04l0.63 0.8325 42.003 59.8635 40.185-57.5055 0.567-0.8955c2.4795-3.78 5.184-6.057 8.2035-6.66 3.132-0.63 6.255 0.099 9.2655 2.106 5.562 3.78 6.39 9.306 2.5875 15.705l-0.495 0.81-46.4715 66.2355 55.2285 78.678 0.5715 1.215c0.9405 2.1195 1.53 4.1715 1.7685 6.1515 0.369 3.0735-1.377 5.8365-4.878 8.307-6.498 4.3965-12.42 3.447-16.7265-2.619l-0.486-0.7245-49.572-70.704-49.599 70.758-0.648 0.8685c-2.1735 2.7585-4.662 4.437-7.452 4.9185-2.817 0.486-5.5755-0.216-8.1-1.9575l-0.747-0.5535c-2.781-1.926-4.266-4.779-4.365-8.334-0.09-3.069 0.765-5.859 2.4525-8.1675l0.594-0.7515 53.784-76.833-46.4355-66.438-0.531-0.7155c-1.4715-2.16-2.106-4.7565-1.926-7.695a10.044 10.044 0 0 1 4.779-8.163c2.88-1.9215 5.5935-2.88 8.145-2.772z m298.9215 0.378c4.581 0 8.523 1.4625 11.718 4.365 2.943 2.6775 4.896 6.57 5.895 11.628l0.234 1.287 22.689 147.996 0.1665 1.3545c0.3285 3.276 0.135 6.3405-0.5985 9.18-1.0485 4.0725-4.6935 6.147-10.368 6.3495-3.6765 0-6.525-1.152-8.343-3.5325-1.467-1.926-2.52-4.8285-3.249-8.775l-0.2115-1.215-14.6115-100.5165-1.89-11.835a121.1535 121.1535 0 0 0-2.4705-11.997 30.9375 30.9375 0 0 0-0.99-3.114l-0.2475-0.5985-0.1845-0.405-0.306 0.855-0.144 0.441-37.7595 129.9735-0.3015 1.0665c-0.873 2.952-1.962 5.1975-3.33 6.75-1.737 1.9665-4.3245 2.9025-7.6095 2.9025-3.42 0-6.021-0.81-7.695-2.6055-1.3275-1.422-2.448-3.735-3.456-6.966l-0.333-1.116a8550.405 8550.405 0 0 0-19.269-64.494 3027.519 3027.519 0 0 1-18.783-64.5345 23.8275 23.8275 0 0 0-1.1295-3.177l-0.234-0.468-0.09 0.252a16.3395 16.3395 0 0 0-0.4455 1.6785l-0.135 0.675-0.135 0.738-18.837 127.296c-0.585 3.555-1.5975 6.4215-3.0735 8.586-1.9035 2.808-5.256 4.1355-9.7965 4.1355-7.722 0-11.025-5.2335-9.693-14.2155l0.162-0.9765 23.13-151.2135c0.837-4.869 2.61-8.667 5.373-11.34 3.042-2.9475 7.011-4.4145 11.772-4.4145 4.68 0 8.6625 1.2465 11.8485 3.7575 2.9475 2.322 5.256 6.12 7.02 11.3985l0.432 1.35 33.5925 118.521 32.895-118.8 0.3735-1.2465c1.611-5.13 3.861-8.8875 6.822-11.223 3.1815-2.5065 7.0785-3.7575 11.5965-3.7575z m86.58 0c7.6185 0 11.988 3.7665 12.312 10.7235l0.018 0.8505v145.674h54.009l0.999 0.0315c2.88 0.1665 5.328 1.0305 7.2855 2.61 2.349 1.9035 3.4785 4.86 3.4785 8.6805 0 3.6765-1.2015 6.57-3.645 8.46-2.007 1.548-4.41 2.4075-7.1415 2.5785l-1.0395 0.0315h-63.054l-1.179-0.0315c-4.1715-0.2025-7.5465-1.485-10.0305-3.87-2.502-2.412-3.852-5.58-4.0635-9.3915l-0.027-1.053V644.12l0.0315-0.9585c0.2025-3.168 1.377-5.751 3.519-7.605 2.277-1.962 5.1525-2.9385 8.5275-2.9385zM640.8125 62L908 348.875h-182.8125c-70.3125 0-84.375-59.0625-84.375-81.5625V62z\" fill=\"#FFFFFF\" ></path></symbol><symbol id=\"icon-pdf\" viewBox=\"0 0 1024 1024\"><path d=\"M193.625 62C154.25 62 120.5 92.9375 120.5 132.3125V888.875c0 42.1875 33.75 73.125 73.125 73.125h644.0625c39.375 0 70.3125-30.9375 70.3125-70.3125V346.0625L640.8125 62H193.625z\" fill=\"#DD5154\" ></path><path d=\"M908 348.875v14.0625h-180s-87.1875-16.875-84.375-92.8125c0 0 2.8125 78.75 84.375 78.75h180z\" fill=\"#6B0D12\" ></path><path d=\"M351.962 635.39l2.034 0.018c18.477 0.297 32.3595 4.7025 41.571 13.3155 9.585 8.964 14.319 22.95 14.319 41.8365 0 36.666-19.017 55.62-56.2635 56.1645l-1.6785 0.0135h-32.0265v55.7685l-0.027 1.1025c-0.1755 3.159-1.0845 5.76-2.7765 7.74-2.0025 2.331-5.1435 3.429-9.27 3.429-4.329 0-7.587-1.2105-9.585-3.762-1.629-2.0835-2.529-4.59-2.7135-7.47l-0.0315-1.098v-152.7435l0.018-1.1295c0.1395-4.815 1.1835-8.235 3.3705-10.2105 2.151-1.9485 6.0795-2.853 11.9385-2.961l1.287-0.0135h39.834z m357.903 0l0.945 0.018c7.614 0.297 11.844 4.2525 11.844 11.304 0 4.0185-1.143 7.0155-3.5865 8.7615-1.989 1.422-4.752 2.1555-8.2935 2.286l-1.206 0.0225H641.51v52.1955l61.299 0.0045 1.0305 0.0225c5.652 0.2295 9.396 2.421 10.548 6.336 1.125 2.466 1.0125 5.22-0.1125 7.758-1.206 5.0175-4.923 7.74-10.5975 8.001l-0.9135 0.0225H641.51v71.4015l-0.0315 0.999c-0.18 2.916-1.125 5.3325-2.853 7.155-2.016 2.133-5.274 3.1005-9.6975 3.1005-4.293 0-7.425-0.99-9.279-3.195-1.53-1.8135-2.3535-4.176-2.52-7.0335l-0.027-1.0935v-155.0205l0.018-1.062c0.1485-4.194 1.17-7.2675 3.249-9.135 2.0115-1.818 5.1705-2.7045 9.477-2.835l1.098-0.0135h78.921z m-204.786 0l2.3355 0.027c11.7675 0.27 22.0275 2.556 30.7665 6.885 9.297 4.6035 17.001 10.917 23.094 18.9225 6.0615 7.965 10.5525 17.343 13.482 28.116 2.9115 10.6965 4.365 22.1085 4.365 34.2315 0 12.2895-1.4535 23.787-4.365 34.4835-2.925 10.764-7.371 20.1735-13.338 28.215a63.531 63.531 0 0 1-22.7205 19.0665c-8.613 4.3515-18.6885 6.642-30.2085 6.8985l-2.178 0.0225H458.9135l-1.0035-0.009c-5.139-0.1035-8.3835-0.9585-9.882-3.087-1.2195-1.7235-1.8135-4.329-1.9125-7.8885l-0.0135-1.0935v-152.7435l0.018-1.107c0.099-3.528 0.6885-6.12 1.908-7.8435 1.485-2.106 4.6845-2.979 9.7875-3.0825l1.1205-0.0135h46.143z m-5.067 21.384h-29.7585v134.1h36.0585c15.255 0 27.0135-5.715 35.4825-17.226 8.586-11.664 12.9195-28.593 12.9195-50.832 0-21.546-4.4505-37.953-13.2615-49.2705-8.4105-10.8-21.5505-16.4025-39.618-16.7535l-1.8225-0.018z m-148.068 0.756h-32.0265v67.572h32.0265c12.375 0 21.0285-2.754 26.082-8.1135 5.094-5.4 7.704-14.0985 7.704-26.1765 0-12.015-2.898-20.475-8.5725-25.5375-5.472-4.8825-13.302-7.479-23.571-7.7265l-1.6425-0.018zM640.8125 62L908 348.875h-182.8125c-70.3125 0-84.375-56.25-84.375-81.5625V62z\" fill=\"#FFFFFF\" ></path></symbol><symbol id=\"icon-exe\" viewBox=\"0 0 1024 1024\"><path d=\"M193.625 62C154.25 62 120.5 92.9375 120.5 132.3125V888.875c0 42.1875 33.75 73.125 73.125 73.125h644.0625c39.375 0 70.3125-30.9375 70.3125-70.3125V346.0625L640.8125 62H193.625z\" fill=\"#8199AF\" ></path><path d=\"M908 348.875v14.0625h-180s-87.1875-16.875-87.1875-92.8125c0 0 2.8125 78.75 84.375 78.75H908z\" fill=\"#617F9B\" ></path><path d=\"M453.95 632.24c2.6415 0.1125 5.139 1.845 7.6725 5.04l0.63 0.8325 42.003 59.8635 40.185-57.5055 0.567-0.8955c2.4795-3.78 5.184-6.057 8.2035-6.66 3.132-0.63 6.255 0.099 9.2655 2.106 5.562 3.78 6.39 9.306 2.5875 15.705l-0.495 0.81-46.4715 66.2355 55.2285 78.678 0.5715 1.215c0.9405 2.1195 1.53 4.1715 1.7685 6.1515 0.369 3.0735-1.377 5.8365-4.878 8.307-6.498 4.3965-12.42 3.447-16.7265-2.619l-0.486-0.7245-49.572-70.704-49.599 70.758-0.648 0.8685c-2.1735 2.7585-4.662 4.437-7.452 4.9185-2.817 0.486-5.5755-0.216-8.1-1.9575l-0.747-0.5535c-2.781-1.926-4.266-4.779-4.365-8.334-0.09-3.069 0.765-5.859 2.4525-8.1675l0.594-0.7515 53.784-76.833-46.4355-66.438-0.531-0.7155c-1.4715-2.16-2.106-4.7565-1.926-7.695a10.044 10.044 0 0 1 4.779-8.163c2.88-1.9215 5.5935-2.88 8.145-2.772z m-67.725 3.15l1.1925 0.027c3.3615 0.1395 6.039 0.873 8.01 2.2815 2.403 1.719 3.636 4.6665 3.8385 8.7615 0 3.8745-1.215 6.8085-3.753 8.5365-2.0475 1.395-4.7745 2.1285-8.1765 2.259l-1.1565 0.0225H316.8575v52.6995l66.843 0.0045 1.17 0.0225c3.717 0.135 6.561 0.927 8.5095 2.4885 2.295 1.8315 3.366 4.8285 3.366 8.811 0 3.8565-1.107 6.732-3.4785 8.397-1.944 1.359-4.752 2.0385-8.4645 2.151l-1.143 0.018H316.8575v58.5h62.532l2.655 0.0135 1.737 0.027 3.357 0.09a30.465 30.465 0 0 1 6.9435 0.9585c2.232 0.6075 4.0725 1.6605 5.463 3.159 1.5165 1.629 2.241 3.8565 2.241 6.57 0 4.221-1.206 7.2945-3.816 8.955-2.07 1.3185-5.0805 1.989-9.054 2.097l-1.224 0.018H306.2555l-1.179-0.0225c-3.717-0.144-6.66-0.972-8.811-2.5605-2.439-1.8-3.636-4.995-3.7935-9.45l-0.018-1.053v-150.7365l0.018-1.026c0.1485-4.041 1.1655-7.0695 3.204-9.009 2.016-1.917 5.193-2.862 9.5175-2.9925l1.1025-0.018H386.225z m319.572 0l1.1925 0.027c3.3615 0.1395 6.039 0.873 8.01 2.2815 2.403 1.719 3.636 4.6665 3.8385 8.7615 0 3.8745-1.215 6.8085-3.753 8.5365-2.0475 1.395-4.7745 2.1285-8.1765 2.259l-1.1565 0.0225h-69.318v52.6995l66.8385 0.0045 1.17 0.0225c3.717 0.135 6.561 0.927 8.5095 2.4885 2.295 1.8315 3.366 4.8285 3.366 8.811 0 3.8565-1.107 6.732-3.4785 8.397-1.944 1.359-4.752 2.0385-8.4645 2.151l-1.143 0.018h-66.798v58.5h62.5275l2.655 0.0135 1.737 0.027 3.357 0.09a30.465 30.465 0 0 1 6.9435 0.9585c2.232 0.6075 4.0725 1.6605 5.463 3.159 1.5165 1.629 2.241 3.8565 2.241 6.57 0 4.221-1.206 7.2945-3.816 8.955-2.07 1.3185-5.0805 1.989-9.054 2.097l-1.224 0.018h-81.4365l-1.179-0.0225c-3.717-0.144-6.66-0.972-8.811-2.5605-2.439-1.8-3.636-4.995-3.7935-9.45l-0.018-1.053v-150.7365l0.018-1.026c0.1485-4.041 1.1655-7.0695 3.204-9.009 2.016-1.917 5.193-2.862 9.5175-2.9925l1.1025-0.018h79.929zM640.8125 62L908 348.875h-182.8125c-70.3125 0-84.375-59.0625-84.375-81.5625V62z\" fill=\"#FFFFFF\" ></path></symbol><symbol id=\"icon-psd\" viewBox=\"0 0 1024 1024\"><path d=\"M193.625 64.8125c-39.375 0-73.125 28.125-73.125 67.5v759.375C120.5 931.0625 154.25 962 193.625 962h644.0625c39.375 0 70.3125-30.9375 70.3125-70.3125V348.875L640.8125 64.8125H193.625z\" fill=\"#0C77C6\" ></path><path d=\"M908 348.875v14.0625h-180s-87.1875-16.875-87.1875-95.625c0 0 2.8125 81.5625 84.375 81.5625H908z\" fill=\"#0959B7\" ></path><path d=\"M500.984 606.5c6.597 0 13.023 0.9135 19.278 2.736 6.228 1.818 11.574 4.077 16.038 6.7905 4.59 2.79 7.9335 5.994 9.99 9.6345 2.2365 3.969 2.2365 8.0505-0.0315 11.97-1.935 3.222-4.968 4.8465-8.7975 4.743a16.56 16.56 0 0 1-8.5815-2.646l-0.963-0.657c-3.2535-2.277-7.3485-4.6125-12.285-7.002a30.987 30.987 0 0 0-13.131-3.186l-1.5165 0.009c-8.019 0-14.31 2.2365-18.99 6.687-4.6665 4.4415-6.984 10.062-6.984 17.019 0 4.284 0.9765 7.893 2.9115 10.872a30.564 30.564 0 0 0 7.992 8.2125c3.411 2.439 7.371 4.725 11.8755 6.8535 4.6035 2.178 9.3375 4.356 14.193 6.534a164.025 164.025 0 0 1 17.3745 8.9415c5.22 3.1365 9.675 6.714 13.356 10.746a42.2865 42.2865 0 0 1 8.514 14.0985c1.9485 5.301 2.9115 11.4435 2.9115 18.414 0 7.6905-1.404 14.8365-4.212 21.42a50.841 50.841 0 0 1-11.862 17.1315c-5.0895 4.8285-11.1825 8.595-18.2565 11.304-6.4125 2.4525-13.3515 3.861-20.826 4.23l-2.2545 0.0765-2.196 0.0225-2.1465-0.045a69.192 69.192 0 0 1-15.0255-2.1915c-6.2685-1.6335-11.907-3.654-16.965-6.0975-7.5915-3.8835-12.6225-8.019-15.066-12.5235-2.5695-4.7475-2.5695-9.198 0.2115-13.0455 2.2815-2.907 5.121-4.3515 8.3475-4.131 2.8575 0.198 5.85 1.341 9.0315 3.3975a90.9135 90.9135 0 0 0 16.11 8.4825c5.688 2.322 11.907 3.4875 18.6795 3.4875 4.077 0 8.028-0.783 11.88-2.3535a35.3565 35.3565 0 0 0 10.305-6.399 30.339 30.339 0 0 0 7.1595-9.63 27.6795 27.6795 0 0 0 2.6775-12.1275c0-4.3695-0.8505-8.2755-2.5425-11.736a33.777 33.777 0 0 0-6.858-9.459 45.756 45.756 0 0 0-9.729-7.2 102.636 102.636 0 0 0-10.935-5.292 263.6595 263.6595 0 0 1-19.3185-8.388c-6.0525-2.9385-11.295-6.3225-15.7365-10.1475a40.734 40.734 0 0 1-10.53-13.995c-2.493-5.445-3.7305-12.015-3.7305-19.7145 0-7.056 1.4175-13.4865 4.2615-19.26a44.9055 44.9055 0 0 1 11.2725-14.5845 48.177 48.177 0 0 1 16.119-8.9865c6.03-2.0115 12.357-3.015 18.981-3.015z m-142.002 4.284l2.034 0.018c18.477 0.297 32.3595 4.7025 41.571 13.3155 9.585 8.964 14.319 22.95 14.319 41.8365 0 36.666-19.017 55.62-56.2635 56.1645l-1.6785 0.0135h-32.022v55.7685l-0.0315 1.1025c-0.1755 3.159-1.0845 5.76-2.7765 7.74-2.0025 2.331-5.1435 3.429-9.27 3.429-4.329 0-7.587-1.2105-9.585-3.762-1.629-2.0835-2.529-4.59-2.7135-7.47l-0.0315-1.098v-152.7435l0.018-1.1295c0.1395-4.815 1.1835-8.235 3.3705-10.2105 2.151-1.9485 6.0795-2.853 11.9385-2.961l1.287-0.0135h39.834z m291.105 0l2.3355 0.027c11.7675 0.27 22.0275 2.556 30.7665 6.885 9.297 4.6035 17.001 10.917 23.094 18.9225 6.0615 7.965 10.5525 17.343 13.482 28.116 2.9115 10.6965 4.365 22.1085 4.365 34.2315 0 12.2895-1.4535 23.787-4.365 34.4835-2.925 10.764-7.371 20.1735-13.338 28.215a63.531 63.531 0 0 1-22.7205 19.0665c-8.613 4.3515-18.6885 6.642-30.2085 6.8985l-2.178 0.0225h-47.3985l-1.0035-0.009c-5.139-0.1035-8.3835-0.9585-9.882-3.087-1.2195-1.7235-1.8135-4.329-1.9125-7.8885l-0.0135-1.0935v-152.7435l0.018-1.107c0.099-3.528 0.6885-6.12 1.908-7.8435 1.485-2.106 4.6845-2.979 9.7875-3.0825l1.1205-0.0135h46.143z m-5.067 21.384h-29.754v134.1h36.054c15.255 0 27.0135-5.715 35.4825-17.226 8.586-11.664 12.9195-28.593 12.9195-50.832 0-21.546-4.4505-37.953-13.2615-49.2705-8.4105-10.8-21.5505-16.4025-39.618-16.7535l-1.8225-0.018z m-286.056 0.756h-32.022v67.572h32.022c12.375 0 21.0285-2.754 26.082-8.1135 5.094-5.4 7.704-14.0985 7.704-26.1765 0-12.015-2.898-20.475-8.5725-25.5375-5.472-4.8825-13.302-7.479-23.571-7.7265l-1.6425-0.018zM640.8125 62L908 348.875h-182.8125c-70.3125 0-84.375-59.0625-84.375-81.5625V62z\" fill=\"#FFFFFF\" ></path></symbol><symbol id=\"icon-visio\" viewBox=\"0 0 1024 1024\"><path d=\"M193.625 62C154.25 62 120.5 92.9375 120.5 132.3125V888.875c0 42.1875 33.75 73.125 73.125 73.125h644.0625c39.375 0 70.3125-30.9375 70.3125-70.3125V346.0625L640.8125 62H193.625z\" fill=\"#496AB3\" ></path><path d=\"M908 348.875v14.0625h-180s-87.1875-16.875-87.1875-95.625c0 0 2.8125 81.5625 84.375 81.5625H908z\" fill=\"#374FA0\" ></path><path d=\"M631.484 631.106c6.597 0 13.023 0.9135 19.278 2.736 6.228 1.818 11.574 4.077 16.038 6.7905 4.59 2.79 7.9335 5.994 9.99 9.6345 2.2365 3.969 2.2365 8.0505-0.0315 11.97-1.935 3.222-4.968 4.8465-8.7975 4.743a16.56 16.56 0 0 1-8.5815-2.646l-0.963-0.657c-3.2535-2.277-7.3485-4.6125-12.285-7.002a30.987 30.987 0 0 0-13.131-3.186l-1.5165 0.009c-8.019 0-14.31 2.2365-18.99 6.687-4.6665 4.4415-6.984 10.062-6.984 17.019 0 4.284 0.9765 7.893 2.9115 10.872a30.564 30.564 0 0 0 7.992 8.2125c3.411 2.439 7.371 4.725 11.8755 6.8535 4.6035 2.178 9.3375 4.356 14.193 6.534a164.025 164.025 0 0 1 17.3745 8.9415c5.22 3.1365 9.675 6.714 13.356 10.746a42.2865 42.2865 0 0 1 8.514 14.0985c1.9485 5.301 2.9115 11.4435 2.9115 18.414 0 7.6905-1.404 14.8365-4.212 21.42a50.841 50.841 0 0 1-11.862 17.1315c-5.0895 4.8285-11.1825 8.595-18.2565 11.304-6.4125 2.4525-13.3515 3.861-20.826 4.23l-2.2545 0.0765-2.196 0.0225-2.1465-0.045a69.192 69.192 0 0 1-15.0255-2.1915c-6.2685-1.6335-11.907-3.654-16.965-6.0975-7.5915-3.8835-12.6225-8.019-15.066-12.5235-2.5695-4.7475-2.5695-9.198 0.2115-13.0455 2.2815-2.907 5.121-4.3515 8.3475-4.131 2.8575 0.198 5.85 1.341 9.0315 3.3975a90.9135 90.9135 0 0 0 16.11 8.4825c5.688 2.322 11.907 3.4875 18.6795 3.4875 4.077 0 8.028-0.783 11.88-2.3535a35.3565 35.3565 0 0 0 10.305-6.399 30.339 30.339 0 0 0 7.1595-9.63 27.6795 27.6795 0 0 0 2.6775-12.1275c0-4.3695-0.8505-8.2755-2.5425-11.736a33.777 33.777 0 0 0-6.858-9.459 45.756 45.756 0 0 0-9.729-7.2 102.636 102.636 0 0 0-10.935-5.292 263.6595 263.6595 0 0 1-19.3185-8.388c-6.0525-2.9385-11.295-6.3225-15.7365-10.1475a40.734 40.734 0 0 1-10.53-13.995c-2.493-5.445-3.7305-12.015-3.7305-19.7145 0-7.056 1.4175-13.4865 4.2615-19.26a44.9055 44.9055 0 0 1 11.2725-14.5845 48.177 48.177 0 0 1 16.119-8.9865c6.03-2.0115 12.357-3.015 18.981-3.015z m-294.084 9.99l45.018 130.95 44.28-130.662 0.3555-0.936c1.3635-3.375 3.348-5.6565 5.985-6.6735a15.5295 15.5295 0 0 1 7.857-0.891c3.645 0.405 6.435 1.908 8.1765 4.518 1.7235 2.5785 1.656 6.138 0.1035 10.593l-0.3555 0.972-53.7345 154.125-0.4725 1.0845c-3.105 6.9075-7.2405 10.602-12.429 10.602-2.8665 0-5.355-0.846-7.371-2.547-1.7775-1.494-3.501-4.23-5.337-8.379l-0.504-1.17-53.415-153.1935-0.3915-1.0755c-1.17-3.465-1.422-6.3585-0.6345-8.712 0.8415-2.52 2.844-4.392 5.8365-5.625l1.5975-0.6075c7.254-2.5515 12.69 0.171 15.435 7.632z m170.316-8.478c3.8475 0 6.876 0.855 9.018 2.6775 2.0655 1.755 3.1275 4.437 3.2895 7.9245l0.0225 0.972v158.814l-0.0225 0.8685c-0.3375 7.0875-4.725 10.9035-12.3075 10.9035-7.3215 0-11.4975-3.7935-11.808-10.728l-0.018-0.846v-159.0615l0.0225-0.8505c0.3195-6.921 4.527-10.674 11.8035-10.674zM640.8125 62L908 348.875h-182.8125c-70.3125 0-84.375-59.0625-84.375-81.5625V62z\" fill=\"#FFFFFF\" ></path></symbol><symbol id=\"icon-xls\" viewBox=\"0 0 1024 1024\"><path d=\"M193.625 62C154.25 62 120.5 92.9375 120.5 132.3125V888.875c0 42.1875 33.75 73.125 73.125 73.125h644.0625c39.375 0 70.3125-30.9375 70.3125-70.3125V346.0625L640.8125 62H193.625z\" fill=\"#45B058\" ></path><path d=\"M908 348.875v14.0625h-180s-90-16.875-87.1875-95.625c0 0 2.8125 81.5625 84.375 81.5625H908z\" fill=\"#349C42\" ></path><path d=\"M653.984 631.106c6.597 0 13.023 0.9135 19.278 2.736 6.228 1.818 11.574 4.077 16.038 6.7905 4.59 2.79 7.9335 5.994 9.99 9.6345 2.2365 3.969 2.2365 8.0505-0.0315 11.97-1.935 3.222-4.968 4.8465-8.7975 4.743a16.56 16.56 0 0 1-8.5815-2.646l-0.963-0.657c-3.2535-2.277-7.3485-4.6125-12.285-7.002a30.987 30.987 0 0 0-13.131-3.186l-1.5165 0.009c-8.019 0-14.31 2.2365-18.99 6.687-4.6665 4.4415-6.984 10.062-6.984 17.019 0 4.284 0.9765 7.893 2.9115 10.872a30.564 30.564 0 0 0 7.992 8.2125c3.411 2.439 7.371 4.725 11.8755 6.8535 4.6035 2.178 9.3375 4.356 14.193 6.534a164.025 164.025 0 0 1 17.3745 8.9415c5.22 3.1365 9.675 6.714 13.356 10.746a42.2865 42.2865 0 0 1 8.514 14.0985c1.9485 5.301 2.9115 11.4435 2.9115 18.414 0 7.6905-1.404 14.8365-4.212 21.42a50.841 50.841 0 0 1-11.862 17.1315c-5.0895 4.8285-11.1825 8.595-18.2565 11.304-6.4125 2.4525-13.3515 3.861-20.826 4.23l-2.2545 0.0765-2.196 0.0225-2.1465-0.045a69.192 69.192 0 0 1-15.0255-2.1915c-6.2685-1.6335-11.907-3.654-16.965-6.0975-7.5915-3.8835-12.6225-8.019-15.066-12.5235-2.5695-4.7475-2.5695-9.198 0.2115-13.0455 2.2815-2.907 5.121-4.3515 8.3475-4.131 2.8575 0.198 5.85 1.341 9.0315 3.3975a90.9135 90.9135 0 0 0 16.11 8.4825c5.688 2.322 11.907 3.4875 18.6795 3.4875 4.077 0 8.028-0.783 11.88-2.3535a35.3565 35.3565 0 0 0 10.305-6.399 30.339 30.339 0 0 0 7.1595-9.63 27.6795 27.6795 0 0 0 2.6775-12.1275c0-4.3695-0.8505-8.2755-2.5425-11.736a33.777 33.777 0 0 0-6.858-9.459 45.756 45.756 0 0 0-9.729-7.2 102.636 102.636 0 0 0-10.935-5.292 263.6595 263.6595 0 0 1-19.3185-8.388c-6.0525-2.9385-11.295-6.3225-15.7365-10.1475a40.734 40.734 0 0 1-10.53-13.995c-2.493-5.445-3.7305-12.015-3.7305-19.7145 0-7.056 1.4175-13.4865 4.2615-19.26a44.9055 44.9055 0 0 1 11.2725-14.5845 48.177 48.177 0 0 1 16.119-8.9865c6.03-2.0115 12.357-3.015 18.981-3.015z m-332.3295 1.134c2.637 0.1125 5.1345 1.845 7.668 5.04l0.63 0.8325 42.003 59.8635 40.185-57.5055 0.567-0.8955c2.4795-3.78 5.184-6.057 8.2035-6.66 3.132-0.63 6.255 0.099 9.2655 2.106 5.562 3.78 6.39 9.306 2.5875 15.705l-0.495 0.81-46.4715 66.2355 55.2285 78.678 0.5715 1.215c0.9405 2.1195 1.53 4.1715 1.7685 6.1515 0.369 3.0735-1.377 5.8365-4.878 8.307-6.498 4.3965-12.42 3.447-16.7265-2.619l-0.486-0.7245-49.572-70.704-49.599 70.758-0.648 0.8685c-2.1735 2.7585-4.662 4.437-7.452 4.9185-2.817 0.486-5.5755-0.216-8.1-1.9575l-0.747-0.5535c-2.781-1.926-4.266-4.779-4.365-8.334-0.09-3.069 0.765-5.859 2.4525-8.1675l0.594-0.7515 53.784-76.833-46.4355-66.438-0.531-0.7155c-1.4715-2.16-2.106-4.7565-1.926-7.695a10.044 10.044 0 0 1 4.779-8.163c2.88-1.9215 5.5935-2.88 8.145-2.772z m170.1495 0.378c7.6185 0 11.988 3.7665 12.312 10.7235l0.018 0.8505v145.674h54.009l0.999 0.0315c2.88 0.1665 5.328 1.0305 7.2855 2.61 2.349 1.9035 3.4785 4.86 3.4785 8.6805 0 3.6765-1.2015 6.57-3.645 8.46-2.007 1.548-4.41 2.4075-7.1415 2.5785l-1.0395 0.0315H495.026l-1.179-0.0315c-4.1715-0.2025-7.5465-1.485-10.0305-3.87-2.502-2.412-3.852-5.58-4.0635-9.3915l-0.027-1.053V644.12l0.0315-0.9585c0.2025-3.168 1.377-5.751 3.519-7.605 2.277-1.962 5.1525-2.9385 8.5275-2.9385zM640.8125 62L908 348.875h-180c-70.3125 0-87.1875-59.0625-87.1875-81.5625V62z\" fill=\"#FFFFFF\" ></path></symbol><symbol id=\"icon-doc\" viewBox=\"0 0 1024 1024\"><path d=\"M193.625 62C154.25 62 120.5 92.9375 120.5 132.3125v759.375C120.5 931.0625 154.25 962 193.625 962h644.0625c39.375 0 70.3125-30.9375 70.3125-70.3125V346.0625L640.8125 62H193.625z\" fill=\"#14A9DA\" ></path><path d=\"M908 348.875v14.0625h-180s-87.1875-16.875-87.1875-95.625c0 0 2.8125 81.5625 84.375 81.5625H908z\" fill=\"#0F93D0\" ></path><path d=\"M521.288 629c13.1085 0 24.5925 2.511 34.416 7.56 9.792 5.022 17.9505 11.835 24.4575 20.421 6.471 8.541 11.34 18.495 14.6025 29.844 3.2535 11.295 4.878 23.175 4.878 35.649 0 12.636-1.5795 24.5565-4.7475 35.766-3.1815 11.2635-8.01 21.2175-14.4765 29.844a70.2675 70.2675 0 0 1-24.462 20.5605c-9.828 5.04-21.3885 7.5555-34.668 7.5555-12.942 0-24.3765-2.511-34.2855-7.551-9.8775-5.0265-18.081-11.8395-24.588-20.43-6.471-8.541-11.34-18.495-14.6025-29.844-3.2535-11.295-4.878-23.265-4.878-35.901 0-12.465 1.539-24.336 4.617-35.622 3.096-11.358 7.884-21.321 14.3595-29.871 6.507-8.5905 14.715-15.4035 24.588-20.43 9.909-5.04 21.51-7.551 34.7895-7.551z m164.196 1.008c6.597 0 13.023 0.9135 19.278 2.736 6.228 1.818 11.574 4.077 16.038 6.7905 4.59 2.79 7.9335 5.994 9.99 9.6345 2.2365 3.969 2.2365 8.0505-0.0315 11.97-1.935 3.222-4.968 4.8465-8.7975 4.743a16.56 16.56 0 0 1-8.5815-2.646l-0.963-0.657c-3.2535-2.277-7.3485-4.6125-12.285-7.002a30.987 30.987 0 0 0-13.131-3.186l-1.5165 0.009c-8.019 0-14.31 2.2365-18.99 6.687-4.6665 4.4415-6.984 10.062-6.984 17.019 0 4.284 0.9765 7.893 2.9115 10.872a30.564 30.564 0 0 0 7.992 8.2125c3.411 2.439 7.371 4.725 11.8755 6.8535 4.6035 2.178 9.3375 4.356 14.193 6.534a164.025 164.025 0 0 1 17.3745 8.9415c5.22 3.1365 9.675 6.714 13.356 10.746a42.2865 42.2865 0 0 1 8.514 14.0985c1.9485 5.301 2.9115 11.4435 2.9115 18.414 0 7.6905-1.404 14.8365-4.212 21.42a50.841 50.841 0 0 1-11.862 17.1315c-5.0895 4.8285-11.1825 8.595-18.2565 11.304-6.4125 2.4525-13.3515 3.861-20.826 4.23l-2.2545 0.0765-2.196 0.0225-2.1465-0.045a69.192 69.192 0 0 1-15.0255-2.1915c-6.2685-1.6335-11.907-3.654-16.965-6.0975-7.5915-3.8835-12.6225-8.019-15.066-12.5235-2.5695-4.7475-2.5695-9.198 0.2115-13.0455 2.2815-2.907 5.121-4.3515 8.3475-4.131 2.8575 0.198 5.85 1.341 9.0315 3.3975a90.9135 90.9135 0 0 0 16.11 8.4825c5.688 2.322 11.907 3.4875 18.6795 3.4875 4.077 0 8.028-0.783 11.88-2.3535a35.3565 35.3565 0 0 0 10.305-6.399 30.339 30.339 0 0 0 7.1595-9.63 27.6795 27.6795 0 0 0 2.6775-12.1275c0-4.3695-0.8505-8.2755-2.5425-11.736a33.777 33.777 0 0 0-6.858-9.459 45.756 45.756 0 0 0-9.729-7.2 102.636 102.636 0 0 0-10.935-5.292 263.6595 263.6595 0 0 1-19.3185-8.388c-6.0525-2.9385-11.295-6.3225-15.7365-10.1475a40.734 40.734 0 0 1-10.53-13.995c-2.493-5.445-3.7305-12.015-3.7305-19.7145 0-7.056 1.4175-13.4865 4.2615-19.26a44.9055 44.9055 0 0 1 11.2725-14.5845 48.177 48.177 0 0 1 16.119-8.9865c6.03-2.0115 12.357-3.015 18.981-3.015z m-348.777 4.284l2.3355 0.027c11.7675 0.27 22.0275 2.556 30.7665 6.885 9.297 4.6035 17.001 10.917 23.094 18.9225 6.0615 7.965 10.5525 17.343 13.482 28.116 2.9115 10.6965 4.365 22.1085 4.365 34.2315 0 12.2895-1.4535 23.787-4.365 34.4835-2.925 10.764-7.371 20.1735-13.338 28.215a63.531 63.531 0 0 1-22.7205 19.0665c-8.613 4.3515-18.6885 6.642-30.2085 6.8985l-2.178 0.0225H290.5415l-1.0035-0.009c-5.139-0.1035-8.3835-0.9585-9.882-3.087-1.2195-1.7235-1.8135-4.329-1.9125-7.8885l-0.0135-1.0935v-152.7435l0.018-1.107c0.099-3.528 0.6885-6.12 1.908-7.8435 1.485-2.106 4.6845-2.979 9.7875-3.0825l1.1205-0.0135h46.143z m184.581 16.848c-9.3645 0-17.4195 1.962-24.201 5.8725a50.868 50.868 0 0 0-16.902 15.696c-4.4685 6.579-7.7625 14.1435-9.8865 22.7115a112.149 112.149 0 0 0-3.2085 27.054c0 9.225 1.071 18.117 3.2085 26.6715 2.124 8.496 5.382 16.074 9.7785 22.743a49.23 49.23 0 0 0 16.758 15.795c6.777 3.906 14.9175 5.8725 24.453 5.8725 9.072 0 16.965-1.692 23.688-5.0535a46.395 46.395 0 0 0 16.8345-14.193c4.5315-6.1425 7.938-13.5315 10.224-22.1715 2.295-8.7075 3.4515-18.342 3.4515-28.908 0-9.567-1.071-18.711-3.213-27.4365-2.1195-8.6535-5.418-16.308-9.8865-22.968a50.3865 50.3865 0 0 0-16.8975-15.813c-6.7815-3.9105-14.8365-5.8725-24.201-5.8725z m-189.648 4.536h-29.754v134.1h36.054c15.255 0 27.0135-5.715 35.4825-17.226 8.586-11.664 12.9195-28.593 12.9195-50.832 0-21.546-4.4505-37.953-13.2615-49.2705-8.4105-10.8-21.5505-16.4025-39.618-16.7535l-1.8225-0.018zM640.8125 62L908 348.875h-182.8125c-70.3125 0-84.375-59.0625-84.375-81.5625V62z\" fill=\"#FFFFFF\" ></path></symbol><symbol id=\"icon-txt\" viewBox=\"0 0 1024 1024\"><path d=\"M190.8125 62C154.25 62 120.5 92.9375 120.5 132.3125v759.375C120.5 931.0625 151.4375 962 190.8125 962H834.875c39.375 0 70.3125-30.9375 70.3125-70.3125V346.0625L640.8125 62h-450z\" fill=\"#99B7D2\" ></path><path d=\"M908 346.0625v14.0625h-180s-87.1875-16.875-84.375-92.8125c0 0 2.8125 78.75 84.375 78.75h180z\" fill=\"#527EA7\" ></path><path d=\"M456.6905 633.509c2.637 0.108 5.1345 1.8405 7.668 5.04l0.63 0.828 42.003 59.8635 40.185-57.5055 0.567-0.891c2.4795-3.7845 5.184-6.0615 8.2035-6.66 3.132-0.63 6.255 0.099 9.2655 2.106 5.562 3.7755 6.39 9.3015 2.5875 15.705l-0.495 0.801-46.4715 66.24 55.2285 78.678 0.5715 1.215c0.9405 2.1195 1.53 4.1715 1.7685 6.156 0.369 3.069-1.377 5.8365-4.878 8.3025-6.498 4.401-12.42 3.447-16.7265-2.619l-0.486-0.72L506.735 739.34l-49.599 70.758-0.648 0.8685c-2.1735 2.7585-4.662 4.437-7.452 4.9185-2.817 0.486-5.5755-0.216-8.1-1.9575l-0.747-0.5535c-2.781-1.926-4.266-4.779-4.365-8.334-0.09-3.069 0.765-5.8545 2.4525-8.163l0.594-0.7515 53.784-76.8375-46.4355-66.4335-0.531-0.72c-1.4715-2.16-2.106-4.752-1.926-7.695a10.044 10.044 0 0 1 4.779-8.163c2.88-1.9215 5.5935-2.8755 8.145-2.7675z m-55.3545 3.15l1.008 0.0315c2.9115 0.189 5.4225 1.1565 7.4475 2.907 2.376 2.052 3.5505 4.9905 3.5505 8.631 0 4.0905-1.3905 7.1505-4.2435 8.865a15.0885 15.0885 0 0 1-6.804 2.1735l-1.0305 0.0315h-38.322v144.468l-0.027 1.143c-0.153 3.258-0.954 5.8635-2.484 7.7715-1.854 2.322-5.085 3.3615-9.567 3.3615-4.5 0-7.749-1.1025-9.603-3.5325-1.485-1.953-2.286-4.5-2.4435-7.605l-0.0315-1.1925-0.0045-144.414h-38.376l-1.044-0.027c-2.988-0.153-5.49-0.9585-7.443-2.448-2.403-1.827-3.5325-4.8465-3.5325-8.847 0-3.834 1.188-6.813 3.645-8.7075 2.016-1.557 4.482-2.412 7.3395-2.583l1.0935-0.0315h100.872z m321.336 0l1.008 0.0315c2.9115 0.189 5.4225 1.1565 7.4475 2.907 2.376 2.052 3.5505 4.9905 3.5505 8.631 0 4.0905-1.3905 7.1505-4.2435 8.865a15.0885 15.0885 0 0 1-6.804 2.1735l-1.0305 0.0315h-38.322v144.468l-0.027 1.143c-0.153 3.258-0.954 5.8635-2.484 7.7715-1.854 2.322-5.085 3.3615-9.567 3.3615-4.5 0-7.749-1.1025-9.603-3.5325-1.485-1.953-2.286-4.5-2.4435-7.605l-0.0315-1.1925v-144.414h-38.3805l-1.044-0.027c-2.988-0.153-5.49-0.9585-7.443-2.448-2.403-1.827-3.5325-4.8465-3.5325-8.847 0-3.834 1.188-6.813 3.645-8.7075 2.016-1.557 4.482-2.412 7.3395-2.583l1.0935-0.0315h100.872zM640.8125 62L908 346.0625h-182.8125c-70.3125 0-84.375-56.25-84.375-81.5625V62z\" fill=\"#FFFFFF\" ></path></symbol><symbol id=\"icon-svg\" viewBox=\"0 0 1024 1024\"><path d=\"M193.625 62C154.25 62 120.5 92.9375 120.5 132.3125V888.875c0 42.1875 33.75 73.125 73.125 73.125h644.0625c39.375 0 70.3125-30.9375 70.3125-70.3125V346.0625L640.8125 62H193.625z\" fill=\"#26AEC6\" ></path><path d=\"M908 348.875v14.0625h-180s-87.1875-16.875-84.375-92.8125c0 0 2.8125 78.75 84.375 78.75h180z\" fill=\"#0D5D6B\" ></path><path d=\"M690.308 630.098c7.38 0 14.508 0.729 21.384 2.1915 6.957 1.476 13.896 4.212 20.835 8.2035a87.9705 87.9705 0 0 1 10.215 6.984c3.0465 2.4345 5.5485 4.8015 7.497 7.1055 2.052 2.43 3.3975 4.8285 3.9915 7.209 0.6525 2.61 0.306 5.022-0.9855 6.9525a16.749 16.749 0 0 1-3.195 3.933 10.845 10.845 0 0 1-5.2245 2.7c-1.926 0.405-3.9735 0.351-6.129-0.135-2.0115-0.459-3.9555-1.5525-5.8095-3.222l-0.792-0.7515c-3.951-3.789-7.686-6.9075-11.196-9.3555a58.14 58.14 0 0 0-10.3095-5.823 43.56 43.56 0 0 0-10.1835-2.997 69.1065 69.1065 0 0 0-11.106-0.855c-8.01 0-15.489 1.9575-22.455 5.886a62.0775 62.0775 0 0 0-18.369 15.813c-5.22 6.606-9.342 14.1975-12.366 22.788a80.1675 80.1675 0 0 0-4.536 26.847c0 9.6615 1.512 18.819 4.536 27.4815 3.0195 8.6535 7.2135 16.1865 12.582 22.608a61.2675 61.2675 0 0 0 19.0845 15.3225c7.3215 3.78 15.327 5.67 24.0435 5.67 8.901 0 16.3665-1.566 22.41-4.6665 6.075-3.114 11.007-7.2945 14.832-12.555 3.861-5.31 6.6825-11.3895 8.46-18.261 1.3995-5.409 2.2545-10.9935 2.565-16.758l0.1035-2.7315h-37.8225l-1.0035-0.018c-8.361-0.27-13.0545-4.068-13.0545-11.052 0-7.47 4.6935-11.529 13.14-11.8125l0.954-0.0135h45.6525l1.1655 0.0225c5.355 0.1845 9.315 1.665 11.736 4.5675 2.52 3.0285 3.672 8.2665 3.672 15.804 0 10.107-1.287 19.926-3.8565 29.439-2.5965 9.612-6.804 18.1575-12.6225 25.6185-5.841 7.497-13.41 13.5495-22.698 18.1485-9.3195 4.617-20.6235 6.912-33.885 6.912-12.924 0-24.5925-2.4615-34.9875-7.398a82.611 82.611 0 0 1-26.6715-19.944c-7.4205-8.37-13.113-18.1575-17.0685-29.3445-3.951-11.1645-5.9265-23.0985-5.9265-35.7795 0-12.339 1.9305-24.219 5.787-35.622 3.87-11.43 9.423-21.501 16.659-30.204a83.115 83.115 0 0 1 26.28-20.97c10.323-5.2965 21.888-7.938 34.668-7.938z m-359.676 1.008c6.597 0 13.023 0.9135 19.278 2.736 6.228 1.818 11.574 4.077 16.038 6.7905 4.59 2.79 7.9335 5.994 9.99 9.6345 2.2365 3.969 2.2365 8.0505-0.0315 11.97-1.935 3.222-4.968 4.8465-8.7975 4.743a16.56 16.56 0 0 1-8.5815-2.646l-0.963-0.657c-3.2535-2.277-7.3485-4.6125-12.285-7.002a30.987 30.987 0 0 0-13.131-3.186l-1.5165 0.009c-8.019 0-14.31 2.2365-18.99 6.687-4.6665 4.4415-6.984 10.062-6.984 17.019 0 4.284 0.9765 7.893 2.9115 10.872a30.564 30.564 0 0 0 7.992 8.2125c3.411 2.439 7.371 4.725 11.8755 6.8535 4.6035 2.178 9.3375 4.356 14.193 6.534a164.025 164.025 0 0 1 17.3745 8.9415c5.22 3.1365 9.675 6.714 13.356 10.746a42.2865 42.2865 0 0 1 8.514 14.0985c1.9485 5.301 2.9115 11.4435 2.9115 18.414 0 7.6905-1.404 14.8365-4.212 21.42a50.841 50.841 0 0 1-11.862 17.1315c-5.0895 4.8285-11.1825 8.595-18.2565 11.304-6.4125 2.4525-13.3515 3.861-20.826 4.23l-2.2545 0.0765-2.196 0.0225-2.1465-0.045a69.192 69.192 0 0 1-15.0255-2.1915c-6.2685-1.6335-11.907-3.654-16.965-6.0975-7.5915-3.8835-12.6225-8.019-15.066-12.5235-2.5695-4.7475-2.5695-9.198 0.2115-13.0455 2.2815-2.907 5.121-4.3515 8.3475-4.131 2.8575 0.198 5.85 1.341 9.0315 3.3975a90.9135 90.9135 0 0 0 16.11 8.4825c5.688 2.322 11.907 3.4875 18.6795 3.4875 4.077 0 8.028-0.783 11.88-2.3535a35.3565 35.3565 0 0 0 10.305-6.399 30.339 30.339 0 0 0 7.1595-9.63 27.6795 27.6795 0 0 0 2.6775-12.1275c0-4.3695-0.8505-8.2755-2.5425-11.736a33.777 33.777 0 0 0-6.858-9.459 45.756 45.756 0 0 0-9.729-7.2 102.636 102.636 0 0 0-10.935-5.292 263.6595 263.6595 0 0 1-19.3185-8.388c-6.0525-2.9385-11.295-6.3225-15.7365-10.1475a40.734 40.734 0 0 1-10.53-13.995c-2.493-5.445-3.7305-12.015-3.7305-19.7145 0-7.056 1.4175-13.4865 4.2615-19.26a44.9055 44.9055 0 0 1 11.2725-14.5845 48.177 48.177 0 0 1 16.119-8.9865c6.03-2.0115 12.357-3.015 18.981-3.015z m123.588 9.99l45.018 130.95 44.28-130.662 0.3555-0.936c1.3635-3.375 3.348-5.6565 5.985-6.6735a15.5295 15.5295 0 0 1 7.857-0.891c3.645 0.405 6.435 1.908 8.1765 4.518 1.7235 2.5785 1.656 6.138 0.1035 10.593l-0.3555 0.972-53.7345 154.125-0.4725 1.0845c-3.105 6.9075-7.2405 10.602-12.429 10.602-2.8665 0-5.355-0.846-7.371-2.547-1.7775-1.494-3.501-4.23-5.337-8.379l-0.504-1.17-53.415-153.1935-0.3915-1.0755c-1.17-3.465-1.422-6.3585-0.6345-8.712 0.8415-2.52 2.844-4.392 5.8365-5.625l1.5975-0.6075c7.254-2.5515 12.69 0.171 15.435 7.632zM640.8125 62L908 348.875h-182.8125c-70.3125 0-84.375-56.25-84.375-81.5625V62z\" fill=\"#FFFFFF\" ></path></symbol><symbol id=\"icon-gif\" viewBox=\"0 0 1024 1024\"><path d=\"M193.625 62C154.25 62 120.5 92.9375 120.5 132.3125V888.875c0 42.1875 33.75 73.125 73.125 73.125h644.0625c39.375 0 70.3125-30.9375 70.3125-70.3125V346.0625L640.8125 62H193.625z\" fill=\"#49B384\" ></path><path d=\"M908 348.875v14.0625h-180s-87.1875-16.875-84.375-92.8125c0 0 2.8125 78.75 84.375 78.75h180z\" fill=\"#0D6B42\" ></path><path d=\"M392.894 597.5c7.38 0 14.508 0.729 21.384 2.1915 6.957 1.476 13.896 4.212 20.835 8.2035a87.9705 87.9705 0 0 1 10.215 6.984c3.0465 2.4345 5.5485 4.8015 7.497 7.1055 2.052 2.43 3.3975 4.8285 3.9915 7.209 0.6525 2.61 0.306 5.022-0.9855 6.9525a16.749 16.749 0 0 1-3.195 3.933 10.845 10.845 0 0 1-5.2245 2.7c-1.926 0.405-3.9735 0.351-6.129-0.135-2.0115-0.459-3.9555-1.5525-5.8095-3.222l-0.792-0.7515c-3.951-3.789-7.686-6.9075-11.196-9.3555a58.14 58.14 0 0 0-10.3095-5.823 43.56 43.56 0 0 0-10.1835-2.997 69.1065 69.1065 0 0 0-11.106-0.855c-8.01 0-15.489 1.9575-22.455 5.886a62.0775 62.0775 0 0 0-18.369 15.813c-5.22 6.606-9.342 14.1975-12.366 22.788a80.1675 80.1675 0 0 0-4.536 26.847c0 9.6615 1.512 18.819 4.536 27.4815 3.0195 8.6535 7.2135 16.1865 12.582 22.608a61.2675 61.2675 0 0 0 19.0845 15.3225c7.3215 3.78 15.327 5.67 24.0435 5.67 8.901 0 16.3665-1.566 22.41-4.6665 6.075-3.114 11.007-7.2945 14.832-12.555 3.861-5.31 6.6825-11.3895 8.46-18.261 1.3995-5.409 2.2545-10.9935 2.565-16.758l0.1035-2.7315h-37.8225l-1.0035-0.018c-8.361-0.27-13.0545-4.068-13.0545-11.052 0-7.47 4.6935-11.529 13.14-11.8125l0.954-0.0135h45.6525l1.1655 0.0225c5.355 0.1845 9.315 1.665 11.736 4.5675 2.52 3.0285 3.672 8.2665 3.672 15.804 0 10.107-1.287 19.926-3.8565 29.439-2.5965 9.612-6.804 18.1575-12.6225 25.6185-5.841 7.497-13.41 13.5495-22.698 18.1485-9.3195 4.617-20.6235 6.912-33.885 6.912-12.924 0-24.5925-2.4615-34.9875-7.398a82.611 82.611 0 0 1-26.6715-19.944c-7.4205-8.37-13.113-18.1575-17.0685-29.3445-3.951-11.1645-5.9265-23.0985-5.9265-35.7795 0-12.339 1.9305-24.219 5.787-35.622 3.87-11.43 9.423-21.501 16.659-30.204a83.115 83.115 0 0 1 26.28-20.97c10.323-5.2965 21.888-7.938 34.668-7.938z m124.128 2.52c3.8475 0 6.876 0.855 9.018 2.6775 2.0655 1.755 3.1275 4.437 3.2895 7.9245l0.0225 0.972v158.814l-0.0225 0.8685c-0.3375 7.0875-4.725 10.9035-12.3075 10.9035-7.3215 0-11.4975-3.7935-11.808-10.728l-0.018-0.846v-159.0615l0.0225-0.8505c0.3195-6.921 4.527-10.674 11.8035-10.674z m155.169 2.772l0.945 0.018c7.614 0.297 11.844 4.2525 11.844 11.304 0 4.0185-1.143 7.0155-3.5865 8.7615-1.989 1.422-4.752 2.1555-8.2935 2.286l-1.206 0.0225h-68.058v52.1955l61.299 0.0045 1.0305 0.0225c5.652 0.2295 9.396 2.421 10.548 6.336 1.125 2.466 1.0125 5.22-0.1125 7.758-1.206 5.0175-4.923 7.74-10.5975 8.001l-0.9135 0.0225h-61.254v71.4015l-0.0315 0.999c-0.18 2.916-1.125 5.3325-2.853 7.155-2.016 2.133-5.274 3.1005-9.6975 3.1005-4.293 0-7.425-0.99-9.279-3.195-1.53-1.8135-2.3535-4.176-2.52-7.0335l-0.027-1.0935v-155.0205l0.018-1.062c0.1485-4.194 1.17-7.2675 3.249-9.135 2.0115-1.818 5.1705-2.7045 9.4725-2.835l1.1025-0.0135h78.921zM640.8125 62L908 348.875h-182.8125c-70.3125 0-84.375-56.25-84.375-81.5625V62z\" fill=\"#FFFFFF\" ></path></symbol><symbol id=\"icon-jiaoseguanli\" viewBox=\"0 0 1333 1024\"><path d=\"M1122.81333333 342.52a155.844 155.844 0 1 0-226.753 0 244.675 244.675 0 0 0-53.7662 38.1818A197.922 197.922 0 0 0 505.67333333 373.688a243.896 243.896 0 0 0-63.1169-48.3117 155.844 155.844 0 1 0-226.753 0A245.454 245.454 0 0 0 83.33633333 544.337a38.961 38.961 0 0 0 77.9221 0 168.311 168.311 0 0 1 298.441-105.974 38.1818 38.1818 0 0 0 17.1428 13.2468 190.909 190.909 0 0 0 66.2337 180.78 319.48 319.48 0 0 0-189.351 290.649 38.961 38.961 0 0 0 77.9221 0 241.559 241.559 0 0 1 482.337 0 38.961 38.961 0 0 0 77.9221 0 319.48 319.48 0 0 0-189.351-290.649 197.922 197.922 0 0 0 69.3506-149.61 196.363 196.363 0 0 0 0-28.052 37.4026 37.4026 0 0 0 17.922-10.1299 166.753 166.753 0 0 1 123.117-52.9869A168.311 168.311 0 0 1 1174.23333333 559.143a38.961 38.961 0 0 0 77.9221 0 245.454 245.454 0 0 0-129.351-216.623ZM329.56933333 295.767a77.9221 77.9221 0 1 1 77.9221-77.9221 77.9221 77.9221 0 0 1-77.9221 77.9221Zm342.857 311.688a120.779 120.779 0 1 1 121.558-124.675A121.558 121.558 0 0 1 672.42633333 607.454Zm336.623-290.649a77.9221 77.9221 0 1 1 77.9221-77.9221 77.9221 77.9221 0 0 1-77.9221 74.8052Z\" ></path></symbol><symbol id=\"icon-system-settings\" viewBox=\"0 0 1055 1024\"><path d=\"M751.4 754.1c-52.2 6.3-99.9-28.8-106.2-79.2-6.3-50.4 30.6-97.2 82.8-103.5 52.2-6.3 99.9 28.8 106.2 79.2 6.3 50.4-30.6 97.2-82.8 103.5z m6.3 45.9c78.3-9.9 134.1-79.2 124.2-154.8-9.9-75.6-81-129.6-158.4-119.7-78.3 9.9-134.1 79.2-124.2 154.8 9 75.6 80.1 129.6 158.4 119.7z m-256.5-74.7c-2.7-2.7-4.5-5.4-5.4-9l-5.4-45c0-8.1 6.3-15.3 14.4-16.2l25.2-3.6c10.8-1.8 19.8-9.9 22.5-20.7l9-32.4c3.6-10.8 0-21.6-8.1-28.8l-19.8-15.3c-7.2-5.4-8.1-15.3-2.7-22.5l27-33.3c3.6-3.6 8.1-5.4 12.6-6.3 4.5-0.9 9 0 12.6 2.7l19.8 15.3c8.1 6.3 22.5 6.3 30.6 0.9l29.7-17.1c9.9-5.4 15.3-15.3 14.4-26.1l-2.7-25.2c-0.9-4.5 0.9-8.1 3.6-11.7 2.7-3.6 6.3-5.4 10.8-6.3l44.1-5.4c9-1.8 17.1 4.5 18 12.6l3.6 26.1c0.9 10.8 10.8 19.8 21.6 21.6l33.3 9c10.8 3.6 22.5 0 29.7-8.1l15.3-19.8c2.7-3.6 7.2-4.5 11.7-5.4 4.5-0.9 9 0 12.6 2.7l34.2 25.2c7.2 5.4 8.1 15.3 2.7 22.5l-15.3 19.8c-7.2 8.1-7.2 21.6-0.9 29.7l17.1 28.8c5.4 9.9 15.3 16.2 27 15.3l25.2-3.6c4.5-0.9 9 0 11.7 2.7 3.6 2.7 5.4 6.3 6.3 10.8l2.7 42.3c0.9 9-4.5 16.2-13.5 18l-27.9 5.4c-10.8 1.8-19.8 9.9-22.5 20.7l-9 32.4c-3.6 10.8 0 21.6 8.1 28.8l19.8 15.3c7.2 5.4 8.1 15.3 2.7 22.5L921.5 827c-5.4 7.2-16.2 8.1-23.4 2.7l-19.8-15.3c-8.1-6.3-22.5-6.3-30.6-0.9l-29.7 17.1c-9.9 4.5-16.2 15.3-15.3 26.1l2.7 25.2c0.9 4.5-0.9 8.1-3.6 11.7-2.7 3.6-6.3 5.4-10.8 6.3l-44.1 5.4c-4.5 0.9-9 0-11.7-2.7-3.6-2.7-5.4-6.3-6.3-10.8l-2.7-25.2c-1.8-10.8-9.9-19.8-20.7-21.6l-33.3-9c-10.8-3.6-22.5 0-29.7 8.1l-15.3 19.8c-5.4 7.2-16.2 8.1-23.4 2.7l-34.2-25.2c-7.2-5.4-8.1-15.3-2.7-22.5l15.3-19.8c7.2-8.1 7.2-21.6 0.9-29.7l-17.1-28.8c-5.4-9.9-16.2-16.2-27-15.3l-26.1 2.7c-3.6 0.9-8.1 0-11.7-2.7z\" ></path><path d=\"M809 118.7H145.7c-45.9 0-83.7 37.8-83.7 83.7v619.2c0 45.9 37.8 83.7 83.7 83.7H498.5V809.9H210.5c-27 0-49.5-22.5-49.5-49.5V429.2c0-27 22.5-49.5 49.5-49.5h533.7c25.2 0 45.9 18.9 48.6 43.2h99V201.5c0-45.9-36.9-82.8-82.8-82.8zM249.2 283.4c0 11.7-9 20.7-20.7 20.7h-48.6c-11.7 0-20.7-9-20.7-20.7v-44.1c0-11.7 9-20.7 20.7-20.7H228.5c11.7 0 20.7 9 20.7 20.7v44.1z m221.4 0c0 11.7-9 20.7-20.7 20.7H332c-11.7 0-20.7-9-20.7-20.7v-44.1c0-11.7 9-20.7 20.7-20.7h117.9c11.7 0 20.7 9 20.7 20.7v44.1z\" ></path></symbol><symbol id=\"icon-yanzhengyanzhengma\" viewBox=\"0 0 1024 1024\"><path d=\"M916.15625 193.25c-2.25-0.1875-229.78125-23.71875-387.9375-138.5625-4.78125-3.46875-10.3125-5.25-16.21875-5.25-5.8125 0-11.4375 1.78125-16.21875 5.25C338.46875 168.875 110.09375 193.0625 107.84375 193.25c-14.25 1.3125-24.9375 13.21875-24.9375 27.46875 0 6.28125 0.5625 155.4375 51.375 322.875 30.09375 99.1875 71.625 184.125 123.65625 252.375 65.90625 86.53125 148.59375 146.25 245.625 177.375 2.71875 0.84375 5.53125 1.3125 8.4375 1.3125s5.71875-0.46875 8.34375-1.3125c97.125-31.125 179.71875-90.75 245.625-177.375 51.9375-68.15625 93.5625-153 123.65625-252.375 50.71875-167.4375 51.375-316.59375 51.375-322.875C941.09375 206.46875 930.40625 194.65625 916.15625 193.25zM885.21875 245l-0.09375 1.5c-2.71875 54.46875-12.5625 163.5-48.1875 281.15625-62.53125 206.34375-171.65625 337.59375-324.375 390.09375L512 917.9375l-0.5625-0.1875C359.1875 865.34375 250.15625 734.5625 187.4375 528.96875c-37.3125-122.34375-46.3125-238.3125-48.5625-282.5625l-0.09375-1.5 1.40625-0.1875c66.1875-9.65625 234.84375-42 370.78125-133.5l0.84375-0.65625 0.9375 0.65625C648.875 202.71875 817.53125 235.0625 883.71875 244.8125L885.21875 245z\" ></path><path d=\"M633.6875 361.0625L469.8125 576.03125l-83.4375-71.34375c-4.96875-4.21875-11.34375-6.5625-17.90625-6.5625-8.0625 0-15.75 3.46875-21 9.65625-9.84375 11.53125-8.53125 29.0625 3.09375 38.90625l105.65625 90.375c4.875 4.125 11.625 6.5625 18.375 6.5625 0.84375 0 1.6875 0 2.53125-0.09375 7.5-0.75 14.4375-4.6875 19.03125-10.6875l181.59375-238.125c4.5-5.90625 6.375-13.125 5.34375-20.4375-0.9375-7.3125-4.78125-13.78125-10.59375-18.28125C660.21875 346.625 642.875 348.96875 633.6875 361.0625z\" ></path></symbol><symbol id=\"icon-xitong\" viewBox=\"0 0 1024 1024\"><path d=\"M371.375 455.75h-225A84.375 84.375 0 0 1 62 371.375v-225A84.375 84.375 0 0 1 146.375 62h225A84.375 84.375 0 0 1 455.75 146.375v225A84.375 84.375 0 0 1 371.375 455.75z m-225-337.5a28.125 28.125 0 0 0-28.125 28.125v225a28.125 28.125 0 0 0 28.125 28.125h225a28.125 28.125 0 0 0 28.125-28.125v-225a28.125 28.125 0 0 0-28.125-28.125zM765.125 455.75A196.875 196.875 0 1 1 962 258.875 196.875 196.875 0 0 1 765.125 455.75z m0-337.5A140.625 140.625 0 1 0 905.75 258.875 140.625 140.625 0 0 0 765.125 118.25zM371.375 962h-225A84.375 84.375 0 0 1 62 877.625v-225A84.375 84.375 0 0 1 146.375 568.25h225A84.375 84.375 0 0 1 455.75 652.625v225A84.375 84.375 0 0 1 371.375 962z m-225-337.5a28.125 28.125 0 0 0-28.125 28.125v225a28.125 28.125 0 0 0 28.125 28.125h225a28.125 28.125 0 0 0 28.125-28.125v-225a28.125 28.125 0 0 0-28.125-28.125zM877.625 962h-225A84.375 84.375 0 0 1 568.25 877.625v-225A84.375 84.375 0 0 1 652.625 568.25h225a84.375 84.375 0 0 1 84.375 84.375v225a84.375 84.375 0 0 1-84.375 84.375z m-225-337.5a28.125 28.125 0 0 0-28.125 28.125v225a28.125 28.125 0 0 0 28.125 28.125h225a28.125 28.125 0 0 0 28.125-28.125v-225a28.125 28.125 0 0 0-28.125-28.125z\" ></path></symbol><symbol id=\"icon-youhuiquanyi\" viewBox=\"0 0 1024 1024\"><path d=\"M911.23368406 538.5768425L789.89473719 878.31578938H234.10526281L112.76631594 538.5768425C79.97473719 521.87789469 57.2631575 488.1768425 57.2631575 448.84210531a101.05263188 101.05263188 0 0 1 202.10526375 0c0 21.44842125-6.77052656 41.25473719-18.16421062 57.62526281L284.63157875 549.89473719l159.89052656-228.42947438A100.42105219 100.42105219 0 0 1 410.94736812 246.7368425a101.05263188 101.05263188 0 0 1 202.10526376 0 100.42105219 100.42105219 0 0 1-33.57473719 74.72842031L739.36842125 549.89473719l43.42736813-43.42736907A100.47157875 100.47157875 0 0 1 764.63157875 448.84210531a101.05263188 101.05263188 0 0 1 202.10526375 0c0 39.33473719-22.71157875 73.03578938-55.50315844 89.73473719zM158.31578938 398.31578937a50.52631594 50.52631594 0 1 0-1e-8 101.05263188s50.52631594-1.6168425 50.52631594-50.52631594a50.52631594 50.52631594 0 0 0-50.52631594-50.52631594z m353.68421062-202.10526281a50.52631594 50.52631594 0 1 0-0.02526281 101.02736813A50.52631594 50.52631594 0 0 0 512 196.21052656z m297.17052656 336.40421063L739.36842125 625.68421063l-202.10526375-277.89473719h-50.526315l-202.10526375 277.89473718-69.80210531-93.06947343A100.44631594 100.44631594 0 0 1 158.31578938 549.89473719l101.05263187 277.89473625h505.2631575l101.05263188-277.89473625a100.44631594 100.44631594 0 0 1-56.51368407-17.28zM865.68421062 398.31578937a50.52631594 50.52631594 0 0 0-50.52631593 50.52631594c0 52.37052656 50.52631594 50.52631594 50.52631594 50.52631594a50.52631594 50.52631594 0 1 0 0-101.05263188z\" ></path></symbol><symbol id=\"icon-sucaiku\" viewBox=\"0 0 1024 1024\"><path d=\"M931.7 907.9H94.3c-4.4 0-8-3.6-8-8V267.8h845.5c4.4 0 8 3.6 8 8v624.1c-0.1 4.4-3.6 8-8.1 8z\" ></path><path d=\"M886.4 931.2H139.6c-42.3 0-76.7-34.4-76.7-76.7V244.4h823.5c42.3 0 76.7 34.4 76.7 76.7v533.4c0 42.3-34.4 76.7-76.7 76.7zM109.6 291.1v563.4c0 16.5 13.5 30 30 30h746.8c16.5 0 30-13.5 30-30V321.1c0-16.5-13.5-30-30-30H109.6z\" ></path><path d=\"M749.4 291.1H62.9v-130c0-42.3 34.4-76.7 76.7-76.7h483c19.5 0 37.3 11.5 45.5 29.2l81.3 177.5z m-639.8-46.7h567.1L625.6 133c-0.5-1.2-1.7-1.9-3-1.9h-483c-16.5 0-30 13.5-30 30v83.3z\" ></path><path d=\"M779.7 524.5H246.3c-12.9 0-23.3-10.5-23.3-23.3 0-12.9 10.4-23.3 23.3-23.3h533.4c12.9 0 23.3 10.5 23.3 23.3s-10.4 23.3-23.3 23.3zM779.7 697.8H246.3c-12.9 0-23.3-10.5-23.3-23.3s10.4-23.3 23.3-23.3h533.4c12.9 0 23.3 10.5 23.3 23.3s-10.4 23.3-23.3 23.3z\" ></path></symbol><symbol id=\"icon-quanbao\" viewBox=\"0 0 1024 1024\"><path d=\"M336.36 372.36c-15.13 0.08-27.34 12.4-27.26 27.54l0.31 61.17c0.08 15.13 12.4 27.34 27.54 27.26 15.13-0.08 27.34-12.4 27.26-27.54l-0.31-61.17c-0.08-15.13-12.4-27.34-27.54-27.26zM336.65 548.43c-15.13 0-27.4 12.27-27.4 27.4V637c0 15.13 12.27 27.4 27.4 27.4 15.13 0 27.4-12.27 27.4-27.4v-61.17c0-15.13-12.27-27.4-27.4-27.4zM336.65 724.51c-15.13 0-27.4 12.27-27.4 27.4v61.17c0 15.13 12.27 27.4 27.4 27.4 15.13 0 27.4-12.27 27.4-27.4v-61.17c0-15.13-12.27-27.4-27.4-27.4z\" ></path><path d=\"M924.33 521.51c22.24-0.82 39.66-18.81 39.66-40.97V359.22c0-48.13-40.07-87.28-89.32-87.28h-37.68l-65.3-132.2c-25.01-50.38-86.36-71.02-136.74-46.01L280.49 269.72l1.55 2.21H149.32c-49.25 0-89.32 39.15-89.32 87.28v118.31c0 11.18 4.67 22 12.8 29.7 7.7 7.29 17.8 11.3 28.47 11.3h0.02c49.54 0 89.85 38.12 89.85 84.98s-40.07 84.75-89.41 84.98h-0.49c-10.64 0-20.74 4.01-28.44 11.3-8.13 7.7-12.8 18.53-12.8 29.7v124.13c0 48.13 40.07 87.28 89.32 87.28h725.36c49.25 0 89.32-39.15 89.32-87.28V732.28c0-22.16-17.42-40.15-39.65-40.97-48.37-1.78-86.27-39.08-86.27-84.91s37.89-83.13 86.26-84.91zM667.45 159.17c6.93-3.44 14.78-3.97 22.11-1.51 7.33 2.47 13.26 7.64 16.7 14.57l49.51 99.71H440.34l227.11-112.76z m143.71 557.46c22.01 21.94 49.62 36.96 79.76 43.73v93.25c0 7.84-7.29 14.22-16.25 14.22H149.32c-8.96 0-16.25-6.38-16.25-14.22v-95.09c74.67-14.38 131.14-78.43 131.14-155.02s-56.44-140.62-131.14-155.01v-89.28c0-7.84 7.29-14.22 16.25-14.22h725.36c8.96 0 16.25 6.38 16.25 14.22v93.25c-30.14 6.77-57.76 21.79-79.76 43.73-29.76 29.66-46.15 68.81-46.15 110.22s16.39 80.55 46.15 110.22z\" ></path></symbol><symbol id=\"icon-default-menu\" viewBox=\"0 0 1024 1024\"><path d=\"M449.412 701.879c0-32.873 5.521-64.451 15.663-93.879H65.464v44.699c1.091 46.002 39.03 83.311 85.287 83.311h256.014v106.672H257.421c-23.468 0-42.666 19.201-42.666 42.666 0 23.25 18.846 42.301 42.015 42.652h302.274c-66.773-52.742-109.632-134.426-109.632-226.121zM876.178 94.853H150.803c-46.938 0-85.339 38.402-85.339 85.339v384.023h418.924c48.833-89.565 143.829-150.337 253.024-150.337 90.511 0 171.254 41.766 224.052 107.062V178.164c-1.091-46.007-39.033-83.311-85.286-83.311z\" ></path><path d=\"M542.351 583.315c-2.351-0.338-4.815 0.335-7.39 1.901-3.139 1.904-6.162 4.817-8.849 8.848-2.688 4.032-5.039 8.4-7.168 13.216s-3.809 9.743-5.039 14.894c-1.232 5.151-1.903 9.855-1.903 14 0 3.807 1.009 7.614 2.91 11.31 1.903 3.697 4.258 5.937 7.168 6.943 9.632 3.808 18.479 10.19 26.205 18.479 7.727 8.285 11.534 18.143 11.534 29.34 0 10.862-3.807 20.719-11.534 29.563-7.726 8.848-16.349 15.23-25.98 19.039-5.488 1.904-8.623 6.383-9.632 13.438-0.56 3.809-0.223 8.736 1.009 14.671 1.23 5.935 3.134 11.758 5.488 17.357 2.464 5.599 5.15 10.64 8.174 15.345 3.022 4.59 6.383 7.615 9.855 8.847 4.48 2.016 8.959 2.237 13.438 1.007 6.943-2.239 13.886-3.474 20.604-3.809 5.714-0.336 11.871 0.226 18.256 1.681 6.384 1.457 11.869 4.593 16.349 9.406 7.281 7.952 11.423 16.798 12.207 26.205 0.896 9.521-0.56 17.919-4.03 25.31-2.575 5.489-3.697 9.744-3.584 12.768 0.225 3.023 1.12 5.712 2.688 7.951 2.239 3.246 5.599 6.384 10.077 9.63 4.479 3.138 9.519 6.047 15.118 8.401 5.6 2.462 11.198 4.479 16.8 6.045 5.599 1.57 10.639 2.354 15.117 2.354 3.808 0 7.278-0.895 10.527-2.688 3.135-1.791 5.599-4.59 7.165-8.398 3.472-9.632 9.631-18.142 18.479-25.31 8.848-7.279 18.701-10.863 29.564-10.863 11.198 0 21.053 3.695 29.563 10.863 8.512 7.279 14.561 15.791 18.03 25.758h0.449c0.896 2.462 2.688 4.926 5.264 7.166 2.575 2.239 5.265 3.359 8.174 3.359 4.145 0 9.072-0.671 14.447-1.902a82.287 82.287 0 0 0 15.566-5.264 105.251 105.251 0 0 0 13.662-7.503c4.257-2.688 7.278-5.377 9.183-7.952 4.143-6.384 4.704-12.878 1.455-19.263-4.255-9.296-5.598-19.038-4.365-29.342 1.231-10.303 5.71-19.373 13.438-27.436 3.584-3.809 7.839-6.608 12.767-8.175 4.929-1.569 9.968-2.688 14.896-3.138 4.926-0.56 9.854-0.335 14.669 0.449 4.815 0.896 8.735 1.68 11.981 2.688 3.584 1.23 6.722 1.901 9.632 1.901s6.272-1.006 10.078-2.91c3.809-1.903 7.279-5.152 10.527-9.632 3.248-4.479 5.935-9.518 8.174-15.118 2.24-5.598 3.921-11.087 4.817-16.572 0.895-5.489 1.12-10.193 0.446-13.999-1.343-4.594-3.694-8.288-7.389-10.862a41.87 41.87 0 0 0-5.712-3.809c-9.63-3.584-17.356-9.406-23.292-17.581-5.937-8.177-8.848-17.806-8.848-28.669 0-11.313 3.47-21.277 10.527-30.125 7.054-8.736 15.452-14.895 25.42-18.479 2.464-1.009 4.929-3.025 7.393-6.048 2.462-3.025 3.36-7.28 2.688-12.768-1.232-9.295-3.696-18.477-7.392-27.659-3.698-9.184-7.953-16.016-12.767-20.495-2.577-2.575-5.712-4.03-9.407-4.365-3.695-0.338-6.832 0.335-9.407 1.901-9.632 4.481-20.046 6.271-31.244 5.487-11.199-0.785-20.604-5.039-28.333-12.767-7.614-7.726-12.318-16.687-13.887-26.989-1.679-10.303-0.336-20.046 3.808-29.34 0.673-1.232 1.231-3.473 1.904-6.496 0.671-3.021 0.111-5.824-1.457-8.399-2.575-4.143-5.935-8.062-10.303-11.532-4.367-3.474-9.071-6.384-14.223-8.623-5.039-2.24-10.303-4.034-15.566-5.265-3.927-0.919-7.666-1.525-11.173-1.774h-4.91c-2.406 0.392-4.735 1.765-6.986 4.015-2.8 2.688-4.814 5.375-6.048 7.95-3.471 9.631-9.63 17.583-18.253 23.854-8.623 6.271-18.59 9.405-29.788 9.405-10.863 0-20.384-3.249-28.333-9.854-7.952-6.608-13.775-14.226-17.247-22.849-1.008-2.91-2.688-5.71-5.039-8.397-2.368-2.692-5.471-4.025-9.388-4.125h-1.408c-3.117 0.095-7.073 0.645-12.048 1.661-5.377 1.119-11.087 2.802-16.8 5.041-5.823 2.239-11.198 5.039-16.126 8.398-4.926 3.359-8.399 7.279-10.303 11.758-0.896 1.905-1.12 4.145-0.672 6.72 0.447 2.575 1.008 4.814 1.681 6.719 0.334 1.904 0.784 5.153 1.229 9.632 0.448 4.48 0.448 9.52 0 14.896-0.445 5.374-1.565 10.973-3.358 16.571-1.791 5.601-4.589 10.416-8.398 14.224-8.063 7.615-17.247 12.207-27.66 13.662-10.416 1.457-20.384 0.225-30.013-3.584-2.909-0.893-5.595-1.564-7.948-1.899z m97.09 78.502c5.375-12.655 12.878-23.742 22.285-33.146 9.408-9.521 20.495-16.911 33.148-22.398 12.545-5.488 26.094-8.175 40.539-8.175 14.446 0 28.109 2.687 40.876 8.175 12.768 5.487 23.966 12.991 33.372 22.398 9.407 9.404 16.799 20.491 22.285 33.146 5.489 12.654 8.177 26.205 8.177 40.652 0 14.446-2.688 27.997-8.177 40.649-5.374 12.767-12.878 23.854-22.285 33.483-9.406 9.632-20.604 17.136-33.372 22.623-12.878 5.488-26.43 8.175-40.876 8.175-14.445 0-27.884-2.686-40.539-8.175-12.653-5.487-23.74-12.991-33.148-22.623-9.407-9.629-16.797-20.827-22.285-33.483-5.487-12.652-8.174-26.204-8.174-40.649 0.001-14.447 2.8-27.997 8.174-40.652z\" ></path></symbol><symbol id=\"icon-wangzhanhoutai1\" viewBox=\"0 0 1024 1024\"><path d=\"M566.2208 880.4352V608H65.467733v44.6976c1.092267 45.994667 39.031467 83.3024 85.282134 83.3024h256.017066v106.683733h-149.333333a42.786133 42.786133 0 0 0-42.666667 42.666667 42.769067 42.769067 0 0 0 42.001067 42.6496H611.754667c-24.814933 0-45.533867-20.701867-45.533867-47.5648zM876.168533 94.856533H150.801067c-46.933333 0-85.333333 38.4-85.333334 85.333334V564.224h500.736v-168.004267c0-26.88 20.718933-47.581867 45.533867-47.581866h304.1792c24.814933 0 45.533867 20.6848 45.533867 47.581866V178.158933c-1.092267-45.994667-39.0144-83.3024-85.282134-83.3024z\" ></path><path d=\"M890.2144 425.8816H657.732267c-18.978133 0-34.798933 15.8208-34.798934 36.369067v370.107733c0 20.548267 15.8208 36.369067 34.798934 36.369067h232.482133c18.978133 0 34.798933-15.8208 34.798933-36.369067V462.250667c0-20.548267-15.8208-36.369067-34.798933-36.369067z m-117.026133 411.204267c-12.6464 0-23.722667-11.0592-23.722667-23.722667s11.0592-23.722667 23.722667-23.722667 23.722667 11.0592 23.722666 23.722667-11.076267 23.722667-23.722666 23.722667z m101.205333-99.6352c0 12.6464-7.901867 22.152533-17.408 22.152533H687.786667c-9.506133 0-17.408-9.506133-17.408-22.152533V495.4624c0-12.6464 7.901867-22.135467 17.408-22.135467h169.216c9.506133 0 17.408 9.489067 17.408 22.135467V737.450667z\" ></path></symbol></svg>',function(h){var l=(l=document.getElementsByTagName(\"script\"))[l.length-1],c=l.getAttribute(\"data-injectcss\"),l=l.getAttribute(\"data-disable-injectsvg\");if(!l){var a,t,i,v,o,z=function(l,c){c.parentNode.insertBefore(l,c)};if(c&&!h.__iconfont__svg__cssinject__){h.__iconfont__svg__cssinject__=!0;try{document.write(\"<style>.svgfont {display: inline-block;width: 1em;height: 1em;fill: currentColor;vertical-align: -0.1em;font-size:16px;}</style>\")}catch(l){console&&console.log(l)}}a=function(){var l,c=document.createElement(\"div\");c.innerHTML=h._iconfont_svg_string_2806063,(c=c.getElementsByTagName(\"svg\")[0])&&(c.setAttribute(\"aria-hidden\",\"true\"),c.style.position=\"absolute\",c.style.width=0,c.style.height=0,c.style.overflow=\"hidden\",c=c,(l=document.body).firstChild?z(c,l.firstChild):l.appendChild(c))},document.addEventListener?~[\"complete\",\"loaded\",\"interactive\"].indexOf(document.readyState)?setTimeout(a,0):(t=function(){document.removeEventListener(\"DOMContentLoaded\",t,!1),a()},document.addEventListener(\"DOMContentLoaded\",t,!1)):document.attachEvent&&(i=a,v=h.document,o=!1,d(),v.onreadystatechange=function(){\"complete\"==v.readyState&&(v.onreadystatechange=null,p())})}function p(){o||(o=!0,i())}function d(){try{v.documentElement.doScroll(\"left\")}catch(l){return void setTimeout(d,50)}p()}}(window);\r\n","window._iconfont_svg_string_4617391='<svg><symbol id=\"icon-oa-zuzhiqunzu\" viewBox=\"0 0 1024 1024\"><path d=\"M960 704h-63.616v-167.392a32 32 0 0 0-32-32H544V416h160a32 32 0 0 0 32-32V96a32 32 0 0 0-32-32H320a32 32 0 0 0-32 32v288a32 32 0 0 0 32 32h160v88.608H161.984a32 32 0 0 0-32 31.968L129.792 704H64a32 32 0 0 0-32 32v192a32 32 0 0 0 32 32h192a32 32 0 0 0 32-32v-192a32 32 0 0 0-32-32H193.792l0.16-135.392H480V704h-64a32 32 0 0 0-32 32v192a32 32 0 0 0 32 32h192a32 32 0 0 0 32-32v-192a32 32 0 0 0-32-32h-64v-135.392h288.384V704H768a32 32 0 0 0-32 32v192a32 32 0 0 0 32 32h192a32 32 0 0 0 32-32v-192a32 32 0 0 0-32-32zM352 128h320v224H352V128zM224 896H96v-128h128v128z m352 0h-128v-128h128v128z m352 0h-128v-128h128v128z\" ></path></symbol><symbol id=\"icon-oa-bumen\" viewBox=\"0 0 1024 1024\"><path d=\"M384 250V134a70 70 0 0 0-70-70H134a70 70 0 0 0-70 70v116a70 70 0 0 0 70 70h180a70 70 0 0 0 70-70z m-80-10H144v-96h160zM890 704H710a70 70 0 0 0-70 70v116a70 70 0 0 0 70 70h180a70 70 0 0 0 70-70V774a70 70 0 0 0-70-70z m-10 176H720v-96h160zM890 384H710a70 70 0 0 0-70 70v116a70 70 0 0 0 70 70h180a70 70 0 0 0 70-70V454a70 70 0 0 0-70-70z m-10 176H720v-96h160zM536 504H264v-80a40 40 0 0 0-40-40 40 40 0 0 0-40 40v432a40 40 0 0 0 40 40h312a40 40 0 0 0 40-40 40 40 0 0 0-40-40H264V584h272a40 40 0 0 0 40-40 40 40 0 0 0-40-40z\" ></path></symbol><symbol id=\"icon-oa-zhiwuguanli\" viewBox=\"0 0 1024 1024\"><path d=\"M374 398c18.2 18.2 39.3 32.4 62.9 42.4 24.5 10.3 50.4 15.6 77.1 15.6s52.6-5.2 77.1-15.6c23.6-10 44.8-24.2 62.9-42.4 18.2-18.2 32.4-39.3 42.4-62.9 10.3-24.5 15.6-50.4 15.6-77.1s-5.2-52.6-15.6-77.1c-10-23.6-24.2-44.8-42.4-62.9-18.2-18.2-39.3-32.4-62.9-42.4C566.6 65.2 540.7 60 514 60s-52.6 5.2-77.1 15.6c-23.6 10-44.8 24.2-62.9 42.4-18.2 18.2-32.4 39.3-42.4 62.9-10.4 24.5-15.6 50.4-15.6 77.1s5.2 52.6 15.6 77.1c10 23.6 24.2 44.7 42.4 62.9z m140-266c69.6 0 126 56.4 126 126s-56.4 126-126 126-126-56.4-126-126 56.4-126 126-126zM326.3 467.1c-2-6.6-7.9-11.1-14.5-11.1H220c-33.6 0-61 28.8-61 64v369c0 35.2 27.5 64 61 64h234.6c10.4 0 17.7-10.6 14.5-20.9l-142.8-465zM231 881V528h38.7l108.4 353H231zM800 456H687.4c-6.6 0-12.5 4.5-14.5 11.1l-141.4 465c-3.1 10.3 4.2 20.9 14.5 20.9h254c33.6 0 61-28.8 61-64V520c0-35.2-27.5-64-61-64z m-11 425H622.2l107.4-353H789v353zM601 554.5l-83.8-73c-3-2.6-7.4-2.6-10.4-0.1l-85.7 73.1c-2.5 2.1-3.4 5.5-2.4 8.5l84.8 264.2c2.4 7.4 12.9 7.4 15.2 0L603.4 563c1-3 0-6.4-2.4-8.5z\" ></path></symbol><symbol id=\"icon-oa-zhiji\" viewBox=\"0 0 1024 1024\"><path d=\"M500.736 579.072c-161.28 0-293.376-130.048-293.376-288.768S339.456 1.024 500.736 1.024s293.376 130.048 293.376 288.768-131.584 289.28-293.376 289.28z m0-502.272c-117.248 0-212.48 94.208-212.48 209.92s95.232 209.92 212.48 209.92 212.48-94.208 212.48-209.92-94.72-209.92-212.48-209.92z\" ></path><path d=\"M97.28 1022.976c-22.016 0-39.936-17.92-40.448-39.936 0-252.928 209.408-462.336 470.016-462.336 76.8 0 157.696 17.92 223.744 57.856 18.432 10.752 25.6 36.352 14.336 54.272-10.752 17.92-36.864 25.6-54.784 14.336-54.784-28.672-121.344-46.592-183.296-46.592-212.48 0-385.536 169.984-385.536 379.392-3.584 25.088-22.016 43.008-44.032 43.008z m568.32 0c-18.432 0-33.28-14.848-33.28-33.28v-155.648c0-18.432 14.848-33.28 32.768-33.28 18.432 0 33.28 14.848 33.28 33.28v155.648c1.024 18.432-14.336 33.28-32.768 33.28z m130.048 0c-18.432 0-33.28-14.848-33.28-33.28V752.64c0-18.432 14.848-33.28 33.28-33.28s33.28 14.848 33.28 33.28v237.056c0.512 18.432-14.848 33.28-33.28 33.28z m130.048 0c-18.432 0-33.28-14.848-33.28-33.28V660.48c0-18.432 14.848-33.28 33.28-33.28s33.28 14.848 33.28 33.28v329.216c0.512 18.432-14.848 33.28-33.28 33.28z\" ></path></symbol><symbol id=\"icon-oa-gongsi\" viewBox=\"0 0 1024 1024\"><path d=\"M731.95259994 763.37440099h-62.84359914c-18.85308003 0-31.42179956-12.56871953-31.42180105-31.42180105s12.56871953-31.42179956 31.42180105-31.42179958h62.84359914c18.85308003 0 31.42179956 12.56871953 31.42180105 31.42179958s-12.56871953 31.42179956-31.42180105 31.42180105zM417.73459981 386.31280025h-125.68719975c-18.85308003 0-31.42179956-12.56871953-31.42180105-31.42180105s12.56871953-31.42179956 31.42180105-31.42179956h125.68719975c18.85308003 0 31.42179956 12.56871953 31.42179958 31.42179956s-12.56871953 31.42179956-31.42179958 31.42180105zM417.73459981 574.84360061h-125.68719975c-18.85308003 0-31.42179956-12.56871953-31.42180105-31.42180105s12.56871953-31.42179956 31.42180105-31.42179956h125.68719975c18.85308003 0 31.42179956 12.56871953 31.42179958 31.42179956s-12.56871953 31.42179956-31.42179958 31.42180105zM417.73459981 763.37440099h-125.68719975c-18.85308003 0-31.42179956-12.56871953-31.42180105-31.42180105s12.56871953-31.42179956 31.42180105-31.42179958h125.68719975c18.85308003 0 31.42179956 12.56871953 31.42179958 31.42179958s-12.56871953 31.42179956-31.42179958 31.42180105zM731.95259994 574.84360061h-62.84359914c-18.85308003 0-31.42179956-12.56871953-31.42180105-31.42180105s12.56871953-31.42179956 31.42180105-31.42179956h62.84359914c18.85308003 0 31.42179956 12.56871953 31.42180105 31.42179956s-12.56871953 31.42179956-31.42180105 31.42180105z\" ></path><path d=\"M574.84360061 889.06160075h408.48340032c18.85308003 0 31.42179956 12.56871953 31.42179957 31.42179958s-12.56871953 31.42179956-31.42179957 31.42180102h-942.65400186c-18.85308003 0-31.42179956-12.56871953-31.42179957-31.42180102s12.56871953-31.42179956 31.42179957-31.42179958H134.93839925V298.33175909c0-56.55924012 6.2843605-81.69668065 18.85308005-100.54975923 6.2843605-18.85308003 25.13744054-37.70616007 43.99052056-43.99052056 18.85308003-12.56871953 43.99052059-18.85308003 100.54975923-18.85308005h119.40284072c56.55924012 0 75.41232014 6.2843605 94.26540019 18.85308005 18.85308003 12.56871953 37.70616007 25.13744054 50.27487962 50.2748796s12.56871953 37.70616007 12.56872099 94.26540019v43.99052057c18.85308003-12.56871953 43.99052059-18.85308003 94.26540019-18.85308002h62.84359914c50.27487962 0 75.41232014 6.2843605 94.2654002 18.85308002 18.85308003 12.56871953 37.70616007 25.13744054 50.27488107 50.2748796 12.56871953 18.85308003 18.85308003 43.99052059 18.85308005 94.2654002v314.2180016c0 18.85308003-12.56871953 31.42179956-31.42180105 31.42179957s-31.42179956-12.56871953-31.42179958-31.42179957v-314.2180016c0-37.70616007 0-50.27487962-6.28436049-62.84359914-6.2843605-12.56871953-12.56871953-18.85308003-18.85308004-18.85308003-12.56871953-6.2843605-25.13744054-6.2843605-62.84359914-6.2843605h-62.84360062c-37.70616007 0-50.27487962 0-62.84360063 6.2843605-12.56871953 6.2843605-18.85308003 12.56871953-18.85308003 18.85308003-6.2843605 12.56871953-6.2843605 25.13744054-6.28435903 62.84359914V889.06160075z m-62.84360061 0V298.33175909c0-43.99052059 0-56.55924012-6.2843605-69.12795966-6.2843605-12.56871953-12.56871953-18.85308003-18.85308004-18.85308004-18.85308003-12.56871953-31.42179956-12.56871953-75.41232014-12.56871953H298.33175909c-43.99052059 0-56.55924012 0-69.12795966 6.28435904-12.56871953 6.2843605-18.85308003 12.56871953-25.13744053 25.13744053-6.2843605 12.56871953-6.2843605 25.13744054-6.28435904 69.12795966V889.06160075h314.21800014z\" ></path></symbol><symbol id=\"icon-oa-erweima\" viewBox=\"0 0 1024 1024\"><path d=\"M433.282171 47.939849 94.944396 47.939849c-23.327288 0-42.304502 18.975167-42.304502 42.300408l0 338.341868c0 23.324218 18.977213 42.300408 42.304502 42.300408L433.282171 470.882534c23.324218 0 42.300408-18.97619 42.300408-42.300408L475.582579 90.240257C475.581556 66.915016 456.606389 47.939849 433.282171 47.939849zM438.742533 428.582125c0 3.01159-2.449795 5.461385-5.461385 5.461385L94.944396 434.04351c-3.013637 0-5.465478-2.450818-5.465478-5.461385L89.478917 90.240257c0-3.01159 2.451842-5.461385 5.465478-5.461385L433.282171 84.778872c3.01159 0 5.461385 2.449795 5.461385 5.461385L438.743556 428.582125z\" ></path><path d=\"M322.914504 173.887352l-117.608581 0c-14.733563 0-26.719548 11.985986-26.719548 26.719548l0 117.608581c0 14.735609 11.985986 26.724665 26.719548 26.724665l117.608581 0c14.735609 0 26.724665-11.989055 26.724665-26.724665l0-117.608581C349.640192 185.873338 337.651137 173.887352 322.914504 173.887352zM312.801169 308.101123l-97.374748 0 0-97.374748 97.374748 0L312.801169 308.101123z\" ></path><path d=\"M322.914504 675.606195l-117.608581 0c-14.733563 0-26.719548 11.989055-26.719548 26.724665l0 117.608581c0 14.732539 11.985986 26.719548 26.719548 26.719548l117.608581 0c14.735609 0 26.724665-11.987009 26.724665-26.719548l0-117.608581C349.640192 687.59525 337.651137 675.606195 322.914504 675.606195zM312.801169 809.819966l-97.374748 0 0-97.374748 97.374748 0L312.801169 809.819966z\" ></path><path d=\"M699.123818 344.940147l117.608581 0c14.735609 0 26.724665-11.989055 26.724665-26.724665l0-117.608581c0-14.733563-11.989055-26.719548-26.724665-26.719548l-117.608581 0c-14.732539 0-26.719548 11.985986-26.719548 26.719548l0 117.608581C672.40427 332.951091 684.391279 344.940147 699.123818 344.940147zM709.243293 210.726376l97.374748 0 0 97.374748-97.374748 0L709.243293 210.726376z\" ></path><path d=\"M433.282171 546.435277 94.944396 546.435277c-23.327288 0-42.304502 18.97619-42.304502 42.300408L52.639894 927.077553c0 23.325241 18.977213 42.301432 42.304502 42.301432L433.282171 969.378985c23.324218 0 42.300408-18.97619 42.300408-42.301432L475.582579 588.735685C475.581556 565.411467 456.606389 546.435277 433.282171 546.435277zM438.742533 927.077553c0 3.01159-2.449795 5.462408-5.461385 5.462408L94.944396 932.539962c-3.013637 0-5.465478-2.450818-5.465478-5.462408L89.478917 588.735685c0-3.010567 2.451842-5.461385 5.465478-5.461385L433.282171 583.2743c3.01159 0 5.461385 2.450818 5.461385 5.461385L438.743556 927.077553z\" ></path><path d=\"M590.849836 547.776831c-23.325241 0-42.301432 18.978237-42.301432 42.305525l0 194.649212c0 10.172687 8.246825 18.419512 18.419512 18.419512s18.419512-8.246825 18.419512-18.419512L585.387427 590.082356c0-3.013637 2.450818-5.466502 5.462408-5.466502l204.825992 0c10.172687 0 18.419512-8.246825 18.419512-18.419512s-8.246825-18.419512-18.419512-18.419512L590.849836 547.776831z\" ></path><path d=\"M588.757175 470.882534l338.341868 0c23.325241 0 42.301432-18.97619 42.301432-42.300408L969.400474 90.240257c0-23.324218-18.97619-42.300408-42.301432-42.300408L588.757175 47.939849c-23.324218 0-42.300408 18.975167-42.300408 42.300408l0 338.341868C546.456766 451.906343 565.432956 470.882534 588.757175 470.882534zM583.295789 90.240257c0-3.01159 2.450818-5.461385 5.461385-5.461385l338.341868 0c3.01159 0 5.462408 2.449795 5.462408 5.461385l0 338.341868c0 3.01159-2.450818 5.461385-5.462408 5.461385L588.757175 434.04351c-3.010567 0-5.461385-2.450818-5.461385-5.461385L583.295789 90.240257z\" ></path><path d=\"M969.676767 566.196343c0-10.172687-8.246825-18.419512-18.419512-18.419512l-67.50444 0c-10.172687 0-18.419512 8.246825-18.419512 18.419512s8.246825 18.419512 18.419512 18.419512l49.084928 0 0 71.009264L779.708158 655.625118c-10.172687 0-18.419512 8.246825-18.419512 18.419512s8.246825 18.419512 18.419512 18.419512l171.549098 0c10.172687 0 18.419512-8.246825 18.419512-18.419512 0-0.076748-0.010233-0.151449-0.011256-0.228197 0.001023-0.076748 0.011256-0.150426 0.011256-0.228197L969.676767 566.196343z\" ></path><path d=\"M630.202099 933.142689l-44.813648 0 0-51.2922c0-10.172687-8.246825-18.419512-18.419512-18.419512s-18.419512 8.246825-18.419512 18.419512l0 69.711711c0 10.172687 8.246825 18.419512 18.419512 18.419512l63.23316 0c10.172687 0 18.419512-8.246825 18.419512-18.419512S640.374786 933.142689 630.202099 933.142689z\" ></path><path d=\"M834.04981 790.359752c0-10.172687-8.246825-18.419512-18.419512-18.419512L699.257871 771.940241c-10.172687 0-18.419512 8.246825-18.419512 18.419512l0 163.013701c0 10.172687 8.246825 18.419512 18.419512 18.419512s18.419512-8.246825 18.419512-18.419512L717.677383 808.779264 815.630299 808.779264C825.802986 808.779264 834.04981 800.532439 834.04981 790.359752z\" ></path><path d=\"M951.060781 723.425294c-10.172687 0-18.419512 8.246825-18.419512 18.419512l0 194.301288L765.943666 936.146093c-10.172687 0-18.419512 8.246825-18.419512 18.419512s8.246825 18.419512 18.419512 18.419512l185.117115 0c10.172687 0 18.419512-8.246825 18.419512-18.419512L969.480292 741.844805C969.480292 731.672118 961.234491 723.425294 951.060781 723.425294z\" ></path><path d=\"M655.979182 623.620194c-10.172687 0-18.419512 8.246825-18.419512 18.419512l0 59.869552c0 10.172687 8.246825 18.419512 18.419512 18.419512s18.419512-8.246825 18.419512-18.419512l0-59.869552C674.398694 631.867018 666.151869 623.620194 655.979182 623.620194z\" ></path></symbol><symbol id=\"icon-oa-zidingyilie\" viewBox=\"0 0 1024 1024\"><path d=\"M144 256h736a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16H144a16 16 0 0 0-16 16v32c0 8.832 7.168 16 16 16z m0 192h224A16 16 0 0 0 384 432v-32A16 16 0 0 0 368 384h-224a16 16 0 0 0-16 16v32c0 8.832 7.168 16 16 16z m0 192h160A16 16 0 0 0 320 624v-32A16 16 0 0 0 304 576h-160a16 16 0 0 0-16 16v32c0 8.832 7.168 16 16 16z m0 192h224a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-224a16 16 0 0 0-16 16v32c0 8.832 7.168 16 16 16z m606.208-448a32 32 0 0 1 24.448 11.392l3.2 4.608 110.912 192a32 32 0 0 1 2.368 26.88l-2.368 5.12-110.848 192a32 32 0 0 1-27.712 16H528.512a32 32 0 0 1-24.512-11.392l-3.2-4.608-110.848-192a32 32 0 0 1-2.432-26.88l2.432-5.12 110.848-192A32 32 0 0 1 528.512 384h221.696z m-18.432 64H547.008L454.592 608 547.008 768h184.704l92.352-160.064L731.776 448zM640 512a96 96 0 1 1 0 192 96 96 0 0 1 0-192z m0 64a32 32 0 1 0 0 64 32 32 0 0 0 0-64z\" ></path></symbol><symbol id=\"icon-oa-ligangshenqing\" viewBox=\"0 0 1024 1024\"><path d=\"M682.666667 938.666667H42.666667c-25.6 0-42.666667-17.066667-42.666667-42.666667v-85.333333c0-119.466667 93.866667-213.333333 213.333333-213.333334h298.666667c119.466667 0 213.333333 93.866667 213.333333 213.333334v85.333333c0 25.6-17.066667 42.666667-42.666666 42.666667zM85.333333 853.333333h554.666667v-42.666666c0-72.533333-55.466667-128-128-128H213.333333c-72.533333 0-128 55.466667-128 128v42.666666zM362.666667 512c-119.466667 0-213.333333-93.866667-213.333334-213.333333s93.866667-213.333333 213.333334-213.333334 213.333333 93.866667 213.333333 213.333334-93.866667 213.333333-213.333333 213.333333z m0-341.333333c-72.533333 0-128 55.466667-128 128s55.466667 128 128 128 128-55.466667 128-128-55.466667-128-128-128zM981.333333 512h-256c-25.6 0-42.666667-17.066667-42.666666-42.666667s17.066667-42.666667 42.666666-42.666666h256c25.6 0 42.666667 17.066667 42.666667 42.666666s-17.066667 42.666667-42.666667 42.666667z\" ></path></symbol><symbol id=\"icon-oa-qingjiashenqing\" viewBox=\"0 0 1024 1024\"><path d=\"M802.133333 567.466667c-123.733333 0-221.866667 98.133333-221.866666 221.866666s98.133333 221.866667 221.866666 221.866667 221.866667-98.133333 221.866667-221.866667-98.133333-221.866667-221.866667-221.866666z m0 388.266666c-89.6 0-162.133333-72.533333-162.133333-162.133333s72.533333-162.133333 162.133333-162.133333 162.133333 72.533333 162.133334 162.133333-72.533333 162.133333-162.133334 162.133333z\" ></path><path d=\"M832 780.8v-102.4c0-17.066667-12.8-29.866667-29.866667-29.866667-17.066667 0-29.866667 12.8-29.866666 29.866667v115.2c0 8.533333 4.266667 12.8 8.533333 21.333333l59.733333 59.733334c4.266667 4.266667 12.8 8.533333 21.333334 8.533333s12.8-4.266667 21.333333-8.533333c12.8-12.8 12.8-29.866667 0-42.666667l-51.2-51.2z\" ></path><path d=\"M524.8 789.333333c0-72.533333 25.6-136.533333 72.533333-183.466666v-166.4h170.666667v81.066666c12.8 0 21.333333-4.266667 34.133333-4.266666 17.066667 0 34.133333 0 51.2 4.266666V226.133333c0-72.533333-55.466667-128-128-128h-85.333333v-42.666666c0-25.6-17.066667-42.666667-42.666667-42.666667s-42.666667 17.066667-42.666666 42.666667v42.666666H298.666667v-42.666666c0-25.6-17.066667-42.666667-42.666667-42.666667s-42.666667 17.066667-42.666667 42.666667v42.666666H128c-72.533333 0-128 55.466667-128 128v597.333334c0 72.533333 55.466667 128 128 128h448c-29.866667-46.933333-51.2-102.4-51.2-162.133334zM85.333333 226.133333c0-25.6 17.066667-42.666667 42.666667-42.666666h85.333333v42.666666c0 25.6 17.066667 42.666667 42.666667 42.666667s42.666667-17.066667 42.666667-42.666667v-42.666666h256v42.666666c0 25.6 17.066667 42.666667 42.666666 42.666667s42.666667-17.066667 42.666667-42.666667v-42.666666h85.333333c25.6 0 42.666667 17.066667 42.666667 42.666666v128H85.333333v-128z m170.666667 640H128c-25.6 0-42.666667-17.066667-42.666667-42.666666v-132.266667h170.666667v174.933333z m0-260.266666H85.333333v-166.4h170.666667v166.4z m256 260.266666H341.333333v-174.933333h170.666667v174.933333z m0-260.266666H341.333333v-166.4h170.666667v166.4z\" ></path></symbol><symbol id=\"icon-oa-xiaoneitiaodongshenqing\" viewBox=\"0 0 1024 1024\"><path d=\"M917.333333 435.2h-810.666666c-21.333333 0-38.4-17.066667-38.4-38.4s17.066667-38.4 38.4-38.4h810.666666c21.333333 0 38.4 17.066667 38.4 38.4s-17.066667 38.4-38.4 38.4z\" ></path><path d=\"M917.333333 448h-810.666666c-29.866667 0-51.2-21.333333-51.2-51.2s21.333333-51.2 51.2-51.2h810.666666c29.866667 0 51.2 21.333333 51.2 51.2s-21.333333 51.2-51.2 51.2z m-810.666666-76.8c-12.8 0-25.6 12.8-25.6 25.6s12.8 25.6 25.6 25.6h810.666666c12.8 0 25.6-12.8 25.6-25.6s-12.8-25.6-25.6-25.6h-810.666666z\" ></path><path d=\"M866.133333 396.8l-277.333333-277.333333c-12.8-12.8-12.8-38.4 0-55.466667 12.8-12.8 38.4-12.8 55.466667 0l302.933333 302.933333c12.8 12.8 12.8 38.4 0 55.466667\" ></path><path d=\"M955.733333 435.2l-17.066666-17.066667c8.533333-8.533333 8.533333-25.6 0-34.133333l-302.933334-302.933333c-8.533333-8.533333-25.6-8.533333-34.133333 0s-8.533333 25.6 0 34.133333l277.333333 277.333333-25.6 12.8L576 128c-21.333333-21.333333-21.333333-51.2 0-72.533333 17.066667-17.066667 51.2-17.066667 72.533333 0l302.933334 302.933333c21.333333 21.333333 21.333333 55.466667 4.266666 76.8z\" ></path><path d=\"M106.666667 588.8h810.666666c21.333333 0 38.4 17.066667 38.4 38.4s-17.066667 38.4-38.4 38.4h-810.666666c-21.333333 0-38.4-17.066667-38.4-38.4s17.066667-38.4 38.4-38.4z\" ></path><path d=\"M917.333333 678.4h-810.666666c-29.866667 0-51.2-21.333333-51.2-51.2s21.333333-51.2 51.2-51.2h810.666666c29.866667 0 51.2 21.333333 51.2 51.2s-21.333333 51.2-51.2 51.2z m-810.666666-76.8c-12.8 0-25.6 12.8-25.6 25.6s12.8 25.6 25.6 25.6h810.666666c12.8 0 25.6-12.8 25.6-25.6s-12.8-25.6-25.6-25.6h-810.666666z\" ></path><path d=\"M157.866667 627.2l277.333333 277.333333c12.8 12.8 12.8 38.4 0 55.466667-12.8 12.8-38.4 12.8-55.466667 0l-302.933333-302.933333c-12.8-12.8-12.8-38.4 0-55.466667\" ></path><path d=\"M409.6 981.333333c-12.8 0-25.6-4.266667-34.133333-12.8l-302.933334-302.933333c-21.333333-21.333333-21.333333-51.2 0-72.533333l17.066667 17.066666c-8.533333 8.533333-8.533333 25.6 0 34.133334l302.933333 302.933333c8.533333 8.533333 25.6 8.533333 34.133334 0 8.533333-8.533333 8.533333-25.6 0-34.133333l-277.333334-277.333334 21.333334-17.066666 277.333333 277.333333c21.333333 21.333333 21.333333 51.2 0 72.533333-12.8 8.533333-25.6 12.8-38.4 12.8z\" ></path></symbol><symbol id=\"icon-oa-zhaopinguanli\" viewBox=\"0 0 1028 1024\"><path d=\"M674.133333 934.4H42.666667c-25.6 0-42.666667-17.066667-42.666667-42.666667v-85.333333c0-115.2 93.866667-213.333333 213.333333-213.333333h294.4c115.2 0 213.333333 93.866667 213.333334 213.333333v85.333333c-4.266667 25.6-21.333333 42.666667-46.933334 42.666667zM85.333333 849.066667h546.133334v-42.666667c0-68.266667-55.466667-128-128-128H213.333333c-68.266667 0-128 55.466667-128 128v42.666667zM358.4 512c-115.2 0-213.333333-93.866667-213.333333-213.333333s93.866667-213.333333 213.333333-213.333334c115.2 0 213.333333 93.866667 213.333333 213.333334s-93.866667 213.333333-213.333333 213.333333z m0-337.066667c-68.266667 0-128 55.466667-128 128 0 68.266667 55.466667 128 128 128s128-55.466667 128-128-55.466667-128-128-128zM1019.733333 430.933333c0-8.533333-8.533333-12.8-17.066666-12.8l-25.6-4.266666 17.066666-21.333334c4.266667-4.266667 4.266667-12.8 0-21.333333 0 0-8.533333-12.8-25.6-29.866667-17.066667-17.066667-29.866667-21.333333-29.866666-21.333333-8.533333-4.266667-12.8-4.266667-21.333334 0l-21.333333 17.066667v-29.866667c0-8.533333-8.533333-12.8-12.8-17.066667-4.266667 0-17.066667-4.266667-38.4-4.266666s-34.133333 4.266667-38.4 4.266666c-8.533333 0-12.8 8.533333-12.8 17.066667l-4.266667 25.6-21.333333-12.8c-4.266667-4.266667-12.8-4.266667-21.333333 0-4.266667 4.266667-17.066667 8.533333-29.866667 25.6-17.066667 17.066667-25.6 29.866667-25.6 29.866667-4.266667 4.266667-4.266667 12.8 0 21.333333l17.066667 21.333333H682.666667c-8.533333 0-12.8 4.266667-17.066667 12.8 0 4.266667-4.266667 17.066667-4.266667 38.4s4.266667 34.133333 4.266667 38.4c0 8.533333 8.533333 12.8 17.066667 12.8l25.6 4.266667-17.066667 21.333333c-4.266667 4.266667-4.266667 12.8 0 21.333334 0 0 8.533333 12.8 25.6 29.866666 17.066667 17.066667 29.866667 25.6 29.866667 25.6 4.266667 4.266667 12.8 4.266667 21.333333 0l21.333333-17.066666 4.266667 25.6c0 8.533333 4.266667 12.8 12.8 17.066666 0 0 17.066667 4.266667 38.4 4.266667 25.6 0 38.4-4.266667 38.4-4.266667 8.533333 0 12.8-8.533333 12.8-17.066666l4.266667-25.6 21.333333 17.066666c4.266667 4.266667 12.8 4.266667 21.333333 0 0 0 12.8-8.533333 29.866667-25.6 17.066667-17.066667 21.333333-25.6 25.6-29.866666 4.266667-8.533333 4.266667-12.8 0-21.333334l-17.066667-21.333333 25.6-4.266667c8.533333 0 12.8-4.266667 17.066667-12.8 0-4.266667 4.266667-17.066667 4.266667-38.4-4.266667-12.8-4.266667-25.6-8.533334-38.4z m-273.066666 110.933334c4.266667-4.266667 4.266667-12.8 0-21.333334 0-4.266667-4.266667-8.533333-4.266667-8.533333s0-4.266667-4.266667-8.533333c-4.266667-8.533333-8.533333-12.8-12.8-12.8l-21.333333-4.266667V469.333333v-17.066666l21.333333-4.266667c8.533333 0 12.8-4.266667 17.066667-12.8 0-4.266667 4.266667-8.533333 4.266667-8.533333s0-4.266667 4.266666-8.533334 4.266667-12.8 0-21.333333l-12.8-17.066667 12.8-12.8 12.8-12.8 17.066667 12.8c4.266667 4.266667 12.8 4.266667 21.333333 0 4.266667 0 8.533333-4.266667 8.533334-4.266666s4.266667 0 8.533333-4.266667c8.533333-4.266667 12.8-8.533333 12.8-17.066667l4.266667-21.333333h34.133333l4.266667 21.333333c0 8.533333 4.266667 12.8 12.8 17.066667 4.266667 0 8.533333 4.266667 8.533333 4.266667s4.266667 4.266667 8.533333 4.266666c4.266667 4.266667 12.8 4.266667 21.333334 0l17.066666-12.8 12.8 12.8 12.8 12.8-12.8 17.066667c-4.266667 4.266667-4.266667 12.8 0 21.333333 0 4.266667 4.266667 8.533333 4.266667 8.533334s0 4.266667 4.266667 8.533333c4.266667 8.533333 8.533333 12.8 12.8 12.8l21.333333 4.266667v34.133333l-21.333333 4.266667c-8.533333 0-12.8 4.266667-12.8 12.8 0 4.266667-4.266667 8.533333-4.266667 8.533333s-4.266667 4.266667-4.266667 8.533333c-4.266667 4.266667-4.266667 12.8 0 21.333334l12.8 17.066666-12.8 12.8-12.8 12.8-17.066666-12.8c-4.266667-4.266667-12.8-4.266667-21.333334 0-4.266667 0-8.533333 4.266667-8.533333 4.266667s-4.266667 0-8.533333 4.266667c-8.533333 4.266667-12.8 8.533333-12.8 17.066666l-4.266667 21.333334h-34.133333l-4.266667-21.333334c0-8.533333-4.266667-12.8-12.8-17.066666-4.266667 0-8.533333-4.266667-8.533333-4.266667s-4.266667-4.266667-8.533334-4.266667c-4.266667-4.266667-12.8-4.266667-21.333333 0l-17.066667 12.8-12.8-12.8-12.8-12.8 8.533334-17.066666z m264.533333-110.933334zM789.333333 341.333333z\" ></path><path d=\"M844.8 563.2c51.2 0 93.866667-42.666667 93.866667-93.866667s-42.666667-93.866667-93.866667-93.866666-93.866667 42.666667-93.866667 93.866666 42.666667 93.866667 93.866667 93.866667zM789.333333 469.333333c0-29.866667 25.6-51.2 51.2-51.2s55.466667 21.333333 55.466667 51.2-25.6 51.2-51.2 51.2-55.466667-21.333333-55.466667-51.2z\" ></path></symbol><symbol id=\"icon-oa-zhaopinwangzhan\" viewBox=\"0 0 1024 1024\"><path d=\"M682.666667 938.666667H42.666667c-25.6 0-42.666667-17.066667-42.666667-42.666667v-85.333333c0-119.466667 93.866667-213.333333 213.333333-213.333334h298.666667c119.466667 0 213.333333 93.866667 213.333333 213.333334v85.333333c0 25.6-17.066667 42.666667-42.666666 42.666667zM85.333333 853.333333h554.666667v-42.666666c0-72.533333-55.466667-128-128-128H213.333333c-72.533333 0-128 55.466667-128 128v42.666666zM362.666667 512c-119.466667 0-213.333333-93.866667-213.333334-213.333333s93.866667-213.333333 213.333334-213.333334 213.333333 93.866667 213.333333 213.333334-93.866667 213.333333-213.333333 213.333333z m0-341.333333c-72.533333 0-128 55.466667-128 128s55.466667 128 128 128 128-55.466667 128-128-55.466667-128-128-128zM853.333333 640c-25.6 0-42.666667-17.066667-42.666666-42.666667V341.333333c0-25.6 17.066667-42.666667 42.666666-42.666666s42.666667 17.066667 42.666667 42.666666v256c0 25.6-17.066667 42.666667-42.666667 42.666667z\" ></path><path d=\"M981.333333 512h-256c-25.6 0-42.666667-17.066667-42.666666-42.666667s17.066667-42.666667 42.666666-42.666666h256c25.6 0 42.666667 17.066667 42.666667 42.666666s-17.066667 42.666667-42.666667 42.666667z\" ></path></symbol><symbol id=\"icon-oa-renqun\" viewBox=\"0 0 1229 1024\"><path d=\"M570.365088 585.913247a296.467113 296.467113 0 0 0 161.120466-262.988421 302.262813 302.262813 0 0 0-604.389257 0 296.535298 296.535298 0 0 0 161.120466 263.056606A424.245257 424.245257 0 0 0 0 985.407455a38.592545 38.592545 0 0 0 77.18509 0 352.037651 352.037651 0 0 1 704.075302 0 38.66073 38.66073 0 0 0 77.253275 0 425.199843 425.199843 0 0 0-288.216764-399.494208zM204.554126 322.924826a225.009539 225.009539 0 1 1 224.259507 221.736672A223.850398 223.850398 0 0 1 204.554126 322.924826z m0 0l754.054693 226.236863a296.330744 296.330744 0 0 0 141.687824-251.806129 300.62638 300.62638 0 0 0-301.921889-297.762623 37.978883 37.978883 0 1 0 0 75.957766 221.736673 221.736673 0 1 1 0 443.200606 38.115252 38.115252 0 1 0 0 76.162319 349.719371 349.719371 0 0 1 352.03765 346.991983 38.592545 38.592545 0 0 0 77.18509 0 423.972518 423.972518 0 0 0-268.784121-392.948476z m0 0\" ></path></symbol></svg>',function(h){var c=(c=document.getElementsByTagName(\"script\"))[c.length-1],a=c.getAttribute(\"data-injectcss\"),c=c.getAttribute(\"data-disable-injectsvg\");if(!c){var t,s,l,o,e,i=function(c,a){a.parentNode.insertBefore(c,a)};if(a&&!h.__iconfont__svg__cssinject__){h.__iconfont__svg__cssinject__=!0;try{document.write(\"<style>.svgfont {display: inline-block;width: 1em;height: 1em;fill: currentColor;vertical-align: -0.1em;font-size:16px;}</style>\")}catch(c){console&&console.log(c)}}t=function(){var c,a=document.createElement(\"div\");a.innerHTML=h._iconfont_svg_string_4617391,(a=a.getElementsByTagName(\"svg\")[0])&&(a.setAttribute(\"aria-hidden\",\"true\"),a.style.position=\"absolute\",a.style.width=0,a.style.height=0,a.style.overflow=\"hidden\",a=a,(c=document.body).firstChild?i(a,c.firstChild):c.appendChild(a))},document.addEventListener?~[\"complete\",\"loaded\",\"interactive\"].indexOf(document.readyState)?setTimeout(t,0):(s=function(){document.removeEventListener(\"DOMContentLoaded\",s,!1),t()},document.addEventListener(\"DOMContentLoaded\",s,!1)):document.attachEvent&&(l=t,o=h.document,e=!1,v(),o.onreadystatechange=function(){\"complete\"==o.readyState&&(o.onreadystatechange=null,n())})}function n(){e||(e=!0,l())}function v(){try{o.documentElement.doScroll(\"left\")}catch(c){return void setTimeout(v,50)}n()}}(window);","export const DATA_MODEL_NAME = \"DATA_MODEL_NAME\";\r\n","export const IP_PATTERN =\r\n /^(1\\d\\d|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\.(1\\d\\d|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\.(1\\d\\d|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\.(1\\d\\d|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)$/;\r\n\r\nexport const EMAIL_PATTERN = /^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}$/;\r\n","export enum RouteType {\r\n ROUTE = \"0\",\r\n LINK = \"1\",\r\n}\r\n","export enum MenuType {\r\n Container = \"1\",\r\n Menu = \"2\",\r\n SystemSettings = \"3\",\r\n}\r\n","export enum RegionLevel {\r\n Province = 1,\r\n City = 2,\r\n District = 3,\r\n Town = 4,\r\n}\r\n","export enum LoginLogType {\r\n SUCCESS = 1,\r\n FAILURE = 2,\r\n LOCK = 3,\r\n}\r\n","import { defineAsyncComponent } from \"vue\";\r\nimport { Components } from \"@maketribe/dm\";\r\n\r\nexport class DataTableComponents extends Components {\r\n constructor() {\r\n super();\r\n\r\n this.registerComponent({\r\n name: \"MKColumnAction\",\r\n title: \"操作\",\r\n component: defineAsyncComponent(\r\n async () =>\r\n import(\r\n \"../../components/data-model/data-table/components/column-action\"\r\n )\r\n ),\r\n });\r\n\r\n this.registerComponent({\r\n name: \"MKColumnText\",\r\n title: \"文本\",\r\n component: defineAsyncComponent(\r\n async () =>\r\n import(\r\n \"../../components/data-model/data-table/components/column-text\"\r\n )\r\n ),\r\n });\r\n\r\n this.registerComponent({\r\n name: \"MKColumnObjectMappingText\",\r\n title: \"对象映射文本\",\r\n component: defineAsyncComponent(\r\n async () =>\r\n import(\r\n \"../../components/data-model/data-table/components/column-object-mapping-text\"\r\n )\r\n ),\r\n });\r\n\r\n this.registerComponent({\r\n name: \"MKColumnImage\",\r\n title: \"图片\",\r\n component: defineAsyncComponent(\r\n async () =>\r\n import(\r\n \"../../components/data-model/data-table/components/column-image\"\r\n )\r\n ),\r\n });\r\n\r\n this.registerComponent({\r\n name: \"MKColumnSelect\",\r\n title: \"行选择\",\r\n component: defineAsyncComponent(\r\n async () =>\r\n import(\r\n \"../../components/data-model/data-table/components/column-select\"\r\n )\r\n ),\r\n });\r\n\r\n this.registerComponent({\r\n name: \"MKColumnJson\",\r\n title: \"JSON\",\r\n component: defineAsyncComponent(\r\n async () =>\r\n import(\r\n \"../../components/data-model/data-table/components/column-json\"\r\n )\r\n ),\r\n });\r\n\r\n this.registerComponent({\r\n name: \"MKColumnDate\",\r\n title: \"日期时间\",\r\n component: defineAsyncComponent(\r\n async () =>\r\n import(\r\n \"../../components/data-model/data-table/components/column-date\"\r\n )\r\n ),\r\n });\r\n\r\n this.registerComponent({\r\n name: \"MKColumnSwitch\",\r\n title: \"开关\",\r\n component: defineAsyncComponent(\r\n async () =>\r\n import(\r\n \"../../components/data-model/data-table/components/column-switch\"\r\n )\r\n ),\r\n });\r\n\r\n this.registerComponent({\r\n name: \"MKColumnTag\",\r\n title: \"标签\",\r\n component: defineAsyncComponent(\r\n async () =>\r\n import(\"../../components/data-model/data-table/components/column-tag\")\r\n ),\r\n });\r\n\r\n this.registerComponent({\r\n name: \"MKColumnLink\",\r\n title: \"链接\",\r\n component: defineAsyncComponent(\r\n async () =>\r\n import(\r\n \"../../components/data-model/data-table/components/column-link\"\r\n )\r\n ),\r\n });\r\n\r\n this.registerComponent({\r\n name: \"MKColumnSort\",\r\n title: \"拖拽排序\",\r\n component: defineAsyncComponent(\r\n async () =>\r\n import(\r\n \"../../components/data-model/data-table/components/column-sort\"\r\n )\r\n ),\r\n });\r\n\r\n this.registerComponent({\r\n name: \"MKColumnIcon\",\r\n title: \"图标\",\r\n component: defineAsyncComponent(\r\n async () =>\r\n import(\r\n \"../../components/data-model/data-table/components/column-icon\"\r\n )\r\n ),\r\n });\r\n }\r\n}\r\n","import { defineAsyncComponent } from \"vue\";\r\nimport { Components } from \"@maketribe/dm\";\r\n\r\nexport class DataTableHeaderComponents extends Components {\r\n constructor() {\r\n super();\r\n\r\n this.registerComponent({\r\n name: \"MKButton\",\r\n title: \"按钮\",\r\n component: defineAsyncComponent(\r\n async () => import(\"../../components/basic/button\")\r\n ),\r\n });\r\n\r\n this.registerComponent({\r\n name: \"MKClassifySearch\",\r\n title: \"分类筛选\",\r\n component: defineAsyncComponent(\r\n async () =>\r\n import(\r\n \"../../components/data-model/data-table/views/table-view/classify-search\"\r\n )\r\n ),\r\n });\r\n\r\n this.registerComponent({\r\n name: \"MKBatchOpt\",\r\n title: \"批量操作\",\r\n component: defineAsyncComponent(\r\n async () =>\r\n import(\r\n \"../../components/data-model/data-table/components/header-components/batch-opt\"\r\n )\r\n ),\r\n });\r\n\r\n this.registerComponent({\r\n name: \"MKTableFilter\",\r\n title: \"筛选\",\r\n component: defineAsyncComponent(\r\n async () =>\r\n import(\r\n \"../../components/data-model/data-table/components/header-components/table-filter\"\r\n )\r\n ),\r\n });\r\n }\r\n}\r\n","import { defineAsyncComponent } from \"vue\";\r\nimport { ElInput, ElInputNumber } from \"element-plus\";\r\nimport { Components } from \"@maketribe/dm\";\r\n\r\nexport class DataFormComponents extends Components {\r\n constructor() {\r\n super();\r\n\r\n this.registerComponent({\r\n name: \"MKFormInput\",\r\n title: \"输入框\",\r\n component: ElInput,\r\n });\r\n\r\n this.registerComponent({\r\n name: \"MKFormInputNumber\",\r\n title: \"数值输入框\",\r\n component: ElInputNumber,\r\n });\r\n\r\n this.registerComponent({\r\n name: \"MKFormDatePicker\",\r\n title: \"时间选择组件\",\r\n component: defineAsyncComponent(\r\n () => import(\"../../components/basic/date-picker\")\r\n ),\r\n });\r\n\r\n this.registerComponent({\r\n name: \"MKFormDataSelect\",\r\n title: \"数据源下拉框\",\r\n component: defineAsyncComponent(\r\n () => import(\"../../components/basic/data-select\")\r\n ),\r\n });\r\n\r\n // this.registerComponent({\r\n // name: \"MKFormIconSelect\",\r\n // title: \"图标选择\",\r\n // component: defineAsyncComponent(\r\n // () => import(\"../../components/basic/icon-select\")\r\n // ),\r\n // });\r\n\r\n this.registerComponent({\r\n name: \"MKFormRadioBox\",\r\n title: \"单选框\",\r\n component: defineAsyncComponent(\r\n () => import(\"../../components/basic/radio\")\r\n ),\r\n });\r\n\r\n this.registerComponent({\r\n name: \"MKFormImageUpload\",\r\n title: \"图片上传\",\r\n component: defineAsyncComponent(\r\n async () =>\r\n (await import(\"../../components/basic/upload-file\")).MKUploadImage\r\n ),\r\n });\r\n\r\n this.registerComponent({\r\n name: \"MKFormFileUpload\",\r\n title: \"文件上传\",\r\n component: defineAsyncComponent(\r\n async () =>\r\n (await import(\"../../components/basic/upload-file\")).MKUploadFileUi\r\n ),\r\n });\r\n\r\n \r\n this.registerComponent({\r\n name: \"MKFormVideoUpload\",\r\n title: \"视频选择\",\r\n component: defineAsyncComponent(\r\n async () =>\r\n (await import(\"../../components/basic/upload-file\")).MKUploadVideo\r\n ),\r\n });\r\n\r\n this.registerComponent({\r\n name: \"MKFormDataTableSelect\",\r\n title: \"数据表选择\",\r\n component: defineAsyncComponent(\r\n () => import(\"../../components/basic/data-table-select\")\r\n ),\r\n });\r\n\r\n this.registerComponent({\r\n name: \"MKFormDetail\",\r\n title: \"明细\",\r\n component: defineAsyncComponent(\r\n () =>\r\n import(\"../../components/data-model/data-form/components/form-detail\")\r\n ),\r\n });\r\n\r\n this.registerComponent({\r\n name: \"MKCodeEditor\",\r\n title: \"代码编辑器\",\r\n component: defineAsyncComponent(\r\n () => import(\"../../components/basic/code-editor\")\r\n ),\r\n });\r\n\r\n this.registerComponent({\r\n name: \"MKJsonEditor\",\r\n title: \"JSON编辑器\",\r\n component: defineAsyncComponent(\r\n () => import(\"../../components/basic/json-editor\")\r\n ),\r\n });\r\n\r\n this.registerComponent({\r\n name: \"MKDataTreeSelect\",\r\n title: \"树选择器\",\r\n component: defineAsyncComponent(\r\n () => import(\"../../components/basic/data-tree-select\")\r\n ),\r\n });\r\n\r\n this.registerComponent({\r\n name: \"MKResourceSelectInput\",\r\n title: \"资源选择输入框\",\r\n component: defineAsyncComponent(\r\n () => import(\"../../components/business/resource-select/resource-select-input\")\r\n ),\r\n });\r\n\r\n\r\n }\r\n}\r\n","import { defineAsyncComponent } from \"vue\";\r\nimport { Component, Components, Operator } from \"@maketribe/dm\";\r\n\r\nexport type DataFilterComponent = Component & {\r\n defaultOperator: Operator;\r\n};\r\n\r\nexport class DataFilterComponents extends Components<DataFilterComponent> {\r\n constructor() {\r\n super();\r\n\r\n this.registerComponent({\r\n name: \"MKConditionInput\",\r\n title: \"输入框\",\r\n defaultOperator: Operator.CONTAIN,\r\n component: defineAsyncComponent(\r\n () =>\r\n import(\r\n \"../../components/data-model/data-filter-form/components/condition-input\"\r\n )\r\n ),\r\n });\r\n\r\n this.registerComponent({\r\n name: \"MKConditionNumber\",\r\n title: \"数值\",\r\n defaultOperator: Operator.EQUAL,\r\n component: defineAsyncComponent(\r\n () =>\r\n import(\r\n \"../../components/data-model/data-filter-form/components/condition-number\"\r\n )\r\n ),\r\n });\r\n\r\n this.registerComponent({\r\n name: \"MKConditionSelect\",\r\n title: \"下拉框\",\r\n defaultOperator: Operator.IN,\r\n component: defineAsyncComponent(\r\n () =>\r\n import(\r\n \"../../components/data-model/data-filter-form/components/condition-select\"\r\n )\r\n ),\r\n });\r\n\r\n this.registerComponent({\r\n name: \"MKConditionDate\",\r\n title: \"日期\",\r\n defaultOperator: Operator.BETWEEN,\r\n component: defineAsyncComponent(\r\n () =>\r\n import(\r\n \"../../components/data-model/data-filter-form/components/condition-date\"\r\n )\r\n ),\r\n });\r\n }\r\n}\r\n","import { defineAsyncComponent } from \"vue\";\r\nimport { ElInput, ElInputNumber } from \"element-plus\";\r\nimport { Components } from \"@maketribe/dm\";\r\n\r\nexport class ConfigComponents extends Components {\r\n constructor() {\r\n super();\r\n\r\n this.registerComponent({\r\n name: \"MKConfigInput\",\r\n title: \"输入框\",\r\n component: ElInput,\r\n defaultProps: {\r\n type: \"textarea\",\r\n },\r\n });\r\n\r\n this.registerComponent({\r\n name: \"MKConfigInputNumber\",\r\n title: \"数值输入框\",\r\n component: ElInputNumber,\r\n });\r\n\r\n this.registerComponent({\r\n name: \"MKConfigJsonEditor\",\r\n title: \"JSON\",\r\n component: defineAsyncComponent(\r\n () => import(\"../../components/basic/json-editor\")\r\n ),\r\n });\r\n }\r\n}\r\n","import { PermissionPoint } from \"../PermissionPointManager\";\r\nimport type { Route } from \"../Router\";\r\n\r\ninterface MenuNodeOptions {\r\n id: string;\r\n route?: Route | null;\r\n iconName: string;\r\n title: string;\r\n permissionPoints: PermissionPoint[];\r\n children: MenuNode[];\r\n type: string;\r\n parent?: MenuNode | null;\r\n}\r\n\r\nexport class MenuNode {\r\n id: string;\r\n\r\n iconName: string;\r\n title: string;\r\n permissionPoints: PermissionPoint[];\r\n route: Route | null;\r\n type: string;\r\n children: MenuNode[];\r\n parent: MenuNode | null;\r\n\r\n constructor(options: MenuNodeOptions) {\r\n const { id, children, route, iconName, title, permissionPoints, type } =\r\n options;\r\n\r\n this.id = id;\r\n this.route = route ?? null;\r\n this.iconName = iconName;\r\n this.type = type;\r\n this.title = title;\r\n this.children = children;\r\n this.parent = options.parent ?? null;\r\n this.permissionPoints = permissionPoints;\r\n }\r\n\r\n getMenuNodePath(): MenuNode[] {\r\n const path: MenuNode[] = [];\r\n\r\n let menuNode: MenuNode | null = this;\r\n\r\n while (menuNode) {\r\n path.unshift(menuNode);\r\n\r\n menuNode = menuNode.parent;\r\n }\r\n\r\n return path;\r\n }\r\n}\r\n","import { Disposable, Event } from \"@maketribe/utils\";\r\nimport { PermissionPointManager } from \"../PermissionPointManager\";\r\nimport { Router } from \"../Router\";\r\nimport { MenuNode } from \"./MenuNode\";\r\nimport type { Route } from \"../Router\";\r\n\r\nexport type PermissionPointDefine = {\r\n id: string;\r\n menuId: string;\r\n key: string;\r\n name: string;\r\n};\r\n\r\nexport type MenuData = {\r\n id: string;\r\n title: string | null;\r\n iconName: string | null;\r\n pid: string | null;\r\n routeId: string;\r\n sort: string;\r\n type: number;\r\n routes: Route[];\r\n permissionPoints: PermissionPointDefine[];\r\n};\r\n\r\nexport class Menu extends Disposable {\r\n rootMenus: MenuNode[] = [];\r\n\r\n _currentMenu: MenuNode | null = null;\r\n\r\n isCollapsed: boolean = false;\r\n\r\n isVisible: boolean = true;\r\n\r\n permissionPointManager: PermissionPointManager;\r\n\r\n router: Router;\r\n\r\n currentMenuChangeEvent: Event<{ currentMenu: MenuNode | null }> =\r\n this.register(new Event());\r\n\r\n constructor(permissionPointManager: PermissionPointManager, router: Router) {\r\n super();\r\n this.permissionPointManager = permissionPointManager;\r\n this.router = router;\r\n }\r\n\r\n setMenus(menus: MenuData[]) {\r\n const menuNodes = menus\r\n .sort((menu1, menu2) => {\r\n const sort1 = parseInt(menu1.sort) || 0;\r\n const sort2 = parseInt(menu2.sort) || 0;\r\n\r\n return sort2 - sort1;\r\n })\r\n .map((menuInfo) => {\r\n const route = this.router.getRouteByID(menuInfo.routeId);\r\n\r\n const permissionPoints =\r\n this.permissionPointManager.getPermissionPointsByMenuID(menuInfo.id);\r\n\r\n return new MenuNode({\r\n id: menuInfo.id,\r\n route,\r\n type: menuInfo.type.toString(),\r\n iconName: menuInfo.iconName || \"\",\r\n title: menuInfo.title || \"\",\r\n permissionPoints,\r\n children: [],\r\n });\r\n });\r\n\r\n const rootMenuNodes: MenuNode[] = [];\r\n\r\n for (let i = 0, len = menuNodes.length; i < len; i++) {\r\n const menuNodeInfo = menus[i];\r\n const menuNode = menuNodes[i];\r\n\r\n menuNode.iconName = menuNode.iconName || \"default-menu\";\r\n\r\n if (!menuNodeInfo.pid) {\r\n rootMenuNodes.push(menuNode);\r\n }\r\n\r\n for (const route of this.router.getRoutesByMenuID(menuNode.id)) {\r\n route.iconName = route.iconName || menuNode.iconName;\r\n }\r\n\r\n for (let j = 0; j < len; j++) {\r\n const menuNodeInfoInner = menus[j];\r\n const menuNodeInner = menuNodes[j];\r\n\r\n if (menuNodeInfoInner.pid === menuNodeInfo.id) {\r\n menuNode.children.push(menuNodeInner);\r\n menuNodeInner.parent = menuNode;\r\n }\r\n }\r\n }\r\n\r\n this.rootMenus = rootMenuNodes;\r\n }\r\n\r\n findMenuNodeByID(id: MenuNode[\"id\"]): MenuNode | null {\r\n if (!id) {\r\n return null;\r\n }\r\n\r\n let list = this.rootMenus.slice();\r\n\r\n for (let i = 0; i < list.length; i++) {\r\n const node = list[i];\r\n\r\n if (node.id === id) {\r\n return node;\r\n }\r\n\r\n list = list.concat(node.children);\r\n }\r\n\r\n return null;\r\n }\r\n\r\n async setCurrentMenuNode(node: MenuNode | null) {\r\n this._currentMenu = node;\r\n\r\n this.currentMenuChangeEvent.emit({ currentMenu: node });\r\n\r\n return true;\r\n }\r\n\r\n getCurrentMenuNode() {\r\n return this._currentMenu;\r\n }\r\n\r\n getFirstLeafMenuNode(menus: MenuNode[] = this.rootMenus) {\r\n function _getFirstLeafMenuNode(menus: MenuNode[]): MenuNode | null {\r\n if (!menus.length) {\r\n return null;\r\n }\r\n\r\n return _getFirstLeafMenuNode(menus[0].children) || menus[0];\r\n }\r\n\r\n return _getFirstLeafMenuNode(menus);\r\n }\r\n\r\n getMenuNodeByID(id: string): MenuNode | null {\r\n let nodes = this.rootMenus.slice();\r\n\r\n for (let i = 0; i < nodes.length; i++) {\r\n const node = nodes[i];\r\n\r\n if (node.id === id) {\r\n return node;\r\n }\r\n\r\n nodes = nodes.concat(node.children);\r\n }\r\n\r\n return null;\r\n }\r\n}\r\n","import { Disposable, Event } from \"@maketribe/utils\";\r\nimport type { Route } from \"../Router\";\r\nimport type { Tabs } from \"./Tabs\";\r\n\r\nexport interface TabOptions {\r\n id: string;\r\n\r\n title: string;\r\n\r\n affix?: boolean;\r\n\r\n realRoute: any;\r\n\r\n route: Route;\r\n\r\n tabs: Tabs;\r\n}\r\n\r\nexport class Tab extends Disposable {\r\n id: string;\r\n\r\n title: string;\r\n\r\n affix: boolean;\r\n\r\n realRoute: any;\r\n\r\n route: Route;\r\n\r\n beforeCloseEvent: Event = this.register(new Event());\r\n\r\n refreshEvent: Event = this.register(new Event());\r\n\r\n beforeSwitchEvent: Event = this.register(new Event());\r\n\r\n tabs: Tabs;\r\n\r\n constructor(options: TabOptions) {\r\n super();\r\n this.id = options.id;\r\n this.title = options.title;\r\n this.affix = options.affix ?? false;\r\n this.realRoute = options.realRoute;\r\n this.route = options.route;\r\n this.tabs = options.tabs;\r\n }\r\n\r\n getTitle() {\r\n return this.title;\r\n }\r\n\r\n getID() {\r\n return this.id;\r\n }\r\n\r\n close() {\r\n this.tabs.closeTab(this);\r\n }\r\n}\r\n","import { Disposable, Event } from \"@maketribe/utils\";\r\nimport { Tab, TabOptions } from \"./Tab\";\r\nimport type { UserSession } from \"../UserSession\";\r\n\r\nexport class Tabs extends Disposable {\r\n userSession: UserSession;\r\n\r\n _tabs: Tab[] = [];\r\n _currentTab: Tab | null = null;\r\n\r\n currentTabChangeEvent: Event<{ currentTab: Tab | null }> = this.register(\r\n new Event()\r\n );\r\n tabsChangeEvent: Event<{ tabs: Tab[] }> = this.register(new Event());\r\n\r\n constructor(userSession: UserSession) {\r\n super();\r\n this.userSession = userSession;\r\n }\r\n\r\n init() {\r\n const getAffixRoutes = () => {\r\n let routes = this.userSession.vueRouter.getRoutes().slice();\r\n\r\n const affixRoutes: any[] = [];\r\n\r\n for (let i = 0; i < routes.length; i++) {\r\n const route = routes[i];\r\n\r\n if (route.meta?.affix === true) {\r\n affixRoutes.push(route);\r\n }\r\n }\r\n\r\n return affixRoutes;\r\n };\r\n\r\n const getAffixTabs = () => {\r\n return getAffixRoutes()\r\n .map((affixRoute) => {\r\n const route = this.userSession.router.getRouteByName(\r\n affixRoute.name as string\r\n );\r\n\r\n if (!route) {\r\n return null;\r\n }\r\n\r\n return this.createTab({\r\n id: affixRoute.path,\r\n title: route.title,\r\n affix: true,\r\n route: route,\r\n realRoute: affixRoute,\r\n });\r\n })\r\n .filter(Boolean) as Tab[];\r\n };\r\n\r\n this.setTabs(getAffixTabs());\r\n }\r\n\r\n getTabs() {\r\n return this._tabs;\r\n }\r\n\r\n getCurrentTab() {\r\n return this._currentTab;\r\n }\r\n\r\n setCurrentTab(tab: Tab | null) {\r\n if (this._currentTab === tab) {\r\n return;\r\n }\r\n\r\n this._currentTab = tab;\r\n\r\n this.currentTabChangeEvent.emit({ currentTab: tab });\r\n }\r\n\r\n getTabByID(id: string) {\r\n return this._tabs.find((tab) => tab.id === id) ?? null;\r\n }\r\n\r\n createTab(options: Omit<TabOptions, \"tabs\">) {\r\n return this.register(new Tab({ ...options, tabs: this }));\r\n }\r\n\r\n setTabs(tabs: Tab[]): void {\r\n this._tabs = tabs;\r\n\r\n this.tabsChangeEvent.emit({ tabs });\r\n }\r\n\r\n switchTab(tab: Tab | null) {\r\n // TODO 暂时用不到Tab\r\n\r\n // if (\r\n // this.getCurrentTab()?.realRoute?.fullPath === tab?.realRoute?.fullPath\r\n // ) {\r\n // return;\r\n // }\r\n\r\n this.setCurrentTab(tab);\r\n return;\r\n\r\n // if (!tab) {\r\n // this.setCurrentTab(null);\r\n // return;\r\n // }\r\n\r\n // let _tab = this._tabs.find((item) => item.getID() === tab.getID());\r\n\r\n // if (!_tab) {\r\n // this.setTabs([...this.getTabs(), tab]);\r\n // }\r\n\r\n // this.setCurrentTab(tab);\r\n }\r\n\r\n findTabByID(id: Tab[\"id\"]) {\r\n return this.getTabs().find((tab) => tab.id === id) ?? null;\r\n }\r\n\r\n async closeTab(tab: Tab) {\r\n if ((await tab.beforeCloseEvent.emitAsync()) === false) {\r\n return;\r\n }\r\n\r\n const tabItemList = this.getTabs().slice();\r\n\r\n if (this.getCurrentTab()?.getID() !== tab.getID()) {\r\n this.setTabs(tabItemList.filter((item) => item.getID() !== tab.getID()));\r\n\r\n return;\r\n }\r\n\r\n const index = tabItemList.findIndex((item) => item.getID() === tab.getID());\r\n\r\n if (index === -1) {\r\n return;\r\n }\r\n\r\n const deleteTab = tabItemList[index];\r\n deleteTab.dispose();\r\n\r\n tabItemList.splice(index, 1);\r\n this.setTabs(tabItemList);\r\n\r\n this.setCurrentTab(this._tabs[this._tabs.length - 1] ?? null);\r\n }\r\n\r\n closeAll() {\r\n const affixTabs = this.getTabs().filter((tab) => tab.affix);\r\n\r\n if (affixTabs.length) {\r\n this.setTabs(affixTabs);\r\n this.setCurrentTab(affixTabs[0]);\r\n return;\r\n }\r\n\r\n this.setTabs([this.getCurrentTab() ?? this.getTabs()[0]]);\r\n this.setCurrentTab(this.getTabs()[0]);\r\n }\r\n\r\n closeOther() {\r\n const currentTab = this.getCurrentTab();\r\n\r\n if (!currentTab) {\r\n return;\r\n }\r\n\r\n const affixTabs = this.getTabs().filter((tab) => tab.affix);\r\n\r\n if (affixTabs.length) {\r\n if (affixTabs.find((item) => item.getID() === currentTab.getID())) {\r\n this.setTabs(affixTabs);\r\n } else {\r\n this.setTabs([...affixTabs, currentTab]);\r\n }\r\n\r\n return;\r\n }\r\n\r\n this.setTabs([currentTab]);\r\n }\r\n}\r\n","import { DataTable, DataForm, DataTree } from \"@maketribe/dm\";\r\n\r\nexport type DataTableClass = {\r\n new (options: any): DataTable;\r\n};\r\n\r\nexport type DataFormClass = {\r\n new (options: any): DataForm;\r\n};\r\n\r\nexport type DataTreeClass = {\r\n new (options: any): DataTree;\r\n};\r\n\r\n/**\r\n * 数据模型缓存\r\n *\r\n * 如果需要让自定义数据模型可以交给该类缓存,需要完成以下约束\r\n * - 可以只传递name就可以创建出对应的类的实例\r\n */\r\nexport class DataModelDefines {\r\n static instance = new DataModelDefines();\r\n\r\n private _dataTableDefines: Map<string, DataTableClass>;\r\n private _dataFormDefines: Map<string, DataFormClass>;\r\n private _dataTreeDefines: Map<string, DataTreeClass>;\r\n\r\n constructor() {\r\n this._dataTableDefines = new Map();\r\n this._dataFormDefines = new Map();\r\n this._dataTreeDefines = new Map();\r\n }\r\n\r\n getDataTable(name: string): DataTable | null {\r\n const DataTableDefine = this._dataTableDefines.get(name);\r\n\r\n return DataTableDefine ? new DataTableDefine({}) : null;\r\n }\r\n\r\n getDataForm(name: string): DataForm | null {\r\n const DataFormDefine = this._dataFormDefines.get(name);\r\n\r\n return DataFormDefine ? new DataFormDefine({}) : null;\r\n }\r\n\r\n getDataTree(name: string): DataTree | null {\r\n const DataTreeDefine = this._dataTreeDefines.get(name);\r\n\r\n return DataTreeDefine ? new DataTreeDefine({}) : null;\r\n }\r\n\r\n registerDataTableDefine<T extends DataTableClass>(\r\n name: string,\r\n DataTableDefine: T\r\n ) {\r\n this._dataTableDefines.set(name, DataTableDefine);\r\n }\r\n\r\n registerDataFormDefine<T extends DataFormClass>(\r\n name: string,\r\n dataFormDefine: T\r\n ) {\r\n this._dataFormDefines.set(name, dataFormDefine);\r\n }\r\n\r\n registerDataTreeDefine<T extends DataTreeClass>(\r\n name: string,\r\n dataTreeDefine: T\r\n ) {\r\n this._dataTreeDefines.set(name, dataTreeDefine);\r\n }\r\n}\r\n","import type { MSAppClient } from \"./MSAppClient\";\r\nimport { PermissionPoint } from \"./PermissionPointManager\";\r\n\r\nexport type Role = {\r\n id: string;\r\n name: string;\r\n desc: string;\r\n};\r\n\r\nexport interface MemberInfo {\r\n id: number;\r\n account: string;\r\n email: string;\r\n nickName: string;\r\n avatar: string;\r\n isSuper: number;\r\n errorCount: string;\r\n errorDatetime: string;\r\n isLock: number;\r\n unlockDatetime: string;\r\n}\r\n\r\nexport class UserInfo {\r\n id: number;\r\n account: string;\r\n email: string;\r\n nickName: string;\r\n avatar: string;\r\n isLocked: boolean;\r\n isSuper: boolean;\r\n payload: any;\r\n\r\n roles: Role[];\r\n permissionPoints: PermissionPoint[];\r\n\r\n constructor(\r\n msAppClient: MSAppClient,\r\n payload: MemberInfo,\r\n roles: Role[],\r\n permissionPoints: PermissionPoint[]\r\n ) {\r\n this.id = payload.id;\r\n this.avatar = payload.avatar;\r\n this.account = payload.account;\r\n this.email = payload.email;\r\n this.nickName = payload.nickName;\r\n this.isLocked = payload.isLock === 1;\r\n this.isSuper = payload.isSuper === 1;\r\n this.roles = roles;\r\n this.permissionPoints = permissionPoints;\r\n try {\r\n this.avatar = payload.avatar\r\n ? payload.avatar.startsWith(\"http\")\r\n ? payload.avatar\r\n : new URL(payload.avatar, msAppClient.origin).toString()\r\n : \"\";\r\n } catch (e) {\r\n this.avatar = \"\";\r\n }\r\n\r\n this.payload = payload;\r\n }\r\n\r\n hasRole(name: Role[\"name\"]): boolean {\r\n return !!this.roles.find((role) => role.name === name);\r\n }\r\n\r\n hasPermissionPoint(key: PermissionPoint[\"key\"]) {\r\n return !!this.permissionPoints.find(\r\n (permissionPoint) => permissionPoint.key === key\r\n );\r\n }\r\n}\r\n","import { Disposable, createDisposable } from \"@maketribe/utils\";\r\nimport type { UserSession } from \"./UserSession\";\r\nimport { RouteType } from \"../constants\";\r\n\r\nconst NORMALIZE_ROUTE_NAME_REG = /^dv\\/([^/]+)\\/([^/]+)(\\/.+)?$/;\r\n\r\nexport type Route = {\r\n id: string;\r\n name: string;\r\n title: string;\r\n type: RouteType;\r\n menuId: string;\r\n iconName: string;\r\n route: string;\r\n};\r\n\r\nexport class Router extends Disposable {\r\n userSession: UserSession;\r\n\r\n routes: Route[] = [];\r\n\r\n constructor(userSession: UserSession) {\r\n super();\r\n\r\n this.userSession = userSession;\r\n }\r\n\r\n setRoutes(routes: Route[]) {\r\n this.routes = routes;\r\n }\r\n\r\n init() {\r\n const vueRouter = this.userSession.vueRouter;\r\n const vueRoutes = vueRouter.getRoutes();\r\n\r\n // 给有权限访问的页面,注册默认页面\r\n const defaultPageRoutes = this.routes.filter(\r\n (route) => !vueRoutes.find((item) => item.name === route.name)\r\n );\r\n\r\n for (const defaultPageRoute of defaultPageRoutes) {\r\n const match = defaultPageRoute.name.match(NORMALIZE_ROUTE_NAME_REG);\r\n\r\n if (match) {\r\n const name = match[1];\r\n const action = match[2];\r\n\r\n switch (action) {\r\n case \"single\":\r\n const [listType, type] = match[3].slice(1).split(\"/\");\r\n\r\n switch (listType) {\r\n case \"list\":\r\n switch (type) {\r\n case \"normal\":\r\n vueRouter.addRoute(\"mk-ms-layout\", {\r\n name: defaultPageRoute.name,\r\n path: defaultPageRoute.route || `/dv/${name}`,\r\n component: () =>\r\n import(\r\n \"../page/index/dv/default/single/list/normal.vue\"\r\n ),\r\n meta: { name },\r\n });\r\n break;\r\n case \"dialog\":\r\n vueRouter.addRoute(\"mk-ms-layout\", {\r\n name: defaultPageRoute.name,\r\n path: defaultPageRoute.route || `/dv/${name}`,\r\n component: () =>\r\n import(\r\n \"../page/index/dv/default/single/list/dialog.vue\"\r\n ),\r\n meta: { name },\r\n });\r\n break;\r\n }\r\n\r\n break;\r\n case \"tree\":\r\n switch (type) {\r\n case \"dialog\":\r\n vueRouter.addRoute(\"mk-ms-layout\", {\r\n name: defaultPageRoute.name,\r\n path: defaultPageRoute.route || `/dv/${name}`,\r\n component: () =>\r\n import(\r\n \"../page/index/dv/default/single/tree/dialog.vue\"\r\n ),\r\n meta: { name },\r\n });\r\n break;\r\n }\r\n break;\r\n case \"table-tree\":\r\n switch (type) {\r\n case \"dialog\":\r\n vueRouter.addRoute(\"mk-ms-layout\", {\r\n name: defaultPageRoute.name,\r\n path: defaultPageRoute.route || `/dv/${name}`,\r\n component: () =>\r\n import(\r\n \"../page/index/dv/default/single/table-tree/dialog.vue\"\r\n ),\r\n meta: { name },\r\n });\r\n break;\r\n case \"normal\":\r\n vueRouter.addRoute(\"mk-ms-layout\", {\r\n name: defaultPageRoute.name,\r\n path: defaultPageRoute.route || `/dv/${name}`,\r\n component: () =>\r\n import(\r\n \"../page/index/dv/default/single/table-tree/normal.vue\"\r\n ),\r\n meta: { name },\r\n });\r\n }\r\n }\r\n\r\n break;\r\n case \"list\":\r\n vueRouter.addRoute(\"mk-ms-layout\", {\r\n name: defaultPageRoute.name,\r\n path: defaultPageRoute.route || `/dv/${name}`,\r\n component: () => import(\"../page/index/dv/default/table.vue\"),\r\n meta: { name },\r\n });\r\n break;\r\n case \"edit\":\r\n vueRouter.addRoute(\"mk-ms-layout\", {\r\n name: defaultPageRoute.name,\r\n path: defaultPageRoute.route || `/dv/${name}/edit/:id?`,\r\n component: () => import(\"../page/index/dv/default/edit.vue\"),\r\n meta: { name },\r\n });\r\n break;\r\n // case \"add\":\r\n // vueRouter.addRoute(\"mk-ms-layout\", {\r\n // name: defaultPageRoute.name,\r\n // path: defaultPageRoute.route || `/dv/${name}/add`,\r\n // component: () => import(\"../page/index/dv/default/add.vue\"),\r\n // meta: { name },\r\n // });\r\n // break;\r\n }\r\n }\r\n }\r\n\r\n this.register(\r\n createDisposable(() => {\r\n for (const defaultPageRoute of defaultPageRoutes) {\r\n vueRouter.removeRoute(defaultPageRoute.name);\r\n }\r\n })\r\n );\r\n }\r\n\r\n getRouteByName(name: string): Route | null {\r\n return this.routes.find((route) => route.name === name) ?? null;\r\n }\r\n\r\n getRouteByID(id: string): Route | null {\r\n return this.routes.find((route) => route.id === id) ?? null;\r\n }\r\n\r\n getRoutesByMenuID(menuId: Route[\"menuId\"]): Route[] {\r\n return this.routes.filter((route) => route.menuId === menuId);\r\n }\r\n}\r\n","export interface PermissionPoint {\r\n id: number;\r\n menuId: string;\r\n key: string;\r\n name: string;\r\n}\r\n\r\nexport class PermissionPointManager {\r\n permissionPoints: PermissionPoint[];\r\n\r\n constructor() {\r\n this.permissionPoints = [];\r\n }\r\n\r\n setPermissionPoints(permissionPoints: PermissionPoint[]) {\r\n this.permissionPoints = permissionPoints;\r\n }\r\n\r\n init() {}\r\n\r\n getPermissionPointsByMenuID(menuID: string): PermissionPoint[] {\r\n return this.permissionPoints.filter(\r\n (permissionPoint) => permissionPoint.menuId === menuID\r\n );\r\n }\r\n}\r\n","import { Disposable, Event, createDisposable, md5 } from \"@maketribe/utils\";\r\nimport { MemberInfo, UserInfo } from \"./UserInfo\";\r\nimport { Menu } from \"./menu\";\r\nimport { Tabs } from \"./tabs\";\r\nimport { Router, Route } from \"./Router\";\r\nimport type { Role } from \"./UserInfo\";\r\nimport {\r\n PermissionPoint,\r\n PermissionPointManager,\r\n} from \"./PermissionPointManager\";\r\nimport type { MSAppClient, LoginResult } from \"./MSAppClient\";\r\nimport { MenuData } from \"./menu\";\r\nimport { ACCESS_TOKEN_HEADER, AUTHORIZATION, AUTHORIZATION_PREFIX, R, X_ACCESS_TOKEN_HEADER, X_AUTHORIZATION } from \"@maketribe/request\";\r\n\r\nexport type UserSessionOptions = {\r\n msAppClient: MSAppClient;\r\n accessToken?: string;\r\n xAccessToken?: string;\r\n};\r\n\r\nlet uid = 0;\r\n\r\nexport class UserSession extends Disposable {\r\n id = uid++;\r\n\r\n msAppClient: MSAppClient;\r\n\r\n vueRouter: MSAppClient[\"vueRouter\"];\r\n\r\n userInfo: UserInfo | null;\r\n\r\n menu: Menu;\r\n\r\n tabs: Tabs;\r\n\r\n router: Router;\r\n\r\n permissionPointManager: PermissionPointManager;\r\n\r\n accessToken: string;\r\n\r\n xAccessToken: string;\r\n\r\n beforeInitRouterEvent: Event = this.register(new Event());\r\n\r\n locking: boolean = false;\r\n\r\n lockingChangeEvent: Event<{ locking: boolean }> = this.register(new Event());\r\n\r\n constructor(options: UserSessionOptions) {\r\n super();\r\n\r\n this.msAppClient = options.msAppClient;\r\n\r\n this.vueRouter = this.msAppClient.vueRouter;\r\n\r\n this.userInfo = null;\r\n\r\n this.router = this.register(new Router(this));\r\n this.tabs = this.register(new Tabs(this));\r\n this.permissionPointManager = new PermissionPointManager();\r\n this.menu = this.register(\r\n new Menu(this.permissionPointManager, this.router)\r\n );\r\n\r\n this.accessToken =\r\n options.accessToken ?? localStorage.getItem(ACCESS_TOKEN_HEADER) ?? \"\";\r\n this.xAccessToken =\r\n options.xAccessToken ?? localStorage.getItem(X_ACCESS_TOKEN_HEADER) ?? \"\";\r\n }\r\n\r\n async init() {\r\n type BasicInfoResult = {\r\n member: MemberInfo;\r\n menus: MenuData[];\r\n routes: Route[];\r\n roles: Role[];\r\n permissionPoints: PermissionPoint[];\r\n };\r\n\r\n const msAppClient = this.msAppClient;\r\n\r\n const httpRequest = msAppClient.httpRequest;\r\n\r\n const beforeRequestInterceptorID = httpRequest\r\n .getInterceptors()\r\n .request.use((config) => {\r\n if (this.accessToken) {\r\n config.headers[\r\n AUTHORIZATION\r\n ] = `${AUTHORIZATION_PREFIX} ${this.accessToken}`;\r\n }\r\n\r\n if (this.xAccessToken) {\r\n config.headers[\r\n X_AUTHORIZATION\r\n ] = `${AUTHORIZATION_PREFIX} ${this.xAccessToken}`;\r\n }\r\n\r\n return config;\r\n });\r\n\r\n const beforeResponseInterceptorID = httpRequest\r\n .getInterceptors()\r\n .response.use((config) => {\r\n if (config.data.code === 401) {\r\n this.accessToken = this.xAccessToken = \"\";\r\n } else {\r\n this.accessToken =\r\n config.headers[ACCESS_TOKEN_HEADER] || this.accessToken;\r\n\r\n this.xAccessToken =\r\n config.headers[X_ACCESS_TOKEN_HEADER] || this.xAccessToken;\r\n }\r\n\r\n localStorage.setItem(ACCESS_TOKEN_HEADER, this.accessToken);\r\n\r\n localStorage.setItem(X_ACCESS_TOKEN_HEADER, this.xAccessToken);\r\n\r\n return config;\r\n });\r\n\r\n this.register(\r\n createDisposable(() => {\r\n httpRequest.getInterceptors().request.eject(beforeRequestInterceptorID);\r\n httpRequest\r\n .getInterceptors()\r\n .request.eject(beforeResponseInterceptorID);\r\n })\r\n );\r\n\r\n try {\r\n let response = await httpRequest.request<R<BasicInfoResult>>({\r\n url: \"/ms/app/login-info\",\r\n method: \"GET\",\r\n });\r\n\r\n if (!response.data || response.data.code !== 200) {\r\n return response;\r\n }\r\n\r\n const BasicInfoResult = response.data!;\r\n\r\n const { member, routes, menus, permissionPoints, roles } =\r\n BasicInfoResult.data!;\r\n\r\n this.userInfo = new UserInfo(\r\n msAppClient,\r\n member,\r\n roles,\r\n permissionPoints\r\n );\r\n\r\n this.router.setRoutes(routes);\r\n this.permissionPointManager.setPermissionPoints(permissionPoints);\r\n this.menu.setMenus(menus);\r\n\r\n this.tabs.init();\r\n\r\n this.beforeInitRouterEvent.emit();\r\n this.router.init();\r\n\r\n return response;\r\n } catch (e) {\r\n httpRequest.getInterceptors().request.eject(beforeRequestInterceptorID);\r\n httpRequest.getInterceptors().request.eject(beforeResponseInterceptorID);\r\n }\r\n }\r\n\r\n lock() {\r\n this.locking = true;\r\n\r\n this.lockingChangeEvent.emit({ locking: this.locking });\r\n }\r\n\r\n async unlock(password: string, code: string) {\r\n const response = await this.msAppClient.httpRequest.request<R<LoginResult>>(\r\n {\r\n url: \"/ms/ms-login/login\",\r\n method: \"POST\",\r\n data: {\r\n account: this.userInfo!.account,\r\n password: md5(`mkbl#${password}`),\r\n vCode: code,\r\n },\r\n }\r\n );\r\n\r\n if (response.data.code !== 200) {\r\n return response;\r\n }\r\n\r\n this.accessToken = response.headers[ACCESS_TOKEN_HEADER];\r\n this.xAccessToken = response.headers[X_ACCESS_TOKEN_HEADER];\r\n\r\n this.locking = false;\r\n\r\n this.lockingChangeEvent.emit({ locking: this.locking });\r\n\r\n return response;\r\n }\r\n\r\n public dispose(): void {\r\n this.msAppClient.httpRequest.get(\"/ms/app/logout\").finally(() => {\r\n localStorage.removeItem(ACCESS_TOKEN_HEADER);\r\n localStorage.removeItem(X_ACCESS_TOKEN_HEADER);\r\n });\r\n\r\n super.dispose();\r\n }\r\n}\r\n","// 该文件为系统默认配置,请勿修改!!!\r\n\r\nimport type { RecursiveRequired, Settings } from \"./typings/global\"\r\n\r\nconst globalSettingsDefault: RecursiveRequired<Settings.all> = {\r\n app: {\r\n colorScheme: 'light',\r\n enableMournMode: false,\r\n enableColorAmblyopiaMode: false,\r\n enablePermission: false,\r\n enableProgress: true,\r\n enableDynamicTitle: false,\r\n routeBaseOn: 'frontend',\r\n },\r\n home: {\r\n enable: true,\r\n title: '主页',\r\n fullPath: '/',\r\n },\r\n layout: {\r\n enableMobileAdaptation: false,\r\n },\r\n menu: {\r\n baseOn: 'frontend',\r\n mode: 'side',\r\n switchMainMenuAndPageJump: false,\r\n subMenuUniqueOpened: true,\r\n subMenuCollapse: false,\r\n enableSubMenuCollapseButton: false,\r\n enableHotkeys: false,\r\n },\r\n topbar: {\r\n mode: 'static',\r\n },\r\n tabbar: {\r\n enable: false,\r\n enableIcon: false,\r\n enableHotkeys: false,\r\n },\r\n toolbar: {\r\n breadcrumb: true,\r\n navSearch: true,\r\n fullscreen: false,\r\n pageReload: false,\r\n colorScheme: false,\r\n },\r\n mainPage: {\r\n enableHotkeys: true,\r\n },\r\n navSearch: {\r\n enableHotkeys: true,\r\n },\r\n copyright: {\r\n enable: false,\r\n dates: '',\r\n company: '',\r\n website: '',\r\n beian: '',\r\n },\r\n}\r\n\r\nexport default globalSettingsDefault\r\n","import { defaultsDeep } from 'lodash-es'\r\nimport type { RecursiveRequired, Settings } from \"./typings/global\";\r\nimport settingsDefault from './settings.default'\r\n\r\nconst globalSettings: Settings.all = {\r\n // 请在此处编写或粘贴配置代码\r\n toolbar: {\r\n breadcrumb: false,\r\n navSearch: false\r\n }\r\n}\r\n\r\nexport default defaultsDeep(globalSettings, settingsDefault) as RecursiveRequired<Settings.all>\r\n","import { defaultsDeep } from \"lodash-es\";\r\nimport type { RouteMeta } from \"vue-router\";\r\nimport type { Settings } from \"../../types/global\";\r\nimport settingsDefault from \"../../settings\";\r\nimport { defineStore } from \"pinia\";\r\nimport { ref, watch } from \"vue\";\r\n\r\nconst useSettingsStore = defineStore(\r\n // 唯一ID\r\n \"settings\",\r\n () => {\r\n const settings = ref(settingsDefault);\r\n\r\n const prefersColorScheme = window.matchMedia(\r\n \"(prefers-color-scheme: dark)\"\r\n );\r\n const currentColorScheme = ref<Exclude<Settings.app[\"colorScheme\"], \"\">>();\r\n watch(\r\n () => settings.value.app.colorScheme,\r\n (val) => {\r\n if (val === \"\") {\r\n prefersColorScheme.addEventListener(\"change\", updateTheme);\r\n } else {\r\n prefersColorScheme.removeEventListener(\"change\", updateTheme);\r\n }\r\n },\r\n {\r\n immediate: true,\r\n }\r\n );\r\n watch(() => settings.value.app.colorScheme, updateTheme, {\r\n immediate: true,\r\n });\r\n function updateTheme() {\r\n let colorScheme = settings.value.app.colorScheme;\r\n if (colorScheme === \"\") {\r\n colorScheme = prefersColorScheme.matches ? \"dark\" : \"light\";\r\n }\r\n currentColorScheme.value = colorScheme;\r\n switch (colorScheme) {\r\n case \"light\":\r\n document.documentElement.classList.remove(\"dark\");\r\n break;\r\n case \"dark\":\r\n document.documentElement.classList.add(\"dark\");\r\n break;\r\n }\r\n }\r\n watch(\r\n [\r\n () => settings.value.app.enableMournMode,\r\n () => settings.value.app.enableColorAmblyopiaMode,\r\n ],\r\n (val) => {\r\n document.documentElement.style.removeProperty(\"filter\");\r\n if (val[0] && val[1]) {\r\n document.documentElement.style.setProperty(\r\n \"filter\",\r\n \"grayscale(100%) invert(80%)\"\r\n );\r\n } else if (val[0]) {\r\n document.documentElement.style.setProperty(\r\n \"filter\",\r\n \"grayscale(100%)\"\r\n );\r\n } else if (val[1]) {\r\n document.documentElement.style.setProperty(\"filter\", \"invert(80%)\");\r\n }\r\n },\r\n {\r\n immediate: true,\r\n }\r\n );\r\n\r\n watch(\r\n () => settings.value.menu.mode,\r\n (val) => {\r\n document.body.setAttribute(\"data-menu-mode\", val);\r\n },\r\n {\r\n immediate: true,\r\n }\r\n );\r\n\r\n // 操作系统\r\n const os = ref<\"mac\" | \"windows\" | \"linux\" | \"other\">(\"other\");\r\n const agent = navigator.userAgent.toLowerCase();\r\n switch (true) {\r\n case agent.includes(\"mac os\"):\r\n os.value = \"mac\";\r\n break;\r\n case agent.includes(\"windows\"):\r\n os.value = \"windows\";\r\n break;\r\n case agent.includes(\"linux\"):\r\n os.value = \"linux\";\r\n break;\r\n }\r\n\r\n // 页面标题\r\n const title = ref<RouteMeta[\"title\"]>();\r\n // 记录页面标题\r\n function setTitle(_title: RouteMeta[\"title\"]) {\r\n title.value = _title;\r\n }\r\n\r\n // 显示模式\r\n const mode = ref<\"pc\" | \"mobile\">(\"pc\");\r\n // 设置显示模式\r\n function setMode(width: number) {\r\n if (settings.value.layout.enableMobileAdaptation) {\r\n // 先判断 UA 是否为移动端设备(手机&平板)\r\n if (\r\n /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(\r\n navigator.userAgent\r\n )\r\n ) {\r\n mode.value = \"mobile\";\r\n } else {\r\n // 如果是桌面设备,则根据页面宽度判断是否需要切换为移动端展示\r\n mode.value = width < 1024 ? \"mobile\" : \"pc\";\r\n }\r\n } else {\r\n mode.value = \"pc\";\r\n }\r\n }\r\n\r\n // 切换侧边栏导航展开/收起\r\n function toggleSidebarCollapse() {\r\n settings.value.menu.subMenuCollapse =\r\n !settings.value.menu.subMenuCollapse;\r\n }\r\n // 次导航是否收起(用于记录 pc 模式下最后的状态)\r\n const subMenuCollapseLastStatus = ref(settingsDefault.menu.subMenuCollapse);\r\n watch(\r\n () => settings.value.menu.subMenuCollapse,\r\n (val) => {\r\n if (mode.value === \"pc\") {\r\n subMenuCollapseLastStatus.value = val;\r\n }\r\n }\r\n );\r\n watch(\r\n mode,\r\n (val) => {\r\n switch (val) {\r\n case \"pc\":\r\n settings.value.menu.subMenuCollapse =\r\n subMenuCollapseLastStatus.value;\r\n break;\r\n case \"mobile\":\r\n settings.value.menu.subMenuCollapse = true;\r\n break;\r\n }\r\n document.body.setAttribute(\"data-mode\", val);\r\n },\r\n {\r\n immediate: true,\r\n }\r\n );\r\n\r\n // 设置主题颜色模式\r\n function setColorScheme(color: Required<Settings.app>[\"colorScheme\"]) {\r\n settings.value.app.colorScheme = color;\r\n }\r\n\r\n // 更新应用配置\r\n function updateSettings(data: Settings.all, fromBase = false) {\r\n settings.value = defaultsDeep(\r\n data,\r\n fromBase ? settingsDefault : settings.value\r\n );\r\n }\r\n\r\n return {\r\n settings,\r\n currentColorScheme,\r\n os,\r\n title,\r\n setTitle,\r\n mode,\r\n setMode,\r\n subMenuCollapseLastStatus,\r\n toggleSidebarCollapse,\r\n setColorScheme,\r\n updateSettings,\r\n };\r\n }\r\n);\r\n\r\nexport default useSettingsStore;\r\n","import path from 'path-browserify'\r\n\r\nexport function resolveRoutePath(basePath?: string, routePath?: string) {\r\n return basePath ? path.resolve(basePath, routePath ?? '') : routePath ?? ''\r\n}\r\n","import {cloneDeep} from 'lodash-es'\r\nimport type {RouteRecordRaw} from 'vue-router'\r\nimport useSettingsStore from './settings'\r\nimport {resolveRoutePath} from '../../utils/index'\r\nimport type {Menu, Route} from \"../../types/global\";\r\nimport {defineStore} from 'pinia'\r\nimport {computed, ref} from 'vue'\r\nimport {MenuNode, MSAppClient} from \"../../core\";\r\n\r\nconst useMenuStore = defineStore(\r\n // 唯一ID\r\n 'menu',\r\n () => {\r\n const settingsStore = useSettingsStore()\r\n // const userStore = useUserStore()\r\n // const routeStore = useRouteStore()\r\n\r\n const menu = MSAppClient.instance!.userSession!.menu\r\n\r\n // const filesystemMenusRaw = ref<Menu.recordMainRaw[]>([])\r\n const filesystemMenusRaw = ref<Menu.recordMainRaw[]>([])\r\n const actived = ref(0)\r\n\r\n function convertMenu(menuNodes: MenuNode[]) {\r\n const returnMenus: Menu.recordMainRaw[] = []\r\n\r\n for (const menuNode of menuNodes) {\r\n const menuItem: Menu.recordMainRaw = {\r\n meta: {\r\n title: menuNode.title,\r\n icon: menuNode.iconName,\r\n auth: \"\",\r\n },\r\n name: menuNode.route?.name,\r\n children: [],\r\n }\r\n\r\n menuItem.children = convertMenuRecursive(menuNode.children)\r\n returnMenus.push(menuItem)\r\n }\r\n\r\n return returnMenus;\r\n }\r\n\r\n function convertMenuRecursive(menuNodes: MenuNode[], basePath = '') {\r\n const returnMenus: Menu.recordRaw[] = []\r\n\r\n for (const menuNode of menuNodes) {\r\n const menuItem: Menu.recordRaw = {\r\n // path: resolveRoutePath(basePath, item.path),\r\n path: \"\",\r\n name: menuNode.route?.name,\r\n meta: {\r\n title: menuNode.title,\r\n icon: menuNode.iconName,\r\n defaultOpened: false,\r\n auth: '',\r\n menu: true,\r\n link: '',\r\n },\r\n }\r\n if (menuNode.children) {\r\n menuItem.children = convertMenuRecursive(menuNode.children, menuItem.path)\r\n }\r\n returnMenus.push(menuItem)\r\n }\r\n\r\n return returnMenus;\r\n }\r\n\r\n // 将原始路由转换成导航菜单\r\n function convertRouteToMenu(routes: Route.recordMainRaw[]): Menu.recordMainRaw[] {\r\n const returnMenus: Menu.recordMainRaw[] = []\r\n routes.forEach((item) => {\r\n if (item.children.length > 0) {\r\n if (settingsStore.settings.menu.mode === 'single') {\r\n returnMenus.length === 0 && returnMenus.push({\r\n meta: {},\r\n children: [],\r\n })\r\n returnMenus[0].children.push(...convertRouteToMenuRecursive(item.children))\r\n } else {\r\n const menuItem: Menu.recordMainRaw = {\r\n meta: {\r\n title: item?.meta?.title,\r\n icon: item?.meta?.icon,\r\n auth: item?.meta?.auth,\r\n },\r\n children: [],\r\n }\r\n menuItem.children = convertRouteToMenuRecursive(item.children)\r\n returnMenus.push(menuItem)\r\n }\r\n }\r\n })\r\n return returnMenus\r\n }\r\n\r\n function convertRouteToMenuRecursive(routes: RouteRecordRaw[], basePath = ''): Menu.recordRaw[] {\r\n const returnMenus: Menu.recordRaw[] = []\r\n routes.forEach((item) => {\r\n const menuItem: Menu.recordRaw = {\r\n path: resolveRoutePath(basePath, item.path),\r\n meta: {\r\n title: item?.meta?.title,\r\n icon: item?.meta?.icon,\r\n defaultOpened: item?.meta?.defaultOpened,\r\n auth: item?.meta?.auth,\r\n menu: item?.meta?.menu,\r\n link: item?.meta?.link,\r\n },\r\n }\r\n if (item.children) {\r\n menuItem.children = convertRouteToMenuRecursive(item.children, menuItem.path)\r\n }\r\n returnMenus.push(menuItem)\r\n })\r\n return returnMenus\r\n }\r\n\r\n // 完整导航数据\r\n const allMenus = computed(() => {\r\n let returnMenus: Menu.recordMainRaw[] = []\r\n\r\n if (settingsStore.settings.app.routeBaseOn !== 'filesystem') {\r\n // returnMenus = convertRouteToMenu(routeStore.routesRaw)\r\n returnMenus = convertMenu(menu.rootMenus);\r\n } else {\r\n returnMenus = filesystemMenusRaw.value\r\n }\r\n // 如果权限功能开启,则需要对导航数据进行筛选过滤\r\n // if (settingsStore.settings.app.enablePermission) {\r\n // returnMenus = filterAsyncMenus(returnMenus, userStore.permissions)\r\n // }\r\n return returnMenus\r\n })\r\n // 次导航数据\r\n const sidebarMenus = computed<Menu.recordMainRaw['children']>(() => {\r\n return allMenus.value.length > 0\r\n ? allMenus.value.length > 1\r\n ? allMenus.value[actived.value].children\r\n : allMenus.value[0].children\r\n : []\r\n })\r\n // 次导航第一层最深路径\r\n const sidebarMenusFirstDeepestPath = computed(() => {\r\n return sidebarMenus.value.length > 0\r\n ? getDeepestPath(sidebarMenus.value[0])\r\n : settingsStore.settings.home.fullPath\r\n })\r\n\r\n function getDeepestPath(menu: Menu.recordRaw, rootPath = '') {\r\n let retnPath = ''\r\n if (menu.children) {\r\n const item = menu.children.find(item => item.meta?.menu !== false)\r\n if (item) {\r\n retnPath = getDeepestPath(item, resolveRoutePath(rootPath, menu.path))\r\n } else {\r\n retnPath = getDeepestPath(menu.children[0], resolveRoutePath(rootPath, menu.path))\r\n }\r\n } else {\r\n retnPath = resolveRoutePath(rootPath, menu.path)\r\n }\r\n return retnPath\r\n }\r\n\r\n // 默认展开的导航路径\r\n const defaultOpenedPaths = computed(() => {\r\n const defaultOpenedPaths: string[] = []\r\n if (settingsStore.settings.app.routeBaseOn !== 'filesystem') {\r\n allMenus.value.forEach((item) => {\r\n defaultOpenedPaths.push(...getDefaultOpenedPaths(item.children))\r\n })\r\n }\r\n return defaultOpenedPaths\r\n })\r\n\r\n function getDefaultOpenedPaths(menus: Menu.recordRaw[], rootPath = '') {\r\n const defaultOpenedPaths: string[] = []\r\n menus.forEach((item) => {\r\n if (item.meta?.defaultOpened && item.children) {\r\n defaultOpenedPaths.push(resolveRoutePath(rootPath, item.path))\r\n const childrenDefaultOpenedPaths = getDefaultOpenedPaths(item.children, resolveRoutePath(rootPath, item.path))\r\n if (childrenDefaultOpenedPaths.length > 0) {\r\n defaultOpenedPaths.push(...childrenDefaultOpenedPaths)\r\n }\r\n }\r\n })\r\n return defaultOpenedPaths\r\n }\r\n\r\n // 判断是否有权限\r\n function hasPermission(permissions: string[], menu: Menu.recordMainRaw | Menu.recordRaw) {\r\n let isAuth = false\r\n if (menu.meta?.auth) {\r\n isAuth = permissions.some((auth) => {\r\n if (typeof menu.meta?.auth === 'string') {\r\n return menu.meta.auth !== '' ? menu.meta.auth === auth : true\r\n } else if (typeof menu.meta?.auth === 'object') {\r\n return menu.meta.auth.length > 0 ? menu.meta.auth.includes(auth) : true\r\n } else {\r\n return false\r\n }\r\n })\r\n } else {\r\n isAuth = true\r\n }\r\n return isAuth\r\n }\r\n\r\n // 根据权限过滤导航\r\n function filterAsyncMenus<T extends Menu.recordMainRaw[] | Menu.recordRaw[]>(menus: T, permissions: string[]): T {\r\n const res: any = []\r\n menus.forEach((menu) => {\r\n if (hasPermission(permissions, menu)) {\r\n const tmpMenu = cloneDeep(menu)\r\n if (tmpMenu.children && tmpMenu.children.length > 0) {\r\n tmpMenu.children = filterAsyncMenus(tmpMenu.children, permissions) as Menu.recordRaw[]\r\n tmpMenu.children.length > 0 && res.push(tmpMenu)\r\n } else {\r\n delete tmpMenu.children\r\n res.push(tmpMenu)\r\n }\r\n }\r\n })\r\n return res\r\n }\r\n\r\n // 生成导航(前端生成)\r\n async function generateMenusAtFront() {\r\n // filesystemMenusRaw.value = menu.filter(item => item.children.length !== 0)\r\n }\r\n\r\n // 生成导航(后端生成)\r\n async function generateMenusAtBack() {\r\n // await apiApp.menuList().then(async (res) => {\r\n // filesystemMenusRaw.value = (res.data as Menu.recordMainRaw[]).filter(item => item.children.length !== 0)\r\n // }).catch(() => {})\r\n }\r\n\r\n // 设置主导航\r\n function setActived(data: number | string) {\r\n if (typeof data === 'number') {\r\n // 如果是 number 类型,则认为是主导航的索引\r\n actived.value = data\r\n } else {\r\n\r\n const getIndex = () => {\r\n for (let index = 0, len = allMenus.value.length; index < len; index++) {\r\n let children = [allMenus.value[index]]\r\n\r\n for (let i = 0; i < children.length; i++) {\r\n const item = children[i];\r\n\r\n if (item.name === data) {\r\n return index;\r\n }\r\n\r\n if (Array.isArray(item.children)) {\r\n children = children.concat(item.children as any[]);\r\n }\r\n }\r\n }\r\n\r\n return -1;\r\n }\r\n\r\n const findIndex = getIndex();\r\n // 如果是 string 类型,则认为是路由,需要查找对应的主导航索引\r\n // const findIndex = allMenus.value.findIndex(item => item.children.some(r => data.indexOf(`${r.path}/`) === 0 || data === r.path))\r\n if (findIndex >= 0) {\r\n actived.value = findIndex\r\n }\r\n }\r\n }\r\n\r\n return {\r\n actived,\r\n allMenus,\r\n sidebarMenus,\r\n sidebarMenusFirstDeepestPath,\r\n defaultOpenedPaths,\r\n generateMenusAtFront,\r\n generateMenusAtBack,\r\n setActived,\r\n }\r\n },\r\n)\r\n\r\nexport default useMenuStore\r\n","import {RouteLocationNormalized, RouteLocationRaw} from \"vue-router\";\r\nimport type {MSAppClient} from \"../core\";\r\nimport useSettingsStore from '../store/modules/settings';\r\nimport useMenuStore from '../store/modules/menu';\r\n\r\n\r\nexport const authBeforeEach = async (\r\n msAppClient: MSAppClient,\r\n to: RouteLocationNormalized,\r\n from: RouteLocationNormalized\r\n): Promise<RouteLocationRaw | void> => {\r\n\r\n\r\n if (to.meta.isAuthorization === false) {\r\n return;\r\n }\r\n\r\n let userSession = msAppClient.userSession;\r\n\r\n if (!userSession) {\r\n try {\r\n await msAppClient.loadCurrentUserSession();\r\n\r\n userSession = msAppClient.userSession;\r\n\r\n if (!userSession) {\r\n return {name: \"login\"};\r\n }\r\n\r\n const settingsStore = useSettingsStore();\r\n const menuStore = useMenuStore();\r\n\r\n // 因为登陆成功会添加用户可以访问的路由,这里给到vue-router去重新resolve\r\n return {path: to.path, query: to.query, params: to.params} as RouteLocationNormalized;\r\n } catch (e) {\r\n return {name: \"login\"};\r\n }\r\n }\r\n};\r\n","import { RouteRecordRaw } from \"vue-router\";\r\nimport type { MSAppClient } from \"./MSAppClient\";\r\nimport { Disposable, Event, createDisposable } from \"@maketribe/utils\";\r\n\r\nexport class PageManager {\r\n normalPages: RouteRecordRaw[] = [];\r\n\r\n extendsPages: RouteRecordRaw[] = [];\r\n\r\n msAppClient: MSAppClient | null = null;\r\n\r\n msAppClientChangeEvent: Event<{ msAppClient: MSAppClient | null }> =\r\n new Event();\r\n\r\n afterInitdEvent: Event = new Event();\r\n\r\n msAppClientDisposable: Disposable | null = null;\r\n\r\n setMSAppCLient(msAppClient: MSAppClient | null) {\r\n this.msAppClientDisposable?.dispose();\r\n\r\n this.msAppClientDisposable = new Disposable();\r\n\r\n this.msAppClient = msAppClient;\r\n\r\n this.msAppClientChangeEvent.emit({ msAppClient });\r\n }\r\n\r\n addNormalPage(normalPage: RouteRecordRaw) {\r\n const index = this.normalPages.findIndex(\r\n (item) => item.name === normalPage.name\r\n );\r\n\r\n if (index > -1) {\r\n this.normalPages.splice(index, 1);\r\n }\r\n\r\n this.normalPages.push(normalPage);\r\n }\r\n\r\n addExtendsPage(extendsPage: RouteRecordRaw) {\r\n const index = this.extendsPages.findIndex(\r\n (item) => item.name === extendsPage.name\r\n );\r\n\r\n if (index > -1) {\r\n this.extendsPages.splice(index, 1);\r\n }\r\n\r\n this.extendsPages.push(extendsPage);\r\n }\r\n\r\n init() {\r\n this.addNormalPage({\r\n name: \"mk-ms-layout\",\r\n path: \"/\",\r\n component: () => import(\"../page/index.vue\"),\r\n });\r\n\r\n this.addNormalPage({\r\n name: \"login\",\r\n path: \"/login\",\r\n meta: {\r\n isAuthorization: false,\r\n },\r\n component: () => import(\"../page/login/index.vue\"),\r\n });\r\n\r\n this.addNormalPage({\r\n name: \"signup\",\r\n path: \"/signup\",\r\n meta: {\r\n isAuthorization: false,\r\n },\r\n component: () => import(\"../page/signup/index.vue\"),\r\n });\r\n\r\n this.afterInitdEvent.emit();\r\n\r\n this.msAppClientChangeEvent.on(({ msAppClient }) => {\r\n if (!msAppClient) {\r\n return;\r\n }\r\n\r\n const vueRouter = msAppClient.vueRouter;\r\n const vueRoutes = vueRouter.getRoutes();\r\n\r\n const addedNormalPageNames: string[] = [];\r\n\r\n for (const normalPage of this.normalPages) {\r\n const vueRoute = vueRoutes.find(\r\n (vueRoute) => vueRoute.name === normalPage.name\r\n );\r\n\r\n if (!vueRoute) {\r\n addedNormalPageNames.push(normalPage.name as string);\r\n vueRouter.addRoute(normalPage);\r\n }\r\n }\r\n\r\n this.msAppClientDisposable?.register(\r\n createDisposable(() => {\r\n for (const addedNormalPageName of addedNormalPageNames) {\r\n vueRouter.removeRoute(addedNormalPageName);\r\n }\r\n })\r\n );\r\n\r\n this.msAppClientDisposable?.register(\r\n msAppClient.beforeInitUserSessionEvent.on(({ userSession }) => {\r\n if (!userSession) {\r\n return;\r\n }\r\n\r\n userSession.beforeInitRouterEvent.on(() => {\r\n const router = userSession.router;\r\n\r\n const addedExtendsPageNames: string[] = [];\r\n\r\n for (const extendsPage of this.extendsPages) {\r\n const routeInfo = router.getRouteByName(\r\n extendsPage.name as string\r\n );\r\n\r\n if (!routeInfo) {\r\n continue;\r\n }\r\n\r\n const vueRoute = vueRoutes.find(\r\n (vueRoute) => vueRoute.name === extendsPage.name\r\n );\r\n\r\n if (!vueRoute) {\r\n extendsPage.path = routeInfo.route || extendsPage.path;\r\n addedExtendsPageNames.push(extendsPage.name as string);\r\n vueRouter.addRoute(\"mk-ms-layout\", extendsPage);\r\n }\r\n }\r\n\r\n if (!this.extendsPages.find((page) => page.name === \"notFound\")) {\r\n this.addExtendsPage({\r\n name: \"notFound\",\r\n // path: \":pathMatch(.*)*\",\r\n path: \"\",\r\n component: () => import(\"../page/index/404.vue\"),\r\n });\r\n }\r\n\r\n userSession.register(\r\n createDisposable(() => {\r\n for (const addedExtendsPageName of addedExtendsPageNames) {\r\n vueRouter.removeRoute(addedExtendsPageName);\r\n }\r\n })\r\n );\r\n });\r\n })\r\n );\r\n });\r\n }\r\n}\r\n","import { RouteRecordRaw } from \"vue-router\";\r\nimport { DATA_MODEL_NAME } from \"../constants\";\r\nimport {\r\n DataFormClass,\r\n DataTableClass,\r\n DataTreeClass,\r\n} from \"./DataModelDefines\";\r\nimport { Components, IComponents } from \"@maketribe/dm\";\r\nimport { App } from \"vue\";\r\n\r\nexport type MkModule = (module: InternalMkModule) => void;\r\n\r\n/**\r\n * 模块\r\n * 模块主要包含有以下几点\r\n * 1.dataview相关的表格表单等待,\r\n * 2.定制页面\r\n * 3.组件\r\n */\r\nexport class InternalMkModule {\r\n app: App;\r\n\r\n dataTableComponents: IComponents = new Components();\r\n\r\n dataFormComponents: IComponents = new Components();\r\n\r\n dataFilterComponents: IComponents = new Components();\r\n\r\n whereFilterComponents: IComponents = new Components();\r\n\r\n dataTableClasses: DataTableClass[] = [];\r\n\r\n dataFormClasses: DataFormClass[] = [];\r\n\r\n dataTreeClasses: DataTreeClass[] = [];\r\n\r\n normalPages: RouteRecordRaw[] = [];\r\n\r\n extendsPages: RouteRecordRaw[] = [];\r\n\r\n constructor(app: App) {\r\n this.app = app;\r\n }\r\n\r\n /**\r\n * 注册DataTable\r\n * @param dataTableClass\r\n */\r\n registerDataTable(dataTableClass: DataTableClass) {\r\n const name = (dataTableClass as any)[DATA_MODEL_NAME];\r\n\r\n const existDataTableClass = this.dataTableClasses.find(\r\n (item) => (item as any)[DATA_MODEL_NAME] === name\r\n );\r\n\r\n if (existDataTableClass) {\r\n throw new Error(`已经存在相同name为 ${name} 的DataTable`);\r\n }\r\n\r\n this.dataTableClasses.push(dataTableClass);\r\n }\r\n\r\n /**\r\n * 注册DataForm\r\n * @param dataFormClass\r\n */\r\n registerDataForm(dataFormClass: DataFormClass) {\r\n const name = (dataFormClass as any)[DATA_MODEL_NAME];\r\n\r\n const existDataFormClass = this.dataFormClasses.find(\r\n (item) => (item as any)[DATA_MODEL_NAME] === name\r\n );\r\n\r\n if (existDataFormClass) {\r\n throw new Error(`已经存在相同name为 ${name} 的DataTable`);\r\n }\r\n\r\n this.dataFormClasses.push(dataFormClass);\r\n }\r\n\r\n /**\r\n * 注册DataTree\r\n * @param dataTreClass\r\n */\r\n registerDataTree(dataTreClass: DataTreeClass) {\r\n const name = (dataTreClass as any)[DATA_MODEL_NAME];\r\n\r\n const existDataTreeClass = this.dataTreeClasses.find(\r\n (item) => (item as any)[DATA_MODEL_NAME] === name\r\n );\r\n\r\n if (existDataTreeClass) {\r\n throw new Error(`已经存在相同name为 ${name} 的DataTable`);\r\n }\r\n\r\n this.dataTreeClasses.push(dataTreClass);\r\n }\r\n\r\n registerNormalPage(route: RouteRecordRaw) {\r\n this.normalPages.push(route);\r\n }\r\n\r\n registerExtendsPage(route: RouteRecordRaw) {\r\n this.extendsPages.push(route);\r\n }\r\n}\r\n","import {\r\n createRouter,\r\n createWebHashHistory,\r\n Router as VueRouter,\r\n} from \"vue-router\";\r\nimport {\r\n ACCESS_TOKEN_HEADER,\r\n DVQueryable,\r\n HttpRequest,\r\n R,\r\n WebHttpRequest,\r\n X_ACCESS_TOKEN_HEADER,\r\n} from \"@maketribe/request\";\r\nimport { IComponents, Components, ComponentsCombine } from \"@maketribe/dm\";\r\nimport { I18n } from \"@maketribe/locale\";\r\n\r\nimport { Event, md5 } from \"@maketribe/utils\";\r\nimport { UserSession } from \"./UserSession\";\r\nimport { authBeforeEach } from \"../router-middleware\";\r\nimport { PageManager } from \"./PageManager\";\r\nimport { InternalMkModule, MkModule } from \"./MkModule\";\r\nimport { DataModelDefines } from \"./DataModelDefines\";\r\nimport { App } from \"vue\";\r\nimport { DATA_MODEL_NAME } from \"../constants\";\r\n\r\nexport type LoginResult = {\r\n account: string;\r\n email: string;\r\n nickName: string;\r\n avatarPath: string;\r\n};\r\n\r\nexport interface MSAppClientOptions {\r\n app: App;\r\n pageManager?: PageManager;\r\n projectName: string;\r\n httpRequest?: HttpRequest;\r\n origin: string;\r\n appID: string;\r\n logo?: string;\r\n locale?: string;\r\n vueRouter?: VueRouter;\r\n dataTableComponents?: IComponents;\r\n dataTableHeaderComponents?: IComponents;\r\n dataFormComponents?: IComponents;\r\n dataFilterComponents?: IComponents;\r\n whereFilterComponents?: IComponents;\r\n}\r\n\r\nexport class MSAppClient {\r\n static instance: MSAppClient | null = null;\r\n\r\n origin: string = \"\";\r\n\r\n private _options: Required<MSAppClientOptions>;\r\n\r\n app: App;\r\n\r\n projectName: string;\r\n\r\n logo: string;\r\n\r\n appID: string;\r\n\r\n userSession: UserSession | null = null;\r\n\r\n httpRequest: HttpRequest;\r\n\r\n ready: boolean = false;\r\n\r\n initd: boolean = false;\r\n\r\n pageManager: PageManager;\r\n\r\n modules: MkModule[] = [];\r\n\r\n /**\r\n * @deprecated\r\n * @description 使用 MSAppClient.instance.userSession.userInfo\r\n */\r\n get userInfo() {\r\n return this.userSession?.userInfo ?? null;\r\n }\r\n\r\n dataTableComponents: IComponents;\r\n dataTableHeaderComponents: IComponents;\r\n dataFormComponents: IComponents;\r\n dataFilterComponents: IComponents;\r\n whereFilterComponents: IComponents;\r\n i18n: I18n;\r\n\r\n vueRouter: VueRouter;\r\n\r\n beforeInitUserSessionEvent: Event<{ userSession: UserSession }> = new Event();\r\n\r\n userSessionChangeEvent: Event<{ userSession: UserSession | null }> =\r\n new Event();\r\n\r\n constructor(options: MSAppClientOptions) {\r\n this._options = this._normalizeOptions(options);\r\n\r\n this.app = options.app;\r\n\r\n this.appID = this._options.appID;\r\n\r\n this.logo = this._options.logo;\r\n\r\n this.projectName = options.projectName;\r\n\r\n this.dataTableComponents = this._options.dataTableComponents;\r\n this.dataTableHeaderComponents = this._options.dataTableHeaderComponents;\r\n this.dataFormComponents = this._options.dataFormComponents;\r\n this.dataFilterComponents = this._options.dataFilterComponents;\r\n this.whereFilterComponents = this._options.whereFilterComponents;\r\n this.i18n = I18n.instance;\r\n this.i18n.setCurrentLanguageName(this._options.locale);\r\n\r\n this.dataTableComponents = this._options.dataTableComponents;\r\n this.dataFormComponents = this._options.dataFormComponents;\r\n this.dataFilterComponents = this._options.dataFilterComponents;\r\n this.whereFilterComponents = this._options.whereFilterComponents;\r\n\r\n this.vueRouter = this._options.vueRouter;\r\n\r\n this.pageManager = this._options.pageManager;\r\n\r\n this.httpRequest = this._options.httpRequest;\r\n\r\n HttpRequest.appID = this.appID;\r\n HttpRequest.setDefaultHttpRequest(this.httpRequest);\r\n\r\n DVQueryable.setHttpRequest(this.httpRequest);\r\n }\r\n\r\n setUserSession(userSession: UserSession | null) {\r\n if (this.userSession) {\r\n this.userSession.dispose();\r\n }\r\n\r\n this.userSession = userSession;\r\n\r\n this.userSessionChangeEvent.emit({ userSession });\r\n }\r\n\r\n private _normalizeOptions(\r\n options: MSAppClientOptions\r\n ): Required<MSAppClientOptions> {\r\n return {\r\n app: options.app,\r\n appID: options.appID,\r\n projectName: options.projectName,\r\n httpRequest: options.httpRequest ?? new WebHttpRequest(),\r\n origin: options.origin,\r\n logo: options.logo || \"\",\r\n locale: options.locale || \"zh-cn\",\r\n vueRouter:\r\n options.vueRouter ??\r\n createRouter({\r\n history: createWebHashHistory(),\r\n routes: [],\r\n }),\r\n pageManager: options.pageManager ?? new PageManager(),\r\n dataTableComponents: options.dataTableComponents ?? new Components(),\r\n dataTableHeaderComponents:\r\n options.dataTableHeaderComponents ?? new Components(),\r\n dataFormComponents: options.dataFormComponents ?? new Components(),\r\n dataFilterComponents: options.dataFilterComponents ?? new Components(),\r\n whereFilterComponents: options.whereFilterComponents ?? new Components(),\r\n };\r\n }\r\n getI18n() {\r\n return this.i18n;\r\n }\r\n\r\n getOptions() {\r\n return this._options;\r\n }\r\n\r\n async loadCurrentUserSession(options?: {\r\n accessToken: string;\r\n xAccessToken: string;\r\n }) {\r\n const userSession = (this.userSession = new UserSession({\r\n msAppClient: this,\r\n ...options,\r\n }));\r\n this.userSession = null;\r\n\r\n this.beforeInitUserSessionEvent.emit({ userSession });\r\n const userSessionInitResult = await userSession.init();\r\n\r\n if (userSessionInitResult?.data.code !== 200) {\r\n userSession.dispose();\r\n return userSessionInitResult!;\r\n }\r\n\r\n this.setUserSession(userSession);\r\n }\r\n\r\n async init() {\r\n if (this.initd) {\r\n return;\r\n }\r\n\r\n const internalModules = this.modules.map((module) => {\r\n const internalModule = new InternalMkModule(this.app);\r\n\r\n module(internalModule);\r\n\r\n return internalModule;\r\n });\r\n\r\n const dataTableComponents = [];\r\n const dataFormComponents = [];\r\n const whereFilterComponents = [];\r\n const dataFilterComponents = [];\r\n\r\n for (let internalModule of internalModules) {\r\n for (let item of internalModule.dataTableClasses) {\r\n DataModelDefines.instance.registerDataTableDefine(\r\n (item as any)[DATA_MODEL_NAME],\r\n item\r\n );\r\n }\r\n\r\n for (let item of internalModule.dataFormClasses) {\r\n DataModelDefines.instance.registerDataFormDefine(\r\n (item as any)[DATA_MODEL_NAME],\r\n item\r\n );\r\n }\r\n\r\n for (let item of internalModule.dataTreeClasses) {\r\n DataModelDefines.instance.registerDataTreeDefine(\r\n (item as any)[DATA_MODEL_NAME],\r\n item\r\n );\r\n }\r\n\r\n dataTableComponents.push(internalModule.dataTableComponents);\r\n dataFormComponents.push(internalModule.dataFormComponents);\r\n dataFilterComponents.push(internalModule.dataFilterComponents);\r\n whereFilterComponents.push(internalModule.whereFilterComponents);\r\n }\r\n\r\n this.dataTableComponents = new ComponentsCombine({\r\n componentsList: [...dataTableComponents, this.dataTableComponents],\r\n });\r\n this.dataFormComponents = new ComponentsCombine({\r\n componentsList: [...dataFormComponents, this.dataFormComponents],\r\n });\r\n this.dataFilterComponents = new ComponentsCombine({\r\n componentsList: [...dataFilterComponents, this.dataFilterComponents],\r\n });\r\n this.whereFilterComponents = new ComponentsCombine({\r\n componentsList: [...whereFilterComponents, this.whereFilterComponents],\r\n });\r\n\r\n this.vueRouter.beforeEach(async (to, from, next) => {\r\n const route = await authBeforeEach(this, to, from);\r\n\r\n if (route) {\r\n next(route);\r\n return;\r\n }\r\n\r\n next();\r\n });\r\n\r\n this.pageManager.init();\r\n this.pageManager.setMSAppCLient(this);\r\n\r\n for (let internalModule of internalModules) {\r\n for (let item of internalModule.normalPages) {\r\n this.pageManager.addNormalPage(item);\r\n }\r\n\r\n for (let item of internalModule.extendsPages) {\r\n this.pageManager.addExtendsPage(item);\r\n }\r\n }\r\n\r\n this.httpRequest.getInterceptors().response.use((config) => {\r\n if (config.data.code === 401) {\r\n this.userSession?.dispose();\r\n this.vueRouter.push({ name: \"login\" });\r\n }\r\n return config;\r\n });\r\n\r\n this.initd = true;\r\n }\r\n\r\n async login(username: string, password: string, code: string) {\r\n const response = await this.httpRequest.request<R<LoginResult>>({\r\n url: \"/ms/app/login\",\r\n method: \"POST\",\r\n data: {\r\n account: username,\r\n password: md5(`mkbl#${password}`),\r\n vCode: code,\r\n },\r\n });\r\n\r\n if (response.data.code === 200) {\r\n await this.loadCurrentUserSession({\r\n accessToken: response.headers[ACCESS_TOKEN_HEADER],\r\n xAccessToken: response.headers[X_ACCESS_TOKEN_HEADER],\r\n });\r\n }\r\n\r\n return response;\r\n }\r\n\r\n formatURL(url: string) {\r\n return url;\r\n }\r\n\r\n async resetPassword(username: string, code: string) {\r\n type LoginResult = {\r\n account: string;\r\n email: string;\r\n nickName: string;\r\n avatarPath: string;\r\n };\r\n\r\n const response = await this.httpRequest.request<R<LoginResult>>({\r\n url: \"/ms/app/reset-password\",\r\n method: \"POST\",\r\n data: { account: username, vCode: code },\r\n });\r\n\r\n return response;\r\n }\r\n\r\n async logout() {\r\n this.setUserSession(null);\r\n }\r\n async changePassword(password: string, newPassword: string, vCode: string) {\r\n type LoginResult = {\r\n account: string;\r\n email: string;\r\n nickName: string;\r\n avatarPath: string;\r\n };\r\n\r\n const response = await this.httpRequest.request<R<LoginResult>>({\r\n url: \"/ms/app/modify-password\",\r\n method: \"POST\",\r\n data: {\r\n password: md5(`mkbl#${password}`),\r\n newPassword: md5(`mkbl#${newPassword}`),\r\n vCode,\r\n },\r\n });\r\n\r\n return response;\r\n }\r\n\r\n addModule(module: MkModule) {\r\n this.modules.push(module);\r\n }\r\n}\r\n","import { SkeletonMessageSender, IMessage } from \"@maketribe/dm\";\r\nimport { ElMessage } from \"element-plus\";\r\n\r\nexport class MessagerImpl extends SkeletonMessageSender<IMessage> {\r\n info(message: IMessage): void {\r\n ElMessage.info(message);\r\n }\r\n success(message: IMessage): void {\r\n ElMessage.success(message);\r\n }\r\n warning(message: IMessage): void {\r\n ElMessage.warning(message);\r\n }\r\n error(message: IMessage): void {\r\n ElMessage.error(message);\r\n }\r\n}\r\n","import { NotificationMessage, SkeletonMessageSender } from \"@maketribe/dm\";\r\nimport { ElNotification } from \"element-plus\";\r\n\r\nexport class NotificationerImpl extends SkeletonMessageSender<NotificationMessage> {\r\n info(message: NotificationMessage): void {\r\n ElNotification.info(message);\r\n }\r\n success(message: NotificationMessage): void {\r\n ElNotification.success(message);\r\n }\r\n warning(message: NotificationMessage): void {\r\n ElNotification.warning(message);\r\n }\r\n error(message: NotificationMessage): void {\r\n ElNotification.error(message);\r\n }\r\n}\r\n","import { DataTable } from \"@maketribe/dm\";\r\nimport { buildProps } from \"@maketribe/utils\";\r\nimport { ExtractPropTypes } from \"vue\";\r\n\r\nexport const abstractSelectProps = buildProps({\r\n modelValue: {\r\n type: null,\r\n },\r\n dataTable: {\r\n type: DataTable<any>,\r\n },\r\n objectValue: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n multiple: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n options: {\r\n type: Array,\r\n },\r\n primaryFieldName: {\r\n type: String,\r\n },\r\n labelFieldName: {\r\n type: String,\r\n },\r\n formatOptions: {\r\n type: Function,\r\n default: (item: any) => {\r\n const value = item.value ?? item.id ?? item.name;\r\n const label = item.label ?? item.desc ?? item.title ?? item.name;\r\n\r\n return { value, label };\r\n },\r\n },\r\n additional: {\r\n type: Boolean,\r\n default: true,\r\n },\r\n});\r\n\r\nexport type AbstractSelectProps = ExtractPropTypes<typeof abstractSelectProps>;\r\n\r\nexport const abstractSelectEmits = {\r\n \"update:model-value\": (modelValue: any) => true,\r\n};\r\n\r\nexport type AbstractSelectEmits = typeof abstractSelectEmits;\r\n","import {\r\n computed,\r\n ComputedRef,\r\n defineComponent,\r\n Ref,\r\n ref,\r\n unref,\r\n watch,\r\n} from \"vue\";\r\nimport {\r\n abstractSelectEmits,\r\n abstractSelectProps,\r\n} from \"./abstract-select-options\";\r\nimport { isEqual } from \"lodash-es\";\r\nimport { Where } from \"@maketribe/request\";\r\n\r\nexport type DataOptionItem = {\r\n value: any;\r\n label: string;\r\n data: any;\r\n children?: DataOptionItem[];\r\n};\r\n\r\nexport default defineComponent({\r\n name: \"MKAbstractSelect\",\r\n props: abstractSelectProps,\r\n emits: abstractSelectEmits,\r\n inheritAttrs: false,\r\n setup(props, { emit }) {\r\n const modelValue = computed({\r\n get: () => unref(props.modelValue),\r\n set: (v) => {\r\n emit(\"update:model-value\", v);\r\n },\r\n });\r\n\r\n const selections = computed(() => {\r\n const _primaryKey = unref(primaryKey);\r\n const _modelValue = unref(modelValue);\r\n\r\n if (props.objectValue) {\r\n return props.multiple\r\n ? _modelValue?.map((item: any) => item[_primaryKey]) ?? []\r\n : _modelValue?.[_primaryKey] ?? \"\";\r\n }\r\n\r\n return _modelValue;\r\n });\r\n\r\n const innerSelections = ref(unref(modelValue));\r\n const selectRecords: Ref<any[]> = ref([]);\r\n\r\n const primaryKey = computed(\r\n () => props.primaryFieldName ?? props.dataTable?.primaryKey ?? \"value\"\r\n );\r\n\r\n const formatOptions = computed(() => {\r\n let _formatOptions;\r\n\r\n if (props.labelFieldName) {\r\n _formatOptions = (item: any) => {\r\n return {\r\n value: item[unref(primaryKey)],\r\n label: item[props.labelFieldName!],\r\n };\r\n };\r\n } else {\r\n _formatOptions = props.formatOptions;\r\n }\r\n\r\n const innerFormatOptions = (item: any) => {\r\n const options = _formatOptions(item) as DataOptionItem;\r\n\r\n options.data = item;\r\n\r\n if (Array.isArray(item.children)) {\r\n options.children = item.children.map(innerFormatOptions);\r\n }\r\n\r\n return options as DataOptionItem;\r\n };\r\n\r\n return innerFormatOptions;\r\n });\r\n\r\n const options: ComputedRef<DataOptionItem[]> = computed(() => {\r\n let options: DataOptionItem[] = [];\r\n\r\n const _formatOptions = unref(formatOptions);\r\n\r\n if (props.dataTable) {\r\n options = props.dataTable\r\n .getList()\r\n .map((item) => _formatOptions.call(null, item));\r\n } else if (Array.isArray(props.options)) {\r\n options = props.options.map((item) => _formatOptions.call(null, item));\r\n }\r\n\r\n const optionValues = options.map((options) => options.value);\r\n\r\n let additionOptions: any[] = [];\r\n\r\n if (props.additional) {\r\n additionOptions = unref(selectRecords)\r\n .map(_formatOptions)\r\n .filter(\r\n (additionOption) => !optionValues.includes(additionOption.value)\r\n );\r\n }\r\n\r\n return options.concat(additionOptions);\r\n });\r\n\r\n watch(\r\n modelValue,\r\n async (modelValue) => {\r\n let _values: any;\r\n if (props.objectValue) {\r\n _values = props.multiple\r\n ? modelValue?.map((item: any) => item[unref(primaryKey)]) ?? []\r\n : modelValue?.[unref(primaryKey)] ?? null;\r\n } else {\r\n _values = modelValue;\r\n }\r\n\r\n if (!isEqual(_values, unref(innerSelections))) {\r\n innerSelections.value = _values;\r\n }\r\n },\r\n { immediate: true }\r\n );\r\n\r\n const getSelectDataOptions = async () => {\r\n const _primaryKey = unref(primaryKey);\r\n\r\n const _selections = unref(innerSelections);\r\n\r\n const recordIds = Array.isArray(_selections)\r\n ? _selections\r\n : _selections\r\n ? [_selections]\r\n : [];\r\n\r\n if (props.dataTable) {\r\n const dataTable = props.dataTable;\r\n\r\n let existingRecords = unref(options)\r\n .filter((option) => recordIds.includes(option.value))\r\n .map((item) => item.data);\r\n\r\n if (existingRecords.length !== recordIds.length) {\r\n const notExistingRecords = recordIds.filter(\r\n (id) => !existingRecords.find((item) => item[_primaryKey] === id)\r\n );\r\n\r\n const where = new Where();\r\n where.addCondition(\r\n unref(primaryKey),\r\n \"in\",\r\n `${notExistingRecords.join(\",\")}`\r\n );\r\n // where.addCondition(\r\n // unref(primaryKey),\r\n // \"in\",\r\n // `${notExistingRecords.map((id) => JSON.stringify(id)).join(\",\")}`\r\n // );\r\n\r\n const response = await dataTable.dataViewRequest.allList({\r\n data: { condition: where },\r\n });\r\n\r\n if (response.data.code === 200) {\r\n existingRecords = [...existingRecords, ...response.data.data];\r\n }\r\n }\r\n\r\n return recordIds\r\n .map((id) => existingRecords.find((item) => item[_primaryKey] === id))\r\n .filter(Boolean);\r\n } else if (Array.isArray(props.options)) {\r\n const _options = unref(options);\r\n\r\n return _options\r\n .filter((option) => recordIds.includes(option.value))\r\n .map((item) => item.data);\r\n }\r\n\r\n return [];\r\n };\r\n\r\n watch(\r\n innerSelections,\r\n async (selections) => {\r\n selectRecords.value = await getSelectDataOptions();\r\n if (modelValue.value !== selections) {\r\n if (props.objectValue) {\r\n modelValue.value = props.multiple\r\n ? [...selectRecords.value]\r\n : selectRecords.value[0] ?? null;\r\n } else {\r\n modelValue.value = selections;\r\n }\r\n }\r\n },\r\n { immediate: true }\r\n );\r\n\r\n const setSelections = (v: any) => {\r\n innerSelections.value = v;\r\n };\r\n\r\n return {\r\n options,\r\n selections,\r\n selectRecords,\r\n setSelections,\r\n formatOptions,\r\n };\r\n },\r\n render() {\r\n return this.$slots.default?.({\r\n options: this.options,\r\n selections: this.selections,\r\n selectRecords: this.selectRecords,\r\n setSelections: this.setSelections,\r\n formatOptions: this.formatOptions,\r\n });\r\n },\r\n});\r\n","import AbstractSelect from \"./abstract-select\";\r\n\r\nexport const MKAbstractSelect = AbstractSelect;\r\n\r\nexport default MKAbstractSelect;\r\n\r\nexport * from \"./abstract-select-options\";\r\n","<script setup lang=\"ts\">\r\nimport {Icon} from '@iconify/vue'\r\n\r\ndefineOptions({\r\n name: 'MKSvgIcon',\r\n})\r\n\r\nconst props = defineProps<{\r\n name: string\r\n flip?: 'horizontal' | 'vertical' | 'both'\r\n rotate?: number\r\n color?: string\r\n size?: string | number\r\n}>()\r\n\r\nconst emits = defineEmits([\"click\"]);\r\n\r\nconst outputType = computed(() => {\r\n\r\n if (!props.name) {\r\n return '';\r\n }\r\n\r\n if (/^https?:\\/\\//.test(props.name)) {\r\n return 'img'\r\n } else if (/i-[^:]+:[^:]+/.test(props.name)) {\r\n return 'unocss'\r\n } else if (props.name.includes(':')) {\r\n return 'iconify'\r\n } else {\r\n return 'svg'\r\n }\r\n})\r\n\r\nconst style = computed(() => {\r\n const transform = []\r\n if (props.flip) {\r\n switch (props.flip) {\r\n case 'horizontal':\r\n transform.push('rotateY(180deg)')\r\n break\r\n case 'vertical':\r\n transform.push('rotateX(180deg)')\r\n break\r\n case 'both':\r\n transform.push('rotateX(180deg)')\r\n transform.push('rotateY(180deg)')\r\n break\r\n }\r\n }\r\n if (props.rotate) {\r\n transform.push(`rotate(${props.rotate % 360}deg)`)\r\n }\r\n return {\r\n ...(props.color && {color: props.color}),\r\n ...(props.size && {fontSize: typeof props.size === 'number' ? `${props.size}px` : props.size}),\r\n ...(transform.length && {transform: transform.join(' ')}),\r\n }\r\n})\r\n\r\nconst handleClick = () => {\r\n emits(\"click\");\r\n}\r\n</script>\r\n\r\n<template>\r\n <i v-if=\"outputType\"\r\n class=\"relative h-[1em] w-[1em] flex-inline items-center justify-center fill-current leading-[1em]\"\r\n :class=\"{ [name]: outputType === 'unocss' }\" :style=\"style\" @click=\"handleClick\">\r\n <Icon v-if=\"outputType === 'iconify'\" :icon=\"name\"/>\r\n <svg v-else-if=\"outputType === 'svg'\" class=\"h-[1em] w-[1em]\" aria-hidden=\"true\">\r\n <use :xlink:href=\"`#icon-${name}`\"/>\r\n </svg>\r\n <img v-else-if=\"outputType === 'img'\" :src=\"name\" class=\"h-[1em] w-[1em]\">\r\n </i>\r\n</template>\r\n","import { withInstall } from \"@maketribe/utils\";\r\nimport SvgIcon from \"./svg-icon.vue\";\r\n\r\nexport const MKSvgIcon = withInstall(SvgIcon);\r\nexport default MKSvgIcon;\r\n","import { ExtractPropTypes } from \"vue\";\r\nimport { buildProps } from \"@maketribe/utils\";\r\n\r\nexport const buttonProps = buildProps({\r\n icon: {\r\n type: String,\r\n default: \"\",\r\n },\r\n label: {\r\n type: String,\r\n default: \"\",\r\n },\r\n type: {\r\n values: [\r\n \"\",\r\n \"default\",\r\n \"text\",\r\n \"success\",\r\n \"warning\",\r\n \"info\",\r\n \"primary\",\r\n \"danger\",\r\n ],\r\n },\r\n link: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n} as const);\r\n\r\nexport type ButtonProps = ExtractPropTypes<typeof buttonProps>;\r\n\r\nexport const buttonEmits = {\r\n click: () => true,\r\n};\r\n\r\nexport type ButtonEmits = typeof buttonEmits;\r\n","import { ElButton } from \"element-plus\";\r\nimport { defineComponent } from \"vue\";\r\nimport MKSvgIcon from \"../svg-icon\";\r\nimport { buttonEmits, buttonProps } from \"./button-options\";\r\n\r\nexport default defineComponent({\r\n name: \"MKButton\",\r\n props: buttonProps,\r\n emits: buttonEmits,\r\n setup(props, { emit }) {\r\n const handleClick = () => {\r\n emit(\"click\");\r\n };\r\n\r\n return () => {\r\n const icon = props.icon ? <MKSvgIcon class=\" m-r-8px\" name={props.icon} /> : null;\r\n\r\n const text = props.label ? (\r\n <span class=\"mk-button__text\">{props.label}</span>\r\n ) : null;\r\n\r\n return (\r\n <ElButton\r\n class=\"mk-button\"\r\n onClick={handleClick}\r\n type={props.type}\r\n link={props.link}\r\n >\r\n {icon}\r\n {text}\r\n </ElButton>\r\n );\r\n };\r\n },\r\n});\r\n","import Button from \"./button\";\r\n\r\nexport const MKButton = Button;\r\n\r\nexport default MKButton;\r\n\r\nexport * from \"./button-options\";\r\n","import { InjectionKey, Ref } from \"vue\";\r\nimport { ConfigProviderProps } from \"./config-provider-options\";\r\n\r\nexport type ConfigProviderContext = Partial<ConfigProviderProps>;\r\n\r\nexport const CONFIG_PROVIDER_CONTEXT_KEY: InjectionKey<\r\n Ref<ConfigProviderContext>\r\n> = Symbol(\"configProviderContextKey\");\r\n","import {\r\n App,\r\n MaybeRef,\r\n Ref,\r\n computed,\r\n getCurrentInstance,\r\n inject,\r\n provide,\r\n ref,\r\n unref,\r\n} from \"vue\";\r\nimport merge from \"lodash-es/merge\";\r\nimport {\r\n CONFIG_PROVIDER_CONTEXT_KEY,\r\n ConfigProviderContext,\r\n} from \"./constants\";\r\n\r\nconst globalConfig = ref<ConfigProviderContext>();\r\n\r\nexport function useGlobalConfig<\r\n K extends keyof ConfigProviderContext,\r\n D extends ConfigProviderContext[K]\r\n>(key?: K, defaultValue?: D): Ref<ConfigProviderContext[K] | D>;\r\nexport function useGlobalConfig(): Ref<ConfigProviderContext>;\r\nexport function useGlobalConfig(\r\n key?: keyof ConfigProviderContext,\r\n defaultValue = undefined\r\n) {\r\n const config = getCurrentInstance()\r\n ? inject(CONFIG_PROVIDER_CONTEXT_KEY, globalConfig)\r\n : globalConfig;\r\n\r\n if (key) {\r\n return computed(() => unref(config)?.[key] ?? defaultValue);\r\n }\r\n\r\n return config;\r\n}\r\n\r\nexport function provideGlobalConfig(\r\n config: MaybeRef<ConfigProviderContext>,\r\n app?: App,\r\n global: boolean = false\r\n) {\r\n const inSetup = !!getCurrentInstance();\r\n const oldConfig = inSetup ? useGlobalConfig() : globalConfig;\r\n\r\n const provideFn = app?.provide ?? (inSetup ? provide : undefined);\r\n\r\n if (!provideFn) {\r\n throw new Error(\"\");\r\n }\r\n\r\n const context = computed(() => {\r\n const cfg = unref(config);\r\n if (!oldConfig?.value) {\r\n return cfg;\r\n }\r\n\r\n return merge(oldConfig.value, cfg);\r\n });\r\n\r\n provide(CONFIG_PROVIDER_CONTEXT_KEY, context);\r\n\r\n if (global || !globalConfig.value) {\r\n globalConfig.value = context.value;\r\n }\r\n\r\n return context;\r\n}\r\n","import { ExtractPropTypes } from \"vue\";\r\nimport { Components } from \"@maketribe/dm\";\r\nimport { buildProps } from \"@maketribe/utils\";\r\nimport { I18n } from \"@maketribe/locale\";\r\n\r\nexport const configProviderProps = buildProps({\r\n dataTableComponents: {\r\n type: Components,\r\n },\r\n dataFormComponents: {\r\n type: Components,\r\n },\r\n dataFilterComponents: {\r\n type: Components,\r\n },\r\n whereFilterComponents: {\r\n type: Components,\r\n },\r\n dataTableHeaderComponents: {\r\n type: Components,\r\n },\r\n i18n: {\r\n type: I18n,\r\n },\r\n});\r\n\r\nexport type ConfigProviderProps = ExtractPropTypes<typeof configProviderProps>;\r\n","import { computed, defineComponent, provide, renderSlot, unref } from \"vue\";\r\nimport { provideGlobalConfig } from \"./use-global-config\";\r\nimport { configProviderProps } from \"./config-provider-options\";\r\nimport { ElConfigProvider } from \"element-plus\";\r\n\r\nexport default defineComponent({\r\n name: \"MKConfigProvider\",\r\n inheritAttrs: false,\r\n props: configProviderProps,\r\n setup(props, { slots }) {\r\n provideGlobalConfig(props);\r\n\r\n const currentLocale = computed(() => props.i18n?.currentLanguage as any);\r\n\r\n return () => (\r\n <ElConfigProvider locale={unref(currentLocale)}>\r\n {renderSlot(slots, \"default\")}\r\n </ElConfigProvider>\r\n );\r\n },\r\n});\r\n","import { withInstall } from \"@maketribe/utils\";\r\nimport ConfigProvider from \"./config-provider\";\r\n\r\nexport const MKConfigProvider = withInstall(ConfigProvider);\r\n\r\nexport default MKConfigProvider;\r\n\r\nexport * from \"./use-global-config\";\r\nexport * from \"./constants\";\r\n","import { ExtractPropTypes } from \"vue\";\r\nimport { buildProps } from \"@maketribe/utils\";\r\nimport { abstractSelectEmits, abstractSelectProps } from \"../../abstract\";\r\nimport { DataTable } from \"@maketribe/dm\";\r\n\r\nconst { options: _, ...restAbstractSelectProps } = abstractSelectProps;\r\n\r\nexport const dataTableSelectProps = buildProps({\r\n ...restAbstractSelectProps,\r\n dataTable: {\r\n type: DataTable<any>,\r\n required: true,\r\n },\r\n disabled: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n} as const);\r\n\r\nexport type DataTableSelectProps = ExtractPropTypes<\r\n typeof dataTableSelectProps\r\n>;\r\n\r\nexport const dataTableSelectEmits = {\r\n ...abstractSelectEmits,\r\n};\r\n\r\nexport type DataTableSelectEmits = typeof dataTableSelectEmits;\r\n","import { computed, defineComponent, ref, Ref, unref, watch } from \"vue\";\r\nimport { ElSelect } from \"element-plus\";\r\nimport { Grid } from \"@element-plus/icons-vue\";\r\nimport {\r\n dataTableSelectEmits,\r\n dataTableSelectProps,\r\n} from \"./data-table-select-options\";\r\nimport { MKAbstractSelect } from \"../../abstract\";\r\nimport { DataTable, Dialoger, TableSelectCacheColumn } from \"@maketribe/dm\";\r\n\r\nexport default defineComponent({\r\n name: \"MKDataTableSelect\",\r\n inheritAttrs: false,\r\n props: dataTableSelectProps,\r\n emits: dataTableSelectEmits,\r\n setup(props, { emit }) {\r\n const abstractSelectInstance: Ref<typeof MKAbstractSelect | null> =\r\n ref(null);\r\n\r\n const dataTable = computed(() => props.dataTable);\r\n\r\n const modelValue = computed({\r\n get: () => props.modelValue,\r\n set: (v) => emit(\"update:model-value\", v),\r\n });\r\n\r\n watch(\r\n computed(\r\n () => [unref(dataTable), props.multiple] as [DataTable, boolean]\r\n ),\r\n ([dataTable, multiple]) => {\r\n dataTable.setSelectionColumn(new TableSelectCacheColumn({ multiple }));\r\n },\r\n { immediate: true }\r\n );\r\n\r\n const handleMousedown = async () => {\r\n if (props.disabled) {\r\n return;\r\n }\r\n\r\n const _dataTable = unref(dataTable);\r\n\r\n const _selections = unref(abstractSelectInstance)?.selections;\r\n\r\n const selections = props.multiple\r\n ? _selections ?? []\r\n : _selections\r\n ? [_selections]\r\n : [];\r\n\r\n _dataTable.setSelection(selections);\r\n\r\n const result = await Dialoger.dataTableSelectDialog(unref(dataTable)!);\r\n if (result.isConfirm) {\r\n unref(abstractSelectInstance)?.setSelections(\r\n props.multiple ? result.selections : result.selections[0]\r\n );\r\n }\r\n };\r\n\r\n return () => {\r\n return (\r\n <div class=\"mk-data-table-select\" onMousedown={handleMousedown}>\r\n <MKAbstractSelect\r\n modelValue={unref(modelValue)}\r\n onUpdate:model-value={(v: any) => {\r\n modelValue.value = v;\r\n }}\r\n ref={(el) => (abstractSelectInstance.value = el as any)}\r\n dataTable={props.dataTable}\r\n objectValue={props.objectValue}\r\n multiple={props.multiple}\r\n labelFieldName={props.labelFieldName}\r\n primaryFieldName={props.primaryFieldName}\r\n formatOptions={props.formatOptions}\r\n v-slots={{\r\n default: ({ selectRecords, formatOptions }: any) => {\r\n const options = selectRecords.map(formatOptions);\r\n\r\n return (\r\n <ElSelect\r\n disabled={props.disabled}\r\n multiple={props.multiple}\r\n suffixIcon={Grid}\r\n popperClass=\"mk-data-table-select__popper\"\r\n clearable\r\n modelValue={props.multiple ? options : options[0] ?? null}\r\n />\r\n );\r\n },\r\n }}\r\n />\r\n </div>\r\n );\r\n };\r\n },\r\n});\r\n","import { withInstall } from \"@maketribe/utils\";\r\nimport DataTableSelect from \"./data-table-select\";\r\n\r\nexport const MKDataTableSelect = withInstall(DataTableSelect);\r\n\r\nexport default MKDataTableSelect;\r\n","import { ExtractPropTypes } from \"vue\";\r\nimport { buildProps } from \"@maketribe/utils\";\r\nimport { abstractSelectEmits, abstractSelectProps } from \"../../abstract\";\r\n\r\nexport const dataSelectProps = buildProps({\r\n ...abstractSelectProps,\r\n disabled: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n allowCreate: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n filterable: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n filterFieldNames: {\r\n type: Array<string>,\r\n default: () => [],\r\n },\r\n primaryKey: String,\r\n} as const);\r\n\r\nexport type DataSelectProps = ExtractPropTypes<typeof dataSelectProps>;\r\n\r\nexport const dataSelectEmit = {\r\n ...abstractSelectEmits,\r\n};\r\n\r\nexport type DataSelectEmit = typeof dataSelectEmit;\r\n","import { computed, defineComponent, onMounted, unref, watch } from \"vue\";\r\nimport { ElSelect, ElOption } from \"element-plus\";\r\n\r\nimport { dataSelectProps, dataSelectEmit } from \"./data-select-options\";\r\nimport { MKAbstractSelect } from \"../../abstract\";\r\nimport { debounce } from \"lodash-es\";\r\n\r\nexport type DataOptionItem = { value: any; label: string };\r\n\r\nexport default defineComponent({\r\n name: \"MKDataSelect\",\r\n props: dataSelectProps,\r\n emits: dataSelectEmit,\r\n setup(props, { emit }) {\r\n const loading = computed(() => props.dataTable?.loading ?? false);\r\n\r\n const modelValue = computed({\r\n get: () => unref(props.modelValue),\r\n set: (v) => {\r\n emit(\"update:model-value\", v);\r\n },\r\n });\r\n\r\n const dataTable = computed(() => props.dataTable);\r\n\r\n onMounted(() => [\r\n watch(\r\n dataTable,\r\n async () => {\r\n await unref(dataTable)?.init();\r\n unref(dataTable)?.dataFilter.setReady();\r\n unref(dataTable)?.load();\r\n },\r\n { immediate: true }\r\n ),\r\n ]);\r\n\r\n const filterMethod = debounce(async (value: string) => {\r\n if (props.dataTable) {\r\n if (!props.filterFieldNames.length) {\r\n return null;\r\n }\r\n\r\n props.dataTable.useCondition((group) => {\r\n group.clear();\r\n\r\n for (let fieldName of props.filterFieldNames) {\r\n group.addCondition(fieldName, \"like\", `%${value}%`);\r\n }\r\n });\r\n\r\n const dataFilter = props.dataTable.dataFilter;\r\n\r\n await props.dataTable.load();\r\n\r\n return;\r\n }\r\n }, 500);\r\n\r\n return () => {\r\n return (\r\n <MKAbstractSelect\r\n modelValue={unref(modelValue)}\r\n onUpdate:model-value={(v: any) => {\r\n modelValue.value = v;\r\n }}\r\n dataTable={props.dataTable}\r\n objectValue={props.objectValue}\r\n multiple={props.multiple}\r\n options={props.options}\r\n labelFieldName={props.labelFieldName}\r\n primaryFieldName={props.primaryFieldName}\r\n formatOptions={props.formatOptions}\r\n v-slots={{\r\n default: ({ options, selections, setSelections }: any) => {\r\n const children = unref(options).map((item: any) => (\r\n <ElOption\r\n key={item.value}\r\n value={item.value}\r\n label={item.label}\r\n />\r\n ));\r\n\r\n return (\r\n <ElSelect\r\n disabled={props.disabled}\r\n loading={unref(loading)}\r\n class=\"data-select\"\r\n modelValue={selections}\r\n onUpdate:modelValue={setSelections}\r\n filterMethod={filterMethod}\r\n multiple={props.multiple}\r\n allowCreate={props.allowCreate}\r\n filterable={props.filterable}\r\n >\r\n {children}\r\n </ElSelect>\r\n );\r\n },\r\n }}\r\n />\r\n );\r\n };\r\n },\r\n});\r\n","import { withInstall } from \"@maketribe/utils\";\r\nimport DataSelect from \"./data-select\";\r\n\r\nexport const MKDataSelect = withInstall(DataSelect);\r\nexport default MKDataSelect;\r\n\r\nexport * from \"./data-select-options\";\r\n","import { ExtractPropTypes } from \"vue\";\r\nimport { buildProps } from \"@maketribe/utils\";\r\n\r\nexport const paginationProps = buildProps({\r\n total: {\r\n type: Number,\r\n required: true,\r\n },\r\n currentPage: {\r\n type: Number,\r\n required: true,\r\n },\r\n pageSize: {\r\n type: Number,\r\n required: true,\r\n },\r\n pageSizes: {\r\n type: Array<number>,\r\n required: true,\r\n },\r\n} as const);\r\n\r\nexport type PaginationProps = ExtractPropTypes<typeof paginationProps>;\r\n\r\nexport const paginationEmits = {\r\n \"update:currentPage\": (currentPage: any) => typeof currentPage === \"number\",\r\n \"update:pageSize\": (pageSize: any) => typeof pageSize === \"number\",\r\n};\r\n\r\nexport type PaginationEmits = typeof paginationEmits;\r\n","import { ElPagination } from \"element-plus\";\r\nimport { defineComponent } from \"vue\";\r\nimport { paginationEmits, paginationProps } from \"./pagination-options\";\r\n\r\nexport default defineComponent({\r\n name: \"MKPagination\",\r\n props: paginationProps,\r\n emits: paginationEmits,\r\n setup(props, { emit }) {\r\n const handleCurrentPageChange = (currentPage: number) => {\r\n emit(\"update:currentPage\", currentPage);\r\n };\r\n\r\n const handlePageSizeChange = (pageSize: number) => {\r\n emit(\"update:pageSize\", pageSize);\r\n };\r\n\r\n return () => {\r\n return (\r\n <div class=\"mk-pagination\">\r\n <div class=\"mk-pagination__left\">\r\n 共<b>{props.total}</b>条记录 | 当前第\r\n <b>{props.currentPage}</b>页\r\n </div>\r\n <div class=\"mk-pagination__right\">\r\n <ElPagination\r\n background\r\n pageSizes={props.pageSizes}\r\n currentPage={props.currentPage}\r\n pageSize={props.pageSize}\r\n total={props.total}\r\n layout=\"prev, pager, next\"\r\n onUpdate:current-page={handleCurrentPageChange}\r\n onUpdate:page-size={handlePageSizeChange}\r\n />\r\n </div>\r\n </div>\r\n );\r\n };\r\n },\r\n});\r\n","import { withInstall } from \"@maketribe/utils\";\r\nimport Pagination from \"./pagination\";\r\n\r\nexport const MKPagination = withInstall(Pagination);\r\nexport default MKPagination;\r\n\r\nexport * from \"./pagination-options\";\r\n","import {\r\n computed,\r\n defineComponent,\r\n renderSlot,\r\n unref,\r\n useSlots,\r\n watch,\r\n} from \"vue\";\r\nimport { useRouter } from \"vue-router\";\r\nimport { Components } from \"@maketribe/dm\";\r\nimport { MSAppClient } from \"../../../core\";\r\nimport { MKConfigProvider } from \"../config-provider\";\r\n\r\n/**\r\n * 路由变动的几种情况,\r\n * 1.点击菜单跳转陆游\r\n * 2.特定业务逻辑需要跳转路由\r\n * 3.返回上一页\r\n * 4.刷新页面\r\n */\r\n\r\nexport default defineComponent({\r\n name: \"MKSystemProvider\",\r\n setup() {\r\n const vueRouter = useRouter();\r\n\r\n const msAppClient = MSAppClient.instance!;\r\n\r\n const ready = computed(() => msAppClient.ready);\r\n\r\n const slots = useSlots();\r\n\r\n watch(\r\n computed(() => unref(vueRouter.currentRoute)),\r\n (route) => {\r\n const userSession = msAppClient.userSession;\r\n\r\n if (!userSession) {\r\n return;\r\n }\r\n\r\n const router = userSession.router;\r\n const menu = userSession.menu;\r\n const tabs = userSession.tabs;\r\n\r\n const routeInfo = router.getRouteByName(route.name as string);\r\n\r\n if (!routeInfo) {\r\n menu.setCurrentMenuNode(null);\r\n tabs.setCurrentTab(null);\r\n return;\r\n }\r\n\r\n const menuNode = menu.findMenuNodeByID(routeInfo.menuId);\r\n\r\n if (!menuNode) {\r\n menu.setCurrentMenuNode(null);\r\n tabs.setCurrentTab(null);\r\n return;\r\n }\r\n\r\n menu.setCurrentMenuNode(menuNode);\r\n\r\n const tab =\r\n tabs.findTabByID(route.fullPath) ??\r\n tabs.createTab({\r\n id: route.fullPath,\r\n title: routeInfo.title,\r\n affix: !!route.matched?.[route.matched?.length - 1]?.meta?.affix,\r\n realRoute: route,\r\n route: routeInfo,\r\n });\r\n\r\n tabs.switchTab(tab);\r\n },\r\n { immediate: true }\r\n );\r\n\r\n return () => {\r\n return (\r\n <MKConfigProvider\r\n dataTableComponents={msAppClient.dataTableComponents as Components}\r\n dataFormComponents={msAppClient.dataFormComponents as Components}\r\n dataFilterComponents={msAppClient.dataFilterComponents as Components}\r\n whereFilterComponents={\r\n msAppClient.whereFilterComponents as Components\r\n }\r\n dataTableHeaderComponents={msAppClient.dataTableHeaderComponents as Components}\r\n i18n={msAppClient.i18n}\r\n >\r\n {renderSlot(slots, \"default\")}\r\n </MKConfigProvider>\r\n );\r\n };\r\n },\r\n});\r\n","import { withInstall } from \"@maketribe/utils\";\r\nimport SystemProvider from \"./system-provider\";\r\n\r\nexport const MKSystemProvider = withInstall(SystemProvider);\r\nexport default MKSystemProvider;\r\n","import { defineAsyncComponent } from \"vue\";\r\nimport { withInstall } from \"@maketribe/utils\";\r\n\r\nexport const MKCodeEditor = withInstall(\r\n defineAsyncComponent(() => import(\"./code-editor\"))\r\n);\r\n\r\nexport default MKCodeEditor;\r\n","import { defineAsyncComponent } from \"vue\";\r\nimport { withInstall } from \"@maketribe/utils\";\r\n\r\nexport const MKJsonEditor = withInstall(\r\n defineAsyncComponent(() => import(\"./json-editor\"))\r\n);\r\n\r\nexport default MKJsonEditor;\r\n","import { withInstall } from \"@maketribe/utils\";\r\nimport PageContainer from \"./page-container.vue\";\r\n\r\nexport const MKPageContainer = withInstall(PageContainer);\r\nexport default MKPageContainer;\r\n","import { buildProps } from \"@maketribe/utils\";\r\nimport { ExtractPropTypes } from \"vue\";\r\n\r\nexport const datePickerTypes = [\"date\", \"year\", \"month\", \"datetime\"] as const;\r\n\r\nexport const datePickerProps = buildProps({\r\n modelValue: {\r\n type: String,\r\n default: null,\r\n },\r\n disabled: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n type: {\r\n default: \"date\",\r\n values: datePickerTypes,\r\n },\r\n valueFormat: {\r\n type: String,\r\n },\r\n});\r\n\r\nexport type DatePickerProps = ExtractPropTypes<typeof datePickerProps>;\r\n\r\nexport const datePickerEmits = {\r\n \"update:model-value\": (value: string) => true,\r\n};\r\n\r\nexport type DatePickerEmits = ExtractPropTypes<typeof datePickerEmits>;\r\n","import { computed, defineComponent, unref } from \"vue\";\r\nimport { ElDatePicker } from \"element-plus\";\r\nimport {\r\n datePickerTypes,\r\n datePickerProps,\r\n datePickerEmits,\r\n} from \"./date-picker-options\";\r\n\r\nexport default defineComponent({\r\n name: \"MKFormDatePicker\",\r\n props: datePickerProps,\r\n emits: datePickerEmits,\r\n setup(props, { emit }) {\r\n const modelValue = computed({\r\n get: () => props.modelValue,\r\n set: (v) => {\r\n emit(\"update:model-value\", v);\r\n },\r\n });\r\n\r\n const disabled = computed(() => props.disabled);\r\n\r\n const type = computed(() =>\r\n datePickerTypes.includes(props.type) ? props.type : \"date\"\r\n );\r\n\r\n const valueFormat = computed(() => {\r\n if (props.valueFormat) {\r\n return props.valueFormat;\r\n }\r\n\r\n switch (unref(type)) {\r\n case \"datetime\":\r\n return \"YYYY-MM-DD HH:mm:ss\";\r\n case \"month\":\r\n return \"YYYY-MM\";\r\n case \"year\":\r\n return \"YYYY\";\r\n default:\r\n return \"YYYY-MM-DD\";\r\n }\r\n });\r\n\r\n return () => {\r\n return (\r\n <ElDatePicker\r\n class=\"mk-form-date-picker\"\r\n type={unref(type)}\r\n valueFormat={unref(valueFormat)}\r\n disabled={unref(disabled)}\r\n modelValue={unref(modelValue)}\r\n onUpdate:modelValue={(v: any) => (modelValue.value = v)}\r\n />\r\n );\r\n };\r\n },\r\n});\r\n","import { withInstall } from \"@maketribe/utils\";\r\nimport FormDatePicker from \"./date-picker\";\r\n\r\nexport const MKFormDatePicker = withInstall(FormDatePicker);\r\n\r\nexport default MKFormDatePicker;\r\n\r\nexport * from \"./date-picker-options\";\r\n","import { ExtractPropTypes } from \"vue\";\r\nimport { buildProps } from \"@maketribe/utils\";\r\n\r\nexport const iconSelectProps = buildProps({\r\n modelValue: {\r\n type: String,\r\n default: null,\r\n },\r\n disabled: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n});\r\n\r\nexport type IconSelectProps = ExtractPropTypes<typeof iconSelectProps>;\r\n\r\nexport const iconSelectEmits = {\r\n \"update:model-value\": (value: string) => true,\r\n};\r\n\r\nexport type IconSelectEmits = ExtractPropTypes<typeof iconSelectEmits>;\r\n","import {\r\n Ref,\r\n computed,\r\n defineComponent,\r\n onMounted,\r\n ref,\r\n unref,\r\n watch,\r\n} from \"vue\";\r\nimport * as elIcons from \"@element-plus/icons-vue\";\r\nimport SvgIcon from \"../svg-icon\";\r\nimport { iconSelectProps, iconSelectEmits } from \"./icon-select-options\";\r\nimport {\r\n ElInput,\r\n ElScrollbar,\r\n useFormItem as elUseFormItem,\r\n} from \"element-plus\";\r\n\r\nexport default defineComponent({\r\n name: \"MKFormIconSelect\",\r\n props: iconSelectProps,\r\n emits: iconSelectEmits,\r\n setup(props, { emit }) {\r\n const icons: Ref<string[]> = ref([]);\r\n\r\n const search = ref(\"\");\r\n\r\n const filteredIcons = computed(() => {\r\n const _search = unref(search).toLowerCase().trim();\r\n\r\n return unref(icons).filter((icon) =>\r\n icon.toLowerCase().includes(_search)\r\n );\r\n });\r\n\r\n const modelValue = computed({\r\n get: () => props.modelValue,\r\n set: (v) => {\r\n emit(\"update:model-value\", v);\r\n },\r\n });\r\n\r\n const disabled = computed(() => props.disabled);\r\n\r\n const { formItem: elFormItem } = elUseFormItem();\r\n\r\n const handleClick = (icon: string) => {\r\n if (unref(disabled)) {\r\n return;\r\n }\r\n\r\n modelValue.value = icon;\r\n };\r\n\r\n onMounted(() => {\r\n const svgList: NodeListOf<SVGElement> = document.querySelectorAll(\r\n 'body > svg[aria-hidden=\"true\"]'\r\n );\r\n\r\n let iconList: string[] = [];\r\n\r\n for (const svg of Array.from(svgList)) {\r\n const symbols = svg.querySelectorAll(\"symbol\");\r\n\r\n iconList = iconList.concat(\r\n Array.from(symbols).map((symbol) => symbol.id.replace(/^icon-/, \"\"))\r\n );\r\n }\r\n\r\n icons.value = Array.from(new Set([...Object.keys(elIcons), ...iconList]));\r\n });\r\n\r\n watch(\r\n modelValue,\r\n () => {\r\n elFormItem?.validate?.(\"change\");\r\n },\r\n { flush: \"post\" }\r\n );\r\n\r\n return () => {\r\n const _value = unref(modelValue);\r\n\r\n const children = unref(filteredIcons).map((icon) => (\r\n <span\r\n key={icon}\r\n class={[\r\n \"mk-icon-select__icon-item\",\r\n icon === _value ? \"is-active\" : \"\",\r\n ]}\r\n onClick={() => handleClick(icon)}\r\n >\r\n {/*<SvgIcon iconClass={icon} />*/}\r\n </span>\r\n ));\r\n\r\n return (\r\n <div class=\"mk-icon-select\">\r\n <ElInput\r\n modelValue={unref(search)}\r\n onUpdate:modelValue={(v) => (search.value = v)}\r\n placeholder=\"搜索图标\"\r\n validateEvent={false}\r\n suffixIcon={elIcons.Search}\r\n />\r\n\r\n <div\r\n class={[\r\n \"mk-icon-select__wrapper\",\r\n unref(disabled) ? \"is-disabled\" : \"\",\r\n ]}\r\n >\r\n <ElScrollbar height=\"100%\">{children}</ElScrollbar>\r\n </div>\r\n </div>\r\n );\r\n };\r\n },\r\n});\r\n","import { withInstall } from \"@maketribe/utils\";\r\nimport FormIconSelect from \"./icon-select\";\r\n\r\nexport const MKFormIconSelect = withInstall(FormIconSelect);\r\nexport default MKFormIconSelect;\r\n","import { InjectionKey } from \"vue\";\r\n\r\nexport type UploadResult = {\r\n success: boolean;\r\n path: string;\r\n msg: string;\r\n name?: string;\r\n};\r\n\r\nexport interface UploadContextCtx {\r\n uploadContext: UploadContext;\r\n}\r\n\r\nexport const UploadContextCtxKey = Symbol(\r\n \"UploadContextCtxKey\"\r\n) as InjectionKey<UploadContextCtx>;\r\n\r\nexport class UploadContext {\r\n selectFile(): Promise<UploadResult> {\r\n throw new Error();\r\n }\r\n}\r\n","import { WebFileUpload } from \"@maketribe/request\";\r\nimport { UploadContext, UploadResult } from \"./UploadContext\";\r\nimport { fileSelect } from \"@maketribe/utils\";\r\n\r\nexport type WebFileUploadContextOptions = {\r\n webFileUpload?: WebFileUpload;\r\n accept?: string;\r\n};\r\n\r\nexport class WebFileUploadContext extends UploadContext {\r\n webFileUpload: WebFileUpload;\r\n accept: string;\r\n\r\n constructor(options: WebFileUploadContextOptions = {}) {\r\n super();\r\n\r\n this.accept = options.accept || \"image/*\";\r\n\r\n this.webFileUpload = options.webFileUpload ?? new WebFileUpload();\r\n }\r\n\r\n setAccept(accept: string) {\r\n this.accept = accept;\r\n }\r\n\r\n setWebFileUpload(webFileUpload: WebFileUpload) {\r\n this.webFileUpload = webFileUpload;\r\n }\r\n\r\n async selectFile(): Promise<UploadResult> {\r\n const file = await fileSelect({ accept: this.accept });\r\n\r\n if (!file) {\r\n return { success: true, path: \"\", msg: \"\" };\r\n }\r\n\r\n const response = await this.webFileUpload.upload(file);\r\n\r\n return {\r\n success: response.data.code === 200,\r\n path: response.data.data.path,\r\n msg: response.data.msg,\r\n };\r\n }\r\n}\r\n","import { ExtractPropTypes } from \"vue\";\r\nimport { buildProps } from \"@maketribe/utils\";\r\nimport { WebFileUpload } from \"@maketribe/request\";\r\n\r\nexport const webFileUploadContextProps = buildProps({\r\n accept: {\r\n type: String,\r\n },\r\n webFileUpload: {\r\n type: WebFileUpload,\r\n },\r\n} as const);\r\n\r\nexport type WebFileUploadContextProps = ExtractPropTypes<\r\n typeof webFileUploadContextProps\r\n>;\r\n","import { computed, defineComponent, provide, unref, watch } from \"vue\";\r\nimport { WebFileUpload } from \"@maketribe/request\";\r\nimport { webFileUploadContextProps } from \"./web-file-upload-context-options\";\r\nimport { WebFileUploadContext } from \"./WebFileUploadContext\";\r\nimport { UploadContextCtxKey } from \"./UploadContext\";\r\nimport { withInstall } from \"@maketribe/utils\";\r\n\r\nconst _WebFileUploadContext = defineComponent({\r\n name: \"MKWebFileUploadContext\",\r\n props: webFileUploadContextProps,\r\n inheritAttrs: false,\r\n setup(props, { slots }) {\r\n const accept = computed(() => props.accept);\r\n const webFileUpload = computed(() => props.webFileUpload);\r\n\r\n const webFileUploadContext = new WebFileUploadContext();\r\n\r\n watch(\r\n computed(() => [unref(accept), unref(webFileUpload)] as any),\r\n ([accept, webFileUpload]: [string, WebFileUpload]) => {\r\n webFileUploadContext.setAccept(accept ?? \"\");\r\n if (webFileUpload) {\r\n webFileUploadContext.setWebFileUpload(webFileUpload);\r\n }\r\n },\r\n { immediate: true }\r\n );\r\n\r\n provide(UploadContextCtxKey, { uploadContext: webFileUploadContext });\r\n\r\n return () => {\r\n return slots.default?.();\r\n };\r\n },\r\n});\r\n\r\nexport const MKWebFileUploadContext = withInstall(_WebFileUploadContext);\r\n","import { ExtractPropTypes } from \"vue\";\r\nimport { buildProps } from \"@maketribe/utils\";\r\nimport { UploadContext, WebFileUploadContext } from \"./context\";\r\n\r\nexport const uploadFileProps = buildProps({\r\n modelValue: {\r\n type: String,\r\n },\r\n uploadContext: {\r\n type: UploadContext,\r\n default: () => new WebFileUploadContext(),\r\n },\r\n} as const);\r\n\r\nexport type UploadFileProps = ExtractPropTypes<typeof uploadFileProps>;\r\n\r\nexport const uploadFileEmits = {\r\n \"update:modelValue\": (path: string) => true,\r\n \"getSelectFileName\": (name: string) => true,\r\n};\r\n\r\nexport type UploadFileEmits = typeof uploadFileEmits;\r\n","import { computed, defineComponent, inject, unref } from \"vue\";\r\nimport { uploadFileEmits, uploadFileProps } from \"./upload-file-options\";\r\nimport { ElMessage } from \"element-plus\";\r\nimport { UploadContextCtxKey } from \"./context\";\r\nimport { withInstall } from \"@maketribe/utils\";\r\n\r\n/**\r\n * 文件上传\r\n *\r\n * 文件上传在本后台中有两大分类\r\n * 1.直接上传文件\r\n * 2.使用素材库文件\r\n *\r\n * 文件上传的界面交互又会分为几种情况\r\n * 1.单文件上传(单文件上传,可能会根据。文件情况的不同,界面显示方式不一样)\r\n * 2.多文件上传(多文件上传基于单文件的逻辑,不过是会变成多个文件)\r\n *\r\n * 希望文件交互组件不需要用了解是直接上传文件或使用素材库。\r\n *\r\n */\r\n\r\nconst _UploadFile = defineComponent({\r\n name: \"MKUploadFile\",\r\n props: uploadFileProps,\r\n emits: uploadFileEmits,\r\n setup(props, { emit }) {\r\n const uploadContextCtx = inject(UploadContextCtxKey, null);\r\n\r\n const value = computed({\r\n get: () => props.modelValue as string,\r\n set: (v: string) => emit(\"update:modelValue\", v),\r\n });\r\n\r\n const uploadContext = computed(\r\n () => uploadContextCtx?.uploadContext || props.uploadContext\r\n );\r\n\r\n const handleUpload = async () => {\r\n try {\r\n\r\n const uploadResult = await unref(uploadContext).selectFile();\r\n\r\n if (uploadResult.success) {\r\n value.value = uploadResult.path || value.value;\r\n emit(\"getSelectFileName\", uploadResult.name || \"\");\r\n return;\r\n }\r\n\r\n ElMessage.error(uploadResult.msg);\r\n } catch (e) {\r\n console.error(e);\r\n ElMessage.error(\"网络异常\");\r\n }\r\n };\r\n\r\n return {\r\n handleUpload,\r\n };\r\n },\r\n render() {\r\n const { handleUpload, $slots } = this;\r\n\r\n return (\r\n <span class=\"mk-upload-file\" onClick={handleUpload}>\r\n {$slots.default?.()}\r\n </span>\r\n );\r\n },\r\n});\r\n\r\nexport const MKUploadFile = withInstall(_UploadFile);\r\n","import { ExtractPropTypes } from \"vue\";\r\nimport { buildProps } from \"@maketribe/utils\";\r\nimport { WebFileUploadContext, UploadContext } from \"../../context\";\r\n\r\nexport const uploadImageProps = buildProps({\r\n uploadContext: {\r\n type: UploadContext,\r\n default: () => new WebFileUploadContext(),\r\n },\r\n modelValue: {\r\n type: [String, Array<String>],\r\n },\r\n multiple: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n width: {\r\n type: String,\r\n default: \"180px\",\r\n },\r\n height: {\r\n type: String,\r\n default: \"180px\",\r\n },\r\n icon: {\r\n type: String,\r\n default: \"clarity:picture-solid\",\r\n }\r\n} as const);\r\n\r\nexport type UploadImageProps = ExtractPropTypes<typeof uploadImageProps>;\r\n\r\nexport const uploadImageEmits = {\r\n \"update:modelValue\": (path: string | string[]) => true,\r\n};\r\n\r\nexport type UploadImageEmits = typeof uploadImageEmits;\r\n","import {\r\n Fragment,\r\n Ref,\r\n VNode,\r\n computed,\r\n defineComponent,\r\n ref,\r\n unref,\r\n watch,\r\n} from \"vue\";\r\nimport { ElImage, ElTooltip, ElImageViewer } from \"element-plus\";\r\nimport { MKSvgIcon } from \"../../../svg-icon\";\r\nimport { MKUploadFile } from \"../../upload-file\";\r\nimport { uploadImageEmits, uploadImageProps } from \"./upload-image-options\";\r\nimport { UploadContext } from \"../../context\";\r\n\r\nconst MKUploadImageItem = defineComponent({\r\n name: \"MKUploadImageItem\",\r\n props: {\r\n modelValue: {\r\n type: String,\r\n default: \"\",\r\n },\r\n uploadContext: {\r\n type: UploadContext,\r\n required: true,\r\n },\r\n width: {\r\n type: String,\r\n default: \"180px\",\r\n },\r\n height: {\r\n type: String,\r\n default: \"180px\",\r\n },\r\n icon: {\r\n type: String,\r\n default: \"teenyicons:add-outline\",\r\n }\r\n },\r\n emits: [\"update:modelValue\", \"view\", \"delete\"],\r\n setup(props, { emit }) {\r\n const uploadFileInstance: Ref<InstanceType<typeof MKUploadFile> | null> =\r\n ref(null);\r\n\r\n const imageInstance: Ref<InstanceType<typeof ElImage> | null> = ref(null);\r\n\r\n const modelValue = computed({\r\n get: () => props.modelValue as string,\r\n set: (v: string) => {\r\n emit(\"update:modelValue\", v);\r\n },\r\n });\r\n const handleUpdateModelValue = (v: string) => {\r\n modelValue.value = v;\r\n };\r\n\r\n const handleClick = (event: MouseEvent) => {\r\n event.stopPropagation();\r\n\r\n if (unref(modelValue)) {\r\n return;\r\n }\r\n\r\n unref(uploadFileInstance)?.handleUpload();\r\n };\r\n\r\n const handleView = (event: MouseEvent) => {\r\n event.stopPropagation();\r\n\r\n emit(\"view\", unref(modelValue));\r\n };\r\n\r\n const handleDelete = (event: MouseEvent) => {\r\n event.stopPropagation();\r\n\r\n // modelValue.value = \"\";\r\n emit(\"delete\", unref(modelValue));\r\n };\r\n\r\n return () => {\r\n let content;\r\n\r\n if (unref(modelValue)) {\r\n content = (\r\n <Fragment>\r\n <ElImage ref={\r\n ((el: InstanceType<typeof ElImage>) =>\r\n (imageInstance.value = el)) as any\r\n }\r\n src={unref(modelValue)}\r\n class=\"mk-upload-image-item__image\"\r\n fit=\"contain\"\r\n />\r\n\r\n <div class=\"mk-upload-image-item__mask\">\r\n <ElTooltip content=\"查看\">\r\n <MKSvgIcon name=\"ep:view\" onClick={handleView} />\r\n </ElTooltip>\r\n <ElTooltip content=\"删除\">\r\n <MKSvgIcon name=\"material-symbols:delete-outline\" onClick={handleDelete} />\r\n </ElTooltip>\r\n </div>\r\n </Fragment>\r\n );\r\n } else {\r\n content = <MKSvgIcon name={props.icon} />;\r\n }\r\n\r\n return (\r\n <div class=\"mk-upload-image-item\" style={{ width: props.width, height: props.height }}>\r\n <MKUploadFile\r\n modelValue={props.modelValue}\r\n onUpdate:modelValue={handleUpdateModelValue}\r\n uploadContext={props.uploadContext}\r\n ref={\r\n ((el: InstanceType<typeof MKUploadFile>) =>\r\n (uploadFileInstance.value = el)) as any\r\n }\r\n >\r\n <div class=\"mk-upload-image-item__wrapper\" onClick={handleClick}>\r\n {content}\r\n </div>\r\n </MKUploadFile>\r\n </div>\r\n );\r\n };\r\n },\r\n});\r\n\r\nexport default defineComponent({\r\n name: \"MKUploadImage\",\r\n props: uploadImageProps,\r\n emits: uploadImageEmits,\r\n setup(props, { emit }) {\r\n const modelValue = computed({\r\n get: () => props.modelValue as string[] | string,\r\n set: (v: string[] | string) => emit(\"update:modelValue\", v),\r\n });\r\n\r\n const currentImageSrc: Ref<string> = ref(\"\");\r\n\r\n const multiple = computed(() => props.multiple);\r\n\r\n const isShowImageViewer: Ref<boolean> = ref(false);\r\n\r\n watch(\r\n computed(() => [unref(modelValue), unref(multiple)]),\r\n ([value, multiple]) => {\r\n if (multiple && !Array.isArray(value)) {\r\n modelValue.value = [];\r\n }\r\n },\r\n { immediate: true }\r\n );\r\n\r\n const handleDelete = (src: string) => {\r\n if (!unref(multiple)) {\r\n modelValue.value = \"\";\r\n return;\r\n }\r\n\r\n const index = unref(modelValue).indexOf(src);\r\n\r\n if (index === -1) {\r\n return;\r\n }\r\n\r\n (modelValue.value as string[]).splice(index, 1);\r\n };\r\n\r\n const handleShowImageViewer = (src: string) => {\r\n isShowImageViewer.value = true;\r\n currentImageSrc.value = src;\r\n };\r\n\r\n const handleCloseImageViewer = () => {\r\n isShowImageViewer.value = false;\r\n };\r\n\r\n const handleAppendImage = (src: string) => {\r\n const _value = unref(modelValue);\r\n\r\n if (Array.isArray(_value)) {\r\n _value.push(src);\r\n }\r\n };\r\n\r\n return () => {\r\n const _multiple = unref(multiple);\r\n let content;\r\n\r\n if (!_multiple) {\r\n content = (\r\n <MKUploadImageItem\r\n onView={handleShowImageViewer}\r\n onDelete={handleDelete}\r\n modelValue={unref(modelValue) as string}\r\n onUpdate:modelValue={(value) => (modelValue.value = value)}\r\n uploadContext={props.uploadContext}\r\n width={props.width}\r\n height={props.height}\r\n icon={props.icon}\r\n />\r\n );\r\n } else {\r\n let images: VNode[] | null = null;\r\n\r\n if (Array.isArray(unref(modelValue))) {\r\n images = (unref(modelValue) as string[]).map((src) => (\r\n <MKUploadImageItem\r\n onView={handleShowImageViewer}\r\n onDelete={handleDelete}\r\n modelValue={src}\r\n uploadContext={props.uploadContext}\r\n width={props.width}\r\n height={props.height}\r\n icon={props.icon}\r\n />\r\n ));\r\n }\r\n\r\n content = (\r\n <Fragment>\r\n {images}\r\n <MKUploadImageItem\r\n onUpdate:modelValue={handleAppendImage}\r\n uploadContext={props.uploadContext}\r\n width={props.width}\r\n height={props.height}\r\n icon={props.icon}\r\n />\r\n </Fragment>\r\n );\r\n }\r\n\r\n const imageViewer = unref(isShowImageViewer) ? (\r\n <ElImageViewer teleported zIndex={99}\r\n onClose={handleCloseImageViewer}\r\n urlList={[unref(currentImageSrc)]}\r\n />\r\n ) : null;\r\n\r\n return (\r\n <div class=\"mk-upload-image\" style={{ width: !_multiple ? \"\" : props.width }}>\r\n {content}\r\n {imageViewer}\r\n </div>\r\n );\r\n };\r\n },\r\n});\r\n","import { withInstall } from \"@maketribe/utils\";\r\nimport UploadImage from \"./upload-image\";\r\n\r\nexport const MKUploadImage = withInstall(UploadImage);\r\nexport default MKUploadImage;\r\n\r\nexport * from \"./upload-image-options\";\r\n","import { ExtractPropTypes } from \"vue\";\r\nimport { buildProps } from \"@maketribe/utils\";\r\nimport { WebFileUploadContext, UploadContext } from \"../../context\";\r\n\r\nexport const uploadFileUiProps = buildProps({\r\n uploadContext: {\r\n type: UploadContext,\r\n default: () => new WebFileUploadContext(),\r\n },\r\n modelValue: {\r\n type: [String, Array<String>],\r\n },\r\n multiple: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n width: {\r\n type: String,\r\n default: \"180px\",\r\n },\r\n height: {\r\n type: String,\r\n default: \"180px\",\r\n },\r\n icon: {\r\n type: String,\r\n default: \"UploadFilled\",\r\n }\r\n} as const);\r\n\r\nexport type UploadFileUiProps = ExtractPropTypes<typeof uploadFileUiProps>;\r\n\r\nexport const uploadFileUiEmits = {\r\n \"update:modelValue\": (path: string | string[]) => true,\r\n};\r\n\r\nexport type UploadFileUiEmits = typeof uploadFileUiEmits;\r\n","import {\r\n Fragment,\r\n Ref,\r\n VNode,\r\n computed,\r\n defineComponent,\r\n ref,\r\n unref,\r\n watch,\r\n} from \"vue\";\r\nimport { ElImage, ElTooltip, ElImageViewer } from \"element-plus\";\r\nimport { MKSvgIcon } from \"../../../svg-icon\";\r\nimport { MKUploadFile } from \"../../upload-file\";\r\nimport { uploadFileUiEmits, uploadFileUiProps } from \"./upload-file-options\";\r\nimport { UploadContext } from \"../../context\";\r\n\r\nconst MKUploadFileItem = defineComponent({\r\n name: \"MKUploadFileItem\",\r\n props: {\r\n modelValue: {\r\n type: String,\r\n default: \"\",\r\n },\r\n uploadContext: {\r\n type: UploadContext,\r\n required: true,\r\n },\r\n width: {\r\n type: String,\r\n default: \"180px\",\r\n },\r\n height: {\r\n type: String,\r\n default: \"180px\",\r\n },\r\n icon: {\r\n type: String,\r\n default: \"ep:plus\",\r\n }\r\n },\r\n emits: [\"update:modelValue\", \"view\", \"delete\"],\r\n setup(props, { emit }) {\r\n const uploadFileInstance: Ref<InstanceType<typeof MKUploadFile> | null> =\r\n ref(null);\r\n\r\n const imageInstance: Ref<InstanceType<typeof ElImage> | null> = ref(null);\r\n\r\n const currentFileName: Ref<string> = ref(\"\")\r\n\r\n const modelValue = computed({\r\n get: () => props.modelValue as string,\r\n set: (v: string) => {\r\n emit(\"update:modelValue\", v);\r\n },\r\n });\r\n\r\n\r\n\r\n const getFileIconBySuffix = (v: string) => {\r\n const index = v.lastIndexOf('.');\r\n const indexBias = v.lastIndexOf('/');\r\n // TODO 需要处理\r\n const icon = [\"html\", \"apk\", \"eps\", \"ppt\", \"xml\", \"pdf\", \"exe\", \"psd\", \"visio\", \"xls\", \"doc\", \"txt\", \"dll\", \"tiff\", \"bmp\", \"audio\"]\r\n const zipIcon = [\"zip\", \"rar\", \"zip\", \"tar\", \"gz\", \"bz2\", \"7z\"]\r\n const suffixIcon = v.substring(index + 1)\r\n const suffix = v.substring(indexBias + 1)\r\n if (icon.includes(suffixIcon)) {\r\n return {\r\n icon: suffixIcon,\r\n suffix: suffix,\r\n }\r\n } else if (zipIcon.includes(suffixIcon)) {\r\n return {\r\n icon: \"yasuo\",\r\n suffix: suffix\r\n }\r\n } else {\r\n return {\r\n icon: \"weizhiwenjian\",\r\n suffix: suffix\r\n }\r\n }\r\n }\r\n\r\n const handleUpdateModelValue = (v: string) => {\r\n modelValue.value = v;\r\n };\r\n\r\n const handleClick = (event: MouseEvent) => {\r\n event.stopPropagation();\r\n\r\n if (unref(modelValue)) {\r\n return;\r\n }\r\n\r\n unref(uploadFileInstance)?.handleUpload();\r\n };\r\n\r\n const handleDelete = (event: MouseEvent) => {\r\n event.stopPropagation();\r\n\r\n // modelValue.value = \"\";\r\n emit(\"delete\", unref(modelValue));\r\n };\r\n\r\n return () => {\r\n let content;\r\n\r\n if (unref(modelValue)) {\r\n content = (\r\n <Fragment>\r\n <div class=\"mk-upload-file-ui-item__file\">\r\n <MKSvgIcon name={getFileIconBySuffix(props.modelValue).icon} />\r\n <div class=\"mk-upload-file-ui-item__file__name\">\r\n {getFileIconBySuffix(props.modelValue).suffix}\r\n </div>\r\n </div>\r\n\r\n <div class=\"mk-upload-file-ui-item__mask\">\r\n <ElTooltip content=\"删除\">\r\n <MKSvgIcon name=\"ep:delete\" onClick={handleDelete} />\r\n </ElTooltip>\r\n </div>\r\n </Fragment>\r\n );\r\n } else {\r\n content = <div class=\"mk-upload-file-ui-item__wrapper__desc\">\r\n <MKSvgIcon name={props.icon} class=\"mk-upload-file-ui-item__wrapper__desc__icon\" />\r\n <span class=\"mk-upload-file-ui-item__wrapper__desc__text\">点击上传文件</span>\r\n </div>;\r\n }\r\n\r\n return (\r\n <div class=\"mk-upload-file-ui-item\" style={{ width: props.width, height: props.height }}>\r\n <MKUploadFile\r\n modelValue={props.modelValue}\r\n onUpdate:modelValue={handleUpdateModelValue}\r\n uploadContext={props.uploadContext}\r\n ref={\r\n ((el: InstanceType<typeof MKUploadFile>) =>\r\n (uploadFileInstance.value = el)) as any\r\n }\r\n >\r\n <div class=\"mk-upload-file-ui-item__wrapper\" onClick={handleClick}>\r\n {content}\r\n </div>\r\n </MKUploadFile>\r\n </div>\r\n );\r\n };\r\n },\r\n});\r\n\r\nexport default defineComponent({\r\n name: \"MKUploadFile\",\r\n props: uploadFileUiProps,\r\n emits: uploadFileUiEmits,\r\n setup(props, { emit }) {\r\n const modelValue = computed({\r\n get: () => props.modelValue as string[] | string,\r\n set: (v: string[] | string) => emit(\"update:modelValue\", v),\r\n });\r\n\r\n const currentImageSrc: Ref<string> = ref(\"\");\r\n\r\n const multiple = computed(() => props.multiple);\r\n\r\n const isShowImageViewer: Ref<boolean> = ref(false);\r\n\r\n watch(\r\n computed(() => [unref(modelValue), unref(multiple)]),\r\n ([value, multiple]) => {\r\n if (multiple && !Array.isArray(value)) {\r\n modelValue.value = [];\r\n }\r\n },\r\n { immediate: true }\r\n );\r\n\r\n const handleDelete = (src: string) => {\r\n if (!unref(multiple)) {\r\n modelValue.value = \"\";\r\n return;\r\n }\r\n\r\n const index = unref(modelValue).indexOf(src);\r\n\r\n if (index === -1) {\r\n return;\r\n }\r\n\r\n (modelValue.value as string[]).splice(index, 1);\r\n };\r\n\r\n const handleShowImageViewer = (src: string) => {\r\n isShowImageViewer.value = true;\r\n currentImageSrc.value = src;\r\n };\r\n\r\n const handleCloseImageViewer = () => {\r\n isShowImageViewer.value = false;\r\n };\r\n\r\n const handleAppendImage = (src: string) => {\r\n const _value = unref(modelValue);\r\n\r\n if (Array.isArray(_value)) {\r\n _value.push(src);\r\n }\r\n };\r\n\r\n return () => {\r\n const _multiple = unref(multiple);\r\n\r\n let content;\r\n\r\n if (!_multiple) {\r\n content = (\r\n <MKUploadFileItem\r\n onView={handleShowImageViewer}\r\n onDelete={handleDelete}\r\n modelValue={unref(modelValue) as string}\r\n onUpdate:modelValue={(value) => (modelValue.value = value)}\r\n uploadContext={props.uploadContext}\r\n width={props.width}\r\n height={props.height}\r\n icon={props.icon}\r\n />\r\n );\r\n } else {\r\n let images: VNode[] | null = null;\r\n\r\n if (Array.isArray(unref(modelValue))) {\r\n images = (unref(modelValue) as string[]).map((src) => (\r\n <MKUploadFileItem\r\n onView={handleShowImageViewer}\r\n onDelete={handleDelete}\r\n modelValue={src}\r\n uploadContext={props.uploadContext}\r\n width={props.width}\r\n height={props.height}\r\n icon={props.icon}\r\n />\r\n ));\r\n }\r\n\r\n content = (\r\n <Fragment>\r\n {images}\r\n <MKUploadFileItem\r\n onUpdate:modelValue={handleAppendImage}\r\n uploadContext={props.uploadContext}\r\n width={props.width}\r\n height={props.height}\r\n icon={props.icon}\r\n />\r\n </Fragment>\r\n );\r\n }\r\n\r\n return (\r\n <div class=\"mk-upload-file-ui\" style={{ width: _multiple ? \"\" : props.width }}>\r\n {content}\r\n </div>\r\n );\r\n };\r\n },\r\n});\r\n","import { withInstall } from \"@maketribe/utils\";\r\nimport UploadFile from \"./upload-file\";\r\n\r\nexport const MKUploadFileUi = withInstall(UploadFile);\r\nexport default MKUploadFileUi;\r\n\r\nexport * from \"./upload-file-options\";\r\n","import { ExtractPropTypes } from \"vue\";\r\nimport { buildProps } from \"@maketribe/utils\";\r\nimport { WebFileUploadContext, UploadContext } from \"../../context\";\r\n\r\nexport const uploadVideoProps = buildProps({\r\n uploadContext: {\r\n type: UploadContext,\r\n default: () => new WebFileUploadContext(),\r\n },\r\n modelValue: {\r\n type: [String, Array<String>],\r\n },\r\n multiple: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n width: {\r\n type: String,\r\n default: \"180px\",\r\n },\r\n height: {\r\n type: String,\r\n default: \"180px\",\r\n },\r\n icon: {\r\n type: String,\r\n default: \"UploadFilled\",\r\n }\r\n} as const);\r\n\r\nexport type UploadVideoProps = ExtractPropTypes<typeof uploadVideoProps>;\r\n\r\nexport const uploadVideoEmits = {\r\n \"update:modelValue\": (path: string | string[]) => true,\r\n};\r\n\r\nexport type UploadVideoEmits = typeof uploadVideoEmits;\r\n","import {\r\n Fragment,\r\n Ref,\r\n VNode,\r\n computed,\r\n defineComponent,\r\n ref,\r\n unref,\r\n watch,\r\n} from \"vue\";\r\nimport { ElImage, ElTooltip, ElImageViewer } from \"element-plus\";\r\nimport { MKSvgIcon } from \"../../../svg-icon\";\r\nimport { MKUploadFile } from \"../../upload-file\";\r\nimport { uploadVideoEmits, uploadVideoProps } from \"./upload-video-options\";\r\nimport { UploadContext } from \"../../context\";\r\n\r\nconst MKUploadFileItem = defineComponent({\r\n name: \"MKUploadFileItem\",\r\n props: {\r\n modelValue: {\r\n type: String,\r\n default: \"\",\r\n },\r\n uploadContext: {\r\n type: UploadContext,\r\n required: true,\r\n },\r\n width: {\r\n type: String,\r\n default: \"180px\",\r\n },\r\n height: {\r\n type: String,\r\n default: \"180px\",\r\n },\r\n icon: {\r\n type: String,\r\n default: \"ep:plus\",\r\n }\r\n },\r\n emits: [\"update:modelValue\", \"view\", \"delete\"],\r\n setup(props, { emit }) {\r\n const uploadFileInstance: Ref<InstanceType<typeof MKUploadFile> | null> =\r\n ref(null);\r\n\r\n const imageInstance: Ref<InstanceType<typeof ElImage> | null> = ref(null);\r\n\r\n const currentFileName: Ref<string> = ref(\"\")\r\n\r\n const modelValue = computed({\r\n get: () => props.modelValue as string,\r\n set: (v: string) => {\r\n emit(\"update:modelValue\", v);\r\n },\r\n });\r\n\r\n\r\n\r\n const getFileIconBySuffix = (v: string) => {\r\n const index = v.lastIndexOf('.');\r\n const indexBias = v.lastIndexOf('/');\r\n const icon = [\"html\", \"apk\", \"eps\", \"ppt\", \"xml\", \"pdf\", \"exe\", \"psd\", \"visio\", \"xls\", \"doc\", \"txt\", \"dll\", \"tiff\", \"bmp\", \"audio\"]\r\n const zipIcon = [\"zip\", \"rar\", \"zip\", \"tar\", \"gz\", \"bz2\", \"7z\"]\r\n const suffixIcon = v.substring(index + 1)\r\n const suffix = v.substring(indexBias + 1)\r\n if (icon.includes(suffixIcon)) {\r\n return {\r\n icon: suffixIcon,\r\n suffix: suffix,\r\n }\r\n } else if (zipIcon.includes(suffixIcon)) {\r\n return {\r\n icon: \"yasuo\",\r\n suffix: suffix\r\n }\r\n } else {\r\n return {\r\n icon: \"weizhiwenjian\",\r\n suffix: suffix\r\n }\r\n }\r\n }\r\n\r\n const handleUpdateModelValue = (v: string) => {\r\n modelValue.value = v;\r\n };\r\n\r\n const handleClick = (event: MouseEvent) => {\r\n event.stopPropagation();\r\n\r\n if (unref(modelValue)) {\r\n return;\r\n }\r\n\r\n unref(uploadFileInstance)?.handleUpload();\r\n };\r\n\r\n const handleView = (event: MouseEvent) => {\r\n event.stopPropagation();\r\n\r\n emit(\"view\", unref(modelValue));\r\n };\r\n\r\n const handleDelete = (event: MouseEvent) => {\r\n event.stopPropagation();\r\n\r\n // modelValue.value = \"\";\r\n emit(\"delete\", unref(modelValue));\r\n };\r\n\r\n return () => {\r\n let content;\r\n\r\n if (unref(modelValue)) {\r\n content = (\r\n <Fragment>\r\n <div class=\"mk-upload-video-item__file\">\r\n <MKSvgIcon name=\"material-symbols:video-file\" />\r\n </div>\r\n\r\n <div class=\"mk-upload-video-item__mask\">\r\n <ElTooltip content=\"查看\">\r\n <MKSvgIcon name=\"ep:view\" onClick={handleView} />\r\n </ElTooltip>\r\n <ElTooltip content=\"删除\">\r\n <MKSvgIcon name=\"ep:delete\" onClick={handleDelete} />\r\n </ElTooltip>\r\n </div>\r\n </Fragment>\r\n );\r\n } else {\r\n content = <div class=\"mk-upload-video-item__wrapper__desc\">\r\n <MKSvgIcon name={props.icon} class=\"mk-upload-video-item__wrapper__desc__icon\" />\r\n <span class=\"mk-upload-video-item__wrapper__desc__text\">点击上传视频</span>\r\n </div>;\r\n }\r\n\r\n return (\r\n <div class=\"mk-upload-video-item\" style={{ width: props.width, height: props.height }}>\r\n <MKUploadFile\r\n modelValue={props.modelValue}\r\n onUpdate:modelValue={handleUpdateModelValue}\r\n uploadContext={props.uploadContext}\r\n ref={\r\n ((el: InstanceType<typeof MKUploadFile>) =>\r\n (uploadFileInstance.value = el)) as any\r\n }\r\n >\r\n <div class=\"mk-upload-video-item__wrapper\" onClick={handleClick}>\r\n {content}\r\n </div>\r\n </MKUploadFile>\r\n </div>\r\n );\r\n };\r\n },\r\n});\r\n\r\nexport default defineComponent({\r\n name: \"MKUploadFile\",\r\n props: uploadVideoProps,\r\n emits: uploadVideoEmits,\r\n setup(props, { emit }) {\r\n const modelValue = computed({\r\n get: () => props.modelValue as string[] | string,\r\n set: (v: string[] | string) => emit(\"update:modelValue\", v),\r\n });\r\n\r\n const currentVideoSrc: Ref<string> = ref(\"\");\r\n\r\n const multiple = computed(() => props.multiple);\r\n\r\n const isShowVideoViewer: Ref<boolean> = ref(false);\r\n\r\n watch(\r\n computed(() => [unref(modelValue), unref(multiple)]),\r\n ([value, multiple]) => {\r\n if (multiple && !Array.isArray(value)) {\r\n modelValue.value = [];\r\n }\r\n },\r\n { immediate: true }\r\n );\r\n\r\n const handleDelete = (src: string) => {\r\n if (!unref(multiple)) {\r\n modelValue.value = \"\";\r\n return;\r\n }\r\n\r\n const index = unref(modelValue).indexOf(src);\r\n\r\n if (index === -1) {\r\n return;\r\n }\r\n\r\n (modelValue.value as string[]).splice(index, 1);\r\n };\r\n\r\n const handleShowImageViewer = (src: string) => {\r\n isShowVideoViewer.value = true;\r\n currentVideoSrc.value = src;\r\n };\r\n\r\n const handleCloseImageViewer = () => {\r\n isShowVideoViewer.value = false;\r\n };\r\n\r\n const handleAppendImage = (src: string) => {\r\n const _value = unref(modelValue);\r\n\r\n if (Array.isArray(_value)) {\r\n _value.push(src);\r\n }\r\n };\r\n\r\n return () => {\r\n const _multiple = unref(multiple);\r\n\r\n let content;\r\n\r\n if (!_multiple) {\r\n content = (\r\n <MKUploadFileItem\r\n onView={handleShowImageViewer}\r\n onDelete={handleDelete}\r\n modelValue={unref(modelValue) as string}\r\n onUpdate:modelValue={(value) => (modelValue.value = value)}\r\n uploadContext={props.uploadContext}\r\n width={props.width}\r\n height={props.height}\r\n icon={props.icon}\r\n />\r\n );\r\n } else {\r\n let images: VNode[] | null = null;\r\n\r\n if (Array.isArray(unref(modelValue))) {\r\n images = (unref(modelValue) as string[]).map((src) => (\r\n <MKUploadFileItem\r\n onView={handleShowImageViewer}\r\n onDelete={handleDelete}\r\n modelValue={src}\r\n uploadContext={props.uploadContext}\r\n width={props.width}\r\n height={props.height}\r\n icon={props.icon}\r\n />\r\n ));\r\n }\r\n\r\n content = (\r\n <Fragment>\r\n {images}\r\n <MKUploadFileItem\r\n onUpdate:modelValue={handleAppendImage}\r\n uploadContext={props.uploadContext}\r\n width={props.width}\r\n height={props.height}\r\n icon={props.icon}\r\n />\r\n </Fragment>\r\n );\r\n }\r\n\r\n const videoViewer = unref(isShowVideoViewer) ? (\r\n <div class=\"mk-upload-video-viewer\" >\r\n <MKSvgIcon class=\"mk-upload-video-viewer__close\" name=\"ep:close\" onClick={() => isShowVideoViewer.value = false}></MKSvgIcon>\r\n <div class=\"mk-upload-video-viewer__mask\"></div>\r\n <video class=\"mk-upload-video-viewer__video\" src={currentVideoSrc.value} controls></video>\r\n </div>\r\n ) : null;\r\n\r\n return (\r\n <div class=\"mk-upload-video\" style={{ width: _multiple ? \"\" : props.width }}>\r\n {content}\r\n {videoViewer}\r\n </div>\r\n );\r\n };\r\n },\r\n});\r\n","import { withInstall } from \"@maketribe/utils\";\r\nimport UploadVideo from \"./upload-video\"\r\n\r\nexport const MKUploadVideo = withInstall(UploadVideo);\r\nexport default MKUploadVideo;\r\n\r\nexport * from \"./upload-video-options\";\r\n","window._iconfont_svg_string_1032790='<svg><symbol id=\"icon-doc-flex-right\" viewBox=\"0 0 1024 1024\"><path d=\"M926.25224691 70.13093706a27.61681602 27.61681602 0 0 0-27.61681603 27.61681603v828.50449382a27.61681602 27.61681602 0 1 0 55.23363206 0v-828.50449382a27.61681602 27.61681602 0 0 0-27.61681603-27.61681603zM180.59820247 567.23363335a55.23363335 55.23363335 0 0 0-55.23363335 55.23363206v110.46726671a55.23363335 55.23363335 0 0 0 55.23363335 55.23363206h552.33632965a55.23363335 55.23363335 0 0 0 55.23363206-55.23363206v-110.46726671a55.23363335 55.23363335 0 0 0-55.23363206-55.23363206H180.59820247z m276.16816418-331.40179753a55.23363335 55.23363335 0 0 0-55.23363206 55.23363206v110.46726671a55.23363335 55.23363335 0 0 0 55.23363206 55.23363206h276.16816547a55.23363335 55.23363335 0 0 0 55.23363206-55.23363206V291.06546788a55.23363335 55.23363335 0 0 0-55.23363206-55.23363206h-276.16816547z\" ></path></symbol><symbol id=\"icon-doc-flex-h-center\" viewBox=\"0 0 1024 1024\"><path d=\"M953.86906294 512a27.61681602 27.61681602 0 0 1-27.61681603 27.61681602H788.16816418v110.46726671a55.23363335 55.23363335 0 0 1-55.23363206 55.23363206h-110.46726671a55.23363335 55.23363335 0 0 1-55.23363206-55.23363206v-110.46726671h-110.4672667V788.16816418a55.23363335 55.23363335 0 0 1-55.23363206 55.23363335H291.06546788a55.23363335 55.23363335 0 0 1-55.23363206-55.23363335v-248.55134816H97.74775309a27.61681602 27.61681602 0 1 1 0-55.23363204H235.83183582V235.83183582a55.23363335 55.23363335 0 0 1 55.23363206-55.23363335h110.46726671a55.23363335 55.23363335 0 0 1 55.23363206 55.23363335v248.55134816h110.4672667v-110.46726671a55.23363335 55.23363335 0 0 1 55.23363206-55.23363206h110.46726671a55.23363335 55.23363335 0 0 1 55.23363206 55.23363206v110.46726671h138.08408273a27.61681602 27.61681602 0 0 1 27.61681603 27.61681602z\" ></path></symbol><symbol id=\"icon-doc-flex-v-justify\" viewBox=\"0 0 1024 1024\"><path d=\"M263.44865185 70.13093706a27.61681602 27.61681602 0 0 1 27.61681603 27.61681603v828.50449382a27.61681602 27.61681602 0 1 1-55.23363206 0v-828.50449382a27.61681602 27.61681602 0 0 1 27.61681603-27.61681603z m497.1026963 0a27.61681602 27.61681602 0 0 1 27.61681603 27.61681603v828.50449382a27.61681602 27.61681602 0 1 1-55.23363206 0v-828.50449382a27.61681602 27.61681602 0 0 1 27.61681603-27.61681603zM567.23363335 180.59820247a55.23363335 55.23363335 0 0 1 55.23363206 55.23363335v552.33632836a55.23363335 55.23363335 0 0 1-55.23363206 55.23363335h-110.4672667a55.23363335 55.23363335 0 0 1-55.23363206-55.23363335V235.83183582a55.23363335 55.23363335 0 0 1 55.23363206-55.23363335h110.4672667z\" ></path></symbol><symbol id=\"icon-doc-flex-bottom\" viewBox=\"0 0 1024 1024\"><path d=\"M960.15254694 898.63543088a27.61681602 27.61681602 0 0 0-27.61681733-27.61681731H104.03123579a27.61681602 27.61681602 0 1 0 0 55.23363334h828.50449382a27.61681602 27.61681602 0 0 0 27.61681733-27.61681603z m-497.10269629-745.65404445a55.23363335 55.23363335 0 0 0-55.23363337-55.23363334h-110.4672654a55.23363335 55.23363335 0 0 0-55.23363336 55.23363334v552.33632836a55.23363335 55.23363335 0 0 0 55.23363336 55.23363336h110.4672654a55.23363335 55.23363335 0 0 0 55.23363337-55.23363336v-552.33632836z m331.40179752 276.16816418a55.23363335 55.23363335 0 0 0-55.23363335-55.23363334h-110.46726542a55.23363335 55.23363335 0 0 0-55.23363334 55.23363334v276.16816418a55.23363335 55.23363335 0 0 0 55.23363334 55.23363336h110.46726542a55.23363335 55.23363335 0 0 0 55.23363335-55.23363336v-276.16816418z\" ></path></symbol><symbol id=\"icon-doc-flex-h-justify\" viewBox=\"0 0 1024 1024\"><path d=\"M953.86906294 263.44865185a27.61681602 27.61681602 0 0 1-27.61681603 27.61681603h-828.50449382a27.61681602 27.61681602 0 0 1 0-55.23363206h828.50449382a27.61681602 27.61681602 0 0 1 27.61681603 27.61681603z m0 497.1026963a27.61681602 27.61681602 0 0 1-27.61681603 27.61681603h-828.50449382a27.61681602 27.61681602 0 1 1 0-55.23363206h828.50449382a27.61681602 27.61681602 0 0 1 27.61681603 27.61681603zM843.40179753 567.23363335a55.23363335 55.23363335 0 0 1-55.23363335 55.23363206H235.83183582a55.23363335 55.23363335 0 0 1-55.23363335-55.23363206v-110.4672667a55.23363335 55.23363335 0 0 1 55.23363335-55.23363206h552.33632836a55.23363335 55.23363335 0 0 1 55.23363335 55.23363206v110.4672667z\" ></path></symbol><symbol id=\"icon-doc-flex-v-center\" viewBox=\"0 0 1024 1024\"><path d=\"M512 70.13093706a27.61681602 27.61681602 0 0 1 27.61681602 27.61681603V235.83183582h110.46726671a55.23363335 55.23363335 0 0 1 55.23363206 55.23363206v110.46726671a55.23363335 55.23363335 0 0 1-55.23363206 55.23363206h-110.46726671v110.4672667H788.16816418a55.23363335 55.23363335 0 0 1 55.23363335 55.23363206v110.46726671a55.23363335 55.23363335 0 0 1-55.23363335 55.23363206h-248.55134816v138.08408273a27.61681602 27.61681602 0 1 1-55.23363204 0V788.16816418H235.83183582a55.23363335 55.23363335 0 0 1-55.23363335-55.23363206v-110.46726671a55.23363335 55.23363335 0 0 1 55.23363335-55.23363206h248.55134816v-110.4672667h-110.46726671a55.23363335 55.23363335 0 0 1-55.23363206-55.23363206V291.06546788a55.23363335 55.23363335 0 0 1 55.23363206-55.23363206h110.46726671V97.74775309A27.61681602 27.61681602 0 0 1 512 70.13093706z\" ></path></symbol><symbol id=\"icon-doc-flex-top\" viewBox=\"0 0 1024 1024\"><path d=\"M953.86906294 152.98138643a27.61681602 27.61681602 0 0 1-27.61681603 27.61681604h-828.50449382a27.61681602 27.61681602 0 0 1 0-55.23363335h828.50449382a27.61681602 27.61681602 0 0 1 27.61681603 27.61681731zM456.76636665 898.63543088a55.23363335 55.23363335 0 0 1-55.23363206 55.23363206H291.06546788a55.23363335 55.23363335 0 0 1-55.23363206-55.23363206V346.29910124a55.23363335 55.23363335 0 0 1 55.23363206-55.23363336h110.46726671a55.23363335 55.23363335 0 0 1 55.23363206 55.23363336v552.33632964z m331.40179753-276.16816547a55.23363335 55.23363335 0 0 1-55.23363206 55.23363335h-110.46726671a55.23363335 55.23363335 0 0 1-55.23363206-55.23363335V346.29910124a55.23363335 55.23363335 0 0 1 55.23363206-55.23363336h110.46726671a55.23363335 55.23363335 0 0 1 55.23363206 55.23363336v276.16816417z\" ></path></symbol><symbol id=\"icon-doc-flex-left\" viewBox=\"0 0 1024 1024\"><path d=\"M152.98138643 70.13093706a27.61681602 27.61681602 0 0 1 27.61681604 27.61681603v828.50449382a27.61681602 27.61681602 0 1 1-55.23363335 0v-828.50449382a27.61681602 27.61681602 0 0 1 27.61681731-27.61681603zM898.63543088 567.23363335a55.23363335 55.23363335 0 0 1 55.23363206 55.23363206v110.46726671a55.23363335 55.23363335 0 0 1-55.23363206 55.23363206H346.29910124a55.23363335 55.23363335 0 0 1-55.23363336-55.23363206v-110.46726671a55.23363335 55.23363335 0 0 1 55.23363336-55.23363206h552.33632964z m-276.16816547-331.40179753a55.23363335 55.23363335 0 0 1 55.23363335 55.23363206v110.46726671a55.23363335 55.23363335 0 0 1-55.23363335 55.23363206H346.29910124a55.23363335 55.23363335 0 0 1-55.23363336-55.23363206V291.06546788a55.23363335 55.23363335 0 0 1 55.23363336-55.23363206h276.16816417z\" ></path></symbol><symbol id=\"icon-doc-bold\" viewBox=\"0 0 1024 1024\"><path d=\"M226.65787417 129.49114628h338.35346805c62.40969008 0 112.45653965 15.70274924 150.16643951 47.09530231 37.69695447 31.40549847 56.55837709 78.85032613 56.55837709 142.36037373 0 38.53840435-8.62162489 71.54913027-25.83898391 99.00628702-17.23030439 27.4830475-41.77475003 48.70052978-73.6203915 63.69128297v2.13598814c42.90099831 10.00678083 75.40685431 32.29872987 97.50462262 66.90173787 22.0977683 34.61595339 33.15312514 77.9700401 33.15312514 130.04931477 0 29.96856098-4.88040928 57.98236918-14.62828248 84.02847922-9.74787318 26.05905541-25.03637017 48.53223981-45.82665482 67.43249856-20.81617541 18.91320415-47.45777303 33.90395733-79.95068365 44.95931417-32.51880139 11.06830222-71.18665955 16.59598064-116.02946528 16.59598065H226.65787417V129.49114628z m121.88077828 320.03575151h198.9187508c29.25656494 0 53.63272059-9.10060405 73.12846697-27.28886676 19.49574637-18.2012081 29.25656494-44.4156081 29.25656495-78.66909078 0-38.53840435-8.77696948-65.64603575-26.33090845-81.34878499-17.55393897-15.68980385-42.90099831-23.54765117-76.05412347-23.54765116H348.53865245V449.52689779z m0 335.02650469h215.48884069c37.04968533 0 65.81432573-10.52459615 86.29392117-31.57378845 20.47959547-21.03624691 30.71939318-50.83651792 30.71939319-89.37492227 0-37.81346291-10.23979773-66.90173787-30.71939319-87.23893412s-49.24423585-30.49932169-86.29392117-30.49932169H348.53865245V784.55340248z\" ></path></symbol><symbol id=\"icon-doc-italic\" viewBox=\"0 0 1024 1024\"><path d=\"M630.50203339 163.97764584l-125.66083003 691.19281935H395.7504632l125.66083004-691.19281935h109.09074015z\" ></path><path d=\"M768.30563239 255.72157315H350.26038835l17.9681912-98.85094242h418.04524406l-17.96819122 98.85094242zM659.16311072 855.99896969H241.11786667l17.9681912-98.83799704h418.04524405l-17.9681912 98.83799704z\" ></path></symbol><symbol id=\"icon-doc-underline\" viewBox=\"0 0 1024 1024\"><path d=\"M246.47725511 122.37118579h113.59573334V500.40225186c0 21.81296987 1.048576 43.93662894 3.18456414 66.33214103 2.11009739 22.42140286 8.18148187 42.56441837 18.17531733 60.42904653 9.99383547 17.87757353 25.12698785 32.57058291 45.43829333 44.06608275 20.28541472 11.52139061 48.92060128 17.26914053 85.87966894 17.26914056 36.94612227 0 65.56836347-5.74774992 85.87966895-17.26914056 20.28541472-11.49549985 35.44445787-26.20145461 45.43829333-44.06608275 9.99383547-17.86462815 16.03932918-38.00764365 18.17531734-60.42904653 2.11009739-22.40845748 3.18456415-44.53211653 3.18456414-66.33214103V122.37118579h113.59573333v415.28787752c0 41.8006408-6.35618291 78.15127547-19.08149411 109.051904-12.7253112 30.90062853-30.75822933 56.79139397-54.07286362 77.69818706-23.32757965 20.90679309-51.34138785 36.50597925-84.05436997 46.79755852-32.71298213 10.29157925-69.0636168 15.44384158-109.051904 15.44384159-39.9882872 0-76.3259765-5.15226231-109.051904-15.44384159-32.71298213-10.29157925-60.7397357-25.90371082-84.05436997-46.79755852-23.32757965-20.90679309-41.34755239-46.79755852-54.07286361-77.69818706-12.7253112-30.90062853-19.08149413-67.2512632-19.08149413-109.051904v-415.28787752zM205.03908503 840.45156504h608.6271684v61.29638716H205.03908503z\" ></path></symbol><symbol id=\"icon-doc-strikethrough\" viewBox=\"0 0 1024 1024\"><path d=\"M206.33362331 135.49846125v116.88386054h244.64184256v247.6063352h135.31808554V252.38232179H832.00986075V135.49846125zM450.97546587 608.50980031h135.30514016V893.70952692H450.97546587z\" ></path><path d=\"M207.11034627 532.37800454h625.3267121v44.01430125H207.11034627z\" ></path></symbol><symbol id=\"icon-doc-sub\" viewBox=\"0 0 1024 1024\"><path d=\"M670.61977442 693.84576318c9.30773017 0 18.35655269-0.77672297 27.14646755-2.3301689 8.78991486-1.55344592 16.73837985-4.12957709 23.84539497-7.75428424 7.10701511-3.61176178 13.19134498-8.27209955 18.22709887-13.95512256 5.03575387-5.68302302 8.33682647-12.6605843 9.89027238-20.94562925h36.06583626v271.45173017h-48.48045828V728.74651498h-66.69461175v-34.9007518zM94.7444243 135.49846125v116.88386054h244.65478795v247.6063352h135.30514014V252.38232179h245.72925472V135.49846125z\" ></path><path d=\"M339.39921225 483.31500406h135.30514014V893.70952692H339.39921225z\" ></path></symbol><symbol id=\"icon-doc-sup\" viewBox=\"0 0 1024 1024\"><path d=\"M819.12661586 141.34230029c9.92824551 0 19.58032287-0.8285045 28.95623205-2.48551347 9.37590918-1.65700898 17.85427184-4.40488223 25.43508797-8.27123654 7.58081612-3.8525459 14.07076798-8.82357285 19.44223879-14.88546407 5.37147079-6.06189122 8.8926149-13.50462325 10.54962389-22.34200451h38.47022532v289.54851218h-51.71248881V178.56976887h-71.14091921v-37.22746858zM91.53396939 141.42515074v124.67611792h260.96510714v264.11342423h144.32548282V266.10126866h262.11120503v-124.67611792z\" ></path><path d=\"M352.49907653 512.42946308h144.32548282v437.75415773H352.49907653z\" ></path></symbol><symbol id=\"icon-doc-link\" viewBox=\"0 0 1024 1024\"><path d=\"M412.55356997 639.61821237l-12.84181966-12.84181966c-103.70546094-103.70546094-103.70546094-272.43557925 0-376.12809483l58.47429374-58.47429372c103.70546094-103.70546094 272.43557925-103.70546094 376.12809481 0 50.22808494 50.24103031 77.90531318 117.02625975 77.90531319 188.0705201 0 71.04426035-27.66428286 137.82948978-77.90531319 188.07052011l-58.47429372 58.47429372-78.3454562-78.34545621 58.47429373-58.47429372c29.30834647-29.30834647 45.45123872-68.27394845 45.45123872-109.7250639s-16.14289225-80.41671743-45.45123872-109.72506389c-60.49377343-60.49377343-158.94340898-60.49377343-219.43718242 0l-58.47429373 58.47429372c-60.49377343 60.49377343-60.49377343 158.94340898 0 219.43718242l12.84181965 12.82887427-78.3454562 78.35840159z\" ></path><path d=\"M347.98200098 913.6460737c-71.04426035 0-137.82948978-27.66428286-188.07052009-77.90531319-103.70546094-103.70546094-103.70546094-272.43557925 0-376.12809481l58.47429372-58.47429374 78.34545621 78.3454562-58.47429373 58.47429372c-60.49377343 60.49377343-60.49377343 158.94340898 0 219.43718243 29.30834647 29.30834647 68.27394845 45.45123872 109.72506389 45.45123872s80.41671743-16.14289225 109.72506391-45.45123872l58.47429372-58.47429373c60.49377343-60.49377343 60.49377343-158.94340898 0-219.43718242l-12.64763891-12.63469353 78.3454562-78.3454562 12.64763892 12.64763892c103.70546094 103.69251555 103.70546094 272.43557925 0 376.12809481L536.05252109 835.74076051c-50.24103031 50.24103031-117.02625975 77.90531318-188.07052011 77.90531319z\" ></path></symbol><symbol id=\"icon-doc-unlink\" viewBox=\"0 0 1024 1024\"><path d=\"M714.18098725 714.01335467l128.0039443 128.0039443-28.56787057 28.56916512-128.00523885-128.00523884zM657.3701752 775.98937442l46.84934005 174.85457888-39.02385619 10.45728016-46.84934004-174.85587342zM756.63536987 648.12782934l174.85587343 46.84934005-10.45598561 39.02515073-174.85587342-46.84934004zM245.52318041 302.52235789l-128.00523884-128.00394429 28.56916512-28.57045966 128.0039443 128.00653337zM201.64739476 369.81634086L26.79411042 322.96570628l10.45598561-39.02515074 174.8545789 46.84934005zM300.93071297 241.95479577l-46.85063459-174.85587342 39.02515074-10.45598562 46.84934004 174.85457889z\" ></path><path d=\"M712.47219675 651.79784534l-78.34545622-78.3454562 78.06065778-78.06065778c29.30834647-29.30834647 45.45123872-68.27394845 45.45123872-109.72506389s-16.14289225-80.41671743-45.45123872-109.72506391c-29.30834647-29.30834647-68.27394845-45.45123872-109.72506389-45.45123872s-80.41671743 16.14289225-109.7250639 45.45123872l-78.06065777 78.06065778-78.34545622-78.3454562 78.06065778-78.06065778c103.70546094-103.70546094 272.43557925-103.70546094 376.12809483 0 50.22808494 50.22808494 77.90531318 117.02625975 77.90531317 188.07052011s-27.66428286 137.82948978-77.90531317 188.07052009l-78.04771239 78.06065778z\" ></path><path d=\"M354.6359277 897.12579319c-68.11860385 0-136.21131694-25.91665619-188.07052009-77.77585935-103.70546094-103.70546094-103.70546094-272.43557925 0-376.12809482l78.06065778-78.06065778 78.34545619 78.34545619-78.06065777 78.06065777c-60.49377343 60.49377343-60.49377343 158.94340898 0 219.43718244 60.49377343 60.49377343 158.94340898 60.49377343 219.43718241 0l78.06065778-78.06065779 78.34545619 78.34545621-78.06065777 78.06065778c-51.83331239 51.84625778-119.96486163 77.77585936-188.05757472 77.77585935z\" ></path></symbol><symbol id=\"icon-doc-text-left\" viewBox=\"0 0 1024 1024\"><path d=\"M93.96770133 166.81136987h843.06804939v129.69978944H93.96770133zM93.96770133 449.79743605H625.01319111v129.69978943H93.96770133zM93.96770133 732.78350222h843.06804939v129.69978943H93.96770133z\" ></path></symbol><symbol id=\"icon-doc-text-right\" viewBox=\"0 0 1024 1024\"><path d=\"M97.45000928 166.81136987h843.06804939v129.69978944H97.45000928zM409.47256889 449.79743605h531.04548978v129.69978943H409.47256889zM97.45000928 732.78350222h843.06804939v129.69978943H97.45000928z\" ></path></symbol><symbol id=\"icon-doc-text-center\" viewBox=\"0 0 1024 1024\"><path d=\"M93.56639447 129.78757531h843.06804938v129.69978944H93.56639447zM249.57120158 412.77364148H780.61669136v129.69978943H249.57120158zM93.56639447 695.75970765h843.06804938v129.69978944H93.56639447z\" ></path></symbol><symbol id=\"icon-doc-text-justify\" viewBox=\"0 0 1024 1024\"><path d=\"M92.40131003 464.12797472h843.06804938v129.69978943H92.40131003zM92.40131003 181.14190853h843.06804938v129.69978944H92.40131003zM92.40131003 747.11404089h531.04548978v129.69978942H92.40131003z\" ></path></symbol><symbol id=\"icon-doc-h1\" viewBox=\"0 0 1024 1024\"><path d=\"M781.4063597 654.73578983c9.96794469 0 19.66403635-0.8285045 29.08827497-2.49845886 9.41129324-1.65700898 17.92935506-4.42732089 25.55418548-8.31093572 7.61188503-3.87066943 14.12341253-8.86758717 19.53458252-14.95191703 5.39822459-6.08432987 8.93231408-13.56676109 10.58932306-22.43434825h38.64196741V897.38404347h-51.93687545V692.1350005h-71.47145799v-37.39921067zM121.7096565 447.86857403h531.04548977v129.69978944H121.7096565z\" ></path><path d=\"M589.78880475 897.40475607v-769.36998558h129.69978942v769.36998558zM121.71871826 897.40216699v-769.36998557h129.69978944v769.36998557z\" ></path></symbol><symbol id=\"icon-doc-h2\" viewBox=\"0 0 1024 1024\"><path d=\"M942.38219378 897.38404347H743.78707753c0.27185303-24.10430261 6.08432987-45.14054953 17.4503759-63.16052229 11.35310064-18.00702736 26.86166914-33.65799506 46.53865087-46.9529031 9.41129324-6.92577975 19.2497841-13.64443339 29.5025272-20.1559609 10.23979773-6.5115275 19.66403635-13.50203417 28.25977047-20.98446537 8.58278875-7.4824312 15.6509677-15.5862408 21.19159151-24.31142875 5.54062381-8.72518795 8.44038953-18.75785955 8.72518795-30.12390558 0-5.25582539-0.62137837-10.87412148-1.86413512-16.82899753s-3.67648869-11.49549985-7.27530507-16.62187142c-3.59881639-5.12637155-8.58278875-9.41129324-14.95191705-12.88065578-6.3691283-3.45641718-14.680064-5.19109847-24.9328071-5.19109848-9.42423861 0-17.24324978 1.86413511-23.46997887 5.60535071s-11.22364682 8.86758717-14.95191704 15.37911467c-3.74121561 6.5115275-6.5115275 14.20108483-8.3109357 23.05572662-1.79940819 8.86758717-2.84798419 18.42127961-3.11983723 28.67402271h-47.36715536c0-16.06521995 2.14893353-30.95241008 6.44680059-44.66157037 4.28492169-13.7091603 10.73172227-25.55418548 19.31451102-35.52213016 8.58278875-9.96794469 19.04265797-17.79990124 31.36666232-23.46997887 12.32400435-5.67007763 26.65454302-8.51806183 43.00456137-8.51806183 17.72222894 0 32.54469215 2.91271111 44.45444426 8.72518795 11.9097521 5.81247683 21.52817147 13.16545422 28.88114883 22.020096 7.340032 8.86758717 12.53113047 18.48600652 15.5862408 28.88114883 3.04216494 10.38219694 4.5697201 20.2983601 4.56972009 29.70965334 0 11.63789906-1.79940819 22.1624952-5.39822459 31.57378844a101.82838045 101.82838045 0 0 1-14.53766478 25.96843774c-6.09727525 7.89668347-13.02305502 15.15904317-20.77733927 21.81296987-7.75428425 6.65392672-15.79336691 12.88065581-24.10430262 18.69313265-8.3109357 5.81247683-16.62187141 11.36604603-24.9328071 16.6218714-8.3109357 5.26877076-16.00049303 10.52459615-23.05572663 15.79336692-7.06817897 5.26877076-13.23018114 10.73172227-18.48600651 16.41474528-5.26877076 5.68302302-8.86758717 11.70262597-10.79644919 18.07175428H942.43397531v42.38318302zM89.90285117 447.86857403h531.04548977v129.69978944H89.90285117z\" ></path><path d=\"M557.97293763 897.40993422V128.03994864h129.69978944v769.36998558zM89.90285117 897.40605061v-769.36998558h129.69978942v769.36998558z\" ></path></symbol><symbol id=\"icon-doc-h3\" viewBox=\"0 0 1024 1024\"><path d=\"M823.67303427 727.0357523c7.75428425 0.27185303 15.5085685-0.27185303 23.26285275-1.65700899 7.75428425-1.38515595 14.680064-3.80594252 20.77733925-7.27530509 6.08432987-3.45641718 11.00357531-8.23326341 14.74479091-14.33053867 3.74121561-6.08432987 5.60535072-13.56676109 5.60535072-22.43434824 0-12.46640355-4.22019476-22.43434825-12.67352968-29.91677946-8.45333491-7.4824312-19.31451102-11.22364682-32.62236444-11.22364682-8.3109357 0-15.52151387 1.65700898-21.60584375 4.98397236-6.09727525 3.32696336-11.1589199 7.83195653-15.15904317 13.50203416-4.01306864 5.68302302-7.00345205 12.05215131-8.93231406 19.1073849-1.94180741 7.06817897-2.7703119 14.33053867-2.49845888 21.81296986H747.21760395c0.55665147-14.12341253 3.18456415-27.21119447 7.89668346-39.26334578 4.71211931-12.05215131 11.14597452-22.49907517 19.31451101-31.36666231 8.1685365-8.86758717 18.07175427-15.79336691 29.70965333-20.77733925 11.63789906-4.98397235 24.7904079-7.4824312 39.4704719-7.48243122 11.35310064 0 22.49907517 1.65700898 33.45086894 4.98397235 10.93884839 3.32696336 20.77733925 8.1685365 29.50252722 14.53766479 8.72518795 6.3691283 15.71569461 14.47293787 20.98446537 24.31142874 5.25582539 9.83849086 7.89668347 21.12686459 7.89668346 33.86512119 0 14.680064-3.32696336 27.49599289-9.96794469 38.43484128-6.65392672 10.95179378-17.03612365 18.90025876-31.1595362 23.89717649v0.8285045c16.62187141 3.32696336 29.56725413 11.57317215 38.84909353 24.72568099 9.28183941 13.16545422 13.91628642 29.15300187 13.91628642 47.98853373 0 13.8515595-2.7703119 26.25323615-8.3109357 37.19208454-5.54062381 10.95179378-13.02305502 20.22068781-22.43434825 27.83257283-9.42423861 7.62483042-20.36308702 13.50203417-32.82949057 17.65750202-12.46640355 4.15546785-25.61891239 6.22672909-39.4704719 6.2267291-16.89372445 0-31.65146075-2.43373195-44.24731811-7.2753051-12.60880276-4.84157314-23.13339891-11.70262597-31.57378845-20.57021312-8.45333491-8.86758717-14.88719013-19.52163714-19.31451102-31.98804069-4.44026627-12.46640355-6.79632592-26.31796306-7.06817895-41.55467853h47.36715535c-0.55665147 17.73517431 3.80594252 32.47996524 13.08778193 44.24731812 9.28183941 11.78029827 23.19812583 17.65750203 41.76180464 17.65750204 15.79336691 0 29.01060267-4.50499318 39.67759802-13.50203419 10.65404997-8.99704098 16.00049303-21.81296987 16.00049304-38.43484128 0-11.35310064-2.22660583-20.36308702-6.65392671-27.00406835-4.42732089-6.65392672-10.25274311-11.70262597-17.45037591-15.15904315-7.21057817-3.45641718-15.31438775-5.60535072-24.31142874-6.44680058-9.00998637-0.8285045-18.21415348-1.10035753-27.62544672-0.8285045v-35.30205867zM91.27506173 447.86857403h531.04548977v129.69978944H91.27506173z\" ></path><path d=\"M559.34126459 897.40605061v-769.36998558h129.69978944v769.36998558zM91.27247265 897.40346153v-769.36998558h129.69978943v769.36998558z\" ></path></symbol><symbol id=\"icon-doc-h4\" viewBox=\"0 0 1024 1024\"><path d=\"M942.30452148 828.41104435h-37.39921066v68.97299912h-44.86869651v-68.97299912h-124.65109016v-46.95290311l124.65109016-174.91801127h44.86869651v184.48464909h37.39921066v37.38626529z m-170.36123654-37.38626529h88.080384v-127.97805353h-0.82850449l-87.25187951 127.97805353zM87.75391763 447.86857403H618.79940741v129.69978944H87.75391763z\" ></path><path d=\"M555.82659318 897.39957792v-769.36998558h129.69978943v769.36998558zM87.75780125 897.39698883V128.02700325h129.69978942v769.36998558z\" ></path></symbol><symbol id=\"icon-doc-h5\" viewBox=\"0 0 1024 1024\"><path d=\"M772.55171792 661.63567882h150.41240178v42.38318301h-115.09739773L792.91480494 777.97583328l0.82850449 0.8285045c6.3691283-7.1976328 14.47293787-12.67352969 24.31142874-16.41474528 9.82554548-3.74121561 19.59930943-5.60535072 29.29540108-5.60535072 14.39526558 0 27.27592139 2.43373195 38.64196742 7.27530508 11.35310064 4.85451852 20.90679309 11.63789906 28.67402272 20.36308701 7.75428425 8.72518795 13.64443339 19.04265797 17.65750202 30.95241008 4.01306864 11.9097521 6.01960297 24.7904079 6.01960296 38.64196741 0 11.63789906-1.86413511 23.61237808-5.60535072 35.93638242-3.74121561 12.32400435-9.69609165 23.54765117-17.86462815 33.65799505-8.1685365 10.1103439-18.62840573 18.42127961-31.36666232 24.93280712-12.73825659 6.49858213-27.97497205 9.76081857-45.71014636 9.76081857-14.12341253 0-27.21119447-1.86413511-39.26334579-5.60535071s-22.64147437-9.34656631-31.78091456-16.82899754c-9.13944019-7.4824312-16.41474528-16.68659831-21.81296988-27.62544672-5.39822459-10.93884839-8.37566261-23.7418319-8.93231407-38.43484128h47.36715535c1.38515595 15.79336691 6.78338053 27.91024514 16.20761916 36.35063467 9.41129324 8.45333491 21.8776968 12.67352969 37.39921067 12.67352967 9.96794469 0 18.42127961-1.65700898 25.34705936-4.98397234 6.92577975-3.32696336 12.53113047-7.89668347 16.82899753-13.7091603 4.29786706-5.81247683 7.340032-12.59585739 9.13944021-20.363087 1.79940819-7.75428425 2.70558498-16.06521995 2.70558498-24.93280712 0-8.02613728-1.11330291-15.71569461-3.32696336-23.05572661-2.22660583-7.340032-5.54062381-13.7738872-9.96794469-19.31451102-4.44026627-5.54062381-10.17507082-9.96794469-17.24324978-13.29490805s-15.31438775-4.98397235-24.72568098-4.98397234c-9.96794469 0-19.31451102 1.86413511-28.05264436 5.6053507s-15.02958933 10.73172227-18.90025876 20.98446539H741.39218173l31.15953619-159.1505351zM83.76673975 502.96412286h531.04548978v129.69978944H83.76673975z\" ></path><path d=\"M551.83941531 952.4964213v-769.36998559h129.69978944v769.36998559zM83.77062337 952.49253769V183.1225521h129.69978943v769.36998559z\" ></path></symbol><symbol id=\"icon-doc-h6\" viewBox=\"0 0 1024 1024\"><path d=\"M888.60707397 733.36604445c-1.11330291-11.9097521-5.33349769-21.52817147-12.67352967-28.88114884-7.340032-7.340032-17.24324978-11.01652069-29.70965333-11.0165207-8.59573413 0-16.00049303 1.59228208-22.22722214 4.77684623-6.22672909 3.18456415-11.49549985 7.4177043-15.79336691 12.67352968-4.29786706 5.26877076-7.75428425 11.28837373-10.38219694 18.07175427-2.64085808 6.79632592-4.77684622 13.91628642-6.4338552 21.39871763s-2.84798419 14.88719013-3.53408948 22.22722211c-0.69905067 7.340032-1.32042903 14.20108483-1.86413512 20.57021314l0.82850451 0.8285045c6.3691283-11.63789906 15.15904317-20.28541472 26.38268996-25.96843772 11.22364682-5.67007763 23.32757965-8.51806183 36.35063466-8.51806184 14.39526558 0 27.27592139 2.49845886 38.64196742 7.48243122 11.35310064 4.98397235 20.98446539 11.84502518 28.88114884 20.57021312 7.89668347 8.72518795 13.91628642 19.04265797 18.07175426 30.95241008 4.15546785 11.9097521 6.22672909 24.7904079 6.22672909 38.64196742 0 14.12341253-2.29133275 27.21119447-6.86105283 39.26334577-4.5697201 12.05215131-11.1589199 22.57674747-19.74170864 31.57378845-8.58278875 9.00998637-18.83553185 16.00049303-30.74528395 20.98446538-11.9097521 4.98397235-25.07520631 7.4824312-39.47047191 7.4824312-21.33399072 0-38.84909353-3.94834173-52.55825383-11.84502518s-24.51855486-18.69313264-32.41523831-32.41523832c-7.89668347-13.7091603-13.37258035-29.77438025-16.41474528-48.19565986-3.05511031-18.42127961-4.5697201-38.29244208-4.56972011-59.62643278 0-17.4503759 1.86413511-35.04315102 5.60535072-52.76537994 3.74121561-17.72222894 9.90321778-33.86512118 18.48600652-48.40278599 8.58278875-14.5376648 19.87116247-26.38268997 33.86512118-35.52213017 13.98101333-9.13944019 31.22426311-13.7091603 51.72974934-13.70916029 11.63789906 0 22.57674747 1.94180741 32.82949057 5.81247683 10.23979773 3.88361482 19.31451102 9.28183941 27.21119446 16.20761917s14.33053867 15.23671547 19.31451101 24.93280711c4.98397235 9.69609165 7.75428425 20.50548622 8.31093571 32.41523832h-47.3412646z m-45.69720099 183.65614458c8.58278875 0 16.06521995-1.7217359 22.43434826-5.19109846 6.3691283-3.45641718 11.70262597-7.96141037 16.00049303-13.50203418 4.28492169-5.54062381 7.4824312-11.97447902 9.55369245-19.32745639 2.07126124-7.340032 3.11983724-14.88719013 3.11983723-22.64147437 0-7.75428425-1.03563061-15.22377008-3.11983723-22.43434824-2.07126124-7.1976328-5.26877076-13.50203417-9.55369245-18.90025878-4.29786706-5.39822459-9.63136475-9.76081857-16.00049303-13.08778192-6.3691283-3.32696336-13.8515595-4.98397235-22.43434826-4.98397234-8.58278875 0-16.14289225 1.59228208-22.64147437 4.77684622-6.5115275 3.18456415-11.98742439 7.4824312-16.41474528 12.8806558-4.44026627 5.39822459-7.75428425 11.70262597-9.96794469 18.90025877-2.21366045 7.21057817-3.32696336 14.8224632-3.32696336 22.84860049 0 8.03908267 1.10035753 15.6509677 3.32696336 22.8486005 2.21366045 7.21057817 5.54062381 13.64443339 9.96794469 19.31451101 4.42732089 5.68302302 9.90321778 10.17507082 16.41474528 13.50203417 6.49858213 3.32696336 14.04574025 4.99691773 22.64147437 4.99691772zM86.82185008 501.15176928h531.04548977v129.69978944H86.82185008z\" ></path><path d=\"M554.89064202 950.68277317v-769.36998558h129.69978943v769.36998558zM86.82185008 950.69312948V181.3231439h129.69978942v769.36998558z\" ></path></symbol><symbol id=\"icon-doc-list-bullet\" viewBox=\"0 0 1024 1024\"><path d=\"M354.22167547 181.90568613h531.04548977V311.60547555H354.22167547zM354.22167547 464.8917523h531.04548977V594.59154173H354.22167547zM354.22167547 747.87781847h531.04548977V877.5776079H354.22167547z\" ></path><path d=\"M208.84502755 247.42226805m-64.84342202 0a64.84342203 64.84342203 0 1 0 129.68684405 0 64.84342203 64.84342203 0 1 0-129.68684405 0Z\" ></path><path d=\"M208.84502755 529.7481197m-64.84342202 0a64.84342203 64.84342203 0 1 0 129.68684405 0 64.84342203 64.84342203 0 1 0-129.68684405 0Z\" ></path><path d=\"M208.84502755 805.78251536m-64.84342202 0a64.84342203 64.84342203 0 1 0 129.68684405 0 64.84342203 64.84342203 0 1 0-129.68684405 0Z\" ></path></symbol><symbol id=\"icon-doc-list-number\" viewBox=\"0 0 1024 1024\"><path d=\"M154.11194943 180.33929482c7.37886815 0 14.56355555-0.62137837 21.54111684-1.85118973 6.97756128-1.22981136 13.28196267-3.27518183 18.92614954-6.14905679 5.64418686-2.87387497 10.45986924-6.56330903 14.45999249-11.08124761 4.00012325-4.50499318 6.61509057-10.04561698 7.84490192-16.62187141h28.62224119v215.39822302h-38.46073205V208.02946845h-52.92072454V180.33929482zM296.8995208 658.07569857H149.81408237c0.20712613-17.85168276 4.50499318-33.43792355 12.91949194-46.77166775 8.41449876-13.33374419 19.89705324-24.91986173 34.4606088-34.77129799 6.97756128-5.12637155 14.25286637-10.09739852 21.85180603-14.92602626 7.58599427-4.81568237 14.56355555-9.99383547 20.91973847-15.53445926s11.58611753-11.534336 15.68980386-17.99408198 6.25261985-13.89039565 6.45974596-22.30489442c0-3.89656019-0.46603378-8.05202805-1.38515595-12.46640355-0.91912217-4.4143755-2.71853037-8.50511645-5.38527921-12.31105897-2.66674883-3.79299714-6.35618291-6.97756128-11.0812476-9.54074706-4.72506469-2.56318578-10.87412148-3.84477867-18.46011576-3.84477866-6.97756128 0-12.76414736 1.38515595-17.38564899 4.15546785-4.60855625 2.7703119-8.3109357 6.56330903-11.08124761 11.39193679-2.7703119 4.81568237-4.82862775 10.51165076-6.14905678 17.0749598-1.33337442 6.56330903-2.11009739 13.64443339-2.30427812 21.23042765h-35.08198716c0-11.89680672 1.59228208-22.9262728 4.76390084-33.07545284s7.94846498-18.92614953 14.30464789-26.30501767c6.35618291-7.39181353 14.09752178-13.17839961 23.23696199-17.385649 9.12649482-4.20724939 19.74170864-6.30440139 31.84564148-6.30440138 13.12661808 0 24.10430261 2.14893353 32.92010824 6.45974598 8.81580563 4.31081245 15.9487115 9.74787318 21.38577225 16.31118223 5.43706075 6.56330903 9.28183941 13.69621491 11.534336 21.38577223 2.25249659 7.68955733 3.37874489 15.02958933 3.37874489 21.99420524 0 8.62162489-1.33337442 16.41474528-4.00012326 23.39230658a75.61656951 75.61656951 0 0 1-10.77055842 19.2368387 109.10109645 109.10109645 0 0 1-15.37911467 16.15583764c-5.74774992 4.91924543-11.68968059 9.54074706-17.85168276 13.8515595-6.1490568 4.31081245-12.31105897 8.41449876-18.46011575 12.31105897s-11.84502518 7.79312039-17.0749598 11.68968059c-5.22993461 3.89656019-9.79965472 7.94846498-13.69621492 12.15571437-3.89656019 4.20724939-6.56330903 8.67340642-8.00024652 13.38552573h104.92232691v31.35371694zM207.96474153 818.30070045c5.73480453 0.20712613 11.48255447-0.20712613 17.23030439-1.22981136 5.74774992-1.02268524 10.87412148-2.82209343 15.39206005-5.38527922 4.50499318-2.56318578 8.15559111-6.09727525 10.92590301-10.61521382 2.7703119-4.50499318 4.15546785-10.04561698 4.15546785-16.62187141 0-9.23005787-3.13278261-16.62187141-9.38540246-22.14954982-6.26556524-5.54062381-14.3046479-8.3109357-24.15608415-8.31093571-6.1490568 0-11.49549985 1.22981136-16.00049304 3.68943407-4.51793857 2.45962272-8.25915417 5.79953147-11.2365922 9.99383546-2.97743803 4.20724939-5.17815309 8.91936869-6.61509056 14.14930331-1.43693748 5.22993461-2.05831585 10.61521383-1.85118973 16.15583763h-35.08198716c0.41425225-10.45986924 2.35605965-20.15596089 5.85131299-29.07532958 3.48230795-8.91936869 8.25915417-16.66070755 14.3046479-23.23696197 6.04549373-6.56330903 13.38552573-11.68968059 21.99420523-15.37911467 8.62162489-3.68943408 18.35655269-5.54062381 29.23067418-5.54062381 8.41449876 0 16.66070755 1.22981136 24.76451714 3.68943408 8.10380958 2.45962272 15.37911467 6.05843911 21.85180601 10.77055842 6.45974597 4.72506469 11.63789906 10.71877689 15.53445927 17.99408198 3.89656019 7.28825047 5.85131298 15.6509677 5.85131299 25.07520632 0 10.87412148-2.45962272 20.36308702-7.39181354 28.46689659-4.91924543 8.10380958-12.62174815 14.0069041-23.08161739 17.69633817v0.62137837c12.31105897 2.45962272 21.89064217 8.56984336 28.77758579 18.30477116 6.87399822 9.74787318 10.30452464 21.59289837 10.30452465 35.53507555 0 10.2656885-2.05831585 19.44396483-6.1490568 27.53482905-4.10368631 8.10380958-9.64431013 14.97780781-16.62187142 20.62199466-6.97756128 5.64418686-15.08137086 10.00678083-24.31142872 13.07483655s-18.97793106 4.62150163-29.23067418 4.62150163c-12.51818509 0-23.4440881-1.79940819-32.76476366-5.38527922-9.33362094-3.58587102-17.12674133-8.66046103-23.39230656-15.23671545-6.26556524-6.56330903-11.02946608-14.4599925-14.30464791-23.69005038-3.2881272-9.23005787-5.0228085-19.48280098-5.22993461-30.77117472h35.08198716c-0.41425225 13.12661808 2.82209343 24.05252109 9.69609165 32.76476366 6.87399822 8.72518795 17.17852286 13.07483653 30.92651932 13.07483655 11.68968059 0 21.48933531-3.32696336 29.38601876-10.00678083 7.89668347-6.6668721 11.84502518-16.15583763 11.84502519-28.4668966 0-8.41449876-1.64406361-15.08137086-4.91924544-20.00061629-3.2881272-4.91924543-7.58599427-8.66046103-12.91949195-11.23659221-5.33349769-2.56318578-11.34015525-4.15546785-18.00702736-4.76390084-6.6668721-0.62137837-13.4890888-0.81555911-20.46665007-0.62137836v-26.11083694zM358.66194173 186.92849461h531.04548977v129.69978944H358.66194173zM358.66194173 497.61767981h531.04548977v129.69978943H358.66194173zM358.66194173 780.60374597h531.04548977v129.69978944H358.66194173z\" ></path></symbol></svg>',function(t){var h=(h=document.getElementsByTagName(\"script\"))[h.length-1],l=h.getAttribute(\"data-injectcss\"),h=h.getAttribute(\"data-disable-injectsvg\");if(!h){var a,o,i,c,e,v=function(h,l){l.parentNode.insertBefore(h,l)};if(l&&!t.__iconfont__svg__cssinject__){t.__iconfont__svg__cssinject__=!0;try{document.write(\"<style>.svgfont {display: inline-block;width: 1em;height: 1em;fill: currentColor;vertical-align: -0.1em;font-size:16px;}</style>\")}catch(h){console&&console.log(h)}}a=function(){var h,l=document.createElement(\"div\");l.innerHTML=t._iconfont_svg_string_1032790,(l=l.getElementsByTagName(\"svg\")[0])&&(l.setAttribute(\"aria-hidden\",\"true\"),l.style.position=\"absolute\",l.style.width=0,l.style.height=0,l.style.overflow=\"hidden\",l=l,(h=document.body).firstChild?v(l,h.firstChild):h.appendChild(l))},document.addEventListener?~[\"complete\",\"loaded\",\"interactive\"].indexOf(document.readyState)?setTimeout(a,0):(o=function(){document.removeEventListener(\"DOMContentLoaded\",o,!1),a()},document.addEventListener(\"DOMContentLoaded\",o,!1)):document.attachEvent&&(i=a,c=t.document,e=!1,s(),c.onreadystatechange=function(){\"complete\"==c.readyState&&(c.onreadystatechange=null,d())})}function d(){e||(e=!0,i())}function s(){try{c.documentElement.doScroll(\"left\")}catch(h){return void setTimeout(s,50)}d()}}(window);\r\n","import type { WatchOptionsBase } from 'vue'\r\nimport { watchEffect,onMounted, onUnmounted } from 'vue'\r\n\r\n/**\r\n * @internal\r\n */\r\nexport function useEffect(cb: () => (() => any) | undefined, options?: WatchOptionsBase) {\r\n watchEffect((onInvalidate) => {\r\n const unregister = cb()\r\n\r\n onInvalidate(() => unregister?.())\r\n }, {\r\n flush: 'post',\r\n ...options,\r\n })\r\n}\r\n\r\n\r\n/**\r\n * @internal\r\n */\r\nexport function useMounted(cb: () => undefined | (() => any)) {\r\n \r\n let unregister: (() => void) | undefined\r\n\r\n onMounted(() => {\r\n unregister = cb()\r\n })\r\n\r\n onUnmounted(() => {\r\n unregister?.()\r\n })\r\n}\r\n","import type { LexicalEditor, LexicalNode } from 'lexical'\r\n\r\nimport {\r\n $createOverflowNode,\r\n $isOverflowNode,\r\n OverflowNode,\r\n} from '@lexical/overflow'\r\nimport { $rootTextContent } from '@lexical/text'\r\nimport { $dfs, mergeRegister } from '@lexical/utils'\r\nimport {\r\n $getSelection,\r\n $isLeafNode,\r\n $isRangeSelection,\r\n $isTextNode,\r\n $setSelection,\r\n} from 'lexical'\r\n\r\nimport { useMounted } from './utils'\r\n\r\ninterface OptionalProps {\r\n remainingCharacters?: (characters: number) => void\r\n strlen?: (input: string) => number\r\n}\r\n\r\nexport function useCharacterLimit(\r\n editor: LexicalEditor,\r\n maxCharacters: number,\r\n optional: OptionalProps = Object.freeze({}),\r\n) {\r\n const {\r\n strlen = input => input.length, // UTF-16\r\n remainingCharacters = (_characters) => {},\r\n } = optional\r\n\r\n useMounted(() => {\r\n\r\n if (!editor.hasNodes([OverflowNode])) {\r\n throw new Error('useCharacterLimit: OverflowNode not registered on editor')\r\n }\r\n\r\n let text = editor.getEditorState().read($rootTextContent)\r\n let lastComputedTextLength = 0\r\n\r\n return mergeRegister(\r\n editor.registerTextContentListener((currentText: string) => {\r\n text = currentText\r\n }),\r\n editor.registerUpdateListener(({ dirtyLeaves }) => {\r\n const isComposing = editor.isComposing()\r\n const hasDirtyLeaves = dirtyLeaves.size > 0\r\n if (isComposing || !hasDirtyLeaves)\r\n return\r\n\r\n const textLength = strlen(text)\r\n const textLengthAboveThreshold\r\n = textLength > maxCharacters\r\n || (lastComputedTextLength !== null\r\n && lastComputedTextLength > maxCharacters)\r\n const diff = maxCharacters - textLength\r\n remainingCharacters(diff)\r\n if (lastComputedTextLength === null || textLengthAboveThreshold) {\r\n const offset = findOffset(text, maxCharacters, strlen)\r\n editor.update(\r\n () => {\r\n $wrapOverflowedNodes(offset)\r\n },\r\n {\r\n tag: 'history-merge',\r\n },\r\n )\r\n }\r\n lastComputedTextLength = textLength\r\n }),\r\n )\r\n })\r\n}\r\n\r\nfunction findOffset( text: string, maxCharacters: number, strlen: (input: string) => number): number {\r\n\r\n const Segmenter = (Intl as any).Segmenter\r\n\r\n let offsetUtf16 = 0\r\n let offset = 0\r\n\r\n if (typeof Segmenter === 'function') {\r\n const segmenter = new Segmenter()\r\n const graphemes = segmenter.segment(text)\r\n\r\n for (const { segment: grapheme } of graphemes) {\r\n const nextOffset = offset + strlen(grapheme)\r\n\r\n if (nextOffset > maxCharacters)\r\n break\r\n\r\n offset = nextOffset\r\n offsetUtf16 += grapheme.length\r\n }\r\n }\r\n else {\r\n const codepoints = Array.from(text)\r\n const codepointsLength = codepoints.length\r\n\r\n for (let i = 0; i < codepointsLength; i++) {\r\n const codepoint = codepoints[i]\r\n const nextOffset = offset + strlen(codepoint)\r\n\r\n if (nextOffset > maxCharacters)\r\n break\r\n\r\n offset = nextOffset\r\n offsetUtf16 += codepoint.length\r\n }\r\n }\r\n\r\n return offsetUtf16\r\n}\r\n\r\nfunction $wrapOverflowedNodes(offset: number): void {\r\n const dfsNodes = $dfs()\r\n const dfsNodesLength = dfsNodes.length\r\n let accumulatedLength = 0\r\n\r\n for (let i = 0; i < dfsNodesLength; i += 1) {\r\n const { node } = dfsNodes[i]\r\n\r\n if ($isOverflowNode(node)) {\r\n const previousLength = accumulatedLength\r\n const nextLength = accumulatedLength + node.getTextContentSize()\r\n\r\n if (nextLength <= offset) {\r\n const parent = node.getParent()\r\n const previousSibling = node.getPreviousSibling()\r\n const nextSibling = node.getNextSibling()\r\n $unwrapNode(node)\r\n const selection = $getSelection()\r\n\r\n // Restore selection when the overflow children are removed\r\n if (\r\n $isRangeSelection(selection)\r\n && (!selection.anchor.getNode().isAttached()\r\n || !selection.focus.getNode().isAttached())\r\n ) {\r\n if ($isTextNode(previousSibling))\r\n previousSibling.select()\r\n else if ($isTextNode(nextSibling))\r\n nextSibling.select()\r\n else if (parent !== null)\r\n parent.select()\r\n }\r\n }\r\n else if (previousLength < offset) {\r\n const descendant = node.getFirstDescendant()\r\n const descendantLength\r\n = descendant !== null ? descendant.getTextContentSize() : 0\r\n const previousPlusDescendantLength = previousLength + descendantLength\r\n // For simple text we can redimension the overflow into a smaller and more accurate\r\n // container\r\n const firstDescendantIsSimpleText\r\n = $isTextNode(descendant) && descendant.isSimpleText()\r\n const firstDescendantDoesNotOverflow\r\n = previousPlusDescendantLength <= offset\r\n\r\n if (firstDescendantIsSimpleText || firstDescendantDoesNotOverflow)\r\n $unwrapNode(node)\r\n }\r\n }\r\n else if ($isLeafNode(node)) {\r\n const previousAccumulatedLength = accumulatedLength\r\n accumulatedLength += node.getTextContentSize()\r\n\r\n if (accumulatedLength > offset && !$isOverflowNode(node.getParent())) {\r\n const previousSelection = $getSelection()\r\n let overflowNode\r\n\r\n // For simple text we can improve the limit accuracy by splitting the TextNode\r\n // on the split point\r\n if (\r\n previousAccumulatedLength < offset\r\n && $isTextNode(node)\r\n && node.isSimpleText()\r\n ) {\r\n const [, overflowedText] = node.splitText(\r\n offset - previousAccumulatedLength,\r\n )\r\n overflowNode = $wrapNode(overflowedText)\r\n }\r\n else {\r\n overflowNode = $wrapNode(node)\r\n }\r\n\r\n if (previousSelection !== null)\r\n $setSelection(previousSelection)\r\n\r\n mergePrevious(overflowNode)\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction $wrapNode(node: LexicalNode): OverflowNode {\r\n const overflowNode = $createOverflowNode()\r\n node.insertBefore(overflowNode)\r\n overflowNode.append(node)\r\n return overflowNode\r\n}\r\n\r\nfunction $unwrapNode(node: OverflowNode): LexicalNode | null {\r\n const children = node.getChildren()\r\n const childrenLength = children.length\r\n\r\n for (let i = 0; i < childrenLength; i++)\r\n node.insertBefore(children[i])\r\n\r\n node.remove()\r\n return childrenLength > 0 ? children[childrenLength - 1] : null\r\n}\r\n\r\nexport function mergePrevious(overflowNode: OverflowNode): void {\r\n const previousNode = overflowNode.getPreviousSibling()\r\n\r\n if (!$isOverflowNode(previousNode))\r\n return\r\n\r\n const firstChild = overflowNode.getFirstChild()\r\n const previousNodeChildren = previousNode.getChildren()\r\n const previousNodeChildrenLength = previousNodeChildren.length\r\n\r\n if (firstChild === null) {\r\n overflowNode.append(...previousNodeChildren)\r\n }\r\n else {\r\n for (let i = 0; i < previousNodeChildrenLength; i++)\r\n firstChild.insertBefore(previousNodeChildren[i])\r\n }\r\n\r\n const selection = $getSelection()\r\n\r\n if ($isRangeSelection(selection)) {\r\n const anchor = selection.anchor\r\n const anchorNode = anchor.getNode()\r\n const focus = selection.focus\r\n const focusNode = anchor.getNode()\r\n\r\n if (anchorNode.is(previousNode)) {\r\n anchor.set(overflowNode.getKey(), anchor.offset, 'element')\r\n }\r\n else if (anchorNode.is(overflowNode)) {\r\n anchor.set(\r\n overflowNode.getKey(),\r\n previousNodeChildrenLength + anchor.offset,\r\n 'element',\r\n )\r\n }\r\n\r\n if (focusNode.is(previousNode)) {\r\n focus.set(overflowNode.getKey(), focus.offset, 'element')\r\n }\r\n else if (focusNode.is(overflowNode)) {\r\n focus.set(\r\n overflowNode.getKey(),\r\n previousNodeChildrenLength + focus.offset,\r\n 'element',\r\n )\r\n }\r\n }\r\n\r\n previousNode.remove()\r\n}\r\n","let handleClickAndPointerDownListenersCount = 0\r\nlet handleClickAndPointerDownListenersUnregister: (() => void) | undefined\r\n\r\nexport function registerClickAndPointerListeners(register: () => void, unregister: () => void) {\r\n if (handleClickAndPointerDownListenersCount++ === 0) {\r\n register()\r\n handleClickAndPointerDownListenersUnregister = unregister\r\n }\r\n\r\n return () => {\r\n if (--handleClickAndPointerDownListenersCount === 0) {\r\n handleClickAndPointerDownListenersUnregister?.()\r\n handleClickAndPointerDownListenersUnregister = undefined\r\n }\r\n }\r\n}\r\n","import { COMMAND_PRIORITY_HIGH, type LexicalCommand, type LexicalEditor } from 'lexical'\r\nimport { readonly, ref } from 'vue'\r\nimport { useMounted } from './utils'\r\n\r\nexport function useLexicalCommandsLog(\r\n editor: LexicalEditor,\r\n) {\r\n const loggedCommands = ref<Array<LexicalCommand<unknown> & { payload: unknown }>>([])\r\n\r\n useMounted(() => {\r\n \r\n const unregisterCommandListeners = new Set<() => void>()\r\n\r\n for (const [command] of editor._commands) {\r\n unregisterCommandListeners.add(\r\n editor.registerCommand(\r\n command,\r\n (payload) => {\r\n loggedCommands.value = [\r\n ...loggedCommands.value,\r\n {\r\n payload,\r\n type: command.type ? command.type : 'UNKNOWN',\r\n },\r\n ]\r\n\r\n if (loggedCommands.value.length > 10)\r\n loggedCommands.value.shift()\r\n\r\n return false\r\n },\r\n COMMAND_PRIORITY_HIGH,\r\n ),\r\n )\r\n }\r\n\r\n return () => {\r\n unregisterCommandListeners.forEach(unregister => unregister())\r\n }\r\n })\r\n\r\n return readonly(loggedCommands)\r\n}\r\n","import { readonly, ref } from 'vue'\r\nimport { $isRootTextContentEmptyCurry } from '@lexical/text'\r\nimport type { LexicalEditor } from 'lexical'\r\nimport { useMounted } from './utils'\r\n\r\nexport function useLexicalIsTextContentEmpty(editor: LexicalEditor, trim?: boolean) {\r\n const isEmpty = ref(\r\n editor\r\n .getEditorState()\r\n .read($isRootTextContentEmptyCurry(editor.isComposing(), trim)),\r\n )\r\n\r\n useMounted(() => {\r\n return editor.registerUpdateListener(({ editorState }) => {\r\n const isComposing = editor.isComposing()\r\n isEmpty.value = editorState.read(\r\n $isRootTextContentEmptyCurry(isComposing, trim),\r\n )\r\n })\r\n })\r\n\r\n return readonly(isEmpty)\r\n}\r\n","\r\nimport type { DOMConversionMap, SerializedElementNode, NodeKey, Spread, EditorConfig, DOMExportOutput, DOMConversion, LexicalEditor, LexicalNode } from 'lexical'\r\nimport { $isTextNode, ElementNode } from 'lexical'\r\nimport { getCSSFromStyleObject, getStyleObjectFromRawCSS } from '../utils'\r\n\r\n/**\r\n * 节点序列化 \r\n */\r\nexport type SerializedHtmlElementNode = Spread<{ tag: string, style?: string, class?: string }, SerializedElementNode>\r\n/**\r\n * 其他位置Html节点\r\n */\r\nexport class HtmlElementNode extends ElementNode {\r\n\r\n __tagName: string\r\n __class?: string\r\n\r\n static getType(): string { return \"html-element\"; }\r\n\r\n static clone(node: HtmlElementNode): HtmlElementNode {\r\n return new HtmlElementNode(node.__tagName, node.__class, node.__style, node.__key)\r\n }\r\n\r\n static importJSON(serializedNode: SerializedHtmlElementNode): HtmlElementNode {\r\n return new HtmlElementNode(serializedNode.tag, serializedNode.class, serializedNode.style)\r\n }\r\n\r\n static importDOM(): DOMConversionMap | null {\r\n return {\r\n div: $covertHtmlElementDOM,\r\n section: $covertHtmlElementDOM,\r\n main: $covertHtmlElementDOM,\r\n header: $covertHtmlElementDOM\r\n }\r\n }\r\n\r\n /**\r\n * \r\n * @param tagName \r\n * @param className \r\n * @param style \r\n * @param key \r\n */\r\n constructor(tagName: string, className?: string , style?: string, key?: NodeKey) {\r\n super(key)\r\n this.__tagName = tagName,\r\n this.__class = className;\r\n this.__style = style || \"\";\r\n }\r\n\r\n /**\r\n * 名称\r\n * @returns \r\n */\r\n getName(){ return this.__tagName; }\r\n\r\n /**\r\n * 描述\r\n * @returns \r\n */\r\n getDesc(){ return this.__class?.split(/[\\s]/g).join(\".\")}\r\n\r\n /**\r\n * 添加样式\r\n * @param plaload \r\n */\r\n addStyle(plaload:any){\r\n const styleObj = Object.assign(getStyleObjectFromRawCSS(this.__style),plaload);\r\n return this.setStyle(getCSSFromStyleObject(styleObj));\r\n }\r\n\r\n /**\r\n * 获取样式对象\r\n */\r\n getStyleObj(){\r\n return getStyleObjectFromRawCSS(this.__style);\r\n }\r\n\r\n /**\r\n * 导出JSON\r\n * @returns \r\n */\r\n exportJSON(): SerializedHtmlElementNode {\r\n return {\r\n ...super.exportJSON(),\r\n type: this.getType(),\r\n tag: this.__tagName,\r\n class: this.__class,\r\n style: this.__style,\r\n version: 1\r\n }\r\n }\r\n\r\n /**\r\n * 导出DOM\r\n * @returns \r\n */\r\n exportDOM(editor:LexicalEditor): DOMExportOutput {\r\n \r\n const element = this.createDOM(editor._config)\r\n\r\n // 删除不用的key\r\n element.removeAttribute(\"node-key\");\r\n element.removeAttribute(\"contenteditable\")\r\n element.removeAttribute(\"data-lexical-decorator\")\r\n\r\n return { element }\r\n }\r\n\r\n /**\r\n * 创建渲染DOM\r\n * @param config \r\n * @returns \r\n */\r\n createDOM(config: EditorConfig): HTMLElement {\r\n\r\n const element = document.createElement(this.__tagName)\r\n\r\n if (this.__class) {\r\n element.setAttribute(\"class\", this.__class)\r\n }\r\n\r\n if (this.__style) {\r\n element.setAttribute(\"style\", this.__style)\r\n }\r\n\r\n return element;\r\n }\r\n\r\n /**\r\n * 开始折叠\r\n * 目前看 删除节点的时候会调用\r\n * @returns \r\n */\r\n collapseAtStart() {\r\n\r\n const children = this.getChildren();\r\n\r\n // 判断空内容的时候 直接删除自己\r\n if (children.length === 0 || $isTextNode(children[0]) && children[0].getTextContent().trim() === \"\") {\r\n this.remove();\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * 更新DOM\r\n * @param _prevNode \r\n * @param _dom \r\n * @param _config \r\n * @returns \r\n */\r\n updateDOM(prevNode: LexicalNode, dom: HTMLElement, config: EditorConfig): boolean {\r\n dom.setAttribute(\"class\",this.__class ?? \"\")\r\n dom.setAttribute(\"style\",this.__style)\r\n return false;\r\n }\r\n\r\n}\r\n\r\n/**\r\n * 转换DOM\r\n * @param node \r\n * @returns \r\n */\r\nconst $covertHtmlElementDOM = (domNode: HTMLElement): DOMConversion<HTMLElement> | null => {\r\n return {\r\n conversion: () => {\r\n return {\r\n node: new HtmlElementNode(domNode.tagName, domNode.getAttribute(\"class\") || \"\", domNode.getAttribute(\"style\") || \"\")\r\n };\r\n },\r\n priority: 2\r\n };\r\n}\r\n\r\n/**\r\n * 判断是否是HtmlElementNode\r\n * @param node \r\n * @returns \r\n */\r\nexport function $isHtmlElementNode(\r\n node: HtmlElementNode | LexicalNode | null | undefined,\r\n): node is HtmlElementNode {\r\n return node instanceof HtmlElementNode\r\n}\r\n","\r\nimport type {\r\n DOMConversionMap,\r\n DOMExportOutput,\r\n EditorConfig,\r\n LexicalNode,\r\n NodeKey,\r\n Spread,\r\n SerializedLexicalNode,\r\n LexicalEditor,\r\n DOMConversion\r\n} from 'lexical'\r\nimport { DecoratorNode ,ElementNode } from 'lexical'\r\nimport { Component } from 'vue';\r\nimport { getCSSFromStyleObject, getStyleObjectFromRawCSS } from '../utils';\r\n\r\n/**\r\n * 节点序列化 \r\n */\r\nexport type SerializedHtmlElementDecoratorNode = Spread<{ tag: string, style?: string, class?: string }, SerializedLexicalNode>\r\n\r\n/**\r\n * 隔离的HTML节点\r\n */\r\nexport class HtmlElementDecoratorNode extends DecoratorNode<Component|null> {\r\n\r\n __tagName: string\r\n __class?: string\r\n __style: string\r\n\r\n static getType(): string { return \"html-decorator-element\"; }\r\n\r\n static clone(node: HtmlElementDecoratorNode): HtmlElementDecoratorNode {\r\n return new HtmlElementDecoratorNode(node.__tagName, node.__class, node.__style, node.__key)\r\n }\r\n\r\n static importJSON(serializedNode: SerializedHtmlElementDecoratorNode): HtmlElementDecoratorNode {\r\n return new HtmlElementDecoratorNode(serializedNode.tag, serializedNode.class, serializedNode.style)\r\n }\r\n\r\n static importDOM(): DOMConversionMap | null {\r\n return {\r\n div: $covertHtmlElementDecoratorNode,\r\n section: $covertHtmlElementDecoratorNode\r\n }\r\n }\r\n\r\n /**\r\n * \r\n * @param tagName \r\n * @param className \r\n * @param style \r\n * @param key \r\n */\r\n constructor(tagName: string, className?: string , style?: string, key?: NodeKey) {\r\n super(key)\r\n this.__tagName = tagName,\r\n this.__class = className;\r\n this.__style = style || \"\";\r\n }\r\n\r\n /**\r\n * 名称\r\n * @returns \r\n */\r\n getName(){ return this.getType(); }\r\n\r\n /**\r\n * 描述\r\n * @returns \r\n */\r\n getDesc(){ return this.__class?.split(/[\\s]/g).join(\".\")}\r\n\r\n\r\n /**\r\n * 导出JSON\r\n * @returns \r\n */\r\n exportJSON(): SerializedHtmlElementDecoratorNode {\r\n return {\r\n type: this.getType(),\r\n tag: this.__tagName,\r\n class: this.__class,\r\n style: this.__style,\r\n version: 1\r\n }\r\n }\r\n\r\n /**\r\n * 导出DOM\r\n * @returns \r\n */\r\n exportDOM(editor:LexicalEditor): DOMExportOutput {\r\n \r\n const element = this.createDOM(editor._config)\r\n\r\n // 删除不用的key\r\n element.removeAttribute(\"node-key\");\r\n\r\n return { element }\r\n }\r\n\r\n /**\r\n * 创建渲染DOM\r\n * @param config \r\n * @returns \r\n */\r\n createDOM(config: EditorConfig): HTMLElement {\r\n\r\n const element = document.createElement(this.__tagName)\r\n\r\n if (this.__class) {\r\n element.setAttribute(\"class\", this.__class)\r\n }\r\n\r\n if (this.__style) {\r\n element.setAttribute(\"style\", this.__style)\r\n }\r\n\r\n element.setAttribute(\"node-key\",this.__key);\r\n \r\n\r\n return element;\r\n }\r\n\r\n /**\r\n * 隔离渲染函数\r\n * @param editor \r\n * @param config \r\n * @returns \r\n */\r\n decorate(editor: LexicalEditor, config: EditorConfig): Component | null {\r\n return null;\r\n }\r\n\r\n /**\r\n * 设置样式\r\n * @param style \r\n * @returns \r\n */\r\n setStyle(style:string) {\r\n const self = this.getWritable();\r\n self.__style = style || \"\";\r\n return this;\r\n }\r\n\r\n /**\r\n * 添加样式\r\n * @param plaload \r\n */\r\n addStyle(plaload:any){\r\n const styleObj = Object.assign(getStyleObjectFromRawCSS(this.__style),plaload);\r\n return this.setStyle(getCSSFromStyleObject(styleObj));\r\n }\r\n\r\n /**\r\n * 获取样式对象\r\n */\r\n getStyleObj(){\r\n return getStyleObjectFromRawCSS(this.__style);\r\n }\r\n \r\n /**\r\n * 更新DOM\r\n * @param _prevNode \r\n * @param _dom \r\n * @param _config \r\n * @returns \r\n */\r\n updateDOM(prevNode: LexicalNode, dom: HTMLElement, config: EditorConfig): boolean {\r\n dom.setAttribute(\"class\",this.__class ?? \"\")\r\n dom.setAttribute(\"style\",this.__style)\r\n return false;\r\n }\r\n \r\n /**\r\n * 是否是独立的\r\n * @returns \r\n */\r\n isIsolated() { return true; }\r\n \r\n /**\r\n * 如果是内联元素的话会导致容器将其当字符串处理 将会有换行符存在\r\n * @returns \r\n */\r\n isInline() { return false; }\r\n\r\n /**\r\n * 是否允许键盘选择\r\n * @returns \r\n */\r\n isKeyboardSelectable() { return true; }\r\n}\r\n\r\n/**\r\n * 判断是否是隔离的HTML节点\r\n * @param node \r\n * @returns \r\n */\r\nexport function $isHtmlElementDecoratorNode(\r\n node: HtmlElementDecoratorNode | LexicalNode | null | undefined,\r\n): node is HtmlElementDecoratorNode {\r\n return node instanceof HtmlElementDecoratorNode\r\n}\r\n\r\n/**\r\n * 转换隔离节点DOM\r\n * @param node \r\n * @returns \r\n */\r\nconst $covertHtmlElementDecoratorNode = (domNode: HTMLElement): DOMConversion<HTMLElement> | null => {\r\n return domNode.classList.contains(\"clear\") || domNode.classList.contains(\"mk-doc__decorator\") ? {\r\n conversion: () => {\r\n return {\r\n node: new HtmlElementDecoratorNode(domNode.tagName, domNode.getAttribute(\"class\") || \"\", domNode.getAttribute(\"style\") || \"\")\r\n };\r\n },\r\n priority: 2\r\n } : null;\r\n}\r\n","\r\nimport {\r\n type DOMConversionMap,\r\n type DOMExportOutput,\r\n type EditorConfig,\r\n type LexicalNode,\r\n type NodeKey,\r\n type Spread,\r\n type LexicalEditor,\r\n type DOMConversion,\r\n type LexicalCommand,\r\n createCommand\r\n} from 'lexical'\r\nimport { Component } from 'vue';\r\nimport { HtmlElementDecoratorNode,SerializedHtmlElementDecoratorNode } from \"./HtmlElementDecoratorNode\"\r\nimport { ModuleDecoratorWarpNode } from './ModuleDecoratorWarpNode';\r\n\r\n\r\n/**\r\n * 属性类型\r\n */\r\nexport type ModulePropType = { name:string,data:object };\r\n\r\n/**\r\n * 插入模块模版块指令\r\n */\r\nexport const INSERT_MODULE_COMMAND: LexicalCommand<ModulePropType> = createCommand('INSERT_MODULE_COMMAND')\r\n\r\n/**\r\n * 节点序列化 \r\n */\r\nexport type SerializedModuleDecoratorNode = Spread<{ moduleName:string,moduleHtml:any }, SerializedHtmlElementDecoratorNode>\r\n\r\n\r\n// 属性标识\r\nexport const AttrMarkName = \"module-name\";\r\n\r\n/**\r\n * 模块\r\n * 会导致\r\n */\r\nexport class ModuleDecoratorNode extends HtmlElementDecoratorNode {\r\n\r\n __moduleName: string\r\n __moduleHtml: string\r\n\r\n\r\n static getType(): string { return \"module\"; }\r\n\r\n static clone(node: ModuleDecoratorNode): ModuleDecoratorNode {\r\n return new ModuleDecoratorNode(node.__moduleName,node.__moduleHtml,node.__class,node.__style,node.__key);\r\n }\r\n\r\n static importJSON(serializedNode: SerializedModuleDecoratorNode): ModuleDecoratorNode {\r\n return new ModuleDecoratorNode(serializedNode.moduleName,serializedNode.moduleHtml,serializedNode.class, serializedNode.style)\r\n }\r\n\r\n static importDOM(): DOMConversionMap | null {\r\n return {\r\n div: $covertModuleDecoratorNode,\r\n section: $covertModuleDecoratorNode,\r\n main : $covertModuleDecoratorNode ,\r\n header : $covertModuleDecoratorNode \r\n }\r\n }\r\n\r\n /**\r\n * \r\n * @param name \r\n * @param data \r\n * @param className \r\n * @param style \r\n * @param key \r\n */\r\n constructor(name:string,html:string,className?: string , style?: string, key?: NodeKey) {\r\n super(\"div\",className,style,key)\r\n this.__moduleName = name;\r\n this.__moduleHtml = html;\r\n }\r\n\r\n /**\r\n * 导出JSON\r\n * @returns \r\n */\r\n exportJSON(): SerializedModuleDecoratorNode {\r\n return {\r\n ...super.exportJSON(),\r\n type: this.getType(),\r\n moduleName:this.__moduleName,\r\n moduleHtml:this.__moduleHtml,\r\n version: 1\r\n }\r\n }\r\n\r\n /**\r\n * 创建渲染DOM\r\n * @param config \r\n * @returns \r\n */\r\n createDOM(config: EditorConfig): HTMLElement {\r\n\r\n const warpEl = super.createDOM(config)\r\n\r\n warpEl.innerHTML = this.__moduleHtml;\r\n\r\n if(warpEl.children.length > 1){\r\n throw new Error(\"定义模块模版的时候请用一个容器将模版内容包裹起来,不能有多个并列的元素!\");\r\n }\r\n\r\n const element = warpEl.children[0] as HTMLElement;\r\n\r\n // 模块名称标识\r\n element.setAttribute(AttrMarkName,this.__moduleName)\r\n element.setAttribute(\"node-key\",this.__key);\r\n\r\n return element;\r\n }\r\n\r\n /**\r\n * 隔离渲染函数\r\n * @param editor \r\n * @param config \r\n * @returns \r\n */\r\n decorate(editor: LexicalEditor, config: EditorConfig): Component | null {\r\n return null;\r\n }\r\n \r\n /**\r\n * 更新DOM\r\n * @param _prevNode \r\n * @param _dom \r\n * @param _config \r\n * @returns \r\n */\r\n updateDOM(prevNode: LexicalNode, dom: HTMLElement, config: EditorConfig): boolean {\r\n dom.innerHTML = this.__moduleHtml;\r\n return false;\r\n }\r\n\r\n /**\r\n * 设置 html\r\n * @param html \r\n * @returns \r\n */\r\n setHtml(html:string) {\r\n const self = this.getWritable();\r\n self.__moduleHtml = html || \"\";\r\n return this;\r\n }\r\n // /**\r\n // * 创建父亲\r\n // * */\r\n // createParentElementNode() {\r\n // return new ModuleDecoratorWarpNode();\r\n // }\r\n // /**\r\n // * 必须有父亲\r\n // * @returns \r\n // */\r\n // isParentRequired() { return true; }\r\n}\r\n\r\n/**\r\n * 转换隔离节点DOM\r\n * @param node \r\n * @returns \r\n */\r\nconst $covertModuleDecoratorNode = (domNode: HTMLElement): DOMConversion<HTMLElement> | null => {\r\n\r\n try{\r\n \r\n const moduleName = domNode.getAttribute(AttrMarkName);\r\n const moduleHtml = domNode.outerHTML;\r\n\r\n return moduleName ? {\r\n conversion: () => {\r\n return {\r\n node: new ModuleDecoratorNode(moduleName,moduleHtml,domNode.getAttribute(\"class\") || \"\", domNode.getAttribute(\"style\") || \"\")\r\n };\r\n },\r\n priority: 3\r\n } : null;\r\n }\r\n catch(e){\r\n console.log(e)\r\n return null;\r\n }\r\n \r\n}\r\n\r\n\r\n/**\r\n * 判断是否是模块节点\r\n * @param node \r\n * @returns \r\n */\r\nexport function $isModuleDecoratorNode(\r\n node: ModuleDecoratorNode | LexicalNode | null | undefined,\r\n): node is ModuleDecoratorNode {\r\n return node instanceof ModuleDecoratorNode\r\n}\r\n\r\n\r\n// 元素属性列表\r\nconst ElAttrList = [\"src\",\"alt\",\"poster\",\"href\",\"_target\"];\r\n\r\n/**\r\n * 创建 模块 html\r\n * @param template \r\n * @param data \r\n */\r\nexport const createModuleHtml = (template:string,data:any)=>{\r\n\r\n const parser = new DOMParser();\r\n const element = parser.parseFromString(template,\"text/html\")\r\n const list = [element.body];\r\n\r\n Object.keys(data).forEach(key=>{\r\n\r\n for(let i=0;i<list.length;i++){\r\n\r\n const el = list[i];\r\n const val = data[key] as any;\r\n \r\n // 忽略文本节点\r\n if(el.nodeType != 3){\r\n // 属性解析\r\n if(ElAttrList.filter(attr=>el.hasAttribute(`data-${key}-${attr}`)).\r\n some(attr=> el.setAttribute(attr,val))){ break; }\r\n // 文本解析\r\n else if(el.hasAttribute(`data-${key}`)){\r\n el.textContent = val;\r\n break;\r\n }\r\n else if(el.hasAttribute(`data-${key}-html`)){\r\n el.innerHTML = val;\r\n break;\r\n } \r\n }\r\n\r\n // 广域递归\r\n if(el.childNodes.length){\r\n el.childNodes.forEach((sub:any)=>list.push(sub))\r\n }\r\n }\r\n })\r\n\r\n return element.body.innerHTML.replaceAll(/[\\r|\\n|\\r\\n]+/g,\"\")\r\n}\r\n\r\n/**\r\n * 获取模块数据 \r\n * @param template \r\n * @param data \r\n */\r\nexport const getModuleData = (html:string,options:Array<any>)=>{\r\n\r\n\r\n const parser = new DOMParser();\r\n const element = parser.parseFromString(html,\"text/html\")\r\n const list = [element.body];\r\n const data:any = {};\r\n\r\n options.forEach(item=>{\r\n\r\n for(let i=0;i<list.length;i++){\r\n\r\n const el = list[i];\r\n const val = \"\";\r\n\r\n // 忽略文本节点\r\n if(el.nodeType != 3){\r\n // 属性解析\r\n if(ElAttrList.filter(attr=>el.hasAttribute(`data-${item.name}-${attr}`)).\r\n some(attr=> data[item.name] = el.getAttribute(attr))){ break; }\r\n // 文本解析\r\n else if(el.hasAttribute(`data-${item.name}`)){\r\n data[item.name] = el.textContent;\r\n break;\r\n }\r\n // html 解析\r\n else if(el.hasAttribute(`data-${item.name}-html`)){\r\n data[item.name] = el.innerHTML;\r\n break;\r\n } \r\n }\r\n\r\n // 广域递归\r\n if(el.childNodes.length){\r\n el.childNodes.forEach((sub:any)=>list.push(sub))\r\n }\r\n\r\n data[item.name] = val;\r\n }\r\n })\r\n\r\n return data\r\n}\r\n","import type { DOMConversionMap, LexicalCommand, LexicalNode, NodeKey, Spread, DOMExportOutput, EditorConfig } from 'lexical'\r\nimport { createCommand, } from 'lexical'\r\nimport { HtmlElementNode,SerializedHtmlElementNode } from './HtmlElementNode'\r\nimport { AttrMarkName } from './ModuleDecoratorNode'\r\n\r\n/**\r\n * 节点序列化\r\n */\r\nexport type SerializedModuleDecoratorWarpNode = Spread<{},SerializedHtmlElementNode>\r\n\r\n/**\r\n * 模块容器\r\n */\r\nexport class ModuleDecoratorWarpNode extends HtmlElementNode{\r\n\r\n static getType(): string { return \"moduleWarp\"; }\r\n\r\n static clone(node: ModuleDecoratorWarpNode): ModuleDecoratorWarpNode {\r\n return new ModuleDecoratorWarpNode(node.__class,node.__style, node.__key)\r\n }\r\n\r\n static importJSON(serializedNode: SerializedModuleDecoratorWarpNode): ModuleDecoratorWarpNode {\r\n return new ModuleDecoratorWarpNode(serializedNode.class,serializedNode.style)\r\n }\r\n\r\n static importDOM(): DOMConversionMap | null {\r\n return {\r\n div : (domNode: HTMLElement) => {\r\n // 儿子是模块的就是模块容器\r\n return domNode.children[0] && domNode.children[0].getAttribute(AttrMarkName) ? {\r\n \r\n conversion: ()=>{ \r\n \r\n return { \r\n node:new ModuleDecoratorWarpNode(\r\n domNode.className.trim(),\r\n domNode.getAttribute(\"style\") || \"\"\r\n ) \r\n };\r\n },\r\n priority: 3\r\n } : null;\r\n }\r\n }\r\n }\r\n\r\n constructor(className?:string,style?:string,key?: NodeKey) {\r\n super(\"div\",className,style,key)\r\n }\r\n\r\n /**\r\n * 名称\r\n * @returns \r\n */\r\n getName(){ return this.getType(); }\r\n\r\n /**\r\n * 描述\r\n * @returns \r\n */\r\n getDesc(){ return \"模块容器\"; }\r\n\r\n /**\r\n * 导出JSON\r\n * @returns \r\n */\r\n exportJSON(): SerializedModuleDecoratorWarpNode {\r\n return {\r\n ...super.exportJSON(),\r\n type: this.getType(),\r\n version: 1\r\n }\r\n }\r\n\r\n\r\n /**\r\n * 创建渲染DOM\r\n * @param config \r\n * @returns \r\n */\r\n createDOM(config: EditorConfig): HTMLElement {\r\n\r\n const element = super.createDOM(config)\r\n \r\n element.setAttribute(\"node-key\",this.__key);\r\n\r\n return element;\r\n }\r\n}\r\n\r\n\r\n/**\r\n * 判断是否是模块容器节点\r\n * @param node \r\n * @returns \r\n */\r\nexport function $isModuleDecoratorWarpNode(\r\n node: ModuleDecoratorWarpNode | LexicalNode | null | undefined,\r\n): node is ModuleDecoratorWarpNode {\r\n return node instanceof ModuleDecoratorWarpNode\r\n}\r\n","\r\nimport type {\r\n DOMConversionMap,\r\n DOMExportOutput,\r\n EditorConfig,\r\n LexicalNode,\r\n NodeKey,\r\n Spread,\r\n SerializedLexicalNode,\r\n LexicalEditor\r\n} from 'lexical'\r\nimport { Component } from 'vue';\r\nimport { HtmlElementDecoratorNode,SerializedHtmlElementDecoratorNode } from \"./HtmlElementDecoratorNode\"\r\nimport { type LexicalCommand, createCommand } from 'lexical'\r\n\r\n/**\r\n * 插入图片指令\r\n */\r\nexport const INSERT_IMAGE_COMMAND: LexicalCommand<{src:string,alt?:string,style?:string}> = createCommand('INSERT_IMAGE_COMMAND')\r\n\r\n// 默认图片\r\nconst ImageDefaultSrc = \"data:image/png;base64,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\";\r\n\r\n/**\r\n * 图片节点序列化\r\n */\r\nexport type SerializedImageNode = Spread<{ src: string,alt?:string }, SerializedHtmlElementDecoratorNode>\r\n\r\n/** \r\n * 定义图片节点\r\n */\r\nexport class ImageNode extends HtmlElementDecoratorNode {\r\n __src: string\r\n __alt?:string\r\n\r\n static getType(): string { return 'image' }\r\n\r\n\r\n static clone(node: ImageNode): ImageNode {\r\n return new ImageNode(node.__src, node.__alt,node.__class,node.__style,node.__key)\r\n }\r\n\r\n static importJSON(serializedNode: SerializedImageNode): ImageNode {\r\n return $createImageNode(serializedNode.src,serializedNode.alt,serializedNode.class,serializedNode.style)\r\n }\r\n\r\n static importDOM(): DOMConversionMap | null {\r\n return {\r\n img: (el: HTMLElement) => {\r\n const src = el.getAttribute('src');\r\n const alt = el.getAttribute('alt');\r\n return el.tagName.toLowerCase() == \"img\" ? {\r\n conversion: (domNode: HTMLElement) => {\r\n return { \r\n node:$createImageNode(src ?? \"\",alt ?? undefined,domNode.className,domNode.getAttribute(\"style\") ?? \"\") \r\n };\r\n },\r\n priority: 1\r\n } : null\r\n },\r\n }\r\n }\r\n\r\n constructor(src: string,alt?:string,className?:string,style?:string, key?: NodeKey) {\r\n super(\"img\",className,style,key)\r\n this.__src = src\r\n this.__alt = alt\r\n }\r\n\r\n /**\r\n * 隔离渲染函数\r\n * @param editor \r\n * @param config \r\n * @returns \r\n */\r\n decorate(editor: LexicalEditor, config: EditorConfig): Component | null {\r\n return null;\r\n }\r\n\r\n /**\r\n * 导出JSON\r\n * @returns \r\n */\r\n exportJSON(): SerializedImageNode {\r\n return {\r\n ...super.exportJSON(),\r\n type: this.getType(),\r\n version: 1,\r\n src: this.__src,\r\n alt: this.__alt\r\n }\r\n }\r\n\r\n\r\n /**\r\n * 设置src\r\n * @param src \r\n * @returns \r\n */\r\n setSrc(src:string) {\r\n const self = this.getWritable();\r\n self.__src = src || \"\";\r\n return this;\r\n }\r\n\r\n /**\r\n * 设置 alt\r\n * @param alt \r\n * @returns \r\n */\r\n setAlt(alt:string) {\r\n const self = this.getWritable();\r\n self.__alt= alt || \"\";\r\n return this;\r\n }\r\n /**\r\n * 创建DOM\r\n * @param config \r\n * @returns \r\n */\r\n createDOM(config: EditorConfig): HTMLElement {\r\n\r\n const element = super.createDOM(config);\r\n\r\n if(this.__src){\r\n element.setAttribute('src', this.__src) \r\n }\r\n else{\r\n element.setAttribute('src', ImageDefaultSrc) \r\n }\r\n\r\n if(this.__alt){\r\n element.setAttribute('alt', this.__alt)\r\n }\r\n\r\n return element\r\n }\r\n\r\n /**\r\n * 更新DOM\r\n * @param _prevNode \r\n * @param _dom \r\n * @param _config \r\n * @returns \r\n */\r\n updateDOM(prevNode: ImageNode, dom: HTMLElement, config: EditorConfig): boolean {\r\n super.updateDOM(prevNode,dom,config);\r\n if(this.__src){\r\n dom.setAttribute('src', this.__src) \r\n }\r\n else{\r\n dom.setAttribute('src', ImageDefaultSrc) \r\n }\r\n\r\n if(this.__alt){\r\n dom.setAttribute('alt', this.__alt)\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * @returns \r\n */\r\n isInline() { return true; }\r\n}\r\n\r\n\r\n/**\r\n * 创建图片节点\r\n * @param src \r\n * @returns \r\n */\r\nexport function $createImageNode(src: string,alt?:string,className?:string,style?:string): ImageNode {\r\n return new ImageNode(src,alt,className,style)\r\n}\r\n\r\n/**\r\n * 判断是否是图片节点\r\n * @param node \r\n * @returns \r\n */\r\nexport function $isImageNode(\r\n node: ImageNode | LexicalNode | null | undefined,\r\n): node is ImageNode {\r\n return node instanceof ImageNode\r\n}\r\n","import type { DOMConversionMap, LexicalCommand, LexicalNode, NodeKey, Spread, DOMExportOutput, LexicalEditor, EditorConfig } from 'lexical'\r\nimport { $createParagraphNode, createCommand, } from 'lexical'\r\nimport { HtmlElementNode,SerializedHtmlElementNode } from './HtmlElementNode'\r\nimport { ImageNode } from './ImageNode'\r\nimport { HtmlElementDecoratorNode } from './HtmlElementDecoratorNode' \r\n\r\n/**\r\n * 插入图文\r\n */\r\nexport const INSERT_IMAGETEXTWARP_COMMAND: LexicalCommand<string|undefined|null> = createCommand('INSERT_IMAGETEXTWARP_COMMAND')\r\n\r\n/**\r\n * 图文节点序列化\r\n */\r\nexport type SerializedImageTextWarpNode = Spread<{},SerializedHtmlElementNode>\r\n\r\n/**\r\n * 图文环绕\r\n */\r\nconst MarkClassName = \"mk-doc__image-text-warp\"\r\n\r\n/**\r\n * 图文环绕\r\n */\r\nexport class ImageTextWarpNode extends HtmlElementNode{\r\n\r\n \r\n static getType(): string { return \"imageTextWarp\"; }\r\n\r\n static clone(node: ImageTextWarpNode): ImageTextWarpNode {\r\n return new ImageTextWarpNode(node.__class,node.__style, node.__key)\r\n }\r\n\r\n static importJSON(serializedNode: SerializedImageTextWarpNode): ImageTextWarpNode {\r\n return new ImageTextWarpNode(serializedNode.class,serializedNode.style)\r\n }\r\n\r\n static importDOM(): DOMConversionMap | null {\r\n return {\r\n div : (domNode: HTMLElement) => {\r\n\r\n // document.querySelector(\"div\").ownerDocument.defaultView\r\n // mk-doc__image-text class 是为了兼容老的图文环绕 \r\n let isImageTextWarp =domNode.classList.contains(MarkClassName)\r\n const firstEl = domNode.children[0] as HTMLImageElement;\r\n\r\n // 也是图文环绕\r\n if(firstEl && firstEl.tagName.toLowerCase() == \"img\" && (firstEl.style.float == \"left\" || firstEl.style.float == \"right\")){\r\n isImageTextWarp = true;\r\n }\r\n \r\n return isImageTextWarp ? {\r\n\r\n conversion: ()=>{ \r\n return { \r\n node:new ImageTextWarpNode(\r\n domNode.className.replace(MarkClassName,\"\").trim(),\r\n domNode.getAttribute(\"style\") || \"\"\r\n ) \r\n };\r\n },\r\n priority: 3\r\n } : null;\r\n }\r\n }\r\n }\r\n\r\n constructor(className?:string,style?:string,key?: NodeKey) {\r\n super(\"div\",className,style,key)\r\n }\r\n\r\n /**\r\n * 选中标题\r\n * @returns \r\n */\r\n getDesc(){ return \"图文环绕\"; }\r\n\r\n /**\r\n * 导出JSON\r\n * @returns \r\n */\r\n exportJSON(): SerializedImageTextWarpNode {\r\n return {\r\n ...super.exportJSON(),\r\n type: this.getType(),\r\n version: 1\r\n }\r\n }\r\n\r\n /**\r\n * 导出DOM\r\n * @returns \r\n */\r\n exportDOM(editor:LexicalEditor): DOMExportOutput {\r\n\r\n const element = this.createDOM(editor._config)\r\n\r\n return { element }\r\n }\r\n \r\n /**\r\n * 创建渲染DOM\r\n * @param config \r\n * @returns \r\n */\r\n createDOM(config: EditorConfig): HTMLElement {\r\n const element = super.createDOM(config)\r\n // 追加 编辑 标识 class\r\n if(!element.classList.contains(MarkClassName)){\r\n element.classList.add(MarkClassName)\r\n }\r\n return element;\r\n }\r\n\r\n /**\r\n * 更新DOM 重置标识\r\n * @param prevNode \r\n * @param dom \r\n * @param config \r\n * @returns \r\n */\r\n updateDOM(prevNode: LexicalNode, dom: HTMLElement, config: EditorConfig): boolean {\r\n super.updateDOM(prevNode,dom,config);\r\n // 追加 编辑 标识 class\r\n if(!dom.classList.contains(MarkClassName)){\r\n dom.classList.add(MarkClassName)\r\n }\r\n return false;\r\n }\r\n}\r\n\r\n/**\r\n * 判断是否是图文节点\r\n * @param node \r\n * @returns \r\n */\r\nexport function $isImageTextWarpNode(\r\n node: ImageTextWarpNode | LexicalNode | null | undefined,\r\n): node is ImageTextWarpNode {\r\n return node instanceof ImageTextWarpNode\r\n}\r\n\r\n\r\n/**\r\n * 创建图文节点\r\n * @param node \r\n * @returns \r\n */\r\nexport function $createImageTextWarpNode(){\r\n\r\n const imageTextWarp = new ImageTextWarpNode()\r\n const textWarp = new HtmlElementNode(\"div\")\r\n\r\n textWarp.append($createParagraphNode())\r\n textWarp.append($createParagraphNode())\r\n textWarp.append($createParagraphNode())\r\n textWarp.append($createParagraphNode())\r\n textWarp.append($createParagraphNode())\r\n textWarp.append($createParagraphNode())\r\n\r\n imageTextWarp.append(new ImageNode(\"\",\"\",\"\",\"margin:0 10px 10px 0;width:200px;float:left\"));\r\n imageTextWarp.append(textWarp)\r\n imageTextWarp.append(textWarp)\r\n const clearNode = new HtmlElementDecoratorNode(\"div\",\"mk-doc__decorator\",\"clear:both\")\r\n imageTextWarp.append(clearNode)\r\n return imageTextWarp;\r\n}\r\n","\r\n\r\nimport { type LexicalCommand, createCommand} from 'lexical'\r\n\r\n/**\r\n * 插入模版块指令\r\n */\r\nexport const INSERT_TEMPLATE_COMMAND: LexicalCommand<string> = createCommand('INSERT_TEMPLATE_COMMAND')\r\n\r\n/**\r\n * 插入HTML模版块指令 \r\n */\r\nexport const INSERT_HTMLTEMPLATE_COMMAND: LexicalCommand<string> = createCommand('INSERT_HTMLTEMPLATE_COMMAND')\r\n","\r\n\r\nimport { $copyNode, $isElementNode, LexicalNode } from 'lexical'\r\n\r\nexport * from './HtmlElementNode'\r\nexport * from './HtmlElementDecoratorNode'\r\nexport * from './ModuleDecoratorNode'\r\nexport * from './ModuleDecoratorWarpNode'\r\nexport * from './ImageNode'\r\nexport * from './ImageTextWarpNode'\r\nexport * from './Template'\r\n\r\n\r\nexport const deepCloneNode = function(node:LexicalNode){\r\n\r\n const copyNode:any = $copyNode(node)\r\n\r\n if($isElementNode(node)){\r\n node.getChildren().forEach(child=>copyNode.append(deepCloneNode(child)))\r\n }\r\n\r\n return copyNode;\r\n}\r\n\r\n\r\n\r\n\r\n\r\n","import { \r\n ArtificialNode__DO_NOT_USE,\r\n $createLineBreakNode,\r\n LexicalEditor, \r\n LexicalNode,\r\n ElementNode,\r\n $isRootOrShadowRoot,\r\n $isBlockElementNode,\r\n ElementFormatType,\r\n $createParagraphNode,\r\n isInlineDomNode,\r\n $isElementNode,\r\n $getRoot,\r\n BaseSelection,\r\n $cloneWithProperties,\r\n $isTextNode,\r\n NodeSelection,\r\n RangeSelection,\r\n isHTMLElement\r\n} from \"lexical\";\r\n\r\nimport { isBlockDomNode } from \"@lexical/utils\"\r\nimport { $sliceSelectedTextNodeContent } from \"@lexical/selection\";\r\nimport { AttrMarkName } from \"../nodes\"\r\n\r\nconst domParser = new DOMParser()\r\n\r\n/**\r\n* 展开不确定的节点\r\n* @param allArtificialNodes \r\n*/\r\nconst unwrapArtificalNodes = function $unwrapArtificalNodes(allArtificialNodes:ElementNode[]|LexicalNode[]) {\r\n\r\n for (const node of allArtificialNodes) {\r\n\r\n if (node.getNextSibling() instanceof ArtificialNode__DO_NOT_USE) {\r\n node.insertAfter($createLineBreakNode());\r\n }\r\n }\r\n // Replace artificial node with it's children\r\n for (const node of allArtificialNodes) {\r\n\r\n // 元素的话\r\n if($isElementNode(node)){\r\n\r\n const children = node.getChildren();\r\n\r\n for (const child of children) {\r\n \r\n node.insertBefore(child);\r\n \r\n }\r\n \r\n node.remove();\r\n }\r\n }\r\n}\r\n\r\n// 获取节点转换器 就是 importDOM 定义的东西\r\nconst getConversionFunction = function(domNode:HTMLElement, editor:LexicalEditor) {\r\n\r\n const { nodeName } = domNode;\r\n\r\n const cachedConversions = editor._htmlConversions.get(nodeName.toLowerCase());\r\n\r\n let currentConversion = null;\r\n\r\n if (cachedConversions !== undefined) {\r\n\r\n for (const cachedConversion of cachedConversions) {\r\n\r\n const domConversion = cachedConversion(domNode);\r\n\r\n // 一直找到优先级最高的节点转换器\r\n if (domConversion !== null && (currentConversion === null || (currentConversion.priority || 0) < (domConversion.priority || 0))) {\r\n \r\n currentConversion = domConversion;\r\n }\r\n }\r\n\r\n }\r\n\r\n return currentConversion !== null ? currentConversion.conversion : null;\r\n}\r\n\r\n/**\r\n* 给内联节点包一个块节点\r\n* @param domNode \r\n* @param nodes \r\n* @param createWrapperFn \r\n* @returns \r\n*/\r\nconst wrapContinuousInlines = function (domNode : HTMLElement, nodes:LexicalNode[], createWrapperFn:Function) {\r\n\r\n const textAlign = domNode.style.textAlign;\r\n const out = [];\r\n let continuousInlines = [];\r\n // wrap contiguous inline child nodes in para\r\n for (let i = 0; i < nodes.length; i++) {\r\n\r\n const node = nodes[i];\r\n\r\n if ($isBlockElementNode(node)) {\r\n\r\n if (textAlign && !node.getFormat()) {\r\n node.setFormat(textAlign as ElementFormatType);\r\n }\r\n\r\n out.push(node);\r\n } \r\n else {\r\n\r\n continuousInlines.push(node);\r\n\r\n if (i === nodes.length - 1 || i < nodes.length - 1 && $isBlockElementNode(nodes[i + 1])) {\r\n const wrapper = createWrapperFn();\r\n wrapper.setFormat(textAlign);\r\n wrapper.append(...continuousInlines);\r\n out.push(wrapper);\r\n continuousInlines = [];\r\n }\r\n }\r\n }\r\n return out;\r\n}\r\n\r\nconst isDomNodeBetweenTwoInlineNodes = function (node:HTMLElement) {\r\n\r\n if (node.nextSibling == null || node.previousSibling == null) {\r\n return false;\r\n }\r\n\r\n return isInlineDomNode(node.nextSibling) && isInlineDomNode(node.previousSibling);\r\n}\r\n\r\n\r\n/**\r\n* 根据元素节点创建 LexicalNode\r\n* @param node \r\n* @param editor \r\n* @param allArtificialNodes \r\n* @param hasBlockAncestorLexicalNode \r\n* @param forChildMap \r\n* @param parentLexicalNode \r\n* @returns \r\n*/\r\nconst createNodesFromElement = function (node:HTMLElement, editor:LexicalEditor, allArtificialNodes:ElementNode[], hasBlockAncestorLexicalNode:boolean, forChildMap = new Map(), parentLexicalNode?:LexicalNode) {\r\n\r\n\r\n let lexicalNodes:LexicalNode[] = [];\r\n\r\n let currentLexicalNode = null;\r\n \r\n \r\n // if(node.getAttribute(\"module-name\")){\r\n // console.log(node,mname)\r\n // }\r\n const transformFunction = getConversionFunction(node, editor);\r\n\r\n const transformOutput = transformFunction ? transformFunction(node) : null;\r\n \r\n let postTransform = null;\r\n\r\n if (transformOutput !== null) {\r\n\r\n postTransform = transformOutput.after;\r\n\r\n const transformNodes = transformOutput.node;\r\n\r\n currentLexicalNode = Array.isArray(transformNodes) ? transformNodes[transformNodes.length - 1] : transformNodes;\r\n\r\n if (currentLexicalNode !== null) {\r\n\r\n for (const [, forChildFunction] of forChildMap) {\r\n\r\n currentLexicalNode = forChildFunction(currentLexicalNode, parentLexicalNode);\r\n\r\n if (!currentLexicalNode) { break; }\r\n }\r\n\r\n if (currentLexicalNode) {\r\n lexicalNodes.push(...(Array.isArray(transformNodes) ? transformNodes : [currentLexicalNode]));\r\n }\r\n }\r\n\r\n if (transformOutput.forChild != null) {\r\n forChildMap.set(node.nodeName, transformOutput.forChild);\r\n }\r\n }\r\n\r\n // If the DOM node doesn't have a transformer, we don't know what\r\n // to do with it but we still need to process any childNodes.\r\n // 找到模块就不继续往下找了\r\n const children = isBlockDomNode(node) && node.hasAttribute(AttrMarkName) ? [] : node.childNodes;\r\n\r\n let childLexicalNodes = [];\r\n\r\n const hasBlockAncestorLexicalNodeForChildren = \r\n currentLexicalNode != null && \r\n (\r\n $isRootOrShadowRoot(currentLexicalNode) ? false \r\n : (currentLexicalNode != null && $isBlockElementNode(currentLexicalNode) || hasBlockAncestorLexicalNode)\r\n );\r\n \r\n for (let i = 0; i < children.length; i++) {\r\n childLexicalNodes.push(...createNodesFromElement(children[i] as HTMLElement, editor, allArtificialNodes, hasBlockAncestorLexicalNodeForChildren, new Map(forChildMap), currentLexicalNode));\r\n }\r\n\r\n if (postTransform != null) {\r\n childLexicalNodes = postTransform(childLexicalNodes);\r\n }\r\n\r\n if (isBlockDomNode(node)) {\r\n \r\n if (!hasBlockAncestorLexicalNodeForChildren) {\r\n childLexicalNodes = wrapContinuousInlines(node, childLexicalNodes, $createParagraphNode);\r\n } \r\n else {\r\n\r\n childLexicalNodes = wrapContinuousInlines(node, childLexicalNodes, () => {\r\n\r\n const artificialNode = new ArtificialNode__DO_NOT_USE();\r\n\r\n allArtificialNodes.push(artificialNode);\r\n\r\n return artificialNode;\r\n });\r\n }\r\n }\r\n\r\n if (currentLexicalNode == null) {\r\n\r\n if (childLexicalNodes.length > 0) {\r\n // If it hasn't been converted to a LexicalNode, we hoist its children\r\n // up to the same level as it.\r\n lexicalNodes = lexicalNodes.concat(childLexicalNodes);\r\n } \r\n else {\r\n if (isBlockDomNode(node) && isDomNodeBetweenTwoInlineNodes(node)) {\r\n // Empty block dom node that hasnt been converted, we replace it with a linebreak if its between inline nodes\r\n lexicalNodes = lexicalNodes.concat($createLineBreakNode());\r\n }\r\n }\r\n } \r\n else if ($isElementNode(currentLexicalNode)) {\r\n // If the current node is a ElementNode after conversion,\r\n // we can append all the children to it.\r\n currentLexicalNode.append(...childLexicalNodes);\r\n }\r\n return lexicalNodes;\r\n}\r\n\r\n\r\nexport const generateNodesFromHtml = function $generateNodesFromDOM(editor:LexicalEditor, html:string) {\r\n\r\n try {\r\n const doc = domParser.parseFromString(html,\"text/html\")\r\n\r\n const elements = doc.body.childNodes;\r\n \r\n let lexicalNodes:LexicalNode[] = [];\r\n \r\n const allArtificialNodes:ElementNode[] = [];\r\n \r\n for (let i = 0; i < elements.length; i++) {\r\n \r\n let element = elements[i] as HTMLElement; \r\n \r\n // 解决根不是块级元素的问题 忽略 换行符\r\n if(!isBlockDomNode(element) && element.nodeValue != \"\\n\" && element.nodeValue != \"\\r\\n\"){\r\n \r\n const p = document.createElement(\"p\")\r\n \r\n if(element instanceof Text){\r\n // .replace(/[\\n|\\r\\n]+/g,\"<br />\")\r\n p.textContent = element.data;\r\n \r\n }\r\n else{\r\n p.innerHTML = element.outerHTML ;\r\n }\r\n \r\n element = p;\r\n \r\n }\r\n \r\n const lexicalNode = createNodesFromElement(element, editor, allArtificialNodes,false);\r\n \r\n if (lexicalNode !== null) {\r\n lexicalNodes = lexicalNodes.concat(lexicalNode);\r\n }\r\n } \r\n unwrapArtificalNodes(allArtificialNodes);\r\n return lexicalNodes;\r\n } catch (error) {\r\n throw error;\r\n }\r\n}\r\n\r\n/**\r\n * \r\n * @param editor \r\n * @param currentNode \r\n * @param parentElement \r\n * @param selection \r\n * @returns \r\n */\r\nconst appendNodesToHTML = function (editor:LexicalEditor, currentNode:LexicalNode, parentElement:HTMLElement|DocumentFragment, selection:BaseSelection|NodeSelection|RangeSelection|null = null) {\r\n\r\n let shouldInclude = selection !== null ? currentNode.isSelected(selection) : true;\r\n\r\n const shouldExclude = $isElementNode(currentNode) && currentNode.excludeFromCopy('html');\r\n\r\n let target = currentNode;\r\n\r\n if (selection !== null) {\r\n\r\n let clone = $cloneWithProperties(currentNode);\r\n\r\n clone = $isTextNode(clone) && selection !== null ? $sliceSelectedTextNodeContent(selection, clone) : clone;\r\n\r\n target = clone;\r\n }\r\n\r\n const children = $isElementNode(target) ? target.getChildren() : [];\r\n const registeredNode = editor._nodes.get(target.getType());\r\n\r\n let exportOutput;\r\n\r\n // Use HTMLConfig overrides, if available.\r\n if (registeredNode && registeredNode.exportDOM !== undefined) {\r\n exportOutput = registeredNode.exportDOM(editor, target);\r\n } \r\n else {\r\n exportOutput = target.exportDOM(editor);\r\n }\r\n\r\n const { element, after } = exportOutput;\r\n\r\n if (!element) {\r\n return false;\r\n }\r\n\r\n const fragment = document.createDocumentFragment();\r\n\r\n for (let i = 0; i < children.length; i++) {\r\n\r\n const childNode = children[i];\r\n const shouldIncludeChild = appendNodesToHTML(editor, childNode, fragment, selection);\r\n\r\n if (!shouldInclude && $isElementNode(currentNode) && shouldIncludeChild && currentNode.extractWithChild(childNode, selection, 'html')) {\r\n shouldInclude = true;\r\n }\r\n }\r\n\r\n if (shouldInclude && !shouldExclude) {\r\n\r\n if (isHTMLElement(element)) { element.append(fragment); }\r\n\r\n parentElement.append(element);\r\n\r\n if (after) {\r\n\r\n const newElement = after.call(target, element);\r\n\r\n if (newElement) { element.replaceWith(newElement); }\r\n }\r\n\r\n } \r\n else {\r\n parentElement.append(fragment);\r\n }\r\n\r\n return shouldInclude;\r\n}\r\n\r\n/**\r\n * \r\n * @param editor \r\n * @param selection \r\n * @returns \r\n */\r\nexport const generateHtmlFromNodes = function $generateHtmlFromNodes(editor:LexicalEditor, selection?:BaseSelection) {\r\n\r\n // && typeof global.window === 'undefined'\r\n if (typeof document === 'undefined' || typeof window === 'undefined') {\r\n throw new Error('To use $generateHtmlFromNodes in headless mode please initialize a headless browser implementation such as JSDom before calling this function.');\r\n }\r\n\r\n const container = document.createElement('div');\r\n const root = $getRoot();\r\n const topLevelChildren = root.getChildren();\r\n\r\n for (let i = 0; i < topLevelChildren.length; i++) {\r\n\r\n const topLevelNode = topLevelChildren[i];\r\n\r\n appendNodesToHTML(editor, topLevelNode, container, selection);\r\n\r\n }\r\n\r\n return container.innerHTML.trim();\r\n}\r\n\r\n/**\r\n * 美化html element\r\n * @param node \r\n * @param level \r\n * @returns \r\n */\r\nexport const prettifyHTMLElement = function (node: Element, level: number) {\r\n const indentBefore = Array.from({ length: level++ + 1 }).join(' ')\r\n const indentAfter = Array.from({ length: level - 1 }).join(' ')\r\n let textNode\r\n\r\n for (let i = 0; i < node.children.length; i++) {\r\n textNode = document.createTextNode(`\\n${indentBefore}`)\r\n node.insertBefore(textNode, node.children[i])\r\n prettifyHTMLElement(node.children[i], level)\r\n if (node.lastElementChild === node.children[i]) {\r\n textNode = document.createTextNode(`\\n${indentAfter}`)\r\n node.appendChild(textNode)\r\n }\r\n }\r\n return node\r\n}\r\n\r\n\r\n/**\r\n * 美化 html\r\n * @param str \r\n * @returns \r\n */\r\nexport const prettifyHTML = function (str: string) {\r\n const div = document.createElement('div')\r\n div.innerHTML = str.trim()\r\n return prettifyHTMLElement(div, 0).innerHTML.trim()\r\n}\r\n\r\n","/**\r\n * Copyright (c) Meta Platforms, Inc. and affiliates.\r\n *\r\n * This source code is licensed under the MIT license found in the\r\n * LICENSE file in the root directory of this source tree.\r\n *\r\n */\r\n\r\nconst SUPPORTED_URL_PROTOCOLS = new Set([\r\n 'http:',\r\n 'https:',\r\n 'mailto:',\r\n 'sms:',\r\n 'tel:',\r\n])\r\n\r\nexport function sanitizeUrl(url: string): string {\r\n try {\r\n const parsedUrl = new URL(url)\r\n\r\n if (!SUPPORTED_URL_PROTOCOLS.has(parsedUrl.protocol))\r\n return 'about:blank'\r\n }\r\n catch {\r\n return url\r\n }\r\n return url\r\n}\r\n\r\n// Source: https://stackoverflow.com/a/8234912/2013580\r\nconst urlRegExp = /((([A-Za-z]{3,9}:(?:\\/\\/)?)(?:[-;:&=+$,\\w]+@)?[A-Za-z0-9.-]+|(?:www.|[-;:&=+$,\\w]+@)[A-Za-z0-9.-]+)((?:\\/[+~%/.\\w-_]*)?\\??(?:[-+=&;%@.\\w_]*)#?(?:[\\w]*))?)/\r\nexport function validateUrl(url: string): boolean {\r\n // TODO Fix UI for link insertion; it should never default to an invalid URL such as https://.\r\n // Maybe show a dialog where they user can type the URL before inserting it.\r\n return url === 'https://' || urlRegExp.test(url)\r\n}\r\n","\r\nconst CSS_TO_STYLES = new Map();\r\n\r\n/**\r\n * Creates an object containing all the styles and their values provided in the CSS string.\r\n * @param css - The CSS string of styles and their values.\r\n * @returns The styleObject containing all the styles and their values.\r\n */\r\nexport function getStyleObjectFromRawCSS(css:string) {\r\n const styleObject:any = {};\r\n const styles = css.split(';');\r\n for (const style of styles) {\r\n if (style !== '') {\r\n const [key, value] = style.split(/:([^]+)/); // split on first colon\r\n if (key && value) {\r\n styleObject[key.trim()] = value.trim();\r\n }\r\n }\r\n }\r\n return styleObject;\r\n }\r\n \r\n /**\r\n * Given a CSS string, returns an object from the style cache.\r\n * @param css - The CSS property as a string.\r\n * @returns The value of the given CSS property.\r\n */\r\n export function getStyleObjectFromCSS(css:string) {\r\n let value = CSS_TO_STYLES.get(css);\r\n if (value === undefined) {\r\n value = getStyleObjectFromRawCSS(css);\r\n CSS_TO_STYLES.set(css, value);\r\n }\r\n {\r\n // Freeze the value in DEV to prevent accidental mutations\r\n Object.freeze(value);\r\n }\r\n return value;\r\n }\r\n \r\n /**\r\n * Gets the CSS styles from the style object.\r\n * @param styles - The style object containing the styles to get.\r\n * @returns A string containing the CSS styles and their values.\r\n */\r\n export function getCSSFromStyleObject(styles:any) {\r\n let css = '';\r\n for (const style in styles) {\r\n if (style && styles[style]) {\r\n css += `${style}: ${styles[style]};`;\r\n }\r\n }\r\n return css;\r\n }\r\n","\r\nimport { Fragment,ref } from 'vue'\r\nimport { Dialoger } from '@maketribe/dm'\r\nimport { ElButton ,ElInput } from \"element-plus\";\r\n/**\r\n * \r\n * @param href \r\n * @returns \r\n */\r\nexport const showLinkEditDialog = async (href:any) => {\r\n return new Promise((resolve,reject) => {\r\n\r\n const hrefValue = ref(href)\r\n\r\n // 取消编辑\r\n const handleCancelClick = () => {\r\n dialogInstance.destroy();\r\n };\r\n\r\n // 确认编辑\r\n const handleConfirmClick = () => {\r\n dialogInstance.destroy();\r\n resolve(hrefValue.value);\r\n };\r\n\r\n const dialogInstance = Dialoger.customRender({\r\n title: \"设置连接\",\r\n class: \"mk-html-editor-dialog\",\r\n width: \"500px\",\r\n onClose: () => {\r\n dialogInstance.destroy();\r\n },\r\n body: () => {\r\n return <ElInput v-model={hrefValue.value} clearable={true} placeholder='http://www.xxx.com' v-slots={\r\n {\r\n prepend:()=>{\r\n return \"地址:\";\r\n }\r\n }\r\n }></ElInput>\r\n },\r\n footer: () => {\r\n return <Fragment>\r\n <ElButton onClick={handleCancelClick}>取消</ElButton>\r\n <ElButton type=\"primary\" onClick={handleConfirmClick}>\r\n 确定\r\n </ElButton>\r\n </Fragment>\r\n },\r\n });\r\n });\r\n}\r\n","export const MODULE_NAME = \"ms\";\r\n","import { DataForm, DataFormOptions, FormColumn } from \"@maketribe/dm\";\r\nimport { DATA_MODEL_NAME } from \"../../../../../constants\";\r\nimport { MODULE_NAME } from \"../../../constants\";\r\n\r\nexport type MsMaterialGroup = {\r\n id: string;\r\n desc: string;\r\n parentGroupId: string | null;\r\n};\r\n\r\nexport class MsMaterialGroupForm extends DataForm<MsMaterialGroup> {\r\n static [DATA_MODEL_NAME]: string = \"mk-material-group\";\r\n\r\n constructor(options: DataFormOptions = {}) {\r\n super({\r\n name: MsMaterialGroupForm[DATA_MODEL_NAME],\r\n moduleName: MODULE_NAME,\r\n ...options,\r\n });\r\n }\r\n\r\n protected async initialize() {\r\n await super.initialize();\r\n\r\n this.setColumns([\r\n new FormColumn({ name: \"desc\", label: \"分组名称\", required: true }),\r\n new FormColumn({\r\n name: \"parentGroupId\",\r\n label: \"父材质组ID\",\r\n defaultValue: null,\r\n visible: false,\r\n }),\r\n ]);\r\n }\r\n\r\n formatSubmitData(data: any) {\r\n const { children, ...submitData } = data;\r\n\r\n return submitData;\r\n }\r\n}\r\n","import { DataTableOptions, DataTree, DataTreeNode } from \"@maketribe/dm\";\r\nimport { MsMaterialGroup } from \"./MsMaterialGroupForm\";\r\nimport { ResponseConfig, R } from \"@maketribe/request\";\r\nimport { DATA_MODEL_NAME } from \"../../../../../constants\";\r\nimport { MODULE_NAME } from \"../../../constants\";\r\n\r\nexport type MsMaterialGroupNode = MsMaterialGroup & {\r\n children: MsMaterialGroupNode[];\r\n};\r\n\r\nexport class MsMaterialGroupTree extends DataTree<MsMaterialGroupNode> {\r\n static [DATA_MODEL_NAME]: string = \"mk-material-group\";\r\n\r\n currentDataTreeNode: DataTreeNode<MsMaterialGroupNode> | null;\r\n\r\n constructor(options: DataTableOptions = {}) {\r\n super({\r\n name: MsMaterialGroupTree[DATA_MODEL_NAME],\r\n moduleName: MODULE_NAME,\r\n props: { label: \"desc\", parent: \"parentGroupId\" },\r\n ...options,\r\n });\r\n\r\n this.currentDataTreeNode = null;\r\n }\r\n\r\n formatItem(item: MsMaterialGroupNode): MsMaterialGroupNode {\r\n item.children = item.children ?? [];\r\n\r\n return item;\r\n }\r\n\r\n load(\r\n params?: Record<string, any>\r\n ): Promise<\r\n ResponseConfig<R<MsMaterialGroupNode[]> & { totalRecCount: string }>\r\n > {\r\n return this.loadAll(params);\r\n }\r\n\r\n public nodeHasChildren(node: DataTreeNode<MsMaterialGroupNode>): boolean {\r\n return node.children.length > 0;\r\n }\r\n\r\n getCurrentNode() {\r\n if (this.currentDataTreeNode) {\r\n return this.currentDataTreeNode;\r\n }\r\n\r\n const getFirstNode = (\r\n nodes: DataTreeNode<MsMaterialGroupNode>[]\r\n ): DataTreeNode<MsMaterialGroupNode> | null => {\r\n const node = nodes[0];\r\n\r\n if (node.children.length) {\r\n return getFirstNode(node.children);\r\n }\r\n\r\n return node;\r\n };\r\n\r\n if (this.rootNodes.length === 0) {\r\n return null;\r\n }\r\n\r\n return (this.currentDataTreeNode = getFirstNode(this.rootNodes));\r\n }\r\n\r\n setCurrentNode(node: DataTreeNode<MsMaterialGroupNode> | null) {\r\n this.currentDataTreeNode = node;\r\n }\r\n}\r\n","import { DataForm, DataFormOptions, FormColumn } from \"@maketribe/dm\";\r\nimport { DATA_MODEL_NAME } from \"../../../../constants\";\r\nimport { MODULE_NAME } from \"../../constants\";\r\n\r\nexport type MsMaterial = {\r\n id: string;\r\n materialGroupId?: string | null;\r\n type: number;\r\n desc: string;\r\n path: string;\r\n};\r\n\r\nexport class MsMaterialForm extends DataForm<MsMaterial> {\r\n static [DATA_MODEL_NAME]: string = \"mk-material\";\r\n\r\n constructor(options: DataFormOptions = {}) {\r\n super({\r\n name: MsMaterialForm[DATA_MODEL_NAME],\r\n moduleName: MODULE_NAME,\r\n ...options,\r\n });\r\n }\r\n\r\n protected async initialize() {\r\n await super.initialize();\r\n\r\n this.setColumns([\r\n new FormColumn({ name: \"id\", label: \"编号\" }),\r\n new FormColumn({ name: \"type\", label: \"类型\" }),\r\n new FormColumn({ name: \"desc\", label: \"描述\" }),\r\n new FormColumn({ name: \"path\", label: \"路径\" }),\r\n ]);\r\n }\r\n\r\n formatItem(item: MsMaterial): MsMaterial {\r\n return {\r\n id: item.id,\r\n materialGroupId: item.materialGroupId ?? null,\r\n type: item.type,\r\n desc: item.desc,\r\n path: item.path,\r\n };\r\n }\r\n\r\n formatSubmitData(data: any) {\r\n return {\r\n id: data.id,\r\n materialGroupId: data.materialGroupId,\r\n type: data.type,\r\n desc: data.desc,\r\n path: data.path,\r\n };\r\n }\r\n}\r\n","import {\r\n DataForm,\r\n DataFormOptions,\r\n FormColumn,\r\n IComponents,\r\n} from \"@maketribe/dm\";\r\nimport { ConfigComponents, ITypeResolver } from \"../../../../core\";\r\nimport { Disposable } from \"@maketribe/utils\";\r\nimport { DATA_MODEL_NAME } from \"../../../../constants\";\r\nimport { MODULE_NAME } from \"../../constants\";\r\n\r\nexport type MsConfig<T = any> = {\r\n id: string;\r\n key: string;\r\n type: string;\r\n value: T;\r\n};\r\n\r\nexport type MsConfigFormOptions = DataFormOptions & {\r\n configComponent?: IComponents;\r\n};\r\n\r\nexport class MsConfigForm\r\n extends DataForm<MsConfig>\r\n implements ITypeResolver<MsConfig>\r\n{\r\n static [DATA_MODEL_NAME]: string = \"mk-sys-config\";\r\n\r\n configComponent: IComponents;\r\n\r\n constructor(options: MsConfigFormOptions = {}) {\r\n super({\r\n name: MsConfigForm[DATA_MODEL_NAME],\r\n moduleName: MODULE_NAME,\r\n ...options,\r\n });\r\n\r\n this.configComponent = options.configComponent ?? new ConfigComponents();\r\n }\r\n\r\n protected async initialize() {\r\n await super.initialize();\r\n\r\n (window as any).configForm = this;\r\n\r\n const defaultType = \"string\";\r\n this.setColumns([\r\n new FormColumn({ name: \"id\", label: \"编号\" }),\r\n new FormColumn({ name: \"key\", label: \"配置键\", required: true }),\r\n new FormColumn({\r\n name: \"type\",\r\n label: \"类型\",\r\n componentInfo: \"MKFormDataSelect\",\r\n defaultValue: defaultType,\r\n required: true,\r\n componentProps: {\r\n options: [\r\n { value: \"string\", label: \"字符串\" },\r\n { value: \"int\", label: \"整数\" },\r\n { value: \"json\", label: \"JSON\" },\r\n ],\r\n },\r\n }),\r\n new FormColumn({\r\n name: \"value\",\r\n label: \"配置值\",\r\n required: true,\r\n defaultValue: null,\r\n rules: [\r\n {\r\n validator: (rule, value, callback) => {\r\n if (this.data?.type === \"json\") {\r\n try {\r\n JSON.parse(value);\r\n } catch (e) {\r\n callback(new Error(\"JSON格式错误\"));\r\n }\r\n }\r\n\r\n callback();\r\n },\r\n },\r\n ],\r\n componentInfo: this.resolveType(defaultType),\r\n }),\r\n new FormColumn({\r\n name: \"memo\",\r\n label: \"备注\",\r\n defaultValue: \"\",\r\n componentInfo: \"MKFormInput\",\r\n componentProps: { type: \"textarea\", rows: 4 },\r\n }),\r\n ]);\r\n\r\n let disposable: Disposable | null = null;\r\n\r\n this.dataChangeEvent.on(({ data }) => {\r\n disposable?.dispose();\r\n\r\n if (!data) {\r\n return null;\r\n }\r\n\r\n disposable = new Disposable();\r\n\r\n const valueFormColumn = this.getColumn(\"value\")!;\r\n valueFormColumn.componentInfo =\r\n this.configComponent.resolveComponent(\r\n this.resolveItemType(this.data!)\r\n ) || this.configComponent.resolveComponent(\"MKFormInput\")!;\r\n\r\n disposable.register(\r\n this.getColumn(\"type\")!.valueChangeEvent.on(() => {\r\n if (!this.data) {\r\n return;\r\n }\r\n\r\n const valueFormColumn = this.getColumn(\"value\")!;\r\n valueFormColumn.componentInfo =\r\n this.configComponent.resolveComponent(\r\n this.resolveItemType(this.data!)\r\n ) || this.configComponent.resolveComponent(\"MKFormInput\")!;\r\n\r\n this.data!.value = null;\r\n })\r\n );\r\n });\r\n }\r\n\r\n formatItem(item: MsConfig): MsConfig {\r\n let value = item.value;\r\n\r\n if (item.type !== \"json\") {\r\n try {\r\n value = JSON.parse(item.value);\r\n } catch (e) {}\r\n }\r\n\r\n return { ...item, value };\r\n }\r\n\r\n formatSubmitData(data: any) {\r\n return {\r\n ...data,\r\n value: data.type === \"json\" ? data.value : JSON.stringify(data.value),\r\n };\r\n }\r\n\r\n resolveType(type: string) {\r\n switch (type) {\r\n case \"int\":\r\n return \"MKConfigInputNumber\";\r\n case \"json\":\r\n return \"MKConfigJsonEditor\";\r\n default:\r\n return \"MKConfigInput\";\r\n }\r\n }\r\n\r\n resolveItemType(config: MsConfig) {\r\n return this.resolveType(config.type);\r\n }\r\n}\r\n","import {Where} from \"@maketribe/request\";\r\nimport {\r\n DataTable,\r\n DataTableOptions,\r\n TableColumn,\r\n TableActionColumn,\r\n TableHeaderItem,\r\n RefreshButton,\r\n AddButton,\r\n FilterColumn,\r\n} from \"@maketribe/dm\";\r\nimport {MsConfig} from \"./MsConfigForm\";\r\nimport {R, ResponseConfig} from \"@maketribe/request\";\r\nimport {MSAppClient} from \"../../../../core\";\r\nimport {DATA_MODEL_NAME} from \"../../../../constants\";\r\nimport {MODULE_NAME} from \"../../constants\";\r\n\r\nexport class MsConfigTable extends DataTable<MsConfig> {\r\n static [DATA_MODEL_NAME]: string = \"mk-sys-config\";\r\n\r\n private static _instance: MsConfigTable | null = null;\r\n\r\n static get instance(): MsConfigTable {\r\n if (!MsConfigTable._instance) {\r\n MsConfigTable._instance = new MsConfigTable();\r\n MsConfigTable._instance.init().then(() => {\r\n MsConfigTable._instance!.dataFilter.setReady();\r\n });\r\n }\r\n\r\n return MsConfigTable._instance;\r\n }\r\n\r\n constructor(options: DataTableOptions = {}) {\r\n super({\r\n name: MsConfigTable[DATA_MODEL_NAME],\r\n moduleName: MODULE_NAME,\r\n ...options,\r\n });\r\n }\r\n\r\n protected async initialize() {\r\n await super.initialize();\r\n\r\n this.header.rightArea = [\r\n new RefreshButton(),\r\n new AddButton(),\r\n new TableHeaderItem({\r\n componentInfo: \"MKBatchOpt\",\r\n predicate: () =>\r\n MSAppClient.instance?.userSession?.userInfo?.isSuper ?? false,\r\n }),\r\n ];\r\n\r\n this.dataFilter.setColumns([\r\n new FilterColumn({name: \"key\", label: \"配置键\", search: true}),\r\n ]);\r\n\r\n this.setColumns([\r\n new TableColumn({name: \"key\", label: \"配置键\"}),\r\n new TableColumn({name: \"memo\", label: \"备注\"}),\r\n new TableColumn({\r\n name: \"sortNo\",\r\n label: \"排序\",\r\n componentInfo: \"MKColumnSort\",\r\n componentProps: {\r\n // drag: true\r\n }\r\n }),\r\n new TableActionColumn(),\r\n ]);\r\n }\r\n\r\n formatItem(item: MsConfig): MsConfig {\r\n let value = item.value;\r\n\r\n try {\r\n value = JSON.parse(value);\r\n } catch (e) {\r\n }\r\n\r\n return {...item, value};\r\n }\r\n\r\n static async loadConfig<T = any>(\r\n key: string\r\n ): Promise<ResponseConfig<R<MsConfig<T>>>> {\r\n const where = new Where();\r\n\r\n where.addCondition(\"key\", \"=\", key);\r\n\r\n const dataViewRequest = MsConfigTable.instance.dataViewRequest;\r\n const response = await dataViewRequest.allList({\r\n data: {condition: where},\r\n });\r\n\r\n return {\r\n ...response,\r\n data: {\r\n ...response.data,\r\n data: response.data.data?.[0] ?? null,\r\n },\r\n };\r\n }\r\n\r\n static async getConfigValue<T = any>(key: string): Promise<T | null> {\r\n const where = new Where();\r\n\r\n where.addCondition(\"key\", \"=\", key);\r\n\r\n const dataViewRequest = MsConfigTable.instance.dataViewRequest;\r\n const response = await dataViewRequest.query({\r\n data: {condition: where, pc: 1, pn: 1},\r\n });\r\n\r\n if (response.data.code !== 200) {\r\n throw new Error(response.data.msg);\r\n }\r\n\r\n try {\r\n return JSON.parse(response.data.data[0]?.value);\r\n } catch {\r\n return null;\r\n }\r\n }\r\n\r\n static async setConfigValue(key: string, value: any) {\r\n const dataViewRequest = MsConfigTable.instance.dataViewRequest;\r\n\r\n const where = new Where();\r\n where.addCondition(\"key\", \"=\", key);\r\n\r\n const listResponse = await dataViewRequest.query({\r\n data: {condition: where, pc: 1, pn: 1},\r\n });\r\n\r\n if (listResponse.data.code !== 200) {\r\n throw new Error(listResponse.data.msg);\r\n }\r\n\r\n const response =\r\n listResponse.data.data.length === 0\r\n ? await dataViewRequest.add({key, value})\r\n : await dataViewRequest.update({\r\n ...listResponse.data.data[0],\r\n value,\r\n });\r\n\r\n return response.data;\r\n }\r\n}\r\n\r\n(window as any).MsConfigTable = MsConfigTable;\r\n","import { defineAsyncComponent } from \"vue\";\r\nimport { Components } from \"@maketribe/dm\";\r\n\r\nexport class MsMaterialComponents extends Components {\r\n constructor() {\r\n super();\r\n\r\n this.registerComponent({\r\n name: \"MKImageView\",\r\n title: \"图片\",\r\n component: defineAsyncComponent(\r\n () => import(\"../../components/material-list/components/image-view\")\r\n ),\r\n });\r\n\r\n this.registerComponent({\r\n name: \"MKFileView\",\r\n title: \"文件\",\r\n component: defineAsyncComponent(\r\n () => import(\"../../components/material-list/components/file-view\")\r\n ),\r\n });\r\n\r\n this.registerComponent({\r\n name: \"MKVideoView\",\r\n title: \"视频\",\r\n component: defineAsyncComponent(\r\n () => import(\"../../components/material-list/components/video-view\")\r\n ),\r\n });\r\n }\r\n}\r\n","import {\r\n Component,\r\n DataTable,\r\n DataTableOptions,\r\n IComponents,\r\n Messager,\r\n TableColumn,\r\n} from \"@maketribe/dm\";\r\nimport { MsMaterial, MsMaterialForm } from \"./MsMaterialForm\";\r\nimport { MsConfigTable } from \"../ms-config\";\r\nimport { ITypeResolver } from \"../../../../core\";\r\nimport { DATA_MODEL_NAME } from \"../../../../constants\";\r\nimport { MODULE_NAME } from \"../../constants\";\r\nimport { MsMaterialGroupNode } from \"./ms-material-group\";\r\nimport { DvOpt, UploadError, WebFileUpload } from \"@maketribe/request\";\r\nimport { MsMaterialComponents } from \"./MsMaterialComponents\";\r\nimport { isEqual } from \"lodash-es\";\r\n\r\nexport type MsMaterialType = {\r\n value: number;\r\n accept: string;\r\n label: string;\r\n limit: number;\r\n};\r\n\r\nexport type MaterialTableOptions = DataTableOptions & {\r\n materialComponents?: IComponents;\r\n};\r\n\r\nexport class MsMaterialTable\r\n extends DataTable<MsMaterial>\r\n implements ITypeResolver<MsMaterial>\r\n{\r\n static [DATA_MODEL_NAME]: string = \"mk-material\";\r\n\r\n materialTypes: MsMaterialType[] = [];\r\n\r\n allowMaterialTypeValues: MsMaterialType[\"value\"][] = [];\r\n\r\n materialComponents: IComponents;\r\n\r\n currentMaterialGroupId: MsMaterialGroupNode[\"id\"] | null = null;\r\n\r\n currentMaterialType: MsMaterialType | null = null;\r\n\r\n upload: WebFileUpload;\r\n\r\n materialForm: MsMaterialForm = this.register(new MsMaterialForm());\r\n\r\n constructor(options: MaterialTableOptions = {}) {\r\n super({\r\n name: MsMaterialTable[DATA_MODEL_NAME],\r\n moduleName: MODULE_NAME,\r\n ...options,\r\n });\r\n\r\n this.materialComponents =\r\n options.materialComponents ?? new MsMaterialComponents();\r\n\r\n this.upload = new WebFileUpload({\r\n filters: [\r\n (file) => {\r\n if (!this.currentMaterialType) {\r\n throw new UploadError(\"不能上传文件,素材类型无效\");\r\n }\r\n\r\n if (this.currentMaterialType.limit * 1024 * 1024 < file.size) {\r\n throw new UploadError(\"文件太大不能上传\");\r\n }\r\n },\r\n ],\r\n });\r\n }\r\n\r\n getMaterialTypes(): MsMaterialType[] {\r\n if (!this.allowMaterialTypeValues.length) {\r\n return this.materialTypes;\r\n }\r\n\r\n return this.materialTypes.filter((materialType) =>\r\n this.allowMaterialTypeValues.includes(materialType.value)\r\n );\r\n }\r\n\r\n async loadMaterialTypes() {\r\n const configResponse = await MsConfigTable.loadConfig<MsMaterialType[]>(\r\n \"ms-material-types\"\r\n );\r\n\r\n if (configResponse.data.code !== 200 || !configResponse.data.data) {\r\n throw new Error();\r\n }\r\n\r\n const config = configResponse.data.data;\r\n\r\n this.materialTypes = config.value || [];\r\n }\r\n\r\n protected async initialize() {\r\n await super.initialize();\r\n\r\n const dvOpt = DvOpt.createInstance({\r\n name: MsMaterialTable[DATA_MODEL_NAME],\r\n });\r\n\r\n this.upload.uploadEvent.on(({ uploadItem }) => {\r\n uploadItem.completeEvent.once(async () => {\r\n if (!this.currentMaterialGroupId || !this.currentMaterialType) {\r\n Messager.error({ message: \"上传失败\" });\r\n return;\r\n }\r\n\r\n try {\r\n const response = await dvOpt.save({\r\n materialGroupId: this.currentMaterialGroupId,\r\n type: this.currentMaterialType.value!,\r\n desc: uploadItem.payload.name,\r\n path: uploadItem.response!.data.data.path,\r\n });\r\n\r\n if (response.code !== 200) {\r\n Messager.error({ message: response.msg });\r\n return;\r\n }\r\n } catch {\r\n Messager.error({ message: \"网络异常\" });\r\n }\r\n\r\n this.load();\r\n });\r\n });\r\n\r\n this.materialTypes = [\r\n { value: 1, accept: \"image/*\", limit: 10, label: \"图片\" },\r\n { value: 2, accept: \"video/*\", limit: 500, label: \"视频\" },\r\n { value: 4, accept: \"*\", limit: 100, label: \"文档\" },\r\n ];\r\n\r\n this.currentMaterialType = this.materialTypes[0];\r\n\r\n const mapping = this.materialTypes.reduce((result, item) => {\r\n result[item.value] = result.label;\r\n\r\n return result;\r\n }, {} as Record<any, any>);\r\n\r\n this.setColumns([\r\n new TableColumn({ name: \"id\", label: \"编号\", visible: false }),\r\n new TableColumn({\r\n name: \"type\",\r\n label: \"类型\",\r\n componentInfo: \"MKColumnObjectMappingText\",\r\n componentProps: {\r\n mapping,\r\n },\r\n }),\r\n new TableColumn({ name: \"desc\", label: \"描述\" }),\r\n new TableColumn({ name: \"path\", label: \"路径\" }),\r\n ]);\r\n }\r\n formatItem(item: MsMaterial): MsMaterial {\r\n return {\r\n id: item.id,\r\n materialGroupId: item.materialGroupId || null,\r\n type: item.type ? item.type : 1,\r\n desc: item.desc || \"\",\r\n path: item.path || \"\",\r\n };\r\n }\r\n\r\n resolveType(type: string): string {\r\n switch (type) {\r\n case \"1\":\r\n return \"MKImageView\";\r\n case \"2\":\r\n return \"MKVideoView\";\r\n case \"3\":\r\n return \"MKAudioView\";\r\n default:\r\n return \"MKDocumentView\";\r\n }\r\n }\r\n\r\n resolveItemType(item: MsMaterial): string {\r\n return this.resolveType(item.type.toString());\r\n }\r\n\r\n resolveMaterialComponent(item: MsMaterial): Component | null {\r\n return this.materialComponents.resolveComponent(this.resolveItemType(item));\r\n }\r\n\r\n setCurrentMaterialGroupId(materialGroupId: MsMaterialGroupNode[\"id\"] | null) {\r\n this.currentMaterialGroupId = materialGroupId;\r\n\r\n this.attachMaterialTableCondition();\r\n }\r\n\r\n setCurrentMaterialType(materialType: MsMaterialType | null) {\r\n if (materialType?.value === this.currentMaterialType?.value) {\r\n return;\r\n }\r\n\r\n this.currentMaterialType = materialType;\r\n\r\n this.attachMaterialTableCondition();\r\n }\r\n\r\n setAllowMaterialTypeValues(\r\n allowMaterialTypeValues: MsMaterialType[\"value\"][]\r\n ) {\r\n const targetAllowMaterialTypeValues = allowMaterialTypeValues\r\n .slice()\r\n .sort();\r\n\r\n const originAllowMaterialTypeValues = this.allowMaterialTypeValues\r\n .slice()\r\n .sort();\r\n\r\n if (isEqual(targetAllowMaterialTypeValues, originAllowMaterialTypeValues)) {\r\n return;\r\n }\r\n\r\n this.allowMaterialTypeValues = allowMaterialTypeValues;\r\n\r\n this.setCurrentMaterialType(this.getMaterialTypes()[0] ?? null);\r\n }\r\n\r\n protected attachMaterialTableCondition() {\r\n if (!this.currentMaterialGroupId || !this.currentMaterialType) {\r\n return;\r\n }\r\n\r\n this.useCondition((defaultGroup) => {\r\n defaultGroup.clear();\r\n\r\n defaultGroup.addCondition(\r\n \"materialGroupId\",\r\n \"=\",\r\n this.currentMaterialGroupId\r\n );\r\n\r\n defaultGroup.addCondition(\"type\", \"=\", this.currentMaterialType!.value);\r\n });\r\n\r\n this.load();\r\n }\r\n}\r\n","import {\r\n DataForm,\r\n DataFormOptions,\r\n DataFormType,\r\n FormColumn,\r\n} from \"@maketribe/dm\";\r\nimport { DATA_MODEL_NAME } from \"../../../../constants\";\r\nimport { MODULE_NAME } from \"../../constants\";\r\nimport { Role } from \"../../../../core\";\r\n\r\nexport type MsRole = Role & { memo: string };\r\n\r\nexport class MsRoleForm extends DataForm<MsRole> {\r\n static [DATA_MODEL_NAME]: string = \"ms-role\";\r\n\r\n constructor(options: DataFormOptions = {}) {\r\n super({\r\n name: MsRoleForm[DATA_MODEL_NAME],\r\n moduleName: MODULE_NAME,\r\n ...options,\r\n });\r\n }\r\n\r\n protected async initialize() {\r\n await super.initialize();\r\n\r\n this.setColumns([\r\n new FormColumn({ name: \"id\", label: \"编号\" }),\r\n new FormColumn({ name: \"name\", label: \"角色名\", required: true }),\r\n new FormColumn({ name: \"desc\", label: \"角色描述\", required: true }),\r\n new FormColumn({\r\n name: \"memo\",\r\n label: \"备注\",\r\n defaultValue: \"\",\r\n componentInfo: \"MKFormInput\",\r\n componentProps: { type: \"textarea\", rows: 4 },\r\n }),\r\n ]);\r\n\r\n this.dataFormTypeChangeEvent.on(({ dataFormType }) => {\r\n this.getColumn(\"name\")!.disabled = dataFormType == DataFormType.UPDATE;\r\n });\r\n }\r\n\r\n formatItem(item: MsRole): MsRole {\r\n return {\r\n id: item.id,\r\n name: item.name || \"\",\r\n desc: item.desc || \"\",\r\n memo: item.memo || \"\",\r\n };\r\n }\r\n}\r\n","import {\r\n DataTable,\r\n DataTableOptions,\r\n TableColumn,\r\n FilterColumn,\r\n TableActionColumn,\r\n ActionButton,\r\n EditButton,\r\n DeleteButton,\r\n TableHeaderItem,\r\n RefreshButton,\r\n AddButton,\r\n} from \"@maketribe/dm\";\r\nimport { MsRole } from \"./MsRoleForm\";\r\nimport { Event } from \"@maketribe/utils\";\r\nimport { MSAppClient } from \"../../../../core\";\r\nimport { DATA_MODEL_NAME } from \"../../../../constants\";\r\nimport { MODULE_NAME } from \"../../constants\";\r\n\r\nexport class MsRoleTable<\r\n F extends MsRole = MsRole,\r\n T extends MsRole = MsRole\r\n> extends DataTable<T, F> {\r\n static [DATA_MODEL_NAME]: string = \"ms-role\";\r\n\r\n configRolePermissionEvent: Event<{ item: MsRole }> = this.register(\r\n new Event()\r\n );\r\n\r\n constructor(options: DataTableOptions = {}) {\r\n super({\r\n name: MsRoleTable[DATA_MODEL_NAME],\r\n moduleName: MODULE_NAME,\r\n ...options,\r\n });\r\n }\r\n\r\n protected async initialize() {\r\n await super.initialize();\r\n\r\n this.header.rightArea = [\r\n new RefreshButton(),\r\n new AddButton(),\r\n new TableHeaderItem({\r\n componentInfo: \"MKBatchOpt\",\r\n predicate: () =>\r\n MSAppClient.instance?.userSession?.userInfo?.isSuper ?? false,\r\n }),\r\n ];\r\n\r\n this.dataFilter.setColumns([\r\n new FilterColumn({\r\n name: \"name\",\r\n label: \"角色名\",\r\n componentInfo: \"MKConditionInput\",\r\n }),\r\n new FilterColumn({\r\n name: \"desc\",\r\n label: \"角色描述\",\r\n componentInfo: \"MKConditionInput\",\r\n }),\r\n ]);\r\n\r\n this.setColumns([\r\n new TableColumn({ name: \"id\", label: \"编号\", visible: false }),\r\n new TableColumn({ name: \"name\", label: \"角色名\" }),\r\n new TableColumn({ name: \"desc\", label: \"角色描述\" }),\r\n new TableActionColumn({\r\n width: \"160px\",\r\n buttons: [\r\n new ActionButton({\r\n label: \"权限\",\r\n handler: (row: MsRole) => {\r\n this.configRolePermissionEvent.emit({ item: row });\r\n },\r\n }),\r\n new EditButton(),\r\n new DeleteButton(),\r\n ],\r\n }),\r\n ]);\r\n }\r\n\r\n formatItem(item: T): F {\r\n return {\r\n id: item.id,\r\n name: item.name || \"\",\r\n desc: item.desc || \"\",\r\n } as F;\r\n }\r\n}\r\n","import { DataTable, DataTableOptions, TableColumn } from \"@maketribe/dm\";\r\nimport { ResponseConfig, R } from \"@maketribe/request\";\r\nimport { DATA_MODEL_NAME } from \"../../../../../constants\";\r\nimport { MODULE_NAME } from \"../../../constants\";\r\n\r\nexport type MsRolePermissionPoint = {\r\n id: string;\r\n permissionPointDefId: string;\r\n roleId: string;\r\n};\r\n\r\nexport class MsRolePermissionPointTable extends DataTable<MsRolePermissionPoint> {\r\n static [DATA_MODEL_NAME]: string = \"ms-role-permission-point\";\r\n constructor(options: DataTableOptions = {}) {\r\n super({\r\n name: MsRolePermissionPointTable[DATA_MODEL_NAME],\r\n moduleName: MODULE_NAME,\r\n ...options,\r\n });\r\n }\r\n\r\n protected loadRequest(\r\n params: Record<string, any>\r\n ): Promise<\r\n ResponseConfig<R<MsRolePermissionPoint[]> & { totalRecCount: string }>\r\n > {\r\n return this.loadAllRequest(params);\r\n }\r\n\r\n protected async initialize() {\r\n await super.initialize();\r\n\r\n this.setColumns([\r\n new TableColumn({ name: \"id\", visible: false }),\r\n new TableColumn({ name: \"roleId\" }),\r\n new TableColumn({ name: \"permissionPointDefId\" }),\r\n ]);\r\n }\r\n}\r\n","import { DataTable, DataTableOptions, TableColumn } from \"@maketribe/dm\";\r\nimport { ResponseConfig, R } from \"@maketribe/request\";\r\nimport { DATA_MODEL_NAME } from \"../../../../../constants\";\r\nimport { MODULE_NAME } from \"../../../constants\";\r\n\r\nexport type MsRoleRoute = {\r\n id: string;\r\n roleId: string;\r\n routeId: string;\r\n};\r\n\r\nexport class MsRoleRouteTable extends DataTable<MsRoleRoute> {\r\n static [DATA_MODEL_NAME]: string = \"ms-role-route\";\r\n\r\n constructor(options: DataTableOptions = {}) {\r\n super({\r\n name: MsRoleRouteTable[DATA_MODEL_NAME],\r\n moduleName: MODULE_NAME,\r\n ...options,\r\n });\r\n }\r\n\r\n protected loadRequest(\r\n params: Record<string, any>\r\n ): Promise<ResponseConfig<R<MsRoleRoute[]> & { totalRecCount: string }>> {\r\n return this.loadAllRequest(params);\r\n }\r\n\r\n protected async initialize() {\r\n await super.initialize();\r\n\r\n this.setColumns([\r\n new TableColumn({ name: \"id\", visible: false }),\r\n new TableColumn({ name: \"roleId\" }),\r\n new TableColumn({ name: \"routeId\" }),\r\n ]);\r\n }\r\n}\r\n","import {\r\n AddButton,\r\n DataTable,\r\n DataTableOptions,\r\n RefreshButton,\r\n TableActionColumn,\r\n TableColumn,\r\n TableHeaderItem,\r\n} from \"@maketribe/dm\";\r\nimport type { MsMenuItem, MsMenuResult } from \"./MsMenuForm\";\r\nimport { MSAppClient } from \"../../../../core\";\r\nimport { DATA_MODEL_NAME } from \"../../../../constants\";\r\nimport { MODULE_NAME } from \"../../constants\";\r\n\r\nexport class MsMenuTable<T extends MsMenuItem = MsMenuItem> extends DataTable<\r\n MsMenuResult,\r\n T\r\n> {\r\n static [DATA_MODEL_NAME]: string = \"ms-menu\";\r\n\r\n constructor(options: Omit<DataTableOptions, \"name\"> = {}) {\r\n super({\r\n name: MsMenuTable[DATA_MODEL_NAME],\r\n moduleName: MODULE_NAME,\r\n ...options,\r\n });\r\n }\r\n\r\n protected async initialize() {\r\n await super.initialize();\r\n\r\n this.header.rightArea = [\r\n new RefreshButton(),\r\n new AddButton(),\r\n new TableHeaderItem({\r\n componentInfo: \"MKBatchOpt\",\r\n predicate: () =>\r\n MSAppClient.instance?.userSession?.userInfo?.isSuper ?? false,\r\n }),\r\n ];\r\n\r\n this.setColumns([\r\n new TableColumn({ name: \"id\", label: \"编号\", visible: false }),\r\n new TableColumn({ name: \"title\", label: \"菜单描述\" }),\r\n new TableActionColumn(),\r\n ]);\r\n }\r\n\r\n formatItem(item: MsMenuResult): T {\r\n return {\r\n id: item.id,\r\n title: item.title || \"\",\r\n iconName: item.iconName || \"\",\r\n pid: item.pid || \"\",\r\n routeId: item.routeId,\r\n } as T;\r\n }\r\n}\r\n","import { DataForm, DataFormOptions, FormColumn } from \"@maketribe/dm\";\r\nimport { RouteType, DATA_MODEL_NAME } from \"../../../../../constants\";\r\nimport { Route } from \"../../../../../core\";\r\nimport { MsMenuTable } from \"../MsMenuTable\";\r\nimport { MODULE_NAME } from \"../../../constants\";\r\n\r\nexport type MsRouteResult = {\r\n id: string;\r\n name: string;\r\n title: string;\r\n type: number;\r\n menuId: string;\r\n iconName: string;\r\n route?: string;\r\n memo?: string;\r\n};\r\n\r\nexport type MsRoute = Route & { memo: string };\r\n\r\nexport class MsRouteForm extends DataForm<MsRouteResult, MsRoute> {\r\n static [DATA_MODEL_NAME]: string = \"ms-route\";\r\n\r\n constructor(options: DataFormOptions = {}) {\r\n super({ name: MsRouteForm[DATA_MODEL_NAME], ...options, moduleName: MODULE_NAME, });\r\n }\r\n\r\n protected async initialize() {\r\n await super.initialize();\r\n\r\n this.setColumns([\r\n new FormColumn({ name: \"id\", label: \"编号\" }),\r\n new FormColumn({ name: \"name\", label: \"路由名\", required: true }),\r\n new FormColumn({ name: \"title\", label: \"路由描述\", required: true }),\r\n new FormColumn({ name: \"route\", label: \"路径\" }),\r\n new FormColumn({\r\n name: \"menuId\",\r\n label: \"所属菜单\",\r\n componentInfo: \"MKFormDataTableSelect\",\r\n required: true,\r\n componentProps: {\r\n labelFieldName: \"title\",\r\n dataTable: new MsMenuTable({ pageSize: 10 }),\r\n },\r\n }),\r\n new FormColumn({\r\n name: \"iconName\",\r\n label: \"图标\",\r\n componentInfo: \"MKFormIconSelect\",\r\n }),\r\n new FormColumn({\r\n name: \"type\",\r\n label: \"路由类型\",\r\n defaultValue: RouteType.ROUTE,\r\n componentInfo: \"MKFormDataSelect\",\r\n required: true,\r\n componentProps: {\r\n options: [\r\n { value: RouteType.ROUTE, label: \"站内路由\" },\r\n { value: RouteType.LINK, label: \"站外链接\" },\r\n ],\r\n },\r\n }),\r\n new FormColumn({\r\n name: \"memo\",\r\n label: \"备注\",\r\n componentInfo: \"MKFormInput\",\r\n componentProps: { type: \"textarea\", rows: 4 },\r\n }),\r\n ]);\r\n }\r\n\r\n formatSubmitData(data: any) {\r\n const type = Number.parseInt(data.type);\r\n\r\n return {\r\n ...data,\r\n iconName: data.iconName || null,\r\n type: Number.isNaN(type) ? RouteType.ROUTE : type,\r\n };\r\n }\r\n\r\n formatItem(item: MsRouteResult): MsRoute {\r\n return {\r\n id: item.id,\r\n name: item.name || \"\",\r\n title: item.title || \"\",\r\n type:\r\n `${item.type}` === RouteType.ROUTE ? RouteType.ROUTE : RouteType.LINK,\r\n menuId: item.menuId,\r\n iconName: item.iconName || \"\",\r\n route: item.route || \"\",\r\n memo: item.memo || \"\",\r\n };\r\n }\r\n}\r\n","import {\r\n DataTable,\r\n DataTableOptions,\r\n TableColumn,\r\n FilterColumn,\r\n TableActionColumn,\r\n} from \"@maketribe/dm\";\r\nimport { MsRoute, MsRouteResult } from \"./MsRouteForm\";\r\nimport { RouteType, DATA_MODEL_NAME } from \"../../../../../constants\";\r\nimport { MODULE_NAME } from \"../../../constants\";\r\n\r\nexport class MsRouteTable extends DataTable<MsRouteResult, MsRoute> {\r\n static [DATA_MODEL_NAME]: string = \"ms-route\";\r\n\r\n constructor(options: DataTableOptions = {}) {\r\n super({ name: MsRouteTable[DATA_MODEL_NAME], ...options, moduleName: MODULE_NAME });\r\n }\r\n\r\n protected async initialize() {\r\n await super.initialize();\r\n\r\n this.dataFilter.setColumns([\r\n new FilterColumn({\r\n name: \"name\",\r\n label: \"路由名\",\r\n componentInfo: \"MKConditionInput\",\r\n }),\r\n new FilterColumn({\r\n name: \"title\",\r\n label: \"路由描述\",\r\n componentInfo: \"MKConditionInput\",\r\n }),\r\n new FilterColumn({\r\n name: \"type\",\r\n label: \"路由类型\",\r\n componentInfo: \"MKConditionSelect\",\r\n componentProps: {\r\n options: [\r\n { value: 0, label: \"站内路由\" },\r\n { value: 1, label: \"站外链接\" },\r\n ],\r\n },\r\n }),\r\n ]);\r\n\r\n this.setColumns([\r\n new TableColumn({ name: \"name\", label: \"路由名\" }),\r\n new TableColumn({ name: \"title\", label: \"路由描述\" }),\r\n new TableColumn({ name: \"route\", label: \"路径\" }),\r\n new TableColumn({\r\n name: \"type\",\r\n label: \"路由类型\",\r\n componentInfo: \"MKColumnObjectMappingText\",\r\n componentProps: {\r\n mapping: {\r\n [RouteType.ROUTE]: \"站内路由\",\r\n [RouteType.LINK]: \"站外链接\",\r\n },\r\n },\r\n }),\r\n new TableActionColumn(),\r\n ]);\r\n }\r\n\r\n formatItem(item: MsRouteResult): MsRoute {\r\n return {\r\n id: item.id,\r\n name: item.name || \"\",\r\n title: item.title || \"\",\r\n type: item.type === 0 ? RouteType.ROUTE : RouteType.LINK,\r\n menuId: item.menuId,\r\n iconName: item.iconName || \"\",\r\n route: item.route || \"\",\r\n memo: item.memo || \"\",\r\n };\r\n }\r\n}\r\n","import { DataForm, DataFormOptions, FormColumn } from \"@maketribe/dm\";\r\nimport { MsMenuTable } from \"../MsMenuTable\";\r\nimport { DATA_MODEL_NAME } from \"../../../../../constants\";\r\nimport { MODULE_NAME } from \"../../../constants\";\r\nimport { PermissionPointDefine } from \"../../../../../core\";\r\n\r\nexport type MsPermissionPointDefine = PermissionPointDefine & { memo: string };\r\n\r\nexport class MsPermissionPointDefineForm extends DataForm<MsPermissionPointDefine> {\r\n static [DATA_MODEL_NAME]: string = \"ms-permission-point-def\";\r\n\r\n constructor(options: DataFormOptions = {}) {\r\n super({\r\n name: MsPermissionPointDefineForm[DATA_MODEL_NAME],\r\n moduleName: MODULE_NAME,\r\n ...options,\r\n });\r\n }\r\n\r\n protected async initialize() {\r\n await super.initialize();\r\n\r\n this.setColumns([\r\n new FormColumn({ name: \"id\", label: \"编号\" }),\r\n new FormColumn({\r\n name: \"menuId\",\r\n label: \"所属菜单\",\r\n componentInfo: \"MKFormDataTableSelect\",\r\n required: true,\r\n componentProps: {\r\n labelFieldName: \"title\",\r\n dataTable: new MsMenuTable({ pageSize: 10 }),\r\n },\r\n }),\r\n new FormColumn({ name: \"key\", label: \"权限键\", required: true }),\r\n new FormColumn({ name: \"name\", label: \"权限描述\", required: true }),\r\n new FormColumn({\r\n name: \"memo\",\r\n label: \"备注\",\r\n componentInfo: \"MKFormInput\",\r\n componentProps: { type: \"textarea\", rows: 4 },\r\n }),\r\n ]);\r\n }\r\n}\r\n","import {\r\n DataTable,\r\n DataTableOptions,\r\n FilterColumn,\r\n TableActionColumn,\r\n TableColumn,\r\n} from \"@maketribe/dm\";\r\nimport { MsPermissionPointDefine } from \"./MsPermissionPointDefineForm\";\r\nimport { DATA_MODEL_NAME } from \"../../../../../constants\";\r\nimport { MODULE_NAME } from \"../../../constants\";\r\n\r\nexport class MsPermissionPointDefineTable<\r\n T extends MsPermissionPointDefine = MsPermissionPointDefine\r\n> extends DataTable<MsPermissionPointDefine, T> {\r\n static [DATA_MODEL_NAME]: string = \"ms-permission-point-def\";\r\n\r\n constructor(options: DataTableOptions = {}) {\r\n super({\r\n name: MsPermissionPointDefineTable[DATA_MODEL_NAME],\r\n moduleName: MODULE_NAME,\r\n ...options,\r\n });\r\n }\r\n\r\n protected async initialize() {\r\n await super.initialize();\r\n\r\n this.dataFilter.setColumns([\r\n new FilterColumn({ name: \"key\", label: \"权限键\" }),\r\n new FilterColumn({ name: \"name\", label: \"权限描述\" }),\r\n ]);\r\n\r\n this.setColumns([\r\n new TableColumn({ name: \"id\", label: \"编号\", visible: false }),\r\n new TableColumn({ name: \"key\", label: \"权限键\" }),\r\n new TableColumn({ name: \"name\", label: \"权限描述\" }),\r\n new TableActionColumn(),\r\n ]);\r\n }\r\n}\r\n","import {\r\n DataTableOptions,\r\n DataTree,\r\n DataTreeNode,\r\n TableActionColumn,\r\n TableColumn,\r\n} from \"@maketribe/dm\";\r\nimport type { MsMenuItem } from \"./MsMenuForm\";\r\nimport { DATA_MODEL_NAME, MenuType } from \"../../../../constants\";\r\nimport { MODULE_NAME } from \"../../constants\";\r\nimport { MSAppClient } from \"../../../../core/MSAppClient\";\r\n\r\nexport type MsMenuItemNode = MsMenuItem & {\r\n children: MsMenuItemNode[];\r\n targetUrl: string;\r\n};\r\n\r\nexport class MsMenuTree extends DataTree<MsMenuItemNode> {\r\n static [DATA_MODEL_NAME]: string = \"ms-menu\";\r\n\r\n constructor(options: Omit<DataTableOptions, \"name\"> = {}) {\r\n super({\r\n name: MsMenuTree[DATA_MODEL_NAME],\r\n moduleName: MODULE_NAME,\r\n sortFieldName: \"sort\",\r\n ...options,\r\n });\r\n }\r\n\r\n protected async initialize() {\r\n await super.initialize();\r\n\r\n this.setColumns([\r\n new TableColumn({ name: \"data.title\", label: \"菜单描述\", align: \"left\" }),\r\n new TableColumn({\r\n name: \"data.type\",\r\n width: \"100px\",\r\n label: \"菜单类型\",\r\n componentInfo: \"MKColumnObjectMappingText\",\r\n componentProps: {\r\n mapping: {\r\n [MenuType.Container]: \"菜单组\",\r\n [MenuType.Menu]: \"菜单\",\r\n [MenuType.SystemSettings]: \"系统设置\",\r\n },\r\n },\r\n }),\r\n new TableActionColumn(),\r\n ]);\r\n }\r\n\r\n formatItem(item: MsMenuItemNode): MsMenuItemNode {\r\n item.type += \"\";\r\n item.children = item.children || [];\r\n\r\n item.targetUrl = \"\";\r\n\r\n if (!item.targetUrl) {\r\n const route = item.routes.find((route) => route.id === item.routeId);\r\n item.targetUrl = route?.route || \"\";\r\n\r\n if (!item.targetUrl && route) {\r\n const pageRoute = MSAppClient.instance!.pageManager.extendsPages.find(\r\n (item) => item.name === route.name\r\n );\r\n\r\n item.targetUrl = pageRoute?.path ?? \"\";\r\n }\r\n\r\n if (!item.targetUrl && route) {\r\n const match = route.name.match(/^dv\\/([^/]+)\\/(edit|.+)$/i);\r\n\r\n if (match) {\r\n item.targetUrl =\r\n match[2] === \"edit\" ? `/dv/${match[1]}/edit` : `/dv/${match[1]}`;\r\n }\r\n }\r\n }\r\n\r\n return item;\r\n }\r\n\r\n public nodeHasChildren(node: DataTreeNode<MsMenuItemNode>): boolean {\r\n return ([MenuType.Container, MenuType.SystemSettings] as string[]).includes(\r\n node.data?.type as string\r\n );\r\n }\r\n\r\n async load(params?: Record<string, any>) {\r\n return super.loadAll(params);\r\n }\r\n}\r\n","import {\r\n DataForm,\r\n DataFormOptions,\r\n DataFormType,\r\n FormColumn,\r\n FormDetailColumn,\r\n} from \"@maketribe/dm\";\r\nimport { MsMenuTable } from \"./MsMenuTable\";\r\nimport { MsRouteTable, MsRouteForm, MsRouteResult } from \"./ms-route\";\r\nimport {\r\n MsPermissionPointDefine,\r\n MsPermissionPointDefineForm,\r\n MsPermissionPointDefineTable,\r\n} from \"./ms-permission-point\";\r\nimport { DATA_MODEL_NAME, MenuType } from \"../../../../constants\";\r\nimport { MODULE_NAME } from \"../../constants\";\r\nimport { MenuData } from \"../../../../core\";\r\nimport { MsMenuTree } from \"./MsMenuTree\";\r\n\r\nexport type MsMenuResult = MenuData & { memo?: string };\r\n\r\nexport type MsMenuItem = {\r\n id: string;\r\n title: string;\r\n iconName: string;\r\n pid: string;\r\n routeId: string;\r\n sort: string;\r\n type: string;\r\n routes: MsRouteResult[];\r\n permissionPoints: MsPermissionPointDefine[];\r\n memo: string;\r\n};\r\n\r\nexport class MsMenuForm extends DataForm<MsMenuResult, MsMenuItem> {\r\n static [DATA_MODEL_NAME]: string = \"ms-menu\";\r\n\r\n constructor(options: DataFormOptions = {}) {\r\n super({\r\n name: MsMenuForm[DATA_MODEL_NAME],\r\n moduleName: MODULE_NAME,\r\n ...options,\r\n });\r\n }\r\n\r\n protected async initialize() {\r\n await super.initialize();\r\n\r\n const menuTable = this.register(new MsMenuTable({ pageSize: 10 }));\r\n\r\n menuTable.useCondition((group) => {\r\n group.addCondition(\r\n \"type\",\r\n \"in\",\r\n `${[MenuType.Container, MenuType.SystemSettings]\r\n .map((menuType) => parseInt(menuType))\r\n .join(\",\")}`\r\n );\r\n });\r\n\r\n const routeTable = this.register(new MsRouteTable({ pageSize: 10 }));\r\n\r\n this.setColumns([\r\n new FormColumn({ name: \"id\", label: \"编号\" }),\r\n new FormColumn({ name: \"title\", label: \"菜单描述\", required: true }),\r\n new FormColumn({\r\n name: \"iconName\",\r\n label: \"图标\",\r\n componentInfo: \"MKFormIconSelect\",\r\n required: true,\r\n }),\r\n new FormColumn({\r\n name: \"type\",\r\n label: \"菜单类型\",\r\n componentInfo: \"MKFormDataSelect\",\r\n defaultValue: MenuType.Menu,\r\n required: true,\r\n componentProps: {\r\n options: [\r\n { value: MenuType.Container, label: \"菜单组\" },\r\n { value: MenuType.Menu, label: \"菜单\" },\r\n { value: MenuType.SystemSettings, label: \"系统设置\" },\r\n ],\r\n },\r\n }),\r\n // new FormColumn({\r\n // name: \"routeId\",\r\n // label: \"默认路由\",\r\n // componentInfo: \"MKFormDataTableSelect\",\r\n // componentProps: {\r\n // labelFieldName: \"title\",\r\n // dataTable: routeTable,\r\n // },\r\n // }),\r\n new FormColumn({\r\n name: \"pid\",\r\n label: \"父菜单\",\r\n componentInfo: \"MKDataTreeSelect\",\r\n // componentInfo: \"MKFormDataTableSelect\",\r\n componentProps: {\r\n labelFieldName: \"title\",\r\n dataTree: new MsMenuTree(),\r\n clearable: true,\r\n // dataTable: menuTable,\r\n },\r\n }),\r\n new FormColumn({ name: \"sort\", label: \"排序\", defaultValue: \"0\" }),\r\n new FormDetailColumn({\r\n name: \"routes\",\r\n label: \"该菜单所属路由定义\",\r\n associationFieldName: \"menuId\",\r\n detailForm: this.register(new MsRouteForm()),\r\n detailTable: this.register(new MsRouteTable()),\r\n }),\r\n new FormDetailColumn({\r\n name: \"permissionPoints\",\r\n label: \"该菜单所属权限定义\",\r\n associationFieldName: \"menuId\",\r\n detailForm: this.register(new MsPermissionPointDefineForm()),\r\n detailTable: this.register(new MsPermissionPointDefineTable()),\r\n }),\r\n new FormColumn({\r\n name: \"memo\",\r\n label: \"备注\",\r\n componentInfo: \"MKFormInput\",\r\n componentProps: { type: \"textarea\", rows: 4 },\r\n }),\r\n ]);\r\n\r\n this.dataFormTypeChangeEvent.on(({ dataFormType }) => {\r\n if (dataFormType === DataFormType.UPDATE) {\r\n routeTable.useCondition((group) => {\r\n group.clear();\r\n group.addCondition(\"menuId\", \"=\", this.data!.id);\r\n });\r\n }\r\n });\r\n\r\n const handleMenuTypeChange = () => {\r\n const visible = this.data?.type === MenuType.Menu;\r\n\r\n // this.getColumn(\"routeId\")!.visible = visible;\r\n this.getColumn(\"routes\")!.visible = visible;\r\n this.getColumn(\"permissionPoints\")!.visible = visible;\r\n };\r\n\r\n this.formItemValueChangeEvent.on(({ formItem }) => {\r\n if (formItem.name === \"type\") {\r\n handleMenuTypeChange();\r\n }\r\n });\r\n\r\n this.dataFormTypeChangeEvent.on(({ dataFormType }) => {\r\n this.getColumn(\"type\")!.disabled = dataFormType !== DataFormType.ADD;\r\n });\r\n }\r\n\r\n formatSubmitData(data: any) {\r\n const permissionPoints =\r\n data.type === MenuType.Menu ? data.permissionPoints : [];\r\n const routes = data.type === MenuType.Menu ? data.routes : [];\r\n\r\n const parsedType = parseInt(data.type);\r\n\r\n return {\r\n ...data,\r\n type: isNaN(parsedType) ? parseInt(MenuType.Menu) : parsedType,\r\n iconName: data.iconName || null,\r\n pid: data.pid || null,\r\n routeId: data.routeId || null,\r\n permissionPoints,\r\n routes,\r\n };\r\n }\r\n\r\n formatItem(item: MsMenuResult): MsMenuItem {\r\n return {\r\n id: item.id,\r\n title: item.title || \"\",\r\n iconName: item.iconName || \"\",\r\n pid: item.pid || \"\",\r\n routeId: item.routeId,\r\n type: item.type ? `${item.type}` : \"1\",\r\n sort: item.sort || \"0\",\r\n routes: (item.routes || []) as unknown as MsMenuItem[\"routes\"],\r\n permissionPoints: (item.permissionPoints ||\r\n []) as unknown as MsMenuItem[\"permissionPoints\"],\r\n memo: item.memo || \"\",\r\n };\r\n }\r\n}\r\n","import { Group, R, ResponseConfig } from \"@maketribe/request\";\r\nimport { DataTableOptions, WhereFilter } from \"@maketribe/dm\";\r\nimport {\r\n MsMenuItem,\r\n MsMenuResult,\r\n MsMenuTable,\r\n MsPermissionPointDefine,\r\n MsPermissionPointDefineTable,\r\n MsRoute,\r\n MsRouteTable,\r\n} from \"../ms-menu\";\r\nimport { MsRole } from \"./MsRoleForm\";\r\nimport { MsRoleRouteTable } from \"./ms-role-route\";\r\nimport { MsRolePermissionPointTable } from \"./ms-role-permission-point\";\r\nimport { postTraverse } from \"@maketribe/utils\";\r\n\r\nexport type MsRolePermissionPointDefine = MsPermissionPointDefine & {\r\n originalSelected: boolean;\r\n selected: boolean;\r\n};\r\n\r\nexport type MsRoleMenuNode = {\r\n permissionPoints: MsRolePermissionPointDefine[];\r\n routes: MsRoute[];\r\n originalSelected: boolean;\r\n selected: boolean;\r\n indeterminate: boolean;\r\n children: MsRoleMenuNode[];\r\n} & MsMenuItem;\r\n\r\nexport class RolePermissionConfigTable extends MsMenuTable<MsRoleMenuNode> {\r\n roleRouteTable: MsRoleRouteTable;\r\n roleRouteConditionGroup: Group;\r\n\r\n rolePermissionPointTable: MsRolePermissionPointTable;\r\n rolePermissionPointConditionGroup: Group;\r\n\r\n permissionPointDefineTable: MsPermissionPointDefineTable<MsRolePermissionPointDefine>;\r\n routeDefineTable: MsRouteTable;\r\n\r\n initd: boolean = false;\r\n initing: boolean = false;\r\n\r\n rootRoleMenuNodes: MsRoleMenuNode[] = [];\r\n currentRole: MsRole | null = null;\r\n currentRoleId: MsRole[\"id\"] = \"\";\r\n currentRoleDesc: MsRole[\"desc\"] = \"\";\r\n\r\n constructor(options: Omit<DataTableOptions, \"name\"> = {}) {\r\n super({ ...options });\r\n\r\n this.roleRouteTable = new MsRoleRouteTable();\r\n\r\n this.rolePermissionPointTable = new MsRolePermissionPointTable();\r\n\r\n this.roleRouteConditionGroup = new Group();\r\n this.rolePermissionPointConditionGroup = new Group();\r\n\r\n this.roleRouteTable.useCondition((defaultGroup) => {\r\n defaultGroup.addGroup(this.roleRouteConditionGroup);\r\n });\r\n\r\n this.rolePermissionPointTable.useCondition((defaultGroup) => {\r\n defaultGroup.addGroup(this.rolePermissionPointConditionGroup);\r\n });\r\n\r\n const permissionPointDefineTable =\r\n new (class extends MsPermissionPointDefineTable<MsRolePermissionPointDefine> {\r\n formatItem(item: MsPermissionPointDefine): MsRolePermissionPointDefine {\r\n return {\r\n ...super.formatItem(item),\r\n originalSelected: false,\r\n selected: false,\r\n };\r\n }\r\n })({\r\n interfaceURL: { list: \"/ms/dv/ms-permission-point-def/allList\" },\r\n });\r\n this.permissionPointDefineTable = permissionPointDefineTable;\r\n\r\n const routeDefineTable = new MsRouteTable({\r\n interfaceURL: { list: \"/ms/dv/ms-route/allList\" },\r\n });\r\n this.routeDefineTable = routeDefineTable;\r\n }\r\n\r\n protected async initialize() {\r\n await super.initialize();\r\n\r\n [\r\n this.roleRouteTable.getLoadingManager(),\r\n this.rolePermissionPointTable.getLoadingManager(),\r\n this.permissionPointDefineTable.getLoadingManager(),\r\n this.routeDefineTable.getLoadingManager(),\r\n ].forEach((loadingManager) => {\r\n this.getLoadingManager().addLoadingManager(loadingManager);\r\n });\r\n\r\n await this.roleRouteTable.init();\r\n await this.rolePermissionPointTable.init();\r\n\r\n await this.permissionPointDefineTable.init();\r\n await this.routeDefineTable.init();\r\n\r\n this.dataFilter.afterReadyEvent.on(() => {\r\n this.roleRouteTable.dataFilter.setReady();\r\n this.rolePermissionPointTable.dataFilter.setReady();\r\n this.permissionPointDefineTable.dataFilter.setReady();\r\n this.routeDefineTable.dataFilter.setReady();\r\n });\r\n\r\n this.dataFilter.setReady();\r\n }\r\n\r\n formatItem(item: MsMenuResult): MsRoleMenuNode {\r\n const permissionPointDefines = this.permissionPointDefineTable.getList();\r\n\r\n const routeDefines = this.routeDefineTable.getList();\r\n\r\n return {\r\n ...super.formatItem(item),\r\n routes: routeDefines.filter(\r\n (routeDefine) => routeDefine.menuId === item.id\r\n ) as MsRoleMenuNode[\"routes\"],\r\n permissionPoints: permissionPointDefines.filter(\r\n (permissionPointDefine) => permissionPointDefine.menuId === item.id\r\n ),\r\n originalSelected: false,\r\n selected: false,\r\n indeterminate: false,\r\n children: [],\r\n };\r\n }\r\n\r\n setList(list: MsRoleMenuNode[]): void {\r\n super.setList(list);\r\n\r\n const rootRoleMenuNodes = [];\r\n\r\n for (const roleMenuNode of list) {\r\n if (!roleMenuNode.pid) {\r\n rootRoleMenuNodes.push(roleMenuNode);\r\n }\r\n\r\n for (const item of list) {\r\n if (item.pid === roleMenuNode.id) {\r\n roleMenuNode.children.push(item);\r\n }\r\n }\r\n }\r\n\r\n this.rootRoleMenuNodes = this.calculateNotEmptyNode(rootRoleMenuNodes);\r\n }\r\n\r\n calculateNotEmptyNode(list: MsRoleMenuNode[]) {\r\n const result = list.filter(\r\n (item) => item.routes.length || item.children.length\r\n );\r\n\r\n let nodes = [...result];\r\n\r\n for (let i = 0; i < nodes.length; i++) {\r\n const node = nodes[i];\r\n\r\n node.children = node.children.filter(\r\n (item) => item.routes.length || item.children.length\r\n );\r\n\r\n nodes = nodes.concat(node.children);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n getRootRoleMenuNodes() {\r\n return this.rootRoleMenuNodes;\r\n }\r\n\r\n async load(params?: Record<string, any>) {\r\n await Promise.all([\r\n this.permissionPointDefineTable.load(),\r\n this.routeDefineTable.load(),\r\n ]);\r\n\r\n const loadResult = await super.load(params);\r\n\r\n if (loadResult.data.code === 200) {\r\n this.restoreDefaultSelect();\r\n }\r\n\r\n return loadResult;\r\n }\r\n\r\n protected loadRequest(\r\n params: Record<string, any>\r\n ): Promise<ResponseConfig<R<MsMenuResult[]> & { totalRecCount: string }>> {\r\n return this.loadAllRequest(params);\r\n }\r\n\r\n async selectRolePermission(role: MsRole | null) {\r\n this.currentRole = role;\r\n this.currentRoleId = role?.id || \"\";\r\n this.currentRoleDesc = role?.desc || \"\";\r\n\r\n this.roleRouteConditionGroup.clear();\r\n this.rolePermissionPointConditionGroup.clear();\r\n\r\n this.roleRouteConditionGroup.addCondition(\r\n \"roleId\",\r\n \"=\",\r\n this.currentRoleId\r\n );\r\n this.rolePermissionPointConditionGroup.addCondition(\r\n \"roleId\",\r\n \"=\",\r\n this.currentRoleId\r\n );\r\n\r\n const [roleRouteTableResult, rolePermissionPointTableResult] =\r\n await Promise.all([\r\n this.roleRouteTable.load(),\r\n this.rolePermissionPointTable.load(),\r\n ]);\r\n\r\n if (roleRouteTableResult.data.code !== 200) {\r\n return;\r\n }\r\n\r\n if (rolePermissionPointTableResult.data.code !== 200) {\r\n return;\r\n }\r\n\r\n this.restoreDefaultSelect();\r\n }\r\n\r\n clearSelected() {\r\n for (const roleMenu of this.getList()) {\r\n roleMenu.indeterminate = roleMenu.selected = false;\r\n }\r\n\r\n for (const rolePermissionPoint of this.permissionPointDefineTable.getList()) {\r\n rolePermissionPoint.selected = false;\r\n }\r\n }\r\n\r\n protected calcSelect() {\r\n postTraverse<MsRoleMenuNode>(this.getRootRoleMenuNodes(), (roleMenu) => {\r\n // 如果自叶级菜单\r\n if (roleMenu.children.length === 0) {\r\n // 选中的权限点\r\n const selectedPermissionPoints = roleMenu.permissionPoints.filter(\r\n (permissionPointDefine) => permissionPointDefine.selected\r\n );\r\n\r\n // 如果有权限点选择就赋予路由权限\r\n roleMenu.selected =\r\n roleMenu.permissionPoints.length === 0\r\n ? roleMenu.selected\r\n : !!selectedPermissionPoints.length || roleMenu.selected;\r\n // 如果不是所有权限点都激活就标识是部分选择\r\n roleMenu.indeterminate =\r\n roleMenu.permissionPoints.length === 0 ||\r\n selectedPermissionPoints.length === 0\r\n ? false\r\n : selectedPermissionPoints.length <\r\n roleMenu.permissionPoints.length;\r\n\r\n return;\r\n }\r\n\r\n // 选中的子菜单\r\n const selectedChildren = roleMenu.children.filter(\r\n (item) => item.selected\r\n );\r\n // 如果有子菜单选中就路由权限\r\n roleMenu.selected = !!selectedChildren.length;\r\n // 如果不是所有子菜单都激活就标识是部分选择\r\n roleMenu.indeterminate =\r\n selectedChildren.length === 0\r\n ? false\r\n : selectedChildren.length < roleMenu.children.length;\r\n });\r\n }\r\n\r\n restoreDefaultSelect() {\r\n this.clearSelected();\r\n\r\n const permissionPointDefineList = this.permissionPointDefineTable.getList();\r\n const rolePermissionList = this.rolePermissionPointTable.getList();\r\n\r\n for (const permissionPointDefine of permissionPointDefineList) {\r\n permissionPointDefine.originalSelected = permissionPointDefine.selected =\r\n false;\r\n }\r\n\r\n if (permissionPointDefineList.length) {\r\n for (const rolePermission of rolePermissionList) {\r\n const permissionPointDefine = permissionPointDefineList.find(\r\n (permissionPointDefine) =>\r\n permissionPointDefine.id === rolePermission.permissionPointDefId\r\n );\r\n\r\n if (permissionPointDefine) {\r\n permissionPointDefine.originalSelected =\r\n permissionPointDefine.selected = true;\r\n }\r\n }\r\n }\r\n\r\n const menuList = this.getList();\r\n const roleRouteList = this.roleRouteTable.getList();\r\n\r\n for (const menu of menuList) {\r\n menu.originalSelected = menu.selected = false;\r\n }\r\n\r\n if (menuList.length) {\r\n for (const roleRoute of roleRouteList) {\r\n const menu = menuList.find((menu) =>\r\n menu.routes.find(\r\n (routeDefine) => routeDefine.id === roleRoute.routeId\r\n )\r\n );\r\n\r\n if (menu) {\r\n menu.originalSelected = menu.selected = true;\r\n }\r\n }\r\n }\r\n\r\n this.calcSelect();\r\n }\r\n\r\n toggleRoleMenu(\r\n roleMenu: MsRoleMenuNode,\r\n selected: boolean = !roleMenu.selected\r\n ) {\r\n postTraverse<MsRoleMenuNode>([roleMenu], (roleMenu) => {\r\n // 如果自叶级菜单\r\n if (roleMenu.children.length === 0) {\r\n for (const permissionPointDefine of roleMenu.permissionPoints) {\r\n permissionPointDefine.selected = selected;\r\n }\r\n\r\n roleMenu.selected = selected;\r\n return;\r\n }\r\n\r\n roleMenu.selected = selected;\r\n });\r\n\r\n this.calcSelect();\r\n }\r\n\r\n toggleRolePermissionPoint(\r\n permissionPointDefine: MsRolePermissionPointDefine,\r\n selected: boolean = !permissionPointDefine.selected\r\n ) {\r\n permissionPointDefine.selected = selected;\r\n\r\n this.calcSelect();\r\n }\r\n\r\n async submitPermission() {\r\n const permissionPointDefines = this.permissionPointDefineTable.getList();\r\n const removePermissionPointDefines = permissionPointDefines.filter(\r\n (permissionPointDefine) =>\r\n permissionPointDefine.originalSelected &&\r\n !permissionPointDefine.selected\r\n );\r\n\r\n const addPermissionPointDefine = permissionPointDefines.filter(\r\n (permissionPointDefine) =>\r\n !permissionPointDefine.originalSelected &&\r\n permissionPointDefine.selected\r\n );\r\n\r\n const menus = this.getList();\r\n const removeRoutes = menus\r\n .filter((menu) => menu.originalSelected && !menu.selected)\r\n .flatMap((menu) => menu.routes);\r\n const addRoutes = menus\r\n .filter((menu) => !menu.originalSelected && menu.selected)\r\n .flatMap((menu) => menu.routes);\r\n\r\n if (removePermissionPointDefines.length) {\r\n const rolePermissionPoints = this.rolePermissionPointTable.getList();\r\n const deleteRolePermissionPointResult =\r\n await this.rolePermissionPointTable.batchDelete(\r\n removePermissionPointDefines\r\n .map(\r\n (permissionPointDefine) =>\r\n rolePermissionPoints.find(\r\n (rolePermissionPoint) =>\r\n rolePermissionPoint.permissionPointDefId ===\r\n permissionPointDefine.id\r\n )!\r\n )\r\n .filter(Boolean)\r\n );\r\n\r\n if (deleteRolePermissionPointResult.data.code !== 200) {\r\n return deleteRolePermissionPointResult;\r\n }\r\n }\r\n\r\n if (removeRoutes.length) {\r\n const roleRoutes = this.roleRouteTable.getList();\r\n const deleteRoleRouteResult = await this.roleRouteTable.batchDelete(\r\n removeRoutes\r\n .map(\r\n (route) =>\r\n roleRoutes.find((roleRoute) => roleRoute.routeId === route.id)!\r\n )\r\n .filter(Boolean)\r\n );\r\n\r\n if (deleteRoleRouteResult.data.code !== 200) {\r\n return deleteRoleRouteResult;\r\n }\r\n }\r\n\r\n if (addPermissionPointDefine.length) {\r\n const addRolePermissionPointResult =\r\n await this.rolePermissionPointTable.batchAdd(\r\n addPermissionPointDefine.map((item) => ({\r\n id: \"\",\r\n roleId: this.currentRoleId,\r\n permissionPointDefId: item.id,\r\n }))\r\n );\r\n\r\n if (addRolePermissionPointResult.data.code !== 200) {\r\n return addRolePermissionPointResult;\r\n }\r\n }\r\n\r\n if (addRoutes.length) {\r\n const addRoleRouteResult = await this.roleRouteTable.batchAdd(\r\n addRoutes.map((item) => ({\r\n id: \"\",\r\n roleId: this.currentRoleId,\r\n routeId: item.id,\r\n }))\r\n );\r\n\r\n if (addRoleRouteResult.data.code !== 200) {\r\n return addRoleRouteResult;\r\n }\r\n }\r\n\r\n await this.selectRolePermission(this.currentRole);\r\n }\r\n\r\n /**\r\n * 是否发生变更\r\n */\r\n hasChange() {\r\n const permissionPointDefines = this.permissionPointDefineTable.getList();\r\n const removePermissionPointDefines = permissionPointDefines.filter(\r\n (permissionPointDefine) =>\r\n permissionPointDefine.originalSelected &&\r\n !permissionPointDefine.selected\r\n );\r\n\r\n const addPermissionPointDefine = permissionPointDefines.filter(\r\n (permissionPointDefine) =>\r\n !permissionPointDefine.originalSelected &&\r\n permissionPointDefine.selected\r\n );\r\n\r\n const menus = this.getList();\r\n const removeRoutes = menus\r\n .filter((menu) => menu.originalSelected && !menu.selected)\r\n .flatMap((menu) => menu.routes);\r\n const addRoutes = menus\r\n .filter((menu) => !menu.originalSelected && menu.selected)\r\n .flatMap((menu) => menu.routes);\r\n return !!(\r\n removePermissionPointDefines.length ||\r\n removeRoutes.length ||\r\n addPermissionPointDefine.length ||\r\n addRoutes.length\r\n );\r\n }\r\n}\r\n","import {\r\n DataForm,\r\n DataFormOptions,\r\n DataFormType,\r\n FormColumn,\r\n} from \"@maketribe/dm\";\r\nimport { MsRoleTable } from \"../ms-role\";\r\nimport { DATA_MODEL_NAME, EMAIL_PATTERN } from \"../../../../constants\";\r\nimport { WebFileUploadContext } from \"../../../../components/basic/upload-file/context/WebFileUploadContext\";\r\nimport { MODULE_NAME } from \"../../constants\";\r\n\r\nexport type MsMemberResult = {\r\n id: string;\r\n name: string;\r\n wechatNo: string;\r\n nickName: string;\r\n email: string;\r\n normalizedEmail: string;\r\n emailConfirmed: boolean;\r\n phoneNumber: string;\r\n phoneNumberConfirmed: string;\r\n userName: string;\r\n normalizedUserName: string;\r\n avatar: string;\r\n roles: any[];\r\n passwordHash: string;\r\n // depts: any[];\r\n valid: number;\r\n lockoutEnabled?: number;\r\n accessFailedCount?: number;\r\n lockoutEnd?: string;\r\n memo?: string;\r\n twoFactorEnabled: boolean;\r\n concurrencyStamp: string;\r\n securityStamp: string;\r\n isLock: number;\r\n};\r\n\r\nexport type MsMember = {\r\n id: string;\r\n name: string;\r\n wechatNo: string;\r\n nickName: string;\r\n email: string;\r\n normalizedEmail: string;\r\n emailConfirmed: boolean;\r\n phoneNumber: string;\r\n phoneNumberConfirmed: string;\r\n userName: string;\r\n normalizedUserName: string;\r\n avatar: string;\r\n roles: any[];\r\n passwordHash: string;\r\n // depts: any[];\r\n valid: number;\r\n lockoutEnabled?: number;\r\n accessFailedCount?: number;\r\n lockoutEnd?: string;\r\n memo?: string;\r\n twoFactorEnabled: boolean;\r\n concurrencyStamp: string;\r\n securityStamp: string;\r\n isLock: number;\r\n};\r\n\r\nexport class MsMemberForm<\r\n T extends MsMemberResult = MsMemberResult,\r\n F extends MsMember = MsMember\r\n> extends DataForm<T, F> {\r\n static [DATA_MODEL_NAME]: string = \"ms-member\";\r\n\r\n constructor(options: DataFormOptions = {}) {\r\n super({\r\n name: MsMemberForm[DATA_MODEL_NAME],\r\n moduleName: MODULE_NAME,\r\n ...options,\r\n });\r\n }\r\n\r\n protected async initialize() {\r\n await super.initialize();\r\n\r\n this.setColumns([\r\n new FormColumn({ name: \"id\", label: \"编号\" }),\r\n new FormColumn({ name: \"name\", label: \"姓名\", required: true }),\r\n new FormColumn({ name: \"wechatNo\", label: \"微信号\", defaultValue: null }),\r\n new FormColumn({ name: \"nickName\", label: \"昵称\", required: true }),\r\n new FormColumn({\r\n name: \"email\",\r\n label: \"邮箱\",\r\n required: true,\r\n rules: [{ message: \"邮箱格式有误\", pattern: EMAIL_PATTERN }],\r\n }),\r\n new FormColumn({ name: \"phone\", label: \"手机号\", defaultValue: null }),\r\n new FormColumn({\r\n name: \"account\",\r\n label: \"账号\",\r\n required: true,\r\n disabled: true,\r\n }),\r\n new FormColumn({\r\n name: \"avatar\",\r\n label: \"头像\",\r\n defaultValue: null,\r\n componentInfo: \"MKFormImageUpload\",\r\n componentProps: { uploadContext: new WebFileUploadContext() },\r\n }),\r\n new FormColumn({\r\n name: \"roles\",\r\n label: \"角色\",\r\n defaultValue: null,\r\n required: true,\r\n // componentInfo: \"MKFormDataTableSelect\",\r\n componentInfo: \"MKFormDataSelect\",\r\n componentProps: {\r\n multiple: true,\r\n objectValue: true,\r\n labelFieldName: \"desc\",\r\n // filterable: true,\r\n filterFieldNames: [\"desc\", \"name\"],\r\n dataTable: new MsRoleTable(),\r\n },\r\n }),\r\n new FormColumn({\r\n name: \"memo\",\r\n label: \"备注\",\r\n componentInfo: \"MKFormInput\",\r\n componentProps: { type: \"textarea\", rows: 4 },\r\n }),\r\n ]);\r\n\r\n this.dataFormTypeChangeEvent.on(({ dataFormType }) => {\r\n const accountColumn = this.getColumn(\"account\");\r\n\r\n if (accountColumn) {\r\n accountColumn.disabled = dataFormType !== DataFormType.ADD;\r\n }\r\n });\r\n }\r\n\r\n // formatItem(item: T): F {\r\n // debugger;\r\n // return item;\r\n // return {\r\n // id: item.id,\r\n // name: item.name || \"\",\r\n // wechatNo: item.wechatNo || \"\",\r\n // nickName: item.nickName || \"\",\r\n // email: item.email || \"\",\r\n // phoneNumber: item.phoneNumber || \"\",\r\n // userName: item.userName || \"\",\r\n // avatar: item.avatar,\r\n // roles: item.roles,\r\n // // depts: item.depts?.map((department) => department.deptId),\r\n // valid: item.valid,\r\n // memo: item.memo || \"\",\r\n // } as F;\r\n // }\r\n}\r\n","import { ExtractPropTypes } from \"vue\";\r\nimport { buildProps } from \"@maketribe/utils\";\r\nimport { ColumnOptions, DataForm } from \"@maketribe/dm\";\r\n\r\nexport const dataFormProps = buildProps({\r\n dataForm: {\r\n type: DataForm<any>,\r\n },\r\n name: {\r\n type: String,\r\n },\r\n primaryKey: {\r\n type: String,\r\n },\r\n autoLoad: {\r\n type: Boolean,\r\n default: true,\r\n },\r\n loadInterfaceURL: {\r\n type: String,\r\n },\r\n addInterfaceURL: {\r\n type: String,\r\n },\r\n updateInterfaceURL: {\r\n type: String,\r\n },\r\n columns: {\r\n type: Array<ColumnOptions>,\r\n default: () => [],\r\n },\r\n} as const);\r\n\r\nexport type DataFormProps = ExtractPropTypes<typeof dataFormProps>;\r\n\r\nexport const dataFormEmits = {\r\n changeDataForm: (dataForm: any) => dataForm instanceof DataForm,\r\n cancel: () => true,\r\n error: (e: any) => e instanceof Error,\r\n submitted: (response: any) => !!response,\r\n};\r\n\r\nexport type DataFormEmits = typeof dataFormEmits;\r\n","import { InjectionKey } from \"vue\";\r\nimport { DataForm, FormColumn } from \"@maketribe/dm\";\r\n\r\nexport interface DataFormContext {\r\n dataForm: DataForm;\r\n el: HTMLElement | null;\r\n}\r\n\r\nexport const DATA_FORM_CONTEXT_KEY: InjectionKey<DataFormContext> =\r\n Symbol(\"dataFormContextKey\");\r\n\r\nexport interface DataFormItemContext {\r\n column: FormColumn;\r\n}\r\n\r\nexport const DATA_FORM_ITEM_CONTEXT_KEY: InjectionKey<DataFormItemContext> =\r\n Symbol(\"dataFormItemContextKey\");\r\n","import { ExtractPropTypes } from \"vue\";\r\n\r\nimport { buildProps } from \"@maketribe/utils\";\r\nimport { DataForm } from \"@maketribe/dm\";\r\n\r\nexport const formProps = buildProps({\r\n rules: { type: Object },\r\n labelWidth: { type: String },\r\n dataForm: { type: DataForm<any> },\r\n} as const);\r\n\r\nexport type FormProps = ExtractPropTypes<typeof formProps>;\r\n\r\nexport const formEmits = {};\r\n\r\nexport const FormEmits = typeof formEmits;\r\n","import { reactive } from \"vue\";\r\nimport { DataTable, DataTableOptions } from \"@maketribe/dm\";\r\n\r\nexport const createDataTable = (\r\n dataTableOptions: DataTableOptions\r\n): DataTable => {\r\n return reactive(new DataTable(dataTableOptions)) as DataTable;\r\n};\r\n","import { reactive } from \"vue\";\r\nimport { DataForm, DataFormOptions } from \"@maketribe/dm\";\r\n\r\nexport const createDataForm = (dataFormOptions: DataFormOptions): DataForm => {\r\n return reactive(new DataForm(dataFormOptions)) as DataForm;\r\n};\r\n","import { unref, computed, Ref, MaybeRef, ComputedRef, watch, ref } from \"vue\";\r\nimport {\r\n Column,\r\n Component,\r\n ComponentsCombine,\r\n DataForm,\r\n DataTable,\r\n FilterColumn,\r\n DataFilter,\r\n FormColumn,\r\n IComponents,\r\n TableColumn,\r\n isWhereFilter,\r\n} from \"@maketribe/dm\";\r\nimport { useGlobalConfig } from \"../components/basic/config-provider\";\r\n\r\nexport const useComponent = (\r\n componentName: MaybeRef<string>,\r\n components: MaybeRef<IComponents>\r\n): {\r\n componentInfo: ComputedRef<Component | null>;\r\n component: ComputedRef<any>;\r\n componentProps: ComputedRef<Record<string, any> | null>;\r\n} => {\r\n const componentInfo = computed(() =>\r\n unref(components).resolveComponent(unref(componentName))\r\n );\r\n\r\n const component = computed(() => unref(componentInfo)?.component ?? null);\r\n\r\n const componentProps = computed(() => {\r\n const componentProps = unref(componentInfo)?.defaultProps ?? null;\r\n\r\n return componentProps ? { ...componentProps } : null;\r\n });\r\n\r\n return { componentInfo, component, componentProps };\r\n};\r\n\r\nexport const useComponentWithDefault = (\r\n componentInfo: ReturnType<typeof useComponent>,\r\n defaultComponentInfo: ReturnType<typeof useComponent>\r\n) => {\r\n const _componentInfo = computed(() =>\r\n unref(componentInfo.componentInfo)\r\n ? unref(componentInfo.componentInfo)\r\n : unref(defaultComponentInfo.componentInfo)\r\n );\r\n\r\n const _componentProps = computed(() =>\r\n unref(componentInfo.componentInfo)\r\n ? unref(componentInfo.componentProps)\r\n : unref(defaultComponentInfo.componentProps)\r\n );\r\n\r\n const _component = computed(() =>\r\n unref(componentInfo.componentInfo)\r\n ? unref(componentInfo.component)\r\n : unref(defaultComponentInfo.component)\r\n );\r\n\r\n return {\r\n componentInfo: _componentInfo,\r\n componentProps: _componentProps,\r\n component: _component,\r\n };\r\n};\r\n\r\nexport type RenderInfo = {\r\n componentInfo: string | Component;\r\n componentProps: Record<string, any>;\r\n};\r\n\r\nexport const useRenderInfoComponent = (\r\n column: Ref<RenderInfo | null> | RenderInfo,\r\n components: Ref<IComponents> | IComponents\r\n) => {\r\n const columnComponentInfo = computed(\r\n () => unref(column)?.componentInfo || \"\"\r\n );\r\n\r\n const componentInfo: Ref<Component | null> = ref(null);\r\n watch(\r\n columnComponentInfo,\r\n (columnComponentInfo) => {\r\n if (typeof columnComponentInfo === \"string\") {\r\n const { componentInfo: _componentInfo } = useComponent(\r\n columnComponentInfo,\r\n components\r\n );\r\n\r\n componentInfo.value = unref(_componentInfo);\r\n return;\r\n }\r\n\r\n componentInfo.value = columnComponentInfo;\r\n },\r\n { immediate: true }\r\n );\r\n\r\n const component = computed(() => unref(componentInfo)?.component ?? null);\r\n const componentProps = computed(() => {\r\n const _componentInfo = unref(componentInfo);\r\n\r\n if (!_componentInfo) {\r\n return null;\r\n }\r\n\r\n return {\r\n ..._componentInfo.defaultProps,\r\n ...unref(column)?.componentProps,\r\n };\r\n });\r\n\r\n return {\r\n componentInfo: computed(() => unref(componentInfo)),\r\n component,\r\n componentProps,\r\n };\r\n};\r\n\r\nexport const useTableColumnComponent = (\r\n column: Ref<TableColumn | null> | TableColumn,\r\n dataTable: Ref<DataTable | null> | DataTable\r\n) => {\r\n const defaultDataTableComponents = useGlobalConfig(\"dataTableComponents\");\r\n\r\n const componentCombine = computed(() => {\r\n const _defaultDataTableComponents = unref(defaultDataTableComponents);\r\n\r\n const componentsList = ([unref(dataTable)] as IComponents[]).concat(\r\n _defaultDataTableComponents ? [_defaultDataTableComponents] : []\r\n );\r\n\r\n return new ComponentsCombine({ componentsList });\r\n });\r\n\r\n return useComponentWithDefault(\r\n useRenderInfoComponent(column, componentCombine),\r\n useComponent(\"MKColumnText\", componentCombine)\r\n );\r\n};\r\n\r\nexport const useFormColumnComponent = (\r\n column: Ref<FormColumn | null> | FormColumn,\r\n dataForm: Ref<DataForm | null> | DataForm\r\n) => {\r\n const defaultDataFormComponents = useGlobalConfig(\"dataFormComponents\");\r\n\r\n const componentCombine = computed(() => {\r\n const _defaultDataFormComponents = unref(defaultDataFormComponents);\r\n\r\n const componentsList = ([unref(dataForm)] as IComponents[]).concat(\r\n _defaultDataFormComponents ? [_defaultDataFormComponents] : []\r\n );\r\n\r\n return new ComponentsCombine({ componentsList });\r\n });\r\n\r\n return useComponentWithDefault(\r\n useRenderInfoComponent(column, componentCombine),\r\n useComponent(\"MKFormInput\", componentCombine)\r\n );\r\n};\r\n\r\nexport const useFilterColumnComponent = (\r\n column: Ref<FilterColumn | null> | FilterColumn,\r\n dataFilter: Ref<DataFilter | null> | DataFilter\r\n) => {\r\n const defaultDataFilterComponents = useGlobalConfig(\"dataFilterComponents\");\r\n const defaultWhereFilterComponents = useGlobalConfig(\"whereFilterComponents\");\r\n\r\n const componentCombine = computed(() => {\r\n const systemComponents = isWhereFilter(unref(dataFilter))\r\n ? unref(defaultWhereFilterComponents)\r\n : unref(defaultDataFilterComponents);\r\n\r\n const componentsList = ([unref(dataFilter)] as IComponents[]).concat(\r\n systemComponents ? [systemComponents] : []\r\n );\r\n\r\n return new ComponentsCombine({ componentsList });\r\n });\r\n\r\n return useComponentWithDefault(\r\n useRenderInfoComponent(column, componentCombine),\r\n useComponent(\"MKConditionInput\", componentCombine)\r\n );\r\n};\r\n","import { unref } from \"vue\";\r\nimport { I18n } from \"@maketribe/locale\";\r\nimport { useGlobalConfig } from \"../components/basic/config-provider\";\r\n\r\nexport const useI18n = (): I18n | null => {\r\n return unref(useGlobalConfig(\"i18n\")) ?? null;\r\n};\r\n","import { EventCallback } from \"@maketribe/utils\";\r\nimport { MSAppClient } from \"../core/MSAppClient\";\r\n\r\nexport const onTabBeforeClose = (callback: EventCallback<undefined>) => {\r\n MSAppClient.instance!.userSession!.tabs.getCurrentTab()?.beforeCloseEvent.once(\r\n callback\r\n );\r\n};\r\n","import { EventCallback } from \"@maketribe/utils\";\r\nimport { MSAppClient } from \"../core\";\r\n\r\nexport const onTabRefresh = (callback: EventCallback<undefined>) => {\r\n MSAppClient.instance!.userSession!.tabs.getCurrentTab()?.beforeSwitchEvent.on(\r\n callback\r\n );\r\n};\r\n","import { EventCallback } from \"@maketribe/utils\";\r\nimport { MSAppClient } from \"../core\";\r\n\r\nexport const onTabBeforeSwitch = (callback: EventCallback<undefined>) => {\r\n MSAppClient.instance!.userSession!.tabs.getCurrentTab()?.beforeCloseEvent.on(\r\n callback\r\n );\r\n};\r\n","import { MSAppClient, Tab } from \"../core\";\r\n\r\nexport const useCurrentTab = (): Tab | null =>\r\n MSAppClient.instance!.userSession!.tabs.getCurrentTab() ?? null;\r\n","import { HttpRequest } from \"@maketribe/request\";\r\nimport { MSAppClient } from \"../core\";\r\n\r\nexport const useHttpRequest = (): HttpRequest | null =>\r\n MSAppClient.instance?.httpRequest ?? null;\r\n","import { InjectionKey } from \"vue\";\r\nimport { MSAppClient } from \"../core\";\r\n\r\nexport interface MSAppClientContext {\r\n msAppClient: MSAppClient;\r\n}\r\n\r\nexport const MSAPPCLIENT_CONTEXT_KEY: InjectionKey<MSAppClientContext> = Symbol(\r\n \"msAppClientContextKey\"\r\n);\r\n","import { inject } from \"vue\";\r\nimport { MSAppClient } from \"../core\";\r\n\r\nimport { MSAPPCLIENT_CONTEXT_KEY } from \"../tokens\";\r\n\r\nexport const useMSAppClient = (): MSAppClient | null => {\r\n const msAppClientContext = inject(MSAPPCLIENT_CONTEXT_KEY);\r\n\r\n return msAppClientContext?.msAppClient ?? null;\r\n};\r\n","import { MSAppClient } from \"../core\";\r\n\r\nexport const useUserInfo = () =>\r\n MSAppClient.instance?.userSession?.userInfo ?? null;\r\n","import { DataForm, DataTable, Dialoger, Messager } from \"@maketribe/dm\";\r\nimport { isRef, onBeforeUnmount, Ref, ref, unref, watch } from \"vue\";\r\n\r\nexport type UseSingleViewOptions = {\r\n dataTable: Ref<DataTable | null> | DataTable;\r\n dataForm: Ref<DataForm | null> | DataForm;\r\n};\r\n\r\nexport const useSingleView = (options: UseSingleViewOptions) => {\r\n const isShowDataForm = ref(false);\r\n\r\n const handleDataTable = (dataTable: DataTable | null) => {\r\n if (dataTable) {\r\n dataTable.addRecordEvent.on(async ({ item }) => {\r\n const _dataForm = unref(options.dataForm);\r\n\r\n if (!_dataForm) {\r\n console.warn(`没有对应的 (${dataTable.name}) DataForm 实现`);\r\n return;\r\n }\r\n\r\n isShowDataForm.value = true;\r\n\r\n _dataForm.addRecord(item);\r\n });\r\n\r\n dataTable.editRecordEvent.on(async ({ item }) => {\r\n const _dataForm = unref(options.dataForm);\r\n\r\n if (!_dataForm) {\r\n console.warn(`没有对应的 (${dataTable.name}) DataForm 实现`);\r\n return;\r\n }\r\n\r\n isShowDataForm.value = true;\r\n\r\n try {\r\n const response = await _dataForm.editRecord(item);\r\n\r\n if (response.data.code !== 200) {\r\n Messager.error({ message: response.data.msg });\r\n isShowDataForm.value = false;\r\n return;\r\n }\r\n } catch (e) {\r\n console.error(e);\r\n isShowDataForm.value = false;\r\n }\r\n });\r\n }\r\n };\r\n\r\n const handleDataForm = (dataForm: DataForm | null) => {\r\n if (dataForm) {\r\n dataForm.submittedEvent.on(() => {\r\n isShowDataForm.value = false;\r\n\r\n unref(options.dataTable)?.load();\r\n });\r\n\r\n dataForm.cancelEvent.on(() => {\r\n isShowDataForm.value = false;\r\n });\r\n }\r\n };\r\n\r\n if (isRef(options.dataTable)) {\r\n watch(\r\n options.dataTable,\r\n (dataTable, _, onCleanup) => {\r\n isShowDataForm.value = false;\r\n\r\n handleDataTable(dataTable);\r\n\r\n onCleanup(() => {\r\n dataTable?.clearSelection();\r\n dataTable?.dispose();\r\n });\r\n },\r\n { immediate: true }\r\n );\r\n } else {\r\n const dataTable = options.dataTable;\r\n handleDataTable(dataTable);\r\n\r\n onBeforeUnmount(() => {\r\n dataTable.clearSelection();\r\n dataTable.dispose();\r\n });\r\n }\r\n\r\n if (isRef(options.dataForm)) {\r\n watch(\r\n options.dataForm,\r\n (dataForm, _, onCleanup) => {\r\n isShowDataForm.value = false;\r\n\r\n handleDataForm(dataForm);\r\n\r\n onCleanup(() => {\r\n dataForm?.dispose();\r\n });\r\n },\r\n { immediate: true }\r\n );\r\n } else {\r\n const dataForm = options.dataForm;\r\n handleDataForm(dataForm);\r\n\r\n onBeforeUnmount(() => {\r\n dataForm.dispose();\r\n });\r\n }\r\n\r\n return { isShowDataForm };\r\n};\r\n\r\nexport const useSingleViewWithDialog = (options: UseSingleViewOptions) => {\r\n const { isShowDataForm } = useSingleView(options);\r\n\r\n watch(isShowDataForm, async (isShowDataForm) => {\r\n if (isShowDataForm) {\r\n await Dialoger.dataFormDialog({\r\n dataForm: unref(options.dataForm)!,\r\n customDataFormStatus: true,\r\n });\r\n }\r\n });\r\n};\r\n","import { ExtractPropTypes } from \"vue\";\r\nimport { buildProps } from \"@maketribe/utils\";\r\n\r\nexport const dataFormItemProps = buildProps({\r\n name: { type: String },\r\n label: { type: String },\r\n required: { type: Boolean, default: false },\r\n labelWidth:{ type: String },\r\n} as const);\r\n\r\nexport type DataFormItemProps = ExtractPropTypes<typeof dataFormItemProps>;\r\n","import { ElFormItem, useFormDisabled } from \"element-plus\";\r\nimport {\r\n Ref,\r\n computed,\r\n defineComponent,\r\n inject,\r\n provide,\r\n reactive,\r\n ref,\r\n toRaw,\r\n unref,\r\n useSlots,\r\n watch,\r\n} from \"vue\";\r\nimport { FormColumn } from \"@maketribe/dm\";\r\n\r\nimport { useFormColumnComponent } from \"../../../../composables\";\r\nimport {\r\n DATA_FORM_CONTEXT_KEY,\r\n DATA_FORM_ITEM_CONTEXT_KEY,\r\n DataFormItemContext,\r\n} from \"../token\";\r\nimport { dataFormItemProps } from \"./data-form-item-options\";\r\n\r\nexport default defineComponent({\r\n name: \"MKDataFormItem\",\r\n props: dataFormItemProps,\r\n setup(props) {\r\n const slots = useSlots();\r\n\r\n const dataFormContext = inject(DATA_FORM_CONTEXT_KEY);\r\n\r\n const dataForm = computed(() => dataFormContext?.dataForm ?? null);\r\n\r\n let _formColumn: FormColumn | null = null;\r\n\r\n const existFormColumn = ref(\r\n unref(dataForm)!.getColumn(props.name!)\r\n ) as Ref<FormColumn | null>;\r\n\r\n const formColumn = computed(() => {\r\n const existingColumn = unref(existFormColumn);\r\n\r\n if (existingColumn) {\r\n return existingColumn;\r\n }\r\n\r\n if (!_formColumn) {\r\n _formColumn = reactive(\r\n new FormColumn({\r\n required: props.required,\r\n name: props.name!,\r\n label: props.label!,\r\n })\r\n ) as FormColumn;\r\n }\r\n\r\n return _formColumn!;\r\n });\r\n\r\n watch(\r\n formColumn,\r\n (formColumn, _, onCleanup) => {\r\n const existFormColumn = unref(dataForm)!.getColumn(formColumn.name);\r\n\r\n if (!existFormColumn && _formColumn) {\r\n unref(dataForm)!.addColumn(_formColumn);\r\n }\r\n\r\n onCleanup(() => {\r\n if (_formColumn) {\r\n unref(dataForm)!.removeColumn(_formColumn);\r\n }\r\n });\r\n },\r\n { immediate: true }\r\n );\r\n\r\n const { component, componentProps } = useFormColumnComponent(\r\n formColumn,\r\n dataForm\r\n );\r\n\r\n const disabled = useFormDisabled(\r\n computed(() => unref(formColumn).disabled)\r\n );\r\n\r\n const value = computed({\r\n get: () => unref(formColumn)?.getValue(),\r\n set: (v) => {\r\n unref(formColumn).setValue(v);\r\n },\r\n });\r\n\r\n const label = computed(() =>\r\n typeof props.label !== \"string\" ? unref(formColumn).label : props.label\r\n );\r\n\r\n provide(\r\n DATA_FORM_ITEM_CONTEXT_KEY,\r\n reactive({ column: formColumn }) as DataFormItemContext\r\n );\r\n\r\n return () => {\r\n let _formColumn = unref(formColumn);\r\n\r\n let _component = unref(component);\r\n\r\n let children: any =\r\n slots.default?.({\r\n data: unref(dataForm)!.data,\r\n column: _formColumn,\r\n dataForm: unref(dataForm),\r\n }) || null;\r\n\r\n if (!children && _component) {\r\n const FormColumnComponent = toRaw(_component);\r\n\r\n children = (\r\n <FormColumnComponent\r\n {...unref(componentProps)}\r\n column={_formColumn}\r\n modelValue={value.value}\r\n disabled={unref(disabled)}\r\n onUpdate:modelValue={(v: any) => (value.value = v)}\r\n />\r\n );\r\n }\r\n\r\n return (\r\n <ElFormItem\r\n prop={_formColumn.name}\r\n label={unref(label)}\r\n required={_formColumn.required}\r\n labelWidth={props.labelWidth}\r\n >\r\n {children}\r\n </ElFormItem>\r\n );\r\n };\r\n },\r\n});\r\n","import DataFormItem from \"./data-form-item\";\r\n\r\nexport const MKDataFormItem = DataFormItem;\r\nexport default MKDataFormItem;\r\n\r\nexport * from \"./data-form-item-options\";\r\n","import {\r\n Fragment,\r\n computed,\r\n defineComponent,\r\n inject,\r\n nextTick,\r\n onMounted,\r\n ref,\r\n unref,\r\n watch,\r\n} from \"vue\";\r\nimport {\r\n ElDivider,\r\n ElForm,\r\n FormItemRule,\r\n FormRules,\r\n FormContext,\r\n} from \"element-plus\";\r\nimport { formProps } from \"./form-options\";\r\nimport { DataFormType, FormColumn } from \"@maketribe/dm\";\r\nimport MKDataFormItem from \"../../data-form-item\";\r\nimport { DATA_FORM_CONTEXT_KEY } from \"../../token\";\r\n\r\nlet uid = 0;\r\n\r\nexport default defineComponent({\r\n name: \"MKForm\",\r\n props: formProps,\r\n setup(props, { slots }) {\r\n const formUID = uid++;\r\n\r\n const dataFormContext = inject(DATA_FORM_CONTEXT_KEY);\r\n\r\n const formEl = ref<FormContext | null>(null);\r\n\r\n const dataForm = computed(\r\n () => props.dataForm ?? dataFormContext!.dataForm\r\n );\r\n\r\n const data = computed(() => unref(dataForm).data as any);\r\n\r\n const columns = computed(() =>\r\n unref(dataForm)\r\n .getColumns()\r\n .filter((column) => column.visible)\r\n );\r\n\r\n const rules = computed(() => {\r\n const rules: FormRules = {};\r\n\r\n for (const column of unref(columns)) {\r\n if (column.required && !column.rules.find((rule) => rule.required)) {\r\n rules[column.name] = [\r\n {\r\n required: column.required,\r\n message: `请录入${column.label}.`,\r\n },\r\n ];\r\n }\r\n let componentRules: FormItemRule[] = props.rules?.[column.name] || [];\r\n\r\n if (!Array.isArray(componentRules)) {\r\n componentRules = [componentRules];\r\n }\r\n\r\n if (column.rules.length) {\r\n rules[column.name] = [\r\n ...((rules[column.name] as FormItemRule[]) || []),\r\n ...column.rules,\r\n ...componentRules,\r\n ];\r\n }\r\n }\r\n\r\n return rules;\r\n });\r\n\r\n const labelWidth = computed(() => {\r\n return (\r\n props.labelWidth ||\r\n Math.max.apply(\r\n null,\r\n columns.value\r\n .filter((column) => column.visible)\r\n .filter((column) => column.componentInfo !== \"MKFormDetail\")\r\n .map((item: FormColumn) => {\r\n // + 8 像素只是预留 必填 * 号的宽度位置 12 像素是label的padding\r\n return item.label.length * 16 + 8 + 12;\r\n })\r\n )\r\n );\r\n });\r\n\r\n const disabled = computed(() => unref(dataForm).disabled);\r\n\r\n onMounted(() => {\r\n watch(\r\n dataForm,\r\n (dataForm, _, onCleanup) => {\r\n unref(dataForm).formModels.push({\r\n id: formUID,\r\n validate: async () => {\r\n return unref(formEl)?.validateField() ?? false;\r\n },\r\n reset: () => {\r\n unref(formEl)?.resetFields();\r\n },\r\n clearValidate: () => {\r\n unref(formEl)?.clearValidate();\r\n },\r\n });\r\n\r\n const disposable = dataForm.dataFormTypeChangeEvent.on(\r\n async ({ dataFormType }) => {\r\n if (dataFormType !== DataFormType.NONE) {\r\n // 测试下来 需要两次nextTick才能清除验证\r\n await nextTick();\r\n await nextTick();\r\n\r\n dataForm.clearValidate();\r\n }\r\n }\r\n );\r\n\r\n onCleanup(() => {\r\n const index = dataForm.formModels.findIndex(\r\n (formModel) => formModel.id === formUID\r\n );\r\n\r\n if (index === -1) {\r\n return;\r\n }\r\n\r\n dataForm.formModels.splice(index, 1);\r\n\r\n disposable.dispose();\r\n });\r\n },\r\n { immediate: true }\r\n );\r\n });\r\n\r\n return () => {\r\n if (!unref(dataForm).initd) {\r\n return null;\r\n }\r\n\r\n let children: any = slots.default?.();\r\n\r\n const detailColumns = unref(columns).filter(\r\n (column) => column.componentInfo === \"MKFormDetail\"\r\n );\r\n\r\n if (!children) {\r\n children = unref(columns)\r\n .filter(\r\n (column) => !detailColumns.find((item) => item.name === column.name)\r\n )\r\n .map((column) => {\r\n if (!column.name) {\r\n return null;\r\n }\r\n\r\n return (\r\n slots[`col-${column.name}`]?.() || (\r\n <MKDataFormItem\r\n key={column.name}\r\n name={column.name}\r\n v-slots={{ default: slots[`col-${column.name}-content`] }}\r\n />\r\n )\r\n );\r\n });\r\n\r\n children.push(\r\n detailColumns.map((column) => {\r\n if (!column.name) {\r\n return null;\r\n }\r\n\r\n return (\r\n <Fragment>\r\n <ElDivider contentPosition=\"left\">{column.label}</ElDivider>\r\n <MKDataFormItem\r\n label=\"\"\r\n labelWidth=\"0px\"\r\n key={column.name}\r\n name={column.name}\r\n />\r\n </Fragment>\r\n );\r\n })\r\n );\r\n }\r\n\r\n if (!unref(data)) {\r\n return null;\r\n }\r\n\r\n return (\r\n <ElForm\r\n validateOnRuleChange={false}\r\n {...props}\r\n ref={formEl}\r\n model={unref(data)}\r\n rules={unref(rules)}\r\n disabled={unref(disabled)}\r\n labelWidth={unref(labelWidth)}\r\n >\r\n {children}\r\n </ElForm>\r\n );\r\n };\r\n },\r\n});\r\n","import { withInstall } from \"@maketribe/utils\";\r\nimport Form from \"./form\";\r\n\r\nexport const MKForm = withInstall(Form);\r\n\r\nexport default MKForm;\r\n","import { ExtractPropTypes } from \"vue\";\r\nimport { FormItemRule, formProps } from \"element-plus\";\r\n\r\nimport { buildProps } from \"@maketribe/utils\";\r\nimport { DataForm } from \"@maketribe/dm\";\r\n\r\nexport const formViewProps = buildProps({\r\n rules: { type: Object },\r\n labelWidth: { type: String },\r\n dataForm: { type: DataForm<any>, required: true },\r\n} as const);\r\n\r\nexport type FormViewProps = ExtractPropTypes<typeof formViewProps>;\r\n\r\nexport const formViewEmits = {};\r\n\r\nexport const FormViewEmits = typeof formViewEmits;\r\n","import { computed, defineComponent, inject, unref } from \"vue\";\r\nimport { ElButton, ElCard, ElScrollbar } from \"element-plus\";\r\nimport { formViewProps } from \"./form-view-options\";\r\nimport { I18n } from \"@maketribe/locale\";\r\nimport MKForm from \"../form\";\r\nimport { DATA_FORM_CONTEXT_KEY } from \"../../token\";\r\n\r\nexport default defineComponent({\r\n name: \"MKFormView\",\r\n props: formViewProps,\r\n setup(props, { slots }) {\r\n const dataFormContext = inject(DATA_FORM_CONTEXT_KEY);\r\n\r\n const dataForm = computed(\r\n () => props.dataForm ?? dataFormContext!.dataForm\r\n );\r\n\r\n const isChange = computed(() => unref(dataForm).isChanged);\r\n\r\n const handleSave = async () => {\r\n await unref(dataForm)?.simpleSubmit();\r\n };\r\n\r\n const handleCancel = () => {\r\n unref(dataForm).cancel();\r\n };\r\n\r\n return () => {\r\n return (\r\n <ElCard class=\"mk-form-view\" shadow=\"never\">\r\n <div class=\"mk-form-view__main\">\r\n <ElScrollbar>\r\n <MKForm\r\n rules={props.rules}\r\n labelWidth={props.labelWidth}\r\n dataForm={props.dataForm}\r\n v-slots={slots}\r\n />\r\n </ElScrollbar>\r\n </div>\r\n <div class=\"mk-form-view__footer\">\r\n {slots[\"footer-button\"]?.()}\r\n <ElButton\r\n type=\"primary\"\r\n onClick={handleSave}\r\n disabled={!unref(isChange)}\r\n loading={!unref(unref(dataForm).allowSubmit)}\r\n >\r\n {I18n.instance.translate(\"mk.dataForm.saveButton\")}\r\n </ElButton>\r\n <ElButton onClick={handleCancel}>\r\n {I18n.instance.translate(\"mk.dataForm.cancelButton\")}\r\n </ElButton>\r\n </div>\r\n </ElCard>\r\n );\r\n };\r\n },\r\n});\r\n","import { withInstall } from \"@maketribe/utils\";\r\nimport FormView from \"./form-view\";\r\n\r\nexport const MKFormView = withInstall(FormView);\r\n\r\nexport default MKFormView;\r\n","<script setup lang=\"ts\">\r\nimport {dataFormEmits, dataFormProps} from \"./data-form-options\";\r\nimport {DataForm, FormColumn} from \"@maketribe/dm\";\r\nimport {Disposable, Event} from \"@maketribe/utils\";\r\nimport {DATA_FORM_CONTEXT_KEY} from \"./token\";\r\nimport {MKFormView} from \"./views\";\r\n\r\ndefineOptions({name: \"MKDataForm\"})\r\n\r\nconst props = defineProps(dataFormProps);\r\nconst emit = defineEmits(dataFormEmits);\r\n\r\nlet _dataForm: DataForm | null = null;\r\n\r\nconst dataFormEl: Ref<HTMLElement | null> = ref(null);\r\n\r\nconst createDataForm = () => {\r\n const dataForm = new DataForm({\r\n name: props.name!,\r\n primaryKey: props.primaryKey,\r\n interfaceURL: {\r\n load: props.loadInterfaceURL || \"\",\r\n add: props.addInterfaceURL || \"\",\r\n update: props.updateInterfaceURL || props.addInterfaceURL || \"\",\r\n },\r\n });\r\n\r\n const columns = props.columns.map((column) => new FormColumn(column));\r\n\r\n dataForm.setColumns(columns);\r\n\r\n return dataForm;\r\n};\r\n\r\nconst dataForm = computed(() => {\r\n if (props.dataForm instanceof DataForm) {\r\n return props.dataForm;\r\n }\r\n\r\n if (!_dataForm) {\r\n _dataForm = reactive(createDataForm()) as DataForm;\r\n }\r\n\r\n return _dataForm;\r\n});\r\n\r\nconst loading = computed(() => unref(dataForm).loading);\r\n\r\nwatch(\r\n dataForm,\r\n async (dataForm, _, onCleanup) => {\r\n await dataForm.init();\r\n\r\n if (unref(dataForm).autoReset) {\r\n unref(dataForm).reset();\r\n }\r\n\r\n const disposable = new Disposable();\r\n\r\n const events = Object.keys(dataForm)\r\n .filter((key) => dataForm[key as keyof DataForm] instanceof Event)\r\n .map((key) => ({\r\n eventName: key\r\n .replace(/Event$/, \"\")\r\n .replace(/[A-Z]/g, (match) => `-${match.toLocaleLowerCase()}`),\r\n event: dataForm[key as keyof DataForm]! as Event,\r\n }));\r\n\r\n for (const item of events.filter(\r\n (event) => event.eventName in dataFormEmits\r\n )) {\r\n disposable.register(\r\n // @ts-ignore\r\n item.event.on((event: any) => {\r\n // @ts-ignore\r\n emit(item.eventName, event);\r\n })\r\n );\r\n }\r\n\r\n onCleanup(() => {\r\n disposable.dispose();\r\n });\r\n\r\n emit(\"changeDataForm\", dataForm);\r\n },\r\n {immediate: true}\r\n);\r\n\r\nprovide(DATA_FORM_CONTEXT_KEY, reactive({dataForm, el: dataFormEl}));\r\n\r\n</script>\r\n\r\n<template>\r\n <div\r\n class=\"mk-data-form\"\r\n v-loading=\"loading\"\r\n ref=\"dataFormEl\"\r\n >\r\n <slot v-bind=\"props\" :dataForm=\"dataForm\">\r\n <MKFormView v-bind=\"props\" :dataForm=\"dataForm\"/>\r\n </slot>\r\n </div>\r\n</template>\r\n\r\n<style scoped lang=\"scss\">\r\n\r\n.mk-data-form {\r\n :deep(.el-card) {\r\n display: flex;\r\n flex-direction: column;\r\n height: 100%;\r\n\r\n .el-car__body {\r\n height: 0;\r\n flex: 1;\r\n }\r\n }\r\n}\r\n</style>\r\n","import { withInstall } from \"@maketribe/utils\";\r\nimport DataForm from \"./data-form.vue\";\r\nimport MKDataFormItem from \"./data-form-item\";\r\n\r\nexport const MKDataForm = withInstall(DataForm, {\r\n MKDataFormItem,\r\n});\r\nexport default MKDataForm;\r\n\r\nexport * from \"./data-form-options\";\r\nexport * from \"./data-form-item\";\r\n\r\nexport * from \"./views\";\r\n\r\n// export * from \"./components\";\r\n","import { ExtractPropTypes } from \"vue\";\r\nimport { ColumnOptions, DataTable } from \"@maketribe/dm\";\r\nimport { buildProps } from \"@maketribe/utils\";\r\n\r\nexport const dataTableProps = buildProps({\r\n dataTable: { type: DataTable<any>, required: true },\r\n selection: { type: Boolean, default: false },\r\n name: { type: String },\r\n primaryKey: { type: String },\r\n pageSize: { type: Number },\r\n interfaceURL: { type: Object },\r\n listInterfaceURL: { type: String },\r\n deleteInterfaceURL: { type: String },\r\n autoLoad: { type: Boolean, default: true },\r\n columns: { type: Array<ColumnOptions>, default: () => [] },\r\n enableQueryParams: { type: Boolean, default: false },\r\n} as const);\r\n\r\nexport type DataTableProps = ExtractPropTypes<typeof dataTableProps>;\r\n\r\nexport const dataTableEmits = {\r\n changeDataTable: (dataTable: any) => dataTable instanceof DataTable,\r\n};\r\n\r\nexport const DataTableEmits = typeof dataTableEmits;\r\n","import { get } from \"lodash-es\";\r\nimport { ExtractPropTypes, computed } from \"vue\";\r\nimport { TableColumn } from \"@maketribe/dm\";\r\nimport { buildProps } from \"@maketribe/utils\";\r\n\r\nexport type ColumnEventData = { row: any; column: TableColumn; index: number };\r\n\r\nexport const columnProps = buildProps({\r\n row: { type: Object, required: true },\r\n column: { type: TableColumn, required: true },\r\n index: { type: Number, required: true },\r\n} as const);\r\n\r\nexport type ColumnProps = ExtractPropTypes<typeof columnProps>;\r\n\r\nexport const useColumn = (props: {\r\n row: Record<string, any>;\r\n column: TableColumn;\r\n}) => {\r\n const value = computed(() => get(props.row, props.column.name));\r\n\r\n return { value };\r\n};\r\n","import { DataTable } from \"@maketribe/dm\";\r\nimport { aesDecrypt, aesEncrypt, Disposable, Event } from \"@maketribe/utils\";\r\nimport { Ref, unref, watch } from \"vue\";\r\nimport { useRouter } from \"vue-router\";\r\nimport { MSAppClient } from \"../../../../core\";\r\nimport { debounce, isEmpty } from \"lodash-es\";\r\n\r\nexport const useQueryParams = (dataTable: Ref<DataTable>) => {\r\n const router = useRouter();\r\n\r\n watch(\r\n dataTable,\r\n (dataTable, _, onCleanup) => {\r\n const disposable = new Disposable();\r\n\r\n disposable.register(\r\n dataTable.afterInitdEvent.on(() => {\r\n if (!dataTable.isEnableQueryParams) {\r\n return;\r\n }\r\n\r\n const event = disposable.register(\r\n Event.combine([\r\n dataTable.paginationChangeEvent,\r\n dataTable.dataFilter.beforeSearchEvent,\r\n ])\r\n );\r\n\r\n event.on(\r\n debounce(([paginationEvent]) => {\r\n const pagination = paginationEvent?.pagination ?? null;\r\n const params = dataTable.dataFilter.getParams()\r\n\r\n const query: Record<string, any> = {};\r\n\r\n if (pagination) {\r\n Object.assign(query, {\r\n currentPage: pagination.currentPage,\r\n pageSize: pagination.pageSize,\r\n });\r\n }\r\n\r\n const hasParams =\r\n Reflect.ownKeys(params).filter(\r\n (key) => params[key as string] != null\r\n ).length > 0;\r\n\r\n if (hasParams) {\r\n query.params = aesEncrypt(params, MSAppClient.instance!.appID);\r\n }\r\n\r\n router.replace({ query: !isEmpty(query) ? query : {} });\r\n })\r\n );\r\n\r\n const query = unref(router.currentRoute).query;\r\n\r\n try {\r\n const paramsString = query.params as string;\r\n\r\n if (paramsString) {\r\n const params = aesDecrypt(\r\n paramsString,\r\n MSAppClient.instance!.appID\r\n );\r\n\r\n dataTable.dataFilter.setParams(params);\r\n }\r\n } catch (e) {}\r\n\r\n const currentPage = Number.parseInt(query.currentPage as string);\r\n const pageSize = Number.parseInt(query.pageSize as string);\r\n\r\n if (!Number.isNaN(currentPage) && !Number.isNaN(pageSize)) {\r\n dataTable.setPagination({ currentPage, pageSize });\r\n }\r\n })\r\n );\r\n\r\n onCleanup(() => {\r\n disposable.dispose();\r\n });\r\n },\r\n { immediate: true }\r\n );\r\n};\r\n","import { InjectionKey } from \"vue\";\r\nimport { DataTable } from \"@maketribe/dm\";\r\n\r\nexport interface DataTableContext {\r\n dataTable: DataTable;\r\n el: HTMLElement | null\r\n}\r\n\r\nexport const DATA_TABLE_CONTEXT_KEY: InjectionKey<DataTableContext> = Symbol(\r\n \"dataTableContextKey\"\r\n);\r\n","import { ExtractPropTypes } from \"vue\";\r\nimport { buildProps } from \"@maketribe/utils\";\r\nimport { DataTable } from \"@maketribe/dm\";\r\n\r\nexport const dataTablePaginationProps = buildProps({\r\n dataTable: {\r\n type: DataTable<any>,\r\n },\r\n} as const);\r\n\r\nexport type DataTablePaginationProps = ExtractPropTypes<\r\n typeof dataTablePaginationProps\r\n>;\r\n","import { computed, defineComponent, inject, unref } from \"vue\";\r\nimport { dataTablePaginationProps } from \"./data-table-pagination-options\";\r\nimport MKPagination from \"../../basic/pagination\";\r\nimport { DATA_TABLE_CONTEXT_KEY } from \"../data-table/token\";\r\n\r\nexport default defineComponent({\r\n name: \"MKDataTablePagination\",\r\n props: dataTablePaginationProps,\r\n setup(props) {\r\n const dataTableContext = inject(DATA_TABLE_CONTEXT_KEY);\r\n\r\n const dataTable = computed(\r\n () => props.dataTable ?? dataTableContext!.dataTable\r\n );\r\n\r\n return () => {\r\n return (\r\n <MKPagination\r\n currentPage={unref(dataTable).currentPage}\r\n pageSize={unref(dataTable).pageSize}\r\n pageSizes={unref(dataTable).pageSizes}\r\n total={unref(dataTable).totalRecCount}\r\n onUpdate:currentPage={(v) => unref(dataTable).pageTo(v)}\r\n onUpdate:pageSize={(v) => {\r\n unref(dataTable).setPageSize(v);\r\n unref(dataTable).load();\r\n }}\r\n />\r\n );\r\n };\r\n },\r\n});\r\n","import { withInstall } from \"@maketribe/utils\";\r\nimport DataTablePagination from \"./data-table-pagination\";\r\n\r\nexport const MKDataTablePagination = withInstall(DataTablePagination);\r\nexport default DataTablePagination;\r\n\r\nexport * from \"./data-table-pagination-options\";\r\n","import { ExtractPropTypes } from \"vue\";\r\nimport { buildProps } from \"@maketribe/utils\";\r\nimport { TableColumn } from \"@maketribe/dm\";\r\n\r\nexport const dataTableColumnProps = buildProps({\r\n column: { type: TableColumn, required: true },\r\n row: { type: null },\r\n index: { type: Number, required: true },\r\n} as const);\r\n\r\nexport type DataTableColumnProps = ExtractPropTypes<\r\n typeof dataTableColumnProps\r\n>;\r\n","import { computed, defineComponent, inject, toRaw, unref } from \"vue\";\r\nimport { useTableColumnComponent } from \"../../../../composables\";\r\nimport { DATA_TABLE_CONTEXT_KEY } from \"../token\";\r\nimport { dataTableColumnProps } from \"./data-table-column-options\";\r\n\r\nexport default defineComponent({\r\n name: \"MKDataTableColumn\",\r\n props: dataTableColumnProps,\r\n setup(props) {\r\n const dataTableContext = inject(DATA_TABLE_CONTEXT_KEY);\r\n\r\n const dataTable = computed(() => dataTableContext?.dataTable ?? null);\r\n\r\n const tableColumn = computed(() => props.column);\r\n\r\n const { component, componentProps } = useTableColumnComponent(\r\n tableColumn,\r\n dataTable\r\n );\r\n\r\n return () => {\r\n const TableColumnComponent = toRaw(unref(component));\r\n\r\n if (!TableColumnComponent) {\r\n return null;\r\n }\r\n\r\n return (\r\n <TableColumnComponent\r\n {...unref(componentProps)}\r\n column={unref(tableColumn)}\r\n index={props.index}\r\n row={props.row}\r\n />\r\n );\r\n };\r\n },\r\n});\r\n","import DataTableColumnComponent from \"./data-table-column\";\r\n\r\nexport const MKDataTableColumn = DataTableColumnComponent;\r\n\r\nexport default MKDataTableColumn;\r\n\r\nexport * from \"./data-table-column-options\";\r\n","import { ExtractPropTypes } from \"vue\";\r\nimport { DataTable } from \"@maketribe/dm\";\r\nimport { buildProps } from \"@maketribe/utils\";\r\n\r\nexport const tableProps = buildProps({\r\n dataTable: {\r\n type: DataTable<any>,\r\n },\r\n getList: {\r\n type: Function,\r\n default: (dataTable: DataTable<any>): any[] => dataTable.getList(),\r\n },\r\n lazy: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n treeProps: {\r\n type: Object,\r\n default: () => ({ children: \"children\", hasChildren: \"hasChildren\" }),\r\n },\r\n load: {\r\n type: Function,\r\n default: null,\r\n },\r\n rowKey: {\r\n type: String,\r\n },\r\n defaultExpandAll: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n} as const);\r\n\r\nexport type TableProps = ExtractPropTypes<typeof tableProps>;\r\n","import {\r\n computed,\r\n defineComponent,\r\n onMounted,\r\n ref,\r\n Ref,\r\n unref,\r\n watch,\r\n nextTick,\r\n inject,\r\n} from \"vue\";\r\nimport { Column, ElEmpty, ElTable, ElTableColumn } from \"element-plus\";\r\nimport { isEqual } from \"lodash-es\";\r\nimport MKDataTableColumn from \"../../data-table-column\";\r\nimport { tableProps } from \"./table-options\";\r\nimport { DATA_TABLE_CONTEXT_KEY } from \"../../token\";\r\nimport Sortable from \"sortablejs\";\r\nimport { OrderType } from \"@maketribe/request\";\r\n\r\nexport default defineComponent({\r\n name: \"MKTable\",\r\n props: tableProps,\r\n setup(props, { slots }) {\r\n const treeProps = computed(() => {\r\n return props.treeProps;\r\n });\r\n\r\n const dataTableContext = inject(DATA_TABLE_CONTEXT_KEY);\r\n\r\n const dataTableEl = computed(() => dataTableContext?.el ?? null);\r\n\r\n const tableEl: Ref<InstanceType<typeof ElTable> | null> = ref(null);\r\n\r\n const dataTable = computed(\r\n () => props.dataTable ?? dataTableContext!.dataTable\r\n );\r\n\r\n const rowKey = computed(() => props.rowKey || unref(dataTable).primaryKey);\r\n\r\n const list = computed(() => props.getList(unref(dataTable)));\r\n\r\n const selectionColumn = computed(() => unref(dataTable).selectionColumn);\r\n\r\n type SortChangeEvent = { column: Column; prop: string; order: string };\r\n\r\n const handleSortChange = ({ column, prop, order }: SortChangeEvent) => {\r\n let orderType: OrderType | null = null;\r\n\r\n if (order === \"descending\") {\r\n orderType = OrderType.DESC;\r\n } else if (order === \"ascending\") {\r\n orderType = OrderType.ASC;\r\n }\r\n\r\n unref(dataTable).sorter.setColumnSort(prop, orderType);\r\n };\r\n\r\n let allowChangeSelection = true;\r\n\r\n const handleSelectionChange = (items: any[]) => {\r\n if (allowChangeSelection) {\r\n unref(dataTable).setSelection(\r\n items.map((item) => item[unref(dataTable).primaryKey])\r\n );\r\n }\r\n };\r\n\r\n onMounted(() => {\r\n const _tableEl = unref(tableEl)!;\r\n\r\n watch(list, (list, _, onCleanup) => {\r\n onCleanup(\r\n watch(\r\n computed(() => unref(dataTable).getSelection()),\r\n async (selections) => {\r\n const primaryKey = unref(dataTable).primaryKey;\r\n\r\n const tableSelections = _tableEl\r\n .getSelectionRows()\r\n .map((item: any) => item[primaryKey])\r\n .sort();\r\n\r\n if (isEqual(selections, tableSelections)) {\r\n return;\r\n }\r\n\r\n allowChangeSelection = false;\r\n\r\n _tableEl.clearSelection();\r\n\r\n await nextTick();\r\n\r\n const selectedRows = list.filter((item: any) =>\r\n selections.includes(item[primaryKey])\r\n );\r\n\r\n for (var item of selectedRows) {\r\n _tableEl.toggleRowSelection(item, true);\r\n }\r\n\r\n allowChangeSelection = true;\r\n },\r\n {\r\n immediate: true,\r\n }\r\n )\r\n );\r\n });\r\n\r\n watch(\r\n dataTableEl,\r\n (el, _, onCleanup) => {\r\n if (!el) {\r\n return;\r\n }\r\n var sortableInstance = Sortable.create(el.querySelector(\"tbody\")!, {\r\n handle: \".mk-column-sort__drag\",\r\n animation: 300,\r\n onEnd: (event) => {\r\n const newIndex = event.newIndex!;\r\n const oldIndx = event.oldIndex!;\r\n\r\n if (oldIndx === newIndex) {\r\n return;\r\n }\r\n\r\n const sourceItem = unref(dataTable).getList()[oldIndx];\r\n let dropItem = unref(dataTable).getList()[newIndex];\r\n let sortAction = oldIndx > newIndex ? 1 : 2;\r\n\r\n unref(dataTable).moveTarget(sourceItem, dropItem, sortAction);\r\n\r\n },\r\n });\r\n\r\n onCleanup(() => {\r\n sortableInstance.destroy();\r\n });\r\n },\r\n { immediate: true }\r\n );\r\n });\r\n\r\n return () => {\r\n const columns = unref(dataTable)\r\n .getColumns()\r\n .filter((column) => column.visible && column.name)\r\n .map((column) => {\r\n const columnProps: Record<string, any> = {\r\n prop: column.name,\r\n label: column.label,\r\n width: column.width,\r\n minWidth: column.minWidth,\r\n fixed: column.fixed,\r\n align: column.align || \"center\",\r\n reserveSelection: true,\r\n type: column.type || \"default\",\r\n sortable: column.sortable,\r\n };\r\n\r\n if (!column.visible) {\r\n return null;\r\n }\r\n\r\n return (\r\n slots[`col-${column.name}`]?.() ?? (\r\n <ElTableColumn\r\n {...columnProps}\r\n v-slots={{\r\n default: (scope: {\r\n $index: number;\r\n row: any;\r\n column: any;\r\n }) => {\r\n let children = slots[`col-${column.name}-content`]?.({\r\n $index: scope.$index,\r\n row: scope.row,\r\n column: column,\r\n dataTable: unref(dataTable),\r\n });\r\n\r\n if (children) {\r\n return children;\r\n }\r\n\r\n return (\r\n <MKDataTableColumn\r\n column={column}\r\n row={scope.row}\r\n index={scope.$index}\r\n />\r\n );\r\n },\r\n }}\r\n />\r\n )\r\n );\r\n });\r\n\r\n return (\r\n <ElTable\r\n data={unref(list)}\r\n row-key={unref(rowKey)}\r\n onSort-change={handleSortChange}\r\n ref={(el: any) =>\r\n (tableEl.value = el as InstanceType<typeof ElTable>)\r\n }\r\n show-overflow-tooltip\r\n border\r\n stripe\r\n lazy={props.lazy}\r\n load={props.load as any}\r\n v-slots={{ empty: () => slots.empty?.() || <ElEmpty /> }}\r\n onSelection-change={handleSelectionChange}\r\n defaultExpandAll={props.defaultExpandAll}\r\n >\r\n {unref(selectionColumn).visible ? (\r\n <ElTableColumn\r\n type={unref(selectionColumn).type ?? \"selection\"}\r\n width={unref(selectionColumn).width}\r\n fixed={unref(selectionColumn).fixed}\r\n />\r\n ) : null}\r\n {columns}\r\n </ElTable>\r\n );\r\n };\r\n },\r\n});\r\n","import { withInstall } from \"@maketribe/utils\";\r\nimport Table from \"./table\";\r\n\r\nexport const MKTable = withInstall(Table);\r\n\r\nexport default MKTable;\r\n\r\nexport * from \"./table-options\";\r\n","import { ExtractPropTypes } from \"vue\";\r\nimport { buildProps } from \"@maketribe/utils\";\r\nimport { DataTable } from \"@maketribe/dm\";\r\n\r\nexport const tableViewProps = buildProps({\r\n dataTable: { type: DataTable<any> },\r\n showHeader: { type: Boolean, default: true },\r\n} as const);\r\n\r\nexport type TableViewProps = ExtractPropTypes<typeof tableViewProps>;\r\n\r\nexport const tableViewEmits = {};\r\n\r\nexport const TableViewEmits = typeof tableViewEmits;\r\n","import { computed, defineComponent, toRaw, unref } from \"vue\";\r\nimport { TableHeaderItem } from \"@maketribe/dm\";\r\nimport { buildProps } from \"@maketribe/utils\";\r\nimport { useRenderInfoComponent } from \"../../../../../../composables\";\r\nimport { useGlobalConfig } from \"../../../../../basic/config-provider\";\r\n\r\nconst InnerTableHeaderItem = defineComponent({\r\n name: \"InnerTableHeaderItem\",\r\n props: buildProps({\r\n tableHeaderItem: {\r\n type: TableHeaderItem,\r\n required: true,\r\n },\r\n }),\r\n setup(props) {\r\n return () => {\r\n const tableHeaderItem = computed(() => props.tableHeaderItem!);\r\n\r\n const defaultDataTableHeaderComponents = useGlobalConfig(\r\n \"dataTableHeaderComponents\"\r\n );\r\n\r\n const components = computed(\r\n () => defaultDataTableHeaderComponents.value!\r\n );\r\n\r\n const { component, componentProps } = useRenderInfoComponent(\r\n tableHeaderItem,\r\n components\r\n );\r\n\r\n var TableHeaderItemComponent = toRaw(unref(component))!;\r\n\r\n return <TableHeaderItemComponent {...unref(componentProps)} />;\r\n };\r\n },\r\n});\r\n\r\nexport default defineComponent({\r\n name: \"MKTableHeaderItem\",\r\n props: buildProps({\r\n tableHeaderItem: {\r\n type: TableHeaderItem,\r\n },\r\n }),\r\n setup(props, { slots }) {\r\n return () => {\r\n var children: any = slots.default?.();\r\n\r\n if (!children && props.tableHeaderItem) {\r\n children = (\r\n <InnerTableHeaderItem tableHeaderItem={props.tableHeaderItem} />\r\n );\r\n }\r\n\r\n return <span class=\"mk-table-view__header-item\">{children}</span>;\r\n };\r\n },\r\n});\r\n","import { computed, defineComponent, inject, unref } from \"vue\";\r\nimport TableHeaderItem from \"./header-item\";\r\nimport { DATA_TABLE_CONTEXT_KEY } from \"../../../token\";\r\n\r\nexport default defineComponent({\r\n name: \"MKTableHeader\",\r\n setup(props, { slots }) {\r\n const dataTableContext = inject(DATA_TABLE_CONTEXT_KEY)!;\r\n\r\n const dataTable = computed(() => dataTableContext.dataTable)\r\n\r\n const tableHeader = computed(() => unref(dataTable)?.header!);\r\n\r\n const leftArea = computed(() => {\r\n var items = unref(tableHeader)?.leftArea ?? [];\r\n\r\n return items.filter((item) => item.predicate());\r\n });\r\n const rightArea = computed(() => {\r\n var items = unref(tableHeader)?.rightArea ?? [];\r\n\r\n return items.filter((item) => item.predicate());\r\n });\r\n\r\n return () => {\r\n const leftItems = unref(leftArea).map((item) => (\r\n <TableHeaderItem tableHeaderItem={item} />\r\n ));\r\n\r\n const rightItems = unref(rightArea).map((item) => (\r\n <TableHeaderItem tableHeaderItem={item} />\r\n ));\r\n \r\n return (\r\n <div class=\"mk-table-view__header\">\r\n <div class=\"mk-table-view__header-main\">\r\n {leftItems}\r\n {slots['header-main']?.()}\r\n </div>\r\n <div class=\"mk-table-view__header-tools\">\r\n {rightItems}\r\n {slots[\"header-tools\"]?.()}\r\n </div>\r\n </div>\r\n );\r\n };\r\n },\r\n});\r\n","import { withInstall } from \"@maketribe/utils\";\r\nimport TableHeader from \"./header\";\r\nimport TableHeaderItem from \"./header-item\";\r\n\r\nexport const MKTableHeader = TableHeader;\r\nexport const MKTableHeaderItem = withInstall(TableHeaderItem);\r\n","import { computed, defineComponent, inject, unref, watch } from \"vue\";\r\nimport { ElCard } from \"element-plus\";\r\nimport { DataTree } from \"@maketribe/dm\";\r\n\r\nimport { MKDataTablePagination } from \"../../../data-table-pagination\";\r\nimport { MKTable } from \"../table\";\r\nimport { tableViewProps } from \"./table-view-options\";\r\nimport { MKTableHeader } from \"./header\";\r\nimport { DATA_TABLE_CONTEXT_KEY } from \"../../token\";\r\n\r\nexport default defineComponent({\r\n name: \"MKTableView\",\r\n props: tableViewProps,\r\n setup(props, { slots }) {\r\n const dataTableContext = inject(DATA_TABLE_CONTEXT_KEY);\r\n\r\n const dataTable = computed(\r\n () => props.dataTable ?? dataTableContext!.dataTable\r\n );\r\n\r\n const pageSizes = computed(() => unref(dataTable).pageSizes);\r\n\r\n //树形表格不需要显示分页\r\n const isTree = computed(() => unref(dataTable) instanceof DataTree);\r\n\r\n return () => {\r\n const pagination =\r\n slots.pagination?.({ dataTable: unref(dataTable) }) ||\r\n (unref(pageSizes).length && !unref(isTree) ? (\r\n <MKDataTablePagination dataTable={unref(dataTable)} />\r\n ) : null);\r\n\r\n const _slots: Record<string, any> = {};\r\n\r\n if (props.showHeader) {\r\n _slots.header = () => <MKTableHeader v-slots={slots} />;\r\n }\r\n\r\n return (\r\n <ElCard class=\"mk-table-view\" v-slots={_slots}>\r\n {slots.default?.({ dataTable: unref(dataTable) }) || (\r\n <MKTable dataTable={unref(dataTable)} />\r\n )}\r\n {pagination}\r\n </ElCard>\r\n );\r\n };\r\n },\r\n});\r\n","import { ExtractPropTypes } from \"vue\";\r\nimport { buildProps } from \"@maketribe/utils\";\r\n\r\nexport const classifySearchItemProps = buildProps({\r\n modelValue: { type: null },\r\n label: { type: String },\r\n labelWidth: { type: String },\r\n multiple: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n options: {\r\n type: Array,\r\n },\r\n formatOptions: {\r\n type: Function,\r\n default: (item: any) => {\r\n const value = item.value ?? item.id ?? item.name;\r\n const label = item.label ?? item.desc ?? item.title ?? item.name;\r\n\r\n return { value, label };\r\n },\r\n },\r\n});\r\n\r\nexport type ClassifySearchItemProps = ExtractPropTypes<\r\n typeof classifySearchItemProps\r\n>;\r\n\r\nexport const classifySearchItemEmits = {\r\n \"update:model-value\": (modelValue: any) => true,\r\n};\r\n\r\nexport type ClassifySearchItemEmits = typeof classifySearchItemEmits;\r\n","import { defineComponent, computed, unref, ComputedRef } from \"vue\";\r\nimport { ElTag } from \"element-plus\";\r\nimport {\r\n classifySearchItemProps,\r\n classifySearchItemEmits,\r\n} from \"./classify-search-item-options\";\r\n\r\nexport type DataOptionItem = { value: any; label: string };\r\n\r\nexport default defineComponent({\r\n name: \"MKTableClassifySearchItem\",\r\n props: classifySearchItemProps,\r\n emits: classifySearchItemEmits,\r\n setup(props, { emit }) {\r\n const modelValue = computed({\r\n get: () => {\r\n if (props.multiple) {\r\n return Array.isArray(props.modelValue)\r\n ? props.modelValue\r\n : props.modelValue\r\n ? [props.modelValue]\r\n : [];\r\n }\r\n\r\n return props.modelValue;\r\n },\r\n set: (v: any) => emit(\"update:model-value\", v),\r\n });\r\n\r\n const handleClick = (item: any) => {\r\n let _modelValue = unref(modelValue);\r\n if (props.multiple) {\r\n const index = _modelValue.findIndex((v: any) => v === item.value);\r\n\r\n if (index > -1) {\r\n _modelValue.splice(index, 1);\r\n } else {\r\n _modelValue.push(item.value);\r\n }\r\n\r\n modelValue.value = _modelValue;\r\n\r\n return;\r\n }\r\n\r\n modelValue.value = item?.value ?? null;\r\n };\r\n\r\n const options: ComputedRef<DataOptionItem[]> = computed(() => {\r\n if (Array.isArray(props.options)) {\r\n return props.options.map((item) => props.formatOptions(item));\r\n }\r\n\r\n return [];\r\n });\r\n\r\n const labelStyle: ComputedRef<any> = computed(() => {\r\n if (props.labelWidth) {\r\n return { width: props.labelWidth };\r\n }\r\n\r\n return {};\r\n });\r\n\r\n return () => {\r\n const title = props.label ? (\r\n <div class=\"mk-classify-search-item-title\" style={unref(labelStyle)}>\r\n {props.label}\r\n </div>\r\n ) : null;\r\n\r\n const tags = unref(options).map((item) => {\r\n const isSelect = props.multiple\r\n ? unref(modelValue).includes(item.value)\r\n : item.value === unref(modelValue);\r\n\r\n return (\r\n <ElTag\r\n key={item.value}\r\n effect={isSelect ? \"dark\" : \"light\"}\r\n onClick={() => handleClick(item)}\r\n disable-transitions\r\n >\r\n {item.label}\r\n </ElTag>\r\n );\r\n });\r\n\r\n return (\r\n <div class=\"mk-classify-search-item\">\r\n {title}\r\n <div class=\"mk-classify-search-item__conditions\">{tags}</div>\r\n </div>\r\n );\r\n };\r\n },\r\n});\r\n","import TableClassifySearchItem from \"./classify-search-item\";\r\n\r\nexport const MKTableClassifySearchItem = TableClassifySearchItem;\r\n\r\nexport default TableClassifySearchItem;\r\n","import { Fragment, computed, defineComponent, inject, unref } from \"vue\";\r\nimport MKTableClassifySearchItem from \"./classify-search-item\";\r\nimport { DATA_TABLE_CONTEXT_KEY } from \"../../../token\";\r\n\r\nexport default defineComponent({\r\n name: \"MKTableClassifySearch\",\r\n setup(props, { slots }) {\r\n const dataTable = inject(DATA_TABLE_CONTEXT_KEY)?.dataTable;\r\n\r\n const classifySearch = computed(() => dataTable?.classifySearch ?? null);\r\n\r\n return () => {\r\n let children: any = slots.default?.();\r\n\r\n const _classifySearch = unref(classifySearch);\r\n\r\n if (!children && _classifySearch) {\r\n if (!_classifySearch.getClassifySearchItems().length) {\r\n return;\r\n }\r\n\r\n children = (\r\n <Fragment>\r\n {_classifySearch.getClassifySearchItems().map((item) => (\r\n <MKTableClassifySearchItem\r\n label={item.label}\r\n labelWidth={_classifySearch.labelWidth}\r\n modelValue={_classifySearch.getParam(item.name)}\r\n onUpdate:model-value={(v: any) => {\r\n _classifySearch.setParam(item.name, v);\r\n }}\r\n multiple={item.multiple}\r\n options={item.options}\r\n formatOptions={item.formatOptions || undefined}\r\n />\r\n ))}\r\n </Fragment>\r\n );\r\n }\r\n\r\n return <div class=\"mk-classify-search\">{children}</div>;\r\n };\r\n },\r\n});\r\n","import TableClassifySearch from \"./classify-search\";\r\n\r\nexport const MKTableClassifySearch = TableClassifySearch;\r\n\r\nexport default TableClassifySearch;\r\n\r\nexport * from \"./classify-search-item\";\r\n","import { withInstall } from \"@maketribe/utils\";\r\nimport TableView from \"./table-view\";\r\n\r\nexport const MKTableView = withInstall(TableView);\r\n\r\nexport default MKTableView;\r\n\r\nexport * from \"./classify-search\";\r\nexport * from \"./header\";\r\n","<script setup lang=\"ts\">\r\nimport {dataTableProps} from \"./data-table-options\";\r\nimport {useRouter} from \"vue-router\";\r\nimport {DataTable, TableColumn} from \"@maketribe/dm\";\r\nimport {computed, provide, reactive, ref, Ref, unref, watch} from \"vue\";\r\nimport {useQueryParams} from \"./composables\";\r\nimport {DATA_TABLE_CONTEXT_KEY} from \"./token\";\r\nimport MKTableView from \"./views/table-view\";\r\n\r\ndefineOptions({name: \"MKDataTable\"})\r\n\r\nconst props = defineProps(dataTableProps)\r\n\r\nconst router = useRouter();\r\n\r\nconst slots = useSlots();\r\n\r\nlet _dataTable: DataTable | null = null;\r\n\r\nconst dataTableEl: Ref<HTMLElement | null> = ref(null);\r\n\r\nconst dataTable = computed(() => {\r\n if (props.dataTable instanceof DataTable) {\r\n return props.dataTable;\r\n }\r\n\r\n if (!_dataTable) {\r\n _dataTable = reactive(\r\n new DataTable({\r\n name: props.name!,\r\n primaryKey: props.primaryKey,\r\n pageSize: props.pageSize ?? 20,\r\n interfaceURL: {\r\n list: props.listInterfaceURL || \"\",\r\n delete: props.deleteInterfaceURL || \"\",\r\n },\r\n })\r\n ) as DataTable;\r\n }\r\n\r\n return _dataTable;\r\n});\r\n\r\nconst loading = computed(() => unref(dataTable).loading);\r\n\r\nwatch(\r\n computed(() => props.enableQueryParams),\r\n (enableQueryParams) => {\r\n if (enableQueryParams) {\r\n unref(dataTable).enableQueryParams();\r\n } else {\r\n unref(dataTable).disableQueryParams();\r\n }\r\n },\r\n {immediate: true}\r\n);\r\n\r\nwatch(\r\n dataTable,\r\n async (dataTable) => {\r\n if (props.autoLoad) {\r\n dataTable.load();\r\n }\r\n\r\n let columns = unref(dataTable).getColumns();\r\n\r\n const extractColumnConfig = props.columns.filter(\r\n (config) =>\r\n columns.findIndex((column) => column.name === config.name) === -1\r\n );\r\n\r\n const extractColumn = extractColumnConfig.map(\r\n (config) => new TableColumn({visible: true, ...config})\r\n );\r\n\r\n columns = [...extractColumn, ...columns];\r\n\r\n let sortedColumns: TableColumn[] = [];\r\n for (const columnConfig of props.columns) {\r\n const column = columns.find(\r\n (column) => column.name === columnConfig.name\r\n )!;\r\n\r\n sortedColumns.push(column);\r\n }\r\n\r\n const _columns = columns.filter(\r\n (column) =>\r\n sortedColumns.findIndex((item) => item.name === column.name) === -1\r\n );\r\n\r\n sortedColumns = [...sortedColumns, ..._columns];\r\n\r\n dataTable.setColumns(sortedColumns);\r\n\r\n await dataTable.init();\r\n },\r\n {immediate: true}\r\n);\r\n\r\nuseQueryParams(dataTable);\r\n\r\nwatch(\r\n computed(() => unref(dataTable).dataFilter),\r\n (dataFilter) => {\r\n unref(dataTable).afterInitdEvent.on(() => {\r\n if (dataFilter.getColumns().length === 0) {\r\n dataFilter.setReady();\r\n }\r\n });\r\n },\r\n {immediate: true}\r\n);\r\n\r\nprovide(DATA_TABLE_CONTEXT_KEY, reactive({dataTable, el: dataTableEl}));\r\n\r\n</script>\r\n\r\n<template>\r\n <div\r\n class=\"mk-data-table\"\r\n v-loading=\"loading\"\r\n ref=\"dataTableEl\"\r\n >\r\n <slot :dataTable=\"dataTable\">\r\n <MKTableView :dataTable=\"dataTable\"/>\r\n </slot>\r\n </div>\r\n</template>\r\n\r\n<style scoped lang=\"scss\">\r\n.mk-data-table {\r\n :deep(.el-card) {\r\n display: flex;\r\n flex-direction: column;\r\n height: 100%;\r\n\r\n .el-car__body {\r\n height: 0;\r\n flex: 1;\r\n }\r\n }\r\n}\r\n</style>\r\n","import { ExtractPropTypes } from \"vue\";\r\nimport { DataTree } from \"@maketribe/dm\";\r\nimport { buildProps } from \"@maketribe/utils\";\r\n\r\nexport const tableTreeProps = buildProps({\r\n dataTree: {\r\n type: DataTree<any>,\r\n },\r\n defaultExpandAll: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n} as const);\r\n\r\nexport type TableTreeProps = ExtractPropTypes<typeof tableTreeProps>;\r\n","import { computed, defineComponent, inject, onMounted, unref } from \"vue\";\r\nimport { TreeNode } from \"element-plus\";\r\nimport { tableTreeProps } from \"./table-tree-options\";\r\nimport { DataTree, DataTreeNode } from \"@maketribe/dm\";\r\nimport { MKTable } from \"../table\";\r\nimport { DATA_TABLE_CONTEXT_KEY } from \"../../token\";\r\n\r\nexport default defineComponent({\r\n name: \"MKTableTree\",\r\n props: tableTreeProps,\r\n setup(props, { slots }) {\r\n const dataTableContext = inject(DATA_TABLE_CONTEXT_KEY);\r\n\r\n const dataTree = computed(\r\n () => props.dataTree ?? (dataTableContext!.dataTable as DataTree)\r\n );\r\n\r\n (window as any).dataTree = dataTree;\r\n\r\n const treeProps = computed(() => {\r\n const _dataTree = unref(dataTree);\r\n\r\n return { children: _dataTree.props.children, hasChildren: \"hasChildren\" };\r\n });\r\n\r\n const lazy = computed(() => unref(dataTree).lazy);\r\n\r\n const handleLoad = async (\r\n row: DataTreeNode,\r\n node: TreeNode,\r\n resolve: Function\r\n ) => {\r\n if (!unref(dataTree).lazy) {\r\n resolve(row.children);\r\n return;\r\n }\r\n\r\n await row.load();\r\n\r\n resolve(row.children);\r\n };\r\n\r\n const getList = (dataTree: DataTree<any>) => {\r\n return dataTree.children;\r\n };\r\n\r\n return () => {\r\n return (\r\n <MKTable\r\n dataTable={unref(dataTree)}\r\n getList={getList}\r\n rowKey=\"primaryValue\"\r\n tree-props={unref(treeProps)}\r\n load={handleLoad}\r\n lazy={unref(lazy)}\r\n v-slots={slots}\r\n default-expand-all={props.defaultExpandAll}\r\n />\r\n );\r\n };\r\n },\r\n});\r\n","import { withInstall } from \"@maketribe/utils\";\r\nimport TableTree from \"./table-tree\";\r\n\r\nexport const MKTableTree = withInstall(TableTree);\r\n\r\nexport default MKTableTree;\r\n\r\nexport * from \"./table-tree-options\";\r\n","import { ExtractPropTypes } from \"vue\";\r\nimport { DataTree, DataTreeNode } from \"@maketribe/dm\";\r\nimport { buildProps } from \"@maketribe/utils\";\r\n\r\nexport const treeProps = buildProps({\r\n dataTree: {\r\n type: DataTree<any>,\r\n },\r\n currentNodeKey: { type: String, default: \"\" },\r\n draggable: { type: Boolean, default: false },\r\n filterNodeMethod: { type: Function },\r\n defaultExpandAll: { type: Boolean, default: false },\r\n allowSelectContainer: { type: Boolean, default: true },\r\n} as const);\r\n\r\nexport type TreeProps = ExtractPropTypes<typeof treeProps>;\r\n\r\nexport const treeEmits = {\r\n nodeClick: (node: DataTreeNode<any>) => true,\r\n};\r\n\r\nexport type TreeEmits = typeof treeEmits;\r\n","import {\r\n Fragment,\r\n computed,\r\n defineComponent,\r\n inject,\r\n nextTick,\r\n onMounted,\r\n ref,\r\n unref,\r\n watch,\r\n} from \"vue\";\r\nimport { ElButton, ElTree } from \"element-plus\";\r\nimport type { NodeDropType } from \"element-plus/es/components/tree/src/tree.type\";\r\nimport type { DragEvents } from \"element-plus/es/components/tree/src/model/useDragNode\";\r\nimport type Node from \"element-plus/es/components/tree/src/model/node\";\r\nimport { DataTree, DataTreeNode } from \"@maketribe/dm\";\r\nimport { treeEmits, treeProps } from \"./tree-options\";\r\nimport { DATA_TABLE_CONTEXT_KEY } from \"../../token\";\r\n\r\nexport default defineComponent({\r\n name: \"MKTree\",\r\n props: treeProps,\r\n emits: treeEmits,\r\n setup(props, { emit }) {\r\n const dataTableContext = inject(DATA_TABLE_CONTEXT_KEY);\r\n\r\n const dataTree = computed(\r\n () => props.dataTree ?? (dataTableContext!.dataTable as DataTree)\r\n );\r\n\r\n const treeRef = ref<typeof ElTree | null>(null);\r\n\r\n const rootNodes = computed(() => unref(dataTree).rootNodes);\r\n\r\n const currentNodeKey = computed(\r\n () => (props.currentNodeKey || unref(dataTree).getSelection()[0]) ?? \"\"\r\n );\r\n\r\n onMounted(() => {\r\n watch(\r\n currentNodeKey,\r\n (currentNodeKey) => {\r\n unref(treeRef)?.setCurrentKey(currentNodeKey || null);\r\n },\r\n { immediate: true }\r\n );\r\n });\r\n\r\n unref(dataTree).afterLoadEvent.on(async () => {\r\n await nextTick();\r\n\r\n unref(treeRef)?.setCurrentKey(unref(currentNodeKey) || null);\r\n });\r\n\r\n const handleAdd = (dataTreeNode?: DataTreeNode) => {\r\n unref(dataTree).addRecord(\r\n dataTreeNode ? { pid: dataTreeNode.data.id } : {}\r\n );\r\n };\r\n\r\n const handleEdit = (dataTreeNode: DataTreeNode) => {\r\n unref(dataTree).editRecord(dataTreeNode.data);\r\n };\r\n\r\n const handleDelete = async (dataTreeNode: DataTreeNode) => {\r\n unref(dataTree).deleteRecord(dataTreeNode.data);\r\n };\r\n\r\n const handleLoad = async (node: Node, resolve: Function) => {\r\n if (node.level === 0) {\r\n return;\r\n }\r\n\r\n if (!unref(dataTree).lazy) {\r\n resolve(node.data.children);\r\n return;\r\n }\r\n\r\n const dataTreeNode = node.data as DataTreeNode;\r\n\r\n await dataTreeNode.load();\r\n\r\n resolve(dataTreeNode.children);\r\n };\r\n\r\n const filter = (value: any) => {\r\n unref(treeRef)?.filter(value);\r\n };\r\n\r\n const handleCurrentChange = (\r\n dataTreeNode: DataTreeNode | null,\r\n node: Node | null\r\n ) => {\r\n if (!dataTreeNode) {\r\n return;\r\n }\r\n\r\n const _dataTree = unref(dataTree);\r\n\r\n if (!props.allowSelectContainer && !dataTreeNode.isLeaf) {\r\n const current = _dataTree.getSelection()[0] ?? null;\r\n\r\n unref(treeRef)?.setCurrentKey(current);\r\n\r\n return;\r\n }\r\n\r\n _dataTree.setSelection([dataTreeNode.data[_dataTree.primaryKey]]);\r\n };\r\n\r\n // 没作用\r\n // watch(()=>props.currentNodeKey,()=>{\r\n // treeRef.value?.getCurrentKey(props.currentNodeKey)\r\n // console.log(\"props.currentNodeKey\",props.currentNodeKey)\r\n // },{ immediate:true })\r\n\r\n const handleNodeDrop = (\r\n draggingNode: Node,\r\n dropNode: Node,\r\n dropType: NodeDropType,\r\n event: DragEvents\r\n ) => {\r\n // console.log(draggingNode, dropNode);\r\n unref(dataTree).handleNodeDrop(\r\n draggingNode.data! as any,\r\n dropNode.data! as any,\r\n dropType\r\n );\r\n };\r\n\r\n const handleNodeClick = (node: DataTreeNode<any>) => {\r\n emit(\"nodeClick\", node);\r\n };\r\n\r\n return {\r\n treeRef,\r\n innerDataTree: dataTree,\r\n rootNodes,\r\n handleAdd,\r\n handleEdit,\r\n handleDelete,\r\n handleLoad,\r\n filter,\r\n handleCurrentChange,\r\n handleNodeDrop,\r\n handleNodeClick,\r\n };\r\n },\r\n render() {\r\n const {\r\n defaultExpandAll,\r\n filterNodeMethod,\r\n innerDataTree,\r\n rootNodes,\r\n handleAdd,\r\n handleEdit,\r\n handleDelete,\r\n handleLoad,\r\n handleCurrentChange,\r\n handleNodeDrop,\r\n handleNodeClick,\r\n $slots,\r\n } = this;\r\n\r\n return (\r\n <ElTree\r\n props={{ children: \"children\", isLeaf: \"isLeaf\" }}\r\n defaultExpandAll={defaultExpandAll}\r\n ref=\"treeRef\"\r\n class=\"mk-data-tree\"\r\n highlight-current\r\n data={rootNodes}\r\n lazy\r\n filterNodeMethod={filterNodeMethod as any}\r\n nodeKey=\"primaryValue\"\r\n expand-on-click-node={false}\r\n load={handleLoad}\r\n onCurrent-change={handleCurrentChange}\r\n onNode-drop={handleNodeDrop}\r\n draggable={this.$props.draggable}\r\n onNode-click={handleNodeClick}\r\n v-slots={{\r\n default: (scope: any) => {\r\n let children = $slots.default?.(scope);\r\n\r\n if (children) {\r\n return children;\r\n }\r\n\r\n const { data } = scope;\r\n\r\n const label = data.data[innerDataTree.props.label];\r\n\r\n const main = $slots[\"node-main\"]?.(scope) || label;\r\n\r\n const tools = $slots[\"node-tools\"]?.(scope) || (\r\n <Fragment>\r\n {$slots[\"node-tools-prefix\"]?.(scope)}\r\n <ElButton type=\"primary\" link onClick={() => handleAdd(data)}>\r\n 添加\r\n </ElButton>\r\n <ElButton type=\"primary\" link onClick={() => handleEdit(data)}>\r\n 编辑\r\n </ElButton>\r\n <ElButton type=\"danger\" link onClick={() => handleDelete(data)}>\r\n 删除\r\n </ElButton>\r\n {$slots[\"node-tools-suffix\"]?.(scope)}\r\n </Fragment>\r\n );\r\n\r\n return (\r\n <div class=\"mk-data-tree-node\">\r\n <div class=\"mk-data-tree-node_main\">{main}</div>\r\n\r\n <div\r\n class=\"mk-data-tree-node__tools\"\r\n onClick={(e) => e.stopPropagation()}\r\n >\r\n {tools}\r\n </div>\r\n </div>\r\n );\r\n },\r\n }}\r\n />\r\n );\r\n },\r\n});\r\n","import { withInstall } from \"@maketribe/utils\";\r\nimport Tree from \"./tree\";\r\n\r\nexport const MKTree = withInstall(Tree);\r\n\r\nexport default MKTree;\r\n\r\nexport * from \"./tree-options\";\r\n","import { ExtractPropTypes } from \"vue\";\r\nimport { DataTree } from \"@maketribe/dm\";\r\nimport { buildProps } from \"@maketribe/utils\";\r\n\r\nexport const treeViewProps = buildProps({\r\n dataTree: {\r\n type: DataTree<any>,\r\n },\r\n filterNodeMethod: {\r\n type: Function,\r\n },\r\n defaultExpandAll: { type: Boolean, default: true },\r\n} as const);\r\n\r\nexport type TreeViewProps = ExtractPropTypes<typeof treeViewProps>;\r\n","import { computed, defineComponent, inject, ref, unref, watch } from \"vue\";\r\nimport { ElButton, ElCard, ElInput } from \"element-plus\";\r\nimport { Search } from \"@element-plus/icons-vue\";\r\nimport { MKTree } from \"../tree\";\r\nimport { treeViewProps } from \"./tree-view-options\";\r\nimport { I18n } from \"@maketribe/locale\";\r\nimport { DATA_TABLE_CONTEXT_KEY } from \"../../token\";\r\nimport { DataTree } from \"@maketribe/dm\";\r\n\r\nexport default defineComponent({\r\n name: \"MKTreeView\",\r\n props: treeViewProps,\r\n setup(props, { slots }) {\r\n const dataTableContext = inject(DATA_TABLE_CONTEXT_KEY);\r\n\r\n const dataTree = computed(\r\n () => props.dataTree ?? (dataTableContext!.dataTable as DataTree)\r\n );\r\n\r\n const treeRef = ref<InstanceType<typeof MKTree>>();\r\n\r\n const searchInputValue = ref(\"\");\r\n watch(searchInputValue, (value) => {\r\n unref(treeRef)?.filter(value);\r\n });\r\n\r\n const filterNodeMethod = (value: string, data: any) => {\r\n if (typeof props.filterNodeMethod === \"function\") {\r\n return props.filterNodeMethod(value, data);\r\n }\r\n\r\n if (!searchInputValue.value) return true;\r\n\r\n return data.data[unref(dataTree).props.label].includes(\r\n searchInputValue.value\r\n );\r\n };\r\n\r\n const handleAdd = () => {\r\n unref(dataTree).addRecord();\r\n };\r\n\r\n return () => {\r\n const content = slots.default?.({ dataTree: props.dataTree }) || (\r\n <MKTree\r\n ref={\r\n ((component: InstanceType<typeof MKTree>) =>\r\n (treeRef.value = component)) as any\r\n }\r\n dataTree={unref(dataTree)}\r\n filterNodeMethod={filterNodeMethod}\r\n />\r\n );\r\n\r\n return (\r\n <ElCard\r\n class=\"mk-data-tree-page\"\r\n v-slots={{\r\n header: () => {\r\n return (\r\n <div class=\"header-box\">\r\n <div class=\"header-box-main\">\r\n <ElInput\r\n modelValue={unref(searchInputValue)}\r\n clearable={true}\r\n onUpdate:modelValue={(v: string) =>\r\n (searchInputValue.value = v)\r\n }\r\n prefix-icon={Search}\r\n />\r\n </div>\r\n <div class=\"header-box-tools\">\r\n <ElButton onClick={handleAdd} type=\"primary\">\r\n {I18n.instance.translate(\"mk.dataTreePage.addButton\")}\r\n </ElButton>\r\n </div>\r\n </div>\r\n );\r\n },\r\n }}\r\n >\r\n {content}\r\n </ElCard>\r\n );\r\n };\r\n },\r\n});\r\n","import { withInstall } from \"@maketribe/utils\";\r\nimport TreeView from \"./tree-view\";\r\n\r\nexport const MKTreeView = withInstall(TreeView);\r\n\r\nexport default MKTreeView;\r\n\r\nexport * from \"./tree-view-options\";\r\n","import { withInstall } from \"@maketribe/utils\";\r\nimport DataTable from \"./data-table.vue\";\r\nimport { MKDataTableColumn } from \"./data-table-column\";\r\n\r\nexport const MKDataTable = withInstall(DataTable, {\r\n MKDataTableColumn,\r\n});\r\n\r\nexport default MKDataTable;\r\n\r\nexport * from \"./data-table-column\";\r\nexport * from \"./data-table-options\";\r\n\r\nexport * from \"./views\";\r\n","import { ElImage } from \"element-plus\";\r\nimport { MKSvgIcon } from \"../../../../../components/basic/svg-icon\";\r\nimport { dataTableColumnProps } from \"../../../../../components/data-model\";\r\n\r\nexport default defineComponent({\r\n props: dataTableColumnProps,\r\n setup(props) {\r\n return () => {\r\n return (\r\n <div class=\"member-info\">\r\n <ElImage\r\n src={props.row.avatar}\r\n class=\"member-info-img\"\r\n v-slots={{\r\n error: () => (\r\n <div class=\"w-full h-full flex flex-items-center justify-center\">\r\n <MKSvgIcon name=\"solar:user-bold-duotone\" class=\"member-info-img__icon\" />\r\n </div>\r\n ),\r\n }}\r\n />\r\n <div class=\"member-info-text\">\r\n <span class=\"member-info-text__name\">{props.row.name}</span>\r\n <span class=\"member-info-text__email flex flex-items-center\">\r\n <MKSvgIcon name=\"solar:user-bold-duotone\" class=\"m-r-6px\" />\r\n {props.row.email}\r\n </span>\r\n </div>\r\n </div>\r\n );\r\n };\r\n },\r\n});\r\n","import { defineComponent } from \"vue\";\r\nimport { dataTableColumnProps } from \"../../../../../components\";\r\nimport { ElTag } from \"element-plus\";\r\n\r\nexport default defineComponent({\r\n props: dataTableColumnProps,\r\n setup(props) {\r\n return () => {\r\n const roles = props.row.roles.map((role: any) => (\r\n <ElTag key={role.id} size=\"large\" type=\"info\" class=\"roles-Info-tag\">\r\n {role.desc}\r\n </ElTag>\r\n ));\r\n\r\n return <div class=\"roles-Info\">{roles}</div>;\r\n };\r\n },\r\n});\r\n","import { R } from \"@maketribe/request\";\r\nimport {\r\n TableColumn,\r\n DataTable,\r\n DataTableOptions,\r\n FilterColumn,\r\n TableActionColumn,\r\n ActionButton,\r\n DeleteButton,\r\n EditButton,\r\n Messager,\r\n Dialoger,\r\n FormColumn,\r\n TableHeaderItem,\r\n RefreshButton,\r\n AddButton,\r\n DialogInstance\r\n} from \"@maketribe/dm\";\r\nimport { MsMember, MsMemberForm, MsMemberResult } from \"./MsMemberForm\";\r\nimport { MSAppClient } from \"../../../../core\";\r\nimport { MKSvgIcon } from \"../../../../components/basic/svg-icon\";\r\nimport { ElTooltip } from \"element-plus\";\r\nimport { DATA_MODEL_NAME } from \"../../../../constants\";\r\nimport { MODULE_NAME } from \"../../constants\";\r\nimport MemberNickNameColumn from \"./components/MemberNickNameColumn\";\r\nimport MemberRolesColumn from \"./components/MemberRolesColumn\";\r\nimport { MKCopyContainer } from \"../../../../components/basic\";\r\n\r\nexport type MsMemberTableItem = Omit<MsMember, \"passwordHash\"> & {\r\n type: number;\r\n};\r\n\r\nexport class MsMemberTable extends DataTable<\r\n MsMemberResult,\r\n MsMemberTableItem\r\n> {\r\n static [DATA_MODEL_NAME]: string = \"ms-member\";\r\n\r\n activeMemberForm: MsMemberForm;\r\n\r\n activeDialog: DialogInstance | null = null;\r\n\r\n constructor(options: DataTableOptions = {}) {\r\n super({\r\n name: MsMemberTable[DATA_MODEL_NAME],\r\n moduleName: MODULE_NAME,\r\n ...options,\r\n });\r\n\r\n this.activeMemberForm = this.register(\r\n new (class extends MsMemberForm {\r\n formatSubmitData(data: any) {\r\n data = super.formatSubmitData(data);\r\n\r\n if (data.valid !== 1) {\r\n Reflect.deleteProperty(data, \"roles\");\r\n }\r\n\r\n return data;\r\n }\r\n })()\r\n );\r\n }\r\n\r\n protected async initialize() {\r\n await super.initialize();\r\n\r\n await this.initActiveMemberForm();\r\n\r\n this.header.rightArea = [\r\n new RefreshButton(),\r\n new AddButton(),\r\n new TableHeaderItem({\r\n componentInfo: \"MKBatchOpt\",\r\n predicate: () =>\r\n MSAppClient.instance?.userSession?.userInfo?.isSuper ?? false,\r\n }),\r\n ];\r\n\r\n this.useCondition((group) => {\r\n //只有超级管理员可以查看超级管理员\r\n group.addCondition(\"isSuper\", \"!=\", 1);\r\n });\r\n\r\n this.dataFilter.setColumns([\r\n // new FilterColumn({\r\n // name: \"createdAt\",\r\n // label: \"创建时间\",\r\n // componentInfo: \"MKConditionDate\",\r\n // defaultValue: [\"2024-01-20 00:00:00\", \"2024-01-21 00:00:00\"]\r\n // }),\r\n new FilterColumn({\r\n name: \"name\",\r\n label: \"姓名\",\r\n componentInfo: \"MKConditionInput\",\r\n search: true\r\n }),\r\n new FilterColumn({\r\n name: \"wechatNo\",\r\n label: \"微信号\",\r\n componentInfo: \"MKConditionInput\",\r\n }),\r\n new FilterColumn({\r\n name: \"nickName\",\r\n label: \"昵称\",\r\n componentInfo: \"MKConditionInput\",\r\n }),\r\n new FilterColumn({\r\n name: \"email\",\r\n label: \"邮箱\",\r\n componentInfo: \"MKConditionInput\",\r\n }),\r\n new FilterColumn({\r\n name: \"phone\",\r\n label: \"手机号\",\r\n componentInfo: \"MKConditionInput\",\r\n }),\r\n new FilterColumn({\r\n name: \"account\",\r\n label: \"账号\",\r\n componentInfo: \"MKConditionDate\",\r\n }),\r\n ]);\r\n\r\n this.setColumns([\r\n new TableColumn({\r\n name: \"nickName\",\r\n label: \"账号信息\",\r\n minWidth: \"300px\",\r\n componentInfo: {\r\n name: \"\",\r\n component: MemberNickNameColumn,\r\n },\r\n }),\r\n new TableColumn({\r\n name: \"roles\",\r\n label: \"角色\",\r\n minWidth: \"150px\",\r\n componentInfo: {\r\n name: \"\",\r\n component: MemberRolesColumn,\r\n },\r\n }),\r\n new TableColumn({\r\n name: \"type\",\r\n label: \"状态\",\r\n minWidth: \"80px\",\r\n componentInfo: \"MKColumnTag\",\r\n componentProps: {\r\n options: [\r\n { value: 1, label: \"待激活\" },\r\n { value: 2, label: \"已锁定\", type: \"danger\" },\r\n { value: 3, label: \"正常\", type: \"success\" },\r\n ],\r\n },\r\n }),\r\n new TableColumn({ name: \"memo\", label: \"备注\", minWidth: \"150px\" }),\r\n // new TableColumn({ name: \"email\", label: \"邮箱\", minWidth: \"200px\" }),\r\n // new TableColumn({ name: \"phone\", label: \"手机号\", minWidth: \"120px\" }),\r\n // new TableColumn({ name: \"wechatNo\", label: \"微信号\", minWidth: \"140px\" }),\r\n // new TableColumn({\r\n // name: \"valid\",\r\n // label: \"微信号\",\r\n // minWidth: \"140px\",\r\n // visible: false,\r\n // }),\r\n new TableActionColumn({\r\n width: \"240px\",\r\n buttons: [\r\n new ActionButton({\r\n label: \"激活用户\",\r\n handler: async (row) => {\r\n this.activeDialog = await Dialoger.dataFormDialog({\r\n dataForm: this.activeMemberForm,\r\n recId: row.id,\r\n });\r\n },\r\n predicate: (member: MsMemberTableItem) => member.valid === 0,\r\n }),\r\n new ActionButton({\r\n label: \"重置密码\",\r\n handler: async (row) => {\r\n const isConfirm = await Dialoger.confirm({\r\n title: \"重置密码\",\r\n message: \"是否重置密码\",\r\n type: \"warning\",\r\n cancelButtonText: \"取消\",\r\n confirmButtonText: \"确定\",\r\n });\r\n if (!isConfirm) {\r\n return;\r\n }\r\n this.loadingManager.startLoading();\r\n\r\n try {\r\n const response = await this.dataViewRequest.callDVRequest<\r\n R<string>\r\n >({\r\n action: `reset-password/${row.id}`,\r\n });\r\n\r\n if (response.data.code !== 200) {\r\n Messager.error({\r\n message: response.data.msg || \"重置密码失败\",\r\n });\r\n return;\r\n }\r\n\r\n Dialoger.confirm({\r\n title: \"重置密码成功\",\r\n message: (\r\n <p>\r\n <span>\r\n 你的新密码为:\r\n <span style={{ color: \"#1890ff\", marginRight: \"3px\" }}>\r\n {response.data.data}\r\n </span>\r\n <ElTooltip content={\"点击复制\"} placement=\"top\">\r\n <MKSvgIcon\r\n style={{ color: \"#1890ff\", cursor: \"pointer\" }}\r\n onClick={() => {\r\n const input = document.createElement(\"input\");\r\n document.body.appendChild(input);\r\n input.setAttribute(\"value\", response.data.data);\r\n input.select();\r\n if (document.execCommand(\"copy\")) {\r\n document.execCommand(\"copy\");\r\n }\r\n document.body.removeChild(input);\r\n Messager.success({\r\n message: \"复制成功\",\r\n });\r\n }}\r\n name=\"solar:copy-bold\"\r\n />\r\n </ElTooltip>\r\n </span>\r\n </p>\r\n ),\r\n type: \"warning\",\r\n cancelButtonText: \"取消\",\r\n confirmButtonText: \"确定\",\r\n });\r\n } catch (e) {\r\n console.error(e);\r\n Messager.error({ message: \"网络异常\" });\r\n } finally {\r\n this.loadingManager.completeLoading();\r\n }\r\n },\r\n predicate: (member: MsMemberTableItem) => member.valid === 1,\r\n }),\r\n new ActionButton({\r\n label: \"解锁\",\r\n handler: async (row) => {\r\n const isConfirm = await Dialoger.instance.confirm({\r\n title: \"解锁\",\r\n message: \"是否解锁?\",\r\n type: \"warning\",\r\n cancelButtonText: \"取消\",\r\n confirmButtonText: \"确定\",\r\n });\r\n if (!isConfirm) {\r\n return;\r\n }\r\n this.loadingManager.startLoading();\r\n\r\n const response =\r\n await this.activeMemberForm.dataViewRequest.update({\r\n id: row.id,\r\n isLock: 0,\r\n errorCount: 0,\r\n unlockDatetime: null,\r\n });\r\n\r\n if (response.data.code !== 200) {\r\n Messager.error({ message: response.data.msg });\r\n return;\r\n }\r\n this.loadingManager.completeLoading();\r\n this.load();\r\n },\r\n predicate: (member: MsMemberTableItem) => member.isLock === 1,\r\n }),\r\n new EditButton({\r\n predicate: (member: MsMemberTableItem) => member.valid === 1,\r\n }),\r\n new DeleteButton(),\r\n ],\r\n }),\r\n ]);\r\n }\r\n\r\n protected async initActiveMemberForm() {\r\n const activeMemberForm = this.activeMemberForm;\r\n\r\n await activeMemberForm.init();\r\n\r\n activeMemberForm.setColumns([\r\n activeMemberForm.getColumn(\"id\")!,\r\n new FormColumn({\r\n name: \"valid\",\r\n label: \"是否通过\",\r\n defaultValue: 0,\r\n componentInfo: \"MKFormRadioBox\",\r\n required: true,\r\n componentProps: {\r\n options: [\r\n { label: \"通过\", value: 1 },\r\n { label: \"不通过\", value: 0 },\r\n ],\r\n },\r\n }),\r\n activeMemberForm.getColumn(\"roles\")!,\r\n activeMemberForm.getColumn(\"memo\")!\r\n ]);\r\n\r\n activeMemberForm.beforeSubmitEvent.on(() => {\r\n this.approveMember();\r\n\r\n return false;\r\n });\r\n\r\n const rolesColumn = activeMemberForm.getColumn(\"roles\")!;\r\n\r\n activeMemberForm.getColumn(\"valid\")!.valueChangeEvent.on(({ value }) => {\r\n rolesColumn.disabled = value !== 1;\r\n });\r\n }\r\n\r\n async approveMember() {\r\n try {\r\n if (this.activeMemberForm.loading) {\r\n return;\r\n }\r\n\r\n this.activeMemberForm.getLoadingManager().startLoading();\r\n\r\n const _data = this.activeMemberForm.data!;\r\n\r\n if (!(await this.activeMemberForm.validate())) {\r\n Messager.error({ message: \"请选择是否通过\" });\r\n return;\r\n }\r\n\r\n const response = await this.dataViewRequest.callDVRequest({\r\n action: \"active\",\r\n data: {\r\n id: _data.id,\r\n Memo: _data.memo,\r\n roles: _data.roles ?? [],\r\n approveResult: _data.valid.toString(),\r\n },\r\n });\r\n\r\n if (response?.data.code != 200) {\r\n Messager.error({ message: response?.data.msg || \"请求失败\" });\r\n return;\r\n }\r\n\r\n this.activeDialog?.destroy()\r\n\r\n if (response?.data.data) {\r\n Dialoger.customRender({\r\n title: \"重置密码成功\",\r\n width: \"475px\",\r\n body: () => {\r\n return (\r\n <div class=\"ms-member-active\">\r\n <MKSvgIcon name=\"InfoFilled\" class=\"ms-member-active__icon\"></MKSvgIcon>你的新密码为:<span class=\"ms-member-active__body\"><MKCopyContainer>{response.data.data}</MKCopyContainer></span>\r\n </div>\r\n );\r\n }\r\n })\r\n } else {\r\n Messager.success({ message: \"操作成功\" });\r\n }\r\n\r\n this.load();\r\n } catch (e) {\r\n console.error(e);\r\n Messager.error({ message: \"网络异常\" });\r\n } finally {\r\n this.activeMemberForm.getLoadingManager().completeLoading();\r\n }\r\n }\r\n\r\n formatItem(item: MsMemberResult): MsMemberTableItem {\r\n return {\r\n ...item,\r\n roles:\r\n item.roles?.map((role) => ({\r\n id: role.id,\r\n name: role.name || \"\",\r\n desc: role.desc || \"\",\r\n })) ?? [],\r\n\r\n type: item.valid === 0 ? 1 : 3,\r\n };\r\n\r\n // return {\r\n // id: item.id,\r\n // name: item.name || \"\",\r\n // wechatNo: item.wechatNo || \"\",\r\n // nickName: item.nickName || \"\",\r\n // email: item.email || \"\",\r\n // phone: item.phone || \"\",\r\n // userName: item.userName || \"\",\r\n // avatar: item.avatar,\r\n // roles:\r\n // item.roles?.map((role) => ({\r\n // id: role.id,\r\n // name: role.name || \"\",\r\n // desc: role.desc || \"\",\r\n // })) ?? [],\r\n // // depts: item.depts?.map((department) => ({\r\n // // id: department.id,\r\n // // name: department.name || \"\",\r\n // // // memberID: department.memberID || null,\r\n // // pid: department.pid || null,\r\n // // })),\r\n // valid: item.valid,\r\n // isLock: item.isLock,\r\n // type: item.valid === 0 ? 1 : item.isLock === 1 ? 2 : 3,\r\n // errorCount: item.errorCount,\r\n // unlockDatetime: item.unlockDatetime,\r\n // };\r\n }\r\n}\r\n","import {\r\n AddButton,\r\n DataFormOptions,\r\n DataTable,\r\n DeleteButton,\r\n RefreshButton,\r\n TableActionColumn,\r\n TableColumn,\r\n} from \"@maketribe/dm\";\r\nimport { DATA_MODEL_NAME } from \"../../../../constants\";\r\nimport { MODULE_NAME } from \"../../constants\";\r\nimport { MsMember, MsMemberTable } from \"../ms-member\";\r\nimport { CancelToken, R } from \"@maketribe/request\";\r\nimport { MsRole } from \"../ms-role\";\r\n\r\nexport type MsMemberRole = {\r\n id: string;\r\n memberId: string;\r\n roleId: string;\r\n member: Omit<MsMember, \"roles\">;\r\n};\r\n\r\nexport class MsMemberRoleTable extends DataTable<MsMemberRole> {\r\n static [DATA_MODEL_NAME]: string = \"ms-member-role\";\r\n\r\n memberTable: MsMemberTable;\r\n\r\n currentRole: MsRole | null = null;\r\n\r\n constructor(options: DataFormOptions = {}) {\r\n super({\r\n name: MsMemberRoleTable[DATA_MODEL_NAME],\r\n moduleName: MODULE_NAME,\r\n ...options,\r\n });\r\n\r\n const memberRoleTable = this;\r\n\r\n this.memberTable = this.register(\r\n new (class extends MsMemberTable {\r\n protected async loadRequest(params: Record<string, any>) {\r\n const response = await this.dataViewRequest.callDVRequest<\r\n R<MsMember[]> & { totalRecCount: string }\r\n >({\r\n action: \"non-role-member-page-list\",\r\n name: \"ms-member-role\",\r\n data: {\r\n pn: this.currentPage,\r\n pc: this.pageSize,\r\n roleId: memberRoleTable.currentRole?.id!,\r\n },\r\n cancelToken: new CancelToken((cancel) => {\r\n this.loadCancel = cancel;\r\n }),\r\n });\r\n\r\n this.loadCancel = null;\r\n\r\n return response;\r\n }\r\n })()\r\n );\r\n }\r\n\r\n setCurrentRole(role: MsRole | null) {\r\n const oldRole = this.currentRole;\r\n\r\n this.currentRole = role;\r\n this.memberTable.setList([]);\r\n\r\n if (!role) {\r\n this.setList([]);\r\n return;\r\n }\r\n\r\n this.useCondition((group) => {\r\n group.clear();\r\n\r\n group.addCondition(\"roleId\", \"=\", role.id);\r\n });\r\n\r\n if (oldRole) {\r\n this.load();\r\n }\r\n }\r\n\r\n protected async initialize() {\r\n await super.initialize();\r\n\r\n await this.memberTable.init();\r\n\r\n this.dataFilter.afterReadyEvent.on(() => {\r\n this.memberTable.dataFilter.setReady();\r\n });\r\n\r\n this.memberTable.header.rightArea = [new RefreshButton()];\r\n\r\n const rolesColumn = this.memberTable.getColumn(\"roles\");\r\n if (rolesColumn) {\r\n rolesColumn.visible = false;\r\n }\r\n\r\n this.header.rightArea = [new RefreshButton(), new AddButton()];\r\n\r\n this.setColumns([\r\n new TableColumn({ name: \"member.nickName\", label: \"名称\" }),\r\n new TableActionColumn({\r\n buttons: [new DeleteButton()],\r\n }),\r\n ]);\r\n }\r\n}\r\n","import { DataForm, DataFormOptions, FormColumn, RefreshButton } from \"@maketribe/dm\";\r\nimport { DATA_MODEL_NAME } from \"../../../../constants\";\r\nimport { MODULE_NAME } from \"../../constants\";\r\n\r\nexport class MsMemberRoleForm extends DataForm {\r\n static [DATA_MODEL_NAME]: string = \"ms-member-role\";\r\n\r\n constructor(options: DataFormOptions = {}) {\r\n super({\r\n name: MsMemberRoleForm[DATA_MODEL_NAME],\r\n moduleName: MODULE_NAME,\r\n ...options,\r\n });\r\n }\r\n\r\n protected async initialize() {\r\n await super.initialize();\r\n\r\n // this.setColumns([\r\n // new FormColumn({\r\n // name: \"memberId\",\r\n // label: \"成员\",\r\n // componentInfo: \"MKFormDataTableSelect\",\r\n // componentProps: {\r\n // dataTable: this.memberTable,\r\n // labelFieldName: \"nickName\",\r\n // },\r\n // }),\r\n // ]);\r\n }\r\n\r\n // formatSubmitData(data: any) {\r\n // return {\r\n // ...data,\r\n // roleId: this.currentRole?.id!,\r\n // };\r\n // }\r\n}\r\n","import { DataForm, FormColumn } from \"@maketribe/dm\";\r\nimport { DATA_MODEL_NAME, IP_PATTERN } from \"../../../../constants\";\r\nimport { MODULE_NAME } from \"../../constants\";\r\n\r\nexport type MsIPWhitelist = {\r\n id: string;\r\n ipAddress: string;\r\n};\r\n\r\nexport class MsIPWhitelistForm<T = MsIPWhitelist, F = T> extends DataForm<\r\n T,\r\n F\r\n> {\r\n static [DATA_MODEL_NAME]: string = \"ms-access-ip-whitelist\";\r\n\r\n constructor(options = {}) {\r\n super({\r\n name: MsIPWhitelistForm[DATA_MODEL_NAME],\r\n moduleName: MODULE_NAME,\r\n ...options,\r\n });\r\n }\r\n\r\n async initialize() {\r\n await super.initialize();\r\n\r\n this.setColumns([\r\n new FormColumn({ name: \"id\", label: \"编号\" }),\r\n new FormColumn({\r\n name: \"ipAddress\",\r\n label: \"IP地址\",\r\n required: true,\r\n rules: [{ message: \"请输入正确的IP\", pattern: IP_PATTERN }],\r\n }),\r\n new FormColumn({\r\n name: \"createdAt\",\r\n label: \"创建时间\",\r\n componentInfo: \"MKFormDatePicker\",\r\n componentProps: {\r\n type: \"datetime\",\r\n },\r\n }),\r\n ]);\r\n }\r\n}\r\n","import {\r\n ActionButton,\r\n DataTable,\r\n DeleteButton,\r\n EditButton,\r\n TableActionColumn,\r\n TableColumn,\r\n Messager,\r\n TableHeaderItem,\r\n RefreshButton,\r\n AddButton,\r\n} from \"@maketribe/dm\";\r\nimport { MsIPWhitelist } from \"./MsIPWhitelistForm\";\r\nimport { MSAppClient } from \"../../../../core\";\r\nimport { DATA_MODEL_NAME } from \"../../../../constants\";\r\nimport { MODULE_NAME } from \"../../constants\";\r\n\r\nexport class MsIPWhitelistTable<T = MsIPWhitelist, F = T> extends DataTable<\r\n T,\r\n F\r\n> {\r\n static [DATA_MODEL_NAME]: string = \"ms-access-ip-whitelist\";\r\n\r\n constructor(options = {}) {\r\n super({\r\n name: MsIPWhitelistTable[DATA_MODEL_NAME],\r\n moduleName: MODULE_NAME,\r\n ...options,\r\n });\r\n }\r\n\r\n async initialize() {\r\n await super.initialize();\r\n\r\n this.header.rightArea = [\r\n new RefreshButton(),\r\n new AddButton(),\r\n new TableHeaderItem({\r\n componentInfo: \"MKBatchOpt\",\r\n predicate: () =>\r\n MSAppClient.instance?.userSession?.userInfo?.isSuper ?? false,\r\n }),\r\n ];\r\n\r\n this.setColumns([\r\n new TableColumn({ name: \"ipAddress\", label: \"IP地址\" }),\r\n new TableColumn({ name: \"createdAt\", label: \"创建时间\" }),\r\n new TableActionColumn({\r\n width: \"180px\",\r\n buttons: [\r\n new EditButton(),\r\n new DeleteButton({ label: \"移除\" }),\r\n new ActionButton({\r\n label: \"禁用\",\r\n type: \"danger\",\r\n handler: async (row) => {\r\n this.loadingManager.startLoading();\r\n\r\n const result = await this.dataViewRequest.callDVRequest({\r\n action: `disable/${row.id}`,\r\n });\r\n\r\n this.loadingManager.completeLoading();\r\n if (result.data.code !== 200) {\r\n Messager.error({\r\n message: result.data.msg || \"禁用失败\",\r\n });\r\n return;\r\n }\r\n Messager.success({ message: \"禁用成功\" });\r\n\r\n this.load();\r\n },\r\n predicate: (row) => row.valid === 1,\r\n }),\r\n new ActionButton({\r\n label: \"启用\",\r\n type: \"success\",\r\n handler: async (row) => {\r\n this.loadingManager.startLoading();\r\n\r\n const result = await this.dataViewRequest.callDVRequest({\r\n action: `enable/${row.id}`,\r\n });\r\n\r\n this.loadingManager.completeLoading();\r\n if (result.data.code !== 200) {\r\n Messager.error({\r\n message: result.data.msg || \"启用失败\",\r\n });\r\n return;\r\n }\r\n Messager.success({ message: \"启用成功\" });\r\n\r\n this.load();\r\n },\r\n predicate: (row) => row.valid === 0,\r\n }),\r\n ],\r\n }),\r\n ]);\r\n }\r\n}\r\n","import { DataForm, FormColumn } from \"@maketribe/dm\";\r\nimport { DATA_MODEL_NAME, IP_PATTERN } from \"../../../../constants\";\r\nimport { MODULE_NAME } from \"../../constants\";\r\n\r\nexport type MsDenyIPAccessList = {\r\n id: string;\r\n ipAddress: string;\r\n};\r\n\r\nexport class MsDenyIPAccessListForm<\r\n T = MsDenyIPAccessList,\r\n F = T\r\n> extends DataForm<T, F> {\r\n static [DATA_MODEL_NAME]: string = \"ms-deny-access-ip-list\";\r\n\r\n constructor(options = {}) {\r\n super({\r\n name: MsDenyIPAccessListForm[DATA_MODEL_NAME],\r\n moduleName: MODULE_NAME,\r\n ...options,\r\n });\r\n }\r\n\r\n async initialize() {\r\n await super.initialize();\r\n\r\n this.setColumns([\r\n new FormColumn({ name: \"id\", label: \"编号\" }),\r\n new FormColumn({\r\n name: \"ipAddress\",\r\n label: \"IP地址\",\r\n required: true,\r\n rules: [{ message: \"请输入正确的IP\", pattern: IP_PATTERN }],\r\n }),\r\n ]);\r\n }\r\n}\r\n","import {\r\n ActionButton,\r\n DataTable,\r\n DeleteButton,\r\n EditButton,\r\n TableActionColumn,\r\n TableColumn,\r\n Messager,\r\n TableHeaderItem,\r\n RefreshButton,\r\n AddButton,\r\n} from \"@maketribe/dm\";\r\nimport { MsDenyIPAccessList } from \"./MsDenyIPAccessListForm\";\r\nimport { MSAppClient } from \"../../../../core\";\r\nimport { DATA_MODEL_NAME } from \"../../../../constants\";\r\nimport { MODULE_NAME } from \"../../constants\";\r\n\r\nexport class MsDenyIPAccessListTable<\r\n T = MsDenyIPAccessList,\r\n F = T\r\n> extends DataTable<T, F> {\r\n static [DATA_MODEL_NAME]: string = \"ms-deny-access-ip-list\";\r\n\r\n constructor(options = {}) {\r\n super({\r\n name: MsDenyIPAccessListTable[DATA_MODEL_NAME],\r\n moduleName: MODULE_NAME,\r\n ...options,\r\n });\r\n }\r\n\r\n async initialize() {\r\n await super.initialize();\r\n\r\n this.header.rightArea = [\r\n new RefreshButton(),\r\n new AddButton(),\r\n new TableHeaderItem({\r\n componentInfo: \"MKBatchOpt\",\r\n predicate: () =>\r\n MSAppClient.instance?.userSession?.userInfo?.isSuper ?? false,\r\n }),\r\n ];\r\n\r\n this.setColumns([\r\n new TableColumn({ name: \"ipAddress\", label: \"IP地址\" }),\r\n new TableColumn({ name: \"createdAt\", label: \"创建时间\" }),\r\n new TableActionColumn({\r\n width: \"180px\",\r\n buttons: [\r\n new EditButton(),\r\n new DeleteButton({ label: \"移除\" }),\r\n new ActionButton({\r\n label: \"禁用\",\r\n type: \"danger\",\r\n handler: async (row) => {\r\n this.loadingManager.startLoading();\r\n\r\n const result = await this.dataViewRequest.callDVRequest({\r\n action: `disable/${row.id}`,\r\n });\r\n\r\n this.loadingManager.completeLoading();\r\n if (result.data.code !== 200) {\r\n Messager.error({\r\n message: result.data.msg || \"禁用失败\",\r\n });\r\n return;\r\n }\r\n Messager.success({ message: \"禁用成功\" });\r\n\r\n this.load();\r\n },\r\n predicate: (row) => row.valid === 1,\r\n }),\r\n new ActionButton({\r\n label: \"启用\",\r\n type: \"success\",\r\n handler: async (row) => {\r\n this.loadingManager.startLoading();\r\n\r\n const result = await this.dataViewRequest.callDVRequest({\r\n action: `enable/${row.id}`,\r\n });\r\n\r\n this.loadingManager.completeLoading();\r\n if (result.data.code !== 200) {\r\n Messager.error({\r\n message: result.data.msg || \"启用失败\",\r\n });\r\n return;\r\n }\r\n Messager.success({ message: \"启用成功\" });\r\n\r\n this.load();\r\n },\r\n predicate: (row) => row.valid === 0,\r\n }),\r\n ],\r\n }),\r\n ]);\r\n }\r\n}\r\n","import { DataForm, DataFormOptions, FormColumn } from \"@maketribe/dm\";\r\nimport { DATA_MODEL_NAME, RegionLevel } from \"../../../../constants\";\r\nimport { MODULE_NAME } from \"../../constants\";\r\n\r\nexport type MsRegion = {\r\n id: string;\r\n code: string;\r\n desc: string;\r\n level: number;\r\n postalCode: string;\r\n firstchar: string;\r\n jianpin: string;\r\n pinyin: string;\r\n};\r\n\r\nexport class MsRegionForm extends DataForm<MsRegion> {\r\n static [DATA_MODEL_NAME]: string = \"ms-region\";\r\n\r\n constructor(options: DataFormOptions = {}) {\r\n super({\r\n name: MsRegionForm[DATA_MODEL_NAME],\r\n moduleName: MODULE_NAME,\r\n ...options,\r\n });\r\n }\r\n\r\n protected async initialize(): Promise<void> {\r\n await super.initialize();\r\n\r\n this.setColumns([\r\n new FormColumn({ name: \"id\", label: \"编号\" }),\r\n new FormColumn({ name: \"code\", label: \"地区编号\" }),\r\n new FormColumn({ name: \"desc\", label: \"描述\" }),\r\n new FormColumn({\r\n name: \"level\",\r\n label: \"层级\",\r\n componentInfo: \"MKFormDataSelect\",\r\n componentProps: {\r\n options: [\r\n { value: RegionLevel.Province, label: \"省份\" },\r\n { value: RegionLevel.City, label: \"城市\" },\r\n { value: RegionLevel.District, label: \"地区\" },\r\n { value: RegionLevel.Town, label: \"城镇\" },\r\n ],\r\n },\r\n }),\r\n new FormColumn({ name: \"postalCode\", label: \"邮政编码\" }),\r\n new FormColumn({ name: \"telAreaCode\", label: \"电话区号\" }),\r\n new FormColumn({ name: \"lat\", label: \"纬度\" }),\r\n new FormColumn({ name: \"lng\", label: \"经度\" }),\r\n new FormColumn({ name: \"firstchar\", label: \"首拼\" }),\r\n new FormColumn({ name: \"jianpin\", label: \"简拼\" }),\r\n new FormColumn({ name: \"pinyin\", label: \"拼音\" }),\r\n ]);\r\n }\r\n}\r\n","import {\r\n DataTable,\r\n DataTableOptions,\r\n FilterColumn,\r\n TableActionColumn,\r\n TableColumn,\r\n} from \"@maketribe/dm\";\r\nimport { DATA_MODEL_NAME, RegionLevel } from \"../../../../constants\";\r\nimport { MsRegion } from \"./MsRegionForm\";\r\nimport { MODULE_NAME } from \"../../constants\";\r\n\r\nexport class MsRegionTable extends DataTable<MsRegion> {\r\n static [DATA_MODEL_NAME]: string = \"ms-region\";\r\n\r\n constructor(options: DataTableOptions = {}) {\r\n super({\r\n name: MsRegionTable[DATA_MODEL_NAME],\r\n moduleName: MODULE_NAME,\r\n ...options,\r\n });\r\n }\r\n\r\n protected async initialize(): Promise<void> {\r\n await super.initialize();\r\n\r\n this.dataFilter.setColumns([\r\n new FilterColumn({ name: \"code\", label: \"地区编号\" }),\r\n new FilterColumn({ name: \"desc\", label: \"描述\" }),\r\n new FilterColumn({ name: \"postalCode\", label: \"邮政编码\" }),\r\n new FilterColumn({ name: \"telAreaCode\", label: \"电话区号\" }),\r\n ]);\r\n\r\n this.setColumns([\r\n new TableColumn({ name: \"code\", label: \"地区编号\", width: \"120px\" }),\r\n new TableColumn({ name: \"desc\", label: \"描述\", minWidth: \"200px\" }),\r\n new TableColumn({\r\n name: \"level\",\r\n label: \"层级\",\r\n componentInfo: \"MKColumnObjectMappingText\",\r\n componentProps: {\r\n mapping: {\r\n [RegionLevel.Province]: \"省份\",\r\n [RegionLevel.City]: \"城市\",\r\n [RegionLevel.District]: \"地区\",\r\n [RegionLevel.Town]: \"城镇\",\r\n },\r\n },\r\n width: \"80px\",\r\n }),\r\n new TableColumn({\r\n name: \"postalCode\",\r\n label: \"邮政编码\",\r\n width: \"100px\",\r\n }),\r\n new TableColumn({\r\n name: \"telAreaCode\",\r\n label: \"电话区号\",\r\n width: \"100px\",\r\n }),\r\n new TableColumn({ name: \"firstchar\", label: \"首拼\", width: \"80px\" }),\r\n new TableColumn({ name: \"jianpin\", label: \"简拼\", width: \"150px\" }),\r\n new TableColumn({ name: \"pinyin\", label: \"拼音\", width: \"220px\" }),\r\n new TableActionColumn(),\r\n ]);\r\n }\r\n}\r\n","// import { DATA_MODEL_NAME } from \"./constants\";\r\nimport { DataFormClass, DataModelDefines } from \"./core\";\r\nimport { DATA_MODEL_NAME } from \"./constants\";\r\n\r\nexport const defineDataForm = <T extends DataFormClass>(\r\n DataFormClass: T\r\n): T => {\r\n DataModelDefines.instance.registerDataFormDefine(\r\n (DataFormClass as any)[DATA_MODEL_NAME] as string,\r\n DataFormClass\r\n );\r\n\r\n return DataFormClass;\r\n};\r\n","import { DataForm, DataFormOptions, FormColumn } from \"@maketribe/dm\";\r\nimport { defineDataForm } from \"../../../../define-data-form\";\r\n\r\nexport type Department = {\r\n id: string;\r\n name: string;\r\n pid: string | null;\r\n};\r\n\r\nexport class DepartmentForm extends DataForm<Department> {\r\n constructor(options: DataFormOptions = {}) {\r\n super({ name: \"ms-dept\", ...options });\r\n }\r\n\r\n protected async initialize() {\r\n await super.initialize();\r\n\r\n this.setColumns([\r\n new FormColumn({ name: \"id\", label: \"编号\" }),\r\n new FormColumn({ name: \"name\", label: \"名称\", required: true }),\r\n new FormColumn({ name: \"pid\", label: \"父部门ID\", visible: false }),\r\n ]);\r\n }\r\n\r\n formatSubmitData(data: any) {\r\n return {\r\n ...data,\r\n pid: data.pid || null,\r\n };\r\n }\r\n\r\n formatItem(item: Department): Department {\r\n return {\r\n id: item.id,\r\n name: item.name || \"\",\r\n pid: item.pid || null,\r\n };\r\n }\r\n}\r\n\r\ndefineDataForm(DepartmentForm);\r\n","import { DATA_MODEL_NAME } from \"./constants\";\r\nimport { DataModelDefines, DataTableClass } from \"./core\";\r\n\r\nexport const defineDataTable = <T extends DataTableClass>(\r\n DataTableClass: T\r\n): T => {\r\n DataModelDefines.instance.registerDataTableDefine(\r\n (DataTableClass as any)[DATA_MODEL_NAME] as string,\r\n DataTableClass\r\n );\r\n\r\n return DataTableClass;\r\n};\r\n","import { DataTableOptions, TableColumn, DataTable } from \"@maketribe/dm\";\r\nimport { Department } from \"./DepartmentForm\";\r\nimport { defineDataTable } from \"../../../../define-data-table\";\r\nimport { DepartmentNode } from \"./DepartmentTree\";\r\n\r\nexport class DepartmentTable<\r\n T extends Department = Department,\r\n F extends Department = Department\r\n> extends DataTable<T, F> {\r\n constructor(options: DataTableOptions = {}) {\r\n super({\r\n pageSize: 0,\r\n pageSizes: [],\r\n name: \"ms-dept\",\r\n ...options,\r\n interfaceURL: {\r\n list: \"/ms/dv/ms-dept/allList\",\r\n ...options.interfaceURL,\r\n },\r\n });\r\n }\r\n\r\n protected async initialize() {\r\n await super.initialize();\r\n\r\n this.setColumns([\r\n new TableColumn({ name: \"id\", label: \"编号\", visible: false }),\r\n new TableColumn({ name: \"name\", label: \"名称\" }),\r\n new TableColumn({ name: \"leader\", label: \"部门负责人\" }),\r\n ]);\r\n }\r\n\r\n setList(list: F[]): void {\r\n const rootDepartments: DepartmentNode[] = [];\r\n\r\n const departments = list as unknown as DepartmentNode[];\r\n\r\n for (const department of departments) {\r\n department.children = [];\r\n\r\n if (!department.pid) {\r\n rootDepartments.push(department);\r\n }\r\n\r\n for (const item of departments) {\r\n if (department.id === item.pid) {\r\n department.children.push(item);\r\n }\r\n }\r\n }\r\n\r\n super.setList(rootDepartments as unknown as F[]);\r\n }\r\n\r\n formatItem(item: T): F {\r\n return {\r\n id: item.id,\r\n name: item.name || \"\",\r\n pid: item.pid || null,\r\n } as F;\r\n }\r\n}\r\n\r\ndefineDataTable(DepartmentTable);\r\n","import { DATA_MODEL_NAME } from \"./constants\";\r\nimport { DataTreeClass, DataModelDefines } from \"./core\";\r\n\r\nexport const defineDataTree = <T extends DataTreeClass>(\r\n DataTreeClass: T\r\n): T => {\r\n DataModelDefines.instance.registerDataTreeDefine(\r\n (DataTreeClass as any)[DATA_MODEL_NAME] as string,\r\n DataTreeClass\r\n );\r\n\r\n return DataTreeClass;\r\n};\r\n","import { DataTree, DataTreeOptions } from \"@maketribe/dm\";\r\n\r\nimport { Department } from \"./DepartmentForm\";\r\nimport { defineDataTree } from \"../../../../define-data-tree\";\r\n\r\nexport type DepartmentNode = Department & { children: DepartmentNode[] };\r\n\r\nexport class DepartmentTree<\r\n T extends DepartmentNode = DepartmentNode\r\n> extends DataTree<T> {\r\n constructor(options: DataTreeOptions = {}) {\r\n super({\r\n name: \"ms-dept\",\r\n ...options,\r\n props: { label: \"name\", ...options.props },\r\n });\r\n }\r\n protected async loadRequest(params: Record<string, any>) {\r\n const response = await super.loadRequest(params);\r\n\r\n const list = response.data.data;\r\n\r\n const rootDepartments: T[] = [];\r\n\r\n const departments = list;\r\n\r\n for (const department of departments) {\r\n department.children = [];\r\n\r\n if (!department.pid) {\r\n rootDepartments.push(department);\r\n }\r\n\r\n for (const item of departments) {\r\n if (department.id === item.pid) {\r\n department.children.push(item);\r\n }\r\n }\r\n }\r\n\r\n response.data.data = rootDepartments as T[];\r\n\r\n return response;\r\n }\r\n}\r\n\r\ndefineDataTree(DepartmentTree);\r\n","import { DataTable, DataTableOptions, TableColumn } from \"@maketribe/dm\";\r\nimport { defineDataTable } from \"../../../../../define-data-table\";\r\n\r\nexport class OperateLogTable extends DataTable {\r\n constructor(options: DataTableOptions = {}) {\r\n super({ name: \"ms-operate-log\", ...options });\r\n }\r\n\r\n protected async initialize() {\r\n await super.initialize();\r\n\r\n this.setColumns([\r\n new TableColumn({ name: \"desc\", label: \"描述\" }),\r\n new TableColumn({ name: \"content\", label: \"内容\" }),\r\n new TableColumn({ name: \"createdAt\", label: \"时间\" }),\r\n ]);\r\n }\r\n}\r\n\r\ndefineDataTable(OperateLogTable);\r\n","import { DataTable, DataTableOptions, TableColumn } from \"@maketribe/dm\";\r\nimport { defineDataTable } from \"../../../../../define-data-table\";\r\nimport { LoginLogType } from \"../../../../../constants\";\r\n\r\nexport type LoginLogResult = {\r\n account: string;\r\n ipAddress: string;\r\n traceId: string;\r\n status: LoginLogType;\r\n clientId: string;\r\n};\r\n\r\nexport type LoginLog = LoginLogResult & {\r\n statusText: string;\r\n};\r\n\r\nexport class LoginLogTable extends DataTable<LoginLogResult, LoginLog> {\r\n constructor(options: DataTableOptions = {}) {\r\n super({ name: \"ms-memberlogin-record\", ...options });\r\n }\r\n\r\n protected async initialize() {\r\n await super.initialize();\r\n\r\n this.setColumns([\r\n new TableColumn({ name: \"account\", label: \"账号\", width: \"150px\" }),\r\n new TableColumn({ name: \"statusText\", label: \"状态\", width: \"100px\" }),\r\n new TableColumn({ name: \"ipAddress\", label: \"IP\", width: \"120px\" }),\r\n new TableColumn({ name: \"traceId\", label: \"链路编号\" }),\r\n new TableColumn({ name: \"clientId\", label: \"客户端编号\" }),\r\n new TableColumn({ name: \"createdAt\", label: \"时间\" }),\r\n ]);\r\n }\r\n\r\n formatItem(item: LoginLogResult): LoginLog {\r\n let statusText = \"\";\r\n\r\n switch (item.status) {\r\n case LoginLogType.SUCCESS:\r\n statusText = \"登录成功\";\r\n break;\r\n case LoginLogType.FAILURE:\r\n statusText = \"登录失败\";\r\n break;\r\n case LoginLogType.LOCK:\r\n statusText = \"账号锁定\";\r\n break;\r\n default:\r\n }\r\n\r\n return { ...item, clientId: item.clientId ?? \"\", statusText };\r\n }\r\n}\r\n\r\ndefineDataTable(LoginLogTable);\r\n","import { DataTable, DataTableOptions, TableColumn } from \"@maketribe/dm\";\r\nimport { defineDataTable } from \"../../../../../define-data-table\";\r\n\r\nexport type RequestLog = {\r\n id: string;\r\n requestUrl: string;\r\n timeOperationElapsedMilliseconds: string;\r\n traceId: string;\r\n httpMethod: string;\r\n createdAt: string;\r\n isError: number;\r\n content: any;\r\n};\r\n\r\nexport class RequestLogTable extends DataTable<\r\n RequestLog,\r\n RequestLog & { contentText: string }\r\n> {\r\n constructor(options: DataTableOptions = {}) {\r\n super({ name: \"ms-request-log\", ...options });\r\n }\r\n\r\n protected async initialize() {\r\n await super.initialize();\r\n\r\n this.setColumns([\r\n new TableColumn({\r\n name: \"requestUrl\",\r\n label: \"请求地址\",\r\n }),\r\n new TableColumn({\r\n name: \"traceId\",\r\n label: \"链路编号\",\r\n }),\r\n new TableColumn({\r\n name: \"contentText\",\r\n label: \"内容\",\r\n componentInfo: \"MKColumnJson\",\r\n }),\r\n new TableColumn({\r\n name: \"timeOperationElapsedMilliseconds\",\r\n label: \"耗时(ms)\",\r\n }),\r\n new TableColumn({\r\n name: \"isError\",\r\n label: \"状态\",\r\n }),\r\n new TableColumn({\r\n name: \"httpMethod\",\r\n label: \"请求方法\",\r\n }),\r\n new TableColumn({ name: \"createdAt\", label: \"时间\" }),\r\n ]);\r\n }\r\n\r\n formatItem(item: RequestLog): RequestLog & { contentText: string } {\r\n let contentText = \"\";\r\n\r\n try {\r\n const content = JSON.parse(JSON.stringify(item.content || {}));\r\n\r\n if (typeof content.logReponseInfo.value === \"string\") {\r\n content.logReponseInfo.value = JSON.parse(content.logReponseInfo.value);;\r\n }\r\n\r\n contentText = JSON.stringify(content, null, 2);\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n\r\n return {\r\n ...item,\r\n contentText,\r\n };\r\n }\r\n}\r\n\r\ndefineDataTable(RequestLogTable);\r\n","import { DataTree, DataTreeNode, DataTreeOptions } from \"@maketribe/dm\";\r\nimport { R, CancelToken } from \"@maketribe/request\";\r\nimport { defineDataTree } from \"../../../../../define-data-tree\";\r\nimport { Event } from \"@maketribe/utils\";\r\n\r\nexport type LocalLog = {\r\n name: string;\r\n path: string;\r\n isDirectory: boolean;\r\n children: LocalLog[];\r\n};\r\n\r\nexport class LocalLogTree extends DataTree<LocalLog> {\r\n constructor(options: DataTreeOptions = { props: { label: \"name\" } }) {\r\n super({ name: \"local-log\", props: { label: \"path\" }, ...options });\r\n }\r\n\r\n protected async initialize(): Promise<void> {\r\n await super.initialize();\r\n\r\n // this.afterInitdEvent.once(() => {\r\n // this.append(\r\n // this.createDataTreeNode({\r\n // name: \"root\",\r\n // path: \"/\",\r\n // isDirectory: true,\r\n // children: [],\r\n // })\r\n // );\r\n // });\r\n }\r\n\r\n // createDataTreeNode(data: LocalLog) {\r\n // const dataTreeNode: DataTreeNode<LocalLog> =\r\n // new (class extends DataTreeNode<LocalLog> {\r\n // get isLeaf() {\r\n // return !(this.data?.isDirectory ?? false);\r\n // }\r\n\r\n // protected async loadRequest(params: Record<string, any>) {\r\n // const response = await this.httpRequest.get<\r\n // R<LocalLog[]> & { totalRecCount: string }\r\n // >(\"/ms/system/local-log-dir-root\", {\r\n // params: { ...params, path: this.data!.path },\r\n // cancelToken: new CancelToken((cancel) => {\r\n // this.loadCancel = cancel;\r\n // }),\r\n // });\r\n\r\n // response.data.data = response.data.data.map((item) => ({\r\n // name: item.name,\r\n // path: item.path,\r\n // isDirectory: item.isDirectory,\r\n // children: [],\r\n // })) as LocalLog[];\r\n\r\n // this.loadCancel = null;\r\n\r\n // return response;\r\n // }\r\n // })({ name: this.name });\r\n\r\n // dataTreeNode.setTree(this);\r\n\r\n // dataTreeNode.setData(data);\r\n\r\n // return dataTreeNode;\r\n // }\r\n\r\n formatItem(item: LocalLog): LocalLog {\r\n return { ...item, children: [] };\r\n }\r\n}\r\n\r\ndefineDataTree(LocalLogTree);\r\n","import { DataForm, DataFormOptions, FormColumn } from \"@maketribe/dm\";\r\nimport { DATA_MODEL_NAME, RegionLevel } from \"../../../../constants\";\r\nimport { MODULE_NAME } from \"../../constants\";\r\nimport { defineDataForm } from \"../../../../define-data-form\";\r\nimport { MsMemberTable } from \"../ms-member\";\r\n\r\nexport class MsMessageForm extends DataForm {\r\n static [DATA_MODEL_NAME]: string = \"message\";\r\n\r\n constructor(options: DataFormOptions = {}) {\r\n super({\r\n name: MsMessageForm[DATA_MODEL_NAME],\r\n moduleName: MODULE_NAME,\r\n ...options,\r\n });\r\n }\r\n\r\n protected async initialize(): Promise<void> {\r\n await super.initialize();\r\n\r\n this.setColumns([\r\n new FormColumn({\r\n name: \"senderId\", label: \"发送人\",\r\n componentInfo: \"MKFormDataTableSelect\",\r\n componentProps: {\r\n dataTable: this.register(new MsMemberTable()),\r\n labelFieldName: \"name\"\r\n }\r\n }),\r\n new FormColumn({ name: \"title\", label: \"发送标题\", required: true }),\r\n new FormColumn({\r\n name: \"content\", label: \"内容\",\r\n componentInfo: \"MKFormInput\",\r\n componentProps: {\r\n type: \"textarea\",\r\n autosize: {\r\n minRows: 5,\r\n maxRows: 20\r\n }\r\n }\r\n }),\r\n ]);\r\n }\r\n}\r\ndefineDataForm(MsMessageForm)\r\n","import { DataForm, DataFormOptions, FormColumn, Messager } from \"@maketribe/dm\";\r\nimport { DATA_MODEL_NAME, RegionLevel } from \"../../../../constants\";\r\nimport { MODULE_NAME } from \"../../constants\";\r\nimport { MsMemberTable } from \"../ms-member\";\r\nimport { MSAppClient } from \"../../../../core\";\r\nimport { MsRoleTable } from \"../ms-role\";\r\n\r\nexport class SendForm extends DataForm {\r\n static [DATA_MODEL_NAME]: string = \"message\";\r\n\r\n constructor(options: DataFormOptions = {}) {\r\n super({\r\n name: SendForm[DATA_MODEL_NAME],\r\n moduleName: MODULE_NAME,\r\n ...options,\r\n });\r\n this.httpRequest = MSAppClient.instance!.httpRequest;\r\n }\r\n\r\n protected async initialize(): Promise<void> {\r\n await super.initialize();\r\n\r\n this.setColumns([\r\n new FormColumn({ name: \"title\", label: \"发送标题\", required: true }),\r\n new FormColumn({\r\n name: \"content\", label: \"内容\",\r\n componentInfo: \"MKFormInput\",\r\n componentProps: {\r\n type: \"textarea\",\r\n autosize: {\r\n minRows: 5,\r\n maxRows: 20\r\n }\r\n }\r\n }),\r\n new FormColumn({\r\n name: \"broadcastRangeType\", label: \"消息类型\",\r\n componentInfo: \"MKFormDataSelect\",\r\n componentProps: {\r\n options: [{ value: 1, desc: \"指定成员\" }, { value: 2, desc: \"指定角色\" }]\r\n }, required: true,\r\n defaultValue: 1\r\n }),\r\n new FormColumn({\r\n name: \"broadcastRangeTargets\", label: \"收件人\",\r\n componentInfo: \"MKFormDataTableSelect\",\r\n componentProps: {\r\n dataTable: this.register(new MsMemberTable()),\r\n labelFieldName: \"name\",\r\n multiple: true\r\n }, required: true\r\n }),\r\n ]);\r\n\r\n\r\n this.formItemValueChangeEvent.on((data) => {\r\n if (data.formItem.name === \"broadcastRangeType\") {\r\n switch (data.data.value) {\r\n case 1:\r\n this.getColumn(\"broadcastRangeTargets\")!.componentProps.dataTable = this.register(new MsMemberTable());\r\n break;\r\n case 2:\r\n console.log(this.getColumn(\"broadcastRangeTargets\"));\r\n this.getColumn(\"broadcastRangeTargets\")!.componentProps.dataTable = this.register(new MsRoleTable());\r\n break;\r\n }\r\n\r\n }\r\n })\r\n }\r\n async submit() {\r\n const res = await this.httpRequest.post(\"/ms/dv/message/send\", this.data)\r\n return res\r\n }\r\n}","import {\r\n ActionButton,\r\n DataTable,\r\n DataTableOptions,\r\n FilterColumn,\r\n RefreshButton,\r\n TableActionColumn,\r\n TableColumn,\r\n TableHeaderItem,\r\n TableHeaderButton,\r\n Dialoger,\r\n Messager\r\n} from \"@maketribe/dm\";\r\nimport { DATA_MODEL_NAME, RegionLevel } from \"../../../../constants\";\r\nimport { MODULE_NAME } from \"../../constants\";\r\nimport { defineDataTable } from \"../../../../define-data-table\";\r\nimport { SendForm } from \"./SendForm\";\r\nimport { MSAppClient } from \"../../../../core\";\r\n\r\nexport class MsMessageTable extends DataTable {\r\n static [DATA_MODEL_NAME]: string = \"message\";\r\n\r\n constructor(options: DataTableOptions = {}) {\r\n super({\r\n name: MsMessageTable[DATA_MODEL_NAME],\r\n moduleName: MODULE_NAME,\r\n ...options,\r\n });\r\n this.httpRequest = MSAppClient.instance!.httpRequest;\r\n }\r\n\r\n protected async initialize(): Promise<void> {\r\n await super.initialize();\r\n\r\n const result = await this.httpRequest.get(\"/ms/dv/message/types\")\r\n if (result.data.code != 200) {\r\n Messager.error({\r\n message: result.data.msg || '获取消息类型失败'\r\n })\r\n return;\r\n }\r\n \r\n\r\n this.header.rightArea = [new RefreshButton(), new TableHeaderButton({\r\n label: \"发送消息\",\r\n icon: \"Plus\",\r\n handle: () => {\r\n Dialoger.dataFormDialog({\r\n dataForm: this.register(new SendForm())\r\n })\r\n }\r\n })]\r\n\r\n this.setColumns([\r\n new TableColumn({ name: \"senderId\", label: \"发送人\", width: \"120px\" }),\r\n new TableColumn({\r\n name: \"type\", label: \"消息类型\",\r\n componentInfo: \"MKColumnObjectMappingText\",\r\n componentProps: {\r\n mapping: result.data.data.reduce((res: any, cur: any) => {\r\n return { ...res, [cur.value]: cur.desc }\r\n }, {})\r\n }\r\n }),\r\n new TableColumn({ name: \"title\", label: \"标题\", width: \"120px\" }),\r\n new TableColumn({ name: \"content\", label: \"内容\", minWidth: \"200px\" }),\r\n // new TableActionColumn(),\r\n ]);\r\n }\r\n}\r\n\r\n\r\ndefineDataTable(MsMessageTable)","import { ExtractPropTypes } from \"vue\";\r\nimport { buildProps } from \"@maketribe/utils\";\r\nimport { MsMaterial, MsMaterialTable } from \"../../dataviews\";\r\n\r\nexport const materialListProps = buildProps({\r\n materialTable: {\r\n type: MsMaterialTable,\r\n },\r\n selectable: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n allowMaterialTypeValues: {\r\n type: Array,\r\n default: () => []\r\n },\r\n} as const);\r\n\r\nexport type MaterialListProps = ExtractPropTypes<typeof materialListProps>;\r\n","import { defineComponent, reactive, computed, unref, ref } from \"vue\";\r\nimport { ElButton, ElPopover } from \"element-plus\";\r\nimport { MKDataForm, MKForm } from \"../../../../components/data-model\";\r\nimport { MsMaterialGroupForm, MsMaterialGroupTree } from \"../../dataviews/ms-material\";\r\nimport { buildProps } from \"@maketribe/utils\";\r\n\r\nexport default defineComponent({\r\n name: \"MKMaterialFormPopover\",\r\n props: buildProps({\r\n materialGroupTree: {\r\n type: MsMaterialGroupTree,\r\n required: true,\r\n },\r\n materialGroupForm: {\r\n type: MsMaterialGroupForm,\r\n required: true,\r\n },\r\n } as const),\r\n setup(props, { slots }) {\r\n const visible = ref(false);\r\n\r\n const loading = computed(() => props.materialGroupForm.loading);\r\n\r\n const handleConfirmClick = async () => {\r\n await props.materialGroupForm.simpleSubmit();\r\n\r\n props.materialGroupTree.load();\r\n\r\n visible.value = false;\r\n };\r\n\r\n const handleCancelClick = () => {\r\n visible.value = false;\r\n };\r\n\r\n return () => {\r\n return (\r\n <ElPopover\r\n visible={unref(visible)}\r\n onUpdate:visible={(v: boolean) => (visible.value = v)}\r\n title=\"添加素材分组\"\r\n effect=\"light\"\r\n placement=\"right\"\r\n trigger=\"click\"\r\n width=\"320\"\r\n v-slots={{\r\n reference: () => slots.default?.(),\r\n }}\r\n >\r\n <div>\r\n <MKDataForm data-form={props.materialGroupForm}>\r\n <MKForm />\r\n </MKDataForm>\r\n <div class=\"mk-material-list__group-form-footer\">\r\n <ElButton onClick={handleCancelClick}>取消</ElButton>\r\n <ElButton\r\n type=\"primary\"\r\n loading={unref(loading)}\r\n onClick={handleConfirmClick}\r\n >\r\n 保存\r\n </ElButton>\r\n </div>\r\n </div>\r\n </ElPopover>\r\n );\r\n };\r\n },\r\n});\r\n","import {\r\n computed,\r\n defineComponent,\r\n nextTick,\r\n onBeforeUnmount,\r\n reactive,\r\n ref,\r\n Ref,\r\n unref,\r\n} from \"vue\";\r\nimport {\r\n ElButton,\r\n ElIcon,\r\n ElMessage,\r\n ElMessageBox,\r\n ElScrollbar,\r\n ElTooltip,\r\n} from \"element-plus\";\r\nimport { Plus, Edit, Delete } from \"@element-plus/icons-vue\";\r\nimport { buildProps } from \"@maketribe/utils\";\r\nimport {\r\n MsMaterialGroupForm,\r\n MsMaterialGroupNode,\r\n MsMaterialGroupTree,\r\n} from \"../../dataviews/ms-material\";\r\nimport { MKDataTable, MKTree } from \"../../../../components/data-model\";\r\nimport MaterialGroupFormPopover from \"./material-group-form-popover\";\r\nimport { I18n } from \"@maketribe/locale\";\r\n\r\nexport default defineComponent({\r\n name: \"MKMaterialGroup\",\r\n props: buildProps({\r\n materialGroupTree: {\r\n type: MsMaterialGroupTree,\r\n required: true,\r\n },\r\n } as const),\r\n setup(props) {\r\n const treeRef: Ref<typeof MKTree | null> = ref(null);\r\n\r\n const materialGroupForm = reactive(\r\n new MsMaterialGroupForm()\r\n ) as MsMaterialGroupForm;\r\n\r\n const materialGroupTree = computed(() => props.materialGroupTree);\r\n\r\n const loading = computed(() => unref(materialGroupTree).loading);\r\n\r\n onBeforeUnmount(() => {\r\n materialGroupForm.dispose();\r\n });\r\n\r\n const handleAddClick = async (parent?: MsMaterialGroupNode) => {\r\n materialGroupForm.addRecord();\r\n\r\n await nextTick();\r\n\r\n materialGroupForm.setData({\r\n ...materialGroupForm.data,\r\n parentGroupId: parent?.id || null,\r\n } as MsMaterialGroupNode);\r\n };\r\n\r\n const handleEditClick = (item: MsMaterialGroupNode) => {\r\n materialGroupForm.editRecord(item);\r\n };\r\n\r\n const handleDeleteClick = async (item: MsMaterialGroupNode) => {\r\n const isConfirm = await ElMessageBox.confirm(\r\n I18n.instance.translate(\"mk.dataTablePage.deleteMessage\"),\r\n I18n.instance.translate(\"mk.dataTablePage.deleteTitle\"),\r\n { type: \"warning\" }\r\n ).then(\r\n () => true,\r\n () => false\r\n );\r\n\r\n if (!isConfirm) {\r\n return;\r\n }\r\n\r\n const result = await unref(materialGroupTree).deleteAfterRefresh(item);\r\n\r\n if (result.data.code !== 200) {\r\n ElMessage.error(result.data.msg);\r\n return;\r\n }\r\n };\r\n\r\n return () => {\r\n return (\r\n <div class=\"mk-material-group\" v-loading={unref(loading)}>\r\n <div class=\"mk-material-group__header\">\r\n <div class=\"mk-material-group__header-title\">素材分组</div>\r\n <MaterialGroupFormPopover\r\n materialGroupTree={unref(materialGroupTree)}\r\n materialGroupForm={materialGroupForm}\r\n >\r\n <ElButton\r\n onClick={() => handleAddClick()}\r\n icon={Plus}\r\n size=\"small\"\r\n type=\"primary\"\r\n />\r\n </MaterialGroupFormPopover>\r\n </div>\r\n\r\n <div class=\"mk-material-group__main\">\r\n <ElScrollbar height=\"100%\">\r\n <MKDataTable\r\n dataTable={unref(materialGroupTree)}\r\n highlight-current\r\n >\r\n <MKTree\r\n dataTree={unref(materialGroupTree)}\r\n allowSelectContainer={false}\r\n ref={((el: any) => (treeRef.value = el)) as any}\r\n v-slots={{\r\n \"node-tools\": ({ data }: any) => {\r\n return (\r\n <div\r\n class=\"mk-material-group__tools\"\r\n onClick={(e) => {\r\n e.preventDefault();\r\n }}\r\n >\r\n <ElTooltip content=\"添加\">\r\n <span class=\"mk-material-group__tools-item\">\r\n <MaterialGroupFormPopover\r\n materialGroupTree={unref(materialGroupTree)}\r\n materialGroupForm={materialGroupForm}\r\n >\r\n <span\r\n onClick={(e) => handleAddClick(data.data)}\r\n >\r\n <ElIcon>\r\n <Plus />\r\n </ElIcon>\r\n </span>\r\n </MaterialGroupFormPopover>\r\n </span>\r\n </ElTooltip>\r\n <ElTooltip content=\"编辑\">\r\n <span class=\"mk-material-group__tools-item\">\r\n <MaterialGroupFormPopover\r\n materialGroupTree={unref(materialGroupTree)}\r\n materialGroupForm={materialGroupForm}\r\n >\r\n <span\r\n onClick={(e) => handleEditClick(data.data)}\r\n >\r\n <ElIcon>\r\n <Edit />\r\n </ElIcon>\r\n </span>\r\n </MaterialGroupFormPopover>\r\n </span>\r\n </ElTooltip>\r\n <ElTooltip content=\"删除\">\r\n <span class=\"mk-material-group__tools-item\">\r\n <span\r\n onClick={() => handleDeleteClick(data.data)}\r\n >\r\n <ElIcon>\r\n <Delete />\r\n </ElIcon>\r\n </span>\r\n </span>\r\n </ElTooltip>\r\n </div>\r\n );\r\n },\r\n }}\r\n />\r\n </MKDataTable>\r\n </ElScrollbar>\r\n </div>\r\n </div>\r\n );\r\n };\r\n },\r\n});\r\n","import { buildProps } from \"@maketribe/utils\";\r\nimport { ExtractPropTypes } from \"vue\";\r\n\r\nexport const imageCropperContentProps = buildProps({\r\n // modelValue: { type: String, required: true },\r\n src: { type: String, required: true },\r\n fixedBox: { type: Boolean, default: false },\r\n maxWidth:{ type:Number,default:0},\r\n maxHeight:{ type:Number,default:0},\r\n ratioOptions: {\r\n type: Array,\r\n default: () => [],\r\n },\r\n} as const);\r\n\r\nexport type ImageCropperContentProps = ExtractPropTypes<\r\n typeof imageCropperContentProps\r\n>;\r\n\r\nexport const imageCropperContentEmits = {\r\n // \"update:model-value\": (modelValue: string) => true,\r\n};\r\n\r\nexport type ImageCropperContentEmits = typeof imageCropperContentEmits;\r\n","import {\r\n computed,\r\n defineComponent,\r\n reactive,\r\n ref,\r\n Ref,\r\n unref,\r\n watch,\r\n} from \"vue\";\r\nimport {VueCropper} from \"vue-cropper\";\r\nimport {MKSvgIcon} from \"../svg-icon\";\r\nimport {\r\n imageCropperContentEmits,\r\n imageCropperContentProps,\r\n} from \"./image-cropper-content-options\";\r\nimport {\r\n ElForm,\r\n ElFormItem,\r\n ElInputNumber,\r\n ElOption,\r\n ElScrollbar,\r\n ElSelect,\r\n ElTooltip,\r\n} from \"element-plus\";\r\n\r\nexport type ImageCropperRatioOption = {\r\n value: string;\r\n label: string;\r\n width: number;\r\n height: number;\r\n};\r\n\r\n// const ORIGIN_RATIO = \"origin\";\r\nconst FREE_RATIO = \"free\";\r\n\r\nconst BASE64_PREFIX = /^data:image\\/([^;]+);base64,/;\r\n\r\nexport default defineComponent({\r\n name: \"MKImageContentCropper\",\r\n props: imageCropperContentProps,\r\n emits: imageCropperContentEmits,\r\n setup(props) {\r\n const cropperRef: Ref<any> = ref(null);\r\n\r\n const outputType = computed(() => {\r\n const base64Match = props.src.match(BASE64_PREFIX);\r\n\r\n if (base64Match?.[1]) {\r\n return base64Match?.[1];\r\n }\r\n\r\n const url = new URL(props.src, location.origin).toString();\r\n\r\n const index = url.lastIndexOf(\".\");\r\n\r\n if (index === -1) {\r\n return \"jpeg\";\r\n }\r\n\r\n return url.slice(index + 1) || \"jpeg\";\r\n });\r\n\r\n // const originRatioOption: ImageCropperRatioOption = reactive({\r\n // value: ORIGIN_RATIO,\r\n // label: \"原图比例\",\r\n // width: 1,\r\n // height: 1,\r\n // });\r\n\r\n const ratioOptions = computed(() => {\r\n return [\r\n ...props.ratioOptions.map((item: any) => ({\r\n ...item,\r\n value: item.value.toString(),\r\n })),\r\n // originRatioOption,\r\n {value: FREE_RATIO, label: \"自由比例\", width: 1, height: 1},\r\n\r\n ] as ImageCropperRatioOption[];\r\n });\r\n\r\n const autoCropWidth = ref(props.maxWidth);\r\n const autoCropHeight = ref(props.maxHeight);\r\n\r\n const currentRatio: Ref<string> = ref(ratioOptions.value[0].value);\r\n\r\n const maxWidth: Ref<number> = ref(props.maxWidth);\r\n const maxHeight: Ref<number> = ref(props.maxHeight);\r\n\r\n const enlarge = computed(() => {\r\n const width = unref(cropperRef)?.cropW ?? 1;\r\n const height = unref(cropperRef)?.cropH ?? 1;\r\n\r\n const ratio = unref(maxWidth) / unref(maxHeight);\r\n const cropRatio = width / height;\r\n\r\n return cropRatio > ratio\r\n ? unref(maxWidth) / width\r\n : unref(maxHeight) / height;\r\n });\r\n\r\n const setCurrentRatio = (value: string) => {\r\n currentRatio.value = value;\r\n };\r\n\r\n const isFixed = computed(() => unref(currentRatio) !== FREE_RATIO);\r\n\r\n const fixedNumber = computed(() => {\r\n const option = unref(ratioOptions).find(\r\n (option) => option.value === unref(currentRatio)\r\n );\r\n\r\n return [option?.width ?? 1, option?.height ?? 1];\r\n });\r\n\r\n watch(\r\n computed(() => props.src),\r\n (src) => {\r\n const image = new Image();\r\n image.src = src;\r\n\r\n image.onload = () => {\r\n\r\n if (!props.maxWidth) {\r\n autoCropWidth.value = image.naturalWidth;\r\n }\r\n\r\n if (props.maxHeight) {\r\n autoCropHeight.value = image.naturalHeight;\r\n }\r\n\r\n\r\n };\r\n },\r\n {immediate: true}\r\n );\r\n\r\n // watch(currentRatio, (currentRatio) => {\r\n // new MouseEvent(\"mousemove\", {});\r\n // // debugger;\r\n // unref(cropperRef).changeCropNow(new MouseEvent(\"mousemove\"));\r\n // });\r\n\r\n const handleRotateLeft = () => {\r\n unref(cropperRef).rotateLeft();\r\n };\r\n\r\n const handleRotateRight = () => {\r\n unref(cropperRef).rotateRight();\r\n };\r\n\r\n const setCropperRef = (el: any) => {\r\n cropperRef.value = el;\r\n };\r\n\r\n return {\r\n enlarge,\r\n maxWidth,\r\n maxHeight,\r\n outputType,\r\n cropperRef,\r\n ratioOptions,\r\n autoCropWidth,\r\n autoCropHeight,\r\n currentRatio,\r\n isFixed,\r\n fixedNumber,\r\n setCurrentRatio,\r\n setCropperRef,\r\n handleRotateLeft,\r\n handleRotateRight,\r\n };\r\n },\r\n render() {\r\n const {\r\n enlarge,\r\n maxWidth,\r\n maxHeight,\r\n outputType,\r\n ratioOptions,\r\n autoCropHeight,\r\n autoCropWidth,\r\n isFixed,\r\n fixedNumber,\r\n currentRatio,\r\n setCurrentRatio,\r\n setCropperRef,\r\n handleRotateLeft,\r\n handleRotateRight,\r\n $props,\r\n $slots,\r\n } = this;\r\n\r\n const ratioOptionsVNodes = unref(ratioOptions).map((ratioOption) => (\r\n <ElOption value={ratioOption.value} label={ratioOption.label}/>\r\n ));\r\n\r\n return (\r\n <div class=\"mk-image-cropper\">\r\n <div class=\"mk-image-cropper__main\">\r\n <VueCropper\r\n ref={setCropperRef}\r\n outputType={outputType}\r\n img={$props.src}\r\n auto-crop\r\n canMoveBox\r\n auto-crop-width={autoCropWidth}\r\n auto-crop-height={autoCropHeight}\r\n fixedBox={$props.fixedBox}\r\n fixed={isFixed}\r\n fixedNumber={fixedNumber}\r\n enlarge={enlarge}\r\n />\r\n\r\n <div class=\"mk-image-cropper__bar\">\r\n <ElTooltip content=\"右旋\">\r\n <MKSvgIcon name=\"hugeicons:rotate-top-right\" onClick={handleRotateRight} class=\"m-r-10px\"/>\r\n </ElTooltip>\r\n <ElTooltip content=\"左旋\">\r\n <MKSvgIcon name=\"hugeicons:rotate-top-left\" onClick={handleRotateLeft}/>\r\n </ElTooltip>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mk-image-cropper__tools\">\r\n <ElScrollbar height=\"100%\">\r\n <ElForm label-position=\"top\">\r\n <ElFormItem label=\"比例\">\r\n <ElSelect\r\n placeholder=\"选择比例\"\r\n modelValue={currentRatio}\r\n onUpdate:modelValue={setCurrentRatio}\r\n >\r\n {ratioOptionsVNodes}\r\n </ElSelect>\r\n </ElFormItem>\r\n <ElFormItem label=\"最大输出宽度\">\r\n <ElInputNumber\r\n placeholder=\"宽度\"\r\n modelValue={maxWidth}\r\n onUpdate:modelValue={\r\n ((v: number) => (this.maxWidth = v)) as any\r\n }\r\n />\r\n </ElFormItem>\r\n\r\n <ElFormItem label=\"最大输出高度\">\r\n <ElInputNumber\r\n placeholder=\"高度\"\r\n modelValue={maxHeight}\r\n onUpdate:modelValue={\r\n ((v: number) => (this.maxHeight = v)) as any\r\n }\r\n />\r\n </ElFormItem>\r\n </ElForm>\r\n\r\n {$slots.tools?.()}\r\n </ElScrollbar>\r\n </div>\r\n </div>\r\n );\r\n },\r\n});\r\n","import { Dialoger } from \"@maketribe/dm\";\r\nimport ImageCropperContent, {\r\n ImageCropperRatioOption,\r\n} from \"./image-cropper-content\";\r\nimport { ElButton } from \"element-plus\";\r\nimport { ref, Ref, unref, Fragment } from \"vue\";\r\n\r\nexport type MKImageCropperOptions = {\r\n src: string;\r\n ratioOptions?: Array<ImageCropperRatioOption>;\r\n fixedBox?: boolean;\r\n maxWidth?:number;\r\n maxHeight?:number;\r\n};\r\nexport type MKImageCropperResult = {\r\n isConfirm: boolean;\r\n data: string;\r\n size: { width: number; height: number };\r\n};\r\n\r\nexport async function ImageCropper(\r\n options: MKImageCropperOptions\r\n): Promise<MKImageCropperResult> {\r\n const ratioOptions = options.ratioOptions ?? [];\r\n const fixedBox = options.fixedBox ?? false;\r\n\r\n return new Promise((resolve) => {\r\n const imageCropperContentEl: Ref<typeof ImageCropperContent | null> =\r\n ref(null);\r\n\r\n const handleCancelClick = () => {\r\n dialogInstance.destroy();\r\n\r\n resolve({\r\n isConfirm: false,\r\n data: \"\",\r\n size: { width: 0, height: 0 },\r\n });\r\n };\r\n\r\n const handleConfirmClick = async () => {\r\n dialogInstance.destroy();\r\n\r\n const cropperRef = unref(imageCropperContentEl)!.cropperRef;\r\n \r\n resolve({\r\n isConfirm: true,\r\n data: await new Promise(cropperRef.getCropData.bind(cropperRef)),\r\n size: { width: cropperRef.cropW, height: cropperRef.cropH },\r\n });\r\n };\r\n\r\n const dialogInstance = Dialoger.customRender({\r\n title: \"图片裁切\",\r\n onClose: handleCancelClick,\r\n body: () => {\r\n return (\r\n <ImageCropperContent\r\n ref={((el: any) => (imageCropperContentEl.value = el)) as any}\r\n src={options.src}\r\n fixedBox={fixedBox}\r\n ratioOptions={ratioOptions}\r\n maxHeight={options.maxHeight}\r\n maxWidth={options.maxWidth}\r\n />\r\n );\r\n },\r\n footer: () => {\r\n return (\r\n <Fragment>\r\n <ElButton onClick={handleCancelClick}>取消</ElButton>\r\n <ElButton type=\"primary\" onClick={handleConfirmClick}>\r\n 确认\r\n </ElButton>\r\n </Fragment>\r\n );\r\n },\r\n });\r\n });\r\n}\r\n","import { withInstall } from \"@maketribe/utils\";\r\nimport ImageCropperContent from \"./image-cropper-content\";\r\n\r\nexport * from \"./image-cropper-api\";\r\n\r\nexport const MKImageCropperContent = withInstall(ImageCropperContent);\r\n\r\nexport default MKImageCropperContent;\r\n\r\nexport * from \"./image-cropper-content-options\";\r\n","<template>\r\n <ElCard\r\n :class=\"['mk-material-item', isSelected ? 'is-selected' : '']\"\r\n shadow=\"never\"\r\n @click.capture=\"handleClick\"\r\n >\r\n <div class=\"mk-material-item__tools\">\r\n <div class=\"mk-material-item__tools-item\">\r\n <ElDropdown>\r\n <MKSvgIcon name=\"ri:more-fill\"/>\r\n\r\n <template #dropdown>\r\n <ElDropdownItem\r\n v-if=\"currentMaterialTypeValue === 1\"\r\n @click=\"handleCutClick\"\r\n >\r\n 裁切\r\n </ElDropdownItem>\r\n <ElDropdownItem\r\n v-if=\"currentMaterialTypeValue === 2\"\r\n @click=\"handleDownloadClick\"\r\n >\r\n 下载\r\n </ElDropdownItem>\r\n <ElDropdownItem @click=\"handleMoveClick\">移动分组</ElDropdownItem>\r\n <ElDropdownItem @click=\"handleDeleteClick\">删除</ElDropdownItem>\r\n <ElDropdownItem @click=\"handleCopyClick(true)\">复制绝对路径</ElDropdownItem>\r\n <ElDropdownItem @click=\"handleCopyClick(false)\">复制相对路径</ElDropdownItem>\r\n </template>\r\n </ElDropdown>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mk-material-item__preview\">\r\n <MaterialComponent :src=\"material.path\"/>\r\n </div>\r\n <div class=\"mk-material-item__title\">{{ material.desc }}</div>\r\n </ElCard>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport {Messager} from \"@maketribe/dm\";\r\nimport {MsMaterial, MsMaterialTable} from \"../../dataviews/ms-material\";\r\nimport {computed, toRaw} from \"vue\";\r\nimport {MKSvgIcon} from \"../../../../components/basic/svg-icon\";\r\n\r\nconst props = defineProps({\r\n materialTable: {type: MsMaterialTable, required: true},\r\n material: {type: Object, required: true},\r\n});\r\n\r\nconst emit = defineEmits([\"click\", \"move\", \"cut\", \"download\"]);\r\n\r\nconst isSelected = computed(() =>\r\n props.materialTable.getSelection().includes(props.material.id)\r\n);\r\n\r\nconst currentMaterialTypeValue = computed(\r\n () => props.materialTable.currentMaterialType?.value ?? null\r\n);\r\n\r\nconst MaterialComponent = computed(() => {\r\n const component =\r\n props.materialTable.resolveMaterialComponent(\r\n props.material as MsMaterial\r\n ) || props.materialTable.materialComponents.resolveComponent(\"MKFileView\")!;\r\n\r\n return toRaw(component.component);\r\n});\r\n\r\nconst handleClick = (event: MouseEvent) => {\r\n emit(\"click\", event);\r\n};\r\n\r\nconst handleDeleteClick = () => {\r\n props.materialTable.deleteRecord(props.material);\r\n};\r\n\r\nconst handleMoveClick = () => {\r\n emit(\"move\", props.material);\r\n};\r\n\r\nconst handleCutClick = () => {\r\n emit(\"cut\", props.material);\r\n};\r\n\r\nconst handleDownloadClick = () => {\r\n emit(\"download\", props.material);\r\n};\r\n\r\nconst handleCopyClick = (isAbsolute: boolean) => {\r\n let copyText = props.material.path\r\n if (isAbsolute) {\r\n copyText = location.origin + props.material.path\r\n }\r\n\r\n //兼容性判断\r\n if (navigator.clipboard === undefined) {\r\n //通过input标签进行复制\r\n const input = document.createElement(\"input\");\r\n input.value = copyText;\r\n document.body.appendChild(input);\r\n input.select();\r\n document.execCommand(\"Copy\");\r\n document.body.removeChild(input);\r\n } else {\r\n navigator.clipboard.writeText(copyText);\r\n }\r\n Messager.success({message: \"复制成功\"});\r\n};\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n.mk-material-item {\r\n :deep(.el-card__body) {\r\n padding: 0 !important;\r\n }\r\n}\r\n</style>\r\n","import {\r\n computed,\r\n defineComponent,\r\n Fragment,\r\n getCurrentInstance,\r\n onBeforeUnmount,\r\n onMounted,\r\n reactive,\r\n unref,\r\n watch,\r\n} from \"vue\";\r\nimport { base64ToBlob } from \"@maketribe/utils\";\r\nimport { DvOpt, WebFileUpload } from \"@maketribe/request\";\r\nimport { materialListProps } from \"./material-list-options\";\r\nimport MaterialGroup from \"./material-group\";\r\nimport {\r\n MsMaterial,\r\n MsMaterialForm,\r\n MsMaterialGroupNode,\r\n MsMaterialGroupTree,\r\n MsMaterialTable,\r\n MsMaterialType,\r\n} from \"../../dataviews\";\r\nimport {\r\n MKUploadFile,\r\n MKWebFileUploadContext,\r\n} from \"../../../../components/basic/upload-file\";\r\nimport { ImageCropper } from \"../../../../components/basic/image-cropper\";\r\nimport {\r\n MKDataTable,\r\n MKDataTablePagination,\r\n} from \"../../../../components/data-model\";\r\nimport { ElButton, ElScrollbar } from \"element-plus\";\r\nimport MaterialItem from \"./material-item.vue\";\r\nimport { Dialoger, FormColumn, Messager } from \"@maketribe/dm\";\r\n\r\nconst RATIO_OPTIONS = [\r\n {\r\n value: \"1\",\r\n label: \"1:1\",\r\n width: 1,\r\n height: 1,\r\n },\r\n {\r\n value: \"2\",\r\n label: \"2:1\",\r\n width: 2,\r\n height: 1,\r\n },\r\n {\r\n value: \"3\",\r\n label: \"4:3\",\r\n width: 4,\r\n height: 3,\r\n },\r\n {\r\n value: \"3\",\r\n label: \"16:9\",\r\n width: 16,\r\n height: 9,\r\n },\r\n];\r\n\r\nexport default defineComponent({\r\n name: \"MKMaterialList\",\r\n props: materialListProps,\r\n setup(props) {\r\n const materialGroupTree = reactive(\r\n new MsMaterialGroupTree()\r\n ) as MsMaterialGroupTree;\r\n\r\n const webFileUpload = new WebFileUpload();\r\n\r\n const _materialTable = reactive(new MsMaterialTable());\r\n\r\n const materialForm = reactive(\r\n new (class extends MsMaterialForm {\r\n protected async initialize() {\r\n await super.initialize();\r\n\r\n this.setColumns([\r\n new FormColumn({\r\n name: \"materialGroupId\",\r\n label: \"素材组\",\r\n componentInfo: \"MKDataTreeSelect\",\r\n componentProps: {\r\n dataTree: this.register(new MsMaterialGroupTree()),\r\n checkStrictly: false,\r\n },\r\n }),\r\n ]);\r\n }\r\n })()\r\n ) as MsMaterialForm;\r\n\r\n const materialTable = computed(\r\n () => (props.materialTable ?? _materialTable) as MsMaterialTable\r\n );\r\n\r\n const loading = computed(() => unref(materialTable).loading);\r\n\r\n const materialTypes = computed(() =>\r\n unref(materialTable).getMaterialTypes()\r\n );\r\n\r\n const currentMaterialType = computed(\r\n () => unref(materialTable).currentMaterialType\r\n );\r\n\r\n const currentMaterialTypeId = computed(\r\n () => unref(currentMaterialType)?.value ?? \"\"\r\n );\r\n\r\n const materialList = computed(() => unref(materialTable).getList());\r\n\r\n onBeforeUnmount(() => {\r\n _materialTable.dispose();\r\n materialGroupTree.dispose();\r\n materialForm.dispose();\r\n });\r\n\r\n onMounted(() => {\r\n const instance = getCurrentInstance();\r\n\r\n watch(\r\n materialTable,\r\n (materialTable, _, onCleanup) => {\r\n const disposable = materialTable.afterInitdEvent.on(() => {\r\n materialTable.setAllowMaterialTypeValues(\r\n props.allowMaterialTypeValues as MsMaterialType[\"value\"][]\r\n );\r\n });\r\n\r\n onCleanup(() => {\r\n disposable.dispose();\r\n });\r\n },\r\n { immediate: true }\r\n );\r\n\r\n watch(\r\n computed(() => props.allowMaterialTypeValues),\r\n (allowMaterialTypeValues) => {\r\n unref(materialTable).setAllowMaterialTypeValues(\r\n allowMaterialTypeValues as MsMaterialType[\"value\"][]\r\n );\r\n }\r\n );\r\n });\r\n\r\n watch(\r\n materialTable,\r\n (materialTable, _, onCleanup) => {\r\n const disposable = materialTable.deleteRecordEvent.on(\r\n async ({ item }) => {\r\n const isConfirm = await Dialoger.confirm({\r\n message: \"是否确认删除\",\r\n title: \"素材删除\",\r\n type: \"warning\",\r\n });\r\n\r\n if (!isConfirm) {\r\n return;\r\n }\r\n\r\n materialTable.deleteAfterRefresh(item);\r\n }\r\n );\r\n\r\n onCleanup(() => {\r\n disposable.dispose();\r\n });\r\n },\r\n { immediate: true }\r\n );\r\n\r\n const handleMaterialTypeClick = (materialType: MsMaterialType) => {\r\n if (materialType.value === unref(currentMaterialTypeId)) {\r\n return;\r\n }\r\n\r\n unref(materialTable).setCurrentMaterialType(materialType);\r\n };\r\n\r\n materialGroupTree.selectionChangeEvent.on(() => {\r\n const currentGroupId = materialGroupTree.getSelection()[0];\r\n\r\n if (!currentGroupId) {\r\n unref(materialTable).setList([]);\r\n }\r\n\r\n unref(materialTable).setCurrentMaterialGroupId(currentGroupId);\r\n });\r\n\r\n function getDefaultSelectMaterialGroup(\r\n nodes: MsMaterialGroupNode[]\r\n ): MsMaterialGroupNode | null {\r\n if (!nodes.length) {\r\n return null;\r\n }\r\n\r\n return getDefaultSelectMaterialGroup(nodes[0].children) ?? nodes[0];\r\n }\r\n\r\n materialGroupTree.afterLoadEvent.on(() => {\r\n const list = materialGroupTree.getList();\r\n\r\n const defaultSelectGroup = getDefaultSelectMaterialGroup(list);\r\n\r\n if (defaultSelectGroup) {\r\n materialGroupTree.setSelection([defaultSelectGroup.id]);\r\n }\r\n });\r\n\r\n materialForm.submittedEvent.on(() => {\r\n unref(materialTable).load();\r\n });\r\n\r\n const handleMaterialItemClick = (\r\n event: MouseEvent,\r\n material: MsMaterial\r\n ) => {\r\n if (!props.selectable) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n unref(materialTable).setSelection([material.id]);\r\n };\r\n\r\n const handleMoveClick = (material: MsMaterial) => {\r\n Dialoger.dataFormDialog({\r\n recId: material.id,\r\n title: \"设置素材分组\",\r\n dataForm: materialForm,\r\n });\r\n };\r\n\r\n const handleCutClick = async (material: MsMaterial) => {\r\n const cropperResult = await ImageCropper({\r\n src: material.path,\r\n ratioOptions: RATIO_OPTIONS,\r\n });\r\n\r\n if (!cropperResult.isConfirm) {\r\n return;\r\n }\r\n\r\n const handleOverrideClick = async () => {\r\n try {\r\n const blob = base64ToBlob(cropperResult.data);\r\n\r\n const uploadResponse = await webFileUpload.upload(\r\n new File([blob], material.desc, { type: blob.type })\r\n );\r\n\r\n if (uploadResponse.data.code !== 200) {\r\n Messager.error({ message: uploadResponse.data.msg });\r\n return;\r\n }\r\n\r\n const response = await DvOpt.createInstance({\r\n name: \"mk-material\",\r\n }).save({\r\n ...material,\r\n path: uploadResponse.data.data.path,\r\n });\r\n\r\n if (response.code !== 200) {\r\n Messager.error({ message: response.msg });\r\n return;\r\n }\r\n\r\n unref(materialTable).load();\r\n } catch {\r\n Messager.error({ message: \"网络异常\" });\r\n } finally {\r\n dialogInstance.destroy();\r\n }\r\n };\r\n\r\n const handleNewClick = async () => {\r\n try {\r\n const blob = base64ToBlob(cropperResult.data);\r\n\r\n const result = await unref(materialTable).upload.upload(\r\n new File([blob], material.desc, { type: blob.type })\r\n );\r\n\r\n if (result.data.code !== 200) {\r\n Messager.error({ message: result.data.msg });\r\n return;\r\n }\r\n } catch {\r\n Messager.error({ message: \"网络异常\" });\r\n } finally {\r\n dialogInstance.destroy();\r\n }\r\n };\r\n\r\n const handleCancelClick = () => {\r\n dialogInstance.destroy();\r\n };\r\n\r\n const dialogInstance = Dialoger.customRender({\r\n title: \"提示\",\r\n width: \"400px\",\r\n onClose: handleCancelClick,\r\n body: () => \"修改已存在的素材。是新建新素材还是覆盖现有素材\",\r\n footer: () => {\r\n return (\r\n <Fragment>\r\n <ElButton type=\"danger\" onClick={handleOverrideClick}>\r\n 覆盖\r\n </ElButton>\r\n <ElButton type=\"primary\" onClick={handleNewClick}>\r\n 新建\r\n </ElButton>\r\n <ElButton onClick={handleCancelClick}>取消</ElButton>\r\n </Fragment>\r\n );\r\n },\r\n });\r\n };\r\n\r\n const handleDownload = () => {};\r\n\r\n return () => {\r\n const materialTypeVNodes = unref(materialTypes).map((materialType) => {\r\n const className = [\r\n \"mk-material-list__type\",\r\n unref(currentMaterialTypeId) === materialType.value\r\n ? \"is-active\"\r\n : \"\",\r\n ];\r\n\r\n return (\r\n <div\r\n key={materialType.value}\r\n class={className}\r\n onClick={() => handleMaterialTypeClick(materialType)}\r\n >\r\n {materialType.label}\r\n </div>\r\n );\r\n });\r\n\r\n let currentMaterialTypeVNode: any = null;\r\n\r\n if (unref(currentMaterialType)) {\r\n currentMaterialTypeVNode = (\r\n <Fragment>\r\n <span>\r\n {unref(currentMaterialType)!.label}大小不超过\r\n {unref(currentMaterialType)!.limit} M\r\n </span>\r\n <MKWebFileUploadContext\r\n webFileUpload={unref(materialTable).upload}\r\n accept={unref(currentMaterialType)!.accept}\r\n >\r\n <MKUploadFile>\r\n <ElButton type=\"primary\">\r\n 选择{unref(currentMaterialType)!.label}\r\n </ElButton>\r\n </MKUploadFile>\r\n </MKWebFileUploadContext>\r\n </Fragment>\r\n );\r\n }\r\n\r\n const materialListVNodes = unref(materialList).map((material) => (\r\n <MaterialItem\r\n key={material.id}\r\n class=\"mk-material-list__item\"\r\n materialTable={unref(materialTable)}\r\n material={material}\r\n onMove={handleMoveClick}\r\n onCut={handleCutClick}\r\n onDownload={handleDownload}\r\n onClick={\r\n ((event: MouseEvent) =>\r\n handleMaterialItemClick(event, material)) as any\r\n }\r\n />\r\n ));\r\n\r\n return (\r\n <div class=\"mk-material-list\">\r\n <MaterialGroup materialGroupTree={unref(materialGroupTree)} />\r\n\r\n <div class=\"mk-material-list__main\" v-loading={unref(loading)}>\r\n <div class=\"mk-material-list__header\">\r\n <div class=\"mk-material-list__header-left\">\r\n <div class=\"mk-material-list__types\">{materialTypeVNodes}</div>\r\n </div>\r\n <div class=\"mk-material-list__header-right\">\r\n {currentMaterialTypeVNode}\r\n </div>\r\n </div>\r\n\r\n <div class=\"mk-material-list__body\">\r\n <MKDataTable dataTable={unref(materialTable)} autoLoad={false}>\r\n <ElScrollbar height=\"100%\">\r\n <div class=\"mk-material-list__wrapper\">\r\n {materialListVNodes}\r\n </div>\r\n </ElScrollbar>\r\n <div class=\"mk-material-list__footer\">\r\n <MKDataTablePagination dataTable={unref(materialTable)} />\r\n </div>\r\n </MKDataTable>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n };\r\n },\r\n});\r\n","import { withInstall } from \"@maketribe/utils\";\r\nimport MaterialList from \"./material-list\";\r\n\r\nexport const MKMaterialList = withInstall(MaterialList);\r\nexport default MKMaterialList;\r\n\r\nexport * from \"./material-list-options\";\r\n","\r\nimport { Fragment,h,onMounted, watch,ref,reactive,defineComponent, computed } from 'vue'\r\nimport { Dialoger } from '@maketribe/dm'\r\nimport { \r\n ElButton,ElTabs,ElTabPane,ElInput,ElImage,ElIcon,\r\n ElForm,ElFormItem,ElRow,ElCol\r\n} from \"element-plus\";\r\nimport { fileSelect } from \"@maketribe/utils\"\r\nimport { WebFileUpload } from \"@maketribe/request\";\r\nimport { base64ToBlob,md5 } from \"@maketribe/utils\";\r\nimport { Messager } from \"@maketribe/dm\";\r\nimport { Crop,Share,UploadFilled,Picture } from \"@element-plus/icons-vue\";\r\nimport { MsMaterialTable } from \"../../../../modules/ms/dataviews/ms-material\";\r\nimport { MKMaterialList } from \"../../../../modules/ms/components/material-list\";\r\nimport { ImageCropper } from \"../../image-cropper\"\r\n\r\n// 选择状态\r\nconst selectState = ref(\"select\");\r\n\r\n/**\r\n * 图片加载\r\n * @param src \r\n * @returns \r\n */\r\nexport const imageLoad = (src:string)=>{\r\n // 加载文案\r\n return new Promise((resolve,reject)=>{\r\n // 加载一下\r\n const image = new Image();\r\n const loadComplete = ()=>{ resolve(image.src); }\r\n image.onload = ()=>loadComplete()\r\n image.onerror = reject\r\n image.src = src;\r\n if(image.complete){ loadComplete(); }\r\n })\r\n}\r\n\r\n/**\r\n * 图片上传\r\n * @param src \r\n */\r\nexport const imageUpload = (src:string)=>{\r\n\r\n // 上传\r\n const webFileUpload = new WebFileUpload();\r\n return new Promise((resolve,reject)=>{\r\n\r\n if(src && src.indexOf(\"data:image/\") == 0){\r\n\r\n // 开始上传\r\n const blob = base64ToBlob(src); \r\n \r\n // 上传\r\n webFileUpload.upload(\r\n new File([blob], `${md5(Math.random().toString())}.${blob.type.toString().replace(\"image/\",\"\") || \"png\"}`, { type: blob.type })\r\n ).then(result=>{\r\n \r\n if (result.data.code !== 200) {\r\n Messager.error({ message: result.data.msg });\r\n reject(new Error(result.data.msg ));\r\n }\r\n else{\r\n resolve(result.data.data.path);\r\n }\r\n \r\n });\r\n }\r\n else{ resolve(src); }\r\n })\r\n}\r\n\r\n/**\r\n * 图片编辑面板\r\n */\r\nconst ImageEditPanelComponent = defineComponent({\r\n name: 'ImageEditPanelComponent',\r\n props: ['attrs'],\r\n setup(props,{ expose }){\r\n\r\n const attrs = reactive(props.attrs)\r\n const materialTable = reactive(new MsMaterialTable()) as MsMaterialTable;\r\n const margin = ref({t:0,r:0,b:0,l:0})\r\n\r\n watch(()=>`${margin.value.t} ${margin.value.r} ${margin.value.b} ${margin.value.l}`,(v)=>{\r\n attrs.margin = v;\r\n })\r\n\r\n watch(()=>props.attrs,()=>{\r\n var vals = props.attrs.margin.split(/[\\s]+/g);\r\n \r\n if(vals.length == 1 && vals[0]){\r\n margin.value = {t:vals[0],r:vals[0],b:vals[0],l:vals[0]}\r\n }\r\n else if(vals.length == 2){\r\n margin.value = {t:vals[0],r:vals[1],b:vals[0],l:vals[1]}\r\n }\r\n else if(vals.length == 3){\r\n margin.value = {t:vals[0],r:vals[1],b:vals[2],l:vals[1]}\r\n }\r\n else if(vals.length == 4){\r\n margin.value = {t:vals[0],r:vals[1],b:vals[2],l:vals[3]}\r\n }\r\n \r\n },{ immediate:true })\r\n\r\n // 选择素材\r\n materialTable.selectionChangeEvent.on(()=>{\r\n let id = materialTable.getSelection()[0];\r\n if(id){\r\n attrs.src = materialTable.getList().find(item=>item.id == id)?.path;\r\n }\r\n else{\r\n attrs.src = \"\";\r\n }\r\n })\r\n\r\n //\r\n const selectImage = async ()=>{\r\n\r\n const file = await fileSelect({ accept:\"image/*\"});\r\n \r\n if (file) {\r\n\r\n const fileRender = new FileReader();\r\n fileRender.onload = async (data:any)=>{\r\n attrs.src = data.target.result;\r\n \r\n }\r\n fileRender.readAsDataURL(file)\r\n }\r\n }\r\n\r\n // 导出可用的方法\r\n expose({ \r\n getResult:()=>{ return {...attrs} } ,\r\n setSrc:(src:string)=>{ attrs.src = src }\r\n });\r\n\r\n return ()=>{\r\n\r\n // 图片预览\r\n const ImageView = <ElImage style=\"background: #dedede;width: 100%; height: 480px;margin-top:10px\" src={attrs.src} fit=\"contain\" v-slots={{\r\n error:()=>{\r\n return <div style=\"\r\n font-size: 50px;\r\n display: flex;\r\n align-content: center;\r\n justify-content: center;\r\n align-items: center;\r\n height: 100%;\r\n \">\r\n <ElIcon><Picture /></ElIcon>\r\n </div>\r\n }\r\n }}>\r\n </ElImage>\r\n \r\n // 面板内容\r\n let panel = <ElTabs style=\"min-height: 520px\">\r\n <ElTabPane label=\"本地选择\">\r\n <ElButton icon={UploadFilled} type=\"primary\" style=\"width: 100%\" onClick={selectImage}>\r\n 选择本地文件\r\n </ElButton>\r\n {ImageView}\r\n </ElTabPane>\r\n <ElTabPane label=\"素材库选择\">\r\n <MKMaterialList class=\"mk-material-select__list\" selectable allowMaterialTypeValues={[1]} materialTable={materialTable} />\r\n </ElTabPane>\r\n <ElTabPane label=\"网络图片\">\r\n <ElInput v-model={attrs.src} prefix-icon={Share} style=\"width: 100%\" placeholder=\"请输入链接地址\">\r\n </ElInput>\r\n {ImageView}\r\n </ElTabPane>\r\n </ElTabs>\r\n\r\n if(selectState.value == \"attrs\"){\r\n panel = <ElRow gutter={20}>\r\n <ElCol span={14}>\r\n {ImageView}\r\n </ElCol>\r\n <ElCol span={10}>\r\n <ElForm label-position=\"top\" model={attrs}>\r\n <ElFormItem label=\"图片描述\">\r\n <ElInput v-model={attrs.alt} type=\"textarea\" {...{ rows:3 }} style=\"width: 100%\" placeholder=\"请输入\">\r\n </ElInput>\r\n </ElFormItem>\r\n <ElFormItem label=\"图片显示宽度\">\r\n <ElInput v-model={attrs.width} style=\"width: 100%\" placeholder=\"请输入宽度(可支持%)\">\r\n </ElInput>\r\n </ElFormItem>\r\n <ElFormItem label=\"图片显示高度\">\r\n <ElInput v-model={attrs.height} style=\"width: 100%\" placeholder=\"请输入高度(可支持%)\">\r\n </ElInput>\r\n </ElFormItem>\r\n <ElFormItem label=\"图片最大显示宽度\">\r\n <ElInput v-model={attrs.maxWidth} style=\"width: 100%\" placeholder=\"请输入宽度(可支持%)\">\r\n </ElInput>\r\n </ElFormItem>\r\n <ElFormItem label=\"图片最大显示高度\">\r\n <ElInput v-model={attrs.maxHeight} style=\"width: 100%\" placeholder=\"请输入高度(可支持%)\">\r\n </ElInput>\r\n </ElFormItem>\r\n <ElFormItem label=\"图片显示外边距\">\r\n <div style=\"display: flex;flex-wrap: nowrap;gap: 10px;justify-content: space-around;\">\r\n <div>\r\n 上:\r\n <ElInput v-model={margin.value.t} placeholder=\"\">\r\n </ElInput>\r\n </div>\r\n <div>\r\n 右:\r\n <ElInput v-model={margin.value.r} placeholder=\"\">\r\n </ElInput>\r\n </div>\r\n \r\n <div>\r\n 下:\r\n <ElInput v-model={margin.value.b} placeholder=\"\">\r\n </ElInput>\r\n </div>\r\n \r\n <div>\r\n 左:\r\n <ElInput v-model={margin.value.l} placeholder=\"\">\r\n </ElInput>\r\n </div>\r\n </div>\r\n </ElFormItem>\r\n </ElForm>\r\n </ElCol>\r\n </ElRow>\r\n }\r\n\r\n return panel;\r\n }\r\n }\r\n})\r\n\r\n/**\r\n * \r\n * @param attrs 显示图片编辑面板\r\n * @returns \r\n */\r\nexport const showImageEditDialog = async (attrs:any) => {\r\n return new Promise((resolve,reject) => {\r\n\r\n // 初始化\r\n selectState.value = attrs.src ? \"attrs\":\"select\";\r\n\r\n const imageEditPanelRef = ref<any>(null);\r\n const editResult = computed<any>(()=>imageEditPanelRef.value?.getResult())\r\n\r\n // 去裁切\r\n const toCropImageHandle = async ()=>{\r\n \r\n if(editResult.value.src){\r\n var result = await ImageCropper({ src: editResult.value.src});\r\n if(result.data){\r\n imageEditPanelRef.value?.setSrc(result.data);\r\n }\r\n }\r\n \r\n }\r\n\r\n // 取消编辑\r\n const handleCancelClick = () => {\r\n dialogInstance.destroy();\r\n };\r\n\r\n // 确认编辑\r\n const handleConfirmClick = () => {\r\n dialogInstance.destroy();\r\n resolve({...editResult.value});\r\n };\r\n\r\n const dialogInstance = Dialoger.customRender({\r\n title: \"素材选择\",\r\n class: \"mk-material-select\",\r\n width: \"70%\",\r\n onClose: () => {\r\n dialogInstance.destroy();\r\n },\r\n body: () => {\r\n return h(ImageEditPanelComponent,{attrs,ref:r=>imageEditPanelRef.value = r});\r\n },\r\n footer: () => {\r\n\r\n // 下一步按钮\r\n let nextBtns = [\r\n <ElButton type=\"primary\" onClick={()=>selectState.value = 'attrs'}>\r\n 下一步\r\n </ElButton>\r\n ]\r\n\r\n if(selectState.value == \"attrs\"){\r\n nextBtns = [\r\n <ElButton type=\"primary\" onClick={()=>selectState.value='select'}>\r\n 重新选图\r\n </ElButton>,\r\n <ElButton type=\"primary\" onClick={toCropImageHandle}>\r\n 裁切图\r\n </ElButton>,\r\n <ElButton type=\"primary\" onClick={handleConfirmClick}>\r\n 确定\r\n </ElButton>\r\n ];\r\n }\r\n\r\n return (\r\n <Fragment>\r\n <ElButton onClick={handleCancelClick}>取消</ElButton>\r\n {...nextBtns}\r\n </Fragment>\r\n );\r\n },\r\n });\r\n });\r\n}\r\n","\r\nimport { Fragment,ref } from 'vue'\r\nimport { Dialoger } from '@maketribe/dm'\r\nimport { ElButton,ElInput } from \"element-plus\";\r\nimport { Search } from \"@element-plus/icons-vue\";\r\nimport { useLexicalEditorContext } from \"../composables\"\r\n\r\n/**\r\n * 显示模块选择 \r\n * @returns \r\n */\r\nexport const showModuleSelectDialog = async (namespace:string) => {\r\n\r\n const { modules } = useLexicalEditorContext(namespace);\r\n\r\n return new Promise(resolve => {\r\n \r\n const selectOption = ref<any|null>(null);\r\n const searchInputValue = ref(\"\");\r\n\r\n // 取消编辑\r\n const handleCancelClick = () => {\r\n dialogInstance.destroy();\r\n };\r\n\r\n // 确认编辑\r\n const handleConfirmClick = () => {\r\n dialogInstance.destroy();\r\n resolve({...selectOption.value as any});\r\n };\r\n\r\n // 点击块\r\n const clickHandle = (item:any)=>{\r\n selectOption.value = item;\r\n }\r\n\r\n const dialogInstance = Dialoger.customRender({\r\n title: \"模版选择\",\r\n class: \"mk-doc-editor__module-template_dialog\",\r\n width: \"700px\",\r\n onClose: () => {\r\n dialogInstance.destroy();\r\n },\r\n body: () => {\r\n\r\n // 循环体\r\n const templateListComponent = modules.filter(item=>{\r\n if(searchInputValue.value){\r\n return item.name.indexOf(searchInputValue.value) >= 0 || item.title.indexOf(searchInputValue.value) >= 0\r\n }\r\n else{\r\n return true;\r\n }\r\n }).map(item=>{\r\n\r\n return <div \r\n class={`mk-doc-editor__module-template_dialog_list-item ${(item.cover ? 'cover':'')} ${(selectOption.value?.name == item.name ? 'active':'')}`} \r\n onClick={()=>clickHandle(item)}>\r\n {item.cover ? <img src={item.cover} /> :null}\r\n <div class=\"mk-doc-editor__module-template_dialog_list-item_title\">{item.title}</div>\r\n </div>\r\n })\r\n\r\n return <div class=\"mk-doc-editor__module-template_dialog_warp\">\r\n <ElInput v-model={searchInputValue.value} prefix-icon={Search} clearable={true} />\r\n <div class=\"mk-doc-editor__module-template_dialog_list-body\">\r\n {templateListComponent}\r\n </div>\r\n </div>\r\n },\r\n footer: () => {\r\n return <Fragment>\r\n <ElButton onClick={handleCancelClick}>取消</ElButton>\r\n <ElButton type=\"primary\" onClick={handleConfirmClick} disabled={!selectOption.value}>\r\n 确定\r\n </ElButton>\r\n </Fragment>\r\n },\r\n });\r\n });\r\n}\r\n","import { $getSelection, $isNodeSelection, COMMAND_PRIORITY_EDITOR, ElementNode, LexicalEditor, LexicalNode } from \"lexical\";\r\nimport { ref,Fragment } from \"vue\";\r\nimport { Dialoger } from \"@maketribe/dm\";\r\nimport { ElButton,ElInput } from \"element-plus\";\r\nimport { Search } from \"@element-plus/icons-vue\";\r\nimport { useLexicalEditorContext } from \"../composables\";\r\n\r\n \r\n/**\r\n * 显示模块模版选择\r\n * @returns \r\n */\r\nexport const showTemplateSelectDialog = function(namespace:string):Promise<string> {\r\n\r\n const { templates } = useLexicalEditorContext(namespace);\r\n \r\n return new Promise<string>((resolve:any)=> {\r\n\r\n const selectOption = ref<any|null>(null);\r\n const searchInputValue = ref(\"\");\r\n\r\n // 取消编辑\r\n const handleCancelClick = () => {\r\n dialogInstance.destroy();\r\n };\r\n\r\n // 确认编辑\r\n const handleConfirmClick = () => {\r\n dialogInstance.destroy();\r\n resolve(selectOption.value?.name);\r\n };\r\n\r\n // 点击块\r\n const clickHandle = (item:any)=>{\r\n selectOption.value = item;\r\n }\r\n\r\n const dialogInstance = Dialoger.customRender({\r\n title: \"模版选择\",\r\n class: \"mk-doc-editor__module-template_dialog\",\r\n width: \"700px\",\r\n onClose: () => {\r\n dialogInstance.destroy();\r\n },\r\n body: () => {\r\n\r\n // 循环体\r\n const templateListComponent = templates.filter(item=>{\r\n if(searchInputValue.value){\r\n return item.name.indexOf(searchInputValue.value) >= 0 || item.title.indexOf(searchInputValue.value) >= 0\r\n }\r\n else{\r\n return true;\r\n }\r\n }).map(item=>{\r\n\r\n return <div \r\n class={`mk-doc-editor__module-template_dialog_list-item ${(item.cover ? 'cover':'')} ${(selectOption.value?.name == item.name ? 'active':'')}`} \r\n onClick={()=>clickHandle(item)}>\r\n {item.cover ? <img src={item.cover} /> :null}\r\n <div class=\"mk-doc-editor__module-template_dialog_list-item_title\">{item.title}</div>\r\n </div>\r\n })\r\n\r\n return <div class=\"mk-doc-editor__module-template_dialog_warp\">\r\n <ElInput v-model={searchInputValue.value} prefix-icon={Search} clearable={true} />\r\n <div class=\"mk-doc-editor__module-template_dialog_list-body\">\r\n {templateListComponent}\r\n </div>\r\n </div>\r\n },\r\n footer: () => {\r\n return <Fragment>\r\n <ElButton onClick={handleCancelClick}>取消</ElButton>\r\n <ElButton type=\"primary\" onClick={handleConfirmClick} disabled={!selectOption.value}>\r\n 确定\r\n </ElButton>\r\n </Fragment>\r\n },\r\n });\r\n });\r\n}\r\n\r\n\r\n/**\r\n * html模版弹窗\r\n * @returns \r\n */\r\nexport const showHtmlTemplateDialog = function():Promise<string> {\r\n\r\n return new Promise<string>((resolve:any)=> {\r\n\r\n const contentInputValue = ref(\"\");\r\n\r\n // 取消编辑\r\n const handleCancelClick = () => {\r\n dialogInstance.destroy();\r\n };\r\n\r\n // 确认编辑\r\n const handleConfirmClick = () => {\r\n dialogInstance.destroy();\r\n resolve(contentInputValue.value);\r\n };\r\n\r\n const dialogInstance = Dialoger.customRender({\r\n title: \"自定义HTML模版内容\",\r\n class: \"mk-doc-editor__module-template_dialog\",\r\n width: \"700px\",\r\n onClose: () => {\r\n dialogInstance.destroy();\r\n },\r\n body: () => {\r\n return <ElInput v-model={contentInputValue.value} type=\"textarea\" autosize={{minRows:10,maxRows:20}} />\r\n },\r\n footer: () => {\r\n return <Fragment>\r\n <ElButton onClick={handleCancelClick}>取消</ElButton>\r\n <ElButton type=\"primary\" onClick={handleConfirmClick}>\r\n 确定\r\n </ElButton>\r\n </Fragment>\r\n },\r\n });\r\n });\r\n}\r\n\r\n\r\n","\r\n\r\nimport { onMounted, provide, inject, reactive,onUnmounted } from 'vue'\r\nimport type { CreateEditorArgs, LexicalEditor, LexicalNode, NodeKey } from 'lexical'\r\nimport { $createParagraphNode, $getRoot, $getSelection, $isElementNode, $isParagraphNode, $isTextNode, BLUR_COMMAND, createEditor, ElementNode } from 'lexical'\r\nimport { mergeRegister } from '@lexical/utils'\r\nimport { useMounted } from './utils'\r\nimport { generateNodesFromHtml } from '../utils'\r\nimport { clearSelection, setSelected } from './useElementBlockSelection'\r\n\r\n\r\n/**\r\n * 编辑器模块\r\n */\r\nexport type LexicalEditorModule = {\r\n name:string,\r\n title:string,\r\n cover?:string,\r\n template:string,\r\n editorCss?:string|null|undefined,\r\n options:Array<any>\r\n}\r\n\r\n/**\r\n * 编辑器模版类型\r\n */\r\nexport type LexicalEditorTemplate = {\r\n name:string,\r\n title:string,\r\n cover?:string,\r\n template:string,\r\n editorCss?:string|null|undefined,\r\n}\r\n\r\n/**\r\n * 编辑器上下文\r\n */\r\nexport type LexicalEditorContextData = {\r\n importCss:string,\r\n importScript:string,\r\n importStyles:string,\r\n modules:Array<LexicalEditorModule>,\r\n templates:Array<LexicalEditorTemplate>\r\n}\r\n\r\n/**\r\n * 快捷工具条\r\n */\r\nexport type ShortcutToolsType = {\r\n exist:(node:LexicalNode)=>boolean,\r\n tools:(Array<{ key?:string, title:string,icon:string,action:(node:any,dom?:HTMLElement)=>unknown}> | ((nodeKey?:NodeKey | string)=>Array<any>|null))\r\n}\r\n\r\n/**\r\n * 编辑器插件\r\n */\r\nexport type LexicalEditorPlugin = {\r\n nodes?:Array<any>,\r\n tools?:Array<{ icon: string; text:string, action:(editor:LexicalEditor)=>void,disbale?:(node:LexicalNode)=>boolean, sort:number }>,\r\n shortcutTools?:(editor:LexicalEditor)=>Array<ShortcutToolsType>,\r\n useMounted:(editor:LexicalEditor)=>any,\r\n modules?:Array<LexicalEditorModule>,\r\n templates?:Array<LexicalEditorTemplate>\r\n}\r\n\r\n/**\r\n * 编辑器上下文\r\n */\r\nexport type LexicalEditorContext = LexicalEditorContextData & {\r\n editor:LexicalEditor\r\n stageId:string,\r\n tools:Array<{ icon: string; text:string, action:(editor:LexicalEditor)=>void,disbale?:(node:LexicalNode)=>boolean, sort:number }>,\r\n shortcutTools:Array<ShortcutToolsType>\r\n}\r\n\r\n/**\r\n * 编辑器配置项\r\n */\r\nexport type LexicalEditorOptions = CreateEditorArgs & LexicalEditorContextData\r\n\r\n/**\r\n * 编辑器实例注入的key\r\n */\r\nconst LexicalEditorProviderKey = 'LexicalEditorProviderKey'\r\n\r\n/**\r\n * 历史合并选项\r\n */\r\nconst HISTORY_MERGE_OPTIONS = { tag: 'history-merge' }\r\n\r\n/**\r\n * 编辑器插件定义\r\n */\r\nconst EditorPlugins:Array<{namespace?:string,plugin:LexicalEditorPlugin}> = [];\r\n\r\n/**\r\n * 舞台全局数据\r\n */\r\nconst StageGlobalData = { num:0 }\r\n\r\n/**\r\n * 编辑器命名空间缓存\r\n */\r\nconst EditorNamespaceContextCache:any = {};\r\n\r\n \r\n/**\r\n * 注册编辑器插件\r\n * @param nodes \r\n */\r\nexport const registerEditorPlugin = function (plugin:LexicalEditorPlugin,namespace?:string) {\r\n EditorPlugins.push({namespace,plugin});\r\n}\r\n \r\n/**\r\n * \r\n * @param options 配置项 \r\n */\r\nexport const useLexicalEditor = function (options: LexicalEditorOptions, errHandle?: (error: Error) => void) {\r\n\r\n // 编号自增\r\n StageGlobalData.num++\r\n\r\n // 命名空间\r\n const namespace = options.namespace ?? `eidtor-${StageGlobalData.num}`;\r\n\r\n // 存在相同的空间则报错\r\n if(EditorNamespaceContextCache[namespace]){\r\n throw new Error(`编辑器命名空间【${namespace}】重复!`)\r\n }\r\n\r\n // 可以使用的插件列表\r\n const plugins = EditorPlugins.filter(p=>(!p.namespace || (p.namespace === namespace)))\r\n\r\n // 注册的节点\r\n const registerNodes:any = plugins.filter(p=>p.plugin.nodes).map(p=>p.plugin.nodes).reduce((a:any,b:any)=>a.concat(b))\r\n\r\n // 创建编辑器\r\n const editor = createEditor({\r\n editable: options.editable,\r\n html: options.html,\r\n namespace: namespace,\r\n nodes: options.nodes ? [...registerNodes, ...options.nodes] as any : registerNodes as any,\r\n theme: options.theme,\r\n onError: errHandle\r\n })\r\n\r\n // 挂载函数\r\n const mountHandles:any = plugins.filter(p=>p.plugin.useMounted).map(p=>p.plugin.useMounted)\r\n // 模版\r\n const templates:any = plugins.filter(p=>p.plugin.templates && p.plugin.templates.length).map(p=>p.plugin.templates).concat(EditorTemplates.filter(item=>!item.namespace || item.namespace === namespace).map(item=>item.template))\r\n // 模块\r\n const modules:any = plugins.filter(p=>p.plugin.modules && p.plugin.modules.length).map(p=>p.plugin.modules).concat(EditorModules.filter(item=>!item.namespace || item.namespace === namespace).map(item=>item.module))\r\n //快捷工具条\r\n const shortcutTools:Array<ShortcutToolsType> = []\r\n // 注入\r\n provide<LexicalEditorContext>(LexicalEditorProviderKey,EditorNamespaceContextCache[namespace] = {\r\n editor,stageId:`lexical-stage-${StageGlobalData.num}`,\r\n tools:plugins.map(p=>p.plugin.tools ?? []).reduce((a:any,b:any)=>a.concat(b)),\r\n shortcutTools,\r\n modules:options.modules.concat(modules),\r\n templates:options.templates.concat(templates),\r\n importCss:options.importCss,\r\n importScript:options.importScript,\r\n importStyles:options.importStyles \r\n })\r\n // \r\n shortcutTools.push(... plugins.map(p=>p.plugin.shortcutTools ? p.plugin.shortcutTools(editor):[]).reduce((a:any,b:any)=>a.concat(b)));\r\n\r\n useMounted(()=>{\r\n // 删除空容器\r\n return mergeRegister(\r\n // // 焦点移除\r\n // editor.registerCommand<FocusEvent>(BLUR_COMMAND,(event:FocusEvent) => {\r\n // // 选中根\r\n // // setSelected(editor,true,$getRoot().__key)\r\n // return false;\r\n // }, 1),\r\n // 补空\r\n editor.registerUpdateListener(({ editorState }) => {\r\n \r\n editor.update(() => {\r\n const rootNode = $getRoot();\r\n // || !$isParagraphNode(rootNode.getLastChild())\r\n // 始终保持一个 p 存在\r\n if (rootNode.isEmpty()) { \r\n const p = $createParagraphNode()\r\n rootNode.append(p) \r\n }\r\n\r\n //给所有空容器设置标识\r\n const list = [...rootNode.getChildren()];\r\n\r\n for(let i = 0; i<list.length;i++){\r\n\r\n const node = list[i];\r\n const el = editor.getElementByKey(node.getKey());\r\n\r\n if($isElementNode(node) && el){\r\n // 标识空容器\r\n if(node.isEmpty()){\r\n el.classList.add(\"mk-doc__empty-mark\");\r\n }\r\n else {\r\n el.classList.remove(\"mk-doc__empty-mark\");\r\n }\r\n \r\n list.push(...node.getChildren())\r\n }\r\n else if(el && $isTextNode(node)){\r\n // 标识br 前面的文本容器\r\n if(el?.nextElementSibling?.tagName.toLowerCase() == \"br\"){\r\n el.classList.add(\"mk-doc__br-brfore-mark\");\r\n }\r\n else{\r\n el.classList.remove(\"mk-doc__br-brfore-mark\");\r\n }\r\n }\r\n }\r\n })\r\n }),\r\n ...mountHandles.map((handle:any)=>handle(editor))\r\n ) \r\n })\r\n\r\n // 组件挂载之后\r\n onMounted(() => {\r\n\r\n // editor.blur(async ()=> await clearSelection(editor));\r\n\r\n editor.setEditable(options.editable !== undefined ? options.editable : true)\r\n\r\n // // 卸载组件之后 销毁编辑器实例\r\n onUnmounted(()=>{\r\n // 销毁这个命名空间的山修改文缓存\r\n delete EditorNamespaceContextCache[namespace];\r\n })\r\n })\r\n\r\n return { \r\n // 设置初始化内容\r\n setEditornitializeContent:(content?:string)=>{\r\n editor.update(() => {\r\n\r\n const root = $getRoot()\r\n\r\n root.clear();\r\n\r\n if(content){\r\n root.append(...generateNodesFromHtml(editor,content));\r\n }\r\n else{\r\n root.append($createParagraphNode())\r\n }\r\n\r\n // // 设置选中 \r\n // if ($getSelection() == null) { \r\n // setSelected(editor,true,root.getLastChild()?.getKey() ?? \"\")\r\n // } \r\n\r\n }, HISTORY_MERGE_OPTIONS)\r\n },\r\n editor \r\n }\r\n}\r\n\r\n/**\r\n * 获取当前编辑器上下文\r\n * @param namespace \r\n * @returns \r\n */\r\nexport const useLexicalEditorContext = function (namespace?:string) {\r\n\r\n const data = namespace ? EditorNamespaceContextCache[namespace] as LexicalEditorContext : inject<LexicalEditorContext>(LexicalEditorProviderKey);\r\n\r\n if(!data){ throw new Error(\"未获取到当前编辑器上下文!\"); }\r\n\r\n return {\r\n editor:data.editor,stageId:data.stageId,\r\n modules:data.modules ?? [],\r\n templates:data.templates ?? [],\r\n importCss:data.importCss ?? \"\",\r\n importScript:data.importScript ?? \"\",\r\n importStyles:data.importStyles ?? \"\",\r\n shortcutToolsList:data.shortcutTools,\r\n toolbarExtendPlugins :data.tools,\r\n // 查找模块\r\n findLexicalEditorModule(name:string):LexicalEditorModule|undefined{\r\n\r\n const module = data.modules.find(item=>item.name == name);\r\n \r\n if(module == null){\r\n console.warn(\"未知的模块:【\" + name + \"】\")\r\n }\r\n \r\n return module;\r\n },\r\n // 查找模版\r\n findLexicalEditorTemplate(name:string):LexicalEditorTemplate|undefined{\r\n\r\n const tempalte = data.templates.find(item=>item.name == name);\r\n \r\n if(tempalte == null){\r\n console.warn(\"未知的模版:【\" + name + \"】\")\r\n }\r\n \r\n return tempalte;\r\n },\r\n }\r\n}\r\n\r\n/**\r\n * 编辑器模块定义\r\n */\r\nconst EditorModules:Array<{namespace?:string,module:LexicalEditorModule}> = [];\r\n\r\n/**\r\n * 注册模块\r\n * @param options \r\n */\r\nexport const registerLexicalEditorModule = (options:LexicalEditorModule,namespace?:string) => {\r\n\r\n if(EditorModules.filter(item=>!item.namespace || item.namespace === namespace).findIndex(item=>item.module.name == options.name) >= 0){\r\n console.warn(`模块【${options.title}】重复注册!`);\r\n }\r\n else{\r\n EditorModules.push({ namespace,module:options});\r\n }\r\n}\r\n\r\n/**\r\n * 卸载模块\r\n * @param name \r\n */\r\nexport const unRegisterLexicalEditorModule = (name:string) => {\r\n\r\n for(let i = 0;i < EditorModules.length; i++){\r\n if(EditorModules[i].module.name == name){\r\n EditorModules.splice(i,1);\r\n break;\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * 编辑器模版定义\r\n */\r\nconst EditorTemplates:Array<{namespace?:string,template:LexicalEditorTemplate}> = [];\r\n\r\n/**\r\n * 注册模版\r\n * @param options \r\n */\r\nexport const registerLexicalEditorTemplate = (options:LexicalEditorTemplate,namespace?:string) => {\r\n\r\n if(EditorTemplates.filter(item=>!item.namespace || item.namespace === namespace).findIndex(item=>item.template.name == options.name) >= 0){\r\n console.warn(`模版【${options.title}】重复注册!`);\r\n }\r\n else{\r\n EditorTemplates.push({ namespace,template:options});\r\n }\r\n}\r\n\r\n/**\r\n * 卸载模版\r\n * @param name \r\n */\r\nexport const unRegisterLexicalEditorTemplate = (name:string) => {\r\n\r\n for(let i = 0;i < EditorTemplates.length; i++){\r\n if(EditorTemplates[i].template.name == name){\r\n EditorTemplates.splice(i,1);\r\n break;\r\n }\r\n }\r\n}\r\n\r\n// /**\r\n// * 初始化编辑器\r\n// * @param editor \r\n// * @param initialEditorState \r\n// * @returns \r\n// */\r\n// const initializeEditor = (editor: LexicalEditor, initialEditorState?: InitialEditorStateType): void => {\r\n\r\n// if (initialEditorState === null) { return }\r\n\r\n// if (initialEditorState === undefined) {\r\n \r\n// // 编辑内容为空的时候 默认创建一个 p\r\n// editor.update(() => {\r\n\r\n// const root = $getRoot()\r\n\r\n// if (root.isEmpty()) {\r\n\r\n// const paragraph = $createParagraphNode()\r\n\r\n// root.append(paragraph)\r\n\r\n// const activeElement = document.activeElement\r\n\r\n// if ($getSelection() !== null || (activeElement !== null && activeElement === editor.getRootElement())) {\r\n// paragraph.select()\r\n// }\r\n// }\r\n// }, HISTORY_MERGE_OPTIONS)\r\n// }\r\n// else if (initialEditorState !== null) {\r\n\r\n// switch (typeof initialEditorState) {\r\n// case 'string': {\r\n// const parsedEditorState = editor.parseEditorState(initialEditorState)\r\n// editor.setEditorState(parsedEditorState, HISTORY_MERGE_OPTIONS)\r\n// break\r\n// }\r\n// case 'object': {\r\n// editor.setEditorState(initialEditorState, HISTORY_MERGE_OPTIONS)\r\n// break\r\n// }\r\n// case 'function': {\r\n// editor.update(() => {\r\n\r\n// const root = $getRoot()\r\n\r\n// if (root.isEmpty()) { initialEditorState(editor) }\r\n\r\n// }, HISTORY_MERGE_OPTIONS)\r\n// break\r\n// }\r\n// }\r\n// }\r\n// }\r\n","\r\n\r\nimport { ref } from 'vue'\r\nimport type { CommandListenerPriority,ElementFormatType, LexicalEditor, LexicalNode, TextFormatType } from 'lexical'\r\nimport { $createParagraphNode, $getSelection,$isElementNode,$isRangeSelection, $isNodeSelection, CAN_REDO_COMMAND, CAN_UNDO_COMMAND, FORMAT_TEXT_COMMAND, REDO_COMMAND, UNDO_COMMAND, } from 'lexical'\r\nimport { $findMatchingParent, mergeRegister } from '@lexical/utils'\r\nimport { useMounted } from './utils'\r\nimport { $getSelectionStyleValueForProperty, $patchStyleText, $setBlocksType } from '@lexical/selection'\r\nimport { $isLinkNode, LinkNode, TOGGLE_LINK_COMMAND } from '@lexical/link'\r\nimport { $createHeadingNode, $isHeadingNode, HeadingTagType } from '@lexical/rich-text'\r\nimport { useLexicalEditorContext } from './lexicalEditor'\r\nimport { showLinkEditDialog,sanitizeUrl } from \"../utils\" \r\n\r\n/**\r\n * 最低的监听优先级\r\n */\r\nconst CommandLowPriority: CommandListenerPriority = 1\r\n\r\n/**\r\n * 编辑配置项\r\n */\r\ntype LexicalEditOptions = {\r\n rootFontSize?:number,\r\n fontSizeOptions?:Array<{value:string,label:string}>,\r\n fontfamilyOptoins?:Array<{value:string,label:string} >\r\n}\r\n\r\n// 字体\r\nconst FONT_FAMILY = \"微软雅黑='微软雅黑';宋体='宋体';黑体='黑体';仿宋='仿宋';楷体='楷体';隶书='隶书';幼圆='幼圆';Andale Mono=andale mono,times;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier;Georgia=georgia,palatino;Helvetica=helvetica;Impact=impact,chicago;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco;Times New Roman=times new roman,times;Trebuchet MS=trebuchet ms,geneva;Verdana=verdana,geneva;Webdings=webdings;Wingdings=wingdings\".split(\";\")\r\n\r\n// 设置样式\r\nconst addFontSizeToOptions = function(options:Array<{value:string,label:string}>, size:number,rootSize:number = 14){\r\n options.push({value:`${Math.round(size / rootSize * 100) / 100}rem`,label:size+\"px\"});\r\n}\r\n\r\n/**\r\n * 获取编辑器状态\r\n * @param editorInstance \r\n * @returns \r\n */\r\nexport const useLexicalEditorState = function (editor?: LexicalEditor,options?:LexicalEditOptions) {\r\n\r\n if (!editor) { editor = useLexicalEditorContext().editor; }\r\n\r\n // 初始化配置\r\n if(!options){ options = { rootFontSize:14,fontfamilyOptoins:[],fontSizeOptions:[] }; }\r\n\r\n // 根文章大小默认14\r\n options.rootFontSize ??= 14;\r\n\r\n // 字体大小配置项初始化\r\n if(!options?.fontSizeOptions?.length){\r\n options.fontSizeOptions = [];\r\n // 数据初始化\r\n for(let i=0;i<80;i+=2){\r\n addFontSizeToOptions(options.fontSizeOptions,10 + i,options.rootFontSize);\r\n if(i >= 2 && i < 22){\r\n addFontSizeToOptions(options.fontSizeOptions,10 + i + 0.5,options.rootFontSize);\r\n addFontSizeToOptions(options.fontSizeOptions,10 + i + 1,options.rootFontSize);\r\n addFontSizeToOptions(options.fontSizeOptions,10 + i + 1.5,options.rootFontSize);\r\n }\r\n }\r\n }\r\n\r\n // 默认字体初始化\r\n if(!options?.fontfamilyOptoins?.length){\r\n options.fontfamilyOptoins = [{value:\"\",label:\"默认字体\"}].concat(FONT_FAMILY.map(fv=>{\r\n let fvl = fv.split(\"=\"),label=fvl[0],value=fvl[1] || `'${label}'`;\r\n return { value,label}\r\n }))\r\n }\r\n\r\n const canUndo = ref(false)\r\n const canRedo = ref(false)\r\n const fontSize = ref(options.rootFontSize+\"px\")\r\n const fontColor = ref<string>('#000')\r\n const bgColor = ref<string>('#fff')\r\n const fontFamily = ref<any>(options.fontfamilyOptoins![0])\r\n const canBold = ref(false)\r\n const canItalic = ref(false)\r\n const canUnderline = ref(false)\r\n const canStrikethrough = ref(false)\r\n const canSubscript = ref(false)\r\n const canSuperscript = ref(false)\r\n\r\n // 对齐方式\r\n const alignList = ref<ElementFormatType[]>([\"left\",\"center\",\"right\",\"justify\"])\r\n const alignValue = ref(alignList.value[0])\r\n const canLink = ref(false)\r\n const linkValue = ref(\"\");\r\n const canTextStyleDisabled = ref(false);\r\n\r\n // 内容类型清单\r\n const contentTypeList = [\r\n {value:\"paragraph\",label:\"正文\"},\r\n {value:\"h1\",label:\"标题 1\"},\r\n {value:\"h2\",label:\"标题 2\"},\r\n {value:\"h3\",label:\"标题 3\"},\r\n {value:\"h4\",label:\"标题 4\"},\r\n {value:\"h5\",label:\"标题 5\"}\r\n ];\r\n //当前选中内容\r\n const curContentTypeDesc = ref(\"正文\");\r\n\r\n // 激活的节点\r\n const activeNode = ref<LexicalNode|null>(null);\r\n\r\n // 设置文字样式\r\n const setTextStyle = function(token:string,value?:string){\r\n\r\n if([\"bold\",\"italic\",\"underline\",\"strikethrough\",\"subscript\",\"superscript\"].indexOf(token) >=0){\r\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, token as TextFormatType)\r\n }\r\n else if(token == \"link\"){\r\n\r\n if(canLink.value){\r\n editor.dispatchCommand(TOGGLE_LINK_COMMAND, null)\r\n }\r\n else{\r\n showLinkEditDialog(\"\").then((href:any)=>{\r\n if(href.trim()){\r\n editor.dispatchCommand(TOGGLE_LINK_COMMAND, sanitizeUrl(href))\r\n }\r\n })\r\n }\r\n \r\n }\r\n else{\r\n editor.update(() => {\r\n\r\n const selection = $getSelection()\r\n \r\n if (selection !== null){\r\n $patchStyleText(selection,{ [token]:value } as any)\r\n }\r\n },{})\r\n }\r\n }\r\n\r\n // 设置内容\r\n const setContentType = function(type:string){\r\n\r\n const contentType:any = contentTypeList.find(item=>item.value == type)\r\n \r\n editor.update(() => {\r\n \r\n const selection = $getSelection()\r\n \r\n if ($isRangeSelection(selection)){\r\n\r\n // 清空字体大小\r\n $patchStyleText(selection, { [\"font-size\"]:\"\" })\r\n \r\n if(contentType.value == \"paragraph\"){\r\n\r\n if(canSubscript.value){\r\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, 'subscript' as TextFormatType)\r\n }\r\n else if(canSuperscript.value){\r\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, 'superscript' as TextFormatType)\r\n }\r\n else{\r\n $setBlocksType(selection, () => $createParagraphNode())\r\n }\r\n }\r\n else{\r\n $setBlocksType(selection, () => {\r\n return $createHeadingNode(contentType.value as HeadingTagType)\r\n })\r\n }\r\n curContentTypeDesc.value = contentType.label\r\n }\r\n })\r\n }\r\n\r\n useMounted(() => {\r\n \r\n\r\n return mergeRegister(\r\n editor.registerCommand(CAN_UNDO_COMMAND, (payload: boolean) => {\r\n canUndo.value = payload\r\n return false\r\n }, CommandLowPriority),\r\n editor.registerCommand(CAN_REDO_COMMAND, (payload: boolean) => {\r\n canRedo.value = payload\r\n return false\r\n },CommandLowPriority),\r\n // 其他状态\r\n editor.registerUpdateListener(({ editorState }) => {\r\n editorState.read(() => {\r\n\r\n const selection = $getSelection()\r\n\r\n if ($isRangeSelection(selection)) {\r\n\r\n const anchorNode = selection.anchor.getNode()\r\n\r\n let parentNode = anchorNode.getKey() === 'root'\r\n ? anchorNode\r\n : $findMatchingParent(anchorNode, (e) => {\r\n const parent = e.getParent();\r\n // $isRootOrShadowRoot\r\n return parent !== null && $isElementNode(parent)\r\n });\r\n\r\n\r\n if (parentNode === null){ parentNode = anchorNode.getTopLevelElementOrThrow() }\r\n\r\n let parentDOM = editor.getElementByKey(parentNode.getKey());\r\n\r\n // 文本对齐\r\n alignValue.value = (parentDOM?.style.textAlign as ElementFormatType) || \"left\";\r\n\r\n if(alignValue.value == \"start\"){ alignValue.value = \"left\"; }\r\n else if(alignValue.value == \"end\"){ alignValue.value = \"right\"; }\r\n\r\n // Update text format\r\n canBold.value = selection.hasFormat('bold')\r\n canItalic.value = selection.hasFormat('italic')\r\n canUnderline.value = selection.hasFormat('underline')\r\n canStrikethrough.value = selection.hasFormat('strikethrough')\r\n canSubscript.value = selection.hasFormat('subscript')\r\n canSuperscript.value = selection.hasFormat('superscript')\r\n\r\n if(canSubscript.value){\r\n curContentTypeDesc.value = contentTypeList.find(item=>item.value == 'subscript')?.label ?? \"正文\"\r\n }\r\n else if(canSuperscript.value){\r\n curContentTypeDesc.value = contentTypeList.find(item=>item.value == 'superscript')?.label ?? \"正文\"\r\n }\r\n else if (parentDOM !== null) {\r\n const type = $isHeadingNode(parentNode) ? parentNode.getTag() : parentNode.getType();\r\n curContentTypeDesc.value = contentTypeList.find(item=>item.value == type)?.label ?? \"正文\"\r\n }\r\n\r\n // Handle buttons\r\n var ff = $getSelectionStyleValueForProperty(selection, 'font-family', '');\r\n let fs = $getSelectionStyleValueForProperty(selection, 'font-size', '');\r\n \r\n if(fs){\r\n fontSize.value = Math.round(parseFloat(fs) * (options.rootFontSize!))+\"px\"\r\n }\r\n else if(parentDOM){\r\n fontSize.value = editor.getRootElement()?.ownerDocument.defaultView?.getComputedStyle(parentDOM).fontSize ?? Math.round((options.rootFontSize!))+\"px\";\r\n }\r\n else{\r\n fontSize.value = Math.round((options.rootFontSize!))+\"px\"\r\n }\r\n\r\n // 字体\r\n if(!ff && parentDOM){\r\n ff = editor.getRootElement()?.ownerDocument.defaultView?.getComputedStyle(parentDOM).fontFamily ?? \"\";\r\n }\r\n \r\n fontColor.value = $getSelectionStyleValueForProperty(selection, 'color', '#000')\r\n bgColor.value = $getSelectionStyleValueForProperty(selection, 'background-color', '')\r\n fontFamily.value = options.fontfamilyOptoins?.find(item=>item.value==ff) || options.fontfamilyOptoins![0];\r\n \r\n // 不禁用\r\n canTextStyleDisabled.value = false;\r\n\r\n // Update links\r\n const parent = anchorNode.getParent()\r\n \r\n if(canLink.value = $isLinkNode(parent) || $isLinkNode(anchorNode)){\r\n linkValue.value = $isLinkNode(parent) ? parent.getURL() : (anchorNode as LinkNode).getURL()\r\n }\r\n else{\r\n linkValue.value = \"\";\r\n }\r\n\r\n // 节点类型\r\n activeNode.value = anchorNode;\r\n\r\n }\r\n else{\r\n canTextStyleDisabled.value = true;\r\n activeNode.value = $isNodeSelection(selection) ? selection.getNodes()[0] : null;\r\n curContentTypeDesc.value = \"正文\";\r\n }\r\n })\r\n })\r\n )\r\n })\r\n\r\n // undo\r\n const undoCommand = ()=>{ editor.dispatchCommand(UNDO_COMMAND, undefined) }\r\n const redoCommand = ()=>{ editor.dispatchCommand(REDO_COMMAND, undefined) }\r\n\r\n return {\r\n canUndo,undoCommand,\r\n canRedo,redoCommand,\r\n canTextStyleDisabled,\r\n setTextStyle,\r\n fontSize,fontSizeOptions:options.fontSizeOptions,\r\n fontColor,\r\n bgColor,\r\n fontFamily,fontfamilyOptoins:options.fontfamilyOptoins,\r\n canBold,\r\n canItalic,\r\n canUnderline,\r\n canStrikethrough,\r\n canSubscript,\r\n canSuperscript,\r\n alignList,\r\n alignValue,\r\n canLink,\r\n linkValue,\r\n activeNode,contentTypeList,curContentTypeDesc,setContentType\r\n }\r\n}\r\n","\r\n\r\nimport { mergeRegister } from '@lexical/utils'\r\n\r\nimport {\r\n $createNodeSelection,\r\n $getNodeByKey,\r\n $getSelection,\r\n $isNodeSelection,\r\n $setSelection,\r\n COMMAND_PRIORITY_LOW,CLICK_COMMAND, LexicalCommand, createCommand, NodeKey, LexicalEditor,\r\n SELECTION_CHANGE_COMMAND\r\n} from 'lexical'\r\nimport { useLexicalEditorContext } from './lexicalEditor'\r\nimport { useMounted } from './utils'\r\nimport { unref } from 'vue'\r\n\r\n/**\r\n * toolsbar的函数\r\n */\r\nexport type SelectElementBlockToolsbarFunction = (nodeKey?:NodeKey | string)=>Array<any>|null;\r\n\r\n/**\r\n * 选中元素快\r\n */\r\nexport const SELECTED_ELEMENTBLOCK_COMMAND: LexicalCommand<NodeKey|string|null> = createCommand('SELECTED_ELEMENTBLOCK_COMMAND')\r\n\r\n/**\r\n * 移除元素快\r\n */\r\nexport const REMOVE_ELEMENTBLOCK_COMMAND: LexicalCommand<undefined|null> = createCommand('REMOVE_ELEMENTBLOCK_COMMAND')\r\n\r\n/**\r\n * 更新模块工具条位置信息\r\n */\r\nexport const UPDATE_ELEMENTBLOCK_TOOLBAR_POS_COMMAND: LexicalCommand<undefined|null> = createCommand('UPDATE_ELEMENTBLOCK_TOOLBAR_POS_COMMAND')\r\n\r\n/**\r\n * 判断选中的方法\r\n */\r\nexport type SelectExistFunc = (el:HTMLElement)=>HTMLElement|null\r\n\r\n/**\r\n * 判断选中的方法\r\n */\r\nexport type ElementSelectionHandle = (el:HTMLElement)=>undefined\r\n\r\n// isNodeSelected \r\nexport const isNodeSelected = function (editor: LexicalEditor, key: NodeKey): boolean {\r\n return editor.getEditorState().read(() => {\r\n const node = $getNodeByKey(key)\r\n if (node === null)\r\n return false\r\n return node.isSelected()\r\n })\r\n}\r\n\r\n// 取消选中\r\nexport const clearSelection = (editor: LexicalEditor):Promise<undefined> => {\r\n return new Promise(resolove=>{\r\n editor.update(() => {\r\n const selection = $getSelection()\r\n if ($isNodeSelection(selection) && selection){\r\n selection.clear();\r\n }\r\n resolove(undefined)\r\n })\r\n })\r\n}\r\n\r\n// 设置选中\r\nexport const setSelected = (editor: LexicalEditor,selected: boolean,key:string):Promise<undefined> => {\r\n\r\n return new Promise(resolove=>{\r\n editor.update(() => {\r\n let selection = $getSelection()\r\n \r\n if (!$isNodeSelection(selection)) {\r\n selection = $createNodeSelection()\r\n $setSelection(selection)\r\n }\r\n if ($isNodeSelection(selection)) {\r\n if (selected)\r\n selection.add(unref(key))\r\n else\r\n selection.delete(unref(key))\r\n }\r\n resolove(undefined)\r\n })\r\n })\r\n \r\n}\r\n\r\n// 设置选中\r\nexport const setElementBlockSelection = async (editor:LexicalEditor,nodeKey:string)=>{\r\n await clearSelection(editor);\r\n await setSelected(editor,true,nodeKey);\r\n}\r\n","import { $isHeadingNode, HeadingNode, type HeadingTagType } from '@lexical/rich-text'\r\nimport { $getNextRightPreorderNode, mergeRegister } from '@lexical/utils'\r\nimport {\r\n $getNodeByKey,\r\n $getRoot,\r\n $isElementNode,\r\n type ElementNode,\r\n type LexicalEditor,\r\n type NodeKey,\r\n type NodeMutation,\r\n TextNode,\r\n} from 'lexical'\r\nimport { ref } from 'vue'\r\nimport { useMounted } from './utils'\r\n\r\nexport type TableOfContentsEntry = [\r\n key: NodeKey,\r\n text: string,\r\n tag: HeadingTagType,\r\n]\r\n\r\nfunction toEntry(heading: HeadingNode): TableOfContentsEntry {\r\n return [heading.getKey(), heading.getTextContent(), heading.getTag()]\r\n}\r\n\r\nfunction $insertHeadingIntoTableOfContents(\r\n prevHeading: HeadingNode | null,\r\n newHeading: HeadingNode | null,\r\n currentTableOfContents: Array<TableOfContentsEntry>,\r\n): Array<TableOfContentsEntry> {\r\n if (newHeading === null)\r\n return currentTableOfContents\r\n\r\n const newEntry: TableOfContentsEntry = toEntry(newHeading)\r\n let newTableOfContents: Array<TableOfContentsEntry> = []\r\n if (prevHeading === null) {\r\n // check if key already exists\r\n if (\r\n currentTableOfContents.length > 0\r\n && currentTableOfContents[0][0] === newHeading.__key\r\n ) {\r\n return currentTableOfContents\r\n }\r\n\r\n newTableOfContents = [newEntry, ...currentTableOfContents]\r\n }\r\n else {\r\n for (let i = 0; i < currentTableOfContents.length; i++) {\r\n const key = currentTableOfContents[i][0]\r\n newTableOfContents.push(currentTableOfContents[i])\r\n if (key === prevHeading.getKey() && key !== newHeading.getKey()) {\r\n // check if key already exists\r\n if (\r\n i + 1 < currentTableOfContents.length\r\n && currentTableOfContents[i + 1][0] === newHeading.__key\r\n ) {\r\n return currentTableOfContents\r\n }\r\n\r\n newTableOfContents.push(newEntry)\r\n }\r\n }\r\n }\r\n return newTableOfContents\r\n}\r\n\r\nfunction $deleteHeadingFromTableOfContents(\r\n key: NodeKey,\r\n currentTableOfContents: Array<TableOfContentsEntry>,\r\n): Array<TableOfContentsEntry> {\r\n const newTableOfContents = []\r\n for (const heading of currentTableOfContents) {\r\n if (heading[0] !== key)\r\n newTableOfContents.push(heading)\r\n }\r\n return newTableOfContents\r\n}\r\n\r\nfunction $updateHeadingInTableOfContents(\r\n heading: HeadingNode,\r\n currentTableOfContents: Array<TableOfContentsEntry>,\r\n): Array<TableOfContentsEntry> {\r\n const newTableOfContents: Array<TableOfContentsEntry> = []\r\n for (const oldHeading of currentTableOfContents) {\r\n if (oldHeading[0] === heading.getKey())\r\n newTableOfContents.push(toEntry(heading))\r\n\r\n else\r\n newTableOfContents.push(oldHeading)\r\n }\r\n return newTableOfContents\r\n}\r\n\r\n/**\r\n * Returns the updated table of contents, placing the given `heading` before the given `prevHeading`. If `prevHeading`\r\n * is undefined, `heading` is placed at the start of table of contents\r\n */\r\nfunction $updateHeadingPosition(\r\n prevHeading: HeadingNode | null,\r\n heading: HeadingNode,\r\n currentTableOfContents: Array<TableOfContentsEntry>,\r\n): Array<TableOfContentsEntry> {\r\n const newTableOfContents: Array<TableOfContentsEntry> = []\r\n const newEntry: TableOfContentsEntry = toEntry(heading)\r\n\r\n if (!prevHeading)\r\n newTableOfContents.push(newEntry)\r\n\r\n for (const oldHeading of currentTableOfContents) {\r\n if (oldHeading[0] === heading.getKey())\r\n continue\r\n\r\n newTableOfContents.push(oldHeading)\r\n if (prevHeading && oldHeading[0] === prevHeading.getKey())\r\n newTableOfContents.push(newEntry)\r\n }\r\n\r\n return newTableOfContents\r\n}\r\n\r\nfunction $getPreviousHeading(node: HeadingNode): HeadingNode | null {\r\n let prevHeading = $getNextRightPreorderNode(node)\r\n while (prevHeading !== null && !$isHeadingNode(prevHeading))\r\n prevHeading = $getNextRightPreorderNode(prevHeading)\r\n\r\n return prevHeading\r\n}\r\n\r\nexport function useTableOfContents(editor: LexicalEditor) {\r\n const tableOfContents = ref<Array<TableOfContentsEntry>>([])\r\n // Set table of contents initial state\r\n editor.getEditorState().read(() => {\r\n const root = $getRoot()\r\n const rootChildren = root.getChildren()\r\n for (const child of rootChildren) {\r\n if ($isHeadingNode(child)) {\r\n tableOfContents.value.push([\r\n child.getKey(),\r\n child.getTextContent(),\r\n child.getTag(),\r\n ])\r\n }\r\n }\r\n })\r\n\r\n const removeRootUpdateListener = editor.registerUpdateListener(\r\n ({ editorState, dirtyElements }) => {\r\n editorState.read(() => {\r\n const updateChildHeadings = (node: ElementNode) => {\r\n for (const child of node.getChildren()) {\r\n if ($isHeadingNode(child)) {\r\n const prevHeading = $getPreviousHeading(child)\r\n tableOfContents.value = $updateHeadingPosition(\r\n prevHeading,\r\n child,\r\n tableOfContents.value,\r\n )\r\n }\r\n else if ($isElementNode(child)) {\r\n updateChildHeadings(child)\r\n }\r\n }\r\n }\r\n\r\n // If a node is changes, all child heading positions need to be updated\r\n $getRoot()\r\n .getChildren()\r\n .forEach((node) => {\r\n if ($isElementNode(node) && dirtyElements.get(node.__key))\r\n updateChildHeadings(node)\r\n })\r\n })\r\n },\r\n )\r\n\r\n // Listen to updates to heading mutations and update state\r\n const removeHeaderMutationListener = editor.registerMutationListener(\r\n HeadingNode,\r\n (mutatedNodes: Map<string, NodeMutation>) => {\r\n editor.getEditorState().read(() => {\r\n for (const [nodeKey, mutation] of mutatedNodes) {\r\n if (mutation === 'created') {\r\n const newHeading = $getNodeByKey<HeadingNode>(nodeKey)\r\n if (newHeading !== null) {\r\n const prevHeading = $getPreviousHeading(newHeading)\r\n tableOfContents.value = $insertHeadingIntoTableOfContents(\r\n prevHeading,\r\n newHeading,\r\n tableOfContents.value,\r\n )\r\n }\r\n }\r\n else if (mutation === 'destroyed') {\r\n tableOfContents.value = $deleteHeadingFromTableOfContents(\r\n nodeKey,\r\n tableOfContents.value,\r\n )\r\n }\r\n else if (mutation === 'updated') {\r\n const newHeading = $getNodeByKey<HeadingNode>(nodeKey)\r\n if (newHeading !== null) {\r\n const prevHeading = $getPreviousHeading(newHeading)\r\n tableOfContents.value = $updateHeadingPosition(\r\n prevHeading,\r\n newHeading,\r\n tableOfContents.value,\r\n )\r\n }\r\n }\r\n }\r\n })\r\n },\r\n )\r\n\r\n // Listen to text node mutation updates\r\n const removeTextNodeMutationListener = editor.registerMutationListener(\r\n TextNode,\r\n (mutatedNodes: Map<string, NodeMutation>) => {\r\n editor.getEditorState().read(() => {\r\n for (const [nodeKey, mutation] of mutatedNodes) {\r\n if (mutation === 'updated') {\r\n const currNode = $getNodeByKey(nodeKey)\r\n if (currNode !== null) {\r\n const parentNode = currNode.getParentOrThrow()\r\n if ($isHeadingNode(parentNode)) {\r\n tableOfContents.value = $updateHeadingInTableOfContents(\r\n parentNode,\r\n tableOfContents.value,\r\n )\r\n }\r\n }\r\n }\r\n }\r\n })\r\n },\r\n )\r\n\r\n useMounted(() => mergeRegister(\r\n removeRootUpdateListener,\r\n removeHeaderMutationListener,\r\n removeTextNodeMutationListener,\r\n ))\r\n\r\n return tableOfContents\r\n}\r\n","<script setup lang=\"ts\">\r\nimport { nextTick, onMounted } from 'vue'\r\nimport { useLexicalEditorContext } from '../composables'\r\n\r\nconst props = defineProps<{\r\n defaultSelection?: 'rootStart' | 'rootEnd'\r\n}>()\r\n\r\nconst { editor } = useLexicalEditorContext();\r\n\r\nonMounted(() => {\r\n\r\n nextTick(() => {\r\n editor.focus(() => {\r\n // If we try and move selection to the same point with setBaseAndExtent, it won't\r\n // trigger a re-focus on the element. So in the case this occurs, we'll need to correct it.\r\n // Normally this is fine, Selection API !== Focus API, but fore the intents of the naming\r\n // of this plugin, which should preserve focus too.\r\n const activeElement = document.activeElement\r\n const rootElement = editor.getRootElement() as HTMLDivElement\r\n if (\r\n rootElement !== null\r\n && (activeElement === null || !rootElement.contains(activeElement))\r\n ) {\r\n // Note: preventScroll won't work in Webkit.\r\n rootElement.focus({ preventScroll: true })\r\n }\r\n },\r\n { defaultSelection: props.defaultSelection },\r\n )\r\n })\r\n})\r\n</script>\r\n\r\n<template />\r\n","<script setup lang=\"ts\">\r\nimport { useLexicalEditorContext } from '../composables'\r\nimport type { HistoryState } from '@lexical/history'\r\nimport { computed, unref, watchEffect } from 'vue'\r\n\r\nimport { createEmptyHistoryState, registerHistory } from '@lexical/history'\r\n\r\nconst props = defineProps<{ externalHistoryState?: HistoryState }>()\r\n\r\nconst { editor } = useLexicalEditorContext()\r\n\r\nconst historyState = computed<HistoryState>(() => unref(props.externalHistoryState) || createEmptyHistoryState())\r\n\r\nif(editor){\r\n watchEffect((onInvalidate) => {\r\n onInvalidate(registerHistory(editor, historyState.value, 1000))\r\n })\r\n}\r\n\r\n\r\n\r\n\r\n</script>\r\n\r\n<template />\r\n","<script setup lang=\"ts\">\r\nimport {\r\n $getSelection,\r\n $isRangeSelection,\r\n COMMAND_PRIORITY_EDITOR,\r\n INDENT_CONTENT_COMMAND,\r\n KEY_TAB_COMMAND,\r\n OUTDENT_CONTENT_COMMAND,\r\n} from 'lexical'\r\nimport { useLexicalEditorContext,useMounted } from '../composables'\r\n\r\nconst { editor } = useLexicalEditorContext()\r\n\r\nuseMounted(() => {\r\n return editor.registerCommand<KeyboardEvent>(KEY_TAB_COMMAND,(event) => {\r\n const selection = $getSelection()\r\n\r\n if (!$isRangeSelection(selection))\r\n return false\r\n\r\n event.preventDefault()\r\n\r\n return editor.dispatchCommand(\r\n event.shiftKey ? OUTDENT_CONTENT_COMMAND : INDENT_CONTENT_COMMAND,\r\n undefined,\r\n )\r\n },\r\n COMMAND_PRIORITY_EDITOR,\r\n )\r\n})\r\n</script>\r\n\r\n<template />\r\n","<script setup lang=\"ts\">\r\n\r\nimport {\r\n $getSelection,$isRangeSelection,$isNodeSelection, NodeKey,$isParagraphNode,\r\n $isRootNode,$isTextNode\r\n} from 'lexical'\r\nimport { $isHeadingNode } from '@lexical/rich-text'\r\nimport { useLexicalEditorContext, useMounted,setElementBlockSelection } from '../composables'\r\nimport { ref } from 'vue'\r\nimport { ArrowRightBold } from \"@element-plus/icons-vue\"\r\n\r\nconst { editor } = useLexicalEditorContext()\r\n\r\nconst selectNodeTreeList = ref<Array<{ key:string|NodeKey,name:string,desc?:string,disabled:boolean }>>([{name:\"ROOT\",key:\"root\",disabled:true}]);\r\n\r\nconst createNodeTree = (node?:any)=>{\r\n\r\n let list:any = [];\r\n\r\n if(node){\r\n\r\n let name:string = $isParagraphNode(node) ? \"P\" : (node.getName ? node.getName() : node.getType());\r\n\r\n // 标题\r\n if($isHeadingNode(node)){ name = `${node.getTag()}` }\r\n\r\n list.push({ \r\n key:node.getKey(),\r\n name:name.toUpperCase(),\r\n desc:node.getDesc ? node.getDesc() : undefined,\r\n disabled:$isTextNode(node) || ($isParagraphNode(node) && node.getChildrenSize() <= 0)\r\n })\r\n\r\n if(node.getParent()){\r\n list = list.concat(createNodeTree(node.getParent()))\r\n }\r\n }\r\n\r\n return list;\r\n}\r\n\r\nuseMounted(() => {\r\n\r\n return editor.registerUpdateListener(({ editorState }) => {\r\n\r\n editorState.read(()=>{\r\n\r\n const selection = $getSelection()\r\n\r\n if ($isRangeSelection(selection)) {\r\n selectNodeTreeList.value = createNodeTree(selection.anchor.getNode()).reverse();\r\n }\r\n else if($isNodeSelection(selection)){\r\n selectNodeTreeList.value = createNodeTree(selection.getNodes()[0]).reverse();\r\n }\r\n })\r\n \r\n })\r\n})\r\n\r\n \r\n</script>\r\n\r\n<template>\r\n <div class=\"lexical-editor-node-tree\">\r\n <template v-for=\"item in selectNodeTreeList\" :key=\"item.key\">\r\n <div class=\"item\">\r\n <el-tooltip effect=\"dark\" :content=\"item.desc\" :disabled=\"!item.desc\" placement=\"top\">\r\n <el-button class=\"text\" text :nodeKey=\"item.key\" :disabled=\"item.disabled\" @click=\"setElementBlockSelection(editor,item.key)\">\r\n {{item.name}}\r\n <el-icon class=\"el-icon--right\"><ArrowRightBold /></el-icon>\r\n </el-button>\r\n </el-tooltip>\r\n </div>\r\n </template>\r\n </div>\r\n</template>\r\n<style lang=\"scss\" scoped>\r\n.lexical-editor-node-tree{\r\n display: flex;\r\n align-items: center;\r\n min-height: 30px;\r\n >.item{\r\n display: flex;\r\n align-items: center;\r\n font-size: 14px;\r\n .text{\r\n padding: 5px 5px 5px 7px;\r\n display: flex;\r\n align-items: center;\r\n }\r\n &:last-child .el-icon--right{\r\n display: none;\r\n }\r\n }\r\n}\r\n</style>\r\n","<script setup lang=\"ts\">\r\nimport { \r\n type CommandListenerPriority, $isNodeSelection, $getSelection, $getNodeByKey, SELECTION_CHANGE_COMMAND, \r\n $isTextNode,$isElementNode, $isRangeSelection, $isRootNode, CLICK_COMMAND,$isParagraphNode\r\n} from 'lexical'\r\nimport { mergeRegister } from '@lexical/utils'\r\nimport { \r\n useLexicalEditorContext, useMounted ,\r\n UPDATE_ELEMENTBLOCK_TOOLBAR_POS_COMMAND,\r\n SELECTED_ELEMENTBLOCK_COMMAND,\r\n REMOVE_ELEMENTBLOCK_COMMAND, setElementBlockSelection,\r\n} from '../composables'\r\nimport { $isModuleDecoratorWarpNode,$isModuleDecoratorNode,$isHtmlElementDecoratorNode ,deepCloneNode} from \"../nodes\"\r\nimport { ref, reactive, shallowRef, nextTick } from 'vue'\r\nimport {MKSvgIcon} from \"../../svg-icon\";\r\n\r\n// 点击工具条按钮\r\nconst lowPriority: CommandListenerPriority = 1\r\nconst { editor,stageId,findLexicalEditorModule,shortcutToolsList } = useLexicalEditorContext()\r\nconst selectionMarkPos = ref({ left: \"px\", top: \"0px\",width:\"0\",height:\"0\" });\r\nconst toolbarRef = ref<HTMLDivElement | null>(null)\r\nconst selectPayload = shallowRef<any>(null);\r\nconst toolsPos = reactive({ left: \"px\", top: \"0px\" });\r\nconst showTools = ref(false);\r\nconst showMask = ref(false);\r\nconst a = ref()\r\n\r\n// watch(DEVICE_VIEW_MODE, () => {\r\n// editor.dispatchCommand(UPDATE_ELEMENTBLOCK_TOOLBAR_POS_COMMAND, null);\r\n// })\r\n\r\n// 更新工具条坐标\r\nconst updateToolsPos = () => {\r\n\r\n nextTick(() => {\r\n \r\n if (selectPayload.value != null) {\r\n\r\n const stageIframe = document.body.querySelector(\"#\"+stageId) as HTMLElement;\r\n // const editIframeRect = stageIframe?.getBoundingClientRect();\r\n const editBodyRect = editor.getRootElement()?.getBoundingClientRect();\r\n const selectElement = editor.getElementByKey(selectPayload.value.nodeKey) as HTMLElement\r\n const selectRect = selectElement.getBoundingClientRect();\r\n const selectElComputedStyle = window.getComputedStyle(selectElement);\r\n const selectElMarginTop:number = parseInt(selectElComputedStyle.marginTop)\r\n const selectElMarginLeft:number = parseInt(selectElComputedStyle.marginLeft)\r\n const selectElMarginBottom:number = parseInt(selectElComputedStyle.marginBottom)\r\n const selectElMarginRight:number = parseInt(selectElComputedStyle.marginRight)\r\n\r\n let baseY = (stageIframe?.offsetTop ?? 0)- (editBodyRect?.y ?? 0),\r\n baseX = (stageIframe?.offsetLeft ?? 0)- (editBodyRect?.x ?? 0);\r\n\r\n if(toolbarRef.value != null){\r\n\r\n const toolsRect = toolbarRef.value.getBoundingClientRect();\r\n \r\n // 中心点\r\n toolsPos.top = Math.max(selectRect.y - toolsRect.height - 5 + baseY, 5 + baseY) + \"px\"\r\n toolsPos.left = Math.max(toolsRect.width / -2 + selectRect.x + selectRect.width / 2,0) + \"px\";\r\n }\r\n\r\n // 选中框\r\n selectionMarkPos.value = {\r\n top:`${selectRect.y + baseY - selectElMarginTop}px`,left:`${selectRect.x + baseX - selectElMarginLeft}px`,\r\n width:`${selectRect.width + selectElMarginLeft + selectElMarginRight}px`,height:`${selectRect.height + selectElMarginTop + selectElMarginBottom}px`\r\n };\r\n\r\n }\r\n })\r\n return false;\r\n}\r\n\r\n// 节点标题\r\nconst nodeTitle = ref(\"\")\r\n\r\n// 选中兄弟节点\r\nconst canSelectedNextNode = ref(false);\r\nconst selectedNextNode = ()=>{\r\n const node = editor.getEditorState().read(() => {\r\n return $getNodeByKey(selectPayload.value.nodeKey)\r\n }) as any;\r\n \r\n if(node && node.__next){\r\n setElementBlockSelection(editor,node.__next);\r\n }\r\n}\r\nconst canSelectedPrevNode = ref(false);\r\nconst selectedPrevNode = ()=>{\r\n const node = editor.getEditorState().read(() => {\r\n return $getNodeByKey(selectPayload.value.nodeKey)\r\n }) as any;\r\n \r\n if(node && node.__prev){\r\n setElementBlockSelection(editor,node.__prev);\r\n }\r\n}\r\n// 拷贝插入\r\nconst copyInsert = (action:number)=>{\r\n\r\n\r\n editor.update(() => {\r\n\r\n const selection = $getSelection();\r\n // 当前选中节点\r\n const node = $isNodeSelection(selection) ? selection?.getNodes()[0] : ($isRangeSelection(selection) ? selection.anchor.getNode() : null);\r\n\r\n if(node){\r\n\r\n const oldNode = deepCloneNode(node)\r\n \r\n if(action == -1){\r\n node.insertBefore(oldNode)\r\n }\r\n else{\r\n node.insertAfter(oldNode)\r\n }\r\n }\r\n })\r\n \r\n}\r\n\r\n// 执行 aciton\r\nconst execAction = function(item:any){\r\n editor.update(()=>{\r\n item.action($getNodeByKey(selectPayload.value.nodeKey),editor.getElementByKey(selectPayload.value.nodeKey) )\r\n })\r\n}\r\n\r\nuseMounted(() => {\r\n return mergeRegister(\r\n editor.registerCommand(UPDATE_ELEMENTBLOCK_TOOLBAR_POS_COMMAND, () => updateToolsPos(), lowPriority),\r\n editor.registerUpdateListener(() => setTimeout(()=> updateToolsPos(),50)),\r\n // 点击选中\r\n editor.registerCommand<MouseEvent>(CLICK_COMMAND,(event:MouseEvent) => {\r\n \r\n const el = event.target as HTMLElement;\r\n const nodeKey = el?.getAttribute(\"node-key\");\r\n\r\n // 不为null的话则视为点击选中\r\n if(nodeKey != null){\r\n \r\n event.preventDefault();\r\n\r\n // 暂时不支持使用 shift 建 多选\r\n // if (!event.shiftKey) { \r\n // // 先取消\r\n // clearSelection(editor)\r\n // }\r\n setElementBlockSelection(editor,nodeKey);\r\n return true;\r\n }\r\n \r\n return false;\r\n }, lowPriority),\r\n // 选中元素快\r\n editor.registerCommand(SELECTED_ELEMENTBLOCK_COMMAND, (nodeKey) => {\r\n \r\n if (nodeKey != null) {\r\n\r\n const toolsbarList:any = [];\r\n\r\n const node = $getNodeByKey(nodeKey)\r\n\r\n if(node){\r\n\r\n shortcutToolsList.forEach(item=>{\r\n\r\n if(item.exist(node)){\r\n ((typeof item.tools == \"function\" ? item.tools(nodeKey) : item.tools) as Array<any>).forEach((toolsbar:any)=>{\r\n const index = toolsbarList.findIndex((b:any)=>b.key && toolsbar.key && b.key == toolsbar.key);\r\n if(index >= 0){\r\n toolsbarList.splice(index,1,toolsbar)\r\n }\r\n else{\r\n toolsbarList.push(toolsbar);\r\n }\r\n })\r\n }\r\n })\r\n }\r\n \r\n // 选中的元数据\r\n selectPayload.value = { nodeKey: nodeKey, toolsbars: toolsbarList };\r\n \r\n }\r\n else {\r\n selectPayload.value = null;\r\n }\r\n\r\n return updateToolsPos();\r\n }, lowPriority),\r\n // 删除模块\r\n editor.registerCommand(REMOVE_ELEMENTBLOCK_COMMAND, () => {\r\n\r\n const selection = $getSelection();\r\n\r\n // 当前选中节点\r\n const node = $isNodeSelection(selection) ? selection?.getNodes()[0] : ($isRangeSelection(selection) ? selection.anchor.getNode() : null);\r\n\r\n // 删除\r\n if (node) {\r\n node.remove();\r\n // 没选中\r\n editor.dispatchCommand(SELECTED_ELEMENTBLOCK_COMMAND, null);\r\n return true;\r\n }\r\n return false;\r\n }, lowPriority),\r\n // 选中的话\r\n editor.registerCommand(SELECTION_CHANGE_COMMAND, () => {\r\n\r\n const selection = $getSelection();\r\n\r\n // 当前选中节点\r\n const node = $isNodeSelection(selection) ? selection?.getNodes()[0] : ($isRangeSelection(selection) ? selection.anchor.getNode() : null);\r\n \r\n // 选中节点\r\n if(node){\r\n\r\n\r\n // 节点描述\r\n nodeTitle.value = (node as any).getTitle ? (node as any).getTitle() : \"\";\r\n\r\n // 选中模块 模块描述\r\n if($isModuleDecoratorNode(node)){\r\n const module = findLexicalEditorModule(node.__moduleName);\r\n if(module){ nodeTitle.value = module.title; }\r\n }\r\n\r\n // 根\r\n showTools.value = !$isRootNode(node)\r\n showMask.value = $isHtmlElementDecoratorNode(node);\r\n \r\n \r\n if(node?.__next){\r\n const nextNode = $getNodeByKey(node.__next);\r\n canSelectedNextNode.value = node?.__next ? $isElementNode(nextNode) && !$isParagraphNode(nextNode) : false;\r\n }\r\n else{\r\n canSelectedNextNode.value = false;\r\n }\r\n\r\n if(node?.__prev){\r\n const prevNode = $getNodeByKey(node.__prev);\r\n canSelectedPrevNode.value = node?.__prev ? $isElementNode(prevNode)&& !$isParagraphNode(prevNode) : false;\r\n }\r\n else{\r\n canSelectedPrevNode.value = false;\r\n }\r\n\r\n // 设置选中节点\r\n const nodeKey = node.getKey();\r\n const el = editor.getElementByKey(nodeKey);\r\n \r\n // 文本 p 根 不做选中 空的容器也不允许直接选中 模块容器除外\r\n if(nodeKey && el && !$isRootNode(node) && !$isTextNode(node)){\r\n\r\n if($isElementNode(node) && !$isModuleDecoratorWarpNode(node)){\r\n \r\n if(!node.isEmpty()){\r\n editor.dispatchCommand(SELECTED_ELEMENTBLOCK_COMMAND,nodeKey);\r\n return true;\r\n }\r\n \r\n }\r\n else{\r\n editor.dispatchCommand(SELECTED_ELEMENTBLOCK_COMMAND,nodeKey);\r\n return true;\r\n }\r\n \r\n }\r\n }\r\n nodeTitle.value = \"\";\r\n showTools.value = false;\r\n canSelectedNextNode.value = false;\r\n canSelectedPrevNode.value = false;\r\n editor.dispatchCommand(SELECTED_ELEMENTBLOCK_COMMAND,null);\r\n return false;\r\n },lowPriority)\r\n )\r\n})\r\n\r\n</script>\r\n\r\n<template>\r\n <div v-if=\"selectPayload != null && showTools\" ref=\"toolbarRef\" v-bind=\"$attrs\" class=\"mk-doc-editor-shortcut-tools-warp\" :style=\"toolsPos\">\r\n <el-button-group>\r\n <el-button v-if=\"nodeTitle\" text bg style=\"font-size: 14px;\">{{nodeTitle}}</el-button>\r\n <template v-for=\"item in selectPayload.toolsbars\">\r\n <el-tooltip effect=\"dark\" :content=\"item.title\" placement=\"top\">\r\n <el-button text @click=\"execAction(item)\">\r\n <MKSvgIcon :name=\"item.icon\" />\r\n </el-button>\r\n </el-tooltip>\r\n </template>\r\n <el-tooltip effect=\"dark\" content=\"删除\" placement=\"top\">\r\n <el-button text type=\"danger\" @click=\"editor.dispatchCommand(REMOVE_ELEMENTBLOCK_COMMAND, null)\">\r\n <MKSvgIcon name=\"ep:delete\" />\r\n </el-button>\r\n </el-tooltip>\r\n <el-popover popper-style=\"padding: 10px;width:auto;min-width:50px\">\r\n <template #reference>\r\n <el-button text>\r\n <MKSvgIcon name=\"ep:more-filled\" />\r\n </el-button>\r\n </template>\r\n <el-button-group style=\"display: flex;\">\r\n \r\n <el-tooltip effect=\"dark\" content=\"上一个\" v-if=\"canSelectedPrevNode\" placement=\"top\">\r\n <el-button text @click=\"selectedPrevNode()\">\r\n <MKSvgIcon name=\"ep:caret-left\" />\r\n </el-button>\r\n </el-tooltip>\r\n <el-tooltip effect=\"dark\" content=\"拷贝自己插入到当前快之前\" placement=\"top\">\r\n <el-button text @click=\"copyInsert(-1)\">\r\n <MKSvgIcon name=\"ep:fold\" />\r\n </el-button>\r\n </el-tooltip>\r\n <el-tooltip effect=\"dark\" content=\"拷贝自己插入到当前快之后\" placement=\"top\">\r\n <el-button text @click=\"copyInsert(1)\">\r\n <MKSvgIcon name=\"ep:expand\" />\r\n </el-button>\r\n </el-tooltip>\r\n\r\n <el-tooltip effect=\"dark\" content=\"下一个\" v-if=\"canSelectedNextNode\" placement=\"top\">\r\n <el-button text @click=\"selectedNextNode()\">\r\n <MKSvgIcon name=\"ep:caret-right\" />\r\n </el-button>\r\n </el-tooltip>\r\n </el-button-group>\r\n </el-popover>\r\n </el-button-group>\r\n </div>\r\n <!-- 选中框 showMask -->\r\n <div v-if=\"selectPayload != null\" :style=\"\r\n {\r\n position:'absolute',boxSizing:'border-box',pointerEvents:'none',zIndex:0,outline:'2px solid rgb(131 176 248)',\r\n background:showMask ? '#03a9f417':'transparent',boxShadow: '0 0 10px 2px rgb(131 176 248)',\r\n ...selectionMarkPos\r\n }\r\n \"></div>\r\n</template>\r\n<style scoped lang=\"scss\">\r\n.mk-doc-editor-shortcut-tools-warp{\r\n position: absolute;\r\n z-index: 1;\r\n background-color: rgb(255, 255, 255);\r\n box-shadow: rgb(204, 204, 204) 1px -3px 7px 4px;\r\n padding: 5px;\r\n top: 15px;\r\n left: 494px;\r\n}\r\n\r\n</style>\r\n\r\n","<script setup lang=\"ts\">\r\n\r\nimport { useLexicalEditorState,useLexicalEditorContext } from '../composables'\r\nimport {MKSvgIcon} from \"../../svg-icon\";\r\n\r\nconst props = defineProps({\r\n // doc | richtext | mini\r\n mode:{ type:String,default:\"doc\" }\r\n})\r\n// 上下文\r\nconst { editor,toolbarExtendPlugins } = useLexicalEditorContext();\r\n \r\n\r\nconst { \r\n activeNode,\r\n canUndo,undoCommand,\r\n canRedo,redoCommand,\r\n canTextStyleDisabled,\r\n setTextStyle,\r\n fontFamily,fontfamilyOptoins,\r\n fontSize,fontSizeOptions,\r\n fontColor,bgColor,\r\n canBold,canItalic,canStrikethrough,canUnderline,canSubscript,canSuperscript,\r\n canLink,\r\n alignList,alignValue,\r\n contentTypeList,curContentTypeDesc,setContentType\r\n} = useLexicalEditorState()\r\n\r\n</script>\r\n\r\n<template>\r\n <el-button-group>\r\n <el-button text :disabled=\"!canUndo\" @click=\"undoCommand()\">\r\n <MKSvgIcon name=\"ep:refresh-left\" />\r\n </el-button>\r\n <el-button text :disabled=\"!canRedo\" @click=\"redoCommand()\">\r\n <MKSvgIcon name=\"ep:refresh-right\" />\r\n </el-button>\r\n </el-button-group>\r\n <el-divider direction=\"vertical\" />\r\n <!-- 内容 -->\r\n <el-dropdown max-height=\"300px\">\r\n <el-button text>\r\n {{curContentTypeDesc}} <MKSvgIcon name=\"formkit:arrowdown\" style=\"margin-left: 8px;\" />\r\n </el-button>\r\n <template #dropdown>\r\n <el-dropdown-menu>\r\n <el-dropdown-item :class=\"{active:curContentTypeDesc == item.label}\" v-for=\"item in contentTypeList\" :value=\"item.value\" @click=\"setContentType(item.value)\">\r\n <div style=\"padding: 0 10px;\"> {{item.label}} </div>\r\n </el-dropdown-item>\r\n </el-dropdown-menu>\r\n </template>\r\n </el-dropdown>\r\n <el-divider direction=\"vertical\" /> \r\n <!-- 字体 -->\r\n <el-dropdown max-height=\"300px\" :disabled=\"canTextStyleDisabled\">\r\n <el-button text :style=\"{fontFamily:fontFamily.value}\" :disabled=\"canTextStyleDisabled\">\r\n {{fontFamily.label}} <MKSvgIcon name=\"formkit:arrowdown\" style=\"margin-left: 8px;\" />\r\n </el-button>\r\n <template #dropdown>\r\n <el-dropdown-menu>\r\n <el-dropdown-item :class=\"{active:fontFamily.label == item.label}\" v-for=\"item in fontfamilyOptoins\" :value=\"item.value\" @click=\"setTextStyle('font-family',item.value)\">\r\n <span :style=\"{fontFamily:item.value}\">\r\n {{item.label}}\r\n </span>\r\n </el-dropdown-item>\r\n </el-dropdown-menu>\r\n </template>\r\n </el-dropdown>\r\n <el-divider direction=\"vertical\" /> \r\n <!-- 字体大小 -->\r\n <el-dropdown max-height=\"300px\" :disabled=\"canTextStyleDisabled\">\r\n <el-button text :disabled=\"canTextStyleDisabled\">\r\n {{fontSize}} <MKSvgIcon name=\"formkit:arrowdown\" style=\"margin-left: 8px;\" />\r\n </el-button>\r\n <template #dropdown>\r\n <el-dropdown-menu>\r\n <el-dropdown-item :class=\"{active:fontSize==item.label}\" v-for=\"item in fontSizeOptions\" :value=\"item.value\" @click=\"setTextStyle('font-size',item.value)\">{{item.label}}</el-dropdown-item>\r\n </el-dropdown-menu>\r\n </template>\r\n </el-dropdown>\r\n <el-divider direction=\"vertical\" /> \r\n <!-- 字体颜色 -->\r\n <el-tooltip effect=\"dark\" content=\"文字颜色\">\r\n <el-button text :disabled=\"canTextStyleDisabled\" class=\"font-color\">\r\n <el-color-picker v-model=\"fontColor\" :disabled=\"canTextStyleDisabled\" @change=\"($event:any)=>setTextStyle('color',$event)\" />\r\n </el-button>\r\n </el-tooltip>\r\n \r\n <el-divider direction=\"vertical\" /> \r\n <!-- 背景颜色 -->\r\n <el-tooltip effect=\"dark\" content=\"背景颜色\">\r\n <el-button text :disabled=\"canTextStyleDisabled\" class=\"bg-color\">\r\n <el-color-picker v-model=\"bgColor\" :disabled=\"canTextStyleDisabled\" @change=\"($event:any)=>setTextStyle('background-color',$event)\" />\r\n </el-button>\r\n </el-tooltip>\r\n\r\n <el-divider direction=\"vertical\" />\r\n <el-button-group class=\"font-style\">\r\n <el-button :disabled=\"canTextStyleDisabled\" text :class=\"`${canBold ? 'active' : ''}`\" @click=\"setTextStyle('bold')\">\r\n <MKSvgIcon name=\"mingcute:bold-fill\" />\r\n </el-button>\r\n <el-button :disabled=\"canTextStyleDisabled\" text :class=\"`${canItalic ? 'active' : ''}`\" @click=\"setTextStyle('italic')\">\r\n <MKSvgIcon name=\"mingcute:italic-fill\" />\r\n </el-button>\r\n <el-button :disabled=\"canTextStyleDisabled\" text :class=\"`${canStrikethrough ? 'active' : ''}`\" @click=\"setTextStyle('strikethrough')\">\r\n <MKSvgIcon name=\"mingcute:strikethrough-fill\" />\r\n </el-button>\r\n <el-button :disabled=\"canTextStyleDisabled\" text :class=\"`${canUnderline ? 'active' : ''}`\" @click=\"setTextStyle('underline')\">\r\n <MKSvgIcon name=\"mingcute:underline-fill\" />\r\n </el-button>\r\n <el-button :disabled=\"canTextStyleDisabled\" text :class=\"`${canSubscript ? 'active' : ''}`\" @click=\"setTextStyle('subscript')\">\r\n <MKSvgIcon name=\"material-symbols:subscript\" />\r\n </el-button>\r\n <el-button :disabled=\"canTextStyleDisabled\" text :class=\"`${canSuperscript ? 'active' : ''}`\" @click=\"setTextStyle('superscript')\">\r\n <MKSvgIcon name=\"material-symbols:superscript\" />\r\n </el-button>\r\n </el-button-group>\r\n <el-divider direction=\"vertical\" />\r\n <el-dropdown max-height=\"300px\" :disabled=\"canTextStyleDisabled\">\r\n <el-button text :style=\"{fontFamily:fontFamily.value}\" :disabled=\"canTextStyleDisabled\">\r\n <MKSvgIcon :name=\"`quill:text-${alignValue}`\" style=\"font-size: 18px;\" />\r\n </el-button>\r\n <template #dropdown>\r\n <el-dropdown-menu>\r\n <el-dropdown-item :class=\"{active:alignValue == item}\" v-for=\"item in alignList\" :value=\"item\" @click=\"setTextStyle('align', item)\">\r\n <MKSvgIcon :name=\"`quill:text-${item}`\" style=\"font-size: 18px;\" />\r\n </el-dropdown-item>\r\n </el-dropdown-menu>\r\n </template>\r\n </el-dropdown>\r\n <el-divider direction=\"vertical\" />\r\n <!-- 链接 -->\r\n <el-button-group>\r\n <el-button text :disabled=\"canTextStyleDisabled\" :class=\"`${canLink ? 'active' : ''}`\" @click=\"setTextStyle('link')\">\r\n <MKSvgIcon v-if=\"!canLink\" name=\"tabler:link\" />\r\n <MKSvgIcon v-else name=\"tabler:unlink\" />\r\n </el-button>\r\n </el-button-group>\r\n <el-divider direction=\"vertical\" />\r\n <el-dropdown popper-class=\"lexical-editor-toolsbar-insert-proper\">\r\n <el-button text>\r\n <MKSvgIcon name=\"ep:plus\" style=\"margin-right: 5px;\" /> 插入\r\n </el-button>\r\n <template #dropdown>\r\n <el-dropdown-menu>\r\n <el-dropdown-item v-for=\"item in toolbarExtendPlugins\" :key=\"item\" @click=\"item.action(editor)\" \r\n :disabled=\"item.disbale ? item.disbale(activeNode!) : false\">\r\n <MKSvgIcon :name=\"item.icon\" />\r\n {{item.text}}\r\n </el-dropdown-item>\r\n </el-dropdown-menu>\r\n </template>\r\n </el-dropdown>\r\n \r\n</template>\r\n<style scoped lang=\"scss\">\r\n\r\n ::v-deep.font-color,::v-deep.bg-color{\r\n padding: 0;\r\n margin-left: 0 !important;\r\n .el-color-picker{\r\n height: 30px;\r\n }\r\n .el-color-picker>.el-color-picker__trigger{\r\n border:none;\r\n position: relative;\r\n padding: 0;\r\n box-sizing: border-box;\r\n width: 30px;\r\n height: 30px;\r\n >.el-color-picker__color{\r\n border:0;\r\n position: relative;\r\n .el-color-picker__color-inner{\r\n position: absolute;\r\n height: 3px;\r\n bottom: 2px;\r\n left: 10%;\r\n width: 80%;\r\n outline: 1px solid #ccc;\r\n .el-icon{\r\n display: none;\r\n }\r\n }\r\n }\r\n &::before{\r\n content: \"A\";\r\n font-weight: bold;\r\n font-size: 20px;\r\n position: absolute;\r\n width: 100%;\r\n z-index: 1;\r\n }\r\n }\r\n }\r\n ::v-deep.bg-color{\r\n .el-color-picker>.el-color-picker__trigger{\r\n >.el-color-picker__color{\r\n background-image: linear-gradient(45deg, #f4f4f4 25%, transparent 25%), linear-gradient(-45deg, #f4f4f4 25%, transparent 25%), linear-gradient(45deg, transparent 75%, #f4f4f4 75%), linear-gradient(-45deg, transparent 75%, #f4f4f4 75%);\r\n background-size: 5px 5px;\r\n background-position: 0 0, 0 -10px, -10px 10px, 10px 0px;\r\n // border: #ccc 2px solid;\r\n box-sizing:content-box;\r\n .el-color-picker__color-inner{\r\n height: 100%;\r\n bottom: 0;\r\n left: 0;\r\n width: 100%;\r\n outline: none;\r\n }\r\n }\r\n &::before{\r\n color: #fff;\r\n text-shadow:0 0 3px #555;\r\n }\r\n }\r\n }\r\n .font-style{\r\n .el-button ::v-deep .mk-svg-icon{\r\n font-size: 18px;\r\n }\r\n }\r\n \r\n .el-dropdown .el-button{\r\n padding:8px;\r\n }\r\n .el-button-group{\r\n :button{\r\n font-size: 16px;\r\n padding:8px;\r\n }\r\n }\r\n .el-button.is-text:not(.is-disabled).active {\r\n background-color: var(--el-fill-color);\r\n }\r\n \r\n</style>\r\n<style lang=\"scss\">\r\n .lexical-editor-toolsbar-insert-proper .mk-svg-icon{\r\n font-size: 18px\r\n }\r\n</style>\r\n","\r\n\r\nimport { type DynamicFormItemType } from \"./type\"\r\n\r\n\r\n/**\r\n * 创建默认表单数据\r\n * @param options \r\n */\r\nexport const createDefaultFormData = (options:DynamicFormItemType[]) : any=>{\r\n const data:any = {}; \r\n options.forEach(item=>{ data[item.name] = item.defaultValue })\r\n return data;\r\n}\r\n","\r\nimport { unref,ref,reactive,defineComponent, computed } from 'vue'\r\nimport { \r\n ElButton,ElTabs,ElTabPane,ElInput,ElImage,ElIcon\r\n} from \"element-plus\";\r\nimport { Share,UploadFilled,Picture } from \"@element-plus/icons-vue\";\r\nimport { MsMaterialTable } from \"../../../../modules/ms/dataviews/ms-material\";\r\nimport { MKMaterialList } from \"../../../../modules/ms/components/material-list\";\r\nimport { fileSelect } from \"@maketribe/utils\";\r\n\r\n/**\r\n * 图片预览显示\r\n */\r\nconst ImageView = defineComponent({\r\n props:[\"src\"],\r\n setup(props,{ emit }){\r\n\r\n return ()=>{\r\n\r\n return <ElImage style=\"background: #dedede;width: 100%; height: 480px;margin-top:10px;padding:10px;box-sizing: border-box;\" src={unref(props.src)} fit=\"contain\" v-slots={{\r\n error:()=>{\r\n return <div style=\"\r\n font-size: 50px;\r\n display: flex;\r\n align-content: center;\r\n justify-content: center;\r\n align-items: center;\r\n height: 100%;\r\n \">\r\n <ElIcon><Picture /></ElIcon>\r\n </div>\r\n }\r\n }}>\r\n </ElImage>;\r\n }\r\n }\r\n})\r\n\r\n\r\nexport default defineComponent({\r\n name: 'ImageSelectPanelComponent',\r\n props:[\"modelValue\"],\r\n setup(props,{ emit }){\r\n\r\n const materialTable = reactive(new MsMaterialTable()) as MsMaterialTable;\r\n\r\n const modelValue = computed({\r\n get: () => props.modelValue,\r\n set: (v) => {\r\n emit(\"update:model-value\", v);\r\n },\r\n });\r\n // 激活的tab\r\n const activeTabName = ref(\"l\");\r\n // 选择素材\r\n materialTable.selectionChangeEvent.on(()=>{\r\n let id = materialTable.getSelection()[0];\r\n if(id){\r\n modelValue.value = materialTable.getList().find(item=>item.id == id)?.path;\r\n }\r\n else{\r\n modelValue.value = \"\";\r\n }\r\n })\r\n\r\n // 选择本地图片\r\n const selectLocalImage = async ()=>{\r\n\r\n const file = await fileSelect({ accept:\"image/*\"});\r\n \r\n if (file) {\r\n\r\n const fileRender = new FileReader();\r\n fileRender.onload = async (data:any)=>{\r\n modelValue.value = data.target.result as string;\r\n }\r\n fileRender.readAsDataURL(file)\r\n }\r\n }\r\n\r\n return ()=>{\r\n\r\n return <ElTabs style=\"min-height: 520px\" v-model={activeTabName.value}>\r\n <ElTabPane label=\"本地选择\" name=\"l\">\r\n <ElButton icon={UploadFilled} type=\"primary\" style=\"width: 100%\" onClick={selectLocalImage}>\r\n 选择本地文件\r\n </ElButton>\r\n <ImageView src={unref(modelValue)} />\r\n </ElTabPane>\r\n <ElTabPane label=\"素材库选择\" name=\"m\">\r\n <MKMaterialList style={{height:\"520px\"}} selectable materialTable={materialTable} allowMaterialTypeValues={[1]} />\r\n </ElTabPane>\r\n <ElTabPane label=\"网络图片\" name=\"n\">\r\n <ElInput v-model={modelValue.value} prefix-icon={Share} style=\"width: 100%\" placeholder=\"请输入链接地址\">\r\n </ElInput>\r\n <ImageView src={unref(modelValue)} />\r\n </ElTabPane>\r\n </ElTabs>;\r\n }\r\n }\r\n})\r\n","import { Fragment, ref, h } from \"vue\";\r\nimport { Dialoger } from \"@maketribe/dm\";\r\nimport { ElButton } from \"element-plus\";\r\nimport ImageSelectPanel from \"./image-select-panel\";\r\nimport { ImageCropper } from \"../../../../components/basic/image-cropper\"\r\n\r\nexport type MKImageSelectResult = { success: boolean; path: string; };\r\n\r\nexport default async function ImageSelect(cutWidth?: number, cutHeight?: number, isCut?: boolean): Promise<MKImageSelectResult> {\r\n return new Promise((resolve) => {\r\n\r\n const path = ref<any>(\"\");\r\n\r\n const handleCancelClick = () => {\r\n dialogInstance.destroy();\r\n\r\n resolve({ success: false, path: \"\" });\r\n };\r\n\r\n //裁剪\r\n const handleCutClick = async () => {\r\n\r\n\r\n if (path.value) {\r\n\r\n var result = await ImageCropper({\r\n src: path.value,\r\n ratioOptions: cutWidth && cutHeight ? [\r\n { value: `${cutWidth}*${cutHeight}`, label: `${cutWidth}px*${cutHeight}px`, width: cutWidth, height: cutHeight }\r\n ] : [],\r\n maxWidth: cutWidth || 0,\r\n maxHeight: cutHeight || 0\r\n });\r\n\r\n if (result.data) {\r\n path.value = result.data;\r\n dialogInstance.destroy();\r\n resolve({ success: true, path: path.value });\r\n }\r\n else {\r\n // 取消裁切\r\n\r\n }\r\n }\r\n else {\r\n dialogInstance.destroy();\r\n resolve({ success: true, path: path.value });\r\n }\r\n };\r\n\r\n //原图输出\r\n const handleConfirmClick = async () => {\r\n dialogInstance.destroy();\r\n resolve({ success: true, path: path.value });\r\n };\r\n\r\n\r\n const dialogInstance = Dialoger.customRender({\r\n title: \"图片选择\",\r\n class: \"mk-material-select\",\r\n width: \"70%\",\r\n onClose: () => {\r\n dialogInstance.destroy();\r\n },\r\n body: () => {\r\n return <ImageSelectPanel v-model={path.value} />\r\n },\r\n footer: () => {\r\n return (\r\n <Fragment>\r\n <ElButton onClick={handleCancelClick}>取消</ElButton>\r\n <ElButton type=\"primary\" onClick={handleCutClick}>\r\n 裁切\r\n </ElButton>\r\n <ElButton type=\"primary\" onClick={handleConfirmClick}>\r\n 确定\r\n </ElButton>\r\n </Fragment>\r\n );\r\n },\r\n });\r\n });\r\n}\r\n","import ImageSelect from \"./image-select-api\"\r\n\r\nexport const MKImageSelect = ImageSelect;\r\n\r\nexport default MKImageSelect;\r\n","import { MKImageSelect } from \"../components/image-select\";\r\nimport { UploadContext, UploadResult } from \"../../../components/basic/upload-file\";\r\nimport { base64ToBlob, md5 } from \"@maketribe/utils\";\r\nimport { WebFileUpload } from \"@maketribe/request\";\r\n\r\n\r\n/**\r\n * 图片上传上下文\r\n */\r\nexport class ImageUploadContext extends UploadContext {\r\n cutSise?: string;\r\n\r\n /**\r\n * \r\n * @param cutSise 裁切尺寸 \r\n */\r\n constructor(cutSise?: string) {\r\n super();\r\n this.cutSise = cutSise;\r\n }\r\n\r\n async selectFile(isCut?: boolean): Promise<UploadResult> {\r\n\r\n let cutWidth = 0;\r\n let cutHeight = 0;\r\n\r\n if (this.cutSise) {\r\n let cutInfo = this.cutSise.split(\"*\");\r\n cutWidth = parseInt(cutInfo[0]) || 0;\r\n cutHeight = parseInt(cutInfo[1]) || cutWidth;\r\n }\r\n\r\n \r\n const result = await MKImageSelect(cutWidth, cutHeight, isCut);\r\n\r\n let path: any = result.path;\r\n\r\n // base 64 则上传\r\n if (path && path.indexOf(\"data:image/\") == 0) {\r\n\r\n const webFileUpload = new WebFileUpload();\r\n // 开始上传\r\n const blob = base64ToBlob(path);\r\n\r\n // 上传\r\n const uploadResult = await webFileUpload.upload(\r\n new File([blob], `${md5(Math.random().toString())}.${blob.type.toString().replace(\"image/\", \"\") || \"png\"}`, { type: blob.type })\r\n );\r\n\r\n if (uploadResult.data.code !== 200) {\r\n\r\n return {\r\n success: false, path: \"\", msg: uploadResult.data.msg,\r\n };\r\n }\r\n else {\r\n path = uploadResult.data.data.path;\r\n }\r\n }\r\n\r\n return { success: true, path: path, msg: \"\", };\r\n }\r\n}\r\n","import { defineComponent,resolveComponent,h,ref } from \"vue\"\r\nimport { ElButton,ElForm,ElFormItem,ElCollapse,ElCollapseItem,ElInput } from \"element-plus\";\r\nimport { type DynamicFormItemType } from \"./type\"\r\nimport { ImageUploadContext } from \"../../../modules/ms/image-upload-context\";\r\n\r\nexport default defineComponent({\r\n name:\"DynamicFormPanel\",\r\n props:{\r\n data:{ type:Object },\r\n options:{ type:Array<DynamicFormItemType> }\r\n },\r\n setup:(props,{ emit })=>{\r\n\r\n // 编辑\r\n const dataRef = ref<any>(props.data);\r\n\r\n\r\n return ()=>{\r\n\r\n // 生成的表单项\r\n const formItems = props.options?.filter(item=>{\r\n if(item.condition){\r\n return item.condition(dataRef.value);\r\n }\r\n return true;\r\n }).map(item=>{\r\n\r\n const resloveComponent = typeof item.component == \"string\" ? resolveComponent(item.component) : item.component;\r\n let defaultSlot:any = ()=>[];\r\n\r\n // 特殊处理的组件\r\n if(item.component == \"el-radio-group\"){\r\n defaultSlot = ()=>item.props.data.map((dt:any)=>{\r\n return h(resolveComponent(\"el-radio-button\"),{ label:dt.label, value:dt.value })\r\n })\r\n }\r\n else if(item.component == \"MKUploadImage\"){\r\n if(item.props.cutSize){\r\n item.props.uploadContext = new ImageUploadContext(item.props.cutSize)\r\n }\r\n }\r\n\r\n return h(ElFormItem,{ \r\n label:item.title,prop:item.name,\r\n },{\r\n default:()=>{\r\n return [\r\n h(resloveComponent,{ \r\n ...item.props,\r\n \"modelValue\" : dataRef.value[item.name],\r\n \"onUpdate:modelValue\" : (v:any) => {\r\n dataRef.value[item.name] = v;\r\n }\r\n },{ default:defaultSlot })\r\n ]\r\n }\r\n })\r\n });\r\n\r\n return h(ElForm,{ \r\n labelPosition:\"top\",model:props.data,labelWidth:\"auto\",\r\n style:{ height:\"600px\",overflow:\"auto\",padding:\"10px\" }\r\n },{\r\n default:()=>{\r\n return formItems\r\n }\r\n })\r\n }\r\n }\r\n});\r\n","\r\nimport { h ,type Component,Fragment,reactive } from 'vue'\r\nimport { Dialoger } from '@maketribe/dm'\r\nimport { ElButton,ElForm,ElFormItem,ElCollapse,ElCollapseItem,ElInput } from \"element-plus\";\r\nimport DynamicFormPanel from \"./DynamicFormPanel\"\r\nimport { type DynamicFormItemType } from \"./type\"\r\nimport { createDefaultFormData } from \"./utils\"\r\n\r\n/**\r\n * 显示动态表单弹窗\r\n * @param title 标题\r\n * @param options 表单配置\r\n * @param data 表单数据\r\n * @returns \r\n */\r\nexport const showDynamicFormDialoger = async (title:string,options:DynamicFormItemType[],data:any) => {\r\n return new Promise(resolve => {\r\n\r\n // 是否是新增\r\n const isAdd = data == null;\r\n\r\n // 新增的话\r\n if(isAdd){ \r\n data = createDefaultFormData(options); \r\n }\r\n\r\n // 响应数据\r\n const reactiveData = reactive(data)\r\n\r\n // 取消编辑\r\n const handleCancelClick = () => {\r\n dialogInstance.destroy();\r\n };\r\n\r\n // 确认编辑\r\n const handleConfirmClick = () => {\r\n dialogInstance.destroy();\r\n resolve(data);\r\n };\r\n\r\n const dialogInstance = Dialoger.customRender({\r\n title: isAdd ? `添加${title}` : `编辑${title}`,\r\n class: \"mk-dynamic-form-editor-dialog\",\r\n width: \"700px\",\r\n onClose: () => {\r\n dialogInstance.destroy();\r\n },\r\n body: () => {\r\n return h(DynamicFormPanel,{ data,options })\r\n },\r\n footer: () => {\r\n return h(Fragment,{},[\r\n h(ElButton,{ onClick:()=>handleCancelClick() },{ default:()=>\"取消\" }),\r\n h(ElButton,{ type:\"primary\" , onClick:()=>handleConfirmClick() },{ default:()=>\"确定\" })\r\n ]) \r\n },\r\n });\r\n });\r\n}\r\n\r\n\r\n\r\n","\r\n\r\nimport { $createParagraphNode, $getNodeByKey, $getRoot, $getSelection, $isElementNode, $isNodeSelection, $isParagraphNode, $isRangeSelection, $isRootNode, COMMAND_PRIORITY_LOW, LexicalNode, NodeKey } from \"lexical\";\r\n\r\nimport { DRAG_DROP_PASTE, HeadingNode, QuoteNode } from '@lexical/rich-text'\r\nimport { CodeHighlightNode, CodeNode } from '@lexical/code'\r\nimport { $isLinkNode, $toggleLink, AutoLinkNode, LinkNode, TOGGLE_LINK_COMMAND } from '@lexical/link'\r\nimport { registerEditorPlugin, useLexicalEditorContext } from \"../composables\"\r\nimport { \r\n HtmlElementDecoratorNode,\r\n ModuleDecoratorNode,ModuleDecoratorWarpNode,\r\n HtmlElementNode,\r\n ImageNode,ImageTextWarpNode,\r\n $isImageNode,\r\n $isImageTextWarpNode,\r\n INSERT_IMAGETEXTWARP_COMMAND,\r\n $createImageTextWarpNode,\r\n INSERT_IMAGE_COMMAND,\r\n $createImageNode,\r\n INSERT_MODULE_COMMAND,\r\n ModulePropType,\r\n createModuleHtml,getModuleData,\r\n $isModuleDecoratorNode,\r\n $isModuleDecoratorWarpNode,\r\n INSERT_HTMLTEMPLATE_COMMAND,\r\n INSERT_TEMPLATE_COMMAND\r\n } from \"../nodes\"\r\nimport { $insertNodeToNearestRoot, isMimeType, mediaFileReader, mergeRegister } from \"@lexical/utils\";\r\nimport { generateNodesFromHtml, getCSSFromStyleObject, imageUpload, sanitizeUrl, showHtmlTemplateDialog, showImageEditDialog, showLinkEditDialog, showModuleSelectDialog, showTemplateSelectDialog } from \"../utils\";\r\nimport { ElLoading } from \"element-plus\";\r\nimport { createDefaultFormData, showDynamicFormDialoger } from \"../../dynamic-form-panel\"; \r\n\r\n// 上传处理函数\r\nconst uploadhandle = async (pathList: Array<string>) => {\r\n\r\n if (pathList.length) {\r\n\r\n const loadingInstance = ElLoading.service({ fullscreen: true, text: \"图片上传中...\" })\r\n\r\n const reesult = await Promise.all(pathList.map(path => imageUpload(path)))\r\n\r\n loadingInstance.close();\r\n\r\n return reesult;\r\n }\r\n\r\n return [];\r\n}\r\n\r\n// 插入节点的处理函数\r\nconst insertNodeHandle = (node: LexicalNode,selectNode:LexicalNode) => {\r\n\r\n // 模块\r\n if ($isModuleDecoratorNode(node) && !$isModuleDecoratorWarpNode(node)) {\r\n const moduleWarp = new ModuleDecoratorWarpNode();\r\n moduleWarp.append(node);\r\n node = moduleWarp;\r\n }\r\n\r\n // 图片\r\n if($isImageNode(node)){\r\n const p = $createParagraphNode();\r\n p.append(node)\r\n node = p;\r\n }\r\n if ($isElementNode(selectNode) && !$isParagraphNode(selectNode)) {\r\n selectNode.append(node);\r\n } \r\n else if ($isParagraphNode(selectNode)) {\r\n selectNode.replace(node);\r\n } \r\n else{\r\n $insertNodeToNearestRoot(node);\r\n }\r\n \r\n}\r\n\r\n// 插入节点的处理函数\r\nconst insertNodesHandle = (...nodes: Array<LexicalNode>) => {\r\n\r\n const selection = $getSelection()\r\n let selectNode = $isNodeSelection(selection) ? selection?.getNodes()[0] : ($isRangeSelection(selection) ? selection.anchor.getNode() : $getRoot());\r\n\r\n nodes.forEach(node=> insertNodeHandle(node,selectNode))\r\n\r\n return false;\r\n}\r\n\r\n// 注册插件\r\nregisterEditorPlugin({\r\n nodes:[\r\n AutoLinkNode, LinkNode,\r\n CodeHighlightNode, CodeNode ,\r\n HeadingNode, QuoteNode ,\r\n HtmlElementDecoratorNode,\r\n ModuleDecoratorNode,ModuleDecoratorWarpNode,\r\n HtmlElementNode,\r\n ImageNode,ImageTextWarpNode\r\n ],\r\n tools:[\r\n {\r\n icon: \"Picture\",\r\n text: \"图片\",\r\n action:(editor)=>{\r\n // 显示图片编辑面板\r\n showImageEditDialog({\r\n src: \"\", alt: \"\", width: \"\", height: \"\", maxWidth: \"100%\", maxHeight: \"\", margin: \"\"\r\n }).then(async (data: any) => {\r\n const result = await uploadhandle([data.src])\r\n editor.dispatchCommand(INSERT_IMAGE_COMMAND, { \r\n src:result[0] as string,\r\n alt:data.alt,\r\n style:getCSSFromStyleObject({\r\n \"width\":data.width,\"height\":data.height,\r\n \"max-width\":data.maxWidth,\r\n \"max-height\":data.maxHeight,\"margin\":data.margin\r\n }) \r\n })\r\n });\r\n },\r\n disbale:(node)=>!$isElementNode(node) && !$isRootNode(node) || $isModuleDecoratorWarpNode(node),\r\n sort:99\r\n },\r\n {\r\n icon: \"Grid\",\r\n text: \"模块\",\r\n action:async (editor)=>{\r\n // 打开模块面板\r\n const result = (await showModuleSelectDialog(editor._config.namespace)) as any;\r\n const defaultData = createDefaultFormData(result.options);\r\n editor.dispatchCommand(INSERT_MODULE_COMMAND, { name: result.name, data: defaultData })\r\n }, \r\n disbale:(node)=>!$isElementNode(node) && !$isRootNode(node),\r\n sort:99\r\n },\r\n {\r\n icon:\"richtext\",\r\n text:\"模版\",\r\n action:async (editor)=>{\r\n editor.dispatchCommand(INSERT_TEMPLATE_COMMAND,await showTemplateSelectDialog(editor._config.namespace))\r\n }, \r\n disbale:(node)=>!$isElementNode(node) && !$isRootNode(node) || $isModuleDecoratorWarpNode(node),\r\n sort:99\r\n },\r\n {\r\n icon: \"richtext-outline\",\r\n text: \"图文环绕\",\r\n action:(editor)=>{\r\n editor.dispatchCommand(INSERT_IMAGETEXTWARP_COMMAND,null)\r\n }, \r\n disbale:(node)=>!$isElementNode(node) && !$isRootNode(node) || $isModuleDecoratorWarpNode(node),\r\n sort:99\r\n },\r\n {\r\n icon:\"html-code\",\r\n text:\"HTML模版\",\r\n action:async (editor)=>{\r\n editor.dispatchCommand(INSERT_HTMLTEMPLATE_COMMAND,await showHtmlTemplateDialog())\r\n },\r\n disbale:(node)=>!$isElementNode(node) && !$isRootNode(node) || $isModuleDecoratorWarpNode(node),\r\n sort:89\r\n }\r\n ],\r\n shortcutTools:editor=>{\r\n\r\n const { findLexicalEditorModule } = useLexicalEditorContext(editor._config.namespace)\r\n\r\n return [\r\n // 默认编辑\r\n // {\r\n // exist:(node)=>$isHtmlElementNode(node) || $isHtmlElementDecoratorNode(node),\r\n // tools:[\r\n // {\r\n // key:\"edit\",title: \"编辑\", icon: \"Edit\", action: async (editNode:LexicalNode) => {\r\n // console.log(\"编辑\")\r\n // // // 打开模块面板\r\n // // const result = (await showModuleSelectDialog()) as ModuleType;\r\n // // const defaultData = createDefaultFormData(result.options);\r\n // // // 插入模块\r\n // // editor.dispatchCommand(INSERT_MODULE_COMMAND, { name: result.name, data: defaultData })\r\n // }\r\n // }\r\n // ]\r\n // },\r\n // 超链接\r\n {\r\n exist:(node)=>$isLinkNode(node),\r\n tools:[\r\n {\r\n key:\"edit\",title: \"编辑\", icon: \"Edit\", action: async (editNode:LinkNode) => {\r\n \r\n // 显示图片编辑面板\r\n showLinkEditDialog(editor.read(()=>editNode.getURL())).then((href:any)=>{\r\n if(href.trim()){\r\n editor.update(()=>{\r\n editNode.getWritable().setURL(sanitizeUrl(href))\r\n })\r\n }\r\n else{\r\n editor.dispatchCommand(TOGGLE_LINK_COMMAND, null)\r\n }\r\n })\r\n \r\n }\r\n }\r\n ]\r\n },\r\n // 模块\r\n {\r\n exist:(node)=>$isModuleDecoratorNode(node),\r\n tools:[\r\n {\r\n key:\"edit\",title: \"编辑\", icon: \"Edit\", action: async (editNode:ModuleDecoratorNode) => {\r\n const module = findLexicalEditorModule(editNode.__moduleName);\r\n if(module){\r\n const result = await showDynamicFormDialoger(module.title,module.options,getModuleData(editNode.__moduleHtml,module.options))\r\n editor.update(() => editNode.setHtml(createModuleHtml(module.template,result)))\r\n }\r\n }\r\n }\r\n ]\r\n },\r\n // 图片编辑\r\n {\r\n exist:(node)=>$isImageNode(node),\r\n tools:(nodeKey) => {\r\n \r\n const node = $getNodeByKey(nodeKey as NodeKey);\r\n \r\n if ($isImageNode(node)) {\r\n \r\n const parent = node.getParent();\r\n \r\n // 是否是文本环绕里面的图\r\n const isImageTextWarp = $isImageTextWarpNode(parent)\r\n \r\n // 工具条\r\n const toolbarList:Array<any> = [\r\n {\r\n key:\"edit\",title: \"编辑\", icon: \"Edit\", action: async (editNode:ImageNode) => {\r\n \r\n const {src,alt,style} = { style:editNode.getStyleObj(),src:editNode.__src,alt:editNode.__alt }\r\n \r\n const data: any = await showImageEditDialog({\r\n src, alt, \r\n width: style.width || \"\", height: style.height || \"\", \r\n maxWidth: style[\"max-width\"] || \"\", maxHeight: style[\"max-height\"] || \"\",\r\n margin: style.margin || \"\"\r\n }) \r\n \r\n const result = await uploadhandle([data.src])\r\n \r\n editor.update(()=>{\r\n\r\n node.setSrc(result[0] as string)\r\n node.setAlt(data.alt)\r\n node.addStyle({\r\n \"width\":data.width,\"height\":data.height,\r\n \"max-width\":data.maxWidth,\r\n \"max-height\":data.maxHeight,\r\n \"margin\":data.margin\r\n })\r\n })\r\n }\r\n }\r\n ];\r\n \r\n // 左对齐\r\n if($isParagraphNode(parent) || isImageTextWarp){\r\n toolbarList.push({ title: isImageTextWarp ? \"居左\" : \"左对齐\",icon:`doc-align-left`,action:async (editNode:ImageNode)=>{\r\n editor.update(()=>{\r\n if(isImageTextWarp){\r\n editNode.addStyle({ 'float':\"left\" })\r\n }\r\n else {\r\n parent.setFormat(\"left\")\r\n }\r\n })\r\n }\r\n });\r\n }\r\n \r\n // 居中对齐\r\n if($isParagraphNode(parent) && !isImageTextWarp){\r\n toolbarList.push({ title: \"居中对齐\",icon:`doc-align-center`,action:async ()=>{\r\n editor.update(()=>parent.setFormat(\"center\") )\r\n }\r\n });\r\n }\r\n \r\n // 右对齐\r\n if($isParagraphNode(parent) || isImageTextWarp){\r\n toolbarList.push({ title: isImageTextWarp ? \"居右\" : \"右对齐\",icon:`doc-align-right`,action:async ()=>{\r\n editor.update(()=>{\r\n if(isImageTextWarp){\r\n node.addStyle({ 'float':\"right\" })\r\n }\r\n else {\r\n parent.setFormat(\"right\")\r\n }\r\n })\r\n }\r\n });\r\n }\r\n \r\n return toolbarList;\r\n }\r\n \r\n return null;\r\n }\r\n }\r\n ]\r\n },\r\n templates:[],\r\n useMounted(editor){\r\n \r\n const { findLexicalEditorModule,findLexicalEditorTemplate } = useLexicalEditorContext(editor._config.namespace)\r\n\r\n \r\n // 注册指令\r\n return mergeRegister(\r\n // // 插入布局格子\r\n // editor.registerCommand<LayoutGridNodeAttrType>(INSERT_LAYOUTGRID_COMMAND, (payload) => {\r\n\r\n // insertGridHandle(new LayoutGridNode(payload));\r\n\r\n // return true\r\n // }, COMMAND_PRIORITY_EDITOR),\r\n // // 插入文本格子\r\n // editor.registerCommand<TextGridNodeAttrType>(INSERT_TEXTGRID_COMMAND, (payload) => {\r\n\r\n // const textGrid = new TextGridNode(payload)\r\n // textGrid.append($createParagraphNode())\r\n // textGrid.append($createParagraphNode())\r\n // textGrid.append($createParagraphNode())\r\n // textGrid.append($createParagraphNode())\r\n // textGrid.append($createParagraphNode())\r\n // textGrid.append($createParagraphNode())\r\n // insertGridHandle(textGrid);\r\n\r\n // return true\r\n // }, COMMAND_PRIORITY_EDITOR),\r\n // // 插入模块格子\r\n // editor.registerCommand<ModuleGridNodeAttrType>(INSERT_MODULEGRID_COMMAND, (payload) => {\r\n // insertGridHandle(new ModuleGridNode(payload));\r\n // return true\r\n // }, COMMAND_PRIORITY_EDITOR),\r\n // 插入模块\r\n editor.registerCommand<ModulePropType>(INSERT_MODULE_COMMAND,(payload) => {\r\n\r\n const module = findLexicalEditorModule(payload.name)\r\n\r\n if(module){\r\n insertNodesHandle(new ModuleDecoratorNode(payload.name,createModuleHtml(module.template,payload.data)))\r\n }\r\n \r\n return true\r\n },COMMAND_PRIORITY_LOW),\r\n // 插入图文环绕\r\n editor.registerCommand<null>(INSERT_IMAGETEXTWARP_COMMAND, () => insertNodesHandle($createImageTextWarpNode()), COMMAND_PRIORITY_LOW),\r\n // 插入图片\r\n editor.registerCommand(INSERT_IMAGE_COMMAND, (payload) => {\r\n return insertNodesHandle($createImageNode(payload.src,payload.alt,\"\",payload.style))\r\n }, COMMAND_PRIORITY_LOW),\r\n // 剪切板图片\r\n editor.registerCommand(DRAG_DROP_PASTE, (files) => {\r\n const types = [\r\n 'image/',\r\n 'image/heic',\r\n 'image/heif',\r\n 'image/gif',\r\n 'image/webp',\r\n ];\r\n\r\n (async () => {\r\n\r\n const filesResult = await mediaFileReader(files, [types].flatMap((x) => x))\r\n\r\n const result = await uploadhandle(filesResult.filter(f => isMimeType(f.file, types)).map(f => f.result))\r\n\r\n result.forEach((path) => {\r\n editor.dispatchCommand(INSERT_IMAGE_COMMAND, { src: path as string, alt: \"\", style:\"max-width:100%\"})\r\n })\r\n })()\r\n\r\n return true\r\n }, COMMAND_PRIORITY_LOW),\r\n // 插入模版\r\n editor.registerCommand<string>(INSERT_TEMPLATE_COMMAND,(name) => {\r\n\r\n const template = findLexicalEditorTemplate(name);\r\n \r\n const templateNodes = template ? generateNodesFromHtml(editor, template.template) : [];\r\n \r\n insertNodesHandle(...templateNodes)\r\n \r\n return true\r\n },COMMAND_PRIORITY_LOW),\r\n \r\n // 插入HTML模版\r\n editor.registerCommand<string>(INSERT_HTMLTEMPLATE_COMMAND,(html) => {\r\n\r\n const templateNodes = generateNodesFromHtml(editor, html);\r\n insertNodesHandle(...templateNodes)\r\n \r\n return true\r\n },COMMAND_PRIORITY_LOW),\r\n //链接\r\n editor.registerCommand(TOGGLE_LINK_COMMAND,(payload) => {\r\n if (payload === null) {\r\n $toggleLink(payload)\r\n return true\r\n }\r\n else if (typeof payload === 'string') {\r\n $toggleLink(payload)\r\n return false\r\n }\r\n else {\r\n const { url, target, rel, title } = payload\r\n $toggleLink(url, { rel, target, title })\r\n return true\r\n }\r\n }, COMMAND_PRIORITY_LOW)\r\n );\r\n }\r\n})\r\n","\r\n\r\nimport { mergeRegister } from \"@lexical/utils\";\r\nimport type { TextNode } from 'lexical'\r\nimport { $createHashtagNode, HashtagNode } from '@lexical/hashtag'\r\nimport { registerEditorPlugin } from '../composables'\r\nimport { registerLexicalTextEntity } from \"@lexical/text\";\r\n\r\nfunction getHashtagRegexStringChars(): {\r\n alpha: string\r\n alphanumeric: string\r\n hashChars: string\r\n} {\r\n // Latin accented characters\r\n // Excludes 0xd7 from the range\r\n // (the multiplication sign, confusable with \"x\").\r\n // Also excludes 0xf7, the division sign\r\n const latinAccents\r\n = '\\xC0-\\xD6'\r\n + '\\xD8-\\xF6'\r\n + '\\xF8-\\xFF'\r\n + '\\u0100-\\u024F'\r\n + '\\u0253-\\u0254'\r\n + '\\u0256-\\u0257'\r\n + '\\u0259'\r\n + '\\u025B'\r\n + '\\u0263'\r\n + '\\u0268'\r\n + '\\u026F'\r\n + '\\u0272'\r\n + '\\u0289'\r\n + '\\u028B'\r\n + '\\u02BB'\r\n + '\\u0300-\\u036F'\r\n + '\\u1E00-\\u1EFF'\r\n\r\n // Cyrillic (Russian, Ukrainian, etc.)\r\n const nonLatinChars\r\n = '\\u0400-\\u04FF' // Cyrillic\r\n + '\\u0500-\\u0527' // Cyrillic Supplement\r\n + '\\u2DE0-\\u2DFF' // Cyrillic Extended A\r\n + '\\uA640-\\uA69F' // Cyrillic Extended B\r\n + '\\u0591-\\u05BF' // Hebrew\r\n + '\\u05C1-\\u05C2'\r\n + '\\u05C4-\\u05C5'\r\n + '\\u05C7'\r\n + '\\u05D0-\\u05EA'\r\n + '\\u05F0-\\u05F4'\r\n + '\\uFB12-\\uFB28' // Hebrew Presentation Forms\r\n + '\\uFB2A-\\uFB36'\r\n + '\\uFB38-\\uFB3C'\r\n + '\\uFB3E'\r\n + '\\uFB40-\\uFB41'\r\n + '\\uFB43-\\uFB44'\r\n + '\\uFB46-\\uFB4F'\r\n + '\\u0610-\\u061A' // Arabic\r\n + '\\u0620-\\u065F'\r\n + '\\u066E-\\u06D3'\r\n + '\\u06D5-\\u06DC'\r\n + '\\u06DE-\\u06E8'\r\n + '\\u06EA-\\u06EF'\r\n + '\\u06FA-\\u06FC'\r\n + '\\u06FF'\r\n + '\\u0750-\\u077F' // Arabic Supplement\r\n + '\\u08A0' // Arabic Extended A\r\n + '\\u08A2-\\u08AC'\r\n + '\\u08E4-\\u08FE'\r\n + '\\uFB50-\\uFBB1' // Arabic Pres. Forms A\r\n + '\\uFBD3-\\uFD3D'\r\n + '\\uFD50-\\uFD8F'\r\n + '\\uFD92-\\uFDC7'\r\n + '\\uFDF0-\\uFDFB'\r\n + '\\uFE70-\\uFE74' // Arabic Pres. Forms B\r\n + '\\uFE76-\\uFEFC'\r\n + '\\u200C-\\u200C' // Zero-Width Non-Joiner\r\n + '\\u0E01-\\u0E3A' // Thai\r\n + '\\u0E40-\\u0E4E' // Hangul (Korean)\r\n + '\\u1100-\\u11FF' // Hangul Jamo\r\n + '\\u3130-\\u3185' // Hangul Compatibility Jamo\r\n + '\\uA960-\\uA97F' // Hangul Jamo Extended-A\r\n + '\\uAC00-\\uD7AF' // Hangul Syllables\r\n + '\\uD7B0-\\uD7FF' // Hangul Jamo Extended-B\r\n + '\\uFFA1-\\uFFDC' // Half-width Hangul\r\n\r\n const charCode = String.fromCharCode\r\n\r\n const cjkChars\r\n = '\\u30A1-\\u30FA\\u30FC-\\u30FE' // Katakana (full-width)\r\n + '\\uFF66-\\uFF9F' // Katakana (half-width)\r\n + '\\uFF10-\\uFF19\\uFF21-\\uFF3A'\r\n + '\\uFF41-\\uFF5A' // Latin (full-width)\r\n + '\\u3041-\\u3096\\u3099-\\u309E' // Hiragana\r\n + '\\u3400-\\u4DBF' // Kanji (CJK Extension A)\r\n + `\\u4E00-\\u9FFF${// Kanji (Unified)\r\n // Disabled as it breaks the Regex.\r\n // charCode(0x20000) + '-' + charCode(0x2A6DF) + // Kanji (CJK Extension B)\r\n charCode(0x2A700)\r\n }-${\r\n charCode(0x2B73F) // Kanji (CJK Extension C)\r\n }${charCode(0x2B740)\r\n }-${\r\n charCode(0x2B81F) // Kanji (CJK Extension D)\r\n }${charCode(0x2F800)\r\n }-${\r\n charCode(0x2FA1F)\r\n }\\u3003\\u3005\\u303B` // Kanji (CJK supplement)\r\n\r\n const otherChars = latinAccents + nonLatinChars + cjkChars\r\n\r\n // equivalent of \\p{L}\r\n const unicodeLetters\r\n = '\\u0041-\\u005A\\u0061-\\u007A\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6'\r\n + '\\u00F8-\\u0241\\u0250-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EE\\u037A\\u0386'\r\n + '\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03CE\\u03D0-\\u03F5\\u03F7-\\u0481'\r\n + '\\u048A-\\u04CE\\u04D0-\\u04F9\\u0500-\\u050F\\u0531-\\u0556\\u0559\\u0561-\\u0587'\r\n + '\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0621-\\u063A\\u0640-\\u064A\\u066E-\\u066F'\r\n + '\\u0671-\\u06D3\\u06D5\\u06E5-\\u06E6\\u06EE-\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710'\r\n + '\\u0712-\\u072F\\u074D-\\u076D\\u0780-\\u07A5\\u07B1\\u0904-\\u0939\\u093D\\u0950'\r\n + '\\u0958-\\u0961\\u097D\\u0985-\\u098C\\u098F-\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0'\r\n + '\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC-\\u09DD\\u09DF-\\u09E1\\u09F0-\\u09F1'\r\n + '\\u0A05-\\u0A0A\\u0A0F-\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32-\\u0A33'\r\n + '\\u0A35-\\u0A36\\u0A38-\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D'\r\n + '\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2-\\u0AB3\\u0AB5-\\u0AB9\\u0ABD'\r\n + '\\u0AD0\\u0AE0-\\u0AE1\\u0B05-\\u0B0C\\u0B0F-\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30'\r\n + '\\u0B32-\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C-\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83'\r\n + '\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99-\\u0B9A\\u0B9C\\u0B9E-\\u0B9F'\r\n + '\\u0BA3-\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0C05-\\u0C0C\\u0C0E-\\u0C10'\r\n + '\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C60-\\u0C61\\u0C85-\\u0C8C'\r\n + '\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE'\r\n + '\\u0CE0-\\u0CE1\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D28\\u0D2A-\\u0D39'\r\n + '\\u0D60-\\u0D61\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6'\r\n + '\\u0E01-\\u0E30\\u0E32-\\u0E33\\u0E40-\\u0E46\\u0E81-\\u0E82\\u0E84\\u0E87-\\u0E88'\r\n + '\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7'\r\n + '\\u0EAA-\\u0EAB\\u0EAD-\\u0EB0\\u0EB2-\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6'\r\n + '\\u0EDC-\\u0EDD\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6A\\u0F88-\\u0F8B\\u1000-\\u1021'\r\n + '\\u1023-\\u1027\\u1029-\\u102A\\u1050-\\u1055\\u10A0-\\u10C5\\u10D0-\\u10FA\\u10FC'\r\n + '\\u1100-\\u1159\\u115F-\\u11A2\\u11A8-\\u11F9\\u1200-\\u1248\\u124A-\\u124D'\r\n + '\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0'\r\n + '\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310'\r\n + '\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C'\r\n + '\\u166F-\\u1676\\u1681-\\u169A\\u16A0-\\u16EA\\u1700-\\u170C\\u170E-\\u1711'\r\n + '\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7'\r\n + '\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u1900-\\u191C\\u1950-\\u196D\\u1970-\\u1974'\r\n + '\\u1980-\\u19A9\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1D00-\\u1DBF\\u1E00-\\u1E9B'\r\n + '\\u1EA0-\\u1EF9\\u1F00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D'\r\n + '\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC'\r\n + '\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC'\r\n + '\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u2094\\u2102\\u2107'\r\n + '\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D'\r\n + '\\u212F-\\u2131\\u2133-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u2C00-\\u2C2E'\r\n + '\\u2C30-\\u2C5E\\u2C80-\\u2CE4\\u2D00-\\u2D25\\u2D30-\\u2D65\\u2D6F\\u2D80-\\u2D96'\r\n + '\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6'\r\n + '\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u3005-\\u3006\\u3031-\\u3035'\r\n + '\\u303B-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF'\r\n + '\\u3105-\\u312C\\u3131-\\u318E\\u31A0-\\u31B7\\u31F0-\\u31FF\\u3400-\\u4DB5'\r\n + '\\u4E00-\\u9FBB\\uA000-\\uA48C\\uA800-\\uA801\\uA803-\\uA805\\uA807-\\uA80A'\r\n + '\\uA80C-\\uA822\\uAC00-\\uD7A3\\uF900-\\uFA2D\\uFA30-\\uFA6A\\uFA70-\\uFAD9'\r\n + '\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C'\r\n + '\\uFB3E\\uFB40-\\uFB41\\uFB43-\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F'\r\n + '\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A'\r\n + '\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7'\r\n + '\\uFFDA-\\uFFDC'\r\n\r\n // equivalent of \\p{Mn}\\p{Mc}\r\n const unicodeAccents\r\n = '\\u0300-\\u036F\\u0483-\\u0486\\u0591-\\u05B9\\u05BB-\\u05BD\\u05BF'\r\n + '\\u05C1-\\u05C2\\u05C4-\\u05C5\\u05C7\\u0610-\\u0615\\u064B-\\u065E\\u0670'\r\n + '\\u06D6-\\u06DC\\u06DF-\\u06E4\\u06E7-\\u06E8\\u06EA-\\u06ED\\u0711\\u0730-\\u074A'\r\n + '\\u07A6-\\u07B0\\u0901-\\u0903\\u093C\\u093E-\\u094D\\u0951-\\u0954\\u0962-\\u0963'\r\n + '\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7-\\u09C8\\u09CB-\\u09CD\\u09D7'\r\n + '\\u09E2-\\u09E3\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47-\\u0A48\\u0A4B-\\u0A4D'\r\n + '\\u0A70-\\u0A71\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD'\r\n + '\\u0AE2-\\u0AE3\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B43\\u0B47-\\u0B48\\u0B4B-\\u0B4D'\r\n + '\\u0B56-\\u0B57\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7'\r\n + '\\u0C01-\\u0C03\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55-\\u0C56'\r\n + '\\u0C82-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5-\\u0CD6'\r\n + '\\u0D02-\\u0D03\\u0D3E-\\u0D43\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D82-\\u0D83'\r\n + '\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2-\\u0DF3\\u0E31\\u0E34-\\u0E3A'\r\n + '\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EB9\\u0EBB-\\u0EBC\\u0EC8-\\u0ECD\\u0F18-\\u0F19'\r\n + '\\u0F35\\u0F37\\u0F39\\u0F3E-\\u0F3F\\u0F71-\\u0F84\\u0F86-\\u0F87\\u0F90-\\u0F97'\r\n + '\\u0F99-\\u0FBC\\u0FC6\\u102C-\\u1032\\u1036-\\u1039\\u1056-\\u1059\\u135F'\r\n + '\\u1712-\\u1714\\u1732-\\u1734\\u1752-\\u1753\\u1772-\\u1773\\u17B6-\\u17D3\\u17DD'\r\n + '\\u180B-\\u180D\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u19B0-\\u19C0\\u19C8-\\u19C9'\r\n + '\\u1A17-\\u1A1B\\u1DC0-\\u1DC3\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20EB\\u302A-\\u302F'\r\n + '\\u3099-\\u309A\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uFB1E\\uFE00-\\uFE0F'\r\n + '\\uFE20-\\uFE23'\r\n\r\n // equivalent of \\p{Dn}\r\n const unicodeDigits\r\n = '\\u0030-\\u0039\\u0660-\\u0669\\u06F0-\\u06F9\\u0966-\\u096F\\u09E6-\\u09EF'\r\n + '\\u0A66-\\u0A6F\\u0AE6-\\u0AEF\\u0B66-\\u0B6F\\u0BE6-\\u0BEF\\u0C66-\\u0C6F'\r\n + '\\u0CE6-\\u0CEF\\u0D66-\\u0D6F\\u0E50-\\u0E59\\u0ED0-\\u0ED9\\u0F20-\\u0F29'\r\n + '\\u1040-\\u1049\\u17E0-\\u17E9\\u1810-\\u1819\\u1946-\\u194F\\u19D0-\\u19D9'\r\n + '\\uFF10-\\uFF19'\r\n // An alpha char is a unicode chars including unicode marks or\r\n // letter or char in otherChars range\r\n const alpha = unicodeLetters + unicodeAccents + otherChars\r\n // A numeric character is any with the number digit property, or\r\n // underscore. These characters can be included in hashtags, but a hashtag\r\n // cannot have only these characters.\r\n const numeric = `${unicodeDigits}_`\r\n // Alphanumeric char is any alpha char or a unicode char with decimal\r\n // number property \\p{Nd}\r\n const alphanumeric = alpha + numeric\r\n\r\n const hashChars = '#\\\\uFF03' // normal '#' or full-width '#'\r\n\r\n return {\r\n alpha,\r\n alphanumeric,\r\n hashChars,\r\n }\r\n}\r\n\r\nfunction getHashtagRegexString(): string {\r\n const { alpha, alphanumeric, hashChars } = getHashtagRegexStringChars()\r\n\r\n const hashtagAlpha = `[${alpha}]`\r\n const hashtagAlphanumeric = `[${alphanumeric}]`\r\n const hashtagBoundary = `^|$|[^&/${alphanumeric}]`\r\n const hashCharList = `[${hashChars}]`\r\n\r\n // A hashtag contains characters, numbers and underscores,\r\n // but not all numbers.\r\n const hashtag\r\n = `(${\r\n hashtagBoundary\r\n })(${\r\n hashCharList\r\n })(${\r\n hashtagAlphanumeric\r\n }*${\r\n hashtagAlpha\r\n }${hashtagAlphanumeric\r\n }*)`\r\n\r\n return hashtag\r\n}\r\n\r\nconst REGEX = new RegExp(getHashtagRegexString(), 'i')\r\n\r\n\r\nfunction createHashtagNode(textNode: TextNode) {\r\n return $createHashtagNode(textNode.getTextContent())\r\n}\r\n\r\nfunction getHashtagMatch(text: string) {\r\n const matchArr = REGEX.exec(text)\r\n if (matchArr === null)\r\n return null\r\n\r\n const hashtagLength = matchArr[3].length + 1\r\n const startOffset = matchArr.index + matchArr[1].length\r\n const endOffset = startOffset + hashtagLength\r\n return { end: endOffset, start: startOffset }\r\n}\r\n\r\n\r\n// 注册插件\r\nregisterEditorPlugin({\r\n nodes:[HashtagNode],\r\n tools:[],\r\n templates:[],\r\n useMounted(editor){\r\n\r\n if (!editor.hasNodes([HashtagNode])){\r\n throw new Error(\"HashtagPlugin: HashtagNode not registered on editor\");\r\n }\r\n\r\n // 注册事件\r\n return mergeRegister( ...registerLexicalTextEntity(editor, getHashtagMatch, HashtagNode, createHashtagNode),);\r\n }\r\n})\r\n","\r\n\r\nimport {\r\n $handleListInsertParagraph,\r\n INSERT_ORDERED_LIST_COMMAND,\r\n INSERT_UNORDERED_LIST_COMMAND,\r\n REMOVE_LIST_COMMAND,\r\n // insertList,\r\n removeList,\r\n ListItemNode, ListNode,\r\n $createListNode,\r\n $isListItemNode,\r\n $createListItemNode,\r\n} from '@lexical/list'\r\nimport { $insertNodeToNearestRoot, mergeRegister } from '@lexical/utils'\r\nimport { $getSelection, $isElementNode, $isNodeSelection, $isParagraphNode, $isRangeSelection, $isRootNode, $isTextNode, COMMAND_PRIORITY_LOW, ElementNode, INSERT_PARAGRAPH_COMMAND, LexicalEditor, LexicalNode } from 'lexical'\r\nimport { registerEditorPlugin } from '../composables'\r\nimport { $isModuleDecoratorWarpNode } from '../nodes'\r\n\r\n// 插入节点的处理函数\r\nexport const insertListNode= (listType:any) => {\r\n\r\n const selection = $getSelection()\r\n const list = $createListNode(listType);\r\n const listItem = $createListItemNode();\r\n\r\n let elementNode = $isNodeSelection(selection) ? selection?.getNodes()[0] : ($isRangeSelection(selection) ? selection.anchor.getNode() : null);\r\n\r\n \r\n // 文本则做特殊处理\r\n if($isTextNode(elementNode)){\r\n elementNode = elementNode.getParent() as ElementNode;\r\n }\r\n \r\n if($isParagraphNode(elementNode)){\r\n listItem.splice(elementNode.getChildrenSize(), 0, elementNode.getChildren());\r\n list.append(listItem);\r\n elementNode.replace(list);\r\n }\r\n else if ($isListItemNode(elementNode)) {\r\n const parent = elementNode.getParentOrThrow();\r\n parent.append()\r\n list.append(...parent.getChildren())\r\n list.append(listItem);\r\n parent.replace(list);\r\n }\r\n else if($isElementNode(elementNode)){\r\n list.append(listItem);\r\n elementNode.append(list);\r\n }\r\n else {\r\n list.append(listItem);\r\n $insertNodeToNearestRoot(list)\r\n }\r\n return false;\r\n}\r\n\r\n// 注册插件\r\nregisterEditorPlugin({\r\n nodes:[ListNode,ListItemNode],\r\n tools:[\r\n {\r\n icon: \"doc-list-bullet\",\r\n text: \"无序列表\",\r\n action:(editor)=>{\r\n editor.dispatchCommand(INSERT_UNORDERED_LIST_COMMAND,undefined)\r\n },\r\n disbale:(node)=>!$isElementNode(node) && !$isTextNode(node) && !$isRootNode(node) || $isModuleDecoratorWarpNode(node),\r\n sort:99\r\n },\r\n {\r\n icon: \"doc-list-number\",\r\n text: \"数字列表\",\r\n action:(editor)=>{\r\n editor.dispatchCommand(INSERT_ORDERED_LIST_COMMAND,undefined)\r\n },\r\n disbale:(node)=>!$isElementNode(node) && !$isTextNode(node) && !$isRootNode(node) || $isModuleDecoratorWarpNode(node),\r\n sort:99\r\n }\r\n ],\r\n templates:[],\r\n useMounted(editor){\r\n \r\n // 注册事件\r\n return mergeRegister(\r\n editor.registerCommand(INSERT_ORDERED_LIST_COMMAND,() => {\r\n insertListNode('number')\r\n return true\r\n },COMMAND_PRIORITY_LOW),\r\n editor.registerCommand(INSERT_UNORDERED_LIST_COMMAND,() => {\r\n insertListNode('bullet')\r\n return true\r\n },COMMAND_PRIORITY_LOW),\r\n editor.registerCommand(REMOVE_LIST_COMMAND,() => {\r\n removeList(editor)\r\n return true\r\n },COMMAND_PRIORITY_LOW,),\r\n editor.registerCommand(INSERT_PARAGRAPH_COMMAND,() => {\r\n return !!$handleListInsertParagraph()\r\n },COMMAND_PRIORITY_LOW)\r\n );\r\n }\r\n})\r\n","\r\n\r\nimport type { ListItemNode } from '@lexical/list'\r\nimport {\r\n $getNearestNodeFromDOMNode,\r\n $getSelection,\r\n $isElementNode,\r\n $isRangeSelection,\r\n COMMAND_PRIORITY_LOW,\r\n KEY_ARROW_DOWN_COMMAND,\r\n KEY_ARROW_LEFT_COMMAND,\r\n KEY_ARROW_UP_COMMAND,\r\n KEY_ESCAPE_COMMAND,\r\n KEY_SPACE_COMMAND,\r\n} from 'lexical'\r\nimport type { LexicalEditor } from 'lexical'\r\n\r\nimport {\r\n $isListItemNode,\r\n $isListNode,\r\n INSERT_CHECK_LIST_COMMAND,\r\n insertList,\r\n} from '@lexical/list'\r\nimport { $findMatchingParent, mergeRegister } from '@lexical/utils'\r\nimport { registerClickAndPointerListeners } from '../composables'\r\nimport { registerEditorPlugin } from \"../composables\"\r\n\r\nfunction listenPointerDown() {\r\n return registerClickAndPointerListeners(() => {\r\n // @ts-expect-error: speculation ambiguous\r\n document.addEventListener('click', handleClick)\r\n document.addEventListener('pointerdown', handlePointerDown)\r\n }, () => {\r\n // @ts-expect-error: speculation ambiguous\r\n document.removeEventListener('click', handleClick)\r\n document.removeEventListener('pointerdown', handlePointerDown)\r\n })\r\n}\r\n\r\nfunction handleCheckItemEvent(event: PointerEvent, callback: () => void) {\r\n const target = event.target\r\n if (!(target instanceof HTMLElement))\r\n return\r\n\r\n // Ignore clicks on LI that have nested lists\r\n // @ts-expect-error: internal field\r\n const firstChild: HTMLElement | null = target.firstChild\r\n if (\r\n firstChild != null\r\n && (firstChild.tagName === 'UL' || firstChild.tagName === 'OL')\r\n ) {\r\n return\r\n }\r\n\r\n const parentNode = target.parentNode\r\n // @ts-expect-error: Internal field\r\n if (!parentNode || parentNode.__lexicalListType !== 'check')\r\n return\r\n\r\n const pageX = event.pageX\r\n const rect = target.getBoundingClientRect()\r\n\r\n if (\r\n target.dir === 'rtl'\r\n ? pageX < rect.right && pageX > rect.right - 20\r\n : pageX > rect.left && pageX < rect.left + 20\r\n ) {\r\n callback()\r\n }\r\n}\r\n\r\nfunction handleClick(event: PointerEvent) {\r\n handleCheckItemEvent(event as PointerEvent, () => {\r\n const domNode = event.target as HTMLElement\r\n const editor = findEditor(domNode)\r\n\r\n if (editor !== null) {\r\n editor.update(() => {\r\n const node = $getNearestNodeFromDOMNode(domNode)\r\n if ($isListItemNode(node!)) {\r\n domNode.focus()\r\n node.toggleChecked()\r\n }\r\n })\r\n }\r\n })\r\n}\r\n\r\nfunction handlePointerDown(event: PointerEvent) {\r\n handleCheckItemEvent(event, () => {\r\n // Prevents caret moving when clicking on check mark\r\n event.preventDefault()\r\n })\r\n}\r\n\r\nfunction findEditor(target: Node) {\r\n let node: ParentNode | Node | null = target\r\n\r\n while (node) {\r\n // @ts-expect-error internal field\r\n if (node.__lexicalEditor)\r\n // @ts-expect-error internal field\r\n return (node.__lexicalEditor)\r\n\r\n node = node.parentNode\r\n }\r\n return null\r\n}\r\n\r\nfunction getActiveCheckListItem(): HTMLElement | Element | null {\r\n const { activeElement } = document\r\n return activeElement !== null\r\n && activeElement.tagName === 'LI'\r\n && activeElement.parentNode !== null\r\n // @ts-expect-error: internal field missing\r\n && activeElement.parentNode.__lexicalListType === 'check'\r\n ? activeElement\r\n : null\r\n}\r\n\r\nfunction findCheckListItemSibling(\r\n node: ListItemNode,\r\n backward: boolean,\r\n): ListItemNode | null {\r\n let sibling = backward ? node.getPreviousSibling() : node.getNextSibling()\r\n let parent = node\r\n // Going up in a tree to get non-null sibling\r\n while (sibling == null && $isListItemNode(parent)) {\r\n // Get li -> parent ul/ol -> parent li\r\n parent = parent.getParentOrThrow().getParent() as ListItemNode\r\n if (parent !== null) {\r\n sibling = backward\r\n ? parent.getPreviousSibling()\r\n : parent.getNextSibling()\r\n }\r\n }\r\n\r\n // Going down in a tree to get first non-nested list item\r\n while ($isListItemNode(sibling!)) {\r\n const firstChild = backward\r\n ? sibling.getLastChild()\r\n : sibling.getFirstChild()\r\n if (!$isListNode(firstChild!))\r\n return sibling\r\n\r\n sibling = backward ? firstChild.getLastChild() : firstChild.getFirstChild()\r\n }\r\n\r\n return null\r\n}\r\n\r\nfunction handleArrownUpOrDown( \r\n event: KeyboardEvent,\r\n editor: LexicalEditor,\r\n backward: boolean,\r\n) {\r\n const activeItem = getActiveCheckListItem()\r\n\r\n if (activeItem != null) {\r\n editor.update(() => {\r\n const listItem = $getNearestNodeFromDOMNode(activeItem)\r\n if (!$isListItemNode(listItem!))\r\n return\r\n\r\n const nextListItem = findCheckListItemSibling(listItem, backward)\r\n if (nextListItem != null) {\r\n nextListItem.selectStart()\r\n const dom = editor.getElementByKey(nextListItem.__key)\r\n if (dom != null) {\r\n event.preventDefault()\r\n setTimeout(() => {\r\n dom.focus()\r\n }, 0)\r\n }\r\n }\r\n })\r\n }\r\n\r\n return false\r\n}\r\n\r\n// 注册插件\r\nregisterEditorPlugin({\r\n nodes:[\r\n \r\n ],\r\n tools:[\r\n \r\n ],\r\n templates:[],\r\n useMounted(editor){\r\n \r\n // 注册指令\r\n return mergeRegister(\r\n editor.registerCommand(INSERT_CHECK_LIST_COMMAND,\r\n () => {\r\n insertList(editor, 'check')\r\n return true\r\n },\r\n COMMAND_PRIORITY_LOW,\r\n ),\r\n editor.registerCommand(\r\n KEY_ARROW_DOWN_COMMAND,\r\n (event) => {\r\n return handleArrownUpOrDown(event, editor, false)\r\n },\r\n COMMAND_PRIORITY_LOW,\r\n ),\r\n editor.registerCommand(\r\n KEY_ARROW_UP_COMMAND,\r\n (event) => {\r\n return handleArrownUpOrDown(event, editor, true)\r\n },\r\n COMMAND_PRIORITY_LOW,\r\n ),\r\n editor.registerCommand(\r\n KEY_ESCAPE_COMMAND,\r\n (_event) => {\r\n const activeItem = getActiveCheckListItem()\r\n if (activeItem != null) {\r\n const rootElement = editor.getRootElement()\r\n if (rootElement != null)\r\n rootElement.focus()\r\n \r\n return true\r\n }\r\n return false\r\n },\r\n COMMAND_PRIORITY_LOW,\r\n ),\r\n editor.registerCommand(KEY_SPACE_COMMAND,(event) => {\r\n const activeItem = getActiveCheckListItem()\r\n if (activeItem != null) {\r\n editor.update(() => {\r\n const listItemNode = $getNearestNodeFromDOMNode(activeItem)\r\n if ($isListItemNode(listItemNode!)) {\r\n event.preventDefault()\r\n listItemNode.toggleChecked()\r\n }\r\n })\r\n return true\r\n }\r\n return false\r\n },\r\n COMMAND_PRIORITY_LOW,\r\n ),\r\n editor.registerCommand(KEY_ARROW_LEFT_COMMAND,(event) => {\r\n return editor.getEditorState().read(() => {\r\n const selection = $getSelection()\r\n if ($isRangeSelection(selection) && selection.isCollapsed()) {\r\n const { anchor } = selection\r\n const isElement = anchor.type === 'element'\r\n if (isElement || anchor.offset === 0) {\r\n const anchorNode = anchor.getNode()\r\n const elementNode = $findMatchingParent(\r\n anchorNode,\r\n node => $isElementNode(node) && !node.isInline(),\r\n )\r\n \r\n if ($isListItemNode(elementNode)) {\r\n const parent = elementNode.getParent()\r\n if (\r\n $isListNode(parent)\r\n && parent.getListType() === 'check'\r\n && (isElement\r\n || elementNode.getFirstDescendant() === anchorNode)\r\n ) {\r\n const domNode = editor.getElementByKey(elementNode.__key)\r\n \r\n if (domNode != null && document.activeElement !== domNode) {\r\n domNode.focus()\r\n event.preventDefault()\r\n return true\r\n }\r\n }\r\n }\r\n }\r\n }\r\n \r\n return false\r\n })\r\n },\r\n COMMAND_PRIORITY_LOW,\r\n ),\r\n listenPointerDown(),\r\n );\r\n }\r\n})\r\n","\r\n\r\nimport type {\r\n HTMLTableElementWithWithTableSelectionState,\r\n InsertTableCommandPayload,\r\n TableObserver,\r\n} from '@lexical/table'\r\nimport {\r\n $computeTableMap,\r\n $createTableCellNode,\r\n $createTableNodeWithDimensions,\r\n $getNodeTriplet,\r\n $isTableCellNode,\r\n $isTableNode,\r\n $isTableRowNode,\r\n INSERT_TABLE_COMMAND,\r\n TableCellNode,\r\n TableNode,\r\n TableRowNode,\r\n applyTableHandlers,\r\n} from '@lexical/table'\r\nimport { $insertFirst, $insertNodeToNearestRoot, mergeRegister } from '@lexical/utils'\r\nimport type {\r\n NodeKey,\r\n} from 'lexical'\r\nimport {\r\n $getNodeByKey,\r\n $isTextNode,\r\n $nodesOfType,\r\n COMMAND_PRIORITY_EDITOR,\r\n} from 'lexical'\r\n\r\nimport { useEffect, registerEditorPlugin } from '../composables'\r\n\r\n// 注册插件\r\nregisterEditorPlugin({\r\n nodes:[TableCellNode, TableNode, TableRowNode],\r\n tools:[],\r\n templates:[],\r\n useMounted(editor){\r\n\r\n if (!editor.hasNodes([TableNode, TableCellNode, TableRowNode])) {\r\n throw new Error('TablePlugin: TableNode, TableCellNode or TableRowNode not registered on editor')\r\n }\r\n\r\n // Unmerge cells when the feature isn't enabled\r\n useEffect(() => {\r\n return editor.registerNodeTransform(TableCellNode, (node) => {\r\n if (node.getColSpan() > 1 || node.getRowSpan() > 1) {\r\n // When we have rowSpan we have to map the entire Table to understand where the new Cells\r\n // fit best; let's analyze all Cells at once to save us from further transform iterations\r\n const [, , gridNode] = $getNodeTriplet(node)\r\n const [gridMap] = $computeTableMap(gridNode, node, node)\r\n // TODO this function expects Tables to be normalized. Look into this once it exists\r\n const rowsCount = gridMap.length\r\n const columnsCount = gridMap[0].length\r\n let row = gridNode.getFirstChild()\r\n\r\n if(!$isTableRowNode(row)){\r\n throw new Error(\"Expected TableNode first child to be a RowNode\")\r\n }\r\n\r\n const unmerged:any[] = []\r\n for (let i = 0; i < rowsCount; i++) {\r\n if (i !== 0) {\r\n\r\n row = row.getNextSibling()\r\n\r\n if(!$isTableRowNode(row)){\r\n throw new Error(\"Expected TableNode first child to be a RowNode\")\r\n }\r\n \r\n }\r\n let lastRowCell: null | TableCellNode = null\r\n for (let j = 0; j < columnsCount; j++) {\r\n const cellMap = gridMap[i][j]\r\n const cell = cellMap.cell\r\n if (cellMap.startRow === i && cellMap.startColumn === j) {\r\n lastRowCell = cell\r\n unmerged.push(cell)\r\n }\r\n else if (cell.getColSpan() > 1 || cell.getRowSpan() > 1) {\r\n\r\n if(!$isTableCellNode(cell)){\r\n throw new Error(\"Expected TableNode cell to be a TableCellNode\")\r\n }\r\n \r\n const newCell = $createTableCellNode(cell.__headerState)\r\n if (lastRowCell !== null)\r\n lastRowCell.insertAfter(newCell)\r\n else\r\n $insertFirst(row, newCell)\r\n }\r\n }\r\n }\r\n for (const cell of unmerged) {\r\n cell.setColSpan(1)\r\n cell.setRowSpan(1)\r\n }\r\n }\r\n })\r\n })\r\n\r\n useEffect(() => {\r\n return editor.registerNodeTransform(TableCellNode, (node) => {\r\n if (node.getBackgroundColor() !== null)\r\n node.setBackgroundColor(null)\r\n })\r\n })\r\n\r\n const tableSelections = new Map<NodeKey, TableObserver>()\r\n\r\n const initializeTableNode = (tableNode: TableNode) => {\r\n\r\n const nodeKey = tableNode.getKey()\r\n\r\n const tableElement = editor.getElementByKey(\r\n nodeKey,\r\n ) as HTMLTableElementWithWithTableSelectionState\r\n\r\n if (tableElement && !tableSelections.has(nodeKey)) {\r\n tableSelections.set(nodeKey, applyTableHandlers(tableNode, tableElement,editor,true))\r\n }\r\n }\r\n \r\n // Plugins might be loaded _after_ initial content is set, hence existing table nodes\r\n // won't be initialized from mutation[create] listener. Instead doing it here,\r\n editor.getEditorState().read(() => {\r\n const tableNodes = $nodesOfType(TableNode)\r\n for (const tableNode of tableNodes) {\r\n if ($isTableNode(tableNode))\r\n initializeTableNode(tableNode)\r\n }\r\n })\r\n \r\n const unregisterMutationListener = editor.registerMutationListener(\r\n TableNode,\r\n (nodeMutations) => {\r\n for (const [nodeKey, mutation] of nodeMutations) {\r\n if (mutation === 'created') {\r\n editor.getEditorState().read(() => {\r\n const tableNode = $getNodeByKey<TableNode>(nodeKey)\r\n if ($isTableNode(tableNode))\r\n initializeTableNode(tableNode)\r\n })\r\n }\r\n else if (mutation === 'destroyed') {\r\n const tableSelection = tableSelections.get(nodeKey)\r\n \r\n if (tableSelection !== undefined) {\r\n tableSelection.removeListeners()\r\n tableSelections.delete(nodeKey)\r\n }\r\n }\r\n }\r\n },\r\n )\r\n \r\n // 注册事件\r\n return mergeRegister(\r\n editor.registerCommand<InsertTableCommandPayload>(INSERT_TABLE_COMMAND,({ columns, rows, includeHeaders }) => {\r\n\r\n const tableNode = $createTableNodeWithDimensions(\r\n Number(rows),\r\n Number(columns),\r\n includeHeaders,\r\n );\r\n\r\n $insertNodeToNearestRoot(tableNode)\r\n \r\n const firstDescendant = tableNode.getFirstDescendant();\r\n\r\n if ($isTextNode(firstDescendant)){ firstDescendant.select() }\r\n \r\n return true\r\n },COMMAND_PRIORITY_EDITOR),\r\n () => {\r\n unregisterMutationListener()\r\n // Hook might be called multiple times so cleaning up tables listeners as well,\r\n // as it'll be reinitialized during recurring call\r\n for (const [, tableSelection] of tableSelections)\r\n tableSelection.removeListeners()\r\n }\r\n );\r\n }\r\n})\r\n","/**\r\n * Copyright (c) Meta Platforms, Inc. and affiliates.\r\n *\r\n * This source code is licensed under the MIT license found in the\r\n * LICENSE file in the root directory of this source tree.\r\n *\r\n */\r\n\r\nimport type { EditorThemeClasses } from 'lexical'\r\n\r\nconst theme: EditorThemeClasses = {\r\n blockCursor: 'mk-doc__blockCursor',\r\n characterLimit: 'mk-doc__characterLimit',\r\n code: 'mk-doc__code',\r\n codeHighlight: {\r\n 'atrule': 'mk-doc__tokenAttr',\r\n 'attr': 'mk-doc__tokenAttr',\r\n 'boolean': 'mk-doc__tokenProperty',\r\n 'builtin': 'mk-doc__tokenSelector',\r\n 'cdata': 'mk-doc__tokenComment',\r\n 'char': 'mk-doc__tokenSelector',\r\n 'class': 'mk-doc__tokenFunction',\r\n 'class-name': 'mk-doc__tokenFunction',\r\n 'comment': 'mk-doc__tokenComment',\r\n 'constant': 'mk-doc__tokenProperty',\r\n 'deleted': 'mk-doc__tokenProperty',\r\n 'doctype': 'mk-doc__tokenComment',\r\n 'entity': 'mk-doc__tokenOperator',\r\n 'function': 'mk-doc__tokenFunction',\r\n 'important': 'mk-doc__tokenVariable',\r\n 'inserted': 'mk-doc__tokenSelector',\r\n 'keyword': 'mk-doc__tokenAttr',\r\n 'namespace': 'mk-doc__tokenVariable',\r\n 'number': 'mk-doc__tokenProperty',\r\n 'operator': 'mk-doc__tokenOperator',\r\n 'prolog': 'mk-doc__tokenComment',\r\n 'property': 'mk-doc__tokenProperty',\r\n 'punctuation': 'mk-doc__tokenPunctuation',\r\n 'regex': 'mk-doc__tokenVariable',\r\n 'selector': 'mk-doc__tokenSelector',\r\n 'string': 'mk-doc__tokenSelector',\r\n 'symbol': 'mk-doc__tokenProperty',\r\n 'tag': 'mk-doc__tokenProperty',\r\n 'url': 'mk-doc__tokenOperator',\r\n 'variable': 'mk-doc__tokenVariable',\r\n },\r\n embedBlock: {\r\n base: 'mk-doc__embedBlock',\r\n focus: 'mk-doc__node-selection',\r\n },\r\n hashtag: 'mk-doc__hashtag',\r\n heading: {\r\n h1: 'mk-doc__h1',\r\n h2: 'mk-doc__h2',\r\n h3: 'mk-doc__h3',\r\n h4: 'mk-doc__h4',\r\n h5: 'mk-doc__h5',\r\n h6: 'mk-doc__h6',\r\n },\r\n image: 'mk-doc__img',\r\n indent: 'mk-doc__indent',\r\n layoutContainer: 'mk-doc__layoutContainer',\r\n layoutItem: 'mk-doc__layoutItem',\r\n link: 'mk-doc__link',\r\n list: {\r\n checklist: 'mk-doc__checklist',\r\n listitem: 'mk-doc__listItem',\r\n listitemChecked: 'mk-doc__listItemChecked',\r\n listitemUnchecked: 'mk-doc__listItemUnchecked',\r\n nested: {\r\n listitem: 'mk-doc__nestedListItem',\r\n },\r\n olDepth: [\r\n 'mk-doc__ol1',\r\n 'mk-doc__ol2',\r\n 'mk-doc__ol3',\r\n 'mk-doc__ol4',\r\n 'mk-doc__ol5',\r\n ],\r\n ul: 'mk-doc__ul',\r\n },\r\n ltr: 'mk-doc__ltr',\r\n mark: 'mk-doc__mark',\r\n markOverlap: 'mk-doc__markOverlap',\r\n paragraph: 'mk-doc__paragraph',\r\n quote: 'mk-doc__quote',\r\n rtl: 'mk-doc__rtl',\r\n table: 'mk-doc__table',\r\n tableAddColumns: 'mk-doc__tableAddColumns',\r\n tableAddRows: 'mk-doc__tableAddRows',\r\n tableCell: 'mk-doc__tableCell',\r\n tableCellActionButton: 'mk-doc__tableCellActionButton',\r\n tableCellActionButtonContainer:\r\n 'mk-doc__tableCellActionButtonContainer',\r\n tableCellEditing: 'mk-doc__tableCellEditing',\r\n tableCellHeader: 'mk-doc__tableCellHeader',\r\n tableCellPrimarySelected: 'mk-doc__tableCellPrimarySelected',\r\n tableCellResizer: 'mk-doc__tableCellResizer',\r\n tableCellSelected: 'mk-doc__tableCellSelected',\r\n tableCellSortedIndicator: 'mk-doc__tableCellSortedIndicator',\r\n tableResizeRuler: 'mk-doc__tableCellResizeRuler',\r\n tableSelected: 'mk-doc__tableSelected',\r\n tableSelection: 'mk-doc__tableSelection',\r\n text: {\r\n bold: 'mk-doc__textBold',\r\n code: 'mk-doc__textCode',\r\n italic: 'mk-doc__textItalic',\r\n strikethrough: 'mk-doc__textStrikethrough',\r\n subscript: 'mk-doc__textSubscript',\r\n superscript: 'mk-doc__textSuperscript',\r\n underline: 'mk-doc__textUnderline',\r\n underlineStrikethrough: 'mk-doc__textUnderlineStrikethrough',\r\n }\r\n}\r\n\r\nexport default theme\r\n","<script setup lang=\"ts\">\r\nimport { CAN_UNDO_COMMAND } from 'lexical'\r\nimport { mergeRegister } from '@lexical/utils'\r\nimport { useLexicalEditor,useMounted } from './composables'\r\nimport { \r\n LexicalAutoFocusPlugin,\r\n LexicalHistoryPlugin,\r\n TabIndentationPlugin,\r\n} from './plugins'\r\nimport './plugins/RichTextEditorPlugin'\r\nimport './plugins/HashtagPlugin'\r\nimport './plugins/ListPlugin'\r\nimport './plugins/CheckListPlugin'\r\nimport './plugins/TablePlugin'\r\nimport DocTheme from \"./DocTheme\"\r\nimport { generateHtmlFromNodes } from \"./utils\"\r\nimport { watchEffect } from \"vue\"\r\n\r\nconst props = defineProps({ \r\n modelValue:{ type:String,default:\"\" },\r\n htmlConfig:{ type:Object,default(){ return undefined; }},\r\n namespace: { type:String,default:\"\" },\r\n editable: { default:true,type:Boolean },\r\n importCss: { type:String,default:\"\" },\r\n importScripts: { type:String,default:\"\" },\r\n modules: { type:Array,default:()=>[] },\r\n templates: { type:Array,default:()=>[] }\r\n})\r\n\r\nconst emit = defineEmits<{\r\n (e: 'error', error: Error): void,\r\n (e: 'update:modelValue',value:string ): void\r\n}>()\r\n\r\nconst { editor,setEditornitializeContent } = useLexicalEditor({\r\n html: props.htmlConfig,\r\n theme: DocTheme,\r\n editable:props.editable,\r\n namespace:props.namespace,\r\n editorState:null,\r\n importCss:props.importCss,\r\n importScripts:props.importScripts,\r\n modules:props.modules,\r\n templates:props.templates\r\n} as any,(error) => emit('error', error))\r\n// 设置内容\r\nconst setContent = (content?:string)=>setEditornitializeContent(content)\r\n\r\n// 数据更新\r\nlet inited = false;\r\nlet triggerCanUndo = false\r\nconst unWatch = watchEffect(() => {\r\n if(props.modelValue && !inited){\r\n // 初始化编辑器\r\n setEditornitializeContent(props.modelValue)\r\n inited = true;\r\n setTimeout(()=>unWatch(),1);\r\n }\r\n})\r\n\r\nuseMounted(()=>{\r\n \r\n return mergeRegister(\r\n editor.registerCommand(CAN_UNDO_COMMAND, (payload: boolean) => {\r\n if(!triggerCanUndo){\r\n emit(\"update:modelValue\",generateHtmlFromNodes(editor));\r\n triggerCanUndo = payload;\r\n }\r\n return true\r\n }, 1),\r\n editor.registerUpdateListener(({ editorState }) => {\r\n if(triggerCanUndo){\r\n editorState.read(() => emit(\"update:modelValue\",generateHtmlFromNodes(editor)))\r\n }\r\n })\r\n )\r\n})\r\n\r\ndefineExpose({ setContent });\r\n</script>\r\n\r\n<template>\r\n <slot></slot>\r\n <LexicalAutoFocusPlugin />\r\n <LexicalHistoryPlugin />\r\n <TabIndentationPlugin />\r\n</template>\r\n<style lang=\"scss\">\r\n.mk-doc-editor{\r\n &__module-template{\r\n &_dialog{\r\n &_warp{\r\n height:600px;\r\n display: flex;\r\n flex-direction: column;\r\n }\r\n &_list-body{\r\n flex: 1;\r\n height: 100%;\r\n overflow: auto;\r\n padding-top: 10px;\r\n box-sizing: border-box;\r\n display: flex;\r\n flex-wrap: wrap; \r\n align-content: flex-start;\r\n gap: 10px;\r\n }\r\n &_list-item{\r\n width: 49%;\r\n height: 150px;\r\n display: flex;\r\n background-color: #dedede;\r\n align-items: center;\r\n justify-content: center;\r\n cursor: pointer;\r\n box-sizing: border-box;\r\n position: relative;\r\n border: 2px solid #dedede; \r\n\r\n &.active{\r\n border-color:#2196F3;\r\n }\r\n &_title{\r\n text-align:center;\r\n }\r\n &.cover{\r\n img{\r\n object-fit: contain;\r\n padding: 10px;\r\n width: 100%;\r\n height: 100%; \r\n box-sizing: border-box;\r\n }\r\n >.mk-doc-editor__module-template_dialog_list-item_title{\r\n width: 100%;\r\n height: 100%;\r\n display: none;\r\n background-color: #0d0d0db3;\r\n align-items: center;\r\n justify-content: center;\r\n color:#fff;\r\n position: absolute;\r\n top:0;\r\n left:0;\r\n }\r\n &:hover{\r\n >.mk-doc-editor__module-template_dialog_list-item_title{\r\n display: flex;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\n</style>\r\n","import { type LexicalEditor } from 'lexical'\r\nimport { readonly, ref } from 'vue'\r\nimport { $canShowPlaceholderCurry } from '@lexical/text'\r\nimport { mergeRegister } from '@lexical/utils'\r\nimport { useMounted } from '../composables'\r\n\r\n\r\n\r\nfunction canShowPlaceholderFromCurrentEditorState(\r\n editor: LexicalEditor,\r\n): boolean {\r\n const currentCanShowPlaceholder = editor\r\n .getEditorState()\r\n .read($canShowPlaceholderCurry(editor.isComposing()))\r\n\r\n return currentCanShowPlaceholder\r\n}\r\n\r\nexport function useCanShowPlaceholder(editor: LexicalEditor) {\r\n const initialState = editor\r\n .getEditorState()\r\n .read($canShowPlaceholderCurry(editor.isComposing()))\r\n\r\n const canShowPlaceholder = ref(initialState)\r\n\r\n function resetCanShowPlaceholder() {\r\n const currentCanShowPlaceholder\r\n = canShowPlaceholderFromCurrentEditorState(editor)\r\n canShowPlaceholder.value = currentCanShowPlaceholder\r\n }\r\n\r\n useMounted(() => {\r\n return mergeRegister(\r\n editor.registerUpdateListener(() => {\r\n resetCanShowPlaceholder()\r\n }),\r\n editor.registerEditableListener(() => {\r\n resetCanShowPlaceholder()\r\n }),\r\n )\r\n })\r\n\r\n return readonly(canShowPlaceholder)\r\n}\r\n","<script setup lang=\"ts\">\r\nimport { ref } from 'vue'\r\nimport { useLexicalEditorContext,useMounted } from '../composables'\r\n\r\nwithDefaults(defineProps<{\r\n ariaActivedescendant?: string\r\n ariaAutocomplete?: 'none' | 'inline' | 'list' | 'both'\r\n ariaControls?: string\r\n ariaDescribedby?: string\r\n ariaExpanded?: boolean\r\n ariaLabel?: string\r\n ariaLabelledby?: string\r\n ariaMultiline?: boolean\r\n ariaOwns?: string\r\n ariaRequired?: boolean\r\n autoCapitalize?: boolean\r\n autoComplete?: boolean\r\n autoCorrect?: boolean\r\n id?: string\r\n editable?: boolean\r\n role?: string\r\n spellcheck?: boolean\r\n tabindex?: number\r\n enableGrammarly?: boolean\r\n}>(), {\r\n role: 'textbox',\r\n spellcheck: true,\r\n})\r\nconst root = ref<HTMLElement | null>(null)\r\nconst { editor } = useLexicalEditorContext()\r\n\r\nconst editable = ref(false)\r\n\r\nuseMounted(() => {\r\n\r\n if (root.value) {\r\n editor.setRootElement(root.value as HTMLElement)\r\n editable.value = editor.isEditable()\r\n }\r\n return editor.registerEditableListener((currentIsEditable) => {\r\n editable.value = currentIsEditable\r\n })\r\n})\r\n</script>\r\n\r\n<template>\r\n <div\r\n :id=\"id\"\r\n ref=\"root\" \r\n :aria-activedescendant=\"!editable ? undefined : ariaActivedescendant\"\r\n :aria-autocomplete=\"!editable ? undefined : ariaAutocomplete\"\r\n :aria-controls=\"!editable ? undefined : ariaControls\"\r\n :aria-describedby=\"ariaDescribedby\"\r\n :aria-expanded=\"!editable ? undefined : role === 'combobox' ? !!ariaExpanded ? ariaExpanded : undefined : undefined\"\r\n :aria-label=\"ariaLabel\"\r\n :aria-labelledby=\"ariaLabelledby\"\r\n :aria-multiline=\"ariaMultiline\"\r\n :aria-owns=\"!editable ? undefined : ariaOwns\"\r\n :aria-required=\"ariaRequired\"\r\n :autocapitalize=\"`${autoCapitalize}`\"\r\n :autocomplete=\"autoComplete\"\r\n :autocorrect=\"`${autoCorrect}`\"\r\n :contenteditable=\"editable\"\r\n :role=\"!editable ? undefined : role\"\r\n :spellcheck=\"spellcheck\"\r\n :tabindex=\"tabindex\">\r\n </div>\r\n</template>\r\n","import { computed, DefineComponent, defineComponent, h, shallowRef, Teleport, unref } from 'vue'\r\nimport { useLexicalEditorContext, useMounted } from '../composables'\r\n\r\nexport default defineComponent({\r\n name: 'LexicalDecoratedTeleports',\r\n setup() {\r\n const { editor } = useLexicalEditorContext()\r\n\r\n const decorators = shallowRef<Record<string, DefineComponent>>(editor.getDecorators())\r\n\r\n useMounted(() => {\r\n return editor.registerDecoratorListener((nextDecorators) => {\r\n decorators.value = nextDecorators as Record<string, DefineComponent>\r\n })\r\n })\r\n\r\n // Return decorators defined as Vue Teleports\r\n const outDecorators = computed(() => {\r\n const decoratedTeleports = []\r\n const decoratorKeys = Object.keys(unref(decorators))\r\n for (let i = 0; i < decoratorKeys.length; i++) {\r\n const nodeKey = decoratorKeys[i]\r\n const vueDecorator = decorators.value[nodeKey]\r\n const element = editor.getElementByKey(nodeKey)\r\n if (element !== null) {\r\n decoratedTeleports.push( h(Teleport, { to: element, }, vueDecorator))\r\n }\r\n }\r\n\r\n return decoratedTeleports\r\n })\r\n\r\n return () => outDecorators.value\r\n }\r\n})\r\n","export default \"html,body{\\r\\n width:100%;\\r\\n height:100%;\\r\\n padding:0px;\\r\\n margin:0px;\\r\\n position: relative;\\r\\n font-size: 14px;\\r\\n color:#000;\\r\\n overflow: hidden;\\r\\n}\\r\\n.mk-doc-editor-newline{\\r\\n width: 100%;\\r\\n line-height: 40px;\\r\\n display: flex;\\r\\n cursor: pointer;\\r\\n align-items: center;\\r\\n justify-content: center;\\r\\n color: #ccc;\\r\\n position: absolute;\\r\\n bottom: 0;\\r\\n z-index: 10;\\r\\n}\\r\\n.mk-doc-editor-newline:hover{\\r\\n outline: 1px dashed #ccc;\\r\\n}\\r\\n.mk-doc-editor-stage{\\r\\n width: 100%;\\r\\n margin: auto;\\r\\n position: relative;\\r\\n z-index: 1;\\r\\n outline: 0;\\r\\n border: 0;\\r\\n padding: 10px 20px 30px 20px;\\r\\n box-sizing: border-box;\\r\\n flex: 1; \\r\\n}\\r\\n\\r\\n.mk-doc-editor__stage__placeholder{\\r\\n position: absolute;\\r\\n top: 10px;\\r\\n left:20px;\\r\\n z-index: 0; \\r\\n color: #ccc;\\r\\n padding-left: 4px;\\r\\n}\\r\\n\"","export default \" \\r\\n.mk-doc__embedBlock {\\r\\n position: relative;\\r\\n z-index: 1;\\r\\n padding: 1px;\\r\\n cursor: pointer;\\r\\n}\\r\\n\\r\\n.mk-doc__embedBlock >*{ pointer-events: none; }\\r\\n\\r\\n/* 清除浮动 */\\r\\n.mk-doc-editor-stage::after{\\r\\n content: \\\"\\\";\\r\\n display: block;\\r\\n clear: both;\\r\\n width: 0;\\r\\n height: 0;\\r\\n font-size: 0;\\r\\n}\\r\\n/* 缩进 */\\r\\n.mk-doc-editor-stage * {\\r\\n --lexical-indent-base-value:2em\\r\\n}\\r\\n/* 光标样式 */\\r\\n.mk-doc-editor-stage *:has(>span):not(a) > span:last-child::after,\\r\\n.mk-doc__empty-mark::before,\\r\\n.mk-doc__br-brfore-mark::after{ \\r\\n content: \\\"↩︎\\\";\\r\\n color: #ccc;\\r\\n margin-left: 4px;\\r\\n cursor: text;\\r\\n user-select: none;\\r\\n pointer-events: none;\\r\\n position: absolute;\\r\\n font-size: 12px;\\r\\n height: 0;\\r\\n width: 1px; \\r\\n vertical-align: middle;\\r\\n}\\r\\n\\r\\n/* placeholder 模式 */\\r\\n.mk-doc-editor-stage.placeholder *::after,\\r\\n.mk-doc-editor-stage.placeholder *::before{ display: none;}\\r\\n\\r\\n/* 选中样式 */\\r\\n.mk-doc__node-selection {\\r\\n outline: 2px solid rgb(60, 132, 244);\\r\\n}\\r\\n/* hover 的标识线条 */\\r\\n.mk-doc-editor-stage div:not([data-lexical-decorator]>*):hover,\\r\\n.mk-doc-editor-stage section:not([data-lexical-decorator]>*):hover,\\r\\n.mk-doc-editor-stage main:not([data-lexical-decorator]>*):hover,\\r\\n.mk-doc-editor-stage header:not([data-lexical-decorator]):hover,\\r\\n.mk-doc-editor-stage p:not([data-lexical-decorator]>*):hover{\\r\\n outline: 1px solid #d7e6ff;\\r\\n}\\r\\n.mk-doc__image-text-warp p:hover,\\r\\n.mk-doc__image-text-warp section:hover,\\r\\n.mk-doc__image-text-warp div:hover,\\r\\n[data-lexical-decorator]:hover {\\r\\n outline: none !important;\\r\\n}\\r\\n.mk-doc-editor-stage [data-lexical-decorator]{\\r\\n user-select: none;\\r\\n white-space: initial;\\r\\n word-break: initial;\\r\\n cursor: pointer;\\r\\n}\\r\\n.mk-doc-editor-stage [data-lexical-decorator]>* {\\r\\n pointer-events: none;\\r\\n}\\r\\n\"","<script setup lang=\"ts\">\r\n\r\nimport { computed, ref } from \"vue\"\r\nimport { useLexicalEditorContext,useMounted } from '../composables'\r\nimport { useCanShowPlaceholder } from \"./composables\" \r\nimport { $createParagraphNode, $getRoot, $isElementNode,$isParagraphNode } from 'lexical'\r\nimport { mergeRegister } from '@lexical/utils'\r\nimport { registerDragonSupport } from '@lexical/dragon'\r\nimport { registerRichText } from '@lexical/rich-text'\r\nimport { registerPlainText } from '@lexical/plain-text'\r\nimport ContentEditable from \"./ContentEditable.vue\"\r\nimport DecoratedTeleports from \"./DecoratedTeleports\"\r\nimport DocEditorStageCss from \"../assets/doc-editor-stage.css?raw\"\r\nimport DocEditorCss from \"../assets/doc-editor.css?raw\"\r\n\r\n// 参数\r\nconst props = defineProps({ placeholder:{ type:String,default:`在这里输入正文...` },type:{ type:String,default:`richtext` } })\r\n\r\nconst { editor,templates,modules,importCss,importScript,importStyles,stageId } = useLexicalEditorContext()\r\n\r\nconst canShowPlaceholder = useCanShowPlaceholder(editor)\r\n\r\n// 空内容\r\nconst contentIsEmpty = ref(true)\r\n// 显示新增新行\r\nconst showAddNewline = ref(false)\r\n// iframe 编辑器\r\nconst iframeContentRef = ref(null as any);\r\nconst iframeBody = computed(()=>iframeContentRef.value?.contentWindow?.document?.body)\r\n\r\nlet updateTimeoutKey:any = 0;\r\n// 更新舞台高度\r\nconst updateStageHeight = ()=>{\r\n const stageEl = editor.getRootElement() as HTMLElement;\r\n updateTimeoutKey = setTimeout(() => {\r\n if(stageEl){ iframeContentRef.value.style.height = (stageEl.offsetHeight + 40)+\"px\"; }\r\n updateStageHeight();\r\n }, 20);\r\n return ()=>{\r\n clearTimeout(updateTimeoutKey);\r\n }\r\n}\r\n\r\n// 添加新行\r\nconst addNewline = ()=>{\r\n editor.update(()=>$getRoot().append($createParagraphNode()))\r\n}\r\n\r\nuseMounted(()=>{\r\n\r\n const doc = iframeContentRef.value?.contentWindow?.document;\r\n \r\n // 扩展的js和css\r\n importScript.split(\",\").filter(item=>!!item).forEach(path=>{\r\n const script = document.createElement(\"script\");\r\n script.src = path;\r\n script.setAttribute(\"crossorigin\",\"true\")\r\n doc.head.append(script);\r\n })\r\n\r\n importCss.split(\",\").filter(item=>!!item).forEach(path=>{\r\n const link = document.createElement(\"link\");\r\n link.href = path;\r\n link.setAttribute(\"rel\",\"stylesheet\")\r\n link.setAttribute(\"crossorigin\",\"true\")\r\n doc.head.append(link);\r\n })\r\n\r\n // 样式\r\n const style = document.createElement(\"style\");\r\n style.setAttribute(\"type\",\"text/css\")\r\n\r\n // 编辑器 默认样式\r\n style.innerHTML = [DocEditorStageCss,DocEditorCss,importStyles].join(\"\\r\\n\");\r\n\r\n //模块渲染样式\r\n style.innerHTML += modules.filter(item=>item.editorCss).map(item=>item.editorCss).join(\"\\r\\n\");\r\n\r\n //模版渲染样式\r\n style.innerHTML += templates.filter(item=>item.editorCss).map(item=>item.editorCss).join(\"\\r\\n\");\r\n\r\n doc.head.append(style);\r\n\r\n return mergeRegister(\r\n // 注册富文本 \r\n props.type == \"richtext\" ? registerRichText(editor) : registerPlainText(editor),\r\n registerDragonSupport(editor),\r\n updateStageHeight(),\r\n editor.registerUpdateListener(({ editorState }) => {\r\n editorState.read(() => {\r\n\r\n const root = $getRoot();\r\n const lastNode = root.getLastChild();\r\n\r\n if(root.getChildrenSize() == 1){\r\n if($isElementNode(lastNode)){\r\n contentIsEmpty.value = lastNode.isEmpty();\r\n }\r\n }\r\n else{\r\n contentIsEmpty.value = editorState.isEmpty();\r\n }\r\n\r\n showAddNewline.value = !$isParagraphNode(lastNode)\r\n\r\n })\r\n })\r\n )\r\n})\r\n\r\n</script>\r\n\r\n<template>\r\n <iframe v-bind=\"$attrs\" :id=\"stageId\" class=\"mk-doc-editor-stage-iframe\" ref=\"iframeContentRef\"></iframe>\r\n <Teleport v-if=\"iframeBody\" :to=\"iframeBody\">\r\n <ContentEditable class=\"mk-doc-editor-stage\" :class=\"{placeholder:canShowPlaceholder && contentIsEmpty}\" />\r\n <div @click=\"addNewline()\" v-if=\"showAddNewline\" class=\"mk-doc-editor-newline\">添加新行</div>\r\n <template v-if=\"canShowPlaceholder && contentIsEmpty\">\r\n <p class=\"mk-doc__paragraph mk-doc-editor__stage__placeholder\" style=\"user-select: text;white-space: pre-wrap;word-break: break-word;\">\r\n {{placeholder}}\r\n </p>\r\n </template>\r\n <DecoratedTeleports />\r\n <slot></slot>\r\n </Teleport>\r\n</template>\r\n<style scoped>\r\n.mk-doc-editor-stage-iframe{\r\n width: 100%;\r\n min-height: 100%;\r\n z-index: 0;\r\n position: relative;\r\n overflow: hidden;\r\n background-color: #fff; \r\n margin: 0;\r\n border: 0;\r\n}\r\n</style>\r\n","<template>\r\n <LexicalComposer v-model=\"docContent\" :importCss=\"css\" :importScripts=\"js\" :namespace=\"namespace\">\r\n <div class=\"mk-doc-editor\" v-bind=\"$attrs\" v-loading=\"loading\">\r\n <div class=\"mk-doc-editor-toolbar\">\r\n <ToolbarPlugin />\r\n </div>\r\n \r\n <div class=\"mk-doc-editor__stage_warp\">\r\n <slot name=\"before-extentions\"></slot>\r\n <NodeTreeViewPlugin class=\"mk-doc-editor__stage_tree_view\" />\r\n <div class=\"mk-doc-editor__stage_body\">\r\n <slot name=\"header\"></slot>\r\n <EditorStage class=\"mk-doc-editor__stage_iframe\" />\r\n <ElementBlockSelectionPlugin />\r\n <slot name=\"footer\"></slot>\r\n </div>\r\n <slot name=\"after-extentions\"></slot>\r\n </div>\r\n \r\n </div>\r\n </LexicalComposer>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { \r\n LexicalComposer,EditorStage,NodeTreeViewPlugin,\r\n ElementBlockSelectionPlugin,ToolbarPlugin\r\n} from '../lexical-editor'\r\nimport { computed } from \"vue\"\r\n\r\nconst props = defineProps({ \r\n modelValue:{ type:String,default:\"\"},\r\n editable: { default:true,type:Boolean },\r\n namespace: { type:String,default:\"\" },\r\n placeholder:{type:String,default:\"这里输入正文...\"},\r\n loading:{ type:Boolean,defualt:false},\r\n js:{ type:String,default:`` },\r\n css:{ type:String,default:`` }\r\n})\r\n\r\nconst emit = defineEmits<{\r\n (e: 'error', error: Error): void,\r\n (e: 'update:modelValue',value:string ): void\r\n}>()\r\n\r\n// 文档内容\r\nconst docContent = computed({\r\n get:()=>props.modelValue,\r\n set:v=>emit('update:modelValue',v)\r\n})\r\n\r\n</script>\r\n<style scoped lang=\"scss\">\r\n\r\n.mk-doc-editor-toolbar{\r\n background-color: #fff;\r\n padding: 10px 20px;\r\n z-index: 1;\r\n text-align: center;\r\n\r\n}\r\n\r\n.mk-doc-editor{\r\n width: 100%;\r\n height: 100%;\r\n overflow: hidden;\r\n display: flex;\r\n flex-direction: column;\r\n\r\n &__stage_warp{\r\n width: 100%;\r\n height: 100%; \r\n z-index: 0;\r\n position: relative;\r\n display: flex;\r\n flex-direction: column;\r\n padding: 0 10px 10px 10px;\r\n overflow: auto;\r\n box-sizing: border-box;\r\n }\r\n\r\n &__stage_tree_view{\r\n position: sticky;\r\n top:0;\r\n background-color: #f4f4f4;\r\n width: 100%;\r\n z-index: 999;\r\n }\r\n &__stage_body{ \r\n z-index: 0;\r\n position: relative;\r\n padding-top:10px;\r\n max-width: 1400px;\r\n width: 100%; \r\n min-height: calc(100% - 60px);\r\n margin: auto;\r\n }\r\n\r\n &__view_warp{\r\n display: flex;\r\n background-color: var(--mk-container-border-color);\r\n overflow: auto; \r\n height: calc(100vh - 50px);\r\n padding-top: 10px;\r\n }\r\n\r\n &__module-template{\r\n &_dialog{\r\n &_warp{\r\n height:600px;\r\n display: flex;\r\n flex-direction: column;\r\n }\r\n &_list-body{\r\n flex: 1;\r\n height: 100%;\r\n overflow: auto;\r\n padding-top: 10px;\r\n box-sizing: border-box;\r\n display: flex;\r\n flex-wrap: wrap; \r\n align-content: flex-start;\r\n gap: 10px;\r\n }\r\n &_list-item{\r\n width: 49%;\r\n height: 150px;\r\n display: flex;\r\n background-color: #dedede;\r\n align-items: center;\r\n justify-content: center;\r\n cursor: pointer;\r\n box-sizing: border-box;\r\n position: relative;\r\n border: 2px solid #dedede; \r\n\r\n &.active{\r\n border-color:#2196F3;\r\n }\r\n &_title{\r\n text-align:center;\r\n }\r\n &.cover{\r\n img{\r\n object-fit: contain;\r\n padding: 10px;\r\n width: 100%;\r\n height: 100%; \r\n box-sizing: border-box;\r\n }\r\n >.mk-doc-editor__module-template_dialog_list-item_title{\r\n width: 100%;\r\n height: 100%;\r\n display: none;\r\n background-color: #0d0d0db3;\r\n align-items: center;\r\n justify-content: center;\r\n color:#fff;\r\n position: absolute;\r\n top:0;\r\n left:0;\r\n }\r\n &:hover{\r\n >.mk-doc-editor__module-template_dialog_list-item_title{\r\n display: flex;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n</style>\r\n","import { withInstall } from \"@maketribe/utils\";\r\nimport Editor from \"./editor.vue\";\r\n\r\nexport const MKDocEditor = withInstall(Editor);\r\n\r\nexport default MKDocEditor;\r\n\r\n","import {defineComponent, ref, renderSlot} from \"vue\";\r\nimport {MKSvgIcon} from \"../../basic/svg-icon\";\r\nimport {Messager} from \"@maketribe/dm\";\r\n\r\nexport default defineComponent({\r\n setup(props, {slots}) {\r\n const copyContainer = ref<HTMLElement>();\r\n const copyHandle = () => {\r\n const copyText = copyContainer.value?.innerText || \"\";\r\n //兼容性判断\r\n if (navigator.clipboard === undefined) {\r\n //通过input标签进行复制\r\n const input = document.createElement(\"input\");\r\n input.value = copyText;\r\n document.body.appendChild(input);\r\n input.select();\r\n document.execCommand(\"Copy\");\r\n document.body.removeChild(input);\r\n } else {\r\n navigator.clipboard.writeText(copyText);\r\n }\r\n Messager.success({message: \"复制成功\"});\r\n };\r\n\r\n return () => {\r\n return (\r\n <span\r\n class=\"mk-copy-container\"\r\n ref={((el: any) => (copyContainer.value = el)) as any}\r\n >\r\n {renderSlot(slots, \"default\")}\r\n <MKSvgIcon\r\n name=\"ep:copy-document\"\r\n class=\"mk-copy-container__icon\"\r\n onClick={copyHandle}\r\n />\r\n </span>\r\n );\r\n };\r\n },\r\n});\r\n","import { withInstall } from \"@maketribe/utils\";\r\nimport CopyContainer from \"./copy-container\";\r\n\r\nexport const MKCopyContainer = withInstall(CopyContainer);\r\nexport default MKCopyContainer;\r\n","import { DynamicFormItemType } from \"../../dynamic-form-panel\"\r\nimport { type ContentConfigType,type ContentBlockType } from \"./ContentConfig\"\r\nimport { ModuleType } from \"./ModuleDefine\"\r\nimport { Component, VNode,reactive } from \"vue\"\r\n\r\n\r\n/**\r\n * 页面编辑器\r\n */\r\nexport default class VisualPageEditor{\r\n\r\n _version:string\r\n _content: ContentConfigType|null\r\n _modules:ModuleType[];\r\n\r\n constructor(){\r\n this._version = \"1.0.0\"\r\n this._content = null;\r\n this._modules = [];\r\n }\r\n\r\n /**\r\n * 模块列表\r\n */\r\n get baseModuleList(){\r\n return this._modules.filter(itme=>itme.group == \"base\");\r\n }\r\n get businessModuleList(){\r\n return this._modules.filter(itme=>itme.group == \"business\");\r\n }\r\n get customModuleList(){\r\n return this._modules.filter(itme=>itme.group == \"custom\");\r\n }\r\n /**\r\n * 注册基础模块\r\n * @param name \r\n * @param title \r\n * @param component \r\n * @param options \r\n */\r\n registerBaseModule(name : string, title : string, component: Component|((props:unknown)=>VNode), options:DynamicFormItemType[]){\r\n if(this._modules.find(m=>m.name == name)){\r\n throw new Error(`重复的模块【${title}】`);\r\n }\r\n this._modules.push({ name,title,group:\"base\",component,options });\r\n }\r\n\r\n /**\r\n * 注册业务模块\r\n * @param name \r\n * @param title \r\n * @param component \r\n * @param options \r\n */\r\n registerBusinessModule(name : string, title : string, component: Component|((props:unknown)=>VNode), options:DynamicFormItemType[]){\r\n if(this._modules.find(m=>m.name == name)){\r\n throw new Error(`重复的模块【${title}】`);\r\n }\r\n this._modules.push({ name,title,group:\"business\",component,options });\r\n }\r\n\r\n /**\r\n * 注册自定义模块\r\n * @param name \r\n * @param title \r\n * @param component \r\n * @param options \r\n */\r\n registerCustomModule(name : string, title : string, component: Component|((props:unknown)=>VNode), options:DynamicFormItemType[]){\r\n if(this._modules.find(m=>m.name == name)){\r\n throw new Error(`重复的模块【${title}】`);\r\n }\r\n this._modules.push({ name,title,group:\"custom\",component,options });\r\n }\r\n /**\r\n * 查找\r\n * @param name \r\n */\r\n findModule(name:string):ModuleType|null|undefined{\r\n return this._modules.find(m=>m.name == name)\r\n }\r\n\r\n /**\r\n * 内容大小\r\n * @returns \r\n */\r\n size(){\r\n return this._content?.contents.length as number;\r\n }\r\n\r\n /**\r\n * 删除\r\n * @param index \r\n */\r\n remove(index:number){\r\n this._content?.contents.splice(index,1)\r\n }\r\n\r\n /**\r\n * 交换\r\n * @param index \r\n * @param exchangeIndex \r\n */\r\n exchange(index:number,exchangeIndex:number){\r\n const item = this._content?.contents.splice(index,1)\r\n this._content?.contents.splice(exchangeIndex,0,item![0])\r\n }\r\n\r\n /**\r\n * 设置内容\r\n * @param content \r\n */\r\n setContent(content:ContentConfigType){\r\n this._content = reactive(content);\r\n }\r\n\r\n /**\r\n * 获取内容\r\n * @returns \r\n */\r\n get(index:number):ContentBlockType {\r\n return this._content?.contents[index] as ContentBlockType;\r\n }\r\n /**\r\n * 获取内容\r\n * @returns \r\n */\r\n edit(index:number,data:object) {\r\n if(this._content?.contents[index]){\r\n this._content.contents[index].componentProps = data;\r\n console.log(this._content);\r\n }\r\n }\r\n /**\r\n * 获取内容\r\n * @returns \r\n */\r\n getContent():ContentConfigType {\r\n return this._content || {version:this._version ,contents:[]}\r\n }\r\n\r\n}\r\n","\r\nimport { Fragment, ref, unref, resolveComponent, h, reactive } from 'vue'\r\nimport { Dialoger } from '@maketribe/dm'\r\nimport { ElButton, ElForm, ElFormItem, ElCollapse, ElCollapseItem, ElInput } from \"element-plus\";\r\nimport { ModuleType } from \"./ModuleDefine\"\r\nimport { showDynamicFormDialoger } from \"../../dynamic-form-panel\"\r\nimport { useVisualPageEditor } from \".\"\r\n\r\n/**\r\n * \r\n * @param data \r\n * @param props \r\n * @returns \r\n */\r\nexport const showEditPanel = async (moduleOptons: ModuleType, props: any) => {\r\n\r\n return await showDynamicFormDialoger(moduleOptons.title,moduleOptons.options,props)\r\n}\r\n\r\n/**\r\n * \r\n * @param data \r\n * @param props \r\n * @returns \r\n */\r\nexport const showModuleSelectPanel = async () => {\r\n return new Promise(resolve => {\r\n\r\n const { PageEditor } = useVisualPageEditor();\r\n\r\n const selectComponentOption = ref(null);\r\n\r\n // 取消编辑\r\n const handleCancelClick = () => {\r\n dialogInstance.destroy();\r\n };\r\n\r\n // 确认编辑\r\n const handleConfirmClick = () => {\r\n dialogInstance.destroy();\r\n resolve(selectComponentOption.value);\r\n };\r\n\r\n const dialogInstance = Dialoger.customRender({\r\n title: \"模块库\",\r\n class: \"mk-html-editor-dialog\",\r\n width: \"70%\",\r\n onClose: () => {\r\n dialogInstance.destroy();\r\n },\r\n body: () => {\r\n return <div>\r\n <ElInput />\r\n <ElCollapse>\r\n <ElCollapseItem title=\"基础模块\" name=\"base\">\r\n\r\n </ElCollapseItem>\r\n <ElCollapseItem title=\"业务模块\" name=\"business\">\r\n\r\n </ElCollapseItem>\r\n <ElCollapseItem title=\"自定义模块\" name=\"custom\">\r\n\r\n </ElCollapseItem>\r\n </ElCollapse>\r\n </div>\r\n },\r\n footer: () => {\r\n return <Fragment>\r\n <ElButton onClick={handleCancelClick}>取消</ElButton>\r\n <ElButton type=\"primary\" onClick={handleConfirmClick}>\r\n 确定\r\n </ElButton>\r\n </Fragment>\r\n },\r\n });\r\n });\r\n}\r\n","\r\nimport { shallowReactive,ref } from \"vue\"\r\n\r\nimport VisualPageEditor from \"./VisvalPageEditor\"\r\n\r\n// 页面编辑器\r\nconst PageEditor = shallowReactive<VisualPageEditor>(new VisualPageEditor())\r\n\r\n// pc | mobile\r\nconst ViewDevice = ref('pc')\r\n\r\n\r\nexport * from \"./Dialog\"\r\n\r\n/**\r\n * \r\n * @returns \r\n */\r\nexport const useVisualPageEditor = ()=>{\r\n return { PageEditor, ViewDevice }\r\n}\r\n\r\n","<script setup lang=\"ts\">\r\nimport { onMounted, onUnmounted, ref,defineProps } from 'vue'\r\nimport { useVisualPageEditor } from \"./core\"\r\nconst { ViewDevice } = useVisualPageEditor();\r\nconst toolbarRef = ref<HTMLDivElement | null>(null)\r\n\r\nonMounted(() => {\r\n \r\n})\r\n\r\n\r\n</script>\r\n\r\n<template>\r\n <div ref=\"toolbarRef\" class=\"mk-visual-page-editor-toolbar\">\r\n <el-button-group>\r\n <el-button text :class=\"`${ViewDevice=='pc' ? 'active' : ''}`\" @click=\"ViewDevice='pc'\">\r\n <MKSvgIcon iconClass=\"Platform\" /> \r\n </el-button>\r\n <el-button text :class=\"`${ViewDevice=='mobile' ? 'active' : ''}`\" @click=\"ViewDevice='mobile'\">\r\n <MKSvgIcon iconClass=\"Iphone\" /> \r\n </el-button>\r\n </el-button-group>\r\n </div>\r\n</template>\r\n","import { defineComponent,defineProps,defineEmits,computed,ref,onMounted,watch,h,type Component } from \"vue\"\r\nimport { ContentBlockType } from \"./ContentConfig\"\r\nimport { useVisualPageEditor } from \".\"\r\n\r\nexport default defineComponent({\r\n name:\"BlockRender\",\r\n emits:[\"click\"],\r\n props:{\r\n node:{type:Object},\r\n parent:{type:Object},\r\n index:{type:Number},\r\n active:{type:Boolean}\r\n },\r\n setup:(props,{ emit })=>{\r\n\r\n const { PageEditor } = useVisualPageEditor();\r\n\r\n return ()=>{\r\n\r\n const content = props.node as ContentBlockType;\r\n const module = PageEditor.findModule(content.componentInfo);\r\n\r\n if(module != null){\r\n\r\n const vnode = typeof module.component === \"function\" ? (module.component as any)(content.componentProps) : h(module.component,content.componentProps);\r\n\r\n return h(\"div\",{class:\"mk-visual-page-editor__stage_block\"},[\r\n vnode,\r\n h(\"div\",{ \r\n class:{\"mk-visual-page-editor__stage_block_mask\":true,active:props.active},\r\n onClick:ev=>{\r\n emit(\"click\",{ node:content,options:module,index:props.index,parent:props.parent,event:ev })\r\n }\r\n })\r\n ])\r\n }\r\n else{\r\n return h(\"div\",{class:\"mk-visual-page-editor__stage_block\"},[\r\n `未知的模块【${content.componentInfo}】!请注册!`\r\n ])\r\n }\r\n\r\n \r\n }\r\n }\r\n});\r\n","<template>\r\n <div class=\"mk-visual-page-editor__stage_body\" @click=\"clickStageHandle\">\r\n <div class=\"mk-visual-page-editor__stage_editable\" :style=\"{ width: (ViewDevice == 'pc' ? '900px' : '640px') }\"\r\n ref=\"editableRef\">\r\n <BlockRender v-for=\"(item, index) in PageEditor.getContent().contents\" :key=\"index\" :index=\"index\" :node=\"item\"\r\n :active=\"selectIndex == index\" @click=\"clickHandle\"></BlockRender>\r\n <div class=\"mk-visual-page-editor__stage_editable_addblock\">\r\n <el-button text type=\"primary\" size=\"large\" @click=\"addHandle()\">\r\n <MKSvgIcon iconClass=\"Plus\" style=\"margin-right:10px\" />\r\n 添加\r\n </el-button>\r\n </div>\r\n <div class=\"mk-visual-page-editor-inline-toolbar\" @click..stop :style=\"toolsPos\" v-if=\"selectIndex != null\">\r\n <el-button-group>\r\n <el-button text v-if=\"selectIndex > 0\" @click=\"PageEditor.exchange(selectIndex, selectIndex - 1); selectIndex--\">\r\n <MKSvgIcon iconClass=\"CaretTop\" style=\"margin-right:10px\" />\r\n 上移\r\n </el-button>\r\n <el-button text @click=\"PageEditor.exchange(selectIndex, selectIndex + 1); selectIndex++\"\r\n v-if=\"selectIndex < PageEditor.size() - 1\">\r\n <MKSvgIcon iconClass=\"CaretBottom\" style=\"margin-right:10px\" />\r\n 下移\r\n </el-button>\r\n <el-button text @click=\"addHandle(selectIndex, selectIndex - 1)\">\r\n <MKSvgIcon iconClass=\"Fold\" style=\"margin-right:10px\" />\r\n 插入\r\n </el-button>\r\n <el-button text @click=\"addHandle(selectIndex, selectIndex + 1)\">\r\n <MKSvgIcon iconClass=\"Plus\" style=\"margin-right:10px\" />\r\n 添加\r\n </el-button>\r\n <el-button text @click=\"editHandle(selectIndex)\">\r\n <MKSvgIcon iconClass=\"Edit\" style=\"margin-right:10px\" />\r\n 编辑\r\n </el-button>\r\n <el-button text type=\"danger\" @click=\"PageEditor.remove(selectIndex); selectIndex = null\">\r\n <MKSvgIcon iconClass=\"Delete\" style=\"margin-right:10px\" />\r\n 删除\r\n </el-button>\r\n </el-button-group>\r\n </div>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { nextTick, defineProps, defineEmits, computed, ref, onMounted, onBeforeUnmount, reactive, watch } from \"vue\"\r\nimport { useVisualPageEditor, showEditPanel, showModuleSelectPanel } from \"./core\"\r\nimport BlockRender from \"./core/BlockRender\"\r\nimport { ModuleType } from \"./core/ModuleDefine\";\r\n\r\nconst { PageEditor, ViewDevice } = useVisualPageEditor();\r\nconst editableRef = ref<HTMLDivElement | null>(null);\r\nconst selectIndex = ref(null);\r\n\r\n// 点击块\r\nconst clickHandle = (data: any) => {\r\n data.event.stopPropagation();\r\n updateToolsPos();\r\n selectIndex.value = data.index;\r\n}\r\nconst clickStageHandle = () => {\r\n selectIndex.value = null;\r\n}\r\n// 工具条位置\r\nconst toolsPos = reactive({ top: \"0px\" });\r\n// 更新工具条位置\r\nconst updateToolsPos = () => {\r\n if (editableRef.value != null) {\r\n toolsPos.top = Math.max(editableRef.value.parentElement!.scrollTop + editableRef.value.parentElement!.offsetHeight / 2 - 100, 5) + \"px\"\r\n }\r\n}\r\n\r\n// 编辑\r\nconst addHandle = async (pos?: any, index?: any) => {\r\n\r\n const result = await showModuleSelectPanel();\r\n\r\n}\r\n\r\n// 编辑\r\nconst editHandle = async (index: any) => {\r\n\r\n const item = PageEditor.get(index)\r\n const module = PageEditor.findModule(item.componentInfo)\r\n const result = await showEditPanel(module as ModuleType, { ...item.componentProps });\r\n PageEditor.edit(index, result as any);\r\n}\r\n\r\nonMounted(() => {\r\n editableRef.value?.parentElement!.addEventListener(\"scroll\", updateToolsPos, false);\r\n onBeforeUnmount(() => {\r\n editableRef.value?.parentElement!.removeEventListener(\"scroll\", updateToolsPos);\r\n });\r\n\r\n PageEditor.setContent({\r\n version: \"1.0.0\",\r\n contents: [\r\n { componentInfo: \"base-image\", componentProps: { src: \"https://vgcnminisite.oss-cn-shanghai.aliyuncs.com/uploads/2024/07/03/ffd6b7c7f24f42dab3ae1220e18c3723.jpg\", id: 1 } },\r\n { componentInfo: \"base-image\", componentProps: { src: \"https://vgcnminisite.oss-cn-shanghai.aliyuncs.com/uploads/2024/07/03/b9e0baefbd784d70a83e04bea7cd6113.jpg\", id: 2 } }\r\n ]\r\n })\r\n\r\n});\r\n</script>\r\n./core/ModuleDefine./core/BlockRender\r\n./core/Dialog\r\n","<template>\r\n <div class=\"mk-visual-page-editor\">\r\n <slot name=\"toolbar\">\r\n <Toolbar />\r\n </slot>\r\n <div class=\"mk-visual-page-editor__stage\"> \r\n <ContentEditable></ContentEditable> \r\n <div class=\"mk-visual-page-editor__stage_right\">\r\n <slot name=\"extra-panel\"></slot>\r\n </div>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { defineOptions,defineProps,defineEmits,computed,ref,onMounted,watch } from \"vue\"\r\nimport Toolbar from \"./toolbar.vue\"\r\nimport ContentEditable from \"./content-editable.vue\";\r\nimport { useVisualPageEditor } from \"./core\"\r\n\r\nconst { ViewDevice } = useVisualPageEditor();\r\n\r\nconst props = defineProps({ device:{type:String,default:\"mobile\"} })\r\n\r\n\r\nonMounted(()=>{\r\n\r\n ViewDevice.value = props.device;\r\n\r\n});\r\n</script>\r\n","\r\n\r\nimport { h } from \"vue\"\r\nimport { useVisualPageEditor } from \"../core\"\r\n\r\nconst { PageEditor } = useVisualPageEditor();\r\n\r\n/**\r\n * 注册基础图片模块\r\n */\r\nPageEditor.registerBaseModule(\"base-image\", \"图片\", (data:any)=>{\r\n return h(\"img\", { src:data.src, style: { width: \"100%\" } })\r\n},[\r\n { name:\"src\", title:\"图片路径 :\", component:\"MKUploadImage\", props:{ cutSize:\"818*597\" }, defaultValue:\"\" }\r\n])\r\n","import { withInstall } from \"@maketribe/utils\";\r\nimport VisualPageEditor from \"./editor.vue\";\r\nimport \"./modules\"\r\n\r\nexport const MKVisualPageEditor = withInstall(VisualPageEditor);\r\n\r\nexport default MKVisualPageEditor;\r\n\r\n","import { ExtractPropTypes } from \"vue\";\r\nimport { buildProps } from \"@maketribe/utils\";\r\n\r\nexport const verifyDialogProps = buildProps({\r\n scene: {\r\n type: String,\r\n required: true,\r\n },\r\n width: {\r\n type: String,\r\n default: \"300px\",\r\n },\r\n} as const);\r\n\r\nexport const verifyDialogEmits = {\r\n \"update:visible\": (modelValue: any) => true,\r\n\r\n confirm: (modelValue: any) => true,\r\n};\r\nexport type VerifyDialogProps = ExtractPropTypes<typeof verifyDialogEmits>;\r\n","import {\r\n computed,\r\n defineComponent,\r\n unref,\r\n ref,\r\n onMounted,\r\n Ref,\r\n Fragment,\r\n} from \"vue\";\r\nimport { useHttpRequest } from \"../../../composables\";\r\nimport { verifyDialogProps, verifyDialogEmits } from \"./verify-dialog-option\";\r\nimport { WebHttpRequest } from \"@maketribe/request\";\r\nimport { Disposable, createDisposable } from \"@maketribe/utils\";\r\nimport { MSAppClient } from \"../../../core\";\r\n\r\n// 建一个私有的类吧客户端id放出来\r\n// const webHttpRequest = new (class InnerWebHttpRequest extends WebHttpRequest {\r\n// async getClientId() {\r\n// await this.loadClientIDPromise;\r\n// return this.clientID;\r\n// }\r\n// })();\r\n\r\nexport default defineComponent({\r\n name: \"VerifyPanel\",\r\n props: verifyDialogProps,\r\n emits: verifyDialogEmits,\r\n setup(props, { emit, expose }) {\r\n const wrapperEl: Ref<HTMLElement | null> = ref(null);\r\n const buttonEl: Ref<HTMLElement | null> = ref(null);\r\n const grandEl: Ref<HTMLElement | null> = ref(null);\r\n\r\n const httpRequest = MSAppClient.instance!.httpRequest;\r\n const webHttpRequest = new WebHttpRequest();\r\n // 样式默认宽度是48px\r\n let slideWidth: number = 48;\r\n\r\n const isError = ref(false);\r\n\r\n const deg = ref(0);\r\n const imageUrl = ref(\"\");\r\n const loading = ref(false);\r\n const imageStyle = computed(() => {\r\n return {\r\n backgroundImage: `url(${unref(imageUrl)})`,\r\n transform: `rotate(-${unref(deg)}deg)`,\r\n };\r\n });\r\n\r\n const loadImage = async (): Promise<undefined> => {\r\n loading.value = true;\r\n\r\n try {\r\n const response = await httpRequest.get<Blob>(\r\n \"/ms/app/captcha/rotation/image\",\r\n {\r\n params: {\r\n scene: props.scene,\r\n t: Math.random(),\r\n },\r\n responseType: \"blob\",\r\n }\r\n );\r\n\r\n if (!(response.data instanceof Blob)) {\r\n return;\r\n }\r\n\r\n imageUrl.value = URL.createObjectURL(response.data);\r\n } finally {\r\n loading.value = false;\r\n }\r\n\r\n // const clientId = await webHttpRequest.getClientID();\r\n // webHttpRequest.getInterceptors\r\n // return await new Promise(reslove=>{\r\n\r\n // const img = new Image();\r\n\r\n // img.onload = ()=>{\r\n // imageUrl.value = img.src;\r\n // reslove(undefined);\r\n // loading.value = false;\r\n // }\r\n\r\n // img.src = `api/ms/app/captcha/rotation/image?scene=${props.scene}&t=${Math.random()}&rcid=${clientId}`\r\n // })\r\n };\r\n\r\n const handleSwitchConfirm = () => {\r\n emit(\"confirm\", unref(deg));\r\n };\r\n\r\n const handleMouseDown = (mouseDownEvent: MouseEvent | TouchEvent) => {\r\n if (unref(isError)) {\r\n return;\r\n }\r\n\r\n const startX =\r\n mouseDownEvent instanceof MouseEvent\r\n ? mouseDownEvent.clientX\r\n : mouseDownEvent.touches[0].clientX;\r\n const disposable = new Disposable();\r\n const totalWidth = unref(wrapperEl)!.getBoundingClientRect().width;\r\n\r\n const handleMouseMove = (event: MouseEvent | TouchEvent) => {\r\n const moveX =\r\n event instanceof MouseEvent\r\n ? event.clientX\r\n : event.touches[0].clientX;\r\n\r\n // 限定宽度范围\r\n slideWidth = Math.min(Math.max(moveX - startX + 48, 48), totalWidth);\r\n\r\n deg.value = Math.floor(((slideWidth - 48) / (totalWidth - 48)) * 360);\r\n\r\n unref(grandEl)!.style.width = `${slideWidth}px`;\r\n unref(buttonEl)!.style.transform = `translateX(${slideWidth - 48}px)`;\r\n };\r\n\r\n const handleMouseUp = (event: MouseEvent | TouchEvent) => {\r\n if (deg.value !== 0) {\r\n handleSwitchConfirm();\r\n }\r\n\r\n disposable.dispose();\r\n };\r\n\r\n document.addEventListener(\"mousemove\", handleMouseMove);\r\n document.addEventListener(\"touchmove\", handleMouseMove);\r\n document.addEventListener(\"mouseup\", handleMouseUp);\r\n document.addEventListener(\"touchend\", handleMouseUp);\r\n document.addEventListener(\"touchcancel\", handleMouseUp);\r\n\r\n disposable.register(\r\n createDisposable(() => {\r\n document.removeEventListener(\"mousemove\", handleMouseMove);\r\n document.removeEventListener(\"touchmove\", handleMouseMove);\r\n document.removeEventListener(\"mouseup\", handleMouseUp);\r\n document.removeEventListener(\"touchend\", handleMouseUp);\r\n document.removeEventListener(\"touchcancel\", handleMouseUp);\r\n })\r\n );\r\n };\r\n\r\n const reset = () => {\r\n unref(grandEl)!.style.width = ``;\r\n unref(buttonEl)!.style.transform = ``;\r\n };\r\n\r\n expose({\r\n fail: () => {\r\n isError.value = true;\r\n\r\n setTimeout(() => {\r\n isError.value = false;\r\n\r\n reset();\r\n }, 1000);\r\n },\r\n });\r\n\r\n onMounted(async () => {\r\n await loadImage();\r\n });\r\n\r\n return () => {\r\n return (\r\n <Fragment>\r\n <div class=\"mk-verify-dialog__wrapper\" v-loading={unref(loading)}>\r\n <div\r\n class=\"mk-verify-dialog__image\"\r\n ref=\"imageEl\"\r\n style={imageStyle.value}\r\n />\r\n <div class=\"mk-verify-dialog__coordinate\" />\r\n </div>\r\n <div class={[\"mk-verify-switch\", unref(isError) ? \"is-error\" : \"\"]}>\r\n <div\r\n class=\"mk-verify-switch__wrapper\"\r\n ref={((el: HTMLDivElement) => (wrapperEl.value = el)) as any}\r\n >\r\n <div\r\n class=\"mk-verify-switch__button-grand\"\r\n ref={((el: HTMLDivElement) => (grandEl.value = el)) as any}\r\n />\r\n <div\r\n class=\"mk-verify-switch__button\"\r\n ref={((el: HTMLDivElement) => (buttonEl.value = el)) as any}\r\n onMousedown={handleMouseDown}\r\n onTouchstart={handleMouseDown}\r\n />\r\n </div>\r\n </div>\r\n </Fragment>\r\n );\r\n };\r\n },\r\n});\r\n","import {Dialoger} from \"@maketribe/dm\";\r\nimport VerifyPanel from \"./verify-panel\";\r\n\r\ntype VerifyCodeOptions = { sence: string, title: string, width: string }\r\n\r\nasync function OpenVerifyCode(options: VerifyCodeOptions): Promise<any> {\r\n return new Promise((resolve) => {\r\n\r\n const dialogInstance = Dialoger.customRender({\r\n width: options.width ?? \"300px\",\r\n title: options.title ?? \"图片验证\",\r\n class: \"mk-verify-dialog\",\r\n body: () => (\r\n <VerifyPanel scene={options.sence} onConfirm={\r\n result => {\r\n dialogInstance.destroy();\r\n resolve(result)\r\n }\r\n }></VerifyPanel>\r\n ),\r\n footer: () => \"\",\r\n onClose: () => {\r\n setTimeout(() => {\r\n dialogInstance.destroy();\r\n }, 100);\r\n },\r\n });\r\n });\r\n}\r\n\r\nexport default OpenVerifyCode;\r\n","import OpenVerifyCode from \"./verify-dialog-api\"\r\n\r\nexport const MKOpenVerifyCode = OpenVerifyCode;\r\nexport default MKOpenVerifyCode;\r\n","import { Disposable } from \"@maketribe/utils\";\r\nimport { MSAppClient } from \"../../../core\";\r\nimport { Dialoger, LoadingManager, Messager } from \"@maketribe/dm\";\r\nimport { R } from \"@maketribe/request\";\r\n\r\nexport type ResourceInfo = {\r\n name: string;\r\n path: string;\r\n isDirectory: boolean;\r\n extension: string;\r\n length: string;\r\n lastModified: string;\r\n isSelected: boolean;\r\n};\r\n\r\nexport type ResourceManagerOptions = {\r\n extensions?: string[];\r\n baseURL: string;\r\n};\r\n\r\nexport class ResourceManager extends Disposable {\r\n directories: string[];\r\n\r\n resourceInfoList: ResourceInfo[];\r\n\r\n loadingManager: LoadingManager;\r\n\r\n isShowEditDialog: boolean = false;\r\n\r\n currentEditText: string = \"\";\r\n\r\n filterExtensions: string[] = [];\r\n\r\n baseURL: string = \"\";\r\n\r\n get selectResourceList() {\r\n return this.resourceInfoList.filter((item) => item.isSelected);\r\n }\r\n\r\n get loading() {\r\n return this.loadingManager.loading;\r\n }\r\n\r\n constructor(options: ResourceManagerOptions) {\r\n super();\r\n\r\n this.directories = [];\r\n\r\n this.resourceInfoList = [];\r\n\r\n this.loadingManager = new LoadingManager();\r\n\r\n this.filterExtensions = options.extensions ?? [];\r\n this.baseURL = options.baseURL;\r\n }\r\n\r\n async loadResourceInfoList(\r\n toPath: string = this.directories.length\r\n ? `/${this.directories.join(\"/\")}`\r\n : \"\"\r\n ) {\r\n const httpRequest = MSAppClient.instance!.httpRequest;\r\n\r\n try {\r\n this.loadingManager.startLoading();\r\n\r\n const response = await httpRequest.post<R<ResourceInfo[]>>(\r\n `${this.baseURL}/list`,\r\n {\r\n directoryPath: toPath,\r\n extensions: this.filterExtensions,\r\n }\r\n );\r\n\r\n if (response.data.code !== 200) {\r\n Messager.error({ message: response.data.msg });\r\n this.resourceInfoList = [];\r\n return;\r\n }\r\n\r\n this.resourceInfoList = response.data.data.map((item) => ({\r\n ...item,\r\n isSelected: false,\r\n }));\r\n\r\n var directorySegments = toPath.startsWith(\"/\")\r\n ? toPath.slice(1).split(\"/\")\r\n : toPath.split(\"/\");\r\n\r\n this.directories = directorySegments.filter(Boolean);\r\n } catch (e) {\r\n console.error(e);\r\n\r\n Messager.error({ message: \"网络异常\" });\r\n } finally {\r\n this.loadingManager.completeLoading();\r\n }\r\n }\r\n\r\n async deleteSelectResourceList() {\r\n const httpRequest = MSAppClient.instance!.httpRequest;\r\n\r\n try {\r\n this.loadingManager.startLoading();\r\n\r\n const response = await httpRequest.post(`${this.baseURL}/delete`, {\r\n paths: this.selectResourceList.map((item) => item.path),\r\n });\r\n\r\n if (response.data.code !== 200) {\r\n Messager.error({ message: response.data.msg });\r\n this.loadResourceInfoList();\r\n return;\r\n }\r\n\r\n await this.loadResourceInfoList();\r\n } catch (e) {\r\n console.error(e);\r\n\r\n Messager.error({ message: \"网络异常\" });\r\n } finally {\r\n this.loadingManager.completeLoading();\r\n }\r\n }\r\n // 暂不做调整\r\n async getExistPathList(pathList: string[]) {\r\n const httpRequest = MSAppClient.instance!.httpRequest;\r\n\r\n try {\r\n this.loadingManager.startLoading();\r\n\r\n const directoryPath = this.directories.length\r\n ? `/${this.directories.join(\"/\")}`\r\n : \"\";\r\n\r\n return await httpRequest.post(`${this.baseURL}/exist-path-list`, {\r\n pathList,\r\n directoryPath,\r\n });\r\n } catch (e) {\r\n console.error(e);\r\n\r\n Messager.error({ message: \"网络异常\" });\r\n\r\n throw e;\r\n } finally {\r\n this.loadingManager.completeLoading();\r\n }\r\n }\r\n\r\n async uploadResourceList(files: File[]) {\r\n const httpRequest = MSAppClient.instance!.httpRequest;\r\n\r\n try {\r\n this.loadingManager.startLoading();\r\n\r\n var directory = this.directories.length\r\n ? `/${this.directories.join(\"/\")}`\r\n : \"\";\r\n\r\n var formData = new FormData();\r\n for (var i = 0; i < files.length; i++) {\r\n formData.append(files[i].name, files[i]);\r\n }\r\n formData.append(\"directory\", directory);\r\n\r\n const response = await httpRequest.post(`${this.baseURL}/save`, formData);\r\n\r\n if (response.data.code !== 200) {\r\n Messager.error({ message: response.data.msg });\r\n this.loadResourceInfoList();\r\n return;\r\n }\r\n\r\n await this.loadResourceInfoList();\r\n } catch (e) {\r\n console.error(e);\r\n\r\n Messager.error({ message: \"网络异常\" });\r\n } finally {\r\n this.loadingManager.completeLoading();\r\n }\r\n }\r\n\r\n async downloadSelectResource() {\r\n const httpRequest = MSAppClient.instance!.httpRequest;\r\n\r\n try {\r\n const response = await httpRequest.post<Blob>(\r\n `${this.baseURL}/download`,\r\n {\r\n path: this.selectResourceList[0].path,\r\n },\r\n { responseType: \"blob\" }\r\n );\r\n\r\n const url = URL.createObjectURL(response.data);\r\n\r\n var aElement = document.createElement(\"a\");\r\n aElement.href = url;\r\n aElement.target = \"_blank\";\r\n aElement.download = this.selectResourceList[0].name;\r\n\r\n aElement.click();\r\n\r\n URL.revokeObjectURL(url);\r\n } catch (e) {\r\n console.error(e);\r\n\r\n Messager.error({ message: \"网络异常\" });\r\n }\r\n }\r\n\r\n async editSelectFile() {\r\n const httpRequest = MSAppClient.instance!.httpRequest;\r\n\r\n try {\r\n this.loadingManager.startLoading();\r\n\r\n var resourceInfo = this.selectResourceList[0];\r\n\r\n const response = await httpRequest.post(`${this.baseURL}/text/read`, {\r\n path: resourceInfo.path,\r\n });\r\n\r\n this.isShowEditDialog = true;\r\n this.currentEditText = response.data.data;\r\n } finally {\r\n this.loadingManager.completeLoading();\r\n }\r\n }\r\n\r\n async saveEditFile() {\r\n const httpRequest = MSAppClient.instance!.httpRequest;\r\n\r\n try {\r\n this.loadingManager.startLoading();\r\n\r\n var resourceInfo = this.selectResourceList[0];\r\n\r\n const response = await httpRequest.post(`${this.baseURL}/text/write`, {\r\n path: resourceInfo.path,\r\n content: this.currentEditText,\r\n });\r\n\r\n if (response.data.code !== 200) {\r\n Messager.error({ message: response.data.msg });\r\n return;\r\n }\r\n\r\n await this.loadResourceInfoList();\r\n\r\n this.isShowEditDialog = false;\r\n this.currentEditText = \"\";\r\n } finally {\r\n this.loadingManager.completeLoading();\r\n }\r\n }\r\n\r\n clearAllSelect() {\r\n for (var resourceInfo of this.selectResourceList) {\r\n resourceInfo.isSelected = false;\r\n }\r\n }\r\n\r\n handleSelectClick(event: MouseEvent, item: ResourceInfo) {\r\n if (!event.ctrlKey) {\r\n this.clearAllSelect();\r\n\r\n item.isSelected = true;\r\n return;\r\n }\r\n\r\n item.isSelected = !item.isSelected;\r\n }\r\n}\r\n","<template>\r\n <div :class=\"['resource-item', resourceItem.isSelected ? 'is-selected' : '']\">\r\n <div class=\"resource-item__wrapper\">\r\n <div class=\"resource-item__main\">\r\n <MKSvgIcon :name=\"iconClass\" />\r\n </div>\r\n <div class=\"resource-item__label\">\r\n <span :title=\"resourceItem.name\">{{ resourceItem.name }}</span>\r\n </div>\r\n <div class=\"resource-item__time\">\r\n <span>{{ resourceItem.lastModified }}</span>\r\n </div>\r\n <div class=\"resource-item__size\">\r\n <span v-if=\"resourceItem.isDirectory\"> - </span>\r\n <span v-else> {{ resourceItem.length > 1024 ?\r\n (resourceItem.length > 1024*1024 ? Math.ceil(resourceItem.length/1024/1024*100)/100+\" MB\":Math.ceil(resourceItem.length/1024*100)/100+\" KB\") \r\n : resourceItem.length+\" 字节\" }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed } from \"vue\";\r\nimport { MKSvgIcon } from \"../../../../basic\";\r\n\r\nconst props = defineProps({\r\n resourceItem: {\r\n type: Object,\r\n required: true,\r\n },\r\n});\r\n\r\nconst iconClass = computed(() => {\r\n if (props.resourceItem.isDirectory) {\r\n return \"ph:folder\";\r\n }\r\n\r\n switch (props.resourceItem.extension) {\r\n case \".html\":\r\n return \"ph:file-html\";\r\n case \".jpeg\":\r\n case \".jpg\":\r\n case \".png\":\r\n return \"ph:file-image\";\r\n case \".pdf\":\r\n return \"ph:file-pdf\";\r\n case \".dll\":\r\n return \"ph:file-x\";\r\n }\r\n\r\n return \"ph:file\";\r\n});\r\n</script>\r\n","<template>\r\n <div class=\"resource-list\" :class=\"{row:listMode=='row'}\">\r\n <div class=\"resource-list-header\">\r\n <ElBreadcrumb>\r\n <ElBreadcrumbItem>\r\n <span class=\"resource-list-breadcrumb-item\" v-if=\"resourceManager.directories.length>=1\"\r\n @click=\"handleBreadcrumbClick(resourceManager.directories.length-2)\"\r\n >\r\n <MKSvgIcon name=\"ep:arrow-left-bold\" />\r\n 返回\r\n </span>\r\n <span\r\n class=\"resource-list-breadcrumb-item\"\r\n @click=\"handleBreadcrumbClick()\"\r\n >\r\n <MKSvgIcon name=\"ep:home-filled\" />\r\n 根目录\r\n </span>\r\n </ElBreadcrumbItem>\r\n <ElBreadcrumbItem\r\n v-for=\"(item, i) in resourceManager.directories\"\r\n :key=\"item\"\r\n >\r\n <span\r\n class=\"resource-list-breadcrumb-item\"\r\n @click=\"handleBreadcrumbClick(i)\"\r\n >\r\n {{ item }}\r\n </span>\r\n </ElBreadcrumbItem>\r\n </ElBreadcrumb>\r\n <div class=\"resource-list-mode\">\r\n <el-button text @click=\"sortMethodName=sortMethodName=='time'?'name':'time'\">{{sortMethodName=='name'?\"按照时间排序\":\"按照文件名排序\"}}</el-button>\r\n <el-button text @click=\"listMode = listMode=='row' ? 'col':'row'\">\r\n <MKSvgIcon v-if=\"listMode=='row'\" name=\"ep:grid\" />\r\n <MKSvgIcon v-else name=\"ep:fold\" />\r\n </el-button>\r\n <ElButton type=\"primary\" @click=\"handleUploadClick\">上传</ElButton>\r\n </div>\r\n </div>\r\n\r\n <div\r\n class=\"resource-list-main\"\r\n @click=\"handleMainClick\"\r\n @dragover.prevent\r\n @drop.prevent=\"handleDrop\"\r\n >\r\n <ElScrollbar height=\"100%\">\r\n <div class=\"resource-list-list\">\r\n <div\r\n v-for=\"item in resourceInfoList\"\r\n class=\"resource-list__item\"\r\n @click.stop=\"handleClick($event, item)\"\r\n @dblclick=\"handleDbClick(item)\"\r\n >\r\n <ResourceItem :key=\"item.path\" :resourceItem=\"item\" />\r\n </div>\r\n </div>\r\n </ElScrollbar>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { onMounted,ref , computed} from \"vue\";\r\nimport { ElScrollbar } from \"element-plus\";\r\nimport { ResourceManager, ResourceInfo } from \"./ResourceManager\";\r\nimport ResourceItem from \"./components/resource-item/index.vue\";\r\nimport {MKSvgIcon} from \"../../basic\";\r\n\r\nconst props = defineProps({\r\n resourceManager: {\r\n type: ResourceManager,\r\n required: true,\r\n }\r\n});\r\n\r\n// 排序方法 修改时间排序 名称排序 time | name\r\nconst sortMethodName = ref(\"time\")\r\n\r\n/**\r\n * 资源列表\r\n */\r\nconst resourceInfoList = computed(()=>{\r\n\r\n if(sortMethodName.value == \"name\"){\r\n return [\r\n ...props.resourceManager.resourceInfoList.\r\n filter(item=>item.isDirectory).sort((a,b)=>a.name > b.name ? 1 : -1),\r\n ...props.resourceManager.resourceInfoList.\r\n filter(item=>!item.isDirectory).sort((a,b)=>a.name > b.name ? 1 : -1)\r\n ];\r\n }\r\n\r\n return props.resourceManager.resourceInfoList.sort((a,b)=>a.lastModified < b.lastModified ? 1 : -1)\r\n})\r\n\r\nconst emit = defineEmits([\"drop\"]);\r\nconst listMode = ref(\"row\")\r\n\r\nconst handleBreadcrumbClick = (index?: number) => {\r\n if (typeof index !== \"number\") {\r\n props.resourceManager.loadResourceInfoList(\"/\");\r\n\r\n return;\r\n }\r\n\r\n props.resourceManager.loadResourceInfoList(\r\n props.resourceManager.directories.splice(0, index + 1).join(\"/\")\r\n );\r\n};\r\n\r\nconst handleMainClick = () => {\r\n props.resourceManager.clearAllSelect();\r\n};\r\n\r\nconst handleClick = (event: MouseEvent, item: ResourceInfo) => {\r\n props.resourceManager.handleSelectClick(event, item);\r\n};\r\n\r\nconst handleDbClick = (item: ResourceInfo) => {\r\n if (!item.isDirectory) {\r\n return;\r\n }\r\n\r\n props.resourceManager.loadResourceInfoList(item.path);\r\n};\r\n\r\nconst handleDrop = async (event: DragEvent) => {\r\n emit(\"drop\", event);\r\n};\r\n\r\nconst handleUploadClick = () => {\r\n /** @type {HTMLInputElement} */\r\n var input = document.createElement(\"input\");\r\n input.type = \"file\";\r\n input.multiple = true;\r\n\r\n input.addEventListener(\"change\", () => {\r\n var files = new Array(input.files!.length)\r\n .fill(0)\r\n .map((_, i) => input.files![i]);\r\n\r\n props.resourceManager.uploadResourceList(files);\r\n });\r\n\r\n input.click();\r\n};\r\n\r\n\r\nonMounted(() => {\r\n props.resourceManager.loadResourceInfoList();\r\n});\r\n</script>\r\n","import { withInstall } from \"@maketribe/utils\";\r\nimport ResourceList from \"./resource-list.vue\";\r\n\r\nexport const MKResourceList = withInstall(ResourceList);\r\n\r\nexport default MKResourceList;\r\n\r\nexport * from \"./ResourceManager\";\r\n","<template>\r\n <div v-loading=\"resourceManager.loading\" class=\"resource-manager\">\r\n <el-page-header style=\"background-color: #fff;padding: 10px;\" :icon=\"null\">\r\n <template #title>\r\n <h3 style=\"color: var(--el-text-color-regular);\" m=\"l-[10px]\" flex=\"~ items-center\">\r\n <MKSvgIcon name=\"octicon:project-template-24\" m=\"r-[5px]\" />\r\n <span style=\"margin-left:10px\">{{props.title}}</span>\r\n </h3>\r\n </template>\r\n <template #extra>\r\n <ElButton\r\n v-if=\"selectResourceCount > 0\"\r\n type=\"danger\"\r\n @click=\"handleDeleteClick\"\r\n >\r\n 删除\r\n </ElButton>\r\n <ElButton\r\n v-if=\"\r\n selectResourceCount === 1 &&\r\n !resourceManager.selectResourceList[0].isDirectory\r\n \"\r\n @click=\"handleEdit\"\r\n >\r\n 编辑\r\n </ElButton>\r\n <ElButton\r\n v-if=\"\r\n selectResourceCount === 1 &&\r\n !resourceManager.selectResourceList[0].isDirectory\r\n \"\r\n @click=\"handleDownload()\"\r\n >\r\n 下载\r\n </ElButton>\r\n <!-- <ElButton type=\"primary\" @click=\"handleUploadClick\">上传</ElButton> -->\r\n <slot name=\"tools\"></slot>\r\n </template>\r\n </el-page-header>\r\n <MKResourceList :resourceManager=\"resourceManager\" @drop=\"handleDrop\" />\r\n </div>\r\n\r\n <ElDialog v-model=\"isShowEditDialog\" @close=\"handleEditDialogClose\">\r\n <MKCodeEditor\r\n v-if=\"isShowEditDialog\"\r\n v-model=\"resourceManager.currentEditText\"\r\n />\r\n <template #footer>\r\n <ElButton @click=\"handleEditDialogClose\">取消</ElButton>\r\n <ElButton\r\n type=\"primary\"\r\n v-loading=\"resourceManager.loading\"\r\n @click=\"handleEditDialogConfirm\"\r\n >\r\n 保存\r\n </ElButton>\r\n </template>\r\n </ElDialog>\r\n\r\n <ElDialog\r\n v-model=\"isShowConfirmDialog\"\r\n title=\"文件已存在\"\r\n @close=\"handleDialogCancelClick\"\r\n >\r\n <div v-for=\"path in existPathList\" :key=\"path\">{{ path }}</div>\r\n\r\n <template #footer>\r\n <ElButton type=\"danger\" @click=\"handleDialogOverrideClick\">覆盖</ElButton>\r\n <ElButton type=\"warning\" @click=\"handleDialogSkipClick\">跳过</ElButton>\r\n <ElButton @click=\"handleDialogCancelClick\">取消</ElButton>\r\n </template>\r\n </ElDialog>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { onMounted, computed, unref, ref } from \"vue\";\r\nimport { ElButton, ElMessageBox, ElMessage, ElDialog } from \"element-plus\";\r\nimport { MKCodeEditor } from \"../../basic\";\r\nimport { MKResourceList, ResourceManager } from \"../resource-list\";\r\nimport {MKSvgIcon} from \"../../basic\";\r\n\r\nconst props = defineProps({\r\n title:{type:String,default:\"\"},\r\n resourceManager: {\r\n type: ResourceManager,\r\n required: true,\r\n },\r\n});\r\n\r\nconst isShowConfirmDialog = ref(false);\r\n\r\nlet waitUploadFiles: File[] = [];\r\nconst existPathList = ref([] as string[]);\r\n\r\nconst resourceManager = computed(() => props.resourceManager);\r\n\r\nconst isShowEditDialog = computed(\r\n () => unref(resourceManager).isShowEditDialog\r\n);\r\n\r\nconst selectResourceCount = computed(\r\n () => unref(resourceManager).selectResourceList.length\r\n);\r\n\r\nconst handleDeleteClick = async () => {\r\n const isConfirm = await ElMessageBox.confirm(\"是否删除选中文件\", {\r\n type: \"warning\",\r\n }).then(\r\n () => true,\r\n () => false\r\n );\r\n\r\n if (!isConfirm) {\r\n return;\r\n }\r\n\r\n unref(resourceManager).deleteSelectResourceList();\r\n};\r\n\r\nconst handleEdit = () => {\r\n unref(resourceManager).editSelectFile();\r\n};\r\n\r\nconst handleEditDialogConfirm = () => {\r\n unref(resourceManager).saveEditFile();\r\n};\r\n\r\nconst handleEditDialogClose = () => {\r\n unref(resourceManager).isShowEditDialog = false;\r\n unref(resourceManager).currentEditText = \"\";\r\n};\r\n\r\n// const handleUploadClick = () => {\r\n// /** @type {HTMLInputElement} */\r\n// var input = document.createElement(\"input\");\r\n// input.type = \"file\";\r\n// input.multiple = true;\r\n\r\n// input.addEventListener(\"change\", () => {\r\n// var files = new Array(input.files!.length)\r\n// .fill(0)\r\n// .map((_, i) => input.files![i]);\r\n\r\n// unref(resourceManager).uploadResourceList(files);\r\n// });\r\n\r\n// input.click();\r\n// };\r\n\r\nconst handleDownload = () => {\r\n unref(resourceManager).downloadSelectResource();\r\n};\r\n\r\nconst handleDrop = async (event: DragEvent) => {\r\n waitUploadFiles = [];\r\n\r\n var _items = event.dataTransfer?.items;\r\n\r\n var fileSystemEntry = _items![0].webkitGetAsEntry() as any;\r\n\r\n const internalProcess = async (item: any, path: string = \"\") => {\r\n if (item.isFile) {\r\n return [\r\n await new Promise((resolve) => {\r\n item.file((file: File) => {\r\n resolve(\r\n new File([file], `${path}${file.name}`, { type: file.type })\r\n );\r\n });\r\n }),\r\n ] as File[];\r\n } else if (item.isDirectory) {\r\n var directoryReader = item.createReader();\r\n\r\n const entries = (await new Promise((resolve) => {\r\n directoryReader.readEntries(resolve);\r\n })) as any[];\r\n\r\n var result: File[] = [];\r\n\r\n for (let i = 0; i < entries.length; i++) {\r\n result = result.concat(\r\n await internalProcess(entries[i], `${path}${item.name}/`)\r\n );\r\n }\r\n\r\n return result;\r\n }\r\n\r\n return [];\r\n };\r\n\r\n const files = (waitUploadFiles = await internalProcess(fileSystemEntry));\r\n\r\n try {\r\n unref(resourceManager).loadingManager.startLoading();\r\n\r\n const checkResponse = await unref(resourceManager).getExistPathList(\r\n files.map((file) => file.name)\r\n );\r\n\r\n if (checkResponse.data.code !== 200) {\r\n ElMessage.error({ message: checkResponse.data.msg });\r\n return;\r\n }\r\n\r\n if (checkResponse.data.data?.length === 0) {\r\n await unref(resourceManager).uploadResourceList(files);\r\n\r\n waitUploadFiles = [];\r\n return;\r\n }\r\n existPathList.value = checkResponse.data.data ?? [];\r\n\r\n isShowConfirmDialog.value = true;\r\n } catch (e) {\r\n console.log(e);\r\n ElMessage.error(\"网络异常,上传失败\");\r\n } finally {\r\n unref(resourceManager).loadingManager.completeLoading();\r\n }\r\n};\r\n\r\nconst handleDialogOverrideClick = async () => {\r\n try {\r\n await unref(resourceManager).uploadResourceList(waitUploadFiles);\r\n } catch (e) {\r\n console.log(e);\r\n ElMessage.error(\"网络异常,上传失败\");\r\n }\r\n\r\n handleDialogCancelClick();\r\n};\r\n\r\nconst handleDialogSkipClick = async () => {\r\n try {\r\n const files = waitUploadFiles.filter(\r\n (file) => !unref(existPathList).includes(file.name)\r\n );\r\n if (files.length) {\r\n await unref(resourceManager).uploadResourceList(files);\r\n }\r\n } catch (e) {\r\n console.log(e);\r\n ElMessage.error(\"网络异常,上传失败\");\r\n }\r\n\r\n handleDialogCancelClick();\r\n};\r\n\r\nconst handleDialogCancelClick = () => {\r\n isShowConfirmDialog.value = false;\r\n existPathList.value = [];\r\n waitUploadFiles = [];\r\n};\r\n\r\nonMounted(() => {\r\n unref(resourceManager).loadResourceInfoList();\r\n});\r\n</script>\r\n","import { withInstall } from \"@maketribe/utils\";\r\nimport ResourceManager from \"./resource-manager.vue\";\r\n\r\nexport const MKResourceManager = withInstall(ResourceManager);\r\n\r\nexport default MKResourceManager;\r\n","import { Fragment, reactive } from \"vue\";\r\nimport {\r\n MKResourceSelectOptions,\r\n MKResourceSelectResult,\r\n} from \"./resource-select-types\";\r\nimport { Dialoger } from \"@maketribe/dm\";\r\nimport MKResourceList, { ResourceManager } from \"../resource-list\";\r\nimport { ElButton } from \"element-plus\";\r\n\r\nasync function ResourceSelect(\r\n options: MKResourceSelectOptions\r\n): Promise<MKResourceSelectResult> {\r\n return new Promise((resolve) => {\r\n const resourceManager = reactive(\r\n new ResourceManager(options)\r\n ) as ResourceManager;\r\n\r\n const dialogInstance = Dialoger.customRender({\r\n width: options.width ?? \"932px\",\r\n title: options.title ?? \"选择文件\",\r\n class: \"resource-select-dialog\",\r\n body: () => (\r\n <MKResourceList resourceManager={resourceManager}></MKResourceList>\r\n ),\r\n footer: () => {\r\n const file =\r\n resourceManager.selectResourceList.filter(\r\n (item) => !item.isDirectory\r\n )[0] ?? null;\r\n\r\n return (\r\n <Fragment>\r\n <ElButton\r\n onClick={() => {\r\n dialogInstance.destroy();\r\n resolve({ confirmed: false, data: null, path: \"\" });\r\n }}\r\n >\r\n 取消\r\n </ElButton>\r\n <ElButton\r\n type=\"primary\"\r\n disabled={!file}\r\n onClick={() => {\r\n dialogInstance.destroy();\r\n\r\n resolve({ confirmed: true, data: file, path: file.path });\r\n }}\r\n >\r\n 确认\r\n </ElButton>\r\n </Fragment>\r\n );\r\n },\r\n onClose: () => {\r\n setTimeout(() => {\r\n dialogInstance.destroy();\r\n }, 100);\r\n },\r\n });\r\n });\r\n}\r\n\r\nexport default ResourceSelect;\r\n","import ResourceSelect from \"./resource-select-api\";\r\nexport * from \"./resource-select-types\";\r\n\r\nexport const MKResourceSelect = ResourceSelect;\r\n\r\nexport default MKResourceSelect;\r\n","import {\r\n DataForm,\r\n DataFormDialogOptions,\r\n DataTable,\r\n DataTableSelectDialogResult,\r\n DialogInstance,\r\n IDialogMessage,\r\n IDialogRenderOptions,\r\n Messager,\r\n SkeletonDialoger,\r\n TableActionColumn,\r\n} from \"@maketribe/dm\";\r\nimport { Event } from \"@maketribe/utils\";\r\nimport { ElButton, ElDrawer, ElMessageBox, ElScrollbar } from \"element-plus\";\r\nimport { isFunction } from \"lodash-es\";\r\nimport { MKDataForm, MKDataTable, MKForm } from \"../components\";\r\nimport { Fragment, reactive } from \"vue\";\r\nimport { I18n } from \"@maketribe/locale\";\r\n\r\nlet uid = 0;\r\n\r\nexport class DialogerImpl extends SkeletonDialoger {\r\n dialogInstanceCreateEvent: Event<DialogInstance> = new Event();\r\n\r\n async prompt(options: IDialogMessage): Promise<string> {\r\n const promptResult = await ElMessageBox.prompt(\r\n options.message,\r\n options.title,\r\n options\r\n );\r\n\r\n return promptResult.value;\r\n }\r\n\r\n async confirm(options: IDialogMessage): Promise<boolean> {\r\n try {\r\n await ElMessageBox.confirm(options.message, options.title, options);\r\n return true;\r\n } catch (e) {\r\n return false;\r\n }\r\n }\r\n\r\n async alert(options: IDialogMessage): Promise<void> {\r\n await ElMessageBox.alert(options.message, options.title, options);\r\n }\r\n\r\n customRender(options: IDialogRenderOptions): DialogInstance {\r\n let visible = true;\r\n\r\n const dialogInstance: DialogInstance = {\r\n class: \"\",\r\n ...options,\r\n id: uid++,\r\n get visible() {\r\n return visible;\r\n },\r\n set visible(v) {\r\n visible = v;\r\n dialogInstance.visibleChangeEvent.emit(visible);\r\n },\r\n visibleChangeEvent: new Event(),\r\n destroyEvent: new Event(),\r\n destroy: () => {\r\n dialogInstance.visible = false;\r\n dialogInstance.destroyEvent.emit();\r\n },\r\n };\r\n this.dialogInstanceCreateEvent.emit(dialogInstance);\r\n\r\n return dialogInstance;\r\n }\r\n\r\n async custom(options: IDialogRenderOptions): Promise<boolean> {\r\n return new Promise<boolean>((resolve) => {\r\n const dialogInstance = this.customRender({\r\n ...options,\r\n onConfirm: async () => {\r\n if (\r\n isFunction(options.onConfirm)\r\n ? (await options.onConfirm()) === false\r\n : false\r\n ) {\r\n return false;\r\n }\r\n\r\n dialogInstance.destroy();\r\n\r\n resolve(true);\r\n },\r\n onCancel: async () => {\r\n if (\r\n isFunction(options.onCancel)\r\n ? (await options.onCancel()) === false\r\n : false\r\n ) {\r\n return false;\r\n }\r\n\r\n dialogInstance.destroy();\r\n\r\n resolve(false);\r\n },\r\n });\r\n });\r\n }\r\n\r\n async dataTableSelectDialog(\r\n dataTable: DataTable\r\n ): Promise<DataTableSelectDialogResult> {\r\n dataTable = reactive(dataTable) as DataTable;\r\n\r\n dataTable.afterInitdEvent.once(() => {\r\n // 过滤掉操作列\r\n const columns = dataTable\r\n .getColumns()\r\n .filter((column) => column.name !== TableActionColumn.actionColumnName);\r\n dataTable.setColumns(columns);\r\n });\r\n\r\n return new Promise((resolve) => {\r\n const handleConfirm = () => {\r\n resolve({ isConfirm: true, selections: dataTable.getSelection() });\r\n\r\n dataTable.setList([]);\r\n dataTable.setSelection([]);\r\n\r\n dialogInstance.destroy();\r\n };\r\n\r\n const handleCancel = () => {\r\n resolve({ isConfirm: false, selections: [] });\r\n\r\n dialogInstance.destroy();\r\n };\r\n\r\n const dialogInstance = this.customRender({\r\n class: \"mk-data-table-select-dialog\",\r\n width: \"80%\",\r\n body: () => {\r\n return (\r\n <div class=\"mk-data-table-select-dialog__main\">\r\n <MKDataTable dataTable={dataTable} selection />\r\n </div>\r\n );\r\n },\r\n footer: () => {\r\n return (\r\n <Fragment>\r\n <ElButton\r\n type=\"primary\"\r\n onClick={handleConfirm}\r\n disabled={dataTable.getSelection().length === 0}\r\n >\r\n 确定\r\n </ElButton>\r\n <ElButton onClick={handleCancel}>取消</ElButton>\r\n </Fragment>\r\n );\r\n },\r\n });\r\n });\r\n }\r\n\r\n async dataFormDialog(\r\n dataFormOptions: DataFormDialogOptions\r\n ): Promise<DialogInstance> {\r\n return new Promise((resolve) => {\r\n const dataForm = reactive(dataFormOptions.dataForm) as DataForm;\r\n\r\n let title = \"\";\r\n\r\n if (dataFormOptions.customDataFormStatus !== true) {\r\n if (dataFormOptions.recId) {\r\n dataForm.editRecord(dataFormOptions.recId);\r\n } else {\r\n dataForm.addRecord();\r\n }\r\n\r\n title = dataFormOptions.recId ? \"编辑\" : \"新增\";\r\n }\r\n\r\n const dialogInstance = this.customRender({\r\n title: dataFormOptions.title ?? title,\r\n onClose: () => {\r\n dataForm.cancel();\r\n\r\n dialogInstance.destroy();\r\n },\r\n body: () => {\r\n return (\r\n <ElScrollbar max-height=\"550px\">\r\n <MKDataForm dataForm={dataForm}>\r\n <MKForm dataForm={dataForm} />\r\n </MKDataForm>\r\n </ElScrollbar>\r\n );\r\n },\r\n\r\n footer: () => {\r\n return (\r\n <Fragment>\r\n <ElButton\r\n type=\"primary\"\r\n disabled={!dataForm.isChanged}\r\n loading={!dataForm.allowSubmit}\r\n onClick={async () => {\r\n if (!(await dataForm.validate())) {\r\n return;\r\n }\r\n\r\n if (await dataForm.simpleSubmit()) {\r\n dialogInstance.destroy();\r\n }\r\n }}\r\n >\r\n {I18n.instance.translate(\"mk.dataForm.saveButton\")}\r\n </ElButton>\r\n <ElButton\r\n onClick={() => {\r\n dataForm.cancel();\r\n\r\n dialogInstance.destroy();\r\n }}\r\n >\r\n {I18n.instance.translate(\"mk.dataForm.cancelButton\")}\r\n </ElButton>\r\n </Fragment>\r\n );\r\n },\r\n });\r\n\r\n resolve(dialogInstance);\r\n });\r\n }\r\n}\r\n","import {Fragment, Ref, defineComponent, ref, unref} from \"vue\";\r\nimport {DialogInstance, Dialoger} from \"@maketribe/dm\";\r\nimport {DialogerImpl} from \"../../../message-impl\";\r\nimport {isFunction} from \"lodash-es\";\r\nimport {ElButton, ElDialog} from \"element-plus\";\r\n\r\nexport default defineComponent({\r\n name: \"MKDialogs\",\r\n setup(props) {\r\n const dialogInstances: Ref<DialogInstance[]> = ref([]);\r\n\r\n const dialogImplInstance = Dialoger.implInstance as DialogerImpl | null;\r\n\r\n if (\r\n dialogImplInstance?.dialogInstanceCreateEvent &&\r\n isFunction(dialogImplInstance.dialogInstanceCreateEvent.on)\r\n ) {\r\n dialogImplInstance.dialogInstanceCreateEvent.on((dialogInstance) => {\r\n dialogInstance.destroyEvent.once(() => {\r\n const index = dialogInstances.value.findIndex(\r\n (instance) => dialogInstance.id === instance.id\r\n );\r\n\r\n if (index === -1) {\r\n return;\r\n }\r\n\r\n dialogInstances.value.splice(index, 1);\r\n });\r\n\r\n dialogInstances.value.push(dialogInstance);\r\n });\r\n }\r\n\r\n const handleClose = async (dialogInstance: DialogInstance) => {\r\n if (\r\n isFunction(dialogInstance.onClose)\r\n ? (await dialogInstance.onClose()) === false\r\n : false\r\n ) {\r\n return;\r\n }\r\n\r\n dialogInstance.visible = false;\r\n };\r\n\r\n const handleCancel = async (dialogInstance: DialogInstance) => {\r\n if (\r\n isFunction(dialogInstance.onCancel)\r\n ? (await dialogInstance.onCancel()) === false\r\n : false\r\n ) {\r\n return;\r\n }\r\n\r\n dialogInstance.visible = false;\r\n };\r\n\r\n const handleConfirm = async (dialogInstance: DialogInstance) => {\r\n if (\r\n isFunction(dialogInstance.onConfirm)\r\n ? (await dialogInstance.onConfirm()) === false\r\n : false\r\n ) {\r\n return;\r\n }\r\n\r\n dialogInstance.visible = false;\r\n };\r\n\r\n return () => {\r\n\r\n const dialogs = unref(dialogInstances).map((dialogInstance) => {\r\n return (\r\n <ElDialog\r\n class={dialogInstance.class}\r\n width={dialogInstance.width}\r\n modelValue={dialogInstance.visible}\r\n onUpdate:model-value={(visible: boolean) =>\r\n (dialogInstance.visible = visible)\r\n }\r\n onClose={() => handleClose(dialogInstance)}\r\n title={isFunction(dialogInstance.header)\r\n ? dialogInstance.header?.()\r\n : dialogInstance.title || \"\"}\r\n v-slots={{\r\n default: () => dialogInstance.body(),\r\n footer: () =>\r\n isFunction(dialogInstance.footer) ? (\r\n dialogInstance.footer?.()\r\n ) : (\r\n <Fragment>\r\n <ElButton onClick={() => handleCancel(dialogInstance)}>\r\n {dialogInstance.cancelButtonText ?? \"取消\"}\r\n </ElButton>\r\n <ElButton\r\n type=\"primary\"\r\n onClick={() => handleConfirm(dialogInstance)}\r\n >\r\n {dialogInstance.confirmButtonText ?? \"确认\"}\r\n </ElButton>\r\n </Fragment>\r\n ),\r\n }}\r\n />\r\n );\r\n });\r\n\r\n // const dialogs = unref(dialogInstances).map((dialogInstance) => {\r\n // return (\r\n // <ElDialog\r\n // class={dialogInstance.class}\r\n // modelValue={dialogInstance.visible}\r\n // onUpdate:modelValue={(visible: boolean) =>\r\n // (dialogInstance.visible = visible)\r\n // }\r\n // appendToBody\r\n // destroyOnClose={true}\r\n // width={dialogInstance.width}\r\n // onClose={() => handleClose(dialogInstance)}\r\n // v-slots={{\r\n // header: () =>\r\n // isFunction(dialogInstance.header)\r\n // ? dialogInstance.header?.()\r\n // : dialogInstance.title || \"\",\r\n // default: () => dialogInstance.body(),\r\n // footer: () =>\r\n // isFunction(dialogInstance.footer) ? (\r\n // dialogInstance.footer?.()\r\n // ) : (\r\n // <Fragment>\r\n // <ElButton onClick={() => handleCancel(dialogInstance)}>\r\n // {dialogInstance.cancelButtonText ?? \"取消\"}\r\n // </ElButton>\r\n // <ElButton\r\n // type=\"primary\"\r\n // onClick={() => handleConfirm(dialogInstance)}\r\n // >\r\n // {dialogInstance.confirmButtonText ?? \"确认\"}\r\n // </ElButton>\r\n // </Fragment>\r\n // ),\r\n // }}\r\n // />\r\n // );\r\n // });\r\n\r\n return <Fragment>{dialogs}</Fragment>;\r\n };\r\n },\r\n});\r\n","import Dialogs from \"./dialogs\";\r\n\r\nexport const MKDialogs = Dialogs;\r\n\r\nexport default MKDialogs;\r\n","import { Plugin,createVNode,render } from \"vue\";\r\nimport { makeInstaller } from \"@maketribe/utils\";\r\nimport { Dialoger, Messager, Notificationer } from \"@maketribe/dm\";\r\nimport { DialogerImpl, MessagerImpl, NotificationerImpl } from \"./message-impl\";\r\nimport {\r\n ConfigProviderContext,\r\n MKConfigProvider,\r\n MKDataForm,\r\n MKDataTable,\r\n MKSvgIcon,\r\n provideGlobalConfig,\r\n MKDataTableSelect,\r\n MKPagination,\r\n MKDataTablePagination,\r\n MKSystemProvider,\r\n MKUploadFile,\r\n MKUploadImage,\r\n MKUploadFileUi,\r\n MKWebFileUploadContext,\r\n MKPageContainer,\r\n MKTableHeaderItem,\r\n MKTable,\r\n MKTableView,\r\n MKForm,\r\n MKFormView,\r\n MKImageCropperContent\r\n} from \"./components\";\r\n\r\nconst components: Plugin[] = [\r\n MKConfigProvider,\r\n MKDataForm,\r\n MKDataTable,\r\n MKSvgIcon,\r\n MKDataTableSelect,\r\n MKPagination,\r\n MKDataTablePagination,\r\n MKSystemProvider,\r\n MKUploadFile,\r\n MKUploadImage,\r\n MKUploadFileUi,\r\n MKWebFileUploadContext,\r\n MKPageContainer,\r\n MKTableHeaderItem,\r\n MKTable,\r\n MKTableView,\r\n MKForm,\r\n MKFormView,\r\n MKImageCropperContent\r\n];\r\n\r\nimport { MKDialogs } from \"./layouts/components\"\r\n\r\nexport const installer = makeInstaller<ConfigProviderContext>(\r\n components,\r\n \"1.0.0-dev\",\r\n (app, version, options) => {\r\n if (options) {\r\n provideGlobalConfig(options, app, true);\r\n }\r\n\r\n Messager.implInstance = new MessagerImpl();\r\n Dialoger.implInstance = new DialogerImpl();\r\n Notificationer.implInstance = new NotificationerImpl();\r\n\r\n // 注册通用的 dialog\r\n const dialogContainer = document.createElement('div');\r\n const appContext = app._context;\r\n const vnode = createVNode(MKDialogs);\r\n vnode.appContext = appContext;\r\n \r\n //渲染\r\n render(vnode, dialogContainer);\r\n document.body.appendChild(dialogContainer);\r\n }\r\n);\r\n","<script setup lang=\"ts\">\r\nimport useSettingsStore from \"../../../../store/modules/settings\";\r\nimport {MSAppClient} from \"../../../../core\";\r\n// import imgLogo from \"@/assets/images/logo.png\";\r\n\r\ndefineOptions({\r\n name: \"Logo\",\r\n});\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n showLogo?: boolean;\r\n showTitle?: boolean;\r\n }>(),\r\n {\r\n showLogo: true,\r\n showTitle: true,\r\n }\r\n);\r\n\r\nconst settingsStore = useSettingsStore();\r\n\r\nconst msAppClient = MSAppClient.instance!\r\n\r\n// const title = ref(import.meta.env.VITE_APP_TITLE);\r\n// TODO\r\n// const title = ref(\"码客部落\");\r\nconst title = computed(() => msAppClient.projectName);\r\n\r\n// TODO\r\n// const logo = ref('/favicon.ico');\r\nconst logo = computed(() => msAppClient.logo);\r\n\r\nconst to = computed(() =>\r\n settingsStore.settings.home.enable ? settingsStore.settings.home.fullPath : \"\"\r\n);\r\n\r\nconst visible = computed(() => {\r\n if (props.showLogo && unref(logo)) {\r\n return true;\r\n }\r\n\r\n return !!(props.showTitle && unref(title));\r\n});\r\n</script>\r\n\r\n<template>\r\n <RouterLink\r\n v-if=\"visible\"\r\n :to=\"to\"\r\n class=\"h-[var(--g-sidebar-logo-height)] w-inherit flex-center gap-2 px-3 text-inherit no-underline\"\r\n :class=\"{ 'cursor-pointer': settingsStore.settings.home.enable }\"\r\n :title=\"title\"\r\n >\r\n <img\r\n v-if=\"showLogo && logo\"\r\n :src=\"logo\"\r\n class=\"logo h-[30px] w-[30px] object-contain\"\r\n />\r\n <span v-if=\"showTitle && title\" class=\"block truncate font-bold\">{{ title }}</span>\r\n </RouterLink>\r\n</template>\r\n","import mitt from 'mitt'\r\n\r\ninterface MittTypes {\r\n [key: string | symbol]: any\r\n 'global-search-toggle'?: 'menu' | 'tab'\r\n}\r\n\r\nexport default mitt<MittTypes>()\r\n","<template>\r\n <kbd class=\"mr-[4px] h-6 min-w-[24px] inline-flex items-center justify-center rounded bg-stone-1 px-1 text-[12px] text-dark font-medium font-sans ring-1 ring-stone-3 ring-inset last:mr-0 dark-bg-dark-9 dark-text-white dark-ring-stone-7\">\r\n <slot />\r\n </kbd>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport { Icon } from '@iconify/vue'\r\n\r\ndefineOptions({\r\n name: 'SvgIcon',\r\n})\r\n\r\nconst props = defineProps<{\r\n name: string\r\n flip?: 'horizontal' | 'vertical' | 'both'\r\n rotate?: number\r\n color?: string\r\n size?: string | number\r\n}>()\r\n\r\nconst outputType = computed(() => {\r\n if (/^https?:\\/\\//.test(props.name)) {\r\n return 'img'\r\n }\r\n else if (/i-[^:]+:[^:]+/.test(props.name)) {\r\n return 'unocss'\r\n }\r\n else if (props.name.includes(':')) {\r\n return 'iconify'\r\n }\r\n else {\r\n return 'svg'\r\n }\r\n})\r\n\r\nconst style = computed(() => {\r\n const transform = []\r\n if (props.flip) {\r\n switch (props.flip) {\r\n case 'horizontal':\r\n transform.push('rotateY(180deg)')\r\n break\r\n case 'vertical':\r\n transform.push('rotateX(180deg)')\r\n break\r\n case 'both':\r\n transform.push('rotateX(180deg)')\r\n transform.push('rotateY(180deg)')\r\n break\r\n }\r\n }\r\n if (props.rotate) {\r\n transform.push(`rotate(${props.rotate % 360}deg)`)\r\n }\r\n return {\r\n ...(props.color && { color: props.color }),\r\n ...(props.size && { fontSize: typeof props.size === 'number' ? `${props.size}px` : props.size }),\r\n ...(transform.length && { transform: transform.join(' ') }),\r\n }\r\n})\r\n</script>\r\n\r\n<template>\r\n <i class=\"relative h-[1em] w-[1em] flex-inline items-center justify-center fill-current leading-[1em]\" :class=\"{ [name]: outputType === 'unocss' }\" :style=\"style\">\r\n <Icon v-if=\"outputType === 'iconify'\" :icon=\"name\" />\r\n <svg v-else-if=\"outputType === 'svg'\" class=\"h-[1em] w-[1em]\" aria-hidden=\"true\">\r\n <use :xlink:href=\"`#icon-${name}`\" />\r\n </svg>\r\n <img v-else-if=\"outputType === 'img'\" :src=\"name\" class=\"h-[1em] w-[1em]\">\r\n </i>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport eventBus from \"../../../../../../utils/eventBus\";\r\nimport useSettingsStore from \"../../../../../../store/modules/settings\";\r\nimport HKbd from \"../../../../ui-kit/HKbd.vue\";\r\nimport SvgIcon from \"../../../../common/components/SvgIcon/index.vue\";\r\n\r\ndefineOptions({\r\n name: \"ToolbarRightSide\",\r\n});\r\n\r\nconst settingsStore = useSettingsStore();\r\n</script>\r\n\r\n<template>\r\n <span\r\n class=\"flex-center cursor-pointer px-2 py-1\"\r\n @click=\"eventBus.emit('global-search-toggle')\"\r\n >\r\n <SvgIcon v-if=\"settingsStore.mode === 'mobile'\" name=\"i-ri:search-line\"/>\r\n <span\r\n v-else\r\n class=\"group inline-flex cursor-pointer items-center gap-1 whitespace-nowrap rounded-2 bg-stone-1 px-2 py-1.5 text-dark ring-stone-3 ring-inset transition dark-bg-stone-9 dark-text-white hover-ring-1 dark-ring-stone-7\"\r\n >\r\n <SvgIcon name=\"i-ri:search-line\"/>\r\n <span\r\n class=\"text-sm text-stone-5 transition group-hover-text-dark dark-group-hover-text-white\"\r\n >\r\n 搜索\r\n </span>\r\n <HKbd v-if=\"settingsStore.settings.navSearch.enableHotkeys\" class=\"ml-2\"\r\n >\r\n {{ settingsStore.os === \"mac\" ? \"⌥\" : \"Alt\" }} S\r\n </HKbd>\r\n </span>\r\n </span>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport { useFullscreen } from '@vueuse/core'\r\nimport useSettingsStore from '../../../../../../store/modules/settings'\r\n\r\ndefineOptions({\r\n name: 'Fullscreen',\r\n})\r\n\r\nconst settingsStore = useSettingsStore()\r\n\r\nconst { isFullscreen, toggle } = useFullscreen()\r\n</script>\r\n\r\n<template>\r\n <span v-if=\"settingsStore.mode === 'pc'\" class=\"flex-center cursor-pointer px-2 py-1\" @click=\"toggle\">\r\n <SvgIcon :name=\"isFullscreen ? 'i-ri:fullscreen-exit-line' : 'i-ri:fullscreen-line'\" />\r\n </span>\r\n</template>\r\n","export default function useMainPage() {\r\n const router = useRouter()\r\n\r\n function reload() {\r\n router.push({\r\n name: 'reload',\r\n })\r\n }\r\n\r\n return {\r\n reload,\r\n }\r\n}\r\n","<script setup lang=\"ts\">\r\nimport SvgIcon from \"../../../../common/components/SvgIcon/index.vue\";\r\n\r\ndefineOptions({\r\n name: 'PageReload',\r\n})\r\n\r\nconst mainPage = useMainPage()\r\n</script>\r\n\r\n<template>\r\n <span class=\"flex-center cursor-pointer px-2 py-1\" @click=\"mainPage.reload()\">\r\n <SvgIcon name=\"i-iconoir:refresh-double\" />\r\n </span>\r\n</template>\r\n","export default function useViewTransition(callback: () => void) {\r\n function startViewTransition() {\r\n // @ts-expect-error: View Transition API\r\n if (!document.startViewTransition || window.matchMedia('(prefers-reduced-motion: reduce)').matches) {\r\n callback()\r\n return\r\n }\r\n // @ts-expect-error: View Transition API\r\n return document.startViewTransition(async () => {\r\n await Promise.resolve(callback())\r\n })\r\n }\r\n\r\n return {\r\n startViewTransition,\r\n }\r\n}\r\n","<script setup lang=\"ts\">\r\nimport useSettingsStore from '../../../../../../store/modules/settings'\r\nimport SvgIcon from '../../../../common/components/SvgIcon/index.vue';\r\n\r\ndefineOptions({\r\n name: 'ColorScheme',\r\n})\r\n\r\nconst settingsStore = useSettingsStore()\r\n\r\nfunction toggleColorScheme(event: MouseEvent) {\r\n const {startViewTransition} = useViewTransition(() => {\r\n settingsStore.currentColorScheme && settingsStore.setColorScheme(settingsStore.currentColorScheme === 'dark' ? 'light' : 'dark')\r\n })\r\n startViewTransition()?.ready.then(() => {\r\n const x = event.clientX\r\n const y = event.clientY\r\n const endRadius = Math.hypot(\r\n Math.max(x, innerWidth - x),\r\n Math.max(y, innerHeight - y),\r\n )\r\n const clipPath = [\r\n `circle(0px at ${x}px ${y}px)`,\r\n `circle(${endRadius}px at ${x}px ${y}px)`,\r\n ]\r\n document.documentElement.animate(\r\n {\r\n clipPath: settingsStore.settings.app.colorScheme !== 'dark' ? clipPath : clipPath.reverse(),\r\n },\r\n {\r\n duration: 300,\r\n easing: 'ease-out',\r\n pseudoElement: settingsStore.settings.app.colorScheme !== 'dark' ? '::view-transition-new(root)' : '::view-transition-old(root)',\r\n },\r\n )\r\n })\r\n}\r\n</script>\r\n\r\n<template>\r\n <HDropdown class=\"flex-center cursor-pointer px-2 py-1\">\r\n <SvgIcon\r\n :name=\"{\r\n '': 'i-codicon:color-mode',\r\n 'light': 'i-ri:sun-line',\r\n 'dark': 'i-ri:moon-line',\r\n }[settingsStore.settings.app.colorScheme]\" @click=\"toggleColorScheme\"\r\n />\r\n <template #dropdown>\r\n <HTabList\r\n v-model=\"settingsStore.settings.app.colorScheme\"\r\n :options=\"[\r\n { icon: 'i-ri:sun-line', label: '', value: 'light' },\r\n { icon: 'i-ri:moon-line', label: '', value: 'dark' },\r\n { icon: 'i-codicon:color-mode', label: '', value: '' },\r\n ]\"\r\n class=\"m-3\"\r\n />\r\n </template>\r\n </HDropdown>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n\r\nconst props = defineProps<{\r\n items: {\r\n label: string\r\n disabled?: boolean\r\n hide?: boolean\r\n handle?: () => void\r\n }[][]\r\n}>()\r\n\r\nconst myItems = computed(() => {\r\n return props.items.map((item) => {\r\n return item.filter(v => !v.hide)\r\n }).filter(v => v.length)\r\n})\r\n</script>\r\n\r\n<template>\r\n <VMenu :show-triggers=\"['hover']\" :auto-hide=\"false\" :popper-triggers=\"['hover', 'click']\" :delay=\"200\" v-bind=\"$attrs\">\r\n <slot />\r\n <template #popper>\r\n <div v-for=\"(item, index) in myItems\" :key=\"index\" class=\"b-b-1 b-b-stone-2 b-b-solid p-1 dark-b-b-1 dark-b-b-stone-7 last-b-b-size-0\">\r\n <button v-for=\"(v, i) in item\" :key=\"i\" :disabled=\"v.disabled\" class=\"w-full flex cursor-pointer items-center gap-2 border-size-0 rounded-md bg-inherit px-2 py-1.5 text-sm text-dark disabled-cursor-not-allowed dark-text-white disabled-opacity-50 hover-not-disabled-bg-stone-1 dark-hover-not-disabled-bg-stone-9\" @click=\"v.handle\">\r\n {{ v.label }}\r\n </button>\r\n </div>\r\n </template>\r\n </VMenu>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport {useRouter} from \"vue-router\";\r\nimport NavSearch from \"./NavSearch/index.vue\";\r\nimport Fullscreen from \"./Fullscreen/index.vue\";\r\nimport PageReload from \"./PageReload/index.vue\";\r\nimport ColorScheme from \"./ColorScheme/index.vue\";\r\nimport eventBus from \"../../../../../utils/eventBus\";\r\nimport useSettingsStore from \"../../../../../store/modules/settings\";\r\nimport {MSAppClient} from \"../../../../../core\";\r\nimport HDropdownMenu from \"../../../ui-kit/HDropdownMenu.vue\";\r\nimport SvgIcon from \"../../../common/components/SvgIcon/index.vue\";\r\n\r\ndefineOptions({\r\n name: \"Tools\",\r\n});\r\n\r\nconst router = useRouter();\r\n\r\nconst settingsStore = useSettingsStore();\r\n\r\nconst appClient = computed(() => MSAppClient.instance!);\r\n\r\nconst userInfo = computed(() => unref(appClient).userInfo);\r\n\r\nconst avatarError = ref(false);\r\n\r\nconst handleLogout = () => {\r\n unref(appClient).logout();\r\n\r\n router.push({name: \"login\"});\r\n};\r\n</script>\r\n\r\n<template>\r\n <div class=\"flex items-center\">\r\n <NavSearch v-if=\"settingsStore.settings.toolbar.navSearch\"/>\r\n <Fullscreen v-if=\"settingsStore.settings.toolbar.fullscreen\"/>\r\n <PageReload v-if=\"settingsStore.settings.toolbar.pageReload\"/>\r\n <ColorScheme v-if=\"settingsStore.settings.toolbar.colorScheme\"/>\r\n <!-- <HDropdownMenu-->\r\n <!-- :items=\"[-->\r\n <!-- [-->\r\n <!-- {-->\r\n <!-- label: settingsStore.settings.home.title,-->\r\n <!-- handle: () =>-->\r\n <!-- router.push({ path: settingsStore.settings.home.fullPath }),-->\r\n <!-- hide: !settingsStore.settings.home.enable,-->\r\n <!-- },-->\r\n <!-- {-->\r\n <!-- label: '个人设置',-->\r\n <!-- handle: () => router.push({ name: 'personalSetting' }),-->\r\n <!-- },-->\r\n <!-- ],-->\r\n <!-- [-->\r\n <!-- {-->\r\n <!-- label: '快捷键介绍',-->\r\n <!-- handle: () => eventBus.emit('global-hotkeys-intro-toggle'),-->\r\n <!-- hide: settingsStore.mode !== 'pc',-->\r\n <!-- },-->\r\n <!-- ],-->\r\n <!-- [-->\r\n <!-- {-->\r\n <!-- label: '退出登录',-->\r\n <!-- handle: handleLogout,-->\r\n <!-- },-->\r\n <!-- ],-->\r\n <!-- ]\"-->\r\n <!-- class=\"flex-center cursor-pointer px-2\"-->\r\n <!-- >-->\r\n <HDropdownMenu\r\n :items=\"[\r\n [\r\n {\r\n label: '快捷键介绍',\r\n handle: () => eventBus.emit('global-hotkeys-intro-toggle'),\r\n hide: settingsStore.mode !== 'pc',\r\n },\r\n ],\r\n [\r\n {\r\n label: '退出登录',\r\n handle: handleLogout,\r\n },\r\n ],\r\n ]\"\r\n class=\"flex-center cursor-pointer px-2\"\r\n >\r\n <div v-if=\"userInfo\" class=\"flex-center gap-1\">\r\n <img\r\n v-if=\"userInfo.avatar && !avatarError\"\r\n :src=\"userInfo.avatar\"\r\n :onerror=\"() => (avatarError = true)\"\r\n class=\"h-[24px] w-[24px] rounded-full\"\r\n />\r\n <SvgIcon\r\n v-else\r\n name=\"i-carbon:user-avatar-filled-alt\"\r\n :size=\"24\"\r\n class=\"text-gray-400\"\r\n />\r\n {{ userInfo.account }}\r\n <SvgIcon name=\"i-ep:caret-bottom\"/>\r\n </div>\r\n </HDropdownMenu>\r\n </div>\r\n</template>\r\n","import useSettingsStore from '../../store/modules/settings'\r\nimport useMenuStore from '../../store/modules/menu'\r\n\r\nexport default function useMenu() {\r\n const router = useRouter()\r\n\r\n const settingsStore = useSettingsStore()\r\n const menuStore = useMenuStore()\r\n\r\n function switchTo(index: number | string) {\r\n menuStore.setActived(index)\r\n if (settingsStore.settings.menu.switchMainMenuAndPageJump) {\r\n router.push(menuStore.sidebarMenusFirstDeepestPath)\r\n }\r\n }\r\n\r\n return {\r\n switchTo,\r\n }\r\n}\r\n","<script setup lang=\"ts\">\r\nimport Logo from \"../Logo/index.vue\";\r\nimport ToolbarRightSide from \"../Topbar/Toolbar/rightSide.vue\";\r\nimport useMenuStore from \"../../../../store/modules/menu\";\r\nimport useSettingsStore from \"../../../../store/modules/settings\";\r\nimport SvgIcon from \"../../common/components/SvgIcon/index.vue\";\r\n\r\ndefineOptions({\r\n name: \"LayoutHeader\",\r\n});\r\n\r\nconst settingsStore = useSettingsStore();\r\nconst menuStore = useMenuStore();\r\n\r\nconst { switchTo } = useMenu();\r\n\r\nconst menuRef = ref();\r\n\r\n// 顶部模式鼠标滚动\r\nfunction handlerMouserScroll(event: WheelEvent) {\r\n if (event.deltaY || event.detail !== 0) {\r\n menuRef.value.scrollBy({\r\n left: (event.deltaY || event.detail) > 0 ? 50 : -50,\r\n });\r\n }\r\n}\r\n</script>\r\n\r\n<template>\r\n <Transition name=\"header\">\r\n <header\r\n v-if=\"\r\n settingsStore.mode === 'pc' &&\r\n settingsStore.settings.menu.mode === 'head'\r\n \"\r\n >\r\n <div class=\"header-container\">\r\n <Logo class=\"title\" />\r\n <div\r\n ref=\"menuRef\"\r\n class=\"menu-container\"\r\n @wheel.prevent=\"handlerMouserScroll\"\r\n >\r\n <!-- 顶部模式 -->\r\n <div class=\"menu h-full flex of-hidden transition-all\">\r\n <template v-for=\"(item, index) in menuStore.allMenus\" :key=\"index\">\r\n <div\r\n class=\"menu-item relative mx-1 py-2 transition-all\"\r\n :class=\"{\r\n active: index === menuStore.actived,\r\n }\"\r\n >\r\n <div\r\n v-if=\"item.children && item.children.length !== 0\"\r\n class=\"group menu-item-container h-full w-full flex cursor-pointer items-center justify-between gap-1 px-3 text-[var(--g-header-menu-color)] transition-all hover-bg-[var(--g-header-menu-hover-bg)] hover-text-[var(--g-header-menu-hover-color)]\"\r\n :class=\"{\r\n 'text-[var(--g-header-menu-active-color)]! bg-[var(--g-header-menu-active-bg)]!':\r\n index === menuStore.actived,\r\n }\"\r\n :title=\"\r\n typeof item.meta?.title === 'function'\r\n ? item.meta?.title()\r\n : item.meta?.title\r\n \"\r\n @click=\"switchTo(index)\"\r\n >\r\n <div\r\n class=\"inline-flex flex-1 items-center justify-center gap-1\"\r\n >\r\n <SvgIcon\r\n v-if=\"item.meta?.icon\"\r\n :name=\"item.meta?.icon\"\r\n class=\"menu-item-container-icon transition-transform group-hover-scale-120\"\r\n />\r\n <span\r\n class=\"w-full flex-1 truncate text-sm transition-height transition-opacity transition-width\"\r\n >\r\n {{\r\n typeof item.meta?.title === \"function\"\r\n ? item.meta?.title()\r\n : item.meta?.title\r\n }}\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </template>\r\n </div>\r\n </div>\r\n <ToolbarRightSide />\r\n </div>\r\n </header>\r\n </Transition>\r\n</template>\r\n\r\n<style lang=\"scss\" scoped>\r\nheader {\r\n position: fixed;\r\n top: 0;\r\n right: 0;\r\n left: 0;\r\n z-index: 2000;\r\n display: flex;\r\n align-items: center;\r\n width: 100%;\r\n height: var(--g-header-height);\r\n padding: 0 20px;\r\n margin: 0 auto;\r\n color: var(--g-header-color);\r\n background-color: var(--g-header-bg);\r\n box-shadow: -1px 0 0 0 var(--g-border-color), 1px 0 0 0 var(--g-border-color),\r\n 0 1px 0 0 var(--g-border-color);\r\n transition: background-color 0.3s;\r\n\r\n .header-container {\r\n display: flex;\r\n gap: 30px;\r\n align-items: center;\r\n justify-content: space-between;\r\n width: 100%;\r\n height: 100%;\r\n margin: 0 auto;\r\n\r\n :deep(a.title) {\r\n position: relative;\r\n flex: 0;\r\n width: inherit;\r\n height: inherit;\r\n padding: inherit;\r\n background-color: inherit;\r\n\r\n .logo {\r\n width: initial;\r\n height: 40px;\r\n }\r\n\r\n span {\r\n font-size: 20px;\r\n color: var(--g-header-color);\r\n letter-spacing: 1px;\r\n }\r\n }\r\n\r\n .menu-container {\r\n flex: 1;\r\n height: 100%;\r\n padding: 0 20px;\r\n overflow-x: auto;\r\n mask-image: linear-gradient(\r\n to right,\r\n transparent,\r\n #000 20px,\r\n #000 calc(100% - 20px),\r\n transparent\r\n );\r\n\r\n // firefox隐藏滚动条\r\n scrollbar-width: none;\r\n\r\n // chrome隐藏滚动条\r\n &::-webkit-scrollbar {\r\n display: none;\r\n }\r\n\r\n .menu {\r\n display: inline-flex;\r\n height: 100%;\r\n\r\n :deep(.menu-item) {\r\n .menu-item-container {\r\n color: var(--g-header-menu-color);\r\n\r\n &:hover {\r\n color: var(--g-header-menu-hover-color);\r\n background-color: var(--g-header-menu-hover-bg);\r\n }\r\n\r\n .menu-item-container-icon {\r\n font-size: 20px !important;\r\n }\r\n }\r\n\r\n &.active .menu-item-container {\r\n color: var(--g-header-menu-active-color);\r\n background-color: var(--g-header-menu-active-bg);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n// 头部动画\r\n.header-enter-active,\r\n.header-leave-active {\r\n transition: transform 0.3s;\r\n}\r\n\r\n.header-enter-from,\r\n.header-leave-to {\r\n transform: translateY(calc(var(--g-header-height) * -1));\r\n}\r\n</style>\r\n","<script setup lang=\"ts\">\r\nimport Logo from \"../Logo/index.vue\";\r\nimport useSettingsStore from \"../../../../store/modules/settings\";\r\nimport useMenuStore from \"../../../../store/modules/menu\";\r\nimport SvgIcon from \"../../common/components/SvgIcon/index.vue\";\r\n\r\ndefineOptions({\r\n name: \"MainSidebar\",\r\n});\r\n\r\nconst router = useRouter();\r\n\r\nconst settingsStore = useSettingsStore();\r\nconst menuStore = useMenuStore();\r\n\r\nconst {switchTo} = useMenu();\r\n\r\nwatch(computed(() => unref(router.currentRoute)), (currentRoute) => {\r\n // 导航栏如果不是 single 模式,则需要根据 path 定位主导航的选中状态\r\n settingsStore.settings.menu.mode !== 'single' && menuStore.setActived(currentRoute.name as string);\r\n}, {immediate: true});\r\n\r\n</script>\r\n\r\n<template>\r\n <Transition name=\"main-sidebar\">\r\n <div\r\n v-if=\"\r\n settingsStore.settings.menu.mode === 'side' ||\r\n (settingsStore.mode === 'mobile' &&\r\n settingsStore.settings.menu.mode !== 'single')\r\n \"\r\n class=\"main-sidebar-container\"\r\n >\r\n <Logo :show-title=\"false\" class=\"sidebar-logo\"/>\r\n <div class=\"menu\">\r\n <!-- 侧边栏模式(含主导航) -->\r\n <div class=\"w-full flex flex-col of-hidden py-1 transition-all -mt-2\">\r\n <template v-for=\"(item, index) in menuStore.allMenus\" :key=\"index\">\r\n <div\r\n class=\"menu-item relative px-2 py-1 transition-all\"\r\n :class=\"{\r\n active: index === menuStore.actived,\r\n }\"\r\n >\r\n <div\r\n v-if=\"item.children && item.children.length !== 0\"\r\n class=\"group menu-item-container h-full w-full flex cursor-pointer items-center justify-between gap-1 py-4 text-[var(--g-main-sidebar-menu-color)] transition-all hover-bg-[var(--g-main-sidebar-menu-hover-bg)] hover-text-[var(--g-main-sidebar-menu-hover-color)] px-2!\"\r\n :class=\"{\r\n 'text-[var(--g-main-sidebar-menu-active-color)]! bg-[var(--g-main-sidebar-menu-active-bg)]!':\r\n index === menuStore.actived,\r\n }\"\r\n :title=\"\r\n typeof item.meta?.title === 'function'\r\n ? item.meta?.title()\r\n : item.meta?.title\r\n \"\r\n @click=\"switchTo(index)\"\r\n >\r\n <div\r\n class=\"w-full inline-flex flex-1 flex-col items-center justify-center gap-[2px]\"\r\n >\r\n <SvgIcon\r\n v-if=\"item.meta?.icon\"\r\n :name=\"item.meta?.icon\"\r\n class=\"menu-item-container-icon transition-transform group-hover-scale-120\"\r\n />\r\n <span\r\n class=\"w-full flex-1 truncate text-center transition-height transition-opacity transition-width font-size-[12px]\"\r\n >\r\n<!-- <span-->\r\n <!-- class=\"w-full flex-1 truncate text-center text-sm transition-height transition-opacity transition-width\"-->\r\n <!-- >-->\r\n {{\r\n typeof item.meta?.title === \"function\"\r\n ? item.meta?.title()\r\n : item.meta?.title\r\n }}\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </template>\r\n </div>\r\n </div>\r\n </div>\r\n </Transition>\r\n</template>\r\n\r\n<style lang=\"scss\" scoped>\r\n.main-sidebar-container {\r\n position: relative;\r\n z-index: 1;\r\n display: flex;\r\n flex-direction: column;\r\n width: var(--g-main-sidebar-width);\r\n color: var(--g-main-sidebar-menu-color);\r\n background-color: var(--g-main-sidebar-bg);\r\n box-shadow: 1px 0 0 0 var(--g-border-color);\r\n transition: background-color 0.3s, color 0.3s, box-shadow 0.3s;\r\n\r\n .sidebar-logo {\r\n background-color: var(--g-main-sidebar-bg);\r\n transition: background-color 0.3s;\r\n }\r\n\r\n .menu {\r\n flex: 1;\r\n width: initial;\r\n overflow: hidden auto;\r\n overscroll-behavior: contain;\r\n\r\n // firefox隐藏滚动条\r\n scrollbar-width: none;\r\n\r\n // chrome隐藏滚动条\r\n &::-webkit-scrollbar {\r\n display: none;\r\n }\r\n\r\n :deep(.menu-item) {\r\n .menu-item-container {\r\n padding-block: 8px;\r\n color: var(--g-main-sidebar-menu-color);\r\n\r\n &:hover {\r\n color: var(--g-main-sidebar-menu-hover-color);\r\n background-color: var(--g-main-sidebar-menu-hover-bg);\r\n }\r\n\r\n .menu-item-container-icon {\r\n font-size: 20px !important;\r\n }\r\n }\r\n\r\n &.active .menu-item-container {\r\n color: var(--g-main-sidebar-menu-active-color) !important;\r\n background-color: var(--g-main-sidebar-menu-active-bg) !important;\r\n }\r\n }\r\n }\r\n}\r\n\r\n// 主侧边栏动画\r\n.main-sidebar-enter-active,\r\n.main-sidebar-leave-active {\r\n transition: 0.3s;\r\n}\r\n\r\n.main-sidebar-enter-from,\r\n.main-sidebar-leave-to {\r\n transform: translateX(calc(var(--g-main-sidebar-width) * -1));\r\n}\r\n</style>\r\n","import type { Menu } from '../../../../typings/global'\r\nimport { InjectionKey } from 'vue'\r\n\r\nexport interface MenuItem {\r\n index: string\r\n indexPath: string[]\r\n active?: boolean\r\n}\r\n\r\nexport interface MenuProps {\r\n menu: Menu.recordRaw[]\r\n value: string\r\n accordion?: boolean\r\n defaultOpeneds?: string[]\r\n mode?: 'horizontal' | 'vertical'\r\n collapse?: boolean\r\n showCollapseName?: boolean\r\n}\r\n\r\nexport interface MenuInjection {\r\n props: MenuProps\r\n items: Record<string, MenuItem>\r\n subMenus: Record<string, MenuItem>\r\n activeIndex: MenuProps['value']\r\n openedMenus: string[]\r\n mouseInMenu: string[]\r\n isMenuPopup: boolean\r\n openMenu: (index: string, indexPath: string[]) => void\r\n closeMenu: (index: string | string[]) => void\r\n handleMenuItemClick: (index: string) => void\r\n handleSubMenuClick: (index: string, indexPath: string[]) => void\r\n}\r\n\r\nexport const rootMenuInjectionKey = Symbol('rootMenu') as InjectionKey<MenuInjection>\r\n\r\nexport interface SubMenuProps {\r\n uniqueKey: string[]\r\n menu: Menu.recordRaw\r\n level?: number\r\n}\r\n\r\nexport interface SubMenuItemProps {\r\n uniqueKey: string[]\r\n item: Menu.recordRaw\r\n level?: number\r\n subMenu?: boolean\r\n expand?: boolean\r\n}\r\n","<script setup lang=\"ts\">\r\n// import type { SubMenuItemProps } from './types'\r\nimport {rootMenuInjectionKey} from './types'\r\nimport type {Menu} from \"../../../../typings/global\";\r\nimport SvgIcon from '../../common/components/SvgIcon/index.vue';\r\nimport HTooltip from '../../ui-kit/HTooltip.vue';\r\n\r\ndefineOptions({\r\n name: 'SubMenuItem',\r\n})\r\n\r\nexport interface SubMenuItemProps {\r\n uniqueKey: string[]\r\n item: Menu.recordRaw\r\n level?: number\r\n subMenu?: boolean\r\n expand?: boolean\r\n}\r\n\r\n\r\nconst props = withDefaults(\r\n defineProps<SubMenuItemProps>(),\r\n {\r\n level: 0,\r\n subMenu: false,\r\n expand: false,\r\n },\r\n)\r\n\r\nconst rootMenu = inject(rootMenuInjectionKey)!\r\n\r\nconst itemRef = ref<HTMLElement>()\r\n\r\nconst isActived = computed(() => {\r\n return props.subMenu\r\n ? rootMenu.subMenus[props.uniqueKey.at(-1)!].active\r\n : rootMenu.activeIndex === props.uniqueKey.at(-1)!\r\n})\r\n\r\nconst isItemActive = computed(() => {\r\n return isActived.value && (!props.subMenu || rootMenu.isMenuPopup)\r\n})\r\n\r\n// 缩进样式\r\nconst indentStyle = computed(() => {\r\n return !rootMenu.isMenuPopup\r\n ? `padding-left: ${20 * (props.level ?? 0)}px`\r\n : ''\r\n})\r\n\r\ndefineExpose({\r\n ref: itemRef,\r\n})\r\n</script>\r\n\r\n<template>\r\n <div\r\n ref=\"itemRef\" class=\"menu-item relative transition-all\" :class=\"{\r\n 'active': isItemActive,\r\n 'py-1 px-2': (rootMenu.isMenuPopup && rootMenu.props.mode === 'vertical') || (rootMenu.isMenuPopup && level !== 0 && rootMenu.props.mode === 'horizontal') || !rootMenu.isMenuPopup,\r\n 'px-1 py-2': rootMenu.isMenuPopup && level === 0 && rootMenu.props.mode === 'horizontal',\r\n }\"\r\n >\r\n <router-link v-slot=\"{ href, navigate }\" custom :to=\"uniqueKey.at(-1) ? { name: uniqueKey.at(-1) } : ''\">\r\n <HTooltip :enable=\"rootMenu.isMenuPopup && level === 0 && !subMenu\"\r\n :text=\"typeof item.meta?.title === 'function' ? item.meta?.title() : item.meta?.title\" placement=\"right\"\r\n class=\"h-full w-full\">\r\n <component\r\n :is=\"subMenu ? 'div' : 'a'\" v-bind=\"{\r\n ...(!subMenu && {\r\n href: item.meta?.link ? item.meta.link : href,\r\n target: item.meta?.link ? '_blank' : '_self',\r\n class: 'no-underline',\r\n }),\r\n }\"\r\n class=\"group menu-item-container h-full w-full flex cursor-pointer items-center justify-between gap-1 px-4 py-3 text-[var(--g-sub-sidebar-menu-color)] transition-all hover-bg-[var(--g-sub-sidebar-menu-hover-bg)] hover-text-[var(--g-sub-sidebar-menu-hover-color)]\"\r\n :class=\"{\r\n 'text-[var(--g-sub-sidebar-menu-active-color)]! bg-[var(--g-sub-sidebar-menu-active-bg)]!': isItemActive,\r\n 'px-3!': rootMenu.isMenuPopup && level === 0,\r\n }\" :title=\"typeof item.meta?.title === 'function' ? item.meta?.title() : item.meta?.title\" v-on=\"{\r\n ...(!subMenu && {\r\n click: navigate,\r\n }),\r\n }\"\r\n >\r\n <div\r\n class=\"inline-flex flex-1 items-center justify-center gap-[12px]\" :class=\"{\r\n 'flex-col': rootMenu.isMenuPopup && level === 0 && rootMenu.props.mode === 'vertical',\r\n 'gap-1!': rootMenu.isMenuPopup && level === 0 && rootMenu.props.showCollapseName,\r\n 'w-full': rootMenu.isMenuPopup && level === 0 && rootMenu.props.showCollapseName && rootMenu.props.mode === 'vertical',\r\n }\" :style=\"indentStyle\"\r\n >\r\n <SvgIcon v-if=\"props.item.meta?.icon\" :name=\"props.item.meta.icon\" :size=\"18\"\r\n class=\"menu-item-container-icon transition-transform group-hover-scale-120\"/>\r\n <span\r\n v-if=\"!(rootMenu.isMenuPopup && level === 0 && !rootMenu.props.showCollapseName)\"\r\n class=\"w-0 flex-1 truncate text-sm transition-height transition-opacity transition-width\"\r\n :class=\"{\r\n 'opacity-0 w-0 h-0': rootMenu.isMenuPopup && level === 0 && !rootMenu.props.showCollapseName,\r\n 'w-full text-center': rootMenu.isMenuPopup && level === 0 && rootMenu.props.showCollapseName,\r\n }\"\r\n >\r\n {{ typeof item.meta?.title === 'function' ? item.meta?.title() : item.meta?.title }}\r\n </span>\r\n </div>\r\n <i\r\n v-if=\"subMenu && !(rootMenu.isMenuPopup && level === 0)\"\r\n class=\"relative ml-1 w-[10px] after:absolute after:h-[1.5px] after:w-[6px] after:bg-current after:transition-transform-200 after:content-empty after:-translate-y-[1px] before:absolute before:h-[1.5px] before:w-[6px] before:bg-current before:transition-transform-200 before:content-empty before:-translate-y-[1px]\"\r\n :class=\"[\r\n expand ? 'before:-rotate-45 before:-translate-x-[2px] after:rotate-45 after:translate-x-[2px]' : 'before:rotate-45 before:-translate-x-[2px] after:-rotate-45 after:translate-x-[2px]',\r\n rootMenu.isMenuPopup && level === 0 && 'opacity-0',\r\n rootMenu.isMenuPopup && level !== 0 && '-rotate-90 -top-[1.5px]',\r\n ]\"\r\n />\r\n </component>\r\n </HTooltip>\r\n </router-link>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport { useTimeoutFn } from '@vueuse/core'\r\nimport type { OverlayScrollbarsComponentRef } from 'overlayscrollbars-vue'\r\nimport { OverlayScrollbarsComponent } from 'overlayscrollbars-vue'\r\nimport Item from './item.vue'\r\n// import type { SubMenuProps } from './types'\r\nimport { rootMenuInjectionKey } from './types'\r\nimport type {Menu} from \"../../../../typings/global\";\r\n\r\ndefineOptions({\r\n name: 'SubMenu',\r\n})\r\n\r\nexport interface SubMenuProps {\r\n uniqueKey: string[]\r\n menu: Menu.recordRaw\r\n level?: number\r\n}\r\n\r\nconst props = withDefaults(\r\n defineProps<SubMenuProps>(),\r\n {\r\n level: 0,\r\n },\r\n)\r\n\r\nconst index = props.menu.name as string// ?? JSON.stringify(props.menu)\r\nconst itemRef = shallowRef()\r\nconst subMenuRef = shallowRef<OverlayScrollbarsComponentRef>()\r\nconst rootMenu = inject(rootMenuInjectionKey)!\r\n\r\nconst opened = computed(() => {\r\n return rootMenu.openedMenus.includes(props.uniqueKey.at(-1)!)\r\n})\r\n\r\nconst transitionEvent = computed(() => {\r\n return rootMenu.isMenuPopup\r\n ? {\r\n enter(el: HTMLElement) {\r\n if (el.offsetHeight > window.innerHeight) {\r\n el.style.height = `${window.innerHeight}px`\r\n }\r\n },\r\n afterEnter: () => {},\r\n beforeLeave: (el: HTMLElement) => {\r\n el.style.overflow = 'hidden'\r\n el.style.maxHeight = `${el.offsetHeight}px`\r\n },\r\n leave: (el: HTMLElement) => {\r\n el.style.maxHeight = '0'\r\n },\r\n afterLeave(el: HTMLElement) {\r\n el.style.overflow = ''\r\n el.style.maxHeight = ''\r\n },\r\n }\r\n : {\r\n enter(el: HTMLElement) {\r\n const memorizedHeight = el.offsetHeight\r\n el.style.maxHeight = '0'\r\n el.style.overflow = 'hidden'\r\n void el.offsetHeight\r\n el.style.maxHeight = `${memorizedHeight}px`\r\n },\r\n afterEnter(el: HTMLElement) {\r\n el.style.overflow = ''\r\n el.style.maxHeight = ''\r\n },\r\n beforeLeave(el: HTMLElement) {\r\n el.style.overflow = 'hidden'\r\n el.style.maxHeight = `${el.offsetHeight}px`\r\n },\r\n leave(el: HTMLElement) {\r\n el.style.maxHeight = '0'\r\n },\r\n afterLeave(el: HTMLElement) {\r\n el.style.overflow = ''\r\n el.style.maxHeight = ''\r\n },\r\n }\r\n})\r\n\r\nconst transitionClass = computed(() => {\r\n return rootMenu.isMenuPopup\r\n ? {\r\n enterActiveClass: 'ease-in-out duration-300',\r\n enterFromClass: 'opacity-0 translate-x-4',\r\n enterToClass: 'opacity-100',\r\n leaveActiveClass: 'ease-in-out duration-300',\r\n leaveFromClass: 'opacity-100',\r\n leaveToClass: 'opacity-0',\r\n }\r\n : {\r\n enterActiveClass: 'ease-in-out duration-300',\r\n enterFromClass: 'opacity-0',\r\n enterToClass: 'opacity-100',\r\n leaveActiveClass: 'ease-in-out duration-300',\r\n leaveFromClass: 'opacity-100',\r\n leaveToClass: 'opacity-0',\r\n }\r\n})\r\n\r\nconst hasChildren = computed(() => {\r\n let flag = true\r\n if (props.menu.children) {\r\n if (props.menu.children.every((item: any) => item.meta?.menu === false)) {\r\n flag = false\r\n }\r\n }\r\n else {\r\n flag = false\r\n }\r\n return flag\r\n})\r\n\r\nfunction handleClick() {\r\n if (rootMenu.isMenuPopup && hasChildren.value) {\r\n return\r\n }\r\n if (hasChildren.value) {\r\n rootMenu.handleSubMenuClick(index, props.uniqueKey)\r\n }\r\n else {\r\n rootMenu.handleMenuItemClick(index)\r\n }\r\n}\r\n\r\nlet timeout: (() => void) | undefined\r\n\r\nfunction handleMouseenter() {\r\n if (!rootMenu.isMenuPopup) {\r\n return\r\n }\r\n rootMenu.mouseInMenu = props.uniqueKey\r\n timeout?.()\r\n ;({ stop: timeout } = useTimeoutFn(() => {\r\n if (hasChildren.value) {\r\n rootMenu.openMenu(index, props.uniqueKey)\r\n nextTick(() => {\r\n const el = itemRef.value.ref\r\n let top = 0\r\n let left = 0\r\n if (rootMenu.props.mode === 'vertical' || props.level !== 0) {\r\n top = el.getBoundingClientRect().top + el.scrollTop\r\n left = el.getBoundingClientRect().left + el.getBoundingClientRect().width\r\n if (top + subMenuRef.value!.getElement()!.offsetHeight > window.innerHeight) {\r\n top = window.innerHeight - subMenuRef.value!.getElement()!.offsetHeight\r\n }\r\n }\r\n else {\r\n top = el.getBoundingClientRect().top + el.getBoundingClientRect().height\r\n left = el.getBoundingClientRect().left\r\n if (top + subMenuRef.value!.getElement()!.offsetHeight > window.innerHeight) {\r\n subMenuRef.value!.getElement()!.style.height = `${window.innerHeight - top}px`\r\n }\r\n }\r\n if (left + subMenuRef.value!.getElement()!.offsetWidth > document.documentElement.clientWidth) {\r\n left = el.getBoundingClientRect().left - el.getBoundingClientRect().width\r\n }\r\n subMenuRef.value!.getElement()!.style.top = `${top}px`\r\n subMenuRef.value!.getElement()!.style.left = `${left}px`\r\n })\r\n }\r\n else {\r\n const path = props.menu.children ? rootMenu.subMenus[index].indexPath.at(-1)! : rootMenu.items[index].indexPath.at(-1)!\r\n rootMenu.openMenu(path, rootMenu.subMenus[path].indexPath)\r\n }\r\n }, 300))\r\n}\r\n\r\nfunction handleMouseleave() {\r\n if (!rootMenu.isMenuPopup) {\r\n return\r\n }\r\n rootMenu.mouseInMenu = []\r\n timeout?.()\r\n ;({ stop: timeout } = useTimeoutFn(() => {\r\n if (rootMenu.mouseInMenu.length === 0) {\r\n rootMenu.closeMenu(props.uniqueKey)\r\n }\r\n else {\r\n if (hasChildren.value) {\r\n !rootMenu.mouseInMenu.includes(props.uniqueKey.at(-1)!) && rootMenu.closeMenu(props.uniqueKey.at(-1)!)\r\n }\r\n }\r\n }, 300))\r\n}\r\n</script>\r\n\r\n<template>\r\n <Item ref=\"itemRef\" :unique-key=\"uniqueKey\" :item=\"menu\" :level=\"level\" :sub-menu=\"hasChildren\" :expand=\"opened\" @click=\"handleClick\" @mouseenter=\"handleMouseenter\" @mouseleave=\"handleMouseleave\" />\r\n <Teleport v-if=\"hasChildren\" to=\"body\" :disabled=\"!rootMenu.isMenuPopup\">\r\n <Transition v-bind=\"transitionClass\" v-on=\"transitionEvent\">\r\n <OverlayScrollbarsComponent\r\n v-if=\"opened\" ref=\"subMenuRef\" :options=\"{ scrollbars: { visibility: 'hidden' } }\" defer class=\"sub-menu\" :class=\"{\r\n 'bg-[var(--g-sub-sidebar-bg)]': rootMenu.isMenuPopup,\r\n 'ring-1 ring-stone-2 dark-ring-stone-8 shadow-xl fixed z-3000 w-[200px]': rootMenu.isMenuPopup,\r\n 'mx-1': rootMenu.isMenuPopup && (rootMenu.props.mode === 'vertical' || level !== 0),\r\n 'py-1': rootMenu.isMenuPopup,\r\n }\"\r\n >\r\n <template v-for=\"item in menu.children\" :key=\"item.name!\">\r\n <SubMenu v-if=\"item.meta?.menu !== false\" :unique-key=\"[...uniqueKey, item.name!]\" :menu=\"item\" :level=\"level + 1\" />\r\n </template>\r\n </OverlayScrollbarsComponent>\r\n </Transition>\r\n </Teleport>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport SubMenu from './sub.vue'\r\nimport Item from './item.vue'\r\nimport type { MenuInjection } from './types'\r\nimport { rootMenuInjectionKey } from './types'\r\nimport type {Menu} from \"../../../../typings/global\";\r\n\r\nexport interface MenuProps {\r\n menu: Menu.recordRaw[]\r\n value: string\r\n accordion?: boolean\r\n defaultOpeneds?: string[]\r\n mode?: 'horizontal' | 'vertical'\r\n collapse?: boolean\r\n showCollapseName?: boolean\r\n}\r\n\r\ndefineOptions({\r\n name: 'MainMenu',\r\n})\r\n\r\nconst props = withDefaults(\r\n defineProps<MenuProps>(),\r\n {\r\n accordion: true,\r\n defaultOpeneds: () => [],\r\n mode: 'vertical',\r\n collapse: false,\r\n showCollapseName: false,\r\n },\r\n)\r\n\r\nconst activeIndex = ref<MenuInjection['activeIndex']>(props.value)\r\nconst items = ref<MenuInjection['items']>({})\r\nconst subMenus = ref<MenuInjection['subMenus']>({})\r\nconst openedMenus = ref<MenuInjection['openedMenus']>(props.defaultOpeneds.slice(0))\r\nconst mouseInMenu = ref<MenuInjection['mouseInMenu']>([])\r\nconst isMenuPopup = computed<MenuInjection['isMenuPopup']>(() => {\r\n return props.mode === 'horizontal' || (props.mode === 'vertical' && props.collapse)\r\n})\r\n\r\n// 解析传入的 menu 数据,并保存到 items 和 subMenus 对象中\r\nfunction initItems(menu: MenuProps['menu'], parentPaths: string[] = []) {\r\n menu.forEach((item) => {\r\n const index = item.name as string// ?? JSON.stringify(item)\r\n if (item.children) {\r\n const indexPath = [...parentPaths, index]\r\n subMenus.value[index] = {\r\n index,\r\n indexPath,\r\n active: false,\r\n }\r\n initItems(item.children, indexPath)\r\n }\r\n else {\r\n items.value[index] = {\r\n index,\r\n indexPath: parentPaths,\r\n }\r\n }\r\n })\r\n}\r\n\r\nconst openMenu: MenuInjection['openMenu'] = (index, indexPath) => {\r\n if (openedMenus.value.includes(index)) {\r\n return\r\n }\r\n if (props.accordion) {\r\n openedMenus.value = openedMenus.value.filter(key => indexPath.includes(key))\r\n }\r\n openedMenus.value.push(index)\r\n}\r\nconst closeMenu: MenuInjection['closeMenu'] = (index) => {\r\n if (Array.isArray(index)) {\r\n nextTick(() => {\r\n closeMenu(index.at(-1)!)\r\n if (index.length > 1) {\r\n closeMenu(index.slice(0, -1))\r\n }\r\n })\r\n return\r\n }\r\n Object.keys(subMenus.value).forEach((item) => {\r\n if (subMenus.value[item].indexPath.includes(index)) {\r\n openedMenus.value = openedMenus.value.filter(item => item !== index)\r\n }\r\n })\r\n}\r\n\r\nfunction setSubMenusActive(index: string) {\r\n for (const key in subMenus.value) {\r\n subMenus.value[key].active = false\r\n }\r\n subMenus.value[index]?.indexPath.forEach((idx) => {\r\n subMenus.value[idx].active = true\r\n })\r\n items.value[index]?.indexPath.forEach((idx) => {\r\n subMenus.value[idx].active = true\r\n })\r\n}\r\n\r\nconst handleMenuItemClick: MenuInjection['handleMenuItemClick'] = (index) => {\r\n if (props.mode === 'horizontal' || props.collapse) {\r\n openedMenus.value = []\r\n }\r\n setSubMenusActive(index)\r\n}\r\nconst handleSubMenuClick: MenuInjection['handleSubMenuClick'] = (index, indexPath) => {\r\n if (openedMenus.value.includes(index)) {\r\n closeMenu(index)\r\n }\r\n else {\r\n openMenu(index, indexPath)\r\n }\r\n}\r\n\r\nfunction initMenu() {\r\n const activeItem = activeIndex.value && items.value[activeIndex.value]\r\n setSubMenusActive(activeIndex.value)\r\n if (!activeItem || props.collapse) {\r\n return\r\n }\r\n // 展开该菜单项的路径上所有子菜单\r\n activeItem.indexPath.forEach((index) => {\r\n const subMenu = subMenus.value[index]\r\n subMenu && openMenu(index, subMenu.indexPath)\r\n })\r\n}\r\n\r\nwatch(() => props.menu, (val) => {\r\n initItems(val)\r\n initMenu()\r\n}, {\r\n deep: true,\r\n immediate: true,\r\n})\r\n\r\nwatch(() => props.value, (currentValue) => {\r\n if (!items.value[currentValue]) {\r\n activeIndex.value = ''\r\n }\r\n const item = items.value[currentValue] || (activeIndex.value && items.value[activeIndex.value]) || items.value[props.value]\r\n if (item) {\r\n activeIndex.value = item.index\r\n }\r\n else {\r\n activeIndex.value = currentValue\r\n }\r\n initMenu()\r\n})\r\n\r\nwatch(() => props.collapse, (value) => {\r\n if (value) {\r\n openedMenus.value = []\r\n }\r\n initMenu()\r\n})\r\n\r\n;(window as any).rootMenu = reactive({\r\n props,\r\n items,\r\n subMenus,\r\n activeIndex,\r\n openedMenus,\r\n mouseInMenu,\r\n isMenuPopup,\r\n openMenu,\r\n closeMenu,\r\n handleMenuItemClick,\r\n handleSubMenuClick,\r\n});\r\n\r\nprovide(rootMenuInjectionKey, reactive({\r\n props,\r\n items,\r\n subMenus,\r\n activeIndex,\r\n openedMenus,\r\n mouseInMenu,\r\n isMenuPopup,\r\n openMenu,\r\n closeMenu,\r\n handleMenuItemClick,\r\n handleSubMenuClick,\r\n}))\r\n</script>\r\n\r\n<template>\r\n <div\r\n class=\"h-full w-full flex flex-col of-hidden transition-all\" :class=\"{\r\n 'flex-row! w-auto!': isMenuPopup && props.mode === 'horizontal',\r\n 'py-1': props.mode === 'vertical',\r\n }\"\r\n >\r\n <template v-for=\"item in menu\" :key=\"item.name!\">\r\n <template v-if=\"item.meta?.menu !== false\">\r\n <SubMenu v-if=\"item.children?.length\" :menu=\"item\" :unique-key=\"[item.name!]\" />\r\n <Item v-else :item=\"item\" :unique-key=\"[item.name!]\" @click=\"handleMenuItemClick(item.name!)\" />\r\n </template>\r\n </template>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport {useElementSize} from '@vueuse/core'\r\nimport Logo from '../Logo/index.vue'\r\nimport Menu from '../Menu/index.vue'\r\nimport useSettingsStore from '../../../../store/modules/settings'\r\nimport useMenuStore from '../../../../store/modules/menu'\r\nimport SvgIcon from \"../../common/components/SvgIcon/index.vue\";\r\n\r\ndefineOptions({\r\n name: 'SubSidebar',\r\n})\r\n\r\nconst route = useRoute()\r\n\r\nconst settingsStore = useSettingsStore()\r\nconst menuStore = useMenuStore()\r\n\r\nconst subSidebarRef = ref()\r\nconst showShadowTop = ref(false)\r\nconst showShadowBottom = ref(false)\r\n\r\nfunction onSidebarScroll() {\r\n const scrollTop = subSidebarRef.value.scrollTop\r\n showShadowTop.value = scrollTop > 0\r\n const clientHeight = subSidebarRef.value.clientHeight\r\n const scrollHeight = subSidebarRef.value.scrollHeight\r\n showShadowBottom.value = Math.ceil(scrollTop + clientHeight) < scrollHeight\r\n}\r\n\r\nconst enableSidebar = computed(() => {\r\n return settingsStore.mode === 'mobile' || (\r\n menuStore.sidebarMenus.length !== 0\r\n && !menuStore.sidebarMenus.every(item => item.meta?.menu === false)\r\n )\r\n})\r\n\r\nwatch(enableSidebar, (val) => {\r\n if (val) {\r\n nextTick(() => {\r\n onSidebarScroll()\r\n })\r\n }\r\n}, {\r\n immediate: true,\r\n})\r\n\r\nconst menuRef = ref()\r\n\r\nonMounted(() => {\r\n if (enableSidebar.value) {\r\n const {height} = useElementSize(menuRef)\r\n watch(() => height.value, () => {\r\n if (height.value > 0) {\r\n onSidebarScroll()\r\n }\r\n }, {\r\n immediate: true,\r\n })\r\n }\r\n})\r\n</script>\r\n\r\n<template>\r\n <div\r\n v-if=\"enableSidebar\" class=\"sub-sidebar-container\" :class=\"{\r\n 'is-collapse': settingsStore.mode === 'pc' && settingsStore.settings.menu.subMenuCollapse,\r\n }\"\r\n >\r\n <Logo\r\n :show-logo=\"settingsStore.settings.menu.mode === 'single'\" class=\"sidebar-logo\" :class=\"{\r\n 'sidebar-logo-bg': settingsStore.settings.menu.mode === 'single',\r\n }\"\r\n />\r\n <div\r\n ref=\"subSidebarRef\" class=\"sub-sidebar flex-1 transition-shadow-300\" :class=\"{\r\n 'shadow-top': showShadowTop,\r\n 'shadow-bottom': showShadowBottom,\r\n }\" @scroll=\"onSidebarScroll\"\r\n >\r\n <div ref=\"menuRef\">\r\n <TransitionGroup name=\"sub-sidebar\">\r\n <template v-for=\"(mainItem, mainIndex) in menuStore.allMenus\" :key=\"mainIndex\">\r\n <div v-show=\"mainIndex === menuStore.actived\">\r\n <Menu\r\n :menu=\"mainItem.children\" :value=\"route.name as any\"\r\n :default-openeds=\"menuStore.defaultOpenedPaths\"\r\n :accordion=\"settingsStore.settings.menu.subMenuUniqueOpened\"\r\n :collapse=\"settingsStore.mode === 'pc' && settingsStore.settings.menu.subMenuCollapse\"\r\n class=\"menu\"\r\n :class=\"{\r\n '-mt-2': !['head', 'single'].includes(settingsStore.settings.menu.mode),\r\n }\"\r\n />\r\n </div>\r\n </template>\r\n </TransitionGroup>\r\n </div>\r\n </div>\r\n <div v-if=\"settingsStore.mode === 'pc'\" class=\"relative flex items-center px-4 py-3\"\r\n :class=\"[settingsStore.settings.menu.subMenuCollapse ? 'justify-center' : 'justify-end']\">\r\n <span v-show=\"settingsStore.settings.menu.enableSubMenuCollapseButton\"\r\n class=\"flex-center cursor-pointer rounded bg-stone-1 p-2 transition dark-bg-stone-9 hover-bg-stone-2 dark-hover-bg-stone-8\"\r\n :class=\"{ '-rotate-z-180': settingsStore.settings.menu.subMenuCollapse }\"\r\n @click=\"settingsStore.toggleSidebarCollapse()\">\r\n <SvgIcon name=\"toolbar-collapse\"/>\r\n </span>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<style lang=\"scss\" scoped>\r\n.sub-sidebar-container {\r\n position: absolute;\r\n top: 0;\r\n bottom: 0;\r\n left: 0;\r\n display: flex;\r\n flex-direction: column;\r\n width: var(--g-sub-sidebar-width);\r\n background-color: var(--g-sub-sidebar-bg);\r\n transition: background-color 0.3s, left 0.3s, width 0.3s;\r\n\r\n &.is-collapse {\r\n width: var(--g-sub-sidebar-collapse-width);\r\n\r\n .sidebar-logo {\r\n &:not(.sidebar-logo-bg) {\r\n display: none;\r\n }\r\n\r\n :deep(span) {\r\n display: none;\r\n }\r\n }\r\n }\r\n\r\n .sidebar-logo {\r\n background-color: var(--g-sub-sidebar-bg);\r\n transition: background-color 0.3s;\r\n\r\n &.sidebar-logo-bg {\r\n background-color: var(--g-sub-sidebar-logo-bg);\r\n\r\n :deep(span) {\r\n color: var(--g-sub-sidebar-logo-color);\r\n }\r\n }\r\n }\r\n\r\n .sub-sidebar {\r\n overflow: hidden auto;\r\n overscroll-behavior: contain;\r\n\r\n // firefox隐藏滚动条\r\n scrollbar-width: none;\r\n\r\n // chrome隐藏滚动条\r\n &::-webkit-scrollbar {\r\n display: none;\r\n }\r\n\r\n &.shadow-top {\r\n box-shadow: inset 0 10px 10px -10px var(--g-box-shadow-color), inset 0 0 0 transparent;\r\n }\r\n\r\n &.shadow-bottom {\r\n box-shadow: inset 0 0 0 transparent, inset 0 -10px 10px -10px var(--g-box-shadow-color);\r\n }\r\n\r\n &.shadow-top.shadow-bottom {\r\n box-shadow: inset 0 10px 10px -10px var(--g-box-shadow-color), inset 0 -10px 10px -10px var(--g-box-shadow-color);\r\n }\r\n }\r\n\r\n .menu {\r\n width: 100%;\r\n }\r\n}\r\n\r\n// 次侧边栏动画\r\n.sub-sidebar-enter-active {\r\n transition: 0.2s;\r\n}\r\n\r\n.sub-sidebar-enter-from,\r\n.sub-sidebar-leave-active {\r\n opacity: 0;\r\n transform: translateY(30px) skewY(10deg);\r\n}\r\n\r\n.sub-sidebar-leave-active {\r\n position: absolute;\r\n}\r\n</style>\r\n","import { defineStore } from \"pinia\";\r\nimport { ref } from \"vue\";\r\n\r\nconst useKeepAliveStore = defineStore(\r\n // 唯一ID\r\n \"keepAlive\",\r\n () => {\r\n const list = ref<string[]>([]);\r\n\r\n function add(name: string | string[]) {\r\n if (typeof name === \"string\") {\r\n !list.value.includes(name) && list.value.push(name);\r\n } else {\r\n name.forEach((v) => {\r\n v && !list.value.includes(v) && list.value.push(v);\r\n });\r\n }\r\n }\r\n function remove(name: string | string[]) {\r\n if (typeof name === \"string\") {\r\n list.value = list.value.filter((v) => {\r\n return v !== name;\r\n });\r\n } else {\r\n list.value = list.value.filter((v) => {\r\n return !name.includes(v);\r\n });\r\n }\r\n }\r\n function clean() {\r\n list.value = [];\r\n }\r\n\r\n return {\r\n list,\r\n add,\r\n remove,\r\n clean,\r\n };\r\n }\r\n);\r\n\r\nexport default useKeepAliveStore;\r\n","import type { RouteLocationNormalized } from \"vue-router\";\r\nimport useKeepAliveStore from \"./keepAlive\";\r\nimport type { Tabbar } from \"../../types/global\";\r\nimport { defineStore } from \"pinia\";\r\nimport { ref } from \"vue\";\r\n\r\nconst useTabbarStore = defineStore(\r\n // 唯一ID\r\n \"tabbar\",\r\n () => {\r\n const keepAliveStore = useKeepAliveStore();\r\n\r\n const list = ref<Tabbar.recordRaw[]>([]);\r\n const leaveIndex = ref(-1);\r\n\r\n // 添加标签页\r\n async function add(route: RouteLocationNormalized) {\r\n const names: string[] = [];\r\n route.matched.forEach((v, i) => {\r\n if (i > 0) {\r\n v.components?.default.name && names.push(v.components.default.name);\r\n }\r\n });\r\n const meta = route.matched.at(-1)?.meta;\r\n const tabId = route.fullPath;\r\n if (route.name !== \"reload\") {\r\n // 记录查找到的标签页\r\n const findTab = list.value.find((item) => {\r\n if (item.routeName) {\r\n return item.routeName === route.name;\r\n } else {\r\n return item.tabId === tabId;\r\n }\r\n });\r\n // 新增标签页\r\n if (!findTab) {\r\n const listItem = {\r\n tabId,\r\n fullPath: route.fullPath,\r\n routeName: route.name,\r\n title:\r\n typeof meta?.title === \"function\" ? meta.title() : meta?.title,\r\n icon:\r\n meta?.icon ??\r\n meta?.breadcrumbNeste?.findLast((item) => item.icon)?.icon,\r\n name: names,\r\n };\r\n if (leaveIndex.value >= 0) {\r\n list.value.splice(leaveIndex.value + 1, 0, listItem);\r\n leaveIndex.value = -1;\r\n } else {\r\n list.value.push(listItem);\r\n }\r\n }\r\n }\r\n }\r\n // 删除指定标签页\r\n function remove(tabId: Tabbar.recordRaw[\"tabId\"]) {\r\n const keepName: string[] = [];\r\n const removeName: string[] = [];\r\n list.value.forEach((v) => {\r\n if (v.tabId === tabId) {\r\n removeName.push(...v.name);\r\n } else {\r\n keepName.push(...v.name);\r\n }\r\n });\r\n const name: string[] = [];\r\n removeName.forEach((v) => {\r\n if (!keepName.includes(v)) {\r\n name.push(v);\r\n }\r\n });\r\n // 如果是手动点击关闭 tab 标签页,则删除页面缓存\r\n keepAliveStore.remove(name);\r\n list.value = list.value.filter((item) => {\r\n return item.tabId !== tabId;\r\n });\r\n }\r\n // 删除两侧标签页\r\n function removeOtherSide(tabId: Tabbar.recordRaw[\"tabId\"]) {\r\n const keepName: string[] = [];\r\n const removeName: string[] = [];\r\n list.value.forEach((v) => {\r\n if (v.tabId !== tabId) {\r\n removeName.push(...v.name);\r\n } else {\r\n keepName.push(...v.name);\r\n }\r\n });\r\n const name: string[] = [];\r\n removeName.forEach((v) => {\r\n if (!keepName.includes(v)) {\r\n name.push(v);\r\n }\r\n });\r\n keepAliveStore.remove(name);\r\n list.value = list.value.filter((item) => {\r\n return item.tabId === tabId;\r\n });\r\n }\r\n // 删除左侧标签页\r\n function removeLeftSide(tabId: Tabbar.recordRaw[\"tabId\"]) {\r\n // 查找指定路由对应在标签页列表里的下标\r\n const index = list.value.findIndex((item) => item.tabId === tabId);\r\n const keepName: string[] = [];\r\n const removeName: string[] = [];\r\n list.value.forEach((v, i) => {\r\n if (i < index) {\r\n removeName.push(...v.name);\r\n } else {\r\n keepName.push(...v.name);\r\n }\r\n });\r\n const name: string[] = [];\r\n removeName.forEach((v) => {\r\n if (!keepName.includes(v)) {\r\n name.push(v);\r\n }\r\n });\r\n keepAliveStore.remove(name);\r\n list.value = list.value.filter((item, i) => {\r\n return i >= index;\r\n });\r\n }\r\n // 删除右侧标签页\r\n function removeRightSide(tabId: Tabbar.recordRaw[\"tabId\"]) {\r\n // 查找指定路由对应在标签页列表里的下标\r\n const index = list.value.findIndex((item) => item.tabId === tabId);\r\n const keepName: string[] = [];\r\n const removeName: string[] = [];\r\n list.value.forEach((v, i) => {\r\n if (i > index) {\r\n removeName.push(...v.name);\r\n } else {\r\n keepName.push(...v.name);\r\n }\r\n });\r\n const name: string[] = [];\r\n removeName.forEach((v) => {\r\n if (!keepName.includes(v)) {\r\n name.push(v);\r\n }\r\n });\r\n keepAliveStore.remove(name);\r\n list.value = list.value.filter((item, i) => {\r\n return i <= index;\r\n });\r\n }\r\n // 清空所有标签页,登出的时候需要清空\r\n function clean() {\r\n list.value = [];\r\n }\r\n\r\n return {\r\n list,\r\n leaveIndex,\r\n add,\r\n remove,\r\n removeOtherSide,\r\n removeLeftSide,\r\n removeRightSide,\r\n clean,\r\n };\r\n }\r\n);\r\n\r\nexport default useTabbarStore;\r\n","import type { RouteLocationRaw } from 'vue-router'\r\nimport Message from 'vue-m-message'\r\nimport useTabbarStore from '../../store/modules/tabbar'\r\n\r\nexport default function useTabbar() {\r\n const route = useRoute()\r\n const router = useRouter()\r\n\r\n const tabbarStore = useTabbarStore()\r\n\r\n function getId() {\r\n return route.fullPath\r\n }\r\n\r\n function open(to: RouteLocationRaw) {\r\n const index = tabbarStore.list.findIndex(item => item.tabId === getId())\r\n tabbarStore.$patch({\r\n leaveIndex: index,\r\n })\r\n router.push(to)\r\n }\r\n\r\n function go(delta: number) {\r\n const tabId = getId()\r\n router.go(delta)\r\n tabbarStore.remove(tabId)\r\n }\r\n\r\n function close(to: RouteLocationRaw) {\r\n const tabId = getId()\r\n router.push(to).then(() => {\r\n tabbarStore.remove(tabId)\r\n })\r\n }\r\n\r\n function closeById(tabId = getId()) {\r\n const activedTabId = getId()\r\n if (tabbarStore.list.some(item => item.tabId === tabId)) {\r\n if (tabbarStore.list.length > 1) {\r\n // 如果关闭的标签正好是当前路由\r\n if (tabId === activedTabId) {\r\n const index = tabbarStore.list.findIndex(item => item.tabId === tabId)\r\n if (index < tabbarStore.list.length - 1) {\r\n close(tabbarStore.list[index + 1].fullPath)\r\n }\r\n else {\r\n close(tabbarStore.list[index - 1].fullPath)\r\n }\r\n }\r\n else {\r\n tabbarStore.remove(tabId)\r\n }\r\n }\r\n else {\r\n Message.error('当前只有一个标签页,已阻止关闭', {\r\n zIndex: 2000,\r\n })\r\n }\r\n }\r\n else {\r\n Message.error('关闭的页面不存在', {\r\n zIndex: 2000,\r\n })\r\n }\r\n }\r\n\r\n /**\r\n * 关闭两侧标签页\r\n */\r\n function closeOtherSide(tabId = getId()) {\r\n const activedTabId = getId()\r\n // 如果操作的是非当前路由标签页,则先跳转到指定路由标签页\r\n if (tabId !== activedTabId) {\r\n const index = tabbarStore.list.findIndex(item => item.tabId === tabId)\r\n router.push(tabbarStore.list[index].fullPath)\r\n }\r\n tabbarStore.removeOtherSide(tabId)\r\n }\r\n\r\n /**\r\n * 关闭左侧标签页\r\n */\r\n function closeLeftSide(tabId = getId()) {\r\n const activedTabId = getId()\r\n // 如果操作的是非当前路由标签页,需要判断当前标签页是否在指定标签页左侧,如果是则先跳转到指定路由标签页\r\n if (tabId !== activedTabId) {\r\n const index = tabbarStore.list.findIndex(item => item.tabId === tabId)\r\n const activedIndex = tabbarStore.list.findIndex(item => item.tabId === activedTabId)\r\n if (activedIndex < index) {\r\n router.push(tabbarStore.list[index].fullPath)\r\n }\r\n }\r\n tabbarStore.removeLeftSide(tabId)\r\n }\r\n\r\n /**\r\n * 关闭右侧标签页\r\n */\r\n function closeRightSide(tabId = getId()) {\r\n const activedTabId = getId()\r\n // 如果操作的是非当前路由标签页,需要判断当前标签页是否在指定标签页右侧,如果是则先跳转到指定路由标签页\r\n if (tabId !== activedTabId) {\r\n const index = tabbarStore.list.findIndex(item => item.tabId === tabId)\r\n const activedIndex = tabbarStore.list.findIndex(item => item.tabId === activedTabId)\r\n if (activedIndex > index) {\r\n router.push(tabbarStore.list[index].fullPath)\r\n }\r\n }\r\n tabbarStore.removeRightSide(tabId)\r\n }\r\n\r\n /**\r\n * 校验指定标签两侧是否有可关闭的标签\r\n */\r\n function checkCloseOtherSide(tabId = getId()) {\r\n return tabbarStore.list.some((item) => {\r\n return item.tabId !== tabId\r\n })\r\n }\r\n\r\n /**\r\n * 校验指定标签左侧是否有可关闭的标签\r\n */\r\n function checkCloseLeftSide(tabId = getId()) {\r\n let flag = true\r\n if (tabId === tabbarStore.list[0]?.tabId) {\r\n flag = false\r\n }\r\n else {\r\n const index = tabbarStore.list.findIndex(item => item.tabId === tabId)\r\n flag = tabbarStore.list.some((item, i) => {\r\n return i < index && item.tabId !== tabId\r\n })\r\n }\r\n return flag\r\n }\r\n\r\n /**\r\n * 校验指定标签右侧是否有可关闭的标签\r\n */\r\n function checkCloseRightSide(tabId = getId()) {\r\n let flag = true\r\n if (tabId === tabbarStore.list.at(-1)?.tabId) {\r\n flag = false\r\n }\r\n else {\r\n const index = tabbarStore.list.findIndex(item => item.tabId === tabId)\r\n flag = tabbarStore.list.some((item, i) => {\r\n return i >= index && item.tabId !== tabId\r\n })\r\n }\r\n return flag\r\n }\r\n\r\n return {\r\n getId,\r\n open,\r\n go,\r\n close,\r\n closeById,\r\n closeOtherSide,\r\n closeLeftSide,\r\n closeRightSide,\r\n checkCloseOtherSide,\r\n checkCloseLeftSide,\r\n checkCloseRightSide,\r\n }\r\n}\r\n","<script setup lang=\"ts\">\r\nimport ContextMenu from \"@imengyu/vue3-context-menu\";\r\nimport \"@imengyu/vue3-context-menu/lib/vue3-context-menu.css\";\r\nimport hotkeys from \"hotkeys-js\";\r\nimport Message from \"vue-m-message\";\r\nimport { useMagicKeys } from \"@vueuse/core\";\r\nimport useSettingsStore from \"../../../../../store/modules/settings\";\r\nimport useTabbarStore from \"../../../../../store/modules/tabbar\";\r\nimport type { Tabbar } from \"../../../../../typings/global\";\r\nimport SvgIcon from \"../../../common/components/SvgIcon/index.vue\";\r\n\r\ndefineOptions({\r\n name: \"Tabbar\",\r\n});\r\n\r\nconst route = useRoute();\r\nconst router = useRouter();\r\n\r\nconst settingsStore = useSettingsStore();\r\nconst tabbarStore = useTabbarStore();\r\n\r\nconst tabbar = useTabbar();\r\nconst mainPage = useMainPage();\r\n\r\nconst keys = useMagicKeys({ reactive: true });\r\n\r\nconst activedTabId = computed(() => tabbar.getId());\r\n\r\nconst tabsRef = ref();\r\nconst tabContainerRef = ref();\r\nconst tabRef = shallowRef<HTMLElement[]>([]);\r\nonBeforeUpdate(() => {\r\n tabRef.value = [];\r\n});\r\n\r\nwatch(\r\n () => route,\r\n (val) => {\r\n if (settingsStore.settings.tabbar.enable) {\r\n tabbarStore.add(val).then(() => {\r\n const index = tabbarStore.list.findIndex(\r\n (item) => item.tabId === activedTabId.value\r\n );\r\n if (index !== -1) {\r\n scrollTo(tabRef.value[index].offsetLeft);\r\n tabbarScrollTip();\r\n }\r\n });\r\n }\r\n },\r\n {\r\n immediate: true,\r\n deep: true,\r\n }\r\n);\r\nfunction tabbarScrollTip() {\r\n if (\r\n tabContainerRef.value.$el.clientWidth > tabsRef.value.clientWidth &&\r\n localStorage.getItem(\"tabbarScrollTip\") === undefined\r\n ) {\r\n localStorage.setItem(\"tabbarScrollTip\", \"\");\r\n Message.info(\r\n \"标签栏数量超过展示区域范围,可以将鼠标移到标签栏上,通过鼠标滚轮滑动浏览\",\r\n {\r\n title: \"温馨提示\",\r\n duration: 5000,\r\n closable: true,\r\n zIndex: 2000,\r\n }\r\n );\r\n }\r\n}\r\nfunction handlerMouserScroll(event: WheelEvent) {\r\n tabsRef.value.scrollBy({\r\n left: event.deltaY || event.detail,\r\n });\r\n}\r\nfunction scrollTo(offsetLeft: number) {\r\n tabsRef.value.scrollTo({\r\n left: offsetLeft - 50,\r\n behavior: \"smooth\",\r\n });\r\n}\r\nfunction onTabbarContextmenu(event: MouseEvent, routeItem: Tabbar.recordRaw) {\r\n event.preventDefault();\r\n ContextMenu.showContextMenu({\r\n x: event.x,\r\n y: event.y,\r\n zIndex: 1050,\r\n iconFontClass: \"\",\r\n customClass: \"tabbar-contextmenu\",\r\n items: [\r\n {\r\n label: \"重新加载\",\r\n icon: \"i-ri:refresh-line\",\r\n disabled: routeItem.tabId !== activedTabId.value,\r\n onClick: () => mainPage.reload(),\r\n },\r\n {\r\n label: \"关闭标签页\",\r\n icon: \"i-ri:close-line\",\r\n disabled: tabbarStore.list.length <= 1,\r\n divided: true,\r\n onClick: () => {\r\n tabbar.closeById(routeItem.tabId);\r\n },\r\n },\r\n {\r\n label: \"关闭其他标签页\",\r\n disabled: !tabbar.checkCloseOtherSide(routeItem.tabId),\r\n onClick: () => {\r\n tabbar.closeOtherSide(routeItem.tabId);\r\n },\r\n },\r\n {\r\n label: \"关闭左侧标签页\",\r\n disabled: !tabbar.checkCloseLeftSide(routeItem.tabId),\r\n onClick: () => {\r\n tabbar.closeLeftSide(routeItem.tabId);\r\n },\r\n },\r\n {\r\n label: \"关闭右侧标签页\",\r\n disabled: !tabbar.checkCloseRightSide(routeItem.tabId),\r\n onClick: () => {\r\n tabbar.closeRightSide(routeItem.tabId);\r\n },\r\n },\r\n ],\r\n });\r\n}\r\n\r\nonMounted(() => {\r\n hotkeys(\r\n \"alt+left,alt+right,alt+w,alt+1,alt+2,alt+3,alt+4,alt+5,alt+6,alt+7,alt+8,alt+9,alt+0\",\r\n (e, handle) => {\r\n if (\r\n settingsStore.settings.tabbar.enable &&\r\n settingsStore.settings.tabbar.enableHotkeys\r\n ) {\r\n e.preventDefault();\r\n switch (handle.key) {\r\n // 切换到当前标签页紧邻的上一个标签页\r\n case \"alt+left\":\r\n if (tabbarStore.list[0].tabId !== activedTabId.value) {\r\n const index = tabbarStore.list.findIndex(\r\n (item) => item.tabId === activedTabId.value\r\n );\r\n router.push(tabbarStore.list[index - 1].fullPath);\r\n }\r\n break;\r\n // 切换到当前标签页紧邻的下一个标签页\r\n case \"alt+right\":\r\n if (tabbarStore.list.at(-1)?.tabId !== activedTabId.value) {\r\n const index = tabbarStore.list.findIndex(\r\n (item) => item.tabId === activedTabId.value\r\n );\r\n router.push(tabbarStore.list[index + 1].fullPath);\r\n }\r\n break;\r\n // 关闭当前标签页\r\n case \"alt+w\":\r\n tabbar.closeById(activedTabId.value);\r\n break;\r\n // 切换到第 n 个标签页\r\n case \"alt+1\":\r\n case \"alt+2\":\r\n case \"alt+3\":\r\n case \"alt+4\":\r\n case \"alt+5\":\r\n case \"alt+6\":\r\n case \"alt+7\":\r\n case \"alt+8\":\r\n case \"alt+9\": {\r\n const number = Number(handle.key.split(\"+\")[1]);\r\n tabbarStore.list[number - 1]?.fullPath &&\r\n router.push(tabbarStore.list[number - 1].fullPath);\r\n break;\r\n }\r\n // 切换到最后一个标签页\r\n case \"alt+0\":\r\n router.push(tabbarStore.list[tabbarStore.list.length - 1].fullPath);\r\n break;\r\n }\r\n }\r\n }\r\n );\r\n});\r\nonUnmounted(() => {\r\n hotkeys.unbind(\r\n \"alt+left,alt+right,alt+w,alt+1,alt+2,alt+3,alt+4,alt+5,alt+6,alt+7,alt+8,alt+9,alt+0\"\r\n );\r\n});\r\n</script>\r\n\r\n<template>\r\n <div class=\"tabbar-container\">\r\n <div ref=\"tabsRef\" class=\"tabs\" @wheel.prevent=\"handlerMouserScroll\">\r\n <TransitionGroup\r\n ref=\"tabContainerRef\"\r\n name=\"tabbar\"\r\n tag=\"div\"\r\n class=\"tab-container\"\r\n >\r\n <div\r\n v-for=\"(element, index) in tabbarStore.list\"\r\n :key=\"element.tabId\"\r\n ref=\"tabRef\"\r\n :data-index=\"index\"\r\n class=\"tab\"\r\n :class=\"{\r\n actived: element.tabId === activedTabId,\r\n }\"\r\n :title=\"\r\n typeof element?.title === 'function'\r\n ? element.title()\r\n : element.title\r\n \"\r\n @click=\"router.push(element.fullPath)\"\r\n @contextmenu=\"onTabbarContextmenu($event, element)\"\r\n >\r\n <div class=\"tab-dividers\" />\r\n <div class=\"tab-background\" />\r\n <div class=\"tab-content\">\r\n <div :key=\"element.tabId\" class=\"title\">\r\n <SvgIcon\r\n v-if=\"settingsStore.settings.tabbar.enableIcon && element.icon\"\r\n :name=\"element.icon\"\r\n class=\"icon\"\r\n />\r\n {{\r\n typeof element?.title === \"function\"\r\n ? element.title()\r\n : element.title\r\n }}\r\n </div>\r\n <div\r\n v-if=\"tabbarStore.list.length > 1\"\r\n class=\"action-icon\"\r\n @click.stop=\"tabbar.closeById(element.tabId)\"\r\n >\r\n <SvgIcon name=\"i-ri:close-fill\" />\r\n </div>\r\n <div v-show=\"keys.alt && index < 9\" class=\"hotkey-number\">\r\n {{ index + 1 }}\r\n </div>\r\n </div>\r\n </div>\r\n </TransitionGroup>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<style lang=\"scss\">\r\n.tabbar-contextmenu {\r\n z-index: 1000;\r\n\r\n .mx-context-menu {\r\n --at-apply: fixed ring-1 ring-stone-2 dark-ring-stone-7 shadow-2xl;\r\n\r\n background-color: var(--g-container-bg);\r\n\r\n .mx-context-menu-items .mx-context-menu-item {\r\n --at-apply: transition-background-color;\r\n\r\n &:not(.disabled):hover {\r\n --at-apply: cursor-pointer bg-stone-1 dark-bg-stone-9;\r\n }\r\n\r\n span {\r\n color: initial;\r\n }\r\n\r\n .icon {\r\n color: initial;\r\n }\r\n\r\n &.disabled span,\r\n &.disabled .icon {\r\n opacity: 0.25;\r\n }\r\n }\r\n\r\n .mx-context-menu-item-sperator {\r\n background-color: var(--g-container-bg);\r\n\r\n &::after {\r\n --at-apply: bg-stone-2 dark-bg-stone-7;\r\n }\r\n }\r\n }\r\n}\r\n</style>\r\n\r\n<style lang=\"scss\" scoped>\r\n.tabbar-container {\r\n position: relative;\r\n height: var(--g-tabbar-height);\r\n background-color: var(--g-bg);\r\n transition: background-color 0.3s;\r\n\r\n .tabs {\r\n position: absolute;\r\n right: 0;\r\n left: 0;\r\n overflow-y: hidden;\r\n white-space: nowrap;\r\n\r\n // firefox隐藏滚动条\r\n scrollbar-width: none;\r\n\r\n // chrome隐藏滚动条\r\n &::-webkit-scrollbar {\r\n display: none;\r\n }\r\n\r\n .tab-container {\r\n display: inline-block;\r\n\r\n .tab {\r\n position: relative;\r\n display: inline-block;\r\n width: 150px;\r\n height: var(--g-tabbar-height);\r\n font-size: 14px;\r\n line-height: calc(var(--g-tabbar-height) - 2px);\r\n vertical-align: bottom;\r\n pointer-events: none;\r\n cursor: pointer;\r\n\r\n &:not(.actived):hover {\r\n z-index: 3;\r\n\r\n &::before,\r\n &::after {\r\n content: none;\r\n }\r\n\r\n & + .tab .tab-dividers::before {\r\n opacity: 0;\r\n }\r\n\r\n .tab-content {\r\n .title,\r\n .action-icon {\r\n color: var(--g-tabbar-tab-hover-color);\r\n }\r\n }\r\n\r\n .tab-background {\r\n background-color: var(--g-tabbar-tab-hover-bg);\r\n }\r\n }\r\n\r\n * {\r\n user-select: none;\r\n }\r\n\r\n &.actived {\r\n z-index: 5;\r\n\r\n &::before,\r\n &::after {\r\n content: none;\r\n }\r\n\r\n & + .tab .tab-dividers::before {\r\n opacity: 0;\r\n }\r\n\r\n .tab-content {\r\n .title,\r\n .action-icon {\r\n color: var(--g-tabbar-tab-active-color);\r\n }\r\n }\r\n\r\n .tab-background {\r\n background-color: var(--g-container-bg);\r\n }\r\n }\r\n\r\n .tab-dividers {\r\n position: absolute;\r\n top: 50%;\r\n right: -1px;\r\n left: -1px;\r\n z-index: 0;\r\n height: 14px;\r\n transform: translateY(-50%);\r\n\r\n &::before {\r\n position: absolute;\r\n top: 0;\r\n bottom: 0;\r\n left: 1px;\r\n display: block;\r\n width: 1px;\r\n content: \"\";\r\n background-color: var(--g-tabbar-dividers-bg);\r\n opacity: 1;\r\n transition: opacity 0.2s ease, background-color 0.3s;\r\n }\r\n }\r\n\r\n &:first-child .tab-dividers::before {\r\n opacity: 0;\r\n }\r\n\r\n .tab-background {\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n z-index: 0;\r\n width: 100%;\r\n height: 100%;\r\n pointer-events: none;\r\n transition: opacity 0.3s, background-color 0.3s;\r\n }\r\n\r\n .tab-content {\r\n display: flex;\r\n width: 100%;\r\n height: 100%;\r\n pointer-events: all;\r\n\r\n .title {\r\n display: flex;\r\n flex: 1;\r\n gap: 5px;\r\n align-items: center;\r\n height: 100%;\r\n padding: 0 10px;\r\n margin-right: 10px;\r\n overflow: hidden;\r\n color: var(--g-tabbar-tab-color);\r\n white-space: nowrap;\r\n mask-image: linear-gradient(\r\n to right,\r\n #000 calc(100% - 20px),\r\n transparent\r\n );\r\n transition: margin-right 0.3s;\r\n\r\n &:has(+ .action-icon) {\r\n margin-right: 28px;\r\n }\r\n\r\n .icon {\r\n flex-shrink: 0;\r\n }\r\n }\r\n\r\n .action-icon {\r\n position: absolute;\r\n top: 50%;\r\n right: 0.5em;\r\n z-index: 10;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 1.5em;\r\n height: 1.5em;\r\n font-size: 12px;\r\n color: var(--g-tabbar-tab-color);\r\n border-radius: 50%;\r\n transform: translateY(-50%);\r\n\r\n &:hover {\r\n --at-apply: ring-1 ring-stone-3 dark-ring-stone-7;\r\n\r\n background-color: var(--g-bg);\r\n }\r\n }\r\n\r\n .hotkey-number {\r\n --at-apply: ring-1 ring-stone-3 dark-ring-stone-7;\r\n\r\n position: absolute;\r\n top: 50%;\r\n right: 0.5em;\r\n z-index: 10;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 1.5em;\r\n height: 1.5em;\r\n font-size: 12px;\r\n color: var(--g-tabbar-tab-color);\r\n background-color: var(--g-bg);\r\n border-radius: 50%;\r\n transform: translateY(-50%);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n// 标签栏动画\r\n.tabs {\r\n .tabbar-move,\r\n .tabbar-enter-active,\r\n .tabbar-leave-active {\r\n transition: all 0.3s;\r\n }\r\n\r\n .tabbar-enter-from,\r\n .tabbar-leave-to {\r\n opacity: 0;\r\n transform: translateY(30px);\r\n }\r\n\r\n .tabbar-leave-active {\r\n position: absolute !important;\r\n }\r\n}\r\n</style>\r\n","<template>\r\n <div class=\"flex items-center text-sm\">\r\n <slot />\r\n </div>\r\n</template>\r\n\r\n<style lang=\"scss\" scoped>\r\n:deep(.breadcrumb-item) {\r\n &:first-child {\r\n .separator {\r\n display: none;\r\n }\r\n }\r\n\r\n &:last-child {\r\n .text {\r\n opacity: 1;\r\n }\r\n }\r\n}\r\n</style>\r\n","<script setup lang=\"ts\">\r\nimport { type RouteLocationRaw, useRouter } from \"vue-router\";\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n to?: RouteLocationRaw;\r\n replace?: boolean;\r\n separator?: string;\r\n }>(),\r\n {\r\n separator: \"/\",\r\n }\r\n);\r\n\r\nconst router = useRouter();\r\n\r\nfunction onClick() {\r\n if (props.to) {\r\n props.replace ? router.replace(props.to) : router.push(props.to);\r\n }\r\n}\r\n</script>\r\n\r\n<template>\r\n <div class=\"breadcrumb-item flex items-center text-dark dark-text-white\">\r\n <span class=\"separator mx-2\">\r\n {{ separator }}\r\n </span>\r\n <span\r\n class=\"text flex items-center opacity-60\"\r\n :class=\"{\r\n 'is-link cursor-pointer transition-opacity hover-opacity-100':\r\n !!props.to,\r\n }\"\r\n @click=\"onClick\"\r\n >\r\n <slot />\r\n </span>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport { compile } from 'path-to-regexp'\r\nimport Breadcrumb from '../../../Breadcrumb/index.vue'\r\nimport BreadcrumbItem from '../../../Breadcrumb/item.vue'\r\nimport useSettingsStore from '../../../../../../store/modules/settings'\r\n\r\nconst route = useRoute()\r\n\r\nconst settingsStore = useSettingsStore()\r\n\r\nconst breadcrumbList = computed(() => {\r\n const breadcrumbList = []\r\n if (settingsStore.settings.home.enable) {\r\n breadcrumbList.push({\r\n path: settingsStore.settings.home.fullPath,\r\n title: settingsStore.settings.home.title,\r\n })\r\n }\r\n if (route.meta.breadcrumbNeste) {\r\n route.meta.breadcrumbNeste.forEach((item) => {\r\n if (item.hide === false) {\r\n breadcrumbList.push({\r\n path: item.path,\r\n title: item.title,\r\n })\r\n }\r\n })\r\n }\r\n return breadcrumbList\r\n})\r\n\r\nfunction pathCompile(path: string) {\r\n const toPath = compile(path)\r\n return toPath(route.params)\r\n}\r\n</script>\r\n\r\n<template>\r\n <Breadcrumb v-if=\"settingsStore.mode === 'pc' && settingsStore.settings.app.routeBaseOn !== 'filesystem'\" class=\"breadcrumb whitespace-nowrap px-2\">\r\n <TransitionGroup name=\"breadcrumb\">\r\n <BreadcrumbItem v-for=\"(item, index) in breadcrumbList\" :key=\"`${index}_${item.path}_${item.title}`\" :to=\"index < breadcrumbList.length - 1 && item.path !== '' ? pathCompile(item.path) : ''\">\r\n {{ item.title }}\r\n </BreadcrumbItem>\r\n </TransitionGroup>\r\n </Breadcrumb>\r\n</template>\r\n\r\n<style lang=\"scss\" scoped>\r\n// 面包屑动画\r\n.breadcrumb-enter-active {\r\n transition: transform 0.3s, opacity 0.3s;\r\n}\r\n\r\n.breadcrumb-enter-from {\r\n opacity: 0;\r\n transform: translateX(30px) skewX(-50deg);\r\n}\r\n</style>\r\n","<script setup lang=\"ts\">\r\nimport Breadcrumb from './Breadcrumb/index.vue'\r\nimport useSettingsStore from '../../../../../store/modules/settings'\r\nimport SvgIcon from \"../../../common/components/SvgIcon/index.vue\";\r\n\r\ndefineOptions({\r\n name: 'ToolbarLeftSide',\r\n})\r\n\r\nconst settingsStore = useSettingsStore()\r\n</script>\r\n\r\n<template>\r\n <div class=\"flex items-center\">\r\n <div v-if=\"settingsStore.mode === 'mobile'\" class=\"flex-center cursor-pointer px-2 py-1 -rotate-z-180\" @click=\"settingsStore.toggleSidebarCollapse()\">\r\n <SvgIcon name=\"toolbar-collapse\" />\r\n </div>\r\n <Breadcrumb v-if=\"settingsStore.settings.toolbar.breadcrumb\" />\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport LeftSide from './leftSide.vue'\r\nimport RightSide from './rightSide.vue'\r\nimport useSettingsStore from '../../../../../store/modules/settings'\r\n\r\ndefineOptions({\r\n name: 'Toolbar',\r\n})\r\n\r\nconst settingsStore = useSettingsStore()\r\n</script>\r\n\r\n<template>\r\n <div class=\"toolbar-container flex items-center justify-between\">\r\n <div class=\"h-full flex items-center of-hidden pl-2 pr-16\" style=\"mask-image: linear-gradient(90deg, #000 0%, #000 calc(100% - 50px), transparent);\">\r\n <LeftSide />\r\n </div>\r\n <div v-show=\"['side', 'single'].includes(settingsStore.settings.menu.mode)\" class=\"h-full flex items-center px-2\">\r\n <RightSide />\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<style lang=\"scss\" scoped>\r\n.toolbar-container {\r\n height: var(--g-toolbar-height);\r\n background-color: var(--g-container-bg);\r\n transition: background-color 0.3s;\r\n}\r\n</style>\r\n","<script setup lang=\"ts\">\r\nimport Tabbar from \"./Tabbar/index.vue\";\r\nimport Toolbar from \"./Toolbar/index.vue\";\r\nimport useSettingsStore from \"../../../../store/modules/settings\";\r\n\r\ndefineOptions({\r\n name: \"Topbar\",\r\n});\r\n\r\nconst settingsStore = useSettingsStore();\r\n\r\nconst enableToolbar = computed(() => {\r\n return !(\r\n settingsStore.settings.menu.mode === \"head\" &&\r\n (!settingsStore.settings.toolbar.breadcrumb ||\r\n settingsStore.settings.app.routeBaseOn === \"filesystem\")\r\n );\r\n});\r\n\r\nconst scrollTop = ref(0);\r\nconst scrollOnHide = ref(false);\r\nconst topbarHeight = computed(() => {\r\n const tabbarHeight = settingsStore.settings.tabbar.enable\r\n ? Number.parseInt(\r\n getComputedStyle(\r\n document.documentElement || document.body\r\n ).getPropertyValue(\"--g-tabbar-height\")\r\n )\r\n : 0;\r\n const toolbarHeight = enableToolbar.value\r\n ? Number.parseInt(\r\n getComputedStyle(\r\n document.documentElement || document.body\r\n ).getPropertyValue(\"--g-toolbar-height\")\r\n )\r\n : 0;\r\n return tabbarHeight + toolbarHeight;\r\n});\r\nonMounted(() => {\r\n window.addEventListener(\"scroll\", onScroll);\r\n});\r\nonUnmounted(() => {\r\n window.removeEventListener(\"scroll\", onScroll);\r\n});\r\nfunction onScroll() {\r\n scrollTop.value = (document.documentElement || document.body).scrollTop;\r\n}\r\nwatch(scrollTop, (val, oldVal) => {\r\n scrollOnHide.value =\r\n settingsStore.settings.topbar.mode === \"sticky\" &&\r\n val > oldVal &&\r\n val > topbarHeight.value;\r\n});\r\n</script>\r\n\r\n<template>\r\n <div\r\n class=\"topbar-container\"\r\n :class=\"{\r\n 'has-tabbar': settingsStore.settings.tabbar.enable,\r\n 'has-toolbar': enableToolbar,\r\n [`topbar-${settingsStore.settings.topbar.mode}`]: true,\r\n shadow: scrollTop,\r\n hide: scrollOnHide,\r\n }\"\r\n data-fixed-calc-width\r\n >\r\n <Tabbar v-if=\"settingsStore.settings.tabbar.enable\" />\r\n <Toolbar v-if=\"enableToolbar\" />\r\n </div>\r\n</template>\r\n\r\n<style lang=\"scss\" scoped>\r\n.topbar-container {\r\n position: absolute;\r\n top: 0;\r\n z-index: 999;\r\n display: flex;\r\n flex-direction: column;\r\n box-shadow: 0 1px 0 0 var(--g-border-color);\r\n transition: width 0.3s, top 0.3s, transform 0.3s, box-shadow 0.3s;\r\n\r\n &.topbar-fixed,\r\n &.topbar-sticky {\r\n position: fixed;\r\n\r\n &.shadow {\r\n box-shadow: 0 10px 10px -10px var(--g-box-shadow-color);\r\n }\r\n }\r\n\r\n &.topbar-sticky.hide {\r\n top: calc(\r\n (var(--g-tabbar-height) + var(--g-toolbar-height)) * -1\r\n ) !important;\r\n }\r\n}\r\n</style>\r\n","<script setup lang=\"ts\">\r\nimport { useRouter } from \"vue-router\";\r\nimport {\r\n Dialog,\r\n DialogDescription,\r\n DialogPanel,\r\n TransitionChild,\r\n TransitionRoot,\r\n} from \"@headlessui/vue\";\r\nimport type { OverlayScrollbarsComponentRef } from \"overlayscrollbars-vue\";\r\nimport { OverlayScrollbarsComponent } from \"overlayscrollbars-vue\";\r\nimport { cloneDeep } from \"lodash-es\";\r\nimport hotkeys from \"hotkeys-js\";\r\nimport Breadcrumb from \"../Breadcrumb/index.vue\";\r\nimport BreadcrumbItem from \"../Breadcrumb/item.vue\";\r\nimport { resolveRoutePath } from \"../../../../utils/index\";\r\nimport eventBus from \"../../../../utils/eventBus\";\r\nimport useSettingsStore from \"../../../../store/modules/settings\";\r\nimport useMenuStore from \"../../../../store/modules/menu\";\r\nimport type { Menu } from \"../../../../types/global\";\r\nimport SvgIcon from \"../../common/components/SvgIcon/index.vue\";\r\nimport HKbd from \"../../ui-kit/HKbd.vue\";\r\n\r\ndefineOptions({\r\n name: \"Search\",\r\n});\r\n\r\nconst overlayTransitionClass = ref({\r\n enter: \"ease-in-out duration-500\",\r\n enterFrom: \"opacity-0\",\r\n enterTo: \"opacity-100\",\r\n leave: \"ease-in-out duration-500\",\r\n leaveFrom: \"opacity-100\",\r\n leaveTo: \"opacity-0\",\r\n});\r\n\r\nconst transitionClass = computed(() => {\r\n return {\r\n enter: \"ease-out duration-300\",\r\n enterFrom: \"opacity-0 translate-y-4 lg-translate-y-0 lg-scale-95\",\r\n enterTo: \"opacity-100 translate-y-0 lg-scale-100\",\r\n leave: \"ease-in duration-200\",\r\n leaveFrom: \"opacity-100 translate-y-0 lg-scale-100\",\r\n leaveTo: \"opacity-0 translate-y-4 lg-translate-y-0 lg-scale-95\",\r\n };\r\n});\r\n\r\nconst router = useRouter();\r\nconst settingsStore = useSettingsStore();\r\nconst menuStore = useMenuStore();\r\n\r\ninterface listTypes {\r\n path: string;\r\n icon?: string;\r\n title?: string | (() => string);\r\n link?: string;\r\n breadcrumb: {\r\n title?: string | (() => string);\r\n }[];\r\n}\r\n\r\nconst isShow = ref(false);\r\nconst searchInput = ref(\"\");\r\nconst sourceList = ref<listTypes[]>([]);\r\nconst actived = ref(-1);\r\n\r\nconst searchInputRef = ref();\r\nconst searchResultRef = ref<OverlayScrollbarsComponentRef>();\r\nconst searchResultItemRef = ref<HTMLElement[]>([]);\r\nonBeforeUpdate(() => {\r\n searchResultItemRef.value = [];\r\n});\r\n\r\nconst resultList = computed(() => {\r\n let result = [];\r\n result = sourceList.value.filter((item) => {\r\n let flag = false;\r\n if (item.title) {\r\n if (typeof item.title === \"function\") {\r\n if (item.title().includes(searchInput.value)) {\r\n flag = true;\r\n }\r\n } else {\r\n if (item.title.includes(searchInput.value)) {\r\n flag = true;\r\n }\r\n }\r\n }\r\n if (item.path.includes(searchInput.value)) {\r\n flag = true;\r\n }\r\n if (\r\n item.breadcrumb.some((b) => {\r\n if (typeof b.title === \"function\") {\r\n if (b.title().includes(searchInput.value)) {\r\n return true;\r\n }\r\n } else {\r\n if (b.title?.includes(searchInput.value)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n })\r\n ) {\r\n flag = true;\r\n }\r\n return flag;\r\n });\r\n return result;\r\n});\r\n\r\nwatch(\r\n () => isShow.value,\r\n (val) => {\r\n if (val) {\r\n searchInput.value = \"\";\r\n actived.value = -1;\r\n // 当搜索显示的时候绑定上、下、回车快捷键,隐藏的时候再解绑。另外当 input 处于 focus 状态时,采用 vue 来绑定键盘事件\r\n hotkeys(\"up\", keyUp);\r\n hotkeys(\"down\", keyDown);\r\n hotkeys(\"enter\", keyEnter);\r\n } else {\r\n hotkeys.unbind(\"up\", keyUp);\r\n hotkeys.unbind(\"down\", keyDown);\r\n hotkeys.unbind(\"enter\", keyEnter);\r\n }\r\n }\r\n);\r\nwatch(\r\n () => resultList.value,\r\n () => {\r\n actived.value = -1;\r\n handleScroll();\r\n }\r\n);\r\n\r\nonMounted(() => {\r\n eventBus.on(\"global-search-toggle\", () => {\r\n if (!isShow.value) {\r\n initSourceList();\r\n }\r\n isShow.value = !isShow.value;\r\n });\r\n hotkeys(\"alt+s\", (e) => {\r\n if (\r\n settingsStore.settings.toolbar.navSearch &&\r\n settingsStore.settings.navSearch.enableHotkeys\r\n ) {\r\n e.preventDefault();\r\n initSourceList();\r\n isShow.value = true;\r\n }\r\n });\r\n hotkeys(\"esc\", (e) => {\r\n if (\r\n settingsStore.settings.toolbar.navSearch &&\r\n settingsStore.settings.navSearch.enableHotkeys\r\n ) {\r\n e.preventDefault();\r\n isShow.value = false;\r\n }\r\n });\r\n initSourceList();\r\n});\r\n\r\nfunction initSourceList() {\r\n sourceList.value = [];\r\n menuStore.allMenus.forEach((item) => {\r\n getSourceListByMenus(item.children);\r\n });\r\n}\r\n\r\nfunction hasChildren(item: Menu.recordRaw) {\r\n let flag = true;\r\n if (item.children?.every((i) => i.meta?.menu === false)) {\r\n flag = false;\r\n }\r\n return flag;\r\n}\r\nfunction getSourceListByMenus(\r\n arr: Menu.recordRaw[],\r\n basePath?: string,\r\n icon?: string,\r\n breadcrumb?: { title?: string | (() => string) }[]\r\n) {\r\n arr.forEach((item) => {\r\n if (item.meta?.menu !== false) {\r\n const breadcrumbTemp = cloneDeep(breadcrumb) || [];\r\n if (item.children && hasChildren(item)) {\r\n breadcrumbTemp.push({\r\n title: item.meta?.title,\r\n });\r\n getSourceListByMenus(\r\n item.children,\r\n resolveRoutePath(basePath, item.path),\r\n item.meta?.icon ?? icon,\r\n breadcrumbTemp\r\n );\r\n } else {\r\n breadcrumbTemp.push({\r\n title: item.meta?.title,\r\n });\r\n sourceList.value.push({\r\n path: resolveRoutePath(basePath, item.path),\r\n icon: item.meta?.icon ?? icon,\r\n title: item.meta?.title,\r\n link: item.meta?.link,\r\n breadcrumb: breadcrumbTemp,\r\n });\r\n }\r\n }\r\n });\r\n}\r\n\r\nfunction keyUp() {\r\n if (resultList.value.length) {\r\n actived.value -= 1;\r\n if (actived.value < 0) {\r\n actived.value = resultList.value.length - 1;\r\n }\r\n handleScroll();\r\n }\r\n}\r\nfunction keyDown() {\r\n if (resultList.value.length) {\r\n actived.value += 1;\r\n if (actived.value > resultList.value.length - 1) {\r\n actived.value = 0;\r\n }\r\n handleScroll();\r\n }\r\n}\r\nfunction keyEnter() {\r\n if (actived.value !== -1) {\r\n searchResultItemRef.value\r\n .find((item) => Number.parseInt(item.dataset.index!) === actived.value)\r\n ?.click();\r\n }\r\n}\r\nfunction handleScroll() {\r\n if (searchResultRef.value) {\r\n const contentDom = searchResultRef.value.osInstance()!.elements().content;\r\n let scrollTo = 0;\r\n if (actived.value !== -1) {\r\n scrollTo = contentDom.scrollTop;\r\n const activedOffsetTop =\r\n searchResultItemRef.value.find(\r\n (item) => Number.parseInt(item.dataset.index!) === actived.value\r\n )?.offsetTop ?? 0;\r\n const activedClientHeight =\r\n searchResultItemRef.value.find(\r\n (item) => Number.parseInt(item.dataset.index!) === actived.value\r\n )?.clientHeight ?? 0;\r\n const searchScrollTop = contentDom.scrollTop;\r\n const searchClientHeight = contentDom.clientHeight;\r\n if (\r\n activedOffsetTop + activedClientHeight >\r\n searchScrollTop + searchClientHeight\r\n ) {\r\n scrollTo = activedOffsetTop + activedClientHeight - searchClientHeight;\r\n } else if (activedOffsetTop <= searchScrollTop) {\r\n scrollTo = activedOffsetTop;\r\n }\r\n }\r\n contentDom.scrollTo({\r\n top: scrollTo,\r\n });\r\n }\r\n}\r\n\r\nfunction pageJump(path: listTypes[\"path\"], link: listTypes[\"link\"]) {\r\n if (link) {\r\n window.open(link, \"_blank\");\r\n } else {\r\n router.push(path);\r\n }\r\n isShow.value = false;\r\n}\r\n</script>\r\n\r\n<template>\r\n <TransitionRoot as=\"template\" :show=\"isShow\">\r\n <Dialog\r\n :initial-focus=\"searchInputRef\"\r\n class=\"fixed inset-0 z-2000 flex\"\r\n @close=\"isShow && eventBus.emit('global-search-toggle')\"\r\n >\r\n <TransitionChild as=\"template\" v-bind=\"overlayTransitionClass\">\r\n <div\r\n class=\"fixed inset-0 bg-stone-200/75 backdrop-blur-sm transition-opacity dark-bg-stone-8/75\"\r\n />\r\n </TransitionChild>\r\n <div class=\"fixed inset-0\">\r\n <div\r\n class=\"h-full flex items-end justify-center p-4 text-center lg-items-center\"\r\n >\r\n <TransitionChild as=\"template\" v-bind=\"transitionClass\">\r\n <DialogPanel\r\n class=\"relative h-full max-h-4/5 w-full flex flex-col text-left lg-max-w-2xl\"\r\n >\r\n <div\r\n class=\"flex flex-col overflow-y-auto rounded-xl bg-white shadow-xl dark-bg-stone-8\"\r\n >\r\n <div\r\n class=\"flex items-center px-4 py-3\"\r\n border-b=\"~ solid stone-2 dark-stone-7\"\r\n >\r\n <SvgIcon name=\"i-ep:search\" :size=\"18\" class=\"text-stone-5\" />\r\n <input\r\n ref=\"searchInputRef\"\r\n v-model=\"searchInput\"\r\n placeholder=\"搜索页面,支持标题、URL模糊查询\"\r\n class=\"w-full border-0 rounded-md bg-transparent px-3 text-base text-dark dark-text-white focus-outline-none placeholder-stone-4 dark-placeholder-stone-5\"\r\n @keydown.esc=\"eventBus.emit('global-search-toggle')\"\r\n @keydown.up.prevent=\"keyUp\"\r\n @keydown.down.prevent=\"keyDown\"\r\n @keydown.enter.prevent=\"keyEnter\"\r\n />\r\n </div>\r\n <DialogDescription class=\"relative m-0 of-y-hidden\">\r\n <OverlayScrollbarsComponent\r\n ref=\"searchResultRef\"\r\n :options=\"{\r\n scrollbars: { autoHide: 'leave', autoHideDelay: 300 },\r\n }\"\r\n defer\r\n class=\"h-full\"\r\n >\r\n <template v-if=\"resultList.length > 0\">\r\n <a\r\n v-for=\"(item, index) in resultList\"\r\n ref=\"searchResultItemRef\"\r\n :key=\"item.path\"\r\n class=\"flex cursor-pointer items-center\"\r\n :class=\"{\r\n 'bg-stone-2/40 dark-bg-stone-7/40': index === actived,\r\n }\"\r\n :data-index=\"index\"\r\n @click=\"pageJump(item.path, item.link)\"\r\n @mouseover=\"actived = index\"\r\n >\r\n <SvgIcon\r\n v-if=\"item.icon\"\r\n :name=\"item.icon\"\r\n :size=\"20\"\r\n class=\"basis-16 transition\"\r\n :class=\"{\r\n 'scale-120 text-ui-primary': index === actived,\r\n }\"\r\n />\r\n <div\r\n class=\"flex flex-1 flex-col gap-1 truncate px-4 py-3\"\r\n border-l=\"~ solid stone-2 dark-stone-7\"\r\n >\r\n <div class=\"truncate text-base font-bold\">\r\n {{\r\n (typeof item.title === \"function\"\r\n ? item.title()\r\n : item.title) ?? \"[ 无标题 ]\"\r\n }}\r\n </div>\r\n <Breadcrumb\r\n v-if=\"item.breadcrumb.length\"\r\n class=\"truncate\"\r\n >\r\n <BreadcrumbItem\r\n v-for=\"(bc, bcIndex) in item.breadcrumb\"\r\n :key=\"bcIndex\"\r\n class=\"text-xs\"\r\n >\r\n {{\r\n (typeof bc.title === \"function\"\r\n ? bc.title()\r\n : bc.title) ?? \"[ 无标题 ]\"\r\n }}\r\n </BreadcrumbItem>\r\n </Breadcrumb>\r\n </div>\r\n </a>\r\n </template>\r\n <template v-else>\r\n <div flex=\"center col\" py-6 text-stone-5>\r\n <SvgIcon name=\"i-tabler:mood-empty\" :size=\"40\" />\r\n <p m-2 text-base>没有找到你想要的</p>\r\n </div>\r\n </template>\r\n </OverlayScrollbarsComponent>\r\n </DialogDescription>\r\n <div\r\n v-if=\"settingsStore.mode === 'pc'\"\r\n class=\"flex justify-between px-4 py-3\"\r\n border-t=\"~ solid stone-2 dark-stone-7\"\r\n >\r\n <div class=\"flex gap-8\">\r\n <div class=\"inline-flex items-center gap-1 text-xs\">\r\n <HKbd>\r\n <SvgIcon name=\"i-ion:md-return-left\" :size=\"14\" />\r\n </HKbd>\r\n <span>访问</span>\r\n </div>\r\n <div class=\"inline-flex items-center gap-1 text-xs\">\r\n <HKbd>\r\n <SvgIcon\r\n name=\"i-ant-design:caret-up-filled\"\r\n :size=\"14\"\r\n />\r\n </HKbd>\r\n <HKbd>\r\n <SvgIcon\r\n name=\"i-ant-design:caret-down-filled\"\r\n :size=\"14\"\r\n />\r\n </HKbd>\r\n <span>切换</span>\r\n </div>\r\n </div>\r\n <div\r\n v-if=\"settingsStore.settings.navSearch.enableHotkeys\"\r\n class=\"inline-flex items-center gap-1 text-xs\"\r\n >\r\n <HKbd> ESC </HKbd>\r\n <span>退出</span>\r\n </div>\r\n </div>\r\n </div>\r\n </DialogPanel>\r\n </TransitionChild>\r\n </div>\r\n </div>\r\n </Dialog>\r\n </TransitionRoot>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport {Dialog, DialogDescription, DialogPanel, DialogTitle, TransitionChild, TransitionRoot} from '@headlessui/vue'\r\nimport SvgIcon from \"../common/components/SvgIcon/index.vue\";\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n appear?: boolean\r\n title?: string\r\n preventClose?: boolean\r\n overlay?: boolean\r\n width?: string\r\n }>(),\r\n {\r\n appear: false,\r\n preventClose: false,\r\n overlay: false,\r\n },\r\n)\r\n\r\nconst emits = defineEmits<{\r\n close: []\r\n}>()\r\n\r\nconst isOpen = defineModel<boolean>({\r\n default: false,\r\n})\r\n\r\nconst slots = useSlots()\r\n\r\nconst overlayTransitionClass = ref({\r\n enter: 'ease-in-out duration-500',\r\n enterFrom: 'opacity-0',\r\n enterTo: 'opacity-100',\r\n leave: 'ease-in-out duration-500',\r\n leaveFrom: 'opacity-100',\r\n leaveTo: 'opacity-0',\r\n})\r\n\r\nconst transitionClass = computed(() => {\r\n return {\r\n enter: 'ease-out duration-300',\r\n enterFrom: 'opacity-0 translate-y-4 lg-translate-y-0 lg-scale-95',\r\n enterTo: 'opacity-100 translate-y-0 lg-scale-100',\r\n leave: 'ease-in duration-200',\r\n leaveFrom: 'opacity-100 translate-y-0 lg-scale-100',\r\n leaveTo: 'opacity-0 translate-y-4 lg-translate-y-0 lg-scale-95',\r\n }\r\n})\r\nconst dialogPanelStyle = computed(() => {\r\n if (props.width) {\r\n return {width: props.width};\r\n }\r\n\r\n return {};\r\n});\r\n\r\nfunction close() {\r\n isOpen.value = false\r\n emits('close')\r\n}\r\n</script>\r\n\r\n<template>\r\n <TransitionRoot as=\"template\" :appear=\"appear\" :show=\"isOpen\">\r\n <Dialog class=\"fixed inset-0 z-2000 flex\" @close=\"!preventClose && close()\">\r\n <TransitionChild as=\"template\" :appear=\"appear\" v-bind=\"overlayTransitionClass\">\r\n <div class=\"fixed inset-0 bg-stone-2/75 transition-opacity dark-bg-stone-8/75\"\r\n :class=\"{ 'backdrop-blur-sm': overlay }\"/>\r\n </TransitionChild>\r\n <div class=\"fixed inset-0 overflow-y-auto\">\r\n <div class=\"min-h-full flex items-end justify-center p-4 text-center lg-items-center\">\r\n <TransitionChild as=\"template\" :appear=\"appear\" v-bind=\"transitionClass\">\r\n <DialogPanel\r\n class=\"relative w-full flex flex-col overflow-hidden rounded-xl bg-white text-left shadow-xl lg-my-8 lg-max-w-4xl dark-bg-stone-8\"\r\n :style=\"dialogPanelStyle\">\r\n <div flex=\"~ items-center justify-between\" px-4 py-3 border-b=\"~ solid stone/15\" text-6>\r\n <DialogTitle m-0 text-lg text-dark dark-text-white>\r\n {{ title }}\r\n </DialogTitle>\r\n <SvgIcon name=\"i-carbon:close\" cursor-pointer @click=\"close\"/>\r\n </div>\r\n <DialogDescription m-0 overflow-y-auto p-4>\r\n <slot/>\r\n </DialogDescription>\r\n <div v-if=\"!!slots.footer\" flex=\"~ items-center justify-end\" px-4 py-3 border-t=\"~ solid stone/15\">\r\n <slot name=\"footer\"/>\r\n </div>\r\n </DialogPanel>\r\n </TransitionChild>\r\n </div>\r\n </div>\r\n </Dialog>\r\n </TransitionRoot>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport eventBus from \"../../../../utils/eventBus\";\r\nimport useSettingsStore from \"../../../../store/modules/settings\";\r\nimport HDialog from \"../../ui-kit/HDialog.vue\";\r\nimport HKbd from \"../../ui-kit/HKbd.vue\";\r\n\r\ndefineOptions({\r\n name: \"HotkeysIntro\",\r\n});\r\n\r\nconst isShow = ref(false);\r\n\r\nconst settingsStore = useSettingsStore();\r\n\r\nonMounted(() => {\r\n eventBus.on(\"global-hotkeys-intro-toggle\", () => {\r\n isShow.value = !isShow.value;\r\n });\r\n});\r\n</script>\r\n\r\n<template>\r\n <HDialog v-model=\"isShow\" title=\"快捷键介绍\">\r\n <div class=\"px-4\">\r\n <div class=\"grid gap-2 sm-grid-cols-2\">\r\n <div>\r\n <h2 class=\"m-0 text-lg font-bold\">全局</h2>\r\n <ul class=\"list-none pl-4 text-sm\">\r\n <li class=\"py-1\">\r\n <HKbd>{{ settingsStore.os === \"mac\" ? \"⌥\" : \"Alt\" }}</HKbd>\r\n <HKbd>I</HKbd>\r\n 查看系统信息\r\n </li>\r\n <li\r\n v-if=\"\r\n settingsStore.settings.toolbar.navSearch &&\r\n settingsStore.settings.navSearch.enableHotkeys\r\n \"\r\n class=\"py-1\"\r\n >\r\n <HKbd>{{ settingsStore.os === \"mac\" ? \"⌥\" : \"Alt\" }}</HKbd>\r\n <HKbd>S</HKbd>\r\n 唤起导航搜索\r\n </li>\r\n </ul>\r\n </div>\r\n <div\r\n v-if=\"\r\n settingsStore.settings.menu.enableHotkeys &&\r\n ['side', 'head'].includes(settingsStore.settings.menu.mode)\r\n \"\r\n >\r\n <h2 class=\"m-0 text-lg font-bold\">主导航</h2>\r\n <ul class=\"list-none pl-4 text-sm\">\r\n <li class=\"py-1\">\r\n <HKbd>{{ settingsStore.os === \"mac\" ? \"⌥\" : \"Alt\" }}</HKbd>\r\n <HKbd>`</HKbd>\r\n 激活下一个主导航\r\n </li>\r\n </ul>\r\n </div>\r\n <div\r\n v-if=\"\r\n settingsStore.settings.tabbar.enable &&\r\n settingsStore.settings.tabbar.enableHotkeys\r\n \"\r\n >\r\n <h2 class=\"m-0 text-lg font-bold\">标签栏</h2>\r\n <ul class=\"list-none pl-4 text-sm\">\r\n <li class=\"py-1\">\r\n <HKbd>{{ settingsStore.os === \"mac\" ? \"⌥\" : \"Alt\" }}</HKbd>\r\n <HKbd>←</HKbd>\r\n 切换到上一个标签页\r\n </li>\r\n <li class=\"py-1\">\r\n <HKbd>{{ settingsStore.os === \"mac\" ? \"⌥\" : \"Alt\" }}</HKbd>\r\n <HKbd>→</HKbd>\r\n 切换到下一个标签页\r\n </li>\r\n <li class=\"py-1\">\r\n <HKbd>{{ settingsStore.os === \"mac\" ? \"⌥\" : \"Alt\" }}</HKbd>\r\n <HKbd>W</HKbd>\r\n 关闭当前标签页\r\n </li>\r\n <li class=\"py-1\">\r\n <HKbd>{{ settingsStore.os === \"mac\" ? \"⌥\" : \"Alt\" }}</HKbd>\r\n <HKbd>1~9</HKbd>\r\n 切换到第 n 个标签页\r\n </li>\r\n <li class=\"py-1\">\r\n <HKbd>{{ settingsStore.os === \"mac\" ? \"⌥\" : \"Alt\" }}</HKbd>\r\n <HKbd>0</HKbd>\r\n 切换到最后一个标签页\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n </HDialog>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport {\r\n Dialog,\r\n DialogDescription,\r\n DialogPanel,\r\n DialogTitle,\r\n TransitionChild,\r\n TransitionRoot,\r\n} from \"@headlessui/vue\";\r\nimport { OverlayScrollbarsComponent } from \"overlayscrollbars-vue\";\r\nimport SvgIcon from \"../common/components/SvgIcon/index.vue\";\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n appear?: boolean;\r\n side?: \"left\" | \"right\";\r\n title?: string;\r\n preventClose?: boolean;\r\n overlay?: boolean;\r\n }>(),\r\n {\r\n appear: false,\r\n side: \"right\",\r\n preventClose: false,\r\n overlay: false,\r\n }\r\n);\r\n\r\nconst emits = defineEmits<{\r\n close: [];\r\n}>();\r\n\r\nconst isOpen = defineModel<boolean>({\r\n default: false,\r\n});\r\n\r\nconst slots = useSlots();\r\n\r\nconst overlayTransitionClass = ref({\r\n enter: \"ease-in-out duration-500\",\r\n enterFrom: \"opacity-0\",\r\n enterTo: \"opacity-100\",\r\n leave: \"ease-in-out duration-500\",\r\n leaveFrom: \"opacity-100\",\r\n leaveTo: \"opacity-0\",\r\n});\r\n\r\nconst transitionClass = computed(() => {\r\n return {\r\n enter: \"transform transition ease-in-out duration-300\",\r\n leave: \"transform transition ease-in-out duration-200\",\r\n enterFrom: props.side === \"left\" ? \"-translate-x-full\" : \"translate-x-full\",\r\n enterTo: \"translate-x-0\",\r\n leaveFrom: \"translate-x-0\",\r\n leaveTo: props.side === \"left\" ? \"-translate-x-full\" : \"translate-x-full\",\r\n };\r\n});\r\n\r\nfunction close() {\r\n isOpen.value = false;\r\n emits(\"close\");\r\n}\r\n</script>\r\n\r\n<template>\r\n <TransitionRoot as=\"template\" :appear=\"appear\" :show=\"isOpen\">\r\n <Dialog\r\n class=\"fixed inset-0 z-2000 flex\"\r\n :class=\"{ 'justify-end': side === 'right' }\"\r\n @close=\"!preventClose && close()\"\r\n >\r\n <TransitionChild\r\n as=\"template\"\r\n :appear=\"appear\"\r\n v-bind=\"overlayTransitionClass\"\r\n >\r\n <div\r\n class=\"fixed inset-0 bg-stone-2/75 transition-opacity dark-bg-stone-8/75\"\r\n :class=\"{ 'backdrop-blur-sm': overlay }\"\r\n />\r\n </TransitionChild>\r\n <TransitionChild as=\"template\" :appear=\"appear\" v-bind=\"transitionClass\">\r\n <DialogPanel\r\n relative\r\n max-w-md\r\n w-full\r\n w-screen\r\n flex\r\n flex-1\r\n flex-col\r\n bg-white\r\n dark-bg-stone-8\r\n focus-outline-none\r\n >\r\n <div\r\n flex=\"~ items-center justify-between\"\r\n p-4\r\n border-b=\"~ solid stone/15\"\r\n text-6\r\n >\r\n <DialogTitle m-0 text-lg text-dark dark-text-white>\r\n {{ title }}\r\n </DialogTitle>\r\n <SvgIcon name=\"i-carbon:close\" cursor-pointer @click=\"close\" />\r\n </div>\r\n <DialogDescription m-0 flex-1 of-y-hidden>\r\n <OverlayScrollbarsComponent\r\n :options=\"{\r\n scrollbars: { autoHide: 'leave', autoHideDelay: 300 },\r\n }\"\r\n defer\r\n class=\"h-full p-4\"\r\n >\r\n <slot />\r\n </OverlayScrollbarsComponent>\r\n </DialogDescription>\r\n <div\r\n v-if=\"!!slots.footer\"\r\n flex=\"~ items-center justify-end\"\r\n px-3\r\n py-2\r\n border-t=\"~ solid stone/15\"\r\n >\r\n <slot name=\"footer\" />\r\n </div>\r\n </DialogPanel>\r\n </TransitionChild>\r\n </Dialog>\r\n </TransitionRoot>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n block?: boolean;\r\n outline?: boolean;\r\n disabled?: boolean;\r\n }>(),\r\n {\r\n block: false,\r\n outline: false,\r\n disabled: false,\r\n }\r\n);\r\n\r\nconst buttonClass = computed(() => [\r\n \"focus-outline-none focus-visible-outline-0 cursor-pointer disabled-cursor-not-allowed disabled-opacity-75 flex-shrink-0 gap-x-1.5 px-2.5 py-1.5 border-size-0 font-medium text-sm rounded-md select-none\",\r\n props.block\r\n ? \"w-full flex justify-center items-center\"\r\n : \"inline-flex items-center\",\r\n props.outline\r\n ? \"shadow-sm ring-1 ring-inset ring-ui-primary text-ui-primary bg-white dark-bg-dark hover-not-disabled-bg-ui-primary/10 dark-hover-not-disabled-bg-ui-primary/10 focus-visible-ring-2\"\r\n : \"shadow-sm text-ui-text bg-ui-primary hover-bg-ui-primary/75 disabled-bg-ui-primary/90 focus-visible-ring-inset focus-visible-ring-2\",\r\n]);\r\n</script>\r\n\r\n<template>\r\n <button :disabled=\"disabled\" :class=\"buttonClass\">\r\n <slot />\r\n </button>\r\n</template>\r\n","<script setup lang=\"ts\" generic=\"T extends string | number\">\r\nwithDefaults(\r\n defineProps<{\r\n placeholder?: string\r\n disabled?: boolean\r\n }>(),\r\n {\r\n disabled: false,\r\n },\r\n)\r\n\r\nconst value = defineModel<T>()\r\n\r\nconst inputRef = ref()\r\n\r\ndefineExpose({\r\n ref: inputRef,\r\n})\r\n</script>\r\n\r\n<template>\r\n <div class=\"relative w-full lg-w-48\">\r\n <input v-model=\"value\" type=\"text\" :placeholder=\"placeholder\" :disabled=\"disabled\" class=\"relative block w-full border-0 rounded-md bg-white px-2.5 py-1.5 text-sm shadow-sm ring-1 ring-stone-2 ring-inset disabled-cursor-not-allowed dark-bg-dark disabled-opacity-50 focus-outline-none focus-ring-2 dark-ring-stone-8 focus-ring-ui-primary placeholder-stone-4 dark-placeholder-stone-5\">\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport SvgIcon from \"../common/components/SvgIcon/index.vue\";\r\n\r\nwithDefaults(\r\n defineProps<{\r\n options: {\r\n label?: string | number\r\n icon?: string\r\n value: string | number\r\n disabled?: boolean\r\n }[]\r\n disabled?: boolean\r\n }>(),\r\n {\r\n disabled: false,\r\n },\r\n)\r\n\r\nconst emits = defineEmits<{\r\n change: [string | number | undefined]\r\n}>()\r\n\r\nconst value = defineModel<string | number>()\r\n\r\nwatch(value, (val) => {\r\n emits('change', val)\r\n})\r\n</script>\r\n\r\n<template>\r\n <div class=\"inline-flex select-none items-center justify-center of-hidden rounded-md bg-stone-3 dark-bg-stone-7\">\r\n <button v-for=\"option in options\" :key=\"option.value\" :disabled=\"disabled || option.disabled\" class=\"flex cursor-pointer items-center truncate border-size-0 bg-inherit px-2 py-1.5 text-sm disabled-cursor-not-allowed disabled-opacity-50 hover-not-disabled-bg-ui-primary hover-not-disabled-text-ui-text\" :class=\"{ 'text-ui-text bg-ui-primary': value === option.value }\" @click=\"value = option.value\">\r\n <SvgIcon v-if=\"option.icon\" :name=\"option.icon\" />\r\n <template v-else>\r\n {{ option.label }}\r\n </template>\r\n </button>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport { Switch } from '@headlessui/vue'\r\nimport SvgIcon from \"../common/components/SvgIcon/index.vue\";\r\n\r\nwithDefaults(\r\n defineProps<{\r\n disabled?: boolean\r\n onIcon?: string\r\n offIcon?: string\r\n }>(),\r\n {\r\n disabled: false,\r\n },\r\n)\r\n\r\nconst enabled = defineModel<boolean>()\r\n</script>\r\n\r\n<template>\r\n <Switch v-model=\"enabled\" :disabled=\"disabled\" class=\"relative h-5 w-10 inline-flex flex-shrink-0 cursor-pointer border-2 border-transparent rounded-full p-0 vertical-middle disabled-cursor-not-allowed disabled-opacity-50 focus-outline-none focus-visible-ring-2 focus-visible-ring-offset-2 focus-visible-ring-offset-white dark-focus-visible-ring-offset-gray-900\" :class=\"[enabled ? 'bg-ui-primary' : 'bg-stone-3 dark-bg-stone-7']\">\r\n <span class=\"pointer-events-none relative inline-block h-4 w-4 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out dark-bg-dark\" :class=\"[enabled ? 'translate-x-5' : 'translate-x-0']\">\r\n <span class=\"absolute inset-0 h-full w-full flex items-center justify-center\">\r\n <SvgIcon v-if=\"(enabled && onIcon) || (!enabled && offIcon)\" :name=\"(enabled ? onIcon : offIcon) as string\" class=\"h-3 w-3 text-stone-7 dark-text-stone-3\" />\r\n </span>\r\n </span>\r\n </Switch>\r\n</template>\r\n","<script setup lang=\"ts\" generic=\"T\">\r\nimport { Tab, TabGroup, TabList } from \"@headlessui/vue\";\r\nimport SvgIcon from \"../common/components/SvgIcon/index.vue\";\r\n\r\nconst props = defineProps<{\r\n options: {\r\n icon?: string;\r\n label: any;\r\n value: T;\r\n }[];\r\n}>();\r\n\r\nconst emits = defineEmits<{\r\n change: [T];\r\n}>();\r\n\r\nconst value = defineModel<T>();\r\n\r\nconst selectedIndex = computed({\r\n get() {\r\n return props.options.findIndex((option) => option.value === value.value);\r\n },\r\n set(val) {\r\n value.value = props.options[val].value;\r\n },\r\n});\r\n\r\nwatch(value, (val) => {\r\n val && emits(\"change\", val);\r\n});\r\n\r\nfunction handleChange(index: number) {\r\n value.value = props.options[index].value;\r\n}\r\n</script>\r\n\r\n<template>\r\n <TabGroup :selected-index=\"selectedIndex\" @change=\"handleChange\">\r\n <TabList\r\n class=\"inline-flex select-none items-center justify-center rounded-md bg-stone-1 p-1 ring-1 ring-stone-2 dark-bg-stone-9 dark-ring-stone-8\"\r\n >\r\n <Tab\r\n v-for=\"(option, index) in options\"\r\n :key=\"index\"\r\n v-slot=\"{ selected }\"\r\n as=\"template\"\r\n >\r\n <button\r\n class=\"w-full inline-flex items-center justify-center gap-1 break-keep border-size-0 rounded-md bg-inherit px-2 py-1.5 text-sm text-dark ring-stone-2 ring-inset dark-text-white focus-outline-none focus-ring-2 dark-ring-stone-8\"\r\n :class=\"{\r\n 'cursor-default bg-white dark-bg-dark-9': selected,\r\n 'cursor-pointer opacity-50 hover-opacity-100': !selected,\r\n }\"\r\n >\r\n <SvgIcon\r\n v-if=\"option.icon\"\r\n :name=\"option.icon\"\r\n class=\"flex-shrink-0\"\r\n />\r\n {{ option.label }}\r\n </button>\r\n </Tab>\r\n </TabList>\r\n </TabGroup>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport { useRoute } from \"vue-router\";\r\nimport { useClipboard } from \"@vueuse/core\";\r\nimport Message from \"vue-m-message\";\r\nimport settingsDefault from \"../../../../settings.default\";\r\nimport eventBus from \"../../../../utils/eventBus\";\r\nimport useSettingsStore from \"../../../../store/modules/settings\";\r\nimport useMenuStore from \"../../../../store/modules/menu\";\r\nimport SvgIcon from \"../../common/components/SvgIcon/index.vue\";\r\nimport HSlideover from \"../../ui-kit/HSlideover.vue\";\r\nimport HButton from \"../../ui-kit/HButton.vue\";\r\nimport HInput from \"../../ui-kit/HInput.vue\";\r\nimport HCheckList from \"../../ui-kit/HCheckList.vue\";\r\nimport HToggle from \"../../ui-kit/HToggle.vue\";\r\nimport HTooltip from \"../../ui-kit/HTooltip.vue\";\r\nimport HTabList from \"../../ui-kit/HTabList.vue\";\r\n\r\ndefineOptions({\r\n name: \"AppSetting\",\r\n});\r\n\r\nconst route = useRoute();\r\n\r\nconst settingsStore = useSettingsStore();\r\nconst menuStore = useMenuStore();\r\n\r\nconst isShow = ref(false);\r\n\r\nwatch(\r\n () => settingsStore.settings.menu.mode,\r\n (value) => {\r\n if (value === \"single\") {\r\n menuStore.setActived(0);\r\n } else {\r\n // TODO 后续每个菜单的每个路由都需要有path\r\n // menuStore.setActived(route.fullPath);\r\n menuStore.setActived(route.name as string);\r\n }\r\n }\r\n);\r\n\r\nonMounted(() => {\r\n eventBus.on(\"global-app-setting-toggle\", () => {\r\n isShow.value = !isShow.value;\r\n });\r\n});\r\n\r\nconst { copy, copied, isSupported } = useClipboard();\r\n\r\nwatch(copied, (val) => {\r\n if (val) {\r\n Message.success(\"复制成功,请粘贴到 src/settings.ts 文件中!\", {\r\n zIndex: 2000,\r\n });\r\n }\r\n});\r\n\r\nfunction isObject(value: any) {\r\n return typeof value === \"object\" && !Array.isArray(value);\r\n}\r\n// 比较两个对象,并提取出不同的部分\r\nfunction getObjectDiff(\r\n originalObj: Record<string, any>,\r\n diffObj: Record<string, any>\r\n) {\r\n if (!isObject(originalObj) || !isObject(diffObj)) {\r\n return diffObj;\r\n }\r\n const diff: Record<string, any> = {};\r\n for (const key in diffObj) {\r\n const originalValue = originalObj[key];\r\n const diffValue = diffObj[key];\r\n if (JSON.stringify(originalValue) !== JSON.stringify(diffValue)) {\r\n if (isObject(originalValue) && isObject(diffValue)) {\r\n const nestedDiff = getObjectDiff(originalValue, diffValue);\r\n if (Object.keys(nestedDiff).length > 0) {\r\n diff[key] = nestedDiff;\r\n }\r\n } else {\r\n diff[key] = diffValue;\r\n }\r\n }\r\n }\r\n return diff;\r\n}\r\n\r\nfunction handleCopy() {\r\n copy(\r\n JSON.stringify(\r\n getObjectDiff(settingsDefault, settingsStore.settings),\r\n null,\r\n 2\r\n )\r\n );\r\n}\r\n</script>\r\n\r\n<template>\r\n <HSlideover v-model=\"isShow\" title=\"应用配置\">\r\n <div class=\"rounded-2 bg-rose/20 px-4 py-2 text-sm/6 c-rose\">\r\n <p class=\"my-1\">\r\n 应用配置可实时预览效果,但只是临时生效,要想真正应用于项目,可以点击下方的「复制配置」按钮,并将配置粘贴到\r\n src/settings.ts 文件中。\r\n </p>\r\n <p class=\"my-1\">注意:在生产环境中应关闭该模块。</p>\r\n </div>\r\n <div class=\"divider\">颜色主题风格</div>\r\n <div class=\"flex items-center justify-center pb-4\">\r\n <HTabList\r\n v-model=\"settingsStore.settings.app.colorScheme\"\r\n :options=\"[\r\n { icon: 'i-ri:sun-line', label: '明亮', value: 'light' },\r\n { icon: 'i-ri:moon-line', label: '暗黑', value: 'dark' },\r\n { icon: 'i-codicon:color-mode', label: '系统', value: '' },\r\n ]\"\r\n class=\"w-60\"\r\n />\r\n </div>\r\n <div v-if=\"settingsStore.mode === 'pc'\" class=\"divider\">导航栏模式</div>\r\n <div v-if=\"settingsStore.mode === 'pc'\" class=\"menu-mode\">\r\n <HTooltip text=\"侧边栏模式 (含主导航)\" placement=\"bottom\" :delay=\"500\">\r\n <div\r\n class=\"mode mode-side\"\r\n :class=\"{ active: settingsStore.settings.menu.mode === 'side' }\"\r\n @click=\"settingsStore.settings.menu.mode = 'side'\"\r\n >\r\n <div class=\"mode-container\" />\r\n </div>\r\n </HTooltip>\r\n <HTooltip text=\"顶部模式\" placement=\"bottom\" :delay=\"500\">\r\n <div\r\n class=\"mode mode-head\"\r\n :class=\"{ active: settingsStore.settings.menu.mode === 'head' }\"\r\n @click=\"settingsStore.settings.menu.mode = 'head'\"\r\n >\r\n <div class=\"mode-container\" />\r\n </div>\r\n </HTooltip>\r\n <HTooltip text=\"侧边栏模式 (不含主导航)\" placement=\"bottom\" :delay=\"500\">\r\n <div\r\n class=\"mode mode-single\"\r\n :class=\"{ active: settingsStore.settings.menu.mode === 'single' }\"\r\n @click=\"settingsStore.settings.menu.mode = 'single'\"\r\n >\r\n <div class=\"mode-container\" />\r\n </div>\r\n </HTooltip>\r\n </div>\r\n <div class=\"divider\">导航栏</div>\r\n <div class=\"setting-item\">\r\n <div class=\"label\">\r\n 主导航切换跳转\r\n <HTooltip\r\n text=\"开启该功能后,切换主导航时,页面自动跳转至该主导航下,次导航里第一个导航\"\r\n >\r\n <SvgIcon name=\"i-ri:question-line\" />\r\n </HTooltip>\r\n </div>\r\n <HToggle\r\n v-model=\"settingsStore.settings.menu.switchMainMenuAndPageJump\"\r\n :disabled=\"['single'].includes(settingsStore.settings.menu.mode)\"\r\n />\r\n </div>\r\n <div class=\"setting-item\">\r\n <div class=\"label\">\r\n 次导航保持展开一个\r\n <HTooltip text=\"开启该功能后,次导航只保持单个菜单的展开\">\r\n <SvgIcon name=\"i-ri:question-line\" />\r\n </HTooltip>\r\n </div>\r\n <HToggle v-model=\"settingsStore.settings.menu.subMenuUniqueOpened\" />\r\n </div>\r\n <div class=\"setting-item\">\r\n <div class=\"label\">次导航是否折叠</div>\r\n <HToggle v-model=\"settingsStore.settings.menu.subMenuCollapse\" />\r\n </div>\r\n <div v-if=\"settingsStore.mode === 'pc'\" class=\"setting-item\">\r\n <div class=\"label\">显示次导航折叠按钮</div>\r\n <HToggle\r\n v-model=\"settingsStore.settings.menu.enableSubMenuCollapseButton\"\r\n />\r\n </div>\r\n <div class=\"setting-item\">\r\n <div class=\"label\">是否启用快捷键</div>\r\n <HToggle\r\n v-model=\"settingsStore.settings.menu.enableHotkeys\"\r\n :disabled=\"['single'].includes(settingsStore.settings.menu.mode)\"\r\n />\r\n </div>\r\n <div class=\"divider\">顶栏</div>\r\n <div class=\"setting-item\">\r\n <div class=\"label\">模式</div>\r\n <HCheckList\r\n v-model=\"settingsStore.settings.topbar.mode\"\r\n :options=\"[\r\n { label: '静止', value: 'static' },\r\n { label: '固定', value: 'fixed' },\r\n { label: '粘性', value: 'sticky' },\r\n ]\"\r\n />\r\n </div>\r\n <div>\r\n <div class=\"divider\">标签栏</div>\r\n <div class=\"setting-item\">\r\n <div class=\"label\">是否启用</div>\r\n <HToggle v-model=\"settingsStore.settings.tabbar.enable\" />\r\n </div>\r\n <div class=\"setting-item\">\r\n <div class=\"label\">是否显示图标</div>\r\n <HToggle\r\n v-model=\"settingsStore.settings.tabbar.enableIcon\"\r\n :disabled=\"!settingsStore.settings.tabbar.enable\"\r\n />\r\n </div>\r\n <div class=\"setting-item\">\r\n <div class=\"label\">是否启用快捷键</div>\r\n <HToggle\r\n v-model=\"settingsStore.settings.tabbar.enableHotkeys\"\r\n :disabled=\"!settingsStore.settings.tabbar.enable\"\r\n />\r\n </div>\r\n </div>\r\n <div class=\"divider\">工具栏</div>\r\n <div v-if=\"settingsStore.mode === 'pc'\" class=\"setting-item\">\r\n <div class=\"label\">面包屑导航</div>\r\n <HToggle v-model=\"settingsStore.settings.toolbar.breadcrumb\" />\r\n </div>\r\n <div class=\"setting-item\">\r\n <div class=\"label\">\r\n 导航搜索\r\n <HTooltip text=\"对导航进行快捷搜索\">\r\n <SvgIcon name=\"i-ri:question-line\" />\r\n </HTooltip>\r\n </div>\r\n <HToggle v-model=\"settingsStore.settings.toolbar.navSearch\" />\r\n </div>\r\n <div v-if=\"settingsStore.mode === 'pc'\" class=\"setting-item\">\r\n <div class=\"label\">全屏</div>\r\n <HToggle v-model=\"settingsStore.settings.toolbar.fullscreen\" />\r\n </div>\r\n <div class=\"setting-item\">\r\n <div class=\"label\">\r\n 页面刷新\r\n <HTooltip text=\"使用框架内提供的刷新功能进行页面刷新\">\r\n <SvgIcon name=\"i-ri:question-line\" />\r\n </HTooltip>\r\n </div>\r\n <HToggle v-model=\"settingsStore.settings.toolbar.pageReload\" />\r\n </div>\r\n <div class=\"setting-item\">\r\n <div class=\"label\">\r\n 颜色主题\r\n <HTooltip text=\"开启后可在明亮/暗黑模式中切换\">\r\n <SvgIcon name=\"i-ri:question-line\" />\r\n </HTooltip>\r\n </div>\r\n <HToggle v-model=\"settingsStore.settings.toolbar.colorScheme\" />\r\n </div>\r\n <div class=\"divider\">页面</div>\r\n <div class=\"setting-item\">\r\n <div class=\"label\">是否启用快捷键</div>\r\n <HToggle v-model=\"settingsStore.settings.mainPage.enableHotkeys\" />\r\n </div>\r\n <div class=\"divider\">导航搜索</div>\r\n <div class=\"setting-item\">\r\n <div class=\"label\">是否启用快捷键</div>\r\n <HToggle\r\n v-model=\"settingsStore.settings.navSearch.enableHotkeys\"\r\n :disabled=\"!settingsStore.settings.toolbar.navSearch\"\r\n />\r\n </div>\r\n <div class=\"divider\">底部版权</div>\r\n <div class=\"setting-item\">\r\n <div class=\"label\">是否启用</div>\r\n <HToggle v-model=\"settingsStore.settings.copyright.enable\" />\r\n </div>\r\n <div class=\"setting-item\">\r\n <div class=\"label\">日期</div>\r\n <HInput\r\n v-model=\"settingsStore.settings.copyright.dates\"\r\n :disabled=\"!settingsStore.settings.copyright.enable\"\r\n />\r\n </div>\r\n <div class=\"setting-item\">\r\n <div class=\"label\">公司</div>\r\n <HInput\r\n v-model=\"settingsStore.settings.copyright.company\"\r\n :disabled=\"!settingsStore.settings.copyright.enable\"\r\n />\r\n </div>\r\n <div class=\"setting-item\">\r\n <div class=\"label\">网址</div>\r\n <HInput\r\n v-model=\"settingsStore.settings.copyright.website\"\r\n :disabled=\"!settingsStore.settings.copyright.enable\"\r\n />\r\n </div>\r\n <div class=\"setting-item\">\r\n <div class=\"label\">备案</div>\r\n <HInput\r\n v-model=\"settingsStore.settings.copyright.beian\"\r\n :disabled=\"!settingsStore.settings.copyright.enable\"\r\n />\r\n </div>\r\n <div class=\"divider\">主页</div>\r\n <div class=\"setting-item\">\r\n <div class=\"label\">\r\n 是否启用\r\n <HTooltip\r\n text=\"该功能开启时,登录成功默认进入主页,反之则默认进入导航栏里第一个导航页面\"\r\n >\r\n <SvgIcon name=\"i-ri:question-line\" />\r\n </HTooltip>\r\n </div>\r\n <HToggle v-model=\"settingsStore.settings.home.enable\" />\r\n </div>\r\n <div class=\"setting-item\">\r\n <div class=\"label\">\r\n 主页名称\r\n <HTooltip text=\"开启国际化时,该设置无效\">\r\n <SvgIcon name=\"i-ri:question-line\" />\r\n </HTooltip>\r\n </div>\r\n <HInput v-model=\"settingsStore.settings.home.title\" />\r\n </div>\r\n <div class=\"divider\">其它</div>\r\n <div class=\"setting-item\">\r\n <div class=\"label\">是否启用权限</div>\r\n <HToggle v-model=\"settingsStore.settings.app.enablePermission\" />\r\n </div>\r\n <div class=\"setting-item\">\r\n <div class=\"label\">\r\n 载入进度条\r\n <HTooltip text=\"该功能开启时,跳转路由会看到页面顶部有进度条\">\r\n <SvgIcon name=\"i-ri:question-line\" />\r\n </HTooltip>\r\n </div>\r\n <HToggle v-model=\"settingsStore.settings.app.enableProgress\" />\r\n </div>\r\n <div class=\"setting-item\">\r\n <div class=\"label\">\r\n 哀悼模式\r\n <HTooltip text=\"该功能开启时,整站会变为灰色\">\r\n <SvgIcon name=\"i-ri:question-line\" />\r\n </HTooltip>\r\n </div>\r\n <HToggle v-model=\"settingsStore.settings.app.enableMournMode\" />\r\n </div>\r\n <div class=\"setting-item\">\r\n <div class=\"label\">色弱模式</div>\r\n <HToggle v-model=\"settingsStore.settings.app.enableColorAmblyopiaMode\" />\r\n </div>\r\n <div class=\"setting-item\">\r\n <div class=\"label\">\r\n 动态标题\r\n <HTooltip\r\n text=\"该功能开启时,页面标题会显示当前路由标题,格式为“页面标题 - 网站名称”;关闭时则显示网站名称,网站名称在项目根目录下 .env.* 文件里配置\"\r\n >\r\n <SvgIcon name=\"i-ri:question-line\" />\r\n </HTooltip>\r\n </div>\r\n <HToggle v-model=\"settingsStore.settings.app.enableDynamicTitle\" />\r\n </div>\r\n <template v-if=\"isSupported\" #footer>\r\n <HButton block @click=\"handleCopy\">\r\n <SvgIcon name=\"i-ep:document-copy\" />\r\n 复制配置\r\n </HButton>\r\n </template>\r\n </HSlideover>\r\n</template>\r\n\r\n<style lang=\"scss\" scoped>\r\n.divider {\r\n --at-apply: flex items-center justify-between gap-4 my-4 whitespace-nowrap\r\n text-sm font-500;\r\n\r\n &::before,\r\n &::after {\r\n --at-apply: content-empty w-full h-1px bg-stone-2 dark-bg-stone-6;\r\n }\r\n}\r\n\r\n.menu-mode {\r\n --at-apply: flex items-center justify-center gap-4 pb-4;\r\n\r\n .mode {\r\n --at-apply: relative w-16 h-12 rounded-2 ring-1 ring-stone-2\r\n dark-ring-stone-7 cursor-pointer transition;\r\n\r\n &.active {\r\n --at-apply: ring-ui-primary ring-2;\r\n }\r\n\r\n &::before,\r\n &::after,\r\n .mode-container {\r\n --at-apply: absolute pointer-events-none;\r\n }\r\n\r\n &::before {\r\n --at-apply: content-empty bg-ui-primary;\r\n }\r\n\r\n &::after {\r\n --at-apply: content-empty bg-ui-primary/60;\r\n }\r\n\r\n .mode-container {\r\n --at-apply: bg-ui-primary/20 border-width-1.5 border-dashed\r\n border-ui-primary;\r\n\r\n &::before {\r\n --at-apply: content-empty absolute w-full h-full;\r\n }\r\n }\r\n\r\n &-side {\r\n &::before {\r\n --at-apply: top-2 bottom-2 left-2 w-2 rounded-tl-1 rounded-bl-1;\r\n }\r\n\r\n &::after {\r\n --at-apply: top-2 bottom-2 left-4.5 w-3;\r\n }\r\n\r\n .mode-container {\r\n --at-apply: inset-t-2 inset-r-2 inset-b-2 inset-l-8 rounded-tr-1\r\n rounded-br-1;\r\n }\r\n }\r\n\r\n &-head {\r\n &::before {\r\n --at-apply: top-2 left-2 right-2 h-2 rounded-tl-1 rounded-tr-1;\r\n }\r\n\r\n &::after {\r\n --at-apply: top-4.5 left-2 bottom-2 w-3 rounded-bl-1;\r\n }\r\n\r\n .mode-container {\r\n --at-apply: inset-t-4.5 inset-r-2 inset-b-2 inset-l-5.5 rounded-br-1;\r\n }\r\n }\r\n\r\n &-single {\r\n &::after {\r\n --at-apply: top-2 left-2 bottom-2 w-3 rounded-tl-1 rounded-bl-1;\r\n }\r\n\r\n .mode-container {\r\n --at-apply: inset-t-2 inset-r-2 inset-b-2 inset-l-5.5 rounded-tr-1\r\n rounded-br-1;\r\n }\r\n }\r\n }\r\n}\r\n\r\n.setting-item {\r\n --at-apply: flex items-center justify-between gap-4 px-4 py-2 rounded-2\r\n transition hover-bg-stone-1 dark-hover-bg-stone-9;\r\n\r\n .label {\r\n --at-apply: flex items-center flex-shrink-0 gap-2 text-sm;\r\n\r\n i {\r\n --at-apply: text-xl text-orange cursor-help;\r\n }\r\n }\r\n}\r\n</style>\r\n","<script setup lang=\"ts\">\r\nimport { useClipboard } from '@vueuse/core'\r\nimport Message from 'vue-m-message'\r\n\r\ndefineOptions({\r\n name: 'LinkView',\r\n})\r\n\r\nconst route = useRoute()\r\n\r\nconst { copy, copied } = useClipboard()\r\nwatch(copied, (val) => {\r\n val && Message.success('复制成功', {\r\n zIndex: 2000,\r\n })\r\n})\r\n\r\nfunction open() {\r\n window.open(route.meta.link, '_blank')\r\n}\r\n</script>\r\n\r\n<template>\r\n <div class=\"absolute h-full w-full flex flex-col\">\r\n <Transition name=\"slide-right\" mode=\"out-in\" appear>\r\n <PageMain :key=\"route.meta.link\" class=\"flex flex-1 flex-col justify-center\">\r\n <div class=\"flex flex-col items-center\">\r\n <SvgIcon name=\"i-icon-park-twotone:planet\" :size=\"120\" class=\"text-ui-primary/80\" />\r\n <div class=\"my-2 text-xl text-dark dark-text-white\">\r\n 是否访问此链接\r\n </div>\r\n <div class=\"my-2 max-w-[300px] cursor-pointer text-center text-[14px] text-stone-5\" @click=\"route.meta.link && copy(route.meta.link)\">\r\n <HTooltip text=\"复制链接\">\r\n <div class=\"line-clamp-3\">\r\n {{ route.meta.link }}\r\n </div>\r\n </HTooltip>\r\n </div>\r\n <HButton class=\"my-4\" @click=\"open\">\r\n <SvgIcon name=\"i-ri:external-link-fill\" />\r\n 立即访问\r\n </HButton>\r\n </div>\r\n </PageMain>\r\n </Transition>\r\n </div>\r\n</template>\r\n\r\n<style lang=\"scss\" scoped>\r\n.slide-right-enter-active {\r\n transition: 0.2s;\r\n}\r\n\r\n.slide-right-leave-active {\r\n transition: 0.15s;\r\n}\r\n\r\n.slide-right-enter-from {\r\n margin-left: -20px;\r\n opacity: 0;\r\n}\r\n\r\n.slide-right-leave-to {\r\n margin-left: 20px;\r\n opacity: 0;\r\n}\r\n</style>\r\n","<script setup lang=\"ts\">\r\nimport useSettingsStore from '../../../../store/modules/settings'\r\nimport SvgIcon from \"../../common/components/SvgIcon/index.vue\";\r\n\r\ndefineOptions({\r\n name: 'Copyright',\r\n})\r\n\r\nconst settingsStore = useSettingsStore()\r\n</script>\r\n\r\n<template>\r\n <footer v-if=\"settingsStore.settings.copyright.enable\" class=\"copyright\">\r\n <span>Copyright</span>\r\n <SvgIcon name=\"i-ri:copyright-line\" :size=\"18\" />\r\n <span v-if=\"settingsStore.settings.copyright.dates\">{{ settingsStore.settings.copyright.dates }}</span>\r\n <template v-if=\"settingsStore.settings.copyright.company\">\r\n <a v-if=\"settingsStore.settings.copyright.website\" :href=\"settingsStore.settings.copyright.website\" target=\"_blank\" rel=\"noopener\">{{ settingsStore.settings.copyright.company }}</a>\r\n <span v-else>{{ settingsStore.settings.copyright.company }}</span>\r\n </template>\r\n <a v-if=\"settingsStore.settings.copyright.beian\" href=\"https://beian.miit.gov.cn/\" target=\"_blank\" rel=\"noopener\">{{ settingsStore.settings.copyright.beian }}</a>\r\n </footer>\r\n</template>\r\n\r\n<style lang=\"scss\" scoped>\r\n.copyright {\r\n --at-apply: flex items-center justify-center flex-wrap my-4 px-4 text-sm text-stone-5;\r\n\r\n span,\r\n a {\r\n --at-apply: px-1;\r\n }\r\n\r\n a {\r\n --at-apply: text-center no-underline text-stone-5 hover-text-dark dark-hover-text-light transition;\r\n }\r\n}\r\n</style>\r\n","<script setup lang=\"ts\">\r\nimport SvgIcon from \"../../common/components/SvgIcon/index.vue\";\r\n\r\ndefineOptions({\r\n name: 'BackTop',\r\n})\r\n\r\nconst transitionClass = {\r\n enterActiveClass: 'ease-out duration-300',\r\n enterFromClass: 'opacity-0 translate-y-4 lg-translate-y-0 lg-scale-95',\r\n enterToClass: 'opacity-100 translate-y-0 lg-scale-100',\r\n leaveActiveClass: 'ease-in duration-200',\r\n leaveFromClass: 'opacity-100 translate-y-0 lg-scale-100',\r\n leaveToClass: 'opacity-0 translate-y-4 lg-translate-y-0 lg-scale-95',\r\n}\r\n\r\nonMounted(() => {\r\n window.addEventListener('scroll', handleScroll)\r\n handleScroll()\r\n})\r\n\r\nonBeforeUnmount(() => {\r\n window.removeEventListener('scroll', handleScroll)\r\n})\r\n\r\nconst scrollTop = ref<number | null>(null)\r\nfunction handleScroll() {\r\n scrollTop.value = document.documentElement.scrollTop\r\n}\r\n\r\nfunction handleClick() {\r\n document.documentElement.scrollTo({\r\n top: 0,\r\n behavior: 'smooth',\r\n })\r\n}\r\n</script>\r\n\r\n<template>\r\n <Teleport to=\"body\">\r\n <Transition v-bind=\"transitionClass\">\r\n <div v-if=\"scrollTop && scrollTop >= 200\" class=\"fixed bottom-4 right-4 z-1000 h-12 w-12 flex cursor-pointer items-center justify-center rounded-full bg-white shadow-lg ring-1 ring-stone-3 ring-inset dark-bg-dark hover-bg-stone-1 dark-ring-stone-7 dark-hover-bg-dark/50\" @click=\"handleClick\">\r\n <SvgIcon name=\"i-icon-park-outline:to-top-one\" :size=\"24\" />\r\n </div>\r\n </Transition>\r\n </Teleport>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport hotkeys from \"hotkeys-js\";\r\nimport Header from \"./components/Header/index.vue\";\r\nimport MainSidebar from \"./components/MainSidebar/index.vue\";\r\nimport SubSidebar from \"./components/SubSidebar/index.vue\";\r\nimport Topbar from \"./components/Topbar/index.vue\";\r\nimport Search from \"./components/Search/index.vue\";\r\nimport HotkeysIntro from \"./components/HotkeysIntro/index.vue\";\r\nimport AppSetting from \"./components/AppSetting/index.vue\";\r\nimport LinkView from \"./components/views/link.vue\";\r\nimport Copyright from \"./components/Copyright/index.vue\";\r\nimport BackTop from \"./components/BackTop/index.vue\";\r\nimport useSettingsStore from \"../../store/modules/settings\";\r\nimport useKeepAliveStore from \"../../store/modules/keepAlive\";\r\nimport useMenuStore from \"../../store/modules/menu\";\r\nimport eventBus from \"../../utils/eventBus\";\r\nimport SvgIcon from \"./common/components/SvgIcon/index.vue\";\r\nimport \"../../assets/styles/resources/utils.scss\";\r\nimport \"../../assets/styles/resources/variables.scss\";\r\nimport \"../../assets/styles/globals.scss\";\r\nimport {MKSystemProvider} from \"../../components\";\r\n\r\ndefineOptions({\r\n name: \"Layout\",\r\n});\r\n\r\nconst routeInfo = useRoute();\r\n\r\nconst settingsStore = useSettingsStore();\r\nconst keepAliveStore = useKeepAliveStore();\r\nconst menuStore = useMenuStore();\r\n\r\nconst mainPage = useMainPage();\r\nconst menu = useMenu();\r\n\r\nconst isLink = computed(() => !!routeInfo.meta.link);\r\n\r\nwatch(\r\n () => settingsStore.settings.menu.subMenuCollapse,\r\n (val) => {\r\n if (settingsStore.mode === \"mobile\") {\r\n if (!val) {\r\n document.body.classList.add(\"overflow-hidden\");\r\n } else {\r\n document.body.classList.remove(\"overflow-hidden\");\r\n }\r\n }\r\n }\r\n);\r\n\r\nwatch(\r\n () => routeInfo.path,\r\n () => {\r\n if (settingsStore.mode === \"mobile\") {\r\n settingsStore.$patch((state) => {\r\n state.settings.menu.subMenuCollapse = true;\r\n });\r\n }\r\n }\r\n);\r\n\r\nonMounted(() => {\r\n hotkeys(\"f5\", (e) => {\r\n if (settingsStore.settings.toolbar.pageReload) {\r\n e.preventDefault();\r\n mainPage.reload();\r\n }\r\n });\r\n hotkeys(\"alt+`\", (e) => {\r\n if (settingsStore.settings.menu.enableHotkeys) {\r\n e.preventDefault();\r\n menu.switchTo(\r\n menuStore.actived + 1 < menuStore.allMenus.length\r\n ? menuStore.actived + 1\r\n : 0\r\n );\r\n }\r\n });\r\n});\r\nonUnmounted(() => {\r\n hotkeys.unbind(\"f5\");\r\n hotkeys.unbind(\"alt+`\");\r\n});\r\n\r\n// Todo\r\nconst enableAppSetting = true;\r\n// const enableAppSetting = import.meta.env.VITE_APP_SETTING === \"true\";\r\n\r\n\r\n// 侧边栏主导航当前实际宽度\r\nconst mainSidebarActualWidth = computed(() => {\r\n let actualWidth = Number.parseInt(getComputedStyle(document.documentElement).getPropertyValue('--g-main-sidebar-width'))\r\n if (settingsStore.settings.menu.mode === 'single' || (settingsStore.settings.menu.mode === 'head' && settingsStore.mode !== 'mobile')) {\r\n actualWidth = 0\r\n }\r\n return `${actualWidth}px`\r\n})\r\n\r\n// 侧边栏次导航当前实际宽度\r\nconst subSidebarActualWidth = computed(() => {\r\n let actualWidth = Number.parseInt(getComputedStyle(document.documentElement).getPropertyValue('--g-sub-sidebar-width'))\r\n if (settingsStore.settings.menu.subMenuCollapse && settingsStore.mode !== 'mobile') {\r\n actualWidth = Number.parseInt(getComputedStyle(document.documentElement).getPropertyValue('--g-sub-sidebar-collapse-width'))\r\n }\r\n if (menuStore.sidebarMenus.every(item => item.meta?.menu === false)) {\r\n actualWidth = 0\r\n }\r\n return `${actualWidth}px`\r\n})\r\n</script>\r\n\r\n<template>\r\n <MKSystemProvider>\r\n <div class=\"layout\"\r\n :style=\"{\r\n '--g-main-sidebar-actual-width': mainSidebarActualWidth,\r\n '--g-sub-sidebar-actual-width': subSidebarActualWidth,\r\n }\">\r\n <div id=\"app-main\">\r\n <Header/>\r\n <div class=\"wrapper\">\r\n <div\r\n class=\"sidebar-container\"\r\n :class=\"{\r\n show:\r\n settingsStore.mode === 'mobile' &&\r\n !settingsStore.settings.menu.subMenuCollapse,\r\n }\"\r\n >\r\n <MainSidebar/>\r\n <SubSidebar/>\r\n </div>\r\n <div\r\n class=\"sidebar-mask\"\r\n :class=\"{\r\n show:\r\n settingsStore.mode === 'mobile' &&\r\n !settingsStore.settings.menu.subMenuCollapse,\r\n }\"\r\n @click=\"settingsStore.toggleSidebarCollapse()\"\r\n />\r\n <div class=\"main-container\">\r\n <Topbar/>\r\n <div class=\"main\">\r\n <RouterView v-slot=\"{ Component, route }\">\r\n <Transition name=\"slide-right\" mode=\"out-in\" appear>\r\n <KeepAlive :include=\"keepAliveStore.list\">\r\n <component\r\n :is=\"Component\"\r\n v-show=\"!isLink\"\r\n :key=\"route.fullPath\"\r\n />\r\n </KeepAlive>\r\n </Transition>\r\n </RouterView>\r\n <LinkView v-if=\"isLink\"/>\r\n </div>\r\n <Copyright/>\r\n </div>\r\n </div>\r\n </div>\r\n <Search/>\r\n <HotkeysIntro/>\r\n <template v-if=\"enableAppSetting\">\r\n <div\r\n class=\"app-setting\"\r\n @click=\"eventBus.emit('global-app-setting-toggle')\"\r\n >\r\n <SvgIcon name=\"i-uiw:setting-o\" class=\"icon\"/>\r\n </div>\r\n <AppSetting/>\r\n </template>\r\n <BackTop/>\r\n </div>\r\n\r\n </MKSystemProvider>\r\n</template>\r\n\r\n<style lang=\"scss\" scoped>\r\n[data-mode=\"mobile\"] {\r\n .sidebar-container {\r\n transform: translateX(\r\n calc((var(--g-main-sidebar-width) + var(--g-sub-sidebar-width)) * -1)\r\n );\r\n\r\n &.show {\r\n transform: translateX(0);\r\n }\r\n }\r\n\r\n .main-container {\r\n margin-left: 0 !important;\r\n }\r\n\r\n &[data-menu-mode=\"single\"] {\r\n .sidebar-container {\r\n transform: translateX(calc(var(--g-sub-sidebar-width) * -1));\r\n\r\n &.show {\r\n transform: translateX(0);\r\n }\r\n }\r\n }\r\n}\r\n\r\n.layout {\r\n height: 100%;\r\n}\r\n\r\n#app-main {\r\n width: 100%;\r\n height: 100%;\r\n margin: 0 auto;\r\n}\r\n\r\n.wrapper {\r\n position: relative;\r\n width: 100%;\r\n height: 100%;\r\n transition: padding-top 0.3s;\r\n\r\n .sidebar-container {\r\n position: fixed;\r\n top: 0;\r\n bottom: 0;\r\n z-index: 1010;\r\n display: flex;\r\n width: calc(\r\n var(--g-main-sidebar-actual-width) + var(--g-sub-sidebar-actual-width)\r\n );\r\n box-shadow: -1px 0 0 0 var(--g-border-color),\r\n 1px 0 0 0 var(--g-border-color);\r\n transition: width 0.3s, transform 0.3s, box-shadow 0.3s, top 0.3s;\r\n\r\n &:has(> .main-sidebar-container.main-sidebar-enter-active),\r\n &:has(> .main-sidebar-container.main-sidebar-leave-active) {\r\n overflow: hidden;\r\n }\r\n }\r\n\r\n .sidebar-mask {\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n z-index: 1000;\r\n width: 100%;\r\n height: 100%;\r\n visibility: hidden;\r\n background-image: radial-gradient(transparent 1px, rgb(0 0 0 / 30%) 1px);\r\n background-size: 4px 4px;\r\n backdrop-filter: saturate(50%) blur(4px);\r\n opacity: 0;\r\n transition: all 0.2s;\r\n\r\n &.show {\r\n visibility: visible;\r\n opacity: 1;\r\n }\r\n }\r\n\r\n .main-sidebar-container:not(.main-sidebar-leave-active)\r\n + .sub-sidebar-container {\r\n left: var(--g-main-sidebar-width);\r\n }\r\n\r\n .main-container {\r\n display: flex;\r\n flex-direction: column;\r\n min-height: 100%;\r\n margin-left: calc(\r\n var(--g-main-sidebar-actual-width) + var(--g-sub-sidebar-actual-width)\r\n );\r\n background-color: var(--g-bg);\r\n box-shadow: -1px 0 0 0 var(--g-border-color),\r\n 1px 0 0 0 var(--g-border-color);\r\n transition: margin-left 0.3s, background-color 0.3s, box-shadow 0.3s;\r\n\r\n .main {\r\n position: relative;\r\n flex: auto;\r\n height: 100%;\r\n overflow: hidden;\r\n transition: 0.3s;\r\n }\r\n\r\n .topbar-container.has-tabbar + .main {\r\n margin: var(--g-tabbar-height) 0 0;\r\n }\r\n\r\n .topbar-container.has-toolbar + .main {\r\n margin: var(--g-toolbar-height) 0 0;\r\n }\r\n\r\n .topbar-container.has-tabbar.has-toolbar + .main {\r\n margin: calc(var(--g-tabbar-height) + var(--g-toolbar-height)) 0 0;\r\n }\r\n }\r\n}\r\n\r\nheader:not(.header-leave-active) + .wrapper {\r\n padding-top: var(--g-header-height);\r\n\r\n .sidebar-container {\r\n top: var(--g-header-height);\r\n\r\n :deep(.sidebar-logo) {\r\n display: none;\r\n }\r\n }\r\n\r\n .main-container {\r\n .topbar-container {\r\n top: var(--g-header-height);\r\n }\r\n }\r\n}\r\n\r\n.app-setting {\r\n --at-apply: text-white dark-text-dark bg-ui-primary;\r\n\r\n position: fixed;\r\n top: calc(50% + 250px);\r\n right: 0;\r\n z-index: 10;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 50px;\r\n height: 50px;\r\n font-size: 24px;\r\n cursor: pointer;\r\n border-top-left-radius: 5px;\r\n border-bottom-left-radius: 5px;\r\n\r\n .icon {\r\n animation: rotate 5s linear infinite;\r\n }\r\n\r\n @keyframes rotate {\r\n from {\r\n transform: rotate(0deg);\r\n }\r\n\r\n to {\r\n transform: rotate(360deg);\r\n }\r\n }\r\n}\r\n\r\n// 主内容区动画\r\n.slide-right-enter-active {\r\n transition: 0.2s;\r\n}\r\n\r\n.slide-right-leave-active {\r\n transition: 0.15s;\r\n}\r\n\r\n.slide-right-enter-from {\r\n margin-left: -20px;\r\n opacity: 0;\r\n}\r\n\r\n.slide-right-leave-to {\r\n margin-left: 20px;\r\n opacity: 0;\r\n}\r\n</style>\r\n","import { defineComponent } from \"vue\";\r\nimport { MKLayoutDefault } from \"./container/default\";\r\nimport NewLayout from './new/index.vue';\r\n\r\nexport default defineComponent({\r\n name: \"MKLayout\",\r\n setup() {\r\n return () => {\r\n return <NewLayout />;\r\n };\r\n },\r\n});\r\n","import { withInstall } from \"@maketribe/utils\";\r\nimport Layout from \"./layout\";\r\n\r\nexport const MKLayout = withInstall(Layout);\r\n\r\nexport default MKLayout;\r\n","import { Fragment, reactive } from \"vue\";\r\nimport { Dialoger } from \"@maketribe/dm\";\r\nimport { MKMaterialList } from \"../material-list\";\r\nimport { MsMaterial, MsMaterialTable } from \"../../dataviews\";\r\nimport { ElButton } from \"element-plus\";\r\n\r\nexport type MKMaterialSelectOptions = {\r\n allowMaterialTypeValues?: any[];\r\n};\r\nexport type MKMaterialSelectResult = {\r\n success: boolean;\r\n data: MsMaterial | null;\r\n path: string;\r\n};\r\n\r\nexport default async function MaterialSelect(\r\n options: MKMaterialSelectOptions = {}\r\n): Promise<MKMaterialSelectResult> {\r\n return new Promise((resolve) => {\r\n const materialTable = reactive(new MsMaterialTable()) as MsMaterialTable;\r\n\r\n const handleCancelClick = () => {\r\n dialogInstance.destroy();\r\n\r\n resolve({ success: false, data: null, path: \"\" });\r\n };\r\n\r\n const handleConfirmClick = () => {\r\n dialogInstance.destroy();\r\n\r\n const selection = materialTable.getSelection()[0];\r\n\r\n const selectMaterial = materialTable\r\n .getList()\r\n .find((item) => item.id === selection);\r\n\r\n if (!selectMaterial) {\r\n resolve({ success: false, data: null, path: \"\" });\r\n return;\r\n }\r\n\r\n resolve({\r\n success: true,\r\n data: selectMaterial,\r\n path: selectMaterial.path,\r\n });\r\n };\r\n\r\n const dialogInstance = Dialoger.customRender({\r\n title: \"素材选择\",\r\n class: \"mk-material-select\",\r\n width: \"70%\",\r\n onClose: () => {\r\n dialogInstance.destroy();\r\n },\r\n body: () => {\r\n return (\r\n <MKMaterialList\r\n class=\"mk-material-select__list\"\r\n selectable\r\n materialTable={materialTable}\r\n allowMaterialTypeValues={options.allowMaterialTypeValues}\r\n />\r\n );\r\n },\r\n footer: () => {\r\n return (\r\n <Fragment>\r\n <ElButton onClick={handleCancelClick}>取消</ElButton>\r\n <ElButton\r\n type=\"primary\"\r\n disabled={materialTable.getSelection().length === 0}\r\n onClick={handleConfirmClick}\r\n >\r\n 确定\r\n </ElButton>\r\n </Fragment>\r\n );\r\n },\r\n });\r\n });\r\n}\r\n","import MaterialSelect from \"./material-select-api\";\r\n\r\nexport const MKMaterialSelect = MaterialSelect;\r\n\r\nexport default MaterialSelect;\r\n","import { ExtractPropTypes } from \"vue\";\r\nimport { buildProps } from \"@maketribe/utils\";\r\n\r\nexport const markdownEditorProps = buildProps({\r\n modelValue: {\r\n type: String,\r\n required: true,\r\n },\r\n} as const);\r\n\r\nexport type MarkdownEditorProps = ExtractPropTypes<typeof markdownEditorProps>;\r\n\r\nexport const markdownEditorEmits = {\r\n \"update:model-value\": (modelValue: string) => true,\r\n};\r\n\r\nexport type MarkdownEditorEmits = typeof markdownEditorEmits;\r\n","import { defineAsyncComponent } from \"vue\";\r\nimport { withInstall } from \"@maketribe/utils\";\r\n\r\nconst _MarkdownEditor = defineAsyncComponent(() => import(\"./markdown-editor\"));\r\n\r\nexport const MKMarkdownEditor = withInstall(_MarkdownEditor);\r\n\r\nexport default MKMarkdownEditor;\r\n\r\nexport * from \"./markdown-editor-options\";\r\n","tinymce.addI18n(\"zh-Hans\",{\"Redo\":\"\\u91cd\\u505a\",\"Undo\":\"\\u64a4\\u9500\",\"Cut\":\"\\u526a\\u5207\",\"Copy\":\"\\u590d\\u5236\",\"Paste\":\"\\u7c98\\u8d34\",\"Select all\":\"\\u5168\\u9009\",\"New document\":\"\\u65b0\\u5efa\\u6587\\u6863\",\"Ok\":\"\\u786e\\u5b9a\",\"Cancel\":\"\\u53d6\\u6d88\",\"Visual aids\":\"\\u7f51\\u683c\\u7ebf\",\"Bold\":\"\\u7c97\\u4f53\",\"Italic\":\"\\u659c\\u4f53\",\"Underline\":\"\\u4e0b\\u5212\\u7ebf\",\"Strikethrough\":\"\\u5220\\u9664\\u7ebf\",\"Superscript\":\"\\u4e0a\\u6807\",\"Subscript\":\"\\u4e0b\\u6807\",\"Clear formatting\":\"\\u6e05\\u9664\\u683c\\u5f0f\",\"Remove\":\"\\u79fb\\u9664\",\"Align left\":\"\\u5de6\\u5bf9\\u9f50\",\"Align center\":\"\\u5c45\\u4e2d\\u5bf9\\u9f50\",\"Align right\":\"\\u53f3\\u5bf9\\u9f50\",\"No alignment\":\"\\u672a\\u5bf9\\u9f50\",\"Justify\":\"\\u4e24\\u7aef\\u5bf9\\u9f50\",\"Bullet list\":\"\\u65e0\\u5e8f\\u5217\\u8868\",\"Numbered list\":\"\\u6709\\u5e8f\\u5217\\u8868\",\"Decrease indent\":\"\\u51cf\\u5c11\\u7f29\\u8fdb\",\"Increase indent\":\"\\u589e\\u52a0\\u7f29\\u8fdb\",\"Close\":\"\\u5173\\u95ed\",\"Formats\":\"\\u683c\\u5f0f\",\"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.\":\"\\u4f60\\u7684\\u6d4f\\u89c8\\u5668\\u4e0d\\u652f\\u6301\\u6253\\u5f00\\u526a\\u8d34\\u677f\\uff0c\\u8bf7\\u4f7f\\u7528Ctrl+X/C/V\\u7b49\\u5feb\\u6377\\u952e\\u3002\",\"Headings\":\"\\u6807\\u9898\",\"Heading 1\":\"\\u4e00\\u7ea7\\u6807\\u9898\",\"Heading 2\":\"\\u4e8c\\u7ea7\\u6807\\u9898\",\"Heading 3\":\"\\u4e09\\u7ea7\\u6807\\u9898\",\"Heading 4\":\"\\u56db\\u7ea7\\u6807\\u9898\",\"Heading 5\":\"\\u4e94\\u7ea7\\u6807\\u9898\",\"Heading 6\":\"\\u516d\\u7ea7\\u6807\\u9898\",\"Preformatted\":\"\\u9884\\u5148\\u683c\\u5f0f\\u5316\\u7684\",\"Div\":\"Div\",\"Pre\":\"\\u524d\\u8a00\",\"Code\":\"\\u4ee3\\u7801\",\"Paragraph\":\"\\u6bb5\\u843d\",\"Blockquote\":\"\\u5f15\\u6587\\u533a\\u5757\",\"Inline\":\"\\u6587\\u672c\",\"Blocks\":\"\\u6837\\u5f0f\",\"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.\":\"\\u5f53\\u524d\\u4e3a\\u7eaf\\u6587\\u672c\\u7c98\\u8d34\\u6a21\\u5f0f\\uff0c\\u518d\\u6b21\\u70b9\\u51fb\\u53ef\\u4ee5\\u56de\\u5230\\u666e\\u901a\\u7c98\\u8d34\\u6a21\\u5f0f\\u3002\",\"Fonts\":\"\\u5b57\\u4f53\",\"Font sizes\":\"\\u5b57\\u4f53\\u5927\\u5c0f\",\"Class\":\"\\u7c7b\\u578b\",\"Browse for an image\":\"\\u6d4f\\u89c8\\u56fe\\u50cf\",\"OR\":\"\\u6216\",\"Drop an image here\":\"\\u62d6\\u653e\\u4e00\\u5f20\\u56fe\\u50cf\\u81f3\\u6b64\",\"Upload\":\"\\u4e0a\\u4f20\",\"Uploading image\":\"\\u4e0a\\u4f20\\u56fe\\u7247\",\"Block\":\"\\u5757\",\"Align\":\"\\u5bf9\\u9f50\",\"Default\":\"\\u9884\\u8bbe\",\"Circle\":\"\\u7a7a\\u5fc3\\u5706\",\"Disc\":\"\\u5b9e\\u5fc3\\u5706\",\"Square\":\"\\u5b9e\\u5fc3\\u65b9\\u5757\",\"Lower Alpha\":\"\\u5c0f\\u5199\\u82f1\\u6587\\u5b57\\u6bcd\",\"Lower Greek\":\"\\u5c0f\\u5199\\u5e0c\\u814a\\u5b57\\u6bcd\",\"Lower Roman\":\"\\u5c0f\\u5199\\u7f57\\u9a6c\\u6570\\u5b57\",\"Upper Alpha\":\"\\u5927\\u5199\\u82f1\\u6587\\u5b57\\u6bcd\",\"Upper Roman\":\"\\u5927\\u5199\\u7f57\\u9a6c\\u6570\\u5b57\",\"Anchor...\":\"\\u951a\\u70b9...\",\"Anchor\":\"\\u951a\\u70b9\",\"Name\":\"\\u540d\\u79f0\",\"ID\":\"ID\",\"ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.\":\"ID\\u5e94\\u8be5\\u4ee5\\u82f1\\u6587\\u5b57\\u6bcd\\u5f00\\u5934\\uff0c\\u540e\\u9762\\u53ea\\u80fd\\u6709\\u82f1\\u6587\\u5b57\\u6bcd\\u3001\\u6570\\u5b57\\u3001\\u7834\\u6298\\u53f7\\u3001\\u70b9\\u3001\\u5192\\u53f7\\u6216\\u4e0b\\u5212\\u7ebf\\u3002\",\"You have unsaved changes are you sure you want to navigate away?\":\"\\u4f60\\u8fd8\\u6709\\u6587\\u6863\\u5c1a\\u672a\\u4fdd\\u5b58\\uff0c\\u786e\\u5b9a\\u8981\\u79bb\\u5f00\\uff1f\",\"Restore last draft\":\"\\u6062\\u590d\\u4e0a\\u6b21\\u7684\\u8349\\u7a3f\",\"Special character...\":\"\\u7279\\u6b8a\\u5b57\\u7b26...\",\"Special Character\":\"\\u7279\\u6b8a\\u5b57\\u7b26\",\"Source code\":\"\\u6e90\\u4ee3\\u7801\",\"Insert/Edit code sample\":\"\\u63d2\\u5165/\\u7f16\\u8f91\\u4ee3\\u7801\\u793a\\u4f8b\",\"Language\":\"\\u8bed\\u8a00\",\"Code sample...\":\"\\u793a\\u4f8b\\u4ee3\\u7801...\",\"Left to right\":\"\\u7531\\u5de6\\u5230\\u53f3\",\"Right to left\":\"\\u7531\\u53f3\\u5230\\u5de6\",\"Title\":\"\\u6807\\u9898\",\"Fullscreen\":\"\\u5168\\u5c4f\",\"Action\":\"\\u52a8\\u4f5c\",\"Shortcut\":\"\\u5feb\\u6377\\u65b9\\u5f0f\",\"Help\":\"\\u5e2e\\u52a9\",\"Address\":\"\\u5730\\u5740\",\"Focus to menubar\":\"\\u79fb\\u52a8\\u7126\\u70b9\\u5230\\u83dc\\u5355\\u680f\",\"Focus to toolbar\":\"\\u79fb\\u52a8\\u7126\\u70b9\\u5230\\u5de5\\u5177\\u680f\",\"Focus to element path\":\"\\u79fb\\u52a8\\u7126\\u70b9\\u5230\\u5143\\u7d20\\u8def\\u5f84\",\"Focus to contextual toolbar\":\"\\u79fb\\u52a8\\u7126\\u70b9\\u5230\\u4e0a\\u4e0b\\u6587\\u83dc\\u5355\",\"Insert link (if link plugin activated)\":\"\\u63d2\\u5165\\u94fe\\u63a5 (\\u5982\\u679c\\u94fe\\u63a5\\u63d2\\u4ef6\\u5df2\\u6fc0\\u6d3b)\",\"Save (if save plugin activated)\":\"\\u4fdd\\u5b58(\\u5982\\u679c\\u4fdd\\u5b58\\u63d2\\u4ef6\\u5df2\\u6fc0\\u6d3b)\",\"Find (if searchreplace plugin activated)\":\"\\u67e5\\u627e(\\u5982\\u679c\\u67e5\\u627e\\u66ff\\u6362\\u63d2\\u4ef6\\u5df2\\u6fc0\\u6d3b)\",\"Plugins installed ({0}):\":\"\\u5df2\\u5b89\\u88c5\\u63d2\\u4ef6 ({0}):\",\"Premium plugins:\":\"\\u4f18\\u79c0\\u63d2\\u4ef6\\uff1a\",\"Learn more...\":\"\\u4e86\\u89e3\\u66f4\\u591a...\",\"You are using {0}\":\"\\u4f60\\u6b63\\u5728\\u4f7f\\u7528 {0}\",\"Plugins\":\"\\u63d2\\u4ef6\",\"Handy Shortcuts\":\"\\u5feb\\u6377\\u952e\",\"Horizontal line\":\"\\u6c34\\u5e73\\u5206\\u5272\\u7ebf\",\"Insert/edit image\":\"\\u63d2\\u5165/\\u7f16\\u8f91\\u56fe\\u7247\",\"Alternative description\":\"\\u66ff\\u4ee3\\u63cf\\u8ff0\",\"Accessibility\":\"\\u8f85\\u52a9\\u529f\\u80fd\",\"Image is decorative\":\"\\u56fe\\u50cf\\u662f\\u88c5\\u9970\\u6027\\u7684\",\"Source\":\"\\u6e90\",\"Dimensions\":\"\\u5c3a\\u5bf8\",\"Constrain proportions\":\"\\u4fdd\\u6301\\u6bd4\\u4f8b\",\"General\":\"\\u4e00\\u822c\",\"Advanced\":\"\\u9ad8\\u7ea7\",\"Style\":\"\\u6837\\u5f0f\",\"Vertical space\":\"\\u5782\\u76f4\\u95f4\\u8ddd\",\"Horizontal space\":\"\\u6c34\\u5e73\\u95f4\\u8ddd\",\"Border\":\"\\u6846\\u7ebf\",\"Insert image\":\"\\u63d2\\u5165\\u56fe\\u7247\",\"Image...\":\"\\u56fe\\u7247...\",\"Image list\":\"\\u56fe\\u7247\\u6e05\\u5355\",\"Resize\":\"\\u8c03\\u6574\\u5927\\u5c0f\",\"Insert date/time\":\"\\u63d2\\u5165\\u65e5\\u671f/\\u65f6\\u95f4\",\"Date/time\":\"\\u65e5\\u671f/\\u65f6\\u95f4\",\"Insert/edit link\":\"\\u63d2\\u5165/\\u7f16\\u8f91\\u94fe\\u63a5\",\"Text to display\":\"\\u8981\\u663e\\u793a\\u7684\\u6587\\u672c\",\"Url\":\"\\u5730\\u5740\",\"Open link in...\":\"\\u94fe\\u63a5\\u6253\\u5f00\\u4f4d\\u7f6e...\",\"Current window\":\"\\u5f53\\u524d\\u7a97\\u53e3\",\"None\":\"\\u65e0\",\"New window\":\"\\u65b0\\u7a97\\u53e3\",\"Open link\":\"\\u6253\\u5f00\\u94fe\\u63a5\",\"Remove link\":\"\\u79fb\\u9664\\u94fe\\u63a5\",\"Anchors\":\"\\u951a\\u70b9\",\"Link...\":\"\\u94fe\\u63a5...\",\"Paste or type a link\":\"\\u7c98\\u8d34\\u6216\\u8f93\\u5165\\u94fe\\u63a5\",\"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?\":\"\\u4f60\\u6240\\u586b\\u5199\\u7684URL\\u5730\\u5740\\u4e3a\\u90ae\\u4ef6\\u5730\\u5740\\uff0c\\u9700\\u8981\\u52a0\\u4e0amailto: \\u524d\\u7f00\\u5417\\uff1f\",\"The URL you entered seems to be an external link. Do you want to add the required http:// prefix?\":\"\\u4f60\\u6240\\u586b\\u5199\\u7684URL\\u5730\\u5740\\u5c5e\\u4e8e\\u5916\\u90e8\\u94fe\\u63a5\\uff0c\\u9700\\u8981\\u52a0\\u4e0ahttp:// \\u524d\\u7f00\\u5417\\uff1f\",\"The URL you entered seems to be an external link. Do you want to add the required https:// prefix?\":\"\\u60a8\\u8f93\\u5165\\u7684 URL \\u4f3c\\u4e4e\\u662f\\u4e00\\u4e2a\\u5916\\u90e8\\u94fe\\u63a5\\u3002\\u60a8\\u60f3\\u6dfb\\u52a0\\u6240\\u9700\\u7684 https:// \\u524d\\u7f00\\u5417\\uff1f\",\"Link list\":\"\\u94fe\\u63a5\\u6e05\\u5355\",\"Insert video\":\"\\u63d2\\u5165\\u89c6\\u9891\",\"Insert/edit video\":\"\\u63d2\\u5165/\\u7f16\\u8f91\\u89c6\\u9891\",\"Insert/edit media\":\"\\u63d2\\u5165/\\u7f16\\u8f91\\u5a92\\u4f53\",\"Alternative source\":\"\\u955c\\u50cf\",\"Alternative source URL\":\"\\u66ff\\u4ee3\\u6765\\u6e90\\u7f51\\u5740\",\"Media poster (Image URL)\":\"\\u5c01\\u9762(\\u56fe\\u7247\\u5730\\u5740)\",\"Paste your embed code below:\":\"\\u5c06\\u5185\\u5d4c\\u4ee3\\u7801\\u7c98\\u8d34\\u5728\\u4e0b\\u9762:\",\"Embed\":\"\\u5185\\u5d4c\",\"Media...\":\"\\u591a\\u5a92\\u4f53...\",\"Nonbreaking space\":\"\\u4e0d\\u95f4\\u65ad\\u7a7a\\u683c\",\"Page break\":\"\\u5206\\u9875\\u7b26\",\"Paste as text\":\"\\u7c98\\u8d34\\u4e3a\\u6587\\u672c\",\"Preview\":\"\\u9884\\u89c8\",\"Print\":\"\\u6253\\u5370\",\"Print...\":\"\\u6253\\u5370...\",\"Save\":\"\\u4fdd\\u5b58\",\"Find\":\"\\u5bfb\\u627e\",\"Replace with\":\"\\u66ff\\u6362\\u4e3a\",\"Replace\":\"\\u66ff\\u6362\",\"Replace all\":\"\\u66ff\\u6362\\u5168\\u90e8\",\"Previous\":\"\\u4e0a\\u4e00\\u4e2a\",\"Next\":\"\\u4e0b\\u4e00\\u4e2a\",\"Find and Replace\":\"\\u67e5\\u627e\\u548c\\u66ff\\u6362\",\"Find and replace...\":\"\\u67e5\\u627e\\u5e76\\u66ff\\u6362...\",\"Could not find the specified string.\":\"\\u672a\\u627e\\u5230\\u641c\\u7d22\\u5185\\u5bb9\\u3002\",\"Match case\":\"\\u5927\\u5c0f\\u5199\\u5339\\u914d\",\"Find whole words only\":\"\\u5168\\u5b57\\u5339\\u914d\",\"Find in selection\":\"\\u5728\\u9009\\u533a\\u4e2d\\u67e5\\u627e\",\"Insert table\":\"\\u63d2\\u5165\\u8868\\u683c\",\"Table properties\":\"\\u8868\\u683c\\u5c5e\\u6027\",\"Delete table\":\"\\u5220\\u9664\\u8868\\u683c\",\"Cell\":\"\\u5355\\u5143\\u683c\",\"Row\":\"\\u884c\",\"Column\":\"\\u5217\",\"Cell properties\":\"\\u5355\\u5143\\u683c\\u5c5e\\u6027\",\"Merge cells\":\"\\u5408\\u5e76\\u5355\\u5143\\u683c\",\"Split cell\":\"\\u62c6\\u5206\\u5355\\u5143\\u683c\",\"Insert row before\":\"\\u5728\\u4e0a\\u65b9\\u63d2\\u5165\\u884c\",\"Insert row after\":\"\\u5728\\u4e0b\\u65b9\\u63d2\\u5165\\u884c\",\"Delete row\":\"\\u5220\\u9664\\u884c\",\"Row properties\":\"\\u884c\\u5c5e\\u6027\",\"Cut row\":\"\\u526a\\u5207\\u884c\",\"Cut column\":\"\\u526a\\u5207\\u5217\",\"Copy row\":\"\\u590d\\u5236\\u884c\",\"Copy column\":\"\\u590d\\u5236\\u5217\",\"Paste row before\":\"\\u7c98\\u8d34\\u884c\\u5230\\u4e0a\\u65b9\",\"Paste column before\":\"\\u7c98\\u8d34\\u6b64\\u5217\\u524d\",\"Paste row after\":\"\\u7c98\\u8d34\\u884c\\u5230\\u4e0b\\u65b9\",\"Paste column after\":\"\\u7c98\\u8d34\\u540e\\u9762\\u7684\\u5217\",\"Insert column before\":\"\\u5728\\u5de6\\u4fa7\\u63d2\\u5165\\u5217\",\"Insert column after\":\"\\u5728\\u53f3\\u4fa7\\u63d2\\u5165\\u5217\",\"Delete column\":\"\\u5220\\u9664\\u5217\",\"Cols\":\"\\u5217\",\"Rows\":\"\\u884c\\u6570\",\"Width\":\"\\u5bbd\\u5ea6\",\"Height\":\"\\u9ad8\\u5ea6\",\"Cell spacing\":\"\\u5355\\u5143\\u683c\\u5916\\u95f4\\u8ddd\",\"Cell padding\":\"\\u5355\\u5143\\u683c\\u5185\\u8fb9\\u8ddd\",\"Row clipboard actions\":\"\\u884c\\u526a\\u8d34\\u677f\\u64cd\\u4f5c\",\"Column clipboard actions\":\"\\u5217\\u526a\\u8d34\\u677f\\u64cd\\u4f5c\",\"Table styles\":\"\\u8868\\u683c\\u6837\\u5f0f\",\"Cell styles\":\"\\u5355\\u5143\\u683c\\u6837\\u5f0f\",\"Column header\":\"\\u5217\\u6807\\u9898\",\"Row header\":\"\\u884c\\u5934\",\"Table caption\":\"\\u8868\\u683c\\u6807\\u9898\",\"Caption\":\"\\u6807\\u9898\",\"Show caption\":\"\\u663e\\u793a\\u6807\\u9898\",\"Left\":\"\\u5de6\",\"Center\":\"\\u5c45\\u4e2d\",\"Right\":\"\\u53f3\",\"Cell type\":\"\\u50a8\\u5b58\\u683c\\u522b\",\"Scope\":\"\\u8303\\u56f4\",\"Alignment\":\"\\u5bf9\\u9f50\",\"Horizontal align\":\"\\u6c34\\u5e73\\u5bf9\\u9f50\",\"Vertical align\":\"\\u5782\\u76f4\\u5bf9\\u9f50\",\"Top\":\"\\u4e0a\\u65b9\\u5bf9\\u9f50\",\"Middle\":\"\\u5c45\\u4e2d\\u5bf9\\u9f50\",\"Bottom\":\"\\u4e0b\\u65b9\\u5bf9\\u9f50\",\"Header cell\":\"\\u8868\\u5934\\u5355\\u5143\\u683c\",\"Row group\":\"\\u884c\\u7ec4\",\"Column group\":\"\\u5217\\u7ec4\",\"Row type\":\"\\u884c\\u7c7b\\u578b\",\"Header\":\"\\u8868\\u5934\",\"Body\":\"\\u8868\\u4f53\",\"Footer\":\"\\u8868\\u5c3e\",\"Border color\":\"\\u6846\\u7ebf\\u989c\\u8272\",\"Solid\":\"\\u5b9e\\u7ebf\",\"Dotted\":\"\\u865a\\u7ebf\",\"Dashed\":\"\\u865a\\u7ebf\",\"Double\":\"\\u53cc\\u7cbe\\u5ea6\",\"Groove\":\"\\u51f9\\u69fd\",\"Ridge\":\"\\u6d77\\u810a\\u5ea7\",\"Inset\":\"\\u5d4c\\u5165\",\"Outset\":\"\\u5916\\u7f6e\",\"Hidden\":\"\\u9690\\u85cf\",\"Insert template...\":\"\\u63d2\\u5165\\u6a21\\u677f...\",\"Templates\":\"\\u6a21\\u677f\",\"Template\":\"\\u6a21\\u677f\",\"Insert Template\":\"\\u63d2\\u5165\\u6a21\\u677f\",\"Text color\":\"\\u6587\\u672c\\u989c\\u8272\",\"Background color\":\"\\u80cc\\u666f\\u989c\\u8272\",\"Custom...\":\"\\u81ea\\u5b9a\\u4e49......\",\"Custom color\":\"\\u81ea\\u5b9a\\u4e49\\u989c\\u8272\",\"No color\":\"\\u65e0\",\"Remove color\":\"\\u79fb\\u9664\\u989c\\u8272\",\"Show blocks\":\"\\u663e\\u793a\\u533a\\u5757\\u8fb9\\u6846\",\"Show invisible characters\":\"\\u663e\\u793a\\u4e0d\\u53ef\\u89c1\\u5b57\\u7b26\",\"Word count\":\"\\u5b57\\u6570\",\"Count\":\"\\u8ba1\\u6570\",\"Document\":\"\\u6587\\u6863\",\"Selection\":\"\\u9009\\u62e9\",\"Words\":\"\\u5355\\u8bcd\",\"Words: {0}\":\"\\u5b57\\u6570\\uff1a{0}\",\"{0} words\":\"{0} \\u5b57\",\"File\":\"\\u6587\\u4ef6\",\"Edit\":\"\\u7f16\\u8f91\",\"Insert\":\"\\u63d2\\u5165\",\"View\":\"\\u67e5\\u770b\",\"Format\":\"\\u683c\\u5f0f\",\"Table\":\"\\u8868\\u683c\",\"Tools\":\"\\u5de5\\u5177\",\"Powered by {0}\":\"\\u7531{0}\\u9a71\\u52a8\",\"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help\":\"\\u7f16\\u8f91\\u533a\\u3002\\u6309ALT-F9\\u6253\\u5f00\\u83dc\\u5355\\uff0c\\u6309ALT-F10\\u6253\\u5f00\\u5de5\\u5177\\u680f\\uff0c\\u6309ALT-0\\u67e5\\u770b\\u5e2e\\u52a9\",\"Image title\":\"\\u56fe\\u7247\\u6807\\u9898\",\"Border width\":\"\\u8fb9\\u6846\\u5bbd\\u5ea6\",\"Border style\":\"\\u8fb9\\u6846\\u6837\\u5f0f\",\"Error\":\"\\u9519\\u8bef\",\"Warn\":\"\\u8b66\\u544a\",\"Valid\":\"\\u6709\\u6548\",\"To open the popup, press Shift+Enter\":\"\\u6309Shitf+Enter\\u952e\\u6253\\u5f00\\u5bf9\\u8bdd\\u6846\",\"Rich Text Area\":\"\\u5bcc\\u6587\\u672c\\u533a\\u57df\",\"Rich Text Area. Press ALT-0 for help.\":\"\\u7f16\\u8f91\\u533a\\u3002\\u6309Alt+0\\u952e\\u6253\\u5f00\\u5e2e\\u52a9\\u3002\",\"System Font\":\"\\u7cfb\\u7edf\\u5b57\\u4f53\",\"Failed to upload image: {0}\":\"\\u56fe\\u7247\\u4e0a\\u4f20\\u5931\\u8d25: {0}\",\"Failed to load plugin: {0} from url {1}\":\"\\u63d2\\u4ef6\\u52a0\\u8f7d\\u5931\\u8d25: {0} \\u6765\\u81ea\\u94fe\\u63a5 {1}\",\"Failed to load plugin url: {0}\":\"\\u63d2\\u4ef6\\u52a0\\u8f7d\\u5931\\u8d25 \\u94fe\\u63a5: {0}\",\"Failed to initialize plugin: {0}\":\"\\u63d2\\u4ef6\\u521d\\u59cb\\u5316\\u5931\\u8d25: {0}\",\"example\":\"\\u793a\\u4f8b\",\"Search\":\"\\u641c\\u7d22\",\"All\":\"\\u5168\\u90e8\",\"Currency\":\"\\u8d27\\u5e01\",\"Text\":\"\\u6587\\u5b57\",\"Quotations\":\"\\u5f15\\u7528\",\"Mathematical\":\"\\u6570\\u5b66\",\"Extended Latin\":\"\\u62c9\\u4e01\\u8bed\\u6269\\u5145\",\"Symbols\":\"\\u7b26\\u53f7\",\"Arrows\":\"\\u7bad\\u5934\",\"User Defined\":\"\\u81ea\\u5b9a\\u4e49\",\"dollar sign\":\"\\u7f8e\\u5143\\u7b26\\u53f7\",\"currency sign\":\"\\u8d27\\u5e01\\u7b26\\u53f7\",\"euro-currency sign\":\"\\u6b27\\u5143\\u7b26\\u53f7\",\"colon sign\":\"\\u5192\\u53f7\",\"cruzeiro sign\":\"\\u514b\\u9c81\\u8d5b\\u7f57\\u5e01\\u7b26\\u53f7\",\"french franc sign\":\"\\u6cd5\\u90ce\\u7b26\\u53f7\",\"lira sign\":\"\\u91cc\\u62c9\\u7b26\\u53f7\",\"mill sign\":\"\\u5bc6\\u5c14\\u7b26\\u53f7\",\"naira sign\":\"\\u5948\\u62c9\\u7b26\\u53f7\",\"peseta sign\":\"\\u6bd4\\u585e\\u5854\\u7b26\\u53f7\",\"rupee sign\":\"\\u5362\\u6bd4\\u7b26\\u53f7\",\"won sign\":\"\\u97e9\\u5143\\u7b26\\u53f7\",\"new sheqel sign\":\"\\u65b0\\u8c22\\u514b\\u5c14\\u7b26\\u53f7\",\"dong sign\":\"\\u8d8a\\u5357\\u76fe\\u7b26\\u53f7\",\"kip sign\":\"\\u8001\\u631d\\u57fa\\u666e\\u7b26\\u53f7\",\"tugrik sign\":\"\\u56fe\\u683c\\u91cc\\u514b\\u7b26\\u53f7\",\"drachma sign\":\"\\u5fb7\\u62c9\\u514b\\u9a6c\\u7b26\\u53f7\",\"german penny symbol\":\"\\u5fb7\\u56fd\\u4fbf\\u58eb\\u7b26\\u53f7\",\"peso sign\":\"\\u6bd4\\u7d22\\u7b26\\u53f7\",\"guarani sign\":\"\\u74dc\\u62c9\\u5c3c\\u7b26\\u53f7\",\"austral sign\":\"\\u6fb3\\u5143\\u7b26\\u53f7\",\"hryvnia sign\":\"\\u683c\\u91cc\\u592b\\u5c3c\\u4e9a\\u7b26\\u53f7\",\"cedi sign\":\"\\u585e\\u5730\\u7b26\\u53f7\",\"livre tournois sign\":\"\\u91cc\\u5f17\\u5f17\\u5c14\\u7b26\\u53f7\",\"spesmilo sign\":\"spesmilo\\u7b26\\u53f7\",\"tenge sign\":\"\\u575a\\u6208\\u7b26\\u53f7\",\"indian rupee sign\":\"\\u5370\\u5ea6\\u5362\\u6bd4\",\"turkish lira sign\":\"\\u571f\\u8033\\u5176\\u91cc\\u62c9\",\"nordic mark sign\":\"\\u5317\\u6b27\\u9a6c\\u514b\",\"manat sign\":\"\\u9a6c\\u7eb3\\u7279\\u7b26\\u53f7\",\"ruble sign\":\"\\u5362\\u5e03\\u7b26\\u53f7\",\"yen character\":\"\\u65e5\\u5143\\u5b57\\u6837\",\"yuan character\":\"\\u4eba\\u6c11\\u5e01\\u5143\\u5b57\\u6837\",\"yuan character, in hong kong and taiwan\":\"\\u5143\\u5b57\\u6837\\uff08\\u6e2f\\u53f0\\u5730\\u533a\\uff09\",\"yen/yuan character variant one\":\"\\u5143\\u5b57\\u6837\\uff08\\u5927\\u5199\\uff09\",\"Emojis\":\"Emojis\",\"Emojis...\":\"Emojis...\",\"Loading emojis...\":\"\\u6b63\\u5728\\u52a0\\u8f7dEmojis...\",\"Could not load emojis\":\"\\u65e0\\u6cd5\\u52a0\\u8f7dEmojis\",\"People\":\"\\u4eba\\u7c7b\",\"Animals and Nature\":\"\\u52a8\\u7269\\u548c\\u81ea\\u7136\",\"Food and Drink\":\"\\u98df\\u7269\\u548c\\u996e\\u54c1\",\"Activity\":\"\\u6d3b\\u52a8\",\"Travel and Places\":\"\\u65c5\\u6e38\\u548c\\u5730\\u70b9\",\"Objects\":\"\\u7269\\u4ef6\",\"Flags\":\"\\u65d7\\u5e1c\",\"Characters\":\"\\u5b57\\u7b26\",\"Characters (no spaces)\":\"\\u5b57\\u7b26(\\u65e0\\u7a7a\\u683c)\",\"{0} characters\":\"{0} \\u4e2a\\u5b57\\u7b26\",\"Error: Form submit field collision.\":\"\\u9519\\u8bef: \\u8868\\u5355\\u63d0\\u4ea4\\u5b57\\u6bb5\\u51b2\\u7a81\\u3002\",\"Error: No form element found.\":\"\\u9519\\u8bef: \\u6ca1\\u6709\\u8868\\u5355\\u63a7\\u4ef6\\u3002\",\"Color swatch\":\"\\u989c\\u8272\\u6837\\u672c\",\"Color Picker\":\"\\u9009\\u8272\\u5668\",\"Invalid hex color code: {0}\":\"\\u5341\\u516d\\u8fdb\\u5236\\u989c\\u8272\\u4ee3\\u7801\\u65e0\\u6548\\uff1a {0}\",\"Invalid input\":\"\\u65e0\\u6548\\u8f93\\u5165\",\"R\":\"R\",\"Red component\":\"\\u7ea2\\u8272\\u90e8\\u5206\",\"G\":\"G\",\"Green component\":\"\\u7eff\\u8272\\u90e8\\u5206\",\"B\":\"B\",\"Blue component\":\"\\u767d\\u8272\\u90e8\\u5206\",\"#\":\"#\",\"Hex color code\":\"\\u5341\\u516d\\u8fdb\\u5236\\u989c\\u8272\\u4ee3\\u7801\",\"Range 0 to 255\":\"\\u8303\\u56f40\\u81f3255\",\"Turquoise\":\"\\u9752\\u7eff\\u8272\",\"Green\":\"\\u7eff\\u8272\",\"Blue\":\"\\u84dd\\u8272\",\"Purple\":\"\\u7d2b\\u8272\",\"Navy Blue\":\"\\u6d77\\u519b\\u84dd\",\"Dark Turquoise\":\"\\u6df1\\u84dd\\u7eff\\u8272\",\"Dark Green\":\"\\u6df1\\u7eff\\u8272\",\"Medium Blue\":\"\\u4e2d\\u84dd\\u8272\",\"Medium Purple\":\"\\u4e2d\\u7d2b\\u8272\",\"Midnight Blue\":\"\\u6df1\\u84dd\\u8272\",\"Yellow\":\"\\u9ec4\\u8272\",\"Orange\":\"\\u6a59\\u8272\",\"Red\":\"\\u7ea2\\u8272\",\"Light Gray\":\"\\u6d45\\u7070\\u8272\",\"Gray\":\"\\u7070\\u8272\",\"Dark Yellow\":\"\\u6697\\u9ec4\\u8272\",\"Dark Orange\":\"\\u6df1\\u6a59\\u8272\",\"Dark Red\":\"\\u6df1\\u7ea2\\u8272\",\"Medium Gray\":\"\\u4e2d\\u7070\\u8272\",\"Dark Gray\":\"\\u6df1\\u7070\\u8272\",\"Light Green\":\"\\u6d45\\u7eff\\u8272\",\"Light Yellow\":\"\\u6d45\\u9ec4\\u8272\",\"Light Red\":\"\\u6d45\\u7ea2\\u8272\",\"Light Purple\":\"\\u6d45\\u7d2b\\u8272\",\"Light Blue\":\"\\u6d45\\u84dd\\u8272\",\"Dark Purple\":\"\\u6df1\\u7d2b\\u8272\",\"Dark Blue\":\"\\u6df1\\u84dd\\u8272\",\"Black\":\"\\u9ed1\\u8272\",\"White\":\"\\u767d\\u8272\",\"Switch to or from fullscreen mode\":\"\\u5207\\u6362\\u5168\\u5c4f\\u6a21\\u5f0f\",\"Open help dialog\":\"\\u6253\\u5f00\\u5e2e\\u52a9\\u5bf9\\u8bdd\\u6846\",\"history\":\"\\u5386\\u53f2\",\"styles\":\"\\u6837\\u5f0f\",\"formatting\":\"\\u683c\\u5f0f\\u5316\",\"alignment\":\"\\u5bf9\\u9f50\",\"indentation\":\"\\u7f29\\u8fdb\",\"Font\":\"\\u5b57\\u4f53\",\"Size\":\"\\u5b57\\u53f7\",\"More...\":\"\\u66f4\\u591a...\",\"Select...\":\"\\u9009\\u62e9...\",\"Preferences\":\"\\u9996\\u9009\\u9879\",\"Yes\":\"\\u662f\",\"No\":\"\\u5426\",\"Keyboard Navigation\":\"\\u952e\\u76d8\\u6307\\u5f15\",\"Version\":\"\\u7248\\u672c\",\"Code view\":\"\\u4ee3\\u7801\\u89c6\\u56fe\",\"Open popup menu for split buttons\":\"\\u6253\\u5f00\\u5f39\\u51fa\\u5f0f\\u83dc\\u5355\\uff0c\\u7528\\u4e8e\\u62c6\\u5206\\u6309\\u94ae\",\"List Properties\":\"\\u5217\\u8868\\u5c5e\\u6027\",\"List properties...\":\"\\u6807\\u9898\\u5b57\\u4f53\\u5c5e\\u6027\",\"Start list at number\":\"\\u4ee5\\u6570\\u5b57\\u5f00\\u59cb\\u5217\\u8868\",\"Line height\":\"\\u884c\\u9ad8\",\"Dropped file type is not supported\":\"\\u6b64\\u6587\\u4ef6\\u7c7b\\u578b\\u4e0d\\u652f\\u6301\\u62d6\\u653e\",\"Loading...\":\"\\u52a0\\u8f7d\\u4e2d...\",\"ImageProxy HTTP error: Rejected request\":\"\\u56fe\\u7247\\u4ee3\\u7406\\u8bf7\\u6c42\\u9519\\u8bef\\uff1a\\u8bf7\\u6c42\\u88ab\\u62d2\\u7edd\",\"ImageProxy HTTP error: Could not find Image Proxy\":\"\\u56fe\\u7247\\u4ee3\\u7406\\u8bf7\\u6c42\\u9519\\u8bef\\uff1a\\u65e0\\u6cd5\\u627e\\u5230\\u56fe\\u7247\\u4ee3\\u7406\",\"ImageProxy HTTP error: Incorrect Image Proxy URL\":\"\\u56fe\\u7247\\u4ee3\\u7406\\u8bf7\\u6c42\\u9519\\u8bef\\uff1a\\u56fe\\u7247\\u4ee3\\u7406\\u5730\\u5740\\u9519\\u8bef\",\"ImageProxy HTTP error: Unknown ImageProxy error\":\"\\u56fe\\u7247\\u4ee3\\u7406\\u8bf7\\u6c42\\u9519\\u8bef\\uff1a\\u672a\\u77e5\\u7684\\u56fe\\u7247\\u4ee3\\u7406\\u9519\\u8bef\"});","tinymce.Resource.add('ui/ms/skin.css', \".tox { box-shadow: none; box-sizing: content-box; color: #222f3e; cursor: auto; font-family: -apple-system, BlinkMacSystemFont, \\\"Segoe UI\\\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \\\"Helvetica Neue\\\", sans-serif; font-size: 15px; font-style: normal; font-weight: 400; line-height: normal; -webkit-tap-highlight-color: transparent; text-decoration: none; text-shadow: none; text-transform: none; vertical-align: initial; white-space: normal } .tox :not(svg):not(rect) { box-sizing: inherit; color: inherit; cursor: inherit; direction: inherit; font-family: inherit; font-size: inherit; font-style: inherit; font-weight: inherit; line-height: inherit; -webkit-tap-highlight-color: inherit; text-align: inherit; text-decoration: inherit; text-shadow: inherit; text-transform: inherit; vertical-align: inherit; white-space: inherit } .tox :not(svg):not(rect) { background: 0 0; border: 0; box-shadow: none; float: none; height: auto; margin: 0; max-width: none; outline: 0; padding: 0; position: static; width: auto } .tox:not([dir=rtl]) { direction: ltr; text-align: left } .tox[dir=rtl] { direction: rtl; text-align: right } .tox-tinymce { border: 0 solid transparent; border-radius: 0; box-shadow: none; box-sizing: border-box; display: flex; flex-direction: column; font-family: -apple-system, BlinkMacSystemFont, \\\"Segoe UI\\\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \\\"Helvetica Neue\\\", sans-serif; overflow: hidden; position: relative; visibility: inherit !important } .tox.tox-tinymce-inline { border: none; box-shadow: none; overflow: initial } .tox.tox-tinymce-inline .tox-editor-container { overflow: initial } .tox.tox-tinymce-inline .tox-editor-header { background-color: #fff; border: 0 solid transparent; border-radius: 0; box-shadow: none; overflow: hidden } .tox-tinymce-aux { font-family: -apple-system, BlinkMacSystemFont, \\\"Segoe UI\\\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \\\"Helvetica Neue\\\", sans-serif; z-index: 999999 } .tox-tinymce :focus, .tox-tinymce-aux :focus { outline: 0 } button::-moz-focus-inner { border: 0 } .tox[dir=rtl] .tox-icon--flip svg { transform: rotateY(180deg) } .tox .accessibility-issue__header { align-items: center; display: flex; margin-bottom: 4px } .tox .accessibility-issue__description { align-items: stretch; border-radius: 3px; display: flex; justify-content: space-between } .tox .accessibility-issue__description>div { padding-bottom: 4px } .tox .accessibility-issue__description>div>div { align-items: center; display: flex; margin-bottom: 4px } .tox .accessibility-issue__description>div>div .tox-icon svg { display: block } .tox .accessibility-issue__repair { margin-top: 16px } .tox .tox-dialog__body-content .accessibility-issue--info .accessibility-issue__description { background-color: rgba(28, 153, 255, .1); color: #222f3e } .tox .tox-dialog__body-content .accessibility-issue--info .tox-form__group h2 { color: #2ba0ff } .tox .tox-dialog__body-content .accessibility-issue--info .tox-icon svg { fill: #2ba0ff } .tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon { background-color: #2ba0ff; color: #fff } .tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon:focus, .tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon:hover { background-color: #1295ff } .tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon:active { background-color: #0088f7 } .tox .tox-dialog__body-content .accessibility-issue--warn .accessibility-issue__description { background-color: rgba(255, 165, 0, .08); color: #222f3e } .tox .tox-dialog__body-content .accessibility-issue--warn .tox-form__group h2 { color: #8f5d00 } .tox .tox-dialog__body-content .accessibility-issue--warn .tox-icon svg { fill: #8f5d00 } .tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon { background-color: #ffe89d; color: #222f3e } .tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon:focus, .tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon:hover { background-color: #f2d574; color: #222f3e } .tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon:active { background-color: #e8c657; color: #222f3e } .tox .tox-dialog__body-content .accessibility-issue--error .accessibility-issue__description { background-color: rgba(204, 0, 0, .1); color: #222f3e } .tox .tox-dialog__body-content .accessibility-issue--error .tox-form__group h2 { color: #c00 } .tox .tox-dialog__body-content .accessibility-issue--error .tox-icon svg { fill: #c00 } .tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon { background-color: #f2bfbf; color: #222f3e } .tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon:focus, .tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon:hover { background-color: #e9a4a4; color: #222f3e } .tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon:active { background-color: #ee9494; color: #222f3e } .tox .tox-dialog__body-content .accessibility-issue--success .accessibility-issue__description { background-color: rgba(120, 171, 70, .1); color: #222f3e } .tox .tox-dialog__body-content .accessibility-issue--success .accessibility-issue__description>:last-child { display: none } .tox .tox-dialog__body-content .accessibility-issue--success .tox-form__group h2 { color: #527530 } .tox .tox-dialog__body-content .accessibility-issue--success .tox-icon svg { fill: #527530 } .tox .tox-dialog__body-content .accessibility-issue__header .tox-form__group h1, .tox .tox-dialog__body-content .tox-form__group .accessibility-issue__description h2 { font-size: 13.125px; margin-top: 0 } .tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__header .tox-button { margin-left: 4px } .tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__header>:nth-last-child(2) { margin-left: auto } .tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__description { padding: 4px 4px 4px 8px } .tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__header .tox-button { margin-right: 4px } .tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__header>:nth-last-child(2) { margin-right: auto } .tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__description { padding: 4px 8px 4px 4px } .tox .mce-codemirror { background: #fff; bottom: 0; font-size: 13px; left: 0; position: absolute; right: 0; top: 0; z-index: 1 } .tox .mce-codemirror.tox-inline-codemirror { margin: 8px; position: absolute } .tox .tox-advtemplate .tox-form__grid { flex: 1 } .tox .tox-advtemplate .tox-form__grid>div:first-child { display: flex; flex-direction: column; width: 30% } .tox .tox-advtemplate .tox-form__grid>div:first-child>div:nth-child(2) { flex-basis: 0; flex-grow: 1; overflow: auto } @media only screen and (max-width: 767px) { body:not(.tox-force-desktop) .tox .tox-advtemplate .tox-form__grid>div:first-child { width: 100% } } .tox .tox-advtemplate iframe { border-color: rgba(0, 0, 0, .1); border-radius: 0; border-style: solid; border-width: 1px; margin: 0 10px } .tox .tox-anchorbar { display: flex; flex: 0 0 auto } .tox .tox-bottom-anchorbar { display: flex; flex: 0 0 auto } .tox .tox-bar { display: flex; flex: 0 0 auto } .tox .tox-button { background-color: #2ba0ff; background-image: none; background-position: 0 0; background-repeat: repeat; border-color: #2ba0ff; border-radius: 100px; border-style: solid; border-width: 1px; box-shadow: none; box-sizing: border-box; color: #fff; cursor: pointer; display: inline-block; font-family: -apple-system, BlinkMacSystemFont, \\\"Segoe UI\\\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \\\"Helvetica Neue\\\", sans-serif; font-size: 13.125px; font-style: normal; font-weight: 700; letter-spacing: normal; line-height: 24px; margin: 0; outline: 0; padding: 4px 16px; position: relative; text-align: center; text-decoration: none; text-transform: none; white-space: nowrap } .tox .tox-button::before { border-radius: 100px; bottom: -1px; box-shadow: inset 0 0 0 1px #fff, 0 0 0 2px #2ba0ff; content: ''; left: -1px; opacity: 0; pointer-events: none; position: absolute; right: -1px; top: -1px } .tox .tox-button[disabled] { background-color: #2ba0ff; background-image: none; border-color: #2ba0ff; box-shadow: none; color: rgba(255, 255, 255, .5); cursor: not-allowed } .tox .tox-button:focus:not(:disabled) { background-color: #1295ff; background-image: none; border-color: #1295ff; box-shadow: none; color: #fff } .tox .tox-button:focus:not(:disabled)::before { opacity: 1 } .tox .tox-button:hover:not(:disabled) { background-color: #1295ff; background-image: none; border-color: #1295ff; box-shadow: none; color: #fff } .tox .tox-button:active:not(:disabled) { background-color: #0088f7; background-image: none; border-color: #0088f7; box-shadow: none; color: #fff } .tox .tox-button.tox-button--enabled { background-color: #0088f7; background-image: none; border-color: #0088f7; box-shadow: none; color: #fff } .tox .tox-button.tox-button--enabled[disabled] { background-color: #0088f7; background-image: none; border-color: #0088f7; box-shadow: none; color: rgba(255, 255, 255, .5); cursor: not-allowed } .tox .tox-button.tox-button--enabled:focus:not(:disabled) { background-color: #007ade; background-image: none; border-color: #007ade; box-shadow: none; color: #fff } .tox .tox-button.tox-button--enabled:hover:not(:disabled) { background-color: #007ade; background-image: none; border-color: #007ade; box-shadow: none; color: #fff } .tox .tox-button.tox-button--enabled:active:not(:disabled) { background-color: #006cc4; background-image: none; border-color: #006cc4; box-shadow: none; color: #fff } .tox .tox-button--icon-and-text, .tox .tox-button.tox-button--icon-and-text, .tox .tox-button.tox-button--secondary.tox-button--icon-and-text { display: flex; padding: 5px 4px } .tox .tox-button--icon-and-text .tox-icon svg, .tox .tox-button.tox-button--icon-and-text .tox-icon svg, .tox .tox-button.tox-button--secondary.tox-button--icon-and-text .tox-icon svg { display: block; fill: currentColor } .tox .tox-button--secondary { background-color: #fff; background-image: none; background-position: 0 0; background-repeat: repeat; border-color: #2ba0ff; border-radius: 100px; border-style: solid; border-width: 1px; box-shadow: none; color: #2ba0ff; font-size: 13.125px; font-style: normal; font-weight: 700; letter-spacing: normal; outline: 0; padding: 4px 16px; text-decoration: none; text-transform: none } .tox .tox-button--secondary[disabled] { background-color: #fff; background-image: none; border-color: #fff; box-shadow: none; color: rgba(43, 160, 255, .5) } .tox .tox-button--secondary:focus:not(:disabled) { background-color: rgba(43, 160, 255, .1); background-image: none; border-color: #2ba0ff; box-shadow: none; color: #2ba0ff } .tox .tox-button--secondary:hover:not(:disabled) { background-color: rgba(43, 160, 255, .1); background-image: none; border-color: #2ba0ff; box-shadow: none; color: #2ba0ff } .tox .tox-button--secondary:active:not(:disabled) { background-color: rgba(43, 160, 255, .2); background-image: none; border-color: #2ba0ff; box-shadow: none; color: #2ba0ff } .tox .tox-button--secondary.tox-button--enabled { background-color: #b5d8f4; background-image: none; border-color: #b5d8f4; box-shadow: none; color: #2ba0ff } .tox .tox-button--secondary.tox-button--enabled[disabled] { background-color: #b5d8f4; background-image: none; border-color: #b5d8f4; box-shadow: none; color: rgba(43, 160, 255, .5) } .tox .tox-button--secondary.tox-button--enabled:focus:not(:disabled) { background-color: #9eccf1; background-image: none; border-color: #9eccf1; box-shadow: none; color: #2ba0ff } .tox .tox-button--secondary.tox-button--enabled:hover:not(:disabled) { background-color: #9eccf1; background-image: none; border-color: #9eccf1; box-shadow: none; color: #2ba0ff } .tox .tox-button--secondary.tox-button--enabled:active:not(:disabled) { background-color: #88c0ee; background-image: none; border-color: #88c0ee; box-shadow: none; color: #2ba0ff } .tox .tox-button--icon, .tox .tox-button.tox-button--icon, .tox .tox-button.tox-button--secondary.tox-button--icon { padding: 4px } .tox .tox-button--icon .tox-icon svg, .tox .tox-button.tox-button--icon .tox-icon svg, .tox .tox-button.tox-button--secondary.tox-button--icon .tox-icon svg { display: block; fill: currentColor } .tox .tox-button-link { background: 0; border: none; box-sizing: border-box; cursor: pointer; display: inline-block; font-family: -apple-system, BlinkMacSystemFont, \\\"Segoe UI\\\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \\\"Helvetica Neue\\\", sans-serif; font-size: 15px; font-weight: 400; line-height: 1.3; margin: 0; padding: 0; white-space: nowrap } .tox .tox-button-link--sm { font-size: 13.125px } .tox .tox-button--naked { background-color: transparent; border-color: transparent; box-shadow: unset; color: #57606f } .tox .tox-button--naked[disabled] { background-color: #fff; border-color: #fff; box-shadow: none; color: rgba(87, 96, 111, .5) } .tox .tox-button--naked:hover:not(:disabled) { background-color: rgba(43, 160, 255, .1); border-color: #2ba0ff; box-shadow: none; color: #2ba0ff } .tox .tox-button--naked:focus:not(:disabled) { background-color: rgba(43, 160, 255, .1); border-color: #2ba0ff; box-shadow: none; color: #2ba0ff } .tox .tox-button--naked:active:not(:disabled) { background-color: rgba(43, 160, 255, .2); border-color: #2ba0ff; box-shadow: none; color: #2ba0ff } .tox .tox-button--naked .tox-icon svg { fill: currentColor } .tox .tox-button--naked.tox-button--icon:hover:not(:disabled) { color: #2ba0ff } .tox .tox-checkbox { align-items: center; border-radius: 3px; cursor: pointer; display: flex; height: 36px; min-width: 36px } .tox .tox-checkbox__input { height: 1px; overflow: hidden; position: absolute; top: auto; width: 1px } .tox .tox-checkbox__icons { align-items: center; border-radius: 3px; box-shadow: 0 0 0 2px transparent; box-sizing: content-box; display: flex; height: 24px; justify-content: center; padding: calc(4px - 1px); width: 24px } .tox .tox-checkbox__icons .tox-checkbox-icon__unchecked svg { display: block; fill: rgba(34, 47, 62, 0.3) } @media (forced-colors:active) { .tox .tox-checkbox__icons .tox-checkbox-icon__unchecked svg { fill: currentColor !important } } .tox .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg { display: none; fill: #2ba0ff } .tox .tox-checkbox__icons .tox-checkbox-icon__checked svg { display: none; fill: #2ba0ff } .tox .tox-checkbox--disabled { color: rgba(34, 47, 62, .5); cursor: not-allowed } .tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__checked svg { fill: rgba(34, 47, 62, 0.5) } .tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__unchecked svg { fill: rgba(34, 47, 62, 0.5) } .tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg { fill: rgba(34, 47, 62, 0.5) } .tox input.tox-checkbox__input:checked+.tox-checkbox__icons .tox-checkbox-icon__unchecked svg { display: none } .tox input.tox-checkbox__input:checked+.tox-checkbox__icons .tox-checkbox-icon__checked svg { display: block } .tox input.tox-checkbox__input:indeterminate+.tox-checkbox__icons .tox-checkbox-icon__unchecked svg { display: none } .tox input.tox-checkbox__input:indeterminate+.tox-checkbox__icons .tox-checkbox-icon__indeterminate svg { display: block } .tox input.tox-checkbox__input:focus+.tox-checkbox__icons { border-radius: 3px; box-shadow: inset 0 0 0 1px #2ba0ff; padding: calc(4px - 1px) } .tox:not([dir=rtl]) .tox-checkbox__label { margin-left: 4px } .tox:not([dir=rtl]) .tox-checkbox__input { left: -10000px } .tox:not([dir=rtl]) .tox-bar .tox-checkbox { margin-left: 4px } .tox[dir=rtl] .tox-checkbox__label { margin-right: 4px } .tox[dir=rtl] .tox-checkbox__input { right: -10000px } .tox[dir=rtl] .tox-bar .tox-checkbox { margin-right: 4px } .tox .tox-collection--toolbar .tox-collection__group { display: flex; padding: 0 } .tox .tox-collection--grid .tox-collection__group { display: flex; flex-wrap: wrap; max-height: 208px; overflow-x: hidden; overflow-y: auto; padding: 0 } .tox .tox-collection--list .tox-collection__group { border-bottom-width: 0; border-color: rgba(0, 0, 0, .1); border-left-width: 0; border-right-width: 0; border-style: solid; border-top-width: 1px; padding: 4px 0 } .tox .tox-collection--list .tox-collection__group:first-child { border-top-width: 0 } .tox .tox-collection__group-heading { background-color: rgba(26, 26, 26, .1); color: #fff; cursor: default; font-size: 12px; font-style: normal; font-weight: 400; margin-bottom: 4px; margin-top: -4px; padding: 4px 8px; text-transform: none; -webkit-touch-callout: none; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none } .tox .tox-collection__item { align-items: center; border-radius: 3px; color: #222f3e; display: flex; -webkit-touch-callout: none; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none } .tox .tox-collection--list .tox-collection__item { padding: 4px 8px } .tox .tox-collection--toolbar .tox-collection__item { border-radius: 3px; padding: 4px } .tox .tox-collection--grid .tox-collection__item { border-radius: 3px; padding: 4px } .tox .tox-collection--list .tox-collection__item--enabled { background-color: #fff; color: #222f3e } .tox .tox-collection--list .tox-collection__item--active { background-color: rgba(43, 160, 255, .15) } .tox .tox-collection--toolbar .tox-collection__item--enabled, .tox .tox-collection--toolbar .tox-collection__item--enabled.tox-collection__item--active, .tox .tox-collection--toolbar .tox-collection__item--enabled.tox-collection__item--active:hover { background-color: rgba(43, 160, 255, .15); color: #2ba0ff } @media (forced-colors:active) { .tox .tox-collection--toolbar .tox-collection__item--enabled, .tox .tox-collection--toolbar .tox-collection__item--enabled.tox-collection__item--active, .tox .tox-collection--toolbar .tox-collection__item--enabled.tox-collection__item--active:hover { border-radius: 3px; outline: solid 1px } } .tox .tox-collection--toolbar .tox-collection__item--active { background-color: rgba(43, 160, 255, .15); position: relative } .tox .tox-collection--toolbar .tox-collection__item--active:hover { background-color: rgba(43, 160, 255, .15); color: #fff } .tox .tox-collection--toolbar .tox-collection__item--active:focus { background-color: rgba(43, 160, 255, .15); color: #fff } .tox .tox-collection--toolbar .tox-collection__item--active:focus::after { border-radius: 3px; bottom: 0; box-shadow: 0 0 0 0 transparent; content: ''; left: 0; position: absolute; right: 0; top: 0 } @media (forced-colors:active) { .tox .tox-collection--toolbar .tox-collection__item--active:focus::after { border: 2px solid highlight } } .tox .tox-collection--grid .tox-collection__item--enabled { background-color: rgba(43, 160, 255, .15); color: #fff } .tox .tox-collection--grid .tox-collection__item--active:not(.tox-collection__item--state-disabled) { background-color: rgba(43, 160, 255, .1); color: #2ba0ff; position: relative; z-index: 1 } .tox .tox-collection--grid .tox-collection__item--active:not(.tox-collection__item--state-disabled):focus::after { border-radius: 3px; bottom: 0; box-shadow: 0 0 0 0 transparent 'inset'; content: ''; left: 0; position: absolute; right: 0; top: 0 } @media (forced-colors:active) { .tox .tox-collection--grid .tox-collection__item--active:not(.tox-collection__item--state-disabled):focus::after { border: 2px solid highlight } } .tox .tox-collection--list .tox-collection__item--active:not(.tox-collection__item--state-disabled) { color: #57606f } @media (forced-colors:active) { .tox .tox-collection--list .tox-collection__item--active:not(.tox-collection__item--state-disabled) { border: solid 1px } } .tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled) { color: #57606f } @media (forced-colors:active) { .tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled):hover { border-radius: 3px; outline: solid 1px } } .tox .tox-collection__item-checkmark, .tox .tox-collection__item-icon { align-items: center; display: flex; height: 24px; justify-content: center; width: 24px } .tox .tox-collection__item-checkmark svg, .tox .tox-collection__item-icon svg { fill: currentColor } .tox .tox-collection--toolbar-lg .tox-collection__item-icon { height: 48px; width: 48px } .tox .tox-collection__item-label { color: currentColor; display: inline-block; flex: 1; font-size: 13.125px; font-style: normal; font-weight: 400; line-height: 24px; max-width: 100%; text-transform: none; word-break: break-all } .tox .tox-collection__item-accessory { color: currentColor; display: inline-block; font-size: 13.125px; height: 24px; line-height: 24px; text-transform: none } .tox .tox-collection__item-caret { align-items: center; display: flex; min-height: 24px } .tox .tox-collection__item-caret::after { content: ''; font-size: 0; min-height: inherit } .tox .tox-collection__item-caret svg { fill: currentColor } .tox .tox-collection__item--state-disabled { background-color: transparent; color: rgba(34, 47, 62, .5); cursor: not-allowed } .tox .tox-collection__item--state-disabled .tox-collection__item-caret svg { fill: rgba(34, 47, 62, 0.5) } .tox .tox-collection--list .tox-collection__item:not(.tox-collection__item--enabled) .tox-collection__item-checkmark svg { display: none } .tox .tox-collection--list .tox-collection__item:not(.tox-collection__item--enabled) .tox-collection__item-accessory+.tox-collection__item-checkmark { display: none } .tox .tox-collection--horizontal { background-color: #fff; border: 1px solid rgba(0, 0, 0, .1); border-radius: 3px; box-shadow: 0 0 2px 0 rgba(34, 47, 62, .2), 0 4px 8px 0 rgba(34, 47, 62, .15); display: flex; flex: 0 0 auto; flex-shrink: 0; flex-wrap: nowrap; margin-bottom: 0; overflow-x: auto; padding: 0 } .tox .tox-collection--horizontal .tox-collection__group { align-items: center; display: flex; flex-wrap: nowrap; margin: 0; padding: 0 4px } .tox .tox-collection--horizontal .tox-collection__item { height: 26px; margin: 1px 4px 0 0; padding: 0 4px } .tox .tox-collection--horizontal .tox-collection__item-label { white-space: nowrap } .tox .tox-collection--horizontal .tox-collection__item-caret { margin-left: 4px } .tox .tox-collection__item-container { display: flex } .tox .tox-collection__item-container--row { align-items: center; flex: 1 1 auto; flex-direction: row } .tox .tox-collection__item-container--row.tox-collection__item-container--align-left { margin-right: auto } .tox .tox-collection__item-container--row.tox-collection__item-container--align-right { justify-content: flex-end; margin-left: auto } .tox .tox-collection__item-container--row.tox-collection__item-container--valign-top { align-items: flex-start; margin-bottom: auto } .tox .tox-collection__item-container--row.tox-collection__item-container--valign-middle { align-items: center } .tox .tox-collection__item-container--row.tox-collection__item-container--valign-bottom { align-items: flex-end; margin-top: auto } .tox .tox-collection__item-container--column { align-self: center; flex: 1 1 auto; flex-direction: column } .tox .tox-collection__item-container--column.tox-collection__item-container--align-left { align-items: flex-start } .tox .tox-collection__item-container--column.tox-collection__item-container--align-right { align-items: flex-end } .tox .tox-collection__item-container--column.tox-collection__item-container--valign-top { align-self: flex-start } .tox .tox-collection__item-container--column.tox-collection__item-container--valign-middle { align-self: center } .tox .tox-collection__item-container--column.tox-collection__item-container--valign-bottom { align-self: flex-end } .tox:not([dir=rtl]) .tox-collection--horizontal .tox-collection__group:not(:last-of-type) { border-right: 1px solid rgba(0, 0, 0, .1) } .tox:not([dir=rtl]) .tox-collection--list .tox-collection__item>:not(:first-child) { margin-left: 8px } .tox:not([dir=rtl]) .tox-collection--list .tox-collection__item>.tox-collection__item-label:first-child { margin-left: 4px } .tox:not([dir=rtl]) .tox-collection__item-accessory { margin-left: 16px; text-align: right } .tox:not([dir=rtl]) .tox-collection .tox-collection__item-caret { margin-left: 16px } .tox[dir=rtl] .tox-collection--horizontal .tox-collection__group:not(:last-of-type) { border-left: 1px solid rgba(0, 0, 0, .1) } .tox[dir=rtl] .tox-collection--list .tox-collection__item>:not(:first-child) { margin-right: 8px } .tox[dir=rtl] .tox-collection--list .tox-collection__item>.tox-collection__item-label:first-child { margin-right: 4px } .tox[dir=rtl] .tox-collection__item-accessory { margin-right: 16px; text-align: left } .tox[dir=rtl] .tox-collection .tox-collection__item-caret { margin-right: 16px; transform: rotateY(180deg) } .tox[dir=rtl] .tox-collection--horizontal .tox-collection__item-caret { margin-right: 4px } @media (forced-colors:active) { .tox .tox-hue-slider, .tox .tox-rgb-form .tox-rgba-preview { background-color: currentColor !important; border: 1px solid highlight !important; forced-color-adjust: none } } .tox .tox-color-picker-container { display: flex; flex-direction: row; height: 225px; margin: 0 } .tox .tox-sv-palette { box-sizing: border-box; display: flex; height: 100% } .tox .tox-sv-palette-spectrum { height: 100% } .tox .tox-sv-palette, .tox .tox-sv-palette-spectrum { width: 225px } .tox .tox-sv-palette-thumb { background: 0 0; border: 1px solid #000; border-radius: 50%; box-sizing: content-box; height: 12px; position: absolute; width: 12px } .tox .tox-sv-palette-inner-thumb { border: 1px solid #fff; border-radius: 50%; height: 10px; position: absolute; width: 10px } .tox .tox-hue-slider { box-sizing: border-box; height: 100%; width: 25px } .tox .tox-hue-slider-spectrum { background: linear-gradient(to bottom, red, #ff0080, #f0f, #8000ff, #00f, #0080ff, #0ff, #00ff80, #0f0, #80ff00, #ff0, #ff8000, red); height: 100%; width: 100% } .tox .tox-hue-slider, .tox .tox-hue-slider-spectrum { width: 20px } .tox .tox-hue-slider-spectrum:focus, .tox .tox-sv-palette-spectrum:focus { outline: #08f solid } .tox .tox-hue-slider-thumb { background: #fff; border: 1px solid #000; box-sizing: content-box; height: 4px; width: 100% } .tox .tox-rgb-form { display: flex; flex-direction: column; justify-content: space-between } .tox .tox-rgb-form div { align-items: center; display: flex; justify-content: space-between; margin-bottom: 5px; width: inherit } .tox .tox-rgb-form input { width: 6em } .tox .tox-rgb-form input.tox-invalid { border: 1px solid red !important } .tox .tox-rgb-form .tox-rgba-preview { border: 1px solid #000; flex-grow: 2; margin-bottom: 0 } .tox:not([dir=rtl]) .tox-sv-palette { margin-right: 15px } .tox:not([dir=rtl]) .tox-hue-slider { margin-right: 15px } .tox:not([dir=rtl]) .tox-hue-slider-thumb { margin-left: -1px } .tox:not([dir=rtl]) .tox-rgb-form label { margin-right: .5em } .tox[dir=rtl] .tox-sv-palette { margin-left: 15px } .tox[dir=rtl] .tox-hue-slider { margin-left: 15px } .tox[dir=rtl] .tox-hue-slider-thumb { margin-right: -1px } .tox[dir=rtl] .tox-rgb-form label { margin-left: .5em } .tox .tox-toolbar .tox-swatches, .tox .tox-toolbar__overflow .tox-swatches, .tox .tox-toolbar__primary .tox-swatches { margin: 0 0 1 16px } .tox .tox-collection--list .tox-collection__group .tox-swatches-menu { border: 0; margin: -4px -4px } .tox .tox-swatches__row { display: flex } @media (forced-colors:active) { .tox .tox-swatches__row { forced-color-adjust: none } } .tox .tox-swatch { height: 24px; transition: transform .15s, box-shadow .15s; width: 24px } .tox .tox-swatch:focus, .tox .tox-swatch:hover { box-shadow: 0 0 0 1px rgba(127, 127, 127, .3) inset; transform: scale(.8) } .tox .tox-swatch--remove { align-items: center; display: flex; justify-content: center } .tox .tox-swatch--remove svg path { stroke: #e74c3c } .tox .tox-swatches__picker-btn { align-items: center; background-color: transparent; border: 0; cursor: pointer; display: flex; height: 24px; justify-content: center; outline: 0; padding: 0; width: 24px } .tox .tox-swatches__picker-btn svg { fill: #222f3e; height: 24px; width: 24px } .tox .tox-swatches__picker-btn:hover { background: rgba(43, 160, 255, .15) } .tox div.tox-swatch:not(.tox-swatch--remove) svg { display: none; fill: #222f3e; height: 24px; margin: calc((24px - 24px)/ 2) calc((24px - 24px)/ 2); width: 24px } .tox div.tox-swatch:not(.tox-swatch--remove) svg path { fill: #fff; paint-order: stroke; stroke: #222f3e; stroke-width: 2px } .tox div.tox-swatch:not(.tox-swatch--remove).tox-collection__item--enabled svg { display: block } .tox:not([dir=rtl]) .tox-swatches__picker-btn { margin-left: auto } .tox[dir=rtl] .tox-swatches__picker-btn { margin-right: auto } .tox .tox-comment-thread { background: #fff; position: relative } .tox .tox-comment-thread>:not(:first-child) { margin-top: 8px } .tox .tox-comment { background: #fff; border: 1px solid rgba(0, 0, 0, .1); border-radius: 3px; box-shadow: 0 4px 8px 0 rgba(34, 47, 62, .1); padding: 8px 8px 16px 8px; position: relative } .tox .tox-comment__header { align-items: center; color: #222f3e; display: flex; justify-content: space-between } .tox .tox-comment__date { color: #222f3e; font-size: 12px; line-height: 18px } .tox .tox-comment__body { color: #222f3e; font-size: 13.125px; font-style: normal; font-weight: 400; line-height: 1.3; margin-top: 8px; position: relative; text-transform: initial } .tox .tox-comment__body textarea { resize: none; white-space: normal; width: 100% } .tox .tox-comment__expander { padding-top: 8px } .tox .tox-comment__expander p { color: rgba(34, 47, 62, .5); font-size: 13.125px; font-style: normal } .tox .tox-comment__body p { margin: 0 } .tox .tox-comment__buttonspacing { padding-top: 16px; text-align: center } .tox .tox-comment-thread__overlay::after { background: #fff; bottom: 0; content: \\\"\\\"; display: flex; left: 0; opacity: .9; position: absolute; right: 0; top: 0; z-index: 5 } .tox .tox-comment__reply { display: flex; flex-shrink: 0; flex-wrap: wrap; justify-content: flex-end; margin-top: 8px } .tox .tox-comment__reply>:first-child { margin-bottom: 8px; width: 100% } .tox .tox-comment__edit { display: flex; flex-wrap: wrap; justify-content: flex-end; margin-top: 16px } .tox .tox-comment__gradient::after { background: linear-gradient(rgba(255, 255, 255, 0), #fff); bottom: 0; content: \\\"\\\"; display: block; height: 5em; margin-top: -40px; position: absolute; width: 100% } .tox .tox-comment__overlay { background: #fff; bottom: 0; display: flex; flex-direction: column; flex-grow: 1; left: 0; opacity: .9; position: absolute; right: 0; text-align: center; top: 0; z-index: 5 } .tox .tox-comment__loading-text { align-items: center; color: #222f3e; display: flex; flex-direction: column; position: relative } .tox .tox-comment__loading-text>div { padding-bottom: 16px } .tox .tox-comment__overlaytext { bottom: 0; flex-direction: column; font-size: 13.125px; left: 0; padding: 1em; position: absolute; right: 0; top: 0; z-index: 10 } .tox .tox-comment__overlaytext p { background-color: #fff; box-shadow: 0 0 8px 8px #fff; color: #222f3e; text-align: center } .tox .tox-comment__overlaytext div:nth-of-type(2) { font-size: .8em } .tox .tox-comment__busy-spinner { align-items: center; background-color: #fff; bottom: 0; display: flex; justify-content: center; left: 0; position: absolute; right: 0; top: 0; z-index: 20 } .tox .tox-comment__scroll { display: flex; flex-direction: column; flex-shrink: 1; overflow: auto } .tox .tox-conversations { margin: 8px } .tox:not([dir=rtl]) .tox-comment__edit { margin-left: 8px } .tox:not([dir=rtl]) .tox-comment__buttonspacing>:last-child, .tox:not([dir=rtl]) .tox-comment__edit>:last-child, .tox:not([dir=rtl]) .tox-comment__reply>:last-child { margin-left: 8px } .tox[dir=rtl] .tox-comment__edit { margin-right: 8px } .tox[dir=rtl] .tox-comment__buttonspacing>:last-child, .tox[dir=rtl] .tox-comment__edit>:last-child, .tox[dir=rtl] .tox-comment__reply>:last-child { margin-right: 8px } .tox .tox-user { align-items: center; display: flex } .tox .tox-user__avatar svg { fill: rgba(34, 47, 62, 0.5) } .tox .tox-user__avatar img { border-radius: 50%; height: 36px; object-fit: cover; vertical-align: middle; width: 36px } .tox .tox-user__name { color: #222f3e; font-size: 13.125px; font-style: normal; font-weight: 700; line-height: 18px; text-transform: none } .tox:not([dir=rtl]) .tox-user__avatar img, .tox:not([dir=rtl]) .tox-user__avatar svg { margin-right: 8px } .tox:not([dir=rtl]) .tox-user__avatar+.tox-user__name { margin-left: 8px } .tox[dir=rtl] .tox-user__avatar img, .tox[dir=rtl] .tox-user__avatar svg { margin-left: 8px } .tox[dir=rtl] .tox-user__avatar+.tox-user__name { margin-right: 8px } .tox .tox-dialog-wrap { align-items: center; bottom: 0; display: flex; justify-content: center; left: 0; position: fixed; right: 0; top: 0; z-index: 1100 } .tox .tox-dialog-wrap__backdrop { background-color: transparent; bottom: 0; left: 0; position: absolute; right: 0; top: 0; z-index: 1 } .tox .tox-dialog-wrap__backdrop--opaque { background-color: #fff } .tox .tox-dialog { background-color: #fff; border-color: #efefef; border-radius: 8px; border-style: solid; border-width: 1px; box-shadow: 0 4px 3px -2px rgba(34, 47, 62, .2), 0 0 20px 0 rgba(34, 47, 62, .1); display: flex; flex-direction: column; max-height: 100%; max-width: 480px; overflow: hidden; position: relative; width: 95vw; z-index: 2 } @media only screen and (max-width: 767px) { body:not(.tox-force-desktop) .tox .tox-dialog { align-self: flex-start; margin: 8px auto; max-height: calc(100vh - 8px * 2); width: calc(100vw - 16px) } } .tox .tox-dialog-inline { z-index: 1100 } .tox .tox-dialog__header { align-items: center; background-color: #fff; border-bottom: none; color: #222f3e; display: flex; font-size: 15px; justify-content: space-between; padding: 8px 16px 0 16px; position: relative } .tox .tox-dialog__header .tox-button { z-index: 1 } .tox .tox-dialog__draghandle { cursor: grab; height: 100%; left: 0; position: absolute; top: 0; width: 100% } .tox .tox-dialog__draghandle:active { cursor: grabbing } .tox .tox-dialog__dismiss { margin-left: auto } .tox .tox-dialog__title { font-family: -apple-system, BlinkMacSystemFont, \\\"Segoe UI\\\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \\\"Helvetica Neue\\\", sans-serif; font-size: 18px; font-style: normal; font-weight: 400; line-height: 1.3; margin: 0; text-transform: none } .tox .tox-dialog__body { color: #222f3e; display: flex; flex: 1; font-size: 15px; font-style: normal; font-weight: 400; line-height: 1.3; min-width: 0; text-align: left; text-transform: none } @media only screen and (max-width: 767px) { body:not(.tox-force-desktop) .tox .tox-dialog__body { flex-direction: column } } .tox .tox-dialog__body-nav { align-items: flex-start; display: flex; flex-direction: column; flex-shrink: 0; padding: 16px 16px } @media only screen and (min-width: 768px) { .tox .tox-dialog__body-nav { max-width: 11em } } @media only screen and (max-width: 767px) { body:not(.tox-force-desktop) .tox .tox-dialog__body-nav { flex-direction: row; -webkit-overflow-scrolling: touch; overflow-x: auto; padding-bottom: 0 } } .tox .tox-dialog__body-nav-item { border-bottom: 2px solid transparent; color: rgba(34, 47, 62, .5); display: inline-block; flex-shrink: 0; font-size: 13.125px; line-height: 1.3; margin-bottom: 8px; max-width: 13em; text-decoration: none } .tox .tox-dialog__body-nav-item:focus { background-color: rgba(43, 160, 255, .1) } .tox .tox-dialog__body-nav-item--active { border-bottom: 2px solid #2ba0ff; color: #2ba0ff } @media (forced-colors:active) { .tox .tox-dialog__body-nav-item--active { border-bottom: 2px solid highlight; color: highlight } } .tox .tox-dialog__body-content { box-sizing: border-box; display: flex; flex: 1; flex-direction: column; max-height: min(650px, calc(100vh - 110px)); overflow: auto; -webkit-overflow-scrolling: touch; padding: 16px 16px } .tox .tox-dialog__body-content>* { margin-bottom: 0; margin-top: 16px } .tox .tox-dialog__body-content>:first-child { margin-top: 0 } .tox .tox-dialog__body-content>:last-child { margin-bottom: 0 } .tox .tox-dialog__body-content>:only-child { margin-bottom: 0; margin-top: 0 } .tox .tox-dialog__body-content a { color: #2ba0ff; cursor: pointer; text-decoration: underline } .tox .tox-dialog__body-content a:focus, .tox .tox-dialog__body-content a:hover { color: #006cc4; text-decoration: underline } .tox .tox-dialog__body-content a:focus-visible { border-radius: 1px; outline: 2px solid #2ba0ff; outline-offset: 2px } .tox .tox-dialog__body-content a:active { color: #005091; text-decoration: underline } .tox .tox-dialog__body-content svg { fill: #222f3e } .tox .tox-dialog__body-content strong { font-weight: 700 } .tox .tox-dialog__body-content ul { list-style-type: disc } .tox .tox-dialog__body-content dd, .tox .tox-dialog__body-content ol, .tox .tox-dialog__body-content ul { -webkit-padding-start: 2.5rem; -moz-padding-start: 2.5rem; padding-inline-start: 2.5rem } .tox .tox-dialog__body-content dl, .tox .tox-dialog__body-content ol, .tox .tox-dialog__body-content ul { margin-bottom: 16px } .tox .tox-dialog__body-content dd, .tox .tox-dialog__body-content dl, .tox .tox-dialog__body-content dt, .tox .tox-dialog__body-content ol, .tox .tox-dialog__body-content ul { display: block; -webkit-margin-end: 0; -moz-margin-end: 0; margin-inline-end: 0; -webkit-margin-start: 0; -moz-margin-start: 0; margin-inline-start: 0 } .tox .tox-dialog__body-content .tox-form__group h1 { color: #222f3e; font-size: 18px; font-style: normal; font-weight: 700; letter-spacing: normal; margin-bottom: 16px; margin-top: 2rem; text-transform: none } .tox .tox-dialog__body-content .tox-form__group h2 { color: #222f3e; font-size: 15px; font-style: normal; font-weight: 700; letter-spacing: normal; margin-bottom: 16px; margin-top: 2rem; text-transform: none } .tox .tox-dialog__body-content .tox-form__group p { margin-bottom: 16px } .tox .tox-dialog__body-content .tox-form__group h1:first-child, .tox .tox-dialog__body-content .tox-form__group h2:first-child, .tox .tox-dialog__body-content .tox-form__group p:first-child { margin-top: 0 } .tox .tox-dialog__body-content .tox-form__group h1:last-child, .tox .tox-dialog__body-content .tox-form__group h2:last-child, .tox .tox-dialog__body-content .tox-form__group p:last-child { margin-bottom: 0 } .tox .tox-dialog__body-content .tox-form__group h1:only-child, .tox .tox-dialog__body-content .tox-form__group h2:only-child, .tox .tox-dialog__body-content .tox-form__group p:only-child { margin-bottom: 0; margin-top: 0 } .tox .tox-dialog__body-content .tox-form__group .tox-label.tox-label--center { text-align: center } .tox .tox-dialog__body-content .tox-form__group .tox-label.tox-label--end { text-align: end } .tox .tox-dialog--width-lg { height: 650px; max-width: 1200px } .tox .tox-dialog--fullscreen { height: 100%; max-width: 100% } .tox .tox-dialog--fullscreen .tox-dialog__body-content { max-height: 100% } .tox .tox-dialog--width-md { max-width: 800px } .tox .tox-dialog--width-md .tox-dialog__body-content { overflow: auto } .tox .tox-dialog__body-content--centered { text-align: center } .tox .tox-dialog__footer { align-items: center; background-color: #fff; border-top: 1px solid #efefef; display: flex; justify-content: space-between; padding: 8px 16px } .tox .tox-dialog__footer-end, .tox .tox-dialog__footer-start { display: flex } .tox .tox-dialog__busy-spinner { align-items: center; background-color: transparent; bottom: 0; display: flex; justify-content: center; left: 0; position: absolute; right: 0; top: 0; z-index: 3 } .tox .tox-dialog__table { border-collapse: collapse; width: 100% } .tox .tox-dialog__table thead th { font-weight: 700; padding-bottom: 8px } .tox .tox-dialog__table thead th:first-child { padding-right: 8px } .tox .tox-dialog__table tbody tr { border-bottom: 1px solid rgba(0, 0, 0, .1) } .tox .tox-dialog__table tbody tr:last-child { border-bottom: none } .tox .tox-dialog__table td { padding-bottom: 8px; padding-top: 8px } .tox .tox-dialog__table td:first-child { padding-right: 8px } .tox .tox-dialog__iframe { min-height: 200px } .tox .tox-dialog__iframe.tox-dialog__iframe--opaque { background: 0 0 } .tox .tox-navobj-bordered { position: relative } .tox .tox-navobj-bordered::before { border: 1px solid rgba(0, 0, 0, .1); border-radius: 3px; content: ''; inset: 0; opacity: 1; pointer-events: none; position: absolute; z-index: 1 } .tox .tox-navobj-bordered iframe { border-radius: 3px } .tox .tox-navobj-bordered-focus.tox-navobj-bordered::before { border-color: rgba(0, 0, 0, .1); box-shadow: none; outline: 2px solid rgba(43, 160, 255, .25) } .tox .tox-dialog__popups { position: absolute; width: 100%; z-index: 1100 } .tox .tox-dialog__body-iframe { display: flex; flex: 1; flex-direction: column } .tox .tox-dialog__body-iframe .tox-navobj { display: flex; flex: 1 } .tox .tox-dialog__body-iframe .tox-navobj :nth-child(2) { flex: 1; height: 100% } .tox .tox-dialog-dock-fadeout { opacity: 0; visibility: hidden } .tox .tox-dialog-dock-fadein { opacity: 1; visibility: visible } .tox .tox-dialog-dock-transition { transition: visibility 0s linear .3s, opacity .3s ease } .tox .tox-dialog-dock-transition.tox-dialog-dock-fadein { transition-delay: 0s } @media only screen and (max-width: 767px) { body:not(.tox-force-desktop) .tox:not([dir=rtl]) .tox-dialog__body-nav { margin-right: 0 } } @media only screen and (max-width: 767px) { body:not(.tox-force-desktop) .tox:not([dir=rtl]) .tox-dialog__body-nav-item:not(:first-child) { margin-left: 8px } } .tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-end>*, .tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-start>* { margin-left: 8px } .tox[dir=rtl] .tox-dialog__body { text-align: right } @media only screen and (max-width: 767px) { body:not(.tox-force-desktop) .tox[dir=rtl] .tox-dialog__body-nav { margin-left: 0 } } @media only screen and (max-width: 767px) { body:not(.tox-force-desktop) .tox[dir=rtl] .tox-dialog__body-nav-item:not(:first-child) { margin-right: 8px } } .tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-end>*, .tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-start>* { margin-right: 8px } body.tox-dialog__disable-scroll { overflow: hidden } .tox .tox-dropzone-container { display: flex; flex: 1 } .tox .tox-dropzone { align-items: center; background: #fff; border: 2px dashed rgba(0, 0, 0, .1); box-sizing: border-box; display: flex; flex-direction: column; flex-grow: 1; justify-content: center; min-height: 100px; padding: 10px } .tox .tox-dropzone p { color: rgba(34, 47, 62, .5); margin: 0 0 16px 0 } .tox .tox-edit-area { display: flex; flex: 1; overflow: hidden; position: relative } .tox .tox-edit-area::before { border: 0 solid transparent; border-radius: 4px; content: ''; inset: 0; opacity: 0; pointer-events: none; position: absolute; transition: opacity .15s; z-index: 1 } @media (forced-colors:active) { .tox .tox-edit-area::before { border: 0 solid highlight } } .tox .tox-edit-area__iframe { background-color: transparent; border: 0; box-sizing: border-box; flex: 1; height: 100%; position: absolute; width: 100% } .tox.tox-edit-focus .tox-edit-area::before { opacity: 1 } .tox.tox-inline-edit-area { border: 1px dotted rgba(0, 0, 0, .1) } .tox .tox-editor-container { display: flex; flex: 1 1 auto; flex-direction: column; overflow: hidden } .tox .tox-editor-header { display: grid; grid-template-columns: 1fr min-content; z-index: 2 } .tox:not(.tox-tinymce-inline) .tox-editor-header { background-color: #fff; border-bottom: none; box-shadow: none; padding: 4px 0 } .tox:not(.tox-tinymce-inline) .tox-editor-header:not(.tox-editor-dock-transition) { transition: box-shadow .5s } .tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-bottom .tox-editor-header { border-top: 1px solid rgba(0, 0, 0, .1); box-shadow: none } .tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-sticky-on .tox-editor-header { background-color: #fff; box-shadow: 0 4px 4px -3px rgba(0, 0, 0, .25); padding: 4px 0 } .tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-sticky-on.tox-tinymce--toolbar-bottom .tox-editor-header { box-shadow: 0 4px 4px -3px rgba(0, 0, 0, .25) } .tox.tox:not(.tox-tinymce-inline) .tox-editor-header.tox-editor-header--empty { background: 0 0; border: none; box-shadow: none; padding: 0 } .tox-editor-dock-fadeout { opacity: 0; visibility: hidden } .tox-editor-dock-fadein { opacity: 1; visibility: visible } .tox-editor-dock-transition { transition: visibility 0s linear .25s, opacity .25s ease } .tox-editor-dock-transition.tox-editor-dock-fadein { transition-delay: 0s } .tox .tox-control-wrap { flex: 1; position: relative } .tox .tox-control-wrap:not(.tox-control-wrap--status-invalid) .tox-control-wrap__status-icon-invalid, .tox .tox-control-wrap:not(.tox-control-wrap--status-unknown) .tox-control-wrap__status-icon-unknown, .tox .tox-control-wrap:not(.tox-control-wrap--status-valid) .tox-control-wrap__status-icon-valid { display: none } .tox .tox-control-wrap svg { display: block } .tox .tox-control-wrap__status-icon-wrap { position: absolute; top: 50%; transform: translateY(-50%) } .tox .tox-control-wrap__status-icon-invalid svg { fill: #c00 } .tox .tox-control-wrap__status-icon-unknown svg { fill: orange } .tox .tox-control-wrap__status-icon-valid svg { fill: green } .tox:not([dir=rtl]) .tox-control-wrap--status-invalid .tox-textfield, .tox:not([dir=rtl]) .tox-control-wrap--status-unknown .tox-textfield, .tox:not([dir=rtl]) .tox-control-wrap--status-valid .tox-textfield { padding-right: 32px } .tox:not([dir=rtl]) .tox-control-wrap__status-icon-wrap { right: 4px } .tox[dir=rtl] .tox-control-wrap--status-invalid .tox-textfield, .tox[dir=rtl] .tox-control-wrap--status-unknown .tox-textfield, .tox[dir=rtl] .tox-control-wrap--status-valid .tox-textfield { padding-left: 32px } .tox[dir=rtl] .tox-control-wrap__status-icon-wrap { left: 4px } .tox .tox-custom-preview { border-color: rgba(0, 0, 0, .1); border-radius: 3px; border-style: solid; border-width: 1px; flex: 1; padding: 8px } .tox .tox-autocompleter { max-width: 25em } .tox .tox-autocompleter .tox-menu { box-sizing: border-box; max-width: 25em } .tox .tox-autocompleter .tox-autocompleter-highlight { font-weight: 700 } .tox .tox-color-input { display: flex; position: relative; z-index: 1 } .tox .tox-color-input .tox-textfield { z-index: -1 } .tox .tox-color-input span { border-color: rgba(34, 47, 62, .2); border-radius: 3px; border-style: solid; border-width: 1px; box-shadow: none; box-sizing: border-box; height: 24px; position: absolute; top: 6px; width: 24px } @media (forced-colors:active) { .tox .tox-color-input span { border-color: currentColor; border-width: 2px !important; forced-color-adjust: none } } .tox .tox-color-input span:focus:not([aria-disabled=true]), .tox .tox-color-input span:hover:not([aria-disabled=true]) { border-color: #2ba0ff; cursor: pointer } .tox .tox-color-input span::before { background-image: linear-gradient(45deg, rgba(0, 0, 0, .25) 25%, transparent 25%), linear-gradient(-45deg, rgba(0, 0, 0, .25) 25%, transparent 25%), linear-gradient(45deg, transparent 75%, rgba(0, 0, 0, .25) 75%), linear-gradient(-45deg, transparent 75%, rgba(0, 0, 0, .25) 75%); background-position: 0 0, 0 6px, 6px -6px, -6px 0; background-size: 12px 12px; border: 1px solid #fff; border-radius: 3px; box-sizing: border-box; content: ''; height: 24px; left: -1px; position: absolute; top: -1px; width: 24px; z-index: -1 } @media (forced-colors:active) { .tox .tox-color-input span::before { border: none } } .tox .tox-color-input span[aria-disabled=true] { cursor: not-allowed } .tox:not([dir=rtl]) .tox-color-input .tox-textfield { padding-left: 36px } .tox:not([dir=rtl]) .tox-color-input span { left: 6px } .tox[dir=rtl] .tox-color-input .tox-textfield { padding-right: 36px } .tox[dir=rtl] .tox-color-input span { right: 6px } .tox .tox-label, .tox .tox-toolbar-label { color: rgba(34, 47, 62, .5); display: block; font-size: 13.125px; font-style: normal; font-weight: 400; line-height: 1.3; padding: 0 8px 0 0; text-transform: none; white-space: nowrap } .tox .tox-toolbar-label { padding: 0 8px } .tox[dir=rtl] .tox-label { padding: 0 0 0 8px } .tox .tox-form { display: flex; flex: 1; flex-direction: column } .tox .tox-form__group { box-sizing: border-box; margin-bottom: 4px } .tox .tox-form-group--maximize { flex: 1 } .tox .tox-form__group--error { color: #c00 } .tox .tox-form__group--collection { display: flex } .tox .tox-form__grid { display: flex; flex-direction: row; flex-wrap: wrap; justify-content: space-between } .tox .tox-form__grid--2col>.tox-form__group { width: calc(50% - (8px / 2)) } .tox .tox-form__grid--3col>.tox-form__group { width: calc(100% / 3 - (8px / 2)) } .tox .tox-form__grid--4col>.tox-form__group { width: calc(25% - (8px / 2)) } .tox .tox-form__controls-h-stack { align-items: center; display: flex } .tox .tox-form__group--inline { align-items: center; display: flex } .tox .tox-form__group--stretched { display: flex; flex: 1; flex-direction: column } .tox .tox-form__group--stretched .tox-textarea { flex: 1 } .tox .tox-form__group--stretched .tox-navobj { display: flex; flex: 1 } .tox .tox-form__group--stretched .tox-navobj :nth-child(2) { flex: 1; height: 100% } .tox:not([dir=rtl]) .tox-form__controls-h-stack>:not(:first-child) { margin-left: 4px } .tox[dir=rtl] .tox-form__controls-h-stack>:not(:first-child) { margin-right: 4px } .tox .tox-lock.tox-locked .tox-lock-icon__unlock, .tox .tox-lock:not(.tox-locked) .tox-lock-icon__lock { display: none } .tox .tox-listboxfield .tox-listbox--select, .tox .tox-textarea, .tox .tox-textarea-wrap .tox-textarea:focus, .tox .tox-textfield, .tox .tox-toolbar-textfield { -webkit-appearance: none; -moz-appearance: none; appearance: none; background-color: #fff; border-color: rgba(0, 0, 0, .1); border-radius: 3px; border-style: solid; border-width: 1px; box-shadow: none; box-sizing: border-box; color: #222f3e; font-family: -apple-system, BlinkMacSystemFont, \\\"Segoe UI\\\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \\\"Helvetica Neue\\\", sans-serif; font-size: 15px; line-height: 24px; margin: 0; min-height: 34px; outline: 0; padding: 5px 4.75px; resize: none; width: 100% } .tox .tox-textarea[disabled], .tox .tox-textfield[disabled] { background-color: #f2f2f2; color: rgba(34, 47, 62, .85); cursor: not-allowed } .tox .tox-custom-editor:focus-within, .tox .tox-listboxfield .tox-listbox--select:focus, .tox .tox-textarea-wrap:focus-within, .tox .tox-textarea:focus, .tox .tox-textfield:focus { background-color: #fff; border-color: rgba(0, 0, 0, .1); box-shadow: none; outline: 2px solid rgba(43, 160, 255, .25) } .tox .tox-toolbar-textfield { border-width: 0; margin-bottom: 3px; margin-top: 2px; max-width: 250px } .tox .tox-naked-btn { background-color: transparent; border: 0; border-color: transparent; box-shadow: unset; color: #2ba0ff; cursor: pointer; display: block; margin: 0; padding: 0 } .tox .tox-naked-btn svg { display: block; fill: #222f3e } .tox:not([dir=rtl]) .tox-toolbar-textfield+* { margin-left: 4px } .tox[dir=rtl] .tox-toolbar-textfield+* { margin-right: 4px } .tox .tox-listboxfield { cursor: pointer; position: relative } .tox .tox-listboxfield .tox-listbox--select[disabled] { background-color: #f2f2f2; color: rgba(34, 47, 62, .85); cursor: not-allowed } .tox .tox-listbox__select-label { cursor: default; flex: 1; margin: 0 4px } .tox .tox-listbox__select-chevron { align-items: center; display: flex; justify-content: center; width: 16px } .tox .tox-listbox__select-chevron svg { fill: #222f3e } @media (forced-colors:active) { .tox .tox-listbox__select-chevron svg { fill: currentColor !important } } .tox .tox-listboxfield .tox-listbox--select { align-items: center; display: flex } .tox:not([dir=rtl]) .tox-listboxfield svg { right: 8px } .tox[dir=rtl] .tox-listboxfield svg { left: 8px } .tox .tox-selectfield { cursor: pointer; position: relative } .tox .tox-selectfield select { -webkit-appearance: none; -moz-appearance: none; appearance: none; background-color: #fff; border-color: rgba(0, 0, 0, .1); border-radius: 3px; border-style: solid; border-width: 1px; box-shadow: none; box-sizing: border-box; color: #222f3e; font-family: -apple-system, BlinkMacSystemFont, \\\"Segoe UI\\\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \\\"Helvetica Neue\\\", sans-serif; font-size: 15px; line-height: 24px; margin: 0; min-height: 34px; outline: 0; padding: 5px 4.75px; resize: none; width: 100% } .tox .tox-selectfield select[disabled] { background-color: #f2f2f2; color: rgba(34, 47, 62, .85); cursor: not-allowed } .tox .tox-selectfield select::-ms-expand { display: none } .tox .tox-selectfield select:focus { background-color: #fff; border-color: rgba(0, 0, 0, .1); box-shadow: none; outline: 2px solid rgba(43, 160, 255, .25) } .tox .tox-selectfield svg { pointer-events: none; position: absolute; top: 50%; transform: translateY(-50%) } .tox:not([dir=rtl]) .tox-selectfield select[size=\\\"0\\\"], .tox:not([dir=rtl]) .tox-selectfield select[size=\\\"1\\\"] { padding-right: 24px } .tox:not([dir=rtl]) .tox-selectfield svg { right: 8px } .tox[dir=rtl] .tox-selectfield select[size=\\\"0\\\"], .tox[dir=rtl] .tox-selectfield select[size=\\\"1\\\"] { padding-left: 24px } .tox[dir=rtl] .tox-selectfield svg { left: 8px } .tox .tox-textarea-wrap { border-color: rgba(0, 0, 0, .1); border-radius: 3px; border-style: solid; border-width: 1px; display: flex; flex: 1; overflow: hidden } .tox .tox-textarea { appearance: textarea; white-space: pre-wrap } .tox .tox-textarea-wrap .tox-textarea { border: none } .tox .tox-textarea-wrap .tox-textarea:focus { border: none } .tox-fullscreen { border: 0; height: 100%; margin: 0; overflow: hidden; overscroll-behavior: none; padding: 0; touch-action: pinch-zoom; width: 100% } .tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle { display: none } .tox-shadowhost.tox-fullscreen, .tox.tox-tinymce.tox-fullscreen { left: 0; position: fixed; top: 0; z-index: 1200 } .tox.tox-tinymce.tox-fullscreen { background-color: #fff } .tox-fullscreen .tox.tox-tinymce-aux, .tox-fullscreen~.tox.tox-tinymce-aux { z-index: 1201 } .tox .tox-help__more-link { list-style: none; margin-top: 1em } .tox .tox-imagepreview { background-color: #666; height: 380px; overflow: hidden; position: relative; width: 100% } .tox .tox-imagepreview.tox-imagepreview__loaded { overflow: auto } .tox .tox-imagepreview__container { display: flex; left: 100vw; position: absolute; top: 100vw } .tox .tox-imagepreview__image { background: url(data:image/gif;base64,R0lGODdhDAAMAIABAMzMzP///ywAAAAADAAMAAACFoQfqYeabNyDMkBQb81Uat85nxguUAEAOw==) } .tox .tox-image-tools .tox-spacer { flex: 1 } .tox .tox-image-tools .tox-bar { align-items: center; display: flex; height: 60px; justify-content: center } .tox .tox-image-tools .tox-imagepreview, .tox .tox-image-tools .tox-imagepreview+.tox-bar { margin-top: 8px } .tox .tox-image-tools .tox-croprect-block { background: #000; opacity: .5; position: absolute; zoom: 1 } .tox .tox-image-tools .tox-croprect-handle { border: 2px solid #fff; height: 20px; left: 0; position: absolute; top: 0; width: 20px } .tox .tox-image-tools .tox-croprect-handle-move { border: 0; cursor: move; position: absolute } .tox .tox-image-tools .tox-croprect-handle-nw { border-width: 2px 0 0 2px; cursor: nw-resize; left: 100px; margin: -2px 0 0 -2px; top: 100px } .tox .tox-image-tools .tox-croprect-handle-ne { border-width: 2px 2px 0 0; cursor: ne-resize; left: 200px; margin: -2px 0 0 -20px; top: 100px } .tox .tox-image-tools .tox-croprect-handle-sw { border-width: 0 0 2px 2px; cursor: sw-resize; left: 100px; margin: -20px 2px 0 -2px; top: 200px } .tox .tox-image-tools .tox-croprect-handle-se { border-width: 0 2px 2px 0; cursor: se-resize; left: 200px; margin: -20px 0 0 -20px; top: 200px } .tox .tox-insert-table-picker { background-color: #fff; display: flex; flex-wrap: wrap; width: 170px } .tox .tox-insert-table-picker>div { border-color: rgba(0, 0, 0, .1); border-style: solid; border-width: 0 1px 1px 0; box-sizing: border-box; height: 17px; width: 17px } .tox .tox-collection--list .tox-collection__group .tox-insert-table-picker { margin: -4px -4px } .tox .tox-insert-table-picker .tox-insert-table-picker__selected { background-color: rgba(43, 160, 255, .5); border-color: rgba(43, 160, 255, .5) } @media (forced-colors:active) { .tox .tox-insert-table-picker .tox-insert-table-picker__selected { border-color: Highlight; -webkit-filter: contrast(50%); filter: contrast(50%) } } .tox .tox-insert-table-picker__label { color: rgba(34, 47, 62, .5); display: block; font-size: 13.125px; padding: 4px; text-align: center; width: 100% } .tox:not([dir=rtl]) .tox-insert-table-picker>div:nth-child(10n) { border-right: 0 } .tox[dir=rtl] .tox-insert-table-picker>div:nth-child(10n+1) { border-right: 0 } .tox .tox-menu { background-color: #fff; border: 1px solid rgba(0, 0, 0, .1); border-radius: 3px; box-shadow: 0 4px 5px -3px rgba(34, 47, 62, .15), 0 0 10px 0 rgba(34, 47, 62, .05); display: inline-block; overflow: hidden; vertical-align: top; z-index: 1150 } .tox .tox-menu.tox-collection.tox-collection--list { padding: 0 4px } .tox .tox-menu.tox-collection.tox-collection--toolbar { padding: 4px } .tox .tox-menu.tox-collection.tox-collection--grid { padding: 4px } @media only screen and (min-width: 768px) { .tox .tox-menu .tox-collection__item-label { overflow-wrap: break-word; word-break: normal } .tox .tox-dialog__popups .tox-menu .tox-collection__item-label { word-break: break-all } } .tox .tox-menu__label blockquote, .tox .tox-menu__label code, .tox .tox-menu__label h1, .tox .tox-menu__label h2, .tox .tox-menu__label h3, .tox .tox-menu__label h4, .tox .tox-menu__label h5, .tox .tox-menu__label h6, .tox .tox-menu__label p { margin: 0 } .tox .tox-menubar { background: 0 0; background-color: transparent; display: flex; flex: 0 0 auto; flex-shrink: 0; flex-wrap: wrap; grid-column: 1/-1; grid-row: 1; padding: 0 16px 0 20px } .tox .tox-promotion+.tox-menubar { grid-column: 1 } .tox .tox-promotion { background: 0 0; background-color: transparent; grid-column: 2; grid-row: 1; -webkit-padding-end: 8px; -moz-padding-end: 8px; padding-inline-end: 8px; -webkit-padding-start: 4px; -moz-padding-start: 4px; padding-inline-start: 4px; padding-top: 5px } .tox .tox-promotion-link { align-items: unsafe center; background-color: #e8f1f8; border-radius: 5px; color: #086be6; cursor: pointer; display: flex; font-size: 12px; height: 22.8px; padding: 4px 8px; white-space: nowrap } .tox .tox-promotion-link:hover { background-color: #b4d7ff } .tox .tox-promotion-link:focus { background-color: #d9edf7 } .tox .tox-mbtn { align-items: center; background: #fff; border: 0; border-radius: 3px; box-shadow: none; color: #57606f; display: flex; flex: 0 0 auto; font-size: 12px; font-style: normal; font-weight: 500; height: 26px; justify-content: center; margin: 8px 4px 9px 0; outline: 0; padding: 0 4px; text-transform: none; width: auto } .tox .tox-mbtn[disabled] { background-color: #fff; border: 0; box-shadow: none; color: rgba(87, 96, 111, .5); cursor: not-allowed } .tox .tox-mbtn:focus:not(:disabled) { background: rgba(43, 160, 255, .15); border: 0; box-shadow: none; color: #57606f; position: relative; z-index: 1 } .tox .tox-mbtn:focus:not(:disabled)::after { border-radius: 3px; bottom: 0; box-shadow: 0 0 0 0 transparent; content: ''; left: 0; position: absolute; right: 0; top: 0 } @media (forced-colors:active) { .tox .tox-mbtn:focus:not(:disabled)::after { border: 2px solid highlight } } .tox .tox-mbtn--active, .tox .tox-mbtn:not(:disabled).tox-mbtn--active:focus { background: 0 0; border: 0; box-shadow: none; color: #2ba0ff } .tox .tox-mbtn:hover:not(:disabled):not(.tox-mbtn--active) { background: rgba(43, 160, 255, .15); border: 0; box-shadow: none; color: #57606f } .tox .tox-mbtn__select-label { cursor: default; font-weight: 500; margin: 0 4px } .tox .tox-mbtn[disabled] .tox-mbtn__select-label { cursor: not-allowed } .tox .tox-mbtn__select-chevron { align-items: center; display: flex; justify-content: center; width: 16px; display: none } .tox .tox-notification { border-radius: 3px; border-style: solid; border-width: 1px; box-shadow: none; box-sizing: border-box; display: grid; font-size: 13.125px; font-weight: 400; grid-template-columns: minmax(40px, 1fr) auto minmax(40px, 1fr); margin-left: auto; margin-right: auto; margin-top: 4px; opacity: 0; padding: 4px; transition: transform .1s ease-in, opacity 150ms ease-in; width: -webkit-max-content; width: -moz-max-content; width: max-content } .tox .tox-notification a { cursor: pointer; text-decoration: underline } .tox .tox-notification p { font-size: 13.125px; font-weight: 400 } .tox .tox-notification:focus { border-color: rgba(0, 0, 0, .1); box-shadow: none } .tox .tox-notification--in { opacity: 1 } .tox .tox-notification--success { background-color: #e4eeda; border-color: #d7e6c8; color: #222f3e } .tox .tox-notification--success p { color: #222f3e } .tox .tox-notification--success a { color: #517342 } .tox .tox-notification--success a:focus, .tox .tox-notification--success a:hover { color: #24321d; text-decoration: underline } .tox .tox-notification--success a:focus-visible { border-radius: 1px; outline: 2px solid #517342; outline-offset: 2px } .tox .tox-notification--success a:active { color: #0d120a; text-decoration: underline } .tox .tox-notification--success svg { fill: #222f3e } .tox .tox-notification--error { background-color: #f5cccc; border-color: #f0b3b3; color: #222f3e } .tox .tox-notification--error p { color: #222f3e } .tox .tox-notification--error a { color: #77181f } .tox .tox-notification--error a:focus, .tox .tox-notification--error a:hover { color: #220709; text-decoration: underline } .tox .tox-notification--error a:focus-visible { border-radius: 1px; outline: 2px solid #77181f; outline-offset: 2px } .tox .tox-notification--error a:active { color: #000; text-decoration: underline } .tox .tox-notification--error svg { fill: #222f3e } .tox .tox-notification--warn, .tox .tox-notification--warning { background-color: #fff5cc; border-color: #fff0b3; color: #222f3e } .tox .tox-notification--warn p, .tox .tox-notification--warning p { color: #222f3e } .tox .tox-notification--warn a, .tox .tox-notification--warning a { color: #7a6e25 } .tox .tox-notification--warn a:focus, .tox .tox-notification--warn a:hover, .tox .tox-notification--warning a:focus, .tox .tox-notification--warning a:hover { color: #2c280d; text-decoration: underline } .tox .tox-notification--warn a:focus-visible, .tox .tox-notification--warning a:focus-visible { border-radius: 1px; outline: 2px solid #7a6e25; outline-offset: 2px } .tox .tox-notification--warn a:active, .tox .tox-notification--warning a:active { color: #050502; text-decoration: underline } .tox .tox-notification--warn svg, .tox .tox-notification--warning svg { fill: #222f3e } .tox .tox-notification--info { background-color: #d6e7fb; border-color: #c1dbf9; color: #222f3e } .tox .tox-notification--info p { color: #222f3e } .tox .tox-notification--info a { color: #2a64a6 } .tox .tox-notification--info a:focus, .tox .tox-notification--info a:hover { color: #163355; text-decoration: underline } .tox .tox-notification--info a:focus-visible { border-radius: 1px; outline: 2px solid #2a64a6; outline-offset: 2px } .tox .tox-notification--info a:active { color: #0b1a2c; text-decoration: underline } .tox .tox-notification--info svg { fill: #222f3e } .tox .tox-notification__body { align-self: center; color: #222f3e; font-size: 14px; grid-column-end: 3; grid-column-start: 2; grid-row-end: 2; grid-row-start: 1; text-align: center; white-space: normal; word-break: break-all; word-break: break-word } .tox .tox-notification__body>* { margin: 0 } .tox .tox-notification__body>*+* { margin-top: 1rem } .tox .tox-notification__icon { align-self: center; grid-column-end: 2; grid-column-start: 1; grid-row-end: 2; grid-row-start: 1; justify-self: end } .tox .tox-notification__icon svg { display: block } .tox .tox-notification__dismiss { align-self: start; grid-column-end: 4; grid-column-start: 3; grid-row-end: 2; grid-row-start: 1; justify-self: end } .tox .tox-notification .tox-progress-bar { grid-column-end: 4; grid-column-start: 1; grid-row-end: 3; grid-row-start: 2; justify-self: center } .tox .tox-notification-container-dock-fadeout { opacity: 0; visibility: hidden } .tox .tox-notification-container-dock-fadein { opacity: 1; visibility: visible } .tox .tox-notification-container-dock-transition { transition: visibility 0s linear .3s, opacity .3s ease } .tox .tox-notification-container-dock-transition.tox-notification-container-dock-fadein { transition-delay: 0s } .tox .tox-pop { display: inline-block; position: relative } .tox .tox-pop--resizing { transition: width .1s ease } .tox .tox-pop--resizing .tox-toolbar, .tox .tox-pop--resizing .tox-toolbar__group { flex-wrap: nowrap } .tox .tox-pop--transition { transition: .15s ease; transition-property: left, right, top, bottom } .tox .tox-pop--transition::after, .tox .tox-pop--transition::before { transition: all .15s, visibility 0s, opacity 75ms ease 75ms } .tox .tox-pop__dialog { background-color: #fff; border: 1px solid rgba(0, 0, 0, .1); border-radius: 3px; box-shadow: 0 0 2px 0 rgba(34, 47, 62, .2), 0 4px 8px 0 rgba(34, 47, 62, .15); min-width: 0; overflow: hidden } .tox .tox-pop__dialog>:not(.tox-toolbar) { margin: 4px 4px 4px 8px } .tox .tox-pop__dialog .tox-toolbar { background-color: transparent; margin-bottom: -1px } .tox .tox-pop::after, .tox .tox-pop::before { border-style: solid; content: ''; display: block; height: 0; opacity: 1; position: absolute; width: 0 } @media (forced-colors:active) { .tox .tox-pop::after, .tox .tox-pop::before { content: none } } .tox .tox-pop.tox-pop--inset::after, .tox .tox-pop.tox-pop--inset::before { opacity: 0; transition: all 0s .15s, visibility 0s, opacity 75ms ease } .tox .tox-pop.tox-pop--bottom::after, .tox .tox-pop.tox-pop--bottom::before { left: 50%; top: 100% } .tox .tox-pop.tox-pop--bottom::after { border-color: #fff transparent transparent transparent; border-width: 8px; margin-left: -8px; margin-top: -1px } .tox .tox-pop.tox-pop--bottom::before { border-color: rgba(0, 0, 0, .1) transparent transparent transparent; border-width: 9px; margin-left: -9px } .tox .tox-pop.tox-pop--top::after, .tox .tox-pop.tox-pop--top::before { left: 50%; top: 0; transform: translateY(-100%) } .tox .tox-pop.tox-pop--top::after { border-color: transparent transparent #fff transparent; border-width: 8px; margin-left: -8px; margin-top: 1px } .tox .tox-pop.tox-pop--top::before { border-color: transparent transparent rgba(0, 0, 0, .1) transparent; border-width: 9px; margin-left: -9px } .tox .tox-pop.tox-pop--left::after, .tox .tox-pop.tox-pop--left::before { left: 0; top: calc(50% - 1px); transform: translateY(-50%) } .tox .tox-pop.tox-pop--left::after { border-color: transparent #fff transparent transparent; border-width: 8px; margin-left: -15px } .tox .tox-pop.tox-pop--left::before { border-color: transparent rgba(0, 0, 0, .1) transparent transparent; border-width: 10px; margin-left: -19px } .tox .tox-pop.tox-pop--right::after, .tox .tox-pop.tox-pop--right::before { left: 100%; top: calc(50% + 1px); transform: translateY(-50%) } .tox .tox-pop.tox-pop--right::after { border-color: transparent transparent transparent #fff; border-width: 8px; margin-left: -1px } .tox .tox-pop.tox-pop--right::before { border-color: transparent transparent transparent rgba(0, 0, 0, .1); border-width: 10px; margin-left: -1px } .tox .tox-pop.tox-pop--align-left::after, .tox .tox-pop.tox-pop--align-left::before { left: 20px } .tox .tox-pop.tox-pop--align-right::after, .tox .tox-pop.tox-pop--align-right::before { left: calc(100% - 20px) } .tox .tox-sidebar-wrap { display: flex; flex-direction: row; flex-grow: 1; min-height: 0 } .tox .tox-sidebar { background-color: #fff; display: flex; flex-direction: row; justify-content: flex-end } .tox .tox-sidebar__slider { display: flex; overflow: hidden } .tox .tox-sidebar__pane-container { display: flex } .tox .tox-sidebar__pane { display: flex } .tox .tox-sidebar--sliding-closed { opacity: 0 } .tox .tox-sidebar--sliding-open { opacity: 1 } .tox .tox-sidebar--sliding-growing, .tox .tox-sidebar--sliding-shrinking { transition: width .5s ease, opacity .5s ease } .tox .tox-selector { background-color: #4099ff; border-color: #4099ff; border-style: solid; border-width: 1px; box-sizing: border-box; display: inline-block; height: 10px; position: absolute; width: 10px } .tox.tox-platform-touch .tox-selector { height: 12px; width: 12px } .tox .tox-slider { align-items: center; display: flex; flex: 1; height: 24px; justify-content: center; position: relative } .tox .tox-slider__rail { background-color: transparent; border: 1px solid rgba(0, 0, 0, .1); border-radius: 3px; height: 10px; min-width: 120px; width: 100% } .tox .tox-slider__handle { background-color: #2ba0ff; border: 2px solid #0088f7; border-radius: 3px; box-shadow: none; height: 24px; left: 50%; position: absolute; top: 50%; transform: translateX(-50%) translateY(-50%); width: 14px } .tox .tox-form__controls-h-stack>.tox-slider:not(:first-of-type) { -webkit-margin-start: 8px; -moz-margin-start: 8px; margin-inline-start: 8px } .tox .tox-form__controls-h-stack>.tox-form__group+.tox-slider { -webkit-margin-start: 32px; -moz-margin-start: 32px; margin-inline-start: 32px } .tox .tox-form__controls-h-stack>.tox-slider+.tox-form__group { -webkit-margin-start: 32px; -moz-margin-start: 32px; margin-inline-start: 32px } .tox .tox-source-code { overflow: auto } .tox .tox-spinner { display: flex } .tox .tox-spinner>div { animation: tam-bouncing-dots 1.5s ease-in-out 0s infinite both; background-color: rgba(34, 47, 62, .5); border-radius: 100%; height: 8px; width: 8px } .tox .tox-spinner>div:first-child { animation-delay: -.32s } .tox .tox-spinner>div:nth-child(2) { animation-delay: -.16s } @keyframes tam-bouncing-dots { 0%, 100%, 80% { transform: scale(0) } 40% { transform: scale(1) } } .tox:not([dir=rtl]) .tox-spinner>div:not(:first-child) { margin-left: 4px } .tox[dir=rtl] .tox-spinner>div:not(:first-child) { margin-right: 4px } .tox .tox-statusbar { align-items: center; background-color: transparent; border-top: 1px solid rgba(0, 0, 0, .1); color: rgba(34, 47, 62, .5); display: flex; flex: 0 0 auto; font-size: 11px; font-weight: 400; height: 24px; overflow: hidden; padding: 0 16px; position: relative; text-transform: uppercase } .tox .tox-statusbar__path { display: flex; flex: 1 1 auto; text-overflow: ellipsis; white-space: nowrap } .tox .tox-statusbar__right-container { display: flex; justify-content: flex-end; white-space: nowrap } .tox .tox-statusbar__help-text { text-align: center } .tox .tox-statusbar__text-container { display: flex; flex: 1 1 auto; justify-content: space-between } @media only screen and (min-width: 768px) { .tox .tox-statusbar__text-container.tox-statusbar__text-container-3-cols>.tox-statusbar__help-text, .tox .tox-statusbar__text-container.tox-statusbar__text-container-3-cols>.tox-statusbar__path, .tox .tox-statusbar__text-container.tox-statusbar__text-container-3-cols>.tox-statusbar__right-container { flex: 0 0 calc(100% / 3) } } .tox .tox-statusbar__text-container.tox-statusbar__text-container--flex-end { justify-content: flex-end } .tox .tox-statusbar__text-container.tox-statusbar__text-container--flex-start { justify-content: flex-start } .tox .tox-statusbar__text-container.tox-statusbar__text-container--space-around { justify-content: space-around } .tox .tox-statusbar__path>* { display: inline; white-space: nowrap } .tox .tox-statusbar__wordcount { flex: 0 0 auto; margin-left: 1ch } @media only screen and (max-width: 767px) { .tox .tox-statusbar__text-container .tox-statusbar__help-text { display: none } .tox .tox-statusbar__text-container .tox-statusbar__help-text:only-child { display: block } } .tox .tox-statusbar a, .tox .tox-statusbar__path-item, .tox .tox-statusbar__wordcount { color: rgba(34, 47, 62, .5); position: relative; text-decoration: none } .tox .tox-statusbar a:focus:not(:disabled):not([aria-disabled=true]), .tox .tox-statusbar a:hover:not(:disabled):not([aria-disabled=true]), .tox .tox-statusbar__path-item:focus:not(:disabled):not([aria-disabled=true]), .tox .tox-statusbar__path-item:hover:not(:disabled):not([aria-disabled=true]), .tox .tox-statusbar__wordcount:focus:not(:disabled):not([aria-disabled=true]), .tox .tox-statusbar__wordcount:hover:not(:disabled):not([aria-disabled=true]) { color: #222f3e; cursor: pointer } .tox .tox-statusbar a:focus-visible::after, .tox .tox-statusbar__path-item:focus-visible::after, .tox .tox-statusbar__wordcount:focus-visible::after { border-radius: 3px; bottom: 0; box-shadow: 0 0 0 0 transparent; content: ''; left: 0; position: absolute; right: 0; top: 0 } @media (forced-colors:active) { .tox .tox-statusbar a:focus-visible::after, .tox .tox-statusbar__path-item:focus-visible::after, .tox .tox-statusbar__wordcount:focus-visible::after { border: 2px solid highlight } } .tox .tox-statusbar__branding svg { fill: rgba(34, 47, 62, 0.8); height: 1em; margin-left: .3em; width: auto } @media (forced-colors:active) { .tox .tox-statusbar__branding svg { fill: currentColor } } .tox .tox-statusbar__branding a { align-items: center; display: inline-flex } .tox .tox-statusbar__branding a:focus:not(:disabled):not([aria-disabled=true]) svg, .tox .tox-statusbar__branding a:hover:not(:disabled):not([aria-disabled=true]) svg { fill: #222f3e } .tox .tox-statusbar__resize-handle { align-items: flex-end; align-self: stretch; cursor: nwse-resize; display: flex; flex: 0 0 auto; justify-content: flex-end; margin-bottom: 3px; margin-left: 4px; margin-right: calc(3px - 16px); margin-top: 3px; padding-bottom: 0; padding-left: 0; padding-right: 0; position: relative } .tox .tox-statusbar__resize-handle svg { display: block; fill: rgba(34, 47, 62, 0.5) } .tox .tox-statusbar__resize-handle:focus svg, .tox .tox-statusbar__resize-handle:hover svg { fill: #222f3e } .tox .tox-statusbar__resize-handle:focus-visible { background-color: transparent; border-radius: 1px 1px -3px 1px; box-shadow: 0 0 0 2px transparent } .tox .tox-statusbar__resize-handle:focus-visible::after { border-radius: 3px; bottom: 0; box-shadow: 0 0 0 0 transparent; content: ''; left: 0; position: absolute; right: 0; top: 0 } @media (forced-colors:active) { .tox .tox-statusbar__resize-handle:focus-visible::after { border: 2px solid highlight } } .tox:not([dir=rtl]) .tox-statusbar__path>* { margin-right: 4px } .tox:not([dir=rtl]) .tox-statusbar__branding { margin-left: 2ch } .tox[dir=rtl] .tox-statusbar { flex-direction: row-reverse } .tox[dir=rtl] .tox-statusbar__path>* { margin-left: 4px } .tox[dir=rtl] .tox-statusbar__branding svg { margin-left: 0; margin-right: .3em } .tox .tox-throbber { z-index: 1299 } .tox .tox-throbber__busy-spinner { align-items: center; background-color: rgba(255, 255, 255, .6); bottom: 0; display: flex; justify-content: center; left: 0; position: absolute; right: 0; top: 0 } .tox .tox-tbtn { align-items: center; background: #fff; border: 0; border-radius: 3px; box-shadow: none; color: #57606f; display: flex; flex: 0 0 auto; font-size: 12px; font-style: normal; font-weight: 500; height: 26px; justify-content: center; margin: 1px 4px 0 0; outline: 0; padding: 0; text-transform: none; width: 26px } @media (forced-colors:active) { .tox .tox-tbtn.tox-tbtn:hover, .tox .tox-tbtn:hover { outline: 1px dashed currentColor } .tox .tox-tbtn.tox-tbtn--active, .tox .tox-tbtn.tox-tbtn--enabled, .tox .tox-tbtn.tox-tbtn--enabled:focus, .tox .tox-tbtn.tox-tbtn--enabled:hover, .tox .tox-tbtn:focus:not(.tox-tbtn--disabled) { outline: 1px solid currentColor; position: relative } } .tox .tox-tbtn svg { display: block; fill: #57606f } @media (forced-colors:active) { .tox .tox-tbtn svg { fill: currentColor !important } .tox .tox-tbtn svg.tox-tbtn--enabled, .tox .tox-tbtn svg:focus:not(.tox-tbtn--disabled) { fill: currentColor !important } .tox .tox-tbtn svg .tox-tbtn:disabled, .tox .tox-tbtn svg .tox-tbtn:disabled:hover, .tox .tox-tbtn svg.tox-tbtn--disabled, .tox .tox-tbtn svg.tox-tbtn--disabled:hover { -webkit-filter: contrast(0%); filter: contrast(0%) } } .tox .tox-tbtn.tox-tbtn-more { padding-left: 5px; padding-right: 5px; width: inherit } .tox .tox-tbtn:focus { background: rgba(43, 160, 255, .15); border: 0; box-shadow: none; position: relative; z-index: 1 } .tox .tox-tbtn:focus::after { border-radius: 3px; bottom: 0; box-shadow: 0 0 0 0 transparent; content: ''; left: 0; position: absolute; right: 0; top: 0 } @media (forced-colors:active) { .tox .tox-tbtn:focus::after { border: 2px solid highlight } } .tox .tox-tbtn:hover { background: rgba(43, 160, 255, .15); border: 0; box-shadow: none; color: #57606f } .tox .tox-tbtn:hover svg { fill: #57606f } .tox .tox-tbtn:active { background: rgba(43, 160, 255, .15); border: 0; box-shadow: none; color: #2ba0ff } .tox .tox-tbtn:active svg { fill: #2ba0ff } .tox .tox-tbtn--disabled .tox-tbtn--enabled svg { fill: rgba(87, 96, 111, 0.5) } .tox .tox-tbtn--disabled, .tox .tox-tbtn--disabled:hover, .tox .tox-tbtn:disabled, .tox .tox-tbtn:disabled:hover { background: #fff; border: 0; box-shadow: none; color: rgba(87, 96, 111, .5); cursor: not-allowed } .tox .tox-tbtn--disabled svg, .tox .tox-tbtn--disabled:hover svg, .tox .tox-tbtn:disabled svg, .tox .tox-tbtn:disabled:hover svg { fill: rgba(87, 96, 111, 0.5) } .tox .tox-tbtn--active, .tox .tox-tbtn--enabled, .tox .tox-tbtn--enabled:focus, .tox .tox-tbtn--enabled:hover { background: rgba(43, 160, 255, .15); border: 0; box-shadow: none; color: #2ba0ff; position: relative } .tox .tox-tbtn--active>*, .tox .tox-tbtn--enabled:focus>*, .tox .tox-tbtn--enabled:hover>*, .tox .tox-tbtn--enabled>* { transform: none } .tox .tox-tbtn--active svg, .tox .tox-tbtn--enabled svg, .tox .tox-tbtn--enabled:focus svg, .tox .tox-tbtn--enabled:hover svg { fill: #2ba0ff } .tox .tox-tbtn--active.tox-tbtn--disabled svg, .tox .tox-tbtn--enabled.tox-tbtn--disabled svg, .tox .tox-tbtn--enabled:focus.tox-tbtn--disabled svg, .tox .tox-tbtn--enabled:hover.tox-tbtn--disabled svg { fill: rgba(87, 96, 111, 0.5) } .tox .tox-tbtn--enabled:focus::after { border-radius: 3px; bottom: 0; box-shadow: 0 0 0 0 transparent; content: ''; left: 0; position: absolute; right: 0; top: 0 } @media (forced-colors:active) { .tox .tox-tbtn--enabled:focus::after { border: 2px solid highlight } } .tox .tox-tbtn:focus:not(.tox-tbtn--disabled) { color: #2ba0ff } .tox .tox-tbtn:focus:not(.tox-tbtn--disabled) svg { fill: #57606f } .tox .tox-tbtn:active>* { transform: none } .tox .tox-tbtn--md { height: 39px; width: 39px } .tox .tox-tbtn--lg { flex-direction: column; height: 52px; width: 52px } .tox .tox-tbtn--return { align-self: stretch; height: unset; width: 16px } .tox .tox-tbtn--labeled { padding: 0 4px; width: unset } .tox .tox-tbtn__vlabel { display: block; font-size: 10px; font-weight: 400; letter-spacing: -.025em; margin-bottom: 4px; white-space: nowrap } .tox .tox-number-input { background: 0 0; border-radius: 3px; display: flex; margin: 1px 4px 0 0; position: relative; width: auto } .tox .tox-number-input:focus { background: rgba(43, 160, 255, .15) } .tox .tox-number-input:focus::after { border-radius: 3px; bottom: 0; box-shadow: 0 0 0 0 transparent; content: ''; left: 0; position: absolute; right: 0; top: 0 } @media (forced-colors:active) { .tox .tox-number-input:focus::after { border: 2px solid highlight } } .tox .tox-number-input .tox-input-wrapper { display: flex; pointer-events: none; position: relative; text-align: center } .tox .tox-number-input .tox-input-wrapper:focus { background-color: rgba(43, 160, 255, .15); z-index: 1 } .tox .tox-number-input .tox-input-wrapper:focus::after { border-radius: 3px; bottom: 0; box-shadow: 0 0 0 0 transparent; content: ''; left: 0; position: absolute; right: 0; top: 0 } @media (forced-colors:active) { .tox .tox-number-input .tox-input-wrapper:focus::after { border: 2px solid highlight } } .tox .tox-number-input .tox-input-wrapper:has(input:focus)::after { border-radius: 3px; bottom: 0; box-shadow: 0 0 0 0 transparent; content: ''; left: 0; position: absolute; right: 0; top: 0 } @media (forced-colors:active) { .tox .tox-number-input .tox-input-wrapper:has(input:focus)::after { border: 2px solid highlight } } .tox .tox-number-input input { border-radius: 3px; color: #57606f; font-size: 14px; margin: 2px 0; pointer-events: all; position: relative; width: 60px } .tox .tox-number-input input:hover { background: rgba(43, 160, 255, .15); color: #57606f } .tox .tox-number-input input:focus { background-color: rgba(43, 160, 255, .15) } .tox .tox-number-input input:disabled { background: #fff; border: 0; box-shadow: none; color: rgba(87, 96, 111, .5); cursor: not-allowed } .tox .tox-number-input button { color: #57606f; height: 26px; position: relative; text-align: center; width: 24px } @media (forced-colors:active) { .tox .tox-number-input button:active, .tox .tox-number-input button:focus, .tox .tox-number-input button:hover { outline: 1px solid currentColor !important } } .tox .tox-number-input button svg { display: block; fill: #57606f; margin: 0 auto; transform: scale(.67) } @media (forced-colors:active) { .tox .tox-number-input button svg, .tox .tox-number-input button svg:active, .tox .tox-number-input button svg:hover { fill: currentColor !important } .tox .tox-number-input button svg:disabled { -webkit-filter: contrast(0); filter: contrast(0) } } .tox .tox-number-input button:focus { background: rgba(43, 160, 255, .15); z-index: 1 } .tox .tox-number-input button:focus::after { border-radius: 3px; bottom: 0; box-shadow: 0 0 0 0 transparent; content: ''; left: 0; position: absolute; right: 0; top: 0 } @media (forced-colors:active) { .tox .tox-number-input button:focus::after { border: 2px solid highlight } } .tox .tox-number-input button:hover { background: rgba(43, 160, 255, .15); border: 0; box-shadow: none; color: #57606f } .tox .tox-number-input button:hover svg { fill: #57606f } .tox .tox-number-input button:active { background: rgba(43, 160, 255, .15); border: 0; box-shadow: none; color: #2ba0ff } .tox .tox-number-input button:active svg { fill: #2ba0ff } .tox .tox-number-input button:disabled { background: #fff; border: 0; box-shadow: none; color: rgba(87, 96, 111, .5); cursor: not-allowed } .tox .tox-number-input button:disabled svg { fill: rgba(87, 96, 111, 0.5) } .tox .tox-number-input button.minus { border-radius: 3px 0 0 3px } .tox .tox-number-input button.plus { border-radius: 0 3px 3px 0 } .tox .tox-number-input:focus:not(:active)>.tox-input-wrapper, .tox .tox-number-input:focus:not(:active)>button { background: rgba(43, 160, 255, .15) } .tox .tox-tbtn--select { margin: 1px 4px 0 0; padding: 0 4px; width: auto } .tox .tox-tbtn__select-label { cursor: default; font-weight: 500; height: initial; margin: 0 4px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap } .tox .tox-tbtn__select-chevron { align-items: center; display: flex; justify-content: center; width: 16px } .tox .tox-tbtn__select-chevron svg { fill: rgba(87, 96, 111, 0.5) } @media (forced-colors:active) { .tox .tox-tbtn__select-chevron svg { fill: currentColor } } .tox .tox-tbtn--bespoke { background: 0 0 } .tox .tox-tbtn--bespoke:focus { background: rgba(43, 160, 255, .15) } .tox .tox-tbtn--bespoke+.tox-tbtn--bespoke { -webkit-margin-start: 4px; -moz-margin-start: 4px; margin-inline-start: 4px } .tox .tox-tbtn--bespoke .tox-tbtn__select-label { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; width: 7em } .tox .tox-tbtn--disabled .tox-tbtn__select-label, .tox .tox-tbtn--select:disabled .tox-tbtn__select-label { cursor: not-allowed } .tox .tox-split-button { border: 0; border-radius: 3px; box-sizing: border-box; display: flex; margin: 1px 4px 0 0 } .tox .tox-split-button:hover { box-shadow: 0 0 0 1px rgba(43, 160, 255, .15) inset } .tox .tox-split-button:focus { background: rgba(43, 160, 255, .15); box-shadow: none; color: #2ba0ff; position: relative; z-index: 1 } .tox .tox-split-button:focus::after { pointer-events: none; border-radius: 3px; bottom: 0; box-shadow: 0 0 0 0 transparent; content: ''; left: 0; position: absolute; right: 0; top: 0 } @media (forced-colors:active) { .tox .tox-split-button:focus::after { border: 2px solid highlight } } .tox .tox-split-button>* { border-radius: 0 } .tox .tox-split-button>:first-child { border-bottom-left-radius: 3px; border-top-left-radius: 3px } .tox .tox-split-button>:nth-child(2) { border-bottom-right-radius: 3px; border-top-right-radius: 3px } .tox .tox-split-button__chevron { width: 16px } .tox .tox-split-button__chevron svg { fill: rgba(87, 96, 111, 0.5) } @media (forced-colors:active) { .tox .tox-split-button__chevron svg { fill: currentColor } } .tox .tox-split-button .tox-tbtn { margin: 0 } .tox .tox-split-button:focus .tox-tbtn { background-color: transparent } .tox .tox-split-button.tox-tbtn--disabled .tox-tbtn:focus, .tox .tox-split-button.tox-tbtn--disabled .tox-tbtn:hover, .tox .tox-split-button.tox-tbtn--disabled:focus, .tox .tox-split-button.tox-tbtn--disabled:hover { background: #fff; box-shadow: none; color: rgba(87, 96, 111, .5) } .tox.tox-platform-touch .tox-split-button .tox-tbtn--select { padding: 0 0 } .tox.tox-platform-touch .tox-split-button .tox-tbtn:not(.tox-tbtn--select):first-child { width: 22px } .tox.tox-platform-touch .tox-split-button__chevron { width: 20px } .tox .tox-split-button.tox-tbtn--disabled svg #tox-icon-highlight-bg-color__color, .tox .tox-split-button.tox-tbtn--disabled svg #tox-icon-text-color__color { opacity: .6 } .tox .tox-toolbar-overlord { background-color: transparent } .tox .tox-toolbar, .tox .tox-toolbar__overflow, .tox .tox-toolbar__primary { background-attachment: local; background-color: transparent; background-image: repeating-linear-gradient(rgba(0, 0, 0, .1) 0 1px, transparent 1px 43px); background-position: center top 43px; background-repeat: no-repeat; background-size: calc(100% - 16px * 2) calc(100% - 43px); display: flex; flex: 0 0 auto; flex-shrink: 0; flex-wrap: wrap; padding: 0 0; transform: perspective(1px) } .tox .tox-toolbar-overlord>.tox-toolbar, .tox .tox-toolbar-overlord>.tox-toolbar__overflow, .tox .tox-toolbar-overlord>.tox-toolbar__primary { background-position: center top 0; background-size: calc(100% - 16px * 2) calc(100% - 0px) } .tox .tox-toolbar__overflow.tox-toolbar__overflow--closed { height: 0; opacity: 0; padding-bottom: 0; padding-top: 0; visibility: hidden } .tox .tox-toolbar__overflow--growing { transition: height .3s ease, opacity .2s linear .1s } .tox .tox-toolbar__overflow--shrinking { transition: opacity .3s ease, height .2s linear .1s, visibility 0s linear .3s } .tox .tox-anchorbar, .tox .tox-toolbar-overlord { grid-column: 1/-1 } .tox .tox-menubar+.tox-toolbar, .tox .tox-menubar+.tox-toolbar-overlord { border-top: 1px solid transparent; margin-top: -1px; padding-bottom: 0; padding-top: 0 } @media (forced-colors:active) { .tox .tox-menubar+.tox-toolbar, .tox .tox-menubar+.tox-toolbar-overlord { outline: 1px solid currentColor } } .tox .tox-toolbar--scrolling { flex-wrap: nowrap; overflow-x: auto } .tox .tox-pop .tox-toolbar { border-width: 0 } .tox .tox-toolbar--no-divider { background-image: none } .tox .tox-toolbar-overlord .tox-toolbar:not(.tox-toolbar--scrolling):first-child, .tox .tox-toolbar-overlord .tox-toolbar__primary { background-position: center top 43px } .tox .tox-editor-header>.tox-toolbar--scrolling, .tox .tox-toolbar-overlord .tox-toolbar--scrolling:first-child { background-image: none } .tox.tox-tinymce-aux .tox-toolbar__overflow { background-color: #fff !important; background-position: center top 47px; background-size: calc(100% - 8px * 2) calc(100% - 55px); border: none; border-radius: 3px; box-shadow: 0 0 2px 0 rgba(34, 47, 62, .2), 0 4px 8px 0 rgba(34, 47, 62, .15); overscroll-behavior: none; padding: 4px 0 } @media (forced-colors:active) { .tox.tox-tinymce-aux .tox-toolbar__overflow { border: solid } } .tox-pop .tox-pop__dialog .tox-toolbar { background-position: center top 47px; background-size: calc(100% - 16px * 2) calc(100% - 55px); padding: 4px 0 } .tox .tox-toolbar__group { align-items: center; display: flex; flex-wrap: wrap; margin: 8px 0; padding: 0 16px 0 20px } .tox .tox-toolbar__group--pull-right { margin-left: auto } .tox .tox-toolbar--scrolling .tox-toolbar__group { flex-shrink: 0; flex-wrap: nowrap } .tox:not([dir=rtl]) .tox-toolbar__group:not(:last-of-type) { border-right: 1px solid rgba(0, 0, 0, .1) } .tox[dir=rtl] .tox-toolbar__group:not(:last-of-type) { border-left: 1px solid rgba(0, 0, 0, .1) } .tox .tox-tooltip { display: inline-block; max-width: 15em; padding: 8px; pointer-events: none; position: relative; width: -webkit-max-content; width: -moz-max-content; width: max-content; z-index: 1150 } .tox .tox-tooltip__body { background-color: #222f3e; border-radius: 3px; box-shadow: none; color: #fff; font-size: 12px; font-style: normal; font-weight: 600; overflow-wrap: break-word; padding: 4px 6px; text-transform: none } @media (forced-colors:active) { .tox .tox-tooltip__body { outline: outset 1px } } .tox .tox-tooltip__arrow { position: absolute } .tox .tox-tooltip--down .tox-tooltip__arrow { border-left: 8px solid transparent; border-right: 8px solid transparent; border-top: 8px solid #222f3e; bottom: 0; left: 50%; position: absolute; transform: translateX(-50%) } .tox .tox-tooltip--up .tox-tooltip__arrow { border-bottom: 8px solid #222f3e; border-left: 8px solid transparent; border-right: 8px solid transparent; left: 50%; position: absolute; top: 0; transform: translateX(-50%) } .tox .tox-tooltip--right .tox-tooltip__arrow { border-bottom: 8px solid transparent; border-left: 8px solid #222f3e; border-top: 8px solid transparent; position: absolute; right: 0; top: 50%; transform: translateY(-50%) } .tox .tox-tooltip--left .tox-tooltip__arrow { border-bottom: 8px solid transparent; border-right: 8px solid #222f3e; border-top: 8px solid transparent; left: 0; position: absolute; top: 50%; transform: translateY(-50%) } .tox .tox-tree { display: flex; flex-direction: column } .tox .tox-tree .tox-trbtn { align-items: center; background: 0 0; border: 0; border-radius: 4px; box-shadow: none; color: #222f3e; display: flex; flex: 0 0 auto; font-size: 13.125px; font-style: normal; font-weight: 400; height: 28px; margin-bottom: 4px; margin-top: 4px; outline: 0; overflow: hidden; padding: 0; padding-left: 8px; text-transform: none } .tox .tox-tree .tox-trbtn .tox-tree__label { cursor: default; overflow: hidden; text-overflow: ellipsis; white-space: nowrap } .tox .tox-tree .tox-trbtn svg { display: block; fill: #222f3e } .tox .tox-tree .tox-trbtn:focus { background: rgba(43, 160, 255, .15); border: 0; box-shadow: none } .tox .tox-tree .tox-trbtn:hover { background: rgba(43, 160, 255, .15); border: 0; box-shadow: none; color: #2ba0ff } .tox .tox-tree .tox-trbtn:hover svg { fill: #2ba0ff } .tox .tox-tree .tox-trbtn:active { background: #b5deff; border: 0; box-shadow: none; color: #2ba0ff } .tox .tox-tree .tox-trbtn:active svg { fill: #2ba0ff } .tox .tox-tree .tox-trbtn--disabled, .tox .tox-tree .tox-trbtn--disabled:hover, .tox .tox-tree .tox-trbtn:disabled, .tox .tox-tree .tox-trbtn:disabled:hover { background: 0 0; border: 0; box-shadow: none; color: rgba(34, 47, 62, .5); cursor: not-allowed } .tox .tox-tree .tox-trbtn--disabled svg, .tox .tox-tree .tox-trbtn--disabled:hover svg, .tox .tox-tree .tox-trbtn:disabled svg, .tox .tox-tree .tox-trbtn:disabled:hover svg { fill: rgba(34, 47, 62, 0.5) } .tox .tox-tree .tox-trbtn--enabled, .tox .tox-tree .tox-trbtn--enabled:hover { background: #b5deff; border: 0; box-shadow: none; color: #2ba0ff } .tox .tox-tree .tox-trbtn--enabled:hover>*, .tox .tox-tree .tox-trbtn--enabled>* { transform: none } .tox .tox-tree .tox-trbtn--enabled svg, .tox .tox-tree .tox-trbtn--enabled:hover svg { fill: #2ba0ff } .tox .tox-tree .tox-trbtn:focus:not(.tox-trbtn--disabled) { color: #2ba0ff } .tox .tox-tree .tox-trbtn:focus:not(.tox-trbtn--disabled) svg { fill: #2ba0ff } .tox .tox-tree .tox-trbtn:active>* { transform: none } .tox .tox-tree .tox-trbtn--return { align-self: stretch; height: unset; width: 16px } .tox .tox-tree .tox-trbtn--labeled { padding: 0 4px; width: unset } .tox .tox-tree .tox-trbtn__vlabel { display: block; font-size: 10px; font-weight: 400; letter-spacing: -.025em; margin-bottom: 4px; white-space: nowrap } .tox .tox-tree .tox-tree--directory { display: flex; flex-direction: column } .tox .tox-tree .tox-tree--directory .tox-tree--directory__label { font-weight: 700 } .tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn { margin-left: auto } .tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn svg { fill: transparent } .tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn.tox-mbtn--active svg, .tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn:focus svg { fill: #fff } .tox .tox-tree .tox-tree--directory .tox-tree--directory__label:focus .tox-mbtn svg, .tox .tox-tree .tox-tree--directory .tox-tree--directory__label:hover .tox-mbtn svg { fill: #fff } .tox .tox-tree .tox-tree--directory .tox-tree--directory__label:hover:has(.tox-mbtn:hover) { background-color: transparent; color: #222f3e } .tox .tox-tree .tox-tree--directory .tox-tree--directory__label:hover:has(.tox-mbtn:hover) .tox-chevron svg { fill: #222f3e } .tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-chevron { margin-right: 6px } .tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+ .tox-tree--directory__children--growing) .tox-chevron, .tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+ .tox-tree--directory__children--shrinking) .tox-chevron { transition: transform .5s ease-in-out } .tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+ .tox-tree--directory__children--growing) .tox-chevron, .tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+ .tox-tree--directory__children--open) .tox-chevron { transform: rotate(90deg) } .tox .tox-tree .tox-tree--leaf__label { font-weight: 400 } .tox .tox-tree .tox-tree--leaf__label .tox-mbtn { margin-left: auto } .tox .tox-tree .tox-tree--leaf__label .tox-mbtn svg { fill: transparent } .tox .tox-tree .tox-tree--leaf__label .tox-mbtn.tox-mbtn--active svg, .tox .tox-tree .tox-tree--leaf__label .tox-mbtn:focus svg { fill: #fff } .tox .tox-tree .tox-tree--leaf__label:hover .tox-mbtn svg { fill: #fff } .tox .tox-tree .tox-tree--leaf__label:hover:has(.tox-mbtn:hover) { background-color: transparent; color: #222f3e } .tox .tox-tree .tox-tree--leaf__label:hover:has(.tox-mbtn:hover) .tox-chevron svg { fill: #222f3e } .tox .tox-tree .tox-tree--directory__children { overflow: hidden; padding-left: 16px } .tox .tox-tree .tox-tree--directory__children.tox-tree--directory__children--growing, .tox .tox-tree .tox-tree--directory__children.tox-tree--directory__children--shrinking { transition: height .5s ease-in-out } .tox .tox-tree .tox-trbtn.tox-tree--leaf__label { display: flex; justify-content: space-between } .tox .tox-revisionhistory__pane { padding: 0 !important } .tox .tox-revisionhistory__container { display: flex; flex-direction: column; height: 100% } .tox .tox-revisionhistory { background-color: #fff; border-radius: 4px; border-top: 1px solid rgba(0, 0, 0, .1); display: flex; flex: 1; height: 100%; margin-top: 8px; overflow-x: auto; overflow-y: hidden; position: relative; width: 100% } .tox .tox-revisionhistory--align-right { margin-left: auto } .tox .tox-revisionhistory__iframe { flex: 1 } .tox .tox-revisionhistory__sidebar { border-left: 1px solid rgba(0, 0, 0, .1); height: 100%; max-width: 360px } .tox .tox-revisionhistory__sidebar .tox-revisionhistory__sidebar-title { border-bottom: 1px solid rgba(0, 0, 0, .1); color: #222f3e; font-size: 18px; font-weight: 400; height: 60px; min-width: 192px; padding: 16px } .tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions { flex-direction: column; max-height: calc(100% - 60px); min-width: 192px; overflow-y: auto; padding: 8px } .tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions:focus { height: 100%; position: relative; z-index: 1 } .tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions:focus::after { bottom: 0; box-shadow: 0 0 0 0 transparent; content: ''; left: 0; position: absolute; right: 0; top: 0; border-radius: 3px; bottom: 1px; left: 1px; right: 1px; top: 1px } @media (forced-colors:active) { .tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions:focus::after { border: 2px solid highlight } } .tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card { border: 1px solid rgba(0, 0, 0, .1); border-radius: 3px; color: #222f3e; cursor: pointer; font-size: 13.125px; margin-bottom: 8px; padding: 8px; text-overflow: ellipsis; text-wrap: nowrap; width: 100% } .tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card:hover { background-color: rgba(43, 160, 255, .15); box-shadow: none; color: #2ba0ff } .tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card:focus { position: relative; z-index: 1 } .tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card:focus::after { border-radius: 3px !important; border-radius: 3px; bottom: 0; box-shadow: 0 0 0 0 transparent; content: ''; left: 0; position: absolute; right: 0; top: 0 } @media (forced-colors:active) { .tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card:focus::after { border: 2px solid highlight } } .tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card.tox-revisionhistory__card--selected { background-color: #b5deff; box-shadow: none; color: #2ba0ff } .tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__norevision { color: rgba(34, 47, 62, .5); font-size: 16px; line-height: 24px; padding: 5px 5.5px } .tox .tox-view-wrap, .tox .tox-view-wrap__slot-container { background-color: #fff; display: flex; flex: 1; flex-direction: column; height: 100% } .tox .tox-view { display: flex; flex: 1 1 auto; flex-direction: column; overflow: hidden } .tox .tox-view__header { align-items: center; display: flex; font-size: 15px; justify-content: space-between; padding: 8px 8px 0 8px; position: relative } .tox .tox-view__label { color: #222f3e; font-weight: 700; line-height: 24px; padding: 4px 16px; text-align: center; white-space: nowrap } .tox .tox-view__label--normal { font-size: 15px } .tox .tox-view__label--large { font-size: 18px } .tox .tox-view--mobile.tox-view__header, .tox .tox-view--mobile.tox-view__toolbar { padding: 8px } .tox .tox-view--scrolling { flex-wrap: nowrap; overflow-x: auto } .tox .tox-view__toolbar { display: flex; flex-direction: row; gap: 8px; justify-content: space-between; overflow-x: auto; padding: 8px 8px 0 8px } .tox .tox-view__toolbar__group { display: flex; flex-direction: row; gap: 12px } .tox .tox-view__header-end, .tox .tox-view__header-start { display: flex } .tox .tox-view__pane { height: 100%; padding: 8px; position: relative; width: 100% } .tox .tox-view__pane_panel { border: 1px solid rgba(0, 0, 0, .1); border-radius: 3px } .tox:not([dir=rtl]) .tox-view__header .tox-view__header-end>*, .tox:not([dir=rtl]) .tox-view__header .tox-view__header-start>* { margin-left: 8px } .tox[dir=rtl] .tox-view__header .tox-view__header-end>*, .tox[dir=rtl] .tox-view__header .tox-view__header-start>* { margin-right: 8px } .tox .tox-well { border: 1px solid rgba(0, 0, 0, .1); border-radius: 3px; padding: 8px; width: 100% } .tox .tox-well>:first-child { margin-top: 0 } .tox .tox-well>:last-child { margin-bottom: 0 } .tox .tox-well>:only-child { margin: 0 } .tox .tox-custom-editor { border: 1px solid rgba(0, 0, 0, .1); border-radius: 3px; display: flex; flex: 1; overflow: hidden; position: relative } .tox .tox-dialog-loading::before { background-color: rgba(0, 0, 0, .5); content: \\\"\\\"; height: 100%; position: absolute; width: 100%; z-index: 1000 } .tox .tox-tab { cursor: pointer } .tox .tox-dialog__content-js { display: flex; flex: 1 } .tox .tox-dialog__body-content .tox-collection { display: flex; flex: 1 } .tox:not(.tox-tinymce-inline) .tox-editor-header { background-color: none; padding: 0 } .tox.tox-tinymce--toolbar-bottom .tox-editor-header, .tox.tox-tinymce-inline .tox-editor-header { margin-bottom: -1px }.tox.tox-tinymce-inline{ z-index:99999; } .tox.tox-tinymce-inline .tox-editor-container { overflow: hidden } .tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-bottom .tox-editor-header { border-top: none; box-shadow: none } .tox.tox.tox-tinymce--toolbar-sticky-on .tox-editor-header { background-color: #fff; box-shadow: 0 4px 4px -3px rgba(0, 0, 0, .25); padding: 0 } .tox.tox.tox-tinymce--toolbar-sticky-on.tox-tinymce--toolbar-bottom .tox-editor-header { box-shadow: 0 4px 4px -3px rgba(0, 0, 0, .25) } .tox .tox-collection--list .tox-collection__group .tox-insert-table-picker { margin: -4px 0 } .tox .tox-menu.tox-collection.tox-collection--list { padding: 4px } .tox .tox-pop { box-shadow: none } .tox .tox-number-input, .tox .tox-split-button, .tox .tox-tbtn, .tox .tox-tbtn--select { margin: 0 4px 1px 0 } .tox .tox-toolbar, .tox .tox-toolbar__overflow, .tox .tox-toolbar__primary { background: url(\\\"data:image/svg+xml;charset=utf8,%3Csvg height='43px' viewBox='0 0 40 43px' width='40' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='42px' width='100' height='1' fill='rgba%280,%200,%200,%200.1%29'/%3E%3C/svg%3E\\\") left 0 top 0 transparent !important } .tox .tox-menubar+.tox-toolbar-overlord { border-top: none } .tox .tox-menubar+.tox-toolbar, .tox .tox-menubar+.tox-toolbar-overlord .tox-toolbar__primary { border-top: 1px solid transparent; margin-top: -1px } .tox.tox-tinymce-aux .tox-toolbar__overflow { border: 1px solid rgba(0, 0, 0, .1); padding: 0 } .tox .tox-pop .tox-pop__dialog .tox-toolbar { padding: 0 } .tox:not(.tox-tinymce-inline) .tox-editor-header:not(:first-child) .tox-menubar { border-top: 1px solid rgba(0, 0, 0, .1) } .tox:not(.tox-tinymce-inline) .tox-editor-header:not(:first-child) .tox-toolbar-overlord:first-child .tox-toolbar__primary, .tox:not(.tox-tinymce-inline) .tox-editor-header:not(:first-child) .tox-toolbar:first-child { border-top: 1px solid transparent } .tox .tox-toolbar__group { padding: 0 16px 0 20px } .tox .tox-collection__item { border-radius: 0; cursor: pointer } .tox .tox-statusbar a:focus:not(:disabled):not([aria-disabled=true]), .tox .tox-statusbar a:hover:not(:disabled):not([aria-disabled=true]), .tox .tox-statusbar__path-item:focus:not(:disabled):not([aria-disabled=true]), .tox .tox-statusbar__path-item:hover:not(:disabled):not([aria-disabled=true]), .tox .tox-statusbar__wordcount:focus:not(:disabled):not([aria-disabled=true]), .tox .tox-statusbar__wordcount:hover:not(:disabled):not([aria-disabled=true]) { color: #222f3e } .tox .tox-statusbar__branding svg { fill: rgba(34, 47, 62, 0.8); height: 1em; margin-left: .3em; width: auto } @media (forced-colors:active) { .tox .tox-statusbar__branding svg { fill: currentColor } } .tox .tox-statusbar__branding a { align-items: center; display: inline-flex } .tox .tox-statusbar__branding a:focus:not(:disabled):not([aria-disabled=true]) svg, .tox .tox-statusbar__branding a:hover:not(:disabled):not([aria-disabled=true]) svg { fill: #222f3e } .tox:not([dir=rtl]) .tox-statusbar__branding { margin-left: 1ch } .tox[dir=rtl] .tox-statusbar__branding svg { margin-left: 0; margin-right: .3em } .tox .tox-statusbar__resize-handle { padding-bottom: 0; padding-right: 0 } .tox .tox-button::before { display: none }\")\r\n//# sourceMappingURL=skin.js.map\r\n","tinymce.Resource.add('ui/ms/content.css', \".mce-content-body .mce-item-anchor { background: transparent url(\\\"data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%2F%3E%3C%2Fsvg%3E%0A\\\") no-repeat center } .mce-content-body .mce-item-anchor:empty { cursor: default; display: inline-block; height: 12px!important; padding: 0 2px; -webkit-user-modify: read-only; -moz-user-modify: read-only; -webkit-user-select: all; -moz-user-select: all; -ms-user-select: all; user-select: all; width: 8px!important } .mce-content-body .mce-item-anchor:not(:empty) { background-position-x: 2px; display: inline-block; padding-left: 12px } .mce-content-body .mce-item-anchor[data-mce-selected] { outline-offset: 1px } .tox-comments-visible .tox-comment[contenteditable=false]:not([data-mce-selected]),.tox-comments-visible span.tox-comment img:not([data-mce-selected]),.tox-comments-visible span.tox-comment span.mce-preview-object:not([data-mce-selected]),.tox-comments-visible span.tox-comment>audio:not([data-mce-selected]),.tox-comments-visible span.tox-comment>video:not([data-mce-selected]) { outline: 3px solid #ffe89d } .tox-comments-visible .tox-comment[contenteditable=false][data-mce-annotation-active=true]:not([data-mce-selected]) { outline: 3px solid #fed635 } .tox-comments-visible span.tox-comment[data-mce-annotation-active=true] img:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true] span.mce-preview-object:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true]>audio:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true]>video:not([data-mce-selected]) { outline: 3px solid #fed635 } .tox-comments-visible span.tox-comment:not([data-mce-selected]) { background-color: #ffe89d; outline: 0 } .tox-comments-visible span.tox-comment[data-mce-annotation-active=true]:not([data-mce-selected=inline-boundary]) { background-color: #fed635 } .tox-checklist>li:not(.tox-checklist--hidden) { list-style: none; margin: .25em 0 } .tox-checklist>li:not(.tox-checklist--hidden)::before { content: url(\\\"data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%234C4C4C%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A\\\"); cursor: pointer; height: 1em; margin-left: -1.5em; margin-top: .125em; position: absolute; width: 1em } .tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before { content: url(\\\"data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A\\\") } [dir=rtl] .tox-checklist>li:not(.tox-checklist--hidden)::before { margin-left: 0; margin-right: -1.5em } code[class*=language-],pre[class*=language-] { color: #000; background: 0 0; text-shadow: 0 1px #fff; font-family: Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace; font-size: 1em; text-align: left; white-space: pre; word-spacing: normal; word-break: normal; word-wrap: normal; line-height: 1.5; -moz-tab-size: 4; tab-size: 4; -webkit-hyphens: none; -moz-hyphens: none; -ms-hyphens: none; hyphens: none } code[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection,pre[class*=language-]::-moz-selection { text-shadow: none; background: #b3d4fc } code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection { text-shadow: none; background: #b3d4fc } @media print { code[class*=language-],pre[class*=language-] { text-shadow: none } } pre[class*=language-] { padding: 1em; margin: .5em 0; overflow: auto } :not(pre)>code[class*=language-],pre[class*=language-] { background: #f5f2f0 } :not(pre)>code[class*=language-] { padding: .1em; border-radius: .3em; white-space: normal } .token.cdata,.token.comment,.token.doctype,.token.prolog { color: #708090 } .token.punctuation { color: #999 } .token.namespace { opacity: .7 } .token.boolean,.token.constant,.token.deleted,.token.number,.token.property,.token.symbol,.token.tag { color: #905 } .token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string { color: #690 } .language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url { color: #9a6e3a; background: hsla(0,0%,100%,.5) } .token.atrule,.token.attr-value,.token.keyword { color: #07a } .token.class-name,.token.function { color: #dd4a68 } .token.important,.token.regex,.token.variable { color: #e90 } .token.bold,.token.important { font-weight: 700 } .token.italic { font-style: italic } .token.entity { cursor: help } .mce-content-body { overflow-wrap: break-word; word-wrap: break-word } .mce-content-body .mce-visual-caret { background-color: #000; background-color: currentColor; position: absolute } .mce-content-body .mce-visual-caret-hidden { display: none } .mce-content-body [data-mce-caret] { left: -1000px; margin: 0; padding: 0; position: absolute; right: auto; top: 0 } .mce-content-body .mce-offscreen-selection { left: -2000000px; max-width: 1000000px; position: absolute } .mce-content-body [contentEditable=false] { cursor: default } .mce-content-body [contentEditable=true] { cursor: text } .tox-cursor-format-painter { cursor: url(\\\"data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A\\\"),default } div.mce-footnotes hr { -webkit-margin-end: auto; -moz-margin-end: auto; margin-inline-end:auto;-webkit-margin-start: 0; -moz-margin-start: 0; margin-inline-start:0;width: 25% } div.mce-footnotes li>a.mce-footnotes-backlink { text-decoration: none } @media print { sup.mce-footnote a { color: #000; text-decoration: none } div.mce-footnotes { page-break-inside: avoid; break-inside: avoid; width: 100% } div.mce-footnotes li>a.mce-footnotes-backlink { display: none } } tiny-math-block { display: flex; justify-content: center; margin: 16px 0 16px 0 } tiny-math-inline { display: inline-block } .mce-content-body figure.align-left { float: left } .mce-content-body figure.align-right { float: right } .mce-content-body figure.image.align-center { display: table; margin-left: auto; margin-right: auto } .mce-preview-object { border: 1px solid gray; display: inline-block; line-height: 0; margin: 0 2px 0 2px; position: relative } .mce-preview-object .mce-shim { background: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7); height: 100%; left: 0; position: absolute; top: 0; width: 100% } .mce-preview-object[data-mce-selected=\\\"2\\\"] .mce-shim { display: none } .mce-content-body .mce-mergetag { cursor: default!important; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none } .mce-content-body .mce-mergetag:hover { background-color: rgba(0,108,231,.1) } .mce-content-body .mce-mergetag-affix { background-color: rgba(0,108,231,.1); color: #006ce7 } .mce-object { background: transparent url(\\\"data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%2F%3E%3C%2Fsvg%3E%0A\\\") no-repeat center; border: 1px dashed #aaa } .mce-pagebreak { border: 1px dashed #aaa; cursor: default; display: block; height: 5px; margin-top: 15px; page-break-before: always; width: 100% } @media print { .mce-pagebreak { border: 0 } } .tiny-pageembed .mce-shim { background: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7); height: 100%; left: 0; position: absolute; top: 0; width: 100% } .tiny-pageembed[data-mce-selected=\\\"2\\\"] .mce-shim { display: none } .tiny-pageembed { display: inline-block; position: relative } .tiny-pageembed--16by9,.tiny-pageembed--1by1,.tiny-pageembed--21by9,.tiny-pageembed--4by3 { display: block; overflow: hidden; padding: 0; position: relative; width: 100% } .tiny-pageembed--21by9 { padding-top: 42.857143% } .tiny-pageembed--16by9 { padding-top: 56.25% } .tiny-pageembed--4by3 { padding-top: 75% } .tiny-pageembed--1by1 { padding-top: 100% } .tiny-pageembed--16by9 iframe,.tiny-pageembed--1by1 iframe,.tiny-pageembed--21by9 iframe,.tiny-pageembed--4by3 iframe { border: 0; height: 100%; left: 0; position: absolute; top: 0; width: 100% } .mce-content-body[data-mce-placeholder] { position: relative } .mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before { color: rgba(34,47,62,.7); content: attr(data-mce-placeholder); position: absolute } @media (forced-colors:active) { .mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before { color: highlight; -webkit-filter: brightness(30%); filter: brightness(30%); z-index: -1 } } .mce-content-body:not([dir=rtl])[data-mce-placeholder]:not(.mce-visualblocks)::before { left: 1px } .mce-content-body[dir=rtl][data-mce-placeholder]:not(.mce-visualblocks)::before { right: 1px } .mce-content-body div.mce-resizehandle { background-color: #4099ff; border-color: #4099ff; border-style: solid; border-width: 1px; box-sizing: border-box; height: 10px; position: absolute; width: 10px; z-index: 1298 } .mce-content-body div.mce-resizehandle:hover { background-color: #4099ff } .mce-content-body div.mce-resizehandle:first-of-type { cursor: nwse-resize } .mce-content-body div.mce-resizehandle:nth-of-type(2) { cursor: nesw-resize } .mce-content-body div.mce-resizehandle:nth-of-type(3) { cursor: nwse-resize } .mce-content-body div.mce-resizehandle:nth-of-type(4) { cursor: nesw-resize } .mce-content-body .mce-resize-backdrop { z-index: 10000 } .mce-content-body .mce-clonedresizable { cursor: default; opacity: .5; outline: 1px dashed black; position: absolute; z-index: 10001 } .mce-content-body .mce-clonedresizable.mce-resizetable-columns td,.mce-content-body .mce-clonedresizable.mce-resizetable-columns th { border: 0 } .mce-content-body .mce-resize-helper { background: #555; background: rgba(0,0,0,.75); border: 1px; border-radius: 3px; color: #fff; display: none; font-family: sans-serif; font-size: 12px; line-height: 14px; margin: 5px 10px; padding: 5px; position: absolute; white-space: nowrap; z-index: 10002 } .tox-rtc-user-selection { position: relative } .tox-rtc-user-cursor { bottom: 0; cursor: default; position: absolute; top: 0; width: 2px } .tox-rtc-user-cursor::before { background-color: inherit; border-radius: 50%; content: ''; display: block; height: 8px; position: absolute; right: -3px; top: -3px; width: 8px } .tox-rtc-user-cursor:hover::after { background-color: inherit; border-radius: 100px; box-sizing: border-box; color: #fff; content: attr(data-user); display: block; font-size: 12px; font-weight: 700; left: -5px; min-height: 8px; min-width: 8px; padding: 0 12px; position: absolute; top: -11px; white-space: nowrap; z-index: 1000 } .tox-rtc-user-selection--1 .tox-rtc-user-cursor { background-color: #2dc26b } .tox-rtc-user-selection--2 .tox-rtc-user-cursor { background-color: #e03e2d } .tox-rtc-user-selection--3 .tox-rtc-user-cursor { background-color: #f1c40f } .tox-rtc-user-selection--4 .tox-rtc-user-cursor { background-color: #3598db } .tox-rtc-user-selection--5 .tox-rtc-user-cursor { background-color: #b96ad9 } .tox-rtc-user-selection--6 .tox-rtc-user-cursor { background-color: #e67e23 } .tox-rtc-user-selection--7 .tox-rtc-user-cursor { background-color: #aaa69d } .tox-rtc-user-selection--8 .tox-rtc-user-cursor { background-color: #f368e0 } .tox-rtc-remote-image { background: #eaeaea url(\\\"data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2236%22%20height%3D%2212%22%20viewBox%3D%220%200%2036%2012%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%3Ccircle%20cx%3D%226%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2218%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.33s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2230%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.66s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%3C%2Fsvg%3E%0A\\\") no-repeat center center; border: 1px solid #ccc; min-height: 240px; min-width: 320px } .mce-match-marker { background: #aaa; color: #fff } .mce-match-marker-selected { background: #39f; color: #fff } .mce-match-marker-selected::-moz-selection { background: #39f; color: #fff } .mce-match-marker-selected::selection { background: #39f; color: #fff } .mce-content-body audio[data-mce-selected],.mce-content-body details[data-mce-selected],.mce-content-body embed[data-mce-selected],.mce-content-body img[data-mce-selected],.mce-content-body object[data-mce-selected],.mce-content-body table[data-mce-selected],.mce-content-body video[data-mce-selected] { outline: 3px solid #b4d7ff } .mce-content-body hr[data-mce-selected] { outline: 3px solid #b4d7ff; outline-offset: 1px } .mce-content-body [contentEditable=false] [contentEditable=true]:focus { outline: 3px solid #b4d7ff } .mce-content-body [contentEditable=false] [contentEditable=true]:hover { outline: 3px solid #b4d7ff } .mce-content-body [contentEditable=false][data-mce-selected] { cursor: not-allowed; outline: 3px solid #b4d7ff } .mce-content-body.mce-content-readonly [contentEditable=true]:focus,.mce-content-body.mce-content-readonly [contentEditable=true]:hover { outline: 0 } .mce-content-body [data-mce-selected=inline-boundary] { background-color: #b4d7ff } .mce-content-body .mce-edit-focus { outline: 3px solid #b4d7ff } .mce-content-body td[data-mce-selected],.mce-content-body th[data-mce-selected] { position: relative } .mce-content-body td[data-mce-selected]::-moz-selection,.mce-content-body th[data-mce-selected]::-moz-selection { background: 0 0 } .mce-content-body td[data-mce-selected]::selection,.mce-content-body th[data-mce-selected]::selection { background: 0 0 } .mce-content-body td[data-mce-selected] *,.mce-content-body th[data-mce-selected] * { outline: 0; -webkit-touch-callout: none; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none } .mce-content-body td[data-mce-selected]::after,.mce-content-body th[data-mce-selected]::after { background-color: rgba(180,215,255,.7); border: 1px solid rgba(180,215,255,.7); bottom: -1px; content: ''; left: -1px; mix-blend-mode: multiply; position: absolute; right: -1px; top: -1px } @media screen and (-ms-high-contrast:active),(-ms-high-contrast:none) { .mce-content-body td[data-mce-selected]::after,.mce-content-body th[data-mce-selected]::after { border-color: rgba(0,84,180,.7) } } .mce-content-body img[data-mce-selected]::-moz-selection { background: 0 0 } .mce-content-body img[data-mce-selected]::selection { background: 0 0 } .ephox-snooker-resizer-bar { background-color: #b4d7ff; opacity: 0; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none } .ephox-snooker-resizer-cols { cursor: col-resize } .ephox-snooker-resizer-rows { cursor: row-resize } .ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging { opacity: 1 } .mce-spellchecker-word { background-image: url(\\\"data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.75'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A\\\"); background-position: 0 calc(100% + 1px); background-repeat: repeat-x; background-size: auto 6px; cursor: default; height: 2rem } .mce-spellchecker-grammar { background-image: url(\\\"data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%2300A835'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A\\\"); background-position: 0 calc(100% + 1px); background-repeat: repeat-x; background-size: auto 6px; cursor: default } .mce-toc { border: 1px solid gray } .mce-toc h2 { margin: 4px } .mce-toc ul>li { list-style-type: none } [data-mce-block] { display: block } .mce-item-table:not([border]),.mce-item-table:not([border]) caption,.mce-item-table:not([border]) td,.mce-item-table:not([border]) th,.mce-item-table[border=\\\"0\\\"],.mce-item-table[border=\\\"0\\\"] caption,.mce-item-table[border=\\\"0\\\"] td,.mce-item-table[border=\\\"0\\\"] th,table[style*=\\\"border-width: 0px\\\"],table[style*=\\\"border-width: 0px\\\"] caption,table[style*=\\\"border-width: 0px\\\"] td,table[style*=\\\"border-width: 0px\\\"] th { border: 1px dashed #bbb } .mce-visualblocks address,.mce-visualblocks article,.mce-visualblocks aside,.mce-visualblocks blockquote,.mce-visualblocks div:not([data-mce-bogus]),.mce-visualblocks dl,.mce-visualblocks figcaption,.mce-visualblocks figure,.mce-visualblocks h1,.mce-visualblocks h2,.mce-visualblocks h3,.mce-visualblocks h4,.mce-visualblocks h5,.mce-visualblocks h6,.mce-visualblocks hgroup,.mce-visualblocks ol,.mce-visualblocks p,.mce-visualblocks pre,.mce-visualblocks section,.mce-visualblocks ul { background-repeat: no-repeat; border: 1px dashed #bbb; margin-left: 3px; padding-top: 10px } .mce-visualblocks p { background-image: url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7) } .mce-visualblocks h1 { background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==) } .mce-visualblocks h2 { background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==) } .mce-visualblocks h3 { background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7) } .mce-visualblocks h4 { background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==) } .mce-visualblocks h5 { background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==) } .mce-visualblocks h6 { background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==) } .mce-visualblocks div:not([data-mce-bogus]) { background-image: url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7) } .mce-visualblocks section { background-image: url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=) } .mce-visualblocks article { background-image: url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7) } .mce-visualblocks blockquote { background-image: url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7) } .mce-visualblocks address { background-image: url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=) } .mce-visualblocks pre { background-image: url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==) } .mce-visualblocks figure { background-image: url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7) } .mce-visualblocks figcaption { border: 1px dashed #bbb } .mce-visualblocks hgroup { background-image: url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7) } .mce-visualblocks aside { background-image: url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=) } .mce-visualblocks ul { background-image: url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==) } .mce-visualblocks ol { background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==) } .mce-visualblocks dl { background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==) } .mce-visualblocks:not([dir=rtl]) address,.mce-visualblocks:not([dir=rtl]) article,.mce-visualblocks:not([dir=rtl]) aside,.mce-visualblocks:not([dir=rtl]) blockquote,.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]),.mce-visualblocks:not([dir=rtl]) dl,.mce-visualblocks:not([dir=rtl]) figcaption,.mce-visualblocks:not([dir=rtl]) figure,.mce-visualblocks:not([dir=rtl]) h1,.mce-visualblocks:not([dir=rtl]) h2,.mce-visualblocks:not([dir=rtl]) h3,.mce-visualblocks:not([dir=rtl]) h4,.mce-visualblocks:not([dir=rtl]) h5,.mce-visualblocks:not([dir=rtl]) h6,.mce-visualblocks:not([dir=rtl]) hgroup,.mce-visualblocks:not([dir=rtl]) ol,.mce-visualblocks:not([dir=rtl]) p,.mce-visualblocks:not([dir=rtl]) pre,.mce-visualblocks:not([dir=rtl]) section,.mce-visualblocks:not([dir=rtl]) ul { margin-left: 3px } .mce-visualblocks[dir=rtl] address,.mce-visualblocks[dir=rtl] article,.mce-visualblocks[dir=rtl] aside,.mce-visualblocks[dir=rtl] blockquote,.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]),.mce-visualblocks[dir=rtl] dl,.mce-visualblocks[dir=rtl] figcaption,.mce-visualblocks[dir=rtl] figure,.mce-visualblocks[dir=rtl] h1,.mce-visualblocks[dir=rtl] h2,.mce-visualblocks[dir=rtl] h3,.mce-visualblocks[dir=rtl] h4,.mce-visualblocks[dir=rtl] h5,.mce-visualblocks[dir=rtl] h6,.mce-visualblocks[dir=rtl] hgroup,.mce-visualblocks[dir=rtl] ol,.mce-visualblocks[dir=rtl] p,.mce-visualblocks[dir=rtl] pre,.mce-visualblocks[dir=rtl] section,.mce-visualblocks[dir=rtl] ul { background-position-x: right; margin-right: 3px } .mce-nbsp,.mce-shy { background: #aaa } .mce-shy::after { content: '-' } body { font-family: sans-serif } table { border-collapse: collapse }\")\r\n//# sourceMappingURL=content.js.map\r\n","tinymce.Resource.add('content/ms/content.css', \"body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif;line-height:1.4;margin:1rem}table{border-collapse:collapse}table:not([cellpadding]) td,table:not([cellpadding]) th{padding:.4rem}table[border]:not([border=\\\"0\\\"]):not([style*=border-width]) td,table[border]:not([border=\\\"0\\\"]):not([style*=border-width]) th{border-width:1px}table[border]:not([border=\\\"0\\\"]):not([style*=border-style]) td,table[border]:not([border=\\\"0\\\"]):not([style*=border-style]) th{border-style:solid}table[border]:not([border=\\\"0\\\"]):not([style*=border-color]) td,table[border]:not([border=\\\"0\\\"]):not([style*=border-color]) th{border-color:#ccc}figure{display:table;margin:1rem auto}figure figcaption{color:#999;display:block;margin-top:.25rem;text-align:center}hr{border-color:#ccc;border-style:solid;border-width:1px 0 0 0}code{background-color:#e8e8e8;border-radius:3px;padding:.1rem .2rem}.mce-content-body:not([dir=rtl]) blockquote{border-left:2px solid #ccc;margin-left:1.5rem;padding-left:1rem}.mce-content-body[dir=rtl] blockquote{border-right:2px solid #ccc;margin-right:1.5rem;padding-right:1rem}\")\r\n//# sourceMappingURL=content.js.map\r\n","export default \"p{ margin: 0; }\\r\\n\\r\\n\\r\\n/* body>p>br,body>div>br{ \\r\\n display: none;\\r\\n}\\r\\nbody>p::after,body>div::after{ \\r\\n content: \\\"↩︎\\\";\\r\\n margin-left: 8px;\\r\\n color: #ccc;\\r\\n} */\\r\\n\\r\\nbody>div>br::marker{\\r\\n content: \\\"↩︎\\\";\\r\\n margin-left: 8px;\\r\\n color: #ccc;\\r\\n}\\r\\n\\r\\n\"","import { buildProps } from \"@maketribe/utils\";\r\nimport { ExtractPropTypes } from \"vue\";\r\n\r\nexport const richTextEditorProps = buildProps({\r\n modelValue: {\r\n type: String,\r\n required: true,\r\n },\r\n inline : {\r\n type: Boolean,\r\n required: false,\r\n default: false\r\n },\r\n plugins:{\r\n type: Array<string>,\r\n required: false,\r\n default:()=> ['link','lists']\r\n },\r\n toolbar:{\r\n type: [String,Boolean],\r\n required: false, \r\n default:'fontsize | forecolor | styles | backcolor | link'\r\n },\r\n disabled: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n} as const);\r\n\r\nexport type RichTextEditorProps = ExtractPropTypes<typeof richTextEditorProps>;\r\n\r\nexport const richTextEditorEmits = {\r\n \"update:model-value\": (modelValue: string) => true,\r\n};\r\n\r\nexport type RichTextEditorEmits = typeof richTextEditorEmits;\r\n","import { Ref, computed, defineComponent, getCurrentInstance, onBeforeUnmount, onMounted, ref, unref, watch, withCtx } from \"vue\";\r\nimport { MKMaterialSelect } from \"../material-select\";\r\nimport TinyMCE from \"tinymce\";\r\nimport \"tinymce/themes/silver/theme.js\";\r\nimport \"tinymce/models/dom/model.min.js\";\r\nimport \"tinymce/icons/default/icons.min.js\";\r\nimport \"tinymce/plugins/link\";\r\n// import \"tinymce/plugins/table\";\r\nimport \"tinymce/plugins/fullscreen\";\r\nimport \"tinymce/plugins/code\";\r\n// import \"tinymce/plugins/image\";\r\nimport \"tinymce/plugins/quickbars\";\r\nimport \"tinymce/plugins/lists\";\r\nimport \"./langs/zh-Hans.js\";\r\n\r\nimport \"./skins/ui/ms/skin.js\";\r\nimport \"./skins/ui/ms/content.js\";\r\nimport \"./skins/content/ms/content.js\";\r\n\r\nimport contentStyle from \"./content.css?raw\";\r\n\r\nimport { richTextEditorEmits, richTextEditorProps } from \"./rich-text-editor-options\";\r\n\r\nexport default defineComponent({\r\n\tname: \"MKRichTextEditor\",\r\n\tprops: richTextEditorProps,\r\n\temits: richTextEditorEmits,\r\n\tsetup(props, { emit }) {\r\n\t\tconst richTextEditorEl: Ref<HTMLElement | null> = ref(null);\r\n\r\n\t\tconst instance = getCurrentInstance();\r\n\r\n\t\t// 这个方法暂时没用上\r\n\t\t// function escapeHtml(text: string) {\r\n\t\t// \treturn text.replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\").replace(/\"/g, \"&quot;\").replace(/'/g, \"&#039;\");\r\n\t\t// }\r\n\r\n\t\tonMounted(async () => {\r\n\t\t\tconst tinymceInstance = await TinyMCE.init({\r\n\t\t\t\ttarget: unref(richTextEditorEl)!,\r\n\t\t\t\tpromotion: false,\r\n\t\t\t\tmenubar: false,\r\n\t\t\t\tplugins: props.plugins,\r\n\t\t\t\t//\"undo redo | styles | fontfamily | fontsize forecolor | bold italic underline strikethrough | alignleft aligncenter alignright | material | outdent indent | link | table | hr | removeformat | code fullscreen\"\r\n\t\t\t\ttoolbar: props.toolbar,\r\n\t\t\t\tinline: props.inline,\r\n\t\t\t\tvalid_elements: \"*[*]\", // 允许所有元素和属性\r\n\t\t\t\textended_valid_elements: \"script[src|async|defer|type|charset]\", // 允许 script 标签的特定属性\r\n\t\t\t\tcustom_elements: \"~script\", // 允许自定义标签\r\n\t\t\t\tvalid_children: \"+body[script]\", // 允许 body 包含 script 标签\r\n\t\t\t\tcleanup: false,\r\n\t\t\t\tapply_source_formatting: false,\r\n\t\t\t\tverify_html: false,\r\n\t\t\t\tfont_family_formats:\r\n\t\t\t\t\t\"微软雅黑='微软雅黑';宋体='宋体';黑体='黑体';仿宋='仿宋';楷体='楷体';隶书='隶书';幼圆='幼圆';Andale Mono=andale mono,times;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier;Georgia=georgia,palatino;Helvetica=helvetica;Impact=impact,chicago;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco;Times New Roman=times new roman,times;Trebuchet MS=trebuchet ms,geneva;Verdana=verdana,geneva;Webdings=webdings;Wingdings=wingdings\",\r\n\t\t\t\tlanguage: \"zh-Hans\",\r\n\t\t\t\tskin_url: \"ms\",\r\n\t\t\t\tcontent_css: \"ms\",\r\n\t\t\t\tcontent_style: contentStyle,\r\n\t\t\t\t// quickbars_insert_toolbar: 'image',\r\n\t\t\t\t// quickbars_selection_toolbar: 'forecolor backcolor fontsize | bold italic underline | fontfamily',\r\n\t\t\t\t// powerpaste_word_import: 'clean',\r\n\t\t\t\t// powerpaste_html_import: 'clean',\r\n\t\t\t\tsetup: (editor) => {\r\n\r\n\t\t\t\t\teditor.on(\"change\", function () {\r\n\t\t\t\t\t\t// console.log(\"Content changed:\", editor.getContent());\r\n\t\t\t\t\t});\r\n\t\t\t\t\teditor.ui.registry.addButton(\"material\", {\r\n\t\t\t\t\t\ticon: \"image\",\r\n\t\t\t\t\t\tonAction: async () => {\r\n\t\t\t\t\t\t\tconst response = await MKMaterialSelect();\r\n\t\t\t\t\t\t\tif (!response.success) {\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\teditor.insertContent(`<img src=\"${response.path}\" alt=\"${response.data!.id}\">`);\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t});\r\n\t\t\t\t\teditor.on(\"paste\", (event, ...args) => {\r\n\t\t\t\t\t\t// console.log(event, ...args);\r\n\t\t\t\t\t});\r\n\t\t\t\t\teditor.on(\"change input undo redo\", () => {\r\n\t\t\t\t\t\temit(\"update:model-value\", editor.getContent());\r\n\t\t\t\t\t});\r\n\t\t\t\t},\r\n\t\t\t});\r\n\t\t\twatch(\r\n\t\t\t\tcomputed(() => props.modelValue),\r\n\t\t\t\t(modelValue) => {\r\n\t\t\t\t\tfor (const instance of tinymceInstance) {\r\n\t\t\t\t\t\tif (instance.getContent() !== modelValue) {\r\n\t\t\t\t\t\t\tinstance.setContent(modelValue || \"<div></div\");\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse if (!modelValue) {\r\n\t\t\t\t\t\t\tinstance.setContent(\"<div></div>\");\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t{ immediate: true }\r\n\t\t\t);\r\n\t\t\twatch(\r\n\t\t\t\tcomputed(() => props.disabled),\r\n\t\t\t\t(disabled) => {\r\n\t\t\t\t\tfor (const instance of tinymceInstance) {\r\n\t\t\t\t\t\tinstance.mode.set(disabled ? \"readonly\" : \"design\");\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t{ immediate: true }\r\n\t\t\t);\r\n\r\n\t\t\twithCtx(() => {\r\n\t\t\t\tonBeforeUnmount(() => {\r\n\t\t\t\t\tfor (const instance of tinymceInstance) {\r\n\t\t\t\t\t\tinstance.destroy();\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}, instance);\r\n\t\t});\r\n\t\treturn () => {\r\n\t\t\treturn (\r\n\t\t\t\t<div class=\"mk-rich-text-editor\">\r\n\t\t\t\t\t<div class=\"mk-rich-text-editor__wrapper\" ref={((el: HTMLElement) => (richTextEditorEl.value = el)) as any} />\r\n\t\t\t\t</div>\r\n\t\t\t);\r\n\t\t};\r\n\t},\r\n});\r\n","import { withInstall } from \"@maketribe/utils\";\r\nimport RichTextEditor from \"./rich-text-editor\"\r\n\r\nexport const MKRichTextEditor = withInstall(RichTextEditor );\r\n\r\nexport default MKRichTextEditor;\r\n\r\nexport * from \"./rich-text-editor-options\";\r\n","import { MKMaterialSelect } from \"../components\";\r\nimport { MsMaterialType } from \"../dataviews\";\r\nimport {\r\n\tUploadContext,\r\n\tUploadResult,\r\n} from \"../../../components/basic/upload-file\";\r\n\r\nexport type MaterialUploadContextOptions = {\r\n\tallowMaterialTypeValues?: MsMaterialType[\"value\"][];\r\n};\r\n\r\nexport class MaterialUploadContext extends UploadContext {\r\n\tallowMaterialTypeValues: MsMaterialType[\"value\"][];\r\n\r\n\tconstructor(options: MaterialUploadContextOptions = {}) {\r\n\t\tsuper();\r\n\r\n\t\tthis.allowMaterialTypeValues = options.allowMaterialTypeValues || [];\r\n\t}\r\n\r\n\tsetAllowMaterialTypeValues(\r\n\t\tallowMaterialTypeValues: MsMaterialType[\"value\"][]\r\n\t) {\r\n\t\tthis.allowMaterialTypeValues = allowMaterialTypeValues;\r\n\t}\r\n\r\n\tasync selectFile(): Promise<UploadResult> {\r\n\t\tconst materialSelectResult = await MKMaterialSelect({\r\n\t\t\tallowMaterialTypeValues: this.allowMaterialTypeValues,\r\n\t\t});\r\n\r\n\t\treturn {\r\n\t\t\tsuccess: true,\r\n\t\t\tpath: materialSelectResult.path,\r\n\t\t\tmsg: \"\",\r\n\t\t\tname: materialSelectResult.data?.desc,\r\n\t\t};\r\n\t}\r\n}\r\n","import { ExtractPropTypes } from \"vue\";\r\nimport { buildProps } from \"@maketribe/utils\";\r\nimport { MsMaterialType } from \"../dataviews\";\r\n\r\nexport const materialUploadContextProps = buildProps({\r\n allowMaterialTypeValues: {\r\n type: Array<MsMaterialType[\"value\"]>,\r\n },\r\n} as const);\r\n\r\nexport type MaterialUploadContextProps = ExtractPropTypes<\r\n typeof materialUploadContextProps\r\n>;\r\n","import { computed, defineComponent, inject, unref, watch } from \"vue\";\r\nimport { materialUploadContextProps } from \"./material-upload-context-options\";\r\nimport { MaterialUploadContext } from \"./MaterialUploadContext\";\r\nimport { UploadContextCtxKey } from \"../../../components/basic/upload-file\";\r\nimport { withInstall } from \"@maketribe/utils\";\r\n\r\nconst _MaterialUploadContext = defineComponent({\r\n name: \"MKMaterialUploadContext\",\r\n props: materialUploadContextProps,\r\n inheritAttrs: false,\r\n setup(props, { slots }) {\r\n const allowMaterialTypeValues = computed(\r\n () => props.allowMaterialTypeValues\r\n );\r\n\r\n const materialUploadContext = new MaterialUploadContext({\r\n allowMaterialTypeValues: unref(allowMaterialTypeValues) ?? [],\r\n });\r\n\r\n watch(allowMaterialTypeValues, (allowMaterialTypeValues) => {\r\n materialUploadContext.setAllowMaterialTypeValues(\r\n allowMaterialTypeValues ?? []\r\n );\r\n });\r\n\r\n inject(UploadContextCtxKey, { uploadContext: materialUploadContext });\r\n\r\n return () => {\r\n return slots.default?.();\r\n };\r\n },\r\n});\r\n\r\nexport const MKMaterialUploadContext = withInstall(_MaterialUploadContext);\r\n","import { defineAsyncComponent } from \"vue\";\r\nimport { InternalMkModule, MkModule } from \"../../core\";\r\nimport {\r\n MsConfigTable,\r\n MsConfigForm,\r\n MsDenyIPAccessListForm,\r\n MsDenyIPAccessListTable,\r\n MsIPWhitelistTable,\r\n MsIPWhitelistForm,\r\n MsMaterialTable,\r\n MsMaterialForm,\r\n MsMaterialGroupTree,\r\n MsMaterialGroupForm,\r\n MsMemberTable,\r\n MsMemberForm,\r\n MsMenuTree,\r\n MsMenuForm,\r\n MsPermissionPointDefineTable,\r\n MsPermissionPointDefineForm,\r\n MsRouteTable,\r\n MsRouteForm,\r\n MsRegionTable,\r\n MsRegionForm,\r\n MsRoleTable,\r\n MsRoleForm,\r\n} from \"./dataviews\";\r\nimport { MKRichTextEditor } from \"./components\";\r\n\r\nexport * from \"./dataviews\";\r\n\r\nexport * from \"./components\";\r\n\r\nexport * from \"./material-upload-context\";\r\n\r\nexport * from \"./image-upload-context\";\r\n\r\nconst msModule: MkModule = (module: InternalMkModule) => {\r\n\r\n // 注册富文本编辑器\r\n module.app.use(MKRichTextEditor);\r\n\r\n // 注册配置相关DataModel\r\n module.registerDataTable(MsConfigTable);\r\n module.registerDataForm(MsConfigForm);\r\n\r\n // 注册黑名单相关DataModel\r\n module.registerDataTable(MsDenyIPAccessListTable);\r\n module.registerDataForm(MsDenyIPAccessListForm);\r\n\r\n // 注册白名单相关DataModel\r\n module.registerDataTable(MsIPWhitelistTable);\r\n module.registerDataForm(MsIPWhitelistForm);\r\n\r\n // 注册素材相关DataModel\r\n module.registerDataTable(MsMaterialTable);\r\n module.registerDataForm(MsMaterialForm);\r\n module.registerDataTree(MsMaterialGroupTree);\r\n module.registerDataForm(MsMaterialGroupForm);\r\n\r\n // 注册成员相关DataModel\r\n module.registerDataTable(MsMemberTable);\r\n module.registerDataForm(MsMemberForm);\r\n\r\n // 注册菜单相关DataModel\r\n module.registerDataTree(MsMenuTree);\r\n module.registerDataForm(MsMenuForm);\r\n module.registerDataTable(MsPermissionPointDefineTable);\r\n module.registerDataForm(MsPermissionPointDefineForm);\r\n module.registerDataTable(MsRouteTable);\r\n module.registerDataForm(MsRouteForm);\r\n\r\n // 注册省市区相关DataModel\r\n module.registerDataTable(MsRegionTable);\r\n module.registerDataForm(MsRegionForm);\r\n\r\n // 注册角色相关DataModel\r\n module.registerDataTable(MsRoleTable);\r\n module.registerDataForm(MsRoleForm);\r\n\r\n module.dataFormComponents.registerComponent({\r\n name: \"MKFormRichTextEditor\",\r\n title: \"富文本\",\r\n component: defineAsyncComponent(\r\n () => import(\"./components/rich-text-editor\")\r\n ),\r\n });\r\n\r\n module.registerExtendsPage({\r\n name: \"dv/ms-material/list\",\r\n path: \"/sys/materials\",\r\n component: () => import(\"./pages/ms-material/index.vue\"),\r\n meta: { name: \"ms-material\" },\r\n });\r\n\r\n module.registerExtendsPage({\r\n name: \"dv/ms-role/single/list/dialog\",\r\n path: \"/sys/roles\",\r\n component: () => import(\"./pages/ms-role/index.vue\"),\r\n meta: { name: \"ms-role\" },\r\n });\r\n\r\n module.registerExtendsPage({\r\n name: \"dv/ms-role/permission\",\r\n path: \"/sys/roles/:id/permission\",\r\n component: () => import(\"./pages/ms-role/permission-manage.vue\"),\r\n })\r\n\r\n module.registerExtendsPage({\r\n name: \"dv/local-log/single/tree/dialog\",\r\n path: \"/log/local\",\r\n component: () => import(\"./pages/local-log/index.vue\"),\r\n meta: { name: \"local-log\" },\r\n });\r\n\r\n module.registerExtendsPage({\r\n name: \"dv/ms-menu/list\",\r\n path: \"/sys/menus\",\r\n component: () => import(\"./pages/ms-menu/index.vue\"),\r\n meta: { name: \"ms-menu\" },\r\n });\r\n\r\n module.registerExtendsPage({\r\n name: \"icons/list\",\r\n path: \"/sys/icons\",\r\n component: () => import(\"./pages/icons/index.vue\"),\r\n });\r\n\r\n module.registerExtendsPage({\r\n name: \"dv/ms-todo/single/list/dialog\",\r\n path: \"/dv/todo\",\r\n component: () => import(\"./pages/to-do/index.vue\"),\r\n });\r\n};\r\n\r\nexport default msModule;\r\n","\r\nimport { type Component } from \"vue\"\r\n\r\n/**\r\n * 栏目扩展\r\n */\r\nexport type PartExtension = {\r\n title?:\"\",\r\n saveHandle?:Function,\r\n component:Component,\r\n save:Function\r\n}\r\n\r\n\r\nconst PartExtensionList:Array<({key:string|number,extension:PartExtension})> = [];\r\n\r\n/**\r\n * 使用扩展\r\n * @param partId 或者栏目名称\r\n * @returns \r\n */\r\nexport const usePartExtensionList = (partIdorName:string|number):any=>{\r\n return PartExtensionList.filter(item=>item.key == partIdorName).map(item=>item.extension);\r\n}\r\n\r\n/**\r\n * 注册扩展\r\n * @param partId \r\n * @returns \r\n */\r\nexport const registerPartExtension = (partIdorName:string|number,ext:PartExtension)=>{\r\n PartExtensionList.push({ key:partIdorName,extension:ext })\r\n}\r\n\r\n\r\n// 栏目内容扩展\r\nconst PartContentExtensionList:Array<({key:string|number,component:Component,adComponent?:Component})> = [];\r\n\r\n/**\r\n * 使用扩展\r\n * @param partId 或者栏目名称\r\n * @returns \r\n */\r\nexport const usePartContentComponent = (partIdorName:string|number):any=>{\r\n return PartContentExtensionList.find(item=>item.key == partIdorName);\r\n}\r\n\r\n/**\r\n * 注册扩展\r\n * @param partId \r\n * @returns \r\n */\r\nexport const registerPartContentComponent = (partIdorName:string|number,component:any,adComponent?:any)=>{\r\n\r\n if(!PartExtensionList.find(item=>item.key == partIdorName)){\r\n PartContentExtensionList.push({ key:partIdorName,component,adComponent })\r\n }\r\n else{\r\n throw new Error(`重复的栏目内容扩展,栏目标识:[${partIdorName}]`);\r\n }\r\n \r\n}\r\n","export const MODULE_NAME = \"cms\";\r\n","import { DataForm, DataFormOptions, FormColumn } from \"@maketribe/dm\";\r\nimport { ImageUploadContext, MaterialUploadContext } from \"../../../ms\";\r\nimport { DATA_MODEL_NAME } from \"../../../../constants\";\r\nimport { MODULE_NAME } from \"../../constants\";\r\n\r\nexport class CmsAdContentsForm extends DataForm {\r\n\tstatic [DATA_MODEL_NAME]: string = \"ad-content\";\r\n\tcutSise: string = \"\";\r\n\tconstructor(options: DataFormOptions & { cutSise?: string } = {}) {\r\n\t\tsuper({\r\n\t\t\tname: CmsAdContentsForm[DATA_MODEL_NAME],\r\n\t\t\tmoduleName: MODULE_NAME,\r\n\t\t\t...options,\r\n\t\t});\r\n\t\tthis.cutSise = options.cutSise as string\r\n\t}\r\n\r\n\tchangeCutSise(cutSise: string) {\r\n\t\tthis.cutSise = cutSise\r\n\t}\r\n\r\n\tprotected async initialize() {\r\n\t\tawait super.initialize();\r\n\t\tthis.setColumns([\r\n\t\t\t// new FormColumn({ name: \"adDefineId\", label: \"广告定义\", required: true, visible: true }),\r\n\t\t\tnew FormColumn({\r\n\t\t\t\tname: \"title\", label: \"标题\", required: true, componentInfo: \"MKFormInput\",\r\n\t\t\t\tcomponentProps: {\r\n\t\t\t\t\ttype: \"textarea\",\r\n\t\t\t\t\trows: 2\r\n\t\t\t\t}\r\n\t\t\t}),\r\n\t\t\tnew FormColumn({\r\n\t\t\t\tname: \"desc\", label: \"描述\", required: true, componentInfo: \"MKFormInput\",\r\n\t\t\t\tcomponentProps: {\r\n\t\t\t\t\ttype: \"textarea\",\r\n\t\t\t\t\trows: 5\r\n\t\t\t\t}\r\n\t\t\t}),\r\n\t\t\tnew FormColumn({\r\n\t\t\t\tname: \"type\",\r\n\t\t\t\tlabel: \"素材类型\",\r\n\t\t\t\trequired: true,\r\n\t\t\t\tdefaultValue: 1,\r\n\t\t\t\tcomponentInfo: \"MKFormDataSelect\",\r\n\t\t\t\tcomponentProps: {\r\n\t\t\t\t\toptions: [\r\n\t\t\t\t\t\t{ value: 1, label: \"图片\" },\r\n\t\t\t\t\t\t{ value: 2, label: \"视频\" },\r\n\t\t\t\t\t],\r\n\t\t\t\t},\r\n\t\t\t}),\r\n\t\t\tnew FormColumn({\r\n\t\t\t\tname: \"path\",\r\n\t\t\t\tlabel: \"素材路径\",\r\n\t\t\t\trequired: true,\r\n\t\t\t\tcomponentInfo: \"MKFormImageUpload\",\r\n\t\t\t\tcomponentProps: {\r\n\t\t\t\t\tuploadContext: new ImageUploadContext(this.cutSise),\r\n\t\t\t\t},\r\n\t\t\t}),\r\n\t\t\tnew FormColumn({ name: \"link\", label: \"跳转链接\" }),\r\n\t\t]);\r\n\r\n\t\tthis.formItemValueChangeEvent.on((column) => {\r\n\t\t\tif (column.formItem.name == \"type\") {\r\n\t\t\t\tif (column.data.value == 1) {\r\n\t\t\t\t\tthis.getColumn(\"path\")!.componentInfo = \"MKFormImageUpload\"\r\n\t\t\t\t\tthis.getColumn(\"path\")!.componentProps.uploadContext =\r\n\t\t\t\t\t\tnew ImageUploadContext(this.cutSise);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.getColumn(\"path\")!.componentInfo = \"MKFormVideoUpload\"\r\n\t\t\t\t\tthis.getColumn(\"path\")!.componentProps.uploadContext =\r\n\t\t\t\t\t\tnew MaterialUploadContext({\r\n\t\t\t\t\t\t\tallowMaterialTypeValues: [2],\r\n\t\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n}\r\n","import {\r\n DataTable,\r\n DataTableOptions,\r\n TableActionColumn,\r\n TableColumn,\r\n} from \"@maketribe/dm\";\r\nimport { DATA_MODEL_NAME } from \"../../../../constants\";\r\nimport { MODULE_NAME } from \"../../constants\";\r\n\r\nexport class CmsAdContentsTable extends DataTable {\r\n static [DATA_MODEL_NAME]: string = \"ad-content\";\r\n constructor(options: Omit<DataTableOptions, \"name\"> = {}) {\r\n super({\r\n name: CmsAdContentsTable[DATA_MODEL_NAME],\r\n moduleName: MODULE_NAME,\r\n ...options,\r\n });\r\n }\r\n\r\n protected async initialize() {\r\n await super.initialize();\r\n\r\n this.setColumns([\r\n new TableColumn({ name: \"desc\", label: \"描述\" }),\r\n new TableColumn({ name: \"title\", label: \"标题\" }),\r\n new TableColumn({ name: \"type\", label: \"素材类型\" }),\r\n new TableColumn({\r\n name: \"path\",\r\n label: \"素材路径\",\r\n componentInfo: \"MKColumnImage\",\r\n }),\r\n new TableColumn({ name: \"link\", label: \"跳转链接\" }),\r\n new TableActionColumn(),\r\n ]);\r\n }\r\n}\r\n","import {\r\n DataForm,\r\n DataFormOptions,\r\n FormColumn,\r\n FormDetailColumn,\r\n} from \"@maketribe/dm\";\r\nimport { CmsAdContentsTable, CmsAdContentsForm } from \"../cms-ad-contents\";\r\nimport { DATA_MODEL_NAME } from \"../../../../constants\";\r\nimport { MODULE_NAME } from \"../../constants\";\r\n\r\nexport class CmsAdDefinesForm extends DataForm {\r\n static [DATA_MODEL_NAME]: string = \"ad-define\";\r\n\r\n constructor(options: DataFormOptions = {}) {\r\n super({\r\n name: CmsAdDefinesForm[DATA_MODEL_NAME],\r\n moduleName: MODULE_NAME,\r\n ...options,\r\n });\r\n }\r\n\r\n protected async initialize() {\r\n await super.initialize();\r\n\r\n this.setColumns([\r\n new FormColumn({ name: \"key\", label: \"广告位KEY\", required: true }),\r\n new FormColumn({ name: \"desc\", label: \"广告位描述\", required: true }),\r\n new FormColumn({ name: \"width\", label: \"宽度\" }),\r\n new FormColumn({ name: \"height\", label: \"高度\" }),\r\n new FormDetailColumn({\r\n name: \"contents\",\r\n label: \"内容\",\r\n associationFieldName: \"adDefineId\",\r\n detailForm: this.register(new CmsAdContentsForm()),\r\n detailTable: this.register(new CmsAdContentsTable()),\r\n }),\r\n ]);\r\n }\r\n}\r\n","import { DataTable, DataTableOptions, FilterColumn, TableActionColumn, TableColumn } from \"@maketribe/dm\";\r\nimport { DATA_MODEL_NAME } from \"../../../../constants\";\r\nimport { MODULE_NAME } from \"../../constants\";\r\n\r\nexport class CmsAdDefinesTable extends DataTable {\r\n\tstatic [DATA_MODEL_NAME]: string = \"ad-define\";\r\n\tconstructor(options: DataTableOptions = {}) {\r\n\t\tsuper({\r\n\t\t\tname: CmsAdDefinesTable[DATA_MODEL_NAME],\r\n\t\t\tmoduleName: MODULE_NAME,\r\n\t\t\t...options,\r\n\t\t});\r\n\t}\r\n\r\n\tprotected async initialize() {\r\n\t\tawait super.initialize();\r\n\r\n\t\tthis.dataFilter.setColumns([new FilterColumn({ name: \"key\", label: \"广告位KEY\" }), new FilterColumn({ name: \"desc\", label: \"广告位描述\" })]);\r\n\r\n\t\tthis.setColumns([new TableColumn({ name: \"key\", label: \"广告位KEY\" }), new TableColumn({ name: \"desc\", label: \"广告位描述\" }), new TableActionColumn()]);\r\n\t}\r\n}\r\n","import { DataTable, DataTableOptions, FilterColumn, TableActionColumn, TableColumn } from \"@maketribe/dm\";\r\nimport { DATA_MODEL_NAME } from \"../../../../constants\";\r\nimport { MODULE_NAME } from \"../../constants\";\r\nimport { MSAppClient } from \"../../../../core\";\r\nimport { OrderType } from \"@maketribe/request\";\r\n\r\nexport class CmsArticlesTable extends DataTable {\r\n\tstatic [DATA_MODEL_NAME]: string = \"article\";\r\n\r\n\tconstructor(options: Omit<DataTableOptions, \"name\"> = {}) {\r\n\t\tsuper({\r\n\t\t\tname: CmsArticlesTable[DATA_MODEL_NAME],\r\n\t\t\tmoduleName: MODULE_NAME,\r\n\t\t\t...options,\r\n\t\t});\r\n\t}\r\n\r\n\tprotected async initialize() {\r\n\t\tawait super.initialize();\r\n\t\ttry {\r\n\t\t\tthis.sorter.setColumnSort(\"releaseDate\", OrderType.DESC)\r\n\t\t\tthis.sorter.setColumnSort(\"isNew\", OrderType.DESC);\r\n\t\t\tthis.sorter.setColumnSort(\"isTop\", OrderType.DESC);\r\n\r\n\t\t\tthis.dataFilter.setColumns([\r\n\t\t\t\tnew FilterColumn({ name: \"title\", label: \"标题\", search: true }),\r\n\t\t\t\tnew FilterColumn({ name: \"subTitle\", label: \"子标题\" }),\r\n\t\t\t\tnew FilterColumn({ name: \"desc\", label: \"简介\" })\r\n\t\t\t]);\r\n\r\n\t\t\tif ((MSAppClient.instance?.vueRouter.currentRoute as any)?.query?.cmsPartId) {\r\n\t\t\t\tthis.dataFilter.setParam(\"cmsPartId\", (MSAppClient.instance?.vueRouter.currentRoute as any).query.cmsPartId);\r\n\t\t\t}\r\n\t\t\tthis.setColumns([\r\n\t\t\t\tnew TableColumn({ name: \"title\", label: \"标题\" }),\r\n\t\t\t\tnew TableColumn({ name: \"subTitle\", label: \"子标题\" }),\r\n\t\t\t\tnew TableColumn({ name: \"desc\", label: \"描述\" }),\r\n\t\t\t\tnew TableColumn({ name: \"cover\", label: \"封面图\", componentInfo: \"MKColumnImage\" }),\r\n\t\t\t\t// nwe TableColumn({ name: \"T\", label: \"内容\" }),\r\n\t\t\t\tnew TableColumn({ name: \"publishTime\", label: \"发表日期\" }),\r\n\t\t\t\t// new TableColumn({\r\n\t\t\t\t// name: \"isNew\",\r\n\t\t\t\t// label: \"是否是新的\",\r\n\t\t\t\t// componentInfo: \"MKColumnObjectMappingText\",\r\n\t\t\t\t// componentProps: {\r\n\t\t\t\t// mapping: [\"否\", \"是\"],\r\n\t\t\t\t// },\r\n\t\t\t\t// }),\r\n\t\t\t\t// new TableColumn({\r\n\t\t\t\t// name: \"isTop\",\r\n\t\t\t\t// label: \"是否置顶\",\r\n\t\t\t\t// componentInfo: \"MKColumnObjectMappingText\",\r\n\t\t\t\t// componentProps: {\r\n\t\t\t\t// mapping: [\"否\", \"是\"],\r\n\t\t\t\t// },\r\n\t\t\t\t// }),\r\n\t\t\t\t// new TableColumn({\r\n\t\t\t\t// name: \"isHotRecommend\",\r\n\t\t\t\t// label: \"是否热点推荐\",\r\n\t\t\t\t// componentInfo: \"MKColumnObjectMappingText\",\r\n\t\t\t\t// componentProps: {\r\n\t\t\t\t// mapping: [\"否\", \"是\"],\r\n\t\t\t\t// },\r\n\t\t\t\t// }),\r\n\t\t\t\t// new TableColumn({\r\n\t\t\t\t// name: \"isPartRecommend\",\r\n\t\t\t\t// label: \"是否栏目推荐\",\r\n\t\t\t\t// componentInfo: \"MKColumnObjectMappingText\",\r\n\t\t\t\t// componentProps: {\r\n\t\t\t\t// mapping: [\"否\", \"是\"],\r\n\t\t\t\t// },\r\n\t\t\t\t// }),\r\n\t\t\t\t// new TableColumn({\r\n\t\t\t\t// name: \"isDraft\",\r\n\t\t\t\t// label: \"是否是草稿\",\r\n\t\t\t\t// componentInfo: \"MKColumnObjectMappingText\",\r\n\t\t\t\t// componentProps: {\r\n\t\t\t\t// mapping: [\"否\", \"是\"],\r\n\t\t\t\t// },\r\n\t\t\t\t// }),\r\n\t\t\t\t// new TableColumn({\r\n\t\t\t\t// name: \"isShowList\",\r\n\t\t\t\t// label: \"是否列表显示\",\r\n\t\t\t\t// componentInfo: \"MKColumnObjectMappingText\",\r\n\t\t\t\t// componentProps: {\r\n\t\t\t\t// mapping: [\"否\", \"是\"],\r\n\t\t\t\t// },\r\n\t\t\t\t// }),\r\n\t\t\t\tnew TableColumn({ name: \"sortNo\", label: \"排序\" }),\r\n\t\t\t\tnew TableActionColumn(),\r\n\t\t\t]);\r\n\t\t} catch (e) {\r\n\t\t\tconsole.error(e);\r\n\t\t}\r\n\t\t//筛选\r\n\t}\r\n}\r\n","import { ActionButton, DataTableOptions, DeleteButton, EditButton, TableActionColumn, TableColumn, DataTree, DataTreeNode } from \"@maketribe/dm\";\r\nimport { DATA_MODEL_NAME } from \"../../../../constants\";\r\nimport { MODULE_NAME } from \"../../constants\";\r\nimport { OrderType, R, ResponseConfig } from \"@maketribe/request\";\r\nimport { MSAppClient } from \"../../../../core\";\r\n\r\nexport class CmsPartTree extends DataTree {\r\n\tstatic [DATA_MODEL_NAME]: string = \"part\";\r\n\r\n\tconstructor(options: Omit<DataTableOptions, \"name\"> = {}) {\r\n\t\tsuper({\r\n\t\t\tname: CmsPartTree[DATA_MODEL_NAME],\r\n\t\t\tmoduleName: MODULE_NAME,\r\n\t\t\tprops: { parent: \"parentId\" },\r\n sortFieldName: \"sortNo\",\r\n\t\t\t...options,\r\n\t\t});\r\n\t}\r\n\r\n\tprotected async initialize() {\r\n\t\tawait super.initialize();\r\n \r\n\t\tthis.sorter.setColumnSort(\"sortNo\", OrderType.DESC);\r\n\r\n\t\t// const { data } = await new CmsPartTypesTable().dataViewRequest.allList();\r\n\r\n\t\t// this.dataFilter.setColumns([new FilterColumn({ name: \"name\", label: \"栏目名称\" })]);\r\n\r\n\t\tthis.setColumns([\r\n\t\t\tnew TableColumn({\r\n\t\t\t\tname: \"data.name\",\r\n\t\t\t\tlabel: \"栏目名称\",\r\n\t\t\t\talign: \"left\",\r\n\t\t\t\twidth: \"150px\",\r\n\t\t\t}),\r\n\t\t\t// new TableColumn({\r\n\t\t\t// \tname: \"data.cmsPartTypeId\",\r\n\t\t\t// \tlabel: \"栏目类型\",\r\n\t\t\t// \tcomponentInfo: \"MKColumnObjectMappingText\",\r\n\t\t\t// \tcomponentProps: {\r\n\t\t\t// \t\tmapping: data.data.reduce((result, cur) => {\r\n\t\t\t// \t\t\tresult[cur.id] = cur.desc;\r\n\t\t\t// \t\t\treturn result;\r\n\t\t\t// \t\t}, {}),\r\n\t\t\t// \t},\r\n\t\t\t// }),\r\n\t\t\tnew TableColumn({\r\n\t\t\t\tname: \"data.isHome\",\r\n\t\t\t\tlabel: \"是否是首页\",\r\n\t\t\t\tcomponentInfo: \"MKColumnObjectMappingText\",\r\n\t\t\t\tcomponentProps: {\r\n\t\t\t\t\tmapping: [\"否\", \"是\"],\r\n\t\t\t\t},\r\n\t\t\t}),\r\n\t\t\tnew TableColumn({\r\n\t\t\t\tname: \"data.isShowMenu\",\r\n\t\t\t\tlabel: \"是否在菜单\",\r\n\t\t\t\tcomponentInfo: \"MKColumnObjectMappingText\",\r\n\t\t\t\tcomponentProps: {\r\n\t\t\t\t\tmapping: [\"否\", \"是\"],\r\n\t\t\t\t},\r\n\t\t\t}),\r\n\t\t\tnew TableColumn({ name: \"sortNo\", label: \"排序号\" }),\r\n\t\t\tnew TableActionColumn({\r\n\t\t\t\twidth: \"180px\",\r\n\t\t\t\tbuttons: [\r\n\t\t\t\t\tnew EditButton(),\r\n\t\t\t\t\tnew DeleteButton(),\r\n\t\t\t\t\tnew ActionButton({\r\n\t\t\t\t\t\tlabel: \"栏目文章\",\r\n\t\t\t\t\t\thandler: (item) => {\r\n\t\t\t\t\t\t\tMSAppClient.instance?.vueRouter.push({\r\n\t\t\t\t\t\t\t\tpath: \"/dv/article\",\r\n\t\t\t\t\t\t\t\tquery: {\r\n\t\t\t\t\t\t\t\t\tcmsPartId: item.data.id,\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t}),\r\n\t\t\t\t],\r\n\t\t\t}),\r\n\t\t]);\r\n\t}\r\n\r\n\tpublic nodeHasChildren(node: DataTreeNode<any>): boolean {\r\n\t\treturn true;\r\n\t\t// return ![\"1\"].includes(node.data.cmsPartTypeId);\r\n\t}\r\n\r\n load(params?: Record<string, any>): Promise<ResponseConfig<R<any[]> & { totalRecCount: string; }>> {\r\n return this.loadAll(params);\r\n }\r\n\r\n\tformatItem(item: any) {\r\n\t\titem.children = item.children || [];\r\n\r\n\t\treturn item;\r\n\t}\r\n\r\n}\r\n","import {\r\n DataTable,\r\n DataTableOptions,\r\n FilterColumn,\r\n TableActionColumn,\r\n TableColumn,\r\n} from \"@maketribe/dm\";\r\nimport { DATA_MODEL_NAME } from \"../../../../constants\";\r\nimport { MODULE_NAME } from \"../../constants\";\r\n\r\nexport class CmsTagsTable extends DataTable {\r\n static [DATA_MODEL_NAME]: string = \"tag\";\r\n constructor(options: DataTableOptions = {}) {\r\n super({\r\n name: CmsTagsTable[DATA_MODEL_NAME],\r\n moduleName: MODULE_NAME,\r\n ...options,\r\n });\r\n }\r\n\r\n protected async initialize() {\r\n await super.initialize();\r\n this.dataFilter.setColumns([\r\n new FilterColumn({ name: \"tag\", label: \"标签\" }),\r\n ]);\r\n\r\n this.setColumns([\r\n new TableColumn({ name: \"tag\", label: \"标签\" }),\r\n new TableColumn({\r\n name: \"icon\",\r\n label: \"图标\",\r\n componentInfo: \"MKColumnImage\",\r\n }),\r\n new TableActionColumn(),\r\n ]);\r\n }\r\n}\r\n","import { DataForm, DataFormOptions, FormColumn } from \"@maketribe/dm\";\r\nimport { DATA_MODEL_NAME } from \"../../../../constants\";\r\nimport { MODULE_NAME } from \"../../constants\";\r\n\r\nexport class CmsTagsForm extends DataForm {\r\n static [DATA_MODEL_NAME]: string = \"tag\";\r\n\r\n constructor(options: DataFormOptions = {}) {\r\n super({\r\n name: CmsTagsForm[DATA_MODEL_NAME],\r\n moduleName: MODULE_NAME,\r\n ...options,\r\n });\r\n }\r\n\r\n protected async initialize() {\r\n await super.initialize();\r\n\r\n this.setColumns([\r\n new FormColumn({ name: \"tag\", label: \"标签\", required: true }),\r\n new FormColumn({\r\n name: \"icon\",\r\n label: \"图标\",\r\n componentInfo: \"MKFormImageUpload\",\r\n }),\r\n ]);\r\n }\r\n}\r\n","import { DataForm, DataFormOptions, FormColumn } from \"@maketribe/dm\";\r\nimport { MaterialUploadContext } from \"../../../../ms\";\r\nimport { DATA_MODEL_NAME } from \"../../../../../constants\";\r\nimport { MODULE_NAME } from \"../../../constants\";\r\n\r\nexport class CmsArticleAtlasForm extends DataForm {\r\n static [DATA_MODEL_NAME]: string = \"article-atlas\";\r\n\r\n constructor(options: DataFormOptions = {}) {\r\n super({\r\n name: CmsArticleAtlasForm[DATA_MODEL_NAME],\r\n moduleName: MODULE_NAME,\r\n ...options,\r\n });\r\n }\r\n\r\n protected async initialize() {\r\n await super.initialize();\r\n this.setColumns([\r\n new FormColumn({ name: \"key\", label: \"图集标识\" }),\r\n new FormColumn({ name: \"title\", label: \"标题\", required: true }),\r\n new FormColumn({\r\n name: \"path\",\r\n label: \"图片路径\",\r\n required: true,\r\n componentInfo: \"MKFormImageUpload\",\r\n componentProps: {\r\n uploadContext: new MaterialUploadContext({\r\n allowMaterialTypeValues: [1,2],\r\n }),\r\n },\r\n }),\r\n new FormColumn({ name: \"sortNo\", label: \"排序序号\", defaultValue: 0 }),\r\n ]);\r\n }\r\n}\r\n","import {\r\n DataTable,\r\n DataTableOptions,\r\n TableActionColumn,\r\n TableColumn,\r\n} from \"@maketribe/dm\";\r\nimport { DATA_MODEL_NAME } from \"../../../../../constants\";\r\nimport { MODULE_NAME } from \"../../../constants\";\r\n\r\nexport class CmsArticleAtlasTable extends DataTable {\r\n static [DATA_MODEL_NAME]: string = \"article-atlas\";\r\n constructor(options: Omit<DataTableOptions, \"name\"> = {}) {\r\n super({\r\n name: CmsArticleAtlasTable[DATA_MODEL_NAME],\r\n moduleName: MODULE_NAME,\r\n ...options,\r\n });\r\n }\r\n\r\n protected async initialize() {\r\n await super.initialize();\r\n\r\n this.setColumns([\r\n new TableColumn({ name: \"key\", label: \"图集标识\" }),\r\n new TableColumn({ name: \"title\", label: \"标题\" }),\r\n new TableColumn({\r\n name: \"path\",\r\n label: \"图片路径\",\r\n componentInfo: \"MKColumnImage\",\r\n }),\r\n new TableColumn({ name: \"sortNo\", label: \"跳转链接\" }),\r\n new TableActionColumn(),\r\n ]);\r\n }\r\n}\r\n","import { DataForm, DataFormOptions, FormColumn, FormDetailColumn } from \"@maketribe/dm\";\r\nimport { CmsPartTree } from \"../cms-parts/CmsPartTree\";\r\nimport { CmsTagsForm, CmsTagsTable } from \"../cms-tags\";\r\nimport { CmsArticleAtlasForm, CmsArticleAtlasTable } from \"./cms-article-atlas\";\r\nimport { DATA_MODEL_NAME } from \"../../../../constants\";\r\nimport { MODULE_NAME } from \"../../constants\";\r\nimport { MaterialUploadContext } from \"../../../ms\";\r\nimport { html } from \"@codemirror/lang-html\";\r\nimport { ResponseConfig, R } from \"@maketribe/request\";\r\nimport { MSAppClient } from \"../../../../core\";\r\n\r\nexport class CmsArticlesForm extends DataForm {\r\n\tstatic [DATA_MODEL_NAME]: string = \"article\";\r\n\r\n\tconstructor(options: DataFormOptions = {}) {\r\n\t\tsuper({\r\n\t\t\tname: CmsArticlesForm[DATA_MODEL_NAME],\r\n\t\t\tmoduleName: MODULE_NAME,\r\n\t\t\t...options,\r\n\t\t});\r\n\t}\r\n\tprotected loadRequest(paramsOrID: Record<string, any>): Promise<ResponseConfig<R<any>, any>> {\r\n\t\treturn super.loadDetailRequest(paramsOrID);\r\n\t}\r\n\tprotected async initialize() {\r\n\t\tawait super.initialize();\r\n\t\tthis.setColumns([\r\n\t\t\tnew FormColumn({\r\n\t\t\t\tname: \"cmsPartId\",\r\n\t\t\t\tlabel: \"所属栏目\",\r\n\t\t\t\t// componentInfo: \"MKFormDataTableSelect\",\r\n\t\t\t\tcomponentInfo: \"MKDataTreeSelect\",\r\n\t\t\t\tcomponentProps: {\r\n\t\t\t\t\tlabelFieldName: \"name\",\r\n\t\t\t\t\tdataTree: this.register(new CmsPartTree()),\r\n\t\t\t\t},\r\n\t\t\t\trequired: true,\r\n\t\t\t}),\r\n\t\t\tnew FormColumn({\r\n\t\t\t\tname: \"title\",\r\n\t\t\t\tlabel: \"标题\",\r\n\t\t\t\trequired: true,\r\n\t\t\t}),\r\n\t\t\tnew FormColumn({\r\n\t\t\t\tname: \"subTitle\",\r\n\t\t\t\tlabel: \"子标题\",\r\n\t\t\t}),\r\n\t\t\tnew FormColumn({\r\n\t\t\t\tname: \"cover\",\r\n\t\t\t\tlabel: \"封面图\",\r\n\t\t\t\tcomponentInfo: \"MKFormImageUpload\",\r\n\t\t\t\tcomponentProps: {\r\n\t\t\t\t\tuploadContext: new MaterialUploadContext({\r\n\t\t\t\t\t\tallowMaterialTypeValues: [1],\r\n\t\t\t\t\t}),\r\n\t\t\t\t},\r\n\t\t\t}),\r\n\t\t\tnew FormColumn({\r\n\t\t\t\tname: \"banner\",\r\n\t\t\t\tlabel: \"文字banner\",\r\n\t\t\t}),\r\n\t\t\tnew FormColumn({\r\n\t\t\t\tname: \"desc\",\r\n\t\t\t\tlabel: \"文章描述\",\r\n\t\t\t\tcomponentInfo: \"MKFormInput\",\r\n\t\t\t\tcomponentProps: {\r\n\t\t\t\t\ttype: \"textarea\",\r\n\t\t\t\t\trow: 3\r\n\t\t\t\t}\r\n\t\t\t}),\r\n\t\t\tnew FormColumn({\r\n\t\t\t\tname: \"seoKeywords\",\r\n\t\t\t\tlabel: \"SEO 关键词\",\r\n\t\t\t}),\r\n\t\t\tnew FormColumn({\r\n\t\t\t\tname: \"seoDesc\",\r\n\t\t\t\tlabel: \"SEO 页面描述\",\r\n\t\t\t}),\r\n\t\t\tnew FormColumn({\r\n\t\t\t\tname: \"releaseDate\",\r\n\t\t\t\tlabel: \"发布日期\",\r\n\t\t\t\tcomponentInfo: \"MKFormDatePicker\",\r\n\t\t\t}),\r\n\t\t\tnew FormColumn({\r\n\t\t\t\tname: \"author\",\r\n\t\t\t\tlabel: \"作者\",\r\n\t\t\t}),\r\n\t\t\tnew FormColumn({\r\n\t\t\t\tname: \"locationDesc\",\r\n\t\t\t\tlabel: \"地址描述\",\r\n\t\t\t}),\r\n\t\t\tnew FormColumn({\r\n\t\t\t\tname: \"tags\",\r\n\t\t\t\tlabel: \"标签\",\r\n\t\t\t\tcomponentInfo: \"MKFormDataTableSelect\",\r\n\t\t\t\tdefaultValue: [],\r\n\t\t\t\tcomponentProps: {\r\n\t\t\t\t\tobjectValue: true,\r\n\t\t\t\t\tdataTable: this.register(new CmsTagsTable()),\r\n\t\t\t\t\tdataForm: this.register(new CmsTagsForm()),\r\n\t\t\t\t\tlabelFieldName: \"tag\",\r\n\t\t\t\t\tmultiple: true,\r\n\t\t\t\t},\r\n\t\t\t}),\r\n\r\n\t\t\tnew FormColumn({\r\n\t\t\t\tname: \"sortNo\",\r\n\t\t\t\tlabel: \"排序序号\",\r\n\t\t\t\tdefaultValue: 0,\r\n\t\t\t\trequired: true,\r\n\t\t\t}),\r\n\t\t\tnew FormColumn({\r\n\t\t\t\tname: \"isNew\",\r\n\t\t\t\tlabel: \"最新\",\r\n\t\t\t\tdefaultValue: 0,\r\n\t\t\t\tcomponentInfo: \"MKFormRadioBox\",\r\n\t\t\t\tcomponentProps: {\r\n\t\t\t\t\toptions: [\r\n\t\t\t\t\t\t{ label: \"是\", value: 1 },\r\n\t\t\t\t\t\t{ label: \"否\", value: 0 },\r\n\t\t\t\t\t],\r\n\t\t\t\t},\r\n\t\t\t\trequired: true,\r\n\t\t\t}),\r\n\t\t\tnew FormColumn({\r\n\t\t\t\tname: \"isTop\",\r\n\t\t\t\tlabel: \"置顶\",\r\n\t\t\t\tdefaultValue: 0,\r\n\t\t\t\tcomponentInfo: \"MKFormRadioBox\",\r\n\t\t\t\tcomponentProps: {\r\n\t\t\t\t\toptions: [\r\n\t\t\t\t\t\t{ label: \"是\", value: 1 },\r\n\t\t\t\t\t\t{ label: \"否\", value: 0 },\r\n\t\t\t\t\t],\r\n\t\t\t\t},\r\n\t\t\t\trequired: true,\r\n\t\t\t}),\r\n\t\t\tnew FormColumn({\r\n\t\t\t\tname: \"isHotRecommend\",\r\n\t\t\t\tlabel: \"热点推荐\",\r\n\t\t\t\tdefaultValue: 0,\r\n\t\t\t\tcomponentInfo: \"MKFormRadioBox\",\r\n\t\t\t\tcomponentProps: {\r\n\t\t\t\t\toptions: [\r\n\t\t\t\t\t\t{ label: \"是\", value: 1 },\r\n\t\t\t\t\t\t{ label: \"否\", value: 0 },\r\n\t\t\t\t\t],\r\n\t\t\t\t},\r\n\t\t\t\trequired: true,\r\n\t\t\t}),\r\n\t\t\tnew FormColumn({\r\n\t\t\t\tname: \"isPartRecommend\",\r\n\t\t\t\tlabel: \"栏目推荐\",\r\n\t\t\t\tdefaultValue: 0,\r\n\t\t\t\tcomponentInfo: \"MKFormRadioBox\",\r\n\t\t\t\tcomponentProps: {\r\n\t\t\t\t\toptions: [\r\n\t\t\t\t\t\t{ label: \"是\", value: 1 },\r\n\t\t\t\t\t\t{ label: \"否\", value: 0 },\r\n\t\t\t\t\t],\r\n\t\t\t\t},\r\n\t\t\t\trequired: true,\r\n\t\t\t}),\r\n\t\t\tnew FormColumn({\r\n\t\t\t\tname: \"isDraft\",\r\n\t\t\t\tlabel: \"草稿\",\r\n\t\t\t\tdefaultValue: 0,\r\n\t\t\t\tcomponentInfo: \"MKFormRadioBox\",\r\n\t\t\t\tcomponentProps: {\r\n\t\t\t\t\toptions: [\r\n\t\t\t\t\t\t{ label: \"是\", value: 1 },\r\n\t\t\t\t\t\t{ label: \"否\", value: 0 },\r\n\t\t\t\t\t],\r\n\t\t\t\t},\r\n\t\t\t\trequired: true,\r\n\t\t\t}),\r\n\t\t\tnew FormColumn({\r\n\t\t\t\tname: \"isShowList\",\r\n\t\t\t\tlabel: \"列表显示\",\r\n\t\t\t\tdefaultValue: 1,\r\n\t\t\t\tcomponentInfo: \"MKFormRadioBox\",\r\n\t\t\t\tcomponentProps: {\r\n\t\t\t\t\toptions: [\r\n\t\t\t\t\t\t{ label: \"是\", value: 1 },\r\n\t\t\t\t\t\t{ label: \"否\", value: 0 },\r\n\t\t\t\t\t],\r\n\t\t\t\t},\r\n\t\t\t\trequired: true,\r\n\t\t\t}),\r\n\t\t\tnew FormColumn({\r\n\t\t\t\tname: \"downloadPath\",\r\n\t\t\t\tlabel: \"附件链接\",\r\n\t\t\t}),\r\n\t\t\tnew FormColumn({\r\n\t\t\t\tname: \"content\",\r\n\t\t\t\tlabel: \"内容\",\r\n\t\t\t\t// componentInfo: \"MKFormRichTextEditor\",\r\n\t\t\t\tcomponentInfo: \"MKCodeEditor\",\r\n\t\t\t\tcomponentProps: {\r\n\t\t\t\t\textensions: [html()],\r\n\t\t\t\t},\r\n\t\t\t}),\r\n\r\n\t\t\tnew FormDetailColumn({\r\n\t\t\t\tname: \"atlas\",\r\n\t\t\t\tlabel: \"文章图集\",\r\n\t\t\t\tassociationFieldName: \"cmsArticleId\",\r\n\t\t\t\tdefaultValue: [],\r\n\t\t\t\tdetailForm: this.register(new CmsArticleAtlasForm()),\r\n\t\t\t\tdetailTable: this.register(new CmsArticleAtlasTable()),\r\n\t\t\t}),\r\n\t\t]);\r\n\t}\r\n\r\n\tformatSubmitData(data: any) {\r\n\t\tObject.keys(data).forEach((key) => {\r\n\t\t\tif (data[key] === \"\") {\r\n\t\t\t\tdata[key] = null;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tdata.sortNo -= 0;\r\n\r\n\t\treturn data;\r\n\t}\r\n\tsetData(data: any): void {\r\n\t\tsuper.setData(data);\r\n\t}\r\n\r\n\t/**\r\n\t * 发布\r\n\t */\r\n\tstatic async publish(mode: string, partId: string, id: string) {\r\n\r\n\t\tif (mode == \"dynamic\") {\r\n\t\t\t// 调用发布接口\r\n\t\t\treturn await MSAppClient!.instance?.httpRequest.post(`${MODULE_NAME}/content/publish/content-dynamic`, {\r\n\t\t\t\tpartId: partId, contentIds: [id]\r\n\t\t\t});\r\n\t\t}\r\n\t\telse {\r\n\t\t\t// 调用发布接口\r\n\t\t\treturn await MSAppClient!.instance?.httpRequest.post(`${MODULE_NAME}/content/publish/content`, {\r\n\t\t\t\tpartId: partId, contentIds: [id]\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * 保存并发布发布\r\n\t */\r\n\tasync saveAndPublish(mode: string) {\r\n\r\n\t\tconst partId = this.data.cmsPartId;\r\n\t\tconst id = this.data.id;\r\n\r\n\t\tlet result: any = await this.submit()\r\n\r\n\t\tif (result.data.code == 200) {\r\n\t\t\tresult = await CmsArticlesForm.publish(mode, partId, id)\r\n\t\t}\r\n\r\n\t\treturn result\r\n\t}\r\n}\r\n","import { DataForm, DataFormOptions, FormColumn } from \"@maketribe/dm\";\r\nimport { DATA_MODEL_NAME } from \"../../../../constants\";\r\nimport { MODULE_NAME } from \"../../constants\";\r\n\r\nexport class CmsPartTypesForm extends DataForm {\r\n\tstatic [DATA_MODEL_NAME]: string = \"part-type\";\r\n\r\n\tconstructor(options: DataFormOptions = {}) {\r\n\t\tsuper({\r\n\t\t\tname: CmsPartTypesForm[DATA_MODEL_NAME],\r\n\t\t\tmoduleName: MODULE_NAME,\r\n\t\t\t...options,\r\n\t\t});\r\n\t}\r\n\r\n\tprotected async initialize() {\r\n\t\tawait super.initialize();\r\n\t\tthis.setColumns([new FormColumn({ name: \"desc\", label: \"描述\", required: true }), new FormColumn({ name: \"contentPublishService\", label: \"内容发布服务\" })]);\r\n\t}\r\n}\r\n","import {\r\n DataTable,\r\n DataTableOptions,\r\n FilterColumn,\r\n TableActionColumn,\r\n TableColumn,\r\n} from \"@maketribe/dm\";\r\nimport { DATA_MODEL_NAME } from \"../../../../constants\";\r\nimport { MODULE_NAME } from \"../../constants\";\r\n\r\nexport class CmsPartTypesTable extends DataTable {\r\n static [DATA_MODEL_NAME]: string = \"part-type\";\r\n constructor(options: Omit<DataTableOptions, \"name\"> = {}) {\r\n super({\r\n name: CmsPartTypesTable[DATA_MODEL_NAME],\r\n moduleName: MODULE_NAME,\r\n ...options,\r\n });\r\n }\r\n\r\n protected async initialize() {\r\n await super.initialize();\r\n\r\n this.dataFilter.setColumns([\r\n new FilterColumn({ name: \"desc\", label: \"描述\" }),\r\n ]);\r\n this.setColumns([\r\n\t\t\tnew TableColumn({ name: \"desc\", label: \"描述\",width:\"180px\" }),\r\n\t\t\tnew TableColumn({ name: \"contentPublishService\", label: \"内容发布服务\" }),\r\n\t\t\tnew TableActionColumn(),\r\n\t\t]);\r\n }\r\n}\r\n","import { DataForm, DataFormOptions, FormColumn, isWhereFilter,Dialoger,Messager } from \"@maketribe/dm\";\r\nimport { CmsPartTypesTable } from \"../cms-part-types\";\r\nimport { CmsArticlesTable } from \"../cms-articles/CmsArticlesTable\";\r\nimport { DATA_MODEL_NAME } from \"../../../../constants\";\r\nimport { MODULE_NAME } from \"../../constants\";\r\nimport { html } from \"@codemirror/lang-html\";\r\nimport { CmsPartTree } from \"./CmsPartTree\";\r\nimport { MSAppClient } from \"../../../../core\";\r\n\r\nexport class CmsPartForm extends DataForm {\r\n\r\n\tstatic [DATA_MODEL_NAME]: string = \"part\";\r\n\r\n /**\r\n * 开启栏目预览,此处需要调整Api接口的根\r\n * @param partId \r\n * @param pageNo \r\n */\r\n static openPreview = (partId:string,pageNo?:string|number) => {\r\n if (!!pageNo) {\r\n window.open(`/api/${MODULE_NAME}/content/preview/part/${partId}?pageNo=${pageNo}`)\r\n } else {\r\n window.open(`/api/${MODULE_NAME}/content/preview/part/${partId}`)\r\n }\r\n }\r\n\r\n /**\r\n * 发布所有栏目\r\n * @returns \r\n */\r\n static publishAll = async () => {\r\n\r\n const httpRequest = MSAppClient.instance?.httpRequest!;\r\n\r\n if (await Dialoger.confirm({ title: \"全量发布\", message: \"是否整站全量发布?\", type: \"warning\" })) {\r\n \r\n const response = await httpRequest.post(`/${MODULE_NAME}/content/publish/all`);\r\n \r\n if (response.data.code !== 200) {\r\n Messager.error({ message: response.data.msg });\r\n return;\r\n }\r\n \r\n Messager.success({ message: \"发布成功\" });\r\n }\r\n \r\n }\r\n\r\n /**\r\n * 资源发布\r\n * @returns \r\n */\r\n static publishAssets = async () => {\r\n\r\n const httpRequest = MSAppClient.instance!.httpRequest;\r\n\r\n if (await Dialoger.confirm({\r\n title: \"发布资源\",\r\n message: \"是否发布资源?\",\r\n type: \"warning\",\r\n })) {\r\n \r\n const response = await httpRequest.post(`/${MODULE_NAME}/content/publish/assets`);\r\n\r\n if (response.data.code !== 200) {\r\n Messager.error({ message: response.data.msg });\r\n return;\r\n }\r\n\r\n Messager.success({ message: \"发布成功\" });\r\n }\r\n}\r\n\r\n /**\r\n * 发布栏目\r\n */\r\n static async publish(partId:string,options:object){\r\n \r\n const httpRequest = MSAppClient.instance?.httpRequest!;\r\n\r\n const response = await httpRequest.post(`/${MODULE_NAME}/content/publish/part`, {\r\n partIds: [partId], ...options\r\n });\r\n\r\n if (response.data.code !== 200) {\r\n Messager.error({ message: response.data.msg });\r\n return;\r\n }\r\n\r\n Messager.success({ message: \"发布成功\" });\r\n\r\n }\r\n\r\n\tconstructor(options: DataFormOptions = {}) {\r\n\t\tsuper({\r\n\t\t\tname: CmsPartForm[DATA_MODEL_NAME],\r\n\t\t\tmoduleName: MODULE_NAME,\r\n\t\t\t...options,\r\n\t\t});\r\n\t}\r\n\r\n\tcmsPartTree = this.register(new CmsPartTree());\r\n\tcmsArticlesTable = this.register(new CmsArticlesTable());\r\n\tstatic outerChainHideColumn = [\r\n\t\t\"seoDesc\",\r\n\t\t\"seoKeywords\",\r\n\t\t\"pageSize\",\r\n\t\t\"cmsCoverArticleId\",\r\n\t\t\"content\",\r\n\t\t\"coverTemplate\",\r\n\t\t\"listTemplate\",\r\n\t\t\"contentTemplate\",\r\n\t\t\"coverRouter\",\r\n\t\t\"listRouter\",\r\n\t\t\"contentRouter\",\r\n\t];\r\n\tstatic menuHideColumn = [\r\n\t\t\"seoDesc\",\r\n\t\t\"seoKeywords\",\r\n\t\t\"pageSize\",\r\n\t\t\"externalLink\",\r\n\t\t\"cmsCoverArticleId\",\r\n\t\t\"content\",\r\n\t\t\"isShowMenu\",\r\n\t\t\"coverTemplate\",\r\n\t\t\"listTemplate\",\r\n\t\t\"contentTemplate\",\r\n\t\t\"coverRouter\",\r\n\t\t\"listRouter\",\r\n\t\t\"contentRouter\",\r\n\t];\r\n\tstatic contentHideColumn = [\"externalLink\"];\r\n\r\n\tprotected async initialize() {\r\n\t\tif (isWhereFilter(this.cmsPartTree.dataFilter)) {\r\n\t\t\tconst defaultGroup = this.cmsPartTree.dataFilter.getDefaultGroup();\r\n\r\n\t\t\tdefaultGroup.clear();\r\n\r\n\t\t\tdefaultGroup.addCondition(\"cmsPartTypeId\", \"!=\", 1);\r\n\t\t}\r\n\r\n\t\tthis.dataChangeEvent.on(({ data }) => {\r\n\t\t\tif (isWhereFilter(this.cmsArticlesTable.dataFilter)) {\r\n\t\t\t\tconst defaultGroup = this.cmsArticlesTable.dataFilter.getDefaultGroup();\r\n\t\t\t\tdefaultGroup.clear();\r\n\t\t\t\tif (!!data?.id) {\r\n\t\t\t\t\tdefaultGroup.addCondition(\"cmsPartId\", \"=\", data?.id);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\tawait super.initialize();\r\n\t\tthis.setColumns([\r\n\t\t\tnew FormColumn({\r\n\t\t\t\tname: \"parentId\",\r\n\t\t\t\tlabel: \"父栏目\",\r\n\t\t\t\tcomponentInfo: \"MKDataTreeSelect\",\r\n\t\t\t\tcomponentProps: {\r\n\t\t\t\t\tlabelFieldName: \"name\",\r\n\t\t\t\t\tdataTree: this.cmsPartTree,\r\n\t\t\t\t},\r\n\t\t\t}),\r\n\t\t\tnew FormColumn({\r\n\t\t\t\tname: \"cmsPartTypeId\",\r\n\t\t\t\tlabel: \"栏目类型\",\r\n\t\t\t\tcomponentInfo: \"MKFormDataSelect\",\r\n\t\t\t\tdefaultValue: \"2\",\r\n\t\t\t\tcomponentProps: {\r\n\t\t\t\t\tlabelFieldName: \"desc\",\r\n\t\t\t\t\tdataTable: this.register(new CmsPartTypesTable()),\r\n\t\t\t\t},\r\n\t\t\t\trequired: true,\r\n\t\t\t}),\r\n\t\t\tnew FormColumn({\r\n\t\t\t\tname: \"cmsCoverArticleId\",\r\n\t\t\t\tlabel: \"封面文章\",\r\n\t\t\t\tcomponentInfo: \"MKFormDataTableSelect\",\r\n\t\t\t\tcomponentProps: {\r\n\t\t\t\t\tlabelFieldName: \"desc\",\r\n\t\t\t\t\tdataTable: this.cmsArticlesTable\r\n\t\t\t\t},\r\n\t\t\t}),\r\n\t\t\tnew FormColumn({\r\n\t\t\t\tname: \"name\",\r\n\t\t\t\tlabel: \"栏目名称\",\r\n\t\t\t\trequired: true,\r\n\t\t\t}),\r\n\t\t\tnew FormColumn({\r\n\t\t\t\tname: \"title\",\r\n\t\t\t\tlabel: \"栏目标题\",\r\n\t\t\t\trequired: true,\r\n\t\t\t}),\r\n\t\t\tnew FormColumn({\r\n\t\t\t\tname: \"externalLink\",\r\n\t\t\t\tlabel: \"外部链接\",\r\n\t\t\t\tvisible: false,\r\n\t\t\t\trequired: true,\r\n\t\t\t}),\r\n\t\t\tnew FormColumn({\r\n\t\t\t\tname: \"coverTemplate\",\r\n\t\t\t\tlabel: \"封面模板\",\r\n\t\t\t\tcomponentInfo: \"MKResourceSelectInput\",\r\n\t\t\t\tcomponentProps: {}\r\n\t\t\t}),\r\n\t\t\tnew FormColumn({\r\n\t\t\t\tname: \"coverRouter\",\r\n\t\t\t\tlabel: \"封面路由\",\r\n\t\t\t}),\r\n\t\t\tnew FormColumn({\r\n\t\t\t\tname: \"listTemplate\",\r\n\t\t\t\tlabel: \"列表模板\",\r\n\t\t\t\tcomponentInfo: \"MKResourceSelectInput\"\r\n\t\t\t}),\r\n\t\t\tnew FormColumn({\r\n\t\t\t\tname: \"listRouter\",\r\n\t\t\t\tlabel: \"列表路由\",\r\n\t\t\t}),\r\n\t\t\tnew FormColumn({\r\n\t\t\t\tname: \"contentTemplate\",\r\n\t\t\t\tlabel: \"内容模板\",\r\n\t\t\t\tcomponentInfo: \"MKResourceSelectInput\"\r\n\t\t\t}),\r\n\t\t\tnew FormColumn({\r\n\t\t\t\tname: \"contentRouter\",\r\n\t\t\t\tlabel: \"内容路由\",\r\n\t\t\t}),\r\n\t\t\tnew FormColumn({\r\n\t\t\t\tname: \"seoKeywords\",\r\n\t\t\t\tlabel: \"seo关键词\",\r\n\t\t\t}),\r\n\t\t\tnew FormColumn({\r\n\t\t\t\tname: \"seoDesc\",\r\n\t\t\t\tlabel: \"seo页面描述\",\r\n\t\t\t\tcomponentInfo: \"MKFormInput\",\r\n\t\t\t\tcomponentProps: {\r\n\t\t\t\t\ttype: \"textarea\",\r\n\t\t\t\t\trows: 3,\r\n\t\t\t\t},\r\n\t\t\t}),\r\n\t\t\tnew FormColumn({\r\n\t\t\t\tname: \"pageSize\",\r\n\t\t\t\tlabel: \"每页的文章数\",\r\n\t\t\t\tdefaultValue: 10,\r\n\t\t\t\trequired: true,\r\n\t\t\t}),\r\n\t\t\tnew FormColumn({\r\n\t\t\t\tname: \"sortNo\",\r\n\t\t\t\tlabel: \"排序\",\r\n\t\t\t\tdefaultValue: 0,\r\n\t\t\t\trequired: true,\r\n\t\t\t}),\r\n\t\t\tnew FormColumn({\r\n\t\t\t\tname: \"isHome\",\r\n\t\t\t\tlabel: \"是否是首页\",\r\n\t\t\t\tdefaultValue: 0,\r\n\t\t\t\tcomponentInfo: \"MKFormRadioBox\",\r\n\t\t\t\tcomponentProps: {\r\n\t\t\t\t\toptions: [\r\n\t\t\t\t\t\t{ label: \"是\", value: 1 },\r\n\t\t\t\t\t\t{ label: \"否\", value: 0 },\r\n\t\t\t\t\t],\r\n\t\t\t\t},\r\n\t\t\t\trequired: true,\r\n\t\t\t}),\r\n\t\t\tnew FormColumn({\r\n\t\t\t\tname: \"isShowMenu\",\r\n\t\t\t\tlabel: \"是否在菜单\",\r\n\t\t\t\tdefaultValue: 1,\r\n\t\t\t\tcomponentInfo: \"MKFormRadioBox\",\r\n\t\t\t\tcomponentProps: {\r\n\t\t\t\t\toptions: [\r\n\t\t\t\t\t\t{ label: \"是\", value: 1 },\r\n\t\t\t\t\t\t{ label: \"否\", value: 0 },\r\n\t\t\t\t\t],\r\n\t\t\t\t},\r\n\t\t\t\trequired: true,\r\n\t\t\t}),\r\n\t\t\tnew FormColumn({\r\n\t\t\t\tname: \"content\",\r\n\t\t\t\tlabel: \"内容\",\r\n\t\t\t\tcomponentInfo: \"MKCodeEditor\",\r\n\t\t\t\t// componentInfo: \"MKFormInput\",\r\n\t\t\t\tcomponentProps: {\r\n\t\t\t\t\textensions: [html()],\r\n\t\t\t\t},\r\n\t\t\t}),\r\n\t\t]);\r\n\t\t/**\r\n\t\t * @param value 栏目类型的id\r\n\t\t */\r\n\t\tconst hideHandle = (value: number) => {\r\n\r\n\t\t\t//如果是类型Id隐藏一些列\r\n\t\t\tif (value == 1) {\r\n\t\t\t\t// 外链 outerChainHideColumn\r\n\t\t\t\tthis.getColumns().forEach((column) => {\r\n\t\t\t\t\tif (CmsPartForm.outerChainHideColumn.indexOf(column.name) > -1) {\r\n\t\t\t\t\t\tcolumn.visible = false;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tcolumn.visible = true;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t} else if (value == 3) {\r\n\t\t\t\t// 菜单 menuHideColumn\r\n\t\t\t\tthis.getColumns().forEach((column) => {\r\n\t\t\t\t\tif (CmsPartForm.menuHideColumn.indexOf(column.name) > -1) {\r\n\t\t\t\t\t\tcolumn.visible = false;\r\n\t\t\t\t\t\tthis.data.isShowMenu = 1;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tcolumn.visible = true;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t} else {\r\n\t\t\t\t// 图文 contentHideColumn\r\n\t\t\t\tthis.getColumns().forEach((column) => {\r\n\t\t\t\t\tif (CmsPartForm.contentHideColumn.indexOf(column.name) > -1) {\r\n\t\t\t\t\t\tcolumn.visible = false;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tcolumn.visible = true;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tthis.formItemValueChangeEvent.on((column) => {\r\n\t\t\tif (column.formItem.name == \"cmsPartTypeId\") {\r\n\t\t\t\thideHandle(column.data.value);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tformatSubmitData(data: any) {\r\n\t\tObject.keys(data).forEach((key) => {\r\n\t\t\tif (data[key] === \"\") {\r\n\t\t\t\tdata[key] = null;\r\n\t\t\t}\r\n\t\t});\r\n\t\tif (data.sortNo) {\r\n\t\t\tdata.sortNo -= 0;\r\n\t\t}\r\n\r\n\t\treturn data;\r\n\t}\r\n}\r\n","import { CmsPartForm } from \"./CmsPartForm\"\r\nimport { ResponseConfig, R } from \"@maketribe/request\";\r\nimport { DataFormType,Errors, MKError } from \"@maketribe/dm\";\r\nimport { Messager } from \"@maketribe/dm\";\r\n\r\n/**\r\n * 内容管理的栏目表单\r\n */\r\nexport class CmsContentManPartForm extends CmsPartForm{\r\n\r\n async submit(data: Record<string, any> = {}) {\r\n \r\n data = { ...this.data, ...data };\r\n\r\n let response: ResponseConfig<R<null>, any>;\r\n\r\n switch (this.getDataFormType()) {\r\n case DataFormType.UPDATE:\r\n response = await this.update(data);\r\n break;\r\n case DataFormType.ADD:\r\n response = await this.add(data);\r\n break;\r\n default:\r\n throw new MKError(Errors.FORM_TYPE_MISMATCH_ERROR_CODE);\r\n }\r\n\r\n if(response.data.code == 200){\r\n this.editRecord(data.id)\r\n Messager.success(\"保存成功!\" as any);\r\n }\r\n\r\n return response;\r\n }\r\n\r\n}\r\n","import { CmsPartForm } from \"./CmsPartForm\"\r\nimport { CmsPartTypesTable } from \"../cms-part-types\"\r\nimport { FormColumn } from \"@maketribe/dm\";\r\n\r\nexport class CmsPartMiniForm extends CmsPartForm {\r\n protected async initialize() {\r\n await super.initialize();\r\n this.setColumns([\r\n new FormColumn({\r\n name: \"cmsPartTypeId\",\r\n label: \"栏目类型\",\r\n componentInfo: \"MKFormDataSelect\",\r\n defaultValue: \"2\",\r\n componentProps: {\r\n dataTable: this.register(\r\n new CmsPartTypesTable()\r\n ) as CmsPartTypesTable,\r\n },\r\n required: true,\r\n }),\r\n new FormColumn({\r\n name: \"name\",\r\n label: \"栏目名称\",\r\n required: true,\r\n }),\r\n new FormColumn({\r\n name: \"title\",\r\n label: \"栏目标题\",\r\n required: true,\r\n }),\r\n new FormColumn({\r\n name: \"isShowMenu\",\r\n label: \"是否在菜单\",\r\n defaultValue: 1,\r\n componentInfo: \"MKFormRadioBox\",\r\n componentProps: {\r\n options: [\r\n { label: \"是\", value: 1 },\r\n { label: \"否\", value: 0 },\r\n ],\r\n },\r\n required: true,\r\n })\r\n ]);\r\n }\r\n}\r\n","import { InternalMkModule, MkModule } from \"../../core\";\r\n\r\nimport { registerPartExtension,registerPartContentComponent } from \"./composables/part-extensions\"\r\n \r\nimport {\r\n CmsAdContentsTable,\r\n CmsAdContentsForm,\r\n CmsAdDefinesTable,\r\n CmsAdDefinesForm,\r\n CmsPartTree,\r\n CmsPartForm,\r\n CmsPartTypesTable,\r\n CmsPartTypesForm,\r\n CmsTagsTable,\r\n CmsTagsForm,\r\n CmsArticlesTable,\r\n CmsArticlesForm,\r\n} from \"./dataviews\";\r\n\r\nexport * from \"./dataviews\";\r\nexport { registerPartExtension,registerPartContentComponent }\r\n\r\nconst cmsModule: MkModule = (module: InternalMkModule) => {\r\n module.registerDataTable(CmsAdContentsTable);\r\n module.registerDataForm(CmsAdContentsForm);\r\n\r\n module.registerDataTable(CmsAdDefinesTable);\r\n module.registerDataForm(CmsAdDefinesForm);\r\n\r\n module.registerDataTree(CmsPartTree);\r\n module.registerDataForm(CmsPartForm);\r\n\r\n module.registerDataTable(CmsPartTypesTable);\r\n module.registerDataForm(CmsPartTypesForm);\r\n\r\n module.registerDataTable(CmsTagsTable);\r\n module.registerDataForm(CmsTagsForm);\r\n\r\n module.registerDataTable(CmsArticlesTable);\r\n module.registerDataForm(CmsArticlesForm);\r\n\r\n module.registerExtendsPage({\r\n name: \"cms-resource/index\",\r\n path: \"/cms/resource\",\r\n component: () => import(\"./pages/cms-resource/index.vue\"),\r\n });\r\n\r\n // cms 设置\r\n module.registerExtendsPage({\r\n name: \"cms/settings\",\r\n path: \"cms/settings\",\r\n component: () => import(\"./pages/cms-settigns/index.vue\")\r\n });\r\n\r\n // 内容管理\r\n module.registerExtendsPage({\r\n name: \"cms/contents\",\r\n path: \"/cms/contents\",\r\n component: () => import(\"./pages/cms-contents/index.vue\"),\r\n meta: { name: \"cms-contents\" },\r\n });\r\n\r\n // 栏目编辑\r\n module.registerExtendsPage({\r\n name: \"cms/article\",\r\n path: \"/cms/article\",\r\n component: () => import(\"./pages/cms-contents/article-edit-add-page.vue\"),\r\n meta: { name: \"cms-article\" },\r\n });\r\n\r\n // 广告定义页面\r\n module.registerExtendsPage({\r\n name: \"cms/ad\",\r\n path: \"/cms/ad\",\r\n component: () => import(\"./pages/cms-ad/index.vue\"),\r\n // component: () => import(\"./pages/test/index.vue\")\r\n });\r\n};\r\n\r\nexport default cmsModule;\r\n","import { encodePath } from \"ufo\";\r\n\r\nenum SegmentParserState {\r\n initial,\r\n static,\r\n dynamic,\r\n optional,\r\n catchall,\r\n}\r\n\r\ninterface ScannedFile {\r\n path: string;\r\n module: any;\r\n}\r\n\r\nenum SegmentTokenType {\r\n static,\r\n dynamic,\r\n optional,\r\n catchall,\r\n}\r\n\r\ninterface SegmentToken {\r\n type: SegmentTokenType;\r\n value: string;\r\n}\r\n\r\nexport function generateRoutesFromFiles(files: ScannedFile[]) {\r\n const routes: any[] = [];\r\n\r\n for (const file of files) {\r\n const segments = file.path.split(\"/\");\r\n\r\n const route: Record<string, any> = {\r\n meta: {},\r\n ...file.module.mkRoute,\r\n key: \"\",\r\n path: \"\",\r\n component: async () => file.module,\r\n children: [],\r\n };\r\n\r\n let parent = routes;\r\n\r\n for (const segment of segments) {\r\n const tokens = parseSegment(segment);\r\n const segmentName = tokens.map(({ value }) => value).join(\"\");\r\n\r\n route.key += (route.key && \"/\") + segmentName;\r\n\r\n const path = route.path + getRoutePath(tokens).replace(/\\/index$/, \"/\");\r\n const child = parent.find(\r\n (parentRoute) =>\r\n parentRoute.key === route.key && parentRoute.path === path\r\n );\r\n\r\n if (child && child.children) {\r\n parent = child.children;\r\n route.path = \"\";\r\n } else if (segmentName === \"index\" && !route.path) {\r\n route.path += \"/\";\r\n } else if (segmentName !== \"index\") {\r\n route.path += getRoutePath(tokens);\r\n }\r\n }\r\n\r\n route.path = file.module.mkRoute?.path || route.path;\r\n\r\n parent.push(route);\r\n }\r\n\r\n return prepareRoutes(routes);\r\n}\r\n\r\nfunction getRoutePath(tokens: SegmentToken[]) {\r\n return tokens.reduce((path, token) => {\r\n return (\r\n path +\r\n (token.type === SegmentTokenType.optional\r\n ? `:${token.value}?`\r\n : token.type === SegmentTokenType.dynamic\r\n ? `:${token.value}()`\r\n : token.type === SegmentTokenType.catchall\r\n ? `:${token.value}(.*)*`\r\n : encodePath(token.value).replace(/:/g, \"\\\\:\"))\r\n );\r\n }, \"/\");\r\n}\r\n\r\nconst PARAM_CHAR_RE = /[\\w\\d_.]/;\r\n\r\nfunction parseSegment(segment: string) {\r\n let state: SegmentParserState = SegmentParserState.initial;\r\n\r\n let i = 0;\r\n\r\n let buffer = \"\";\r\n const tokens: SegmentToken[] = [];\r\n\r\n function consumeBuffer() {\r\n if (!buffer) {\r\n return;\r\n }\r\n\r\n if (state === SegmentParserState.initial) {\r\n throw new Error(\"错误的状态\");\r\n }\r\n\r\n tokens.push({\r\n type:\r\n state === SegmentParserState.static\r\n ? SegmentTokenType.static\r\n : state === SegmentParserState.dynamic\r\n ? SegmentTokenType.dynamic\r\n : state === SegmentParserState.optional\r\n ? SegmentTokenType.optional\r\n : SegmentTokenType.catchall,\r\n value: buffer,\r\n });\r\n\r\n buffer = \"\";\r\n }\r\n\r\n while (i < segment.length) {\r\n const c = segment[i];\r\n\r\n switch (state) {\r\n case SegmentParserState.initial:\r\n buffer = \"\";\r\n\r\n if (c === \"[\") {\r\n state = SegmentParserState.dynamic;\r\n } else {\r\n i--;\r\n state = SegmentParserState.static;\r\n }\r\n\r\n break;\r\n case SegmentParserState.static:\r\n if (c === \"[\") {\r\n consumeBuffer();\r\n state = SegmentParserState.dynamic;\r\n } else {\r\n buffer += c;\r\n }\r\n break;\r\n case SegmentParserState.catchall:\r\n case SegmentParserState.dynamic:\r\n case SegmentParserState.optional:\r\n if (buffer === \"...\") {\r\n buffer = \"\";\r\n state = SegmentParserState.catchall;\r\n }\r\n\r\n if (c === \"[\" && state === SegmentParserState.dynamic) {\r\n state = SegmentParserState.optional;\r\n }\r\n\r\n if (\r\n c === \"]\" &&\r\n (state !== SegmentParserState.optional || segment[i - 1] === \"]\")\r\n ) {\r\n if (!buffer) {\r\n throw new Error(\"空参数\");\r\n }\r\n consumeBuffer();\r\n state = SegmentParserState.initial;\r\n } else if (PARAM_CHAR_RE.test(c)) {\r\n buffer += c;\r\n }\r\n break;\r\n }\r\n\r\n i++;\r\n }\r\n\r\n if (state === SegmentParserState.dynamic) {\r\n throw new Error(`Unfinished param \"${buffer}\"`);\r\n }\r\n\r\n consumeBuffer();\r\n\r\n return tokens;\r\n}\r\n\r\nfunction findRouteByKey(key: string, routes: any[]): any | undefined {\r\n for (const route of routes) {\r\n if (route.key === key) {\r\n return route;\r\n }\r\n }\r\n return findRouteByKey(key, routes);\r\n}\r\n\r\nfunction prepareRoutes(routes: any[], parent?: any, keys = new Set<string>()) {\r\n for (const route of routes) {\r\n // Remove -index\r\n if (route.key) {\r\n route.key = route.key.replace(/\\/index$/, \"\").replace(/\\//g, \"-\");\r\n\r\n if (keys.has(route.key)) {\r\n const existingRoute = findRouteByKey(route.key, routes);\r\n const extra = existingRoute?.name\r\n ? `is the same as \\`${existingRoute.file}\\``\r\n : \"is a duplicate\";\r\n console.warn(\r\n `Route name generated for \\`${route.file}\\` ${extra}. You may wish to set a custom name using \\`definePageMeta\\` within the page file.`\r\n );\r\n }\r\n }\r\n\r\n route.path = route.path.replace(/\\/\\//g, \"/\");\r\n\r\n // Remove leading / if children route\r\n if (parent && route.path.startsWith(\"/\")) {\r\n route.path = route.path.slice(1);\r\n }\r\n\r\n if (route.children?.length) {\r\n route.children = prepareRoutes(route.children, route, keys);\r\n }\r\n\r\n // if (route.children?.find((childRoute: any) => childRoute.path === \"\")) {\r\n // delete route.key;\r\n // }\r\n\r\n if (route.key) {\r\n keys.add(route.key);\r\n }\r\n }\r\n\r\n return routes;\r\n}\r\n","import { createPinia } from \"pinia\"\r\n\r\nconst pinia = createPinia()\r\n\r\nexport default pinia\r\n","import { App, reactive } from \"vue\";\r\nimport Message from 'vue-m-message'\r\nimport FloatingVue from 'floating-vue'\r\nimport 'floating-vue/dist/style.css'\r\nimport 'vue-m-message/dist/style.css'\r\nimport 'overlayscrollbars/overlayscrollbars.css';\r\nimport {\r\n createRouter,\r\n createWebHashHistory,\r\n Router as VueRouter,\r\n} from \"vue-router\";\r\nimport { DataTableHeaderComponents, MSAppClient } from \"./core\";\r\nimport { HttpRequest, WebHttpRequest } from \"@maketribe/request\";\r\nimport { MSAPPCLIENT_CONTEXT_KEY } from \"./tokens\";\r\nimport msModule from \"./modules/ms\";\r\nimport cmsModule from \"./modules/cms\";\r\nimport { installer } from \"./installer\";\r\n\r\n// 加载 iconify 图标\r\n// import { downloadAndInstall } from './iconify'\r\n// import icons from './iconify/index.json'\r\n//\r\n// if (icons.isOfflineUse) {\r\n// for (const info of icons.collections) {\r\n// downloadAndInstall(info)\r\n// }\r\n// }\r\n\r\nimport { generateRoutesFromFiles } from \"./utils\";\r\nimport {\r\n DataFilterComponents,\r\n DataFormComponents,\r\n DataTableComponents,\r\n} from \"./core\";\r\nimport pinia from './store'\r\n\r\nexport type InitMsApplicationOptions = {\r\n routes: any;\r\n vueRouter?: VueRouter;\r\n app: App;\r\n appID: string;\r\n logo?: string;\r\n projectName?: string;\r\n locale?: string;\r\n httpRequest?: HttpRequest;\r\n};\r\n\r\nexport const initApplication = async (options: InitMsApplicationOptions) => {\r\n const app = options.app;\r\n\r\n app.use(installer);\r\n app.use(Message);\r\n app.use(FloatingVue);\r\n app.use(pinia);\r\n\r\n const vueRouter =\r\n options.vueRouter ??\r\n createRouter({\r\n history: createWebHashHistory(),\r\n routes: [],\r\n });\r\n\r\n const msAppClient = reactive(\r\n new MSAppClient({\r\n app,\r\n appID: options!.appID,\r\n logo: options!.logo ?? \"\",\r\n projectName: options!.projectName ?? \"\",\r\n httpRequest: options.httpRequest ?? new WebHttpRequest(),\r\n origin: location.origin,\r\n locale: options!.locale,\r\n vueRouter,\r\n dataTableComponents: new DataTableComponents(),\r\n dataTableHeaderComponents: new DataTableHeaderComponents(),\r\n dataFormComponents: new DataFormComponents(),\r\n dataFilterComponents: new DataFilterComponents(),\r\n whereFilterComponents: new DataFilterComponents(),\r\n })\r\n ) as unknown as MSAppClient;\r\n\r\n msAppClient.addModule(msModule);\r\n msAppClient.addModule(cmsModule);\r\n\r\n app.provide(MSAPPCLIENT_CONTEXT_KEY, { msAppClient });\r\n\r\n MSAppClient.instance = msAppClient;\r\n\r\n (window as any).msAppClient = msAppClient;\r\n\r\n const routes = generateRoutesFromFiles(\r\n Object.keys(options.routes).map((key) => {\r\n return {\r\n path: key.replace(/^\\.\\/pages\\/(.+)\\.vue$/, (_, g) => g),\r\n module: options.routes[key]?.default || options.routes[key],\r\n };\r\n })\r\n );\r\n\r\n msAppClient.pageManager.afterInitdEvent.on(() => {\r\n for (const route of routes) {\r\n if (route.key.startsWith(\"index\")) {\r\n msAppClient.pageManager.addExtendsPage(route);\r\n } else {\r\n msAppClient.pageManager.addNormalPage(route);\r\n }\r\n }\r\n });\r\n\r\n await msAppClient.init();\r\n\r\n app.use(msAppClient.vueRouter);\r\n\r\n return msAppClient;\r\n};\r\n","import \"virtual:uno.css\";\r\nimport \"../style/index.scss\";\r\nimport \"./assets/iconfonts/iconfont.js\";\r\nimport \"./assets/iconfonts/oa-iconfont.js\";\r\nexport * from \"./constants\";\r\n\r\n\r\nexport * from \"./core\";\r\n\r\nimport { installer } from \"./installer\";\r\n\r\nexport * from \"./layouts\";\r\nexport * from \"./composables\";\r\nexport * from \"./components\";\r\nexport * from \"./tokens\";\r\n\r\nexport const install = installer.install;\r\nexport const version = installer.version;\r\n\r\nexport * from \"./init-application\";\r\nexport * from \"./define-data-table\";\r\nexport * from \"./define-data-form\";\r\nexport * from \"./define-data-tree\";\r\n\r\nexport * from \"./modules/ms\";\r\nexport * from \"./modules/cms\";\r\n"],"names":["h","l","c","a","RouteType","MenuType","RegionLevel","LoginLogType","path","menus","_a","index","uid","settingsDefault","menu","item","defaultOpenedPaths","vueRoute","_b","DataTable","options","modelValue","selections","handleClick","SvgIcon","defineComponent","name","props","buttonProps","emits","buttonEmits","setup","emit","icon","_createVNode","MKSvgIcon","text","label","ElButton","type","link","default","_isSlot","s","Object","prototype","toString","call","_isVNode","inheritAttrs","configProviderProps","slots","provideGlobalConfig","currentLocale","computed","i18n","currentLanguage","_slot","ElConfigProvider","unref","renderSlot","dataTableSelectProps","dataTableSelectEmits","abstractSelectInstance","ref","dataTable","get","set","v","watch","multiple","setSelectionColumn","TableSelectCacheColumn","immediate","handleMousedown","disabled","_dataTable","_selections","setSelection","result","Dialoger","dataTableSelectDialog","isConfirm","setSelections","MKAbstractSelect","value","el","objectValue","labelFieldName","primaryFieldName","formatOptions","selectRecords","map","ElSelect","Grid","dataSelectProps","dataSelectEmit","loading","onMounted","init","dataFilter","setReady","load","filterMethod","debounce","filterFieldNames","length","useCondition","group","clear","fieldName","addCondition","children","ElOption","allowCreate","filterable","paginationProps","buildProps","total","Number","required","currentPage","pageSize","pageSizes","Array","paginationEmits","handleCurrentPageChange","handlePageSizeChange","_createTextVNode","ElPagination","vueRouter","useRouter","msAppClient","MSAppClient","instance","ready","useSlots","currentRoute","route","userSession","router","tabs","routeInfo","getRouteByName","setCurrentMenuNode","setCurrentTab","menuNode","findMenuNodeByID","menuId","tab","findTabByID","fullPath","createTab","id","title","affix","matched","meta","realRoute","switchTab","MKConfigProvider","dataTableComponents","dataFormComponents","dataFilterComponents","whereFilterComponents","dataTableHeaderComponents","datePickerProps","datePickerEmits","datePickerTypes","includes","valueFormat","ElDatePicker","iconSelectProps","iconSelectEmits","icons","search","filteredIcons","_search","toLowerCase","trim","filter","formItem","elFormItem","elUseFormItem","svgList","document","querySelectorAll","iconList","svg","from","symbols","concat","symbol","replace","Set","keys","elIcons","validate","flush","_value","onClick","ElInput","Search","ElScrollbar","_WebFileUploadContext","webFileUploadContextProps","accept","webFileUpload","webFileUploadContext","WebFileUploadContext","setAccept","setWebFileUpload","provide","UploadContextCtxKey","uploadContext","MKWebFileUploadContext","withInstall","_UploadFile","uploadFileProps","uploadFileEmits","uploadContextCtx","inject","handleUpload","uploadResult","selectFile","success","ElMessage","error","msg","e","console","render","$slots","MKUploadFile","MKUploadImageItem","String","UploadContext","width","height","uploadFileInstance","imageInstance","handleUpdateModelValue","event","stopPropagation","handleView","handleDelete","content","_Fragment","ElImage","ElTooltip","uploadImageProps","uploadImageEmits","currentImageSrc","isShowImageViewer","isArray","src","indexOf","splice","handleShowImageViewer","handleCloseImageViewer","handleAppendImage","push","_multiple","images","imageViewer","ElImageViewer","MKUploadFileItem","getFileIconBySuffix","lastIndexOf","indexBias","zipIcon","suffixIcon","substring","suffix","uploadFileUiProps","uploadFileUiEmits","uploadVideoProps","uploadVideoEmits","currentVideoSrc","isShowVideoViewer","videoViewer","isEmpty","html","showLinkEditDialog","href","Promise","resolve","reject","hrefValue","handleCancelClick","dialogInstance","destroy","handleConfirmClick","customRender","class","onClose","body","$event","prepend","footer","MODULE_NAME","DataForm","valueFormColumn","TableHeaderItem","_c","permissionPointDefine","roleMenu","components","componentProps","columnComponentInfo","_","isShowDataForm","dataFormItemProps","dataFormContext","DATA_FORM_CONTEXT_KEY","dataForm","_formColumn","existFormColumn","getColumn","formColumn","existingColumn","reactive","FormColumn","onCleanup","addColumn","removeColumn","component","useFormColumnComponent","useFormDisabled","getValue","setValue","DATA_FORM_ITEM_CONTEXT_KEY","column","_component","data","FormColumnComponent","toRaw","_mergeProps","ElFormItem","labelWidth","formProps","formUID","formEl","columns","getColumns","visible","rules","find","rule","message","componentRules","Math","max","apply","componentInfo","formModels","validateField","reset","resetFields","clearValidate","disposable","dataFormTypeChangeEvent","on","dataFormType","DataFormType","NONE","nextTick","findIndex","formModel","dispose","initd","detailColumns","MKDataFormItem","ElDivider","ElForm","formViewProps","isChange","isChanged","handleSave","simpleSubmit","handleCancel","cancel","_slot2","ElCard","MKForm","allowSubmit","I18n","translate","createDataForm","query","dataTablePaginationProps","dataTableContext","DATA_TABLE_CONTEXT_KEY","MKPagination","totalRecCount","pageTo","setPageSize","dataTableColumnProps","tableColumn","useTableColumnComponent","TableColumnComponent","row","tableProps","treeProps","dataTableEl","tableEl","rowKey","primaryKey","list","getList","selectionColumn","handleSortChange","prop","order","orderType","OrderType","DESC","ASC","sorter","setColumnSort","allowChangeSelection","handleSelectionChange","items","_tableEl","getSelection","tableSelections","getSelectionRows","sort","isEqual","clearSelection","selectedRows","toggleRowSelection","sortableInstance","Sortable","create","querySelector","handle","animation","onEnd","newIndex","oldIndx","oldIndex","sourceItem","dropItem","sortAction","moveTarget","columnProps","minWidth","fixed","align","reserveSelection","sortable","ElTableColumn","scope","$index","MKDataTableColumn","ElTable","lazy","defaultExpandAll","empty","ElEmpty","InnerTableHeaderItem","tableHeaderItem","defaultDataTableHeaderComponents","useGlobalConfig","useRenderInfoComponent","TableHeaderItemComponent","tableHeader","header","leftArea","predicate","rightArea","leftItems","rightItems","tableViewProps","isTree","DataTree","pagination","MKDataTablePagination","_slots","showHeader","MKTableHeader","MKTable","classifySearchItemProps","classifySearchItemEmits","_modelValue","labelStyle","tags","isSelect","ElTag","classifySearch","_classifySearch","getClassifySearchItems","MKTableClassifySearchItem","getParam","setParam","undefined","tableTreeProps","dataTree","window","_dataTree","hasChildren","handleLoad","node","treeEmits","treeRef","rootNodes","currentNodeKey","setCurrentKey","afterLoadEvent","handleAdd","dataTreeNode","addRecord","pid","handleEdit","editRecord","deleteRecord","level","handleCurrentChange","allowSelectContainer","isLeaf","current","handleNodeDrop","draggingNode","dropNode","dropType","handleNodeClick","innerDataTree","filterNodeMethod","ElTree","$props","draggable","main","tools","treeViewProps","searchInputValue","MKTree","avatar","email","roles","role","desc","MsMemberTable","DATA_MODEL_NAME","constructor","moduleName","activeDialog","activeMemberForm","register","MsMemberForm","formatSubmitData","valid","Reflect","deleteProperty","initialize","initActiveMemberForm","RefreshButton","AddButton","userInfo","isSuper","setColumns","FilterColumn","TableColumn","MemberNickNameColumn","MemberRolesColumn","TableActionColumn","buttons","ActionButton","handler","dataFormDialog","recId","member","confirm","cancelButtonText","confirmButtonText","loadingManager","startLoading","response","dataViewRequest","callDVRequest","action","code","Messager","color","marginRight","cursor","input","createElement","appendChild","setAttribute","select","execCommand","removeChild","completeLoading","update","isLock","errorCount","unlockDatetime","EditButton","DeleteButton","defaultValue","beforeSubmitEvent","approveMember","rolesColumn","valueChangeEvent","getLoadingManager","_data","Memo","memo","approveResult","MKCopyContainer","formatItem","DataFormClass","DataTableClass","DataTreeClass","materialGroupTree","MsMaterialGroupTree","materialGroupForm","MsMaterialGroupForm","ElPopover","MKDataForm","reference","onBeforeUnmount","handleAddClick","parent","setData","parentGroupId","handleEditClick","handleDeleteClick","ElMessageBox","then","deleteAfterRefresh","_withDirectives","MaterialGroupFormPopover","Plus","MKDataTable","node-tools","preventDefault","ElIcon","Edit","Delete","_resolveDirective","FREE_RATIO","BASE64_PREFIX","imageCropperContentProps","imageCropperContentEmits","cropperRef","outputType","base64Match","match","url","URL","location","origin","slice","ratioOptions","autoCropWidth","maxWidth","autoCropHeight","maxHeight","currentRatio","enlarge","cropW","cropH","ratio","cropRatio","setCurrentRatio","isFixed","fixedNumber","option","image","Image","onload","naturalWidth","naturalHeight","handleRotateLeft","rotateLeft","handleRotateRight","rotateRight","setCropperRef","ratioOptionsVNodes","ratioOption","VueCropper","fixedBox","ElInputNumber","ImageCropper","imageCropperContentEl","size","getCropData","bind","ImageCropperContent","RATIO_OPTIONS","materialListProps","WebFileUpload","_materialTable","MsMaterialTable","materialForm","MsMaterialForm","checkStrictly","materialTable","materialTypes","getMaterialTypes","currentMaterialType","currentMaterialTypeId","materialList","getCurrentInstance","afterInitdEvent","setAllowMaterialTypeValues","allowMaterialTypeValues","deleteRecordEvent","handleMaterialTypeClick","materialType","setCurrentMaterialType","selectionChangeEvent","currentGroupId","setList","setCurrentMaterialGroupId","getDefaultSelectMaterialGroup","nodes","defaultSelectGroup","submittedEvent","handleMaterialItemClick","material","selectable","handleMoveClick","handleCutClick","cropperResult","handleOverrideClick","blob","base64ToBlob","uploadResponse","upload","File","DvOpt","createInstance","save","handleNewClick","handleDownload","materialTypeVNodes","className","currentMaterialTypeVNode","limit","materialListVNodes","MaterialItem","MaterialGroup","selectState","imageUpload","md5","random","Error","ImageEditPanelComponent","expose","attrs","margin","t","r","b","vals","split","selectImage","file","fileSelect","fileRender","FileReader","target","readAsDataURL","getResult","setSrc","ImageView","Picture","panel","ElTabs","ElTabPane","UploadFilled","MKMaterialList","Share","ElRow","ElCol","alt","rows","showImageEditDialog","imageEditPanelRef","editResult","toCropImageHandle","nextBtns","showModuleSelectDialog","namespace","modules","useLexicalEditorContext","selectOption","clickHandle","templateListComponent","cover","showTemplateSelectDialog","templates","showHtmlTemplateDialog","contentInputValue","minRows","maxRows","_e","_d","_g","_f","_h","activeTabName","selectLocalImage","ImageSelect","cutWidth","cutHeight","isCut","ImageSelectPanel","dataRef","formItems","condition","resloveComponent","resolveComponent","defaultSlot","dt","cutSize","ImageUploadContext","labelPosition","model","style","overflow","padding","copyContainer","copyHandle","copyText","innerText","navigator","clipboard","writeText","showEditPanel","moduleOptons","showDynamicFormDialoger","showModuleSelectPanel","selectComponentOption","ElCollapse","ElCollapseItem","PageEditor","ViewDevice","VisualPageEditor","verifyDialogProps","verifyDialogEmits","wrapperEl","buttonEl","grandEl","httpRequest","WebHttpRequest","slideWidth","isError","deg","imageUrl","imageStyle","backgroundImage","transform","loadImage","params","scene","responseType","Blob","createObjectURL","handleSwitchConfirm","handleMouseDown","mouseDownEvent","startX","MouseEvent","clientX","touches","Disposable","totalWidth","getBoundingClientRect","handleMouseMove","moveX","min","floor","handleMouseUp","addEventListener","createDisposable","removeEventListener","fail","setTimeout","OpenVerifyCode","VerifyPanel","sence","ResourceList","ResourceManager","ResourceSelect","resourceManager","MKResourceList","selectResourceList","isDirectory","confirmed","DialogerImpl","SkeletonDialoger","dialogInstanceCreateEvent","Event","prompt","promptResult","alert","visibleChangeEvent","destroyEvent","custom","onConfirm","isFunction","onCancel","once","actionColumnName","handleConfirm","dataFormOptions","customDataFormStatus","dialogInstances","dialogImplInstance","implInstance","handleClose","dialogs","ElDialog","version","_sfc_render","_openBlock","_createElementBlock","_hoisted_1","breadcrumbList","_useModel","NewLayout","MaterialSelect","selection","selectMaterial","richTextEditorProps","richTextEditorEmits","richTextEditorEl","tinymceInstance","TinyMCE","promotion","menubar","plugins","toolbar","inline","valid_elements","extended_valid_elements","custom_elements","valid_children","cleanup","apply_source_formatting","verify_html","font_family_formats","language","skin_url","content_css","content_style","contentStyle","editor","ui","registry","addButton","onAction","MKMaterialSelect","insertContent","args","getContent","setContent","mode","withCtx","_MaterialUploadContext","materialUploadContextProps","materialUploadContext","MaterialUploadContext","MKMaterialUploadContext"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,+BAA6B,wz2FAAuz2F,SAASA,IAAE;AAAC,MAAI,KAAG,IAAE,SAAS,qBAAqB,QAAQ,GAAG,EAAE,SAAO,CAAC,GAAE,IAAE,EAAE,aAAa,gBAAgB,GAAE,IAAE,EAAE,aAAa,wBAAwB;AAAE,MAAG,CAAC,GAAE;AAAC,QAAI,GAAE,GAAE,GAAE,GAAE,GAAE,IAAE,SAASC,IAAEC,IAAE;AAAC,MAAAA,GAAE,WAAW,aAAaD,IAAEC,EAAC;AAAA,IAAC;AAAE,QAAG,KAAG,CAACF,GAAE,8BAA6B;AAAC,MAAAA,GAAE,+BAA6B;AAAG,UAAG;AAAC,iBAAS,MAAM,kIAAkI;AAAA,MAAC,SAAOC,IAAE;AAAC,mBAAS,QAAQ,IAAIA,EAAC;AAAA,MAAC;AAAA,IAAC;AAAC,QAAE,WAAU;AAAC,UAAIA,IAAEC,KAAE,SAAS,cAAc,KAAK;AAAE,MAAAA,GAAE,YAAUF,GAAE,+BAA8BE,KAAEA,GAAE,qBAAqB,KAAK,EAAE,CAAC,OAAKA,GAAE,aAAa,eAAc,MAAM,GAAEA,GAAE,MAAM,WAAS,YAAWA,GAAE,MAAM,QAAM,GAAEA,GAAE,MAAM,SAAO,GAAEA,GAAE,MAAM,WAAS,UAASA,KAAEA,KAAGD,KAAE,SAAS,MAAM,aAAW,EAAEC,IAAED,GAAE,UAAU,IAAEA,GAAE,YAAYC,EAAC;AAAA,IAAE,GAAE,SAAS,mBAAiB,CAAC,CAAC,YAAW,UAAS,aAAa,EAAE,QAAQ,SAAS,UAAU,IAAE,WAAW,GAAE,CAAC,KAAG,IAAE,WAAU;AAAC,eAAS,oBAAoB,oBAAmB,GAAE,KAAE,GAAE,EAAG;AAAA,IAAA,GAAE,SAAS,iBAAiB,oBAAmB,GAAE,KAAE,KAAG,SAAS,gBAAc,IAAE,GAAE,IAAEF,GAAE,UAAS,IAAE,OAAG,KAAI,EAAE,qBAAmB,WAAU;AAAC,oBAAY,EAAE,eAAa,EAAE,qBAAmB,MAAK;IAAI;AAAA,EAAE;AAAC,WAAS,IAAG;AAAC,UAAI,IAAE,MAAG,EAAG;AAAA,EAAC;AAAC,WAAS,IAAG;AAAC,QAAG;AAAC,QAAE,gBAAgB,SAAS,MAAM;AAAA,IAAC,SAAOC,IAAE;AAAC,aAAO,KAAK,WAAW,GAAE,EAAE;AAAA,IAAC;AAAC;EAAG;AAAC,EAAE,MAAM;ACAxn5F,OAAO,+BAA6B,kiyBAAiiyB,SAASD,IAAE;AAAC,MAAI,KAAG,IAAE,SAAS,qBAAqB,QAAQ,GAAG,EAAE,SAAO,CAAC,GAAE,IAAE,EAAE,aAAa,gBAAgB,GAAE,IAAE,EAAE,aAAa,wBAAwB;AAAE,MAAG,CAAC,GAAE;AAAC,QAAI,GAAE,GAAE,GAAE,GAAE,GAAE,IAAE,SAASE,IAAEC,IAAE;AAAC,MAAAA,GAAE,WAAW,aAAaD,IAAEC,EAAC;AAAA,IAAC;AAAE,QAAG,KAAG,CAACH,GAAE,8BAA6B;AAAC,MAAAA,GAAE,+BAA6B;AAAG,UAAG;AAAC,iBAAS,MAAM,kIAAkI;AAAA,MAAC,SAAOE,IAAE;AAAC,mBAAS,QAAQ,IAAIA,EAAC;AAAA,MAAC;AAAA,IAAC;AAAC,QAAE,WAAU;AAAC,UAAIA,IAAEC,KAAE,SAAS,cAAc,KAAK;AAAE,MAAAA,GAAE,YAAUH,GAAE,+BAA8BG,KAAEA,GAAE,qBAAqB,KAAK,EAAE,CAAC,OAAKA,GAAE,aAAa,eAAc,MAAM,GAAEA,GAAE,MAAM,WAAS,YAAWA,GAAE,MAAM,QAAM,GAAEA,GAAE,MAAM,SAAO,GAAEA,GAAE,MAAM,WAAS,UAASA,KAAEA,KAAGD,KAAE,SAAS,MAAM,aAAW,EAAEC,IAAED,GAAE,UAAU,IAAEA,GAAE,YAAYC,EAAC;AAAA,IAAE,GAAE,SAAS,mBAAiB,CAAC,CAAC,YAAW,UAAS,aAAa,EAAE,QAAQ,SAAS,UAAU,IAAE,WAAW,GAAE,CAAC,KAAG,IAAE,WAAU;AAAC,eAAS,oBAAoB,oBAAmB,GAAE,KAAE,GAAE,EAAG;AAAA,IAAA,GAAE,SAAS,iBAAiB,oBAAmB,GAAE,KAAE,KAAG,SAAS,gBAAc,IAAE,GAAE,IAAEH,GAAE,UAAS,IAAE,OAAG,KAAI,EAAE,qBAAmB,WAAU;AAAC,oBAAY,EAAE,eAAa,EAAE,qBAAmB,MAAK;IAAI;AAAA,EAAE;AAAC,WAAS,IAAG;AAAC,UAAI,IAAE,MAAG,EAAG;AAAA,EAAC;AAAC,WAAS,IAAG;AAAC,QAAG;AAAC,QAAE,gBAAgB,SAAS,MAAM;AAAA,IAAC,SAAOE,IAAE;AAAC,aAAO,KAAK,WAAW,GAAE,EAAE;AAAA,IAAC;AAAC;EAAG;AAAC,EAAE,MAAM;ACA310B,MAAM,kBAAkB;ACAxB,MAAM,aACX;AAEK,MAAM,gBAAgB;ACHjB,IAAA,8BAAAE,eAAL;AACLA,aAAA,OAAQ,IAAA;AACRA,aAAA,MAAO,IAAA;AAFGA,SAAAA;AAAA,GAAA,aAAA,CAAA,CAAA;ACAA,IAAA,6BAAAC,cAAL;AACLA,YAAA,WAAY,IAAA;AACZA,YAAA,MAAO,IAAA;AACPA,YAAA,gBAAiB,IAAA;AAHPA,SAAAA;AAAA,GAAA,YAAA,CAAA,CAAA;ACAA,IAAA,gCAAAC,iBAAL;AACLA,eAAAA,aAAA,cAAW,CAAX,IAAA;AACAA,eAAAA,aAAA,UAAO,CAAP,IAAA;AACAA,eAAAA,aAAA,cAAW,CAAX,IAAA;AACAA,eAAAA,aAAA,UAAO,CAAP,IAAA;AAJUA,SAAAA;AAAA,GAAA,eAAA,CAAA,CAAA;ACAA,IAAA,iCAAAC,kBAAL;AACLA,gBAAAA,cAAA,aAAU,CAAV,IAAA;AACAA,gBAAAA,cAAA,aAAU,CAAV,IAAA;AACAA,gBAAAA,cAAA,UAAO,CAAP,IAAA;AAHUA,SAAAA;AAAA,GAAA,gBAAA,CAAA,CAAA;ACGL,MAAM,4BAA4B,WAAW;AAAA,EAClD,cAAc;AACN;AAEN,SAAK,kBAAkB;AAAA,MACrB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,WAAW;AAAA,QACT,YACE,OACE,qBACF;AAAA,MACJ;AAAA,IAAA,CACD;AAED,SAAK,kBAAkB;AAAA,MACrB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,WAAW;AAAA,QACT,YACE,OACE,qBACF;AAAA,MACJ;AAAA,IAAA,CACD;AAED,SAAK,kBAAkB;AAAA,MACrB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,WAAW;AAAA,QACT,YACE,OACE,qBACF;AAAA,MACJ;AAAA,IAAA,CACD;AAED,SAAK,kBAAkB;AAAA,MACrB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,WAAW;AAAA,QACT,YACE,OACE,qBACF;AAAA,MACJ;AAAA,IAAA,CACD;AAED,SAAK,kBAAkB;AAAA,MACrB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,WAAW;AAAA,QACT,YACE,OACE,qBACF;AAAA,MACJ;AAAA,IAAA,CACD;AAED,SAAK,kBAAkB;AAAA,MACrB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,WAAW;AAAA,QACT,YACE,OACE,qBACF;AAAA,MACJ;AAAA,IAAA,CACD;AAED,SAAK,kBAAkB;AAAA,MACrB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,WAAW;AAAA,QACT,YACE,OACE,qBACF;AAAA,MACJ;AAAA,IAAA,CACD;AAED,SAAK,kBAAkB;AAAA,MACrB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,WAAW;AAAA,QACT,YACE,OACE,qBACF;AAAA,MACJ;AAAA,IAAA,CACD;AAED,SAAK,kBAAkB;AAAA,MACrB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,WAAW;AAAA,QACT,YACE,OAAO,qBAA8D;AAAA,MACzE;AAAA,IAAA,CACD;AAED,SAAK,kBAAkB;AAAA,MACrB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,WAAW;AAAA,QACT,YACE,OACE,qBACF;AAAA,MACJ;AAAA,IAAA,CACD;AAED,SAAK,kBAAkB;AAAA,MACrB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,WAAW;AAAA,QACT,YACE,OACE,qBACF;AAAA,MACJ;AAAA,IAAA,CACD;AAED,SAAK,kBAAkB;AAAA,MACrB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,WAAW;AAAA,QACT,YACE,OACE,qBACF;AAAA,MACJ;AAAA,IAAA,CACD;AAAA,EACH;AACF;ACtIO,MAAM,kCAAkC,WAAW;AAAA,EACxD,cAAc;AACN;AAEN,SAAK,kBAAkB;AAAA,MACrB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,WAAW;AAAA,QACT,YAAY,QAAsC,QAAA,EAAA,KAAA,MAAA,OAAA;AAAA,MACpD;AAAA,IAAA,CACD;AAED,SAAK,kBAAkB;AAAA,MACrB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,WAAW;AAAA,QACT,YACE,QAEA,QAAA,EAAA,KAAA,MAAA,OAAA;AAAA,MACJ;AAAA,IAAA,CACD;AAED,SAAK,kBAAkB;AAAA,MACrB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,WAAW;AAAA,QACT,YACE,OACE,qBACF;AAAA,MACJ;AAAA,IAAA,CACD;AAED,SAAK,kBAAkB;AAAA,MACrB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,WAAW;AAAA,QACT,YACE,OACE,qBACF;AAAA,MACJ;AAAA,IAAA,CACD;AAAA,EACH;AACF;AC5CO,MAAM,2BAA2B,WAAW;AAAA,EACjD,cAAc;AACN;AAEN,SAAK,kBAAkB;AAAA,MACrB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,WAAW;AAAA,IAAA,CACZ;AAED,SAAK,kBAAkB;AAAA,MACrB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,WAAW;AAAA,IAAA,CACZ;AAED,SAAK,kBAAkB;AAAA,MACrB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,WAAW;AAAA,QACT,MAAM,QAA2C,QAAA,EAAA,KAAA,MAAA,OAAA;AAAA,MACnD;AAAA,IAAA,CACD;AAED,SAAK,kBAAkB;AAAA,MACrB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,WAAW;AAAA,QACT,MAAM,QAA2C,QAAA,EAAA,KAAA,MAAA,OAAA;AAAA,MACnD;AAAA,IAAA,CACD;AAUD,SAAK,kBAAkB;AAAA,MACrB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,WAAW;AAAA,QACT,MAAM,OAAO,qBAA8B;AAAA,MAC7C;AAAA,IAAA,CACD;AAED,SAAK,kBAAkB;AAAA,MACrB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,WAAW;AAAA,QACT,aACG,MAAM,OAAO,qBAAoC,GAAG;AAAA,MACzD;AAAA,IAAA,CACD;AAED,SAAK,kBAAkB;AAAA,MACrB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,WAAW;AAAA,QACT,aACG,MAAM,OAAO,qBAAoC,GAAG;AAAA,MACzD;AAAA,IAAA,CACD;AAGD,SAAK,kBAAkB;AAAA,MACrB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,WAAW;AAAA,QACT,aACG,MAAM,OAAO,qBAAoC,GAAG;AAAA,MACzD;AAAA,IAAA,CACD;AAED,SAAK,kBAAkB;AAAA,MACrB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,WAAW;AAAA,QACT,MAAM,QAAiD,QAAA,EAAA,KAAA,MAAA,OAAA;AAAA,MACzD;AAAA,IAAA,CACD;AAED,SAAK,kBAAkB;AAAA,MACrB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,WAAW;AAAA,QACT,MACE,OAAO,qBAA8D;AAAA,MACzE;AAAA,IAAA,CACD;AAED,SAAK,kBAAkB;AAAA,MACrB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,WAAW;AAAA,QACT,MAAM,QAA2C,QAAA,EAAA,KAAA,MAAA,OAAA;AAAA,MACnD;AAAA,IAAA,CACD;AAED,SAAK,kBAAkB;AAAA,MACrB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,WAAW;AAAA,QACT,MAAM,QAA2C,QAAA,EAAA,KAAA,MAAA,OAAA;AAAA,MACnD;AAAA,IAAA,CACD;AAED,SAAK,kBAAkB;AAAA,MACrB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,WAAW;AAAA,QACT,MAAM,OAAO,qBAAyC;AAAA,MACxD;AAAA,IAAA,CACD;AAED,SAAK,kBAAkB;AAAA,MACrB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,WAAW;AAAA,QACT,MAAM,OAAO,qCAAiE;AAAA,MAChF;AAAA,IAAA,CACD;AAAA,EAGH;AACF;AC5HO,MAAM,6BAA6B,WAAgC;AAAA,EACxE,cAAc;AACN;AAEN,SAAK,kBAAkB;AAAA,MACrB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,iBAAiB,SAAS;AAAA,MAC1B,WAAW;AAAA,QACT,MACE,OACE,qBACF;AAAA,MACJ;AAAA,IAAA,CACD;AAED,SAAK,kBAAkB;AAAA,MACrB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,iBAAiB,SAAS;AAAA,MAC1B,WAAW;AAAA,QACT,MACE,OACE,qBACF;AAAA,MACJ;AAAA,IAAA,CACD;AAED,SAAK,kBAAkB;AAAA,MACrB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,iBAAiB,SAAS;AAAA,MAC1B,WAAW;AAAA,QACT,MACE,OACE,qBACF;AAAA,MACJ;AAAA,IAAA,CACD;AAED,SAAK,kBAAkB;AAAA,MACrB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,iBAAiB,SAAS;AAAA,MAC1B,WAAW;AAAA,QACT,MACE,OACE,qBACF;AAAA,MACJ;AAAA,IAAA,CACD;AAAA,EACH;AACF;ACvDO,MAAM,yBAAyB,WAAW;AAAA,EAC/C,cAAc;AACN;AAEN,SAAK,kBAAkB;AAAA,MACrB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,WAAW;AAAA,MACX,cAAc;AAAA,QACZ,MAAM;AAAA,MACR;AAAA,IAAA,CACD;AAED,SAAK,kBAAkB;AAAA,MACrB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,WAAW;AAAA,IAAA,CACZ;AAED,SAAK,kBAAkB;AAAA,MACrB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,WAAW;AAAA,QACT,MAAM,QAA2C,QAAA,EAAA,KAAA,MAAA,OAAA;AAAA,MACnD;AAAA,IAAA,CACD;AAAA,EACH;AACF;ACjBO,MAAM,SAAS;AAAA,EAWpB,YAAY,SAA0B;AAVtC;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAGQ,UAAA,EAAE,IAAI,UAAU,OAAO,UAAU,OAAO,kBAAkB,KAC9D,IAAA;AAEF,SAAK,KAAK;AACV,SAAK,QAAQ,SAAS;AACtB,SAAK,WAAW;AAChB,SAAK,OAAO;AACZ,SAAK,QAAQ;AACb,SAAK,WAAW;AACX,SAAA,SAAS,QAAQ,UAAU;AAChC,SAAK,mBAAmB;AAAA,EAC1B;AAAA,EAEA,kBAA8B;AAC5B,UAAMC,QAAmB,CAAA;AAEzB,QAAI,WAA4B;AAEhC,WAAO,UAAU;AACf,MAAAA,MAAK,QAAQ,QAAQ;AAErB,iBAAW,SAAS;AAAA,IACtB;AAEO,WAAAA;AAAA,EACT;AACF;AC3BO,MAAM,aAAa,WAAW;AAAA,EAgBnC,YAAY,wBAAgD,QAAgB;AACpE;AAhBR,qCAAwB,CAAA;AAExB,wCAAgC;AAEhC,uCAAuB;AAEvB,qCAAqB;AAErB;AAEA;AAEA,kDACE,KAAK,SAAS,IAAI,MAAO,CAAA;AAIzB,SAAK,yBAAyB;AAC9B,SAAK,SAAS;AAAA,EAChB;AAAA,EAEA,SAAS,OAAmB;AAC1B,UAAM,YAAY,MACf,KAAK,CAAC,OAAO,UAAU;AACtB,YAAM,QAAQ,SAAS,MAAM,IAAI,KAAK;AACtC,YAAM,QAAQ,SAAS,MAAM,IAAI,KAAK;AAEtC,aAAO,QAAQ;AAAA,IAAA,CAChB,EACA,IAAI,CAAC,aAAa;AACjB,YAAM,QAAQ,KAAK,OAAO,aAAa,SAAS,OAAO;AAEvD,YAAM,mBACJ,KAAK,uBAAuB,4BAA4B,SAAS,EAAE;AAErE,aAAO,IAAI,SAAS;AAAA,QAClB,IAAI,SAAS;AAAA,QACb;AAAA,QACA,MAAM,SAAS,KAAK,SAAS;AAAA,QAC7B,UAAU,SAAS,YAAY;AAAA,QAC/B,OAAO,SAAS,SAAS;AAAA,QACzB;AAAA,QACA,UAAU,CAAC;AAAA,MAAA,CACZ;AAAA,IAAA,CACF;AAEH,UAAM,gBAA4B,CAAA;AAElC,aAAS,IAAI,GAAG,MAAM,UAAU,QAAQ,IAAI,KAAK,KAAK;AAC9C,YAAA,eAAe,MAAM,CAAC;AACtB,YAAA,WAAW,UAAU,CAAC;AAEnB,eAAA,WAAW,SAAS,YAAY;AAErC,UAAA,CAAC,aAAa,KAAK;AACrB,sBAAc,KAAK,QAAQ;AAAA,MAC7B;AAEA,iBAAW,SAAS,KAAK,OAAO,kBAAkB,SAAS,EAAE,GAAG;AACxD,cAAA,WAAW,MAAM,YAAY,SAAS;AAAA,MAC9C;AAEA,eAAS,IAAI,GAAG,IAAI,KAAK,KAAK;AACtB,cAAA,oBAAoB,MAAM,CAAC;AAC3B,cAAA,gBAAgB,UAAU,CAAC;AAE7B,YAAA,kBAAkB,QAAQ,aAAa,IAAI;AACpC,mBAAA,SAAS,KAAK,aAAa;AACpC,wBAAc,SAAS;AAAA,QACzB;AAAA,MACF;AAAA,IACF;AAEA,SAAK,YAAY;AAAA,EACnB;AAAA,EAEA,iBAAiB,IAAqC;AACpD,QAAI,CAAC,IAAI;AACA,aAAA;AAAA,IACT;AAEI,QAAA,OAAO,KAAK,UAAU,MAAM;AAEhC,aAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AAC9B,YAAA,OAAO,KAAK,CAAC;AAEf,UAAA,KAAK,OAAO,IAAI;AACX,eAAA;AAAA,MACT;AAEO,aAAA,KAAK,OAAO,KAAK,QAAQ;AAAA,IAClC;AAEO,WAAA;AAAA,EACT;AAAA,EAEA,MAAM,mBAAmB,MAAuB;AAC9C,SAAK,eAAe;AAEpB,SAAK,uBAAuB,KAAK,EAAE,aAAa,KAAM,CAAA;AAE/C,WAAA;AAAA,EACT;AAAA,EAEA,qBAAqB;AACnB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,qBAAqB,QAAoB,KAAK,WAAW;AACvD,aAAS,sBAAsBC,QAAoC;AAC7D,UAAA,CAACA,OAAM,QAAQ;AACV,eAAA;AAAA,MACT;AAEA,aAAO,sBAAsBA,OAAM,CAAC,EAAE,QAAQ,KAAKA,OAAM,CAAC;AAAA,IAC5D;AAEA,WAAO,sBAAsB,KAAK;AAAA,EACpC;AAAA,EAEA,gBAAgB,IAA6B;AACvC,QAAA,QAAQ,KAAK,UAAU,MAAM;AAEjC,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAC/B,YAAA,OAAO,MAAM,CAAC;AAEhB,UAAA,KAAK,OAAO,IAAI;AACX,eAAA;AAAA,MACT;AAEQ,cAAA,MAAM,OAAO,KAAK,QAAQ;AAAA,IACpC;AAEO,WAAA;AAAA,EACT;AACF;AC/IO,MAAM,YAAY,WAAW;AAAA,EAmBlC,YAAY,SAAqB;AACzB;AAnBR;AAEA;AAEA;AAEA;AAEA;AAEA,4CAA0B,KAAK,SAAS,IAAI,MAAO,CAAA;AAEnD,wCAAsB,KAAK,SAAS,IAAI,MAAO,CAAA;AAE/C,6CAA2B,KAAK,SAAS,IAAI,MAAO,CAAA;AAEpD;AAIE,SAAK,KAAK,QAAQ;AAClB,SAAK,QAAQ,QAAQ;AAChB,SAAA,QAAQ,QAAQ,SAAS;AAC9B,SAAK,YAAY,QAAQ;AACzB,SAAK,QAAQ,QAAQ;AACrB,SAAK,OAAO,QAAQ;AAAA,EACtB;AAAA,EAEA,WAAW;AACT,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,QAAQ;AACN,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,QAAQ;AACD,SAAA,KAAK,SAAS,IAAI;AAAA,EACzB;AACF;ACtDO,MAAM,aAAa,WAAW;AAAA,EAWnC,YAAY,aAA0B;AAC9B;AAXR;AAEA,iCAAe,CAAA;AACf,uCAA0B;AAE1B,iDAA2D,KAAK;AAAA,MAC9D,IAAI,MAAM;AAAA,IAAA;AAEZ,2CAA0C,KAAK,SAAS,IAAI,MAAO,CAAA;AAIjE,SAAK,cAAc;AAAA,EACrB;AAAA,EAEA,OAAO;AACL,UAAM,iBAAiB,MAAM;;AAC3B,UAAI,SAAS,KAAK,YAAY,UAAU,UAAA,EAAY;AAEpD,YAAM,cAAqB,CAAA;AAE3B,eAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AAChC,cAAA,QAAQ,OAAO,CAAC;AAElB,cAAAC,MAAA,MAAM,SAAN,gBAAAA,IAAY,WAAU,MAAM;AAC9B,sBAAY,KAAK,KAAK;AAAA,QACxB;AAAA,MACF;AAEO,aAAA;AAAA,IAAA;AAGT,UAAM,eAAe,MAAM;AACzB,aAAO,eAAe,EACnB,IAAI,CAAC,eAAe;AACb,cAAA,QAAQ,KAAK,YAAY,OAAO;AAAA,UACpC,WAAW;AAAA,QAAA;AAGb,YAAI,CAAC,OAAO;AACH,iBAAA;AAAA,QACT;AAEA,eAAO,KAAK,UAAU;AAAA,UACpB,IAAI,WAAW;AAAA,UACf,OAAO,MAAM;AAAA,UACb,OAAO;AAAA,UACP;AAAA,UACA,WAAW;AAAA,QAAA,CACZ;AAAA,MAAA,CACF,EACA,OAAO,OAAO;AAAA,IAAA;AAGd,SAAA,QAAQ,cAAc;AAAA,EAC7B;AAAA,EAEA,UAAU;AACR,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,gBAAgB;AACd,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,cAAc,KAAiB;AACzB,QAAA,KAAK,gBAAgB,KAAK;AAC5B;AAAA,IACF;AAEA,SAAK,cAAc;AAEnB,SAAK,sBAAsB,KAAK,EAAE,YAAY,IAAK,CAAA;AAAA,EACrD;AAAA,EAEA,WAAW,IAAY;AACd,WAAA,KAAK,MAAM,KAAK,CAAC,QAAQ,IAAI,OAAO,EAAE,KAAK;AAAA,EACpD;AAAA,EAEA,UAAU,SAAmC;AACpC,WAAA,KAAK,SAAS,IAAI,IAAI,EAAE,GAAG,SAAS,MAAM,KAAM,CAAA,CAAC;AAAA,EAC1D;AAAA,EAEA,QAAQ,MAAmB;AACzB,SAAK,QAAQ;AAEb,SAAK,gBAAgB,KAAK,EAAE,KAAM,CAAA;AAAA,EACpC;AAAA,EAEA,UAAU,KAAiB;AASzB,SAAK,cAAc,GAAG;AACtB;AAAA,EAcF;AAAA,EAEA,YAAY,IAAe;AAClB,WAAA,KAAK,QAAU,EAAA,KAAK,CAAC,QAAQ,IAAI,OAAO,EAAE,KAAK;AAAA,EACxD;AAAA,EAEA,MAAM,SAAS,KAAU;;AACvB,QAAK,MAAM,IAAI,iBAAiB,UAAA,MAAiB,OAAO;AACtD;AAAA,IACF;AAEA,UAAM,cAAc,KAAK,QAAQ,EAAE,MAAM;AAEzC,UAAIA,MAAA,KAAK,cAAc,MAAnB,gBAAAA,IAAsB,aAAY,IAAI,SAAS;AAC5C,WAAA,QAAQ,YAAY,OAAO,CAAC,SAAS,KAAK,YAAY,IAAI,MAAM,CAAC,CAAC;AAEvE;AAAA,IACF;AAEM,UAAAC,SAAQ,YAAY,UAAU,CAAC,SAAS,KAAK,YAAY,IAAI,MAAA,CAAO;AAE1E,QAAIA,WAAU,IAAI;AAChB;AAAA,IACF;AAEM,UAAA,YAAY,YAAYA,MAAK;AACnC,cAAU,QAAQ;AAEN,gBAAA,OAAOA,QAAO,CAAC;AAC3B,SAAK,QAAQ,WAAW;AAEnB,SAAA,cAAc,KAAK,MAAM,KAAK,MAAM,SAAS,CAAC,KAAK,IAAI;AAAA,EAC9D;AAAA,EAEA,WAAW;AACH,UAAA,YAAY,KAAK,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,KAAK;AAE1D,QAAI,UAAU,QAAQ;AACpB,WAAK,QAAQ,SAAS;AACjB,WAAA,cAAc,UAAU,CAAC,CAAC;AAC/B;AAAA,IACF;AAEK,SAAA,QAAQ,CAAC,KAAK,cAAc,KAAK,KAAK,QAAQ,EAAE,CAAC,CAAC,CAAC;AACxD,SAAK,cAAc,KAAK,QAAQ,EAAE,CAAC,CAAC;AAAA,EACtC;AAAA,EAEA,aAAa;AACL,UAAA,aAAa,KAAK;AAExB,QAAI,CAAC,YAAY;AACf;AAAA,IACF;AAEM,UAAA,YAAY,KAAK,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,KAAK;AAE1D,QAAI,UAAU,QAAQ;AAChB,UAAA,UAAU,KAAK,CAAC,SAAS,KAAK,YAAY,WAAW,MAAM,CAAC,GAAG;AACjE,aAAK,QAAQ,SAAS;AAAA,MAAA,OACjB;AACL,aAAK,QAAQ,CAAC,GAAG,WAAW,UAAU,CAAC;AAAA,MACzC;AAEA;AAAA,IACF;AAEK,SAAA,QAAQ,CAAC,UAAU,CAAC;AAAA,EAC3B;AACF;ACtKO,MAAM,oBAAN,MAAM,kBAAiB;AAAA,EAO5B,cAAc;AAJN;AACA;AACA;AAGD,SAAA,wCAAwB;AACxB,SAAA,uCAAuB;AACvB,SAAA,uCAAuB;EAC9B;AAAA,EAEA,aAAa,MAAgC;AAC3C,UAAM,kBAAkB,KAAK,kBAAkB,IAAI,IAAI;AAEvD,WAAO,kBAAkB,IAAI,gBAAgB,CAAE,CAAA,IAAI;AAAA,EACrD;AAAA,EAEA,YAAY,MAA+B;AACzC,UAAM,iBAAiB,KAAK,iBAAiB,IAAI,IAAI;AAErD,WAAO,iBAAiB,IAAI,eAAe,CAAE,CAAA,IAAI;AAAA,EACnD;AAAA,EAEA,YAAY,MAA+B;AACzC,UAAM,iBAAiB,KAAK,iBAAiB,IAAI,IAAI;AAErD,WAAO,iBAAiB,IAAI,eAAe,CAAE,CAAA,IAAI;AAAA,EACnD;AAAA,EAEA,wBACE,MACA,iBACA;AACK,SAAA,kBAAkB,IAAI,MAAM,eAAe;AAAA,EAClD;AAAA,EAEA,uBACE,MACA,gBACA;AACK,SAAA,iBAAiB,IAAI,MAAM,cAAc;AAAA,EAChD;AAAA,EAEA,uBACE,MACA,gBACA;AACK,SAAA,iBAAiB,IAAI,MAAM,cAAc;AAAA,EAChD;AACF;AAlDE,cADW,mBACJ,YAAW,IAAI;AADjB,IAAM,mBAAN;ACEA,MAAM,SAAS;AAAA,EAapB,YACE,aACA,SACA,OACA,kBACA;AAjBF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAQE,SAAK,KAAK,QAAQ;AAClB,SAAK,SAAS,QAAQ;AACtB,SAAK,UAAU,QAAQ;AACvB,SAAK,QAAQ,QAAQ;AACrB,SAAK,WAAW,QAAQ;AACnB,SAAA,WAAW,QAAQ,WAAW;AAC9B,SAAA,UAAU,QAAQ,YAAY;AACnC,SAAK,QAAQ;AACb,SAAK,mBAAmB;AACpB,QAAA;AACF,WAAK,SAAS,QAAQ,SAClB,QAAQ,OAAO,WAAW,MAAM,IAC9B,QAAQ,SACR,IAAI,IAAI,QAAQ,QAAQ,YAAY,MAAM,EAAE,SAC9C,IAAA;AAAA,aACG,GAAG;AACV,WAAK,SAAS;AAAA,IAChB;AAEA,SAAK,UAAU;AAAA,EACjB;AAAA,EAEA,QAAQ,MAA6B;AAC5B,WAAA,CAAC,CAAC,KAAK,MAAM,KAAK,CAAC,SAAS,KAAK,SAAS,IAAI;AAAA,EACvD;AAAA,EAEA,mBAAmB,KAA6B;AACvC,WAAA,CAAC,CAAC,KAAK,iBAAiB;AAAA,MAC7B,CAAC,oBAAoB,gBAAgB,QAAQ;AAAA,IAAA;AAAA,EAEjD;AACF;ACpEA,MAAM,2BAA2B;AAY1B,MAAM,eAAe,WAAW;AAAA,EAKrC,YAAY,aAA0B;AAC9B;AALR;AAEA,kCAAkB,CAAA;AAKhB,SAAK,cAAc;AAAA,EACrB;AAAA,EAEA,UAAU,QAAiB;AACzB,SAAK,SAAS;AAAA,EAChB;AAAA,EAEA,OAAO;AACC,UAAA,YAAY,KAAK,YAAY;AAC7B,UAAA,YAAY,UAAU;AAGtB,UAAA,oBAAoB,KAAK,OAAO;AAAA,MACpC,CAAC,UAAU,CAAC,UAAU,KAAK,CAAC,SAAS,KAAK,SAAS,MAAM,IAAI;AAAA,IAAA;AAG/D,eAAW,oBAAoB,mBAAmB;AAChD,YAAM,QAAQ,iBAAiB,KAAK,MAAM,wBAAwB;AAElE,UAAI,OAAO;AACH,cAAA,OAAO,MAAM,CAAC;AACd,cAAA,SAAS,MAAM,CAAC;AAEtB,gBAAQ,QAAQ;AAAA,UACd,KAAK;AACG,kBAAA,CAAC,UAAU,IAAI,IAAI,MAAM,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG;AAEpD,oBAAQ,UAAU;AAAA,cAChB,KAAK;AACH,wBAAQ,MAAM;AAAA,kBACZ,KAAK;AACH,8BAAU,SAAS,gBAAgB;AAAA,sBACjC,MAAM,iBAAiB;AAAA,sBACvB,MAAM,iBAAiB,SAAS,OAAO,IAAI;AAAA,sBAC3C,WAAW,MACT,OACE,sBACF;AAAA,sBACF,MAAM,EAAE,KAAK;AAAA,oBAAA,CACd;AACD;AAAA,kBACF,KAAK;AACH,8BAAU,SAAS,gBAAgB;AAAA,sBACjC,MAAM,iBAAiB;AAAA,sBACvB,MAAM,iBAAiB,SAAS,OAAO,IAAI;AAAA,sBAC3C,WAAW,MACT,OACE,sBACF;AAAA,sBACF,MAAM,EAAE,KAAK;AAAA,oBAAA,CACd;AACD;AAAA,gBACJ;AAEA;AAAA,cACF,KAAK;AACH,wBAAQ,MAAM;AAAA,kBACZ,KAAK;AACH,8BAAU,SAAS,gBAAgB;AAAA,sBACjC,MAAM,iBAAiB;AAAA,sBACvB,MAAM,iBAAiB,SAAS,OAAO,IAAI;AAAA,sBAC3C,WAAW,MACT,OACE,sBACF;AAAA,sBACF,MAAM,EAAE,KAAK;AAAA,oBAAA,CACd;AACD;AAAA,gBACJ;AACA;AAAA,cACF,KAAK;AACH,wBAAQ,MAAM;AAAA,kBACZ,KAAK;AACH,8BAAU,SAAS,gBAAgB;AAAA,sBACjC,MAAM,iBAAiB;AAAA,sBACvB,MAAM,iBAAiB,SAAS,OAAO,IAAI;AAAA,sBAC3C,WAAW,MACT,OACE,sBACF;AAAA,sBACF,MAAM,EAAE,KAAK;AAAA,oBAAA,CACd;AACD;AAAA,kBACF,KAAK;AACH,8BAAU,SAAS,gBAAgB;AAAA,sBACjC,MAAM,iBAAiB;AAAA,sBACvB,MAAM,iBAAiB,SAAS,OAAO,IAAI;AAAA,sBAC3C,WAAW,MACT,OACE,sBACF;AAAA,sBACF,MAAM,EAAE,KAAK;AAAA,oBAAA,CACd;AAAA,gBACL;AAAA,YACJ;AAEA;AAAA,UACF,KAAK;AACH,sBAAU,SAAS,gBAAgB;AAAA,cACjC,MAAM,iBAAiB;AAAA,cACvB,MAAM,iBAAiB,SAAS,OAAO,IAAI;AAAA,cAC3C,WAAW,MAAM,OAAO,qBAAoC;AAAA,cAC5D,MAAM,EAAE,KAAK;AAAA,YAAA,CACd;AACD;AAAA,UACF,KAAK;AACH,sBAAU,SAAS,gBAAgB;AAAA,cACjC,MAAM,iBAAiB;AAAA,cACvB,MAAM,iBAAiB,SAAS,OAAO,IAAI;AAAA,cAC3C,WAAW,MAAM,OAAO,oBAAmC;AAAA,cAC3D,MAAM,EAAE,KAAK;AAAA,YAAA,CACd;AACD;AAAA,QASJ;AAAA,MACF;AAAA,IACF;AAEK,SAAA;AAAA,MACH,iBAAiB,MAAM;AACrB,mBAAW,oBAAoB,mBAAmB;AACtC,oBAAA,YAAY,iBAAiB,IAAI;AAAA,QAC7C;AAAA,MAAA,CACD;AAAA,IAAA;AAAA,EAEL;AAAA,EAEA,eAAe,MAA4B;AAClC,WAAA,KAAK,OAAO,KAAK,CAAC,UAAU,MAAM,SAAS,IAAI,KAAK;AAAA,EAC7D;AAAA,EAEA,aAAa,IAA0B;AAC9B,WAAA,KAAK,OAAO,KAAK,CAAC,UAAU,MAAM,OAAO,EAAE,KAAK;AAAA,EACzD;AAAA,EAEA,kBAAkB,QAAkC;AAClD,WAAO,KAAK,OAAO,OAAO,CAAC,UAAU,MAAM,WAAW,MAAM;AAAA,EAC9D;AACF;AClKO,MAAM,uBAAuB;AAAA,EAGlC,cAAc;AAFd;AAGE,SAAK,mBAAmB;EAC1B;AAAA,EAEA,oBAAoB,kBAAqC;AACvD,SAAK,mBAAmB;AAAA,EAC1B;AAAA,EAEA,OAAO;AAAA,EAAC;AAAA,EAER,4BAA4B,QAAmC;AAC7D,WAAO,KAAK,iBAAiB;AAAA,MAC3B,CAAC,oBAAoB,gBAAgB,WAAW;AAAA,IAAA;AAAA,EAEpD;AACF;ACLA,IAAIC,QAAM;AAEH,MAAM,oBAAoB,WAAW;AAAA,EA2B1C,YAAY,SAA6B;AACjC;AA3BR,8BAAKA;AAEL;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA,iDAA+B,KAAK,SAAS,IAAI,MAAO,CAAA;AAExD,mCAAmB;AAEnB,8CAAkD,KAAK,SAAS,IAAI,MAAO,CAAA;AAKzE,SAAK,cAAc,QAAQ;AAEtB,SAAA,YAAY,KAAK,YAAY;AAElC,SAAK,WAAW;AAEhB,SAAK,SAAS,KAAK,SAAS,IAAI,OAAO,IAAI,CAAC;AAC5C,SAAK,OAAO,KAAK,SAAS,IAAI,KAAK,IAAI,CAAC;AACnC,SAAA,yBAAyB,IAAI;AAClC,SAAK,OAAO,KAAK;AAAA,MACf,IAAI,KAAK,KAAK,wBAAwB,KAAK,MAAM;AAAA,IAAA;AAGnD,SAAK,cACH,QAAQ,eAAe,aAAa,QAAQ,mBAAmB,KAAK;AACtE,SAAK,eACH,QAAQ,gBAAgB,aAAa,QAAQ,qBAAqB,KAAK;AAAA,EAC3E;AAAA,EAEA,MAAM,OAAO;AASX,UAAM,cAAc,KAAK;AAEzB,UAAM,cAAc,YAAY;AAEhC,UAAM,6BAA6B,YAChC,gBAAA,EACA,QAAQ,IAAI,CAAC,WAAW;AACvB,UAAI,KAAK,aAAa;AACpB,eAAO,QACL,aACF,IAAI,GAAG,oBAAoB,IAAI,KAAK,WAAW;AAAA,MACjD;AAEA,UAAI,KAAK,cAAc;AACrB,eAAO,QACL,eACF,IAAI,GAAG,oBAAoB,IAAI,KAAK,YAAY;AAAA,MAClD;AAEO,aAAA;AAAA,IAAA,CACR;AAEH,UAAM,8BAA8B,YACjC,gBAAA,EACA,SAAS,IAAI,CAAC,WAAW;AACpB,UAAA,OAAO,KAAK,SAAS,KAAK;AACvB,aAAA,cAAc,KAAK,eAAe;AAAA,MAAA,OAClC;AACL,aAAK,cACH,OAAO,QAAQ,mBAAmB,KAAK,KAAK;AAE9C,aAAK,eACH,OAAO,QAAQ,qBAAqB,KAAK,KAAK;AAAA,MAClD;AAEa,mBAAA,QAAQ,qBAAqB,KAAK,WAAW;AAE7C,mBAAA,QAAQ,uBAAuB,KAAK,YAAY;AAEtD,aAAA;AAAA,IAAA,CACR;AAEE,SAAA;AAAA,MACH,iBAAiB,MAAM;AACrB,oBAAY,gBAAgB,EAAE,QAAQ,MAAM,0BAA0B;AACtE,oBACG,gBAAgB,EAChB,QAAQ,MAAM,2BAA2B;AAAA,MAAA,CAC7C;AAAA,IAAA;AAGC,QAAA;AACE,UAAA,WAAW,MAAM,YAAY,QAA4B;AAAA,QAC3D,KAAK;AAAA,QACL,QAAQ;AAAA,MAAA,CACT;AAED,UAAI,CAAC,SAAS,QAAQ,SAAS,KAAK,SAAS,KAAK;AACzC,eAAA;AAAA,MACT;AAEA,YAAM,kBAAkB,SAAS;AAEjC,YAAM,EAAE,QAAQ,QAAQ,OAAO,kBAAkB,UAC/C,gBAAgB;AAElB,WAAK,WAAW,IAAI;AAAA,QAClB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAGG,WAAA,OAAO,UAAU,MAAM;AACvB,WAAA,uBAAuB,oBAAoB,gBAAgB;AAC3D,WAAA,KAAK,SAAS,KAAK;AAExB,WAAK,KAAK;AAEV,WAAK,sBAAsB;AAC3B,WAAK,OAAO;AAEL,aAAA;AAAA,aACA,GAAG;AACV,kBAAY,gBAAgB,EAAE,QAAQ,MAAM,0BAA0B;AACtE,kBAAY,gBAAgB,EAAE,QAAQ,MAAM,2BAA2B;AAAA,IACzE;AAAA,EACF;AAAA,EAEA,OAAO;AACL,SAAK,UAAU;AAEf,SAAK,mBAAmB,KAAK,EAAE,SAAS,KAAK,SAAS;AAAA,EACxD;AAAA,EAEA,MAAM,OAAO,UAAkB,MAAc;AAC3C,UAAM,WAAW,MAAM,KAAK,YAAY,YAAY;AAAA,MAClD;AAAA,QACE,KAAK;AAAA,QACL,QAAQ;AAAA,QACR,MAAM;AAAA,UACJ,SAAS,KAAK,SAAU;AAAA,UACxB,UAAU,IAAI,QAAQ,QAAQ,EAAE;AAAA,UAChC,OAAO;AAAA,QACT;AAAA,MACF;AAAA,IAAA;AAGE,QAAA,SAAS,KAAK,SAAS,KAAK;AACvB,aAAA;AAAA,IACT;AAEK,SAAA,cAAc,SAAS,QAAQ,mBAAmB;AAClD,SAAA,eAAe,SAAS,QAAQ,qBAAqB;AAE1D,SAAK,UAAU;AAEf,SAAK,mBAAmB,KAAK,EAAE,SAAS,KAAK,SAAS;AAE/C,WAAA;AAAA,EACT;AAAA,EAEO,UAAgB;AACrB,SAAK,YAAY,YAAY,IAAI,gBAAgB,EAAE,QAAQ,MAAM;AAC/D,mBAAa,WAAW,mBAAmB;AAC3C,mBAAa,WAAW,qBAAqB;AAAA,IAAA,CAC9C;AAED,UAAM,QAAQ;AAAA,EAChB;AACF;AC9MA,MAAM,wBAAyD;AAAA,EAC7D,KAAK;AAAA,IACH,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,0BAA0B;AAAA,IAC1B,kBAAkB;AAAA,IAClB,gBAAgB;AAAA,IAChB,oBAAoB;AAAA,IACpB,aAAa;AAAA,EACf;AAAA,EACA,MAAM;AAAA,IACJ,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,UAAU;AAAA,EACZ;AAAA,EACA,QAAQ;AAAA,IACN,wBAAwB;AAAA,EAC1B;AAAA,EACA,MAAM;AAAA,IACJ,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,2BAA2B;AAAA,IAC3B,qBAAqB;AAAA,IACrB,iBAAiB;AAAA,IACjB,6BAA6B;AAAA,IAC7B,eAAe;AAAA,EACjB;AAAA,EACA,QAAQ;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA,QAAQ;AAAA,IACN,QAAQ;AAAA,IACR,YAAY;AAAA,IACZ,eAAe;AAAA,EACjB;AAAA,EACA,SAAS;AAAA,IACP,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,aAAa;AAAA,EACf;AAAA,EACA,UAAU;AAAA,IACR,eAAe;AAAA,EACjB;AAAA,EACA,WAAW;AAAA,IACT,eAAe;AAAA,EACjB;AAAA,EACA,WAAW;AAAA,IACT,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,SAAS;AAAA,IACT,SAAS;AAAA,IACT,OAAO;AAAA,EACT;AACF;ACvDA,MAAM,iBAA+B;AAAA;AAAA,EAEnC,SAAS;AAAA,IACP,YAAY;AAAA,IACZ,WAAW;AAAA,EACb;AACF;AAEA,MAAA,kBAAe,aAAa,gBAAgBC,qBAAe;ACL3D,MAAM,mBAAmB;AAAA;AAAA,EAEvB;AAAA,EACA,MAAM;AACE,UAAA,WAAW,IAAI,eAAe;AAEpC,UAAM,qBAAqB,OAAO;AAAA,MAChC;AAAA,IAAA;AAEF,UAAM,qBAAqB;AAC3B;AAAA,MACE,MAAM,SAAS,MAAM,IAAI;AAAA,MACzB,CAAC,QAAQ;AACP,YAAI,QAAQ,IAAI;AACK,6BAAA,iBAAiB,UAAU,WAAW;AAAA,QAAA,OACpD;AACc,6BAAA,oBAAoB,UAAU,WAAW;AAAA,QAC9D;AAAA,MACF;AAAA,MACA;AAAA,QACE,WAAW;AAAA,MACb;AAAA,IAAA;AAEF,UAAM,MAAM,SAAS,MAAM,IAAI,aAAa,aAAa;AAAA,MACvD,WAAW;AAAA,IAAA,CACZ;AACD,aAAS,cAAc;AACjB,UAAA,cAAc,SAAS,MAAM,IAAI;AACrC,UAAI,gBAAgB,IAAI;AACR,sBAAA,mBAAmB,UAAU,SAAS;AAAA,MACtD;AACA,yBAAmB,QAAQ;AAC3B,cAAQ,aAAa;AAAA,QACnB,KAAK;AACM,mBAAA,gBAAgB,UAAU,OAAO,MAAM;AAChD;AAAA,QACF,KAAK;AACM,mBAAA,gBAAgB,UAAU,IAAI,MAAM;AAC7C;AAAA,MACJ;AAAA,IACF;AACA;AAAA,MACE;AAAA,QACE,MAAM,SAAS,MAAM,IAAI;AAAA,QACzB,MAAM,SAAS,MAAM,IAAI;AAAA,MAC3B;AAAA,MACA,CAAC,QAAQ;AACE,iBAAA,gBAAgB,MAAM,eAAe,QAAQ;AACtD,YAAI,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG;AACpB,mBAAS,gBAAgB,MAAM;AAAA,YAC7B;AAAA,YACA;AAAA,UAAA;AAAA,QACF,WACS,IAAI,CAAC,GAAG;AACjB,mBAAS,gBAAgB,MAAM;AAAA,YAC7B;AAAA,YACA;AAAA,UAAA;AAAA,QACF,WACS,IAAI,CAAC,GAAG;AACjB,mBAAS,gBAAgB,MAAM,YAAY,UAAU,aAAa;AAAA,QACpE;AAAA,MACF;AAAA,MACA;AAAA,QACE,WAAW;AAAA,MACb;AAAA,IAAA;AAGF;AAAA,MACE,MAAM,SAAS,MAAM,KAAK;AAAA,MAC1B,CAAC,QAAQ;AACE,iBAAA,KAAK,aAAa,kBAAkB,GAAG;AAAA,MAClD;AAAA,MACA;AAAA,QACE,WAAW;AAAA,MACb;AAAA,IAAA;AAII,UAAA,KAAK,IAA2C,OAAO;AACvD,UAAA,QAAQ,UAAU,UAAU,YAAY;AAC9C,YAAQ,MAAM;AAAA,MACZ,KAAK,MAAM,SAAS,QAAQ;AAC1B,WAAG,QAAQ;AACX;AAAA,MACF,KAAK,MAAM,SAAS,SAAS;AAC3B,WAAG,QAAQ;AACX;AAAA,MACF,KAAK,MAAM,SAAS,OAAO;AACzB,WAAG,QAAQ;AACX;AAAA,IACJ;AAGA,UAAM,QAAQ;AAEd,aAAS,SAAS,QAA4B;AAC5C,YAAM,QAAQ;AAAA,IAChB;AAGM,UAAA,OAAO,IAAqB,IAAI;AAEtC,aAAS,QAAQ,OAAe;AAC1B,UAAA,SAAS,MAAM,OAAO,wBAAwB;AAEhD,YACE,iEAAiE;AAAA,UAC/D,UAAU;AAAA,QAAA,GAEZ;AACA,eAAK,QAAQ;AAAA,QAAA,OACR;AAEA,eAAA,QAAQ,QAAQ,OAAO,WAAW;AAAA,QACzC;AAAA,MAAA,OACK;AACL,aAAK,QAAQ;AAAA,MACf;AAAA,IACF;AAGA,aAAS,wBAAwB;AAC/B,eAAS,MAAM,KAAK,kBAClB,CAAC,SAAS,MAAM,KAAK;AAAA,IACzB;AAEA,UAAM,4BAA4B,IAAI,gBAAgB,KAAK,eAAe;AAC1E;AAAA,MACE,MAAM,SAAS,MAAM,KAAK;AAAA,MAC1B,CAAC,QAAQ;AACH,YAAA,KAAK,UAAU,MAAM;AACvB,oCAA0B,QAAQ;AAAA,QACpC;AAAA,MACF;AAAA,IAAA;AAEF;AAAA,MACE;AAAA,MACA,CAAC,QAAQ;AACP,gBAAQ,KAAK;AAAA,UACX,KAAK;AACM,qBAAA,MAAM,KAAK,kBAClB,0BAA0B;AAC5B;AAAA,UACF,KAAK;AACM,qBAAA,MAAM,KAAK,kBAAkB;AACtC;AAAA,QACJ;AACS,iBAAA,KAAK,aAAa,aAAa,GAAG;AAAA,MAC7C;AAAA,MACA;AAAA,QACE,WAAW;AAAA,MACb;AAAA,IAAA;AAIF,aAAS,eAAe,OAA8C;AAC3D,eAAA,MAAM,IAAI,cAAc;AAAA,IACnC;AAGS,aAAA,eAAe,MAAoB,WAAW,OAAO;AAC5D,eAAS,QAAQ;AAAA,QACf;AAAA,QACA,WAAW,kBAAkB,SAAS;AAAA,MAAA;AAAA,IAE1C;AAEO,WAAA;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AACF;AC1LgB,SAAA,iBAAiB,UAAmB,WAAoB;AACtE,SAAO,WAAW,KAAK,QAAQ,UAAU,aAAa,EAAE,IAAI,aAAa;AAC3E;ACKA,MAAM,eAAe;AAAA;AAAA,EAEnB;AAAA,EACA,MAAM;AACJ,UAAM,gBAAgB;AAIhB,UAAA,OAAO,YAAY,SAAU,YAAa;AAG1C,UAAA,qBAAqB,IAA0B,CAAA,CAAE;AACjD,UAAA,UAAU,IAAI,CAAC;AAErB,aAAS,YAAY,WAAuB;;AAC1C,YAAM,cAAoC,CAAA;AAE1C,iBAAW,YAAY,WAAW;AAChC,cAAM,WAA+B;AAAA,UACnC,MAAM;AAAA,YACJ,OAAO,SAAS;AAAA,YAChB,MAAM,SAAS;AAAA,YACf,MAAM;AAAA,UACR;AAAA,UACA,OAAMH,MAAA,SAAS,UAAT,gBAAAA,IAAgB;AAAA,UACtB,UAAU,CAAC;AAAA,QAAA;AAGJ,iBAAA,WAAW,qBAAqB,SAAS,QAAQ;AAC1D,oBAAY,KAAK,QAAQ;AAAA,MAC3B;AAEO,aAAA;AAAA,IACT;AAES,aAAA,qBAAqB,WAAuB,WAAW,IAAI;;AAClE,YAAM,cAAgC,CAAA;AAEtC,iBAAW,YAAY,WAAW;AAChC,cAAM,WAA2B;AAAA;AAAA,UAE/B,MAAM;AAAA,UACN,OAAMA,MAAA,SAAS,UAAT,gBAAAA,IAAgB;AAAA,UACtB,MAAM;AAAA,YACJ,OAAO,SAAS;AAAA,YAChB,MAAM,SAAS;AAAA,YACf,eAAe;AAAA,YACf,MAAM;AAAA,YACN,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QAAA;AAEF,YAAI,SAAS,UAAU;AACrB,mBAAS,WAAW,qBAAqB,SAAS,UAAU,SAAS,IAAI;AAAA,QAC3E;AACA,oBAAY,KAAK,QAAQ;AAAA,MAC3B;AAEO,aAAA;AAAA,IACT;AAqDM,UAAA,WAAW,SAAS,MAAM;AAC9B,UAAI,cAAoC,CAAA;AAExC,UAAI,cAAc,SAAS,IAAI,gBAAgB,cAAc;AAE7C,sBAAA,YAAY,KAAK,SAAS;AAAA,MAAA,OACnC;AACL,sBAAc,mBAAmB;AAAA,MACnC;AAKO,aAAA;AAAA,IAAA,CACR;AAEK,UAAA,eAAe,SAAyC,MAAM;AAClE,aAAO,SAAS,MAAM,SAAS,IAC3B,SAAS,MAAM,SAAS,IACtB,SAAS,MAAM,QAAQ,KAAK,EAAE,WAC9B,SAAS,MAAM,CAAC,EAAE,WACpB;IAAC,CACN;AAEK,UAAA,+BAA+B,SAAS,MAAM;AAClD,aAAO,aAAa,MAAM,SAAS,IAC/B,eAAe,aAAa,MAAM,CAAC,CAAC,IACpC,cAAc,SAAS,KAAK;AAAA,IAAA,CACjC;AAEQ,aAAA,eAAeI,OAAsB,WAAW,IAAI;AAC3D,UAAI,WAAW;AACf,UAAIA,MAAK,UAAU;AACX,cAAA,OAAOA,MAAK,SAAS,KAAK,CAAAC,UAAQA;;AAAAA,mBAAAA,MAAAA,MAAK,SAALA,gBAAAA,IAAW,UAAS;AAAA,SAAK;AACjE,YAAI,MAAM;AACR,qBAAW,eAAe,MAAM,iBAAiB,UAAUD,MAAK,IAAI,CAAC;AAAA,QAAA,OAChE;AACM,qBAAA,eAAeA,MAAK,SAAS,CAAC,GAAG,iBAAiB,UAAUA,MAAK,IAAI,CAAC;AAAA,QACnF;AAAA,MAAA,OACK;AACM,mBAAA,iBAAiB,UAAUA,MAAK,IAAI;AAAA,MACjD;AACO,aAAA;AAAA,IACT;AAGM,UAAA,qBAAqB,SAAS,MAAM;AACxC,YAAME,sBAA+B,CAAA;AACrC,UAAI,cAAc,SAAS,IAAI,gBAAgB,cAAc;AAClD,iBAAA,MAAM,QAAQ,CAAC,SAAS;AAC/BA,8BAAmB,KAAK,GAAG,sBAAsB,KAAK,QAAQ,CAAC;AAAA,QAAA,CAChE;AAAA,MACH;AACOA,aAAAA;AAAAA,IAAA,CACR;AAEQ,aAAA,sBAAsB,OAAyB,WAAW,IAAI;AACrE,YAAMA,sBAA+B,CAAA;AAC/B,YAAA,QAAQ,CAAC,SAAS;;AACtB,cAAIN,MAAA,KAAK,SAAL,gBAAAA,IAAW,kBAAiB,KAAK,UAAU;AAC7CM,8BAAmB,KAAK,iBAAiB,UAAU,KAAK,IAAI,CAAC;AACvD,gBAAA,6BAA6B,sBAAsB,KAAK,UAAU,iBAAiB,UAAU,KAAK,IAAI,CAAC;AACzG,cAAA,2BAA2B,SAAS,GAAG;AACzCA,gCAAmB,KAAK,GAAG,0BAA0B;AAAA,UACvD;AAAA,QACF;AAAA,MAAA,CACD;AACMA,aAAAA;AAAAA,IACT;AAwCA,mBAAe,uBAAuB;AAAA,IAEtC;AAGA,mBAAe,sBAAsB;AAAA,IAIrC;AAGA,aAAS,WAAW,MAAuB;AACrC,UAAA,OAAO,SAAS,UAAU;AAE5B,gBAAQ,QAAQ;AAAA,MAAA,OACX;AAEL,cAAM,WAAW,MAAM;AACZ,mBAAAL,SAAQ,GAAG,MAAM,SAAS,MAAM,QAAQA,SAAQ,KAAKA,UAAS;AACrE,gBAAI,WAAW,CAAC,SAAS,MAAMA,MAAK,CAAC;AAErC,qBAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AAClC,oBAAA,OAAO,SAAS,CAAC;AAEnB,kBAAA,KAAK,SAAS,MAAM;AACf,uBAAAA;AAAA,cACT;AAEA,kBAAI,MAAM,QAAQ,KAAK,QAAQ,GAAG;AACrB,2BAAA,SAAS,OAAO,KAAK,QAAiB;AAAA,cACnD;AAAA,YACF;AAAA,UACF;AAEO,iBAAA;AAAA,QAAA;AAGT,cAAM,YAAY;AAGlB,YAAI,aAAa,GAAG;AAClB,kBAAQ,QAAQ;AAAA,QAClB;AAAA,MACF;AAAA,IACF;AAEO,WAAA;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AACF;ACzRO,MAAM,iBAAiB,OAC5B,aACA,IACA,SACqC;AAGjC,MAAA,GAAG,KAAK,oBAAoB,OAAO;AACrC;AAAA,EACF;AAEA,MAAI,cAAc,YAAY;AAE9B,MAAI,CAAC,aAAa;AACZ,QAAA;AACF,YAAM,YAAY;AAElB,oBAAc,YAAY;AAE1B,UAAI,CAAC,aAAa;AACT,eAAA,EAAC,MAAM;MAChB;AAEA,YAAM,gBAAgB;AACtB,YAAM,YAAY;AAGX,aAAA,EAAC,MAAM,GAAG,MAAM,OAAO,GAAG,OAAO,QAAQ,GAAG;aAC5C,GAAG;AACH,aAAA,EAAC,MAAM;IAChB;AAAA,EACF;AACF;AClCO,MAAM,YAAY;AAAA,EAAlB;AACL,uCAAgC,CAAA;AAEhC,wCAAiC,CAAA;AAEjC,uCAAkC;AAElC,kDACE,IAAI;AAEN,2CAAyB,IAAI;AAE7B,iDAA2C;AAAA;AAAA,EAE3C,eAAe,aAAiC;;AAC9C,KAAAD,MAAA,KAAK,0BAAL,gBAAAA,IAA4B;AAEvB,SAAA,wBAAwB,IAAI;AAEjC,SAAK,cAAc;AAEnB,SAAK,uBAAuB,KAAK,EAAE,YAAa,CAAA;AAAA,EAClD;AAAA,EAEA,cAAc,YAA4B;AAClC,UAAAC,SAAQ,KAAK,YAAY;AAAA,MAC7B,CAAC,SAAS,KAAK,SAAS,WAAW;AAAA,IAAA;AAGrC,QAAIA,SAAQ,IAAI;AACT,WAAA,YAAY,OAAOA,QAAO,CAAC;AAAA,IAClC;AAEK,SAAA,YAAY,KAAK,UAAU;AAAA,EAClC;AAAA,EAEA,eAAe,aAA6B;AACpC,UAAAA,SAAQ,KAAK,aAAa;AAAA,MAC9B,CAAC,SAAS,KAAK,SAAS,YAAY;AAAA,IAAA;AAGtC,QAAIA,SAAQ,IAAI;AACT,WAAA,aAAa,OAAOA,QAAO,CAAC;AAAA,IACnC;AAEK,SAAA,aAAa,KAAK,WAAW;AAAA,EACpC;AAAA,EAEA,OAAO;AACL,SAAK,cAAc;AAAA,MACjB,MAAM;AAAA,MACN,MAAM;AAAA,MACN,WAAW,MAAM,OAAO,qBAAmB;AAAA,IAAA,CAC5C;AAED,SAAK,cAAc;AAAA,MACjB,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,QACJ,iBAAiB;AAAA,MACnB;AAAA,MACA,WAAW,MAAM,OAAO,qBAAyB;AAAA,IAAA,CAClD;AAED,SAAK,cAAc;AAAA,MACjB,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,QACJ,iBAAiB;AAAA,MACnB;AAAA,MACA,WAAW,MAAM,OAAO,qBAA0B;AAAA,IAAA,CACnD;AAED,SAAK,gBAAgB;AAErB,SAAK,uBAAuB,GAAG,CAAC,EAAE,kBAAkB;;AAClD,UAAI,CAAC,aAAa;AAChB;AAAA,MACF;AAEA,YAAM,YAAY,YAAY;AACxB,YAAA,YAAY,UAAU;AAE5B,YAAM,uBAAiC,CAAA;AAE5B,iBAAA,cAAc,KAAK,aAAa;AACzC,cAAM,WAAW,UAAU;AAAA,UACzB,CAACM,cAAaA,UAAS,SAAS,WAAW;AAAA,QAAA;AAG7C,YAAI,CAAC,UAAU;AACQ,+BAAA,KAAK,WAAW,IAAc;AACnD,oBAAU,SAAS,UAAU;AAAA,QAC/B;AAAA,MACF;AAEA,OAAAP,MAAA,KAAK,0BAAL,gBAAAA,IAA4B;AAAA,QAC1B,iBAAiB,MAAM;AACrB,qBAAW,uBAAuB,sBAAsB;AACtD,sBAAU,YAAY,mBAAmB;AAAA,UAC3C;AAAA,QAAA,CACD;AAAA;AAGH,OAAAQ,MAAA,KAAK,0BAAL,gBAAAA,IAA4B;AAAA,QAC1B,YAAY,2BAA2B,GAAG,CAAC,EAAE,kBAAkB;AAC7D,cAAI,CAAC,aAAa;AAChB;AAAA,UACF;AAEY,sBAAA,sBAAsB,GAAG,MAAM;AACzC,kBAAM,SAAS,YAAY;AAE3B,kBAAM,wBAAkC,CAAA;AAE7B,uBAAA,eAAe,KAAK,cAAc;AAC3C,oBAAM,YAAY,OAAO;AAAA,gBACvB,YAAY;AAAA,cAAA;AAGd,kBAAI,CAAC,WAAW;AACd;AAAA,cACF;AAEA,oBAAM,WAAW,UAAU;AAAA,gBACzB,CAACD,cAAaA,UAAS,SAAS,YAAY;AAAA,cAAA;AAG9C,kBAAI,CAAC,UAAU;AACD,4BAAA,OAAO,UAAU,SAAS,YAAY;AAC5B,sCAAA,KAAK,YAAY,IAAc;AAC3C,0BAAA,SAAS,gBAAgB,WAAW;AAAA,cAChD;AAAA,YACF;AAEI,gBAAA,CAAC,KAAK,aAAa,KAAK,CAAC,SAAS,KAAK,SAAS,UAAU,GAAG;AAC/D,mBAAK,eAAe;AAAA,gBAClB,MAAM;AAAA;AAAA,gBAEN,MAAM;AAAA,gBACN,WAAW,MAAM,OAAO,mBAAuB;AAAA,cAAA,CAChD;AAAA,YACH;AAEY,wBAAA;AAAA,cACV,iBAAiB,MAAM;AACrB,2BAAW,wBAAwB,uBAAuB;AACxD,4BAAU,YAAY,oBAAoB;AAAA,gBAC5C;AAAA,cAAA,CACD;AAAA,YAAA;AAAA,UACH,CACD;AAAA,QAAA,CACF;AAAA;AAAA,IACH,CACD;AAAA,EACH;AACF;AC7IO,MAAM,iBAAiB;AAAA,EAqB5B,YAAY,KAAU;AApBtB;AAEA,+CAAmC,IAAI;AAEvC,8CAAkC,IAAI;AAEtC,gDAAoC,IAAI;AAExC,iDAAqC,IAAI;AAEzC,4CAAqC,CAAA;AAErC,2CAAmC,CAAA;AAEnC,2CAAmC,CAAA;AAEnC,uCAAgC,CAAA;AAEhC,wCAAiC,CAAA;AAG/B,SAAK,MAAM;AAAA,EACb;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,kBAAkB,gBAAgC;AAC1C,UAAA,OAAQ,eAAuB,eAAe;AAE9C,UAAA,sBAAsB,KAAK,iBAAiB;AAAA,MAChD,CAAC,SAAU,KAAa,eAAe,MAAM;AAAA,IAAA;AAG/C,QAAI,qBAAqB;AACvB,YAAM,IAAI,MAAM,eAAe,IAAI,aAAa;AAAA,IAClD;AAEK,SAAA,iBAAiB,KAAK,cAAc;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,iBAAiB,eAA8B;AACvC,UAAA,OAAQ,cAAsB,eAAe;AAE7C,UAAA,qBAAqB,KAAK,gBAAgB;AAAA,MAC9C,CAAC,SAAU,KAAa,eAAe,MAAM;AAAA,IAAA;AAG/C,QAAI,oBAAoB;AACtB,YAAM,IAAI,MAAM,eAAe,IAAI,aAAa;AAAA,IAClD;AAEK,SAAA,gBAAgB,KAAK,aAAa;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,iBAAiB,cAA6B;AACtC,UAAA,OAAQ,aAAqB,eAAe;AAE5C,UAAA,qBAAqB,KAAK,gBAAgB;AAAA,MAC9C,CAAC,SAAU,KAAa,eAAe,MAAM;AAAA,IAAA;AAG/C,QAAI,oBAAoB;AACtB,YAAM,IAAI,MAAM,eAAe,IAAI,aAAa;AAAA,IAClD;AAEK,SAAA,gBAAgB,KAAK,YAAY;AAAA,EACxC;AAAA,EAEA,mBAAmB,OAAuB;AACnC,SAAA,YAAY,KAAK,KAAK;AAAA,EAC7B;AAAA,EAEA,oBAAoB,OAAuB;AACpC,SAAA,aAAa,KAAK,KAAK;AAAA,EAC9B;AACF;ACxDO,MAAM,YAAY;AAAA,EAiDvB,YAAY,SAA6B;AA9CzC,kCAAiB;AAET;AAER;AAEA;AAEA;AAEA;AAEA,uCAAkC;AAElC;AAEA,iCAAiB;AAEjB,iCAAiB;AAEjB;AAEA,mCAAsB,CAAA;AAUtB;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA,sDAAkE,IAAI;AAEtE,kDACE,IAAI;AAGC,SAAA,WAAW,KAAK,kBAAkB,OAAO;AAE9C,SAAK,MAAM,QAAQ;AAEd,SAAA,QAAQ,KAAK,SAAS;AAEtB,SAAA,OAAO,KAAK,SAAS;AAE1B,SAAK,cAAc,QAAQ;AAEtB,SAAA,sBAAsB,KAAK,SAAS;AACpC,SAAA,4BAA4B,KAAK,SAAS;AAC1C,SAAA,qBAAqB,KAAK,SAAS;AACnC,SAAA,uBAAuB,KAAK,SAAS;AACrC,SAAA,wBAAwB,KAAK,SAAS;AAC3C,SAAK,OAAO,KAAK;AACjB,SAAK,KAAK,uBAAuB,KAAK,SAAS,MAAM;AAEhD,SAAA,sBAAsB,KAAK,SAAS;AACpC,SAAA,qBAAqB,KAAK,SAAS;AACnC,SAAA,uBAAuB,KAAK,SAAS;AACrC,SAAA,wBAAwB,KAAK,SAAS;AAEtC,SAAA,YAAY,KAAK,SAAS;AAE1B,SAAA,cAAc,KAAK,SAAS;AAE5B,SAAA,cAAc,KAAK,SAAS;AAEjC,gBAAY,QAAQ,KAAK;AACb,gBAAA,sBAAsB,KAAK,WAAW;AAEtC,gBAAA,eAAe,KAAK,WAAW;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA;AAAA,EApDA,IAAI,WAAW;;AACN,aAAAP,MAAA,KAAK,gBAAL,gBAAAA,IAAkB,aAAY;AAAA,EACvC;AAAA,EAoDA,eAAe,aAAiC;AAC9C,QAAI,KAAK,aAAa;AACpB,WAAK,YAAY;IACnB;AAEA,SAAK,cAAc;AAEnB,SAAK,uBAAuB,KAAK,EAAE,YAAa,CAAA;AAAA,EAClD;AAAA,EAEQ,kBACN,SAC8B;AACvB,WAAA;AAAA,MACL,KAAK,QAAQ;AAAA,MACb,OAAO,QAAQ;AAAA,MACf,aAAa,QAAQ;AAAA,MACrB,aAAa,QAAQ,eAAe,IAAI,eAAe;AAAA,MACvD,QAAQ,QAAQ;AAAA,MAChB,MAAM,QAAQ,QAAQ;AAAA,MACtB,QAAQ,QAAQ,UAAU;AAAA,MAC1B,WACE,QAAQ,aACR,aAAa;AAAA,QACX,SAAS,qBAAqB;AAAA,QAC9B,QAAQ,CAAC;AAAA,MAAA,CACV;AAAA,MACH,aAAa,QAAQ,eAAe,IAAI,YAAY;AAAA,MACpD,qBAAqB,QAAQ,uBAAuB,IAAI,WAAW;AAAA,MACnE,2BACE,QAAQ,6BAA6B,IAAI,WAAW;AAAA,MACtD,oBAAoB,QAAQ,sBAAsB,IAAI,WAAW;AAAA,MACjE,sBAAsB,QAAQ,wBAAwB,IAAI,WAAW;AAAA,MACrE,uBAAuB,QAAQ,yBAAyB,IAAI,WAAW;AAAA,IAAA;AAAA,EAE3E;AAAA,EACA,UAAU;AACR,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,aAAa;AACX,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,MAAM,uBAAuB,SAG1B;AACD,UAAM,cAAe,KAAK,cAAc,IAAI,YAAY;AAAA,MACtD,aAAa;AAAA,MACb,GAAG;AAAA,IAAA,CACJ;AACD,SAAK,cAAc;AAEnB,SAAK,2BAA2B,KAAK,EAAE,YAAa,CAAA;AAC9C,UAAA,wBAAwB,MAAM,YAAY;AAE5C,SAAA,+DAAuB,KAAK,UAAS,KAAK;AAC5C,kBAAY,QAAQ;AACb,aAAA;AAAA,IACT;AAEA,SAAK,eAAe,WAAW;AAAA,EACjC;AAAA,EAEA,MAAM,OAAO;AACX,QAAI,KAAK,OAAO;AACd;AAAA,IACF;AAEA,UAAM,kBAAkB,KAAK,QAAQ,IAAI,CAAC,WAAW;AACnD,YAAM,iBAAiB,IAAI,iBAAiB,KAAK,GAAG;AAEpD,aAAO,cAAc;AAEd,aAAA;AAAA,IAAA,CACR;AAED,UAAM,sBAAsB,CAAA;AAC5B,UAAM,qBAAqB,CAAA;AAC3B,UAAM,wBAAwB,CAAA;AAC9B,UAAM,uBAAuB,CAAA;AAE7B,aAAS,kBAAkB,iBAAiB;AACjC,eAAA,QAAQ,eAAe,kBAAkB;AAChD,yBAAiB,SAAS;AAAA,UACvB,KAAa,eAAe;AAAA,UAC7B;AAAA,QAAA;AAAA,MAEJ;AAES,eAAA,QAAQ,eAAe,iBAAiB;AAC/C,yBAAiB,SAAS;AAAA,UACvB,KAAa,eAAe;AAAA,UAC7B;AAAA,QAAA;AAAA,MAEJ;AAES,eAAA,QAAQ,eAAe,iBAAiB;AAC/C,yBAAiB,SAAS;AAAA,UACvB,KAAa,eAAe;AAAA,UAC7B;AAAA,QAAA;AAAA,MAEJ;AAEoB,0BAAA,KAAK,eAAe,mBAAmB;AACxC,yBAAA,KAAK,eAAe,kBAAkB;AACpC,2BAAA,KAAK,eAAe,oBAAoB;AACvC,4BAAA,KAAK,eAAe,qBAAqB;AAAA,IACjE;AAEK,SAAA,sBAAsB,IAAI,kBAAkB;AAAA,MAC/C,gBAAgB,CAAC,GAAG,qBAAqB,KAAK,mBAAmB;AAAA,IAAA,CAClE;AACI,SAAA,qBAAqB,IAAI,kBAAkB;AAAA,MAC9C,gBAAgB,CAAC,GAAG,oBAAoB,KAAK,kBAAkB;AAAA,IAAA,CAChE;AACI,SAAA,uBAAuB,IAAI,kBAAkB;AAAA,MAChD,gBAAgB,CAAC,GAAG,sBAAsB,KAAK,oBAAoB;AAAA,IAAA,CACpE;AACI,SAAA,wBAAwB,IAAI,kBAAkB;AAAA,MACjD,gBAAgB,CAAC,GAAG,uBAAuB,KAAK,qBAAqB;AAAA,IAAA,CACtE;AAED,SAAK,UAAU,WAAW,OAAO,IAAI,MAAM,SAAS;AAClD,YAAM,QAAQ,MAAM,eAAe,MAAM,EAAQ;AAEjD,UAAI,OAAO;AACT,aAAK,KAAK;AACV;AAAA,MACF;AAEK;IAAA,CACN;AAED,SAAK,YAAY;AACZ,SAAA,YAAY,eAAe,IAAI;AAEpC,aAAS,kBAAkB,iBAAiB;AACjC,eAAA,QAAQ,eAAe,aAAa;AACtC,aAAA,YAAY,cAAc,IAAI;AAAA,MACrC;AAES,eAAA,QAAQ,eAAe,cAAc;AACvC,aAAA,YAAY,eAAe,IAAI;AAAA,MACtC;AAAA,IACF;AAEA,SAAK,YAAY,gBAAgB,EAAE,SAAS,IAAI,CAAC,WAAW;;AACtD,UAAA,OAAO,KAAK,SAAS,KAAK;AAC5B,SAAAA,MAAA,KAAK,gBAAL,gBAAAA,IAAkB;AAClB,aAAK,UAAU,KAAK,EAAE,MAAM,QAAS,CAAA;AAAA,MACvC;AACO,aAAA;AAAA,IAAA,CACR;AAED,SAAK,QAAQ;AAAA,EACf;AAAA,EAEA,MAAM,MAAM,UAAkB,UAAkB,MAAc;AAC5D,UAAM,WAAW,MAAM,KAAK,YAAY,QAAwB;AAAA,MAC9D,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,MAAM;AAAA,QACJ,SAAS;AAAA,QACT,UAAU,IAAI,QAAQ,QAAQ,EAAE;AAAA,QAChC,OAAO;AAAA,MACT;AAAA,IAAA,CACD;AAEG,QAAA,SAAS,KAAK,SAAS,KAAK;AAC9B,YAAM,KAAK,uBAAuB;AAAA,QAChC,aAAa,SAAS,QAAQ,mBAAmB;AAAA,QACjD,cAAc,SAAS,QAAQ,qBAAqB;AAAA,MAAA,CACrD;AAAA,IACH;AAEO,WAAA;AAAA,EACT;AAAA,EAEA,UAAU,KAAa;AACd,WAAA;AAAA,EACT;AAAA,EAEA,MAAM,cAAc,UAAkB,MAAc;AAQlD,UAAM,WAAW,MAAM,KAAK,YAAY,QAAwB;AAAA,MAC9D,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,MAAM,EAAE,SAAS,UAAU,OAAO,KAAK;AAAA,IAAA,CACxC;AAEM,WAAA;AAAA,EACT;AAAA,EAEA,MAAM,SAAS;AACb,SAAK,eAAe,IAAI;AAAA,EAC1B;AAAA,EACA,MAAM,eAAe,UAAkB,aAAqB,OAAe;AAQzE,UAAM,WAAW,MAAM,KAAK,YAAY,QAAwB;AAAA,MAC9D,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,MAAM;AAAA,QACJ,UAAU,IAAI,QAAQ,QAAQ,EAAE;AAAA,QAChC,aAAa,IAAI,QAAQ,WAAW,EAAE;AAAA,QACtC;AAAA,MACF;AAAA,IAAA,CACD;AAEM,WAAA;AAAA,EACT;AAAA,EAEA,UAAU,QAAkB;AACrB,SAAA,QAAQ,KAAK,MAAM;AAAA,EAC1B;AACF;AAxTE,cADW,aACJ,YAA+B;AC/CjC,MAAM,qBAAqB,sBAAgC;AAAA,EAChE,KAAK,SAAyB;AAC5B,cAAU,KAAK,OAAO;AAAA,EACxB;AAAA,EACA,QAAQ,SAAyB;AAC/B,cAAU,QAAQ,OAAO;AAAA,EAC3B;AAAA,EACA,QAAQ,SAAyB;AAC/B,cAAU,QAAQ,OAAO;AAAA,EAC3B;AAAA,EACA,MAAM,SAAyB;AAC7B,cAAU,MAAM,OAAO;AAAA,EACzB;AACF;ACbO,MAAM,2BAA2B,sBAA2C;AAAA,EACjF,KAAK,SAAoC;AACvC,mBAAe,KAAK,OAAO;AAAA,EAC7B;AAAA,EACA,QAAQ,SAAoC;AAC1C,mBAAe,QAAQ,OAAO;AAAA,EAChC;AAAA,EACA,QAAQ,SAAoC;AAC1C,mBAAe,QAAQ,OAAO;AAAA,EAChC;AAAA,EACA,MAAM,SAAoC;AACxC,mBAAe,MAAM,OAAO;AAAA,EAC9B;AACF;ACZO,MAAM,sBAAsB,WAAW;AAAA,EAC5C,YAAY;AAAA,IACV,MAAM;AAAA,EACR;AAAA,EACA,WAAW;AAAA,IACT,MAAMS;AAAAA,EACR;AAAA,EACA,aAAa;AAAA,IACX,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AAAA,EACA,UAAU;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AAAA,EACA,SAAS;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA,kBAAkB;AAAA,IAChB,MAAM;AAAA,EACR;AAAA,EACA,gBAAgB;AAAA,IACd,MAAM;AAAA,EACR;AAAA,EACA,eAAe;AAAA,IACb,MAAM;AAAA,IACN,SAAS,CAAC,SAAc;AACtB,YAAM,QAAQ,KAAK,SAAS,KAAK,MAAM,KAAK;AAC5C,YAAM,QAAQ,KAAK,SAAS,KAAK,QAAQ,KAAK,SAAS,KAAK;AAErD,aAAA,EAAE,OAAO;IAClB;AAAA,EACF;AAAA,EACA,YAAY;AAAA,IACV,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AACF,CAAC;AAIM,MAAM,sBAAsB;AAAA,EACjC,sBAAsB,CAAC,eAAoB;AAC7C;ACxBA,MAAA,iBAAe,gBAAgB;AAAA,EAC7B,MAAM;AAAA,EACN,OAAO;AAAA,EACP,OAAO;AAAA,EACP,cAAc;AAAA,EACd,MAAM,OAAO,EAAE,QAAQ;AACrB,UAAM,aAAa,SAAS;AAAA,MAC1B,KAAK,MAAM,MAAM,MAAM,UAAU;AAAA,MACjC,KAAK,CAAC,MAAM;AACV,aAAK,sBAAsB,CAAC;AAAA,MAC9B;AAAA,IAAA,CACD;AAEK,UAAA,aAAa,SAAS,MAAM;AAC1B,YAAA,cAAc,MAAM,UAAU;AAC9B,YAAA,cAAc,MAAM,UAAU;AAEpC,UAAI,MAAM,aAAa;AACrB,eAAO,MAAM,YACT,2CAAa,IAAI,CAAC,SAAc,KAAK,WAAW,OAAM,CACtD,KAAA,2CAAc,iBAAgB;AAAA,MACpC;AAEO,aAAA;AAAA,IAAA,CACR;AAED,UAAM,kBAAkB,IAAI,MAAM,UAAU,CAAC;AACvC,UAAA,gBAA4B,IAAI,CAAA,CAAE;AAExC,UAAM,aAAa;AAAA,MACjB,MAAA;;AAAM,qBAAM,sBAAoBT,MAAA,MAAM,cAAN,gBAAAA,IAAiB,eAAc;AAAA;AAAA,IAAA;AAG3D,UAAA,gBAAgB,SAAS,MAAM;AAC/B,UAAA;AAEJ,UAAI,MAAM,gBAAgB;AACxB,yBAAiB,CAAC,SAAc;AACvB,iBAAA;AAAA,YACL,OAAO,KAAK,MAAM,UAAU,CAAC;AAAA,YAC7B,OAAO,KAAK,MAAM,cAAe;AAAA,UAAA;AAAA,QACnC;AAAA,MACF,OACK;AACL,yBAAiB,MAAM;AAAA,MACzB;AAEM,YAAA,qBAAqB,CAAC,SAAc;AAClCU,cAAAA,WAAU,eAAe,IAAI;AAEnCA,iBAAQ,OAAO;AAEf,YAAI,MAAM,QAAQ,KAAK,QAAQ,GAAG;AAChCA,mBAAQ,WAAW,KAAK,SAAS,IAAI,kBAAkB;AAAA,QACzD;AAEOA,eAAAA;AAAAA,MAAA;AAGF,aAAA;AAAA,IAAA,CACR;AAEK,UAAA,UAAyC,SAAS,MAAM;AAC5D,UAAIA,WAA4B,CAAA;AAE1B,YAAA,iBAAiB,MAAM,aAAa;AAE1C,UAAI,MAAM,WAAW;AACnBA,mBAAU,MAAM,UACb,QACA,EAAA,IAAI,CAAC,SAAS,eAAe,KAAK,MAAM,IAAI,CAAC;AAAA,MACvC,WAAA,MAAM,QAAQ,MAAM,OAAO,GAAG;AACvCA,mBAAU,MAAM,QAAQ,IAAI,CAAC,SAAS,eAAe,KAAK,MAAM,IAAI,CAAC;AAAA,MACvE;AAEA,YAAM,eAAeA,SAAQ,IAAI,CAACA,aAAYA,SAAQ,KAAK;AAE3D,UAAI,kBAAyB,CAAA;AAE7B,UAAI,MAAM,YAAY;AACpB,0BAAkB,MAAM,aAAa,EAClC,IAAI,cAAc,EAClB;AAAA,UACC,CAAC,mBAAmB,CAAC,aAAa,SAAS,eAAe,KAAK;AAAA,QAAA;AAAA,MAErE;AAEOA,aAAAA,SAAQ,OAAO,eAAe;AAAA,IAAA,CACtC;AAED;AAAA,MACE;AAAA,MACA,OAAOC,gBAAe;AAChB,YAAA;AACJ,YAAI,MAAM,aAAa;AACrB,oBAAU,MAAM,YACZA,2CAAY,IAAI,CAAC,SAAc,KAAK,MAAM,UAAU,CAAC,OAAM,MAC3DA,2CAAa,MAAM,UAAU,OAAM;AAAA,QAAA,OAClC;AACKA,oBAAAA;AAAAA,QACZ;AAEA,YAAI,CAAC,QAAQ,SAAS,MAAM,eAAe,CAAC,GAAG;AAC7C,0BAAgB,QAAQ;AAAA,QAC1B;AAAA,MACF;AAAA,MACA,EAAE,WAAW,KAAK;AAAA,IAAA;AAGpB,UAAM,uBAAuB,YAAY;AACjC,YAAA,cAAc,MAAM,UAAU;AAE9B,YAAA,cAAc,MAAM,eAAe;AAEnC,YAAA,YAAY,MAAM,QAAQ,WAAW,IACvC,cACA,cACA,CAAC,WAAW,IACZ;AAEJ,UAAI,MAAM,WAAW;AACnB,cAAM,YAAY,MAAM;AAExB,YAAI,kBAAkB,MAAM,OAAO,EAChC,OAAO,CAAC,WAAW,UAAU,SAAS,OAAO,KAAK,CAAC,EACnD,IAAI,CAAC,SAAS,KAAK,IAAI;AAEtB,YAAA,gBAAgB,WAAW,UAAU,QAAQ;AAC/C,gBAAM,qBAAqB,UAAU;AAAA,YACnC,CAAC,OAAO,CAAC,gBAAgB,KAAK,CAAC,SAAS,KAAK,WAAW,MAAM,EAAE;AAAA,UAAA;AAG5D,gBAAA,QAAQ,IAAI;AACZ,gBAAA;AAAA,YACJ,MAAM,UAAU;AAAA,YAChB;AAAA,YACA,GAAG,mBAAmB,KAAK,GAAG,CAAC;AAAA,UAAA;AAQjC,gBAAM,WAAW,MAAM,UAAU,gBAAgB,QAAQ;AAAA,YACvD,MAAM,EAAE,WAAW,MAAM;AAAA,UAAA,CAC1B;AAEG,cAAA,SAAS,KAAK,SAAS,KAAK;AAC9B,8BAAkB,CAAC,GAAG,iBAAiB,GAAG,SAAS,KAAK,IAAI;AAAA,UAC9D;AAAA,QACF;AAEA,eAAO,UACJ,IAAI,CAAC,OAAO,gBAAgB,KAAK,CAAC,SAAS,KAAK,WAAW,MAAM,EAAE,CAAC,EACpE,OAAO,OAAO;AAAA,MACR,WAAA,MAAM,QAAQ,MAAM,OAAO,GAAG;AACjC,cAAA,WAAW,MAAM,OAAO;AAE9B,eAAO,SACJ,OAAO,CAAC,WAAW,UAAU,SAAS,OAAO,KAAK,CAAC,EACnD,IAAI,CAAC,SAAS,KAAK,IAAI;AAAA,MAC5B;AAEA,aAAO;IAAC;AAGV;AAAA,MACE;AAAA,MACA,OAAOC,gBAAe;AACN,sBAAA,QAAQ,MAAM;AACxB,YAAA,WAAW,UAAUA,aAAY;AACnC,cAAI,MAAM,aAAa;AACV,uBAAA,QAAQ,MAAM,WACrB,CAAC,GAAG,cAAc,KAAK,IACvB,cAAc,MAAM,CAAC,KAAK;AAAA,UAAA,OACzB;AACL,uBAAW,QAAQA;AAAAA,UACrB;AAAA,QACF;AAAA,MACF;AAAA,MACA,EAAE,WAAW,KAAK;AAAA,IAAA;AAGd,UAAA,gBAAgB,CAAC,MAAW;AAChC,sBAAgB,QAAQ;AAAA,IAAA;AAGnB,WAAA;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AAAA,EACA,SAAS;;AACA,YAAAJ,OAAAR,MAAA,KAAK,QAAO,YAAZ,gBAAAQ,IAAA,KAAAR,KAAsB;AAAA,MAC3B,SAAS,KAAK;AAAA,MACd,YAAY,KAAK;AAAA,MACjB,eAAe,KAAK;AAAA,MACpB,eAAe,KAAK;AAAA,MACpB,eAAe,KAAK;AAAA,IAAA;AAAA,EAExB;AACF,CAAC;AClOM,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;ACKhC,UAAM,QAAQ;AAQd,UAAM,QAAQ;AAER,UAAA,aAAa,SAAS,MAAM;AAE5B,UAAA,CAAC,MAAM,MAAM;AACR,eAAA;AAAA,MACT;AAEA,UAAI,eAAe,KAAK,MAAM,IAAI,GAAG;AAC5B,eAAA;AAAA,MACE,WAAA,gBAAgB,KAAK,MAAM,IAAI,GAAG;AACpC,eAAA;AAAA,MACE,WAAA,MAAM,KAAK,SAAS,GAAG,GAAG;AAC5B,eAAA;AAAA,MAAA,OACF;AACE,eAAA;AAAA,MACT;AAAA,IAAA,CACD;AAEK,UAAA,QAAQ,SAAS,MAAM;AAC3B,YAAM,YAAY,CAAA;AAClB,UAAI,MAAM,MAAM;AACd,gBAAQ,MAAM,MAAM;AAAA,UAClB,KAAK;AACH,sBAAU,KAAK,iBAAiB;AAChC;AAAA,UACF,KAAK;AACH,sBAAU,KAAK,iBAAiB;AAChC;AAAA,UACF,KAAK;AACH,sBAAU,KAAK,iBAAiB;AAChC,sBAAU,KAAK,iBAAiB;AAChC;AAAA,QACJ;AAAA,MACF;AACA,UAAI,MAAM,QAAQ;AAChB,kBAAU,KAAK,UAAU,MAAM,SAAS,GAAG,MAAM;AAAA,MACnD;AACO,aAAA;AAAA,QACL,GAAI,MAAM,SAAS,EAAC,OAAO,MAAM,MAAK;AAAA,QACtC,GAAI,MAAM,QAAQ,EAAC,UAAU,OAAO,MAAM,SAAS,WAAW,GAAG,MAAM,IAAI,OAAO,MAAM,KAAI;AAAA,QAC5F,GAAI,UAAU,UAAU,EAAC,WAAW,UAAU,KAAK,GAAG,EAAC;AAAA,MAAA;AAAA,IACzD,CACD;AAED,UAAMa,eAAc,MAAM;AACxB,YAAM,OAAO;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;AC1DF,MAAA,YAAY,YAAYC,WAAO;ACArC,MAAM,cAAc,WAAW;AAAA,EACpC,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AAAA,EACA,OAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AAAA,EACA,MAAM;AAAA,IACJ,QAAQ;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AACF,CAAU;AAIH,MAAM,cAAc;AAAA,EACzB,OAAO,MAAM;AACf;AC7BA,MAAeC,yCAAgB;AAAA,EAC7BC,MAAM;AAAA,EACNC,OAAOC;AAAAA,EACPC,OAAOC;AAAAA,EACPC,MAAMJ,OAAO;AAAA,IAAEK;AAAAA,EAAK,GAAG;AACrB,UAAMT,eAAcA,MAAM;AACxBS,WAAK,OAAO;AAAA;AAGd,WAAO,MAAM;AACX,YAAMC,OAAON,MAAMM,OAAIC,YAAAC,WAAA;AAAA,QAAA,SAAA;AAAA,QAAA,QAAqCR,MAAMM;AAAAA,MAAI,GAAA,IAAA,IAAO;AAE7E,YAAMG,OAAOT,MAAMU,QAAKH,YAAA,QAAA;AAAA,QAAA,SAAA;AAAA,MAAA,GAAA,CACSP,MAAMU,KAAK,CAAA,IACxC;AAEJ,aAAAH,YAAAI,UAAA;AAAA,QAAA,SAAA;AAAA,QAAA,WAGaf;AAAAA,QAAW,QACdI,MAAMY;AAAAA,QAAI,QACVZ,MAAMa;AAAAA,MAAI,GAAA;AAAA,QAAAC,SAAAA,MAEfR,CAAAA,MACAG,IAAI;AAAA,MAAA,CAAA;AAAA;EAIb;AACF,CAAC;AChCM,MAAM,WAAW;;;;;;;;ACGX,MAAA,8BAET,OAAO,0BAA0B;ACUrC,MAAM,eAAe,IAA2B;AAOhC,SAAA,gBACd,KACA,eAAe,QACf;AACA,QAAM,SAAS,uBACX,OAAO,6BAA6B,YAAY,IAChD;AAEJ,MAAI,KAAK;AACP,WAAO,SAAS,MAAA;;AAAM,eAAA1B,MAAA,MAAM,MAAM,MAAZ,gBAAAA,IAAgB,SAAQ;AAAA,KAAY;AAAA,EAC5D;AAEO,SAAA;AACT;AAEO,SAAS,oBACd,QACA,KACA,SAAkB,OAClB;AACM,QAAA,UAAU,CAAC,CAAC;AACZ,QAAA,YAAY,UAAU,gBAAA,IAAoB;AAEhD,QAAM,aAAY,2BAAK,aAAY,UAAU,UAAU;AAEvD,MAAI,CAAC,WAAW;AACR,UAAA,IAAI,MAAM,EAAE;AAAA,EACpB;AAEM,QAAA,UAAU,SAAS,MAAM;AACvB,UAAA,MAAM,MAAM,MAAM;AACpB,QAAA,EAAC,uCAAW,QAAO;AACd,aAAA;AAAA,IACT;AAEO,WAAA,MAAM,UAAU,OAAO,GAAG;AAAA,EAAA,CAClC;AAED,UAAQ,6BAA6B,OAAO;AAExC,MAAA,UAAU,CAAC,aAAa,OAAO;AACjC,iBAAa,QAAQ,QAAQ;AAAA,EAC/B;AAEO,SAAA;AACT;AChEO,MAAM,sBAAsB,WAAW;AAAA,EAC5C,qBAAqB;AAAA,IACnB,MAAM;AAAA,EACR;AAAA,EACA,oBAAoB;AAAA,IAClB,MAAM;AAAA,EACR;AAAA,EACA,sBAAsB;AAAA,IACpB,MAAM;AAAA,EACR;AAAA,EACA,uBAAuB;AAAA,IACrB,MAAM;AAAA,EACR;AAAA,EACA,2BAA2B;AAAA,IACzB,MAAM;AAAA,EACR;AAAA,EACA,MAAM;AAAA,IACJ,MAAM;AAAA,EACR;AACF,CAAC;ACrB+C,SAAAgC,UAAAC,GAAA;AAAA,SAAA,OAAAA,MAAA,cAAAC,OAAAC,UAAAC,SAAAC,KAAAJ,CAAA,MAAAK,qBAAAA,CAAAA,QAAAL,CAAA;AAAA;AAEhD,MAAelB,iDAAgB;AAAA,EAC7BC,MAAM;AAAA,EACNuB,cAAc;AAAA,EACdtB,OAAOuB;AAAAA,EACPnB,MAAMJ,OAAO;AAAA,IAAEwB;AAAAA,EAAM,GAAG;AACtBC,wBAAoBzB,KAAK;AAEzB,UAAM0B,gBAAgBC,SAAS,MAAA;;AAAM3B,cAAAA,MAAAA,MAAM4B,SAAN5B,gBAAAA,IAAY6B;AAAAA,KAAsB;AAEvE,WAAO,MAAA;AAAA,UAAAC;AAAA,aAAAvB,YAAAwB,kBAAA;AAAA,QAAA,UACqBC,MAAMN,aAAa;AAAA,SAACX,UAAAe,QAC3CG,WAAWT,OAAO,SAAS,CAAC,IAAAM,QAAA;AAAA,QAAAhB,SAAAA,MAAA,CAAAgB,KAAA;AAAA,MAAA,CAAA;AAAA;EAGnC;AACF,CAAC;ACjBY,MAAA,mBAAmB,YAAY,cAAc;ACE1D,MAAM,EAAE,SAAS,GAAG,GAAG,4BAA4B;AAE5C,MAAM,uBAAuB,WAAW;AAAA,EAC7C,GAAG;AAAA,EACH,WAAW;AAAA,IACT,MAAMtC;AAAAA,IACN,UAAU;AAAA,EACZ;AAAA,EACA,UAAU;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AACF,CAAU;AAMH,MAAM,uBAAuB;AAAA,EAClC,GAAG;AACL;ACfA,MAAeM,kDAAgB;AAAA,EAC7BC,MAAM;AAAA,EACNuB,cAAc;AAAA,EACdtB,OAAOkC;AAAAA,EACPhC,OAAOiC;AAAAA,EACP/B,MAAMJ,OAAO;AAAA,IAAEK;AAAAA,EAAK,GAAG;AACrB,UAAM+B,yBACJC,IAAI,IAAI;AAEV,UAAMC,YAAYX,SAAS,MAAM3B,MAAMsC,SAAS;AAEhD,UAAM5C,aAAaiC,SAAS;AAAA,MAC1BY,KAAKA,MAAMvC,MAAMN;AAAAA,MACjB8C,KAAMC,OAAMpC,KAAK,sBAAsBoC,CAAC;AAAA,IAC1C,CAAC;AAEDC,UACEf,SACE,MAAM,CAACK,MAAMM,SAAS,GAAGtC,MAAM2C,QAAQ,CACzC,GACA,CAAC,CAACL,YAAWK,QAAQ,MAAM;AACzBL,MAAAA,WAAUM,mBAAmB,IAAIC,uBAAuB;AAAA,QAAEF;AAAAA,MAAU,CAAA,CAAC;AAAA,IACvE,GACA;AAAA,MAAEG,WAAW;AAAA,IAAK,CACpB;AAEA,UAAMC,kBAAkB,YAAY;;AAClC,UAAI/C,MAAMgD,UAAU;AAClB;AAAA,MACF;AAEA,YAAMC,aAAajB,MAAMM,SAAS;AAElC,YAAMY,eAAclB,MAAAA,MAAMI,sBAAsB,MAA5BJ,gBAAAA,IAA+BrC;AAEnD,YAAMA,aAAaK,MAAM2C,WACrBO,eAAe,CAAE,IACjBA,cACA,CAACA,WAAW,IACZ;AAEJD,iBAAWE,aAAaxD,UAAU;AAElC,YAAMyD,SAAS,MAAMC,SAASC,sBAAsBtB,MAAMM,SAAS,CAAE;AACrE,UAAIc,OAAOG,WAAW;AACpBvB,SAAAA,MAAAA,MAAMI,sBAAsB,MAA5BJ,gBAAAA,IAA+BwB,cAC7BxD,MAAM2C,WAAWS,OAAOzD,aAAayD,OAAOzD,WAAW,CAAC;AAAA,MAE5D;AAAA;AAGF,WAAO,MAAM;AACX,aAAAY,YAAA,OAAA;AAAA,QAAA,SAAA;AAAA,QAAA,eACiDwC;AAAAA,SAAexC,CAAAA,YAAAkD,kBAAA;AAAA,QAAA,cAE9CzB,MAAMtC,UAAU;AAAA,QAAC,wBACN+C,OAAW;AAChC/C,qBAAWgE,QAAQjB;AAAAA,QACpB;AAAA,QAAA,OACKkB,QAAQvB,uBAAuBsB,QAAQC;AAAAA,QAAU,aAC5C3D,MAAMsC;AAAAA,QAAS,eACbtC,MAAM4D;AAAAA,QAAW,YACpB5D,MAAM2C;AAAAA,QAAQ,kBACR3C,MAAM6D;AAAAA,QAAc,oBAClB7D,MAAM8D;AAAAA,QAAgB,iBACzB9D,MAAM+D;AAAAA,SACZ;AAAA,QACPjD,SAASA,CAAC;AAAA,UAAEkD;AAAAA,UAAeD;AAAAA,QAAmB,MAAM;AAClD,gBAAMtE,UAAUuE,cAAcC,IAAIF,aAAa;AAE/C,iBAAAxD,YAAA2D,UAAA;AAAA,YAAA,YAEclE,MAAMgD;AAAAA,YAAQ,YACdhD,MAAM2C;AAAAA,YAAQ,cACZwB;AAAAA,YAAI,eAAA;AAAA,YAAA,aAAA;AAAA,YAAA,cAGJnE,MAAM2C,WAAWlD,UAAUA,QAAQ,CAAC,KAAK;AAAA,UAAI,GAAA,IAAA;AAAA,QAG/D;AAAA,MACD,CAAA,CAAA,CAAA;AAAA;EAKX;AACF,CAAC;AC9FY,MAAA,oBAAoB,YAAY,eAAe;;;;;;ACCrD,MAAM,kBAAkB,WAAW;AAAA,EACxC,GAAG;AAAA,EACH,UAAU;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AAAA,EACA,aAAa;AAAA,IACX,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AAAA,EACA,YAAY;AAAA,IACV,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AAAA,EACA,kBAAkB;AAAA,IAChB,MAAM;AAAA,IACN,SAAS,MAAM,CAAC;AAAA,EAClB;AAAA,EACA,YAAY;AACd,CAAU;AAIH,MAAM,iBAAiB;AAAA,EAC5B,GAAG;AACL;ACxBqC,SAAAsB,UAAAC,GAAA;AAAA,SAAA,OAAAA,MAAA,cAAAC,OAAAC,UAAAC,SAAAC,KAAAJ,CAAA,MAAAK,qBAAAA,CAAAA,QAAAL,CAAA;AAAA;AAIrC,MAAelB,6CAAgB;AAAA,EAC7BC,MAAM;AAAA,EACNC,OAAOoE;AAAAA,EACPlE,OAAOmE;AAAAA,EACPjE,MAAMJ,OAAO;AAAA,IAAEK;AAAAA,EAAK,GAAG;AACrB,UAAMiE,UAAU3C,SAAS,MAAM3B;;AAAAA,eAAAA,MAAAA,MAAMsC,cAANtC,gBAAAA,IAAiBsE,YAAW;AAAA,KAAK;AAEhE,UAAM5E,aAAaiC,SAAS;AAAA,MAC1BY,KAAKA,MAAMP,MAAMhC,MAAMN,UAAU;AAAA,MACjC8C,KAAMC,OAAM;AACVpC,aAAK,sBAAsBoC,CAAC;AAAA,MAC9B;AAAA,IACF,CAAC;AAED,UAAMH,YAAYX,SAAS,MAAM3B,MAAMsC,SAAS;AAEhDiC,cAAU,MAAM,CACd7B,MACEJ,WACA,YAAY;;AACV,cAAMN,MAAAA,MAAMM,SAAS,MAAfN,gBAAAA,IAAkBwC;AACxBxC,OAAAA,MAAAA,MAAMM,SAAS,MAAfN,gBAAAA,IAAkByC,WAAWC;AAC7B1C,OAAAA,MAAAA,MAAMM,SAAS,MAAfN,gBAAAA,IAAkB2C;AAAAA,IACpB,GACA;AAAA,MAAE7B,WAAW;AAAA,IACf,CAAA,CAAC,CACF;AAED,UAAM8B,eAAeC,SAAS,OAAOnB,UAAkB;AACrD,UAAI1D,MAAMsC,WAAW;AACnB,YAAI,CAACtC,MAAM8E,iBAAiBC,QAAQ;AAClC,iBAAO;AAAA,QACT;AAEA/E,cAAMsC,UAAU0C,aAAcC,WAAU;AACtCA,gBAAMC,MAAK;AAEX,mBAASC,aAAanF,MAAM8E,kBAAkB;AAC5CG,kBAAMG,aAAaD,WAAW,QAAQ,IAAIzB,KAAK,GAAG;AAAA,UACpD;AAAA,QACF,CAAC;AAEkB1D,cAAMsC,UAAUmC;AAEnC,cAAMzE,MAAMsC,UAAUqC;AAEtB;AAAA,MACF;AAAA,IACD,GAAE,GAAG;AAEN,WAAO,MAAM;AACX,aAAApE,YAAAkD,kBAAA;AAAA,QAAA,cAEgBzB,MAAMtC,UAAU;AAAA,QAAC,wBACN+C,OAAW;AAChC/C,qBAAWgE,QAAQjB;AAAAA,QACpB;AAAA,QAAA,aACUzC,MAAMsC;AAAAA,QAAS,eACbtC,MAAM4D;AAAAA,QAAW,YACpB5D,MAAM2C;AAAAA,QAAQ,WACf3C,MAAMP;AAAAA,QAAO,kBACNO,MAAM6D;AAAAA,QAAc,oBAClB7D,MAAM8D;AAAAA,QAAgB,iBACzB9D,MAAM+D;AAAAA,SACZ;AAAA,QACPjD,SAASA,CAAC;AAAA,UAAErB;AAAAA,UAASE;AAAAA,UAAY6D;AAAAA,QAAmB,MAAM;AACxD,gBAAM6B,WAAWrD,MAAMvC,OAAO,EAAEwE,IAAK7E,UAASmB,YAAA+E,UAAA;AAAA,YAAA,OAErClG,KAAKsE;AAAAA,YAAK,SACRtE,KAAKsE;AAAAA,YAAK,SACVtE,KAAKsB;AAAAA,UAAK,GAAA,IAAA,CAEpB;AAED,iBAAAH,YAAA2D,UAAA;AAAA,YAAA,YAEclE,MAAMgD;AAAAA,YAAQ,WACfhB,MAAMsC,OAAO;AAAA,YAAC,SAAA;AAAA,YAAA,cAEX3E;AAAAA,YAAU,uBACD6D;AAAAA,YAAa,gBACpBoB;AAAAA,YAAY,YAChB5E,MAAM2C;AAAAA,YAAQ,eACX3C,MAAMuF;AAAAA,YAAW,cAClBvF,MAAMwF;AAAAA,UAAU,GAAAzE,UAE3BsE,QAAQ,IAARA,WAAQ;AAAA,YAAAvE,SAAAA,MAAA,CAARuE,QAAQ;AAAA,UAAA,CAAA;AAAA,QAGf;AAAA,OACD;AAAA;EAIT;AACF,CAAC;ACrGY,MAAA,eAAe,YAAY,UAAU;;;;;;;;ACArCI,MAAAA,kBAAkBC,WAAW;AAAA,EACxCC,OAAO;AAAA,IACL/E,MAAMgF;AAAAA,IACNC,UAAU;AAAA,EACX;AAAA,EACDC,aAAa;AAAA,IACXlF,MAAMgF;AAAAA,IACNC,UAAU;AAAA,EACX;AAAA,EACDE,UAAU;AAAA,IACRnF,MAAMgF;AAAAA,IACNC,UAAU;AAAA,EACX;AAAA,EACDG,WAAW;AAAA,IACTpF,MAAMqF;AAAAA,IACNJ,UAAU;AAAA,EACZ;AACF,CAAU;AAIH,MAAMK,kBAAkB;AAAA,EAC7B,sBAAuBJ,iBAAqB,OAAOA,gBAAgB;AAAA,EACnE,mBAAoBC,cAAkB,OAAOA,aAAa;AAC5D;ACvBA,MAAejG,6CAAgB;AAAA,EAC7BC,MAAM;AAAA,EACNC,OAAOyF;AAAAA,EACPvF,OAAOgG;AAAAA,EACP9F,MAAMJ,OAAO;AAAA,IAAEK;AAAAA,EAAK,GAAG;AACrB,UAAM8F,0BAA2BL,iBAAwB;AACvDzF,WAAK,sBAAsByF,WAAW;AAAA;AAGxC,UAAMM,uBAAwBL,cAAqB;AACjD1F,WAAK,mBAAmB0F,QAAQ;AAAA;AAGlC,WAAO,MAAM;AACX,aAAAxF,YAAA,OAAA;AAAA,QAAA,SAAA;AAAA,MAAA,GAAA,CAAAA,YAAA,OAAA;AAAA,QAAA,SAAA;AAAA,MAAA,GAAA,CAAA8F,gBAAA9F,GAAAA,GAAAA,wBAGWP,MAAM2F,KAAK,CAAAU,GAAAA,gBAAA9F,WAAAA,GAAAA,wBACZP,MAAM8F,WAAW,CAAAO,GAAAA,wBAAA9F,YAAA,OAAA;AAAA,QAAA,SAAA;AAAA,SAAAA,CAAAA,YAAA+F,cAAA;AAAA,QAAA,cAAA;AAAA,QAAA,aAKRtG,MAAMgG;AAAAA,QAAS,eACbhG,MAAM8F;AAAAA,QAAW,YACpB9F,MAAM+F;AAAAA,QAAQ,SACjB/F,MAAM2F;AAAAA,QAAK,UAAA;AAAA,QAAA,yBAEKQ;AAAAA,QAAuB,sBAC1BC;AAAAA,MAAoB,GAAA,IAAA,CAAA,CAAA,CAAA,CAAA;AAAA;EAMpD;AACF,CAAC;ACrCY,MAAA,eAAe,YAAY,UAAU;ACUlD,SAAArF,UAAAC,GAAA;AAAA,SAAA,OAAAA,MAAA,cAAAC,OAAAC,UAAAC,SAAAC,KAAAJ,CAAA,MAAAK,qBAAAA,CAAAA,QAAAL,CAAA;AAAA;AAQA,MAAelB,iDAAgB;AAAA,EAC7BC,MAAM;AAAA,EACNK,QAAQ;AACN,UAAMmG,YAAYC;AAElB,UAAMC,cAAcC,YAAYC;AAElBhF,aAAS,MAAM8E,YAAYG,KAAK;AAE9C,UAAMpF,QAAQqF;AAEdnE,UACEf,SAAS,MAAMK,MAAMuE,UAAUO,YAAY,CAAC,GAC3CC,WAAU;;AACT,YAAMC,cAAcP,YAAYO;AAEhC,UAAI,CAACA,aAAa;AAChB;AAAA,MACF;AAEA,YAAMC,SAASD,YAAYC;AAC3B,YAAM9H,OAAO6H,YAAY7H;AACzB,YAAM+H,OAAOF,YAAYE;AAEzB,YAAMC,YAAYF,OAAOG,eAAeL,MAAMhH,IAAc;AAE5D,UAAI,CAACoH,WAAW;AACdhI,aAAKkI,mBAAmB,IAAI;AAC5BH,aAAKI,cAAc,IAAI;AACvB;AAAA,MACF;AAEA,YAAMC,WAAWpI,KAAKqI,iBAAiBL,UAAUM,MAAM;AAEvD,UAAI,CAACF,UAAU;AACbpI,aAAKkI,mBAAmB,IAAI;AAC5BH,aAAKI,cAAc,IAAI;AACvB;AAAA,MACF;AAEAnI,WAAKkI,mBAAmBE,QAAQ;AAEhC,YAAMG,MACJR,KAAKS,YAAYZ,MAAMa,QAAQ,KAC/BV,KAAKW,UAAU;AAAA,QACbC,IAAIf,MAAMa;AAAAA,QACVG,OAAOZ,UAAUY;AAAAA,QACjBC,OAAO,CAAC,GAACjB,OAAAA,OAAAA,MAAAA,MAAMkB,YAANlB,gBAAAA,MAAgBA,MAAAA,MAAMkB,YAANlB,gBAAAA,IAAehC,UAAS,OAAxCgC,gBAAAA,IAA4CmB,SAA5CnB,gBAAAA,IAAkDiB;AAAAA,QAC3DG,WAAWpB;AAAAA,QACXA,OAAOI;AAAAA,MACT,CAAC;AAEHD,WAAKkB,UAAUV,GAAG;AAAA,IACpB,GACA;AAAA,MAAE5E,WAAW;AAAA,IAAK,CACpB;AAEA,WAAO,MAAM;AAAA,UAAAhB;AACX,aAAAvB,YAAA8H,kBAAA;AAAA,QAAA,uBAEyB5B,YAAY6B;AAAAA,QAAmB,sBAChC7B,YAAY8B;AAAAA,QAAkB,wBAC5B9B,YAAY+B;AAAAA,QAAoB,yBAEpD/B,YAAYgC;AAAAA,QAAqB,6BAERhC,YAAYiC;AAAAA,QAAyB,QAC1DjC,YAAY7E;AAAAA,SAAIb,UAAAe,QAErBG,WAAWT,OAAO,SAAS,CAAC,IAAAM,QAAA;AAAA,QAAAhB,SAAAA,MAAA,CAAAgB,KAAA;AAAA,MAAA,CAAA;AAAA;EAIrC;AACF,CAAC;AC5FY,MAAA,mBAAmB,YAAY,cAAc;ACAnD,MAAM,eAAe;AAAA,EAC1B,qBAAqB,MAAM,OAAO,2BAAe,CAAC;AACpD;;;;;;ACFO,MAAM,eAAe;AAAA,EAC1B,qBAAqB,MAAM,OAAO,2BAAe,CAAC;AACpD;;;;;;;;;;;;;;;;;;;;;;;;;;ACFa,MAAA,kBAAkB,YAAY,aAAa;ACAjD,MAAM,kBAAkB,CAAC,QAAQ,QAAQ,SAAS,UAAU;AAE5D,MAAM,kBAAkB,WAAW;AAAA,EACxC,YAAY;AAAA,IACV,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AAAA,EACA,UAAU;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AAAA,EACA,MAAM;AAAA,IACJ,SAAS;AAAA,IACT,QAAQ;AAAA,EACV;AAAA,EACA,aAAa;AAAA,IACX,MAAM;AAAA,EACR;AACF,CAAC;AAIM,MAAM,kBAAkB;AAAA,EAC7B,sBAAsB,CAAC,UAAkB;AAC3C;ACnBA,MAAehC,iDAAgB;AAAA,EAC7BC,MAAM;AAAA,EACNC,OAAO2I;AAAAA,EACPzI,OAAO0I;AAAAA,EACPxI,MAAMJ,OAAO;AAAA,IAAEK;AAAAA,EAAK,GAAG;AACrB,UAAMX,aAAaiC,SAAS;AAAA,MAC1BY,KAAKA,MAAMvC,MAAMN;AAAAA,MACjB8C,KAAMC,OAAM;AACVpC,aAAK,sBAAsBoC,CAAC;AAAA,MAC9B;AAAA,IACF,CAAC;AAED,UAAMO,WAAWrB,SAAS,MAAM3B,MAAMgD,QAAQ;AAE9C,UAAMpC,OAAOe,SAAS,MACpBkH,gBAAgBC,SAAS9I,MAAMY,IAAI,IAAIZ,MAAMY,OAAO,MACtD;AAEA,UAAMmI,cAAcpH,SAAS,MAAM;AACjC,UAAI3B,MAAM+I,aAAa;AACrB,eAAO/I,MAAM+I;AAAAA,MACf;AAEA,cAAQ/G,MAAMpB,IAAI,GAAC;AAAA,QACjB,KAAK;AACH,iBAAO;AAAA,QACT,KAAK;AACH,iBAAO;AAAA,QACT,KAAK;AACH,iBAAO;AAAA,QACT;AACE,iBAAO;AAAA,MACX;AAAA,IACF,CAAC;AAED,WAAO,MAAM;AACX,aAAAL,YAAAyI,cAAA;AAAA,QAAA,SAAA;AAAA,QAAA,QAGUhH,MAAMpB,IAAI;AAAA,QAAC,eACJoB,MAAM+G,WAAW;AAAA,QAAC,YACrB/G,MAAMgB,QAAQ;AAAA,QAAC,cACbhB,MAAMtC,UAAU;AAAA,QAAC,uBACP+C,OAAY/C,WAAWgE,QAAQjB;AAAAA,MAAE,GAAA,IAAA;AAAA;EAI/D;AACF,CAAC;ACrDY,MAAA,mBAAmB,YAAY,cAAc;;;;;;;;;ACAnD,MAAM,kBAAkB,WAAW;AAAA,EACxC,YAAY;AAAA,IACV,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AAAA,EACA,UAAU;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AACF,CAAC;AAIM,MAAM,kBAAkB;AAAA,EAC7B,sBAAsB,CAAC,UAAkB;AAC3C;ACFsB,SAAA1B,UAAAC,GAAA;AAAA,SAAA,OAAAA,MAAA,cAAAC,OAAAC,UAAAC,SAAAC,KAAAJ,CAAA,MAAAK,qBAAAA,CAAAA,QAAAL,CAAA;AAAA;AAEtB,MAAelB,iDAAgB;AAAA,EAC7BC,MAAM;AAAA,EACNC,OAAOiJ;AAAAA,EACP/I,OAAOgJ;AAAAA,EACP9I,MAAMJ,OAAO;AAAA,IAAEK;AAAAA,EAAK,GAAG;AACrB,UAAM8I,QAAuB9G,IAAI,CAAA,CAAE;AAEnC,UAAM+G,SAAS/G,IAAI,EAAE;AAErB,UAAMgH,gBAAgB1H,SAAS,MAAM;AACnC,YAAM2H,UAAUtH,MAAMoH,MAAM,EAAEG,YAAW,EAAGC;AAE5C,aAAOxH,MAAMmH,KAAK,EAAEM,OAAQnJ,UAC1BA,KAAKiJ,cAAcT,SAASQ,OAAO,CACrC;AAAA,IACF,CAAC;AAED,UAAM5J,aAAaiC,SAAS;AAAA,MAC1BY,KAAKA,MAAMvC,MAAMN;AAAAA,MACjB8C,KAAMC,OAAM;AACVpC,aAAK,sBAAsBoC,CAAC;AAAA,MAC9B;AAAA,IACF,CAAC;AAED,UAAMO,WAAWrB,SAAS,MAAM3B,MAAMgD,QAAQ;AAE9C,UAAM;AAAA,MAAE0G,UAAUC;AAAAA,IAAY,IAAGC,YAAa;AAE9C,UAAMhK,eAAeU,UAAiB;AACpC,UAAI0B,MAAMgB,QAAQ,GAAG;AACnB;AAAA,MACF;AAEAtD,iBAAWgE,QAAQpD;AAAAA;AAGrBiE,cAAU,MAAM;AACd,YAAMsF,UAAkCC,SAASC,iBAC/C,gCACF;AAEA,UAAIC,WAAqB,CAAA;AAEzB,iBAAWC,OAAOhE,MAAMiE,KAAKL,OAAO,GAAG;AACrC,cAAMM,UAAUF,IAAIF,iBAAiB,QAAQ;AAE7CC,mBAAWA,SAASI,OAClBnE,MAAMiE,KAAKC,OAAO,EAAElG,IAAKoG,YAAWA,OAAOvC,GAAGwC,QAAQ,UAAU,EAAE,CAAC,CACrE;AAAA,MACF;AAEAnB,YAAMzF,QAAQuC,MAAMiE,KAAK,oBAAIK,IAAI,CAAC,GAAGtJ,OAAOuJ,KAAKC,OAAO,GAAG,GAAGT,QAAQ,CAAC,CAAC;AAAA,IAC1E,CAAC;AAEDtH,UACEhD,YACA,MAAM;;AACJiK,OAAAA,MAAAA,yCAAYe,aAAZf,gBAAAA,IAAAA,iBAAuB;AAAA,IACzB,GACA;AAAA,MAAEgB,OAAO;AAAA,IAAO,CAClB;AAEA,WAAO,MAAM;AACX,YAAMC,SAAS5I,MAAMtC,UAAU;AAE/B,YAAM2F,WAAWrD,MAAMqH,aAAa,EAAEpF,IAAK3D,UAAIC,YAAA,QAAA;AAAA,QAAA,OAEtCD;AAAAA,QAAI,SACF,CACL,6BACAA,SAASsK,SAAS,cAAc,EAAE;AAAA,QACnC,WACQC,MAAMjL,aAAYU,IAAI;AAAA,MAAC,GAAA,IAAA,CAInC;AAED,aAAAC,YAAA,OAAA;AAAA,QAAA,SAAA;AAAA,SAAAA,CAAAA,YAAAuK,SAAA;AAAA,QAAA,cAGkB9I,MAAMoH,MAAM;AAAA,QAAC,uBACH3G,OAAO2G,OAAO1F,QAAQjB;AAAAA,QAAE,eAAA;AAAA,QAAA,iBAE/B;AAAA,QAAK,cACRgI,QAAQM;AAAAA,MAAM,GAAA,IAAA,GAAAxK,YAAA,OAAA;AAAA,QAAA,SAInB,CACL,2BACAyB,MAAMgB,QAAQ,IAAI,gBAAgB,EAAE;AAAA,SACrCzC,CAAAA,YAAAyK,aAAA;AAAA,QAAA,UAAA;AAAA,MAAA,GAAAjK,UAE2BsE,QAAQ,IAARA,WAAQ;AAAA,QAAAvE,SAAAA,MAAA,CAARuE,QAAQ;AAAA,MAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA;EAK9C;AACF,CAAC;ACnHY,MAAA,mBAAmB,YAAY,cAAc;ACUnD,MAAM,sBAAsB;AAAA,EACjC;AACF;AAEO,MAAM,cAAc;AAAA,EACzB,aAAoC;AAClC,UAAM,IAAI,MAAM;AAAA,EAClB;AACF;ACZO,MAAM,6BAA6B,cAAc;AAAA,EAItD,YAAY,UAAuC,IAAI;AAC/C;AAJR;AACA;AAKO,SAAA,SAAS,QAAQ,UAAU;AAEhC,SAAK,gBAAgB,QAAQ,iBAAiB,IAAI,cAAc;AAAA,EAClE;AAAA,EAEA,UAAU,QAAgB;AACxB,SAAK,SAAS;AAAA,EAChB;AAAA,EAEA,iBAAiB,eAA8B;AAC7C,SAAK,gBAAgB;AAAA,EACvB;AAAA,EAEA,MAAM,aAAoC;AACxC,UAAM,OAAO,MAAM,WAAW,EAAE,QAAQ,KAAK,QAAQ;AAErD,QAAI,CAAC,MAAM;AACT,aAAO,EAAE,SAAS,MAAM,MAAM,IAAI,KAAK;IACzC;AAEA,UAAM,WAAW,MAAM,KAAK,cAAc,OAAO,IAAI;AAE9C,WAAA;AAAA,MACL,SAAS,SAAS,KAAK,SAAS;AAAA,MAChC,MAAM,SAAS,KAAK,KAAK;AAAA,MACzB,KAAK,SAAS,KAAK;AAAA,IAAA;AAAA,EAEvB;AACF;ACxCO,MAAM,4BAA4B,WAAW;AAAA,EAClD,QAAQ;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA,eAAe;AAAA,IACb,MAAM;AAAA,EACR;AACF,CAAU;ACJV,MAAM4F,wBAAwBnL,gCAAgB;AAAA,EAC5CC,MAAM;AAAA,EACNC,OAAOkL;AAAAA,EACP5J,cAAc;AAAA,EACdlB,MAAMJ,OAAO;AAAA,IAAEwB;AAAAA,EAAM,GAAG;AACtB,UAAM2J,SAASxJ,SAAS,MAAM3B,MAAMmL,MAAM;AAC1C,UAAMC,gBAAgBzJ,SAAS,MAAM3B,MAAMoL,aAAa;AAExD,UAAMC,uBAAuB,IAAIC;AAEjC5I,UACEf,SAAS,MAAM,CAACK,MAAMmJ,MAAM,GAAGnJ,MAAMoJ,aAAa,CAAC,CAAQ,GAC3D,CAAC,CAACD,SAAQC,cAAa,MAA+B;AACpDC,2BAAqBE,UAAUJ,WAAU,EAAE;AAC3C,UAAIC,gBAAe;AACjBC,6BAAqBG,iBAAiBJ,cAAa;AAAA,MACrD;AAAA,IACF,GACA;AAAA,MAAEtI,WAAW;AAAA,IAAK,CACpB;AAEA2I,YAAQC,qBAAqB;AAAA,MAAEC,eAAeN;AAAAA,IAAqB,CAAC;AAEpE,WAAO,MAAM;;AACX,cAAO7J,MAAAA,MAAMV,YAANU,gBAAAA,IAAAA;AAAAA;EAEX;AACF,CAAC;MAEYoK,yBAAyBC,YAAYZ,qBAAqB;AChChE,MAAM,kBAAkB,WAAW;AAAA,EACxC,YAAY;AAAA,IACV,MAAM;AAAA,EACR;AAAA,EACA,eAAe;AAAA,IACb,MAAM;AAAA,IACN,SAAS,MAAM,IAAI,qBAAqB;AAAA,EAC1C;AACF,CAAU;AAIH,MAAM,kBAAkB;AAAA,EAC7B,qBAAqB,CAACpM,UAAiB;AAAA,EACvC,qBAAqB,CAAC,SAAiB;AACzC;ACEA,MAAMiN,cAAchM,gCAAgB;AAAA,EAClCC,MAAM;AAAA,EACNC,OAAO+L;AAAAA,EACP7L,OAAO8L;AAAAA,EACP5L,MAAMJ,OAAO;AAAA,IAAEK;AAAAA,EAAK,GAAG;AACrB,UAAM4L,mBAAmBC,OAAOR,qBAAqB,IAAI;AAEzD,UAAMhI,QAAQ/B,SAAS;AAAA,MACrBY,KAAKA,MAAMvC,MAAMN;AAAAA,MACjB8C,KAAMC,OAAcpC,KAAK,qBAAqBoC,CAAC;AAAA,IACjD,CAAC;AAED,UAAMkJ,gBAAgBhK,SACpB,OAAMsK,qDAAkBN,kBAAiB3L,MAAM2L,aACjD;AAEA,UAAMQ,eAAe,YAAY;AAC/B,UAAI;AAEF,cAAMC,eAAe,MAAMpK,MAAM2J,aAAa,EAAEU,WAAU;AAE1D,YAAID,aAAaE,SAAS;AACxB5I,gBAAMA,QAAQ0I,aAAavN,QAAQ6E,MAAMA;AACzCrD,eAAK,qBAAqB+L,aAAarM,QAAQ,EAAE;AACjD;AAAA,QACF;AAEAwM,kBAAUC,MAAMJ,aAAaK,GAAG;AAAA,MACjC,SAAQC,GAAG;AACVC,gBAAQH,MAAME,CAAC;AACfH,kBAAUC,MAAM,MAAM;AAAA,MACxB;AAAA;AAGF,WAAO;AAAA,MACLL;AAAAA;EAEH;AAAA,EACDS,SAAS;;AACP,UAAM;AAAA,MAAET;AAAAA,MAAcU;AAAAA,IAAQ,IAAG;AAEjC,WAAAtM,YAAA,QAAA;AAAA,MAAA,SAAA;AAAA,MAAA,WACwC4L;AAAAA,IAAY,GAAA,EAC/CU,MAAAA,OAAO/L,YAAP+L,gBAAAA,IAAAA,YAAkB,CAAA;AAAA,EAGzB;AACF,CAAC;MAEYC,eAAejB,YAAYC,WAAW;AClE5C,MAAM,mBAAmB,WAAW;AAAA,EACzC,eAAe;AAAA,IACb,MAAM;AAAA,IACN,SAAS,MAAM,IAAI,qBAAqB;AAAA,EAC1C;AAAA,EACA,YAAY;AAAA,IACV,MAAM,CAAC,QAAQ,KAAa;AAAA,EAC9B;AAAA,EACA,UAAU;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AAAA,EACA,OAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AAAA,EACA,QAAQ;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AAAA,EACA,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AACF,CAAU;AAIH,MAAM,mBAAmB;AAAA,EAC9B,qBAAqB,CAACjN,UAA4B;AACpD;AClBA,MAAMkO,oBAAoBjN,gCAAgB;AAAA,EACxCC,MAAM;AAAA,EACNC,OAAO;AAAA,IACLN,YAAY;AAAA,MACVkB,MAAMoM;AAAAA,MACNlM,SAAS;AAAA,IACV;AAAA,IACD6K,eAAe;AAAA,MACb/K,MAAMqM;AAAAA,MACNpH,UAAU;AAAA,IACX;AAAA,IACDqH,OAAO;AAAA,MACLtM,MAAMoM;AAAAA,MACNlM,SAAS;AAAA,IACV;AAAA,IACDqM,QAAQ;AAAA,MACNvM,MAAMoM;AAAAA,MACNlM,SAAS;AAAA,IACV;AAAA,IACDR,MAAM;AAAA,MACJM,MAAMoM;AAAAA,MACNlM,SAAS;AAAA,IACX;AAAA,EACD;AAAA,EACDZ,OAAO,CAAC,qBAAqB,QAAQ,QAAQ;AAAA,EAC7CE,MAAMJ,OAAO;AAAA,IAAEK;AAAAA,EAAK,GAAG;AACrB,UAAM+M,qBACJ/K,IAAI,IAAI;AAEV,UAAMgL,gBAA0DhL,IAAI,IAAI;AAExE,UAAM3C,aAAaiC,SAAS;AAAA,MAC1BY,KAAKA,MAAMvC,MAAMN;AAAAA,MACjB8C,KAAMC,OAAc;AAClBpC,aAAK,qBAAqBoC,CAAC;AAAA,MAC7B;AAAA,IACF,CAAC;AACD,UAAM6K,yBAA0B7K,OAAc;AAC5C/C,iBAAWgE,QAAQjB;AAAAA;AAGrB,UAAM7C,eAAe2N,WAAsB;;AACzCA,YAAMC,gBAAe;AAErB,UAAIxL,MAAMtC,UAAU,GAAG;AACrB;AAAA,MACF;AAEAsC,OAAAA,MAAAA,MAAMoL,kBAAkB,MAAxBpL,gBAAAA,IAA2BmK;AAAAA;AAG7B,UAAMsB,aAAcF,WAAsB;AACxCA,YAAMC,gBAAe;AAErBnN,WAAK,QAAQ2B,MAAMtC,UAAU,CAAC;AAAA;AAGhC,UAAMgO,eAAgBH,WAAsB;AAC1CA,YAAMC,gBAAe;AAGrBnN,WAAK,UAAU2B,MAAMtC,UAAU,CAAC;AAAA;AAGlC,WAAO,MAAM;AACX,UAAIiO;AAEJ,UAAI3L,MAAMtC,UAAU,GAAG;AACrBiO,kBAAOpN,YAAAqN,UAAArN,MAAAA,CAAAA,YAAAsN,SAAA;AAAA,UAAA,OAGClK,QACC0J,cAAc3J,QAAQC;AAAAA,UAAG,OAEvB3B,MAAMtC,UAAU;AAAA,UAAC,SAAA;AAAA,UAAA,OAAA;AAAA,QAAA,GAAA,IAAA,GAAAa,YAAA,OAAA;AAAA,UAAA,SAAA;AAAA,WAAAA,CAAAA,YAAAuN,WAAA;AAAA,UAAA,WAAA;AAAA,QAAA,GAAA;AAAA,UAAAhN,SAAAA,MAAAP,CAAAA,YAAAC,WAAA;AAAA,YAAA,QAAA;AAAA,YAAA,WAOeiN;AAAAA,UAAU,GAAA,IAAA,CAAA;AAAA,SAAAlN,GAAAA,YAAAuN,WAAA;AAAA,UAAA,WAAA;AAAA,QAAA,GAAA;AAAA,UAAAhN,SAAAA,MAAAP,CAAAA,YAAAC,WAAA;AAAA,YAAA,QAAA;AAAA,YAAA,WAGckN;AAAAA,UAAY,GAAA,IAAA,CAAA;AAAA,SAI9E,CAAA,CAAA,CAAA,CAAA;AAAA,MACH,OAAO;AACLC,kBAAOpN,YAAAC,WAAA;AAAA,UAAA,QAAoBR,MAAMM;AAAAA,QAAQ,GAAA,IAAA;AAAA,MAC3C;AAEA,aAAAC,YAAA,OAAA;AAAA,QAAA,SAAA;AAAA,QAAA,SAC2C;AAAA,UAAE2M,OAAOlN,MAAMkN;AAAAA,UAAOC,QAAQnN,MAAMmN;AAAAA,QAAO;AAAA,SAAC5M,CAAAA,YAAAuM,cAAA;AAAA,QAAA,cAErE9M,MAAMN;AAAAA,QAAU,uBACP4N;AAAAA,QAAsB,iBAC5BtN,MAAM2L;AAAAA,QAAa,OAE9BhI,QACCyJ,mBAAmB1J,QAAQC;AAAAA,MAAG,GAAA;AAAA,QAAA7C,SAAAA,MAAA,CAAAP,YAAA,OAAA;AAAA,UAAA,SAAA;AAAA,UAAA,WAGiBX;AAAAA,QAAW,GAAA,CAC5D+N,OAAO,CAAA,CAAA;AAAA,MAAA,CAAA,CAAA,CAAA;AAAA;EAMpB;AACF,CAAC;AAED,MAAe7N,8CAAgB;AAAA,EAC7BC,MAAM;AAAA,EACNC,OAAO+N;AAAAA,EACP7N,OAAO8N;AAAAA,EACP5N,MAAMJ,OAAO;AAAA,IAAEK;AAAAA,EAAK,GAAG;AACrB,UAAMX,aAAaiC,SAAS;AAAA,MAC1BY,KAAKA,MAAMvC,MAAMN;AAAAA,MACjB8C,KAAMC,OAAyBpC,KAAK,qBAAqBoC,CAAC;AAAA,IAC5D,CAAC;AAED,UAAMwL,kBAA+B5L,IAAI,EAAE;AAE3C,UAAMM,WAAWhB,SAAS,MAAM3B,MAAM2C,QAAQ;AAE9C,UAAMuL,oBAAkC7L,IAAI,KAAK;AAEjDK,UACEf,SAAS,MAAM,CAACK,MAAMtC,UAAU,GAAGsC,MAAMW,QAAQ,CAAC,CAAC,GACnD,CAAC,CAACe,OAAOf,SAAQ,MAAM;AACrB,UAAIA,aAAY,CAACsD,MAAMkI,QAAQzK,KAAK,GAAG;AACrChE,mBAAWgE,QAAQ;MACrB;AAAA,IACF,GACA;AAAA,MAAEZ,WAAW;AAAA,IAAK,CACpB;AAEA,UAAM4K,eAAgBU,SAAgB;AACpC,UAAI,CAACpM,MAAMW,QAAQ,GAAG;AACpBjD,mBAAWgE,QAAQ;AACnB;AAAA,MACF;AAEA,YAAM1E,SAAQgD,MAAMtC,UAAU,EAAE2O,QAAQD,GAAG;AAE3C,UAAIpP,WAAU,IAAI;AAChB;AAAA,MACF;AAECU,iBAAWgE,MAAmB4K,OAAOtP,QAAO,CAAC;AAAA;AAGhD,UAAMuP,wBAAyBH,SAAgB;AAC7CF,wBAAkBxK,QAAQ;AAC1BuK,sBAAgBvK,QAAQ0K;AAAAA;AAG1B,UAAMI,yBAAyBA,MAAM;AACnCN,wBAAkBxK,QAAQ;AAAA;AAG5B,UAAM+K,oBAAqBL,SAAgB;AACzC,YAAMxD,SAAS5I,MAAMtC,UAAU;AAE/B,UAAIuG,MAAMkI,QAAQvD,MAAM,GAAG;AACzBA,eAAO8D,KAAKN,GAAG;AAAA,MACjB;AAAA;AAGF,WAAO,MAAM;AACX,YAAMO,YAAY3M,MAAMW,QAAQ;AAChC,UAAIgL;AAEJ,UAAI,CAACgB,WAAW;AACdhB,kBAAOpN,YAAAwM,mBAAA;AAAA,UAAA,UAEKwB;AAAAA,UAAqB,YACnBb;AAAAA,UAAY,cACV1L,MAAMtC,UAAU;AAAA,UAAC,uBACPgE,WAAWhE,WAAWgE,QAAQA;AAAAA,UAAM,iBAC3C1D,MAAM2L;AAAAA,UAAa,SAC3B3L,MAAMkN;AAAAA,UAAK,UACVlN,MAAMmN;AAAAA,UAAM,QACdnN,MAAMM;AAAAA,QAEf,GAAA,IAAA;AAAA,MACH,OAAO;AACL,YAAIsO,SAAyB;AAE7B,YAAI3I,MAAMkI,QAAQnM,MAAMtC,UAAU,CAAC,GAAG;AACpCkP,mBAAU5M,MAAMtC,UAAU,EAAeuE,IAAKmK,SAAG7N,YAAAwM,mBAAA;AAAA,YAAA,UAErCwB;AAAAA,YAAqB,YACnBb;AAAAA,YAAY,cACVU;AAAAA,YAAG,iBACApO,MAAM2L;AAAAA,YAAa,SAC3B3L,MAAMkN;AAAAA,YAAK,UACVlN,MAAMmN;AAAAA,YAAM,QACdnN,MAAMM;AAAAA,UAAI,GAAA,IAAA,CAEnB;AAAA,QACH;AAEAqN,kBAAOpN,YAAAqN,iBAEFgB,QAAMrO,YAAAwM,mBAAA;AAAA,UAAA,uBAEgB0B;AAAAA,UAAiB,iBACvBzO,MAAM2L;AAAAA,UAAa,SAC3B3L,MAAMkN;AAAAA,UAAK,UACVlN,MAAMmN;AAAAA,UAAM,QACdnN,MAAMM;AAAAA,WAGjB,IAAA,CAAA,CAAA;AAAA,MACH;AAEA,YAAMuO,cAAc7M,MAAMkM,iBAAiB,IAAC3N,YAAAuO,eAAA;AAAA,QAAA,cAAA;AAAA,QAAA,UACR;AAAA,QAAE,WACzBN;AAAAA,QAAsB,WACtB,CAACxM,MAAMiM,eAAe,CAAC;AAAA,MAAC,GAAA,IAAA,IAEjC;AAEJ,aAAA1N,YAAA,OAAA;AAAA,QAAA,SAAA;AAAA,QAAA,SACsC;AAAA,UAAE2M,OAAO,CAACyB,YAAY,KAAK3O,MAAMkN;AAAAA,QAAM;AAAA,SACxES,CAAAA,SACAkB,WAAW,CAAA;AAAA;EAIpB;AACF,CAAC;ACxPY,MAAA,gBAAgB,YAAY,WAAW;ACC7C,MAAM,oBAAoB,WAAW;AAAA,EAC1C,eAAe;AAAA,IACb,MAAM;AAAA,IACN,SAAS,MAAM,IAAI,qBAAqB;AAAA,EAC1C;AAAA,EACA,YAAY;AAAA,IACV,MAAM,CAAC,QAAQ,KAAa;AAAA,EAC9B;AAAA,EACA,UAAU;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AAAA,EACA,OAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AAAA,EACA,QAAQ;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AAAA,EACA,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AACF,CAAU;AAIH,MAAM,oBAAoB;AAAA,EAC/B,qBAAqB,CAAChQ,UAA4B;AACpD;AClBA,MAAMkQ,qBAAmBjP,gCAAgB;AAAA,EACvCC,MAAM;AAAA,EACNC,OAAO;AAAA,IACLN,YAAY;AAAA,MACVkB,MAAMoM;AAAAA,MACNlM,SAAS;AAAA,IACV;AAAA,IACD6K,eAAe;AAAA,MACb/K,MAAMqM;AAAAA,MACNpH,UAAU;AAAA,IACX;AAAA,IACDqH,OAAO;AAAA,MACLtM,MAAMoM;AAAAA,MACNlM,SAAS;AAAA,IACV;AAAA,IACDqM,QAAQ;AAAA,MACNvM,MAAMoM;AAAAA,MACNlM,SAAS;AAAA,IACV;AAAA,IACDR,MAAM;AAAA,MACJM,MAAMoM;AAAAA,MACNlM,SAAS;AAAA,IACX;AAAA,EACD;AAAA,EACDZ,OAAO,CAAC,qBAAqB,QAAQ,QAAQ;AAAA,EAC7CE,MAAMJ,OAAO;AAAA,IAAEK;AAAAA,EAAK,GAAG;AACrB,UAAM+M,qBACJ/K,IAAI,IAAI;AAEsDA,QAAI,IAAI;AAEnCA,QAAI,EAAE;AAE3C,UAAM3C,aAAaiC,SAAS;AAAA,MAC1BY,KAAKA,MAAMvC,MAAMN;AAAAA,MACjB8C,KAAMC,OAAc;AAClBpC,aAAK,qBAAqBoC,CAAC;AAAA,MAC7B;AAAA,IACF,CAAC;AAID,UAAMuM,sBAAuBvM,OAAc;AACzC,YAAMzD,SAAQyD,EAAEwM,YAAY,GAAG;AAC/B,YAAMC,YAAYzM,EAAEwM,YAAY,GAAG;AAEnC,YAAM3O,OAAO,CAAC,QAAQ,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,SAAS,OAAO,OAAO,OAAO,OAAO,QAAQ,OAAO,OAAO;AAClI,YAAM6O,UAAU,CAAC,OAAO,OAAO,OAAO,OAAO,MAAM,OAAO,IAAI;AAC9D,YAAMC,aAAa3M,EAAE4M,UAAUrQ,SAAQ,CAAC;AACxC,YAAMsQ,SAAS7M,EAAE4M,UAAUH,YAAY,CAAC;AACxC,UAAI5O,KAAKwI,SAASsG,UAAU,GAAG;AAC7B,eAAO;AAAA,UACL9O,MAAM8O;AAAAA,UACNE;AAAAA;MAEH,WAAUH,QAAQrG,SAASsG,UAAU,GAAG;AACvC,eAAO;AAAA,UACL9O,MAAM;AAAA,UACNgP;AAAAA;MAEJ,OAAO;AACL,eAAO;AAAA,UACLhP,MAAM;AAAA,UACNgP;AAAAA;MAEJ;AAAA;AAGF,UAAMhC,yBAA0B7K,OAAc;AAC5C/C,iBAAWgE,QAAQjB;AAAAA;AAGrB,UAAM7C,eAAe2N,WAAsB;;AACzCA,YAAMC,gBAAe;AAErB,UAAIxL,MAAMtC,UAAU,GAAG;AACrB;AAAA,MACF;AAEAsC,OAAAA,MAAAA,MAAMoL,kBAAkB,MAAxBpL,gBAAAA,IAA2BmK;AAAAA;AAG7B,UAAMuB,eAAgBH,WAAsB;AAC1CA,YAAMC,gBAAe;AAGrBnN,WAAK,UAAU2B,MAAMtC,UAAU,CAAC;AAAA;AAGlC,WAAO,MAAM;AACX,UAAIiO;AAEJ,UAAI3L,MAAMtC,UAAU,GAAG;AACrBiO,kBAAOpN,YAAAqN,iBAAArN,YAAA,OAAA;AAAA,UAAA,SAAA;AAAA,WAAAA,CAAAA,YAAAC,WAAA;AAAA,UAAA,QAGgBwO,oBAAoBhP,MAAMN,UAAU,EAAEY;AAAAA,QAAI,GAAA,IAAA,GAAAC,YAAA,OAAA;AAAA,UAAA,SAAA;AAAA,WAExDyO,CAAAA,oBAAoBhP,MAAMN,UAAU,EAAE4P,MAAM,CAAA,CAAA,CAAA,GAAA/O,YAAA,OAAA;AAAA,UAAA,SAAA;AAAA,WAAAA,CAAAA,YAAAuN,WAAA;AAAA,UAAA,WAAA;AAAA,QAAA,GAAA;AAAA,UAAAhN,SAAAA,MAAAP,CAAAA,YAAAC,WAAA;AAAA,YAAA,QAAA;AAAA,YAAA,WAMRkN;AAAAA,UAAY,GAAA,IAAA,CAAA;AAAA,SAIxD,CAAA,CAAA,CAAA,CAAA;AAAA,MACH,OAAO;AACLC,kBAAOpN,YAAA,OAAA;AAAA,UAAA,SAAA;AAAA,WAAAA,CAAAA,YAAAC,WAAA;AAAA,UAAA,QACYR,MAAMM;AAAAA,UAAI,SAAA;AAAA,QAAA,GAAA,IAAA,GAAAC,YAAA,QAAA;AAAA,UAAA,SAAA;AAAA,QAAA,GAAA,CAAA8F,gBAEvB,QAAA,CAAA,CAAA,CAAA,CAAA;AAAA,MACR;AAEA,aAAA9F,YAAA,OAAA;AAAA,QAAA,SAAA;AAAA,QAAA,SAC6C;AAAA,UAAE2M,OAAOlN,MAAMkN;AAAAA,UAAOC,QAAQnN,MAAMmN;AAAAA,QAAO;AAAA,SAAC5M,CAAAA,YAAAuM,cAAA;AAAA,QAAA,cAEvE9M,MAAMN;AAAAA,QAAU,uBACP4N;AAAAA,QAAsB,iBAC5BtN,MAAM2L;AAAAA,QAAa,OAE9BhI,QACCyJ,mBAAmB1J,QAAQC;AAAAA,MAAG,GAAA;AAAA,QAAA7C,SAAAA,MAAA,CAAAP,YAAA,OAAA;AAAA,UAAA,SAAA;AAAA,UAAA,WAGmBX;AAAAA,QAAW,GAAA,CAC9D+N,OAAO,CAAA,CAAA;AAAA,MAAA,CAAA,CAAA,CAAA;AAAA;EAMpB;AACF,CAAC;AAED,MAAe7N,6CAAgB;AAAA,EAC7BC,MAAM;AAAA,EACNC,OAAOuP;AAAAA,EACPrP,OAAOsP;AAAAA,EACPpP,MAAMJ,OAAO;AAAA,IAAEK;AAAAA,EAAK,GAAG;AACrB,UAAMX,aAAaiC,SAAS;AAAA,MAC1BY,KAAKA,MAAMvC,MAAMN;AAAAA,MACjB8C,KAAMC,OAAyBpC,KAAK,qBAAqBoC,CAAC;AAAA,IAC5D,CAAC;AAED,UAAMwL,kBAA+B5L,IAAI,EAAE;AAE3C,UAAMM,WAAWhB,SAAS,MAAM3B,MAAM2C,QAAQ;AAE9C,UAAMuL,oBAAkC7L,IAAI,KAAK;AAEjDK,UACEf,SAAS,MAAM,CAACK,MAAMtC,UAAU,GAAGsC,MAAMW,QAAQ,CAAC,CAAC,GACnD,CAAC,CAACe,OAAOf,SAAQ,MAAM;AACrB,UAAIA,aAAY,CAACsD,MAAMkI,QAAQzK,KAAK,GAAG;AACrChE,mBAAWgE,QAAQ;MACrB;AAAA,IACF,GACA;AAAA,MAAEZ,WAAW;AAAA,IAAK,CACpB;AAEA,UAAM4K,eAAgBU,SAAgB;AACpC,UAAI,CAACpM,MAAMW,QAAQ,GAAG;AACpBjD,mBAAWgE,QAAQ;AACnB;AAAA,MACF;AAEA,YAAM1E,SAAQgD,MAAMtC,UAAU,EAAE2O,QAAQD,GAAG;AAE3C,UAAIpP,WAAU,IAAI;AAChB;AAAA,MACF;AAECU,iBAAWgE,MAAmB4K,OAAOtP,QAAO,CAAC;AAAA;AAGhD,UAAMuP,wBAAyBH,SAAgB;AAC7CF,wBAAkBxK,QAAQ;AAC1BuK,sBAAgBvK,QAAQ0K;AAAAA;AAO1B,UAAMK,oBAAqBL,SAAgB;AACzC,YAAMxD,SAAS5I,MAAMtC,UAAU;AAE/B,UAAIuG,MAAMkI,QAAQvD,MAAM,GAAG;AACzBA,eAAO8D,KAAKN,GAAG;AAAA,MACjB;AAAA;AAGF,WAAO,MAAM;AACX,YAAMO,YAAY3M,MAAMW,QAAQ;AAEhC,UAAIgL;AAEJ,UAAI,CAACgB,WAAW;AACdhB,kBAAOpN,YAAAwO,oBAAA;AAAA,UAAA,UAEKR;AAAAA,UAAqB,YACnBb;AAAAA,UAAY,cACV1L,MAAMtC,UAAU;AAAA,UAAC,uBACPgE,WAAWhE,WAAWgE,QAAQA;AAAAA,UAAM,iBAC3C1D,MAAM2L;AAAAA,UAAa,SAC3B3L,MAAMkN;AAAAA,UAAK,UACVlN,MAAMmN;AAAAA,UAAM,QACdnN,MAAMM;AAAAA,QAEf,GAAA,IAAA;AAAA,MACH,OAAO;AACL,YAAIsO,SAAyB;AAE7B,YAAI3I,MAAMkI,QAAQnM,MAAMtC,UAAU,CAAC,GAAG;AACpCkP,mBAAU5M,MAAMtC,UAAU,EAAeuE,IAAKmK,SAAG7N,YAAAwO,oBAAA;AAAA,YAAA,UAErCR;AAAAA,YAAqB,YACnBb;AAAAA,YAAY,cACVU;AAAAA,YAAG,iBACApO,MAAM2L;AAAAA,YAAa,SAC3B3L,MAAMkN;AAAAA,YAAK,UACVlN,MAAMmN;AAAAA,YAAM,QACdnN,MAAMM;AAAAA,UAAI,GAAA,IAAA,CAEnB;AAAA,QACH;AAEAqN,kBAAOpN,YAAAqN,iBAEFgB,QAAMrO,YAAAwO,oBAAA;AAAA,UAAA,uBAEgBN;AAAAA,UAAiB,iBACvBzO,MAAM2L;AAAAA,UAAa,SAC3B3L,MAAMkN;AAAAA,UAAK,UACVlN,MAAMmN;AAAAA,UAAM,QACdnN,MAAMM;AAAAA,WAGjB,IAAA,CAAA,CAAA;AAAA,MACH;AAEA,aAAAC,YAAA,OAAA;AAAA,QAAA,SAAA;AAAA,QAAA,SACwC;AAAA,UAAE2M,OAAOyB,YAAY,KAAK3O,MAAMkN;AAAAA,QAAM;AAAA,MAAC,GAAA,CAC1ES,OAAO,CAAA;AAAA;EAIhB;AACF,CAAC;ACxQY,MAAA,iBAAiB,YAAY,UAAU;ACC7C,MAAM,mBAAmB,WAAW;AAAA,EACzC,eAAe;AAAA,IACb,MAAM;AAAA,IACN,SAAS,MAAM,IAAI,qBAAqB;AAAA,EAC1C;AAAA,EACA,YAAY;AAAA,IACV,MAAM,CAAC,QAAQ,KAAa;AAAA,EAC9B;AAAA,EACA,UAAU;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AAAA,EACA,OAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AAAA,EACA,QAAQ;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AAAA,EACA,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AACF,CAAU;AAIH,MAAM,mBAAmB;AAAA,EAC9B,qBAAqB,CAAC9O,UAA4B;AACpD;AClBA,MAAMkQ,mBAAmBjP,gCAAgB;AAAA,EACvCC,MAAM;AAAA,EACNC,OAAO;AAAA,IACLN,YAAY;AAAA,MACVkB,MAAMoM;AAAAA,MACNlM,SAAS;AAAA,IACV;AAAA,IACD6K,eAAe;AAAA,MACb/K,MAAMqM;AAAAA,MACNpH,UAAU;AAAA,IACX;AAAA,IACDqH,OAAO;AAAA,MACLtM,MAAMoM;AAAAA,MACNlM,SAAS;AAAA,IACV;AAAA,IACDqM,QAAQ;AAAA,MACNvM,MAAMoM;AAAAA,MACNlM,SAAS;AAAA,IACV;AAAA,IACDR,MAAM;AAAA,MACJM,MAAMoM;AAAAA,MACNlM,SAAS;AAAA,IACX;AAAA,EACD;AAAA,EACDZ,OAAO,CAAC,qBAAqB,QAAQ,QAAQ;AAAA,EAC7CE,MAAMJ,OAAO;AAAA,IAAEK;AAAAA,EAAK,GAAG;AACrB,UAAM+M,qBACJ/K,IAAI,IAAI;AAEsDA,QAAI,IAAI;AAEnCA,QAAI,EAAE;AAE3C,UAAM3C,aAAaiC,SAAS;AAAA,MAC1BY,KAAKA,MAAMvC,MAAMN;AAAAA,MACjB8C,KAAMC,OAAc;AAClBpC,aAAK,qBAAqBoC,CAAC;AAAA,MAC7B;AAAA,IACF,CAAC;AA6BD,UAAM6K,yBAA0B7K,OAAc;AAC5C/C,iBAAWgE,QAAQjB;AAAAA;AAGrB,UAAM7C,eAAe2N,WAAsB;;AACzCA,YAAMC,gBAAe;AAErB,UAAIxL,MAAMtC,UAAU,GAAG;AACrB;AAAA,MACF;AAEAsC,OAAAA,MAAAA,MAAMoL,kBAAkB,MAAxBpL,gBAAAA,IAA2BmK;AAAAA;AAG7B,UAAMsB,aAAcF,WAAsB;AACxCA,YAAMC,gBAAe;AAErBnN,WAAK,QAAQ2B,MAAMtC,UAAU,CAAC;AAAA;AAGhC,UAAMgO,eAAgBH,WAAsB;AAC1CA,YAAMC,gBAAe;AAGrBnN,WAAK,UAAU2B,MAAMtC,UAAU,CAAC;AAAA;AAGlC,WAAO,MAAM;AACX,UAAIiO;AAEJ,UAAI3L,MAAMtC,UAAU,GAAG;AACrBiO,kBAAOpN,YAAAqN,iBAAArN,YAAA,OAAA;AAAA,UAAA,SAAA;AAAA,WAAAA,CAAAA,YAAAC,WAAA;AAAA,UAAA,QAAA;AAAA,QAAA,GAAA,IAAA,CAAA,CAAA,GAAAD,YAAA,OAAA;AAAA,UAAA,SAAA;AAAA,WAAAA,CAAAA,YAAAuN,WAAA;AAAA,UAAA,WAAA;AAAA,QAAA,GAAA;AAAA,UAAAhN,SAAAA,MAAAP,CAAAA,YAAAC,WAAA;AAAA,YAAA,QAAA;AAAA,YAAA,WAQoCiN;AAAAA,UAAU,GAAA,IAAA,CAAA;AAAA,SAAAlN,GAAAA,YAAAuN,WAAA;AAAA,UAAA,WAAA;AAAA,QAAA,GAAA;AAAA,UAAAhN,SAAAA,MAAAP,CAAAA,YAAAC,WAAA;AAAA,YAAA,QAAA;AAAA,YAAA,WAGRkN;AAAAA,UAAY,GAAA,IAAA,CAAA;AAAA,SAIxD,CAAA,CAAA,CAAA,CAAA;AAAA,MACH,OAAO;AACLC,kBAAOpN,YAAA,OAAA;AAAA,UAAA,SAAA;AAAA,WAAAA,CAAAA,YAAAC,WAAA;AAAA,UAAA,QACYR,MAAMM;AAAAA,UAAI,SAAA;AAAA,QAAA,GAAA,IAAA,GAAAC,YAAA,QAAA;AAAA,UAAA,SAAA;AAAA,QAAA,GAAA,CAAA8F,gBAEvB,QAAA,CAAA,CAAA,CAAA,CAAA;AAAA,MACR;AAEA,aAAA9F,YAAA,OAAA;AAAA,QAAA,SAAA;AAAA,QAAA,SAC2C;AAAA,UAAE2M,OAAOlN,MAAMkN;AAAAA,UAAOC,QAAQnN,MAAMmN;AAAAA,QAAO;AAAA,SAAC5M,CAAAA,YAAAuM,cAAA;AAAA,QAAA,cAErE9M,MAAMN;AAAAA,QAAU,uBACP4N;AAAAA,QAAsB,iBAC5BtN,MAAM2L;AAAAA,QAAa,OAE9BhI,QACCyJ,mBAAmB1J,QAAQC;AAAAA,MAAG,GAAA;AAAA,QAAA7C,SAAAA,MAAA,CAAAP,YAAA,OAAA;AAAA,UAAA,SAAA;AAAA,UAAA,WAGiBX;AAAAA,QAAW,GAAA,CAC5D+N,OAAO,CAAA,CAAA;AAAA,MAAA,CAAA,CAAA,CAAA;AAAA;EAMpB;AACF,CAAC;AAED,MAAe7N,8CAAgB;AAAA,EAC7BC,MAAM;AAAA,EACNC,OAAOyP;AAAAA,EACPvP,OAAOwP;AAAAA,EACPtP,MAAMJ,OAAO;AAAA,IAAEK;AAAAA,EAAK,GAAG;AACrB,UAAMX,aAAaiC,SAAS;AAAA,MAC1BY,KAAKA,MAAMvC,MAAMN;AAAAA,MACjB8C,KAAMC,OAAyBpC,KAAK,qBAAqBoC,CAAC;AAAA,IAC5D,CAAC;AAED,UAAMkN,kBAA+BtN,IAAI,EAAE;AAE3C,UAAMM,WAAWhB,SAAS,MAAM3B,MAAM2C,QAAQ;AAE9C,UAAMiN,oBAAkCvN,IAAI,KAAK;AAEjDK,UACEf,SAAS,MAAM,CAACK,MAAMtC,UAAU,GAAGsC,MAAMW,QAAQ,CAAC,CAAC,GACnD,CAAC,CAACe,OAAOf,SAAQ,MAAM;AACrB,UAAIA,aAAY,CAACsD,MAAMkI,QAAQzK,KAAK,GAAG;AACrChE,mBAAWgE,QAAQ;MACrB;AAAA,IACF,GACA;AAAA,MAAEZ,WAAW;AAAA,IAAK,CACpB;AAEA,UAAM4K,eAAgBU,SAAgB;AACpC,UAAI,CAACpM,MAAMW,QAAQ,GAAG;AACpBjD,mBAAWgE,QAAQ;AACnB;AAAA,MACF;AAEA,YAAM1E,SAAQgD,MAAMtC,UAAU,EAAE2O,QAAQD,GAAG;AAE3C,UAAIpP,WAAU,IAAI;AAChB;AAAA,MACF;AAECU,iBAAWgE,MAAmB4K,OAAOtP,QAAO,CAAC;AAAA;AAGhD,UAAMuP,wBAAyBH,SAAgB;AAC7CwB,wBAAkBlM,QAAQ;AAC1BiM,sBAAgBjM,QAAQ0K;AAAAA;AAO1B,UAAMK,oBAAqBL,SAAgB;AACzC,YAAMxD,SAAS5I,MAAMtC,UAAU;AAE/B,UAAIuG,MAAMkI,QAAQvD,MAAM,GAAG;AACzBA,eAAO8D,KAAKN,GAAG;AAAA,MACjB;AAAA;AAGF,WAAO,MAAM;AACX,YAAMO,YAAY3M,MAAMW,QAAQ;AAEhC,UAAIgL;AAEJ,UAAI,CAACgB,WAAW;AACdhB,kBAAOpN,YAAAwO,kBAAA;AAAA,UAAA,UAEKR;AAAAA,UAAqB,YACnBb;AAAAA,UAAY,cACV1L,MAAMtC,UAAU;AAAA,UAAC,uBACPgE,WAAWhE,WAAWgE,QAAQA;AAAAA,UAAM,iBAC3C1D,MAAM2L;AAAAA,UAAa,SAC3B3L,MAAMkN;AAAAA,UAAK,UACVlN,MAAMmN;AAAAA,UAAM,QACdnN,MAAMM;AAAAA,QAEf,GAAA,IAAA;AAAA,MACH,OAAO;AACL,YAAIsO,SAAyB;AAE7B,YAAI3I,MAAMkI,QAAQnM,MAAMtC,UAAU,CAAC,GAAG;AACpCkP,mBAAU5M,MAAMtC,UAAU,EAAeuE,IAAKmK,SAAG7N,YAAAwO,kBAAA;AAAA,YAAA,UAErCR;AAAAA,YAAqB,YACnBb;AAAAA,YAAY,cACVU;AAAAA,YAAG,iBACApO,MAAM2L;AAAAA,YAAa,SAC3B3L,MAAMkN;AAAAA,YAAK,UACVlN,MAAMmN;AAAAA,YAAM,QACdnN,MAAMM;AAAAA,UAAI,GAAA,IAAA,CAEnB;AAAA,QACH;AAEAqN,kBAAOpN,YAAAqN,iBAEFgB,QAAMrO,YAAAwO,kBAAA;AAAA,UAAA,uBAEgBN;AAAAA,UAAiB,iBACvBzO,MAAM2L;AAAAA,UAAa,SAC3B3L,MAAMkN;AAAAA,UAAK,UACVlN,MAAMmN;AAAAA,UAAM,QACdnN,MAAMM;AAAAA,WAGjB,IAAA,CAAA,CAAA;AAAA,MACH;AAEA,YAAMuP,cAAc7N,MAAM4N,iBAAiB,IAACrP,YAAA,OAAA;AAAA,QAAA,SAAA;AAAA,SAAAA,CAAAA,YAAAC,WAAA;AAAA,QAAA,SAAA;AAAA,QAAA,QAAA;AAAA,QAAA,WAEkCqK,MAAM+E,kBAAkBlM,QAAQ;AAAA,MAAK,GAAA,IAAA,GAAAnD,YAAA,OAAA;AAAA,QAAA,SAAA;AAAA,MAAA,GAAA,IAAA,GAAAA,YAAA,SAAA;AAAA,QAAA,SAAA;AAAA,QAAA,OAE7DoP,gBAAgBjM;AAAAA,QAAK,YAAA;AAAA,MAAA,GAAA,IAAA,CAAA,CAAA,IAEvE;AAEJ,aAAAnD,YAAA,OAAA;AAAA,QAAA,SAAA;AAAA,QAAA,SACsC;AAAA,UAAE2M,OAAOyB,YAAY,KAAK3O,MAAMkN;AAAAA,QAAM;AAAA,SACvES,CAAAA,SACAkC,WAAW,CAAA;AAAA;EAIpB;AACF,CAAC;ACtRY,MAAA,gBAAgB,YAAY,WAAW;ACHpD,OAAO,+BAA6B,g7iCAA+6iC,SAAS,GAAE;AAAC,MAAIxR,MAAGA,KAAE,SAAS,qBAAqB,QAAQ,GAAGA,GAAE,SAAO,CAAC,GAAE,IAAEA,GAAE,aAAa,gBAAgB,GAAEA,KAAEA,GAAE,aAAa,wBAAwB;AAAE,MAAG,CAACA,IAAE;AAAC,QAAI,GAAE,GAAE,GAAE,GAAE,GAAE,IAAE,SAASA,IAAEC,IAAE;AAAC,MAAAA,GAAE,WAAW,aAAaD,IAAEC,EAAC;AAAA,IAAC;AAAE,QAAG,KAAG,CAAC,EAAE,8BAA6B;AAAC,QAAE,+BAA6B;AAAG,UAAG;AAAC,iBAAS,MAAM,kIAAkI;AAAA,MAAC,SAAOD,IAAE;AAAC,mBAAS,QAAQ,IAAIA,EAAC;AAAA,MAAC;AAAA,IAAC;AAAC,QAAE,WAAU;AAAC,UAAIA,IAAEC,KAAE,SAAS,cAAc,KAAK;AAAE,MAAAA,GAAE,YAAU,EAAE,+BAA8BA,KAAEA,GAAE,qBAAqB,KAAK,EAAE,CAAC,OAAKA,GAAE,aAAa,eAAc,MAAM,GAAEA,GAAE,MAAM,WAAS,YAAWA,GAAE,MAAM,QAAM,GAAEA,GAAE,MAAM,SAAO,GAAEA,GAAE,MAAM,WAAS,UAASA,KAAEA,KAAGD,KAAE,SAAS,MAAM,aAAW,EAAEC,IAAED,GAAE,UAAU,IAAEA,GAAE,YAAYC,EAAC;AAAA,IAAE,GAAE,SAAS,mBAAiB,CAAC,CAAC,YAAW,UAAS,aAAa,EAAE,QAAQ,SAAS,UAAU,IAAE,WAAW,GAAE,CAAC,KAAG,IAAE,WAAU;AAAC,eAAS,oBAAoB,oBAAmB,GAAE,KAAE,GAAE,EAAG;AAAA,IAAA,GAAE,SAAS,iBAAiB,oBAAmB,GAAE,KAAE,KAAG,SAAS,gBAAc,IAAE,GAAE,IAAE,EAAE,UAAS,IAAE,OAAG,KAAI,EAAE,qBAAmB,WAAU;AAAC,oBAAY,EAAE,eAAa,EAAE,qBAAmB,MAAK;IAAI;AAAA,EAAE;AAAC,WAAS,IAAG;AAAC,UAAI,IAAE,MAAG,EAAG;AAAA,EAAC;AAAC,WAAS,IAAG;AAAC,QAAG;AAAC,QAAE,gBAAgB,SAAS,MAAM;AAAA,IAAC,SAAOD,IAAE;AAAC,aAAO,KAAK,WAAW,GAAE,EAAE;AAAA,IAAC;AAAC;EAAG;AAAC,EAAE,MAAM;ACMhulC,SAAA,UAAU,IAAmC,SAA4B;AACvF,cAAY,CAAC,iBAAiB;AAC5B,UAAM,aAAa;AAEN,iBAAA,MAAM,0CAAc;AAAA,EAAA,GAChC;AAAA,IACD,OAAO;AAAA,IACP,GAAG;AAAA,EAAA,CACJ;AACH;AAMO,SAAS,WAAW,IAAmC;AAExD,MAAA;AAEJ,YAAU,MAAM;AACd,iBAAa,GAAG;AAAA,EAAA,CACjB;AAED,cAAY,MAAM;AACH;AAAA,EAAA,CACd;AACH;ACRgB,SAAA,kBACd,QACA,eACA,WAA0B,OAAO,OAAO,CAAA,CAAE,GAC1C;AACM,QAAA;AAAA,IACJ,SAAS,WAAS,MAAM;AAAA;AAAA,IACxB,sBAAsB,CAAC,gBAAgB;AAAA,IAAC;AAAA,EACtC,IAAA;AAEJ,aAAW,MAAM;AAEf,QAAI,CAAC,OAAO,SAAS,CAAC,YAAY,CAAC,GAAG;AAC9B,YAAA,IAAI,MAAM,0DAA0D;AAAA,IAC5E;AAEA,QAAI,OAAO,OAAO,eAAe,EAAE,KAAK,gBAAgB;AACxD,QAAI,yBAAyB;AAEtB,WAAA;AAAA,MACL,OAAO,4BAA4B,CAAC,gBAAwB;AACnD,eAAA;AAAA,MAAA,CACR;AAAA,MACD,OAAO,uBAAuB,CAAC,EAAE,kBAAkB;AAC3C,cAAA,cAAc,OAAO;AACrB,cAAA,iBAAiB,YAAY,OAAO;AAC1C,YAAI,eAAe,CAAC;AAClB;AAEI,cAAA,aAAa,OAAO,IAAI;AAC9B,cAAM,2BACF,aAAa,iBACX,2BAA2B,QAC5B,yBAAyB;AAC9B,cAAM,OAAO,gBAAgB;AAC7B,4BAAoB,IAAI;AACpB,YAAA,2BAA2B,QAAQ,0BAA0B;AAC/D,gBAAM,SAAS,WAAW,MAAM,eAAe,MAAM;AAC9C,iBAAA;AAAA,YACL,MAAM;AACJ,mCAAqB,MAAM;AAAA,YAC7B;AAAA,YACA;AAAA,cACE,KAAK;AAAA,YACP;AAAA,UAAA;AAAA,QAEJ;AACyB,iCAAA;AAAA,MAAA,CAC1B;AAAA,IAAA;AAAA,EACH,CACD;AACH;AAEA,SAAS,WAAY,MAAc,eAAuB,QAA2C;AAEnG,QAAM,YAAa,KAAa;AAEhC,MAAI,cAAc;AAClB,MAAI,SAAS;AAET,MAAA,OAAO,cAAc,YAAY;AAC7B,UAAA,YAAY,IAAI;AAChB,UAAA,YAAY,UAAU,QAAQ,IAAI;AAExC,eAAW,EAAE,SAAS,SAAS,KAAK,WAAW;AACvC,YAAA,aAAa,SAAS,OAAO,QAAQ;AAE3C,UAAI,aAAa;AACf;AAEO,eAAA;AACT,qBAAe,SAAS;AAAA,IAC1B;AAAA,EAAA,OAEG;AACG,UAAA,aAAa,MAAM,KAAK,IAAI;AAClC,UAAM,mBAAmB,WAAW;AAEpC,aAAS,IAAI,GAAG,IAAI,kBAAkB,KAAK;AACnC,YAAA,YAAY,WAAW,CAAC;AACxB,YAAA,aAAa,SAAS,OAAO,SAAS;AAE5C,UAAI,aAAa;AACf;AAEO,eAAA;AACT,qBAAe,UAAU;AAAA,IAC3B;AAAA,EACF;AAEO,SAAA;AACT;AAEA,SAAS,qBAAqB,QAAsB;AAClD,QAAM,WAAW;AACjB,QAAM,iBAAiB,SAAS;AAChC,MAAI,oBAAoB;AAExB,WAAS,IAAI,GAAG,IAAI,gBAAgB,KAAK,GAAG;AAC1C,UAAM,EAAE,KAAA,IAAS,SAAS,CAAC;AAEvB,QAAA,gBAAgB,IAAI,GAAG;AACzB,YAAM,iBAAiB;AACjB,YAAA,aAAa,oBAAoB,KAAK,mBAAmB;AAE/D,UAAI,cAAc,QAAQ;AAClB,cAAA,SAAS,KAAK;AACd,cAAA,kBAAkB,KAAK;AACvB,cAAA,cAAc,KAAK;AACzB,oBAAY,IAAI;AAChB,cAAM,YAAY;AAGlB,YACE,kBAAkB,SAAS,MACvB,CAAC,UAAU,OAAO,QAAQ,EAAE,WAAW,KACxC,CAAC,UAAU,MAAM,QAAQ,EAAE,WAC9B,IAAA;AACA,cAAI,YAAY,eAAe;AAC7B,4BAAgB,OAAO;AAAA,mBAChB,YAAY,WAAW;AAC9B,wBAAY,OAAO;AAAA,mBACZ,WAAW;AAClB,mBAAO,OAAO;AAAA,QAClB;AAAA,MAAA,WAEO,iBAAiB,QAAQ;AAC1B,cAAA,aAAa,KAAK;AACxB,cAAM,mBACF,eAAe,OAAO,WAAW,mBAAuB,IAAA;AAC5D,cAAM,+BAA+B,iBAAiB;AAGtD,cAAM,8BACF,YAAY,UAAU,KAAK,WAAW,aAAa;AACvD,cAAM,iCACF,gCAAgC;AAEpC,YAAI,+BAA+B;AACjC,sBAAY,IAAI;AAAA,MACpB;AAAA,IAAA,WAEO,YAAY,IAAI,GAAG;AAC1B,YAAM,4BAA4B;AAClC,2BAAqB,KAAK;AAE1B,UAAI,oBAAoB,UAAU,CAAC,gBAAgB,KAAK,UAAA,CAAW,GAAG;AACpE,cAAM,oBAAoB;AACtB,YAAA;AAIJ,YACE,4BAA4B,UACzB,YAAY,IAAI,KAChB,KAAK,gBACR;AACA,gBAAM,CAAG,EAAA,cAAc,IAAI,KAAK;AAAA,YAC9B,SAAS;AAAA,UAAA;AAEX,yBAAe,UAAU,cAAc;AAAA,QAAA,OAEpC;AACH,yBAAe,UAAU,IAAI;AAAA,QAC/B;AAEA,YAAI,sBAAsB;AACxB,wBAAc,iBAAiB;AAEjC,sBAAc,YAAY;AAAA,MAC5B;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,UAAU,MAAiC;AAClD,QAAM,eAAe;AACrB,OAAK,aAAa,YAAY;AAC9B,eAAa,OAAO,IAAI;AACjB,SAAA;AACT;AAEA,SAAS,YAAY,MAAwC;AACrD,QAAA,WAAW,KAAK;AACtB,QAAM,iBAAiB,SAAS;AAEvB,WAAA,IAAI,GAAG,IAAI,gBAAgB;AAC7B,SAAA,aAAa,SAAS,CAAC,CAAC;AAE/B,OAAK,OAAO;AACZ,SAAO,iBAAiB,IAAI,SAAS,iBAAiB,CAAC,IAAI;AAC7D;AAEO,SAAS,cAAc,cAAkC;AACxD,QAAA,eAAe,aAAa;AAE9B,MAAA,CAAC,gBAAgB,YAAY;AAC/B;AAEI,QAAA,aAAa,aAAa;AAC1B,QAAA,uBAAuB,aAAa;AAC1C,QAAM,6BAA6B,qBAAqB;AAExD,MAAI,eAAe,MAAM;AACV,iBAAA,OAAO,GAAG,oBAAoB;AAAA,EAAA,OAExC;AACM,aAAA,IAAI,GAAG,IAAI,4BAA4B;AACnC,iBAAA,aAAa,qBAAqB,CAAC,CAAC;AAAA,EACnD;AAEA,QAAM,YAAY;AAEd,MAAA,kBAAkB,SAAS,GAAG;AAChC,UAAM,SAAS,UAAU;AACnB,UAAA,aAAa,OAAO;AAC1B,UAAM,QAAQ,UAAU;AAClB,UAAA,YAAY,OAAO;AAErB,QAAA,WAAW,GAAG,YAAY,GAAG;AAC/B,aAAO,IAAI,aAAa,OAAU,GAAA,OAAO,QAAQ,SAAS;AAAA,IAEnD,WAAA,WAAW,GAAG,YAAY,GAAG;AAC7B,aAAA;AAAA,QACL,aAAa,OAAO;AAAA,QACpB,6BAA6B,OAAO;AAAA,QACpC;AAAA,MAAA;AAAA,IAEJ;AAEI,QAAA,UAAU,GAAG,YAAY,GAAG;AAC9B,YAAM,IAAI,aAAa,OAAU,GAAA,MAAM,QAAQ,SAAS;AAAA,IAEjD,WAAA,UAAU,GAAG,YAAY,GAAG;AAC7B,YAAA;AAAA,QACJ,aAAa,OAAO;AAAA,QACpB,6BAA6B,MAAM;AAAA,QACnC;AAAA,MAAA;AAAA,IAEJ;AAAA,EACF;AAEA,eAAa,OAAO;AACtB;AC3QA,IAAI,0CAA0C;AAC9C,IAAI;AAEY,SAAA,iCAAiC,UAAsB,YAAwB;AAC7F,MAAI,8CAA8C,GAAG;AAC1C;AACsC,mDAAA;AAAA,EACjD;AAEA,SAAO,MAAM;AACP,QAAA,EAAE,4CAA4C,GAAG;AACJ;AACA,qDAAA;AAAA,IACjD;AAAA,EAAA;AAEJ;ACXO,SAAS,sBACd,QACA;AACM,QAAA,iBAAiB,IAA2D,CAAA,CAAE;AAEpF,aAAW,MAAM;AAET,UAAA,iDAAiC;AAEvC,eAAW,CAAC,OAAO,KAAK,OAAO,WAAW;AACb,iCAAA;AAAA,QACzB,OAAO;AAAA,UACL;AAAA,UACA,CAAC,YAAY;AACX,2BAAe,QAAQ;AAAA,cACrB,GAAG,eAAe;AAAA,cAClB;AAAA,gBACE;AAAA,gBACA,MAAM,QAAQ,OAAO,QAAQ,OAAO;AAAA,cACtC;AAAA,YAAA;AAGE,gBAAA,eAAe,MAAM,SAAS;AAChC,6BAAe,MAAM;AAEhB,mBAAA;AAAA,UACT;AAAA,UACA;AAAA,QACF;AAAA,MAAA;AAAA,IAEJ;AAEA,WAAO,MAAM;AACgB,iCAAA,QAAQ,CAAc,eAAA,WAAY,CAAA;AAAA,IAAA;AAAA,EAC/D,CACD;AAED,SAAO,SAAS,cAAc;AAChC;ACrCgB,SAAA,6BAA6B,QAAuB,MAAgB;AAClF,QAAMyR,WAAU;AAAA,IACd,OACG,eACA,EAAA,KAAK,6BAA6B,OAAO,YAAA,GAAe,IAAI,CAAC;AAAA,EAAA;AAGlE,aAAW,MAAM;AACf,WAAO,OAAO,uBAAuB,CAAC,EAAE,kBAAkB;AAClD,YAAA,cAAc,OAAO;AAC3B,MAAAA,SAAQ,QAAQ,YAAY;AAAA,QAC1B,6BAA6B,aAAa,IAAI;AAAA,MAAA;AAAA,IAChD,CACD;AAAA,EAAA,CACF;AAED,SAAO,SAASA,QAAO;AACzB;ACVO,MAAM,wBAAwB,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA+B/C,YAAY,SAAiB,WAAqB,OAAgB,KAAe;AAC/E,UAAM,GAAG;AA9BX;AACA;AA8BO,SAAA,YAAY,SACjB,KAAK,UAAU;AACf,SAAK,UAAU,SAAS;AAAA,EAC1B;AAAA,EA/BA,OAAO,UAAkB;AAAS,WAAA;AAAA,EAAgB;AAAA,EAElD,OAAO,MAAM,MAAwC;AAC5C,WAAA,IAAI,gBAAgB,KAAK,WAAW,KAAK,SAAS,KAAK,SAAS,KAAK,KAAK;AAAA,EACnF;AAAA,EAEA,OAAO,WAAW,gBAA4D;AAC5E,WAAO,IAAI,gBAAgB,eAAe,KAAK,eAAe,OAAO,eAAe,KAAK;AAAA,EAC3F;AAAA,EAEA,OAAO,YAAqC;AACnC,WAAA;AAAA,MACL,KAAK;AAAA,MACL,SAAS;AAAA,MACT,MAAM;AAAA,MACN,QAAQ;AAAA,IAAA;AAAA,EAEZ;AAAA;AAAA;AAAA;AAAA;AAAA,EAoBA,UAAS;AAAE,WAAO,KAAK;AAAA,EAAW;AAAA;AAAA;AAAA;AAAA;AAAA,EAMlC,UAAS;;AAAE,YAAO/Q,MAAA,KAAK,YAAL,gBAAAA,IAAc,MAAM,SAAS,KAAK;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA;AAAA,EAMxD,SAAS,SAAY;AACnB,UAAM,WAAW,OAAO,OAAO,yBAAyB,KAAK,OAAO,GAAE,OAAO;AAC7E,WAAO,KAAK,SAAS,sBAAsB,QAAQ,CAAC;AAAA,EACtD;AAAA;AAAA;AAAA;AAAA,EAKA,cAAa;AACJ,WAAA,yBAAyB,KAAK,OAAO;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,aAAwC;AAC/B,WAAA;AAAA,MACL,GAAG,MAAM,WAAW;AAAA,MACpB,MAAM,KAAK,QAAQ;AAAA,MACnB,KAAK,KAAK;AAAA,MACV,OAAO,KAAK;AAAA,MACZ,OAAO,KAAK;AAAA,MACZ,SAAS;AAAA,IAAA;AAAA,EAEb;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,UAAU,QAAuC;AAE/C,UAAM,UAAU,KAAK,UAAU,OAAO,OAAO;AAG7C,YAAQ,gBAAgB,UAAU;AAClC,YAAQ,gBAAgB,iBAAiB;AACzC,YAAQ,gBAAgB,wBAAwB;AAEhD,WAAO,EAAE,QAAQ;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,UAAU,QAAmC;AAE3C,UAAM,UAAU,SAAS,cAAc,KAAK,SAAS;AAErD,QAAI,KAAK,SAAS;AACR,cAAA,aAAa,SAAS,KAAK,OAAO;AAAA,IAC5C;AAEA,QAAI,KAAK,SAAS;AACR,cAAA,aAAa,SAAS,KAAK,OAAO;AAAA,IAC5C;AAEO,WAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,kBAAkB;AAEV,UAAA,WAAW,KAAK;AAGtB,QAAI,SAAS,WAAW,KAAK,YAAY,SAAS,CAAC,CAAC,KAAK,SAAS,CAAC,EAAE,eAAiB,EAAA,KAAA,MAAW,IAAI;AACnG,WAAK,OAAO;AACL,aAAA;AAAA,IACT;AACO,WAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,UAAU,UAAuB,KAAkB,QAA+B;AAChF,QAAI,aAAa,SAAQ,KAAK,WAAW,EAAE;AACvC,QAAA,aAAa,SAAQ,KAAK,OAAO;AAC9B,WAAA;AAAA,EACT;AAEF;AAOA,MAAM,wBAAwB,CAAC,YAA4D;AAClF,SAAA;AAAA,IACL,YAAY,MAAM;AACT,aAAA;AAAA,QACL,MAAM,IAAI,gBAAgB,QAAQ,SAAS,QAAQ,aAAa,OAAO,KAAK,IAAI,QAAQ,aAAa,OAAO,KAAK,EAAE;AAAA,MAAA;AAAA,IAEvH;AAAA,IACA,UAAU;AAAA,EAAA;AAEd;ACvJO,MAAM,iCAAkC,cAA+B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA8B5E,YAAY,SAAiB,WAAqB,OAAgB,KAAe;AAC/E,UAAM,GAAG;AA7BX;AACA;AACA;AA4BO,SAAA,YAAY,SACjB,KAAK,UAAU;AACf,SAAK,UAAU,SAAS;AAAA,EAC1B;AAAA,EA7BA,OAAO,UAAkB;AAAS,WAAA;AAAA,EAA0B;AAAA,EAE5D,OAAO,MAAM,MAA0D;AAC9D,WAAA,IAAI,yBAAyB,KAAK,WAAW,KAAK,SAAS,KAAK,SAAS,KAAK,KAAK;AAAA,EAC5F;AAAA,EAEA,OAAO,WAAW,gBAA8E;AAC9F,WAAO,IAAI,yBAAyB,eAAe,KAAK,eAAe,OAAO,eAAe,KAAK;AAAA,EACpG;AAAA,EAEA,OAAO,YAAqC;AACnC,WAAA;AAAA,MACL,KAAK;AAAA,MACL,SAAS;AAAA,IAAA;AAAA,EAEb;AAAA;AAAA;AAAA;AAAA;AAAA,EAoBA,UAAS;AAAE,WAAO,KAAK;EAAW;AAAA;AAAA;AAAA;AAAA;AAAA,EAMlC,UAAS;;AAAE,YAAOA,MAAA,KAAK,YAAL,gBAAAA,IAAc,MAAM,SAAS,KAAK;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA;AAAA,EAOxD,aAAiD;AACxC,WAAA;AAAA,MACL,MAAM,KAAK,QAAQ;AAAA,MACnB,KAAK,KAAK;AAAA,MACV,OAAO,KAAK;AAAA,MACZ,OAAO,KAAK;AAAA,MACZ,SAAS;AAAA,IAAA;AAAA,EAEb;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,UAAU,QAAuC;AAE/C,UAAM,UAAU,KAAK,UAAU,OAAO,OAAO;AAG7C,YAAQ,gBAAgB,UAAU;AAElC,WAAO,EAAE,QAAQ;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,UAAU,QAAmC;AAE3C,UAAM,UAAU,SAAS,cAAc,KAAK,SAAS;AAErD,QAAI,KAAK,SAAS;AACR,cAAA,aAAa,SAAS,KAAK,OAAO;AAAA,IAC5C;AAEA,QAAI,KAAK,SAAS;AACR,cAAA,aAAa,SAAS,KAAK,OAAO;AAAA,IAC5C;AAEQ,YAAA,aAAa,YAAW,KAAK,KAAK;AAGnC,WAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,SAAS,QAAuB,QAAwC;AAC/D,WAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,SAAS,OAAc;AACf,UAAA,OAAO,KAAK;AAClB,SAAK,UAAU,SAAS;AACjB,WAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,SAAS,SAAY;AACnB,UAAM,WAAW,OAAO,OAAO,yBAAyB,KAAK,OAAO,GAAE,OAAO;AAC7E,WAAO,KAAK,SAAS,sBAAsB,QAAQ,CAAC;AAAA,EACtD;AAAA;AAAA;AAAA;AAAA,EAKA,cAAa;AACJ,WAAA,yBAAyB,KAAK,OAAO;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,UAAU,UAAuB,KAAkB,QAA+B;AAChF,QAAI,aAAa,SAAQ,KAAK,WAAW,EAAE;AACvC,QAAA,aAAa,SAAQ,KAAK,OAAO;AAC9B,WAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,aAAa;AAAS,WAAA;AAAA,EAAM;AAAA;AAAA;AAAA;AAAA;AAAA,EAM5B,WAAW;AAAS,WAAA;AAAA,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAM3B,uBAAuB;AAAS,WAAA;AAAA,EAAM;AACxC;AAOO,SAAS,4BACd,MACkC;AAClC,SAAO,gBAAgB;AACzB;AAOA,MAAM,kCAAkC,CAAC,YAA4D;AAC5F,SAAA,QAAQ,UAAU,SAAS,OAAO,KAAK,QAAQ,UAAU,SAAS,mBAAmB,IAAK;AAAA,IAC/F,YAAY,MAAM;AACT,aAAA;AAAA,QACL,MAAM,IAAI,yBAAyB,QAAQ,SAAS,QAAQ,aAAa,OAAO,KAAK,IAAI,QAAQ,aAAa,OAAO,KAAK,EAAE;AAAA,MAAA;AAAA,IAEhI;AAAA,IACA,UAAU;AAAA,EACR,IAAA;AACN;ACjMa,MAAA,wBAAwD,cAAc,uBAAuB;AASnG,MAAM,eAAe;AAMrB,MAAM,4BAA6B,yBAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiCjE,YAAY,MAAYgR,OAAY,WAAqB,OAAgB,KAAe;AAChF,UAAA,OAAM,WAAU,OAAM,GAAG;AAhCjC;AACA;AAgCE,SAAK,eAAe;AACpB,SAAK,eAAeA;AAAA,EACtB;AAAA,EA/BA,OAAO,UAAkB;AAAS,WAAA;AAAA,EAAU;AAAA,EAE5C,OAAO,MAAM,MAAgD;AACpD,WAAA,IAAI,oBAAoB,KAAK,cAAa,KAAK,cAAa,KAAK,SAAQ,KAAK,SAAQ,KAAK,KAAK;AAAA,EACzG;AAAA,EAEA,OAAO,WAAW,gBAAoE;AAC7E,WAAA,IAAI,oBAAoB,eAAe,YAAW,eAAe,YAAW,eAAe,OAAO,eAAe,KAAK;AAAA,EAC/H;AAAA,EAEA,OAAO,YAAqC;AACnC,WAAA;AAAA,MACL,KAAK;AAAA,MACL,SAAS;AAAA,MACT,MAAO;AAAA,MACP,QAAS;AAAA,IAAA;AAAA,EAEb;AAAA;AAAA;AAAA;AAAA;AAAA,EAoBA,aAA4C;AACnC,WAAA;AAAA,MACL,GAAG,MAAM,WAAW;AAAA,MACpB,MAAM,KAAK,QAAQ;AAAA,MACnB,YAAW,KAAK;AAAA,MAChB,YAAW,KAAK;AAAA,MAChB,SAAS;AAAA,IAAA;AAAA,EAEb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,UAAU,QAAmC;AAErC,UAAA,SAAS,MAAM,UAAU,MAAM;AAErC,WAAO,YAAY,KAAK;AAErB,QAAA,OAAO,SAAS,SAAS,GAAE;AACtB,YAAA,IAAI,MAAM,sCAAsC;AAAA,IACxD;AAEM,UAAA,UAAU,OAAO,SAAS,CAAC;AAGzB,YAAA,aAAa,cAAa,KAAK,YAAY;AAC3C,YAAA,aAAa,YAAW,KAAK,KAAK;AAEnC,WAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,SAAS,QAAuB,QAAwC;AAC/D,WAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,UAAU,UAAuB,KAAkB,QAA+B;AAChF,QAAI,YAAY,KAAK;AACd,WAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,QAAQA,OAAa;AACb,UAAA,OAAO,KAAK;AAClB,SAAK,eAAeA,SAAQ;AACrB,WAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYF;AAOA,MAAM,6BAA6B,CAAC,YAA4D;AAE3F,MAAA;AAEK,UAAA,aAAa,QAAQ,aAAa,YAAY;AACpD,UAAM,aAAa,QAAQ;AAE3B,WAAO,aAAc;AAAA,MACnB,YAAY,MAAM;AACT,eAAA;AAAA,UACL,MAAM,IAAI,oBAAoB,YAAW,YAAW,QAAQ,aAAa,OAAO,KAAK,IAAI,QAAQ,aAAa,OAAO,KAAK,EAAE;AAAA,QAAA;AAAA,MAEhI;AAAA,MACA,UAAU;AAAA,IACR,IAAA;AAAA,WAEA,GAAE;AACN,YAAQ,IAAI,CAAC;AACN,WAAA;AAAA,EACT;AAEF;AAQO,SAAS,uBACd,MAC6B;AAC7B,SAAO,gBAAgB;AACzB;AAIA,MAAM,aAAa,CAAC,OAAM,OAAM,UAAS,QAAO,SAAS;AAO5C,MAAA,mBAAmB,CAAC,UAAgB,SAAW;AAEpD,QAAA,SAAS,IAAI;AACnB,QAAM,UAAU,OAAO,gBAAgB,UAAS,WAAW;AACrD,QAAA,OAAO,CAAC,QAAQ,IAAI;AAE1B,SAAO,KAAK,IAAI,EAAE,QAAQ,CAAK,QAAA;AAE7B,aAAQ,IAAE,GAAE,IAAE,KAAK,QAAO,KAAI;AAEtB,YAAA,KAAK,KAAK,CAAC;AACX,YAAA,MAAM,KAAK,GAAG;AAGjB,UAAA,GAAG,YAAY,GAAE;AAElB,YAAG,WAAW,OAAO,CAAA,SAAM,GAAG,aAAa,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC,EACjE,KAAK,CAAO,SAAA,GAAG,aAAa,MAAK,GAAG,CAAC,GAAE;AAAG;AAAA,QAAA,WAElC,GAAG,aAAa,QAAQ,GAAG,EAAE,GAAE;AACrC,aAAG,cAAc;AACjB;AAAA,QAAA,WAEM,GAAG,aAAa,QAAQ,GAAG,OAAO,GAAE;AAC1C,aAAG,YAAY;AACf;AAAA,QACF;AAAA,MACF;AAGG,UAAA,GAAG,WAAW,QAAO;AACtB,WAAG,WAAW,QAAQ,CAAC,QAAU,KAAK,KAAK,GAAG,CAAC;AAAA,MACjD;AAAA,IACF;AAAA,EAAA,CACD;AAED,SAAO,QAAQ,KAAK,UAAU,WAAW,kBAAiB,EAAE;AAC9D;AAOa,MAAA,gBAAgB,CAACA,OAAY,YAAqB;AAGvD,QAAA,SAAS,IAAI;AACnB,QAAM,UAAU,OAAO,gBAAgBA,OAAK,WAAW;AACjD,QAAA,OAAO,CAAC,QAAQ,IAAI;AAC1B,QAAM,OAAW,CAAA;AAEjB,UAAQ,QAAQ,CAAM,SAAA;AAEpB,aAAQ,IAAE,GAAE,IAAE,KAAK,QAAO,KAAI;AAEtB,YAAA,KAAK,KAAK,CAAC;AACjB,YAAM,MAAM;AAGT,UAAA,GAAG,YAAY,GAAE;AAEf,YAAA,WAAW,OAAO,CAAM,SAAA,GAAG,aAAa,QAAQ,KAAK,IAAI,IAAI,IAAI,EAAE,CAAC,EACvE,KAAK,CAAO,SAAA,KAAK,KAAK,IAAI,IAAI,GAAG,aAAa,IAAI,CAAC,GAAE;AAAG;AAAA,QAAA,WAEhD,GAAG,aAAa,QAAQ,KAAK,IAAI,EAAE,GAAE;AACtC,eAAA,KAAK,IAAI,IAAI,GAAG;AACrB;AAAA,QAAA,WAGM,GAAG,aAAa,QAAQ,KAAK,IAAI,OAAO,GAAE;AAC3C,eAAA,KAAK,IAAI,IAAI,GAAG;AACrB;AAAA,QACF;AAAA,MACF;AAGG,UAAA,GAAG,WAAW,QAAO;AACtB,WAAG,WAAW,QAAQ,CAAC,QAAU,KAAK,KAAK,GAAG,CAAC;AAAA,MACjD;AAEK,WAAA,KAAK,IAAI,IAAI;AAAA,IACpB;AAAA,EAAA,CACD;AAEM,SAAA;AACT;AC7RO,MAAM,gCAAgC,gBAAe;AAAA,EAE1D,OAAO,UAAkB;AAAS,WAAA;AAAA,EAAc;AAAA,EAEhD,OAAO,MAAM,MAAwD;AACnE,WAAO,IAAI,wBAAwB,KAAK,SAAQ,KAAK,SAAS,KAAK,KAAK;AAAA,EAC1E;AAAA,EAEA,OAAO,WAAW,gBAA4E;AAC5F,WAAO,IAAI,wBAAwB,eAAe,OAAM,eAAe,KAAK;AAAA,EAC9E;AAAA,EAEA,OAAO,YAAqC;AACnC,WAAA;AAAA,MACL,KAAM,CAAC,YAAyB;AAEvB,eAAA,QAAQ,SAAS,CAAC,KAAK,QAAQ,SAAS,CAAC,EAAE,aAAa,YAAY,IAAI;AAAA,UAE7E,YAAY,MAAI;AAEN,mBAAA;AAAA,cACN,MAAK,IAAI;AAAA,gBACP,QAAQ,UAAU,KAAK;AAAA,gBACvB,QAAQ,aAAa,OAAO,KAAK;AAAA,cACnC;AAAA,YAAA;AAAA,UAEJ;AAAA,UACA,UAAU;AAAA,QACR,IAAA;AAAA,MACN;AAAA,IAAA;AAAA,EAEJ;AAAA,EAEA,YAAY,WAAkB,OAAc,KAAe;AACnD,UAAA,OAAM,WAAU,OAAM,GAAG;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,UAAS;AAAE,WAAO,KAAK;EAAW;AAAA;AAAA;AAAA;AAAA;AAAA,EAMlC,UAAS;AAAS,WAAA;AAAA,EAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,EAM1B,aAAgD;AACvC,WAAA;AAAA,MACL,GAAG,MAAM,WAAW;AAAA,MACpB,MAAM,KAAK,QAAQ;AAAA,MACnB,SAAS;AAAA,IAAA;AAAA,EAEb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,UAAU,QAAmC;AAErC,UAAA,UAAU,MAAM,UAAU,MAAM;AAE9B,YAAA,aAAa,YAAW,KAAK,KAAK;AAEnC,WAAA;AAAA,EACT;AACF;AAQO,SAAS,2BACd,MACiC;AACjC,SAAO,gBAAgB;AACzB;AClFa,MAAA,uBAA+E,cAAc,sBAAsB;AAGhI,MAAM,kBAAkB;AAUjB,MAAM,kBAAkB,yBAAyB;AAAA,EAgCtD,YAAY,KAAY,KAAY,WAAkB,OAAe,KAAe;AAC5E,UAAA,OAAM,WAAU,OAAM,GAAG;AAhCjC;AACA;AAgCE,SAAK,QAAQ;AACb,SAAK,QAAQ;AAAA,EACf;AAAA,EAhCA,OAAO,UAAkB;AAAS,WAAA;AAAA,EAAQ;AAAA,EAG1C,OAAO,MAAM,MAA4B;AAChC,WAAA,IAAI,UAAU,KAAK,OAAQ,KAAK,OAAM,KAAK,SAAQ,KAAK,SAAQ,KAAK,KAAK;AAAA,EACnF;AAAA,EAEA,OAAO,WAAW,gBAAgD;AACzD,WAAA,iBAAiB,eAAe,KAAI,eAAe,KAAI,eAAe,OAAM,eAAe,KAAK;AAAA,EACzG;AAAA,EAEA,OAAO,YAAqC;AACnC,WAAA;AAAA,MACL,KAAK,CAAC,OAAoB;AAClB,cAAA,MAAM,GAAG,aAAa,KAAK;AAC3B,cAAA,MAAM,GAAG,aAAa,KAAK;AACjC,eAAO,GAAG,QAAQ,YAAY,KAAK,QAAU;AAAA,UAC3C,YAAY,CAAC,YAAyB;AAC7B,mBAAA;AAAA,cACL,MAAK,iBAAiB,OAAO,IAAG,OAAO,QAAU,QAAQ,WAAU,QAAQ,aAAa,OAAO,KAAK,EAAE;AAAA,YAAA;AAAA,UAE1G;AAAA,UACA,UAAU;AAAA,QACR,IAAA;AAAA,MACN;AAAA,IAAA;AAAA,EAEJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcA,SAAS,QAAuB,QAAwC;AAC/D,WAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,aAAkC;AACzB,WAAA;AAAA,MACL,GAAG,MAAM,WAAW;AAAA,MACpB,MAAM,KAAK,QAAQ;AAAA,MACnB,SAAS;AAAA,MACT,KAAK,KAAK;AAAA,MACV,KAAK,KAAK;AAAA,IAAA;AAAA,EAEd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,KAAY;AACX,UAAA,OAAO,KAAK;AAClB,SAAK,QAAQ,OAAO;AACb,WAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,KAAY;AACX,UAAA,OAAO,KAAK;AAClB,SAAK,QAAO,OAAO;AACZ,WAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,UAAU,QAAmC;AAErC,UAAA,UAAU,MAAM,UAAU,MAAM;AAEtC,QAAG,KAAK,OAAM;AACJ,cAAA,aAAa,OAAO,KAAK,KAAK;AAAA,IAAA,OAEpC;AACM,cAAA,aAAa,OAAO,eAAe;AAAA,IAC7C;AAEA,QAAG,KAAK,OAAM;AACJ,cAAA,aAAa,OAAO,KAAK,KAAK;AAAA,IACxC;AAEO,WAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,UAAU,UAAqB,KAAkB,QAA+B;AACxE,UAAA,UAAU,UAAS,KAAI,MAAM;AACnC,QAAG,KAAK,OAAM;AACR,UAAA,aAAa,OAAO,KAAK,KAAK;AAAA,IAAA,OAEhC;AACE,UAAA,aAAa,OAAO,eAAe;AAAA,IACzC;AAEA,QAAG,KAAK,OAAM;AACR,UAAA,aAAa,OAAO,KAAK,KAAK;AAAA,IACpC;AAEO,WAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,WAAW;AAAS,WAAA;AAAA,EAAM;AAC5B;AAQO,SAAS,iBAAiB,KAAY,KAAY,WAAkB,OAA0B;AACnG,SAAO,IAAI,UAAU,KAAI,KAAI,WAAU,KAAK;AAC9C;AAOO,SAAS,aACd,MACmB;AACnB,SAAO,gBAAgB;AACzB;ACjLa,MAAA,+BAAsE,cAAc,8BAA8B;AAU/H,MAAM,gBAAgB;AAKf,MAAM,0BAA0B,gBAAe;AAAA,EAGpD,OAAO,UAAkB;AAAS,WAAA;AAAA,EAAiB;AAAA,EAEnD,OAAO,MAAM,MAA4C;AACvD,WAAO,IAAI,kBAAkB,KAAK,SAAQ,KAAK,SAAS,KAAK,KAAK;AAAA,EACpE;AAAA,EAEA,OAAO,WAAW,gBAAgE;AAChF,WAAO,IAAI,kBAAkB,eAAe,OAAM,eAAe,KAAK;AAAA,EACxE;AAAA,EAEA,OAAO,YAAqC;AACnC,WAAA;AAAA,MACL,KAAM,CAAC,YAAyB;AAI9B,YAAI,kBAAiB,QAAQ,UAAU,SAAS,aAAa;AACvD,cAAA,UAAU,QAAQ,SAAS,CAAC;AAGlC,YAAG,WAAW,QAAQ,QAAQ,YAAiB,KAAA,UAAU,QAAQ,MAAM,SAAS,UAAU,QAAQ,MAAM,SAAS,UAAS;AACtG,4BAAA;AAAA,QACpB;AAEA,eAAO,kBAAkB;AAAA,UAEvB,YAAY,MAAI;AACN,mBAAA;AAAA,cACN,MAAK,IAAI;AAAA,gBACP,QAAQ,UAAU,QAAQ,eAAc,EAAE,EAAE,KAAK;AAAA,gBACjD,QAAQ,aAAa,OAAO,KAAK;AAAA,cACnC;AAAA,YAAA;AAAA,UAEJ;AAAA,UACA,UAAU;AAAA,QACR,IAAA;AAAA,MACN;AAAA,IAAA;AAAA,EAEJ;AAAA,EAEA,YAAY,WAAkB,OAAc,KAAe;AACnD,UAAA,OAAM,WAAU,OAAM,GAAG;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,UAAS;AAAS,WAAA;AAAA,EAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,EAM1B,aAA0C;AACjC,WAAA;AAAA,MACL,GAAG,MAAM,WAAW;AAAA,MACpB,MAAM,KAAK,QAAQ;AAAA,MACnB,SAAS;AAAA,IAAA;AAAA,EAEb;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,UAAU,QAAuC;AAE/C,UAAM,UAAU,KAAK,UAAU,OAAO,OAAO;AAE7C,WAAO,EAAE,QAAQ;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,UAAU,QAAmC;AACrC,UAAA,UAAU,MAAM,UAAU,MAAM;AAEtC,QAAG,CAAC,QAAQ,UAAU,SAAS,aAAa,GAAE;AACpC,cAAA,UAAU,IAAI,aAAa;AAAA,IACrC;AACO,WAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,UAAU,UAAuB,KAAkB,QAA+B;AAC1E,UAAA,UAAU,UAAS,KAAI,MAAM;AAEnC,QAAG,CAAC,IAAI,UAAU,SAAS,aAAa,GAAE;AACpC,UAAA,UAAU,IAAI,aAAa;AAAA,IACjC;AACO,WAAA;AAAA,EACT;AACF;AAOO,SAAS,qBACd,MAC2B;AAC3B,SAAO,gBAAgB;AACzB;AAQO,SAAS,2BAA0B;AAElC,QAAA,gBAAgB,IAAI;AACpB,QAAA,WAAW,IAAI,gBAAgB,KAAK;AAEjC,WAAA,OAAO,sBAAsB;AAC7B,WAAA,OAAO,sBAAsB;AAC7B,WAAA,OAAO,sBAAsB;AAC7B,WAAA,OAAO,sBAAsB;AAC7B,WAAA,OAAO,sBAAsB;AAC7B,WAAA,OAAO,sBAAsB;AAEtC,gBAAc,OAAO,IAAI,UAAU,IAAG,IAAG,IAAG,6CAA6C,CAAC;AAC1F,gBAAc,OAAO,QAAQ;AAC7B,gBAAc,OAAO,QAAQ;AAC7B,QAAM,YAAY,IAAI,yBAAyB,OAAM,qBAAoB,YAAY;AACrF,gBAAc,OAAO,SAAS;AACvB,SAAA;AACT;AC/Ja,MAAA,0BAAkD,cAAc,yBAAyB;AAKzF,MAAA,8BAAsD,cAAc,6BAA6B;ACCjG,MAAA,gBAAgB,SAAS,MAAiB;AAE/C,QAAA,WAAe,UAAU,IAAI;AAEhC,MAAA,eAAe,IAAI,GAAE;AACjB,SAAA,YAAA,EAAc,QAAQ,CAAA,UAAO,SAAS,OAAO,cAAc,KAAK,CAAC,CAAC;AAAA,EACzE;AAEO,SAAA;AACT;ACGA,MAAM,YAAY,IAAI;AAMtB,MAAM,uBAAuB,SAAS,sBAAsB,oBAAgD;AAE1G,aAAW,QAAQ,oBAAoB;AAEjC,QAAA,KAAK,eAAe,aAAa,4BAA4B;AAC1D,WAAA,YAAY,sBAAsB;AAAA,IACzC;AAAA,EACF;AAEA,aAAW,QAAQ,oBAAoB;AAGlC,QAAA,eAAe,IAAI,GAAE;AAEhB,YAAA,WAAW,KAAK;AAEtB,iBAAW,SAAS,UAAU;AAE5B,aAAK,aAAa,KAAK;AAAA,MAEzB;AAEA,WAAK,OAAO;AAAA,IACd;AAAA,EACF;AACF;AAGA,MAAM,wBAAwB,SAAS,SAAqB,QAAsB;AAE1E,QAAA,EAAG,SAAa,IAAA;AAEtB,QAAM,oBAAoB,OAAO,iBAAiB,IAAI,SAAS,aAAa;AAE5E,MAAI,oBAAoB;AAExB,MAAI,sBAAsB,QAAW;AAEnC,eAAW,oBAAoB,mBAAmB;AAE1C,YAAA,gBAAgB,iBAAiB,OAAO;AAG1C,UAAA,kBAAkB,SAAS,sBAAsB,SAAS,kBAAkB,YAAY,MAAM,cAAc,YAAY,KAAK;AAE3G,4BAAA;AAAA,MACtB;AAAA,IACF;AAAA,EAEF;AAEO,SAAA,sBAAsB,OAAO,kBAAkB,aAAa;AACrE;AASA,MAAM,wBAAwB,SAAU,SAAuB,OAAqB,iBAA0B;AAEtG,QAAA,YAAY,QAAQ,MAAM;AAChC,QAAM,MAAM,CAAA;AACZ,MAAI,oBAAoB,CAAA;AAExB,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAE/B,UAAA,OAAO,MAAM,CAAC;AAEhB,QAAA,oBAAoB,IAAI,GAAG;AAE7B,UAAI,aAAa,CAAC,KAAK,aAAa;AAClC,aAAK,UAAU,SAA8B;AAAA,MAC/C;AAEA,UAAI,KAAK,IAAI;AAAA,IAAA,OAEV;AAEH,wBAAkB,KAAK,IAAI;AAE3B,UAAI,MAAM,MAAM,SAAS,KAAK,IAAI,MAAM,SAAS,KAAK,oBAAoB,MAAM,IAAI,CAAC,CAAC,GAAG;AACvF,cAAM,UAAU;AAChB,gBAAQ,UAAU,SAAS;AACnB,gBAAA,OAAO,GAAG,iBAAiB;AACnC,YAAI,KAAK,OAAO;AAChB,4BAAoB,CAAA;AAAA,MACtB;AAAA,IACF;AAAA,EACF;AACO,SAAA;AACT;AAEA,MAAM,iCAAiC,SAAU,MAAkB;AAEjE,MAAI,KAAK,eAAe,QAAQ,KAAK,mBAAmB,MAAM;AACrD,WAAA;AAAA,EACT;AAEA,SAAO,gBAAgB,KAAK,WAAW,KAAK,gBAAgB,KAAK,eAAe;AAClF;AAaA,MAAM,yBAAyB,SAAU,MAAkB,QAAsB,oBAAkC,6BAAqC,cAAc,oBAAI,IAAI,GAAG,mBAAgC;AAG/M,MAAI,eAA6B,CAAA;AAEjC,MAAI,qBAAqB;AAMnB,QAAA,oBAAoB,sBAAsB,MAAM,MAAM;AAE5D,QAAM,kBAAkB,oBAAoB,kBAAkB,IAAI,IAAI;AAEtE,MAAI,gBAAgB;AAEpB,MAAI,oBAAoB,MAAM;AAE1B,oBAAgB,gBAAgB;AAEhC,UAAM,iBAAiB,gBAAgB;AAElB,yBAAA,MAAM,QAAQ,cAAc,IAAI,eAAe,eAAe,SAAS,CAAC,IAAI;AAEjG,QAAI,uBAAuB,MAAM;AAE7B,iBAAW,CAAA,EAAG,gBAAgB,KAAK,aAAa;AAEvB,6BAAA,iBAAiB,oBAAoB,iBAAiB;AAE3E,YAAI,CAAC,oBAAoB;AAAE;AAAA,QAAO;AAAA,MACtC;AAEA,UAAI,oBAAoB;AACP,qBAAA,KAAK,GAAI,MAAM,QAAQ,cAAc,IAAI,iBAAiB,CAAC,kBAAkB,CAAE;AAAA,MAChG;AAAA,IACJ;AAEI,QAAA,gBAAgB,YAAY,MAAM;AAClC,kBAAY,IAAI,KAAK,UAAU,gBAAgB,QAAQ;AAAA,IAC3D;AAAA,EACJ;AAKM,QAAA,WAAW,eAAe,IAAI,KAAK,KAAK,aAAa,YAAY,IAAI,CAAA,IAAK,KAAK;AAErF,MAAI,oBAAoB,CAAA;AAElB,QAAA,yCACF,sBAAsB,SAElB,oBAAoB,kBAAkB,IAAI,QACvC,sBAAsB,QAAQ,oBAAoB,kBAAkB,KAAK;AAGpF,WAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AACxC,sBAAkB,KAAK,GAAG,uBAAuB,SAAS,CAAC,GAAkB,QAAQ,oBAAoB,wCAAwC,IAAI,IAAI,WAAW,GAAG,kBAAkB,CAAC;AAAA,EAC5L;AAEA,MAAI,iBAAiB,MAAM;AACzB,wBAAoB,cAAc,iBAAiB;AAAA,EACrD;AAEI,MAAA,eAAe,IAAI,GAAG;AAExB,QAAI,CAAC,wCAAwC;AACvB,0BAAA,sBAAsB,MAAM,mBAAmB,oBAAoB;AAAA,IAAA,OAEpF;AAEiB,0BAAA,sBAAsB,MAAM,mBAAmB,MAAM;AAEjE,cAAA,iBAAiB,IAAI;AAE3B,2BAAmB,KAAK,cAAc;AAE/B,eAAA;AAAA,MAAA,CACR;AAAA,IACH;AAAA,EACF;AAEA,MAAI,sBAAsB,MAAM;AAE1B,QAAA,kBAAkB,SAAS,GAAG;AAGjB,qBAAA,aAAa,OAAO,iBAAiB;AAAA,IAAA,OAEjD;AACH,UAAI,eAAe,IAAI,KAAK,+BAA+B,IAAI,GAAG;AAEjD,uBAAA,aAAa,OAAO,qBAAsB,CAAA;AAAA,MAC3D;AAAA,IACF;AAAA,EAAA,WAEO,eAAe,kBAAkB,GAAG;AAG1B,uBAAA,OAAO,GAAG,iBAAiB;AAAA,EAC9C;AACO,SAAA;AACT;AAGO,MAAM,wBAAwB,SAAS,sBAAsB,QAAsBA,OAAa;AAEjG,MAAA;AACF,UAAM,MAAO,UAAU,gBAAgBA,OAAK,WAAW;AAEjD,UAAA,WAAW,IAAI,KAAK;AAE1B,QAAI,eAA6B,CAAA;AAEjC,UAAM,qBAAmC,CAAA;AAEzC,aAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AAElC,UAAA,UAAU,SAAS,CAAC;AAGrB,UAAA,CAAC,eAAe,OAAO,KAAK,QAAQ,aAAa,QAAQ,QAAQ,aAAa,QAAO;AAEhF,cAAA,IAAI,SAAS,cAAc,GAAG;AAEpC,YAAG,mBAAmB,MAAK;AAEzB,YAAE,cAAc,QAAQ;AAAA,QAAA,OAGtB;AACF,YAAE,YAAY,QAAQ;AAAA,QACxB;AAEU,kBAAA;AAAA,MAEZ;AAEA,YAAM,cAAc,uBAAuB,SAAS,QAAQ,oBAAmB,KAAK;AAEpF,UAAI,gBAAgB,MAAM;AACP,uBAAA,aAAa,OAAO,WAAW;AAAA,MAClD;AAAA,IACJ;AACA,yBAAqB,kBAAkB;AAChC,WAAA;AAAA,WACA,OAAO;AACR,UAAA;AAAA,EACR;AACF;AAUA,MAAM,oBAAoB,SAAU,QAAsB,aAAyB,eAA4C,YAA4D,MAAM;AAE/L,MAAI,gBAAgB,cAAc,OAAO,YAAY,WAAW,SAAS,IAAI;AAE7E,QAAM,gBAAgB,eAAe,WAAW,KAAK,YAAY,gBAAgB,MAAM;AAEvF,MAAI,SAAS;AAEb,MAAI,cAAc,MAAM;AAEhB,QAAA,QAAQ,qBAAqB,WAAW;AAEpC,YAAA,YAAY,KAAK,KAAK,cAAc,OAAO,8BAA8B,WAAW,KAAK,IAAI;AAE5F,aAAA;AAAA,EACb;AAEA,QAAM,WAAW,eAAe,MAAM,IAAI,OAAO,gBAAgB;AACjE,QAAM,iBAAiB,OAAO,OAAO,IAAI,OAAO,SAAS;AAErD,MAAA;AAGA,MAAA,kBAAkB,eAAe,cAAc,QAAW;AAC7C,mBAAA,eAAe,UAAU,QAAQ,MAAM;AAAA,EAAA,OAEnD;AACY,mBAAA,OAAO,UAAU,MAAM;AAAA,EACxC;AAEM,QAAA,EAAE,SAAU,MAAU,IAAA;AAE5B,MAAI,CAAC,SAAS;AACL,WAAA;AAAA,EACT;AAEM,QAAA,WAAW,SAAS;AAE1B,WAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AAElC,UAAA,YAAY,SAAS,CAAC;AAC5B,UAAM,qBAAqB,kBAAkB,QAAQ,WAAW,UAAU,SAAS;AAE/E,QAAA,CAAC,iBAAiB,eAAe,WAAW,KAAK,sBAAsB,YAAY,iBAAiB,WAAW,WAAW,MAAM,GAAG;AACrH,sBAAA;AAAA,IAClB;AAAA,EACF;AAEI,MAAA,iBAAiB,CAAC,eAAe;AAE/B,QAAA,cAAc,OAAO,GAAG;AAAE,cAAQ,OAAO,QAAQ;AAAA,IAAG;AAExD,kBAAc,OAAO,OAAO;AAE5B,QAAI,OAAO;AAET,YAAM,aAAa,MAAM,KAAK,QAAQ,OAAO;AAE7C,UAAI,YAAY;AAAE,gBAAQ,YAAY,UAAU;AAAA,MAAG;AAAA,IACrD;AAAA,EAAA,OAGG;AACH,kBAAc,OAAO,QAAQ;AAAA,EAC/B;AAEO,SAAA;AACT;AAQO,MAAM,wBAAwB,SAAS,uBAAuB,QAAsB,WAA0B;AAGnH,MAAI,OAAO,aAAa,eAAe,OAAO,WAAW,aAAa;AAC9D,UAAA,IAAI,MAAM,gJAAgJ;AAAA,EAClK;AAEM,QAAA,YAAY,SAAS,cAAc,KAAK;AAC9C,QAAM,OAAO;AACP,QAAA,mBAAmB,KAAK;AAE9B,WAAS,IAAI,GAAG,IAAI,iBAAiB,QAAQ,KAAK;AAE1C,UAAA,eAAe,iBAAiB,CAAC;AAErB,sBAAA,QAAQ,cAAc,WAAW,SAAS;AAAA,EAE9D;AAEO,SAAA,UAAU,UAAU;AAC7B;AC1YA,MAAM,8CAA8B,IAAI;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAEM,SAAS,YAAY,KAAqB;AAC3C,MAAA;AACI,UAAA,YAAY,IAAI,IAAI,GAAG;AAE7B,QAAI,CAAC,wBAAwB,IAAI,UAAU,QAAQ;AAC1C,aAAA;AAAA,EAAA,QAEL;AACG,WAAA;AAAA,EACT;AACO,SAAA;AACT;ACnBO,SAAS,yBAAyB,KAAY;AACjD,QAAM,cAAkB,CAAA;AAClB,QAAA,SAAS,IAAI,MAAM,GAAG;AAC5B,aAAW,SAAS,QAAQ;AAC1B,QAAI,UAAU,IAAI;AAChB,YAAM,CAAC,KAAK,KAAK,IAAI,MAAM,MAAM,SAAS;AAC1C,UAAI,OAAO,OAAO;AAChB,oBAAY,IAAI,KAAA,CAAM,IAAI,MAAM,KAAK;AAAA,MACvC;AAAA,IACF;AAAA,EACF;AACO,SAAA;AACT;AAyBO,SAAS,sBAAsB,QAAY;AAChD,MAAI,MAAM;AACV,aAAW,SAAS,QAAQ;AACtB,QAAA,SAAS,OAAO,KAAK,GAAG;AAC1B,aAAO,GAAG,KAAK,KAAK,OAAO,KAAK,CAAC;AAAA,IACnC;AAAA,EACF;AACO,SAAA;AACT;AC5CK,MAAMC,qBAAqB,OAAQC,SAAa;AACrD,SAAO,IAAIC,QAAQ,CAACC,SAAQC,WAAW;AAErC,UAAMC,YAAYhO,IAAI4N,IAAI;AAG1B,UAAMK,oBAAoBA,MAAM;AAC9BC,qBAAeC,QAAO;AAAA;AAIxB,UAAMC,qBAAqBA,MAAM;AAC/BF,qBAAeC,QAAO;AACtBL,cAAQE,UAAU3M,KAAK;AAAA;AAGzB,UAAM6M,iBAAiBlN,SAASqN,aAAa;AAAA,MAC3C3I,OAAO;AAAA,MACP4I,OAAO;AAAA,MACPzD,OAAO;AAAA,MACP0D,SAASA,MAAM;AACbL,uBAAeC,QAAO;AAAA,MACvB;AAAA,MACDK,MAAMA,MAAM;AACV,eAAAtQ,YAAAuK,SAAA;AAAA,UAAA,cAAyBuF,UAAU3M;AAAAA,UAAK,uBAAAoN,YAAfT,UAAU3M,QAAKoN;AAAAA,UAAA,aAAa;AAAA,UAAI,eAAA;AAAA,WACvD;AAAA,UACEC,SAAQA,MAAI;AACV,mBAAO;AAAA,UACT;AAAA,SACD;AAAA,MAEJ;AAAA,MACDC,QAAQA,MAAM;AACZ,eAAAzQ,YAAAqN,UAAArN,MAAAA,CAAAA,YAAAI,UAAA;AAAA,UAAA,WACqB2P;AAAAA,QAAiB,GAAA;AAAA,UAAAxP,SAAAA,MAAA,CAAAuF,gBAAA,IAAA,CAAA;AAAA,SAAA9F,GAAAA,YAAAI,UAAA;AAAA,UAAA,QAAA;AAAA,UAAA,WACF8P;AAAAA,QAAkB,GAAA;AAAA,UAAA3P,SAAAA,MAAA,CAAAuF,gBAAA,IAAA,CAAA;AAAA,QAAA,CAAA,CAAA,CAAA;AAAA,MAIxD;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AACH;ACnDO,MAAM4K,gBAAc;ACUpB,MAAM,uBAAN,MAAM,8BAA4BC,iBAC/B,sBAD+BA,IAA0B;AAAA,EAGjE,YAAY,UAA2B,IAAI;AACnC,UAAA;AAAA,MACJ,MAAM,qBAAoB,eAAe;AAAA,MACzC,YAAYD;AAAAA,MACZ,GAAG;AAAA,IAAA,CACJ;AAAA,EACH;AAAA,EAEA,MAAgB,aAAa;AAC3B,UAAM,MAAM;AAEZ,SAAK,WAAW;AAAA,MACd,IAAI,WAAW,EAAE,MAAM,QAAQ,OAAO,QAAQ,UAAU,MAAM;AAAA,MAC9D,IAAI,WAAW;AAAA,QACb,MAAM;AAAA,QACN,OAAO;AAAA,QACP,cAAc;AAAA,QACd,SAAS;AAAA,MAAA,CACV;AAAA,IAAA,CACF;AAAA,EACH;AAAA,EAEA,iBAAiB,MAAW;AAC1B,UAAM,EAAE,UAAU,GAAG,WAAA,IAAe;AAE7B,WAAA;AAAA,EACT;AACF;AA7BE,cADW,sBACH,IAA2B;AAD9B,IAAM,sBAAN;ACAA,MAAM,uBAAN,MAAM,8BAA4B,eAC/B,sBAD+B,IAA8B;AAAA,EAKrE,YAAY,UAA4B,IAAI;AACpC,UAAA;AAAA,MACJ,MAAM,qBAAoB,eAAe;AAAA,MACzC,YAAYA;AAAAA,MACZ,OAAO,EAAE,OAAO,QAAQ,QAAQ,gBAAgB;AAAA,MAChD,GAAG;AAAA,IAAA,CACJ;AARH;AAUE,SAAK,sBAAsB;AAAA,EAC7B;AAAA,EAEA,WAAW,MAAgD;AACpD,SAAA,WAAW,KAAK,YAAY,CAAA;AAE1B,WAAA;AAAA,EACT;AAAA,EAEA,KACE,QAGA;AACO,WAAA,KAAK,QAAQ,MAAM;AAAA,EAC5B;AAAA,EAEO,gBAAgB,MAAkD;AAChE,WAAA,KAAK,SAAS,SAAS;AAAA,EAChC;AAAA,EAEA,iBAAiB;AACf,QAAI,KAAK,qBAAqB;AAC5B,aAAO,KAAK;AAAA,IACd;AAEM,UAAA,eAAe,CACnB,UAC6C;AACvC,YAAA,OAAO,MAAM,CAAC;AAEhB,UAAA,KAAK,SAAS,QAAQ;AACjB,eAAA,aAAa,KAAK,QAAQ;AAAA,MACnC;AAEO,aAAA;AAAA,IAAA;AAGL,QAAA,KAAK,UAAU,WAAW,GAAG;AACxB,aAAA;AAAA,IACT;AAEA,WAAQ,KAAK,sBAAsB,aAAa,KAAK,SAAS;AAAA,EAChE;AAAA,EAEA,eAAe,MAAgD;AAC7D,SAAK,sBAAsB;AAAA,EAC7B;AACF;AA5DE,cADW,sBACH,IAA2B;AAD9B,IAAM,sBAAN;ACEA,MAAM,kBAAN,MAAM,yBAAuBC,iBAC1B,sBAD0BA,IAAqB;AAAA,EAGvD,YAAY,UAA2B,IAAI;AACnC,UAAA;AAAA,MACJ,MAAM,gBAAe,eAAe;AAAA,MACpC,YAAYD;AAAAA,MACZ,GAAG;AAAA,IAAA,CACJ;AAAA,EACH;AAAA,EAEA,MAAgB,aAAa;AAC3B,UAAM,MAAM;AAEZ,SAAK,WAAW;AAAA,MACd,IAAI,WAAW,EAAE,MAAM,MAAM,OAAO,MAAM;AAAA,MAC1C,IAAI,WAAW,EAAE,MAAM,QAAQ,OAAO,MAAM;AAAA,MAC5C,IAAI,WAAW,EAAE,MAAM,QAAQ,OAAO,MAAM;AAAA,MAC5C,IAAI,WAAW,EAAE,MAAM,QAAQ,OAAO,MAAM;AAAA,IAAA,CAC7C;AAAA,EACH;AAAA,EAEA,WAAW,MAA8B;AAChC,WAAA;AAAA,MACL,IAAI,KAAK;AAAA,MACT,iBAAiB,KAAK,mBAAmB;AAAA,MACzC,MAAM,KAAK;AAAA,MACX,MAAM,KAAK;AAAA,MACX,MAAM,KAAK;AAAA,IAAA;AAAA,EAEf;AAAA,EAEA,iBAAiB,MAAW;AACnB,WAAA;AAAA,MACL,IAAI,KAAK;AAAA,MACT,iBAAiB,KAAK;AAAA,MACtB,MAAM,KAAK;AAAA,MACX,MAAM,KAAK;AAAA,MACX,MAAM,KAAK;AAAA,IAAA;AAAA,EAEf;AACF;AAxCE,cADW,iBACH,IAA2B;AAD9B,IAAM,iBAAN;ACUA,MAAM,gBAAN,MAAM,uBACHC,iBAGA,sBAHAA,IAEV;AAAA,EAKE,YAAY,UAA+B,IAAI;AACvC,UAAA;AAAA,MACJ,MAAM,cAAa,eAAe;AAAA,MAClC,YAAYD;AAAAA,MACZ,GAAG;AAAA,IAAA,CACJ;AAPH;AASE,SAAK,kBAAkB,QAAQ,mBAAmB,IAAI,iBAAiB;AAAA,EACzE;AAAA,EAEA,MAAgB,aAAa;AAC3B,UAAM,MAAM;AAEX,WAAe,aAAa;AAE7B,UAAM,cAAc;AACpB,SAAK,WAAW;AAAA,MACd,IAAI,WAAW,EAAE,MAAM,MAAM,OAAO,MAAM;AAAA,MAC1C,IAAI,WAAW,EAAE,MAAM,OAAO,OAAO,OAAO,UAAU,MAAM;AAAA,MAC5D,IAAI,WAAW;AAAA,QACb,MAAM;AAAA,QACN,OAAO;AAAA,QACP,eAAe;AAAA,QACf,cAAc;AAAA,QACd,UAAU;AAAA,QACV,gBAAgB;AAAA,UACd,SAAS;AAAA,YACP,EAAE,OAAO,UAAU,OAAO,MAAM;AAAA,YAChC,EAAE,OAAO,OAAO,OAAO,KAAK;AAAA,YAC5B,EAAE,OAAO,QAAQ,OAAO,OAAO;AAAA,UACjC;AAAA,QACF;AAAA,MAAA,CACD;AAAA,MACD,IAAI,WAAW;AAAA,QACb,MAAM;AAAA,QACN,OAAO;AAAA,QACP,UAAU;AAAA,QACV,cAAc;AAAA,QACd,OAAO;AAAA,UACL;AAAA,YACE,WAAW,CAAC,MAAM,OAAO,aAAa;;AAChC,oBAAAlS,MAAA,KAAK,SAAL,gBAAAA,IAAW,UAAS,QAAQ;AAC1B,oBAAA;AACF,uBAAK,MAAM,KAAK;AAAA,yBACT,GAAG;AACD,2BAAA,IAAI,MAAM,UAAU,CAAC;AAAA,gBAChC;AAAA,cACF;AAES;YACX;AAAA,UACF;AAAA,QACF;AAAA,QACA,eAAe,KAAK,YAAY,WAAW;AAAA,MAAA,CAC5C;AAAA,MACD,IAAI,WAAW;AAAA,QACb,MAAM;AAAA,QACN,OAAO;AAAA,QACP,cAAc;AAAA,QACd,eAAe;AAAA,QACf,gBAAgB,EAAE,MAAM,YAAY,MAAM,EAAE;AAAA,MAAA,CAC7C;AAAA,IAAA,CACF;AAED,QAAI,aAAgC;AAEpC,SAAK,gBAAgB,GAAG,CAAC,EAAE,WAAW;AACpC,+CAAY;AAEZ,UAAI,CAAC,MAAM;AACF,eAAA;AAAA,MACT;AAEA,mBAAa,IAAI;AAEX,YAAA,kBAAkB,KAAK,UAAU,OAAO;AAC9B,sBAAA,gBACd,KAAK,gBAAgB;AAAA,QACnB,KAAK,gBAAgB,KAAK,IAAK;AAAA,MAC5B,KAAA,KAAK,gBAAgB,iBAAiB,aAAa;AAE/C,iBAAA;AAAA,QACT,KAAK,UAAU,MAAM,EAAG,iBAAiB,GAAG,MAAM;AAC5C,cAAA,CAAC,KAAK,MAAM;AACd;AAAA,UACF;AAEMoS,gBAAAA,mBAAkB,KAAK,UAAU,OAAO;AAC9CA,2BAAgB,gBACd,KAAK,gBAAgB;AAAA,YACnB,KAAK,gBAAgB,KAAK,IAAK;AAAA,UAC5B,KAAA,KAAK,gBAAgB,iBAAiB,aAAa;AAE1D,eAAK,KAAM,QAAQ;AAAA,QAAA,CACpB;AAAA,MAAA;AAAA,IACH,CACD;AAAA,EACH;AAAA,EAEA,WAAW,MAA0B;AACnC,QAAI,QAAQ,KAAK;AAEb,QAAA,KAAK,SAAS,QAAQ;AACpB,UAAA;AACM,gBAAA,KAAK,MAAM,KAAK,KAAK;AAAA,eACtB,GAAG;AAAA,MAAC;AAAA,IACf;AAEO,WAAA,EAAE,GAAG,MAAM;EACpB;AAAA,EAEA,iBAAiB,MAAW;AACnB,WAAA;AAAA,MACL,GAAG;AAAA,MACH,OAAO,KAAK,SAAS,SAAS,KAAK,QAAQ,KAAK,UAAU,KAAK,KAAK;AAAA,IAAA;AAAA,EAExE;AAAA,EAEA,YAAY,MAAc;AACxB,YAAQ,MAAM;AAAA,MACZ,KAAK;AACI,eAAA;AAAA,MACT,KAAK;AACI,eAAA;AAAA,MACT;AACS,eAAA;AAAA,IACX;AAAA,EACF;AAAA,EAEA,gBAAgB,QAAkB;AACzB,WAAA,KAAK,YAAY,OAAO,IAAI;AAAA,EACrC;AACF;AAxIE,cAJW,eAIH,IAA2B;AAJ9B,IAAM,eAAN;ACLA,MAAM,iBAAN,MAAM,wBAAsB3R,kBACzB,sBADyBA,IAAoB;AAAA,EAKrD,WAAW,WAA0B;AAC/B,QAAA,CAAC,eAAc,WAAW;AACd,qBAAA,YAAY,IAAI;AAC9B,qBAAc,UAAU,KAAO,EAAA,KAAK,MAAM;AAC1B,uBAAA,UAAW,WAAW;MAAS,CAC9C;AAAA,IACH;AAEA,WAAO,eAAc;AAAA,EACvB;AAAA,EAEA,YAAY,UAA4B,IAAI;AACpC,UAAA;AAAA,MACJ,MAAM,eAAc,eAAe;AAAA,MACnC,YAAYyR;AAAAA,MACZ,GAAG;AAAA,IAAA,CACJ;AAAA,EACH;AAAA,EAEA,MAAgB,aAAa;AAC3B,UAAM,MAAM;AAEZ,SAAK,OAAO,YAAY;AAAA,MACtB,IAAI,cAAc;AAAA,MAClB,IAAI,UAAU;AAAA,MACd,IAAIG,kBAAgB;AAAA,QAClB,eAAe;AAAA,QACf,WAAW,MACT;;AAAA,mBAAAC,OAAA9R,OAAAR,MAAA,YAAY,aAAZ,gBAAAA,IAAsB,gBAAtB,gBAAAQ,IAAmC,aAAnC,gBAAA8R,IAA6C,YAAW;AAAA;AAAA,MAAA,CAC3D;AAAA,IAAA;AAGH,SAAK,WAAW,WAAW;AAAA,MACzB,IAAI,aAAa,EAAC,MAAM,OAAO,OAAO,OAAO,QAAQ,MAAK;AAAA,IAAA,CAC3D;AAED,SAAK,WAAW;AAAA,MACd,IAAI,YAAY,EAAC,MAAM,OAAO,OAAO,OAAM;AAAA,MAC3C,IAAI,YAAY,EAAC,MAAM,QAAQ,OAAO,MAAK;AAAA,MAC3C,IAAI,YAAY;AAAA,QACd,MAAM;AAAA,QACN,OAAO;AAAA,QACP,eAAe;AAAA,QACf,gBAAgB;AAAA;AAAA,QAEhB;AAAA,MAAA,CACD;AAAA,MACD,IAAI,kBAAkB;AAAA,IAAA,CACvB;AAAA,EACH;AAAA,EAEA,WAAW,MAA0B;AACnC,QAAI,QAAQ,KAAK;AAEb,QAAA;AACM,cAAA,KAAK,MAAM,KAAK;AAAA,aACjB,GAAG;AAAA,IACZ;AAEO,WAAA,EAAC,GAAG,MAAM;EACnB;AAAA,EAEA,aAAa,WACX,KACyC;;AACnC,UAAA,QAAQ,IAAI;AAEZ,UAAA,aAAa,OAAO,KAAK,GAAG;AAE5B,UAAA,kBAAkB,eAAc,SAAS;AACzC,UAAA,WAAW,MAAM,gBAAgB,QAAQ;AAAA,MAC7C,MAAM,EAAC,WAAW,MAAK;AAAA,IAAA,CACxB;AAEM,WAAA;AAAA,MACL,GAAG;AAAA,MACH,MAAM;AAAA,QACJ,GAAG,SAAS;AAAA,QACZ,QAAMtS,MAAA,SAAS,KAAK,SAAd,gBAAAA,IAAqB,OAAM;AAAA,MACnC;AAAA,IAAA;AAAA,EAEJ;AAAA,EAEA,aAAa,eAAwB,KAAgC;;AAC7D,UAAA,QAAQ,IAAI;AAEZ,UAAA,aAAa,OAAO,KAAK,GAAG;AAE5B,UAAA,kBAAkB,eAAc,SAAS;AACzC,UAAA,WAAW,MAAM,gBAAgB,MAAM;AAAA,MAC3C,MAAM,EAAC,WAAW,OAAO,IAAI,GAAG,IAAI,EAAC;AAAA,IAAA,CACtC;AAEG,QAAA,SAAS,KAAK,SAAS,KAAK;AAC9B,YAAM,IAAI,MAAM,SAAS,KAAK,GAAG;AAAA,IACnC;AAEI,QAAA;AACF,aAAO,KAAK,OAAMA,MAAA,SAAS,KAAK,KAAK,CAAC,MAApB,gBAAAA,IAAuB,KAAK;AAAA,IAAA,QACxC;AACC,aAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEA,aAAa,eAAe,KAAa,OAAY;AAC7C,UAAA,kBAAkB,eAAc,SAAS;AAEzC,UAAA,QAAQ,IAAI;AACZ,UAAA,aAAa,OAAO,KAAK,GAAG;AAE5B,UAAA,eAAe,MAAM,gBAAgB,MAAM;AAAA,MAC/C,MAAM,EAAC,WAAW,OAAO,IAAI,GAAG,IAAI,EAAC;AAAA,IAAA,CACtC;AAEG,QAAA,aAAa,KAAK,SAAS,KAAK;AAClC,YAAM,IAAI,MAAM,aAAa,KAAK,GAAG;AAAA,IACvC;AAEA,UAAM,WACJ,aAAa,KAAK,KAAK,WAAW,IAC9B,MAAM,gBAAgB,IAAI,EAAC,KAAK,MAAM,CAAA,IACtC,MAAM,gBAAgB,OAAO;AAAA,MAC7B,GAAG,aAAa,KAAK,KAAK,CAAC;AAAA,MAC3B;AAAA,IAAA,CACD;AAEL,WAAO,SAAS;AAAA,EAClB;AACF;AApIE,cADW,gBACH,IAA2B;AAEnC,cAHW,gBAGI,aAAkC;AAH5C,IAAM,gBAAN;AAuIN,OAAe,gBAAgB;ACrJzB,MAAM,6BAA6B,WAAW;AAAA,EACnD,cAAc;AACN;AAEN,SAAK,kBAAkB;AAAA,MACrB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,WAAW;AAAA,QACT,MAAM,OAAO,qBAAsD;AAAA,MACrE;AAAA,IAAA,CACD;AAED,SAAK,kBAAkB;AAAA,MACrB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,WAAW;AAAA,QACT,MAAM,OAAO,qBAAqD;AAAA,MACpE;AAAA,IAAA,CACD;AAED,SAAK,kBAAkB;AAAA,MACrB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,WAAW;AAAA,QACT,MAAM,OAAO,qBAAsD;AAAA,MACrE;AAAA,IAAA,CACD;AAAA,EACH;AACF;ACFO,MAAM,mBAAN,MAAM,0BACHS,kBAGA,sBAHAA,IAEV;AAAA,EAiBE,YAAY,UAAgC,IAAI;AACxC,UAAA;AAAA,MACJ,MAAM,iBAAgB,eAAe;AAAA,MACrC,YAAYyR;AAAAA,MACZ,GAAG;AAAA,IAAA,CACJ;AAnBH,yCAAkC,CAAA;AAElC,mDAAqD,CAAA;AAErD;AAEA,kDAA2D;AAE3D,+CAA6C;AAE7C;AAEA,wCAA+B,KAAK,SAAS,IAAI,eAAgB,CAAA;AAS/D,SAAK,qBACH,QAAQ,sBAAsB,IAAI,qBAAqB;AAEpD,SAAA,SAAS,IAAI,cAAc;AAAA,MAC9B,SAAS;AAAA,QACP,CAAC,SAAS;AACJ,cAAA,CAAC,KAAK,qBAAqB;AACvB,kBAAA,IAAI,YAAY,eAAe;AAAA,UACvC;AAEA,cAAI,KAAK,oBAAoB,QAAQ,OAAO,OAAO,KAAK,MAAM;AACtD,kBAAA,IAAI,YAAY,UAAU;AAAA,UAClC;AAAA,QACF;AAAA,MACF;AAAA,IAAA,CACD;AAAA,EACH;AAAA,EAEA,mBAAqC;AAC/B,QAAA,CAAC,KAAK,wBAAwB,QAAQ;AACxC,aAAO,KAAK;AAAA,IACd;AAEA,WAAO,KAAK,cAAc;AAAA,MAAO,CAAC,iBAChC,KAAK,wBAAwB,SAAS,aAAa,KAAK;AAAA,IAAA;AAAA,EAE5D;AAAA,EAEA,MAAM,oBAAoB;AAClB,UAAA,iBAAiB,MAAM,cAAc;AAAA,MACzC;AAAA,IAAA;AAGF,QAAI,eAAe,KAAK,SAAS,OAAO,CAAC,eAAe,KAAK,MAAM;AACjE,YAAM,IAAI,MAAM;AAAA,IAClB;AAEM,UAAA,SAAS,eAAe,KAAK;AAE9B,SAAA,gBAAgB,OAAO,SAAS,CAAA;AAAA,EACvC;AAAA,EAEA,MAAgB,aAAa;AAC3B,UAAM,MAAM;AAEN,UAAA,QAAQ,MAAM,eAAe;AAAA,MACjC,MAAM,iBAAgB,eAAe;AAAA,IAAA,CACtC;AAED,SAAK,OAAO,YAAY,GAAG,CAAC,EAAE,iBAAiB;AAClC,iBAAA,cAAc,KAAK,YAAY;AACxC,YAAI,CAAC,KAAK,0BAA0B,CAAC,KAAK,qBAAqB;AAC7D,mBAAS,MAAM,EAAE,SAAS,OAAQ,CAAA;AAClC;AAAA,QACF;AAEI,YAAA;AACI,gBAAA,WAAW,MAAM,MAAM,KAAK;AAAA,YAChC,iBAAiB,KAAK;AAAA,YACtB,MAAM,KAAK,oBAAoB;AAAA,YAC/B,MAAM,WAAW,QAAQ;AAAA,YACzB,MAAM,WAAW,SAAU,KAAK,KAAK;AAAA,UAAA,CACtC;AAEG,cAAA,SAAS,SAAS,KAAK;AACzB,qBAAS,MAAM,EAAE,SAAS,SAAS,IAAK,CAAA;AACxC;AAAA,UACF;AAAA,QAAA,QACM;AACN,mBAAS,MAAM,EAAE,SAAS,OAAQ,CAAA;AAAA,QACpC;AAEA,aAAK,KAAK;AAAA,MAAA,CACX;AAAA,IAAA,CACF;AAED,SAAK,gBAAgB;AAAA,MACnB,EAAE,OAAO,GAAG,QAAQ,WAAW,OAAO,IAAI,OAAO,KAAK;AAAA,MACtD,EAAE,OAAO,GAAG,QAAQ,WAAW,OAAO,KAAK,OAAO,KAAK;AAAA,MACvD,EAAE,OAAO,GAAG,QAAQ,KAAK,OAAO,KAAK,OAAO,KAAK;AAAA,IAAA;AAG9C,SAAA,sBAAsB,KAAK,cAAc,CAAC;AAE/C,UAAM,UAAU,KAAK,cAAc,OAAO,CAAC,QAAQ,SAAS;AACnD,aAAA,KAAK,KAAK,IAAI,OAAO;AAErB,aAAA;AAAA,IACT,GAAG,CAAsB,CAAA;AAEzB,SAAK,WAAW;AAAA,MACd,IAAI,YAAY,EAAE,MAAM,MAAM,OAAO,MAAM,SAAS,OAAO;AAAA,MAC3D,IAAI,YAAY;AAAA,QACd,MAAM;AAAA,QACN,OAAO;AAAA,QACP,eAAe;AAAA,QACf,gBAAgB;AAAA,UACd;AAAA,QACF;AAAA,MAAA,CACD;AAAA,MACD,IAAI,YAAY,EAAE,MAAM,QAAQ,OAAO,MAAM;AAAA,MAC7C,IAAI,YAAY,EAAE,MAAM,QAAQ,OAAO,MAAM;AAAA,IAAA,CAC9C;AAAA,EACH;AAAA,EACA,WAAW,MAA8B;AAChC,WAAA;AAAA,MACL,IAAI,KAAK;AAAA,MACT,iBAAiB,KAAK,mBAAmB;AAAA,MACzC,MAAM,KAAK,OAAO,KAAK,OAAO;AAAA,MAC9B,MAAM,KAAK,QAAQ;AAAA,MACnB,MAAM,KAAK,QAAQ;AAAA,IAAA;AAAA,EAEvB;AAAA,EAEA,YAAY,MAAsB;AAChC,YAAQ,MAAM;AAAA,MACZ,KAAK;AACI,eAAA;AAAA,MACT,KAAK;AACI,eAAA;AAAA,MACT,KAAK;AACI,eAAA;AAAA,MACT;AACS,eAAA;AAAA,IACX;AAAA,EACF;AAAA,EAEA,gBAAgB,MAA0B;AACxC,WAAO,KAAK,YAAY,KAAK,KAAK,SAAU,CAAA;AAAA,EAC9C;AAAA,EAEA,yBAAyB,MAAoC;AAC3D,WAAO,KAAK,mBAAmB,iBAAiB,KAAK,gBAAgB,IAAI,CAAC;AAAA,EAC5E;AAAA,EAEA,0BAA0B,iBAAmD;AAC3E,SAAK,yBAAyB;AAE9B,SAAK,6BAA6B;AAAA,EACpC;AAAA,EAEA,uBAAuB,cAAqC;;AAC1D,SAAI,6CAAc,aAAUlS,MAAA,KAAK,wBAAL,gBAAAA,IAA0B,QAAO;AAC3D;AAAA,IACF;AAEA,SAAK,sBAAsB;AAE3B,SAAK,6BAA6B;AAAA,EACpC;AAAA,EAEA,2BACE,yBACA;AACA,UAAM,gCAAgC,wBACnC,MAAM,EACN,KAAK;AAER,UAAM,gCAAgC,KAAK,wBACxC,QACA,KAAK;AAEJ,QAAA,QAAQ,+BAA+B,6BAA6B,GAAG;AACzE;AAAA,IACF;AAEA,SAAK,0BAA0B;AAE/B,SAAK,uBAAuB,KAAK,iBAAmB,EAAA,CAAC,KAAK,IAAI;AAAA,EAChE;AAAA,EAEU,+BAA+B;AACvC,QAAI,CAAC,KAAK,0BAA0B,CAAC,KAAK,qBAAqB;AAC7D;AAAA,IACF;AAEK,SAAA,aAAa,CAAC,iBAAiB;AAClC,mBAAa,MAAM;AAEN,mBAAA;AAAA,QACX;AAAA,QACA;AAAA,QACA,KAAK;AAAA,MAAA;AAGP,mBAAa,aAAa,QAAQ,KAAK,KAAK,oBAAqB,KAAK;AAAA,IAAA,CACvE;AAED,SAAK,KAAK;AAAA,EACZ;AACF;AArNE,cAJW,kBAIH,IAA2B;AAJ9B,IAAM,kBAAN;ACjBA,MAAM,cAAN,MAAM,qBAAmBmS,iBACtB,sBADsBA,IAAiB;AAAA,EAG/C,YAAY,UAA2B,IAAI;AACnC,UAAA;AAAA,MACJ,MAAM,YAAW,eAAe;AAAA,MAChC,YAAYD;AAAAA,MACZ,GAAG;AAAA,IAAA,CACJ;AAAA,EACH;AAAA,EAEA,MAAgB,aAAa;AAC3B,UAAM,MAAM;AAEZ,SAAK,WAAW;AAAA,MACd,IAAI,WAAW,EAAE,MAAM,MAAM,OAAO,MAAM;AAAA,MAC1C,IAAI,WAAW,EAAE,MAAM,QAAQ,OAAO,OAAO,UAAU,MAAM;AAAA,MAC7D,IAAI,WAAW,EAAE,MAAM,QAAQ,OAAO,QAAQ,UAAU,MAAM;AAAA,MAC9D,IAAI,WAAW;AAAA,QACb,MAAM;AAAA,QACN,OAAO;AAAA,QACP,cAAc;AAAA,QACd,eAAe;AAAA,QACf,gBAAgB,EAAE,MAAM,YAAY,MAAM,EAAE;AAAA,MAAA,CAC7C;AAAA,IAAA,CACF;AAED,SAAK,wBAAwB,GAAG,CAAC,EAAE,mBAAmB;AACpD,WAAK,UAAU,MAAM,EAAG,WAAW,gBAAgB,aAAa;AAAA,IAAA,CACjE;AAAA,EACH;AAAA,EAEA,WAAW,MAAsB;AACxB,WAAA;AAAA,MACL,IAAI,KAAK;AAAA,MACT,MAAM,KAAK,QAAQ;AAAA,MACnB,MAAM,KAAK,QAAQ;AAAA,MACnB,MAAM,KAAK,QAAQ;AAAA,IAAA;AAAA,EAEvB;AACF;AAvCE,cADW,aACH,IAA2B;AAD9B,IAAM,aAAN;ACOA,MAAM,eAAN,MAAM,sBAGHzR,kBACA,sBADAA,IAAgB;AAAA,EAOxB,YAAY,UAA4B,IAAI;AACpC,UAAA;AAAA,MACJ,MAAM,aAAY,eAAe;AAAA,MACjC,YAAYyR;AAAAA,MACZ,GAAG;AAAA,IAAA,CACJ;AATH,qDAAqD,KAAK;AAAA,MACxD,IAAI,MAAM;AAAA,IAAA;AAAA,EASZ;AAAA,EAEA,MAAgB,aAAa;AAC3B,UAAM,MAAM;AAEZ,SAAK,OAAO,YAAY;AAAA,MACtB,IAAI,cAAc;AAAA,MAClB,IAAI,UAAU;AAAA,MACd,IAAIG,kBAAgB;AAAA,QAClB,eAAe;AAAA,QACf,WAAW,MACT;;AAAA,mBAAAC,OAAA9R,OAAAR,MAAA,YAAY,aAAZ,gBAAAA,IAAsB,gBAAtB,gBAAAQ,IAAmC,aAAnC,gBAAA8R,IAA6C,YAAW;AAAA;AAAA,MAAA,CAC3D;AAAA,IAAA;AAGH,SAAK,WAAW,WAAW;AAAA,MACzB,IAAI,aAAa;AAAA,QACf,MAAM;AAAA,QACN,OAAO;AAAA,QACP,eAAe;AAAA,MAAA,CAChB;AAAA,MACD,IAAI,aAAa;AAAA,QACf,MAAM;AAAA,QACN,OAAO;AAAA,QACP,eAAe;AAAA,MAAA,CAChB;AAAA,IAAA,CACF;AAED,SAAK,WAAW;AAAA,MACd,IAAI,YAAY,EAAE,MAAM,MAAM,OAAO,MAAM,SAAS,OAAO;AAAA,MAC3D,IAAI,YAAY,EAAE,MAAM,QAAQ,OAAO,OAAO;AAAA,MAC9C,IAAI,YAAY,EAAE,MAAM,QAAQ,OAAO,QAAQ;AAAA,MAC/C,IAAI,kBAAkB;AAAA,QACpB,OAAO;AAAA,QACP,SAAS;AAAA,UACP,IAAI,aAAa;AAAA,YACf,OAAO;AAAA,YACP,SAAS,CAAC,QAAgB;AACxB,mBAAK,0BAA0B,KAAK,EAAE,MAAM,IAAK,CAAA;AAAA,YACnD;AAAA,UAAA,CACD;AAAA,UACD,IAAI,WAAW;AAAA,UACf,IAAI,aAAa;AAAA,QACnB;AAAA,MAAA,CACD;AAAA,IAAA,CACF;AAAA,EACH;AAAA,EAEA,WAAW,MAAY;AACd,WAAA;AAAA,MACL,IAAI,KAAK;AAAA,MACT,MAAM,KAAK,QAAQ;AAAA,MACnB,MAAM,KAAK,QAAQ;AAAA,IAAA;AAAA,EAEvB;AACF;AAnEE,cAJW,cAIH,IAA2B;AAJ9B,IAAM,cAAN;ACRA,MAAM,8BAAN,MAAM,qCAAmC7R,kBACtC,sBADsCA,IAAiC;AAAA,EAE/E,YAAY,UAA4B,IAAI;AACpC,UAAA;AAAA,MACJ,MAAM,4BAA2B,eAAe;AAAA,MAChD,YAAYyR;AAAAA,MACZ,GAAG;AAAA,IAAA,CACJ;AAAA,EACH;AAAA,EAEU,YACR,QAGA;AACO,WAAA,KAAK,eAAe,MAAM;AAAA,EACnC;AAAA,EAEA,MAAgB,aAAa;AAC3B,UAAM,MAAM;AAEZ,SAAK,WAAW;AAAA,MACd,IAAI,YAAY,EAAE,MAAM,MAAM,SAAS,OAAO;AAAA,MAC9C,IAAI,YAAY,EAAE,MAAM,UAAU;AAAA,MAClC,IAAI,YAAY,EAAE,MAAM,wBAAwB;AAAA,IAAA,CACjD;AAAA,EACH;AACF;AA1BE,cADW,6BACH,IAA2B;AAD9B,IAAM,6BAAN;ACAA,MAAM,oBAAN,MAAM,2BAAyBzR,kBAC5B,sBAD4BA,IAAuB;AAAA,EAG3D,YAAY,UAA4B,IAAI;AACpC,UAAA;AAAA,MACJ,MAAM,kBAAiB,eAAe;AAAA,MACtC,YAAYyR;AAAAA,MACZ,GAAG;AAAA,IAAA,CACJ;AAAA,EACH;AAAA,EAEU,YACR,QACuE;AAChE,WAAA,KAAK,eAAe,MAAM;AAAA,EACnC;AAAA,EAEA,MAAgB,aAAa;AAC3B,UAAM,MAAM;AAEZ,SAAK,WAAW;AAAA,MACd,IAAI,YAAY,EAAE,MAAM,MAAM,SAAS,OAAO;AAAA,MAC9C,IAAI,YAAY,EAAE,MAAM,UAAU;AAAA,MAClC,IAAI,YAAY,EAAE,MAAM,WAAW;AAAA,IAAA,CACpC;AAAA,EACH;AACF;AAzBE,cADW,mBACH,IAA2B;AAD9B,IAAM,mBAAN;ACGA,MAAM,eAAN,MAAM,sBAAuDzR,kBAI1D,sBAJ0DA,IAGlE;AAAA,EAGA,YAAY,UAA0C,IAAI;AAClD,UAAA;AAAA,MACJ,MAAM,aAAY,eAAe;AAAA,MACjC,YAAYyR;AAAAA,MACZ,GAAG;AAAA,IAAA,CACJ;AAAA,EACH;AAAA,EAEA,MAAgB,aAAa;AAC3B,UAAM,MAAM;AAEZ,SAAK,OAAO,YAAY;AAAA,MACtB,IAAI,cAAc;AAAA,MAClB,IAAI,UAAU;AAAA,MACd,IAAIG,kBAAgB;AAAA,QAClB,eAAe;AAAA,QACf,WAAW,MACT;;AAAA,mBAAAC,OAAA9R,OAAAR,MAAA,YAAY,aAAZ,gBAAAA,IAAsB,gBAAtB,gBAAAQ,IAAmC,aAAnC,gBAAA8R,IAA6C,YAAW;AAAA;AAAA,MAAA,CAC3D;AAAA,IAAA;AAGH,SAAK,WAAW;AAAA,MACd,IAAI,YAAY,EAAE,MAAM,MAAM,OAAO,MAAM,SAAS,OAAO;AAAA,MAC3D,IAAI,YAAY,EAAE,MAAM,SAAS,OAAO,QAAQ;AAAA,MAChD,IAAI,kBAAkB;AAAA,IAAA,CACvB;AAAA,EACH;AAAA,EAEA,WAAW,MAAuB;AACzB,WAAA;AAAA,MACL,IAAI,KAAK;AAAA,MACT,OAAO,KAAK,SAAS;AAAA,MACrB,UAAU,KAAK,YAAY;AAAA,MAC3B,KAAK,KAAK,OAAO;AAAA,MACjB,SAAS,KAAK;AAAA,IAAA;AAAA,EAElB;AACF;AAvCE,cAJW,cAIH,IAA2B;AAJ9B,IAAM,cAAN;ACKA,MAAM,eAAN,MAAM,sBAAoBH,iBACvB,sBADuBA,IAAiC;AAAA,EAGhE,YAAY,UAA2B,IAAI;AACnC,UAAA,EAAE,MAAM,aAAY,eAAe,GAAG,GAAG,SAAS,YAAYD,cAAA,CAAc;AAAA,EACpF;AAAA,EAEA,MAAgB,aAAa;AAC3B,UAAM,MAAM;AAEZ,SAAK,WAAW;AAAA,MACd,IAAI,WAAW,EAAE,MAAM,MAAM,OAAO,MAAM;AAAA,MAC1C,IAAI,WAAW,EAAE,MAAM,QAAQ,OAAO,OAAO,UAAU,MAAM;AAAA,MAC7D,IAAI,WAAW,EAAE,MAAM,SAAS,OAAO,QAAQ,UAAU,MAAM;AAAA,MAC/D,IAAI,WAAW,EAAE,MAAM,SAAS,OAAO,MAAM;AAAA,MAC7C,IAAI,WAAW;AAAA,QACb,MAAM;AAAA,QACN,OAAO;AAAA,QACP,eAAe;AAAA,QACf,UAAU;AAAA,QACV,gBAAgB;AAAA,UACd,gBAAgB;AAAA,UAChB,WAAW,IAAI,YAAY,EAAE,UAAU,IAAI;AAAA,QAC7C;AAAA,MAAA,CACD;AAAA,MACD,IAAI,WAAW;AAAA,QACb,MAAM;AAAA,QACN,OAAO;AAAA,QACP,eAAe;AAAA,MAAA,CAChB;AAAA,MACD,IAAI,WAAW;AAAA,QACb,MAAM;AAAA,QACN,OAAO;AAAA,QACP,cAAc,UAAU;AAAA,QACxB,eAAe;AAAA,QACf,UAAU;AAAA,QACV,gBAAgB;AAAA,UACd,SAAS;AAAA,YACP,EAAE,OAAO,UAAU,OAAO,OAAO,OAAO;AAAA,YACxC,EAAE,OAAO,UAAU,MAAM,OAAO,OAAO;AAAA,UACzC;AAAA,QACF;AAAA,MAAA,CACD;AAAA,MACD,IAAI,WAAW;AAAA,QACb,MAAM;AAAA,QACN,OAAO;AAAA,QACP,eAAe;AAAA,QACf,gBAAgB,EAAE,MAAM,YAAY,MAAM,EAAE;AAAA,MAAA,CAC7C;AAAA,IAAA,CACF;AAAA,EACH;AAAA,EAEA,iBAAiB,MAAW;AAC1B,UAAM,OAAO,OAAO,SAAS,KAAK,IAAI;AAE/B,WAAA;AAAA,MACL,GAAG;AAAA,MACH,UAAU,KAAK,YAAY;AAAA,MAC3B,MAAM,OAAO,MAAM,IAAI,IAAI,UAAU,QAAQ;AAAA,IAAA;AAAA,EAEjD;AAAA,EAEA,WAAW,MAA8B;AAChC,WAAA;AAAA,MACL,IAAI,KAAK;AAAA,MACT,MAAM,KAAK,QAAQ;AAAA,MACnB,OAAO,KAAK,SAAS;AAAA,MACrB,MACE,GAAG,KAAK,IAAI,OAAO,UAAU,QAAQ,UAAU,QAAQ,UAAU;AAAA,MACnE,QAAQ,KAAK;AAAA,MACb,UAAU,KAAK,YAAY;AAAA,MAC3B,OAAO,KAAK,SAAS;AAAA,MACrB,MAAM,KAAK,QAAQ;AAAA,IAAA;AAAA,EAEvB;AACF;AA1EE,cADW,cACH,IAA2B;AAD9B,IAAM,cAAN;ACRA,MAAM,gBAAN,MAAM,uBAAqBzR,kBACxB,sBADwBA,IAAkC;AAAA,EAGlE,YAAY,UAA4B,IAAI;AACpC,UAAA,EAAE,MAAM,cAAa,eAAe,GAAG,GAAG,SAAS,YAAYyR,cAAA,CAAa;AAAA,EACpF;AAAA,EAEA,MAAgB,aAAa;AAC3B,UAAM,MAAM;AAEZ,SAAK,WAAW,WAAW;AAAA,MACzB,IAAI,aAAa;AAAA,QACf,MAAM;AAAA,QACN,OAAO;AAAA,QACP,eAAe;AAAA,MAAA,CAChB;AAAA,MACD,IAAI,aAAa;AAAA,QACf,MAAM;AAAA,QACN,OAAO;AAAA,QACP,eAAe;AAAA,MAAA,CAChB;AAAA,MACD,IAAI,aAAa;AAAA,QACf,MAAM;AAAA,QACN,OAAO;AAAA,QACP,eAAe;AAAA,QACf,gBAAgB;AAAA,UACd,SAAS;AAAA,YACP,EAAE,OAAO,GAAG,OAAO,OAAO;AAAA,YAC1B,EAAE,OAAO,GAAG,OAAO,OAAO;AAAA,UAC5B;AAAA,QACF;AAAA,MAAA,CACD;AAAA,IAAA,CACF;AAED,SAAK,WAAW;AAAA,MACd,IAAI,YAAY,EAAE,MAAM,QAAQ,OAAO,OAAO;AAAA,MAC9C,IAAI,YAAY,EAAE,MAAM,SAAS,OAAO,QAAQ;AAAA,MAChD,IAAI,YAAY,EAAE,MAAM,SAAS,OAAO,MAAM;AAAA,MAC9C,IAAI,YAAY;AAAA,QACd,MAAM;AAAA,QACN,OAAO;AAAA,QACP,eAAe;AAAA,QACf,gBAAgB;AAAA,UACd,SAAS;AAAA,YACP,CAAC,UAAU,KAAK,GAAG;AAAA,YACnB,CAAC,UAAU,IAAI,GAAG;AAAA,UACpB;AAAA,QACF;AAAA,MAAA,CACD;AAAA,MACD,IAAI,kBAAkB;AAAA,IAAA,CACvB;AAAA,EACH;AAAA,EAEA,WAAW,MAA8B;AAChC,WAAA;AAAA,MACL,IAAI,KAAK;AAAA,MACT,MAAM,KAAK,QAAQ;AAAA,MACnB,OAAO,KAAK,SAAS;AAAA,MACrB,MAAM,KAAK,SAAS,IAAI,UAAU,QAAQ,UAAU;AAAA,MACpD,QAAQ,KAAK;AAAA,MACb,UAAU,KAAK,YAAY;AAAA,MAC3B,OAAO,KAAK,SAAS;AAAA,MACrB,MAAM,KAAK,QAAQ;AAAA,IAAA;AAAA,EAEvB;AACF;AAhEE,cADW,eACH,IAA2B;AAD9B,IAAM,eAAN;ACHA,MAAM,+BAAN,MAAM,sCAAoCC,iBACvC,sBADuCA,IAAkC;AAAA,EAGjF,YAAY,UAA2B,IAAI;AACnC,UAAA;AAAA,MACJ,MAAM,6BAA4B,eAAe;AAAA,MACjD,YAAYD;AAAAA,MACZ,GAAG;AAAA,IAAA,CACJ;AAAA,EACH;AAAA,EAEA,MAAgB,aAAa;AAC3B,UAAM,MAAM;AAEZ,SAAK,WAAW;AAAA,MACd,IAAI,WAAW,EAAE,MAAM,MAAM,OAAO,MAAM;AAAA,MAC1C,IAAI,WAAW;AAAA,QACb,MAAM;AAAA,QACN,OAAO;AAAA,QACP,eAAe;AAAA,QACf,UAAU;AAAA,QACV,gBAAgB;AAAA,UACd,gBAAgB;AAAA,UAChB,WAAW,IAAI,YAAY,EAAE,UAAU,IAAI;AAAA,QAC7C;AAAA,MAAA,CACD;AAAA,MACD,IAAI,WAAW,EAAE,MAAM,OAAO,OAAO,OAAO,UAAU,MAAM;AAAA,MAC5D,IAAI,WAAW,EAAE,MAAM,QAAQ,OAAO,QAAQ,UAAU,MAAM;AAAA,MAC9D,IAAI,WAAW;AAAA,QACb,MAAM;AAAA,QACN,OAAO;AAAA,QACP,eAAe;AAAA,QACf,gBAAgB,EAAE,MAAM,YAAY,MAAM,EAAE;AAAA,MAAA,CAC7C;AAAA,IAAA,CACF;AAAA,EACH;AACF;AAnCE,cADW,8BACH,IAA2B;AAD9B,IAAM,8BAAN;ACGA,MAAM,gCAAN,MAAM,uCAEHzR,kBACA,sBADAA,IAAsC;AAAA,EAG9C,YAAY,UAA4B,IAAI;AACpC,UAAA;AAAA,MACJ,MAAM,8BAA6B,eAAe;AAAA,MAClD,YAAYyR;AAAAA,MACZ,GAAG;AAAA,IAAA,CACJ;AAAA,EACH;AAAA,EAEA,MAAgB,aAAa;AAC3B,UAAM,MAAM;AAEZ,SAAK,WAAW,WAAW;AAAA,MACzB,IAAI,aAAa,EAAE,MAAM,OAAO,OAAO,OAAO;AAAA,MAC9C,IAAI,aAAa,EAAE,MAAM,QAAQ,OAAO,QAAQ;AAAA,IAAA,CACjD;AAED,SAAK,WAAW;AAAA,MACd,IAAI,YAAY,EAAE,MAAM,MAAM,OAAO,MAAM,SAAS,OAAO;AAAA,MAC3D,IAAI,YAAY,EAAE,MAAM,OAAO,OAAO,OAAO;AAAA,MAC7C,IAAI,YAAY,EAAE,MAAM,QAAQ,OAAO,QAAQ;AAAA,MAC/C,IAAI,kBAAkB;AAAA,IAAA,CACvB;AAAA,EACH;AACF;AAzBE,cAHW,+BAGH,IAA2B;AAH9B,IAAM,+BAAN;ACMA,MAAM,cAAN,MAAM,qBAAmB,eACtB,sBADsB,IAAyB;AAAA,EAGvD,YAAY,UAA0C,IAAI;AAClD,UAAA;AAAA,MACJ,MAAM,YAAW,eAAe;AAAA,MAChC,YAAYA;AAAAA,MACZ,eAAe;AAAA,MACf,GAAG;AAAA,IAAA,CACJ;AAAA,EACH;AAAA,EAEA,MAAgB,aAAa;AAC3B,UAAM,MAAM;AAEZ,SAAK,WAAW;AAAA,MACd,IAAI,YAAY,EAAE,MAAM,cAAc,OAAO,QAAQ,OAAO,QAAQ;AAAA,MACpE,IAAI,YAAY;AAAA,QACd,MAAM;AAAA,QACN,OAAO;AAAA,QACP,OAAO;AAAA,QACP,eAAe;AAAA,QACf,gBAAgB;AAAA,UACd,SAAS;AAAA,YACP,CAAC,SAAS,SAAS,GAAG;AAAA,YACtB,CAAC,SAAS,IAAI,GAAG;AAAA,YACjB,CAAC,SAAS,cAAc,GAAG;AAAA,UAC7B;AAAA,QACF;AAAA,MAAA,CACD;AAAA,MACD,IAAI,kBAAkB;AAAA,IAAA,CACvB;AAAA,EACH;AAAA,EAEA,WAAW,MAAsC;AAC/C,SAAK,QAAQ;AACR,SAAA,WAAW,KAAK,YAAY,CAAA;AAEjC,SAAK,YAAY;AAEb,QAAA,CAAC,KAAK,WAAW;AACb,YAAA,QAAQ,KAAK,OAAO,KAAK,CAAClK,WAAUA,OAAM,OAAO,KAAK,OAAO;AAC9D,WAAA,aAAY,+BAAO,UAAS;AAE7B,UAAA,CAAC,KAAK,aAAa,OAAO;AAC5B,cAAM,YAAY,YAAY,SAAU,YAAY,aAAa;AAAA,UAC/D,CAAC3H,UAASA,MAAK,SAAS,MAAM;AAAA,QAAA;AAG3B,aAAA,aAAY,uCAAW,SAAQ;AAAA,MACtC;AAEI,UAAA,CAAC,KAAK,aAAa,OAAO;AAC5B,cAAM,QAAQ,MAAM,KAAK,MAAM,2BAA2B;AAE1D,YAAI,OAAO;AACT,eAAK,YACH,MAAM,CAAC,MAAM,SAAS,OAAO,MAAM,CAAC,CAAC,UAAU,OAAO,MAAM,CAAC,CAAC;AAAA,QAClE;AAAA,MACF;AAAA,IACF;AAEO,WAAA;AAAA,EACT;AAAA,EAEO,gBAAgB,MAA6C;;AAClE,WAAQ,CAAC,SAAS,WAAW,SAAS,cAAc,EAAe;AAAA,OACjEL,MAAA,KAAK,SAAL,gBAAAA,IAAW;AAAA,IAAA;AAAA,EAEf;AAAA,EAEA,MAAM,KAAK,QAA8B;AAChC,WAAA,MAAM,QAAQ,MAAM;AAAA,EAC7B;AACF;AAzEE,cADW,aACH,IAA2B;AAD9B,IAAM,aAAN;ACiBA,MAAM,cAAN,MAAM,qBAAmBmS,iBACtB,sBADsBA,IAAmC;AAAA,EAGjE,YAAY,UAA2B,IAAI;AACnC,UAAA;AAAA,MACJ,MAAM,YAAW,eAAe;AAAA,MAChC,YAAYD;AAAAA,MACZ,GAAG;AAAA,IAAA,CACJ;AAAA,EACH;AAAA,EAEA,MAAgB,aAAa;AAC3B,UAAM,MAAM;AAEN,UAAA,YAAY,KAAK,SAAS,IAAI,YAAY,EAAE,UAAU,GAAI,CAAA,CAAC;AAEvD,cAAA,aAAa,CAAC,UAAU;AAC1B,YAAA;AAAA,QACJ;AAAA,QACA;AAAA,QACA,GAAG,CAAC,SAAS,WAAW,SAAS,cAAc,EAC5C,IAAI,CAAC,aAAa,SAAS,QAAQ,CAAC,EACpC,KAAK,GAAG,CAAC;AAAA,MAAA;AAAA,IACd,CACD;AAEK,UAAA,aAAa,KAAK,SAAS,IAAI,aAAa,EAAE,UAAU,GAAI,CAAA,CAAC;AAEnE,SAAK,WAAW;AAAA,MACd,IAAI,WAAW,EAAE,MAAM,MAAM,OAAO,MAAM;AAAA,MAC1C,IAAI,WAAW,EAAE,MAAM,SAAS,OAAO,QAAQ,UAAU,MAAM;AAAA,MAC/D,IAAI,WAAW;AAAA,QACb,MAAM;AAAA,QACN,OAAO;AAAA,QACP,eAAe;AAAA,QACf,UAAU;AAAA,MAAA,CACX;AAAA,MACD,IAAI,WAAW;AAAA,QACb,MAAM;AAAA,QACN,OAAO;AAAA,QACP,eAAe;AAAA,QACf,cAAc,SAAS;AAAA,QACvB,UAAU;AAAA,QACV,gBAAgB;AAAA,UACd,SAAS;AAAA,YACP,EAAE,OAAO,SAAS,WAAW,OAAO,MAAM;AAAA,YAC1C,EAAE,OAAO,SAAS,MAAM,OAAO,KAAK;AAAA,YACpC,EAAE,OAAO,SAAS,gBAAgB,OAAO,OAAO;AAAA,UAClD;AAAA,QACF;AAAA,MAAA,CACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUD,IAAI,WAAW;AAAA,QACb,MAAM;AAAA,QACN,OAAO;AAAA,QACP,eAAe;AAAA;AAAA,QAEf,gBAAgB;AAAA,UACd,gBAAgB;AAAA,UAChB,UAAU,IAAI,WAAW;AAAA,UACzB,WAAW;AAAA;AAAA,QAEb;AAAA,MAAA,CACD;AAAA,MACD,IAAI,WAAW,EAAE,MAAM,QAAQ,OAAO,MAAM,cAAc,KAAK;AAAA,MAC/D,IAAI,iBAAiB;AAAA,QACnB,MAAM;AAAA,QACN,OAAO;AAAA,QACP,sBAAsB;AAAA,QACtB,YAAY,KAAK,SAAS,IAAI,aAAa;AAAA,QAC3C,aAAa,KAAK,SAAS,IAAI,cAAc;AAAA,MAAA,CAC9C;AAAA,MACD,IAAI,iBAAiB;AAAA,QACnB,MAAM;AAAA,QACN,OAAO;AAAA,QACP,sBAAsB;AAAA,QACtB,YAAY,KAAK,SAAS,IAAI,6BAA6B;AAAA,QAC3D,aAAa,KAAK,SAAS,IAAI,8BAA8B;AAAA,MAAA,CAC9D;AAAA,MACD,IAAI,WAAW;AAAA,QACb,MAAM;AAAA,QACN,OAAO;AAAA,QACP,eAAe;AAAA,QACf,gBAAgB,EAAE,MAAM,YAAY,MAAM,EAAE;AAAA,MAAA,CAC7C;AAAA,IAAA,CACF;AAED,SAAK,wBAAwB,GAAG,CAAC,EAAE,mBAAmB;AAChD,UAAA,iBAAiB,aAAa,QAAQ;AAC7B,mBAAA,aAAa,CAAC,UAAU;AACjC,gBAAM,MAAM;AACZ,gBAAM,aAAa,UAAU,KAAK,KAAK,KAAM,EAAE;AAAA,QAAA,CAChD;AAAA,MACH;AAAA,IAAA,CACD;AAED,UAAM,uBAAuB,MAAM;;AACjC,YAAM,YAAUlS,MAAA,KAAK,SAAL,gBAAAA,IAAW,UAAS,SAAS;AAGxC,WAAA,UAAU,QAAQ,EAAG,UAAU;AAC/B,WAAA,UAAU,kBAAkB,EAAG,UAAU;AAAA,IAAA;AAGhD,SAAK,yBAAyB,GAAG,CAAC,EAAE,eAAe;AAC7C,UAAA,SAAS,SAAS,QAAQ;AACP;MACvB;AAAA,IAAA,CACD;AAED,SAAK,wBAAwB,GAAG,CAAC,EAAE,mBAAmB;AACpD,WAAK,UAAU,MAAM,EAAG,WAAW,iBAAiB,aAAa;AAAA,IAAA,CAClE;AAAA,EACH;AAAA,EAEA,iBAAiB,MAAW;AAC1B,UAAM,mBACJ,KAAK,SAAS,SAAS,OAAO,KAAK,mBAAmB;AACxD,UAAM,SAAS,KAAK,SAAS,SAAS,OAAO,KAAK,SAAS;AAErD,UAAA,aAAa,SAAS,KAAK,IAAI;AAE9B,WAAA;AAAA,MACL,GAAG;AAAA,MACH,MAAM,MAAM,UAAU,IAAI,SAAS,SAAS,IAAI,IAAI;AAAA,MACpD,UAAU,KAAK,YAAY;AAAA,MAC3B,KAAK,KAAK,OAAO;AAAA,MACjB,SAAS,KAAK,WAAW;AAAA,MACzB;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AAAA,EAEA,WAAW,MAAgC;AAClC,WAAA;AAAA,MACL,IAAI,KAAK;AAAA,MACT,OAAO,KAAK,SAAS;AAAA,MACrB,UAAU,KAAK,YAAY;AAAA,MAC3B,KAAK,KAAK,OAAO;AAAA,MACjB,SAAS,KAAK;AAAA,MACd,MAAM,KAAK,OAAO,GAAG,KAAK,IAAI,KAAK;AAAA,MACnC,MAAM,KAAK,QAAQ;AAAA,MACnB,QAAS,KAAK,UAAU,CAAC;AAAA,MACzB,kBAAmB,KAAK,oBACtB,CAAC;AAAA,MACH,MAAM,KAAK,QAAQ;AAAA,IAAA;AAAA,EAEvB;AACF;AA3JE,cADW,aACH,IAA2B;AAD9B,IAAM,aAAN;ACJA,MAAM,kCAAkC,YAA4B;AAAA,EAkBzE,YAAY,UAA0C,IAAI;AAClD,UAAA,EAAE,GAAG,QAAA,CAAS;AAlBtB;AACA;AAEA;AACA;AAEA;AACA;AAEA,iCAAiB;AACjB,mCAAmB;AAEnB,6CAAsC,CAAA;AACtC,uCAA6B;AAC7B,yCAA8B;AAC9B,2CAAkC;AAK3B,SAAA,iBAAiB,IAAI;AAErB,SAAA,2BAA2B,IAAI;AAE/B,SAAA,0BAA0B,IAAI;AAC9B,SAAA,oCAAoC,IAAI;AAExC,SAAA,eAAe,aAAa,CAAC,iBAAiB;AACpC,mBAAA,SAAS,KAAK,uBAAuB;AAAA,IAAA,CACnD;AAEI,SAAA,yBAAyB,aAAa,CAAC,iBAAiB;AAC9C,mBAAA,SAAS,KAAK,iCAAiC;AAAA,IAAA,CAC7D;AAEK,UAAA,6BACJ,IAAK,cAAc,6BAA0D;AAAA,MAC3E,WAAW,MAA4D;AAC9D,eAAA;AAAA,UACL,GAAG,MAAM,WAAW,IAAI;AAAA,UACxB,kBAAkB;AAAA,UAClB,UAAU;AAAA,QAAA;AAAA,MAEd;AAAA,IAAA,EACC;AAAA,MACD,cAAc,EAAE,MAAM,yCAAyC;AAAA,IAAA,CAChE;AACH,SAAK,6BAA6B;AAE5B,UAAA,mBAAmB,IAAI,aAAa;AAAA,MACxC,cAAc,EAAE,MAAM,0BAA0B;AAAA,IAAA,CACjD;AACD,SAAK,mBAAmB;AAAA,EAC1B;AAAA,EAEA,MAAgB,aAAa;AAC3B,UAAM,MAAM;AAEZ;AAAA,MACE,KAAK,eAAe,kBAAkB;AAAA,MACtC,KAAK,yBAAyB,kBAAkB;AAAA,MAChD,KAAK,2BAA2B,kBAAkB;AAAA,MAClD,KAAK,iBAAiB,kBAAkB;AAAA,IAAA,EACxC,QAAQ,CAAC,mBAAmB;AACvB,WAAA,kBAAA,EAAoB,kBAAkB,cAAc;AAAA,IAAA,CAC1D;AAEK,UAAA,KAAK,eAAe;AACpB,UAAA,KAAK,yBAAyB;AAE9B,UAAA,KAAK,2BAA2B;AAChC,UAAA,KAAK,iBAAiB;AAEvB,SAAA,WAAW,gBAAgB,GAAG,MAAM;AAClC,WAAA,eAAe,WAAW;AAC1B,WAAA,yBAAyB,WAAW;AACpC,WAAA,2BAA2B,WAAW;AACtC,WAAA,iBAAiB,WAAW;IAAS,CAC3C;AAED,SAAK,WAAW;EAClB;AAAA,EAEA,WAAW,MAAoC;AACvC,UAAA,yBAAyB,KAAK,2BAA2B,QAAQ;AAEjE,UAAA,eAAe,KAAK,iBAAiB,QAAQ;AAE5C,WAAA;AAAA,MACL,GAAG,MAAM,WAAW,IAAI;AAAA,MACxB,QAAQ,aAAa;AAAA,QACnB,CAAC,gBAAgB,YAAY,WAAW,KAAK;AAAA,MAC/C;AAAA,MACA,kBAAkB,uBAAuB;AAAA,QACvC,CAAC,0BAA0B,sBAAsB,WAAW,KAAK;AAAA,MACnE;AAAA,MACA,kBAAkB;AAAA,MAClB,UAAU;AAAA,MACV,eAAe;AAAA,MACf,UAAU,CAAC;AAAA,IAAA;AAAA,EAEf;AAAA,EAEA,QAAQ,MAA8B;AACpC,UAAM,QAAQ,IAAI;AAElB,UAAM,oBAAoB,CAAA;AAE1B,eAAW,gBAAgB,MAAM;AAC3B,UAAA,CAAC,aAAa,KAAK;AACrB,0BAAkB,KAAK,YAAY;AAAA,MACrC;AAEA,iBAAW,QAAQ,MAAM;AACnB,YAAA,KAAK,QAAQ,aAAa,IAAI;AACnB,uBAAA,SAAS,KAAK,IAAI;AAAA,QACjC;AAAA,MACF;AAAA,IACF;AAEK,SAAA,oBAAoB,KAAK,sBAAsB,iBAAiB;AAAA,EACvE;AAAA,EAEA,sBAAsB,MAAwB;AAC5C,UAAM,SAAS,KAAK;AAAA,MAClB,CAAC,SAAS,KAAK,OAAO,UAAU,KAAK,SAAS;AAAA,IAAA;AAG5C,QAAA,QAAQ,CAAC,GAAG,MAAM;AAEtB,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAC/B,YAAA,OAAO,MAAM,CAAC;AAEf,WAAA,WAAW,KAAK,SAAS;AAAA,QAC5B,CAAC,SAAS,KAAK,OAAO,UAAU,KAAK,SAAS;AAAA,MAAA;AAGxC,cAAA,MAAM,OAAO,KAAK,QAAQ;AAAA,IACpC;AAEO,WAAA;AAAA,EACT;AAAA,EAEA,uBAAuB;AACrB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,MAAM,KAAK,QAA8B;AACvC,UAAM,QAAQ,IAAI;AAAA,MAChB,KAAK,2BAA2B,KAAK;AAAA,MACrC,KAAK,iBAAiB,KAAK;AAAA,IAAA,CAC5B;AAED,UAAM,aAAa,MAAM,MAAM,KAAK,MAAM;AAEtC,QAAA,WAAW,KAAK,SAAS,KAAK;AAChC,WAAK,qBAAqB;AAAA,IAC5B;AAEO,WAAA;AAAA,EACT;AAAA,EAEU,YACR,QACwE;AACjE,WAAA,KAAK,eAAe,MAAM;AAAA,EACnC;AAAA,EAEA,MAAM,qBAAqB,MAAqB;AAC9C,SAAK,cAAc;AACd,SAAA,iBAAgB,6BAAM,OAAM;AAC5B,SAAA,mBAAkB,6BAAM,SAAQ;AAErC,SAAK,wBAAwB;AAC7B,SAAK,kCAAkC;AAEvC,SAAK,wBAAwB;AAAA,MAC3B;AAAA,MACA;AAAA,MACA,KAAK;AAAA,IAAA;AAEP,SAAK,kCAAkC;AAAA,MACrC;AAAA,MACA;AAAA,MACA,KAAK;AAAA,IAAA;AAGP,UAAM,CAAC,sBAAsB,8BAA8B,IACzD,MAAM,QAAQ,IAAI;AAAA,MAChB,KAAK,eAAe,KAAK;AAAA,MACzB,KAAK,yBAAyB,KAAK;AAAA,IAAA,CACpC;AAEC,QAAA,qBAAqB,KAAK,SAAS,KAAK;AAC1C;AAAA,IACF;AAEI,QAAA,+BAA+B,KAAK,SAAS,KAAK;AACpD;AAAA,IACF;AAEA,SAAK,qBAAqB;AAAA,EAC5B;AAAA,EAEA,gBAAgB;AACH,eAAA,YAAY,KAAK,WAAW;AAC5B,eAAA,gBAAgB,SAAS,WAAW;AAAA,IAC/C;AAEA,eAAW,uBAAuB,KAAK,2BAA2B,QAAA,GAAW;AAC3E,0BAAoB,WAAW;AAAA,IACjC;AAAA,EACF;AAAA,EAEU,aAAa;AACrB,iBAA6B,KAAK,qBAAwB,GAAA,CAAC,aAAa;AAElE,UAAA,SAAS,SAAS,WAAW,GAAG;AAE5B,cAAA,2BAA2B,SAAS,iBAAiB;AAAA,UACzD,CAAC,0BAA0B,sBAAsB;AAAA,QAAA;AAI1C,iBAAA,WACP,SAAS,iBAAiB,WAAW,IACjC,SAAS,WACT,CAAC,CAAC,yBAAyB,UAAU,SAAS;AAEpD,iBAAS,gBACP,SAAS,iBAAiB,WAAW,KACrC,yBAAyB,WAAW,IAChC,QACA,yBAAyB,SACzB,SAAS,iBAAiB;AAEhC;AAAA,MACF;AAGM,YAAA,mBAAmB,SAAS,SAAS;AAAA,QACzC,CAAC,SAAS,KAAK;AAAA,MAAA;AAGR,eAAA,WAAW,CAAC,CAAC,iBAAiB;AAE9B,eAAA,gBACP,iBAAiB,WAAW,IACxB,QACA,iBAAiB,SAAS,SAAS,SAAS;AAAA,IAAA,CACnD;AAAA,EACH;AAAA,EAEA,uBAAuB;AACrB,SAAK,cAAc;AAEb,UAAA,4BAA4B,KAAK,2BAA2B,QAAQ;AACpE,UAAA,qBAAqB,KAAK,yBAAyB,QAAQ;AAEjE,eAAW,yBAAyB,2BAA2B;AACvC,4BAAA,mBAAmB,sBAAsB,WAC7D;AAAA,IACJ;AAEA,QAAI,0BAA0B,QAAQ;AACpC,iBAAW,kBAAkB,oBAAoB;AAC/C,cAAM,wBAAwB,0BAA0B;AAAA,UACtD,CAACuS,2BACCA,uBAAsB,OAAO,eAAe;AAAA,QAAA;AAGhD,YAAI,uBAAuB;AACH,gCAAA,mBACpB,sBAAsB,WAAW;AAAA,QACrC;AAAA,MACF;AAAA,IACF;AAEM,UAAA,WAAW,KAAK;AAChB,UAAA,gBAAgB,KAAK,eAAe,QAAQ;AAElD,eAAW,QAAQ,UAAU;AACtB,WAAA,mBAAmB,KAAK,WAAW;AAAA,IAC1C;AAEA,QAAI,SAAS,QAAQ;AACnB,iBAAW,aAAa,eAAe;AACrC,cAAM,OAAO,SAAS;AAAA,UAAK,CAACnS,UAC1BA,MAAK,OAAO;AAAA,YACV,CAAC,gBAAgB,YAAY,OAAO,UAAU;AAAA,UAChD;AAAA,QAAA;AAGF,YAAI,MAAM;AACH,eAAA,mBAAmB,KAAK,WAAW;AAAA,QAC1C;AAAA,MACF;AAAA,IACF;AAEA,SAAK,WAAW;AAAA,EAClB;AAAA,EAEA,eACE,UACA,WAAoB,CAAC,SAAS,UAC9B;AACA,iBAA6B,CAAC,QAAQ,GAAG,CAACoS,cAAa;AAEjDA,UAAAA,UAAS,SAAS,WAAW,GAAG;AACvB,mBAAA,yBAAyBA,UAAS,kBAAkB;AAC7D,gCAAsB,WAAW;AAAA,QACnC;AAEAA,kBAAS,WAAW;AACpB;AAAA,MACF;AAEAA,gBAAS,WAAW;AAAA,IAAA,CACrB;AAED,SAAK,WAAW;AAAA,EAClB;AAAA,EAEA,0BACE,uBACA,WAAoB,CAAC,sBAAsB,UAC3C;AACA,0BAAsB,WAAW;AAEjC,SAAK,WAAW;AAAA,EAClB;AAAA,EAEA,MAAM,mBAAmB;AACjB,UAAA,yBAAyB,KAAK,2BAA2B,QAAQ;AACvE,UAAM,+BAA+B,uBAAuB;AAAA,MAC1D,CAAC,0BACC,sBAAsB,oBACtB,CAAC,sBAAsB;AAAA,IAAA;AAG3B,UAAM,2BAA2B,uBAAuB;AAAA,MACtD,CAAC,0BACC,CAAC,sBAAsB,oBACvB,sBAAsB;AAAA,IAAA;AAGpB,UAAA,QAAQ,KAAK;AACnB,UAAM,eAAe,MAClB,OAAO,CAAC,SAAS,KAAK,oBAAoB,CAAC,KAAK,QAAQ,EACxD,QAAQ,CAAC,SAAS,KAAK,MAAM;AAChC,UAAM,YAAY,MACf,OAAO,CAAC,SAAS,CAAC,KAAK,oBAAoB,KAAK,QAAQ,EACxD,QAAQ,CAAC,SAAS,KAAK,MAAM;AAEhC,QAAI,6BAA6B,QAAQ;AACjC,YAAA,uBAAuB,KAAK,yBAAyB,QAAQ;AAC7D,YAAA,kCACJ,MAAM,KAAK,yBAAyB;AAAA,QAClC,6BACG;AAAA,UACC,CAAC,0BACC,qBAAqB;AAAA,YACnB,CAAC,wBACC,oBAAoB,yBACpB,sBAAsB;AAAA,UAC1B;AAAA,QAAA,EAEH,OAAO,OAAO;AAAA,MAAA;AAGjB,UAAA,gCAAgC,KAAK,SAAS,KAAK;AAC9C,eAAA;AAAA,MACT;AAAA,IACF;AAEA,QAAI,aAAa,QAAQ;AACjB,YAAA,aAAa,KAAK,eAAe,QAAQ;AACzC,YAAA,wBAAwB,MAAM,KAAK,eAAe;AAAA,QACtD,aACG;AAAA,UACC,CAAC,UACC,WAAW,KAAK,CAAC,cAAc,UAAU,YAAY,MAAM,EAAE;AAAA,QAAA,EAEhE,OAAO,OAAO;AAAA,MAAA;AAGf,UAAA,sBAAsB,KAAK,SAAS,KAAK;AACpC,eAAA;AAAA,MACT;AAAA,IACF;AAEA,QAAI,yBAAyB,QAAQ;AAC7B,YAAA,+BACJ,MAAM,KAAK,yBAAyB;AAAA,QAClC,yBAAyB,IAAI,CAAC,UAAU;AAAA,UACtC,IAAI;AAAA,UACJ,QAAQ,KAAK;AAAA,UACb,sBAAsB,KAAK;AAAA,QAAA,EAC3B;AAAA,MAAA;AAGF,UAAA,6BAA6B,KAAK,SAAS,KAAK;AAC3C,eAAA;AAAA,MACT;AAAA,IACF;AAEA,QAAI,UAAU,QAAQ;AACd,YAAA,qBAAqB,MAAM,KAAK,eAAe;AAAA,QACnD,UAAU,IAAI,CAAC,UAAU;AAAA,UACvB,IAAI;AAAA,UACJ,QAAQ,KAAK;AAAA,UACb,SAAS,KAAK;AAAA,QAAA,EACd;AAAA,MAAA;AAGA,UAAA,mBAAmB,KAAK,SAAS,KAAK;AACjC,eAAA;AAAA,MACT;AAAA,IACF;AAEM,UAAA,KAAK,qBAAqB,KAAK,WAAW;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA,EAKA,YAAY;AACJ,UAAA,yBAAyB,KAAK,2BAA2B,QAAQ;AACvE,UAAM,+BAA+B,uBAAuB;AAAA,MAC1D,CAAC,0BACC,sBAAsB,oBACtB,CAAC,sBAAsB;AAAA,IAAA;AAG3B,UAAM,2BAA2B,uBAAuB;AAAA,MACtD,CAAC,0BACC,CAAC,sBAAsB,oBACvB,sBAAsB;AAAA,IAAA;AAGpB,UAAA,QAAQ,KAAK;AACnB,UAAM,eAAe,MAClB,OAAO,CAAC,SAAS,KAAK,oBAAoB,CAAC,KAAK,QAAQ,EACxD,QAAQ,CAAC,SAAS,KAAK,MAAM;AAChC,UAAM,YAAY,MACf,OAAO,CAAC,SAAS,CAAC,KAAK,oBAAoB,KAAK,QAAQ,EACxD,QAAQ,CAAC,SAAS,KAAK,MAAM;AACzB,WAAA,CAAC,EACN,6BAA6B,UAC7B,aAAa,UACb,yBAAyB,UACzB,UAAU;AAAA,EAEd;AACF;ACpaO,MAAM,gBAAN,MAAM,uBAGHL,iBACA,sBADAA,IAAe;AAAA,EAGvB,YAAY,UAA2B,IAAI;AACnC,UAAA;AAAA,MACJ,MAAM,cAAa,eAAe;AAAA,MAClC,YAAYD;AAAAA,MACZ,GAAG;AAAA,IAAA,CACJ;AAAA,EACH;AAAA,EAEA,MAAgB,aAAa;AAC3B,UAAM,MAAM;AAEZ,SAAK,WAAW;AAAA,MACd,IAAI,WAAW,EAAE,MAAM,MAAM,OAAO,MAAM;AAAA,MAC1C,IAAI,WAAW,EAAE,MAAM,QAAQ,OAAO,MAAM,UAAU,MAAM;AAAA,MAC5D,IAAI,WAAW,EAAE,MAAM,YAAY,OAAO,OAAO,cAAc,MAAM;AAAA,MACrE,IAAI,WAAW,EAAE,MAAM,YAAY,OAAO,MAAM,UAAU,MAAM;AAAA,MAChE,IAAI,WAAW;AAAA,QACb,MAAM;AAAA,QACN,OAAO;AAAA,QACP,UAAU;AAAA,QACV,OAAO,CAAC,EAAE,SAAS,UAAU,SAAS,eAAe;AAAA,MAAA,CACtD;AAAA,MACD,IAAI,WAAW,EAAE,MAAM,SAAS,OAAO,OAAO,cAAc,MAAM;AAAA,MAClE,IAAI,WAAW;AAAA,QACb,MAAM;AAAA,QACN,OAAO;AAAA,QACP,UAAU;AAAA,QACV,UAAU;AAAA,MAAA,CACX;AAAA,MACD,IAAI,WAAW;AAAA,QACb,MAAM;AAAA,QACN,OAAO;AAAA,QACP,cAAc;AAAA,QACd,eAAe;AAAA,QACf,gBAAgB,EAAE,eAAe,IAAI,uBAAuB;AAAA,MAAA,CAC7D;AAAA,MACD,IAAI,WAAW;AAAA,QACb,MAAM;AAAA,QACN,OAAO;AAAA,QACP,cAAc;AAAA,QACd,UAAU;AAAA;AAAA,QAEV,eAAe;AAAA,QACf,gBAAgB;AAAA,UACd,UAAU;AAAA,UACV,aAAa;AAAA,UACb,gBAAgB;AAAA;AAAA,UAEhB,kBAAkB,CAAC,QAAQ,MAAM;AAAA,UACjC,WAAW,IAAI,YAAY;AAAA,QAC7B;AAAA,MAAA,CACD;AAAA,MACD,IAAI,WAAW;AAAA,QACb,MAAM;AAAA,QACN,OAAO;AAAA,QACP,eAAe;AAAA,QACf,gBAAgB,EAAE,MAAM,YAAY,MAAM,EAAE;AAAA,MAAA,CAC7C;AAAA,IAAA,CACF;AAED,SAAK,wBAAwB,GAAG,CAAC,EAAE,mBAAmB;AAC9C,YAAA,gBAAgB,KAAK,UAAU,SAAS;AAE9C,UAAI,eAAe;AACH,sBAAA,WAAW,iBAAiB,aAAa;AAAA,MACzD;AAAA,IAAA,CACD;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoBF;AAzFE,cAJW,eAIH,IAA2B;AAJ9B,IAAM,eAAN;AC7DA,MAAM,gBAAgB,WAAW;AAAA,EACtC,UAAU;AAAA,IACR,MAAMC;AAAAA,EACR;AAAA,EACA,MAAM;AAAA,IACJ,MAAM;AAAA,EACR;AAAA,EACA,YAAY;AAAA,IACV,MAAM;AAAA,EACR;AAAA,EACA,UAAU;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AAAA,EACA,kBAAkB;AAAA,IAChB,MAAM;AAAA,EACR;AAAA,EACA,iBAAiB;AAAA,IACf,MAAM;AAAA,EACR;AAAA,EACA,oBAAoB;AAAA,IAClB,MAAM;AAAA,EACR;AAAA,EACA,SAAS;AAAA,IACP,MAAM;AAAA,IACN,SAAS,MAAM,CAAC;AAAA,EAClB;AACF,CAAU;AAIH,MAAM,gBAAgB;AAAA,EAC3B,gBAAgB,CAAC,aAAkB,oBAAoBA;AAAAA,EACvD,QAAQ,MAAM;AAAA,EACd,OAAO,CAAC,MAAW,aAAa;AAAA,EAChC,WAAW,CAAC,aAAkB,CAAC,CAAC;AAClC;AChCa,MAAA,wBACX,OAAO,oBAAoB;AAMhB,MAAA,6BACX,OAAO,wBAAwB;ACX1B,MAAM,YAAY,WAAW;AAAA,EAClC,OAAO,EAAE,MAAM,OAAO;AAAA,EACtB,YAAY,EAAE,MAAM,OAAO;AAAA,EAC3B,UAAU,EAAE,MAAMA,WAAc;AAClC,CAAU;ACNG,MAAA,kBAAkB,CAC7B,qBACc;AACd,SAAO,SAAS,IAAI1R,YAAU,gBAAgB,CAAC;AACjD;ACJa,MAAA,iBAAiB,CAAC,oBAA+C;AAC5E,SAAO,SAAS,IAAI0R,WAAS,eAAe,CAAC;AAC/C;ACWa,MAAA,eAAe,CAC1B,eACAM,gBAKG;AACH,QAAM,gBAAgB;AAAA,IAAS,MAC7B,MAAMA,WAAU,EAAE,iBAAiB,MAAM,aAAa,CAAC;AAAA,EAAA;AAGzD,QAAM,YAAY,SAAS,MAAM;;AAAA,aAAAzS,MAAA,MAAM,aAAa,MAAnB,gBAAAA,IAAsB,cAAa;AAAA,GAAI;AAElE,QAAA,iBAAiB,SAAS,MAAM;;AACpC,UAAM0S,oBAAiB1S,MAAA,MAAM,aAAa,MAAnB,gBAAAA,IAAsB,iBAAgB;AAE7D,WAAO0S,kBAAiB,EAAE,GAAGA,gBAAAA,IAAmB;AAAA,EAAA,CACjD;AAEM,SAAA,EAAE,eAAe,WAAW;AACrC;AAEa,MAAA,0BAA0B,CACrC,eACA,yBACG;AACH,QAAM,iBAAiB;AAAA,IAAS,MAC9B,MAAM,cAAc,aAAa,IAC7B,MAAM,cAAc,aAAa,IACjC,MAAM,qBAAqB,aAAa;AAAA,EAAA;AAG9C,QAAM,kBAAkB;AAAA,IAAS,MAC/B,MAAM,cAAc,aAAa,IAC7B,MAAM,cAAc,cAAc,IAClC,MAAM,qBAAqB,cAAc;AAAA,EAAA;AAG/C,QAAM,aAAa;AAAA,IAAS,MAC1B,MAAM,cAAc,aAAa,IAC7B,MAAM,cAAc,SAAS,IAC7B,MAAM,qBAAqB,SAAS;AAAA,EAAA;AAGnC,SAAA;AAAA,IACL,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,WAAW;AAAA,EAAA;AAEf;AAOa,MAAA,yBAAyB,CACpC,QACAD,gBACG;AACH,QAAM,sBAAsB;AAAA,IAC1B,MAAA;;AAAM,eAAAzS,MAAA,MAAM,MAAM,MAAZ,gBAAAA,IAAe,kBAAiB;AAAA;AAAA,EAAA;AAGlC,QAAA,gBAAuC,IAAI,IAAI;AACrD;AAAA,IACE;AAAA,IACA,CAAC2S,yBAAwB;AACnB,UAAA,OAAOA,yBAAwB,UAAU;AACrC,cAAA,EAAE,eAAe,eAAA,IAAmB;AAAA,UACxCA;AAAAA,UACAF;AAAA,QAAA;AAGY,sBAAA,QAAQ,MAAM,cAAc;AAC1C;AAAA,MACF;AAEA,oBAAc,QAAQE;AAAAA,IACxB;AAAA,IACA,EAAE,WAAW,KAAK;AAAA,EAAA;AAGpB,QAAM,YAAY,SAAS,MAAM;;AAAA,aAAA3S,MAAA,MAAM,aAAa,MAAnB,gBAAAA,IAAsB,cAAa;AAAA,GAAI;AAClE,QAAA,iBAAiB,SAAS,MAAM;;AAC9B,UAAA,iBAAiB,MAAM,aAAa;AAE1C,QAAI,CAAC,gBAAgB;AACZ,aAAA;AAAA,IACT;AAEO,WAAA;AAAA,MACL,GAAG,eAAe;AAAA,MAClB,IAAGA,MAAA,MAAM,MAAM,MAAZ,gBAAAA,IAAe;AAAA,IAAA;AAAA,EACpB,CACD;AAEM,SAAA;AAAA,IACL,eAAe,SAAS,MAAM,MAAM,aAAa,CAAC;AAAA,IAClD;AAAA,IACA;AAAA,EAAA;AAEJ;AAEa,MAAA,0BAA0B,CACrC,QACA,cACG;AACG,QAAA,6BAA6B,gBAAgB,qBAAqB;AAElE,QAAA,mBAAmB,SAAS,MAAM;AAChC,UAAA,8BAA8B,MAAM,0BAA0B;AAEpE,UAAM,iBAAkB,CAAC,MAAM,SAAS,CAAC,EAAoB;AAAA,MAC3D,8BAA8B,CAAC,2BAA2B,IAAI,CAAC;AAAA,IAAA;AAGjE,WAAO,IAAI,kBAAkB,EAAE,eAAA,CAAgB;AAAA,EAAA,CAChD;AAEM,SAAA;AAAA,IACL,uBAAuB,QAAQ,gBAAgB;AAAA,IAC/C,aAAa,gBAAgB,gBAAgB;AAAA,EAAA;AAEjD;AAEa,MAAA,yBAAyB,CACpC,QACA,aACG;AACG,QAAA,4BAA4B,gBAAgB,oBAAoB;AAEhE,QAAA,mBAAmB,SAAS,MAAM;AAChC,UAAA,6BAA6B,MAAM,yBAAyB;AAElE,UAAM,iBAAkB,CAAC,MAAM,QAAQ,CAAC,EAAoB;AAAA,MAC1D,6BAA6B,CAAC,0BAA0B,IAAI,CAAC;AAAA,IAAA;AAG/D,WAAO,IAAI,kBAAkB,EAAE,eAAA,CAAgB;AAAA,EAAA,CAChD;AAEM,SAAA;AAAA,IACL,uBAAuB,QAAQ,gBAAgB;AAAA,IAC/C,aAAa,eAAe,gBAAgB;AAAA,EAAA;AAEhD;AAEa,MAAA,2BAA2B,CACtC,QACA,eACG;AACG,QAAA,8BAA8B,gBAAgB,sBAAsB;AACpE,QAAA,+BAA+B,gBAAgB,uBAAuB;AAEtE,QAAA,mBAAmB,SAAS,MAAM;AAChC,UAAA,mBAAmB,cAAc,MAAM,UAAU,CAAC,IACpD,MAAM,4BAA4B,IAClC,MAAM,2BAA2B;AAErC,UAAM,iBAAkB,CAAC,MAAM,UAAU,CAAC,EAAoB;AAAA,MAC5D,mBAAmB,CAAC,gBAAgB,IAAI,CAAC;AAAA,IAAA;AAG3C,WAAO,IAAI,kBAAkB,EAAE,eAAA,CAAgB;AAAA,EAAA,CAChD;AAEM,SAAA;AAAA,IACL,uBAAuB,QAAQ,gBAAgB;AAAA,IAC/C,aAAa,oBAAoB,gBAAgB;AAAA,EAAA;AAErD;ACxLO,MAAM,UAAU,MAAmB;AACxC,SAAO,MAAM,gBAAgB,MAAM,CAAC,KAAK;AAC3C;ACHa,MAAA,mBAAmB,CAAC,aAAuC;;AACtE,GAAAA,MAAA,YAAY,SAAU,YAAa,KAAK,cAAA,MAAxC,gBAAAA,IAAyD,iBAAiB;AAAA,IACxE;AAAA;AAEJ;ACJa,MAAA,eAAe,CAAC,aAAuC;;AAClE,GAAAA,MAAA,YAAY,SAAU,YAAa,KAAK,cAAA,MAAxC,gBAAAA,IAAyD,kBAAkB;AAAA,IACzE;AAAA;AAEJ;ACJa,MAAA,oBAAoB,CAAC,aAAuC;;AACvE,GAAAA,MAAA,YAAY,SAAU,YAAa,KAAK,cAAA,MAAxC,gBAAAA,IAAyD,iBAAiB;AAAA,IACxE;AAAA;AAEJ;ACLO,MAAM,gBAAgB,MAC3B,YAAY,SAAU,YAAa,KAAK,mBAAmB;ACAtD,MAAM,iBAAiB,MAC5B;;AAAA,WAAAA,MAAA,YAAY,aAAZ,gBAAAA,IAAsB,gBAAe;AAAA;ACGhC,MAAM,0BAA4D;AAAA,EACvE;AACF;ACJO,MAAM,iBAAiB,MAA0B;AAChD,QAAA,qBAAqB,OAAO,uBAAuB;AAEzD,UAAO,yDAAoB,gBAAe;AAC5C;ACPO,MAAM,cAAc,MAAA;;AACzB,WAAAQ,OAAAR,MAAA,YAAY,aAAZ,gBAAAA,IAAsB,gBAAtB,gBAAAQ,IAAmC,aAAY;AAAA;ACKpC,MAAA,gBAAgB,CAAC,YAAkC;AACxD,QAAA,iBAAiB,IAAI,KAAK;AAE1B,QAAA,kBAAkB,CAAC,cAAgC;AACvD,QAAI,WAAW;AACb,gBAAU,eAAe,GAAG,OAAO,EAAE,WAAW;AACxC,cAAA,YAAY,MAAM,QAAQ,QAAQ;AAExC,YAAI,CAAC,WAAW;AACd,kBAAQ,KAAK,UAAU,UAAU,IAAI,eAAe;AACpD;AAAA,QACF;AAEA,uBAAe,QAAQ;AAEvB,kBAAU,UAAU,IAAI;AAAA,MAAA,CACzB;AAED,gBAAU,gBAAgB,GAAG,OAAO,EAAE,WAAW;AACzC,cAAA,YAAY,MAAM,QAAQ,QAAQ;AAExC,YAAI,CAAC,WAAW;AACd,kBAAQ,KAAK,UAAU,UAAU,IAAI,eAAe;AACpD;AAAA,QACF;AAEA,uBAAe,QAAQ;AAEnB,YAAA;AACF,gBAAM,WAAW,MAAM,UAAU,WAAW,IAAI;AAE5C,cAAA,SAAS,KAAK,SAAS,KAAK;AAC9B,qBAAS,MAAM,EAAE,SAAS,SAAS,KAAK,KAAK;AAC7C,2BAAe,QAAQ;AACvB;AAAA,UACF;AAAA,iBACO,GAAG;AACV,kBAAQ,MAAM,CAAC;AACf,yBAAe,QAAQ;AAAA,QACzB;AAAA,MAAA,CACD;AAAA,IACH;AAAA,EAAA;AAGI,QAAA,iBAAiB,CAAC,aAA8B;AACpD,QAAI,UAAU;AACH,eAAA,eAAe,GAAG,MAAM;;AAC/B,uBAAe,QAAQ;AAEjB,SAAAR,MAAA,MAAA,QAAQ,SAAS,MAAjB,gBAAAA,IAAoB;AAAA,MAAK,CAChC;AAEQ,eAAA,YAAY,GAAG,MAAM;AAC5B,uBAAe,QAAQ;AAAA,MAAA,CACxB;AAAA,IACH;AAAA,EAAA;AAGE,MAAA,MAAM,QAAQ,SAAS,GAAG;AAC5B;AAAA,MACE,QAAQ;AAAA,MACR,CAAC,WAAW4S,IAAG,cAAc;AAC3B,uBAAe,QAAQ;AAEvB,wBAAgB,SAAS;AAEzB,kBAAU,MAAM;AACd,iDAAW;AACX,iDAAW;AAAA,QAAQ,CACpB;AAAA,MACH;AAAA,MACA,EAAE,WAAW,KAAK;AAAA,IAAA;AAAA,EACpB,OACK;AACL,UAAM,YAAY,QAAQ;AAC1B,oBAAgB,SAAS;AAEzB,oBAAgB,MAAM;AACpB,gBAAU,eAAe;AACzB,gBAAU,QAAQ;AAAA,IAAA,CACnB;AAAA,EACH;AAEI,MAAA,MAAM,QAAQ,QAAQ,GAAG;AAC3B;AAAA,MACE,QAAQ;AAAA,MACR,CAAC,UAAUA,IAAG,cAAc;AAC1B,uBAAe,QAAQ;AAEvB,uBAAe,QAAQ;AAEvB,kBAAU,MAAM;AACd,+CAAU;AAAA,QAAQ,CACnB;AAAA,MACH;AAAA,MACA,EAAE,WAAW,KAAK;AAAA,IAAA;AAAA,EACpB,OACK;AACL,UAAM,WAAW,QAAQ;AACzB,mBAAe,QAAQ;AAEvB,oBAAgB,MAAM;AACpB,eAAS,QAAQ;AAAA,IAAA,CAClB;AAAA,EACH;AAEA,SAAO,EAAE,eAAe;AAC1B;AAEa,MAAA,0BAA0B,CAAC,YAAkC;AACxE,QAAM,EAAE,eAAA,IAAmB,cAAc,OAAO;AAE1C,QAAA,gBAAgB,OAAOC,oBAAmB;AAC9C,QAAIA,iBAAgB;AAClB,YAAM,SAAS,eAAe;AAAA,QAC5B,UAAU,MAAM,QAAQ,QAAQ;AAAA,QAChC,sBAAsB;AAAA,MAAA,CACvB;AAAA,IACH;AAAA,EAAA,CACD;AACH;AC7HO,MAAM,oBAAoB,WAAW;AAAA,EAC1C,MAAM,EAAE,MAAM,OAAO;AAAA,EACrB,OAAO,EAAE,MAAM,OAAO;AAAA,EACtB,UAAU,EAAE,MAAM,SAAS,SAAS,MAAM;AAAA,EAC1C,YAAW,EAAE,MAAM,OAAO;AAC5B,CAAU;ACcmD,SAAA7Q,UAAAC,GAAA;AAAA,SAAA,OAAAA,MAAA,cAAAC,OAAAC,UAAAC,SAAAC,KAAAJ,CAAA,MAAAK,qBAAAA,CAAAA,QAAAL,CAAA;AAAA;AAE7D,MAAelB,+CAAgB;AAAA,EAC7BC,MAAM;AAAA,EACNC,OAAO6R;AAAAA,EACPzR,MAAMJ,OAAO;AACX,UAAMwB,QAAQqF;AAEd,UAAMiL,kBAAkB5F,OAAO6F,qBAAqB;AAEpD,UAAMC,WAAWrQ,SAAS,OAAMmQ,mDAAiBE,aAAY,IAAI;AAEjE,QAAIC,cAAiC;AAErC,UAAMC,kBAAkB7P,IACtBL,MAAMgQ,QAAQ,EAAGG,UAAUnS,MAAMD,IAAK,CACxC;AAEA,UAAMqS,aAAazQ,SAAS,MAAM;AAChC,YAAM0Q,iBAAiBrQ,MAAMkQ,eAAe;AAE5C,UAAIG,gBAAgB;AAClB,eAAOA;AAAAA,MACT;AAEA,UAAI,CAACJ,aAAa;AAChBA,sBAAcK,SACZ,IAAIC,WAAW;AAAA,UACb1M,UAAU7F,MAAM6F;AAAAA,UAChB9F,MAAMC,MAAMD;AAAAA,UACZW,OAAOV,MAAMU;AAAAA,QACd,CAAA,CACH;AAAA,MACF;AAEA,aAAOuR;AAAAA,IACT,CAAC;AAEDvP,UACE0P,YACA,CAACA,aAAYT,IAAGa,cAAc;AAC5B,YAAMN,mBAAkBlQ,MAAMgQ,QAAQ,EAAGG,UAAUC,YAAWrS,IAAI;AAElE,UAAI,CAACmS,oBAAmBD,aAAa;AACnCjQ,cAAMgQ,QAAQ,EAAGS,UAAUR,WAAW;AAAA,MACxC;AAEAO,gBAAU,MAAM;AACd,YAAIP,aAAa;AACfjQ,gBAAMgQ,QAAQ,EAAGU,aAAaT,WAAW;AAAA,QAC3C;AAAA,MACF,CAAC;AAAA,IACH,GACA;AAAA,MAAEnP,WAAW;AAAA,IAAK,CACpB;AAEA,UAAM;AAAA,MAAE6P;AAAAA,MAAWlB;AAAAA,IAAe,IAAImB,uBACpCR,YACAJ,QACF;AAEA,UAAMhP,WAAW6P,gBACflR,SAAS,MAAMK,MAAMoQ,UAAU,EAAEpP,QAAQ,CAC3C;AAEA,UAAMU,QAAQ/B,SAAS;AAAA,MACrBY,KAAKA,MAAMP;;AAAAA,gBAAAA,MAAAA,MAAMoQ,UAAU,MAAhBpQ,gBAAAA,IAAmB8Q;AAAAA;AAAAA,MAC9BtQ,KAAMC,OAAM;AACVT,cAAMoQ,UAAU,EAAEW,SAAStQ,CAAC;AAAA,MAC9B;AAAA,IACF,CAAC;AAED,UAAM/B,QAAQiB,SAAS,MACrB,OAAO3B,MAAMU,UAAU,WAAWsB,MAAMoQ,UAAU,EAAE1R,QAAQV,MAAMU,KACpE;AAEA+K,YACEuH,4BACAV,SAAS;AAAA,MAAEW,QAAQb;AAAAA,IAAY,CAAA,CACjC;AAEA,WAAO,MAAM;;AACX,UAAIH,eAAcjQ,MAAMoQ,UAAU;AAElC,UAAIc,aAAalR,MAAM2Q,SAAS;AAEhC,UAAItN,aACF7D,MAAAA,MAAMV,YAANU,gBAAAA,IAAAA,YAAgB;AAAA,QACd2R,MAAMnR,MAAMgQ,QAAQ,EAAGmB;AAAAA,QACvBF,QAAQhB;AAAAA,QACRD,UAAUhQ,MAAMgQ,QAAQ;AAAA,MACzB,OAAK;AAER,UAAI,CAAC3M,YAAY6N,YAAY;AAC3B,cAAME,sBAAsBC,MAAMH,UAAU;AAE5C7N,mBAAQ9E,YAAA6S,qBAAAE,WAEAtR,MAAMyP,cAAc,GAAC;AAAA,UAAA,UACjBQ;AAAAA,UAAW,cACPvO,MAAMA;AAAAA,UAAK,YACb1B,MAAMgB,QAAQ;AAAA,UAAC,uBACHP,OAAYiB,MAAMA,QAAQjB;AAAAA,SAEnD,GAAA,IAAA;AAAA,MACH;AAEA,aAAAlC,YAAAgT,YAAA;AAAA,QAAA,QAEUtB,aAAYlS;AAAAA,QAAI,SACfiC,MAAMtB,KAAK;AAAA,QAAC,YACTuR,aAAYpM;AAAAA,QAAQ,cAClB7F,MAAMwT;AAAAA,MAAU,GAAAzS,UAE3BsE,QAAQ,IAARA,WAAQ;AAAA,QAAAvE,SAAAA,MAAA,CAARuE,QAAQ;AAAA,MAAA,CAAA;AAAA;EAIjB;AACF,CAAC;AC3IM,MAAM,iBAAiB;ACmBsB,SAAAtE,UAAAC,GAAA;AAAA,SAAA,OAAAA,MAAA,cAAAC,OAAAC,UAAAC,SAAAC,KAAAJ,CAAA,MAAAK,qBAAAA,CAAAA,QAAAL,CAAA;AAAA;AAEpD,IAAI/B,QAAM;AAEV,MAAea,uCAAgB;AAAA,EAC7BC,MAAM;AAAA,EACNC,OAAOyT;AAAAA,EACPrT,MAAMJ,OAAO;AAAA,IAAEwB;AAAAA,EAAM,GAAG;AACtB,UAAMkS,UAAUzU;AAEhB,UAAM6S,kBAAkB5F,OAAO6F,qBAAqB;AAEpD,UAAM4B,SAAStR,IAAwB,IAAI;AAE3C,UAAM2P,WAAWrQ,SACf,MAAM3B,MAAMgS,YAAYF,gBAAiBE,QAC3C;AAEA,UAAMmB,OAAOxR,SAAS,MAAMK,MAAMgQ,QAAQ,EAAEmB,IAAW;AAEvD,UAAMS,UAAUjS,SAAS,MACvBK,MAAMgQ,QAAQ,EACX6B,WAAY,EACZpK,OAAQwJ,YAAWA,OAAOa,OAAO,CACtC;AAEA,UAAMC,QAAQpS,SAAS,MAAM;;AAC3B,YAAMoS,SAAmB,CAAA;AAEzB,iBAAWd,UAAUjR,MAAM4R,OAAO,GAAG;AACnC,YAAIX,OAAOpN,YAAY,CAACoN,OAAOc,MAAMC,KAAMC,UAASA,KAAKpO,QAAQ,GAAG;AAClEkO,UAAAA,OAAMd,OAAOlT,IAAI,IAAI,CACnB;AAAA,YACE8F,UAAUoN,OAAOpN;AAAAA,YACjBqO,SAAS,MAAMjB,OAAOvS,KAAK;AAAA,UAC7B,CAAC;AAAA,QAEL;AACA,YAAIyT,mBAAiCnU,MAAAA,MAAM+T,UAAN/T,gBAAAA,IAAciT,OAAOlT,UAAS;AAEnE,YAAI,CAACkG,MAAMkI,QAAQgG,cAAc,GAAG;AAClCA,2BAAiB,CAACA,cAAc;AAAA,QAClC;AAEA,YAAIlB,OAAOc,MAAMhP,QAAQ;AACvBgP,UAAAA,OAAMd,OAAOlT,IAAI,IAAI,CACnB,GAAKgU,OAAMd,OAAOlT,IAAI,KAAwB,CAAA,GAC9C,GAAGkT,OAAOc,OACV,GAAGI,cAAc;AAAA,QAErB;AAAA,MACF;AAEA,aAAOJ;AAAAA,IACT,CAAC;AAED,UAAMP,aAAa7R,SAAS,MAAM;AAChC,aACE3B,MAAMwT,cACNY,KAAKC,IAAIC,MACP,MACAV,QAAQlQ,MACL+F,OAAQwJ,YAAWA,OAAOa,OAAO,EACjCrK,OAAQwJ,YAAWA,OAAOsB,kBAAkB,cAAc,EAC1DtQ,IAAK7E,UAAqB;AAEzB,eAAOA,KAAKsB,MAAMqE,SAAS,KAAK,IAAI;AAAA,MACrC,CAAA,CACL;AAAA,IAEJ,CAAC;AAED,UAAM/B,WAAWrB,SAAS,MAAMK,MAAMgQ,QAAQ,EAAEhP,QAAQ;AAExDuB,cAAU,MAAM;AACd7B,YACEsP,UACA,CAACA,WAAUL,IAAGa,cAAc;AAC1BxQ,cAAMgQ,SAAQ,EAAEwC,WAAW9F,KAAK;AAAA,UAC9B5G,IAAI4L;AAAAA,UACJhJ,UAAU,YAAY;;AACpB,qBAAO1I,MAAAA,MAAM2R,MAAM,MAAZ3R,gBAAAA,IAAeyS,oBAAmB;AAAA,UAC1C;AAAA,UACDC,OAAOA,MAAM;;AACX1S,aAAAA,MAAAA,MAAM2R,MAAM,MAAZ3R,gBAAAA,IAAe2S;AAAAA,UAChB;AAAA,UACDC,eAAeA,MAAM;;AACnB5S,aAAAA,MAAAA,MAAM2R,MAAM,MAAZ3R,gBAAAA,IAAe4S;AAAAA,UACjB;AAAA,QACF,CAAC;AAED,cAAMC,aAAa7C,UAAS8C,wBAAwBC,GAClD,OAAO;AAAA,UAAEC;AAAAA,QAAa,MAAM;AAC1B,cAAIA,iBAAiBC,aAAaC,MAAM;AAEtC,kBAAMC,SAAQ;AACd,kBAAMA,SAAQ;AAEdnD,YAAAA,UAAS4C,cAAa;AAAA,UACxB;AAAA,QACF,CACF;AAEApC,kBAAU,MAAM;AACd,gBAAMxT,SAAQgT,UAASwC,WAAWY,UAC/BC,eAAcA,UAAUvN,OAAO4L,OAClC;AAEA,cAAI1U,WAAU,IAAI;AAChB;AAAA,UACF;AAEAgT,UAAAA,UAASwC,WAAWlG,OAAOtP,QAAO,CAAC;AAEnC6V,qBAAWS,QAAO;AAAA,QACpB,CAAC;AAAA,MACH,GACA;AAAA,QAAExS,WAAW;AAAA,MAAK,CACpB;AAAA,IACF,CAAC;AAED,WAAO,MAAM;;AACX,UAAI,CAACd,MAAMgQ,QAAQ,EAAEuD,OAAO;AAC1B,eAAO;AAAA,MACT;AAEA,UAAIlQ,YAAgB7D,MAAAA,MAAMV,YAANU,gBAAAA,IAAAA;AAEpB,YAAMgU,gBAAgBxT,MAAM4R,OAAO,EAAEnK,OAClCwJ,YAAWA,OAAOsB,kBAAkB,cACvC;AAEA,UAAI,CAAClP,UAAU;AACbA,mBAAWrD,MAAM4R,OAAO,EACrBnK,OACEwJ,YAAW,CAACuC,cAAcxB,KAAM5U,UAASA,KAAKW,SAASkT,OAAOlT,IAAI,CACrE,EACCkE,IAAKgP,YAAW;;AACf,cAAI,CAACA,OAAOlT,MAAM;AAChB,mBAAO;AAAA,UACT;AAEA,mBACEyB,MAAAA,MAAM,OAAOyR,OAAOlT,IAAI,QAAxByB,gBAAAA,IAAAA,gBAA+BjB,YAAAkV,gBAAA;AAAA,YAAA,OAEtBxC,OAAOlT;AAAAA,YAAI,QACVkT,OAAOlT;AAAAA,aACJ;AAAA,YAAEe,SAASU,MAAM,OAAOyR,OAAOlT,IAAI,UAAU;AAAA,UAAE,CAAC;AAAA,QAIjE,CAAC;AAEHsF,iBAASqJ,KACP8G,cAAcvR,IAAKgP,YAAW;AAC5B,cAAI,CAACA,OAAOlT,MAAM;AAChB,mBAAO;AAAA,UACT;AAEA,iBAAAQ,YAAAqN,UAAArN,MAAAA,CAAAA,YAAAmV,WAAA;AAAA,YAAA,mBAAA;AAAA,UAAA,GAAA;AAAA,YAAA5U,SAAAA,MAEuCmS,CAAAA,OAAOvS,KAAK;AAAA,WAAAH,GAAAA,YAAAkV,gBAAA;AAAA,YAAA,SAAA;AAAA,YAAA,cAAA;AAAA,YAAA,OAIxCxC,OAAOlT;AAAAA,YAAI,QACVkT,OAAOlT;AAAAA,UAAI,GAAA,IAAA,CAAA,CAAA;AAAA,QAIxB,CAAA,CACH;AAAA,MACF;AAEA,UAAI,CAACiC,MAAMmR,IAAI,GAAG;AAChB,eAAO;AAAA,MACT;AAEA,aAAA5S,YAAAoV,QAAArC,WAAA;AAAA,QAAA,wBAE0B;AAAA,MAAK,GACvBtT,OAAK;AAAA,QAAA,OACJ2T;AAAAA,QAAM,SACJ3R,MAAMmR,IAAI;AAAA,QAAC,SACXnR,MAAM+R,KAAK;AAAA,QAAC,YACT/R,MAAMgB,QAAQ;AAAA,QAAC,cACbhB,MAAMwR,UAAU;AAAA,MAAC,CAAA,GAAAzS,UAE5BsE,QAAQ,IAARA,WAAQ;AAAA,QAAAvE,SAAAA,MAAA,CAARuE,QAAQ;AAAA,MAAA,CAAA;AAAA;EAIjB;AACF,CAAC;ACnNY,MAAA,SAAS,YAAY,IAAI;ACG/B,MAAM,gBAAgB,WAAW;AAAA,EACtC,OAAO,EAAE,MAAM,OAAO;AAAA,EACtB,YAAY,EAAE,MAAM,OAAO;AAAA,EAC3B,UAAU,EAAE,MAAM6L,YAAe,UAAU,KAAK;AAClD,CAAU;ACL0C,SAAAnQ,UAAAC,GAAA;AAAA,SAAA,OAAAA,MAAA,cAAAC,OAAAC,UAAAC,SAAAC,KAAAJ,CAAA,MAAAK,qBAAAA,CAAAA,QAAAL,CAAA;AAAA;AAEpD,MAAelB,2CAAgB;AAAA,EAC7BC,MAAM;AAAA,EACNC,OAAO4V;AAAAA,EACPxV,MAAMJ,OAAO;AAAA,IAAEwB;AAAAA,EAAM,GAAG;AACtB,UAAMsQ,kBAAkB5F,OAAO6F,qBAAqB;AAEpD,UAAMC,WAAWrQ,SACf,MAAM3B,MAAMgS,YAAYF,gBAAiBE,QAC3C;AAEA,UAAM6D,WAAWlU,SAAS,MAAMK,MAAMgQ,QAAQ,EAAE8D,SAAS;AAEzD,UAAMC,aAAa,YAAY;;AAC7B,cAAM/T,MAAAA,MAAMgQ,QAAQ,MAAdhQ,gBAAAA,IAAiBgU;AAAAA;AAGzB,UAAMC,eAAeA,MAAM;AACzBjU,YAAMgQ,QAAQ,EAAEkE;;AAGlB,WAAO,MAAM;AAAA,UAAApU,OAAAqU;AACX,aAAA5V,YAAA6V,QAAA;AAAA,QAAA,SAAA;AAAA,QAAA,UAAA;AAAA,MAAA,GAAA;AAAA,QAAAtV,SAAAA,MAAAA;;AAAA,kBAAAP,YAAA,OAAA;AAAA,YAAA,SAAA;AAAA,aAAAA,CAAAA,YAAAyK,aAAA,MAAA;AAAA,YAAAlK,SAAAA,MAAAP,CAAAA,YAAA8V,QAAA;AAAA,cAAA,SAKiBrW,MAAM+T;AAAAA,cAAK,cACN/T,MAAMwT;AAAAA,cAAU,YAClBxT,MAAMgS;AAAAA,YAAQ,GACfxQ,KAAK,CAAA;AAAA,UAAA,CAAA,CAAA,CAAA,GAAAjB,YAAA,OAAA;AAAA,YAAA,SAAA;AAAA,UAKjBiB,GAAAA,EAAAA,MAAAA,MAAM,qBAANA,gBAAAA,IAAAA,aAA0BjB,YAAAI,UAAA;AAAA,YAAA,QAAA;AAAA,YAAA,WAGhBoV;AAAAA,YAAU,YACT,CAAC/T,MAAM6T,QAAQ;AAAA,YAAC,WACjB,CAAC7T,MAAMA,MAAMgQ,QAAQ,EAAEsE,WAAW;AAAA,UAAC,GAAAvV,UAAAe,QAE3CyU,KAAK5P,SAAS6P,UAAU,wBAAwB,CAAC,IAAA1U,QAAA;AAAA,YAAAhB,SAAAA,MAAA,CAAAgB,KAAA;AAAA,WAAAvB,GAAAA,YAAAI,UAAA;AAAA,YAAA,WAEjCsV;AAAAA,UAAY,GAAAlV,UAAAoV,SAC5BI,KAAK5P,SAAS6P,UAAU,0BAA0B,CAAC,IAAAL,SAAA;AAAA,YAAArV,SAAAA,MAAA,CAAAqV,MAAA;AAAA,UAAA,CAAA,CAAA,CAAA,CAAA;AAAA;AAAA,MAAA,CAAA;AAAA;EAMhE;AACF,CAAC;ACvDY,MAAA,aAAa,YAAY,QAAQ;;;;;;;ACM9C,UAAM,QAAQ;AACd,UAAM,OAAO;AAEb,QAAI,YAA6B;AAE3B,UAAA,aAAsC,IAAI,IAAI;AAEpD,UAAMM,kBAAiB,MAAM;AACrBzE,YAAAA,YAAW,IAAId,WAAS;AAAA,QAC5B,MAAM,MAAM;AAAA,QACZ,YAAY,MAAM;AAAA,QAClB,cAAc;AAAA,UACZ,MAAM,MAAM,oBAAoB;AAAA,UAChC,KAAK,MAAM,mBAAmB;AAAA,UAC9B,QAAQ,MAAM,sBAAsB,MAAM,mBAAmB;AAAA,QAC/D;AAAA,MAAA,CACD;AAEK,YAAA,UAAU,MAAM,QAAQ,IAAI,CAAC,WAAW,IAAI,WAAW,MAAM,CAAC;AAEpEc,gBAAS,WAAW,OAAO;AAEpBA,aAAAA;AAAAA,IAAA;AAGH,UAAA,WAAW,SAAS,MAAM;AAC1B,UAAA,MAAM,oBAAoBd,YAAU;AACtC,eAAO,MAAM;AAAA,MACf;AAEA,UAAI,CAAC,WAAW;AACF,oBAAA,SAASuF,iBAAgB;AAAA,MACvC;AAEO,aAAA;AAAA,IAAA,CACR;AAED,UAAM,UAAU,SAAS,MAAM,MAAM,QAAQ,EAAE,OAAO;AAEtD;AAAA,MACE;AAAA,MACA,OAAOzE,WAAUL,IAAG,cAAc;AAChC,cAAMK,UAAS;AAEX,YAAA,MAAMA,SAAQ,EAAE,WAAW;AACvBA,gBAAAA,SAAQ,EAAE;QAClB;AAEM,cAAA,aAAa,IAAI;AAEvB,cAAM,SAAS,OAAO,KAAKA,SAAQ,EAChC,OAAO,CAAC,QAAQA,UAAS,GAAqB,aAAa,KAAK,EAChE,IAAI,CAAC,SAAS;AAAA,UACb,WAAW,IACR,QAAQ,UAAU,EAAE,EACpB,QAAQ,UAAU,CAAC,UAAU,IAAI,MAAM,kBAAA,CAAmB,EAAE;AAAA,UAC/D,OAAOA,UAAS,GAAqB;AAAA,QACrC,EAAA;AAEJ,mBAAW,QAAQ,OAAO;AAAA,UACxB,CAAC,UAAU,MAAM,aAAa;AAAA,QAAA,GAC7B;AACU,qBAAA;AAAA;AAAA,YAET,KAAK,MAAM,GAAG,CAAC,UAAe;AAEvB,mBAAA,KAAK,WAAW,KAAK;AAAA,YAAA,CAC3B;AAAA,UAAA;AAAA,QAEL;AAEA,kBAAU,MAAM;AACd,qBAAW,QAAQ;AAAA,QAAA,CACpB;AAED,aAAK,kBAAkBA,SAAQ;AAAA,MACjC;AAAA,MACA,EAAC,WAAW,KAAI;AAAA,IAAA;AAGlB,YAAQ,uBAAuB,SAAS,EAAC,UAAU,IAAI,WAAW,CAAA,CAAC;;;;;;;;;;;;;;;;;;ACrFtD,MAAA,aAAa,YAAY,UAAU;AAAA,EAC9C;AACF,CAAC;ACFM,MAAM,iBAAiB,WAAW;AAAA,EACvC,WAAW,EAAE,MAAMxS,aAAgB,UAAU,KAAK;AAAA,EAClD,WAAW,EAAE,MAAM,SAAS,SAAS,MAAM;AAAA,EAC3C,MAAM,EAAE,MAAM,OAAO;AAAA,EACrB,YAAY,EAAE,MAAM,OAAO;AAAA,EAC3B,UAAU,EAAE,MAAM,OAAO;AAAA,EACzB,cAAc,EAAE,MAAM,OAAO;AAAA,EAC7B,kBAAkB,EAAE,MAAM,OAAO;AAAA,EACjC,oBAAoB,EAAE,MAAM,OAAO;AAAA,EACnC,UAAU,EAAE,MAAM,SAAS,SAAS,KAAK;AAAA,EACzC,SAAS,EAAE,MAAM,OAAsB,SAAS,MAAM,CAAA,EAAG;AAAA,EACzD,mBAAmB,EAAE,MAAM,SAAS,SAAS,MAAM;AACrD,CAAU;AAIH,MAAM,iBAAiB;AAAA,EAC5B,iBAAiB,CAAC,cAAmB,qBAAqBA;AAC5D;AAEO,MAAM,iBAAiB,OAAO;ACjB9B,MAAM,cAAc,WAAW;AAAA,EACpC,KAAK,EAAE,MAAM,QAAQ,UAAU,KAAK;AAAA,EACpC,QAAQ,EAAE,MAAM,aAAa,UAAU,KAAK;AAAA,EAC5C,OAAO,EAAE,MAAM,QAAQ,UAAU,KAAK;AACxC,CAAU;AAIG,MAAA,YAAY,CAAC,UAGpB;AACE,QAAA,QAAQ,SAAS,MAAM,IAAI,MAAM,KAAK,MAAM,OAAO,IAAI,CAAC;AAE9D,SAAO,EAAE,MAAM;AACjB;ACfa,MAAA,iBAAiB,CAAC,cAA8B;AAC3D,QAAM,SAAS;AAEf;AAAA,IACE;AAAA,IACA,CAAC8C,YAAWqP,IAAG,cAAc;AACrB,YAAA,aAAa,IAAI;AAEZ,iBAAA;AAAA,QACTrP,WAAU,gBAAgB,GAAG,MAAM;AAC7B,cAAA,CAACA,WAAU,qBAAqB;AAClC;AAAA,UACF;AAEA,gBAAM,QAAQ,WAAW;AAAA,YACvB,MAAM,QAAQ;AAAA,cACZA,WAAU;AAAA,cACVA,WAAU,WAAW;AAAA,YAAA,CACtB;AAAA,UAAA;AAGG,gBAAA;AAAA,YACJ,SAAS,CAAC,CAAC,eAAe,MAAM;AACxB,oBAAA,cAAa,mDAAiB,eAAc;AAC5C,oBAAA,SAASA,WAAU,WAAW,UAAU;AAE9C,oBAAMoU,SAA6B,CAAA;AAEnC,kBAAI,YAAY;AACd,uBAAO,OAAOA,QAAO;AAAA,kBACnB,aAAa,WAAW;AAAA,kBACxB,UAAU,WAAW;AAAA,gBAAA,CACtB;AAAA,cACH;AAEA,oBAAM,YACJ,QAAQ,QAAQ,MAAM,EAAE;AAAA,gBACtB,CAAC,QAAQ,OAAO,GAAa,KAAK;AAAA,cAAA,EAClC,SAAS;AAEb,kBAAI,WAAW;AACbA,uBAAM,SAAS,WAAW,QAAQ,YAAY,SAAU,KAAK;AAAA,cAC/D;AAEO,qBAAA,QAAQ,EAAE,OAAO,CAAC,QAAQA,MAAK,IAAIA,SAAQ,CAAC,EAAA,CAAG;AAAA,YAAA,CACvD;AAAA,UAAA;AAGH,gBAAM,QAAQ,MAAM,OAAO,YAAY,EAAE;AAErC,cAAA;AACF,kBAAM,eAAe,MAAM;AAE3B,gBAAI,cAAc;AAChB,oBAAM,SAAS;AAAA,gBACb;AAAA,gBACA,YAAY,SAAU;AAAA,cAAA;AAGxBpU,yBAAU,WAAW,UAAU,MAAM;AAAA,YACvC;AAAA,mBACO,GAAG;AAAA,UAAC;AAEb,gBAAM,cAAc,OAAO,SAAS,MAAM,WAAqB;AAC/D,gBAAM,WAAW,OAAO,SAAS,MAAM,QAAkB;AAErD,cAAA,CAAC,OAAO,MAAM,WAAW,KAAK,CAAC,OAAO,MAAM,QAAQ,GAAG;AACzDA,uBAAU,cAAc,EAAE,aAAa,SAAU,CAAA;AAAA,UACnD;AAAA,QAAA,CACD;AAAA,MAAA;AAGH,gBAAU,MAAM;AACd,mBAAW,QAAQ;AAAA,MAAA,CACpB;AAAA,IACH;AAAA,IACA,EAAE,WAAW,KAAK;AAAA,EAAA;AAEtB;AC7EO,MAAM,yBAAyD;AAAA,EACpE;AACF;ACNO,MAAM,2BAA2B,WAAW;AAAA,EACjD,WAAW;AAAA,IACT,MAAM9C;AAAAA,EACR;AACF,CAAU;ACHV,MAAeM,sDAAgB;AAAA,EAC7BC,MAAM;AAAA,EACNC,OAAO2W;AAAAA,EACPvW,MAAMJ,OAAO;AACX,UAAM4W,mBAAmB1K,OAAO2K,sBAAsB;AAEtD,UAAMvU,YAAYX,SAChB,MAAM3B,MAAMsC,aAAasU,iBAAkBtU,SAC7C;AAEA,WAAO,MAAM;AACX,aAAA/B,YAAAuW,cAAA;AAAA,QAAA,eAEiB9U,MAAMM,SAAS,EAAEwD;AAAAA,QAAW,YAC/B9D,MAAMM,SAAS,EAAEyD;AAAAA,QAAQ,aACxB/D,MAAMM,SAAS,EAAE0D;AAAAA,QAAS,SAC9BhE,MAAMM,SAAS,EAAEyU;AAAAA,QAAa,wBACdtU,OAAMT,MAAMM,SAAS,EAAE0U,OAAOvU,CAAC;AAAA,QAAC,qBACnCA,OAAM;AACxBT,gBAAMM,SAAS,EAAE2U,YAAYxU,CAAC;AAC9BT,gBAAMM,SAAS,EAAEqC;QACnB;AAAA,MAAC,GAAA,IAAA;AAAA;EAIT;AACF,CAAC;AC5BY,MAAA,wBAAwB,YAAY,mBAAmB;ACC7D,MAAM,uBAAuB,WAAW;AAAA,EAC7C,QAAQ,EAAE,MAAM,aAAa,UAAU,KAAK;AAAA,EAC5C,KAAK,EAAE,MAAM,KAAK;AAAA,EAClB,OAAO,EAAE,MAAM,QAAQ,UAAU,KAAK;AACxC,CAAU;ACHV,MAAe7E,2DAAgB;AAAA,EAC7BC,MAAM;AAAA,EACNC,OAAOkX;AAAAA,EACP9W,MAAMJ,OAAO;AACX,UAAM4W,mBAAmB1K,OAAO2K,sBAAsB;AAEtD,UAAMvU,YAAYX,SAAS,OAAMiV,qDAAkBtU,cAAa,IAAI;AAEpE,UAAM6U,cAAcxV,SAAS,MAAM3B,MAAMiT,MAAM;AAE/C,UAAM;AAAA,MAAEN;AAAAA,MAAWlB;AAAAA,IAAe,IAAI2F,wBACpCD,aACA7U,SACF;AAEA,WAAO,MAAM;AACX,YAAM+U,uBAAuBhE,MAAMrR,MAAM2Q,SAAS,CAAC;AAEnD,UAAI,CAAC0E,sBAAsB;AACzB,eAAO;AAAA,MACT;AAEA,aAAA9W,YAAA8W,sBAAA/D,WAEQtR,MAAMyP,cAAc,GAAC;AAAA,QAAA,UACjBzP,MAAMmV,WAAW;AAAA,QAAC,SACnBnX,MAAMhB;AAAAA,QAAK,OACbgB,MAAMsX;AAAAA,MAAG,CAAA,GAAA,IAAA;AAAA;EAItB;AACF,CAAC;ACnCM,MAAM,oBAAoB;ACE1B,MAAM,aAAa,WAAW;AAAA,EACnC,WAAW;AAAA,IACT,MAAM9X;AAAAA,EACR;AAAA,EACA,SAAS;AAAA,IACP,MAAM;AAAA,IACN,SAAS,CAAC,cAAqC,UAAU,QAAQ;AAAA,EACnE;AAAA,EACA,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AAAA,EACA,WAAW;AAAA,IACT,MAAM;AAAA,IACN,SAAS,OAAO,EAAE,UAAU,YAAY,aAAa,cAAc;AAAA,EACrE;AAAA,EACA,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AAAA,EACA,QAAQ;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA,kBAAkB;AAAA,IAChB,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AACF,CAAU;ACZV,MAAeM,wCAAgB;AAAA,EAC7BC,MAAM;AAAA,EACNC,OAAOuX;AAAAA,EACPnX,MAAMJ,OAAO;AAAA,IAAEwB;AAAAA,EAAM,GAAG;AACJG,aAAS,MAAM;AAC/B,aAAO3B,MAAMwX;AAAAA,IACf,CAAC;AAED,UAAMZ,mBAAmB1K,OAAO2K,sBAAsB;AAEtD,UAAMY,cAAc9V,SAAS,OAAMiV,qDAAkBjT,OAAM,IAAI;AAE/D,UAAM+T,UAAoDrV,IAAI,IAAI;AAElE,UAAMC,YAAYX,SAChB,MAAM3B,MAAMsC,aAAasU,iBAAkBtU,SAC7C;AAEA,UAAMqV,SAAShW,SAAS,MAAM3B,MAAM2X,UAAU3V,MAAMM,SAAS,EAAEsV,UAAU;AAEzE,UAAMC,OAAOlW,SAAS,MAAM3B,MAAM8X,QAAQ9V,MAAMM,SAAS,CAAC,CAAC;AAE3D,UAAMyV,kBAAkBpW,SAAS,MAAMK,MAAMM,SAAS,EAAEyV,eAAe;AAIvE,UAAMC,mBAAmBA,CAAC;AAAA,MAAE/E;AAAAA,MAAQgF;AAAAA,MAAMC;AAAAA,IAAuB,MAAM;AACrE,UAAIC,YAA8B;AAElC,UAAID,UAAU,cAAc;AAC1BC,oBAAYC,UAAUC;AAAAA,MACxB,WAAWH,UAAU,aAAa;AAChCC,oBAAYC,UAAUE;AAAAA,MACxB;AAEAtW,YAAMM,SAAS,EAAEiW,OAAOC,cAAcP,MAAME,SAAS;AAAA;AAGvD,QAAIM,uBAAuB;AAE3B,UAAMC,wBAAyBC,WAAiB;AAC9C,UAAIF,sBAAsB;AACxBzW,cAAMM,SAAS,EAAEa,aACfwV,MAAM1U,IAAK7E,UAASA,KAAK4C,MAAMM,SAAS,EAAEsV,UAAU,CAAC,CACvD;AAAA,MACF;AAAA;AAGFrT,cAAU,MAAM;AACd,YAAMqU,WAAW5W,MAAM0V,OAAO;AAE9BhV,YAAMmV,MAAM,CAACA,OAAMlG,IAAGa,cAAc;AAClCA,kBACE9P,MACEf,SAAS,MAAMK,MAAMM,SAAS,EAAEuW,aAAY,CAAE,GAC9C,OAAOlZ,eAAe;AACpB,gBAAMiY,aAAa5V,MAAMM,SAAS,EAAEsV;AAEpC,gBAAMkB,kBAAkBF,SACrBG,iBAAgB,EAChB9U,IAAK7E,CAAAA,UAAcA,MAAKwY,UAAU,CAAC,EACnCoB;AAEH,cAAIC,QAAQtZ,YAAYmZ,eAAe,GAAG;AACxC;AAAA,UACF;AAEAL,iCAAuB;AAEvBG,mBAASM,eAAc;AAEvB,gBAAM/D,SAAQ;AAEd,gBAAMgE,eAAetB,MAAKpO,OAAQrK,CAAAA,UAChCO,WAAWmJ,SAAS1J,MAAKwY,UAAU,CAAC,CACtC;AAEA,mBAASxY,QAAQ+Z,cAAc;AAC7BP,qBAASQ,mBAAmBha,MAAM,IAAI;AAAA,UACxC;AAEAqZ,iCAAuB;AAAA,QACzB,GACA;AAAA,UACE3V,WAAW;AAAA,QAEf,CAAA,CACF;AAAA,MACF,CAAC;AAEDJ,YACE+U,aACA,CAAC9T,IAAIgO,IAAGa,cAAc;AACpB,YAAI,CAAC7O,IAAI;AACP;AAAA,QACF;AACA,YAAI0V,mBAAmBC,SAASC,OAAO5V,GAAG6V,cAAc,OAAO,GAAI;AAAA,UACjEC,QAAQ;AAAA,UACRC,WAAW;AAAA,UACXC,OAAQpM,WAAU;AAChB,kBAAMqM,WAAWrM,MAAMqM;AACvB,kBAAMC,UAAUtM,MAAMuM;AAEtB,gBAAID,YAAYD,UAAU;AACxB;AAAA,YACF;AAEA,kBAAMG,aAAa/X,MAAMM,SAAS,EAAEwV,QAAO,EAAG+B,OAAO;AACrD,gBAAIG,WAAWhY,MAAMM,SAAS,EAAEwV,QAAO,EAAG8B,QAAQ;AAClD,gBAAIK,aAAaJ,UAAUD,WAAW,IAAI;AAE1C5X,kBAAMM,SAAS,EAAE4X,WAAWH,YAAYC,UAAUC,UAAU;AAAA,UAE9D;AAAA,QACF,CAAC;AAEDzH,kBAAU,MAAM;AACd6G,2BAAiB7I,QAAO;AAAA,QAC1B,CAAC;AAAA,MACH,GACA;AAAA,QAAE1N,WAAW;AAAA,MAAK,CACpB;AAAA,IACF,CAAC;AAED,WAAO,MAAM;AACX,YAAM8Q,UAAU5R,MAAMM,SAAS,EAC5BuR,WAAY,EACZpK,OAAQwJ,YAAWA,OAAOa,WAAWb,OAAOlT,IAAI,EAChDkE,IAAKgP,YAAW;;AACf,cAAMkH,eAAmC;AAAA,UACvClC,MAAMhF,OAAOlT;AAAAA,UACbW,OAAOuS,OAAOvS;AAAAA,UACdwM,OAAO+F,OAAO/F;AAAAA,UACdkN,UAAUnH,OAAOmH;AAAAA,UACjBC,OAAOpH,OAAOoH;AAAAA,UACdC,OAAOrH,OAAOqH,SAAS;AAAA,UACvBC,kBAAkB;AAAA,UAClB3Z,MAAMqS,OAAOrS,QAAQ;AAAA,UACrB4Z,UAAUvH,OAAOuH;AAAAA;AAGnB,YAAI,CAACvH,OAAOa,SAAS;AACnB,iBAAO;AAAA,QACT;AAEA,iBACEtS,MAAAA,MAAM,OAAOyR,OAAOlT,IAAI,QAAxByB,gBAAAA,IAAAA,gBAA+BjB,YAAAka,eAEvBN,cACK;AAAA,UACPrZ,SAAU4Z,WAIJ;;AACJ,gBAAIrV,YAAW7D,MAAAA,MAAM,OAAOyR,OAAOlT,IAAI,gBAAxByB,gBAAAA,IAAAA,YAAsC;AAAA,cACnDmZ,QAAQD,MAAMC;AAAAA,cACdrD,KAAKoD,MAAMpD;AAAAA,cACXrE;AAAAA,cACA3Q,WAAWN,MAAMM,SAAS;AAAA,YAC5B;AAEA,gBAAI+C,UAAU;AACZ,qBAAOA;AAAAA,YACT;AAEA,mBAAA9E,YAAAqa,mBAAA;AAAA,cAAA,UAEY3H;AAAAA,cAAM,OACTyH,MAAMpD;AAAAA,cAAG,SACPoD,MAAMC;AAAAA,YAAM,GAAA,IAAA;AAAA,UAGzB;AAAA,QACF,CAAC;AAAA,MAIT,CAAC;AAEH,aAAApa,YAAAsa,SAAA;AAAA,QAAA,QAEU7Y,MAAM6V,IAAI;AAAA,QAAC,WACR7V,MAAM2V,MAAM;AAAA,QAAC,iBACPK;AAAAA,QAAgB,OACzBrU,QACH+T,QAAQhU,QAAQC;AAAAA,QAAmC,yBAAA;AAAA,QAAA,UAAA;AAAA,QAAA,UAAA;AAAA,QAAA,QAKhD3D,MAAM8a;AAAAA,QAAI,QACV9a,MAAM2E;AAAAA,QAAI,sBAEI+T;AAAAA,QAAqB,oBACvB1Y,MAAM+a;AAAAA,MAAgB,GAAA;AAAA,QAAAja,SAAAA,MAEvCkB,CAAAA,MAAM+V,eAAe,EAAEjE,UAAOvT,YAAAka,eAAA;AAAA,UAAA,QAErBzY,MAAM+V,eAAe,EAAEnX,QAAQ;AAAA,UAAW,SACzCoB,MAAM+V,eAAe,EAAE7K;AAAAA,UAAK,SAC5BlL,MAAM+V,eAAe,EAAEsC;AAAAA,WAE9B,IAAA,IAAA,MACHzG,OAAO;AAAA,QAXGoH,OAAOA,MAAMxZ;;AAAAA,mBAAAA,MAAAA,MAAMwZ,UAANxZ,gBAAAA,IAAAA,gBAAejB,YAAA0a,SAAA,MAAA,IAAA;AAAA;AAAA,MAAe,CAAA;AAAA;EAe9D;AACF,CAAC;ACjOY,MAAA,UAAU,YAAY,KAAK;ACCjC,MAAM,iBAAiB,WAAW;AAAA,EACvC,WAAW,EAAE,MAAMzb,YAAe;AAAA,EAClC,YAAY,EAAE,MAAM,SAAS,SAAS,KAAK;AAC7C,CAAU;ACDV,MAAM0b,uBAAuBpb,gCAAgB;AAAA,EAC3CC,MAAM;AAAA,EACNC,OAAO0F,WAAW;AAAA,IAChByV,iBAAiB;AAAA,MACfva,MAAMwQ;AAAAA,MACNvL,UAAU;AAAA,IACZ;AAAA,EACF,CAAC;AAAA,EACDzF,MAAMJ,OAAO;AACX,WAAO,MAAM;AACX,YAAMmb,kBAAkBxZ,SAAS,MAAM3B,MAAMmb,eAAgB;AAE7D,YAAMC,mCAAmCC,gBACvC,2BACF;AAEA,YAAM7J,cAAa7P,SACjB,MAAMyZ,iCAAiC1X,KACzC;AAEA,YAAM;AAAA,QAAEiP;AAAAA,QAAWlB;AAAAA,MAAe,IAAI6J,uBACpCH,iBACA3J,WACF;AAEA,UAAI+J,2BAA2BlI,MAAMrR,MAAM2Q,SAAS,CAAC;AAErD,aAAApS,YAAAgb,0BAAqCvZ,MAAMyP,cAAc,GAAC,IAAA;AAAA;EAE9D;AACF,CAAC;AAED,MAAe3R,kDAAgB;AAAA,EAC7BC,MAAM;AAAA,EACNC,OAAO0F,WAAW;AAAA,IAChByV,iBAAiB;AAAA,MACfva,MAAMwQ;AAAAA,IACR;AAAA,EACF,CAAC;AAAA,EACDhR,MAAMJ,OAAO;AAAA,IAAEwB;AAAAA,EAAM,GAAG;AACtB,WAAO,MAAM;;AACX,UAAI6D,YAAgB7D,MAAAA,MAAMV,YAANU,gBAAAA,IAAAA;AAEpB,UAAI,CAAC6D,YAAYrF,MAAMmb,iBAAiB;AACtC9V,mBAAQ9E,YAAA2a,sBAAA;AAAA,UAAA,mBACiClb,MAAMmb;AAAAA,QAC9C,GAAA,IAAA;AAAA,MACH;AAEA,aAAA5a,YAAA,QAAA;AAAA,QAAA,SAAA;AAAA,MAAA,GAAA,CAAiD8E,QAAQ,CAAA;AAAA;EAE7D;AACF,CAAC;ACtDD,MAAevF,8CAAgB;AAAA,EAC7BC,MAAM;AAAA,EACNK,MAAMJ,OAAO;AAAA,IAAEwB;AAAAA,EAAM,GAAG;AACtB,UAAMoV,mBAAmB1K,OAAO2K,sBAAsB;AAEtD,UAAMvU,YAAYX,SAAS,MAAMiV,iBAAiBtU,SAAS;AAE3D,UAAMkZ,cAAc7Z,SAAS,MAAA;;AAAMK,cAAAA,MAAAA,MAAMM,SAAS,MAAfN,gBAAAA,IAAkByZ;AAAAA,KAAO;AAE5D,UAAMC,WAAW/Z,SAAS,MAAM;;AAC9B,UAAIgX,UAAQ3W,MAAAA,MAAMwZ,WAAW,MAAjBxZ,gBAAAA,IAAoB0Z,aAAY,CAAA;AAE5C,aAAO/C,MAAMlP,OAAQrK,UAASA,KAAKuc,UAAW,CAAA;AAAA,IAChD,CAAC;AACD,UAAMC,YAAYja,SAAS,MAAM;;AAC/B,UAAIgX,UAAQ3W,MAAAA,MAAMwZ,WAAW,MAAjBxZ,gBAAAA,IAAoB4Z,cAAa,CAAA;AAE7C,aAAOjD,MAAMlP,OAAQrK,UAASA,KAAKuc,UAAW,CAAA;AAAA,IAChD,CAAC;AAED,WAAO,MAAM;;AACX,YAAME,YAAY7Z,MAAM0Z,QAAQ,EAAEzX,IAAK7E,UAAImB,YAAA6Q,iBAAA;AAAA,QAAA,mBACPhS;AAAAA,MAAI,GAAA,IAAA,CACvC;AAED,YAAM0c,aAAa9Z,MAAM4Z,SAAS,EAAE3X,IAAK7E,UAAImB,YAAA6Q,iBAAA;AAAA,QAAA,mBACThS;AAAAA,MAAI,GAAA,IAAA,CACvC;AAED,aAAAmB,YAAA,OAAA;AAAA,QAAA,SAAA;AAAA,MAAA,GAAA,CAAAA,YAAA,OAAA;AAAA,QAAA,SAAA;AAAA,SAGOsb,CAAAA,YACAra,MAAAA,MAAM,mBAANA,gBAAAA,IAAAA,WAAwB,CAAA,GAAAjB,YAAA,OAAA;AAAA,QAAA,SAAA;AAAA,MAAA,GAAA,CAGxBub,aACAta,MAAAA,MAAM,oBAANA,gBAAAA,IAAAA,WAAyB,CAAA,CAAA,CAAA;AAAA;EAKpC;AACF,CAAC;AC3CM,MAAM,gBAAgB;AAChB,MAAA,oBAAoB,YAAY,eAAe;ACK5D,MAAe1B,4CAAgB;AAAA,EAC7BC,MAAM;AAAA,EACNC,OAAO+b;AAAAA,EACP3b,MAAMJ,OAAO;AAAA,IAAEwB;AAAAA,EAAM,GAAG;AACtB,UAAMoV,mBAAmB1K,OAAO2K,sBAAsB;AAEtD,UAAMvU,YAAYX,SAChB,MAAM3B,MAAMsC,aAAasU,iBAAkBtU,SAC7C;AAEA,UAAM0D,YAAYrE,SAAS,MAAMK,MAAMM,SAAS,EAAE0D,SAAS;AAG3D,UAAMgW,SAASra,SAAS,MAAMK,MAAMM,SAAS,aAAa2Z,QAAQ;AAElE,WAAO,MAAM;;AACX,YAAMC,eACJ1a,MAAAA,MAAM0a,eAAN1a,gBAAAA,IAAAA,YAAmB;AAAA,QAAEc,WAAWN,MAAMM,SAAS;AAAA,MAAE,QAChDN,MAAMgE,SAAS,EAAEjB,UAAU,CAAC/C,MAAMga,MAAM,IAACzb,YAAA4b,uBAAA;AAAA,QAAA,aACNna,MAAMM,SAAS;AAAA,MAAC,GAAA,IAAA,IAChD;AAEN,YAAM8Z,SAA8B,CAAA;AAEpC,UAAIpc,MAAMqc,YAAY;AACpBD,eAAOX,SAAS,MAAAlb,YAAA+b,eAA8B9a,MAAAA,KAAK;AAAA,MACrD;AAEA,aAAAjB,YAAA6V,QAAA;AAAA,QAAA,SAAA;AAAA,MAAA,GAAA;AAAA,QAAAtV,SAAAA,MAAAA;;AAAA,oBAEKU,MAAAA,MAAMV,YAANU,gBAAAA,IAAAA,YAAgB;AAAA,YAAEc,WAAWN,MAAMM,SAAS;AAAA,UAAE,OAAE/B,YAAAgc,SAAA;AAAA,YAAA,aAC3Bva,MAAMM,SAAS;AAAA,UAAC,GAAA,IAAA,GAErC4Z,UAAU;AAAA;AAAA,QAAA,GAJ0BE;AAAAA,MAAM,CAAA;AAAA;EAQnD;AACF,CAAC;AC7CM,MAAM,0BAA0B,WAAW;AAAA,EAChD,YAAY,EAAE,MAAM,KAAK;AAAA,EACzB,OAAO,EAAE,MAAM,OAAO;AAAA,EACtB,YAAY,EAAE,MAAM,OAAO;AAAA,EAC3B,UAAU;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AAAA,EACA,SAAS;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA,eAAe;AAAA,IACb,MAAM;AAAA,IACN,SAAS,CAAC,SAAc;AACtB,YAAM,QAAQ,KAAK,SAAS,KAAK,MAAM,KAAK;AAC5C,YAAM,QAAQ,KAAK,SAAS,KAAK,QAAQ,KAAK,SAAS,KAAK;AAErD,aAAA,EAAE,OAAO;IAClB;AAAA,EACF;AACF,CAAC;AAMM,MAAM,0BAA0B;AAAA,EACrC,sBAAsB,CAAC,eAAoB;AAC7C;ACtBA,MAAetc,0DAAgB;AAAA,EAC7BC,MAAM;AAAA,EACNC,OAAOwc;AAAAA,EACPtc,OAAOuc;AAAAA,EACPrc,MAAMJ,OAAO;AAAA,IAAEK;AAAAA,EAAK,GAAG;AACrB,UAAMX,aAAaiC,SAAS;AAAA,MAC1BY,KAAKA,MAAM;AACT,YAAIvC,MAAM2C,UAAU;AAClB,iBAAOsD,MAAMkI,QAAQnO,MAAMN,UAAU,IACjCM,MAAMN,aACNM,MAAMN,aACN,CAACM,MAAMN,UAAU,IACjB,CAAA;AAAA,QACN;AAEA,eAAOM,MAAMN;AAAAA,MACd;AAAA,MACD8C,KAAMC,OAAWpC,KAAK,sBAAsBoC,CAAC;AAAA,IAC/C,CAAC;AAED,UAAM7C,eAAeR,UAAc;AACjC,UAAIsd,cAAc1a,MAAMtC,UAAU;AAClC,UAAIM,MAAM2C,UAAU;AAClB,cAAM3D,SAAQ0d,YAAYtH,UAAW3S,OAAWA,MAAMrD,KAAKsE,KAAK;AAEhE,YAAI1E,SAAQ,IAAI;AACd0d,sBAAYpO,OAAOtP,QAAO,CAAC;AAAA,QAC7B,OAAO;AACL0d,sBAAYhO,KAAKtP,KAAKsE,KAAK;AAAA,QAC7B;AAEAhE,mBAAWgE,QAAQgZ;AAEnB;AAAA,MACF;AAEAhd,iBAAWgE,SAAQtE,6BAAMsE,UAAS;AAAA;AAGpC,UAAMjE,UAAyCkC,SAAS,MAAM;AAC5D,UAAIsE,MAAMkI,QAAQnO,MAAMP,OAAO,GAAG;AAChC,eAAOO,MAAMP,QAAQwE,IAAK7E,UAASY,MAAM+D,cAAc3E,IAAI,CAAC;AAAA,MAC9D;AAEA,aAAO;IACT,CAAC;AAED,UAAMud,aAA+Bhb,SAAS,MAAM;AAClD,UAAI3B,MAAMwT,YAAY;AACpB,eAAO;AAAA,UAAEtG,OAAOlN,MAAMwT;AAAAA;MACxB;AAEA,aAAO;IACT,CAAC;AAED,WAAO,MAAM;AACX,YAAMzL,QAAQ/H,MAAMU,QAAKH,YAAA,OAAA;AAAA,QAAA,SAAA;AAAA,QAAA,SAC2ByB,MAAM2a,UAAU;AAAA,MAAC,GAAA,CAChE3c,MAAMU,KAAK,CAAA,IAEZ;AAEJ,YAAMkc,OAAO5a,MAAMvC,OAAO,EAAEwE,IAAK7E,UAAS;AACxC,cAAMyd,WAAW7c,MAAM2C,WACnBX,MAAMtC,UAAU,EAAEoJ,SAAS1J,KAAKsE,KAAK,IACrCtE,KAAKsE,UAAU1B,MAAMtC,UAAU;AAEnC,eAAAa,YAAAuc,OAAA;AAAA,UAAA,OAES1d,KAAKsE;AAAAA,UAAK,UACPmZ,WAAW,SAAS;AAAA,UAAO,WAC1BhS,MAAMjL,aAAYR,IAAI;AAAA,UAAC,uBAAA;AAAA,QAAA,GAAA;AAAA,UAAA0B,SAAAA,MAG/B1B,CAAAA,KAAKsB,KAAK;AAAA,QAAA,CAAA;AAAA,MAGjB,CAAC;AAED,aAAAH,YAAA,OAAA;AAAA,QAAA,SAAA;AAAA,SAEKwH,CAAAA,OAAKxH,YAAA,OAAA;AAAA,QAAA,SAAA;AAAA,MAAA,GAAA,CAC4Cqc,IAAI,CAAA,CAAA,CAAA;AAAA;EAI9D;AACF,CAAC;AC9FM,MAAM,4BAA4B;ACEzC,MAAe9c,sDAAgB;AAAA,EAC7BC,MAAM;AAAA,EACNK,MAAMJ,OAAO;AAAA,IAAEwB;AAAAA,EAAM,GAAG;;AACtB,UAAMc,aAAY4J,MAAAA,OAAO2K,sBAAsB,MAA7B3K,gBAAAA,IAAgC5J;AAElD,UAAMya,iBAAiBpb,SAAS,OAAMW,uCAAWya,mBAAkB,IAAI;AAEvE,WAAO,MAAM;;AACX,UAAI1X,YAAgB7D,MAAAA,MAAMV,YAANU,gBAAAA,IAAAA;AAEpB,YAAMwb,kBAAkBhb,MAAM+a,cAAc;AAE5C,UAAI,CAAC1X,YAAY2X,iBAAiB;AAChC,YAAI,CAACA,gBAAgBC,uBAAwB,EAAClY,QAAQ;AACpD;AAAA,QACF;AAEAM,mBAAQ9E,YAAAqN,UAAA,MAAA,CAEHoP,gBAAgBC,uBAAsB,EAAGhZ,IAAK7E,UAAImB,YAAA2c,yBAAA;AAAA,UAAA,SAExC9d,KAAKsB;AAAAA,UAAK,cACLsc,gBAAgBxJ;AAAAA,UAAU,cAC1BwJ,gBAAgBG,SAAS/d,KAAKW,IAAI;AAAA,UAAC,wBACxB0C,OAAW;AAChCua,4BAAgBI,SAAShe,KAAKW,MAAM0C,CAAC;AAAA,UACtC;AAAA,UAAA,YACSrD,KAAKuD;AAAAA,UAAQ,WACdvD,KAAKK;AAAAA,UAAO,iBACNL,KAAK2E,iBAAiBsZ;AAAAA,QAAS,GAAA,IAAA,CAEjD,CAAC,CAEL;AAAA,MACH;AAEA,aAAA9c,YAAA,OAAA;AAAA,QAAA,SAAA;AAAA,MAAA,GAAA,CAAwC8E,QAAQ,CAAA;AAAA;EAEpD;AACF,CAAC;ACzCM,MAAM,wBAAwB;;;;;;;ACCxB,MAAA,cAAc,YAAY,SAAS;;;;;;ACQhD,UAAM,QAAQ;AAEC,cAAU;AAEX,aAAS;AAEvB,QAAI,aAA+B;AAE7B,UAAA,cAAuC,IAAI,IAAI;AAE/C,UAAA,YAAY,SAAS,MAAM;AAC3B,UAAA,MAAM,qBAAqB7F,aAAW;AACxC,eAAO,MAAM;AAAA,MACf;AAEA,UAAI,CAAC,YAAY;AACF,qBAAA;AAAA,UACX,IAAIA,YAAU;AAAA,YACZ,MAAM,MAAM;AAAA,YACZ,YAAY,MAAM;AAAA,YAClB,UAAU,MAAM,YAAY;AAAA,YAC5B,cAAc;AAAA,cACZ,MAAM,MAAM,oBAAoB;AAAA,cAChC,QAAQ,MAAM,sBAAsB;AAAA,YACtC;AAAA,UAAA,CACD;AAAA,QAAA;AAAA,MAEL;AAEO,aAAA;AAAA,IAAA,CACR;AAED,UAAM,UAAU,SAAS,MAAM,MAAM,SAAS,EAAE,OAAO;AAEvD;AAAA,MACE,SAAS,MAAM,MAAM,iBAAiB;AAAA,MACtC,CAAC,sBAAsB;AACrB,YAAI,mBAAmB;AACf,gBAAA,SAAS,EAAE;QAAkB,OAC9B;AACC,gBAAA,SAAS,EAAE;QACnB;AAAA,MACF;AAAA,MACA,EAAC,WAAW,KAAI;AAAA,IAAA;AAGlB;AAAA,MACE;AAAA,MACA,OAAO8C,eAAc;AACnB,YAAI,MAAM,UAAU;AAClBA,qBAAU,KAAK;AAAA,QACjB;AAEA,YAAI,UAAU,MAAMA,UAAS,EAAE,WAAW;AAEpC,cAAA,sBAAsB,MAAM,QAAQ;AAAA,UACxC,CAAC,WACC,QAAQ,UAAU,CAAC,WAAW,OAAO,SAAS,OAAO,IAAI,MAAM;AAAA,QAAA;AAGnE,cAAM,gBAAgB,oBAAoB;AAAA,UACxC,CAAC,WAAW,IAAI,YAAY,EAAC,SAAS,MAAM,GAAG,QAAO;AAAA,QAAA;AAGxD,kBAAU,CAAC,GAAG,eAAe,GAAG,OAAO;AAEvC,YAAI,gBAA+B,CAAA;AACxB,mBAAA,gBAAgB,MAAM,SAAS;AACxC,gBAAM,SAAS,QAAQ;AAAA,YACrB,CAAC2Q,YAAWA,QAAO,SAAS,aAAa;AAAA,UAAA;AAG3C,wBAAc,KAAK,MAAM;AAAA,QAC3B;AAEA,cAAM,WAAW,QAAQ;AAAA,UACvB,CAAC,WACC,cAAc,UAAU,CAAC,SAAS,KAAK,SAAS,OAAO,IAAI,MAAM;AAAA,QAAA;AAGrE,wBAAgB,CAAC,GAAG,eAAe,GAAG,QAAQ;AAE9C3Q,mBAAU,WAAW,aAAa;AAElC,cAAMA,WAAU;MAClB;AAAA,MACA,EAAC,WAAW,KAAI;AAAA,IAAA;AAGlB,mBAAe,SAAS;AAExB;AAAA,MACE,SAAS,MAAM,MAAM,SAAS,EAAE,UAAU;AAAA,MAC1C,CAAC,eAAe;AACd,cAAM,SAAS,EAAE,gBAAgB,GAAG,MAAM;AACxC,cAAI,WAAW,aAAa,WAAW,GAAG;AACxC,uBAAW,SAAS;AAAA,UACtB;AAAA,QAAA,CACD;AAAA,MACH;AAAA,MACA,EAAC,WAAW,KAAI;AAAA,IAAA;AAGlB,YAAQ,wBAAwB,SAAS,EAAC,WAAW,IAAI,YAAY,CAAA,CAAC;;;;;;;;;;;;;;;;;;AC9G/D,MAAM,iBAAiB,WAAW;AAAA,EACvC,UAAU;AAAA,IACR,MAAM;AAAA,EACR;AAAA,EACA,kBAAkB;AAAA,IAChB,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AACF,CAAU;ACLV,MAAexC,4CAAgB;AAAA,EAC7BC,MAAM;AAAA,EACNC,OAAOsd;AAAAA,EACPld,MAAMJ,OAAO;AAAA,IAAEwB;AAAAA,EAAM,GAAG;AACtB,UAAMoV,mBAAmB1K,OAAO2K,sBAAsB;AAEtD,UAAM0G,WAAW5b,SACf,MAAM3B,MAAMud,YAAa3G,iBAAkBtU,SAC7C;AAECkb,WAAeD,WAAWA;AAE3B,UAAM/F,aAAY7V,SAAS,MAAM;AAC/B,YAAM8b,YAAYzb,MAAMub,QAAQ;AAEhC,aAAO;AAAA,QAAElY,UAAUoY,UAAUzd,MAAMqF;AAAAA,QAAUqY,aAAa;AAAA;IAC5D,CAAC;AAED,UAAM5C,OAAOnZ,SAAS,MAAMK,MAAMub,QAAQ,EAAEzC,IAAI;AAEhD,UAAM6C,aAAa,OACjBrG,KACAsG,MACAzN,YACG;AACH,UAAI,CAACnO,MAAMub,QAAQ,EAAEzC,MAAM;AACzB3K,gBAAQmH,IAAIjS,QAAQ;AACpB;AAAA,MACF;AAEA,YAAMiS,IAAI3S;AAEVwL,cAAQmH,IAAIjS,QAAQ;AAAA;AAGtB,UAAMyS,UAAWyF,CAAAA,cAA4B;AAC3C,aAAOA,UAASlY;AAAAA;AAGlB,WAAO,MAAM;AACX,aAAA9E,YAAAgc,SAAA;AAAA,QAAA,aAEeva,MAAMub,QAAQ;AAAA,QAAC,WACjBzF;AAAAA,QAAO,UAAA;AAAA,QAAA,cAEJ9V,MAAMwV,UAAS;AAAA,QAAC,QACtBmG;AAAAA,QAAU,QACV3b,MAAM8Y,IAAI;AAAA,QAAC,sBAEG9a,MAAM+a;AAAAA,MAAgB,GADjCvZ,KAAK;AAAA;EAKtB;AACF,CAAC;AC1DY,MAAA,cAAc,YAAY,SAAS;ACCzC,MAAM,YAAY,WAAW;AAAA,EAClC,UAAU;AAAA,IACR,MAAM;AAAA,EACR;AAAA,EACA,gBAAgB,EAAE,MAAM,QAAQ,SAAS,GAAG;AAAA,EAC5C,WAAW,EAAE,MAAM,SAAS,SAAS,MAAM;AAAA,EAC3C,kBAAkB,EAAE,MAAM,SAAS;AAAA,EACnC,kBAAkB,EAAE,MAAM,SAAS,SAAS,MAAM;AAAA,EAClD,sBAAsB,EAAE,MAAM,SAAS,SAAS,KAAK;AACvD,CAAU;AAIH,MAAM,YAAY;AAAA,EACvB,WAAW,CAAC,SAA4B;AAC1C;ACAA,MAAe1B,uCAAgB;AAAA,EAC7BC,MAAM;AAAA,EACNC,OAAOwX;AAAAA,EACPtX,OAAO2d;AAAAA,EACPzd,MAAMJ,OAAO;AAAA,IAAEK;AAAAA,EAAK,GAAG;AACrB,UAAMuW,mBAAmB1K,OAAO2K,sBAAsB;AAEtD,UAAM0G,WAAW5b,SACf,MAAM3B,MAAMud,YAAa3G,iBAAkBtU,SAC7C;AAEA,UAAMwb,UAAUzb,IAA0B,IAAI;AAE9C,UAAM0b,YAAYpc,SAAS,MAAMK,MAAMub,QAAQ,EAAEQ,SAAS;AAE1D,UAAMC,iBAAiBrc,SACrB,OAAO3B,MAAMge,kBAAkBhc,MAAMub,QAAQ,EAAE1E,aAAc,EAAC,CAAC,MAAM,EACvE;AAEAtU,cAAU,MAAM;AACd7B,YACEsb,gBACCA,CAAAA,oBAAmB;;AAClBhc,SAAAA,MAAAA,MAAM8b,OAAO,MAAb9b,gBAAAA,IAAgBic,cAAcD,mBAAkB;AAAA,MAClD,GACA;AAAA,QAAElb,WAAW;AAAA,MAAK,CACpB;AAAA,IACF,CAAC;AAEDd,UAAMub,QAAQ,EAAEW,eAAenJ,GAAG,YAAY;;AAC5C,YAAMI,SAAQ;AAEdnT,OAAAA,MAAAA,MAAM8b,OAAO,MAAb9b,gBAAAA,IAAgBic,cAAcjc,MAAMgc,cAAc,KAAK;AAAA,IACzD,CAAC;AAED,UAAMG,YAAaC,kBAAgC;AACjDpc,YAAMub,QAAQ,EAAEc,UACdD,eAAe;AAAA,QAAEE,KAAKF,aAAajL,KAAKrL;AAAAA,MAAI,IAAG,CACjD,CAAA;AAAA;AAGF,UAAMyW,aAAcH,kBAA+B;AACjDpc,YAAMub,QAAQ,EAAEiB,WAAWJ,aAAajL,IAAI;AAAA;AAG9C,UAAMzF,eAAe,OAAO0Q,iBAA+B;AACzDpc,YAAMub,QAAQ,EAAEkB,aAAaL,aAAajL,IAAI;AAAA;AAGhD,UAAMwK,aAAa,OAAOC,MAAYzN,YAAsB;AAC1D,UAAIyN,KAAKc,UAAU,GAAG;AACpB;AAAA,MACF;AAEA,UAAI,CAAC1c,MAAMub,QAAQ,EAAEzC,MAAM;AACzB3K,gBAAQyN,KAAKzK,KAAK9N,QAAQ;AAC1B;AAAA,MACF;AAEA,YAAM+Y,eAAeR,KAAKzK;AAE1B,YAAMiL,aAAazZ;AAEnBwL,cAAQiO,aAAa/Y,QAAQ;AAAA;AAG/B,UAAMoE,SAAU/F,WAAe;;AAC7B1B,OAAAA,MAAAA,MAAM8b,OAAO,MAAb9b,gBAAAA,IAAgByH,OAAO/F;AAAAA;AAGzB,UAAMib,sBAAsBA,CAC1BP,cACAR,SACG;;AACH,UAAI,CAACQ,cAAc;AACjB;AAAA,MACF;AAEA,YAAMX,YAAYzb,MAAMub,QAAQ;AAEhC,UAAI,CAACvd,MAAM4e,wBAAwB,CAACR,aAAaS,QAAQ;AACvD,cAAMC,UAAUrB,UAAU5E,aAAc,EAAC,CAAC,KAAK;AAE/C7W,SAAAA,MAAAA,MAAM8b,OAAO,MAAb9b,gBAAAA,IAAgBic,cAAca;AAE9B;AAAA,MACF;AAEArB,gBAAUta,aAAa,CAACib,aAAajL,KAAKsK,UAAU7F,UAAU,CAAC,CAAC;AAAA;AASlE,UAAMmH,iBAAiBA,CACrBC,cACAC,UACAC,UACA3R,UACG;AAEHvL,YAAMub,QAAQ,EAAEwB,eACdC,aAAa7L,MACb8L,SAAS9L,MACT+L,QACF;AAAA;AAGF,UAAMC,kBAAmBvB,UAA4B;AACnDvd,WAAK,aAAaud,IAAI;AAAA;AAGxB,WAAO;AAAA,MACLE;AAAAA,MACAsB,eAAe7B;AAAAA,MACfQ;AAAAA,MACAI;AAAAA,MACAI;AAAAA,MACA7Q;AAAAA,MACAiQ;AAAAA,MACAlU;AAAAA,MACAkV;AAAAA,MACAI;AAAAA,MACAI;AAAAA;EAEH;AAAA,EACDvS,SAAS;AACP,UAAM;AAAA,MACJmO;AAAAA,MACAsE;AAAAA,MACAD;AAAAA,MACArB;AAAAA,MACAI;AAAAA,MACAI;AAAAA,MACA7Q;AAAAA,MACAiQ;AAAAA,MACAgB;AAAAA,MACAI;AAAAA,MACAI;AAAAA,MACAtS;AAAAA,IACD,IAAG;AAEJ,WAAAtM,YAAA+e,QAAA;AAAA,MAAA,SAEW;AAAA,QAAEja,UAAU;AAAA,QAAYwZ,QAAQ;AAAA,MAAU;AAAA,MAAA,oBAC/B9D;AAAAA,MAAgB,OAAA;AAAA,MAAA,SAAA;AAAA,MAAA,qBAAA;AAAA,MAAA,QAI5BgD;AAAAA,MAAS,QAAA;AAAA,MAAA,oBAEGsB;AAAAA,MAAgB,WAAA;AAAA,MAAA,wBAEZ;AAAA,MAAK,QACrB1B;AAAAA,MAAU,oBACEgB;AAAAA,MAAmB,eACxBI;AAAAA,MAAc,aAChB,KAAKQ,OAAOC;AAAAA,MAAS,gBAClBL;AAAAA,OACL;AAAA,MACPre,SAAU4Z,WAAe;;AACvB,YAAIrV,YAAWwH,MAAAA,OAAO/L,YAAP+L,gBAAAA,IAAAA,aAAiB6N;AAEhC,YAAIrV,UAAU;AACZ,iBAAOA;AAAAA,QACT;AAEA,cAAM;AAAA,UAAE8N;AAAAA,QAAM,IAAGuH;AAEjB,cAAMha,QAAQyS,KAAKA,KAAKiM,cAAcpf,MAAMU,KAAK;AAEjD,cAAM+e,SAAO5S,MAAAA,OAAO,iBAAPA,gBAAAA,IAAAA,aAAsB6N,WAAUha;AAE7C,cAAMgf,UAAQ7S,MAAAA,OAAO,kBAAPA,gBAAAA,IAAAA,aAAuB6N,WAAMna,YAAAqN,UAEtCf,MAAAA,EAAAA,MAAAA,OAAO,yBAAPA,gBAAAA,IAAAA,aAA8B6N,QAAMna,YAAAI,UAAA;AAAA,UAAA,QAAA;AAAA,UAAA,QAAA;AAAA,UAAA,WACEkK,MAAMsT,UAAUhL,IAAI;AAAA,QAAC,GAAA;AAAA,UAAArS,SAAAA,MAAA,CAAAuF,gBAAA,IAAA,CAAA;AAAA,SAAA9F,GAAAA,YAAAI,UAAA;AAAA,UAAA,QAAA;AAAA,UAAA,QAAA;AAAA,UAAA,WAGrBkK,MAAM0T,WAAWpL,IAAI;AAAA,QAAC,GAAA;AAAA,UAAArS,SAAAA,MAAA,CAAAuF,gBAAA,IAAA,CAAA;AAAA,SAAA9F,GAAAA,YAAAI,UAAA;AAAA,UAAA,QAAA;AAAA,UAAA,QAAA;AAAA,UAAA,WAGvBkK,MAAM6C,aAAayF,IAAI;AAAA,QAAC,GAAA;AAAA,UAAArS,SAAAA,MAAA,CAAAuF,gBAAA,IAAA,CAAA;AAAA,QAAA,CAAA,IAG7DwG,MAAAA,OAAO,yBAAPA,gBAAAA,IAAAA,aAA8B6N,MAAM,CAExC;AAED,eAAAna,YAAA,OAAA;AAAA,UAAA,SAAA;AAAA,QAAA,GAAA,CAAAA,YAAA,OAAA;AAAA,UAAA,SAAA;AAAA,QAEyCkf,GAAAA,CAAAA,IAAI,IAAAlf,YAAA,OAAA;AAAA,UAAA,SAAA;AAAA,UAAA,WAI7BmM,OAAMA,EAAEc,gBAAgB;AAAA,QAAC,GAAA,CAElCkS,KAAK,CAAA,CAAA,CAAA;AAAA,MAId;AAAA,KACD;AAAA,EAGP;AACF,CAAC;ACjOY,MAAA,SAAS,YAAY,IAAI;ACC/B,MAAM,gBAAgB,WAAW;AAAA,EACtC,UAAU;AAAA,IACR,MAAM;AAAA,EACR;AAAA,EACA,kBAAkB;AAAA,IAChB,MAAM;AAAA,EACR;AAAA,EACA,kBAAkB,EAAE,MAAM,SAAS,SAAS,KAAK;AACnD,CAAU;ACN2C,SAAA3e,UAAAC,GAAA;AAAA,SAAA,OAAAA,MAAA,cAAAC,OAAAC,UAAAC,SAAAC,KAAAJ,CAAA,MAAAK,qBAAAA,CAAAA,QAAAL,CAAA;AAAA;AAGrD,MAAelB,2CAAgB;AAAA,EAC7BC,MAAM;AAAA,EACNC,OAAO2f;AAAAA,EACPvf,MAAMJ,OAAO;AAAA,IAAEwB;AAAAA,EAAM,GAAG;AACtB,UAAMoV,mBAAmB1K,OAAO2K,sBAAsB;AAEtD,UAAM0G,WAAW5b,SACf,MAAM3B,MAAMud,YAAa3G,iBAAkBtU,SAC7C;AAEA,UAAMwb,UAAUzb;AAEhB,UAAMud,mBAAmBvd,IAAI,EAAE;AAC/BK,UAAMkd,kBAAmBlc,WAAU;;AACjC1B,OAAAA,MAAAA,MAAM8b,OAAO,MAAb9b,gBAAAA,IAAgByH,OAAO/F;AAAAA,IACzB,CAAC;AAED,UAAM2b,mBAAmBA,CAAC3b,OAAeyP,SAAc;AACrD,UAAI,OAAOnT,MAAMqf,qBAAqB,YAAY;AAChD,eAAOrf,MAAMqf,iBAAiB3b,OAAOyP,IAAI;AAAA,MAC3C;AAEA,UAAI,CAACyM,iBAAiBlc,MAAO,QAAO;AAEpC,aAAOyP,KAAKA,KAAKnR,MAAMub,QAAQ,EAAEvd,MAAMU,KAAK,EAAEoI,SAC5C8W,iBAAiBlc,KACnB;AAAA;AAGF,UAAMya,YAAYA,MAAM;AACtBnc,YAAMub,QAAQ,EAAEc;;AAGlB,WAAO,MAAM;;AACX,YAAM1Q,YAAUnM,MAAAA,MAAMV,YAANU,gBAAAA,IAAAA,YAAgB;AAAA,QAAE+b,UAAUvd,MAAMud;AAAAA,MAAS,OAAEhd,YAAAsf,QAAA;AAAA,QAAA,OAGrDlN,eACCmL,QAAQpa,QAAQiP;AAAAA,QAAU,YAErB3Q,MAAMub,QAAQ;AAAA,QAAC,oBACP8B;AAAAA,MAErB,GAAA,IAAA;AAED,aAAA9e,YAAA6V,QAAA;AAAA,QAAA,SAAA;AAAA,MAAA,GAAA;AAAA,QAAAtV,SAAAA,MAAA,CA2BK6M,OAAO;AAAA,QAvBN8N,QAAQA,MAAM;AAAA,cAAA3Z;AACZ,iBAAAvB,YAAA,OAAA;AAAA,YAAA,SAAA;AAAA,UAAA,GAAA,CAAAA,YAAA,OAAA;AAAA,YAAA,SAAA;AAAA,aAAAA,CAAAA,YAAAuK,SAAA;AAAA,YAAA,cAIoB9I,MAAM4d,gBAAgB;AAAA,YAAC,aACxB;AAAA,YAAI,uBACOnd,OACnBmd,iBAAiBlc,QAAQjB;AAAAA,YAAE,eAEjBsI;AAAAA,UAAM,GAAA,IAAA,CAAA,CAAA,GAAAxK,YAAA,OAAA;AAAA,YAAA,SAAA;AAAA,aAAAA,CAAAA,YAAAI,UAAA;AAAA,YAAA,WAIFwd;AAAAA,YAAS,QAAA;AAAA,UAAA,GAAApd,UAAAe,QACzByU,KAAK5P,SAAS6P,UAAU,2BAA2B,CAAC,IAAA1U,QAAA;AAAA,YAAAhB,SAAAA,MAAA,CAAAgB,KAAA;AAAA,UAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,QAK/D;AAAA,MAAC,CAAA;AAAA;EAOX;AACF,CAAC;ACnFY,MAAA,aAAa,YAAY,QAAQ;ACCjC,MAAA,cAAc,YAAY,WAAW;AAAA,EAChD;AACF,CAAC;ACFD,MAAehC,uDAAgB;AAAA,EAC7BE,OAAOkX;AAAAA,EACP9W,MAAMJ,OAAO;AACX,WAAO,MAAM;AACX,aAAAO,YAAA,OAAA;AAAA,QAAA,SAAA;AAAA,SAAAA,CAAAA,YAAAsN,SAAA;AAAA,QAAA,OAGW7N,MAAMsX,IAAIwI;AAAAA,QAAM,SAAA;AAAA,SAEZ;AAAA,QACPtT,OAAOA,MAAAjM,YAAA,OAAA;AAAA,UAAA,SAAA;AAAA,WAAAA,CAAAA,YAAAC,WAAA;AAAA,UAAA,QAAA;AAAA,UAAA,SAAA;AAAA,QAAA,GAAA,IAAA,CAAA,CAAA;AAAA,MAKT,CAAC,GAAAD,YAAA,OAAA;AAAA,QAAA,SAAA;AAAA,MAAA,GAAA,CAAAA,YAAA,QAAA;AAAA,QAAA,SAAA;AAAA,MAAA,GAAA,CAGqCP,MAAMsX,IAAIvX,IAAI,IAAAQ,YAAA,QAAA;AAAA,QAAA,SAAA;AAAA,SAAAA,CAAAA,YAAAC,WAAA;AAAA,QAAA,QAAA;AAAA,QAAA,SAAA;AAAA,MAAA,GAAA,IAAA,GAGjDR,MAAMsX,IAAIyI,KAAK,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA;EAM5B;AACF,CAAC;AC5BD,MAAejgB,oDAAgB;AAAA,EAC7BE,OAAOkX;AAAAA,EACP9W,MAAMJ,OAAO;AACX,WAAO,MAAM;AACX,YAAMggB,QAAQhgB,MAAMsX,IAAI0I,MAAM/b,IAAKgc,UAAS1f,YAAAuc,OAAA;AAAA,QAAA,OAC9BmD,KAAKnY;AAAAA,QAAE,QAAA;AAAA,QAAA,QAAA;AAAA,QAAA,SAAA;AAAA,MAAA,GAAA;AAAA,QAAAhH,SAAAA,MAChBmf,CAAAA,KAAKC,IAAI;AAAA,MAAA,CAAA,CAEb;AAED,aAAA3f,YAAA,OAAA;AAAA,QAAA,SAAA;AAAA,MAAA,GAAA,CAAgCyf,KAAK,CAAA;AAAA;EAEzC;AACF,CAAC;ACeM,MAAMG,iBAAN,MAAMA,wBAAsB3gB,kBAIzB4gB,sBAJyB5gB,IAGjC;AAAA,EAOA6gB,YAAY5gB,UAA4B,IAAI;AAC1C,UAAM;AAAA,MACJM,MAAMogB,eAAcC,eAAe;AAAA,MACnCE,YAAYrP;AAAAA,MACZ,GAAGxR;AAAAA,IACL,CAAC;AAPH8gB,wCAAsC;AASpC,SAAKC,mBAAmB,KAAKC,SAC3B,IAAK,cAAcC,aAAa;AAAA,MAC9BC,iBAAiBxN,MAAW;AAC1BA,eAAO,MAAMwN,iBAAiBxN,IAAI;AAElC,YAAIA,KAAKyN,UAAU,GAAG;AACpBC,kBAAQC,eAAe3N,MAAM,OAAO;AAAA,QACtC;AAEA,eAAOA;AAAAA,MACT;AAAA,IACD,EAAA,CACH;AAAA,EACF;AAAA,EAEA,MAAgB4N,aAAa;AAC3B,UAAM,MAAMA;AAEZ,UAAM,KAAKC;AAEX,SAAKvF,OAAOG,YAAY,CACtB,IAAIqF,cAAa,GACjB,IAAIC,aACJ,IAAI9P,kBAAgB;AAAA,MAClBmD,eAAe;AAAA,MACfoH,WAAWA,MACTjV;;AAAAA,iBAAAA,OAAAA,OAAAA,MAAAA,YAAYC,aAAZD,gBAAAA,IAAsBM,gBAAtBN,gBAAAA,IAAmCya,aAAnCza,gBAAAA,IAA6C0a,YAAW;AAAA;AAAA,IAC3D,CAAA,CAAC;AAGJ,SAAKpc,aAAcC,WAAU;AAE3BA,YAAMG,aAAa,WAAW,MAAM,CAAC;AAAA,IACvC,CAAC;AAED,SAAKX,WAAW4c,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOzB,IAAIC,aAAa;AAAA,QACfvhB,MAAM;AAAA,QACNW,OAAO;AAAA,QACP6T,eAAe;AAAA,QACfnL,QAAQ;AAAA,MACV,CAAC;AAAA,MACD,IAAIkY,aAAa;AAAA,QACfvhB,MAAM;AAAA,QACNW,OAAO;AAAA,QACP6T,eAAe;AAAA,MACjB,CAAC;AAAA,MACD,IAAI+M,aAAa;AAAA,QACfvhB,MAAM;AAAA,QACNW,OAAO;AAAA,QACP6T,eAAe;AAAA,MACjB,CAAC;AAAA,MACD,IAAI+M,aAAa;AAAA,QACfvhB,MAAM;AAAA,QACNW,OAAO;AAAA,QACP6T,eAAe;AAAA,MACjB,CAAC;AAAA,MACD,IAAI+M,aAAa;AAAA,QACfvhB,MAAM;AAAA,QACNW,OAAO;AAAA,QACP6T,eAAe;AAAA,MACjB,CAAC;AAAA,MACD,IAAI+M,aAAa;AAAA,QACfvhB,MAAM;AAAA,QACNW,OAAO;AAAA,QACP6T,eAAe;AAAA,MAChB,CAAA;AAAA,IAAC,CACH;AAED,SAAK8M,WAAW;AAAA,MACd,IAAIE,YAAY;AAAA,QACdxhB,MAAM;AAAA,QACNW,OAAO;AAAA,QACP0Z,UAAU;AAAA,QACV7F,eAAe;AAAA,UACbxU,MAAM;AAAA,UACN4S,WAAW6O;AAAAA,QACb;AAAA,MACF,CAAC;AAAA,MACD,IAAID,YAAY;AAAA,QACdxhB,MAAM;AAAA,QACNW,OAAO;AAAA,QACP0Z,UAAU;AAAA,QACV7F,eAAe;AAAA,UACbxU,MAAM;AAAA,UACN4S,WAAW8O;AAAAA,QACb;AAAA,MACF,CAAC;AAAA,MACD,IAAIF,YAAY;AAAA,QACdxhB,MAAM;AAAA,QACNW,OAAO;AAAA,QACP0Z,UAAU;AAAA,QACV7F,eAAe;AAAA,QACf9C,gBAAgB;AAAA,UACdhS,SAAS,CACP;AAAA,YAAEiE,OAAO;AAAA,YAAGhD,OAAO;AAAA,UAAM,GACzB;AAAA,YAAEgD,OAAO;AAAA,YAAGhD,OAAO;AAAA,YAAOE,MAAM;AAAA,UAAS,GACzC;AAAA,YAAE8C,OAAO;AAAA,YAAGhD,OAAO;AAAA,YAAME,MAAM;AAAA,WAAW;AAAA,QAE9C;AAAA,MACF,CAAC;AAAA,MACD,IAAI2gB,YAAY;AAAA,QAAExhB,MAAM;AAAA,QAAQW,OAAO;AAAA,QAAM0Z,UAAU;AAAA,MAAQ,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUhE,IAAIsH,kBAAkB;AAAA,QACpBxU,OAAO;AAAA,QACPyU,SAAS,CACP,IAAIC,aAAa;AAAA,UACflhB,OAAO;AAAA,UACPmhB,SAAS,OAAOvK,QAAQ;AACtB,iBAAKiJ,eAAe,MAAMld,SAASye,eAAe;AAAA,cAChD9P,UAAU,KAAKwO;AAAAA,cACfuB,OAAOzK,IAAIxP;AAAAA,YACb,CAAC;AAAA,UACF;AAAA,UACD6T,WAAYqG,YAA8BA,OAAOpB,UAAU;AAAA,QAC7D,CAAC,GACD,IAAIgB,aAAa;AAAA,UACflhB,OAAO;AAAA,UACPmhB,SAAS,OAAOvK,QAAQ;AACtB,kBAAM/T,YAAY,MAAMF,SAAS4e,QAAQ;AAAA,cACvCla,OAAO;AAAA,cACPmM,SAAS;AAAA,cACTtT,MAAM;AAAA,cACNshB,kBAAkB;AAAA,cAClBC,mBAAmB;AAAA,YACrB,CAAC;AACD,gBAAI,CAAC5e,WAAW;AACd;AAAA,YACF;AACA,iBAAK6e,eAAeC;AAEpB,gBAAI;AACF,oBAAMC,WAAW,MAAM,KAAKC,gBAAgBC,cAE1C;AAAA,gBACAC,QAAQ,kBAAkBnL,IAAIxP,EAAE;AAAA,cAClC,CAAC;AAED,kBAAIwa,SAASnP,KAAKuP,SAAS,KAAK;AAC9BC,yBAASnW,MAAM;AAAA,kBACb0H,SAASoO,SAASnP,KAAK1G,OAAO;AAAA,gBAChC,CAAC;AACD;AAAA,cACF;AAEApJ,uBAAS4e,QAAQ;AAAA,gBACfla,OAAO;AAAA,gBACPmM,SAAO3T,YAAA,KAAA,MAAA,CAAAA,YAAA8F,QAAAA,MAAAA,CAAAA,4BAAA9F,YAAA,QAAA;AAAA,kBAAA,SAIY;AAAA,oBAAEqiB,OAAO;AAAA,oBAAWC,aAAa;AAAA,kBAAM;AAAA,mBACjDP,CAAAA,SAASnP,KAAKA,IAAI,CAAA5S,GAAAA,YAAAuN,WAAA;AAAA,kBAAA,WAED;AAAA,kBAAM,aAAA;AAAA,gBAAA,GAAA;AAAA,kBAAAhN,SAAAA,MAAAP,CAAAA,YAAAC,WAAA;AAAA,oBAAA,SAEf;AAAA,sBAAEoiB,OAAO;AAAA,sBAAWE,QAAQ;AAAA,oBAAW;AAAA,oBAAA,WACrCjY,MAAM;AACb,4BAAMkY,QAAQjZ,SAASkZ,cAAc,OAAO;AAC5ClZ,+BAAS+G,KAAKoS,YAAYF,KAAK;AAC/BA,4BAAMG,aAAa,SAASZ,SAASnP,KAAKA,IAAI;AAC9C4P,4BAAMI,OAAM;AACZ,0BAAIrZ,SAASsZ,YAAY,MAAM,GAAG;AAChCtZ,iCAASsZ,YAAY,MAAM;AAAA,sBAC7B;AACAtZ,+BAAS+G,KAAKwS,YAAYN,KAAK;AAC/BJ,+BAASrW,QAAQ;AAAA,wBACf4H,SAAS;AAAA,sBACX,CAAC;AAAA,oBACF;AAAA,oBAAA,QAAA;AAAA,kBAAA,GAAA,IAAA,CAAA;AAAA,iBAMV,CAAA,CAAA,CAAA,CAAA;AAAA,gBACDtT,MAAM;AAAA,gBACNshB,kBAAkB;AAAA,gBAClBC,mBAAmB;AAAA,cACrB,CAAC;AAAA,YACF,SAAQzV,GAAG;AACVC,sBAAQH,MAAME,CAAC;AACfiW,uBAASnW,MAAM;AAAA,gBAAE0H,SAAS;AAAA,cAAO,CAAC;AAAA,YACpC,UAAU;AACR,mBAAKkO,eAAekB;YACtB;AAAA,UACD;AAAA,UACD3H,WAAYqG,YAA8BA,OAAOpB,UAAU;AAAA,QAC7D,CAAC,GACD,IAAIgB,aAAa;AAAA,UACflhB,OAAO;AAAA,UACPmhB,SAAS,OAAOvK,QAAQ;AACtB,kBAAM/T,YAAY,MAAMF,SAASsD,SAASsb,QAAQ;AAAA,cAChDla,OAAO;AAAA,cACPmM,SAAS;AAAA,cACTtT,MAAM;AAAA,cACNshB,kBAAkB;AAAA,cAClBC,mBAAmB;AAAA,YACrB,CAAC;AACD,gBAAI,CAAC5e,WAAW;AACd;AAAA,YACF;AACA,iBAAK6e,eAAeC;AAEpB,kBAAMC,WACJ,MAAM,KAAK9B,iBAAiB+B,gBAAgBgB,OAAO;AAAA,cACjDzb,IAAIwP,IAAIxP;AAAAA,cACR0b,QAAQ;AAAA,cACRC,YAAY;AAAA,cACZC,gBAAgB;AAAA,YAClB,CAAC;AAEH,gBAAIpB,SAASnP,KAAKuP,SAAS,KAAK;AAC9BC,uBAASnW,MAAM;AAAA,gBAAE0H,SAASoO,SAASnP,KAAK1G;AAAAA,cAAI,CAAC;AAC7C;AAAA,YACF;AACA,iBAAK2V,eAAekB;AACpB,iBAAK3e,KAAI;AAAA,UACV;AAAA,UACDgX,WAAYqG,YAA8BA,OAAOwB,WAAW;AAAA,QAC9D,CAAC,GACD,IAAIG,WAAW;AAAA,UACbhI,WAAYqG,YAA8BA,OAAOpB,UAAU;AAAA,QAC7D,CAAC,GACD,IAAIgD,cAAc;AAAA,MAErB,CAAA;AAAA,IAAC,CACH;AAAA,EACH;AAAA,EAEA,MAAgB5C,uBAAuB;AACrC,UAAMR,mBAAmB,KAAKA;AAE9B,UAAMA,iBAAiBhc;AAEvBgc,qBAAiBa,WAAW,CAC1Bb,iBAAiBrO,UAAU,IAAI,GAC/B,IAAII,WAAW;AAAA,MACbxS,MAAM;AAAA,MACNW,OAAO;AAAA,MACPmjB,cAAc;AAAA,MACdtP,eAAe;AAAA,MACf1O,UAAU;AAAA,MACV4L,gBAAgB;AAAA,QACdhS,SAAS,CACP;AAAA,UAAEiB,OAAO;AAAA,UAAMgD,OAAO;AAAA,QAAE,GACxB;AAAA,UAAEhD,OAAO;AAAA,UAAOgD,OAAO;AAAA,SAAG;AAAA,MAE9B;AAAA,IACF,CAAC,GACD8c,iBAAiBrO,UAAU,OAAO,GAClCqO,iBAAiBrO,UAAU,MAAM,CAAC,CACnC;AAEDqO,qBAAiBsD,kBAAkB/O,GAAG,MAAM;AAC1C,WAAKgP,cAAa;AAElB,aAAO;AAAA,IACT,CAAC;AAED,UAAMC,cAAcxD,iBAAiBrO,UAAU,OAAO;AAEtDqO,qBAAiBrO,UAAU,OAAO,EAAG8R,iBAAiBlP,GAAG,CAAC;AAAA,MAAErR;AAAAA,IAAM,MAAM;AACtEsgB,kBAAYhhB,WAAWU,UAAU;AAAA,IACnC,CAAC;AAAA,EACH;AAAA,EAEA,MAAMqgB,gBAAgB;;AACpB,QAAI;AACF,UAAI,KAAKvD,iBAAiBlc,SAAS;AACjC;AAAA,MACF;AAEA,WAAKkc,iBAAiB0D,kBAAmB,EAAC7B,aAAY;AAEtD,YAAM8B,QAAQ,KAAK3D,iBAAiBrN;AAEpC,UAAI,CAAE,MAAM,KAAKqN,iBAAiB9V,SAAU,GAAG;AAC7CiY,iBAASnW,MAAM;AAAA,UAAE0H,SAAS;AAAA,QAAU,CAAC;AACrC;AAAA,MACF;AAEA,YAAMoO,WAAW,MAAM,KAAKC,gBAAgBC,cAAc;AAAA,QACxDC,QAAQ;AAAA,QACRtP,MAAM;AAAA,UACJrL,IAAIqc,MAAMrc;AAAAA,UACVsc,MAAMD,MAAME;AAAAA,UACZrE,OAAOmE,MAAMnE,SAAS,CAAE;AAAA,UACxBsE,eAAeH,MAAMvD,MAAMzf,SAAS;AAAA,QACtC;AAAA,MACF,CAAC;AAED,WAAImhB,qCAAUnP,KAAKuP,SAAQ,KAAK;AAC9BC,iBAASnW,MAAM;AAAA,UAAE0H,UAASoO,qCAAUnP,KAAK1G,QAAO;AAAA,QAAO,CAAC;AACxD;AAAA,MACF;AAEA,OAAA1N,MAAA,KAAKwhB,iBAAL,gBAAAxhB,IAAmByR;AAEnB,UAAI8R,qCAAUnP,KAAKA,MAAM;AACvB9P,iBAASqN,aAAa;AAAA,UACpB3I,OAAO;AAAA,UACPmF,OAAO;AAAA,UACP2D,MAAMA,MAAM;AACV,mBAAAtQ,YAAA,OAAA;AAAA,cAAA,SAAA;AAAA,eAAAA,CAAAA,YAAAC,WAAA;AAAA,cAAA,QAAA;AAAA,cAAA,SAAA;AAAA,eAAA6F,IAAAA,GAAAA,4BAAA9F,YAAA,QAAA;AAAA,cAAA,SAAA;AAAA,eAAAA,CAAAA,YAAAgkB,iBAAA,MAAA;AAAA,cAAAzjB,SAAAA,MAAA,CAE0IwhB,SAASnP,KAAKA,IAAI;AAAA,YAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,UAG9J;AAAA,QACF,CAAC;AAAA,MACH,OAAO;AACLwP,iBAASrW,QAAQ;AAAA,UAAE4H,SAAS;AAAA,QAAO,CAAC;AAAA,MACtC;AAEA,WAAKvP,KAAI;AAAA,IACV,SAAQ+H,GAAG;AACVC,cAAQH,MAAME,CAAC;AACfiW,eAASnW,MAAM;AAAA,QAAE0H,SAAS;AAAA,MAAO,CAAC;AAAA,IACpC,UAAU;AACR,WAAKsM,iBAAiB0D,kBAAmB,EAACZ,gBAAe;AAAA,IAC3D;AAAA,EACF;AAAA,EAEAkB,WAAWplB,MAAyC;;AAClD,WAAO;AAAA,MACL,GAAGA;AAAAA,MACH4gB,SACE5gB,MAAAA,KAAK4gB,UAAL5gB,gBAAAA,IAAY6E,IAAKgc,WAAU;AAAA,QACzBnY,IAAImY,KAAKnY;AAAAA,QACT/H,MAAMkgB,KAAKlgB,QAAQ;AAAA,QACnBmgB,MAAMD,KAAKC,QAAQ;AAAA,MACpB,QAAM,CAAE;AAAA,MAEXtf,MAAMxB,KAAKwhB,UAAU,IAAI,IAAI;AAAA;EA8BjC;AACF;AAxYE,cAJWT,gBAIHC,IAA2B;AAJ9B,IAAMD,gBAAN;ACVA,MAAM,qBAAN,MAAM,4BAA0B3gB,kBAC7B,sBAD6BA,IAAwB;AAAA,EAO7D,YAAY,UAA2B,IAAI;AACnC,UAAA;AAAA,MACJ,MAAM,mBAAkB,eAAe;AAAA,MACvC,YAAYyR;AAAAA,MACZ,GAAG;AAAA,IAAA,CACJ;AATH;AAEA,uCAA6B;AAS3B,UAAM,kBAAkB;AAExB,SAAK,cAAc,KAAK;AAAA,MACtB,IAAK,cAAc,cAAc;AAAA,QAC/B,MAAgB,YAAY,QAA6B;;AACvD,gBAAM,WAAW,MAAM,KAAK,gBAAgB,cAE1C;AAAA,YACA,QAAQ;AAAA,YACR,MAAM;AAAA,YACN,MAAM;AAAA,cACJ,IAAI,KAAK;AAAA,cACT,IAAI,KAAK;AAAA,cACT,SAAQlS,MAAA,gBAAgB,gBAAhB,gBAAAA,IAA6B;AAAA,YACvC;AAAA,YACA,aAAa,IAAI,YAAY,CAAC,WAAW;AACvC,mBAAK,aAAa;AAAA,YAAA,CACnB;AAAA,UAAA,CACF;AAED,eAAK,aAAa;AAEX,iBAAA;AAAA,QACT;AAAA,MAAA,EACC;AAAA,IAAA;AAAA,EAEP;AAAA,EAEA,eAAe,MAAqB;AAClC,UAAM,UAAU,KAAK;AAErB,SAAK,cAAc;AACd,SAAA,YAAY,QAAQ,CAAA,CAAE;AAE3B,QAAI,CAAC,MAAM;AACJ,WAAA,QAAQ,CAAA,CAAE;AACf;AAAA,IACF;AAEK,SAAA,aAAa,CAAC,UAAU;AAC3B,YAAM,MAAM;AAEZ,YAAM,aAAa,UAAU,KAAK,KAAK,EAAE;AAAA,IAAA,CAC1C;AAED,QAAI,SAAS;AACX,WAAK,KAAK;AAAA,IACZ;AAAA,EACF;AAAA,EAEA,MAAgB,aAAa;AAC3B,UAAM,MAAM;AAEN,UAAA,KAAK,YAAY;AAElB,SAAA,WAAW,gBAAgB,GAAG,MAAM;AAClC,WAAA,YAAY,WAAW;IAAS,CACtC;AAED,SAAK,YAAY,OAAO,YAAY,CAAC,IAAI,eAAe;AAExD,UAAM,cAAc,KAAK,YAAY,UAAU,OAAO;AACtD,QAAI,aAAa;AACf,kBAAY,UAAU;AAAA,IACxB;AAEK,SAAA,OAAO,YAAY,CAAC,IAAI,iBAAiB,IAAI,WAAW;AAE7D,SAAK,WAAW;AAAA,MACd,IAAI,YAAY,EAAE,MAAM,mBAAmB,OAAO,MAAM;AAAA,MACxD,IAAI,kBAAkB;AAAA,QACpB,SAAS,CAAC,IAAI,cAAc;AAAA,MAAA,CAC7B;AAAA,IAAA,CACF;AAAA,EACH;AACF;AAxFE,cADW,oBACH,IAA2B;AAD9B,IAAM,oBAAN;AClBA,MAAM,oBAAN,MAAM,2BAAyBmS,iBAC5B,sBAD4BA,IAAS;AAAA,EAG7C,YAAY,UAA2B,IAAI;AACnC,UAAA;AAAA,MACJ,MAAM,kBAAiB,eAAe;AAAA,MACtC,YAAYD;AAAAA,MACZ,GAAG;AAAA,IAAA,CACJ;AAAA,EACH;AAAA,EAEA,MAAgB,aAAa;AAC3B,UAAM,MAAM;EAad;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQF;AAhCE,cADW,mBACH,IAA2B;AAD9B,IAAM,mBAAN;ACKA,MAAM,qBAAN,MAAM,4BAAoDC,iBAIvD,sBAJuDA,IAG/D;AAAA,EAGA,YAAY,UAAU,IAAI;AAClB,UAAA;AAAA,MACJ,MAAM,mBAAkB,eAAe;AAAA,MACvC,YAAYD;AAAAA,MACZ,GAAG;AAAA,IAAA,CACJ;AAAA,EACH;AAAA,EAEA,MAAM,aAAa;AACjB,UAAM,MAAM;AAEZ,SAAK,WAAW;AAAA,MACd,IAAI,WAAW,EAAE,MAAM,MAAM,OAAO,MAAM;AAAA,MAC1C,IAAI,WAAW;AAAA,QACb,MAAM;AAAA,QACN,OAAO;AAAA,QACP,UAAU;AAAA,QACV,OAAO,CAAC,EAAE,SAAS,YAAY,SAAS,YAAY;AAAA,MAAA,CACrD;AAAA,MACD,IAAI,WAAW;AAAA,QACb,MAAM;AAAA,QACN,OAAO;AAAA,QACP,eAAe;AAAA,QACf,gBAAgB;AAAA,UACd,MAAM;AAAA,QACR;AAAA,MAAA,CACD;AAAA,IAAA,CACF;AAAA,EACH;AACF;AA/BE,cAJW,oBAIH,IAA2B;AAJ9B,IAAM,oBAAN;ACQA,MAAM,sBAAN,MAAM,6BAAqDzR,kBAIxD,sBAJwDA,IAGhE;AAAA,EAGA,YAAY,UAAU,IAAI;AAClB,UAAA;AAAA,MACJ,MAAM,oBAAmB,eAAe;AAAA,MACxC,YAAYyR;AAAAA,MACZ,GAAG;AAAA,IAAA,CACJ;AAAA,EACH;AAAA,EAEA,MAAM,aAAa;AACjB,UAAM,MAAM;AAEZ,SAAK,OAAO,YAAY;AAAA,MACtB,IAAI,cAAc;AAAA,MAClB,IAAI,UAAU;AAAA,MACd,IAAIG,kBAAgB;AAAA,QAClB,eAAe;AAAA,QACf,WAAW,MACT;;AAAA,mBAAAC,OAAA9R,OAAAR,MAAA,YAAY,aAAZ,gBAAAA,IAAsB,gBAAtB,gBAAAQ,IAAmC,aAAnC,gBAAA8R,IAA6C,YAAW;AAAA;AAAA,MAAA,CAC3D;AAAA,IAAA;AAGH,SAAK,WAAW;AAAA,MACd,IAAI,YAAY,EAAE,MAAM,aAAa,OAAO,QAAQ;AAAA,MACpD,IAAI,YAAY,EAAE,MAAM,aAAa,OAAO,QAAQ;AAAA,MACpD,IAAI,kBAAkB;AAAA,QACpB,OAAO;AAAA,QACP,SAAS;AAAA,UACP,IAAI,WAAW;AAAA,UACf,IAAI,aAAa,EAAE,OAAO,MAAM;AAAA,UAChC,IAAI,aAAa;AAAA,YACf,OAAO;AAAA,YACP,MAAM;AAAA,YACN,SAAS,OAAO,QAAQ;AACtB,mBAAK,eAAe;AAEpB,oBAAM,SAAS,MAAM,KAAK,gBAAgB,cAAc;AAAA,gBACtD,QAAQ,WAAW,IAAI,EAAE;AAAA,cAAA,CAC1B;AAED,mBAAK,eAAe;AAChB,kBAAA,OAAO,KAAK,SAAS,KAAK;AAC5B,yBAAS,MAAM;AAAA,kBACb,SAAS,OAAO,KAAK,OAAO;AAAA,gBAAA,CAC7B;AACD;AAAA,cACF;AACA,uBAAS,QAAQ,EAAE,SAAS,OAAQ,CAAA;AAEpC,mBAAK,KAAK;AAAA,YACZ;AAAA,YACA,WAAW,CAAC,QAAQ,IAAI,UAAU;AAAA,UAAA,CACnC;AAAA,UACD,IAAI,aAAa;AAAA,YACf,OAAO;AAAA,YACP,MAAM;AAAA,YACN,SAAS,OAAO,QAAQ;AACtB,mBAAK,eAAe;AAEpB,oBAAM,SAAS,MAAM,KAAK,gBAAgB,cAAc;AAAA,gBACtD,QAAQ,UAAU,IAAI,EAAE;AAAA,cAAA,CACzB;AAED,mBAAK,eAAe;AAChB,kBAAA,OAAO,KAAK,SAAS,KAAK;AAC5B,yBAAS,MAAM;AAAA,kBACb,SAAS,OAAO,KAAK,OAAO;AAAA,gBAAA,CAC7B;AACD;AAAA,cACF;AACA,uBAAS,QAAQ,EAAE,SAAS,OAAQ,CAAA;AAEpC,mBAAK,KAAK;AAAA,YACZ;AAAA,YACA,WAAW,CAAC,QAAQ,IAAI,UAAU;AAAA,UAAA,CACnC;AAAA,QACH;AAAA,MAAA,CACD;AAAA,IAAA,CACF;AAAA,EACH;AACF;AAjFE,cAJW,qBAIH,IAA2B;AAJ9B,IAAM,qBAAN;ACRA,MAAM,0BAAN,MAAM,iCAGHH,iBACA,sBADAA,IAAe;AAAA,EAGvB,YAAY,UAAU,IAAI;AAClB,UAAA;AAAA,MACJ,MAAM,wBAAuB,eAAe;AAAA,MAC5C,YAAYD;AAAAA,MACZ,GAAG;AAAA,IAAA,CACJ;AAAA,EACH;AAAA,EAEA,MAAM,aAAa;AACjB,UAAM,MAAM;AAEZ,SAAK,WAAW;AAAA,MACd,IAAI,WAAW,EAAE,MAAM,MAAM,OAAO,MAAM;AAAA,MAC1C,IAAI,WAAW;AAAA,QACb,MAAM;AAAA,QACN,OAAO;AAAA,QACP,UAAU;AAAA,QACV,OAAO,CAAC,EAAE,SAAS,YAAY,SAAS,YAAY;AAAA,MAAA,CACrD;AAAA,IAAA,CACF;AAAA,EACH;AACF;AAvBE,cAJW,yBAIH,IAA2B;AAJ9B,IAAM,yBAAN;ACQA,MAAM,2BAAN,MAAM,kCAGHzR,kBACA,sBADAA,IAAgB;AAAA,EAGxB,YAAY,UAAU,IAAI;AAClB,UAAA;AAAA,MACJ,MAAM,yBAAwB,eAAe;AAAA,MAC7C,YAAYyR;AAAAA,MACZ,GAAG;AAAA,IAAA,CACJ;AAAA,EACH;AAAA,EAEA,MAAM,aAAa;AACjB,UAAM,MAAM;AAEZ,SAAK,OAAO,YAAY;AAAA,MACtB,IAAI,cAAc;AAAA,MAClB,IAAI,UAAU;AAAA,MACd,IAAIG,kBAAgB;AAAA,QAClB,eAAe;AAAA,QACf,WAAW,MACT;;AAAA,mBAAAC,OAAA9R,OAAAR,MAAA,YAAY,aAAZ,gBAAAA,IAAsB,gBAAtB,gBAAAQ,IAAmC,aAAnC,gBAAA8R,IAA6C,YAAW;AAAA;AAAA,MAAA,CAC3D;AAAA,IAAA;AAGH,SAAK,WAAW;AAAA,MACd,IAAI,YAAY,EAAE,MAAM,aAAa,OAAO,QAAQ;AAAA,MACpD,IAAI,YAAY,EAAE,MAAM,aAAa,OAAO,QAAQ;AAAA,MACpD,IAAI,kBAAkB;AAAA,QACpB,OAAO;AAAA,QACP,SAAS;AAAA,UACP,IAAI,WAAW;AAAA,UACf,IAAI,aAAa,EAAE,OAAO,MAAM;AAAA,UAChC,IAAI,aAAa;AAAA,YACf,OAAO;AAAA,YACP,MAAM;AAAA,YACN,SAAS,OAAO,QAAQ;AACtB,mBAAK,eAAe;AAEpB,oBAAM,SAAS,MAAM,KAAK,gBAAgB,cAAc;AAAA,gBACtD,QAAQ,WAAW,IAAI,EAAE;AAAA,cAAA,CAC1B;AAED,mBAAK,eAAe;AAChB,kBAAA,OAAO,KAAK,SAAS,KAAK;AAC5B,yBAAS,MAAM;AAAA,kBACb,SAAS,OAAO,KAAK,OAAO;AAAA,gBAAA,CAC7B;AACD;AAAA,cACF;AACA,uBAAS,QAAQ,EAAE,SAAS,OAAQ,CAAA;AAEpC,mBAAK,KAAK;AAAA,YACZ;AAAA,YACA,WAAW,CAAC,QAAQ,IAAI,UAAU;AAAA,UAAA,CACnC;AAAA,UACD,IAAI,aAAa;AAAA,YACf,OAAO;AAAA,YACP,MAAM;AAAA,YACN,SAAS,OAAO,QAAQ;AACtB,mBAAK,eAAe;AAEpB,oBAAM,SAAS,MAAM,KAAK,gBAAgB,cAAc;AAAA,gBACtD,QAAQ,UAAU,IAAI,EAAE;AAAA,cAAA,CACzB;AAED,mBAAK,eAAe;AAChB,kBAAA,OAAO,KAAK,SAAS,KAAK;AAC5B,yBAAS,MAAM;AAAA,kBACb,SAAS,OAAO,KAAK,OAAO;AAAA,gBAAA,CAC7B;AACD;AAAA,cACF;AACA,uBAAS,QAAQ,EAAE,SAAS,OAAQ,CAAA;AAEpC,mBAAK,KAAK;AAAA,YACZ;AAAA,YACA,WAAW,CAAC,QAAQ,IAAI,UAAU;AAAA,UAAA,CACnC;AAAA,QACH;AAAA,MAAA,CACD;AAAA,IAAA,CACF;AAAA,EACH;AACF;AAjFE,cAJW,0BAIH,IAA2B;AAJ9B,IAAM,0BAAN;ACFA,MAAM,gBAAN,MAAM,uBAAqBH,iBACxB,sBADwBA,IAAmB;AAAA,EAGnD,YAAY,UAA2B,IAAI;AACnC,UAAA;AAAA,MACJ,MAAM,cAAa,eAAe;AAAA,MAClC,YAAYD;AAAAA,MACZ,GAAG;AAAA,IAAA,CACJ;AAAA,EACH;AAAA,EAEA,MAAgB,aAA4B;AAC1C,UAAM,MAAM;AAEZ,SAAK,WAAW;AAAA,MACd,IAAI,WAAW,EAAE,MAAM,MAAM,OAAO,MAAM;AAAA,MAC1C,IAAI,WAAW,EAAE,MAAM,QAAQ,OAAO,QAAQ;AAAA,MAC9C,IAAI,WAAW,EAAE,MAAM,QAAQ,OAAO,MAAM;AAAA,MAC5C,IAAI,WAAW;AAAA,QACb,MAAM;AAAA,QACN,OAAO;AAAA,QACP,eAAe;AAAA,QACf,gBAAgB;AAAA,UACd,SAAS;AAAA,YACP,EAAE,OAAO,YAAY,UAAU,OAAO,KAAK;AAAA,YAC3C,EAAE,OAAO,YAAY,MAAM,OAAO,KAAK;AAAA,YACvC,EAAE,OAAO,YAAY,UAAU,OAAO,KAAK;AAAA,YAC3C,EAAE,OAAO,YAAY,MAAM,OAAO,KAAK;AAAA,UACzC;AAAA,QACF;AAAA,MAAA,CACD;AAAA,MACD,IAAI,WAAW,EAAE,MAAM,cAAc,OAAO,QAAQ;AAAA,MACpD,IAAI,WAAW,EAAE,MAAM,eAAe,OAAO,QAAQ;AAAA,MACrD,IAAI,WAAW,EAAE,MAAM,OAAO,OAAO,MAAM;AAAA,MAC3C,IAAI,WAAW,EAAE,MAAM,OAAO,OAAO,MAAM;AAAA,MAC3C,IAAI,WAAW,EAAE,MAAM,aAAa,OAAO,MAAM;AAAA,MACjD,IAAI,WAAW,EAAE,MAAM,WAAW,OAAO,MAAM;AAAA,MAC/C,IAAI,WAAW,EAAE,MAAM,UAAU,OAAO,MAAM;AAAA,IAAA,CAC/C;AAAA,EACH;AACF;AAvCE,cADW,eACH,IAA2B;AAD9B,IAAM,eAAN;ACJA,MAAM,iBAAN,MAAM,wBAAsBzR,kBACzB,sBADyBA,IAAoB;AAAA,EAGrD,YAAY,UAA4B,IAAI;AACpC,UAAA;AAAA,MACJ,MAAM,eAAc,eAAe;AAAA,MACnC,YAAYyR;AAAAA,MACZ,GAAG;AAAA,IAAA,CACJ;AAAA,EACH;AAAA,EAEA,MAAgB,aAA4B;AAC1C,UAAM,MAAM;AAEZ,SAAK,WAAW,WAAW;AAAA,MACzB,IAAI,aAAa,EAAE,MAAM,QAAQ,OAAO,QAAQ;AAAA,MAChD,IAAI,aAAa,EAAE,MAAM,QAAQ,OAAO,MAAM;AAAA,MAC9C,IAAI,aAAa,EAAE,MAAM,cAAc,OAAO,QAAQ;AAAA,MACtD,IAAI,aAAa,EAAE,MAAM,eAAe,OAAO,QAAQ;AAAA,IAAA,CACxD;AAED,SAAK,WAAW;AAAA,MACd,IAAI,YAAY,EAAE,MAAM,QAAQ,OAAO,QAAQ,OAAO,SAAS;AAAA,MAC/D,IAAI,YAAY,EAAE,MAAM,QAAQ,OAAO,MAAM,UAAU,SAAS;AAAA,MAChE,IAAI,YAAY;AAAA,QACd,MAAM;AAAA,QACN,OAAO;AAAA,QACP,eAAe;AAAA,QACf,gBAAgB;AAAA,UACd,SAAS;AAAA,YACP,CAAC,YAAY,QAAQ,GAAG;AAAA,YACxB,CAAC,YAAY,IAAI,GAAG;AAAA,YACpB,CAAC,YAAY,QAAQ,GAAG;AAAA,YACxB,CAAC,YAAY,IAAI,GAAG;AAAA,UACtB;AAAA,QACF;AAAA,QACA,OAAO;AAAA,MAAA,CACR;AAAA,MACD,IAAI,YAAY;AAAA,QACd,MAAM;AAAA,QACN,OAAO;AAAA,QACP,OAAO;AAAA,MAAA,CACR;AAAA,MACD,IAAI,YAAY;AAAA,QACd,MAAM;AAAA,QACN,OAAO;AAAA,QACP,OAAO;AAAA,MAAA,CACR;AAAA,MACD,IAAI,YAAY,EAAE,MAAM,aAAa,OAAO,MAAM,OAAO,QAAQ;AAAA,MACjE,IAAI,YAAY,EAAE,MAAM,WAAW,OAAO,MAAM,OAAO,SAAS;AAAA,MAChE,IAAI,YAAY,EAAE,MAAM,UAAU,OAAO,MAAM,OAAO,SAAS;AAAA,MAC/D,IAAI,kBAAkB;AAAA,IAAA,CACvB;AAAA,EACH;AACF;AArDE,cADW,gBACH,IAA2B;AAD9B,IAAM,gBAAN;ACPM,MAAA,iBAAiB,CAC5BwT,mBACM;AACN,mBAAiB,SAAS;AAAA,IACvBA,eAAsB,eAAe;AAAA,IACtCA;AAAAA,EAAA;AAGKA,SAAAA;AACT;ACJO,MAAM,uBAAuBvT,WAAqB;AAAA,EACvD,YAAY,UAA2B,IAAI;AACzC,UAAM,EAAE,MAAM,WAAW,GAAG,QAAS,CAAA;AAAA,EACvC;AAAA,EAEA,MAAgB,aAAa;AAC3B,UAAM,MAAM;AAEZ,SAAK,WAAW;AAAA,MACd,IAAI,WAAW,EAAE,MAAM,MAAM,OAAO,MAAM;AAAA,MAC1C,IAAI,WAAW,EAAE,MAAM,QAAQ,OAAO,MAAM,UAAU,MAAM;AAAA,MAC5D,IAAI,WAAW,EAAE,MAAM,OAAO,OAAO,SAAS,SAAS,OAAO;AAAA,IAAA,CAC/D;AAAA,EACH;AAAA,EAEA,iBAAiB,MAAW;AACnB,WAAA;AAAA,MACL,GAAG;AAAA,MACH,KAAK,KAAK,OAAO;AAAA,IAAA;AAAA,EAErB;AAAA,EAEA,WAAW,MAA8B;AAChC,WAAA;AAAA,MACL,IAAI,KAAK;AAAA,MACT,MAAM,KAAK,QAAQ;AAAA,MACnB,KAAK,KAAK,OAAO;AAAA,IAAA;AAAA,EAErB;AACF;AAEA,eAAe,cAAc;ACrChB,MAAA,kBAAkB,CAC7BwT,oBACM;AACN,mBAAiB,SAAS;AAAA,IACvBA,gBAAuB,eAAe;AAAA,IACvCA;AAAAA,EAAA;AAGKA,SAAAA;AACT;ACPO,MAAM,wBAGHllB,YAAgB;AAAA,EACxB,YAAY,UAA4B,IAAI;AACpC,UAAA;AAAA,MACJ,UAAU;AAAA,MACV,WAAW,CAAC;AAAA,MACZ,MAAM;AAAA,MACN,GAAG;AAAA,MACH,cAAc;AAAA,QACZ,MAAM;AAAA,QACN,GAAG,QAAQ;AAAA,MACb;AAAA,IAAA,CACD;AAAA,EACH;AAAA,EAEA,MAAgB,aAAa;AAC3B,UAAM,MAAM;AAEZ,SAAK,WAAW;AAAA,MACd,IAAI,YAAY,EAAE,MAAM,MAAM,OAAO,MAAM,SAAS,OAAO;AAAA,MAC3D,IAAI,YAAY,EAAE,MAAM,QAAQ,OAAO,MAAM;AAAA,MAC7C,IAAI,YAAY,EAAE,MAAM,UAAU,OAAO,SAAS;AAAA,IAAA,CACnD;AAAA,EACH;AAAA,EAEA,QAAQ,MAAiB;AACvB,UAAM,kBAAoC,CAAA;AAE1C,UAAM,cAAc;AAEpB,eAAW,cAAc,aAAa;AACpC,iBAAW,WAAW;AAElB,UAAA,CAAC,WAAW,KAAK;AACnB,wBAAgB,KAAK,UAAU;AAAA,MACjC;AAEA,iBAAW,QAAQ,aAAa;AAC1B,YAAA,WAAW,OAAO,KAAK,KAAK;AACnB,qBAAA,SAAS,KAAK,IAAI;AAAA,QAC/B;AAAA,MACF;AAAA,IACF;AAEA,UAAM,QAAQ,eAAiC;AAAA,EACjD;AAAA,EAEA,WAAW,MAAY;AACd,WAAA;AAAA,MACL,IAAI,KAAK;AAAA,MACT,MAAM,KAAK,QAAQ;AAAA,MACnB,KAAK,KAAK,OAAO;AAAA,IAAA;AAAA,EAErB;AACF;AAEA,gBAAgB,eAAe;AC5DlB,MAAA,iBAAiB,CAC5BmlB,mBACM;AACN,mBAAiB,SAAS;AAAA,IACvBA,eAAsB,eAAe;AAAA,IACtCA;AAAAA,EAAA;AAGKA,SAAAA;AACT;ACLO,MAAM,uBAEH,SAAY;AAAA,EACpB,YAAY,UAA2B,IAAI;AACnC,UAAA;AAAA,MACJ,MAAM;AAAA,MACN,GAAG;AAAA,MACH,OAAO,EAAE,OAAO,QAAQ,GAAG,QAAQ,MAAM;AAAA,IAAA,CAC1C;AAAA,EACH;AAAA,EACA,MAAgB,YAAY,QAA6B;AACvD,UAAM,WAAW,MAAM,MAAM,YAAY,MAAM;AAEzC,UAAA,OAAO,SAAS,KAAK;AAE3B,UAAM,kBAAuB,CAAA;AAE7B,UAAM,cAAc;AAEpB,eAAW,cAAc,aAAa;AACpC,iBAAW,WAAW;AAElB,UAAA,CAAC,WAAW,KAAK;AACnB,wBAAgB,KAAK,UAAU;AAAA,MACjC;AAEA,iBAAW,QAAQ,aAAa;AAC1B,YAAA,WAAW,OAAO,KAAK,KAAK;AACnB,qBAAA,SAAS,KAAK,IAAI;AAAA,QAC/B;AAAA,MACF;AAAA,IACF;AAEA,aAAS,KAAK,OAAO;AAEd,WAAA;AAAA,EACT;AACF;AAEA,eAAe,cAAc;AC3CtB,MAAM,wBAAwBnlB,YAAU;AAAA,EAC7C,YAAY,UAA4B,IAAI;AAC1C,UAAM,EAAE,MAAM,kBAAkB,GAAG,QAAS,CAAA;AAAA,EAC9C;AAAA,EAEA,MAAgB,aAAa;AAC3B,UAAM,MAAM;AAEZ,SAAK,WAAW;AAAA,MACd,IAAI,YAAY,EAAE,MAAM,QAAQ,OAAO,MAAM;AAAA,MAC7C,IAAI,YAAY,EAAE,MAAM,WAAW,OAAO,MAAM;AAAA,MAChD,IAAI,YAAY,EAAE,MAAM,aAAa,OAAO,MAAM;AAAA,IAAA,CACnD;AAAA,EACH;AACF;AAEA,gBAAgB,eAAe;ACHxB,MAAM,sBAAsBA,YAAoC;AAAA,EACrE,YAAY,UAA4B,IAAI;AAC1C,UAAM,EAAE,MAAM,yBAAyB,GAAG,QAAS,CAAA;AAAA,EACrD;AAAA,EAEA,MAAgB,aAAa;AAC3B,UAAM,MAAM;AAEZ,SAAK,WAAW;AAAA,MACd,IAAI,YAAY,EAAE,MAAM,WAAW,OAAO,MAAM,OAAO,SAAS;AAAA,MAChE,IAAI,YAAY,EAAE,MAAM,cAAc,OAAO,MAAM,OAAO,SAAS;AAAA,MACnE,IAAI,YAAY,EAAE,MAAM,aAAa,OAAO,MAAM,OAAO,SAAS;AAAA,MAClE,IAAI,YAAY,EAAE,MAAM,WAAW,OAAO,QAAQ;AAAA,MAClD,IAAI,YAAY,EAAE,MAAM,YAAY,OAAO,SAAS;AAAA,MACpD,IAAI,YAAY,EAAE,MAAM,aAAa,OAAO,MAAM;AAAA,IAAA,CACnD;AAAA,EACH;AAAA,EAEA,WAAW,MAAgC;AACzC,QAAI,aAAa;AAEjB,YAAQ,KAAK,QAAQ;AAAA,MACnB,KAAK,aAAa;AACH,qBAAA;AACb;AAAA,MACF,KAAK,aAAa;AACH,qBAAA;AACb;AAAA,MACF,KAAK,aAAa;AACH,qBAAA;AACb;AAAA,IAEJ;AAEA,WAAO,EAAE,GAAG,MAAM,UAAU,KAAK,YAAY,IAAI;EACnD;AACF;AAEA,gBAAgB,aAAa;ACxCtB,MAAM,wBAAwBA,YAGnC;AAAA,EACA,YAAY,UAA4B,IAAI;AAC1C,UAAM,EAAE,MAAM,kBAAkB,GAAG,QAAS,CAAA;AAAA,EAC9C;AAAA,EAEA,MAAgB,aAAa;AAC3B,UAAM,MAAM;AAEZ,SAAK,WAAW;AAAA,MACd,IAAI,YAAY;AAAA,QACd,MAAM;AAAA,QACN,OAAO;AAAA,MAAA,CACR;AAAA,MACD,IAAI,YAAY;AAAA,QACd,MAAM;AAAA,QACN,OAAO;AAAA,MAAA,CACR;AAAA,MACD,IAAI,YAAY;AAAA,QACd,MAAM;AAAA,QACN,OAAO;AAAA,QACP,eAAe;AAAA,MAAA,CAChB;AAAA,MACD,IAAI,YAAY;AAAA,QACd,MAAM;AAAA,QACN,OAAO;AAAA,MAAA,CACR;AAAA,MACD,IAAI,YAAY;AAAA,QACd,MAAM;AAAA,QACN,OAAO;AAAA,MAAA,CACR;AAAA,MACD,IAAI,YAAY;AAAA,QACd,MAAM;AAAA,QACN,OAAO;AAAA,MAAA,CACR;AAAA,MACD,IAAI,YAAY,EAAE,MAAM,aAAa,OAAO,MAAM;AAAA,IAAA,CACnD;AAAA,EACH;AAAA,EAEA,WAAW,MAAwD;AACjE,QAAI,cAAc;AAEd,QAAA;AACI,YAAA,UAAU,KAAK,MAAM,KAAK,UAAU,KAAK,WAAW,CAAE,CAAA,CAAC;AAE7D,UAAI,OAAO,QAAQ,eAAe,UAAU,UAAU;AACpD,gBAAQ,eAAe,QAAQ,KAAK,MAAM,QAAQ,eAAe,KAAK;AAAE;AAAA,MAC1E;AAEA,oBAAc,KAAK,UAAU,SAAS,MAAM,CAAC;AAAA,aACtC,GAAG;AACV,cAAQ,MAAM,CAAC;AAAA,IACjB;AAEO,WAAA;AAAA,MACL,GAAG;AAAA,MACH;AAAA,IAAA;AAAA,EAEJ;AACF;AAEA,gBAAgB,eAAe;ACjExB,MAAM,qBAAqB,SAAmB;AAAA,EACnD,YAAY,UAA2B,EAAE,OAAO,EAAE,OAAO,OAAA,KAAY;AAC7D,UAAA,EAAE,MAAM,aAAa,OAAO,EAAE,OAAO,OAAO,GAAG,GAAG,QAAA,CAAS;AAAA,EACnE;AAAA,EAEA,MAAgB,aAA4B;AAC1C,UAAM,MAAM;EAYd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAuCA,WAAW,MAA0B;AACnC,WAAO,EAAE,GAAG,MAAM,UAAU,CAAG,EAAA;AAAA,EACjC;AACF;AAEA,eAAe,YAAY;ACpEpB,MAAM,iBAAN,MAAM,wBAAsB0R,kBACvB,uBADuBA,KAAS;AAAA,EAGxC,YAAY,UAA2B,IAAI;AACjC,UAAA;AAAA,MACF,MAAM,eAAc,eAAe;AAAA,MACnC,YAAYD;AAAAA,MACZ,GAAG;AAAA,IAAA,CACN;AAAA,EACL;AAAA,EAEA,MAAgB,aAA4B;AACxC,UAAM,MAAM;AAEZ,SAAK,WAAW;AAAA,MACZ,IAAI,WAAW;AAAA,QACX,MAAM;AAAA,QAAY,OAAO;AAAA,QACzB,eAAe;AAAA,QACf,gBAAgB;AAAA,UACZ,WAAW,KAAK,SAAS,IAAI,eAAe;AAAA,UAC5C,gBAAgB;AAAA,QACpB;AAAA,MAAA,CACH;AAAA,MACD,IAAI,WAAW,EAAE,MAAM,SAAS,OAAO,QAAQ,UAAU,MAAM;AAAA,MAC/D,IAAI,WAAW;AAAA,QACX,MAAM;AAAA,QAAW,OAAO;AAAA,QACxB,eAAe;AAAA,QACf,gBAAgB;AAAA,UACZ,MAAM;AAAA,UACN,UAAU;AAAA,YACN,SAAS;AAAA,YACT,SAAS;AAAA,UACb;AAAA,QACJ;AAAA,MAAA,CACH;AAAA,IAAA,CACJ;AAAA,EACL;AACJ;AApCI,cADS,gBACD,KAA2B;AADhC,IAAM,gBAAN;AAsCP,eAAe,aAAa;ACrCrB,MAAM,YAAN,MAAM,mBAAiBC,kBAClB,uBADkBA,KAAS;AAAA,EAGnC,YAAY,UAA2B,IAAI;AACjC,UAAA;AAAA,MACF,MAAM,UAAS,eAAe;AAAA,MAC9B,YAAYD;AAAAA,MACZ,GAAG;AAAA,IAAA,CACN;AACI,SAAA,cAAc,YAAY,SAAU;AAAA,EAC7C;AAAA,EAEA,MAAgB,aAA4B;AACxC,UAAM,MAAM;AAEZ,SAAK,WAAW;AAAA,MACZ,IAAI,WAAW,EAAE,MAAM,SAAS,OAAO,QAAQ,UAAU,MAAM;AAAA,MAC/D,IAAI,WAAW;AAAA,QACX,MAAM;AAAA,QAAW,OAAO;AAAA,QACxB,eAAe;AAAA,QACf,gBAAgB;AAAA,UACZ,MAAM;AAAA,UACN,UAAU;AAAA,YACN,SAAS;AAAA,YACT,SAAS;AAAA,UACb;AAAA,QACJ;AAAA,MAAA,CACH;AAAA,MACD,IAAI,WAAW;AAAA,QACX,MAAM;AAAA,QAAsB,OAAO;AAAA,QACnC,eAAe;AAAA,QACf,gBAAgB;AAAA,UACZ,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,UAAU,EAAE,OAAO,GAAG,MAAM,QAAQ;AAAA,QACpE;AAAA,QAAG,UAAU;AAAA,QACb,cAAc;AAAA,MAAA,CACjB;AAAA,MACD,IAAI,WAAW;AAAA,QACX,MAAM;AAAA,QAAyB,OAAO;AAAA,QACtC,eAAe;AAAA,QACf,gBAAgB;AAAA,UACZ,WAAW,KAAK,SAAS,IAAI,eAAe;AAAA,UAC5C,gBAAgB;AAAA,UAChB,UAAU;AAAA,QACd;AAAA,QAAG,UAAU;AAAA,MAAA,CAChB;AAAA,IAAA,CACJ;AAGI,SAAA,yBAAyB,GAAG,CAAC,SAAS;AACnC,UAAA,KAAK,SAAS,SAAS,sBAAsB;AACrC,gBAAA,KAAK,KAAK,OAAO;AAAA,UACrB,KAAK;AACI,iBAAA,UAAU,uBAAuB,EAAG,eAAe,YAAY,KAAK,SAAS,IAAI,cAAA,CAAe;AACrG;AAAA,UACJ,KAAK;AACD,oBAAQ,IAAI,KAAK,UAAU,uBAAuB,CAAC;AAC9C,iBAAA,UAAU,uBAAuB,EAAG,eAAe,YAAY,KAAK,SAAS,IAAI,YAAA,CAAa;AACnG;AAAA,QACR;AAAA,MAEJ;AAAA,IAAA,CACH;AAAA,EACL;AAAA,EACA,MAAM,SAAS;AACX,UAAM,MAAM,MAAM,KAAK,YAAY,KAAK,uBAAuB,KAAK,IAAI;AACjE,WAAA;AAAA,EACX;AACJ;AAlEI,cADS,WACD,KAA2B;AADhC,IAAM,WAAN;ACYA,MAAM,kBAAN,MAAM,yBAAuBzR,mBACxB,uBADwBA,KAAU;AAAA,EAG1C,YAAY,UAA4B,IAAI;AAClC,UAAA;AAAA,MACF,MAAM,gBAAe,eAAe;AAAA,MACpC,YAAYyR;AAAAA,MACZ,GAAG;AAAA,IAAA,CACN;AACI,SAAA,cAAc,YAAY,SAAU;AAAA,EAC7C;AAAA,EAEA,MAAgB,aAA4B;AACxC,UAAM,MAAM;AAEZ,UAAM,SAAS,MAAM,KAAK,YAAY,IAAI,sBAAsB;AAC5D,QAAA,OAAO,KAAK,QAAQ,KAAK;AACzB,eAAS,MAAM;AAAA,QACX,SAAS,OAAO,KAAK,OAAO;AAAA,MAAA,CAC/B;AACD;AAAA,IACJ;AAGA,SAAK,OAAO,YAAY,CAAC,IAAI,cAAc,GAAG,IAAI,kBAAkB;AAAA,MAChE,OAAO;AAAA,MACP,MAAM;AAAA,MACN,QAAQ,MAAM;AACV,iBAAS,eAAe;AAAA,UACpB,UAAU,KAAK,SAAS,IAAI,UAAU;AAAA,QAAA,CACzC;AAAA,MACL;AAAA,IACH,CAAA,CAAC;AAEF,SAAK,WAAW;AAAA,MACZ,IAAI,YAAY,EAAE,MAAM,YAAY,OAAO,OAAO,OAAO,SAAS;AAAA,MAClE,IAAI,YAAY;AAAA,QACZ,MAAM;AAAA,QAAQ,OAAO;AAAA,QACrB,eAAe;AAAA,QACf,gBAAgB;AAAA,UACZ,SAAS,OAAO,KAAK,KAAK,OAAO,CAAC,KAAU,QAAa;AAC9C,mBAAA,EAAE,GAAG,KAAK,CAAC,IAAI,KAAK,GAAG,IAAI;UACtC,GAAG,EAAE;AAAA,QACT;AAAA,MAAA,CACH;AAAA,MACD,IAAI,YAAY,EAAE,MAAM,SAAS,OAAO,MAAM,OAAO,SAAS;AAAA,MAC9D,IAAI,YAAY,EAAE,MAAM,WAAW,OAAO,MAAM,UAAU,SAAS;AAAA;AAAA,IAAA,CAEtE;AAAA,EACL;AACJ;AAjDI,cADS,iBACD,KAA2B;AADhC,IAAM,iBAAN;AAqDP,gBAAgB,cAAc;ACpEvB,MAAM,oBAAoB,WAAW;AAAA,EAC1C,eAAe;AAAA,IACb,MAAM;AAAA,EACR;AAAA,EACA,YAAY;AAAA,IACV,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AAAA,EACA,yBAAyB;AAAA,IACvB,MAAM;AAAA,IACN,SAAS,MAAM,CAAC;AAAA,EAClB;AACF,CAAU;ACVV,MAAenR,2DAAgB;AAAA,EAC7BC,MAAM;AAAA,EACNC,OAAO0F,WAAW;AAAA,IAChBkf,mBAAmB;AAAA,MACjBhkB,MAAMikB;AAAAA,MACNhf,UAAU;AAAA,IACX;AAAA,IACDif,mBAAmB;AAAA,MACjBlkB,MAAMmkB;AAAAA,MACNlf,UAAU;AAAA,IACZ;AAAA,EACF,CAAU;AAAA,EACVzF,MAAMJ,OAAO;AAAA,IAAEwB;AAAAA,EAAM,GAAG;AACtB,UAAMsS,UAAUzR,IAAI,KAAK;AAEzB,UAAMiC,UAAU3C,SAAS,MAAM3B,MAAM8kB,kBAAkBxgB,OAAO;AAE9D,UAAMmM,qBAAqB,YAAY;AACrC,YAAMzQ,MAAM8kB,kBAAkB9O;AAE9BhW,YAAM4kB,kBAAkBjgB;AAExBmP,cAAQpQ,QAAQ;AAAA;AAGlB,UAAM4M,oBAAoBA,MAAM;AAC9BwD,cAAQpQ,QAAQ;AAAA;AAGlB,WAAO,MAAM;AACX,aAAAnD,YAAAykB,WAAA;AAAA,QAAA,WAEahjB,MAAM8R,OAAO;AAAA,QAAC,oBACJrR,OAAgBqR,QAAQpQ,QAAQjB;AAAAA,QAAE,SAAA;AAAA,QAAA,UAAA;AAAA,QAAA,aAAA;AAAA,QAAA,WAAA;AAAA,QAAA,SAAA;AAAA,MAAA,GAAA;AAAA,QAAA3B,SAAAA,MAAA,CAAAP,YAAAA,OAAAA,MAAAA,CAAAA,YAAA0kB,YAAA;AAAA,UAAA,aAW5BjlB,MAAM8kB;AAAAA,QAAiB,GAAA;AAAA,UAAAhkB,SAAAA,MAAAP,CAAAA,YAAA8V,QAAA,MAAA,IAAA,CAAA;AAAA,QAAA,CAAA,GAAA9V,YAAA,OAAA;AAAA,UAAA,SAAA;AAAA,WAAAA,CAAAA,YAAAI,UAAA;AAAA,UAAA,WAIzB2P;AAAAA,QAAiB,GAAA;AAAA,UAAAxP,SAAAA,MAAA,CAAAuF,gBAAA,IAAA,CAAA;AAAA,SAAA9F,GAAAA,YAAAI,UAAA;AAAA,UAAA,QAAA;AAAA,UAAA,WAGzBqB,MAAMsC,OAAO;AAAA,UAAC,WACdmM;AAAAA,QAAkB,GAAA;AAAA,UAAA3P,SAAAA,MAAA,CAAAuF,gBAAA,IAAA,CAAA;AAAA,QAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,QAZ/B6e,WAAWA,MAAAA;;AAAM1jB,kBAAAA,MAAAA,MAAMV,YAANU,gBAAAA,IAAAA;AAAAA;AAAAA,MAAiB,CAAA;AAAA;EAqB5C;AACF,CAAC;ACvCD,MAAe1B,gDAAgB;AAAA,EAC7BC,MAAM;AAAA,EACNC,OAAO0F,WAAW;AAAA,IAChBkf,mBAAmB;AAAA,MACjBhkB,MAAMikB;AAAAA,MACNhf,UAAU;AAAA,IACZ;AAAA,EACF,CAAU;AAAA,EACVzF,MAAMJ,OAAO;AACX,UAAM8d,UAAqCzb,IAAI,IAAI;AAEnD,UAAMyiB,oBAAoBxS,SACxB,IAAIyS,oBACN,CAAA;AAEA,UAAMH,oBAAoBjjB,SAAS,MAAM3B,MAAM4kB,iBAAiB;AAEhE,UAAMtgB,UAAU3C,SAAS,MAAMK,MAAM4iB,iBAAiB,EAAEtgB,OAAO;AAE/D6gB,oBAAgB,MAAM;AACpBL,wBAAkBxP,QAAO;AAAA,IAC3B,CAAC;AAED,UAAM8P,iBAAiB,OAAOC,WAAiC;AAC7DP,wBAAkBzG,UAAS;AAE3B,YAAMlJ,SAAQ;AAEd2P,wBAAkBQ,QAAQ;AAAA,QACxB,GAAGR,kBAAkB3R;AAAAA,QACrBoS,gBAAeF,iCAAQvd,OAAM;AAAA,MAC/B,CAAwB;AAAA;AAG1B,UAAM0d,kBAAmBpmB,UAA8B;AACrD0lB,wBAAkBtG,WAAWpf,IAAI;AAAA;AAGnC,UAAMqmB,oBAAoB,OAAOrmB,SAA8B;AAC7D,YAAMmE,YAAY,MAAMmiB,aAAazD,QACnC1L,KAAK5P,SAAS6P,UAAU,gCAAgC,GACxDD,KAAK5P,SAAS6P,UAAU,8BAA8B,GACtD;AAAA,QAAE5V,MAAM;AAAA,MACV,CAAA,EAAE+kB,KACA,MAAM,MACN,MAAM,KACR;AAEA,UAAI,CAACpiB,WAAW;AACd;AAAA,MACF;AAEA,YAAMH,SAAS,MAAMpB,MAAM4iB,iBAAiB,EAAEgB,mBAAmBxmB,IAAI;AAErE,UAAIgE,OAAO+P,KAAKuP,SAAS,KAAK;AAC5BnW,kBAAUC,MAAMpJ,OAAO+P,KAAK1G,GAAG;AAC/B;AAAA,MACF;AAAA;AAGF,WAAO,MAAM;AACX,aAAAoZ,eAAAtlB,YAAA,OAAA;AAAA,QAAA,SAAA;AAAA,MAAA,GAAA,CAAAA,YAAA,OAAA;AAAA,QAAA,SAAA;AAAA,MAAA,GAAA,CAAAA,YAAA,OAAA;AAAA,QAAA,SAAA;AAAA,MAAA,GAAA,CAAA8F,gBAAA,MAAA,CAAA,CAAA,GAAA9F,YAAAulB,0BAAA;AAAA,QAAA,qBAK2B9jB,MAAM4iB,iBAAiB;AAAA,QAAC,qBACxBE;AAAAA,MAAiB,GAAA;AAAA,QAAAhkB,SAAAA,MAAAP,CAAAA,YAAAI,UAAA;AAAA,UAAA,WAGzBkK,MAAMua,eAAgB;AAAA,UAAA,QACzBW;AAAAA,UAAI,QAAA;AAAA,UAAA,QAAA;AAAA,QAAA,GAAA,IAAA,CAAA;AAAA,MAAA,CAAA,CAAA,CAAA,GAAAxlB,YAAA,OAAA;AAAA,QAAA,SAAA;AAAA,SAAAA,CAAAA,YAAAyK,aAAA;AAAA,QAAA,UAAA;AAAA,MAAA,GAAA;AAAA,QAAAlK,SAAAA,MAAAP,CAAAA,YAAAylB,aAAA;AAAA,UAAA,aAUChkB,MAAM4iB,iBAAiB;AAAA,UAAC,qBAAA;AAAA,QAAA,GAAA;AAAA,UAAA9jB,SAAAA,MAAAP,CAAAA,YAAAsf,QAAA;AAAA,YAAA,YAIvB7d,MAAM4iB,iBAAiB;AAAA,YAAC,wBACZ;AAAA,YAAK,OACpBjhB,QAAama,QAAQpa,QAAQC;AAAAA,aAC3B;AAAA,YACP,cAAcsiB,CAAC;AAAA,cAAE9S;AAAAA,YAAU,MAAM;AAC/B,qBAAA5S,YAAA,OAAA;AAAA,gBAAA,SAAA;AAAA,gBAAA,WAGcmM,OAAM;AACdA,oBAAEwZ,eAAc;AAAA,gBAClB;AAAA,iBAAC3lB,CAAAA,YAAAuN,WAAA;AAAA,gBAAA,WAAA;AAAA,cAAA,GAAA;AAAA,gBAAAhN,SAAAA,MAAA,CAAAP,YAAA,QAAA;AAAA,kBAAA,SAAA;AAAA,mBAAAA,CAAAA,YAAAulB,0BAAA;AAAA,kBAAA,qBAKwB9jB,MAAM4iB,iBAAiB;AAAA,kBAAC,qBACxBE;AAAAA,gBAAiB,GAAA;AAAA,kBAAAhkB,SAAAA,MAAA,CAAAP,YAAA,QAAA;AAAA,oBAAA,WAGxBmM,OAAM0Y,eAAejS,KAAKA,IAAI;AAAA,qBAAC5S,CAAAA,YAAA4lB,QAAA,MAAA;AAAA,oBAAArlB,SAAAA,MAAAP,CAAAA,YAAAwlB,MAAA,MAAA,IAAA,CAAA;AAAA,kBAAA,CAAA,CAAA,CAAA,CAAA;AAAA,gBAAA,CAAA,CAAA,CAAA,CAAA;AAAA,eAAAxlB,GAAAA,YAAAuN,WAAA;AAAA,gBAAA,WAAA;AAAA,cAAA,GAAA;AAAA,gBAAAhN,SAAAA,MAAA,CAAAP,YAAA,QAAA;AAAA,kBAAA,SAAA;AAAA,mBAAAA,CAAAA,YAAAulB,0BAAA;AAAA,kBAAA,qBAYxB9jB,MAAM4iB,iBAAiB;AAAA,kBAAC,qBACxBE;AAAAA,gBAAiB,GAAA;AAAA,kBAAAhkB,SAAAA,MAAA,CAAAP,YAAA,QAAA;AAAA,oBAAA,WAGxBmM,OAAM8Y,gBAAgBrS,KAAKA,IAAI;AAAA,qBAAC5S,CAAAA,YAAA4lB,QAAA,MAAA;AAAA,oBAAArlB,SAAAA,MAAAP,CAAAA,YAAA6lB,MAAA,MAAA,IAAA,CAAA;AAAA,kBAAA,CAAA,CAAA,CAAA,CAAA;AAAA,gBAAA,CAAA,CAAA,CAAA,CAAA;AAAA,eAAA7lB,GAAAA,YAAAuN,WAAA;AAAA,gBAAA,WAAA;AAAA,cAAA,GAAA;AAAA,gBAAAhN,SAAAA,MAAA,CAAAP,YAAA,QAAA;AAAA,kBAAA,SAAA;AAAA,gBAAA,GAAA,CAAAA,YAAA,QAAA;AAAA,kBAAA,WAYnCsK,MAAM4a,kBAAkBtS,KAAKA,IAAI;AAAA,mBAAC5S,CAAAA,YAAA4lB,QAAA,MAAA;AAAA,kBAAArlB,SAAAA,MAAAP,CAAAA,YAAA8lB,QAAA,MAAA,IAAA,CAAA;AAAA,gBAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,cAAA,CAAA,CAAA,CAAA;AAAA,YAUvD;AAAA,WACD,CAAA;AAAA,QAAA,CAAA,CAAA;AAAA,MAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAAC,iBAAA,SAAA,GAjF+BtkB,MAAMsC,OAAO,CAAC,CAAA,CAAA;AAAA;EAyF9D;AACF,CAAC;AClLM,MAAM,2BAA2B,WAAW;AAAA;AAAA,EAEjD,KAAK,EAAE,MAAM,QAAQ,UAAU,KAAK;AAAA,EACpC,UAAU,EAAE,MAAM,SAAS,SAAS,MAAM;AAAA,EAC1C,UAAS,EAAE,MAAK,QAAO,SAAQ,EAAC;AAAA,EAChC,WAAU,EAAE,MAAK,QAAO,SAAQ,EAAC;AAAA,EACjC,cAAc;AAAA,IACZ,MAAM;AAAA,IACN,SAAS,MAAM,CAAC;AAAA,EAClB;AACF,CAAU;AAMH,MAAM,2BAA2B;AAAA;AAExC;ACEsB,SAAAvD,UAAAC,GAAA;AAAA,SAAA,OAAAA,MAAA,cAAAC,OAAAC,UAAAC,SAAAC,KAAAJ,CAAA,MAAAK,qBAAAA,CAAAA,QAAAL,CAAA;AAAA;AAUtB,MAAMulB,aAAa;AAEnB,MAAMC,gBAAgB;AAEtB,MAAe1mB,sDAAgB;AAAA,EAC7BC,MAAM;AAAA,EACNC,OAAOymB;AAAAA,EACPvmB,OAAOwmB;AAAAA,EACPtmB,MAAMJ,OAAO;AACX,UAAM2mB,aAAuBtkB,IAAI,IAAI;AAErC,UAAMukB,aAAajlB,SAAS,MAAM;AAChC,YAAMklB,cAAc7mB,MAAMoO,IAAI0Y,MAAMN,aAAa;AAEjD,UAAIK,2CAAc,IAAI;AACpB,eAAOA,2CAAc;AAAA,MACvB;AAEA,YAAME,MAAM,IAAIC,IAAIhnB,MAAMoO,KAAK6Y,SAASC,MAAM,EAAE/lB;AAEhD,YAAMnC,SAAQ+nB,IAAI9X,YAAY,GAAG;AAEjC,UAAIjQ,WAAU,IAAI;AAChB,eAAO;AAAA,MACT;AAEA,aAAO+nB,IAAII,MAAMnoB,SAAQ,CAAC,KAAK;AAAA,IACjC,CAAC;AASD,UAAMooB,eAAezlB,SAAS,MAAM;AAClC,aAAO;AAAA,QACL,GAAG3B,MAAMonB,aAAanjB,IAAK7E,WAAe;AAAA,UACxC,GAAGA;AAAAA,UACHsE,OAAOtE,KAAKsE,MAAMvC,SAAS;AAAA,QAC7B,EAAE;AAAA;AAAA,QAEF;AAAA,UAACuC,OAAO6iB;AAAAA,UAAY7lB,OAAO;AAAA,UAAQwM,OAAO;AAAA,UAAGC,QAAQ;AAAA,QAAC;AAAA,MAAC;AAAA,IAG3D,CAAC;AAED,UAAMka,gBAAgBhlB,IAAIrC,MAAMsnB,QAAQ;AACxC,UAAMC,iBAAiBllB,IAAIrC,MAAMwnB,SAAS;AAE1C,UAAMC,eAA4BplB,IAAI+kB,aAAa1jB,MAAM,CAAC,EAAEA,KAAK;AAEjE,UAAM4jB,WAAwBjlB,IAAIrC,MAAMsnB,QAAQ;AAChD,UAAME,YAAyBnlB,IAAIrC,MAAMwnB,SAAS;AAElD,UAAME,UAAU/lB,SAAS,MAAM;;AAC7B,YAAMuL,UAAQlL,MAAAA,MAAM2kB,UAAU,MAAhB3kB,gBAAAA,IAAmB2lB,UAAS;AAC1C,YAAMxa,WAASnL,MAAAA,MAAM2kB,UAAU,MAAhB3kB,gBAAAA,IAAmB4lB,UAAS;AAE3C,YAAMC,QAAQ7lB,MAAMslB,QAAQ,IAAItlB,MAAMwlB,SAAS;AAC/C,YAAMM,YAAY5a,QAAQC;AAE1B,aAAO2a,YAAYD,QACf7lB,MAAMslB,QAAQ,IAAIpa,QAClBlL,MAAMwlB,SAAS,IAAIra;AAAAA,IACzB,CAAC;AAED,UAAM4a,kBAAmBrkB,WAAkB;AACzC+jB,mBAAa/jB,QAAQA;AAAAA;AAGvB,UAAMskB,UAAUrmB,SAAS,MAAMK,MAAMylB,YAAY,MAAMlB,UAAU;AAEjE,UAAM0B,cAActmB,SAAS,MAAM;AACjC,YAAMumB,SAASlmB,MAAMolB,YAAY,EAAEpT,KAChCkU,CAAAA,YAAWA,QAAOxkB,UAAU1B,MAAMylB,YAAY,CACjD;AAEA,aAAO,EAACS,iCAAQhb,UAAS,IAAGgb,iCAAQ/a,WAAU,CAAC;AAAA,IACjD,CAAC;AAEDzK,UACEf,SAAS,MAAM3B,MAAMoO,GAAG,GACvBA,SAAQ;AACP,YAAM+Z,QAAQ,IAAIC;AAClBD,YAAM/Z,MAAMA;AAEZ+Z,YAAME,SAAS,MAAM;AAEnB,YAAI,CAACroB,MAAMsnB,UAAU;AACnBD,wBAAc3jB,QAAQykB,MAAMG;AAAAA,QAC9B;AAEA,YAAItoB,MAAMwnB,WAAW;AACnBD,yBAAe7jB,QAAQykB,MAAMI;AAAAA,QAC/B;AAAA;IAIJ,GACA;AAAA,MAACzlB,WAAW;AAAA,IAAI,CAClB;AAQA,UAAM0lB,mBAAmBA,MAAM;AAC7BxmB,YAAM2kB,UAAU,EAAE8B;;AAGpB,UAAMC,oBAAoBA,MAAM;AAC9B1mB,YAAM2kB,UAAU,EAAEgC;;AAGpB,UAAMC,gBAAiBjlB,QAAY;AACjCgjB,iBAAWjjB,QAAQC;AAAAA;AAGrB,WAAO;AAAA,MACL+jB;AAAAA,MACAJ;AAAAA,MACAE;AAAAA,MACAZ;AAAAA,MACAD;AAAAA,MACAS;AAAAA,MACAC;AAAAA,MACAE;AAAAA,MACAE;AAAAA,MACAO;AAAAA,MACAC;AAAAA,MACAF;AAAAA,MACAa;AAAAA,MACAJ;AAAAA,MACAE;AAAAA;EAEH;AAAA,EACD9b,SAAS;AACP,UAAM;AAAA,MACJ8a;AAAAA,MACAJ;AAAAA,MACAE;AAAAA,MACAZ;AAAAA,MACAQ;AAAAA,MACAG;AAAAA,MACAF;AAAAA,MACAW;AAAAA,MACAC;AAAAA,MACAR;AAAAA,MACAM;AAAAA,MACAa;AAAAA,MACAJ;AAAAA,MACAE;AAAAA,MACAnJ;AAAAA,MACA1S;AAAAA,IACD,IAAG;AAEJ,UAAMgc,qBAAqB7mB,MAAMolB,YAAY,EAAEnjB,IAAK6kB,iBAAWvoB,YAAA+E,UAAA;AAAA,MAAA,SAC5CwjB,YAAYplB;AAAAA,MAAK,SAASolB,YAAYpoB;AAAAA,IAAK,GAAA,IAAA,CAC7D;AAED,WAAAH,YAAA,OAAA;AAAA,MAAA,SAAA;AAAA,IAAA,GAAA,CAAAA,YAAA,OAAA;AAAA,MAAA,SAAA;AAAA,OAAAA,CAAAA,YAAAwoB,YAAA;AAAA,MAAA,OAIaH;AAAAA,MAAa,cACNhC;AAAAA,MAAU,OACjBrH,OAAOnR;AAAAA,MAAG,aAAA;AAAA,MAAA,cAAA;AAAA,MAAA,mBAGEiZ;AAAAA,MAAa,oBACZE;AAAAA,MAAc,YACtBhI,OAAOyJ;AAAAA,MAAQ,SAClBhB;AAAAA,MAAO,eACDC;AAAAA,MAAW,WACfP;AAAAA,IAAO,GAAA,IAAA,GAAAnnB,YAAA,OAAA;AAAA,MAAA,SAAA;AAAA,OAAAA,CAAAA,YAAAuN,WAAA;AAAA,MAAA,WAAA;AAAA,IAAA,GAAA;AAAA,MAAAhN,SAAAA,MAAAP,CAAAA,YAAAC,WAAA;AAAA,QAAA,QAAA;AAAA,QAAA,WAKwCkoB;AAAAA,QAAiB,SAAA;AAAA,MAAA,GAAA,IAAA,CAAA;AAAA,KAAAnoB,GAAAA,YAAAuN,WAAA;AAAA,MAAA,WAAA;AAAA,IAAA,GAAA;AAAA,MAAAhN,SAAAA,MAAAP,CAAAA,YAAAC,WAAA;AAAA,QAAA,QAAA;AAAA,QAAA,WAGlBgoB;AAAAA,MAAgB,GAAA,IAAA,CAAA;AAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAAjoB,YAAA,OAAA;AAAA,MAAA,SAAA;AAAA,OAAAA,CAAAA,YAAAyK,aAAA;AAAA,MAAA,UAAA;AAAA,IAAA,GAAA;AAAA,MAAAlK,SAAAA,MAAAA;;AAAAP,gBAAAA,YAAAoV,QAAA;AAAA,UAAA,kBAAA;AAAA,QAAA,GAAA;AAAA,UAAA7U,SAAAA,MAAAP,CAAAA,YAAAgT,YAAA;AAAA,YAAA,SAAA;AAAA,UAAA,GAAA;AAAA,YAAAzS,SAAAA,MAAAP,CAAAA,YAAA2D,UAAA;AAAA,cAAA,eAAA;AAAA,cAAA,cAWrDujB;AAAAA,cAAY,uBACHM;AAAAA,YAAe,GAAAhnB,UAEnC8nB,kBAAkB,IAAlBA,qBAAkB;AAAA,cAAA/nB,SAAAA,MAAA,CAAlB+nB,kBAAkB;AAAA,YAAA,CAAA,CAAA;AAAA,WAAAtoB,GAAAA,YAAAgT,YAAA;AAAA,YAAA,SAAA;AAAA,UAAA,GAAA;AAAA,YAAAzS,SAAAA,MAAAP,CAAAA,YAAA0oB,eAAA;AAAA,cAAA,eAAA;AAAA,cAAA,cAMP3B;AAAAA,cAAQ,uBAEhB7kB,OAAe,KAAK6kB,WAAW7kB;AAAAA,YAAE,GAAA,IAAA,CAAA;AAAA,WAAAlC,GAAAA,YAAAgT,YAAA;AAAA,YAAA,SAAA;AAAA,UAAA,GAAA;AAAA,YAAAzS,SAAAA,MAAAP,CAAAA,YAAA0oB,eAAA;AAAA,cAAA,eAAA;AAAA,cAAA,cAQzBzB;AAAAA,cAAS,uBAEjB/kB,OAAe,KAAK+kB,YAAY/kB;AAAAA,YAAE,GAAA,IAAA,CAAA;AAAA,UAAA,CAAA,CAAA;AAAA,QAAA,CAAA,IAM3CoK,MAAAA,OAAO6S,UAAP7S,gBAAAA,IAAAA,YAAgB;AAAA;AAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,EAK3B;AACF,CAAC;ACnPM,eAAeqc,aACpBzpB,SAC+B;AAC/B,QAAM2nB,eAAe3nB,QAAQ2nB,gBAAgB;AAC7C,QAAM4B,WAAWvpB,QAAQupB,YAAY;AAErC,SAAO,IAAI9Y,QAASC,aAAY;AAC9B,UAAMgZ,wBACJ9mB,IAAI,IAAI;AAEV,UAAMiO,oBAAoBA,MAAM;AAC9BC,qBAAeC,QAAO;AAEtBL,cAAQ;AAAA,QACN5M,WAAW;AAAA,QACX4P,MAAM;AAAA,QACNiW,MAAM;AAAA,UAAElc,OAAO;AAAA,UAAGC,QAAQ;AAAA,QAAE;AAAA,MAC9B,CAAC;AAAA;AAGH,UAAMsD,qBAAqB,YAAY;AACrCF,qBAAeC,QAAO;AAEtB,YAAMmW,aAAa3kB,MAAMmnB,qBAAqB,EAAGxC;AAEjDxW,cAAQ;AAAA,QACN5M,WAAW;AAAA,QACX4P,MAAM,MAAM,IAAIjD,QAAQyW,WAAW0C,YAAYC,KAAK3C,UAAU,CAAC;AAAA,QAC/DyC,MAAM;AAAA,UAAElc,OAAOyZ,WAAWgB;AAAAA,UAAOxa,QAAQwZ,WAAWiB;AAAAA,QAAM;AAAA,MAC5D,CAAC;AAAA;AAGH,UAAMrX,iBAAiBlN,SAASqN,aAAa;AAAA,MAC3C3I,OAAO;AAAA,MACP6I,SAASN;AAAAA,MACTO,MAAMA,MAAM;AACV,eAAAtQ,YAAAgpB,qBAAA;AAAA,UAAA,OAEW5lB,QAAawlB,sBAAsBzlB,QAAQC;AAAAA,UAAG,OAChDlE,QAAQ2O;AAAAA,UAAG,YACN4a;AAAAA,UAAQ,gBACJ5B;AAAAA,UAAY,aACf3nB,QAAQ+nB;AAAAA,UAAS,YAClB/nB,QAAQ6nB;AAAAA,QAAQ,GAAA,IAAA;AAAA,MAG/B;AAAA,MACDtW,QAAQA,MAAM;AACZ,eAAAzQ,YAAAqN,UAAArN,MAAAA,CAAAA,YAAAI,UAAA;AAAA,UAAA,WAEuB2P;AAAAA,QAAiB,GAAA;AAAA,UAAAxP,SAAAA,MAAA,CAAAuF,gBAAA,IAAA,CAAA;AAAA,SAAA9F,GAAAA,YAAAI,UAAA;AAAA,UAAA,QAAA;AAAA,UAAA,WACF8P;AAAAA,QAAkB,GAAA;AAAA,UAAA3P,SAAAA,MAAA,CAAAuF,gBAAA,IAAA,CAAA;AAAA,QAAA,CAAA,CAAA,CAAA;AAAA,MAK1D;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AACH;AC1Ea,MAAA,wBAAwB,YAAY,mBAAmB;;;;;;;;;;;;;ACyCpE,UAAM,QAAQ;AAKd,UAAM,OAAO;AAEb,UAAM,aAAa;AAAA,MAAS,MAC1B,MAAM,cAAc,aAAA,EAAe,SAAS,MAAM,SAAS,EAAE;AAAA,IAAA;AAG/D,UAAM,2BAA2B;AAAA,MAC/B,MAAA;;AAAM,iBAAAtH,MAAA,MAAM,cAAc,wBAApB,gBAAAA,IAAyC,UAAS;AAAA;AAAA,IAAA;AAGpD,UAAA,oBAAoB,SAAS,MAAM;AACjC,YAAA,YACJ,MAAM,cAAc;AAAA,QAClB,MAAM;AAAA,MACH,KAAA,MAAM,cAAc,mBAAmB,iBAAiB,YAAY;AAEpE,aAAA,MAAM,UAAU,SAAS;AAAA,IAAA,CACjC;AAEK,UAAAa,eAAc,CAAC,UAAsB;AACzC,WAAK,SAAS,KAAK;AAAA,IAAA;AAGrB,UAAM,oBAAoB,MAAM;AACxB,YAAA,cAAc,aAAa,MAAM,QAAQ;AAAA,IAAA;AAGjD,UAAM,kBAAkB,MAAM;AACvB,WAAA,QAAQ,MAAM,QAAQ;AAAA,IAAA;AAG7B,UAAM,iBAAiB,MAAM;AACtB,WAAA,OAAO,MAAM,QAAQ;AAAA,IAAA;AAG5B,UAAM,sBAAsB,MAAM;AAC3B,WAAA,YAAY,MAAM,QAAQ;AAAA,IAAA;AAG3B,UAAA,kBAAkB,CAAC,eAAwB;AAC3C,UAAA,WAAW,MAAM,SAAS;AAC9B,UAAI,YAAY;AACH,mBAAA,SAAS,SAAS,MAAM,SAAS;AAAA,MAC9C;AAGI,UAAA,UAAU,cAAc,QAAW;AAE/B,cAAA,QAAQ,SAAS,cAAc,OAAO;AAC5C,cAAM,QAAQ;AACL,iBAAA,KAAK,YAAY,KAAK;AAC/B,cAAM,OAAO;AACb,iBAAS,YAAY,MAAM;AAClB,iBAAA,KAAK,YAAY,KAAK;AAAA,MAAA,OAC1B;AACK,kBAAA,UAAU,UAAU,QAAQ;AAAA,MACxC;AACA,eAAS,QAAQ,EAAC,SAAS,OAAO,CAAA;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxEpC,MAAM4pB,gBAAgB,CACpB;AAAA,EACE9lB,OAAO;AAAA,EACPhD,OAAO;AAAA,EACPwM,OAAO;AAAA,EACPC,QAAQ;AACV,GACA;AAAA,EACEzJ,OAAO;AAAA,EACPhD,OAAO;AAAA,EACPwM,OAAO;AAAA,EACPC,QAAQ;AACV,GACA;AAAA,EACEzJ,OAAO;AAAA,EACPhD,OAAO;AAAA,EACPwM,OAAO;AAAA,EACPC,QAAQ;AACV,GACA;AAAA,EACEzJ,OAAO;AAAA,EACPhD,OAAO;AAAA,EACPwM,OAAO;AAAA,EACPC,QAAQ;AACV,CAAC;AAGH,MAAerN,+CAAgB;AAAA,EAC7BC,MAAM;AAAA,EACNC,OAAOypB;AAAAA,EACPrpB,MAAMJ,OAAO;AACX,UAAM4kB,oBAAoBtS,SACxB,IAAIuS,oBACN,CAAA;AAEA,UAAMzZ,gBAAgB,IAAIse;AAE1B,UAAMC,iBAAiBrX,SAAS,IAAIsX,gBAAiB,CAAA;AAErD,UAAMC,eAAevX,SACnB,IAAK,cAAcwX,eAAe;AAAA,MAChC,MAAgB/I,aAAa;AAC3B,cAAM,MAAMA;AAEZ,aAAKM,WAAW,CACd,IAAI9O,WAAW;AAAA,UACbxS,MAAM;AAAA,UACNW,OAAO;AAAA,UACP6T,eAAe;AAAA,UACf9C,gBAAgB;AAAA,YACd8L,UAAU,KAAKkD,SAAS,IAAIoE,oBAAmB,CAAE;AAAA,YACjDkF,eAAe;AAAA,UACjB;AAAA,QACD,CAAA,CAAC,CACH;AAAA,MACH;AAAA,IACD,EAAA,CACH;AAEA,UAAMC,gBAAgBroB,SACpB,MAAO3B,MAAMgqB,iBAAiBL,cAChC;AAEA,UAAMrlB,UAAU3C,SAAS,MAAMK,MAAMgoB,aAAa,EAAE1lB,OAAO;AAE3D,UAAM2lB,gBAAgBtoB,SAAS,MAC7BK,MAAMgoB,aAAa,EAAEE,iBAAgB,CACvC;AAEA,UAAMC,sBAAsBxoB,SAC1B,MAAMK,MAAMgoB,aAAa,EAAEG,mBAC7B;AAEA,UAAMC,wBAAwBzoB,SAC5B,MAAMK;;AAAAA,eAAAA,MAAAA,MAAMmoB,mBAAmB,MAAzBnoB,gBAAAA,IAA4B0B,UAAS;AAAA,KAC7C;AAEA,UAAM2mB,eAAe1oB,SAAS,MAAMK,MAAMgoB,aAAa,EAAElS,QAAO,CAAE;AAElEqN,oBAAgB,MAAM;AACpBwE,qBAAerU,QAAO;AACtBsP,wBAAkBtP,QAAO;AACzBuU,mBAAavU,QAAO;AAAA,IACtB,CAAC;AAED/Q,cAAU,MAAM;AACG+lB,yBAAoB;AAErC5nB,YACEsnB,eACA,CAACA,gBAAerY,IAAGa,cAAc;AAC/B,cAAMqC,aAAamV,eAAcO,gBAAgBxV,GAAG,MAAM;AACxDiV,UAAAA,eAAcQ,2BACZxqB,MAAMyqB,uBACR;AAAA,QACF,CAAC;AAEDjY,kBAAU,MAAM;AACdqC,qBAAWS,QAAO;AAAA,QACpB,CAAC;AAAA,MACH,GACA;AAAA,QAAExS,WAAW;AAAA,MAAK,CACpB;AAEAJ,YACEf,SAAS,MAAM3B,MAAMyqB,uBAAuB,GAC3CA,6BAA4B;AAC3BzoB,cAAMgoB,aAAa,EAAEQ,2BACnBC,uBACF;AAAA,MACF,CACF;AAAA,IACF,CAAC;AAED/nB,UACEsnB,eACA,CAACA,gBAAerY,IAAGa,cAAc;AAC/B,YAAMqC,aAAamV,eAAcU,kBAAkB3V,GACjD,OAAO;AAAA,QAAE3V;AAAAA,MAAK,MAAM;AAClB,cAAMmE,YAAY,MAAMF,SAAS4e,QAAQ;AAAA,UACvC/N,SAAS;AAAA,UACTnM,OAAO;AAAA,UACPnH,MAAM;AAAA,QACR,CAAC;AAED,YAAI,CAAC2C,WAAW;AACd;AAAA,QACF;AAEAymB,QAAAA,eAAcpE,mBAAmBxmB,IAAI;AAAA,MACvC,CACF;AAEAoT,gBAAU,MAAM;AACdqC,mBAAWS,QAAO;AAAA,MACpB,CAAC;AAAA,IACH,GACA;AAAA,MAAExS,WAAW;AAAA,IAAK,CACpB;AAEA,UAAM6nB,0BAA2BC,kBAAiC;AAChE,UAAIA,aAAalnB,UAAU1B,MAAMooB,qBAAqB,GAAG;AACvD;AAAA,MACF;AAEApoB,YAAMgoB,aAAa,EAAEa,uBAAuBD,YAAY;AAAA;AAG1DhG,sBAAkBkG,qBAAqB/V,GAAG,MAAM;AAC9C,YAAMgW,iBAAiBnG,kBAAkB/L,aAAc,EAAC,CAAC;AAEzD,UAAI,CAACkS,gBAAgB;AACnB/oB,cAAMgoB,aAAa,EAAEgB,QAAQ,CAAE,CAAA;AAAA,MACjC;AAEAhpB,YAAMgoB,aAAa,EAAEiB,0BAA0BF,cAAc;AAAA,IAC/D,CAAC;AAED,aAASG,8BACPC,OAC4B;AAC5B,UAAI,CAACA,MAAMpmB,QAAQ;AACjB,eAAO;AAAA,MACT;AAEA,aAAOmmB,8BAA8BC,MAAM,CAAC,EAAE9lB,QAAQ,KAAK8lB,MAAM,CAAC;AAAA,IACpE;AAEAvG,sBAAkB1G,eAAenJ,GAAG,MAAM;AACxC,YAAM8C,OAAO+M,kBAAkB9M;AAE/B,YAAMsT,qBAAqBF,8BAA8BrT,IAAI;AAE7D,UAAIuT,oBAAoB;AACtBxG,0BAAkBzhB,aAAa,CAACioB,mBAAmBtjB,EAAE,CAAC;AAAA,MACxD;AAAA,IACF,CAAC;AAED+hB,iBAAawB,eAAetW,GAAG,MAAM;AACnC/S,YAAMgoB,aAAa,EAAErlB;IACvB,CAAC;AAED,UAAM2mB,0BAA0BA,CAC9B/d,OACAge,aACG;AACH,UAAI,CAACvrB,MAAMwrB,YAAY;AACrB;AAAA,MACF;AAEAje,YAAM2Y,eAAc;AACpB3Y,YAAMC,gBAAe;AAErBxL,YAAMgoB,aAAa,EAAE7mB,aAAa,CAACooB,SAASzjB,EAAE,CAAC;AAAA;AAGjD,UAAM2jB,kBAAmBF,cAAyB;AAChDloB,eAASye,eAAe;AAAA,QACtBC,OAAOwJ,SAASzjB;AAAAA,QAChBC,OAAO;AAAA,QACPiK,UAAU6X;AAAAA,MACZ,CAAC;AAAA;AAGH,UAAM6B,iBAAiB,OAAOH,aAAyB;AACrD,YAAMI,gBAAgB,MAAMzC,aAAa;AAAA,QACvC9a,KAAKmd,SAAS1sB;AAAAA,QACduoB,cAAcoC;AAAAA,MAChB,CAAC;AAED,UAAI,CAACmC,cAAcpoB,WAAW;AAC5B;AAAA,MACF;AAEA,YAAMqoB,sBAAsB,YAAY;AACtC,YAAI;AACF,gBAAMC,OAAOC,aAAaH,cAAcxY,IAAI;AAE5C,gBAAM4Y,iBAAiB,MAAM3gB,cAAc4gB,OACzC,IAAIC,KAAK,CAACJ,IAAI,GAAGN,SAASrL,MAAM;AAAA,YAAEtf,MAAMirB,KAAKjrB;AAAAA,UAAM,CAAA,CACrD;AAEA,cAAImrB,eAAe5Y,KAAKuP,SAAS,KAAK;AACpCC,qBAASnW,MAAM;AAAA,cAAE0H,SAAS6X,eAAe5Y,KAAK1G;AAAAA,YAAI,CAAC;AACnD;AAAA,UACF;AAEA,gBAAM6V,WAAW,MAAM4J,MAAMC,eAAe;AAAA,YAC1CpsB,MAAM;AAAA,UACP,CAAA,EAAEqsB,KAAK;AAAA,YACN,GAAGb;AAAAA,YACH1sB,MAAMktB,eAAe5Y,KAAKA,KAAKtU;AAAAA,UACjC,CAAC;AAED,cAAIyjB,SAASI,SAAS,KAAK;AACzBC,qBAASnW,MAAM;AAAA,cAAE0H,SAASoO,SAAS7V;AAAAA,YAAI,CAAC;AACxC;AAAA,UACF;AAEAzK,gBAAMgoB,aAAa,EAAErlB;QACvB,QAAQ;AACNge,mBAASnW,MAAM;AAAA,YAAE0H,SAAS;AAAA,UAAO,CAAC;AAAA,QACpC,UAAU;AACR3D,yBAAeC,QAAO;AAAA,QACxB;AAAA;AAGF,YAAM6b,iBAAiB,YAAY;AACjC,YAAI;AACF,gBAAMR,OAAOC,aAAaH,cAAcxY,IAAI;AAE5C,gBAAM/P,SAAS,MAAMpB,MAAMgoB,aAAa,EAAEgC,OAAOA,OAC/C,IAAIC,KAAK,CAACJ,IAAI,GAAGN,SAASrL,MAAM;AAAA,YAAEtf,MAAMirB,KAAKjrB;AAAAA,UAAM,CAAA,CACrD;AAEA,cAAIwC,OAAO+P,KAAKuP,SAAS,KAAK;AAC5BC,qBAASnW,MAAM;AAAA,cAAE0H,SAAS9Q,OAAO+P,KAAK1G;AAAAA,YAAI,CAAC;AAC3C;AAAA,UACF;AAAA,QACF,QAAQ;AACNkW,mBAASnW,MAAM;AAAA,YAAE0H,SAAS;AAAA,UAAO,CAAC;AAAA,QACpC,UAAU;AACR3D,yBAAeC,QAAO;AAAA,QACxB;AAAA;AAGF,YAAMF,oBAAoBA,MAAM;AAC9BC,uBAAeC,QAAO;AAAA;AAGxB,YAAMD,iBAAiBlN,SAASqN,aAAa;AAAA,QAC3C3I,OAAO;AAAA,QACPmF,OAAO;AAAA,QACP0D,SAASN;AAAAA,QACTO,MAAMA,MAAM;AAAA,QACZG,QAAQA,MAAM;AACZ,iBAAAzQ,YAAAqN,UAAArN,MAAAA,CAAAA,YAAAI,UAAA;AAAA,YAAA,QAAA;AAAA,YAAA,WAEqCirB;AAAAA,UAAmB,GAAA;AAAA,YAAA9qB,SAAAA,MAAA,CAAAuF,gBAAA,IAAA,CAAA;AAAA,WAAA9F,GAAAA,YAAAI,UAAA;AAAA,YAAA,QAAA;AAAA,YAAA,WAGlB0rB;AAAAA,UAAc,GAAA;AAAA,YAAAvrB,SAAAA,MAAA,CAAAuF,gBAAA,IAAA,CAAA;AAAA,WAAA9F,GAAAA,YAAAI,UAAA;AAAA,YAAA,WAG7B2P;AAAAA,UAAiB,GAAA;AAAA,YAAAxP,SAAAA,MAAA,CAAAuF,gBAAA,IAAA,CAAA;AAAA,UAAA,CAAA,CAAA,CAAA;AAAA,QAG1C;AAAA,MACF,CAAC;AAAA;AAGH,UAAMimB,iBAAiBA,MAAM;AAAA;AAE7B,WAAO,MAAM;AACX,YAAMC,qBAAqBvqB,MAAMioB,aAAa,EAAEhmB,IAAK2mB,kBAAiB;AACpE,cAAM4B,YAAY,CAChB,0BACAxqB,MAAMooB,qBAAqB,MAAMQ,aAAalnB,QAC1C,cACA,EAAE;AAGR,eAAAnD,YAAA,OAAA;AAAA,UAAA,OAESqqB,aAAalnB;AAAAA,UAAK,SAChB8oB;AAAAA,UAAS,WACP3hB,MAAM8f,wBAAwBC,YAAY;AAAA,WAElDA,CAAAA,aAAalqB,KAAK,CAAA;AAAA,MAGzB,CAAC;AAED,UAAI+rB,2BAAgC;AAEpC,UAAIzqB,MAAMmoB,mBAAmB,GAAG;AAC9BsC,mCAAwBlsB,YAAAqN,UAAA,MAAA,CAAArN,YAAA,QAAA,MAAA,CAGjByB,MAAMmoB,mBAAmB,EAAGzpB,OAAK2F,gBACjCrE,OAAAA,GAAAA,MAAMmoB,mBAAmB,EAAGuC,OAAKrmB,gBAAA,IAAA,CAAA,CAAA,GAAA9F,YAAAqL,wBAAA;AAAA,UAAA,iBAGnB5J,MAAMgoB,aAAa,EAAEgC;AAAAA,UAAM,UAClChqB,MAAMmoB,mBAAmB,EAAGhf;AAAAA,QAAM,GAAA;AAAA,UAAArK,SAAAA,MAAAP,CAAAA,YAAAuM,cAAA,MAAA;AAAA,YAAAhM,SAAAA,MAAAP,CAAAA,YAAAI,UAAA;AAAA,cAAA,QAAA;AAAA,YAAA,GAAA;AAAA,cAAAG,SAAAA,MAAA,CAAAuF,gBAAA,IAAA,GAInCrE,MAAMmoB,mBAAmB,EAAGzpB,KAAK;AAAA,YAAA,CAAA,CAAA;AAAA,UAAA,CAAA,CAAA;AAAA,QAK7C,CAAA,CAAA,CAAA;AAAA,MACH;AAEA,YAAMisB,qBAAqB3qB,MAAMqoB,YAAY,EAAEpmB,IAAKsnB,cAAQhrB,YAAAqsB,cAAA;AAAA,QAAA,OAEnDrB,SAASzjB;AAAAA,QAAE,SAAA;AAAA,QAAA,iBAED9F,MAAMgoB,aAAa;AAAA,QAAC,YACzBuB;AAAAA,QAAQ,UACVE;AAAAA,QAAe,SAChBC;AAAAA,QAAc,cACTY;AAAAA,QAAc,WAEtB/e,WACA+d,wBAAwB/d,OAAOge,QAAQ;AAAA,MAAC,GAAA,IAAA,CAG/C;AAED,aAAAhrB,YAAA,OAAA;AAAA,QAAA,SAAA;AAAA,SAAAA,CAAAA,YAAAssB,eAAA;AAAA,QAAA,qBAEsC7qB,MAAM4iB,iBAAiB;AAAA,MAACiB,GAAAA,IAAAA,GAAAA,eAAAtlB,YAAA,OAAA;AAAA,QAAA,SAAA;AAAA,MAAA,GAAA,CAAAA,YAAA,OAAA;AAAA,QAAA,SAAA;AAAA,MAAA,GAAA,CAAAA,YAAA,OAAA;AAAA,QAAA,SAAA;AAAA,MAAA,GAAA,CAAAA,YAAA,OAAA;AAAA,QAAA,SAAA;AAAA,MAKdgsB,GAAAA,CAAAA,kBAAkB,MAAAhsB,YAAA,OAAA;AAAA,QAAA,SAAA;AAAA,MAGvDksB,GAAAA,CAAAA,wBAAwB,MAAAlsB,YAAA,OAAA;AAAA,QAAA,SAAA;AAAA,SAAAA,CAAAA,YAAAylB,aAAA;AAAA,QAAA,aAKHhkB,MAAMgoB,aAAa;AAAA,QAAC,YAAY;AAAA,MAAK,GAAA;AAAA,QAAAlpB,SAAAA,MAAAP,CAAAA,YAAAyK,aAAA;AAAA,UAAA,UAAA;AAAA,QAAA,GAAA;AAAA,UAAAlK,SAAAA,MAAA,CAAAP,YAAA,OAAA;AAAA,YAAA,SAAA;AAAA,UAAA,GAAA,CAGtDosB,kBAAkB,CAAA,CAAA;AAAA,QAAA,CAAA,GAAApsB,YAAA,OAAA;AAAA,UAAA,SAAA;AAAA,WAAAA,CAAAA,YAAA4b,uBAAA;AAAA,UAAA,aAIana,MAAMgoB,aAAa;AAAA,QAAC,GAAA,IAAA,CAAA,CAAA,CAAA;AAAA,MAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA1D,iBAAA,SAAA,GAlBftkB,MAAMsC,OAAO,CAAC,CAAA,CAAA,CAAA,CAAA;AAAA;EA0BrE;AACF,CAAC;AChaY,MAAA,iBAAiB,YAAY,YAAY;ACatD,SAAAvD,UAAAC,GAAA;AAAA,SAAA,OAAAA,MAAA,cAAAC,OAAAC,UAAAC,SAAAC,KAAAJ,CAAA,MAAAK,qBAAAA,CAAAA,QAAAL,CAAA;AAAA;AACA,MAAM8rB,cAAczqB,IAAI,QAAQ;AAwBzB,MAAM0qB,cAAe3e,SAAa;AAGvC,QAAMhD,gBAAgB,IAAIse;AAC1B,SAAO,IAAIxZ,QAAQ,CAACC,SAAQC,WAAS;AAEnC,QAAGhC,OAAOA,IAAIC,QAAQ,aAAa,KAAK,GAAE;AAGxC,YAAMwd,OAAOC,aAAa1d,GAAG;AAG7BhD,oBAAc4gB,OACZ,IAAIC,KAAK,CAACJ,IAAI,GAAG,GAAGmB,IAAI5Y,KAAK6Y,SAAS9rB,UAAU,CAAC,IAAI0qB,KAAKjrB,KAAKO,SAAU,EAACmJ,QAAQ,UAAS,EAAE,KAAK,KAAK,IAAI;AAAA,QAAE1J,MAAMirB,KAAKjrB;AAAAA,MAAK,CAAC,CAChI,EAAE+kB,KAAKviB,YAAQ;AAEb,YAAIA,OAAO+P,KAAKuP,SAAS,KAAK;AAC5BC,mBAASnW,MAAM;AAAA,YAAE0H,SAAS9Q,OAAO+P,KAAK1G;AAAAA,UAAI,CAAC;AAC3C2D,iBAAO,IAAI8c,MAAM9pB,OAAO+P,KAAK1G,GAAI,CAAC;AAAA,QACpC,OACI;AACF0D,kBAAQ/M,OAAO+P,KAAKA,KAAKtU,IAAI;AAAA,QAC/B;AAAA,MAEF,CAAC;AAAA,IACH,OACI;AAAEsR,cAAQ/B,GAAG;AAAA,IAAG;AAAA,EACtB,CAAC;AACH;AAKA,MAAM+e,0BAA0BrtB,gCAAgB;AAAA,EAC9CC,MAAM;AAAA,EACNC,OAAO,CAAC,OAAO;AAAA,EACfI,MAAMJ,OAAM;AAAA,IAAEotB;AAAAA,EAAO,GAAE;AAErB,UAAMC,QAAQ/a,SAAStS,MAAMqtB,KAAK;AAClC,UAAMrD,gBAAgB1X,SAAS,IAAIsX,gBAAiB,CAAA;AACpD,UAAM0D,SAASjrB,IAAI;AAAA,MAACkrB,GAAE;AAAA,MAAEC,GAAE;AAAA,MAAEC,GAAE;AAAA,MAAEnvB,GAAE;AAAA,IAAC,CAAC;AAEpCoE,UAAM,MAAI,GAAG4qB,OAAO5pB,MAAM6pB,CAAC,IAAID,OAAO5pB,MAAM8pB,CAAC,IAAIF,OAAO5pB,MAAM+pB,CAAC,IAAIH,OAAO5pB,MAAMpF,CAAC,IAAImE,OAAI;AACvF4qB,YAAMC,SAAS7qB;AAAAA,IACjB,CAAC;AAEDC,UAAM,MAAI1C,MAAMqtB,OAAM,MAAI;AACxB,UAAIK,OAAO1tB,MAAMqtB,MAAMC,OAAOK,MAAM,QAAQ;AAE5C,UAAGD,KAAK3oB,UAAU,KAAK2oB,KAAK,CAAC,GAAE;AAC7BJ,eAAO5pB,QAAQ;AAAA,UAAC6pB,GAAEG,KAAK,CAAC;AAAA,UAAEF,GAAEE,KAAK,CAAC;AAAA,UAAED,GAAEC,KAAK,CAAC;AAAA,UAAEpvB,GAAEovB,KAAK,CAAC;AAAA;MACxD,WACQA,KAAK3oB,UAAU,GAAE;AACvBuoB,eAAO5pB,QAAS;AAAA,UAAC6pB,GAAEG,KAAK,CAAC;AAAA,UAAEF,GAAEE,KAAK,CAAC;AAAA,UAAED,GAAEC,KAAK,CAAC;AAAA,UAAEpvB,GAAEovB,KAAK,CAAC;AAAA;MACzD,WACQA,KAAK3oB,UAAU,GAAE;AACvBuoB,eAAO5pB,QAAS;AAAA,UAAC6pB,GAAEG,KAAK,CAAC;AAAA,UAAEF,GAAEE,KAAK,CAAC;AAAA,UAAED,GAAEC,KAAK,CAAC;AAAA,UAAEpvB,GAAEovB,KAAK,CAAC;AAAA;MACzD,WACQA,KAAK3oB,UAAU,GAAE;AACvBuoB,eAAO5pB,QAAS;AAAA,UAAC6pB,GAAEG,KAAK,CAAC;AAAA,UAAEF,GAAEE,KAAK,CAAC;AAAA,UAAED,GAAEC,KAAK,CAAC;AAAA,UAAEpvB,GAAEovB,KAAK,CAAC;AAAA;MACzD;AAAA,IAEF,GAAE;AAAA,MAAE5qB,WAAU;AAAA,IAAK,CAAC;AAGpBknB,kBAAcc,qBAAqB/V,GAAG,MAAI;;AACxC,UAAIjN,KAAKkiB,cAAcnR,aAAc,EAAC,CAAC;AACvC,UAAG/Q,IAAG;AACJulB,cAAMjf,OAAM4b,MAAAA,cAAclS,UAAU9D,KAAK5U,UAAMA,KAAK0I,MAAMA,EAAE,MAAhDkiB,gBAAAA,IAAmDnrB;AAAAA,MACjE,OACI;AACFwuB,cAAMjf,MAAM;AAAA,MACd;AAAA,IACF,CAAC;AAGD,UAAMwf,cAAc,YAAU;AAE5B,YAAMC,OAAO,MAAMC,WAAW;AAAA,QAAE3iB,QAAO;AAAA,MAAS,CAAC;AAEjD,UAAI0iB,MAAM;AAER,cAAME,aAAa,IAAIC;AACvBD,mBAAW1F,SAAS,OAAOlV,SAAW;AACpCka,gBAAMjf,MAAM+E,KAAK8a,OAAO7qB;AAAAA;AAG1B2qB,mBAAWG,cAAcL,IAAI;AAAA,MAC/B;AAAA;AAIFT,WAAO;AAAA,MACLe,WAAUA,MAAI;AAAE,eAAO;AAAA,UAAC,GAAGd;AAAAA;MAAQ;AAAA,MACnCe,QAAQhgB,SAAa;AAAGif,cAAMjf,MAAMA;AAAAA,MAAI;AAAA,IAC1C,CAAC;AAED,WAAO,MAAI;AAGT,YAAMigB,aAAS9tB,YAAAsN,SAAA;AAAA,QAAA,SAAA;AAAA,QAAA,OAAwFwf,MAAMjf;AAAAA,QAAG,OAAA;AAAA,SAAyB;AAAA,QACvI5B,OAAMA,MAAI;AACR,iBAAAjM,YAAA,OAAA;AAAA,YAAA,SAAA;AAAA,aAAAA,CAAAA,YAAA4lB,QAAA,MAAA;AAAA,YAAArlB,SAAAA,MAAAP,CAAAA,YAAA+tB,SAAA,MAAA,IAAA,CAAA;AAAA,UAAA,CAAA,CAAA,CAAA;AAAA,QAUF;AAAA,MACF,CAAC;AAID,UAAIC,QAAKhuB,YAAAiuB,QAAA;AAAA,QAAA,SAAA;AAAA,MAAA,GAAA;AAAA,QAAA1tB,SAAAA,MAAAP,CAAAA,YAAAkuB,WAAA;AAAA,UAAA,SAAA;AAAA,QAAA,GAAA;AAAA,UAAA3tB,SAAAA,MAAAP,CAAAA,YAAAI,UAAA;AAAA,YAAA,QAEW+tB;AAAAA,YAAY,QAAA;AAAA,YAAA,SAAA;AAAA,YAAA,WAA8Cd;AAAAA,UAAW,GAAA;AAAA,YAAA9sB,SAAAA,MAAA,CAAAuF,gBAAA,QAAA,CAAA;AAAA,UAAA,CAAA,GAGpFgoB,UAAS;AAAA,SAAA9tB,GAAAA,YAAAkuB,WAAA;AAAA,UAAA,SAAA;AAAA,QAAA,GAAA;AAAA,UAAA3tB,SAAAA,MAAAP,CAAAA,YAAAouB,gBAAA;AAAA,YAAA,SAAA;AAAA,YAAA,cAAA;AAAA,YAAA,2BAG4E,CAAC,CAAC;AAAA,YAAC,iBAAkB3E;AAAAA,UAAa,GAAA,IAAA,CAAA;AAAA,SAAAzpB,GAAAA,YAAAkuB,WAAA;AAAA,UAAA,SAAA;AAAA,QAAA,GAAA;AAAA,UAAA3tB,SAAAA,MAAAP,CAAAA,YAAAuK,SAAA;AAAA,YAAA,cAGtGuiB,MAAMjf;AAAAA,YAAG,uBAAA0C,YAATuc,MAAMjf,MAAG0C;AAAAA,YAAA,eAAe8d;AAAAA,YAAK,SAAA;AAAA,YAAA,eAAA;AAAA,UAAA,GAAA,IAAA,GAE9CP,UAAS;AAAA,QAAA,CAAA,CAAA;AAAA,OAEL;AAET,UAAGvB,YAAYppB,SAAS,SAAQ;AAC9B6qB,gBAAKhuB,YAAAsuB,OAAA;AAAA,UAAA,UAAkB;AAAA,QAAE,GAAA;AAAA,UAAA/tB,SAAAA,MAAAP,CAAAA,YAAAuuB,OAAA;AAAA,YAAA,QACV;AAAA,UAAE,GAAA/tB,UACZstB,UAAS,IAATA,aAAS;AAAA,YAAAvtB,SAAAA,MAAA,CAATutB,UAAS;AAAA,WAAA9tB,GAAAA,YAAAuuB,OAAA;AAAA,YAAA,QAEC;AAAA,UAAE,GAAA;AAAA,YAAAhuB,SAAAA,MAAAP,CAAAA,YAAAoV,QAAA;AAAA,cAAA,kBAAA;AAAA,cAAA,SACuB0X;AAAAA,YAAK,GAAA;AAAA,cAAAvsB,SAAAA,MAAAP,CAAAA,YAAAgT,YAAA;AAAA,gBAAA,SAAA;AAAA,cAAA,GAAA;AAAA,gBAAAzS,SAAAA,MAAA,CAAAP,YAAAuK,SAAAwI,WAAA;AAAA,kBAAA,cAEnB+Z,MAAM0B;AAAAA,kBAAG,uBAAAje,YAATuc,MAAM0B,MAAGje;AAAAA,kBAAA,QAAA;AAAA,gBAAA,GAAA;AAAA,kBAAwBke,MAAK;AAAA,gBAAC,GAAA;AAAA,kBAAA,SAAA;AAAA,kBAAA,eAAA;AAAA,gBAAA,CAAA,GAAA,IAAA,CAAA;AAAA,eAAAzuB,GAAAA,YAAAgT,YAAA;AAAA,gBAAA,SAAA;AAAA,cAAA,GAAA;AAAA,gBAAAzS,SAAAA,MAAAP,CAAAA,YAAAuK,SAAA;AAAA,kBAAA,cAIvCuiB,MAAMngB;AAAAA,kBAAK,uBAAA4D,YAAXuc,MAAMngB,QAAK4D;AAAAA,kBAAA,SAAA;AAAA,kBAAA,eAAA;AAAA,gBAAA,GAAA,IAAA,CAAA;AAAA,eAAAvQ,GAAAA,YAAAgT,YAAA;AAAA,gBAAA,SAAA;AAAA,cAAA,GAAA;AAAA,gBAAAzS,SAAAA,MAAAP,CAAAA,YAAAuK,SAAA;AAAA,kBAAA,cAIXuiB,MAAMlgB;AAAAA,kBAAM,uBAAA2D,YAAZuc,MAAMlgB,SAAM2D;AAAAA,kBAAA,SAAA;AAAA,kBAAA,eAAA;AAAA,gBAAA,GAAA,IAAA,CAAA;AAAA,eAAAvQ,GAAAA,YAAAgT,YAAA;AAAA,gBAAA,SAAA;AAAA,cAAA,GAAA;AAAA,gBAAAzS,SAAAA,MAAAP,CAAAA,YAAAuK,SAAA;AAAA,kBAAA,cAIZuiB,MAAM/F;AAAAA,kBAAQ,uBAAAxW,YAAduc,MAAM/F,WAAQxW;AAAAA,kBAAA,SAAA;AAAA,kBAAA,eAAA;AAAA,gBAAA,GAAA,IAAA,CAAA;AAAA,eAAAvQ,GAAAA,YAAAgT,YAAA;AAAA,gBAAA,SAAA;AAAA,cAAA,GAAA;AAAA,gBAAAzS,SAAAA,MAAAP,CAAAA,YAAAuK,SAAA;AAAA,kBAAA,cAIduiB,MAAM7F;AAAAA,kBAAS,uBAAA1W,YAAfuc,MAAM7F,YAAS1W;AAAAA,kBAAA,SAAA;AAAA,kBAAA,eAAA;AAAA,gBAAA,GAAA,IAAA,CAAA;AAAA,eAAAvQ,GAAAA,YAAAgT,YAAA;AAAA,gBAAA,SAAA;AAAA,cAAA,GAAA;AAAA,gBAAAzS,SAAAA,MAAA,CAAAP,YAAA,OAAA;AAAA,kBAAA,SAAA;AAAA,gBAAA,GAAA,CAAAA,YAAA8F,OAAAA,MAAAA,CAAAA,gBAAA9F,IAAAA,GAAAA,YAAAuK,SAAA;AAAA,kBAAA,cAOXwiB,OAAO5pB,MAAM6pB;AAAAA,kBAAC,uBAAAzc,YAAdwc,OAAO5pB,MAAM6pB,IAACzc;AAAAA,kBAAA,eAAA;AAAA,gBAAA,GAAA,IAAA,CAAA,CAAA,GAAAvQ,YAAA8F,OAAAA,MAAAA,CAAAA,gBAAA9F,IAAAA,GAAAA,YAAAuK,SAAA;AAAA,kBAAA,cAKdwiB,OAAO5pB,MAAM8pB;AAAAA,kBAAC,uBAAA1c,YAAdwc,OAAO5pB,MAAM8pB,IAAC1c;AAAAA,kBAAA,eAAA;AAAA,gBAAA,GAAA,IAAA,CAAA,CAAA,GAAAvQ,YAAA8F,OAAAA,MAAAA,CAAAA,gBAAA9F,IAAAA,GAAAA,YAAAuK,SAAA;AAAA,kBAAA,cAMdwiB,OAAO5pB,MAAM+pB;AAAAA,kBAAC,uBAAA3c,YAAdwc,OAAO5pB,MAAM+pB,IAAC3c;AAAAA,kBAAA,eAAA;AAAA,gBAAA,GAAA,IAAA,CAAA,CAAA,GAAAvQ,YAAA8F,OAAAA,MAAAA,CAAAA,gBAAA9F,IAAAA,GAAAA,YAAAuK,SAAA;AAAA,kBAAA,cAMdwiB,OAAO5pB,MAAMpF;AAAAA,kBAAC,uBAAAwS,YAAdwc,OAAO5pB,MAAMpF,IAACwS;AAAAA,kBAAA,eAAA;AAAA,gBAAA,GAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,cAAA,CAAA,CAAA;AAAA,YAAA,CAAA,CAAA;AAAA,UAAA,CAAA,CAAA;AAAA,SAOpC;AAAA,MACV;AAEA,aAAOyd;AAAAA;EAEX;AACF,CAAC;AAOM,MAAMU,sBAAsB,OAAQ5B,UAAc;AACvD,SAAO,IAAInd,QAAQ,CAACC,SAAQC,WAAW;AAGrC0c,gBAAYppB,QAAQ2pB,MAAMjf,MAAM,UAAQ;AAExC,UAAM8gB,oBAAoB7sB,IAAS,IAAI;AACvC,UAAM8sB,aAAaxtB,SAAc,MAAA;;AAAIutB,cAAAA,MAAAA,kBAAkBxrB,UAAlBwrB,gBAAAA,IAAyBf;AAAAA,KAAW;AAGzE,UAAMiB,oBAAoB,YAAU;;AAElC,UAAGD,WAAWzrB,MAAM0K,KAAI;AACtB,YAAIhL,SAAS,MAAM8lB,aAAa;AAAA,UAAE9a,KAAK+gB,WAAWzrB,MAAM0K;AAAAA,QAAG,CAAC;AAC5D,YAAGhL,OAAO+P,MAAK;AACb+b,WAAAA,MAAAA,kBAAkBxrB,UAAlBwrB,gBAAAA,IAAyBd,OAAOhrB,OAAO+P;AAAAA,QACzC;AAAA,MACF;AAAA;AAKF,UAAM7C,oBAAoBA,MAAM;AAC9BC,qBAAeC,QAAO;AAAA;AAIxB,UAAMC,qBAAqBA,MAAM;AAC/BF,qBAAeC,QAAO;AACtBL,cAAQ;AAAA,QAAC,GAAGgf,WAAWzrB;AAAAA,MAAK,CAAC;AAAA;AAG/B,UAAM6M,iBAAiBlN,SAASqN,aAAa;AAAA,MAC3C3I,OAAO;AAAA,MACP4I,OAAO;AAAA,MACPzD,OAAO;AAAA,MACP0D,SAASA,MAAM;AACbL,uBAAeC,QAAO;AAAA,MACvB;AAAA,MACDK,MAAMA,MAAM;AACV,eAAOxS,EAAE8uB,yBAAwB;AAAA,UAACE;AAAAA,UAAMhrB,KAAImrB,OAAG0B,kBAAkBxrB,QAAQ8pB;AAAAA,QAAC,CAAC;AAAA,MAC5E;AAAA,MACDxc,QAAQA,MAAM;AAGZ,YAAIqe,WAAW,CAAA9uB,YAAAI,UAAA;AAAA,UAAA,QAAA;AAAA,UAAA,WACqBkK,MAAIiiB,YAAYppB,QAAQ;AAAA,QAAO,GAAA;AAAA,UAAA5C,SAAAA,MAAA,CAAAuF,gBAAA,KAAA,CAAA;AAAA,QAGlE,CAAA,CAAA;AAED,YAAGymB,YAAYppB,SAAS,SAAQ;AAC9B2rB,qBAAW,CAAA9uB,YAAAI,UAAA;AAAA,YAAA,QAAA;AAAA,YAAA,WACyBkK,MAAIiiB,YAAYppB,QAAM;AAAA,UAAQ,GAAA;AAAA,YAAA5C,SAAAA,MAAA,CAAAuF,gBAAA,MAAA,CAAA;AAAA,WAAA9F,GAAAA,YAAAI,UAAA;AAAA,YAAA,QAAA;AAAA,YAAA,WAG9ByuB;AAAAA,UAAiB,GAAA;AAAA,YAAAtuB,SAAAA,MAAA,CAAAuF,gBAAA,KAAA,CAAA;AAAA,WAAA9F,GAAAA,YAAAI,UAAA;AAAA,YAAA,QAAA;AAAA,YAAA,WAGjB8P;AAAAA,UAAkB,GAAA;AAAA,YAAA3P,SAAAA,MAAA,CAAAuF,gBAAA,IAAA,CAAA;AAAA,UAGrD,CAAA,CAAA;AAAA,QACH;AAEA,eAAA9F,YAAAqN,UAAArN,MAAAA,CAAAA,YAAAI,UAAA;AAAA,UAAA,WAEuB2P;AAAAA,QAAiB,GAAA;AAAA,UAAAxP,SAAAA,MAAA,CAAAuF,gBAAA,IAAA,CAAA;AAAA,QAAA,CAAA,GAAA,GAChCgpB,QAAQ,CAAA;AAAA,MAGlB;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AACH;AClTO,MAAMC,yBAAyB,OAAOC,cAAqB;AAEhE,QAAM;AAAA,IAAEC;AAAAA,EAAQ,IAAIC,wBAAwBF,SAAS;AAErD,SAAO,IAAIrf,QAAQC,aAAW;AAE5B,UAAMuf,eAAertB,IAAc,IAAI;AACvC,UAAMud,mBAAmBvd,IAAI,EAAE;AAG/B,UAAMiO,oBAAoBA,MAAM;AAC9BC,qBAAeC,QAAO;AAAA;AAIxB,UAAMC,qBAAqBA,MAAM;AAC/BF,qBAAeC,QAAO;AACtBL,cAAQ;AAAA,QAAC,GAAGuf,aAAahsB;AAAAA,MAAY,CAAC;AAAA;AAIxC,UAAMisB,cAAevwB,UAAW;AAC9BswB,mBAAahsB,QAAQtE;AAAAA;AAGvB,UAAMmR,iBAAiBlN,SAASqN,aAAa;AAAA,MAC3C3I,OAAO;AAAA,MACP4I,OAAO;AAAA,MACPzD,OAAO;AAAA,MACP0D,SAASA,MAAM;AACbL,uBAAeC,QAAO;AAAA,MACvB;AAAA,MACDK,MAAMA,MAAM;AAGV,cAAM+e,wBAAwBJ,QAAQ/lB,OAAOrK,UAAM;AACjD,cAAGwgB,iBAAiBlc,OAAM;AACxB,mBAAOtE,KAAKW,KAAKsO,QAAQuR,iBAAiBlc,KAAK,KAAK,KAAKtE,KAAK2I,MAAMsG,QAAQuR,iBAAiBlc,KAAK,KAAK;AAAA,UACzG,OACI;AACF,mBAAO;AAAA,UACT;AAAA,QACF,CAAC,EAAEO,IAAI7E,UAAM;;AAEX,iBAAAmB,YAAA,OAAA;AAAA,YAAA,SACO,mDAAoDnB,KAAKywB,QAAQ,UAAQ,EAAE,MAAMH,MAAAA,aAAahsB,UAAbgsB,gBAAAA,IAAoB3vB,SAAQX,KAAKW,OAAO,WAAS,EAAE;AAAA,YAAG,WACrI8K,MAAI8kB,YAAYvwB,IAAI;AAAA,UAAC,GAAA,CAC3BA,KAAKywB,QAAKtvB,YAAA,OAAA;AAAA,YAAA,OAAcnB,KAAKywB;AAAAA,UAAY,GAAA,IAAA,IAAA,MAAItvB,YAAA,OAAA;AAAA,YAAA,SAAA;AAAA,UACsBnB,GAAAA,CAAAA,KAAK2I,KAAK,CAAA,CAAA,CAAA;AAAA,QAElF,CAAC;AAED,eAAAxH,YAAA,OAAA;AAAA,UAAA,SAAA;AAAA,WAAAA,CAAAA,YAAAuK,SAAA;AAAA,UAAA,cACoB8U,iBAAiBlc;AAAAA,UAAK,uBAAAoN,YAAtB8O,iBAAiBlc,QAAKoN;AAAAA,UAAA,eAAe/F;AAAAA,UAAM,aAAa;AAAA,QAAI,GAAA,IAAA,GAAAxK,YAAA,OAAA;AAAA,UAAA,SAAA;AAAA,QAAA,GAAA,CAE3EqvB,qBAAqB,CAAA,CAAA,CAAA;AAAA,MAG3B;AAAA,MACD5e,QAAQA,MAAM;AACZ,eAAAzQ,YAAAqN,UAAArN,MAAAA,CAAAA,YAAAI,UAAA;AAAA,UAAA,WACqB2P;AAAAA,QAAiB,GAAA;AAAA,UAAAxP,SAAAA,MAAA,CAAAuF,gBAAA,IAAA,CAAA;AAAA,SAAA9F,GAAAA,YAAAI,UAAA;AAAA,UAAA,QAAA;AAAA,UAAA,WACF8P;AAAAA,UAAkB,YAAY,CAACif,aAAahsB;AAAAA,QAAK,GAAA;AAAA,UAAA5C,SAAAA,MAAA,CAAAuF,gBAAA,IAAA,CAAA;AAAA,QAAA,CAAA,CAAA,CAAA;AAAA,MAIvF;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AACH;ACpEO,MAAMypB,2BAA2B,SAASP,WAAkC;AAEjF,QAAM;AAAA,IAAEQ;AAAAA,EAAU,IAAIN,wBAAwBF,SAAS;AAEvD,SAAO,IAAIrf,QAAiBC,aAAe;AAEzC,UAAMuf,eAAertB,IAAc,IAAI;AACvC,UAAMud,mBAAmBvd,IAAI,EAAE;AAG/B,UAAMiO,oBAAoBA,MAAM;AAC9BC,qBAAeC,QAAO;AAAA;AAIxB,UAAMC,qBAAqBA,MAAM;;AAC/BF,qBAAeC,QAAO;AACtBL,eAAQuf,MAAAA,aAAahsB,UAAbgsB,gBAAAA,IAAoB3vB,IAAI;AAAA;AAIlC,UAAM4vB,cAAevwB,UAAW;AAC9BswB,mBAAahsB,QAAQtE;AAAAA;AAGvB,UAAMmR,iBAAiBlN,SAASqN,aAAa;AAAA,MAC3C3I,OAAO;AAAA,MACP4I,OAAO;AAAA,MACPzD,OAAO;AAAA,MACP0D,SAASA,MAAM;AACbL,uBAAeC,QAAO;AAAA,MACvB;AAAA,MACDK,MAAMA,MAAM;AAGV,cAAM+e,wBAAwBG,UAAUtmB,OAAOrK,UAAM;AACnD,cAAGwgB,iBAAiBlc,OAAM;AACxB,mBAAOtE,KAAKW,KAAKsO,QAAQuR,iBAAiBlc,KAAK,KAAK,KAAKtE,KAAK2I,MAAMsG,QAAQuR,iBAAiBlc,KAAK,KAAK;AAAA,UACzG,OACI;AACF,mBAAO;AAAA,UACT;AAAA,QACF,CAAC,EAAEO,IAAI7E,UAAM;;AAEX,iBAAAmB,YAAA,OAAA;AAAA,YAAA,SACO,mDAAoDnB,KAAKywB,QAAQ,UAAQ,EAAE,MAAMH,MAAAA,aAAahsB,UAAbgsB,gBAAAA,IAAoB3vB,SAAQX,KAAKW,OAAO,WAAS,EAAE;AAAA,YAAG,WACrI8K,MAAI8kB,YAAYvwB,IAAI;AAAA,UAAC,GAAA,CAC3BA,KAAKywB,QAAKtvB,YAAA,OAAA;AAAA,YAAA,OAAcnB,KAAKywB;AAAAA,UAAY,GAAA,IAAA,IAAA,MAAItvB,YAAA,OAAA;AAAA,YAAA,SAAA;AAAA,UACsBnB,GAAAA,CAAAA,KAAK2I,KAAK,CAAA,CAAA,CAAA;AAAA,QAElF,CAAC;AAED,eAAAxH,YAAA,OAAA;AAAA,UAAA,SAAA;AAAA,WAAAA,CAAAA,YAAAuK,SAAA;AAAA,UAAA,cACoB8U,iBAAiBlc;AAAAA,UAAK,uBAAAoN,YAAtB8O,iBAAiBlc,QAAKoN;AAAAA,UAAA,eAAe/F;AAAAA,UAAM,aAAa;AAAA,QAAI,GAAA,IAAA,GAAAxK,YAAA,OAAA;AAAA,UAAA,SAAA;AAAA,QAAA,GAAA,CAE3EqvB,qBAAqB,CAAA,CAAA,CAAA;AAAA,MAG3B;AAAA,MACD5e,QAAQA,MAAM;AACZ,eAAAzQ,YAAAqN,UAAArN,MAAAA,CAAAA,YAAAI,UAAA;AAAA,UAAA,WACqB2P;AAAAA,QAAiB,GAAA;AAAA,UAAAxP,SAAAA,MAAA,CAAAuF,gBAAA,IAAA,CAAA;AAAA,SAAA9F,GAAAA,YAAAI,UAAA;AAAA,UAAA,QAAA;AAAA,UAAA,WACF8P;AAAAA,UAAkB,YAAY,CAACif,aAAahsB;AAAAA,QAAK,GAAA;AAAA,UAAA5C,SAAAA,MAAA,CAAAuF,gBAAA,IAAA,CAAA;AAAA,QAAA,CAAA,CAAA,CAAA;AAAA,MAIvF;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AACH;AAOO,MAAM2pB,yBAAyB,WAA2B;AAE/D,SAAO,IAAI9f,QAAiBC,aAAe;AAEzC,UAAM8f,oBAAoB5tB,IAAI,EAAE;AAGhC,UAAMiO,oBAAoBA,MAAM;AAC9BC,qBAAeC,QAAO;AAAA;AAIxB,UAAMC,qBAAqBA,MAAM;AAC/BF,qBAAeC,QAAO;AACtBL,cAAQ8f,kBAAkBvsB,KAAK;AAAA;AAGjC,UAAM6M,iBAAiBlN,SAASqN,aAAa;AAAA,MAC3C3I,OAAO;AAAA,MACP4I,OAAO;AAAA,MACPzD,OAAO;AAAA,MACP0D,SAASA,MAAM;AACbL,uBAAeC,QAAO;AAAA,MACvB;AAAA,MACDK,MAAMA,MAAM;AACV,eAAAtQ,YAAAuK,SAAA;AAAA,UAAA,cAAyBmlB,kBAAkBvsB;AAAAA,UAAK,uBAAAoN,YAAvBmf,kBAAkBvsB,QAAKoN;AAAAA,UAAA,QAAA;AAAA,UAAA,YAA4B;AAAA,YAACof,SAAQ;AAAA,YAAGC,SAAQ;AAAA,UAAE;AAAA,QAAC,GAAA,IAAA;AAAA,MACpG;AAAA,MACDnf,QAAQA,MAAM;AACZ,eAAAzQ,YAAAqN,UAAArN,MAAAA,CAAAA,YAAAI,UAAA;AAAA,UAAA,WACqB2P;AAAAA,QAAiB,GAAA;AAAA,UAAAxP,SAAAA,MAAA,CAAAuF,gBAAA,IAAA,CAAA;AAAA,SAAA9F,GAAAA,YAAAI,UAAA;AAAA,UAAA,QAAA;AAAA,UAAA,WACF8P;AAAAA,QAAkB,GAAA;AAAA,UAAA3P,SAAAA,MAAA,CAAAuF,gBAAA,IAAA,CAAA;AAAA,QAAA,CAAA,CAAA,CAAA;AAAA,MAIxD;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AACH;AC1CA,MAAM,2BAA2B;AAKjC,MAAM,wBAAwB,EAAE,KAAK;AAKrC,MAAM,gBAAsE,CAAA;AAK5E,MAAM,kBAAkB,EAAE,KAAI;AAK9B,MAAM,8BAAkC,CAAA;AAO3B,MAAA,uBAAuB,SAAU,QAA2B,WAAmB;AAC1F,gBAAc,KAAK,EAAC,WAAU,OAAO,CAAA;AACvC;AAMa,MAAA,mBAAmB,SAAU,SAA+B,WAAoC;AAG3F,kBAAA;AAGhB,QAAM,YAAY,QAAQ,aAAa,UAAU,gBAAgB,GAAG;AAGjE,MAAA,4BAA4B,SAAS,GAAE;AACxC,UAAM,IAAI,MAAM,WAAW,SAAS,MAAM;AAAA,EAC5C;AAGM,QAAA,UAAW,cAAc,OAAO,CAAA,MAAI,CAAC,EAAE,aAAc,EAAE,cAAc,SAAW;AAGhF,QAAA,gBAAoB,QAAQ,OAAO,CAAA,MAAG,EAAE,OAAO,KAAK,EAAE,IAAI,CAAA,MAAG,EAAE,OAAO,KAAK,EAAE,OAAO,CAAC,GAAM,MAAQ,EAAE,OAAO,CAAC,CAAC;AAGpH,QAAM,SAAS,aAAa;AAAA,IAC1B,UAAU,QAAQ;AAAA,IAClB,MAAM,QAAQ;AAAA,IACd;AAAA,IACA,OAAO,QAAQ,QAAQ,CAAC,GAAG,eAAe,GAAG,QAAQ,KAAK,IAAW;AAAA,IACrE,OAAO,QAAQ;AAAA,IACf,SAAS;AAAA,EAAA,CACV;AAGD,QAAM,eAAmB,QAAQ,OAAO,CAAA,MAAG,EAAE,OAAO,UAAU,EAAE,IAAI,CAAA,MAAG,EAAE,OAAO,UAAU;AAE1F,QAAM,YAAgB,QAAQ,OAAO,CAAA,MAAG,EAAE,OAAO,aAAa,EAAE,OAAO,UAAU,MAAM,EAAE,IAAI,OAAG,EAAE,OAAO,SAAS,EAAE,OAAO,gBAAgB,OAAO,CAAA,SAAM,CAAC,KAAK,aAAa,KAAK,cAAc,SAAS,EAAE,IAAI,CAAM,SAAA,KAAK,QAAQ,CAAC;AAEjO,QAAM,UAAc,QAAQ,OAAO,CAAA,MAAG,EAAE,OAAO,WAAW,EAAE,OAAO,QAAQ,MAAM,EAAE,IAAI,OAAG,EAAE,OAAO,OAAO,EAAE,OAAO,cAAc,OAAO,CAAA,SAAM,CAAC,KAAK,aAAa,KAAK,cAAc,SAAS,EAAE,IAAI,CAAM,SAAA,KAAK,MAAM,CAAC;AAErN,QAAM,gBAAyC,CAAA;AAEjB,UAAA,0BAAyB,4BAA4B,SAAS,IAAI;AAAA,IAC9F;AAAA,IAAO,SAAQ,iBAAiB,gBAAgB,GAAG;AAAA,IACnD,OAAM,QAAQ,IAAI,CAAG,MAAA,EAAE,OAAO,SAAS,CAAE,CAAA,EAAE,OAAO,CAAC,GAAM,MAAQ,EAAE,OAAO,CAAC,CAAC;AAAA,IAC5E;AAAA,IACA,SAAQ,QAAQ,QAAQ,OAAO,OAAO;AAAA,IACtC,WAAU,QAAQ,UAAU,OAAO,SAAS;AAAA,IAC5C,WAAU,QAAQ;AAAA,IAClB,cAAa,QAAQ;AAAA,IACrB,cAAa,QAAQ;AAAA,EAAA,CACtB;AAEa,gBAAA,KAAK,GAAI,QAAQ,IAAI,CAAA,MAAG,EAAE,OAAO,gBAAgB,EAAE,OAAO,cAAc,MAAM,IAAE,CAAA,CAAE,EAAE,OAAO,CAAC,GAAM,MAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;AAEpI,aAAW,MAAI;AAEL,WAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQN,OAAO,uBAAuB,CAAC,EAAE,kBAAkB;AAEjD,eAAO,OAAO,MAAM;;AAClB,gBAAM,WAAW;AAGb,cAAA,SAAS,WAAW;AACtB,kBAAM,IAAI;AACV,qBAAS,OAAO,CAAC;AAAA,UACnB;AAGA,gBAAM,OAAO,CAAC,GAAG,SAAS,YAAa,CAAA;AAEvC,mBAAQ,IAAI,GAAG,IAAE,KAAK,QAAO,KAAI;AAEzB,kBAAA,OAAO,KAAK,CAAC;AACnB,kBAAM,KAAK,OAAO,gBAAgB,KAAK,OAAQ,CAAA;AAE5C,gBAAA,eAAe,IAAI,KAAK,IAAG;AAEzB,kBAAA,KAAK,WAAU;AACb,mBAAA,UAAU,IAAI,oBAAoB;AAAA,cAAA,OAElC;AACA,mBAAA,UAAU,OAAO,oBAAoB;AAAA,cAC1C;AAEA,mBAAK,KAAK,GAAG,KAAK,YAAa,CAAA;AAAA,YAEzB,WAAA,MAAM,YAAY,IAAI,GAAE;AAE9B,oBAAGtH,MAAA,yBAAI,uBAAJ,gBAAAA,IAAwB,QAAQ,kBAAiB,MAAK;AACpD,mBAAA,UAAU,IAAI,wBAAwB;AAAA,cAAA,OAEvC;AACC,mBAAA,UAAU,OAAO,wBAAwB;AAAA,cAC9C;AAAA,YACF;AAAA,UACF;AAAA,QAAA,CACD;AAAA,MAAA,CACF;AAAA,MACD,GAAG,aAAa,IAAI,CAAC,WAAa,OAAO,MAAM,CAAC;AAAA,IAAA;AAAA,EAClD,CACD;AAGD,YAAU,MAAM;AAId,WAAO,YAAY,QAAQ,aAAa,SAAY,QAAQ,WAAW,IAAI;AAG3E,gBAAY,MAAI;AAEd,aAAO,4BAA4B,SAAS;AAAA,IAAA,CAC7C;AAAA,EAAA,CACF;AAEM,SAAA;AAAA;AAAA,IAEL,2BAA0B,CAAC,YAAkB;AAC3C,aAAO,OAAO,MAAM;AAElB,cAAM,OAAO;AAEb,aAAK,MAAM;AAEX,YAAG,SAAQ;AACT,eAAK,OAAO,GAAG,sBAAsB,QAAO,OAAO,CAAC;AAAA,QAAA,OAElD;AACG,eAAA,OAAO,sBAAsB;AAAA,QACpC;AAAA,SAOC,qBAAqB;AAAA,IAC1B;AAAA,IACA;AAAA,EAAA;AAEJ;AAOa,MAAA,0BAA0B,SAAU,WAAmB;AAElE,QAAM,OAAO,YAAY,4BAA4B,SAAS,IAA4B,OAA6B,wBAAwB;AAE/I,MAAG,CAAC,MAAK;AAAS,UAAA,IAAI,MAAM,eAAe;AAAA,EAAI;AAExC,SAAA;AAAA,IACL,QAAO,KAAK;AAAA,IAAO,SAAQ,KAAK;AAAA,IAChC,SAAQ,KAAK,WAAW,CAAC;AAAA,IACzB,WAAU,KAAK,aAAa,CAAC;AAAA,IAC7B,WAAU,KAAK,aAAa;AAAA,IAC5B,cAAa,KAAK,gBAAgB;AAAA,IAClC,cAAa,KAAK,gBAAgB;AAAA,IAClC,mBAAkB,KAAK;AAAA,IACvB,sBAAsB,KAAK;AAAA;AAAA,IAE3B,wBAAwB,MAA0C;AAEhE,YAAM,SAAS,KAAK,QAAQ,KAAK,CAAM,SAAA,KAAK,QAAQ,IAAI;AAExD,UAAG,UAAU,MAAK;AACR,gBAAA,KAAK,YAAY,OAAO,GAAG;AAAA,MACrC;AAEO,aAAA;AAAA,IACT;AAAA;AAAA,IAEA,0BAA0B,MAA4C;AAEpE,YAAM,WAAW,KAAK,UAAU,KAAK,CAAM,SAAA,KAAK,QAAQ,IAAI;AAE5D,UAAG,YAAY,MAAK;AACV,gBAAA,KAAK,YAAY,OAAO,GAAG;AAAA,MACrC;AAEO,aAAA;AAAA,IACT;AAAA,EAAA;AAEJ;AAKA,MAAM,gBAAsE,CAAA;AAM/D,MAAA,8BAA8B,CAAC,SAA4B,cAAsB;AAE5F,MAAG,cAAc,OAAO,CAAA,SAAM,CAAC,KAAK,aAAa,KAAK,cAAc,SAAS,EAAE,UAAU,UAAM,KAAK,OAAO,QAAQ,QAAQ,IAAI,KAAK,GAAE;AACpI,YAAQ,KAAK,MAAM,QAAQ,KAAK,QAAQ;AAAA,EAAA,OAEtC;AACF,kBAAc,KAAK,EAAE,WAAU,QAAO,QAAQ,CAAA;AAAA,EAChD;AACF;AAMa,MAAA,gCAAgC,CAAC,SAAgB;AAE5D,WAAQ,IAAI,GAAE,IAAI,cAAc,QAAQ,KAAI;AAC1C,QAAG,cAAc,CAAC,EAAE,OAAO,QAAQ,MAAK;AACxB,oBAAA,OAAO,GAAE,CAAC;AACxB;AAAA,IACF;AAAA,EACF;AACF;AAKA,MAAM,kBAA4E,CAAA;AAMrE,MAAA,gCAAgC,CAAC,SAA8B,cAAsB;AAEhG,MAAG,gBAAgB,OAAO,CAAA,SAAM,CAAC,KAAK,aAAa,KAAK,cAAc,SAAS,EAAE,UAAU,UAAM,KAAK,SAAS,QAAQ,QAAQ,IAAI,KAAK,GAAE;AACxI,YAAQ,KAAK,MAAM,QAAQ,KAAK,QAAQ;AAAA,EAAA,OAEtC;AACF,oBAAgB,KAAK,EAAE,WAAU,UAAS,QAAQ,CAAA;AAAA,EACpD;AACF;AAMa,MAAA,kCAAkC,CAAC,SAAgB;AAE9D,WAAQ,IAAI,GAAE,IAAI,gBAAgB,QAAQ,KAAI;AAC5C,QAAG,gBAAgB,CAAC,EAAE,SAAS,QAAQ,MAAK;AAC1B,sBAAA,OAAO,GAAE,CAAC;AAC1B;AAAA,IACF;AAAA,EACF;AACF;ACvWA,MAAM,qBAA8C;AAYpD,MAAM,cAAc,kiBAAkiB,MAAM,GAAG;AAG/jB,MAAM,uBAAuB,SAAS,SAA4C,MAAY,WAAkB,IAAG;AACjH,UAAQ,KAAK,EAAC,OAAM,GAAG,KAAK,MAAM,OAAO,WAAW,GAAG,IAAI,GAAG,OAAM,OAAM,OAAK,MAAK;AACtF;AAOa,MAAA,wBAAwB,SAAU,QAAuB,SAA6B;;AAEjG,MAAI,CAAC,QAAQ;AAAE,aAAS,wBAA0B,EAAA;AAAA,EAAQ;AAG1D,MAAG,CAAC,SAAQ;AAAY,cAAA,EAAE,cAAa,IAAG,mBAAkB,IAAG,iBAAgB,CAAA;EAAM;AAGrF,UAAQ,iBAAR,QAAQ,eAAiB;AAGtB,MAAA,GAACA,MAAA,mCAAS,oBAAT,gBAAAA,IAA0B,SAAO;AACnC,YAAQ,kBAAkB;AAE1B,aAAQ,IAAE,GAAE,IAAE,IAAG,KAAG,GAAE;AACpB,2BAAqB,QAAQ,iBAAgB,KAAK,GAAE,QAAQ,YAAY;AACrE,UAAA,KAAK,KAAK,IAAI,IAAG;AAClB,6BAAqB,QAAQ,iBAAgB,KAAK,IAAI,KAAI,QAAQ,YAAY;AAC9E,6BAAqB,QAAQ,iBAAgB,KAAK,IAAI,GAAE,QAAQ,YAAY;AAC5E,6BAAqB,QAAQ,iBAAgB,KAAK,IAAI,KAAI,QAAQ,YAAY;AAAA,MAChF;AAAA,IACF;AAAA,EACF;AAGG,MAAA,GAACQ,MAAA,mCAAS,sBAAT,gBAAAA,IAA4B,SAAO;AACrC,YAAQ,oBAAoB,CAAC,EAAC,OAAM,IAAG,OAAM,OAAO,CAAA,EAAE,OAAO,YAAY,IAAI,CAAI,OAAA;AAC/E,UAAI,MAAM,GAAG,MAAM,GAAG,GAAE,QAAM,IAAI,CAAC,GAAE,QAAM,IAAI,CAAC,KAAK,IAAI,KAAK;AACvD,aAAA,EAAE,OAAM;IAChB,CAAA,CAAC;AAAA,EACJ;AAEM,QAAA,UAAU,IAAI,KAAK;AACnB,QAAA,UAAU,IAAI,KAAK;AACzB,QAAM,WAAW,IAAI,QAAQ,eAAa,IAAI;AACxC,QAAA,YAAY,IAAY,MAAM;AAC9B,QAAA,UAAU,IAAY,MAAM;AAClC,QAAM,aAAa,IAAS,QAAQ,kBAAmB,CAAC,CAAC;AACnD,QAAA,UAAU,IAAI,KAAK;AACnB,QAAA,YAAY,IAAI,KAAK;AACrB,QAAA,eAAe,IAAI,KAAK;AACxB,QAAA,mBAAmB,IAAI,KAAK;AAC5B,QAAA,eAAe,IAAI,KAAK;AACxB,QAAA,iBAAiB,IAAI,KAAK;AAGhC,QAAM,YAAY,IAAyB,CAAC,QAAO,UAAS,SAAQ,SAAS,CAAC;AAC9E,QAAM,aAAa,IAAI,UAAU,MAAM,CAAC,CAAC;AACnC,QAAA,UAAU,IAAI,KAAK;AACnB,QAAA,YAAY,IAAI,EAAE;AAClB,QAAA,uBAAuB,IAAI,KAAK;AAGtC,QAAM,kBAAkB;AAAA,IACtB,EAAC,OAAM,aAAY,OAAM,KAAI;AAAA,IAC7B,EAAC,OAAM,MAAK,OAAM,OAAM;AAAA,IACxB,EAAC,OAAM,MAAK,OAAM,OAAM;AAAA,IACxB,EAAC,OAAM,MAAK,OAAM,OAAM;AAAA,IACxB,EAAC,OAAM,MAAK,OAAM,OAAM;AAAA,IACxB,EAAC,OAAM,MAAK,OAAM,OAAM;AAAA,EAAA;AAGpB,QAAA,qBAAqB,IAAI,IAAI;AAG7B,QAAA,aAAa,IAAsB,IAAI;AAGvC,QAAA,eAAe,SAAS,OAAa,OAAc;AAEpD,QAAA,CAAC,QAAO,UAAS,aAAY,iBAAgB,aAAY,aAAa,EAAE,QAAQ,KAAK,KAAI,GAAE;AACrF,aAAA,gBAAgB,qBAAqB,KAAuB;AAAA,IAAA,WAE7D,SAAS,QAAO;AAEtB,UAAG,QAAQ,OAAM;AACR,eAAA,gBAAgB,qBAAqB,IAAI;AAAA,MAAA,OAE9C;AACF,2BAAmB,EAAE,EAAE,KAAK,CAAC,SAAW;AACnC,cAAA,KAAK,QAAO;AACb,mBAAO,gBAAgB,qBAAqB,YAAY,IAAI,CAAC;AAAA,UAC/D;AAAA,QAAA,CACD;AAAA,MACH;AAAA,IAAA,OAGE;AACF,aAAO,OAAO,MAAM;AAElB,cAAM,YAAY;AAElB,YAAI,cAAc,MAAK;AACrB,0BAAgB,WAAU,EAAE,CAAC,KAAK,GAAE,MAAc,CAAA;AAAA,QACpD;AAAA,MACF,GAAE,CAAE,CAAA;AAAA,IACN;AAAA,EAAA;AAII,QAAA,iBAAiB,SAAS,MAAY;AAE1C,UAAM,cAAkB,gBAAgB,KAAK,CAAM,SAAA,KAAK,SAAS,IAAI;AAErE,WAAO,OAAO,MAAM;AAEhB,YAAM,YAAY;AAEd,UAAA,kBAAkB,SAAS,GAAE;AAG/B,wBAAgB,WAAW,EAAE,CAAC,WAAW,GAAE,GAAI,CAAA;AAE5C,YAAA,YAAY,SAAS,aAAY;AAElC,cAAG,aAAa,OAAM;AACb,mBAAA,gBAAgB,qBAAqB,WAA6B;AAAA,UAAA,WAEnE,eAAe,OAAM;AACpB,mBAAA,gBAAgB,qBAAqB,aAA+B;AAAA,UAAA,OAEzE;AACa,2BAAA,WAAW,MAAM,qBAAA,CAAsB;AAAA,UACxD;AAAA,QAAA,OAEE;AACF,yBAAe,WAAW,MAAM;AACvB,mBAAA,mBAAmB,YAAY,KAAwB;AAAA,UAAA,CAC/D;AAAA,QACH;AACA,2BAAmB,QAAQ,YAAY;AAAA,MACzC;AAAA,IAAA,CACH;AAAA,EAAA;AAGH,aAAW,MAAM;AAGR,WAAA;AAAA,MACL,OAAO,gBAAgB,kBAAkB,CAAC,YAAqB;AAC7D,gBAAQ,QAAQ;AACT,eAAA;AAAA,SACN,kBAAkB;AAAA,MACrB,OAAO,gBAAgB,kBAAkB,CAAC,YAAqB;AAC7D,gBAAQ,QAAQ;AACT,eAAA;AAAA,SACP,kBAAkB;AAAA;AAAA,MAEpB,OAAO,uBAAuB,CAAC,EAAE,kBAAkB;AACjD,oBAAY,KAAK,MAAM;;AAErB,gBAAM,YAAY;AAEd,cAAA,kBAAkB,SAAS,GAAG;AAE1B,kBAAA,aAAa,UAAU,OAAO,QAAQ;AAExC,gBAAA,aAAa,WAAW,aAAa,SACjC,aACA,oBAAoB,YAAY,CAAC,MAAM;AACjC8lB,oBAAAA,UAAS,EAAE;AAEVA,qBAAAA,YAAW,QAAQ,eAAeA,OAAM;AAAA,YAAA,CAChD;AAGP,gBAAI,eAAe,MAAK;AAAE,2BAAa,WAAW;YAA4B;AAE9E,gBAAI,YAAY,OAAO,gBAAgB,WAAW,OAAQ,CAAA;AAG/C,uBAAA,SAAS,uCAAW,MAAM,cAAmC;AAErE,gBAAA,WAAW,SAAU,SAAQ;AAAE,yBAAW,QAAS;AAAA,YAAA,WAC9C,WAAW,SAAU,OAAM;AAAE,yBAAW,QAAS;AAAA,YAAS;AAG1D,oBAAA,QAAQ,UAAU,UAAU,MAAM;AAChC,sBAAA,QAAQ,UAAU,UAAU,QAAQ;AACjC,yBAAA,QAAQ,UAAU,UAAU,WAAW;AACnC,6BAAA,QAAQ,UAAU,UAAU,eAAe;AAC/C,yBAAA,QAAQ,UAAU,UAAU,WAAW;AACrC,2BAAA,QAAQ,UAAU,UAAU,aAAa;AAExD,gBAAG,aAAa,OAAM;AACD,iCAAA,UAAQtmB,MAAA,gBAAgB,KAAK,CAAA,SAAM,KAAK,SAAS,WAAW,MAApD,gBAAAA,IAAuD,UAAS;AAAA,YAAA,WAErF,eAAe,OAAM;AACR,iCAAA,UAAQQ,MAAA,gBAAgB,KAAK,CAAA,SAAM,KAAK,SAAS,aAAa,MAAtD,gBAAAA,IAAyD,UAAS;AAAA,YAAA,WAEtF,cAAc,MAAM;AACrB,oBAAA,OAAO,eAAe,UAAU,IAAI,WAAW,OAAO,IAAI,WAAW;AACxD,iCAAA,UAAQ8R,MAAA,gBAAgB,KAAK,CAAA,SAAM,KAAK,SAAS,IAAI,MAA7C,gBAAAA,IAAgD,UAAS;AAAA,YACtF;AAGA,gBAAI,KAAK,mCAAmC,WAAW,eAAe,EAAE;AACxE,gBAAI,KAAK,mCAAmC,WAAW,aAAa,EAAE;AAEtE,gBAAG,IAAG;AACK,uBAAA,QAAQ,KAAK,MAAM,WAAW,EAAE,IAAK,QAAQ,YAAc,IAAE;AAAA,uBAEhE,WAAU;AAChB,uBAAS,UAAQ+e,OAAAC,MAAA,OAAO,eAAe,MAAtB,gBAAAA,IAAyB,cAAc,gBAAvC,gBAAAD,IAAoD,iBAAiB,WAAW,aAAY,KAAK,MAAO,QAAQ,YAAc,IAAE;AAAA,YAAA,OAE/I;AACF,uBAAS,QAAQ,KAAK,MAAO,QAAQ,YAAc,IAAE;AAAA,YACvD;AAGG,gBAAA,CAAC,MAAM,WAAU;AACb,qBAAAE,OAAAC,MAAA,OAAO,qBAAP,gBAAAA,IAAyB,cAAc,gBAAvC,gBAAAD,IAAoD,iBAAiB,WAAW,eAAc;AAAA,YACrG;AAEA,sBAAU,QAAQ,mCAAmC,WAAW,SAAS,MAAM;AAC/E,oBAAQ,QAAQ,mCAAmC,WAAW,oBAAoB,EAAE;AACzE,uBAAA,UAAQE,MAAA,QAAQ,sBAAR,gBAAAA,IAA2B,KAAK,CAAA,SAAM,KAAK,SAAO,QAAO,QAAQ,kBAAmB,CAAC;AAGxG,iCAAqB,QAAQ;AAGvB,kBAAA,SAAS,WAAW;AAE1B,gBAAG,QAAQ,QAAQ,YAAY,MAAM,KAAK,YAAY,UAAU,GAAE;AACtD,wBAAA,QAAQ,YAAY,MAAM,IAAI,OAAO,OAAO,IAAK,WAAwB;YAAO,OAExF;AACF,wBAAU,QAAQ;AAAA,YACpB;AAGA,uBAAW,QAAQ;AAAA,UAAA,OAGjB;AACF,iCAAqB,QAAQ;AAClB,uBAAA,QAAQ,iBAAiB,SAAS,IAAI,UAAU,SAAS,EAAE,CAAC,IAAI;AAC3E,+BAAmB,QAAQ;AAAA,UAC7B;AAAA,QAAA,CACD;AAAA,MAAA,CACF;AAAA,IAAA;AAAA,EACH,CACD;AAGD,QAAM,cAAc,MAAI;AAAS,WAAA,gBAAgB,cAAc,MAAS;AAAA,EAAA;AACxE,QAAM,cAAc,MAAI;AAAS,WAAA,gBAAgB,cAAc,MAAS;AAAA,EAAA;AAEjE,SAAA;AAAA,IACL;AAAA,IAAQ;AAAA,IACR;AAAA,IAAQ;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,IAAS,iBAAgB,QAAQ;AAAA,IACjC;AAAA,IACA;AAAA,IACA;AAAA,IAAW,mBAAkB,QAAQ;AAAA,IACrC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IAAW;AAAA,IAAgB;AAAA,IAAmB;AAAA,EAAA;AAElD;AC7Ra,MAAA,gCAAqE,cAAc,+BAA+B;AAKlH,MAAA,8BAA8D,cAAc,6BAA6B;AAKzG,MAAA,0CAA0E,cAAc,yCAAyC;AAajI,MAAA,iBAAiB,SAAU,QAAuB,KAAuB;AACpF,SAAO,OAAO,iBAAiB,KAAK,MAAM;AAClC,UAAA,OAAO,cAAc,GAAG;AAC9B,QAAI,SAAS;AACJ,aAAA;AACT,WAAO,KAAK;EAAW,CACxB;AACH;AAGa,MAAA,iBAAiB,CAAC,WAA6C;AACnE,SAAA,IAAI,QAAQ,CAAU,aAAA;AAC3B,WAAO,OAAO,MAAM;AAClB,YAAM,YAAY;AACd,UAAA,iBAAiB,SAAS,KAAK,WAAU;AAC3C,kBAAU,MAAM;AAAA,MAClB;AACA,eAAS,MAAS;AAAA,IAAA,CACnB;AAAA,EAAA,CACF;AACH;AAGO,MAAM,cAAc,CAAC,QAAsB,UAAkB,QAAkC;AAE7F,SAAA,IAAI,QAAQ,CAAU,aAAA;AAC3B,WAAO,OAAO,MAAM;AAClB,UAAI,YAAY;AAEZ,UAAA,CAAC,iBAAiB,SAAS,GAAG;AAChC,oBAAY,qBAAqB;AACjC,sBAAc,SAAS;AAAA,MACzB;AACI,UAAA,iBAAiB,SAAS,GAAG;AAC3B,YAAA;AACQ,oBAAA,IAAI,MAAM,GAAG,CAAC;AAAA;AAEd,oBAAA,OAAO,MAAM,GAAG,CAAC;AAAA,MAC/B;AACA,eAAS,MAAS;AAAA,IAAA,CACnB;AAAA,EAAA,CACF;AAEH;AAGa,MAAA,2BAA2B,OAAO,QAAqB,YAAiB;AACnF,QAAM,eAAe,MAAM;AACrB,QAAA,YAAY,QAAO,MAAK,OAAO;AACvC;AC5EA,SAAS,QAAQ,SAA4C;AACpD,SAAA,CAAC,QAAQ,UAAU,QAAQ,kBAAkB,QAAQ,OAAA,CAAQ;AACtE;AAEA,SAAS,kCACP,aACA,YACA,wBAC6B;AAC7B,MAAI,eAAe;AACV,WAAA;AAEH,QAAA,WAAiC,QAAQ,UAAU;AACzD,MAAI,qBAAkD,CAAA;AACtD,MAAI,gBAAgB,MAAM;AAGtB,QAAA,uBAAuB,SAAS,KAC7B,uBAAuB,CAAC,EAAE,CAAC,MAAM,WAAW,OAC/C;AACO,aAAA;AAAA,IACT;AAEqB,yBAAA,CAAC,UAAU,GAAG,sBAAsB;AAAA,EAAA,OAEtD;AACH,aAAS,IAAI,GAAG,IAAI,uBAAuB,QAAQ,KAAK;AACtD,YAAM,MAAM,uBAAuB,CAAC,EAAE,CAAC;AACpB,yBAAA,KAAK,uBAAuB,CAAC,CAAC;AACjD,UAAI,QAAQ,YAAY,OAAA,KAAY,QAAQ,WAAW,UAAU;AAG7D,YAAA,IAAI,IAAI,uBAAuB,UAC5B,uBAAuB,IAAI,CAAC,EAAE,CAAC,MAAM,WAAW,OACnD;AACO,iBAAA;AAAA,QACT;AAEA,2BAAmB,KAAK,QAAQ;AAAA,MAClC;AAAA,IACF;AAAA,EACF;AACO,SAAA;AACT;AAEA,SAAS,kCACP,KACA,wBAC6B;AAC7B,QAAM,qBAAqB,CAAA;AAC3B,aAAW,WAAW,wBAAwB;AACxC,QAAA,QAAQ,CAAC,MAAM;AACjB,yBAAmB,KAAK,OAAO;AAAA,EACnC;AACO,SAAA;AACT;AAEA,SAAS,gCACP,SACA,wBAC6B;AAC7B,QAAM,qBAAkD,CAAA;AACxD,aAAW,cAAc,wBAAwB;AAC/C,QAAI,WAAW,CAAC,MAAM,QAAQ,OAAO;AAChB,yBAAA,KAAK,QAAQ,OAAO,CAAC;AAAA;AAGxC,yBAAmB,KAAK,UAAU;AAAA,EACtC;AACO,SAAA;AACT;AAMA,SAAS,uBACP,aACA,SACA,wBAC6B;AAC7B,QAAM,qBAAkD,CAAA;AAClD,QAAA,WAAiC,QAAQ,OAAO;AAEtD,MAAI,CAAC;AACH,uBAAmB,KAAK,QAAQ;AAElC,aAAW,cAAc,wBAAwB;AAC/C,QAAI,WAAW,CAAC,MAAM,QAAQ,OAAO;AACnC;AAEF,uBAAmB,KAAK,UAAU;AAClC,QAAI,eAAe,WAAW,CAAC,MAAM,YAAY,OAAO;AACtD,yBAAmB,KAAK,QAAQ;AAAA,EACpC;AAEO,SAAA;AACT;AAEA,SAAS,oBAAoB,MAAuC;AAC9D,MAAA,cAAc,0BAA0B,IAAI;AAChD,SAAO,gBAAgB,QAAQ,CAAC,eAAe,WAAW;AACxD,kBAAc,0BAA0B,WAAW;AAE9C,SAAA;AACT;AAEO,SAAS,mBAAmB,QAAuB;AAClD,QAAA,kBAAkB,IAAiC,CAAA,CAAE;AAEpD,SAAA,iBAAiB,KAAK,MAAM;AACjC,UAAM,OAAO;AACP,UAAA,eAAe,KAAK;AAC1B,eAAW,SAAS,cAAc;AAC5B,UAAA,eAAe,KAAK,GAAG;AACzB,wBAAgB,MAAM,KAAK;AAAA,UACzB,MAAM,OAAO;AAAA,UACb,MAAM,eAAe;AAAA,UACrB,MAAM,OAAO;AAAA,QAAA,CACd;AAAA,MACH;AAAA,IACF;AAAA,EAAA,CACD;AAED,QAAM,2BAA2B,OAAO;AAAA,IACtC,CAAC,EAAE,aAAa,oBAAoB;AAClC,kBAAY,KAAK,MAAM;AACf,cAAA,sBAAsB,CAAC,SAAsB;AACtC,qBAAA,SAAS,KAAK,eAAe;AAClC,gBAAA,eAAe,KAAK,GAAG;AACnB,oBAAA,cAAc,oBAAoB,KAAK;AAC7C,8BAAgB,QAAQ;AAAA,gBACtB;AAAA,gBACA;AAAA,gBACA,gBAAgB;AAAA,cAAA;AAAA,YAClB,WAEO,eAAe,KAAK,GAAG;AAC9B,kCAAoB,KAAK;AAAA,YAC3B;AAAA,UACF;AAAA,QAAA;AAIF,iBACG,EAAA,YAAA,EACA,QAAQ,CAAC,SAAS;AACjB,cAAI,eAAe,IAAI,KAAK,cAAc,IAAI,KAAK,KAAK;AACtD,gCAAoB,IAAI;AAAA,QAAA,CAC3B;AAAA,MAAA,CACJ;AAAA,IACH;AAAA,EAAA;AAIF,QAAM,+BAA+B,OAAO;AAAA,IAC1C;AAAA,IACA,CAAC,iBAA4C;AACpC,aAAA,iBAAiB,KAAK,MAAM;AACjC,mBAAW,CAAC,SAAS,QAAQ,KAAK,cAAc;AAC9C,cAAI,aAAa,WAAW;AACpB,kBAAA,aAAa,cAA2B,OAAO;AACrD,gBAAI,eAAe,MAAM;AACjB,oBAAA,cAAc,oBAAoB,UAAU;AAClD,8BAAgB,QAAQ;AAAA,gBACtB;AAAA,gBACA;AAAA,gBACA,gBAAgB;AAAA,cAAA;AAAA,YAEpB;AAAA,UAAA,WAEO,aAAa,aAAa;AACjC,4BAAgB,QAAQ;AAAA,cACtB;AAAA,cACA,gBAAgB;AAAA,YAAA;AAAA,UAClB,WAEO,aAAa,WAAW;AACzB,kBAAA,aAAa,cAA2B,OAAO;AACrD,gBAAI,eAAe,MAAM;AACjB,oBAAA,cAAc,oBAAoB,UAAU;AAClD,8BAAgB,QAAQ;AAAA,gBACtB;AAAA,gBACA;AAAA,gBACA,gBAAgB;AAAA,cAAA;AAAA,YAEpB;AAAA,UACF;AAAA,QACF;AAAA,MAAA,CACD;AAAA,IACH;AAAA,EAAA;AAIF,QAAM,iCAAiC,OAAO;AAAA,IAC5C;AAAA,IACA,CAAC,iBAA4C;AACpC,aAAA,iBAAiB,KAAK,MAAM;AACjC,mBAAW,CAAC,SAAS,QAAQ,KAAK,cAAc;AAC9C,cAAI,aAAa,WAAW;AACpB,kBAAA,WAAW,cAAc,OAAO;AACtC,gBAAI,aAAa,MAAM;AACf,oBAAA,aAAa,SAAS;AACxB,kBAAA,eAAe,UAAU,GAAG;AAC9B,gCAAgB,QAAQ;AAAA,kBACtB;AAAA,kBACA,gBAAgB;AAAA,gBAAA;AAAA,cAEpB;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MAAA,CACD;AAAA,IACH;AAAA,EAAA;AAGF,aAAW,MAAM;AAAA,IACf;AAAA,IACA;AAAA,IACA;AAAA,EAAA,CACD;AAEM,SAAA;AACT;;;;;;;AChPA,UAAM,QAAQ;AAIR,UAAA,EAAE,WAAW;AAEnB,cAAU,MAAM;AAEd,eAAS,MAAM;AACN,eAAA;AAAA,UAAM,MAAM;AAKf,kBAAM,gBAAgB,SAAS;AACzB,kBAAA,cAAc,OAAO;AAEzB,gBAAA,gBAAgB,SACZ,kBAAkB,QAAQ,CAAC,YAAY,SAAS,aAAa,IACjE;AAEA,0BAAY,MAAM,EAAE,eAAe,KAAM,CAAA;AAAA,YAC3C;AAAA,UACF;AAAA,UACA,EAAE,kBAAkB,MAAM,iBAAiB;AAAA,QAAA;AAAA,MAC7C,CACD;AAAA,IAAA,CACF;;;;;;;;;;;;ACxBD,UAAM,QAAQ;AAER,UAAA,EAAE,WAAW;AAEb,UAAA,eAAe,SAAuB,MAAM,MAAM,MAAM,oBAAoB,KAAK,yBAAyB;AAEhH,QAAG,QAAO;AACN,kBAAY,CAAC,iBAAiB;AAC5B,qBAAa,gBAAgB,QAAQ,aAAa,OAAO,GAAI,CAAC;AAAA,MAAA,CACjE;AAAA,IACH;;;;;;;;;ACNM,UAAA,EAAE,WAAW;AAEnB,eAAW,MAAM;AACf,aAAO,OAAO;AAAA,QAA+B;AAAA,QAAgB,CAAC,UAAU;AACpE,gBAAM,YAAY;AAEd,cAAA,CAAC,kBAAkB,SAAS;AACvB,mBAAA;AAET,gBAAM,eAAe;AAErB,iBAAO,OAAO;AAAA,YACZ,MAAM,WAAW,0BAA0B;AAAA,YAC3C;AAAA,UAAA;AAAA,QAEJ;AAAA,QACA;AAAA,MAAA;AAAA,IACF,CACD;;;;;;;;;;AClBK,UAAA,EAAE,WAAW;AAEb,UAAA,qBAAqB,IAA6E,CAAC,EAAC,MAAK,QAAO,KAAI,QAAO,UAAS,KAAI,CAAC,CAAC;AAE1I,UAAA,iBAAiB,CAAC,SAAY;AAEhC,UAAI,OAAW,CAAA;AAEf,UAAG,MAAK;AAEA,YAAA,OAAc,iBAAiB,IAAI,IAAI,MAAO,KAAK,UAAU,KAAK,QAAA,IAAY,KAAK,QAAQ;AAG5F,YAAA,eAAe,IAAI,GAAE;AAAS,iBAAA,GAAG,KAAK,OAAA,CAAQ;AAAA,QAAG;AAEpD,aAAK,KAAK;AAAA,UACN,KAAI,KAAK,OAAO;AAAA,UAChB,MAAK,KAAK,YAAY;AAAA,UACtB,MAAK,KAAK,UAAU,KAAK,YAAY;AAAA,UACrC,UAAS,YAAY,IAAI,KAAM,iBAAiB,IAAI,KAAK,KAAK,gBAAA,KAAqB;AAAA,QAAA,CACtF;AAEE,YAAA,KAAK,aAAY;AAChB,iBAAO,KAAK,OAAO,eAAe,KAAK,UAAW,CAAA,CAAC;AAAA,QACvD;AAAA,MACJ;AAEO,aAAA;AAAA,IAAA;AAGX,eAAW,MAAM;AAEb,aAAO,OAAO,uBAAuB,CAAC,EAAE,kBAAkB;AAEtD,oBAAY,KAAK,MAAI;AAEjB,gBAAM,YAAY;AAEd,cAAA,kBAAkB,SAAS,GAAG;AAC9B,+BAAmB,QAAQ,eAAe,UAAU,OAAO,QAAS,CAAA,EAAE;UAAQ,WAE1E,iBAAiB,SAAS,GAAE;AACb,+BAAA,QAAQ,eAAe,UAAU,SAAA,EAAW,CAAC,CAAC,EAAE;UACvE;AAAA,QAAA,CACH;AAAA,MAAA,CAEJ;AAAA,IAAA,CACJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzCD,MAAM,cAAuC;;;;AAC7C,UAAM,EAAE,QAAO,SAAQ,yBAAwB,kBAAA,IAAsB;AAC/D,UAAA,mBAAmB,IAAI,EAAE,MAAM,MAAM,KAAK,OAAM,OAAM,KAAI,QAAO,IAAK,CAAA;AACtE,UAAA,aAAa,IAA2B,IAAI;AAC5C,UAAA,gBAAgB,WAAgB,IAAI;AAC1C,UAAM,WAAW,SAAS,EAAE,MAAM,MAAM,KAAK,OAAO;AAC9C,UAAA,YAAY,IAAI,KAAK;AACrB,UAAA,WAAW,IAAI,KAAK;AAChB,QAAI;AAOd,UAAM,iBAAiB,MAAM;AAE3B,eAAS,MAAM;;AAET,YAAA,cAAc,SAAS,MAAM;AAE/B,gBAAM,cAAc,SAAS,KAAK,cAAc,MAAI,OAAO;AAE3D,gBAAM,gBAAezxB,MAAA,OAAO,eAAe,MAAtB,gBAAAA,IAAyB;AAC9C,gBAAM,gBAAgB,OAAO,gBAAgB,cAAc,MAAM,OAAO;AAClE,gBAAA,aAAa,cAAc;AAC3B,gBAAA,wBAAwB,OAAO,iBAAiB,aAAa;AAC7D,gBAAA,oBAA2B,SAAS,sBAAsB,SAAS;AACnE,gBAAA,qBAA4B,SAAS,sBAAsB,UAAU;AACrE,gBAAA,uBAA8B,SAAS,sBAAsB,YAAY;AACzE,gBAAA,sBAA6B,SAAS,sBAAsB,WAAW;AAE7E,cAAI,UAAS,2CAAa,cAAa,OAAK,6CAAc,MAAK,IAC3D,UAAS,2CAAa,eAAc,OAAK,6CAAc,MAAK;AAE7D,cAAA,WAAW,SAAS,MAAK;AAEpB,kBAAA,YAAY,WAAW,MAAM,sBAAsB;AAGhD,qBAAA,MAAM,KAAK,IAAI,WAAW,IAAI,UAAU,SAAS,IAAI,OAAO,IAAI,KAAK,IAAI;AAClF,qBAAS,OAAO,KAAK,IAAI,UAAU,QAAQ,KAAK,WAAW,IAAI,WAAW,QAAQ,GAAE,CAAC,IAAI;AAAA,UAC3F;AAGA,2BAAiB,QAAQ;AAAA,YACvB,KAAI,GAAG,WAAW,IAAK,QAAQ,iBAAiB;AAAA,YAAK,MAAK,GAAG,WAAW,IAAI,QAAQ,kBAAkB;AAAA,YACtG,OAAM,GAAG,WAAW,QAAQ,qBAAqB,mBAAmB;AAAA,YAAK,QAAO,GAAG,WAAW,SAAS,oBAAoB,oBAAoB;AAAA,UAAA;AAAA,QAGnJ;AAAA,MAAA,CACD;AACM,aAAA;AAAA,IAAA;AAIH,UAAA,YAAY,IAAI,EAAE;AAGlB,UAAA,sBAAsB,IAAI,KAAK;AACrC,UAAM,mBAAmB,MAAI;AAC3B,YAAM,OAAO,OAAO,eAAe,EAAE,KAAK,MAAM;AACvC,eAAA,cAAc,cAAc,MAAM,OAAO;AAAA,MAAA,CACjD;AAEE,UAAA,QAAQ,KAAK,QAAO;AACI,iCAAA,QAAO,KAAK,MAAM;AAAA,MAC7C;AAAA,IAAA;AAEI,UAAA,sBAAsB,IAAI,KAAK;AACrC,UAAM,mBAAmB,MAAI;AAC3B,YAAM,OAAO,OAAO,eAAe,EAAE,KAAK,MAAM;AACvC,eAAA,cAAc,cAAc,MAAM,OAAO;AAAA,MAAA,CACjD;AAEE,UAAA,QAAQ,KAAK,QAAO;AACI,iCAAA,QAAO,KAAK,MAAM;AAAA,MAC7C;AAAA,IAAA;AAGI,UAAA,aAAa,CAAC,WAAgB;AAGlC,aAAO,OAAO,MAAM;AAElB,cAAM,YAAY;AAElB,cAAM,OAAO,iBAAiB,SAAS,IAAI,uCAAW,WAAW,KAAM,kBAAkB,SAAS,IAAI,UAAU,OAAO,QAAY,IAAA;AAEnI,YAAG,MAAK;AAEA,gBAAA,UAAU,cAAc,IAAI;AAElC,cAAG,UAAU,IAAG;AACd,iBAAK,aAAa,OAAO;AAAA,UAAA,OAEvB;AACF,iBAAK,YAAY,OAAO;AAAA,UAC1B;AAAA,QACF;AAAA,MAAA,CACD;AAAA,IAAA;AAKG,UAAA,aAAa,SAAS,MAAS;AACnC,aAAO,OAAO,MAAI;AACX,aAAA,OAAO,cAAc,cAAc,MAAM,OAAO,GAAE,OAAO,gBAAgB,cAAc,MAAM,OAAO,CAAE;AAAA,MAAA,CAC5G;AAAA,IAAA;AAGH,eAAW,MAAM;AACR,aAAA;AAAA,QACL,OAAO,gBAAgB,yCAAyC,MAAM,eAAA,GAAkB,WAAW;AAAA,QACnG,OAAO,uBAAuB,MAAO,WAAW,MAAK,eAAe,GAAE,EAAE,CAAC;AAAA;AAAA,QAEzE,OAAO,gBAA4B,eAAc,CAAC,UAAqB;AAErE,gBAAM,KAAK,MAAM;AACX,gBAAA,UAAU,yBAAI,aAAa;AAGjC,cAAG,WAAW,MAAK;AAEjB,kBAAM,eAAe;AAOrB,qCAAyB,QAAO,OAAO;AAChC,mBAAA;AAAA,UACT;AAEO,iBAAA;AAAA,WACN,WAAW;AAAA;AAAA,QAEd,OAAO,gBAAgB,+BAA+B,CAAC,YAAY;AAEjE,cAAI,WAAW,MAAM;AAEnB,kBAAM,eAAmB,CAAA;AAEnB,kBAAA,OAAO,cAAc,OAAO;AAElC,gBAAG,MAAK;AAEN,gCAAkB,QAAQ,CAAM,SAAA;AAE3B,oBAAA,KAAK,MAAM,IAAI,GAAE;AAClB,mBAAE,OAAO,KAAK,SAAS,aAAa,KAAK,MAAM,OAAO,IAAI,KAAK,OAAsB,QAAQ,CAAC,aAAe;AAC3G,0BAAMC,SAAQ,aAAa,UAAU,CAAC,MAAQ,EAAE,OAAO,SAAS,OAAO,EAAE,OAAO,SAAS,GAAG;AAC5F,wBAAGA,UAAS,GAAE;AACC,mCAAA,OAAOA,QAAM,GAAE,QAAQ;AAAA,oBAAA,OAElC;AACF,mCAAa,KAAK,QAAQ;AAAA,oBAC5B;AAAA,kBAAA,CACD;AAAA,gBACH;AAAA,cAAA,CACD;AAAA,YACH;AAGA,0BAAc,QAAQ,EAAE,SAAkB,WAAW,aAAa;AAAA,UAAA,OAG/D;AACH,0BAAc,QAAQ;AAAA,UACxB;AAEA,iBAAO,eAAe;AAAA,WACrB,WAAW;AAAA;AAAA,QAEd,OAAO,gBAAgB,6BAA6B,MAAM;AAExD,gBAAM,YAAY;AAGlB,gBAAM,OAAO,iBAAiB,SAAS,IAAI,uCAAW,WAAW,KAAM,kBAAkB,SAAS,IAAI,UAAU,OAAO,QAAY,IAAA;AAGnI,cAAI,MAAM;AACR,iBAAK,OAAO;AAEL,mBAAA,gBAAgB,+BAA+B,IAAI;AACnD,mBAAA;AAAA,UACT;AACO,iBAAA;AAAA,WACN,WAAW;AAAA;AAAA,QAEd,OAAO,gBAAgB,0BAA0B,MAAM;AAErD,gBAAM,YAAY;AAGlB,gBAAM,OAAO,iBAAiB,SAAS,IAAI,uCAAW,WAAW,KAAM,kBAAkB,SAAS,IAAI,UAAU,OAAO,QAAY,IAAA;AAGnI,cAAG,MAAK;AAIN,sBAAU,QAAS,KAAa,WAAa,KAAa,SAAa,IAAA;AAGpE,gBAAA,uBAAuB,IAAI,GAAE;AACxB,oBAAA,SAAS,wBAAwB,KAAK,YAAY;AACxD,kBAAG,QAAO;AAAE,0BAAU,QAAQ,OAAO;AAAA,cAAO;AAAA,YAC9C;AAGU,sBAAA,QAAQ,CAAC,YAAY,IAAI;AAC1B,qBAAA,QAAQ,4BAA4B,IAAI;AAGjD,gBAAG,6BAAM,QAAO;AACR,oBAAA,WAAW,cAAc,KAAK,MAAM;AACtB,kCAAA,SAAQ,6BAAM,UAAS,eAAe,QAAQ,KAAK,CAAC,iBAAiB,QAAQ,IAAI;AAAA,YAAA,OAEnG;AACF,kCAAoB,QAAQ;AAAA,YAC9B;AAEA,gBAAG,6BAAM,QAAO;AACR,oBAAA,WAAW,cAAc,KAAK,MAAM;AACtB,kCAAA,SAAQ,6BAAM,UAAS,eAAe,QAAQ,KAAI,CAAC,iBAAiB,QAAQ,IAAK;AAAA,YAAA,OAEnG;AACF,kCAAoB,QAAQ;AAAA,YAC9B;AAGM,kBAAA,UAAU,KAAK;AACf,kBAAA,KAAM,OAAO,gBAAgB,OAAO;AAGvC,gBAAA,WAAW,MAAM,CAAC,YAAY,IAAI,KAAK,CAAC,YAAY,IAAI,GAAE;AAE3D,kBAAG,eAAe,IAAI,KAAK,CAAC,2BAA2B,IAAI,GAAE;AAExD,oBAAA,CAAC,KAAK,WAAU;AACV,yBAAA,gBAAgB,+BAA8B,OAAO;AACrD,yBAAA;AAAA,gBACT;AAAA,cAAA,OAGE;AACK,uBAAA,gBAAgB,+BAA8B,OAAO;AACrD,uBAAA;AAAA,cACT;AAAA,YAEF;AAAA,UACF;AACA,oBAAU,QAAQ;AAClB,oBAAU,QAAQ;AAClB,8BAAoB,QAAQ;AAC5B,8BAAoB,QAAQ;AACrB,iBAAA,gBAAgB,+BAA8B,IAAI;AAClD,iBAAA;AAAA,WACP,WAAW;AAAA,MAAA;AAAA,IACf,CACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9QD,UAAM,EAAE,QAAO,qBAAqB,IAAI,wBAAwB;AAG1D,UAAA;AAAA,MACF;AAAA,MACA;AAAA,MAAQ;AAAA,MACR;AAAA,MAAQ;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,MAAW;AAAA,MACX;AAAA,MAAS;AAAA,MACT;AAAA,MAAU;AAAA,MACV;AAAA,MAAQ;AAAA,MAAU;AAAA,MAAiB;AAAA,MAAa;AAAA,MAAa;AAAA,MAC7D;AAAA,MACA;AAAA,MAAU;AAAA,MACV;AAAA,MAAgB;AAAA,MAAmB;AAAA,QACnC,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjBb,MAAA,wBAAwB,CAAC,YAAsC;AAC1E,QAAM,OAAW,CAAA;AACjB,UAAQ,QAAQ,CAAM,SAAA;AAAO,SAAA,KAAK,IAAI,IAAI,KAAK;AAAA,EAAA,CAAc;AACtD,SAAA;AACT;ACAA,MAAMqvB,YAAYvuB,gCAAgB;AAAA,EAChCE,OAAM,CAAC,KAAK;AAAA,EACZI,MAAMJ,OAAM;AAAA,IAAEK;AAAAA,EAAK,GAAE;AAEnB,WAAO,MAAI;AAET,aAAAE,YAAAsN,SAAA;AAAA,QAAA,SAAA;AAAA,QAAA,OAAiI7L,MAAMhC,MAAMoO,GAAG;AAAA,QAAC,OAAA;AAAA,SAAyB;AAAA,QACxK5B,OAAMA,MAAI;AACR,iBAAAjM,YAAA,OAAA;AAAA,YAAA,SAAA;AAAA,aAAAA,CAAAA,YAAA4lB,QAAA,MAAA;AAAA,YAAArlB,SAAAA,MAAAP,CAAAA,YAAA+tB,SAAA,MAAA,IAAA,CAAA;AAAA,UAAA,CAAA,CAAA,CAAA;AAAA,QAUF;AAAA,OACD;AAAA;EAGL;AACF,CAAC;AAGD,MAAexuB,mDAAgB;AAAA,EAC7BC,MAAM;AAAA,EACNC,OAAM,CAAC,YAAY;AAAA,EACnBI,MAAMJ,OAAM;AAAA,IAAEK;AAAAA,EAAK,GAAE;AAEnB,UAAM2pB,gBAAgB1X,SAAS,IAAIsX,gBAAiB,CAAA;AAEpD,UAAMlqB,aAAaiC,SAAS;AAAA,MAC1BY,KAAKA,MAAMvC,MAAMN;AAAAA,MACjB8C,KAAMC,OAAM;AACVpC,aAAK,sBAAsBoC,CAAC;AAAA,MAC9B;AAAA,IACF,CAAC;AAED,UAAMguB,gBAAgBpuB,IAAI,GAAG;AAE7B2nB,kBAAcc,qBAAqB/V,GAAG,MAAI;;AACxC,UAAIjN,KAAKkiB,cAAcnR,aAAc,EAAC,CAAC;AACvC,UAAG/Q,IAAG;AACJpI,mBAAWgE,SAAQsmB,MAAAA,cAAclS,UAAU9D,KAAK5U,UAAMA,KAAK0I,MAAMA,EAAE,MAAhDkiB,gBAAAA,IAAmDnrB;AAAAA,MACxE,OACI;AACFa,mBAAWgE,QAAQ;AAAA,MACrB;AAAA,IACF,CAAC;AAGD,UAAMgtB,mBAAmB,YAAU;AAEjC,YAAM7C,OAAO,MAAMC,WAAW;AAAA,QAAE3iB,QAAO;AAAA,MAAS,CAAC;AAEjD,UAAI0iB,MAAM;AAER,cAAME,aAAa,IAAIC;AACvBD,mBAAW1F,SAAS,OAAOlV,SAAW;AACpCzT,qBAAWgE,QAAQyP,KAAK8a,OAAO7qB;AAAAA;AAEjC2qB,mBAAWG,cAAcL,IAAI;AAAA,MAC/B;AAAA;AAGF,WAAO,MAAI;AAET,aAAAttB,YAAAiuB,QAAA;AAAA,QAAA,SAAA;AAAA,QAAA,cAAkDiC,cAAc/sB;AAAAA,QAAK,uBAAAoN,YAAnB2f,cAAc/sB,QAAKoN;AAAAA,MAAA,GAAA;AAAA,QAAAhQ,SAAAA,MAAAP,CAAAA,YAAAkuB,WAAA;AAAA,UAAA,SAAA;AAAA,UAAA,QAAA;AAAA,QAAA,GAAA;AAAA,UAAA3tB,SAAAA,MAAAP,CAAAA,YAAAI,UAAA;AAAA,YAAA,QAEnD+tB;AAAAA,YAAY,QAAA;AAAA,YAAA,SAAA;AAAA,YAAA,WAA8CgC;AAAAA,UAAgB,GAAA;AAAA,YAAA5vB,SAAAA,MAAA,CAAAuF,gBAAA,QAAA,CAAA;AAAA,WAAA9F,GAAAA,YAAA8tB,WAAA;AAAA,YAAA,OAG1ErsB,MAAMtC,UAAU;AAAA,UAAC,GAAA,IAAA,CAAA;AAAA,SAAAa,GAAAA,YAAAkuB,WAAA;AAAA,UAAA,SAAA;AAAA,UAAA,QAAA;AAAA,QAAA,GAAA;AAAA,UAAA3tB,SAAAA,MAAAP,CAAAA,YAAAouB,gBAAA;AAAA,YAAA,SAGX;AAAA,cAACxhB,QAAO;AAAA,YAAQ;AAAA,YAAA,cAAA;AAAA,YAAA,iBAA4B6c;AAAAA,YAAa,2BAA2B,CAAC,CAAC;AAAA,UAAC,GAAA,IAAA,CAAA;AAAA,SAAAzpB,GAAAA,YAAAkuB,WAAA;AAAA,UAAA,SAAA;AAAA,UAAA,QAAA;AAAA,QAAA,GAAA;AAAA,UAAA3tB,SAAAA,MAAAP,CAAAA,YAAAuK,SAAA;AAAA,YAAA,cAG3FpL,WAAWgE;AAAAA,YAAK,uBAAAoN,YAAhBpR,WAAWgE,QAAKoN;AAAAA,YAAA,eAAe8d;AAAAA,YAAK,SAAA;AAAA,YAAA,eAAA;AAAA,aAAAruB,IAAAA,GAAAA,YAAA8tB,WAAA;AAAA,YAAA,OAEtCrsB,MAAMtC,UAAU;AAAA,UAAC,GAAA,IAAA,CAAA;AAAA,QAAA,CAAA,CAAA;AAAA,MAAA,CAAA;AAAA;EAIvC;AACF,CAAC;AC5Fc,eAAeixB,YAAYC,UAAmBC,WAAoBC,OAA+C;AAC9H,SAAO,IAAI5gB,QAASC,aAAY;AAE9B,UAAMtR,QAAOwD,IAAS,EAAE;AAExB,UAAMiO,oBAAoBA,MAAM;AAC9BC,qBAAeC,QAAO;AAEtBL,cAAQ;AAAA,QAAE7D,SAAS;AAAA,QAAOzN,MAAM;AAAA,MAAG,CAAC;AAAA;AAItC,UAAM6sB,iBAAiB,YAAY;AAGjC,UAAI7sB,MAAK6E,OAAO;AAEd,YAAIN,SAAS,MAAM8lB,aAAa;AAAA,UAC9B9a,KAAKvP,MAAK6E;AAAAA,UACV0jB,cAAcwJ,YAAYC,YAAY,CACpC;AAAA,YAAEntB,OAAO,GAAGktB,QAAQ,IAAIC,SAAS;AAAA,YAAInwB,OAAO,GAAGkwB,QAAQ,MAAMC,SAAS;AAAA,YAAM3jB,OAAO0jB;AAAAA,YAAUzjB,QAAQ0jB;AAAAA,UAAW,CAAA,IAC9G,CAAE;AAAA,UACNvJ,UAAUsJ,YAAY;AAAA,UACtBpJ,WAAWqJ,aAAa;AAAA,QAC1B,CAAC;AAED,YAAIztB,OAAO+P,MAAM;AACftU,UAAAA,MAAK6E,QAAQN,OAAO+P;AACpB5C,yBAAeC,QAAO;AACtBL,kBAAQ;AAAA,YAAE7D,SAAS;AAAA,YAAMzN,MAAMA,MAAK6E;AAAAA,UAAM,CAAC;AAAA,QAG3C;AAAA,MAGJ,OACK;AACH6M,uBAAeC,QAAO;AACtBL,gBAAQ;AAAA,UAAE7D,SAAS;AAAA,UAAMzN,MAAMA,MAAK6E;AAAAA,QAAM,CAAC;AAAA,MAC7C;AAAA;AAIF,UAAM+M,qBAAqB,YAAY;AACrCF,qBAAeC,QAAO;AACtBL,cAAQ;AAAA,QAAE7D,SAAS;AAAA,QAAMzN,MAAMA,MAAK6E;AAAAA,MAAM,CAAC;AAAA;AAI7C,UAAM6M,iBAAiBlN,SAASqN,aAAa;AAAA,MAC3C3I,OAAO;AAAA,MACP4I,OAAO;AAAA,MACPzD,OAAO;AAAA,MACP0D,SAASA,MAAM;AACbL,uBAAeC,QAAO;AAAA,MACvB;AAAA,MACDK,MAAMA,MAAM;AACV,eAAAtQ,YAAAwwB,kBAAA;AAAA,UAAA,cAAkClyB,MAAK6E;AAAAA,UAAK,uBAAAoN,YAAVjS,MAAK6E,QAAKoN;AAAAA,QAAA,GAAA,IAAA;AAAA,MAC7C;AAAA,MACDE,QAAQA,MAAM;AACZ,eAAAzQ,YAAAqN,UAAArN,MAAAA,CAAAA,YAAAI,UAAA;AAAA,UAAA,WAEuB2P;AAAAA,QAAiB,GAAA;AAAA,UAAAxP,SAAAA,MAAA,CAAAuF,gBAAA,IAAA,CAAA;AAAA,SAAA9F,GAAAA,YAAAI,UAAA;AAAA,UAAA,QAAA;AAAA,UAAA,WACF+qB;AAAAA,QAAc,GAAA;AAAA,UAAA5qB,SAAAA,MAAA,CAAAuF,gBAAA,IAAA,CAAA;AAAA,SAAA9F,GAAAA,YAAAI,UAAA;AAAA,UAAA,QAAA;AAAA,UAAA,WAGd8P;AAAAA,QAAkB,GAAA;AAAA,UAAA3P,SAAAA,MAAA,CAAAuF,gBAAA,IAAA,CAAA;AAAA,QAAA,CAAA,CAAA,CAAA;AAAA,MAK1D;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AACH;AChFO,MAAM,gBAAgB;ACOtB,MAAM,2BAA2B,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA,EAOpD,YAAY,SAAkB;AACtB;AAPR;AAQE,SAAK,UAAU;AAAA,EACjB;AAAA,EAEA,MAAM,WAAW,OAAwC;AAEvD,QAAI,WAAW;AACf,QAAI,YAAY;AAEhB,QAAI,KAAK,SAAS;AAChB,UAAI,UAAU,KAAK,QAAQ,MAAM,GAAG;AACpC,iBAAW,SAAS,QAAQ,CAAC,CAAC,KAAK;AACnC,kBAAY,SAAS,QAAQ,CAAC,CAAC,KAAK;AAAA,IACtC;AAGA,UAAM,SAAS,MAAM,cAAc,UAAU,SAAgB;AAE7D,QAAIxH,QAAY,OAAO;AAGvB,QAAIA,SAAQA,MAAK,QAAQ,aAAa,KAAK,GAAG;AAEtC,YAAA,gBAAgB,IAAI;AAEpB,YAAA,OAAO,aAAaA,KAAI;AAGxB,YAAA,eAAe,MAAM,cAAc;AAAA,QACvC,IAAI,KAAK,CAAC,IAAI,GAAG,GAAG,IAAI,KAAK,OAAO,EAAE,SAAU,CAAA,CAAC,IAAI,KAAK,KAAK,SAAS,EAAE,QAAQ,UAAU,EAAE,KAAK,KAAK,IAAI,EAAE,MAAM,KAAK,KAAA,CAAM;AAAA,MAAA;AAG7H,UAAA,aAAa,KAAK,SAAS,KAAK;AAE3B,eAAA;AAAA,UACL,SAAS;AAAA,UAAO,MAAM;AAAA,UAAI,KAAK,aAAa,KAAK;AAAA,QAAA;AAAA,MACnD,OAEG;AACI,QAAAA,QAAA,aAAa,KAAK,KAAK;AAAA,MAChC;AAAA,IACF;AAEA,WAAO,EAAE,SAAS,MAAM,MAAAA,OAAY,KAAK,GAAI;AAAA,EAC/C;AACF;ACzDA,MAAeiB,mDAAgB;AAAA,EAC7BC,MAAK;AAAA,EACLC,OAAM;AAAA,IACJmT,MAAK;AAAA,MAAEvS,MAAKK;AAAAA,IAAQ;AAAA,IACpBxB,SAAQ;AAAA,MAAEmB,MAAKqF;AAAAA,IAA2B;AAAA,EAC3C;AAAA,EACD7F,OAAMA,CAACJ,OAAM;AAAA,IAAEK;AAAAA,EAAK,MAAI;AAGtB,UAAM2wB,UAAU3uB,IAASrC,MAAMmT,IAAI;AAGnC,WAAO,MAAI;;AAGT,YAAM8d,aAAYjxB,MAAAA,MAAMP,YAANO,gBAAAA,IAAeyJ,OAAOrK,UAAM;AAC5C,YAAGA,KAAK8xB,WAAU;AACd,iBAAO9xB,KAAK8xB,UAAUF,QAAQttB,KAAK;AAAA,QACvC;AACA,eAAO;AAAA,MACT,GAAGO,IAAI7E,UAAM;AAEX,cAAM+xB,mBAAmB,OAAO/xB,KAAKuT,aAAa,WAAWye,iBAAiBhyB,KAAKuT,SAAS,IAAIvT,KAAKuT;AACrG,YAAI0e,cAAkBA,MAAI;AAG1B,YAAGjyB,KAAKuT,aAAa,kBAAiB;AACpC0e,wBAAcA,MAAIjyB,KAAKY,MAAMmT,KAAKlP,IAAKqtB,QAAS;AAC9C,mBAAOjzB,EAAE+yB,iBAAiB,iBAAiB,GAAE;AAAA,cAAE1wB,OAAM4wB,GAAG5wB;AAAAA,cAAOgD,OAAM4tB,GAAG5tB;AAAAA,YAAM,CAAC;AAAA,UACjF,CAAC;AAAA,QACH,WACQtE,KAAKuT,aAAa,iBAAgB;AACxC,cAAGvT,KAAKY,MAAMuxB,SAAQ;AACpBnyB,iBAAKY,MAAM2L,gBAAgB,IAAI6lB,mBAAmBpyB,KAAKY,MAAMuxB,OAAO;AAAA,UACtE;AAAA,QACF;AAEA,eAAOlzB,EAAEkV,YAAW;AAAA,UAClB7S,OAAMtB,KAAK2I;AAAAA,UAAMkQ,MAAK7Y,KAAKW;AAAAA,QAC7B,GAAE;AAAA,UACAe,SAAQA,MAAI;AACV,mBAAO,CACLzC,EAAE8yB,kBAAiB;AAAA,cACjB,GAAG/xB,KAAKY;AAAAA,cACR,cAAegxB,QAAQttB,MAAMtE,KAAKW,IAAI;AAAA,cACtC,uBAAyB0C,OAAU;AACjCuuB,wBAAQttB,MAAMtE,KAAKW,IAAI,IAAI0C;AAAAA,cAC7B;AAAA,YACF,GAAE;AAAA,cAAG3B,SAAQuwB;AAAAA,YAAa,CAAA,CAAC;AAAA,UAE/B;AAAA,QACF,CAAC;AAAA,MACH;AAEA,aAAOhzB,EAAEsX,QAAO;AAAA,QACd8b,eAAc;AAAA,QAAMC,OAAM1xB,MAAMmT;AAAAA,QAAKK,YAAW;AAAA,QAChDme,OAAM;AAAA,UAAExkB,QAAO;AAAA,UAAQykB,UAAS;AAAA,UAAOC,SAAQ;AAAA,QAAO;AAAA,MACxD,GAAE;AAAA,QACA/wB,SAAQA,MAAI;AACV,iBAAOmwB;AAAAA,QACT;AAAA,MACF,CAAC;AAAA;EAEL;AACF,CAAC;ACtDM,MAAM,0BAA0B,OAAQ,OAAa,SAA8B,SAAa;AAC9F,SAAA,IAAI,QAAQ,CAAW,YAAA;AAG5B,UAAM,QAAQ,QAAQ;AAGtB,QAAG,OAAM;AACP,aAAO,sBAAsB,OAAO;AAAA,IACtC;AAGqB,aAAS,IAAI;AAGlC,UAAM,oBAAoB,MAAM;AAC9B,qBAAe,QAAQ;AAAA,IAAA;AAIzB,UAAM,qBAAqB,MAAM;AAC/B,qBAAe,QAAQ;AACvB,cAAQ,IAAI;AAAA,IAAA;AAGR,UAAA,iBAAiB,SAAS,aAAa;AAAA,MAC3C,OAAO,QAAQ,KAAK,KAAK,KAAK,KAAK,KAAK;AAAA,MACxC,OAAO;AAAA,MACP,OAAO;AAAA,MACP,SAAS,MAAM;AACb,uBAAe,QAAQ;AAAA,MACzB;AAAA,MACA,MAAM,MAAM;AACV,eAAO,EAAE,kBAAiB,EAAE,MAAK,QAAS,CAAA;AAAA,MAC5C;AAAA,MACA,QAAQ,MAAM;AACL,eAAA,EAAE,UAAS,IAAG;AAAA,UACnB,EAAE,UAAS,EAAE,SAAQ,MAAI,kBAAoB,EAAA,GAAE,EAAE,SAAQ,MAAI,MAAM;AAAA,UACnE,EAAE,UAAS,EAAE,MAAK,WAAY,SAAQ,MAAI,mBAAmB,KAAI,EAAE,SAAQ,MAAI,MAAM;AAAA,QAAA,CACtF;AAAA,MACH;AAAA,IAAA,CACD;AAAA,EAAA,CACF;AACH;ACzBA,MAAM,eAAe,OAAO,aAA4B;AAEtD,MAAI,SAAS,QAAQ;AAEb,UAAA,kBAAkB,UAAU,QAAQ,EAAE,YAAY,MAAM,MAAM,YAAY;AAE1E,UAAA,UAAU,MAAM,QAAQ,IAAI,SAAS,IAAI,CAAQpyB,UAAA,YAAYA,KAAI,CAAC,CAAC;AAEzE,oBAAgB,MAAM;AAEf,WAAA;AAAA,EACT;AAEA,SAAO;AACT;AAGA,MAAM,mBAAmB,CAAC,MAAkB,eAA2B;AAGrE,MAAI,uBAAuB,IAAI,KAAK,CAAC,2BAA2B,IAAI,GAAG;AAC/D,UAAA,aAAa,IAAI;AACvB,eAAW,OAAO,IAAI;AACf,WAAA;AAAA,EACT;AAGG,MAAA,aAAa,IAAI,GAAE;AACpB,UAAM,IAAI;AACV,MAAE,OAAO,IAAI;AACN,WAAA;AAAA,EACT;AACA,MAAI,eAAe,UAAU,KAAK,CAAC,iBAAiB,UAAU,GAAG;AAC/D,eAAW,OAAO,IAAI;AAAA,EAAA,WAEf,iBAAiB,UAAU,GAAG;AACrC,eAAW,QAAQ,IAAI;AAAA,EAAA,OAErB;AACF,6BAAyB,IAAI;AAAA,EAC/B;AAEF;AAGA,MAAM,oBAAoB,IAAI,UAA8B;AAE1D,QAAM,YAAY;AAClB,MAAI,aAAa,iBAAiB,SAAS,IAAI,uCAAW,WAAW,KAAO,kBAAkB,SAAS,IAAI,UAAU,OAAO,QAAA,IAAa;AAEzI,QAAM,QAAQ,CAAA,SAAO,iBAAiB,MAAK,UAAU,CAAC;AAE/C,SAAA;AACT;AAGA,qBAAqB;AAAA,EACnB,OAAM;AAAA,IACJ;AAAA,IAAc;AAAA,IACd;AAAA,IAAmB;AAAA,IACnB;AAAA,IAAa;AAAA,IACb;AAAA,IACA;AAAA,IAAoB;AAAA,IACpB;AAAA,IACA;AAAA,IAAU;AAAA,EACZ;AAAA,EACA,OAAM;AAAA,IACJ;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,MACN,QAAO,CAAC,WAAS;AAEK,4BAAA;AAAA,UAClB,KAAK;AAAA,UAAI,KAAK;AAAA,UAAI,OAAO;AAAA,UAAI,QAAQ;AAAA,UAAI,UAAU;AAAA,UAAQ,WAAW;AAAA,UAAI,QAAQ;AAAA,QAAA,CACnF,EAAE,KAAK,OAAO,SAAc;AAC3B,gBAAM,SAAS,MAAM,aAAa,CAAC,KAAK,GAAG,CAAC;AAC5C,iBAAO,gBAAgB,sBAAsB;AAAA,YAC3C,KAAI,OAAO,CAAC;AAAA,YACZ,KAAI,KAAK;AAAA,YACT,OAAM,sBAAsB;AAAA,cAC1B,SAAQ,KAAK;AAAA,cAAM,UAAS,KAAK;AAAA,cACjC,aAAY,KAAK;AAAA,cACjB,cAAa,KAAK;AAAA,cAAU,UAAS,KAAK;AAAA,YAAA,CAC3C;AAAA,UAAA,CACF;AAAA,QAAA,CACF;AAAA,MACH;AAAA,MACA,SAAQ,CAAC,SAAO,CAAC,eAAe,IAAI,KAAK,CAAC,YAAY,IAAI,KAAK,2BAA2B,IAAI;AAAA,MAC9F,MAAK;AAAA,IACP;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,MACN,QAAO,OAAO,WAAS;AAErB,cAAM,SAAU,MAAM,uBAAuB,OAAO,QAAQ,SAAS;AAC/D,cAAA,cAAc,sBAAsB,OAAO,OAAO;AACjD,eAAA,gBAAgB,uBAAuB,EAAE,MAAM,OAAO,MAAM,MAAM,aAAa;AAAA,MACxF;AAAA,MACA,SAAQ,CAAC,SAAO,CAAC,eAAe,IAAI,KAAK,CAAC,YAAY,IAAI;AAAA,MAC1D,MAAK;AAAA,IACP;AAAA,IACA;AAAA,MACE,MAAK;AAAA,MACL,MAAK;AAAA,MACL,QAAO,OAAO,WAAS;AACrB,eAAO,gBAAgB,yBAAwB,MAAM,yBAAyB,OAAO,QAAQ,SAAS,CAAC;AAAA,MACzG;AAAA,MACA,SAAQ,CAAC,SAAO,CAAC,eAAe,IAAI,KAAK,CAAC,YAAY,IAAI,KAAK,2BAA2B,IAAI;AAAA,MAC9F,MAAK;AAAA,IACP;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,MACN,QAAO,CAAC,WAAS;AACR,eAAA,gBAAgB,8BAA6B,IAAI;AAAA,MAC1D;AAAA,MACA,SAAQ,CAAC,SAAO,CAAC,eAAe,IAAI,KAAK,CAAC,YAAY,IAAI,KAAK,2BAA2B,IAAI;AAAA,MAC9F,MAAK;AAAA,IACP;AAAA,IACA;AAAA,MACE,MAAK;AAAA,MACL,MAAK;AAAA,MACL,QAAO,OAAO,WAAS;AACrB,eAAO,gBAAgB,6BAA4B,MAAM,uBAAwB,CAAA;AAAA,MACnF;AAAA,MACA,SAAQ,CAAC,SAAO,CAAC,eAAe,IAAI,KAAK,CAAC,YAAY,IAAI,KAAK,2BAA2B,IAAI;AAAA,MAC9F,MAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,eAAc,CAAQ,WAAA;AAEpB,UAAM,EAAE,wBAAwB,IAAI,wBAAwB,OAAO,QAAQ,SAAS;AAE7E,WAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAkBL;AAAA,QACE,OAAM,CAAC,SAAO,YAAY,IAAI;AAAA,QAC9B,OAAM;AAAA,UACJ;AAAA,YACE,KAAI;AAAA,YAAO,OAAO;AAAA,YAAM,MAAM;AAAA,YAAQ,QAAQ,OAAO,aAAsB;AAGtD,iCAAA,OAAO,KAAK,MAAI,SAAS,OAAA,CAAQ,CAAC,EAAE,KAAK,CAAC,SAAW;AACnE,oBAAA,KAAK,QAAO;AACb,yBAAO,OAAO,MAAI;AAChB,6BAAS,YAAY,EAAE,OAAO,YAAY,IAAI,CAAC;AAAA,kBAAA,CAChD;AAAA,gBAAA,OAEC;AACK,yBAAA,gBAAgB,qBAAqB,IAAI;AAAA,gBAClD;AAAA,cAAA,CACD;AAAA,YAEH;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA;AAAA,MAEA;AAAA,QACE,OAAM,CAAC,SAAO,uBAAuB,IAAI;AAAA,QACzC,OAAM;AAAA,UACJ;AAAA,YACE,KAAI;AAAA,YAAO,OAAO;AAAA,YAAM,MAAM;AAAA,YAAQ,QAAQ,OAAO,aAAiC;AAC9E,oBAAA,SAAS,wBAAwB,SAAS,YAAY;AAC5D,kBAAG,QAAO;AACR,sBAAM,SAAS,MAAM,wBAAwB,OAAO,OAAM,OAAO,SAAQ,cAAc,SAAS,cAAa,OAAO,OAAO,CAAC;AACrH,uBAAA,OAAO,MAAO,SAAS,QAAQ,iBAAiB,OAAO,UAAS,MAAM,CAAC,CAAC;AAAA,cACjF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA;AAAA,MAEA;AAAA,QACE,OAAM,CAAC,SAAO,aAAa,IAAI;AAAA,QAC/B,OAAM,CAAC,YAAY;AAEX,gBAAA,OAAO,cAAc,OAAkB;AAEzC,cAAA,aAAa,IAAI,GAAG;AAEhB,kBAAA,SAAS,KAAK;AAGd,kBAAA,kBAAkB,qBAAqB,MAAM;AAGnD,kBAAM,cAAyB;AAAA,cAC7B;AAAA,gBACE,KAAI;AAAA,gBAAO,OAAO;AAAA,gBAAM,MAAM;AAAA,gBAAQ,QAAQ,OAAO,aAAuB;AAE1E,wBAAM,EAAC,KAAI,KAAI,MAAA,IAAS,EAAE,OAAM,SAAS,YAAA,GAAc,KAAI,SAAS,OAAM,KAAI,SAAS;AAEjF,wBAAA,OAAY,MAAM,oBAAoB;AAAA,oBAC1C;AAAA,oBAAK;AAAA,oBACL,OAAO,MAAM,SAAS;AAAA,oBAAI,QAAQ,MAAM,UAAU;AAAA,oBAClD,UAAW,MAAM,WAAW,KAAK;AAAA,oBAAI,WAAY,MAAM,YAAY,KAAM;AAAA,oBACzE,QAAQ,MAAM,UAAU;AAAA,kBAAA,CACzB;AAED,wBAAM,SAAS,MAAM,aAAa,CAAC,KAAK,GAAG,CAAC;AAE5C,yBAAO,OAAO,MAAI;AAEX,yBAAA,OAAO,OAAO,CAAC,CAAW;AAC1B,yBAAA,OAAO,KAAK,GAAG;AACpB,yBAAK,SAAS;AAAA,sBACZ,SAAQ,KAAK;AAAA,sBAAM,UAAS,KAAK;AAAA,sBACjC,aAAY,KAAK;AAAA,sBACjB,cAAa,KAAK;AAAA,sBAClB,UAAS,KAAK;AAAA,oBAAA,CACf;AAAA,kBAAA,CACF;AAAA,gBACH;AAAA,cACF;AAAA,YAAA;AAIC,gBAAA,iBAAiB,MAAM,KAAK,iBAAgB;AAC7C,0BAAY,KAAK;AAAA,gBAAE,OAAO,kBAAkB,OAAO;AAAA,gBAAM,MAAK;AAAA,gBAAiB,QAAO,OAAO,aAAqB;AAC9G,yBAAO,OAAO,MAAI;AAChB,wBAAG,iBAAgB;AACjB,+BAAS,SAAS,EAAE,SAAQ,OAAQ,CAAA;AAAA,oBAAA,OAEjC;AACH,6BAAO,UAAU,MAAM;AAAA,oBACzB;AAAA,kBAAA,CACD;AAAA,gBACH;AAAA,cAAA,CACD;AAAA,YACH;AAGA,gBAAG,iBAAiB,MAAM,KAAK,CAAC,iBAAgB;AAC9C,0BAAY,KAAK;AAAA,gBAAE,OAAO;AAAA,gBAAO,MAAK;AAAA,gBAAmB,QAAO,YAAU;AACtE,yBAAO,OAAO,MAAI,OAAO,UAAU,QAAQ,CAAE;AAAA,gBAC/C;AAAA,cAAA,CACD;AAAA,YACH;AAGG,gBAAA,iBAAiB,MAAM,KAAK,iBAAgB;AAC7C,0BAAY,KAAK;AAAA,gBAAE,OAAO,kBAAkB,OAAO;AAAA,gBAAM,MAAK;AAAA,gBAAkB,QAAO,YAAU;AAC/F,yBAAO,OAAO,MAAI;AACd,wBAAG,iBAAgB;AACjB,2BAAK,SAAS,EAAE,SAAQ,QAAS,CAAA;AAAA,oBAAA,OAE9B;AACH,6BAAO,UAAU,OAAO;AAAA,oBAC1B;AAAA,kBAAA,CACD;AAAA,gBACH;AAAA,cAAA,CACD;AAAA,YACH;AAEO,mBAAA;AAAA,UACT;AAEO,iBAAA;AAAA,QACT;AAAA,MACF;AAAA,IAAA;AAAA,EAEJ;AAAA,EACA,WAAU,CAAC;AAAA,EACX,WAAW,QAAO;AAEhB,UAAM,EAAE,yBAAwB,8BAA8B,wBAAwB,OAAO,QAAQ,SAAS;AAIvG,WAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MA4BL,OAAO,gBAAgC,uBAAsB,CAAC,YAAY;AAElE,cAAA,SAAS,wBAAwB,QAAQ,IAAI;AAEnD,YAAG,QAAO;AACU,4BAAA,IAAI,oBAAoB,QAAQ,MAAK,iBAAiB,OAAO,UAAS,QAAQ,IAAI,CAAC,CAAC;AAAA,QACxG;AAEO,eAAA;AAAA,SACP,oBAAoB;AAAA;AAAA,MAEtB,OAAO,gBAAsB,8BAA8B,MAAM,kBAAkB,yBAAyB,CAAC,GAAG,oBAAoB;AAAA;AAAA,MAEpI,OAAO,gBAAgB,sBAAsB,CAAC,YAAY;AAChD,eAAA,kBAAkB,iBAAiB,QAAQ,KAAI,QAAQ,KAAI,IAAG,QAAQ,KAAK,CAAC;AAAA,SACnF,oBAAoB;AAAA;AAAA,MAEvB,OAAO,gBAAgB,iBAAiB,CAAC,UAAU;AACjD,cAAM,QAAQ;AAAA,UACZ;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QAAA;AAGF,SAAC,YAAY;AAEL,gBAAA,cAAc,MAAM,gBAAgB,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;AAE1E,gBAAM,SAAS,MAAM,aAAa,YAAY,OAAO,OAAK,WAAW,EAAE,MAAM,KAAK,CAAC,EAAE,IAAI,CAAK,MAAA,EAAE,MAAM,CAAC;AAEhG,iBAAA,QAAQ,CAACA,UAAS;AAChB,mBAAA,gBAAgB,sBAAsB,EAAE,KAAKA,OAAgB,KAAK,IAAI,OAAM,iBAAA,CAAiB;AAAA,UAAA,CACrG;AAAA,QAAA;AAGI,eAAA;AAAA,SACN,oBAAoB;AAAA;AAAA,MAEtB,OAAO,gBAAwB,yBAAwB,CAAC,SAAS;AAE1D,cAAA,WAAW,0BAA0B,IAAI;AAE/C,cAAM,gBAAgB,WAAW,sBAAsB,QAAQ,SAAS,QAAQ,IAAI;AAEpF,0BAAkB,GAAG,aAAa;AAE3B,eAAA;AAAA,SACP,oBAAoB;AAAA;AAAA,MAGtB,OAAO,gBAAwB,6BAA4B,CAACkR,UAAS;AAE7D,cAAA,gBAAgB,sBAAsB,QAAQA,KAAI;AACxD,0BAAkB,GAAG,aAAa;AAE3B,eAAA;AAAA,SACP,oBAAoB;AAAA;AAAA,MAEtB,OAAO,gBAAgB,qBAAoB,CAAC,YAAY;AACtD,YAAI,YAAY,MAAM;AACpB,sBAAY,OAAO;AACZ,iBAAA;AAAA,QAAA,WAEA,OAAO,YAAY,UAAU;AACpC,sBAAY,OAAO;AACZ,iBAAA;AAAA,QAAA,OAEJ;AACH,gBAAM,EAAE,KAAK,QAAQ,KAAK,UAAU;AACpC,sBAAY,KAAK,EAAE,KAAK,QAAQ,MAAO,CAAA;AAChC,iBAAA;AAAA,QACT;AAAA,SACC,oBAAoB;AAAA,IAAA;AAAA,EAE3B;AACF,CAAC;ACjaD,SAAS,6BAIP;AAKA,QAAM,eACF;AAmBJ,QAAM,gBACF;AA8CJ,QAAM,WAAW,OAAO;AAExB,QAAM,WACF;AAAA;AAAA;AAAA,EASA,SAAS,MAAO,CAClB,IACE,SAAS,MAAO,CAClB,GAAG,SAAS,MAAO,CACnB,IACE,SAAS,MAAO,CAClB,GAAG,SAAS,MAAO,CACnB,IACE,SAAS,MAAO,CAClB;AAEI,QAAA,aAAa,eAAe,gBAAgB;AAGlD,QAAM,iBACF;AAqDJ,QAAM,iBACF;AAuBJ,QAAM,gBACF;AAOE,QAAA,QAAQ,iBAAiB,iBAAiB;AAI1C,QAAA,UAAU,GAAG,aAAa;AAGhC,QAAM,eAAe,QAAQ;AAE7B,QAAM,YAAY;AAEX,SAAA;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;AAEA,SAAS,wBAAgC;AACvC,QAAM,EAAE,OAAO,cAAc,cAAc,2BAA2B;AAEhE,QAAA,eAAe,IAAI,KAAK;AACxB,QAAA,sBAAsB,IAAI,YAAY;AACtC,QAAA,kBAAkB,WAAW,YAAY;AACzC,QAAA,eAAe,IAAI,SAAS;AAI5B,QAAA,UACF,IACA,eACF,KACE,YACF,KACE,mBACF,IACE,YACF,GAAG,mBACH;AAEK,SAAA;AACT;AAEA,MAAM,QAAQ,IAAI,OAAO,yBAAyB,GAAG;AAGrD,SAAS,kBAAkB,UAAoB;AACtC,SAAA,mBAAmB,SAAS,eAAA,CAAgB;AACrD;AAEA,SAAS,gBAAgB,MAAc;AAC/B,QAAA,WAAW,MAAM,KAAK,IAAI;AAChC,MAAI,aAAa;AACR,WAAA;AAET,QAAM,gBAAgB,SAAS,CAAC,EAAE,SAAS;AAC3C,QAAM,cAAc,SAAS,QAAQ,SAAS,CAAC,EAAE;AACjD,QAAM,YAAY,cAAc;AAChC,SAAO,EAAE,KAAK,WAAW,OAAO,YAAY;AAC9C;AAIA,qBAAqB;AAAA,EACnB,OAAM,CAAC,WAAW;AAAA,EAClB,OAAM,CAAC;AAAA,EACP,WAAU,CAAC;AAAA,EACX,WAAW,QAAO;AAEhB,QAAI,CAAC,OAAO,SAAS,CAAC,WAAW,CAAC,GAAE;AAC5B,YAAA,IAAI,MAAM,qDAAqD;AAAA,IACvE;AAGA,WAAO,cAAgB,GAAG,0BAA0B,QAAQ,iBAAiB,aAAa,iBAAiB,CAAE;AAAA,EAC/G;AACF,CAAC;AC5PY,MAAA,iBAAgB,CAAC,aAAiB;AAE7C,QAAM,YAAY;AACZ,QAAA,OAAO,gBAAgB,QAAQ;AACrC,QAAM,WAAW;AAEjB,MAAI,cAAc,iBAAiB,SAAS,IAAI,uCAAW,WAAW,KAAM,kBAAkB,SAAS,IAAI,UAAU,OAAO,QAAY,IAAA;AAIrI,MAAA,YAAY,WAAW,GAAE;AAC1B,kBAAc,YAAY;EAC5B;AAEG,MAAA,iBAAiB,WAAW,GAAE;AAC/B,aAAS,OAAO,YAAY,gBAAA,GAAmB,GAAG,YAAY,aAAa;AAC3E,SAAK,OAAO,QAAQ;AACpB,gBAAY,QAAQ,IAAI;AAAA,EAAA,WAEjB,gBAAgB,WAAW,GAAG;AAC/B,UAAA,SAAS,YAAY;AAC3B,WAAO,OAAO;AACd,SAAK,OAAO,GAAG,OAAO,YAAa,CAAA;AACnC,SAAK,OAAO,QAAQ;AACpB,WAAO,QAAQ,IAAI;AAAA,EAAA,WAEb,eAAe,WAAW,GAAE;AAClC,SAAK,OAAO,QAAQ;AACpB,gBAAY,OAAO,IAAI;AAAA,EAAA,OAEpB;AACH,SAAK,OAAO,QAAQ;AACpB,6BAAyB,IAAI;AAAA,EAC/B;AACO,SAAA;AACT;AAGA,qBAAqB;AAAA,EACnB,OAAM,CAAC,UAAS,YAAY;AAAA,EAC5B,OAAM;AAAA,IACJ;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,MACN,QAAO,CAAC,WAAS;AACR,eAAA,gBAAgB,+BAA8B,MAAS;AAAA,MAChE;AAAA,MACA,SAAQ,CAAC,SAAO,CAAC,eAAe,IAAI,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,YAAY,IAAI,KAAK,2BAA2B,IAAI;AAAA,MACpH,MAAK;AAAA,IACP;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,MACN,QAAO,CAAC,WAAS;AACR,eAAA,gBAAgB,6BAA4B,MAAS;AAAA,MAC9D;AAAA,MACA,SAAQ,CAAC,SAAO,CAAC,eAAe,IAAI,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,YAAY,IAAI,KAAK,2BAA2B,IAAI;AAAA,MACpH,MAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,WAAU,CAAC;AAAA,EACX,WAAW,QAAO;AAGT,WAAA;AAAA,MACL,OAAO,gBAAgB,6BAA4B,MAAM;AACvD,uBAAe,QAAQ;AAChB,eAAA;AAAA,SACP,oBAAoB;AAAA,MACtB,OAAO,gBAAgB,+BAA8B,MAAM;AACzD,uBAAe,QAAQ;AAChB,eAAA;AAAA,SACP,oBAAoB;AAAA,MACtB,OAAO,gBAAgB,qBAAoB,MAAM;AAC/C,mBAAW,MAAM;AACV,eAAA;AAAA,SACP,oBAAqB;AAAA,MACvB,OAAO,gBAAgB,0BAAyB,MAAM;AAC7C,eAAA,CAAC,CAAC;SACT,oBAAoB;AAAA,IAAA;AAAA,EAE1B;AACF,CAAC;AC3ED,SAAS,oBAAoB;AAC3B,SAAO,iCAAiC,MAAM;AAEnC,aAAA,iBAAiB,SAAS,WAAW;AACrC,aAAA,iBAAiB,eAAe,iBAAiB;AAAA,EAAA,GACzD,MAAM;AAEE,aAAA,oBAAoB,SAAS,WAAW;AACxC,aAAA,oBAAoB,eAAe,iBAAiB;AAAA,EAAA,CAC9D;AACH;AAEA,SAAS,qBAAqB,OAAqB,UAAsB;AACvE,QAAM,SAAS,MAAM;AACrB,MAAI,EAAE,kBAAkB;AACtB;AAIF,QAAM,aAAiC,OAAO;AAC9C,MACE,cAAc,SACV,WAAW,YAAY,QAAQ,WAAW,YAAY,OAC1D;AACA;AAAA,EACF;AAEA,QAAM,aAAa,OAAO;AAEtB,MAAA,CAAC,cAAc,WAAW,sBAAsB;AAClD;AAEF,QAAM,QAAQ,MAAM;AACd,QAAA,OAAO,OAAO;AAEpB,MACE,OAAO,QAAQ,QACX,QAAQ,KAAK,SAAS,QAAQ,KAAK,QAAQ,KAC3C,QAAQ,KAAK,QAAQ,QAAQ,KAAK,OAAO,IAC7C;AACS;EACX;AACF;AAEA,SAAS,YAAY,OAAqB;AACxC,uBAAqB,OAAuB,MAAM;AAChD,UAAM,UAAU,MAAM;AAChB,UAAA,SAAS,WAAW,OAAO;AAEjC,QAAI,WAAW,MAAM;AACnB,aAAO,OAAO,MAAM;AACZ,cAAA,OAAO,2BAA2B,OAAO;AAC3C,YAAA,gBAAgB,IAAK,GAAG;AAC1B,kBAAQ,MAAM;AACd,eAAK,cAAc;AAAA,QACrB;AAAA,MAAA,CACD;AAAA,IACH;AAAA,EAAA,CACD;AACH;AAEA,SAAS,kBAAkB,OAAqB;AAC9C,uBAAqB,OAAO,MAAM;AAEhC,UAAM,eAAe;AAAA,EAAA,CACtB;AACH;AAEA,SAAS,WAAW,QAAc;AAChC,MAAI,OAAiC;AAErC,SAAO,MAAM;AAEX,QAAI,KAAK;AAEP,aAAQ,KAAK;AAEf,WAAO,KAAK;AAAA,EACd;AACO,SAAA;AACT;AAEA,SAAS,yBAAuD;AACxD,QAAA,EAAE,cAAkB,IAAA;AAC1B,SAAO,kBAAkB,QACpB,cAAc,YAAY,QAC1B,cAAc,eAAe,QAE7B,cAAc,WAAW,sBAAsB,UAChD,gBACA;AACN;AAEA,SAAS,yBACP,MACA,UACqB;AACrB,MAAI,UAAU,WAAW,KAAK,mBAAmB,IAAI,KAAK;AAC1D,MAAI,SAAS;AAEb,SAAO,WAAW,QAAQ,gBAAgB,MAAM,GAAG;AAExC,aAAA,OAAO,iBAAiB,EAAE,UAAU;AAC7C,QAAI,WAAW,MAAM;AACnB,gBAAU,WACN,OAAO,mBAAmB,IAC1B,OAAO;IACb;AAAA,EACF;AAGO,SAAA,gBAAgB,OAAQ,GAAG;AAChC,UAAM,aAAa,WACf,QAAQ,aAAa,IACrB,QAAQ;AACR,QAAA,CAAC,YAAY,UAAW;AACnB,aAAA;AAET,cAAU,WAAW,WAAW,aAAa,IAAI,WAAW;EAC9D;AAEO,SAAA;AACT;AAEA,SAAS,qBACP,OACA,QACA,UACA;AACA,QAAM,aAAa;AAEnB,MAAI,cAAc,MAAM;AACtB,WAAO,OAAO,MAAM;AACZ,YAAA,WAAW,2BAA2B,UAAU;AAClD,UAAA,CAAC,gBAAgB,QAAS;AAC5B;AAEI,YAAA,eAAe,yBAAyB,UAAU,QAAQ;AAChE,UAAI,gBAAgB,MAAM;AACxB,qBAAa,YAAY;AACzB,cAAM,MAAM,OAAO,gBAAgB,aAAa,KAAK;AACrD,YAAI,OAAO,MAAM;AACf,gBAAM,eAAe;AACrB,qBAAW,MAAM;AACf,gBAAI,MAAM;AAAA,aACT,CAAC;AAAA,QACN;AAAA,MACF;AAAA,IAAA,CACD;AAAA,EACH;AAEO,SAAA;AACT;AAGA,qBAAqB;AAAA,EACnB,OAAM,CAEN;AAAA,EACA,OAAM,CAEN;AAAA,EACA,WAAU,CAAC;AAAA,EACX,WAAW,QAAO;AAGT,WAAA;AAAA,MACL,OAAO;AAAA,QAAgB;AAAA,QACrB,MAAM;AACJ,qBAAW,QAAQ,OAAO;AACnB,iBAAA;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACA,OAAO;AAAA,QACL;AAAA,QACA,CAAC,UAAU;AACF,iBAAA,qBAAqB,OAAO,QAAQ,KAAK;AAAA,QAClD;AAAA,QACA;AAAA,MACF;AAAA,MACA,OAAO;AAAA,QACL;AAAA,QACA,CAAC,UAAU;AACF,iBAAA,qBAAqB,OAAO,QAAQ,IAAI;AAAA,QACjD;AAAA,QACA;AAAA,MACF;AAAA,MACA,OAAO;AAAA,QACL;AAAA,QACA,CAAC,WAAW;AACV,gBAAM,aAAa;AACnB,cAAI,cAAc,MAAM;AAChB,kBAAA,cAAc,OAAO;AAC3B,gBAAI,eAAe;AACjB,0BAAY,MAAM;AAEb,mBAAA;AAAA,UACT;AACO,iBAAA;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACA,OAAO;AAAA,QAAgB;AAAA,QAAkB,CAAC,UAAU;AAChD,gBAAM,aAAa;AACnB,cAAI,cAAc,MAAM;AACtB,mBAAO,OAAO,MAAM;AACZ,oBAAA,eAAe,2BAA2B,UAAU;AACtD,kBAAA,gBAAgB,YAAa,GAAG;AAClC,sBAAM,eAAe;AACrB,6BAAa,cAAc;AAAA,cAC7B;AAAA,YAAA,CACD;AACM,mBAAA;AAAA,UACT;AACO,iBAAA;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACA,OAAO;AAAA,QAAgB;AAAA,QAAuB,CAAC,UAAU;AACrD,iBAAO,OAAO,iBAAiB,KAAK,MAAM;AACxC,kBAAM,YAAY;AAClB,gBAAI,kBAAkB,SAAS,KAAK,UAAU,eAAe;AACrD,oBAAA,EAAE,OAAW,IAAA;AACb,oBAAA,YAAY,OAAO,SAAS;AAC9B,kBAAA,aAAa,OAAO,WAAW,GAAG;AAC9B,sBAAA,aAAa,OAAO;AAC1B,sBAAM,cAAc;AAAA,kBAClB;AAAA,kBACA,UAAQ,eAAe,IAAI,KAAK,CAAC,KAAK,SAAS;AAAA,gBAAA;AAG7C,oBAAA,gBAAgB,WAAW,GAAG;AAC1B,wBAAA,SAAS,YAAY;AAEzB,sBAAA,YAAY,MAAM,KACf,OAAO,YAAkB,MAAA,YACxB,aACD,YAAY,mBAAmB,MAAM,aACxC;AACA,0BAAM,UAAU,OAAO,gBAAgB,YAAY,KAAK;AAExD,wBAAI,WAAW,QAAQ,SAAS,kBAAkB,SAAS;AACzD,8BAAQ,MAAM;AACd,4BAAM,eAAe;AACd,6BAAA;AAAA,oBACT;AAAA,kBACF;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAEO,mBAAA;AAAA,UAAA,CACR;AAAA,QACH;AAAA,QACA;AAAA,MACF;AAAA,MACA,kBAAkB;AAAA,IAAA;AAAA,EAEtB;AACF,CAAC;AC5PD,qBAAqB;AAAA,EACnB,OAAM,CAAC,eAAe,WAAW,YAAY;AAAA,EAC7C,OAAM,CAAC;AAAA,EACP,WAAU,CAAC;AAAA,EACX,WAAW,QAAO;AAEZ,QAAA,CAAC,OAAO,SAAS,CAAC,WAAW,eAAe,YAAY,CAAC,GAAG;AACxD,YAAA,IAAI,MAAM,gFAAgF;AAAA,IAClG;AAGA,cAAU,MAAM;AACd,aAAO,OAAO,sBAAsB,eAAe,CAAC,SAAS;AAC3D,YAAI,KAAK,eAAe,KAAK,KAAK,eAAe,GAAG;AAGlD,gBAAM,KAAK,QAAQ,IAAI,gBAAgB,IAAI;AAC3C,gBAAM,CAAC,OAAO,IAAI,iBAAiB,UAAU,MAAM,IAAI;AAEvD,gBAAM,YAAY,QAAQ;AACpB,gBAAA,eAAe,QAAQ,CAAC,EAAE;AAC5B,cAAA,MAAM,SAAS;AAEhB,cAAA,CAAC,gBAAgB,GAAG,GAAE;AACjB,kBAAA,IAAI,MAAM,gDAAgD;AAAA,UAClE;AAEA,gBAAM,WAAiB,CAAA;AACvB,mBAAS,IAAI,GAAG,IAAI,WAAW,KAAK;AAClC,gBAAI,MAAM,GAAG;AAEX,oBAAM,IAAI;AAEP,kBAAA,CAAC,gBAAgB,GAAG,GAAE;AACjB,sBAAA,IAAI,MAAM,gDAAgD;AAAA,cAClE;AAAA,YAEF;AACA,gBAAI,cAAoC;AACxC,qBAAS,IAAI,GAAG,IAAI,cAAc,KAAK;AACrC,oBAAM,UAAU,QAAQ,CAAC,EAAE,CAAC;AAC5B,oBAAM,OAAO,QAAQ;AACrB,kBAAI,QAAQ,aAAa,KAAK,QAAQ,gBAAgB,GAAG;AACzC,8BAAA;AACd,yBAAS,KAAK,IAAI;AAAA,cAAA,WAEX,KAAK,WAAW,IAAI,KAAK,KAAK,eAAe,GAAG;AAEpD,oBAAA,CAAC,iBAAiB,IAAI,GAAE;AACnB,wBAAA,IAAI,MAAM,+CAA+C;AAAA,gBACjE;AAEM,sBAAA,UAAU,qBAAqB,KAAK,aAAa;AACvD,oBAAI,gBAAgB;AAClB,8BAAY,YAAY,OAAO;AAAA;AAE/B,+BAAa,KAAK,OAAO;AAAA,cAC7B;AAAA,YACF;AAAA,UACF;AACA,qBAAW,QAAQ,UAAU;AAC3B,iBAAK,WAAW,CAAC;AACjB,iBAAK,WAAW,CAAC;AAAA,UACnB;AAAA,QACF;AAAA,MAAA,CACD;AAAA,IAAA,CACF;AAED,cAAU,MAAM;AACd,aAAO,OAAO,sBAAsB,eAAe,CAAC,SAAS;AACvD,YAAA,KAAK,yBAAyB;AAChC,eAAK,mBAAmB,IAAI;AAAA,MAAA,CAC/B;AAAA,IAAA,CACF;AAEK,UAAA,sCAAsB;AAEtB,UAAA,sBAAsB,CAAC,cAAyB;AAE9C,YAAA,UAAU,UAAU;AAE1B,YAAM,eAAe,OAAO;AAAA,QAC1B;AAAA,MAAA;AAGF,UAAI,gBAAgB,CAAC,gBAAgB,IAAI,OAAO,GAAG;AACjD,wBAAgB,IAAI,SAAS,mBAAmB,WAAW,cAAa,QAAO,IAAI,CAAC;AAAA,MACtF;AAAA,IAAA;AAKK,WAAA,iBAAiB,KAAK,MAAM;AAC3B,YAAA,aAAa,aAAa,SAAS;AACzC,iBAAW,aAAa,YAAY;AAClC,YAAI,aAAa,SAAS;AACxB,8BAAoB,SAAS;AAAA,MACjC;AAAA,IAAA,CACD;AAED,UAAM,6BAA6B,OAAO;AAAA,MACxC;AAAA,MACA,CAAC,kBAAkB;AACjB,mBAAW,CAAC,SAAS,QAAQ,KAAK,eAAe;AAC/C,cAAI,aAAa,WAAW;AACnB,mBAAA,iBAAiB,KAAK,MAAM;AAC3B,oBAAA,YAAY,cAAyB,OAAO;AAClD,kBAAI,aAAa,SAAS;AACxB,oCAAoB,SAAS;AAAA,YAAA,CAChC;AAAA,UAAA,WAEM,aAAa,aAAa;AAC3B,kBAAA,iBAAiB,gBAAgB,IAAI,OAAO;AAElD,gBAAI,mBAAmB,QAAW;AAChC,6BAAe,gBAAgB;AAC/B,8BAAgB,OAAO,OAAO;AAAA,YAChC;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IAAA;AAIK,WAAA;AAAA,MACL,OAAO,gBAA2C,sBAAqB,CAAC,EAAE,SAAS,MAAM,qBAAqB;AAE5G,cAAM,YAAY;AAAA,UAChB,OAAO,IAAI;AAAA,UACX,OAAO,OAAO;AAAA,UACd;AAAA,QAAA;AAGF,iCAAyB,SAAS;AAE5B,cAAA,kBAAkB,UAAU;AAE9B,YAAA,YAAY,eAAe,GAAE;AAAE,0BAAgB,OAAO;AAAA,QAAE;AAErD,eAAA;AAAA,SACP,uBAAuB;AAAA,MACzB,MAAM;AACuB;AAGhB,mBAAA,CAAA,EAAG,cAAc,KAAK;AAC/B,yBAAe,gBAAgB;AAAA,MACnC;AAAA,IAAA;AAAA,EAEJ;AACF,CAAC;AC/KD,MAAM,QAA4B;AAAA,EAChC,aAAa;AAAA,EACb,gBAAgB;AAAA,EAChB,MAAM;AAAA,EACN,eAAe;AAAA,IACb,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,WAAW;AAAA,IACX,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,cAAc;AAAA,IACd,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,WAAW;AAAA,IACX,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,aAAa;AAAA,IACb,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,UAAU;AAAA,IACV,OAAO;AAAA,IACP,OAAO;AAAA,IACP,YAAY;AAAA,EACd;AAAA,EACA,YAAY;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EACT;AAAA,EACA,SAAS;AAAA,EACT,SAAS;AAAA,IACP,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EACN;AAAA,EACA,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,iBAAiB;AAAA,EACjB,YAAY;AAAA,EACZ,MAAM;AAAA,EACN,MAAM;AAAA,IACJ,WAAW;AAAA,IACX,UAAU;AAAA,IACV,iBAAiB;AAAA,IACjB,mBAAmB;AAAA,IACnB,QAAQ;AAAA,MACN,UAAU;AAAA,IACZ;AAAA,IACA,SAAS;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,IAAI;AAAA,EACN;AAAA,EACA,KAAK;AAAA,EACL,MAAM;AAAA,EACN,aAAa;AAAA,EACb,WAAW;AAAA,EACX,OAAO;AAAA,EACP,KAAK;AAAA,EACL,OAAO;AAAA,EACP,iBAAiB;AAAA,EACjB,cAAc;AAAA,EACd,WAAW;AAAA,EACX,uBAAuB;AAAA,EACvB,gCACE;AAAA,EACF,kBAAkB;AAAA,EAClB,iBAAiB;AAAA,EACjB,0BAA0B;AAAA,EAC1B,kBAAkB;AAAA,EAClB,mBAAmB;AAAA,EACnB,0BAA0B;AAAA,EAC1B,kBAAkB;AAAA,EAClB,eAAe;AAAA,EACf,gBAAgB;AAAA,EAChB,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,WAAW;AAAA,IACX,aAAa;AAAA,IACb,WAAW;AAAA,IACX,wBAAwB;AAAA,EAC1B;AACF;;;;;;;;;;;;;;;;;AC/FA,UAAM,QAAQ;AAWd,UAAM,OAAO;AAKb,UAAM,EAAE,QAAO,0BAA0B,IAAI,iBAAiB;AAAA,MAC5D,MAAM,MAAM;AAAA,MACZ;AAAA,MACA,UAAS,MAAM;AAAA,MACf,WAAU,MAAM;AAAA,MAChB,aAAY;AAAA,MACZ,WAAU,MAAM;AAAA,MAChB,eAAc,MAAM;AAAA,MACpB,SAAQ,MAAM;AAAA,MACd,WAAU,MAAM;AAAA,OACT,CAAC,UAAU,KAAK,SAAS,KAAK,CAAC;AAExC,UAAM,aAAa,CAAC,YAAkB,0BAA0B,OAAO;AAGvE,QAAI,SAAS;AACb,QAAI,iBAAiB;AACf,UAAA,UAAU,YAAY,MAAM;AAC7B,UAAA,MAAM,cAAc,CAAC,QAAO;AAE7B,kCAA0B,MAAM,UAAU;AACjC,iBAAA;AACE,mBAAA,MAAI,WAAU,CAAC;AAAA,MAC5B;AAAA,IAAA,CACD;AAED,eAAW,MAAI;AAEL,aAAA;AAAA,QACN,OAAO,gBAAgB,kBAAkB,CAAC,YAAqB;AAC7D,cAAG,CAAC,gBAAe;AACZ,iBAAA,qBAAoB,sBAAsB,MAAM,CAAC;AACrC,6BAAA;AAAA,UACnB;AACO,iBAAA;AAAA,WACN,CAAC;AAAA,QACJ,OAAO,uBAAuB,CAAC,EAAE,kBAAkB;AACjD,cAAG,gBAAe;AAChB,wBAAY,KAAK,MAAM,KAAK,qBAAoB,sBAAsB,MAAM,CAAC,CAAC;AAAA,UAChF;AAAA,QAAA,CACD;AAAA,MAAA;AAAA,IACH,CACD;AAEY,aAAA,EAAE,YAAY;;;;;;;;;;;ACtE3B,SAAS,yCACP,QACS;AACH,QAAA,4BAA4B,OAC/B,iBACA,KAAK,yBAAyB,OAAO,YAAa,CAAA,CAAC;AAE/C,SAAA;AACT;AAEO,SAAS,sBAAsB,QAAuB;AACrD,QAAA,eAAe,OAClB,iBACA,KAAK,yBAAyB,OAAO,YAAa,CAAA,CAAC;AAEhD,QAAA,qBAAqB,IAAI,YAAY;AAE3C,WAAS,0BAA0B;AAC3B,UAAA,4BACJ,yCAAyC,MAAM;AACjD,uBAAmB,QAAQ;AAAA,EAC7B;AAEA,aAAW,MAAM;AACR,WAAA;AAAA,MACL,OAAO,uBAAuB,MAAM;AACV;MAAA,CACzB;AAAA,MACD,OAAO,yBAAyB,MAAM;AACZ;MAAA,CACzB;AAAA,IAAA;AAAA,EACH,CACD;AAED,SAAO,SAAS,kBAAkB;AACpC;;;;;;;;;;;;;;;;;;;;;;;;;;ACfM,UAAA,OAAO,IAAwB,IAAI;AACnC,UAAA,EAAE,WAAW;AAEb,UAAA,WAAW,IAAI,KAAK;AAE1B,eAAW,MAAM;AAEf,UAAI,KAAK,OAAO;AACP,eAAA,eAAe,KAAK,KAAoB;AACtC,iBAAA,QAAQ,OAAO;MAC1B;AACO,aAAA,OAAO,yBAAyB,CAAC,sBAAsB;AAC5D,iBAAS,QAAQ;AAAA,MAAA,CAClB;AAAA,IAAA,CACF;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvCD,MAAA,qBAAe,gBAAgB;AAAA,EAC7B,MAAM;AAAA,EACN,QAAQ;AACA,UAAA,EAAE,WAAW;AAEnB,UAAM,aAAa,WAA4C,OAAO,cAAe,CAAA;AAErF,eAAW,MAAM;AACR,aAAA,OAAO,0BAA0B,CAAC,mBAAmB;AAC1D,mBAAW,QAAQ;AAAA,MAAA,CACpB;AAAA,IAAA,CACF;AAGK,UAAA,gBAAgB,SAAS,MAAM;AACnC,YAAM,qBAAqB,CAAA;AAC3B,YAAM,gBAAgB,OAAO,KAAK,MAAM,UAAU,CAAC;AACnD,eAAS,IAAI,GAAG,IAAI,cAAc,QAAQ,KAAK;AACvC,cAAA,UAAU,cAAc,CAAC;AACzB,cAAA,eAAe,WAAW,MAAM,OAAO;AACvC,cAAA,UAAU,OAAO,gBAAgB,OAAO;AAC9C,YAAI,YAAY,MAAM;AACD,6BAAA,KAAM,EAAE,UAAU,EAAE,IAAI,QAAS,GAAG,YAAY,CAAC;AAAA,QACtE;AAAA,MACF;AAEO,aAAA;AAAA,IAAA,CACR;AAED,WAAO,MAAM,cAAc;AAAA,EAC7B;AACF,CAAC;AClCD,MAAe,oBAAA;ACAf,MAAe,eAAA;;;;;;;;;;;ACgBf,UAAM,QAAQ;AAER,UAAA,EAAE,QAAO,WAAU,SAAQ,WAAU,cAAa,cAAa,YAAY;AAE3E,UAAA,qBAAqB,sBAAsB,MAAM;AAGjD,UAAA,iBAAiB,IAAI,IAAI;AAEzB,UAAA,iBAAiB,IAAI,KAAK;AAE1B,UAAA,mBAAmB,IAAI,IAAW;AACxC,UAAM,aAAa,SAAS;;AAAI,cAAAsB,OAAA9R,OAAAR,MAAA,iBAAiB,UAAjB,gBAAAA,IAAwB,kBAAxB,gBAAAQ,IAAuC,aAAvC,gBAAA8R,IAAiD;AAAA,KAAI;AAErF,QAAI,mBAAuB;AAE3B,UAAM,oBAAoB,MAAI;AACtB,YAAA,UAAU,OAAO;AACvB,yBAAmB,WAAW,MAAM;AAClC,YAAG,SAAQ;AAAE,2BAAiB,MAAM,MAAM,SAAU,QAAQ,eAAe,KAAI;AAAA,QAAM;AACnE;SACjB,EAAE;AACL,aAAO,MAAI;AACT,qBAAa,gBAAgB;AAAA,MAAA;AAAA,IAC/B;AAIF,UAAM,aAAa,MAAI;AACrB,aAAO,OAAO,MAAI,SAAA,EAAW,OAAO,qBAAsB,CAAA,CAAC;AAAA,IAAA;AAG7D,eAAW,MAAI;;AAEP,YAAA,OAAM9R,OAAAR,MAAA,iBAAiB,UAAjB,gBAAAA,IAAwB,kBAAxB,gBAAAQ,IAAuC;AAGtC,mBAAA,MAAM,GAAG,EAAE,OAAO,CAAA,SAAM,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAMV,UAAA;AACnD,cAAA,SAAS,SAAS,cAAc,QAAQ;AAC9C,eAAO,MAAMA;AACN,eAAA,aAAa,eAAc,MAAM;AACpC,YAAA,KAAK,OAAO,MAAM;AAAA,MAAA,CACvB;AAES,gBAAA,MAAM,GAAG,EAAE,OAAO,CAAA,SAAM,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAMA,UAAA;AAChD,cAAA,OAAO,SAAS,cAAc,MAAM;AAC1C,aAAK,OAAOA;AACP,aAAA,aAAa,OAAM,YAAY;AAC/B,aAAA,aAAa,eAAc,MAAM;AAClC,YAAA,KAAK,OAAO,IAAI;AAAA,MAAA,CACrB;AAGK,YAAA,QAAQ,SAAS,cAAc,OAAO;AACtC,YAAA,aAAa,QAAO,UAAU;AAGpC,YAAM,YAAY,CAAC,mBAAkB,cAAa,YAAY,EAAE,KAAK,MAAM;AAG3E,YAAM,aAAa,QAAQ,OAAO,CAAA,SAAM,KAAK,SAAS,EAAE,IAAI,CAAM,SAAA,KAAK,SAAS,EAAE,KAAK,MAAM;AAG7F,YAAM,aAAa,UAAU,OAAO,CAAA,SAAM,KAAK,SAAS,EAAE,IAAI,CAAM,SAAA,KAAK,SAAS,EAAE,KAAK,MAAM;AAE3F,UAAA,KAAK,OAAO,KAAK;AAEd,aAAA;AAAA;AAAA,QAEL,MAAM,QAAQ,aAAa,iBAAiB,MAAM,IAAI,kBAAkB,MAAM;AAAA,QAC9E,sBAAsB,MAAM;AAAA,QAC5B,kBAAkB;AAAA,QAClB,OAAO,uBAAuB,CAAC,EAAE,kBAAkB;AACjD,sBAAY,KAAK,MAAM;AAErB,kBAAM,OAAO;AACP,kBAAA,WAAW,KAAK;AAEnB,gBAAA,KAAK,gBAAgB,KAAK,GAAE;AAC1B,kBAAA,eAAe,QAAQ,GAAE;AACX,+BAAA,QAAQ,SAAS;cAClC;AAAA,YAAA,OAEE;AACa,6BAAA,QAAQ,YAAY;YACrC;AAEe,2BAAA,QAAQ,CAAC,iBAAiB,QAAQ;AAAA,UAAA,CAElD;AAAA,QAAA,CACF;AAAA,MAAA;AAAA,IACH,CACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9ED,UAAM,QAAQ;AAUd,UAAM,OAAO;AAMb,UAAM,aAAa,SAAS;AAAA,MAC1B,KAAI,MAAI,MAAM;AAAA,MACd,KAAI,CAAA,MAAG,KAAK,qBAAoB,CAAC;AAAA,IAAA,CAClC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9CY,MAAA,cAAc,YAAY,MAAM;ACC7C,MAAeiB,gDAAgB;AAAA,EAC7BM,MAAMJ,OAAO;AAAA,IAACwB;AAAAA,EAAK,GAAG;AACpB,UAAMswB,gBAAgBzvB;AACtB,UAAM0vB,aAAaA,MAAM;;AACvB,YAAMC,aAAWF,MAAAA,cAAcpuB,UAAdouB,gBAAAA,IAAqBG,cAAa;AAEnD,UAAIC,UAAUC,cAAc9U,QAAW;AAErC,cAAM0F,QAAQjZ,SAASkZ,cAAc,OAAO;AAC5CD,cAAMrf,QAAQsuB;AACdloB,iBAAS+G,KAAKoS,YAAYF,KAAK;AAC/BA,cAAMI,OAAM;AACZrZ,iBAASsZ,YAAY,MAAM;AAC3BtZ,iBAAS+G,KAAKwS,YAAYN,KAAK;AAAA,MACjC,OAAO;AACLmP,kBAAUC,UAAUC,UAAUJ,QAAQ;AAAA,MACxC;AACArP,eAASrW,QAAQ;AAAA,QAAC4H,SAAS;AAAA,MAAM,CAAC;AAAA;AAGpC,WAAO,MAAM;AACX,aAAA3T,YAAA,QAAA;AAAA,QAAA,SAAA;AAAA,QAAA,OAGWoD,QAAamuB,cAAcpuB,QAAQC;AAAAA,SAEzC1B,CAAAA,WAAWT,OAAO,SAAS,GAACjB,YAAAC,WAAA;AAAA,QAAA,QAAA;AAAA,QAAA,SAAA;AAAA,QAAA,WAIlBuxB;AAAAA,MAAU,GAAA,IAAA,CAAA,CAAA;AAAA;EAK7B;AACF,CAAC;ACrCY,MAAA,kBAAkB,YAAY,aAAa;ACMxD,MAAqB,iBAAgB;AAAA,EAMnC,cAAa;AAJb;AACA;AACA;AAGE,SAAK,WAAW;AAChB,SAAK,WAAW;AAChB,SAAK,WAAW;EAClB;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,iBAAgB;AAClB,WAAO,KAAK,SAAS,OAAO,CAAM,SAAA,KAAK,SAAS,MAAM;AAAA,EACxD;AAAA,EACA,IAAI,qBAAoB;AACtB,WAAO,KAAK,SAAS,OAAO,CAAM,SAAA,KAAK,SAAS,UAAU;AAAA,EAC5D;AAAA,EACA,IAAI,mBAAkB;AACpB,WAAO,KAAK,SAAS,OAAO,CAAM,SAAA,KAAK,SAAS,QAAQ;AAAA,EAC1D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,mBAAmB,MAAe,OAAgB,WAA+C,SAA8B;AAC7H,QAAG,KAAK,SAAS,KAAK,OAAG,EAAE,QAAQ,IAAI,GAAE;AACvC,YAAM,IAAI,MAAM,SAAS,KAAK,GAAG;AAAA,IACnC;AACK,SAAA,SAAS,KAAK,EAAE,MAAK,OAAM,OAAM,QAAO,WAAU,QAAA,CAAS;AAAA,EAClE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,uBAAuB,MAAe,OAAgB,WAA+C,SAA8B;AACjI,QAAG,KAAK,SAAS,KAAK,OAAG,EAAE,QAAQ,IAAI,GAAE;AACvC,YAAM,IAAI,MAAM,SAAS,KAAK,GAAG;AAAA,IACnC;AACK,SAAA,SAAS,KAAK,EAAE,MAAK,OAAM,OAAM,YAAW,WAAU,QAAA,CAAS;AAAA,EACtE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,qBAAqB,MAAe,OAAgB,WAA+C,SAA8B;AAC/H,QAAG,KAAK,SAAS,KAAK,OAAG,EAAE,QAAQ,IAAI,GAAE;AACvC,YAAM,IAAI,MAAM,SAAS,KAAK,GAAG;AAAA,IACnC;AACK,SAAA,SAAS,KAAK,EAAE,MAAK,OAAM,OAAM,UAAS,WAAU,QAAA,CAAS;AAAA,EACpE;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,WAAW,MAAsC;AAC/C,WAAO,KAAK,SAAS,KAAK,CAAG,MAAA,EAAE,QAAQ,IAAI;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAM;;AACG,YAAAhzB,MAAA,KAAK,aAAL,gBAAAA,IAAe,SAAS;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAOC,QAAa;;AAClB,KAAAD,MAAA,KAAK,aAAL,gBAAAA,IAAe,SAAS,OAAOC,QAAM;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,SAASA,QAAa,eAAqB;;AACzC,UAAM,QAAOD,MAAA,KAAK,aAAL,gBAAAA,IAAe,SAAS,OAAOC,QAAM;AAClD,KAAAO,MAAA,KAAK,aAAL,gBAAAA,IAAe,SAAS,OAAO,eAAc,GAAE,KAAM,CAAC;AAAA,EACxD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,WAAW,SAA0B;AAC9B,SAAA,WAAW,SAAS,OAAO;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAIP,QAA+B;;AAC1B,YAAAD,MAAA,KAAK,aAAL,gBAAAA,IAAe,SAASC;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,KAAKA,QAAa,MAAa;;AAC7B,SAAGD,MAAA,KAAK,aAAL,gBAAAA,IAAe,SAASC,SAAO;AAChC,WAAK,SAAS,SAASA,MAAK,EAAE,iBAAiB;AACvC,cAAA,IAAI,KAAK,QAAQ;AAAA,IAC3B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,aAA+B;AACtB,WAAA,KAAK,YAAY,EAAC,SAAQ,KAAK,UAAU,UAAS,CAAA;EAC3D;AAEF;AC/HO,MAAMqzB,gBAAgB,OAAOC,cAA0BtyB,UAAe;AAE3E,SAAO,MAAMuyB,wBAAwBD,aAAavqB,OAAMuqB,aAAa7yB,SAAQO,KAAK;AACpF;AAQO,MAAMwyB,wBAAwB,YAAY;AAC/C,SAAO,IAAItiB,QAAQC,aAAW;AAI5B,UAAMsiB,wBAAwBpwB,IAAI,IAAI;AAGtC,UAAMiO,oBAAoBA,MAAM;AAC9BC,qBAAeC,QAAO;AAAA;AAIxB,UAAMC,qBAAqBA,MAAM;AAC/BF,qBAAeC,QAAO;AACtBL,cAAQsiB,sBAAsB/uB,KAAK;AAAA;AAGrC,UAAM6M,iBAAiBlN,SAASqN,aAAa;AAAA,MAC3C3I,OAAO;AAAA,MACP4I,OAAO;AAAA,MACPzD,OAAO;AAAA,MACP0D,SAASA,MAAM;AACbL,uBAAeC,QAAO;AAAA,MACvB;AAAA,MACDK,MAAMA,MAAM;AACV,eAAAtQ,0BAAAA,YAAAuK,SAAAvK,MAAAA,IAAAA,GAAAA,YAAAmyB,YAAA,MAAA;AAAA,UAAA5xB,SAAAA,MAAAP,CAAAA,YAAAoyB,gBAAA;AAAA,YAAA,SAAA;AAAA,YAAA,QAAA;AAAA,aAAApyB,IAAAA,GAAAA,YAAAoyB,gBAAA;AAAA,YAAA,SAAA;AAAA,YAAA,QAAA;AAAA,aAAApyB,IAAAA,GAAAA,YAAAoyB,gBAAA;AAAA,YAAA,SAAA;AAAA,YAAA,QAAA;AAAA,UAAA,GAAA,IAAA,CAAA;AAAA,QAAA,CAAA,CAAA,CAAA;AAAA,MAcD;AAAA,MACD3hB,QAAQA,MAAM;AACZ,eAAAzQ,YAAAqN,UAAArN,MAAAA,CAAAA,YAAAI,UAAA;AAAA,UAAA,WACqB2P;AAAAA,QAAiB,GAAA;AAAA,UAAAxP,SAAAA,MAAA,CAAAuF,gBAAA,IAAA,CAAA;AAAA,SAAA9F,GAAAA,YAAAI,UAAA;AAAA,UAAA,QAAA;AAAA,UAAA,WACF8P;AAAAA,QAAkB,GAAA;AAAA,UAAA3P,SAAAA,MAAA,CAAAuF,gBAAA,IAAA,CAAA;AAAA,QAAA,CAAA,CAAA,CAAA;AAAA,MAIxD;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AACH;ACtEA,MAAMusB,eAAa,gBAAkC,IAAI,iBAAA,CAAkB;AAG3E,MAAM,aAAa,IAAI,IAAI;AASpB,MAAM,sBAAsB,MAAI;AAC9B,SAAA,EAAEA,YAAAA,cAAY;AACvB;;;;ACjBM,UAAA,EAAE,YAAAC,gBAAe;AACjB,UAAA,aAAa,IAA2B,IAAI;AAElD,cAAU,MAAM;AAAA,IAAA,CAEf;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACJD,MAAA,cAAe,gBAAgB;AAAA,EAC7B,MAAK;AAAA,EACL,OAAM,CAAC,OAAO;AAAA,EACd,OAAM;AAAA,IACJ,MAAK,EAAC,MAAK,OAAM;AAAA,IACjB,QAAO,EAAC,MAAK,OAAM;AAAA,IACnB,OAAM,EAAC,MAAK,OAAM;AAAA,IAClB,QAAO,EAAC,MAAK,QAAO;AAAA,EACtB;AAAA,EACA,OAAM,CAAC,OAAM,EAAE,WAAS;AAEhB,UAAA,EAAE,YAAAD,gBAAe;AAEvB,WAAO,MAAI;AAET,YAAM,UAAU,MAAM;AACtB,YAAM,SAASA,YAAW,WAAW,QAAQ,aAAa;AAE1D,UAAG,UAAU,MAAK;AAEhB,cAAM,QAAQ,OAAO,OAAO,cAAc,aAAc,OAAO,UAAkB,QAAQ,cAAc,IAAI,EAAE,OAAO,WAAU,QAAQ,cAAc;AAEpJ,eAAO,EAAE,OAAM,EAAC,OAAM,wCAAsC;AAAA,UAC1D;AAAA,UACA,EAAE,OAAM;AAAA,YACN,OAAM,EAAC,2CAA0C,MAAK,QAAO,MAAM,OAAM;AAAA,YACzE,SAAQ,CAAI,OAAA;AACV,mBAAK,SAAQ,EAAE,MAAK,SAAQ,SAAQ,QAAO,OAAM,MAAM,OAAM,QAAO,MAAM,QAAO,OAAM,IAAI;AAAA,YAC7F;AAAA,UAAA,CACD;AAAA,QAAA,CACF;AAAA,MAAA,OAEC;AACF,eAAO,EAAE,OAAM,EAAC,OAAM,wCAAsC;AAAA,UAC3D,SAAS,QAAQ,aAAa;AAAA,QAAA,CAC9B;AAAA,MACH;AAAA,IAAA;AAAA,EAIJ;AACF,CAAC;;;;;ACMD,UAAM,EAAE,YAAAA,aAAY,YAAAC,YAAW,IAAI,oBAAoB;AACjD,UAAA,cAAc,IAA2B,IAAI;AAC7C,UAAA,cAAc,IAAI,IAAI;AAGtB,UAAA,cAAc,CAAC,SAAc;AACjC,WAAK,MAAM;AACI;AACf,kBAAY,QAAQ,KAAK;AAAA,IAAA;AAE3B,UAAM,mBAAmB,MAAM;AAC7B,kBAAY,QAAQ;AAAA,IAAA;AAGtB,UAAM,WAAW,SAAS,EAAE,KAAK,MAAO,CAAA;AAExC,UAAM,iBAAiB,MAAM;AACvB,UAAA,YAAY,SAAS,MAAM;AAC7B,iBAAS,MAAM,KAAK,IAAI,YAAY,MAAM,cAAe,YAAY,YAAY,MAAM,cAAe,eAAe,IAAI,KAAK,CAAC,IAAI;AAAA,MACrI;AAAA,IAAA;AAII,UAAA,YAAY,OAAO,KAAW7zB,WAAgB;AAEnC,YAAM,sBAAsB;AAAA,IAAA;AAKvC,UAAA,aAAa,OAAOA,WAAe;AAEjC,YAAA,OAAO4zB,YAAW,IAAI5zB,MAAK;AACjC,YAAM,SAAS4zB,YAAW,WAAW,KAAK,aAAa;AACjD,YAAA,SAAS,MAAM,cAAc,QAAsB,EAAE,GAAG,KAAK,gBAAgB;AACxE,MAAAA,YAAA,KAAK5zB,QAAO,MAAa;AAAA,IAAA;AAGtC,cAAU,MAAM;;AACd,OAAAD,MAAA,YAAY,UAAZ,gBAAAA,IAAmB,cAAe,iBAAiB,UAAU,gBAAgB;AAC7E,sBAAgB,MAAM;;AACpB,SAAAA,MAAA,YAAY,UAAZ,gBAAAA,IAAmB,cAAe,oBAAoB,UAAU;AAAA,MAAc,CAC/E;AAED,MAAA6zB,YAAW,WAAW;AAAA,QACpB,SAAS;AAAA,QACT,UAAU;AAAA,UACR,EAAE,eAAe,cAAc,gBAAgB,EAAE,KAAK,6GAA6G,IAAI,IAAI;AAAA,UAC3K,EAAE,eAAe,cAAc,gBAAgB,EAAE,KAAK,6GAA6G,IAAI,IAAI;AAAA,QAC7K;AAAA,MAAA,CACD;AAAA,IAAA,CAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnFK,UAAA,EAAE,YAAAC,gBAAe;AAEvB,UAAM,QAAQ;AAGd,cAAU,MAAI;AAEZ,MAAAA,YAAW,QAAQ,MAAM;AAAA,IAAA,CAE1B;;;;;;;;;;;;;;;;ACxBD,MAAM,EAAE,WAAW,IAAI;AAKvB,WAAW,mBAAmB,cAAc,MAAM,CAAC,SAAW;AACrD,SAAA,EAAE,OAAO,EAAE,KAAI,KAAK,KAAK,OAAO,EAAE,OAAO,OAAO,EAAG,CAAA;AAC5D,GAAE;AAAA,EACA,EAAE,MAAK,OAAO,OAAM,UAAU,WAAU,iBAAkB,OAAM,EAAE,SAAQ,aAAa,cAAa,GAAG;AACzG,CAAC;ACVY,MAAA,qBAAqB,YAAYC,WAAgB;ACDvD,MAAM,oBAAoB,WAAW;AAAA,EAC1C,OAAO;AAAA,IACL,MAAM;AAAA,IACN,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AACF,CAAU;AAEH,MAAM,oBAAoB;AAAA,EAC/B,kBAAkB,CAAC,eAAoB;AAAA,EAEvC,SAAS,CAAC,eAAoB;AAChC;ACKA,MAAehzB,8CAAgB;AAAA,EAC7BC,MAAM;AAAA,EACNC,OAAO+yB;AAAAA,EACP7yB,OAAO8yB;AAAAA,EACP5yB,MAAMJ,OAAO;AAAA,IAAEK;AAAAA,IAAM+sB;AAAAA,EAAO,GAAG;AAC7B,UAAM6F,YAAqC5wB,IAAI,IAAI;AACnD,UAAM6wB,WAAoC7wB,IAAI,IAAI;AAClD,UAAM8wB,UAAmC9wB,IAAI,IAAI;AAEjD,UAAM+wB,cAAc1sB,YAAYC,SAAUysB;AACnB,QAAIC,eAAgB;AAE3C,QAAIC,aAAqB;AAEzB,UAAMC,UAAUlxB,IAAI,KAAK;AAEzB,UAAMmxB,MAAMnxB,IAAI,CAAC;AACjB,UAAMoxB,WAAWpxB,IAAI,EAAE;AACvB,UAAMiC,UAAUjC,IAAI,KAAK;AACzB,UAAMqxB,aAAa/xB,SAAS,MAAM;AAChC,aAAO;AAAA,QACLgyB,iBAAiB,OAAO3xB,MAAMyxB,QAAQ,CAAC;AAAA,QACvCG,WAAW,WAAW5xB,MAAMwxB,GAAG,CAAC;AAAA;IAEpC,CAAC;AAED,UAAMK,YAAY,YAAgC;AAChDvvB,cAAQZ,QAAQ;AAEhB,UAAI;AACF,cAAM4e,WAAW,MAAM8Q,YAAY7wB,IACjC,kCACA;AAAA,UACEuxB,QAAQ;AAAA,YACNC,OAAO/zB,MAAM+zB;AAAAA,YACbxG,GAAGnZ,KAAK6Y,OAAO;AAAA,UAChB;AAAA,UACD+G,cAAc;AAAA,QAChB,CACF;AAEA,YAAI,EAAE1R,SAASnP,gBAAgB8gB,OAAO;AACpC;AAAA,QACF;AAEAR,iBAAS/vB,QAAQsjB,IAAIkN,gBAAgB5R,SAASnP,IAAI;AAAA,MACpD,UAAU;AACR7O,gBAAQZ,QAAQ;AAAA,MAClB;AAAA;AAkBF,UAAMywB,sBAAsBA,MAAM;AAChC9zB,WAAK,WAAW2B,MAAMwxB,GAAG,CAAC;AAAA;AAG5B,UAAMY,kBAAmBC,oBAA4C;AACnE,UAAIryB,MAAMuxB,OAAO,GAAG;AAClB;AAAA,MACF;AAEA,YAAMe,SACJD,0BAA0BE,aACtBF,eAAeG,UACfH,eAAeI,QAAQ,CAAC,EAAED;AAChC,YAAM3f,aAAa,IAAI6f;AACvB,YAAMC,aAAa3yB,MAAMixB,SAAS,EAAG2B,sBAAqB,EAAG1nB;AAE7D,YAAM2nB,kBAAmBtnB,WAAmC;AAC1D,cAAMunB,QACJvnB,iBAAiBgnB,aACbhnB,MAAMinB,UACNjnB,MAAMknB,QAAQ,CAAC,EAAED;AAGvBlB,qBAAalf,KAAK2gB,IAAI3gB,KAAKC,IAAIygB,QAAQR,SAAS,IAAI,EAAE,GAAGK,UAAU;AAEnEnB,YAAI9vB,QAAQ0Q,KAAK4gB,OAAQ1B,aAAa,OAAOqB,aAAa,MAAO,GAAG;AAEpE3yB,cAAMmxB,OAAO,EAAGxB,MAAMzkB,QAAQ,GAAGomB,UAAU;AAC3CtxB,cAAMkxB,QAAQ,EAAGvB,MAAMiC,YAAY,cAAcN,aAAa,EAAE;AAAA;AAGlE,YAAM2B,gBAAiB1nB,WAAmC;AACxD,YAAIimB,IAAI9vB,UAAU,GAAG;AACnBywB;QACF;AAEAtf,mBAAWS,QAAO;AAAA;AAGpBxL,eAASorB,iBAAiB,aAAaL,eAAe;AACtD/qB,eAASorB,iBAAiB,aAAaL,eAAe;AACtD/qB,eAASorB,iBAAiB,WAAWD,aAAa;AAClDnrB,eAASorB,iBAAiB,YAAYD,aAAa;AACnDnrB,eAASorB,iBAAiB,eAAeD,aAAa;AAEtDpgB,iBAAW4L,SACT0U,iBAAiB,MAAM;AACrBrrB,iBAASsrB,oBAAoB,aAAaP,eAAe;AACzD/qB,iBAASsrB,oBAAoB,aAAaP,eAAe;AACzD/qB,iBAASsrB,oBAAoB,WAAWH,aAAa;AACrDnrB,iBAASsrB,oBAAoB,YAAYH,aAAa;AACtDnrB,iBAASsrB,oBAAoB,eAAeH,aAAa;AAAA,MAC1D,CAAA,CACH;AAAA;AAGF,UAAMvgB,QAAQA,MAAM;AAClB1S,YAAMmxB,OAAO,EAAGxB,MAAMzkB,QAAQ;AAC9BlL,YAAMkxB,QAAQ,EAAGvB,MAAMiC,YAAY;AAAA;AAGrCxG,WAAO;AAAA,MACLiI,MAAMA,MAAM;AACV9B,gBAAQ7vB,QAAQ;AAEhB4xB,mBAAW,MAAM;AACf/B,kBAAQ7vB,QAAQ;AAEhBgR;QACD,GAAE,GAAI;AAAA,MACT;AAAA,IACF,CAAC;AAEDnQ,cAAU,YAAY;AACpB,YAAMsvB,UAAS;AAAA,IACjB,CAAC;AAED,WAAO,MAAM;AACX,aAAAtzB,YAAAqN,UAAAiY,MAAAA,CAAAA,eAAAtlB,YAAA,OAAA;AAAA,QAAA,SAAA;AAAA,MAAA,GAAA,CAAAA,YAAA,OAAA;AAAA,QAAA,SAAA;AAAA,QAAA,OAAA;AAAA,QAAA,SAMemzB,WAAWhwB;AAAAA,MAAK,GAAA,IAAA,GAAAnD,YAAA,OAAA;AAAA,QAAA,SAAA;AAAA,MAAA,GAAA,IAAA,CAAA,CAAA,GAAA,CAAA,CAAA+lB,iBAJuBtkB,SAAAA,GAAAA,MAAMsC,OAAO,CAAC,KAAA/D,YAAA,OAAA;AAAA,QAAA,SAQpD,CAAC,oBAAoByB,MAAMuxB,OAAO,IAAI,aAAa,EAAE;AAAA,MAAC,GAAA,CAAAhzB,YAAA,OAAA;AAAA,QAAA,SAAA;AAAA,QAAA,OAGvDoD,QAAwBsvB,UAAUvvB,QAAQC;AAAAA,MAAG,GAAA,CAAApD,YAAA,OAAA;AAAA,QAAA,SAAA;AAAA,QAAA,OAI3CoD,QAAwBwvB,QAAQzvB,QAAQC;AAAAA,MAAG,GAAA,IAAA,GAAApD,YAAA,OAAA;AAAA,QAAA,SAAA;AAAA,QAAA,OAI3CoD,QAAwBuvB,SAASxvB,QAAQC;AAAAA,QAAG,eACtCywB;AAAAA,QAAe,gBACdA;AAAAA,MAAe,GAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA;EAO3C;AACF,CAAC;ACjMD,eAAemB,eAAe91B,SAA0C;AACtE,SAAO,IAAIyQ,QAASC,aAAY;AAE9B,UAAMI,iBAAiBlN,SAASqN,aAAa;AAAA,MAC3CxD,OAAOzN,QAAQyN,SAAS;AAAA,MACxBnF,OAAOtI,QAAQsI,SAAS;AAAA,MACxB4I,OAAO;AAAA,MACPE,MAAMA,MAAAtQ,YAAAi1B,aAAA;AAAA,QAAA,SACgB/1B,QAAQg2B;AAAAA,QAAK,aAC/BryB,YAAU;AACRmN,yBAAeC,QAAO;AACtBL,kBAAQ/M,MAAM;AAAA,QAChB;AAAA,MAEH,GAAA,IAAA;AAAA,MACD4N,QAAQA,MAAM;AAAA,MACdJ,SAASA,MAAM;AACb0kB,mBAAW,MAAM;AACf/kB,yBAAeC,QAAO;AAAA,QACvB,GAAE,GAAG;AAAA,MACR;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AACH;AC1BO,MAAM,mBAAmB;ACkBzB,MAAM,wBAAwB,WAAW;AAAA,EAuB9C,YAAY,SAAiC;AACrC;AAvBR;AAEA;AAEA;AAEA,4CAA4B;AAE5B,2CAA0B;AAE1B,4CAA6B,CAAA;AAE7B,mCAAkB;AAahB,SAAK,cAAc;AAEnB,SAAK,mBAAmB;AAEnB,SAAA,iBAAiB,IAAI;AAErB,SAAA,mBAAmB,QAAQ,cAAc,CAAA;AAC9C,SAAK,UAAU,QAAQ;AAAA,EACzB;AAAA,EAnBA,IAAI,qBAAqB;AACvB,WAAO,KAAK,iBAAiB,OAAO,CAAC,SAAS,KAAK,UAAU;AAAA,EAC/D;AAAA,EAEA,IAAI,UAAU;AACZ,WAAO,KAAK,eAAe;AAAA,EAC7B;AAAA,EAeA,MAAM,qBACJ,SAAiB,KAAK,YAAY,SAC9B,IAAI,KAAK,YAAY,KAAK,GAAG,CAAC,KAC9B,IACJ;AACM,UAAA,cAAc,YAAY,SAAU;AAEtC,QAAA;AACF,WAAK,eAAe;AAEd,YAAA,WAAW,MAAM,YAAY;AAAA,QACjC,GAAG,KAAK,OAAO;AAAA,QACf;AAAA,UACE,eAAe;AAAA,UACf,YAAY,KAAK;AAAA,QACnB;AAAA,MAAA;AAGE,UAAA,SAAS,KAAK,SAAS,KAAK;AAC9B,iBAAS,MAAM,EAAE,SAAS,SAAS,KAAK,KAAK;AAC7C,aAAK,mBAAmB;AACxB;AAAA,MACF;AAEA,WAAK,mBAAmB,SAAS,KAAK,KAAK,IAAI,CAAC,UAAU;AAAA,QACxD,GAAG;AAAA,QACH,YAAY;AAAA,MACZ,EAAA;AAEF,UAAI,oBAAoB,OAAO,WAAW,GAAG,IACzC,OAAO,MAAM,CAAC,EAAE,MAAM,GAAG,IACzB,OAAO,MAAM,GAAG;AAEf,WAAA,cAAc,kBAAkB,OAAO,OAAO;AAAA,aAC5C,GAAG;AACV,cAAQ,MAAM,CAAC;AAEf,eAAS,MAAM,EAAE,SAAS,OAAQ,CAAA;AAAA,IAAA,UAClC;AACA,WAAK,eAAe;IACtB;AAAA,EACF;AAAA,EAEA,MAAM,2BAA2B;AACzB,UAAA,cAAc,YAAY,SAAU;AAEtC,QAAA;AACF,WAAK,eAAe;AAEpB,YAAM,WAAW,MAAM,YAAY,KAAK,GAAG,KAAK,OAAO,WAAW;AAAA,QAChE,OAAO,KAAK,mBAAmB,IAAI,CAAC,SAAS,KAAK,IAAI;AAAA,MAAA,CACvD;AAEG,UAAA,SAAS,KAAK,SAAS,KAAK;AAC9B,iBAAS,MAAM,EAAE,SAAS,SAAS,KAAK,KAAK;AAC7C,aAAK,qBAAqB;AAC1B;AAAA,MACF;AAEA,YAAM,KAAK;aACJ,GAAG;AACV,cAAQ,MAAM,CAAC;AAEf,eAAS,MAAM,EAAE,SAAS,OAAQ,CAAA;AAAA,IAAA,UAClC;AACA,WAAK,eAAe;IACtB;AAAA,EACF;AAAA;AAAA,EAEA,MAAM,iBAAiB,UAAoB;AACnC,UAAA,cAAc,YAAY,SAAU;AAEtC,QAAA;AACF,WAAK,eAAe;AAEd,YAAA,gBAAgB,KAAK,YAAY,SACnC,IAAI,KAAK,YAAY,KAAK,GAAG,CAAC,KAC9B;AAEJ,aAAO,MAAM,YAAY,KAAK,GAAG,KAAK,OAAO,oBAAoB;AAAA,QAC/D;AAAA,QACA;AAAA,MAAA,CACD;AAAA,aACM,GAAG;AACV,cAAQ,MAAM,CAAC;AAEf,eAAS,MAAM,EAAE,SAAS,OAAQ,CAAA;AAE5B,YAAA;AAAA,IAAA,UACN;AACA,WAAK,eAAe;IACtB;AAAA,EACF;AAAA,EAEA,MAAM,mBAAmB,OAAe;AAChC,UAAA,cAAc,YAAY,SAAU;AAEtC,QAAA;AACF,WAAK,eAAe;AAEhB,UAAA,YAAY,KAAK,YAAY,SAC7B,IAAI,KAAK,YAAY,KAAK,GAAG,CAAC,KAC9B;AAEA,UAAA,WAAW,IAAI;AACnB,eAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,iBAAS,OAAO,MAAM,CAAC,EAAE,MAAM,MAAM,CAAC,CAAC;AAAA,MACzC;AACS,eAAA,OAAO,aAAa,SAAS;AAEhC,YAAA,WAAW,MAAM,YAAY,KAAK,GAAG,KAAK,OAAO,SAAS,QAAQ;AAEpE,UAAA,SAAS,KAAK,SAAS,KAAK;AAC9B,iBAAS,MAAM,EAAE,SAAS,SAAS,KAAK,KAAK;AAC7C,aAAK,qBAAqB;AAC1B;AAAA,MACF;AAEA,YAAM,KAAK;aACJ,GAAG;AACV,cAAQ,MAAM,CAAC;AAEf,eAAS,MAAM,EAAE,SAAS,OAAQ,CAAA;AAAA,IAAA,UAClC;AACA,WAAK,eAAe;IACtB;AAAA,EACF;AAAA,EAEA,MAAM,yBAAyB;AACvB,UAAA,cAAc,YAAY,SAAU;AAEtC,QAAA;AACI,YAAA,WAAW,MAAM,YAAY;AAAA,QACjC,GAAG,KAAK,OAAO;AAAA,QACf;AAAA,UACE,MAAM,KAAK,mBAAmB,CAAC,EAAE;AAAA,QACnC;AAAA,QACA,EAAE,cAAc,OAAO;AAAA,MAAA;AAGzB,YAAM,MAAM,IAAI,gBAAgB,SAAS,IAAI;AAEzC,UAAA,WAAW,SAAS,cAAc,GAAG;AACzC,eAAS,OAAO;AAChB,eAAS,SAAS;AAClB,eAAS,WAAW,KAAK,mBAAmB,CAAC,EAAE;AAE/C,eAAS,MAAM;AAEf,UAAI,gBAAgB,GAAG;AAAA,aAChB,GAAG;AACV,cAAQ,MAAM,CAAC;AAEf,eAAS,MAAM,EAAE,SAAS,OAAQ,CAAA;AAAA,IACpC;AAAA,EACF;AAAA,EAEA,MAAM,iBAAiB;AACf,UAAA,cAAc,YAAY,SAAU;AAEtC,QAAA;AACF,WAAK,eAAe;AAEhB,UAAA,eAAe,KAAK,mBAAmB,CAAC;AAE5C,YAAM,WAAW,MAAM,YAAY,KAAK,GAAG,KAAK,OAAO,cAAc;AAAA,QACnE,MAAM,aAAa;AAAA,MAAA,CACpB;AAED,WAAK,mBAAmB;AACnB,WAAA,kBAAkB,SAAS,KAAK;AAAA,IAAA,UACrC;AACA,WAAK,eAAe;IACtB;AAAA,EACF;AAAA,EAEA,MAAM,eAAe;AACb,UAAA,cAAc,YAAY,SAAU;AAEtC,QAAA;AACF,WAAK,eAAe;AAEhB,UAAA,eAAe,KAAK,mBAAmB,CAAC;AAE5C,YAAM,WAAW,MAAM,YAAY,KAAK,GAAG,KAAK,OAAO,eAAe;AAAA,QACpE,MAAM,aAAa;AAAA,QACnB,SAAS,KAAK;AAAA,MAAA,CACf;AAEG,UAAA,SAAS,KAAK,SAAS,KAAK;AAC9B,iBAAS,MAAM,EAAE,SAAS,SAAS,KAAK,KAAK;AAC7C;AAAA,MACF;AAEA,YAAM,KAAK;AAEX,WAAK,mBAAmB;AACxB,WAAK,kBAAkB;AAAA,IAAA,UACvB;AACA,WAAK,eAAe;IACtB;AAAA,EACF;AAAA,EAEA,iBAAiB;AACN,aAAA,gBAAgB,KAAK,oBAAoB;AAChD,mBAAa,aAAa;AAAA,IAC5B;AAAA,EACF;AAAA,EAEA,kBAAkB,OAAmB,MAAoB;AACnD,QAAA,CAAC,MAAM,SAAS;AAClB,WAAK,eAAe;AAEpB,WAAK,aAAa;AAClB;AAAA,IACF;AAEK,SAAA,aAAa,CAAC,KAAK;AAAA,EAC1B;AACF;;;;;;;;;;;;;;;;;;ACzPA,UAAM,QAAQ;AAOR,UAAA,YAAY,SAAS,MAAM;AAC3B,UAAA,MAAM,aAAa,aAAa;AAC3B,eAAA;AAAA,MACT;AAEQ,cAAA,MAAM,aAAa,WAAW;AAAA,QACpC,KAAK;AACI,iBAAA;AAAA,QACT,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACI,iBAAA;AAAA,QACT,KAAK;AACI,iBAAA;AAAA,QACT,KAAK;AACI,iBAAA;AAAA,MACX;AAEO,aAAA;AAAA,IAAA,CACR;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACkBD,UAAM,QAAQ;AAQR,UAAA,iBAAiB,IAAI,MAAM;AAK3B,UAAA,mBAAmB,SAAS,MAAI;AAEjC,UAAA,eAAe,SAAS,QAAO;AACzB,eAAA;AAAA,UACL,GAAG,MAAM,gBAAgB,iBACzB,OAAO,CAAA,SAAM,KAAK,WAAW,EAAE,KAAK,CAAC,GAAE,MAAI,EAAE,OAAO,EAAE,OAAO,IAAI,EAAE;AAAA,UACnE,GAAG,MAAM,gBAAgB,iBACzB,OAAO,CAAA,SAAM,CAAC,KAAK,WAAW,EAAE,KAAK,CAAC,GAAE,MAAI,EAAE,OAAO,EAAE,OAAO,IAAI,EAAE;AAAA,QAAA;AAAA,MAExE;AAEA,aAAO,MAAM,gBAAgB,iBAAiB,KAAK,CAAC,GAAE,MAAI,EAAE,eAAe,EAAE,eAAe,IAAI,EAAE;AAAA,IAAA,CACnG;AAED,UAAM,OAAO;AACP,UAAA,WAAW,IAAI,KAAK;AAEpB,UAAA,wBAAwB,CAACxR,WAAmB;AAC5C,UAAA,OAAOA,WAAU,UAAU;AACvB,cAAA,gBAAgB,qBAAqB,GAAG;AAE9C;AAAA,MACF;AAEA,YAAM,gBAAgB;AAAA,QACpB,MAAM,gBAAgB,YAAY,OAAO,GAAGA,SAAQ,CAAC,EAAE,KAAK,GAAG;AAAA,MAAA;AAAA,IACjE;AAGF,UAAM,kBAAkB,MAAM;AAC5B,YAAM,gBAAgB;IAAe;AAGjC,UAAAY,eAAc,CAAC,OAAmB,SAAuB;AACvD,YAAA,gBAAgB,kBAAkB,OAAO,IAAI;AAAA,IAAA;AAG/C,UAAA,gBAAgB,CAAC,SAAuB;AACxC,UAAA,CAAC,KAAK,aAAa;AACrB;AAAA,MACF;AAEM,YAAA,gBAAgB,qBAAqB,KAAK,IAAI;AAAA,IAAA;AAGhD,UAAA,aAAa,OAAO,UAAqB;AAC7C,WAAK,QAAQ,KAAK;AAAA,IAAA;AAGpB,UAAM,oBAAoB,MAAM;AAE1B,UAAA,QAAQ,SAAS,cAAc,OAAO;AAC1C,YAAM,OAAO;AACb,YAAM,WAAW;AAEX,YAAA,iBAAiB,UAAU,MAAM;AACrC,YAAI,QAAQ,IAAI,MAAM,MAAM,MAAO,MAAM,EACtC,KAAK,CAAC,EACN,IAAI,CAAC+R,IAAG,MAAM,MAAM,MAAO,CAAC,CAAC;AAE1B,cAAA,gBAAgB,mBAAmB,KAAK;AAAA,MAAA,CAC/C;AAED,YAAM,MAAM;AAAA,IAAA;AAId,cAAU,MAAM;AACd,YAAM,gBAAgB;IAAqB,CAC5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrJY,MAAA,iBAAiB,YAAY+jB,WAAY;;;;;;;;;;;;;;;;;;AC8EtD,UAAM,QAAQ;AAQR,UAAA,sBAAsB,IAAI,KAAK;AAErC,QAAI,kBAA0B,CAAA;AACxB,UAAA,gBAAgB,IAAI,CAAA,CAAc;AAExC,UAAM,kBAAkB,SAAS,MAAM,MAAM,eAAe;AAE5D,UAAM,mBAAmB;AAAA,MACvB,MAAM,MAAM,eAAe,EAAE;AAAA,IAAA;AAG/B,UAAM,sBAAsB;AAAA,MAC1B,MAAM,MAAM,eAAe,EAAE,mBAAmB;AAAA,IAAA;AAGlD,UAAM,oBAAoB,YAAY;AACpC,YAAM,YAAY,MAAM,aAAa,QAAQ,YAAY;AAAA,QACvD,MAAM;AAAA,MACP,CAAA,EAAE;AAAA,QACD,MAAM;AAAA,QACN,MAAM;AAAA,MAAA;AAGR,UAAI,CAAC,WAAW;AACd;AAAA,MACF;AAEM,YAAA,eAAe,EAAE;IAAyB;AAGlD,UAAM,aAAa,MAAM;AACjB,YAAA,eAAe,EAAE;IAAe;AAGxC,UAAM,0BAA0B,MAAM;AAC9B,YAAA,eAAe,EAAE;IAAa;AAGtC,UAAM,wBAAwB,MAAM;AAC5B,YAAA,eAAe,EAAE,mBAAmB;AACpC,YAAA,eAAe,EAAE,kBAAkB;AAAA,IAAA;AAoB3C,UAAM,iBAAiB,MAAM;AACrB,YAAA,eAAe,EAAE;IAAuB;AAG1C,UAAA,aAAa,OAAO,UAAqB;;AAC7C,wBAAkB,CAAA;AAEd,UAAA,UAAS32B,MAAA,MAAM,iBAAN,gBAAAA,IAAoB;AAEjC,UAAI,kBAAkB,OAAQ,CAAC,EAAE,iBAAiB;AAElD,YAAM,kBAAkB,OAAO,MAAWF,QAAe,OAAO;AAC9D,YAAI,KAAK,QAAQ;AACR,iBAAA;AAAA,YACL,MAAM,IAAI,QAAQ,CAAC,YAAY;AACxB,mBAAA,KAAK,CAAC,SAAe;AACxB;AAAA,kBACE,IAAI,KAAK,CAAC,IAAI,GAAG,GAAGA,KAAI,GAAG,KAAK,IAAI,IAAI,EAAE,MAAM,KAAK,MAAM;AAAA,gBAAA;AAAA,cAC7D,CACD;AAAA,YAAA,CACF;AAAA,UAAA;AAAA,QACH,WACS,KAAK,aAAa;AACvB,cAAA,kBAAkB,KAAK;AAE3B,gBAAM,UAAW,MAAM,IAAI,QAAQ,CAAC,YAAY;AAC9C,4BAAgB,YAAY,OAAO;AAAA,UAAA,CACpC;AAED,cAAI,SAAiB,CAAA;AAErB,mBAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACvC,qBAAS,OAAO;AAAA,cACd,MAAM,gBAAgB,QAAQ,CAAC,GAAG,GAAGA,KAAI,GAAG,KAAK,IAAI,GAAG;AAAA,YAAA;AAAA,UAE5D;AAEO,iBAAA;AAAA,QACT;AAEA,eAAO;MAAC;AAGV,YAAM,QAAS,kBAAkB,MAAM,gBAAgB,eAAe;AAElE,UAAA;AACI,cAAA,eAAe,EAAE,eAAe,aAAa;AAEnD,cAAM,gBAAgB,MAAM,MAAM,eAAe,EAAE;AAAA,UACjD,MAAM,IAAI,CAAC,SAAS,KAAK,IAAI;AAAA,QAAA;AAG3B,YAAA,cAAc,KAAK,SAAS,KAAK;AACnC,oBAAU,MAAM,EAAE,SAAS,cAAc,KAAK,KAAK;AACnD;AAAA,QACF;AAEA,cAAIU,MAAA,cAAc,KAAK,SAAnB,gBAAAA,IAAyB,YAAW,GAAG;AACzC,gBAAM,MAAM,eAAe,EAAE,mBAAmB,KAAK;AAErD,4BAAkB,CAAA;AAClB;AAAA,QACF;AACA,sBAAc,QAAQ,cAAc,KAAK,QAAQ,CAAA;AAEjD,4BAAoB,QAAQ;AAAA,eACrB,GAAG;AACV,gBAAQ,IAAI,CAAC;AACb,kBAAU,MAAM,WAAW;AAAA,MAAA,UAC3B;AACM,cAAA,eAAe,EAAE,eAAe,gBAAgB;AAAA,MACxD;AAAA,IAAA;AAGF,UAAM,4BAA4B,YAAY;AACxC,UAAA;AACF,cAAM,MAAM,eAAe,EAAE,mBAAmB,eAAe;AAAA,eACxD,GAAG;AACV,gBAAQ,IAAI,CAAC;AACb,kBAAU,MAAM,WAAW;AAAA,MAC7B;AAEwB;IAAA;AAG1B,UAAM,wBAAwB,YAAY;AACpC,UAAA;AACF,cAAM,QAAQ,gBAAgB;AAAA,UAC5B,CAAC,SAAS,CAAC,MAAM,aAAa,EAAE,SAAS,KAAK,IAAI;AAAA,QAAA;AAEpD,YAAI,MAAM,QAAQ;AAChB,gBAAM,MAAM,eAAe,EAAE,mBAAmB,KAAK;AAAA,QACvD;AAAA,eACO,GAAG;AACV,gBAAQ,IAAI,CAAC;AACb,kBAAU,MAAM,WAAW;AAAA,MAC7B;AAEwB;IAAA;AAG1B,UAAM,0BAA0B,MAAM;AACpC,0BAAoB,QAAQ;AAC5B,oBAAc,QAAQ;AACtB,wBAAkB,CAAA;AAAA,IAAC;AAGrB,cAAU,MAAM;AACR,YAAA,eAAe,EAAE;IAAqB,CAC7C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC/PY,MAAA,oBAAoB,YAAYo2B,WAAe;ACM5D,eAAeC,eACbn2B,SACiC;AACjC,SAAO,IAAIyQ,QAASC,aAAY;AAC9B,UAAM0lB,kBAAkBvjB,SACtB,IAAIqjB,gBAAgBl2B,OAAO,CAC7B;AAEA,UAAM8Q,iBAAiBlN,SAASqN,aAAa;AAAA,MAC3CxD,OAAOzN,QAAQyN,SAAS;AAAA,MACxBnF,OAAOtI,QAAQsI,SAAS;AAAA,MACxB4I,OAAO;AAAA,MACPE,MAAMA,MAAAtQ,YAAAu1B,gBAAA;AAAA,QAAA,mBAC6BD;AAAAA,MAClC,GAAA,IAAA;AAAA,MACD7kB,QAAQA,MAAM;AACZ,cAAM6c,OACJgI,gBAAgBE,mBAAmBtsB,OAChCrK,UAAS,CAACA,KAAK42B,WAClB,EAAE,CAAC,KAAK;AAEV,eAAAz1B,YAAAqN,UAAArN,MAAAA,CAAAA,YAAAI,UAAA;AAAA,UAAA,WAGekK,MAAM;AACb0F,2BAAeC,QAAO;AACtBL,oBAAQ;AAAA,cAAE8lB,WAAW;AAAA,cAAO9iB,MAAM;AAAA,cAAMtU,MAAM;AAAA,YAAG,CAAC;AAAA,UACpD;AAAA,QAAC,GAAA;AAAA,UAAAiC,SAAAA,MAAA,CAAAuF,gBAAA,IAAA,CAAA;AAAA,SAAA9F,GAAAA,YAAAI,UAAA;AAAA,UAAA,QAAA;AAAA,UAAA,YAMS,CAACktB;AAAAA,UAAI,WACNhjB,MAAM;AACb0F,2BAAeC,QAAO;AAEtBL,oBAAQ;AAAA,cAAE8lB,WAAW;AAAA,cAAM9iB,MAAM0a;AAAAA,cAAMhvB,MAAMgvB,KAAKhvB;AAAAA,YAAK,CAAC;AAAA,UAC1D;AAAA,QAAC,GAAA;AAAA,UAAAiC,SAAAA,MAAA,CAAAuF,gBAAA,IAAA,CAAA;AAAA,QAAA,CAAA,CAAA,CAAA;AAAA,MAMR;AAAA,MACDuK,SAASA,MAAM;AACb0kB,mBAAW,MAAM;AACf/kB,yBAAeC,QAAO;AAAA,QACvB,GAAE,GAAG;AAAA,MACR;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AACH;AC1DO,MAAM,mBAAmB;ACcS,SAAAzP,QAAAC,GAAA;AAAA,SAAA,OAAAA,MAAA,cAAAC,OAAAC,UAAAC,SAAAC,KAAAJ,CAAA,MAAAK,qBAAAA,CAAAA,QAAAL,CAAA;AAAA;AAEzC,IAAI/B,MAAM;AAEH,MAAMi3B,qBAAqBC,iBAAiB;AAAA,EAA5C;AAAA;AACLC,qDAAmD,IAAIC;;EAEvD,MAAMC,OAAO72B,SAA0C;AACrD,UAAM82B,eAAe,MAAM7Q,aAAa4Q,OACtC72B,QAAQyU,SACRzU,QAAQsI,OACRtI,OACF;AAEA,WAAO82B,aAAa7yB;AAAAA,EACtB;AAAA,EAEA,MAAMue,QAAQxiB,SAA2C;AACvD,QAAI;AACF,YAAMimB,aAAazD,QAAQxiB,QAAQyU,SAASzU,QAAQsI,OAAOtI,OAAO;AAClE,aAAO;AAAA,IACR,SAAQiN,GAAG;AACV,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAM8pB,MAAM/2B,SAAwC;AAClD,UAAMimB,aAAa8Q,MAAM/2B,QAAQyU,SAASzU,QAAQsI,OAAOtI,OAAO;AAAA,EAClE;AAAA,EAEAiR,aAAajR,SAA+C;AAC1D,QAAIqU,UAAU;AAEd,UAAMvD,iBAAiC;AAAA,MACrCI,OAAO;AAAA,MACP,GAAGlR;AAAAA,MACHqI,IAAI7I;AAAAA,MACJ,IAAI6U,UAAU;AACZ,eAAOA;AAAAA,MACR;AAAA,MACD,IAAIA,QAAQrR,GAAG;AACbqR,kBAAUrR;AACV8N,uBAAekmB,mBAAmBp2B,KAAKyT,OAAO;AAAA,MAC/C;AAAA,MACD2iB,oBAAoB,IAAIJ,MAAO;AAAA,MAC/BK,cAAc,IAAIL,MAAO;AAAA,MACzB7lB,SAASA,MAAM;AACbD,uBAAeuD,UAAU;AACzBvD,uBAAemmB,aAAar2B;MAC9B;AAAA;AAEF,SAAK+1B,0BAA0B/1B,KAAKkQ,cAAc;AAElD,WAAOA;AAAAA,EACT;AAAA,EAEA,MAAMomB,OAAOl3B,SAAiD;AAC5D,WAAO,IAAIyQ,QAAkBC,aAAY;AACvC,YAAMI,iBAAiB,KAAKG,aAAa;AAAA,QACvC,GAAGjR;AAAAA,QACHm3B,WAAW,YAAY;AACrB,cACEC,WAAWp3B,QAAQm3B,SAAS,IACvB,MAAMn3B,QAAQm3B,UAAS,MAAQ,QAChC,OACJ;AACA,mBAAO;AAAA,UACT;AAEArmB,yBAAeC,QAAO;AAEtBL,kBAAQ,IAAI;AAAA,QACb;AAAA,QACD2mB,UAAU,YAAY;AACpB,cACED,WAAWp3B,QAAQq3B,QAAQ,IACtB,MAAMr3B,QAAQq3B,SAAQ,MAAQ,QAC/B,OACJ;AACA,mBAAO;AAAA,UACT;AAEAvmB,yBAAeC,QAAO;AAEtBL,kBAAQ,KAAK;AAAA,QACf;AAAA,MACF,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAAA,EAEA,MAAM7M,sBACJhB,WACsC;AACtCA,gBAAYgQ,SAAShQ,SAAS;AAE9BA,cAAUioB,gBAAgBwM,KAAK,MAAM;AAEnC,YAAMnjB,UAAUtR,UACbuR,WAAU,EACVpK,OAAQwJ,YAAWA,OAAOlT,SAAS2hB,kBAAkBsV,gBAAgB;AACxE10B,gBAAU+e,WAAWzN,OAAO;AAAA,IAC9B,CAAC;AAED,WAAO,IAAI1D,QAASC,aAAY;AAC9B,YAAM8mB,gBAAgBA,MAAM;AAC1B9mB,gBAAQ;AAAA,UAAE5M,WAAW;AAAA,UAAM5D,YAAY2C,UAAUuW,aAAa;AAAA,QAAE,CAAC;AAEjEvW,kBAAU0oB,QAAQ,CAAA,CAAE;AACpB1oB,kBAAUa,aAAa,CAAA,CAAE;AAEzBoN,uBAAeC,QAAO;AAAA;AAGxB,YAAMyF,eAAeA,MAAM;AACzB9F,gBAAQ;AAAA,UAAE5M,WAAW;AAAA,UAAO5D,YAAY,CAAA;AAAA,QAAG,CAAC;AAE5C4Q,uBAAeC,QAAO;AAAA;AAGxB,YAAMD,iBAAiB,KAAKG,aAAa;AAAA,QACvCC,OAAO;AAAA,QACPzD,OAAO;AAAA,QACP2D,MAAMA,MAAM;AACV,iBAAAtQ,YAAA,OAAA;AAAA,YAAA,SAAA;AAAA,aAAAA,CAAAA,YAAAylB,aAAA;AAAA,YAAA,aAE4B1jB;AAAAA,YAAS,aAAA;AAAA,UAAA,GAAA,IAAA,CAAA,CAAA;AAAA,QAGtC;AAAA,QACD0O,QAAQA,MAAM;AACZ,iBAAAzQ,YAAAqN,UAAArN,MAAAA,CAAAA,YAAAI,UAAA;AAAA,YAAA,QAAA;AAAA,YAAA,WAIes2B;AAAAA,YAAa,YACZ30B,UAAUuW,aAAc,EAAC9T,WAAW;AAAA,UAAC,GAAA;AAAA,YAAAjE,SAAAA,MAAA,CAAAuF,gBAAA,IAAA,CAAA;AAAA,WAAA9F,GAAAA,YAAAI,UAAA;AAAA,YAAA,WAI9BsV;AAAAA,UAAY,GAAA;AAAA,YAAAnV,SAAAA,MAAA,CAAAuF,gBAAA,IAAA,CAAA;AAAA,UAAA,CAAA,CAAA,CAAA;AAAA,QAGrC;AAAA,MACF,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAAA,EAEA,MAAMyb,eACJoV,iBACyB;AACzB,WAAO,IAAIhnB,QAASC,aAAY;AAC9B,YAAM6B,WAAWM,SAAS4kB,gBAAgBllB,QAAQ;AAElD,UAAIjK,QAAQ;AAEZ,UAAImvB,gBAAgBC,yBAAyB,MAAM;AACjD,YAAID,gBAAgBnV,OAAO;AACzB/P,mBAASwM,WAAW0Y,gBAAgBnV,KAAK;AAAA,QAC3C,OAAO;AACL/P,mBAASqM,UAAS;AAAA,QACpB;AAEAtW,gBAAQmvB,gBAAgBnV,QAAQ,OAAO;AAAA,MACzC;AAEA,YAAMxR,iBAAiB,KAAKG,aAAa;AAAA,QACvC3I,OAAOmvB,gBAAgBnvB,SAASA;AAAAA,QAChC6I,SAASA,MAAM;AACboB,mBAASkE,OAAM;AAEf3F,yBAAeC,QAAO;AAAA,QACvB;AAAA,QACDK,MAAMA,MAAM;AACV,iBAAAtQ,YAAAyK,aAAA;AAAA,YAAA,cAAA;AAAA,UAAA,GAAA;AAAA,YAAAlK,SAAAA,MAAAP,CAAAA,YAAA0kB,YAAA;AAAA,cAAA,YAE0BjT;AAAAA,YAAQ,GAAA;AAAA,cAAAlR,SAAAA,MAAAP,CAAAA,YAAA8V,QAAA;AAAA,gBAAA,YACVrE;AAAAA,cAAQ,GAAA,IAAA,CAAA;AAAA,YAAA,CAAA,CAAA;AAAA,UAAA,CAAA;AAAA,QAIjC;AAAA,QAEDhB,QAAQA,MAAM;AAAA,cAAAlP,OAAAqU;AACZ,iBAAA5V,YAAAqN,UAAArN,MAAAA,CAAAA,YAAAI,UAAA;AAAA,YAAA,QAAA;AAAA,YAAA,YAIgB,CAACqR,SAAS8D;AAAAA,YAAS,WACpB,CAAC9D,SAASsE;AAAAA,YAAW,WACrB,YAAY;AACnB,kBAAI,CAAE,MAAMtE,SAAStH,SAAQ,GAAK;AAChC;AAAA,cACF;AAEA,kBAAI,MAAMsH,SAASgE,gBAAgB;AACjCzF,+BAAeC,QAAO;AAAA,cACxB;AAAA,YACF;AAAA,UAAC,GAAAzP,QAAAe,QAEAyU,KAAK5P,SAAS6P,UAAU,wBAAwB,CAAC,IAAA1U,QAAA;AAAA,YAAAhB,SAAAA,MAAA,CAAAgB,KAAA;AAAA,WAAAvB,GAAAA,YAAAI,UAAA;AAAA,YAAA,WAGzCkK,MAAM;AACbmH,uBAASkE,OAAM;AAEf3F,6BAAeC,QAAO;AAAA,YACxB;AAAA,UAAC,GAAAzP,QAAAoV,SAEAI,KAAK5P,SAAS6P,UAAU,0BAA0B,CAAC,IAAAL,SAAA;AAAA,YAAArV,SAAAA,MAAA,CAAAqV,MAAA;AAAA,UAAA,CAAA,CAAA,CAAA;AAAA,QAI5D;AAAA,MACF,CAAC;AAEDhG,cAAQI,cAAc;AAAA,IACxB,CAAC;AAAA,EACH;AACF;ACrOA,MAAezQ,0CAAgB;AAAA,EAC7BC,MAAM;AAAA,EACNK,MAAMJ,OAAO;AACX,UAAMo3B,kBAAyC/0B,IAAI,CAAA,CAAE;AAErD,UAAMg1B,qBAAqBh0B,SAASi0B;AAEpC,SACED,yDAAoBjB,8BACpBS,WAAWQ,mBAAmBjB,0BAA0BrhB,EAAE,GAC1D;AACAsiB,yBAAmBjB,0BAA0BrhB,GAAIxE,oBAAmB;AAClEA,uBAAemmB,aAAaK,KAAK,MAAM;AACrC,gBAAM/3B,SAAQo4B,gBAAgB1zB,MAAM0R,UACjCzO,cAAa4J,eAAezI,OAAOnB,SAASmB,EAC/C;AAEA,cAAI9I,WAAU,IAAI;AAChB;AAAA,UACF;AAEAo4B,0BAAgB1zB,MAAM4K,OAAOtP,QAAO,CAAC;AAAA,QACvC,CAAC;AAEDo4B,wBAAgB1zB,MAAMgL,KAAK6B,cAAc;AAAA,MAC3C,CAAC;AAAA,IACH;AAEA,UAAMgnB,cAAc,OAAOhnB,mBAAmC;AAC5D,UACEsmB,WAAWtmB,eAAeK,OAAO,IAC5B,MAAML,eAAeK,QAAO,MAAQ,QACrC,OACJ;AACA;AAAA,MACF;AAEAL,qBAAeuD,UAAU;AAAA;AAG3B,UAAMmC,eAAe,OAAO1F,mBAAmC;AAC7D,UACEsmB,WAAWtmB,eAAeumB,QAAQ,IAC7B,MAAMvmB,eAAeumB,SAAQ,MAAQ,QACtC,OACJ;AACA;AAAA,MACF;AAEAvmB,qBAAeuD,UAAU;AAAA;AAG3B,UAAMmjB,gBAAgB,OAAO1mB,mBAAmC;AAC9D,UACEsmB,WAAWtmB,eAAeqmB,SAAS,IAC9B,MAAMrmB,eAAeqmB,UAAS,MAAQ,QACvC,OACJ;AACA;AAAA,MACF;AAEArmB,qBAAeuD,UAAU;AAAA;AAG3B,WAAO,MAAM;AAEX,YAAM0jB,UAAUx1B,MAAMo1B,eAAe,EAAEnzB,IAAKsM,oBAAmB;;AAC7D,eAAAhQ,YAAAk3B,UAAA;AAAA,UAAA,SAEWlnB,eAAeI;AAAAA,UAAK,SACpBJ,eAAerD;AAAAA,UAAK,cACfqD,eAAeuD;AAAAA,UAAO,wBACXA,aACpBvD,eAAeuD,UAAUA;AAAAA,UAAQ,WAE3BlD,MAAM2mB,YAAYhnB,cAAc;AAAA,UAAC,SACnCsmB,WAAWtmB,eAAekL,MAAM,KACnClL,MAAAA,eAAekL,WAAflL,gBAAAA,IAAAA,uBACAA,eAAexI,SAAS;AAAA,WACnB;AAAA,UACPjH,SAASA,MAAMyP,eAAeM,KAAM;AAAA,UACpCG,QAAQA,MAAAA;;AACN6lB,8BAAWtmB,eAAeS,MAAM,KAC9BT,MAAAA,eAAeS,WAAfT,gBAAAA,IAAAA,uBAAyBhQ,YAAAqN,UAAA,MAAA,CAAArN,YAAAI,UAAA;AAAA,cAAA,WAGJkK,MAAMoL,aAAa1F,cAAc;AAAA,YAAC,GAAA;AAAA,cAAAzP,SAAAA,MAAA,CAClDyP,eAAe2R,oBAAoB,IAAI;AAAA,aAAA3hB,GAAAA,YAAAI,UAAA;AAAA,cAAA,QAAA;AAAA,cAAA,WAI/BkK,MAAMosB,cAAc1mB,cAAc;AAAA,YAAC,GAAA;AAAA,cAAAzP,SAAAA,MAAA,CAE3CyP,eAAe4R,qBAAqB,IAAI;AAAA,YAAA,CAAA,CAAA,CAAA;AAAA;AAAA,SAIlD;AAAA,MAGP,CAAC;AAyCD,aAAA5hB,YAAAqN,UAAA,MAAA,CAAkB4pB,OAAO,CAAA;AAAA;EAE7B;AACF,CAAC;ACpJM,MAAM,YAAY;AC0BzB,MAAM,aAAuB;AAAA,EAC3B;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;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAIO,MAAM,YAAY;AAAA,EACvB;AAAA,EACA;AAAA,EACA,CAAC,KAAKE,UAAS,YAAY;AACzB,QAAI,SAAS;AACS,0BAAA,SAAS,KAAK,IAAI;AAAA,IACxC;AAES,aAAA,eAAe,IAAI;AACnB,aAAA,eAAe,IAAI;AACb,mBAAA,eAAe,IAAI;AAG5B,UAAA,kBAAkB,SAAS,cAAc,KAAK;AACpD,UAAM,aAAa,IAAI;AACjB,UAAA,QAAQ,YAAY,SAAS;AACnC,UAAM,aAAa;AAGnB,WAAO,OAAO,eAAe;AACpB,aAAA,KAAK,YAAY,eAAe;AAAA,EAC3C;AACF;;;;;;;;;;;;;;;;ACjEA,UAAM,QAAQ;AAWd,UAAM,gBAAgB;AAEtB,UAAM,cAAc,YAAY;AAKhC,UAAM,QAAQ,SAAS,MAAM,YAAY,WAAW;AAIpD,UAAM,OAAO,SAAS,MAAM,YAAY,IAAI;AAE5C,UAAM,KAAK;AAAA,MAAS,MAClB,cAAc,SAAS,KAAK,SAAS,cAAc,SAAS,KAAK,WAAW;AAAA,IAAA;AAGxE,UAAA,UAAU,SAAS,MAAM;AAC7B,UAAI,MAAM,YAAY,MAAM,IAAI,GAAG;AAC1B,eAAA;AAAA,MACT;AAEA,aAAO,CAAC,EAAE,MAAM,aAAa,MAAM,KAAK;AAAA,IAAA,CACzC;;;;;;;;;;;;;;;;;;;;;;ACpCD,MAAA,WAAe,KAAgB;;;ACN7B,SAAAC,cAAA,MAAA,QAAA;SACUC,UAAA,GAAAC,mBAAA,OAAAC,cAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;ACKZ,UAAM,QAAQ;AAQR,UAAA,aAAa,SAAS,MAAM;AAChC,UAAI,eAAe,KAAK,MAAM,IAAI,GAAG;AAC5B,eAAA;AAAA,MAEA,WAAA,gBAAgB,KAAK,MAAM,IAAI,GAAG;AAClC,eAAA;AAAA,MAEA,WAAA,MAAM,KAAK,SAAS,GAAG,GAAG;AAC1B,eAAA;AAAA,MAAA,OAEJ;AACI,eAAA;AAAA,MACT;AAAA,IAAA,CACD;AAEK,UAAA,QAAQ,SAAS,MAAM;AAC3B,YAAM,YAAY,CAAA;AAClB,UAAI,MAAM,MAAM;AACd,gBAAQ,MAAM,MAAM;AAAA,UAClB,KAAK;AACH,sBAAU,KAAK,iBAAiB;AAChC;AAAA,UACF,KAAK;AACH,sBAAU,KAAK,iBAAiB;AAChC;AAAA,UACF,KAAK;AACH,sBAAU,KAAK,iBAAiB;AAChC,sBAAU,KAAK,iBAAiB;AAChC;AAAA,QACJ;AAAA,MACF;AACA,UAAI,MAAM,QAAQ;AAChB,kBAAU,KAAK,UAAU,MAAM,SAAS,GAAG,MAAM;AAAA,MACnD;AACO,aAAA;AAAA,QACL,GAAI,MAAM,SAAS,EAAE,OAAO,MAAM,MAAM;AAAA,QACxC,GAAI,MAAM,QAAQ,EAAE,UAAU,OAAO,MAAM,SAAS,WAAW,GAAG,MAAM,IAAI,OAAO,MAAM,KAAK;AAAA,QAC9F,GAAI,UAAU,UAAU,EAAE,WAAW,UAAU,KAAK,GAAG,EAAE;AAAA,MAAA;AAAA,IAC3D,CACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5CD,UAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACFtB,UAAM,gBAAgB;AAEtB,UAAM,EAAE,cAAc,OAAO,IAAI,cAAc;;;;;;;;;;;;;;;;ACV/C,SAAwB,cAAc;AACpC,QAAM,SAAS;AAEf,WAAS,SAAS;AAChB,WAAO,KAAK;AAAA,MACV,MAAM;AAAA,IAAA,CACP;AAAA,EACH;AAEO,SAAA;AAAA,IACL;AAAA,EAAA;AAEJ;;;;;;;ACLA,UAAM,WAAW;;;;;;;;;;;ACPjB,SAAwB,kBAAkB,UAAsB;AAC9D,WAAS,sBAAsB;AAE7B,QAAI,CAAC,SAAS,uBAAuB,OAAO,WAAW,kCAAkC,EAAE,SAAS;AACzF;AACT;AAAA,IACF;AAEO,WAAA,SAAS,oBAAoB,YAAY;AACxC,YAAA,QAAQ,QAAQ,SAAA,CAAU;AAAA,IAAA,CACjC;AAAA,EACH;AAEO,SAAA;AAAA,IACL;AAAA,EAAA;AAEJ;;;;;;;ACRA,UAAM,gBAAgB;AAEtB,aAAS,kBAAkB,OAAmB;;AAC5C,YAAM,EAAC,wBAAuB,kBAAkB,MAAM;AACpD,sBAAc,sBAAsB,cAAc,eAAe,cAAc,uBAAuB,SAAS,UAAU,MAAM;AAAA,MAAA,CAChI;AACmB,OAAA/4B,MAAA,oBAAA,MAAA,gBAAAA,IAAG,MAAM,KAAK,MAAM;AACtC,cAAM,IAAI,MAAM;AAChB,cAAM,IAAI,MAAM;AAChB,cAAM,YAAY,KAAK;AAAA,UACrB,KAAK,IAAI,GAAG,aAAa,CAAC;AAAA,UAC1B,KAAK,IAAI,GAAG,cAAc,CAAC;AAAA,QAAA;AAE7B,cAAM,WAAW;AAAA,UACf,iBAAiB,CAAC,MAAM,CAAC;AAAA,UACzB,UAAU,SAAS,SAAS,CAAC,MAAM,CAAC;AAAA,QAAA;AAEtC,iBAAS,gBAAgB;AAAA,UACvB;AAAA,YACE,UAAU,cAAc,SAAS,IAAI,gBAAgB,SAAS,WAAW,SAAS,QAAQ;AAAA,UAC5F;AAAA,UACA;AAAA,YACE,UAAU;AAAA,YACV,QAAQ;AAAA,YACR,eAAe,cAAc,SAAS,IAAI,gBAAgB,SAAS,gCAAgC;AAAA,UACrG;AAAA,QAAA;AAAA,MACF;AAAA,IAEJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClCA,UAAM,QAAQ;AASR,UAAA,UAAU,SAAS,MAAM;AAC7B,aAAO,MAAM,MAAM,IAAI,CAAC,SAAS;AAC/B,eAAO,KAAK,OAAO,CAAK,MAAA,CAAC,EAAE,IAAI;AAAA,MAChC,CAAA,EAAE,OAAO,CAAA,MAAK,EAAE,MAAM;AAAA,IAAA,CACxB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACCD,UAAM,SAAS;AAEf,UAAM,gBAAgB;AAEtB,UAAM,YAAY,SAAS,MAAM,YAAY,QAAS;AAEtD,UAAM,WAAW,SAAS,MAAM,MAAM,SAAS,EAAE,QAAQ;AAEnD,UAAA,cAAc,IAAI,KAAK;AAE7B,UAAM,eAAe,MAAM;AACnB,YAAA,SAAS,EAAE;AAEjB,aAAO,KAAK,EAAC,MAAM,QAAQ,CAAA;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1B7B,SAAwB,UAAU;AAChC,QAAM,SAAS;AAEf,QAAM,gBAAgB;AACtB,QAAM,YAAY;AAElB,WAAS,SAASC,QAAwB;AACxC,cAAU,WAAWA,MAAK;AACtB,QAAA,cAAc,SAAS,KAAK,2BAA2B;AAClD,aAAA,KAAK,UAAU,4BAA4B;AAAA,IACpD;AAAA,EACF;AAEO,SAAA;AAAA,IACL;AAAA,EAAA;AAEJ;;;;;;;;;;;;;ACRA,UAAM,gBAAgB;AACtB,UAAM,YAAY;AAEZ,UAAA,EAAE,aAAa;AAErB,UAAM,UAAU;AAGhB,aAAS,oBAAoB,OAAmB;AAC9C,UAAI,MAAM,UAAU,MAAM,WAAW,GAAG;AACtC,gBAAQ,MAAM,SAAS;AAAA,UACrB,OAAO,MAAM,UAAU,MAAM,UAAU,IAAI,KAAK;AAAA,QAAA,CACjD;AAAA,MACH;AAAA,IACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACfA,UAAM,SAAS;AAEf,UAAM,gBAAgB;AACtB,UAAM,YAAY;AAEZ,UAAA,EAAC,aAAY;AAEb,UAAA,SAAS,MAAM,MAAM,OAAO,YAAY,CAAC,GAAG,CAAC,iBAAiB;AAElE,oBAAc,SAAS,KAAK,SAAS,YAAY,UAAU,WAAW,aAAa,IAAc;AAAA,IAAA,GAChG,EAAC,WAAW,KAAA,CAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACaP,MAAA,uBAAuB,OAAO,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACbrD,UAAM,QAAQ;AASR,UAAA,WAAW,OAAO,oBAAoB;AAE5C,UAAM,UAAU;AAEV,UAAA,YAAY,SAAS,MAAM;AAC/B,aAAO,MAAM,UACT,SAAS,SAAS,MAAM,UAAU,GAAG,EAAE,CAAE,EAAE,SAC3C,SAAS,gBAAgB,MAAM,UAAU,GAAG,EAAE;AAAA,IAAA,CACnD;AAEK,UAAA,eAAe,SAAS,MAAM;AAClC,aAAO,UAAU,UAAU,CAAC,MAAM,WAAW,SAAS;AAAA,IAAA,CACvD;AAGK,UAAA,cAAc,SAAS,MAAM;AAC1B,aAAA,CAAC,SAAS,cACb,iBAAiB,MAAM,MAAM,SAAS,EAAE,OACxC;AAAA,IAAA,CACL;AAEY,aAAA;AAAA,MACX,KAAK;AAAA,IAAA,CACN;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjCD,UAAM,QAAQ;AAOR,UAAAA,SAAQ,MAAM,KAAK;AACzB,UAAM,UAAU;AAChB,UAAM,aAAa;AACb,UAAA,WAAW,OAAO,oBAAoB;AAEtC,UAAA,SAAS,SAAS,MAAM;AAC5B,aAAO,SAAS,YAAY,SAAS,MAAM,UAAU,GAAG,EAAE,CAAE;AAAA,IAAA,CAC7D;AAEK,UAAA,kBAAkB,SAAS,MAAM;AACrC,aAAO,SAAS,cACZ;AAAA,QACE,MAAM,IAAiB;AACjB,cAAA,GAAG,eAAe,OAAO,aAAa;AACxC,eAAG,MAAM,SAAS,GAAG,OAAO,WAAW;AAAA,UACzC;AAAA,QACF;AAAA,QACA,YAAY,MAAM;AAAA,QAAC;AAAA,QACnB,aAAa,CAAC,OAAoB;AAChC,aAAG,MAAM,WAAW;AACpB,aAAG,MAAM,YAAY,GAAG,GAAG,YAAY;AAAA,QACzC;AAAA,QACA,OAAO,CAAC,OAAoB;AAC1B,aAAG,MAAM,YAAY;AAAA,QACvB;AAAA,QACA,WAAW,IAAiB;AAC1B,aAAG,MAAM,WAAW;AACpB,aAAG,MAAM,YAAY;AAAA,QACvB;AAAA,MAAA,IAEF;AAAA,QACE,MAAM,IAAiB;AACrB,gBAAM,kBAAkB,GAAG;AAC3B,aAAG,MAAM,YAAY;AACrB,aAAG,MAAM,WAAW;AACpB,eAAK,GAAG;AACL,aAAA,MAAM,YAAY,GAAG,eAAe;AAAA,QACzC;AAAA,QACA,WAAW,IAAiB;AAC1B,aAAG,MAAM,WAAW;AACpB,aAAG,MAAM,YAAY;AAAA,QACvB;AAAA,QACA,YAAY,IAAiB;AAC3B,aAAG,MAAM,WAAW;AACpB,aAAG,MAAM,YAAY,GAAG,GAAG,YAAY;AAAA,QACzC;AAAA,QACA,MAAM,IAAiB;AACrB,aAAG,MAAM,YAAY;AAAA,QACvB;AAAA,QACA,WAAW,IAAiB;AAC1B,aAAG,MAAM,WAAW;AACpB,aAAG,MAAM,YAAY;AAAA,QACvB;AAAA,MAAA;AAAA,IACF,CACL;AAEK,UAAA,kBAAkB,SAAS,MAAM;AACrC,aAAO,SAAS,cACZ;AAAA,QACE,kBAAkB;AAAA,QAClB,gBAAgB;AAAA,QAChB,cAAc;AAAA,QACd,kBAAkB;AAAA,QAClB,gBAAgB;AAAA,QAChB,cAAc;AAAA,MAAA,IAEhB;AAAA,QACE,kBAAkB;AAAA,QAClB,gBAAgB;AAAA,QAChB,cAAc;AAAA,QACd,kBAAkB;AAAA,QAClB,gBAAgB;AAAA,QAChB,cAAc;AAAA,MAAA;AAAA,IAChB,CACL;AAEK,UAAA,cAAc,SAAS,MAAM;AACjC,UAAI,OAAO;AACP,UAAA,MAAM,KAAK,UAAU;AACnB,YAAA,MAAM,KAAK,SAAS,MAAM,CAAC,SAAc;;AAAA,mBAAAD,MAAA,KAAK,SAAL,gBAAAA,IAAW,UAAS;AAAA,SAAK,GAAG;AAChE,iBAAA;AAAA,QACT;AAAA,MAAA,OAEG;AACI,eAAA;AAAA,MACT;AACO,aAAA;AAAA,IAAA,CACR;AAED,aAASa,eAAc;AACjB,UAAA,SAAS,eAAe,YAAY,OAAO;AAC7C;AAAA,MACF;AACA,UAAI,YAAY,OAAO;AACZ,iBAAA,mBAAmBZ,QAAO,MAAM,SAAS;AAAA,MAAA,OAE/C;AACH,iBAAS,oBAAoBA,MAAK;AAAA,MACpC;AAAA,IACF;AAEI,QAAA;AAEJ,aAAS,mBAAmB;AACtB,UAAA,CAAC,SAAS,aAAa;AACzB;AAAA,MACF;AACA,eAAS,cAAc,MAAM;AACnB;AACT,OAAC,EAAE,MAAM,QAAQ,IAAI,aAAa,MAAM;AACvC,YAAI,YAAY,OAAO;AACZ,mBAAA,SAASA,QAAO,MAAM,SAAS;AACxC,mBAAS,MAAM;AACP,kBAAA,KAAK,QAAQ,MAAM;AACzB,gBAAI,MAAM;AACV,gBAAI,OAAO;AACX,gBAAI,SAAS,MAAM,SAAS,cAAc,MAAM,UAAU,GAAG;AAC3D,oBAAM,GAAG,sBAAA,EAAwB,MAAM,GAAG;AAC1C,qBAAO,GAAG,sBAAsB,EAAE,OAAO,GAAG,sBAAwB,EAAA;AACpE,kBAAI,MAAM,WAAW,MAAO,aAAc,eAAe,OAAO,aAAa;AAC3E,sBAAM,OAAO,cAAc,WAAW,MAAO,WAAc,EAAA;AAAA,cAC7D;AAAA,YAAA,OAEG;AACH,oBAAM,GAAG,sBAAsB,EAAE,MAAM,GAAG,sBAAwB,EAAA;AAC3D,qBAAA,GAAG,sBAAwB,EAAA;AAClC,kBAAI,MAAM,WAAW,MAAO,aAAc,eAAe,OAAO,aAAa;AAChE,2BAAA,MAAO,WAAc,EAAA,MAAM,SAAS,GAAG,OAAO,cAAc,GAAG;AAAA,cAC5E;AAAA,YACF;AACI,gBAAA,OAAO,WAAW,MAAO,aAAc,cAAc,SAAS,gBAAgB,aAAa;AAC7F,qBAAO,GAAG,sBAAsB,EAAE,OAAO,GAAG,sBAAwB,EAAA;AAAA,YACtE;AACA,uBAAW,MAAO,aAAc,MAAM,MAAM,GAAG,GAAG;AAClD,uBAAW,MAAO,aAAc,MAAM,OAAO,GAAG,IAAI;AAAA,UAAA,CACrD;AAAA,QAAA,OAEE;AACH,gBAAMH,QAAO,MAAM,KAAK,WAAW,SAAS,SAASG,MAAK,EAAE,UAAU,GAAG,EAAE,IAAK,SAAS,MAAMA,MAAK,EAAE,UAAU,GAAG,EAAE;AACrH,mBAAS,SAASH,OAAM,SAAS,SAASA,KAAI,EAAE,SAAS;AAAA,QAC3D;AAAA,SACC,GAAG;AAAA,IACR;AAEA,aAAS,mBAAmB;AACtB,UAAA,CAAC,SAAS,aAAa;AACzB;AAAA,MACF;AACA,eAAS,cAAc;AACb;AACT,OAAC,EAAE,MAAM,QAAQ,IAAI,aAAa,MAAM;AACnC,YAAA,SAAS,YAAY,WAAW,GAAG;AAC5B,mBAAA,UAAU,MAAM,SAAS;AAAA,QAAA,OAE/B;AACH,cAAI,YAAY,OAAO;AACrB,aAAC,SAAS,YAAY,SAAS,MAAM,UAAU,GAAG,EAAE,CAAE,KAAK,SAAS,UAAU,MAAM,UAAU,GAAG,EAAE,CAAE;AAAA,UACvG;AAAA,QACF;AAAA,SACC,GAAG;AAAA,IACR;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrKA,UAAM,QAAQ;AAWR,UAAA,cAAc,IAAkC,MAAM,KAAK;AAC3D,UAAA,QAAQ,IAA4B,CAAA,CAAE;AACtC,UAAA,WAAW,IAA+B,CAAA,CAAE;AAClD,UAAM,cAAc,IAAkC,MAAM,eAAe,MAAM,CAAC,CAAC;AAC7E,UAAA,cAAc,IAAkC,CAAA,CAAE;AAClD,UAAA,cAAc,SAAuC,MAAM;AAC/D,aAAO,MAAM,SAAS,gBAAiB,MAAM,SAAS,cAAc,MAAM;AAAA,IAAA,CAC3E;AAGD,aAAS,UAAU,MAAyB,cAAwB,IAAI;AACjE,WAAA,QAAQ,CAAC,SAAS;AACrB,cAAMG,SAAQ,KAAK;AACnB,YAAI,KAAK,UAAU;AACjB,gBAAM,YAAY,CAAC,GAAG,aAAaA,MAAK;AAC/B,mBAAA,MAAMA,MAAK,IAAI;AAAA,YACtB,OAAAA;AAAA,YACA;AAAA,YACA,QAAQ;AAAA,UAAA;AAEA,oBAAA,KAAK,UAAU,SAAS;AAAA,QAAA,OAE/B;AACG,gBAAA,MAAMA,MAAK,IAAI;AAAA,YACnB,OAAAA;AAAA,YACA,WAAW;AAAA,UAAA;AAAA,QAEf;AAAA,MAAA,CACD;AAAA,IACH;AAEM,UAAA,WAAsC,CAACA,QAAO,cAAc;AAChE,UAAI,YAAY,MAAM,SAASA,MAAK,GAAG;AACrC;AAAA,MACF;AACA,UAAI,MAAM,WAAW;AACP,oBAAA,QAAQ,YAAY,MAAM,OAAO,SAAO,UAAU,SAAS,GAAG,CAAC;AAAA,MAC7E;AACY,kBAAA,MAAM,KAAKA,MAAK;AAAA,IAAA;AAExB,UAAA,YAAwC,CAACA,WAAU;AACnD,UAAA,MAAM,QAAQA,MAAK,GAAG;AACxB,iBAAS,MAAM;AACH,oBAAAA,OAAM,GAAG,EAAE,CAAE;AACnB,cAAAA,OAAM,SAAS,GAAG;AACpB,sBAAUA,OAAM,MAAM,GAAG,EAAE,CAAC;AAAA,UAC9B;AAAA,QAAA,CACD;AACD;AAAA,MACF;AACA,aAAO,KAAK,SAAS,KAAK,EAAE,QAAQ,CAAC,SAAS;AAC5C,YAAI,SAAS,MAAM,IAAI,EAAE,UAAU,SAASA,MAAK,GAAG;AAClD,sBAAY,QAAQ,YAAY,MAAM,OAAO,CAAAI,UAAQA,UAASJ,MAAK;AAAA,QACrE;AAAA,MAAA,CACD;AAAA,IAAA;AAGH,aAAS,kBAAkBA,QAAe;;AAC7B,iBAAA,OAAO,SAAS,OAAO;AACvB,iBAAA,MAAM,GAAG,EAAE,SAAS;AAAA,MAC/B;AACA,OAAAD,MAAA,SAAS,MAAMC,MAAK,MAApB,gBAAAD,IAAuB,UAAU,QAAQ,CAAC,QAAQ;AACvC,iBAAA,MAAM,GAAG,EAAE,SAAS;AAAA,MAAA;AAE/B,OAAAQ,MAAA,MAAM,MAAMP,MAAK,MAAjB,gBAAAO,IAAoB,UAAU,QAAQ,CAAC,QAAQ;AACpC,iBAAA,MAAM,GAAG,EAAE,SAAS;AAAA,MAAA;AAAA,IAEjC;AAEM,UAAA,sBAA4D,CAACP,WAAU;AAC3E,UAAI,MAAM,SAAS,gBAAgB,MAAM,UAAU;AACjD,oBAAY,QAAQ;MACtB;AACA,wBAAkBA,MAAK;AAAA,IAAA;AAEnB,UAAA,qBAA0D,CAACA,QAAO,cAAc;AACpF,UAAI,YAAY,MAAM,SAASA,MAAK,GAAG;AACrC,kBAAUA,MAAK;AAAA,MAAA,OAEZ;AACH,iBAASA,QAAO,SAAS;AAAA,MAC3B;AAAA,IAAA;AAGF,aAAS,WAAW;AAClB,YAAM,aAAa,YAAY,SAAS,MAAM,MAAM,YAAY,KAAK;AACrE,wBAAkB,YAAY,KAAK;AAC/B,UAAA,CAAC,cAAc,MAAM,UAAU;AACjC;AAAA,MACF;AAEW,iBAAA,UAAU,QAAQ,CAACA,WAAU;AAChC,cAAA,UAAU,SAAS,MAAMA,MAAK;AACzB,mBAAA,SAASA,QAAO,QAAQ,SAAS;AAAA,MAAA,CAC7C;AAAA,IACH;AAEA,UAAM,MAAM,MAAM,MAAM,CAAC,QAAQ;AAC/B,gBAAU,GAAG;AACJ;IAAA,GACR;AAAA,MACD,MAAM;AAAA,MACN,WAAW;AAAA,IAAA,CACZ;AAED,UAAM,MAAM,MAAM,OAAO,CAAC,iBAAiB;AACzC,UAAI,CAAC,MAAM,MAAM,YAAY,GAAG;AAC9B,oBAAY,QAAQ;AAAA,MACtB;AACA,YAAM,OAAO,MAAM,MAAM,YAAY,KAAM,YAAY,SAAS,MAAM,MAAM,YAAY,KAAK,KAAM,MAAM,MAAM,MAAM,KAAK;AAC1H,UAAI,MAAM;AACR,oBAAY,QAAQ,KAAK;AAAA,MAAA,OAEtB;AACH,oBAAY,QAAQ;AAAA,MACtB;AACS;IAAA,CACV;AAED,UAAM,MAAM,MAAM,UAAU,CAAC,UAAU;AACrC,UAAI,OAAO;AACT,oBAAY,QAAQ;MACtB;AACS;IAAA,CACV;AAEC,WAAe,WAAW,SAAS;AAAA,MACnC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,CACD;AAED,YAAQ,sBAAsB,SAAS;AAAA,MACrC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD,CAAA,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5KF,UAAM,QAAQ;AAEd,UAAM,gBAAgB;AACtB,UAAM,YAAY;AAElB,UAAM,gBAAgB;AAChB,UAAA,gBAAgB,IAAI,KAAK;AACzB,UAAA,mBAAmB,IAAI,KAAK;AAElC,aAAS,kBAAkB;AACnB,YAAA,YAAY,cAAc,MAAM;AACtC,oBAAc,QAAQ,YAAY;AAC5B,YAAA,eAAe,cAAc,MAAM;AACnC,YAAA,eAAe,cAAc,MAAM;AACzC,uBAAiB,QAAQ,KAAK,KAAK,YAAY,YAAY,IAAI;AAAA,IACjE;AAEM,UAAA,gBAAgB,SAAS,MAAM;AACnC,aAAO,cAAc,SAAS,YAC5B,UAAU,aAAa,WAAW,KAC/B,CAAC,UAAU,aAAa,MAAM,CAAA,SAAA;;AAAQ,iBAAAD,MAAA,KAAK,SAAL,gBAAAA,IAAW,UAAS;AAAA,OAAK;AAAA,IAAA,CAErE;AAEK,UAAA,eAAe,CAAC,QAAQ;AAC5B,UAAI,KAAK;AACP,iBAAS,MAAM;AACG;QAAA,CACjB;AAAA,MACH;AAAA,IAAA,GACC;AAAA,MACD,WAAW;AAAA,IAAA,CACZ;AAED,UAAM,UAAU;AAEhB,cAAU,MAAM;AACd,UAAI,cAAc,OAAO;AACvB,cAAM,EAAC,OAAA,IAAU,eAAe,OAAO;AACjC,cAAA,MAAM,OAAO,OAAO,MAAM;AAC1B,cAAA,OAAO,QAAQ,GAAG;AACJ;UAClB;AAAA,QAAA,GACC;AAAA,UACD,WAAW;AAAA,QAAA,CACZ;AAAA,MACH;AAAA,IAAA,CACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxDD,MAAM,oBAAoB;AAAA;AAAA,EAExB;AAAA,EACA,MAAM;AACE,UAAA,OAAO,IAAc,CAAA,CAAE;AAE7B,aAAS,IAAI,MAAyB;AAChC,UAAA,OAAO,SAAS,UAAU;AAC3B,SAAA,KAAK,MAAM,SAAS,IAAI,KAAK,KAAK,MAAM,KAAK,IAAI;AAAA,MAAA,OAC7C;AACA,aAAA,QAAQ,CAAC,MAAM;AACb,eAAA,CAAC,KAAK,MAAM,SAAS,CAAC,KAAK,KAAK,MAAM,KAAK,CAAC;AAAA,QAAA,CAClD;AAAA,MACH;AAAA,IACF;AACA,aAAS,OAAO,MAAyB;AACnC,UAAA,OAAO,SAAS,UAAU;AAC5B,aAAK,QAAQ,KAAK,MAAM,OAAO,CAAC,MAAM;AACpC,iBAAO,MAAM;AAAA,QAAA,CACd;AAAA,MAAA,OACI;AACL,aAAK,QAAQ,KAAK,MAAM,OAAO,CAAC,MAAM;AAC7B,iBAAA,CAAC,KAAK,SAAS,CAAC;AAAA,QAAA,CACxB;AAAA,MACH;AAAA,IACF;AACA,aAAS,QAAQ;AACf,WAAK,QAAQ;IACf;AAEO,WAAA;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AACF;AClCA,MAAM,iBAAiB;AAAA;AAAA,EAErB;AAAA,EACA,MAAM;AACJ,UAAM,iBAAiB;AAEjB,UAAA,OAAO,IAAwB,CAAA,CAAE;AACjC,UAAA,aAAa,IAAI,EAAE;AAGzB,mBAAe,IAAI,OAAgC;;AACjD,YAAM,QAAkB,CAAA;AACxB,YAAM,QAAQ,QAAQ,CAAC,GAAG,MAAM;;AAC9B,YAAI,IAAI,GAAG;AACP,YAAAA,MAAA,EAAA,eAAA,gBAAAA,IAAY,QAAQ,SAAQ,MAAM,KAAK,EAAE,WAAW,QAAQ,IAAI;AAAA,QACpE;AAAA,MAAA,CACD;AACD,YAAM,QAAOA,MAAA,MAAM,QAAQ,GAAG,EAAE,MAAnB,gBAAAA,IAAsB;AACnC,YAAM,QAAQ,MAAM;AAChB,UAAA,MAAM,SAAS,UAAU;AAE3B,cAAM,UAAU,KAAK,MAAM,KAAK,CAAC,SAAS;AACxC,cAAI,KAAK,WAAW;AACX,mBAAA,KAAK,cAAc,MAAM;AAAA,UAAA,OAC3B;AACL,mBAAO,KAAK,UAAU;AAAA,UACxB;AAAA,QAAA,CACD;AAED,YAAI,CAAC,SAAS;AACZ,gBAAM,WAAW;AAAA,YACf;AAAA,YACA,UAAU,MAAM;AAAA,YAChB,WAAW,MAAM;AAAA,YACjB,OACE,QAAO,6BAAM,WAAU,aAAa,KAAK,MAAA,IAAU,6BAAM;AAAA,YAC3D,OACE,6BAAM,WACNsS,OAAA9R,MAAA,6BAAM,oBAAN,gBAAAA,IAAuB,SAAS,CAAC,SAAS,KAAK,UAA/C,gBAAA8R,IAAsD;AAAA,YACxD,MAAM;AAAA,UAAA;AAEJ,cAAA,WAAW,SAAS,GAAG;AACzB,iBAAK,MAAM,OAAO,WAAW,QAAQ,GAAG,GAAG,QAAQ;AACnD,uBAAW,QAAQ;AAAA,UAAA,OACd;AACA,iBAAA,MAAM,KAAK,QAAQ;AAAA,UAC1B;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,aAAS,OAAO,OAAkC;AAChD,YAAM,WAAqB,CAAA;AAC3B,YAAM,aAAuB,CAAA;AACxB,WAAA,MAAM,QAAQ,CAAC,MAAM;AACpB,YAAA,EAAE,UAAU,OAAO;AACV,qBAAA,KAAK,GAAG,EAAE,IAAI;AAAA,QAAA,OACpB;AACI,mBAAA,KAAK,GAAG,EAAE,IAAI;AAAA,QACzB;AAAA,MAAA,CACD;AACD,YAAM,OAAiB,CAAA;AACZ,iBAAA,QAAQ,CAAC,MAAM;AACxB,YAAI,CAAC,SAAS,SAAS,CAAC,GAAG;AACzB,eAAK,KAAK,CAAC;AAAA,QACb;AAAA,MAAA,CACD;AAED,qBAAe,OAAO,IAAI;AAC1B,WAAK,QAAQ,KAAK,MAAM,OAAO,CAAC,SAAS;AACvC,eAAO,KAAK,UAAU;AAAA,MAAA,CACvB;AAAA,IACH;AAEA,aAAS,gBAAgB,OAAkC;AACzD,YAAM,WAAqB,CAAA;AAC3B,YAAM,aAAuB,CAAA;AACxB,WAAA,MAAM,QAAQ,CAAC,MAAM;AACpB,YAAA,EAAE,UAAU,OAAO;AACV,qBAAA,KAAK,GAAG,EAAE,IAAI;AAAA,QAAA,OACpB;AACI,mBAAA,KAAK,GAAG,EAAE,IAAI;AAAA,QACzB;AAAA,MAAA,CACD;AACD,YAAM,OAAiB,CAAA;AACZ,iBAAA,QAAQ,CAAC,MAAM;AACxB,YAAI,CAAC,SAAS,SAAS,CAAC,GAAG;AACzB,eAAK,KAAK,CAAC;AAAA,QACb;AAAA,MAAA,CACD;AACD,qBAAe,OAAO,IAAI;AAC1B,WAAK,QAAQ,KAAK,MAAM,OAAO,CAAC,SAAS;AACvC,eAAO,KAAK,UAAU;AAAA,MAAA,CACvB;AAAA,IACH;AAEA,aAAS,eAAe,OAAkC;AAElD,YAAArS,SAAQ,KAAK,MAAM,UAAU,CAAC,SAAS,KAAK,UAAU,KAAK;AACjE,YAAM,WAAqB,CAAA;AAC3B,YAAM,aAAuB,CAAA;AAC7B,WAAK,MAAM,QAAQ,CAAC,GAAG,MAAM;AAC3B,YAAI,IAAIA,QAAO;AACF,qBAAA,KAAK,GAAG,EAAE,IAAI;AAAA,QAAA,OACpB;AACI,mBAAA,KAAK,GAAG,EAAE,IAAI;AAAA,QACzB;AAAA,MAAA,CACD;AACD,YAAM,OAAiB,CAAA;AACZ,iBAAA,QAAQ,CAAC,MAAM;AACxB,YAAI,CAAC,SAAS,SAAS,CAAC,GAAG;AACzB,eAAK,KAAK,CAAC;AAAA,QACb;AAAA,MAAA,CACD;AACD,qBAAe,OAAO,IAAI;AAC1B,WAAK,QAAQ,KAAK,MAAM,OAAO,CAAC,MAAM,MAAM;AAC1C,eAAO,KAAKA;AAAA,MAAA,CACb;AAAA,IACH;AAEA,aAAS,gBAAgB,OAAkC;AAEnD,YAAAA,SAAQ,KAAK,MAAM,UAAU,CAAC,SAAS,KAAK,UAAU,KAAK;AACjE,YAAM,WAAqB,CAAA;AAC3B,YAAM,aAAuB,CAAA;AAC7B,WAAK,MAAM,QAAQ,CAAC,GAAG,MAAM;AAC3B,YAAI,IAAIA,QAAO;AACF,qBAAA,KAAK,GAAG,EAAE,IAAI;AAAA,QAAA,OACpB;AACI,mBAAA,KAAK,GAAG,EAAE,IAAI;AAAA,QACzB;AAAA,MAAA,CACD;AACD,YAAM,OAAiB,CAAA;AACZ,iBAAA,QAAQ,CAAC,MAAM;AACxB,YAAI,CAAC,SAAS,SAAS,CAAC,GAAG;AACzB,eAAK,KAAK,CAAC;AAAA,QACb;AAAA,MAAA,CACD;AACD,qBAAe,OAAO,IAAI;AAC1B,WAAK,QAAQ,KAAK,MAAM,OAAO,CAAC,MAAM,MAAM;AAC1C,eAAO,KAAKA;AAAA,MAAA,CACb;AAAA,IACH;AAEA,aAAS,QAAQ;AACf,WAAK,QAAQ;IACf;AAEO,WAAA;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AACF;ACjKA,SAAwB,YAAY;AAClC,QAAM,QAAQ;AACd,QAAM,SAAS;AAEf,QAAM,cAAc;AAEpB,WAAS,QAAQ;AACf,WAAO,MAAM;AAAA,EACf;AAEA,WAAS,KAAK,IAAsB;AAC5B,UAAAA,SAAQ,YAAY,KAAK,UAAU,UAAQ,KAAK,UAAU,OAAO;AACvE,gBAAY,OAAO;AAAA,MACjB,YAAYA;AAAA,IAAA,CACb;AACD,WAAO,KAAK,EAAE;AAAA,EAChB;AAEA,WAAS,GAAG,OAAe;AACzB,UAAM,QAAQ;AACd,WAAO,GAAG,KAAK;AACf,gBAAY,OAAO,KAAK;AAAA,EAC1B;AAEA,WAAS,MAAM,IAAsB;AACnC,UAAM,QAAQ;AACd,WAAO,KAAK,EAAE,EAAE,KAAK,MAAM;AACzB,kBAAY,OAAO,KAAK;AAAA,IAAA,CACzB;AAAA,EACH;AAES,WAAA,UAAU,QAAQ,SAAS;AAClC,UAAM,eAAe;AACrB,QAAI,YAAY,KAAK,KAAK,UAAQ,KAAK,UAAU,KAAK,GAAG;AACnD,UAAA,YAAY,KAAK,SAAS,GAAG;AAE/B,YAAI,UAAU,cAAc;AAC1B,gBAAMA,SAAQ,YAAY,KAAK,UAAU,CAAQ,SAAA,KAAK,UAAU,KAAK;AACrE,cAAIA,SAAQ,YAAY,KAAK,SAAS,GAAG;AACvC,kBAAM,YAAY,KAAKA,SAAQ,CAAC,EAAE,QAAQ;AAAA,UAAA,OAEvC;AACH,kBAAM,YAAY,KAAKA,SAAQ,CAAC,EAAE,QAAQ;AAAA,UAC5C;AAAA,QAAA,OAEG;AACH,sBAAY,OAAO,KAAK;AAAA,QAC1B;AAAA,MAAA,OAEG;AACH,gBAAQ,MAAM,mBAAmB;AAAA,UAC/B,QAAQ;AAAA,QAAA,CACT;AAAA,MACH;AAAA,IAAA,OAEG;AACH,cAAQ,MAAM,YAAY;AAAA,QACxB,QAAQ;AAAA,MAAA,CACT;AAAA,IACH;AAAA,EACF;AAKS,WAAA,eAAe,QAAQ,SAAS;AACvC,UAAM,eAAe;AAErB,QAAI,UAAU,cAAc;AAC1B,YAAMA,SAAQ,YAAY,KAAK,UAAU,CAAQ,SAAA,KAAK,UAAU,KAAK;AACrE,aAAO,KAAK,YAAY,KAAKA,MAAK,EAAE,QAAQ;AAAA,IAC9C;AACA,gBAAY,gBAAgB,KAAK;AAAA,EACnC;AAKS,WAAA,cAAc,QAAQ,SAAS;AACtC,UAAM,eAAe;AAErB,QAAI,UAAU,cAAc;AAC1B,YAAMA,SAAQ,YAAY,KAAK,UAAU,CAAQ,SAAA,KAAK,UAAU,KAAK;AACrE,YAAM,eAAe,YAAY,KAAK,UAAU,CAAQ,SAAA,KAAK,UAAU,YAAY;AACnF,UAAI,eAAeA,QAAO;AACxB,eAAO,KAAK,YAAY,KAAKA,MAAK,EAAE,QAAQ;AAAA,MAC9C;AAAA,IACF;AACA,gBAAY,eAAe,KAAK;AAAA,EAClC;AAKS,WAAA,eAAe,QAAQ,SAAS;AACvC,UAAM,eAAe;AAErB,QAAI,UAAU,cAAc;AAC1B,YAAMA,SAAQ,YAAY,KAAK,UAAU,CAAQ,SAAA,KAAK,UAAU,KAAK;AACrE,YAAM,eAAe,YAAY,KAAK,UAAU,CAAQ,SAAA,KAAK,UAAU,YAAY;AACnF,UAAI,eAAeA,QAAO;AACxB,eAAO,KAAK,YAAY,KAAKA,MAAK,EAAE,QAAQ;AAAA,MAC9C;AAAA,IACF;AACA,gBAAY,gBAAgB,KAAK;AAAA,EACnC;AAKS,WAAA,oBAAoB,QAAQ,SAAS;AAC5C,WAAO,YAAY,KAAK,KAAK,CAAC,SAAS;AACrC,aAAO,KAAK,UAAU;AAAA,IAAA,CACvB;AAAA,EACH;AAKS,WAAA,mBAAmB,QAAQ,SAAS;;AAC3C,QAAI,OAAO;AACX,QAAI,YAAUD,MAAA,YAAY,KAAK,CAAC,MAAlB,gBAAAA,IAAqB,QAAO;AACjC,aAAA;AAAA,IAAA,OAEJ;AACH,YAAMC,SAAQ,YAAY,KAAK,UAAU,CAAQ,SAAA,KAAK,UAAU,KAAK;AACrE,aAAO,YAAY,KAAK,KAAK,CAAC,MAAM,MAAM;AACjC,eAAA,IAAIA,UAAS,KAAK,UAAU;AAAA,MAAA,CACpC;AAAA,IACH;AACO,WAAA;AAAA,EACT;AAKS,WAAA,oBAAoB,QAAQ,SAAS;;AAC5C,QAAI,OAAO;AACX,QAAI,YAAUD,MAAA,YAAY,KAAK,GAAG,EAAE,MAAtB,gBAAAA,IAAyB,QAAO;AACrC,aAAA;AAAA,IAAA,OAEJ;AACH,YAAMC,SAAQ,YAAY,KAAK,UAAU,CAAQ,SAAA,KAAK,UAAU,KAAK;AACrE,aAAO,YAAY,KAAK,KAAK,CAAC,MAAM,MAAM;AACjC,eAAA,KAAKA,UAAS,KAAK,UAAU;AAAA,MAAA,CACrC;AAAA,IACH;AACO,WAAA;AAAA,EACT;AAEO,SAAA;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;;;;;;;;;;;;;;ACxJA,UAAM,QAAQ;AACd,UAAM,SAAS;AAEf,UAAM,gBAAgB;AACtB,UAAM,cAAc;AAEpB,UAAM,SAAS;AACf,UAAM,WAAW;AAEjB,UAAM,OAAO,aAAa,EAAE,UAAU,KAAM,CAAA;AAE5C,UAAM,eAAe,SAAS,MAAM,OAAO,MAAO,CAAA;AAElD,UAAM,UAAU;AAChB,UAAM,kBAAkB;AAClB,UAAA,SAAS,WAA0B,CAAA,CAAE;AAC3C,mBAAe,MAAM;AACnB,aAAO,QAAQ;IAAC,CACjB;AAED;AAAA,MACE,MAAM;AAAA,MACN,CAAC,QAAQ;AACH,YAAA,cAAc,SAAS,OAAO,QAAQ;AACxC,sBAAY,IAAI,GAAG,EAAE,KAAK,MAAM;AACxB,kBAAAA,SAAQ,YAAY,KAAK;AAAA,cAC7B,CAAC,SAAS,KAAK,UAAU,aAAa;AAAA,YAAA;AAExC,gBAAIA,WAAU,IAAI;AAChB,uBAAS,OAAO,MAAMA,MAAK,EAAE,UAAU;AACvB;YAClB;AAAA,UAAA,CACD;AAAA,QACH;AAAA,MACF;AAAA,MACA;AAAA,QACE,WAAW;AAAA,QACX,MAAM;AAAA,MACR;AAAA,IAAA;AAEF,aAAS,kBAAkB;AAEvB,UAAA,gBAAgB,MAAM,IAAI,cAAc,QAAQ,MAAM,eACtD,aAAa,QAAQ,iBAAiB,MAAM,QAC5C;AACa,qBAAA,QAAQ,mBAAmB,EAAE;AAClC,gBAAA;AAAA,UACN;AAAA,UACA;AAAA,YACE,OAAO;AAAA,YACP,UAAU;AAAA,YACV,UAAU;AAAA,YACV,QAAQ;AAAA,UACV;AAAA,QAAA;AAAA,MAEJ;AAAA,IACF;AACA,aAAS,oBAAoB,OAAmB;AAC9C,cAAQ,MAAM,SAAS;AAAA,QACrB,MAAM,MAAM,UAAU,MAAM;AAAA,MAAA,CAC7B;AAAA,IACH;AACA,aAAS,SAAS,YAAoB;AACpC,cAAQ,MAAM,SAAS;AAAA,QACrB,MAAM,aAAa;AAAA,QACnB,UAAU;AAAA,MAAA,CACX;AAAA,IACH;AACS,aAAA,oBAAoB,OAAmB,WAA6B;AAC3E,YAAM,eAAe;AACrB,kBAAY,gBAAgB;AAAA,QAC1B,GAAG,MAAM;AAAA,QACT,GAAG,MAAM;AAAA,QACT,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,aAAa;AAAA,QACb,OAAO;AAAA,UACL;AAAA,YACE,OAAO;AAAA,YACP,MAAM;AAAA,YACN,UAAU,UAAU,UAAU,aAAa;AAAA,YAC3C,SAAS,MAAM,SAAS,OAAO;AAAA,UACjC;AAAA,UACA;AAAA,YACE,OAAO;AAAA,YACP,MAAM;AAAA,YACN,UAAU,YAAY,KAAK,UAAU;AAAA,YACrC,SAAS;AAAA,YACT,SAAS,MAAM;AACN,qBAAA,UAAU,UAAU,KAAK;AAAA,YAClC;AAAA,UACF;AAAA,UACA;AAAA,YACE,OAAO;AAAA,YACP,UAAU,CAAC,OAAO,oBAAoB,UAAU,KAAK;AAAA,YACrD,SAAS,MAAM;AACN,qBAAA,eAAe,UAAU,KAAK;AAAA,YACvC;AAAA,UACF;AAAA,UACA;AAAA,YACE,OAAO;AAAA,YACP,UAAU,CAAC,OAAO,mBAAmB,UAAU,KAAK;AAAA,YACpD,SAAS,MAAM;AACN,qBAAA,cAAc,UAAU,KAAK;AAAA,YACtC;AAAA,UACF;AAAA,UACA;AAAA,YACE,OAAO;AAAA,YACP,UAAU,CAAC,OAAO,oBAAoB,UAAU,KAAK;AAAA,YACrD,SAAS,MAAM;AACN,qBAAA,eAAe,UAAU,KAAK;AAAA,YACvC;AAAA,UACF;AAAA,QACF;AAAA,MAAA,CACD;AAAA,IACH;AAEA,cAAU,MAAM;AACd;AAAA,QACE;AAAA,QACA,CAAC,GAAG,WAAW;;AACb,cACE,cAAc,SAAS,OAAO,UAC9B,cAAc,SAAS,OAAO,eAC9B;AACA,cAAE,eAAe;AACjB,oBAAQ,OAAO,KAAK;AAAA,cAElB,KAAK;AACH,oBAAI,YAAY,KAAK,CAAC,EAAE,UAAU,aAAa,OAAO;AAC9C,wBAAAA,SAAQ,YAAY,KAAK;AAAA,oBAC7B,CAAC,SAAS,KAAK,UAAU,aAAa;AAAA,kBAAA;AAExC,yBAAO,KAAK,YAAY,KAAKA,SAAQ,CAAC,EAAE,QAAQ;AAAA,gBAClD;AACA;AAAA,cAEF,KAAK;AACH,sBAAID,MAAA,YAAY,KAAK,GAAG,EAAE,MAAtB,gBAAAA,IAAyB,WAAU,aAAa,OAAO;AACnD,wBAAAC,SAAQ,YAAY,KAAK;AAAA,oBAC7B,CAAC,SAAS,KAAK,UAAU,aAAa;AAAA,kBAAA;AAExC,yBAAO,KAAK,YAAY,KAAKA,SAAQ,CAAC,EAAE,QAAQ;AAAA,gBAClD;AACA;AAAA,cAEF,KAAK;AACI,uBAAA,UAAU,aAAa,KAAK;AACnC;AAAA,cAEF,KAAK;AAAA,cACL,KAAK;AAAA,cACL,KAAK;AAAA,cACL,KAAK;AAAA,cACL,KAAK;AAAA,cACL,KAAK;AAAA,cACL,KAAK;AAAA,cACL,KAAK;AAAA,cACL,KAAK,SAAS;AACN,sBAAA,SAAS,OAAO,OAAO,IAAI,MAAM,GAAG,EAAE,CAAC,CAAC;AAC9C,kBAAAO,MAAA,YAAY,KAAK,SAAS,CAAC,MAA3B,gBAAAA,IAA8B,aAC5B,OAAO,KAAK,YAAY,KAAK,SAAS,CAAC,EAAE,QAAQ;AACnD;AAAA,cACF;AAAA,cAEA,KAAK;AACI,uBAAA,KAAK,YAAY,KAAK,YAAY,KAAK,SAAS,CAAC,EAAE,QAAQ;AAClE;AAAA,YACJ;AAAA,UACF;AAAA,QACF;AAAA,MAAA;AAAA,IACF,CACD;AACD,gBAAY,MAAM;AACR,cAAA;AAAA,QACN;AAAA,MAAA;AAAA,IACF,CACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC/LC,SAAA,YAAA,MAAA,QAAA;SACUq4B,UAAA,GAAAC,mBAAA,OAAAC,cAAA;AAAA;;;;;;;;;;;;;;ACCZ,UAAM,QAAQ;AAWd,UAAM,SAAS;AAEf,aAAS,UAAU;AACjB,UAAI,MAAM,IAAI;AACN,cAAA,UAAU,OAAO,QAAQ,MAAM,EAAE,IAAI,OAAO,KAAK,MAAM,EAAE;AAAA,MACjE;AAAA,IACF;;;;;;;;;;;;;;;;;;;ACdA,UAAM,QAAQ;AAEd,UAAM,gBAAgB;AAEhB,UAAA,iBAAiB,SAAS,MAAM;AACpC,YAAMC,kBAAiB,CAAA;AACnB,UAAA,cAAc,SAAS,KAAK,QAAQ;AACtCA,wBAAe,KAAK;AAAA,UAClB,MAAM,cAAc,SAAS,KAAK;AAAA,UAClC,OAAO,cAAc,SAAS,KAAK;AAAA,QAAA,CACpC;AAAA,MACH;AACI,UAAA,MAAM,KAAK,iBAAiB;AAC9B,cAAM,KAAK,gBAAgB,QAAQ,CAAC,SAAS;AACvC,cAAA,KAAK,SAAS,OAAO;AACvBA,4BAAe,KAAK;AAAA,cAClB,MAAM,KAAK;AAAA,cACX,OAAO,KAAK;AAAA,YAAA,CACb;AAAA,UACH;AAAA,QAAA,CACD;AAAA,MACH;AACOA,aAAAA;AAAAA,IAAA,CACR;AAED,aAAS,YAAYl5B,OAAc;AAC3B,YAAA,SAAS,QAAQA,KAAI;AACpB,aAAA,OAAO,MAAM,MAAM;AAAA,IAC5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzBA,UAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;ACAtB,UAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;ACAtB,UAAM,gBAAgB;AAEhB,UAAA,gBAAgB,SAAS,MAAM;AACnC,aAAO,EACL,cAAc,SAAS,KAAK,SAAS,WACpC,CAAC,cAAc,SAAS,QAAQ,cAC/B,cAAc,SAAS,IAAI,gBAAgB;AAAA,IAAA,CAEhD;AAEK,UAAA,YAAY,IAAI,CAAC;AACjB,UAAA,eAAe,IAAI,KAAK;AACxB,UAAA,eAAe,SAAS,MAAM;AAClC,YAAM,eAAe,cAAc,SAAS,OAAO,SAC/C,OAAO;AAAA,QACL;AAAA,UACE,SAAS,mBAAmB,SAAS;AAAA,QAAA,EACrC,iBAAiB,mBAAmB;AAAA,MAExC,IAAA;AACE,YAAA,gBAAgB,cAAc,QAChC,OAAO;AAAA,QACL;AAAA,UACE,SAAS,mBAAmB,SAAS;AAAA,QAAA,EACrC,iBAAiB,oBAAoB;AAAA,MAEzC,IAAA;AACJ,aAAO,eAAe;AAAA,IAAA,CACvB;AACD,cAAU,MAAM;AACP,aAAA,iBAAiB,UAAU,QAAQ;AAAA,IAAA,CAC3C;AACD,gBAAY,MAAM;AACT,aAAA,oBAAoB,UAAU,QAAQ;AAAA,IAAA,CAC9C;AACD,aAAS,WAAW;AAClB,gBAAU,SAAS,SAAS,mBAAmB,SAAS,MAAM;AAAA,IAChE;AACM,UAAA,WAAW,CAAC,KAAK,WAAW;AACnB,mBAAA,QACX,cAAc,SAAS,OAAO,SAAS,YACvC,MAAM,UACN,MAAM,aAAa;AAAA,IAAA,CACtB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzBD,UAAM,yBAAyB,IAAI;AAAA,MACjC,OAAO;AAAA,MACP,WAAW;AAAA,MACX,SAAS;AAAA,MACT,OAAO;AAAA,MACP,WAAW;AAAA,MACX,SAAS;AAAA,IAAA,CACV;AAEK,UAAA,kBAAkB,SAAS,MAAM;AAC9B,aAAA;AAAA,QACL,OAAO;AAAA,QACP,WAAW;AAAA,QACX,SAAS;AAAA,QACT,OAAO;AAAA,QACP,WAAW;AAAA,QACX,SAAS;AAAA,MAAA;AAAA,IACX,CACD;AAED,UAAM,SAAS;AACf,UAAM,gBAAgB;AACtB,UAAM,YAAY;AAYZ,UAAA,SAAS,IAAI,KAAK;AAClB,UAAA,cAAc,IAAI,EAAE;AACpB,UAAA,aAAa,IAAiB,CAAA,CAAE;AAChC,UAAA,UAAU,IAAI,EAAE;AAEtB,UAAM,iBAAiB;AACvB,UAAM,kBAAkB;AAClB,UAAA,sBAAsB,IAAmB,CAAA,CAAE;AACjD,mBAAe,MAAM;AACnB,0BAAoB,QAAQ;IAAC,CAC9B;AAEK,UAAA,aAAa,SAAS,MAAM;AAChC,UAAI,SAAS,CAAA;AACb,eAAS,WAAW,MAAM,OAAO,CAAC,SAAS;AACzC,YAAI,OAAO;AACX,YAAI,KAAK,OAAO;AACV,cAAA,OAAO,KAAK,UAAU,YAAY;AACpC,gBAAI,KAAK,MAAM,EAAE,SAAS,YAAY,KAAK,GAAG;AACrC,qBAAA;AAAA,YACT;AAAA,UAAA,OACK;AACL,gBAAI,KAAK,MAAM,SAAS,YAAY,KAAK,GAAG;AACnC,qBAAA;AAAA,YACT;AAAA,UACF;AAAA,QACF;AACA,YAAI,KAAK,KAAK,SAAS,YAAY,KAAK,GAAG;AAClC,iBAAA;AAAA,QACT;AACA,YACE,KAAK,WAAW,KAAK,CAAC,MAAM;;AACtB,cAAA,OAAO,EAAE,UAAU,YAAY;AACjC,gBAAI,EAAE,MAAM,EAAE,SAAS,YAAY,KAAK,GAAG;AAClC,qBAAA;AAAA,YACT;AAAA,UAAA,OACK;AACL,iBAAIE,MAAA,EAAE,UAAF,gBAAAA,IAAS,SAAS,YAAY,QAAQ;AACjC,qBAAA;AAAA,YACT;AAAA,UACF;AACO,iBAAA;AAAA,QAAA,CACR,GACD;AACO,iBAAA;AAAA,QACT;AACO,eAAA;AAAA,MAAA,CACR;AACM,aAAA;AAAA,IAAA,CACR;AAED;AAAA,MACE,MAAM,OAAO;AAAA,MACb,CAAC,QAAQ;AACP,YAAI,KAAK;AACP,sBAAY,QAAQ;AACpB,kBAAQ,QAAQ;AAEhB,kBAAQ,MAAM,KAAK;AACnB,kBAAQ,QAAQ,OAAO;AACvB,kBAAQ,SAAS,QAAQ;AAAA,QAAA,OACpB;AACG,kBAAA,OAAO,MAAM,KAAK;AAClB,kBAAA,OAAO,QAAQ,OAAO;AACtB,kBAAA,OAAO,SAAS,QAAQ;AAAA,QAClC;AAAA,MACF;AAAA,IAAA;AAEF;AAAA,MACE,MAAM,WAAW;AAAA,MACjB,MAAM;AACJ,gBAAQ,QAAQ;AACH;MACf;AAAA,IAAA;AAGF,cAAU,MAAM;AACL,eAAA,GAAG,wBAAwB,MAAM;AACpC,YAAA,CAAC,OAAO,OAAO;AACF;QACjB;AACO,eAAA,QAAQ,CAAC,OAAO;AAAA,MAAA,CACxB;AACO,cAAA,SAAS,CAAC,MAAM;AACtB,YACE,cAAc,SAAS,QAAQ,aAC/B,cAAc,SAAS,UAAU,eACjC;AACA,YAAE,eAAe;AACF;AACf,iBAAO,QAAQ;AAAA,QACjB;AAAA,MAAA,CACD;AACO,cAAA,OAAO,CAAC,MAAM;AACpB,YACE,cAAc,SAAS,QAAQ,aAC/B,cAAc,SAAS,UAAU,eACjC;AACA,YAAE,eAAe;AACjB,iBAAO,QAAQ;AAAA,QACjB;AAAA,MAAA,CACD;AACc;IAAA,CAChB;AAED,aAAS,iBAAiB;AACxB,iBAAW,QAAQ;AACT,gBAAA,SAAS,QAAQ,CAAC,SAAS;AACnC,6BAAqB,KAAK,QAAQ;AAAA,MAAA,CACnC;AAAA,IACH;AAEA,aAAS,YAAY,MAAsB;;AACzC,UAAI,OAAO;AACP,WAAAA,MAAA,KAAK,aAAL,gBAAAA,IAAe,MAAM,CAAC,MAAM;;AAAA,iBAAAA,MAAA,EAAE,SAAF,gBAAAA,IAAQ,UAAS;AAAA,UAAQ;AAChD,eAAA;AAAA,MACT;AACO,aAAA;AAAA,IACT;AACA,aAAS,qBACP,KACA,UACA,MACA,YACA;AACI,UAAA,QAAQ,CAAC,SAAS;;AAChB,cAAAA,MAAA,KAAK,SAAL,gBAAAA,IAAW,UAAS,OAAO;AAC7B,gBAAM,iBAAiB,UAAU,UAAU,KAAK,CAAA;AAChD,cAAI,KAAK,YAAY,YAAY,IAAI,GAAG;AACtC,2BAAe,KAAK;AAAA,cAClB,QAAOQ,MAAA,KAAK,SAAL,gBAAAA,IAAW;AAAA,YAAA,CACnB;AACD;AAAA,cACE,KAAK;AAAA,cACL,iBAAiB,UAAU,KAAK,IAAI;AAAA,gBACpC8R,MAAA,KAAK,SAAL,gBAAAA,IAAW,SAAQ;AAAA,cACnB;AAAA,YAAA;AAAA,UACF,OACK;AACL,2BAAe,KAAK;AAAA,cAClB,QAAOgf,MAAA,KAAK,SAAL,gBAAAA,IAAW;AAAA,YAAA,CACnB;AACD,uBAAW,MAAM,KAAK;AAAA,cACpB,MAAM,iBAAiB,UAAU,KAAK,IAAI;AAAA,cAC1C,QAAMD,MAAA,KAAK,SAAL,gBAAAA,IAAW,SAAQ;AAAA,cACzB,QAAOG,MAAA,KAAK,SAAL,gBAAAA,IAAW;AAAA,cAClB,OAAMD,MAAA,KAAK,SAAL,gBAAAA,IAAW;AAAA,cACjB,YAAY;AAAA,YAAA,CACb;AAAA,UACH;AAAA,QACF;AAAA,MAAA,CACD;AAAA,IACH;AAEA,aAAS,QAAQ;AACX,UAAA,WAAW,MAAM,QAAQ;AAC3B,gBAAQ,SAAS;AACb,YAAA,QAAQ,QAAQ,GAAG;AACb,kBAAA,QAAQ,WAAW,MAAM,SAAS;AAAA,QAC5C;AACa;MACf;AAAA,IACF;AACA,aAAS,UAAU;AACb,UAAA,WAAW,MAAM,QAAQ;AAC3B,gBAAQ,SAAS;AACjB,YAAI,QAAQ,QAAQ,WAAW,MAAM,SAAS,GAAG;AAC/C,kBAAQ,QAAQ;AAAA,QAClB;AACa;MACf;AAAA,IACF;AACA,aAAS,WAAW;;AACd,UAAA,QAAQ,UAAU,IAAI;AACxB,SAAAvxB,MAAA,oBAAoB,MACjB,KAAK,CAAC,SAAS,OAAO,SAAS,KAAK,QAAQ,KAAM,MAAM,QAAQ,KAAK,MADxE,gBAAAA,IAEI;AAAA,MACN;AAAA,IACF;AACA,aAAS,eAAe;;AACtB,UAAI,gBAAgB,OAAO;AACzB,cAAM,aAAa,gBAAgB,MAAM,WAAW,EAAG,SAAW,EAAA;AAClE,YAAI,WAAW;AACX,YAAA,QAAQ,UAAU,IAAI;AACxB,qBAAW,WAAW;AAChB,gBAAA,qBACJA,MAAA,oBAAoB,MAAM;AAAA,YACxB,CAAC,SAAS,OAAO,SAAS,KAAK,QAAQ,KAAM,MAAM,QAAQ;AAAA,UAAA,MAD7D,gBAAAA,IAEG,cAAa;AACZ,gBAAA,wBACJQ,MAAA,oBAAoB,MAAM;AAAA,YACxB,CAAC,SAAS,OAAO,SAAS,KAAK,QAAQ,KAAM,MAAM,QAAQ;AAAA,UAAA,MAD7D,gBAAAA,IAEG,iBAAgB;AACrB,gBAAM,kBAAkB,WAAW;AACnC,gBAAM,qBAAqB,WAAW;AAEpC,cAAA,mBAAmB,sBACnB,kBAAkB,oBAClB;AACA,uBAAW,mBAAmB,sBAAsB;AAAA,UAAA,WAC3C,oBAAoB,iBAAiB;AACnC,uBAAA;AAAA,UACb;AAAA,QACF;AACA,mBAAW,SAAS;AAAA,UAClB,KAAK;AAAA,QAAA,CACN;AAAA,MACH;AAAA,IACF;AAES,aAAA,SAASV,OAAyB,MAAyB;AAClE,UAAI,MAAM;AACD,eAAA,KAAK,MAAM,QAAQ;AAAA,MAAA,OACrB;AACL,eAAO,KAAKA,KAAI;AAAA,MAClB;AACA,aAAO,QAAQ;AAAA,IACjB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClRA,UAAM,QAAQ;AAed,UAAM,QAAQ;AAIR,UAAA,SAASm5B,SAEd,SAAA,YAAA;AAED,UAAM,QAAQ;AAEd,UAAM,yBAAyB,IAAI;AAAA,MACjC,OAAO;AAAA,MACP,WAAW;AAAA,MACX,SAAS;AAAA,MACT,OAAO;AAAA,MACP,WAAW;AAAA,MACX,SAAS;AAAA,IAAA,CACV;AAEK,UAAA,kBAAkB,SAAS,MAAM;AAC9B,aAAA;AAAA,QACL,OAAO;AAAA,QACP,WAAW;AAAA,QACX,SAAS;AAAA,QACT,OAAO;AAAA,QACP,WAAW;AAAA,QACX,SAAS;AAAA,MAAA;AAAA,IACX,CACD;AACK,UAAA,mBAAmB,SAAS,MAAM;AACtC,UAAI,MAAM,OAAO;AACR,eAAA,EAAC,OAAO,MAAM;MACvB;AAEA,aAAO;IAAC,CACT;AAED,aAAS,QAAQ;AACf,aAAO,QAAQ;AACf,YAAM,OAAO;AAAA,IACf;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjDM,UAAA,SAAS,IAAI,KAAK;AAExB,UAAM,gBAAgB;AAEtB,cAAU,MAAM;AACL,eAAA,GAAG,+BAA+B,MAAM;AACxC,eAAA,QAAQ,CAAC,OAAO;AAAA,MAAA,CACxB;AAAA,IAAA,CACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACND,UAAM,QAAQ;AAgBd,UAAM,QAAQ;AAIR,UAAA,SAASA,SAAoB,SAAA,YAElC;AAED,UAAM,QAAQ;AAEd,UAAM,yBAAyB,IAAI;AAAA,MACjC,OAAO;AAAA,MACP,WAAW;AAAA,MACX,SAAS;AAAA,MACT,OAAO;AAAA,MACP,WAAW;AAAA,MACX,SAAS;AAAA,IAAA,CACV;AAEK,UAAA,kBAAkB,SAAS,MAAM;AAC9B,aAAA;AAAA,QACL,OAAO;AAAA,QACP,OAAO;AAAA,QACP,WAAW,MAAM,SAAS,SAAS,sBAAsB;AAAA,QACzD,SAAS;AAAA,QACT,WAAW;AAAA,QACX,SAAS,MAAM,SAAS,SAAS,sBAAsB;AAAA,MAAA;AAAA,IACzD,CACD;AAED,aAAS,QAAQ;AACf,aAAO,QAAQ;AACf,YAAM,OAAO;AAAA,IACf;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3DA,UAAM,QAAQ;AAaR,UAAA,cAAc,SAAS,MAAM;AAAA,MACjC;AAAA,MACA,MAAM,QACF,4CACA;AAAA,MACJ,MAAM,UACF,wLACA;AAAA,IAAA,CACL;;;;;;;;;;;;;;;;;;;;;;;;ACZK,UAAA,QAAQA,SAAc,SAAA,YAAC;AAE7B,UAAM,WAAW;AAEJ,aAAA;AAAA,MACX,KAAK;AAAA,IAAA,CACN;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACCD,UAAM,QAAQ;AAIR,UAAA,QAAQA,SAA4B,SAAA,YAAC;AAErC,UAAA,OAAO,CAAC,QAAQ;AACpB,YAAM,UAAU,GAAG;AAAA,IAAA,CACpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACXK,UAAA,UAAUA,SAAqB,SAAA,YAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACXrC,UAAM,QAAQ;AAQd,UAAM,QAAQ;AAIR,UAAA,QAAQA,SAAe,SAAA,YAAA;AAE7B,UAAM,gBAAgB,SAAS;AAAA,MAC7B,MAAM;AACG,eAAA,MAAM,QAAQ,UAAU,CAAC,WAAW,OAAO,UAAU,MAAM,KAAK;AAAA,MACzE;AAAA,MACA,IAAI,KAAK;AACP,cAAM,QAAQ,MAAM,QAAQ,GAAG,EAAE;AAAA,MACnC;AAAA,IAAA,CACD;AAEK,UAAA,OAAO,CAAC,QAAQ;AACb,aAAA,MAAM,UAAU,GAAG;AAAA,IAAA,CAC3B;AAED,aAAS,aAAah5B,QAAe;AACnC,YAAM,QAAQ,MAAM,QAAQA,MAAK,EAAE;AAAA,IACrC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACZA,UAAM,QAAQ;AAEd,UAAM,gBAAgB;AACtB,UAAM,YAAY;AAEZ,UAAA,SAAS,IAAI,KAAK;AAExB;AAAA,MACE,MAAM,cAAc,SAAS,KAAK;AAAA,MAClC,CAAC,UAAU;AACT,YAAI,UAAU,UAAU;AACtB,oBAAU,WAAW,CAAC;AAAA,QAAA,OACjB;AAGK,oBAAA,WAAW,MAAM,IAAc;AAAA,QAC3C;AAAA,MACF;AAAA,IAAA;AAGF,cAAU,MAAM;AACL,eAAA,GAAG,6BAA6B,MAAM;AACtC,eAAA,QAAQ,CAAC,OAAO;AAAA,MAAA,CACxB;AAAA,IAAA,CACF;AAED,UAAM,EAAE,MAAM,QAAQ,gBAAgB,aAAa;AAE7C,UAAA,QAAQ,CAAC,QAAQ;AACrB,UAAI,KAAK;AACP,gBAAQ,QAAQ,kCAAkC;AAAA,UAChD,QAAQ;AAAA,QAAA,CACT;AAAA,MACH;AAAA,IAAA,CACD;AAED,aAAS,SAAS,OAAY;AAC5B,aAAO,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK;AAAA,IAC1D;AAES,aAAA,cACP,aACA,SACA;AACA,UAAI,CAAC,SAAS,WAAW,KAAK,CAAC,SAAS,OAAO,GAAG;AACzC,eAAA;AAAA,MACT;AACA,YAAM,OAA4B,CAAA;AAClC,iBAAW,OAAO,SAAS;AACnB,cAAA,gBAAgB,YAAY,GAAG;AAC/B,cAAA,YAAY,QAAQ,GAAG;AAC7B,YAAI,KAAK,UAAU,aAAa,MAAM,KAAK,UAAU,SAAS,GAAG;AAC/D,cAAI,SAAS,aAAa,KAAK,SAAS,SAAS,GAAG;AAC5C,kBAAA,aAAa,cAAc,eAAe,SAAS;AACzD,gBAAI,OAAO,KAAK,UAAU,EAAE,SAAS,GAAG;AACtC,mBAAK,GAAG,IAAI;AAAA,YACd;AAAA,UAAA,OACK;AACL,iBAAK,GAAG,IAAI;AAAA,UACd;AAAA,QACF;AAAA,MACF;AACO,aAAA;AAAA,IACT;AAEA,aAAS,aAAa;AACpB;AAAA,QACE,KAAK;AAAA,UACH,cAAcE,uBAAiB,cAAc,QAAQ;AAAA,UACrD;AAAA,UACA;AAAA,QACF;AAAA,MAAA;AAAA,IAEJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtFA,UAAM,QAAQ;AAEd,UAAM,EAAE,MAAM,OAAO,IAAI,aAAa;AAChC,UAAA,QAAQ,CAAC,QAAQ;AACd,aAAA,QAAQ,QAAQ,QAAQ;AAAA,QAC7B,QAAQ;AAAA,MAAA,CACT;AAAA,IAAA,CACF;AAED,aAAS,OAAO;AACd,aAAO,KAAK,MAAM,KAAK,MAAM,QAAQ;AAAA,IACvC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACXA,UAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACDtB,UAAM,kBAAkB;AAAA,MACtB,kBAAkB;AAAA,MAClB,gBAAgB;AAAA,MAChB,cAAc;AAAA,MACd,kBAAkB;AAAA,MAClB,gBAAgB;AAAA,MAChB,cAAc;AAAA,IAAA;AAGhB,cAAU,MAAM;AACP,aAAA,iBAAiB,UAAU,YAAY;AACjC;IAAA,CACd;AAED,oBAAgB,MAAM;AACb,aAAA,oBAAoB,UAAU,YAAY;AAAA,IAAA,CAClD;AAEK,UAAA,YAAY,IAAmB,IAAI;AACzC,aAAS,eAAe;AACZ,gBAAA,QAAQ,SAAS,gBAAgB;AAAA,IAC7C;AAEA,aAASU,eAAc;AACrB,eAAS,gBAAgB,SAAS;AAAA,QAChC,KAAK;AAAA,QACL,UAAU;AAAA,MAAA,CACX;AAAA,IACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACTA,UAAM,YAAY;AAElB,UAAM,gBAAgB;AACtB,UAAM,iBAAiB;AACvB,UAAM,YAAY;AAElB,UAAM,WAAW;AACjB,UAAM,OAAO;AAEb,UAAM,SAAS,SAAS,MAAM,CAAC,CAAC,UAAU,KAAK,IAAI;AAEnD;AAAA,MACE,MAAM,cAAc,SAAS,KAAK;AAAA,MAClC,CAAC,QAAQ;AACH,YAAA,cAAc,SAAS,UAAU;AACnC,cAAI,CAAC,KAAK;AACC,qBAAA,KAAK,UAAU,IAAI,iBAAiB;AAAA,UAAA,OACxC;AACI,qBAAA,KAAK,UAAU,OAAO,iBAAiB;AAAA,UAClD;AAAA,QACF;AAAA,MACF;AAAA,IAAA;AAGF;AAAA,MACE,MAAM,UAAU;AAAA,MAChB,MAAM;AACA,YAAA,cAAc,SAAS,UAAU;AACrB,wBAAA,OAAO,CAAC,UAAU;AACxB,kBAAA,SAAS,KAAK,kBAAkB;AAAA,UAAA,CACvC;AAAA,QACH;AAAA,MACF;AAAA,IAAA;AAGF,cAAU,MAAM;AACN,cAAA,MAAM,CAAC,MAAM;AACf,YAAA,cAAc,SAAS,QAAQ,YAAY;AAC7C,YAAE,eAAe;AACjB,mBAAS,OAAO;AAAA,QAClB;AAAA,MAAA,CACD;AACO,cAAA,SAAS,CAAC,MAAM;AAClB,YAAA,cAAc,SAAS,KAAK,eAAe;AAC7C,YAAE,eAAe;AACZ,eAAA;AAAA,YACH,UAAU,UAAU,IAAI,UAAU,SAAS,SACvC,UAAU,UAAU,IACpB;AAAA,UAAA;AAAA,QAER;AAAA,MAAA,CACD;AAAA,IAAA,CACF;AACD,gBAAY,MAAM;AAChB,cAAQ,OAAO,IAAI;AACnB,cAAQ,OAAO,OAAO;AAAA,IAAA,CACvB;AAQK,UAAA,yBAAyB,SAAS,MAAM;AACxC,UAAA,cAAc,OAAO,SAAS,iBAAiB,SAAS,eAAe,EAAE,iBAAiB,wBAAwB,CAAC;AACvH,UAAI,cAAc,SAAS,KAAK,SAAS,YAAa,cAAc,SAAS,KAAK,SAAS,UAAU,cAAc,SAAS,UAAW;AACvH,sBAAA;AAAA,MAChB;AACA,aAAO,GAAG,WAAW;AAAA,IAAA,CACtB;AAGK,UAAA,wBAAwB,SAAS,MAAM;AACvC,UAAA,cAAc,OAAO,SAAS,iBAAiB,SAAS,eAAe,EAAE,iBAAiB,uBAAuB,CAAC;AACtH,UAAI,cAAc,SAAS,KAAK,mBAAmB,cAAc,SAAS,UAAU;AACpE,sBAAA,OAAO,SAAS,iBAAiB,SAAS,eAAe,EAAE,iBAAiB,gCAAgC,CAAC;AAAA,MAC7H;AACI,UAAA,UAAU,aAAa,MAAM,CAAA,SAAQ;;AAAA,iBAAAb,MAAA,KAAK,SAAL,gBAAAA,IAAW,UAAS;AAAA,OAAK,GAAG;AACrD,sBAAA;AAAA,MAChB;AACA,aAAO,GAAG,WAAW;AAAA,IAAA,CACtB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxGD,MAAee,yCAAgB;AAAA,EAC7BC,MAAM;AAAA,EACNK,QAAQ;AACN,WAAO,MAAM;AACX,aAAAG,YAAA03B,WAAA,MAAA,IAAA;AAAA;EAEJ;AACF,CAAC;ACRY,MAAA,WAAW,YAAY,MAAM;ACY3B,eAAeC,eAC5Bz4B,UAAmC,IACF;AACjC,SAAO,IAAIyQ,QAASC,aAAY;AAC9B,UAAM6Z,gBAAgB1X,SAAS,IAAIsX,gBAAiB,CAAA;AAEpD,UAAMtZ,oBAAoBA,MAAM;AAC9BC,qBAAeC,QAAO;AAEtBL,cAAQ;AAAA,QAAE7D,SAAS;AAAA,QAAO6G,MAAM;AAAA,QAAMtU,MAAM;AAAA,MAAG,CAAC;AAAA;AAGlD,UAAM4R,qBAAqBA,MAAM;AAC/BF,qBAAeC,QAAO;AAEtB,YAAM2nB,YAAYnO,cAAcnR,aAAc,EAAC,CAAC;AAEhD,YAAMuf,iBAAiBpO,cACpBlS,UACA9D,KAAM5U,UAASA,KAAK0I,OAAOqwB,SAAS;AAEvC,UAAI,CAACC,gBAAgB;AACnBjoB,gBAAQ;AAAA,UAAE7D,SAAS;AAAA,UAAO6G,MAAM;AAAA,UAAMtU,MAAM;AAAA,QAAG,CAAC;AAChD;AAAA,MACF;AAEAsR,cAAQ;AAAA,QACN7D,SAAS;AAAA,QACT6G,MAAMilB;AAAAA,QACNv5B,MAAMu5B,eAAev5B;AAAAA,MACvB,CAAC;AAAA;AAGH,UAAM0R,iBAAiBlN,SAASqN,aAAa;AAAA,MAC3C3I,OAAO;AAAA,MACP4I,OAAO;AAAA,MACPzD,OAAO;AAAA,MACP0D,SAASA,MAAM;AACbL,uBAAeC,QAAO;AAAA,MACvB;AAAA,MACDK,MAAMA,MAAM;AACV,eAAAtQ,YAAAouB,gBAAA;AAAA,UAAA,SAAA;AAAA,UAAA,cAAA;AAAA,UAAA,iBAImB3E;AAAAA,UAAa,2BACHvqB,QAAQgrB;AAAAA,QAAuB,GAAA,IAAA;AAAA,MAG7D;AAAA,MACDzZ,QAAQA,MAAM;AACZ,eAAAzQ,YAAAqN,UAAArN,MAAAA,CAAAA,YAAAI,UAAA;AAAA,UAAA,WAEuB2P;AAAAA,QAAiB,GAAA;AAAA,UAAAxP,SAAAA,MAAA,CAAAuF,gBAAA,IAAA,CAAA;AAAA,SAAA9F,GAAAA,YAAAI,UAAA;AAAA,UAAA,QAAA;AAAA,UAAA,YAGxBqpB,cAAcnR,aAAc,EAAC9T,WAAW;AAAA,UAAC,WAC1C0L;AAAAA,QAAkB,GAAA;AAAA,UAAA3P,SAAAA,MAAA,CAAAuF,gBAAA,IAAA,CAAA;AAAA,QAAA,CAAA,CAAA,CAAA;AAAA,MAMnC;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AACH;AC/EO,MAAM,mBAAmB;ACCzB,MAAM,sBAAsB,WAAW;AAAA,EAC5C,YAAY;AAAA,IACV,MAAM;AAAA,IACN,UAAU;AAAA,EACZ;AACF,CAAU;AAIH,MAAM,sBAAsB;AAAA,EACjC,sBAAsB,CAAC,eAAuB;AAChD;ACXA,MAAM,kBAAkB,qBAAqB,MAAM,OAAO,+BAAmB,CAAC;AAEjE,MAAA,mBAAmB,YAAY,eAAe;ACL3D,QAAQ,QAAQ,WAAU,EAAC,QAAO,MAAe,QAAO,MAAe,OAAM,MAAe,QAAO,MAAe,SAAQ,MAAe,cAAa,MAAe,gBAAe,QAA2B,MAAK,MAAe,UAAS,MAAe,eAAc,OAAqB,QAAO,MAAe,UAAS,MAAe,aAAY,OAAqB,iBAAgB,OAAqB,eAAc,MAAe,aAAY,MAAe,oBAAmB,QAA2B,UAAS,MAAe,cAAa,OAAqB,gBAAe,QAA2B,eAAc,OAAqB,gBAAe,OAAqB,WAAU,QAA2B,eAAc,QAA2B,iBAAgB,QAA2B,mBAAkB,QAA2B,mBAAkB,QAA2B,SAAQ,MAAe,WAAU,MAAe,sHAAqH,oCAAiJ,YAAW,MAAe,aAAY,QAA2B,aAAY,QAA2B,aAAY,QAA2B,aAAY,QAA2B,aAAY,QAA2B,aAAY,QAA2B,gBAAe,UAAuC,OAAM,OAAM,OAAM,MAAe,QAAO,MAAe,aAAY,MAAe,cAAa,QAA2B,UAAS,MAAe,UAAS,MAAe,gHAA+G,8BAA+J,SAAQ,MAAe,cAAa,QAA2B,SAAQ,MAAe,uBAAsB,QAA2B,MAAK,KAAS,sBAAqB,YAAmD,UAAS,MAAe,mBAAkB,QAA2B,SAAQ,KAAS,SAAQ,MAAe,WAAU,MAAe,UAAS,OAAqB,QAAO,OAAqB,UAAS,QAA2B,eAAc,UAAuC,eAAc,UAAuC,eAAc,UAAuC,eAAc,UAAuC,eAAc,UAAuC,aAAY,SAAkB,UAAS,MAAe,QAAO,MAAe,MAAK,MAAK,0GAAyG,0CAA6N,oEAAmE,oBAAmG,sBAAqB,WAA6C,wBAAuB,WAA8B,qBAAoB,QAA2B,eAAc,OAAqB,2BAA0B,aAAoD,YAAW,MAAe,kBAAiB,WAA8B,iBAAgB,QAA2B,iBAAgB,QAA2B,SAAQ,MAAe,cAAa,MAAe,UAAS,MAAe,YAAW,QAA2B,QAAO,MAAe,WAAU,MAAe,oBAAmB,YAAmD,oBAAmB,YAAmD,yBAAwB,aAAyD,+BAA8B,cAA+D,0CAAyC,oBAAoF,mCAAkC,iBAAuE,4CAA2C,mBAAmF,4BAA2B,gBAAwC,oBAAmB,SAAiC,iBAAgB,WAA8B,qBAAoB,aAAqC,WAAU,MAAe,mBAAkB,OAAqB,mBAAkB,SAAiC,qBAAoB,WAAwC,2BAA0B,QAA2B,iBAAgB,QAA2B,uBAAsB,WAA6C,UAAS,KAAS,cAAa,MAAe,yBAAwB,QAA2B,WAAU,MAAe,YAAW,MAAe,SAAQ,MAAe,kBAAiB,QAA2B,oBAAmB,QAA2B,UAAS,MAAe,gBAAe,QAA2B,YAAW,SAAkB,cAAa,QAA2B,UAAS,QAA2B,oBAAmB,WAAwC,aAAY,SAA4B,oBAAmB,WAAwC,mBAAkB,UAAuC,OAAM,MAAe,mBAAkB,aAA0C,kBAAiB,QAA2B,QAAO,KAAS,cAAa,OAAqB,aAAY,QAA2B,eAAc,QAA2B,WAAU,MAAe,WAAU,SAAkB,wBAAuB,WAA6C,qGAAoG,oCAA4I,qGAAoG,qCAAkJ,sGAAqG,4CAAwK,aAAY,QAA2B,gBAAe,QAA2B,qBAAoB,WAAwC,qBAAoB,WAAwC,sBAAqB,MAAe,0BAAyB,UAAuC,4BAA2B,YAAyC,gCAA+B,eAAgE,SAAQ,MAAe,YAAW,UAAwB,qBAAoB,SAAiC,cAAa,OAAqB,iBAAgB,SAAiC,WAAU,MAAe,SAAQ,MAAe,YAAW,SAAkB,QAAO,MAAe,QAAO,MAAe,gBAAe,OAAqB,WAAU,MAAe,eAAc,QAA2B,YAAW,OAAqB,QAAO,OAAqB,oBAAmB,SAAiC,uBAAsB,YAAoC,wCAAuC,YAAmD,cAAa,SAAiC,yBAAwB,QAA2B,qBAAoB,UAAuC,gBAAe,QAA2B,oBAAmB,QAA2B,gBAAe,QAA2B,QAAO,OAAqB,OAAM,KAAS,UAAS,KAAS,mBAAkB,SAAiC,eAAc,SAAiC,cAAa,SAAiC,qBAAoB,UAAuC,oBAAmB,UAAuC,cAAa,OAAqB,kBAAiB,OAAqB,WAAU,OAAqB,cAAa,OAAqB,YAAW,OAAqB,eAAc,OAAqB,oBAAmB,UAAuC,uBAAsB,SAAiC,mBAAkB,UAAuC,sBAAqB,UAAuC,wBAAuB,UAAuC,uBAAsB,UAAuC,iBAAgB,OAAqB,QAAO,KAAS,QAAO,MAAe,SAAQ,MAAe,UAAS,MAAe,gBAAe,UAAuC,gBAAe,UAAuC,yBAAwB,UAAuC,4BAA2B,UAAuC,gBAAe,QAA2B,eAAc,SAAiC,iBAAgB,OAAqB,cAAa,MAAe,iBAAgB,QAA2B,WAAU,MAAe,gBAAe,QAA2B,QAAO,KAAS,UAAS,MAAe,SAAQ,KAAS,aAAY,QAA2B,SAAQ,MAAe,aAAY,MAAe,oBAAmB,QAA2B,kBAAiB,QAA2B,OAAM,QAA2B,UAAS,QAA2B,UAAS,QAA2B,eAAc,SAAiC,aAAY,MAAe,gBAAe,MAAe,YAAW,OAAqB,UAAS,MAAe,QAAO,MAAe,UAAS,MAAe,gBAAe,QAA2B,SAAQ,MAAe,UAAS,MAAe,UAAS,MAAe,UAAS,OAAqB,UAAS,MAAe,SAAQ,OAAqB,SAAQ,MAAe,UAAS,MAAe,UAAS,MAAe,sBAAqB,WAA8B,aAAY,MAAe,YAAW,MAAe,mBAAkB,QAA2B,cAAa,QAA2B,oBAAmB,QAA2B,aAAY,aAA2B,gBAAe,SAAiC,YAAW,KAAS,gBAAe,QAA2B,eAAc,UAAuC,6BAA4B,WAA6C,cAAa,MAAe,SAAQ,MAAe,YAAW,MAAe,aAAY,MAAe,SAAQ,MAAe,cAAa,UAAwB,aAAY,SAAa,QAAO,MAAe,QAAO,MAAe,UAAS,MAAe,QAAO,MAAe,UAAS,MAAe,SAAQ,MAAe,SAAQ,MAAe,kBAAiB,UAAwB,0FAAyF,4CAAyJ,eAAc,QAA2B,gBAAe,QAA2B,gBAAe,QAA2B,SAAQ,MAAe,QAAO,MAAe,SAAQ,MAAe,wCAAuC,sBAAwD,kBAAiB,SAAiC,yCAAwC,oBAA0E,eAAc,QAA2B,+BAA8B,eAA4C,2CAA0C,wBAAyE,kCAAiC,kBAAyD,oCAAmC,gBAAkD,WAAU,MAAe,UAAS,MAAe,OAAM,MAAe,YAAW,MAAe,QAAO,MAAe,cAAa,MAAe,gBAAe,MAAe,kBAAiB,SAAiC,WAAU,MAAe,UAAS,MAAe,gBAAe,OAAqB,eAAc,QAA2B,iBAAgB,QAA2B,sBAAqB,QAA2B,cAAa,MAAe,iBAAgB,WAA6C,qBAAoB,QAA2B,aAAY,QAA2B,aAAY,QAA2B,cAAa,QAA2B,eAAc,SAAiC,cAAa,QAA2B,YAAW,QAA2B,mBAAkB,UAAuC,aAAY,SAAiC,YAAW,UAAuC,eAAc,UAAuC,gBAAe,UAAuC,uBAAsB,UAAuC,aAAY,QAA2B,gBAAe,SAAiC,gBAAe,QAA2B,gBAAe,WAA6C,aAAY,QAA2B,uBAAsB,UAAuC,iBAAgB,cAAuB,cAAa,QAA2B,qBAAoB,QAA2B,qBAAoB,SAAiC,oBAAmB,QAA2B,cAAa,SAAiC,cAAa,QAA2B,iBAAgB,QAA2B,kBAAiB,UAAuC,2CAA0C,aAAyD,kCAAiC,WAA6C,UAAS,UAAS,aAAY,aAAY,qBAAoB,iBAAoC,yBAAwB,cAAiC,UAAS,MAAe,sBAAqB,SAAiC,kBAAiB,SAAiC,YAAW,MAAe,qBAAoB,SAAiC,WAAU,MAAe,SAAQ,MAAe,cAAa,MAAe,0BAAyB,WAAmC,kBAAiB,WAAyB,uCAAsC,iBAAuE,iCAAgC,eAA2D,gBAAe,QAA2B,gBAAe,OAAqB,+BAA8B,mBAAyE,iBAAgB,QAA2B,KAAI,KAAI,iBAAgB,QAA2B,KAAI,KAAI,mBAAkB,QAA2B,KAAI,KAAI,kBAAiB,QAA2B,KAAI,KAAI,kBAAiB,YAAmD,kBAAiB,WAAyB,aAAY,OAAqB,SAAQ,MAAe,QAAO,MAAe,UAAS,MAAe,aAAY,OAAqB,kBAAiB,QAA2B,cAAa,OAAqB,eAAc,OAAqB,iBAAgB,OAAqB,iBAAgB,OAAqB,UAAS,MAAe,UAAS,MAAe,OAAM,MAAe,cAAa,OAAqB,QAAO,MAAe,eAAc,OAAqB,eAAc,OAAqB,YAAW,OAAqB,eAAc,OAAqB,aAAY,OAAqB,eAAc,OAAqB,gBAAe,OAAqB,aAAY,OAAqB,gBAAe,OAAqB,cAAa,OAAqB,eAAc,OAAqB,aAAY,OAAqB,SAAQ,MAAe,SAAQ,MAAe,qCAAoC,UAAuC,oBAAmB,WAA6C,WAAU,MAAe,UAAS,MAAe,cAAa,OAAqB,aAAY,MAAe,eAAc,MAAe,QAAO,MAAe,QAAO,MAAe,WAAU,SAAkB,aAAY,SAAkB,eAAc,OAAqB,OAAM,KAAS,MAAK,KAAS,uBAAsB,QAA2B,WAAU,MAAe,aAAY,QAA2B,qCAAoC,kBAAuF,mBAAkB,QAA2B,sBAAqB,UAAuC,wBAAuB,WAA6C,eAAc,MAAe,sCAAqC,cAA+D,cAAa,UAAwB,2CAA0C,kBAAuF,qDAAoD,qBAAyG,oDAAmD,qBAAyG,mDAAkD,qBAA8G,CAAC;ACAr8jB,QAAQ,SAAS,IAAI,kBAAkB,6vrGAA6yrG;ACAp1rG,QAAQ,SAAS,IAAI,qBAAqB,0mxBAA8oxB;ACAxrxB,QAAQ,SAAS,IAAI,0BAA0B,8nCAA0oC;ACAzrC,MAAe,eAAA;ACGR,MAAM,sBAAsB,WAAW;AAAA,EAC5C,YAAY;AAAA,IACV,MAAM;AAAA,IACN,UAAU;AAAA,EACZ;AAAA,EACA,QAAS;AAAA,IACP,MAAM;AAAA,IACN,UAAU;AAAA,IACV,SAAS;AAAA,EACX;AAAA,EACA,SAAQ;AAAA,IACN,MAAM;AAAA,IACN,UAAU;AAAA,IACV,SAAQ,MAAK,CAAC,QAAO,OAAO;AAAA,EAC9B;AAAA,EACA,SAAQ;AAAA,IACN,MAAM,CAAC,QAAO,OAAO;AAAA,IACrB,UAAU;AAAA,IACV,SAAQ;AAAA,EACV;AAAA,EACA,UAAU;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AACF,CAAU;AAIH,MAAM,sBAAsB;AAAA,EACjC,sBAAsB,CAAC,eAAuB;AAChD;ACVA,MAAevG,iDAAgB;AAAA,EAC9BC,MAAM;AAAA,EACNC,OAAOq4B;AAAAA,EACPn4B,OAAOo4B;AAAAA,EACPl4B,MAAMJ,OAAO;AAAA,IAAEK;AAAAA,EAAK,GAAG;AACtB,UAAMk4B,mBAA4Cl2B,IAAI,IAAI;AAE1D,UAAMsE,WAAW2jB;AAOjB/lB,cAAU,YAAY;AACrB,YAAMi0B,kBAAkB,MAAMC,QAAQj0B,KAAK;AAAA,QAC1CypB,QAAQjsB,MAAMu2B,gBAAgB;AAAA,QAC9BG,WAAW;AAAA,QACXC,SAAS;AAAA,QACTC,SAAS54B,MAAM44B;AAAAA;AAAAA,QAEfC,SAAS74B,MAAM64B;AAAAA,QACfC,QAAQ94B,MAAM84B;AAAAA,QACdC,gBAAgB;AAAA;AAAA,QAChBC,yBAAyB;AAAA;AAAA,QACzBC,iBAAiB;AAAA;AAAA,QACjBC,gBAAgB;AAAA;AAAA,QAChBC,SAAS;AAAA,QACTC,yBAAyB;AAAA,QACzBC,aAAa;AAAA,QACbC,qBACC;AAAA,QACDC,UAAU;AAAA,QACVC,UAAU;AAAA,QACVC,aAAa;AAAA,QACbC,eAAeC;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA,QAKfv5B,OAAQw5B,YAAW;AAElBA,iBAAO7kB,GAAG,UAAU,WAAY;AAAA,UAC/B,CACA;AACD6kB,iBAAOC,GAAGC,SAASC,UAAU,YAAY;AAAA,YACxCz5B,MAAM;AAAA,YACN05B,UAAU,YAAY;AACrB,oBAAM1X,WAAW,MAAM2X;AACvB,kBAAI,CAAC3X,SAAShW,SAAS;AACtB;AAAA,cACD;AACAstB,qBAAOM,cAAc,aAAa5X,SAASzjB,IAAI,UAAUyjB,SAASnP,KAAMrL,EAAE,IAAI;AAAA,YAC/E;AAAA,UACD,CAAC;AACD8xB,iBAAO7kB,GAAG,SAAS,CAACxH,UAAU4sB,SAAS;AAAA,UACtC,CACA;AACDP,iBAAO7kB,GAAG,0BAA0B,MAAM;AACzC1U,iBAAK,sBAAsBu5B,OAAOQ,WAAY,CAAA;AAAA,UAC/C,CAAC;AAAA,QACF;AAAA,MACD,CAAC;AACD13B,YACCf,SAAS,MAAM3B,MAAMN,UAAU,GAC9BA,gBAAe;AACf,mBAAWiH,aAAY6xB,iBAAiB;AACvC,cAAI7xB,UAASyzB,WAAY,MAAK16B,YAAY;AACzCiH,YAAAA,UAAS0zB,WAAW36B,cAAc,YAAY;AAAA,UAC/C,WACS,CAACA,YAAY;AACrBiH,YAAAA,UAAS0zB,WAAW,aAAa;AAAA,UAClC;AAAA,QACD;AAAA,MACD,GACA;AAAA,QAAEv3B,WAAW;AAAA,MAAK,CACnB;AACAJ,YACCf,SAAS,MAAM3B,MAAMgD,QAAQ,GAC5BA,cAAa;AACb,mBAAW2D,aAAY6xB,iBAAiB;AACvC7xB,UAAAA,UAAS2zB,KAAK93B,IAAIQ,WAAW,aAAa,QAAQ;AAAA,QACnD;AAAA,MACD,GACA;AAAA,QAAEF,WAAW;AAAA,MAAK,CACnB;AAEAy3B,cAAQ,MAAM;AACbpV,wBAAgB,MAAM;AACrB,qBAAWxe,aAAY6xB,iBAAiB;AACvC7xB,YAAAA,UAAS6J,QAAO;AAAA,UACjB;AAAA,QACD,CAAC;AAAA,MACD,GAAE7J,QAAQ;AAAA,IACZ,CAAC;AACD,WAAO,MAAM;AACZ,aAAApG,YAAA,OAAA;AAAA,QAAA,SAAA;AAAA,MAAA,GAAA,CAAAA,YAAA,OAAA;AAAA,QAAA,SAAA;AAAA,QAAA,OAEmDoD,QAAqB40B,iBAAiB70B,QAAQC;AAAAA,MAAG,GAAA,IAAA,CAAA,CAAA;AAAA;EAItG;AACD,CAAC;AC3HY,MAAA,mBAAmB,YAAY,cAAe;;;;;;;;ACQpD,MAAM,8BAA8B,cAAc;AAAA,EAGxD,YAAY,UAAwC,IAAI;AACjD;AAHP;AAKM,SAAA,0BAA0B,QAAQ,2BAA2B,CAAA;AAAA,EACnE;AAAA,EAEA,2BACC,yBACC;AACD,SAAK,0BAA0B;AAAA,EAChC;AAAA,EAEA,MAAM,aAAoC;;AACnC,UAAA,uBAAuB,MAAM,iBAAiB;AAAA,MACnD,yBAAyB,KAAK;AAAA,IAAA,CAC9B;AAEM,WAAA;AAAA,MACN,SAAS;AAAA,MACT,MAAM,qBAAqB;AAAA,MAC3B,KAAK;AAAA,MACL,OAAM5E,MAAA,qBAAqB,SAArB,gBAAAA,IAA2B;AAAA,IAAA;AAAA,EAEnC;AACD;AClCO,MAAM,6BAA6B,WAAW;AAAA,EACnD,yBAAyB;AAAA,IACvB,MAAM;AAAA,EACR;AACF,CAAU;ACFV,MAAMy7B,yBAAyB16B,gCAAgB;AAAA,EAC7CC,MAAM;AAAA,EACNC,OAAOy6B;AAAAA,EACPn5B,cAAc;AAAA,EACdlB,MAAMJ,OAAO;AAAA,IAAEwB;AAAAA,EAAM,GAAG;AACtB,UAAMipB,0BAA0B9oB,SAC9B,MAAM3B,MAAMyqB,uBACd;AAEA,UAAMiQ,wBAAwB,IAAIC,sBAAsB;AAAA,MACtDlQ,yBAAyBzoB,MAAMyoB,uBAAuB,KAAK,CAAA;AAAA,IAC7D,CAAC;AAED/nB,UAAM+nB,yBAA0BA,CAAAA,6BAA4B;AAC1DiQ,4BAAsBlQ,2BACpBC,4BAA2B,CAAA,CAC7B;AAAA,IACF,CAAC;AAEDve,WAAOR,qBAAqB;AAAA,MAAEC,eAAe+uB;AAAAA,IAAsB,CAAC;AAEpE,WAAO,MAAM;;AACX,cAAOl5B,MAAAA,MAAMV,YAANU,gBAAAA,IAAAA;AAAAA;EAEX;AACF,CAAC;MAEYo5B,0BAA0B/uB,YAAY2uB,sBAAsB;ACGzE,MAAM,WAAqB,CAAC,WAA6B;AAGhD,SAAA,IAAI,IAAI,gBAAgB;AAG/B,SAAO,kBAAkB,aAAa;AACtC,SAAO,iBAAiB,YAAY;AAGpC,SAAO,kBAAkB,uBAAuB;AAChD,SAAO,iBAAiB,sBAAsB;AAG9C,SAAO,kBAAkB,kBAAkB;AAC3C,SAAO,iBAAiB,iBAAiB;AAGzC,SAAO,kBAAkB,eAAe;AACxC,SAAO,iBAAiB,cAAc;AACtC,SAAO,iBAAiB,mBAAmB;AAC3C,SAAO,iBAAiB,mBAAmB;AAG3C,SAAO,kBAAkB,aAAa;AACtC,SAAO,iBAAiB,YAAY;AAGpC,SAAO,iBAAiB,UAAU;AAClC,SAAO,iBAAiB,UAAU;AAClC,SAAO,kBAAkB,4BAA4B;AACrD,SAAO,iBAAiB,2BAA2B;AACnD,SAAO,kBAAkB,YAAY;AACrC,SAAO,iBAAiB,WAAW;AAGnC,SAAO,kBAAkB,aAAa;AACtC,SAAO,iBAAiB,YAAY;AAGpC,SAAO,kBAAkB,WAAW;AACpC,SAAO,iBAAiB,UAAU;AAElC,SAAO,mBAAmB,kBAAkB;AAAA,IAC1C,MAAM;AAAA,IACN,OAAO;AAAA,IACP,WAAW;AAAA,MACT,MAAM,QAAsC,QAAA,EAAA,KAAA,MAAA,KAAA;AAAA,IAC9C;AAAA,EAAA,CACD;AAED,SAAO,oBAAoB;AAAA,IACzB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,WAAW,MAAM,OAAO,qBAA+B;AAAA,IACvD,MAAM,EAAE,MAAM,cAAc;AAAA,EAAA,CAC7B;AAED,SAAO,oBAAoB;AAAA,IACzB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,WAAW,MAAM,OAAO,qBAA2B;AAAA,IACnD,MAAM,EAAE,MAAM,UAAU;AAAA,EAAA,CACzB;AAED,SAAO,oBAAoB;AAAA,IACzB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,WAAW,MAAM,OAAO,iCAAuC;AAAA,EAAA,CAChE;AAED,SAAO,oBAAoB;AAAA,IACzB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,WAAW,MAAM,OAAO,qBAA6B;AAAA,IACrD,MAAM,EAAE,MAAM,YAAY;AAAA,EAAA,CAC3B;AAED,SAAO,oBAAoB;AAAA,IACzB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,WAAW,MAAM,OAAO,qBAA2B;AAAA,IACnD,MAAM,EAAE,MAAM,UAAU;AAAA,EAAA,CACzB;AAED,SAAO,oBAAoB;AAAA,IACzB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,WAAW,MAAM,OAAO,qBAAyB;AAAA,EAAA,CAClD;AAED,SAAO,oBAAoB;AAAA,IACzB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,WAAW,MAAM,OAAO,qBAAyB;AAAA,EAAA,CAClD;AACH;ACtHA,MAAM,oBAAyE,CAAA;AAOlE,MAAA,uBAAuB,CAAC,iBAAiC;AAC7D,SAAA,kBAAkB,OAAO,CAAA,SAAM,KAAK,OAAO,YAAY,EAAE,IAAI,CAAM,SAAA,KAAK,SAAS;AAC1F;AAOa,MAAA,wBAAwB,CAAC,cAA2B,QAAoB;AACnF,oBAAkB,KAAK,EAAE,KAAI,cAAa,WAAU,KAAK;AAC3D;AAIA,MAAM,2BAAmG,CAAA;AAO5F,MAAA,0BAA0B,CAAC,iBAAiC;AACvE,SAAO,yBAAyB,KAAK,CAAM,SAAA,KAAK,OAAO,YAAY;AACrE;AAOO,MAAM,+BAA+B,CAAC,cAA2B,WAAc,gBAAmB;AAEvG,MAAG,CAAC,kBAAkB,KAAK,UAAM,KAAK,OAAO,YAAY,GAAE;AACzD,6BAAyB,KAAK,EAAE,KAAI,cAAa,WAAU,aAAa;AAAA,EAAA,OAEtE;AACF,UAAM,IAAI,MAAM,mBAAmB,YAAY,GAAG;AAAA,EACpD;AAEF;AC7DO,MAAM,cAAc;ACKpB,MAAM,qBAAN,MAAM,4BAA0BtpB,kBAC9B,uBAD8BA,KAAS;AAAA,EAG/C,YAAY,UAAkD,IAAI;AAC3D,UAAA;AAAA,MACL,MAAM,mBAAkB,eAAe;AAAA,MACvC,YAAY;AAAA,MACZ,GAAG;AAAA,IAAA,CACH;AANF,mCAAkB;AAOjB,SAAK,UAAU,QAAQ;AAAA,EACxB;AAAA,EAEA,cAAc,SAAiB;AAC9B,SAAK,UAAU;AAAA,EAChB;AAAA,EAEA,MAAgB,aAAa;AAC5B,UAAM,MAAM;AACZ,SAAK,WAAW;AAAA;AAAA,MAEf,IAAI,WAAW;AAAA,QACd,MAAM;AAAA,QAAS,OAAO;AAAA,QAAM,UAAU;AAAA,QAAM,eAAe;AAAA,QAC3D,gBAAgB;AAAA,UACf,MAAM;AAAA,UACN,MAAM;AAAA,QACP;AAAA,MAAA,CACA;AAAA,MACD,IAAI,WAAW;AAAA,QACd,MAAM;AAAA,QAAQ,OAAO;AAAA,QAAM,UAAU;AAAA,QAAM,eAAe;AAAA,QAC1D,gBAAgB;AAAA,UACf,MAAM;AAAA,UACN,MAAM;AAAA,QACP;AAAA,MAAA,CACA;AAAA,MACD,IAAI,WAAW;AAAA,QACd,MAAM;AAAA,QACN,OAAO;AAAA,QACP,UAAU;AAAA,QACV,cAAc;AAAA,QACd,eAAe;AAAA,QACf,gBAAgB;AAAA,UACf,SAAS;AAAA,YACR,EAAE,OAAO,GAAG,OAAO,KAAK;AAAA,YACxB,EAAE,OAAO,GAAG,OAAO,KAAK;AAAA,UACzB;AAAA,QACD;AAAA,MAAA,CACA;AAAA,MACD,IAAI,WAAW;AAAA,QACd,MAAM;AAAA,QACN,OAAO;AAAA,QACP,UAAU;AAAA,QACV,eAAe;AAAA,QACf,gBAAgB;AAAA,UACf,eAAe,IAAI,mBAAmB,KAAK,OAAO;AAAA,QACnD;AAAA,MAAA,CACA;AAAA,MACD,IAAI,WAAW,EAAE,MAAM,QAAQ,OAAO,QAAQ;AAAA,IAAA,CAC9C;AAEI,SAAA,yBAAyB,GAAG,CAAC,WAAW;AACxC,UAAA,OAAO,SAAS,QAAQ,QAAQ;AAC/B,YAAA,OAAO,KAAK,SAAS,GAAG;AACtB,eAAA,UAAU,MAAM,EAAG,gBAAgB;AACnC,eAAA,UAAU,MAAM,EAAG,eAAe,gBACtC,IAAI,mBAAmB,KAAK,OAAO;AAAA,QAAA,OAC9B;AACD,eAAA,UAAU,MAAM,EAAG,gBAAgB;AACxC,eAAK,UAAU,MAAM,EAAG,eAAe,gBACtC,IAAI,sBAAsB;AAAA,YACzB,yBAAyB,CAAC,CAAC;AAAA,UAAA,CAC3B;AAAA,QACH;AAAA,MACD;AAAA,IAAA,CACA;AAAA,EACF;AACD;AA1EC,cADY,oBACJ,KAA2B;AAD7B,IAAM,oBAAN;ACIA,MAAM,sBAAN,MAAM,6BAA2B1R,mBAC9B,uBAD8BA,KAAU;AAAA,EAEhD,YAAY,UAA0C,IAAI;AAClD,UAAA;AAAA,MACJ,MAAM,oBAAmB,eAAe;AAAA,MACxC,YAAY;AAAA,MACZ,GAAG;AAAA,IAAA,CACJ;AAAA,EACH;AAAA,EAEA,MAAgB,aAAa;AAC3B,UAAM,MAAM;AAEZ,SAAK,WAAW;AAAA,MACd,IAAI,YAAY,EAAE,MAAM,QAAQ,OAAO,MAAM;AAAA,MAC7C,IAAI,YAAY,EAAE,MAAM,SAAS,OAAO,MAAM;AAAA,MAC9C,IAAI,YAAY,EAAE,MAAM,QAAQ,OAAO,QAAQ;AAAA,MAC/C,IAAI,YAAY;AAAA,QACd,MAAM;AAAA,QACN,OAAO;AAAA,QACP,eAAe;AAAA,MAAA,CAChB;AAAA,MACD,IAAI,YAAY,EAAE,MAAM,QAAQ,OAAO,QAAQ;AAAA,MAC/C,IAAI,kBAAkB;AAAA,IAAA,CACvB;AAAA,EACH;AACF;AAzBE,cADW,qBACH,KAA2B;AAD9B,IAAM,qBAAN;ACCA,MAAM,oBAAN,MAAM,2BAAyB0R,kBAC5B,uBAD4BA,KAAS;AAAA,EAG7C,YAAY,UAA2B,IAAI;AACnC,UAAA;AAAA,MACJ,MAAM,kBAAiB,eAAe;AAAA,MACtC,YAAY;AAAA,MACZ,GAAG;AAAA,IAAA,CACJ;AAAA,EACH;AAAA,EAEA,MAAgB,aAAa;AAC3B,UAAM,MAAM;AAEZ,SAAK,WAAW;AAAA,MACd,IAAI,WAAW,EAAE,MAAM,OAAO,OAAO,UAAU,UAAU,MAAM;AAAA,MAC/D,IAAI,WAAW,EAAE,MAAM,QAAQ,OAAO,SAAS,UAAU,MAAM;AAAA,MAC/D,IAAI,WAAW,EAAE,MAAM,SAAS,OAAO,MAAM;AAAA,MAC7C,IAAI,WAAW,EAAE,MAAM,UAAU,OAAO,MAAM;AAAA,MAC9C,IAAI,iBAAiB;AAAA,QACnB,MAAM;AAAA,QACN,OAAO;AAAA,QACP,sBAAsB;AAAA,QACtB,YAAY,KAAK,SAAS,IAAI,mBAAmB;AAAA,QACjD,aAAa,KAAK,SAAS,IAAI,oBAAoB;AAAA,MAAA,CACpD;AAAA,IAAA,CACF;AAAA,EACH;AACF;AA3BE,cADW,mBACH,KAA2B;AAD9B,IAAM,mBAAN;ACNA,MAAM,qBAAN,MAAM,4BAA0B1R,mBAC9B,uBAD8BA,KAAU;AAAA,EAEhD,YAAY,UAA4B,IAAI;AACrC,UAAA;AAAA,MACL,MAAM,mBAAkB,eAAe;AAAA,MACvC,YAAY;AAAA,MACZ,GAAG;AAAA,IAAA,CACH;AAAA,EACF;AAAA,EAEA,MAAgB,aAAa;AAC5B,UAAM,MAAM;AAEP,SAAA,WAAW,WAAW,CAAC,IAAI,aAAa,EAAE,MAAM,OAAO,OAAO,SAAU,CAAA,GAAG,IAAI,aAAa,EAAE,MAAM,QAAQ,OAAO,QAAA,CAAS,CAAC,CAAC;AAE9H,SAAA,WAAW,CAAC,IAAI,YAAY,EAAE,MAAM,OAAO,OAAO,UAAU,GAAG,IAAI,YAAY,EAAE,MAAM,QAAQ,OAAO,QAAA,CAAS,GAAG,IAAI,kBAAmB,CAAA,CAAC;AAAA,EAChJ;AACD;AAhBC,cADY,oBACJ,KAA2B;AAD7B,IAAM,oBAAN;ACEA,MAAM,oBAAN,MAAM,2BAAyBA,mBAC7B,uBAD6BA,KAAU;AAAA,EAG/C,YAAY,UAA0C,IAAI;AACnD,UAAA;AAAA,MACL,MAAM,kBAAiB,eAAe;AAAA,MACtC,YAAY;AAAA,MACZ,GAAG;AAAA,IAAA,CACH;AAAA,EACF;AAAA,EAEA,MAAgB,aAAa;;AAC5B,UAAM,MAAM;AACR,QAAA;AACH,WAAK,OAAO,cAAc,eAAe,UAAU,IAAI;AACvD,WAAK,OAAO,cAAc,SAAS,UAAU,IAAI;AACjD,WAAK,OAAO,cAAc,SAAS,UAAU,IAAI;AAEjD,WAAK,WAAW,WAAW;AAAA,QAC1B,IAAI,aAAa,EAAE,MAAM,SAAS,OAAO,MAAM,QAAQ,MAAM;AAAA,QAC7D,IAAI,aAAa,EAAE,MAAM,YAAY,OAAO,OAAO;AAAA,QACnD,IAAI,aAAa,EAAE,MAAM,QAAQ,OAAO,MAAM;AAAA,MAAA,CAC9C;AAED,WAAK6R,OAAA9R,OAAAR,MAAA,YAAY,aAAZ,gBAAAA,IAAsB,UAAU,iBAAhC,gBAAAQ,IAAsD,UAAtD,gBAAA8R,IAA6D,WAAW;AACvE,aAAA,WAAW,SAAS,eAAcgf,MAAA,YAAY,aAAZ,gBAAAA,IAAsB,UAAU,cAAqB,MAAM,SAAS;AAAA,MAC5G;AACA,WAAK,WAAW;AAAA,QACf,IAAI,YAAY,EAAE,MAAM,SAAS,OAAO,MAAM;AAAA,QAC9C,IAAI,YAAY,EAAE,MAAM,YAAY,OAAO,OAAO;AAAA,QAClD,IAAI,YAAY,EAAE,MAAM,QAAQ,OAAO,MAAM;AAAA,QAC7C,IAAI,YAAY,EAAE,MAAM,SAAS,OAAO,OAAO,eAAe,iBAAiB;AAAA;AAAA,QAE/E,IAAI,YAAY,EAAE,MAAM,eAAe,OAAO,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAiDtD,IAAI,YAAY,EAAE,MAAM,UAAU,OAAO,MAAM;AAAA,QAC/C,IAAI,kBAAkB;AAAA,MAAA,CACtB;AAAA,aACO,GAAG;AACX,cAAQ,MAAM,CAAC;AAAA,IAChB;AAAA,EAED;AACD;AAzFC,cADY,mBACJ,KAA2B;AAD7B,IAAM,mBAAN;ACAA,MAAM,eAAN,MAAM,sBAAoB,gBACxB,uBADwB,KAAS;AAAA,EAGzC,YAAY,UAA0C,IAAI;AACnD,UAAA;AAAA,MACL,MAAM,aAAY,eAAe;AAAA,MACjC,YAAY;AAAA,MACZ,OAAO,EAAE,QAAQ,WAAW;AAAA,MACzB,eAAe;AAAA,MAClB,GAAG;AAAA,IAAA,CACH;AAAA,EACF;AAAA,EAEA,MAAgB,aAAa;AAC5B,UAAM,MAAM;AAEZ,SAAK,OAAO,cAAc,UAAU,UAAU,IAAI;AAMlD,SAAK,WAAW;AAAA,MACf,IAAI,YAAY;AAAA,QACf,MAAM;AAAA,QACN,OAAO;AAAA,QACP,OAAO;AAAA,QACP,OAAO;AAAA,MAAA,CACP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAYD,IAAI,YAAY;AAAA,QACf,MAAM;AAAA,QACN,OAAO;AAAA,QACP,eAAe;AAAA,QACf,gBAAgB;AAAA,UACf,SAAS,CAAC,KAAK,GAAG;AAAA,QACnB;AAAA,MAAA,CACA;AAAA,MACD,IAAI,YAAY;AAAA,QACf,MAAM;AAAA,QACN,OAAO;AAAA,QACP,eAAe;AAAA,QACf,gBAAgB;AAAA,UACf,SAAS,CAAC,KAAK,GAAG;AAAA,QACnB;AAAA,MAAA,CACA;AAAA,MACD,IAAI,YAAY,EAAE,MAAM,UAAU,OAAO,OAAO;AAAA,MAChD,IAAI,kBAAkB;AAAA,QACrB,OAAO;AAAA,QACP,SAAS;AAAA,UACR,IAAI,WAAW;AAAA,UACf,IAAI,aAAa;AAAA,UACjB,IAAI,aAAa;AAAA,YAChB,OAAO;AAAA,YACP,SAAS,CAAC,SAAS;;AACN,eAAAtxB,MAAA,YAAA,aAAA,gBAAAA,IAAU,UAAU,KAAK;AAAA,gBACpC,MAAM;AAAA,gBACN,OAAO;AAAA,kBACN,WAAW,KAAK,KAAK;AAAA,gBACtB;AAAA,cAAA;AAAA,YAEF;AAAA,UAAA,CACA;AAAA,QACF;AAAA,MAAA,CACA;AAAA,IAAA,CACD;AAAA,EACF;AAAA,EAEO,gBAAgB,MAAkC;AACjD,WAAA;AAAA,EAER;AAAA,EAEC,KAAK,QAA8F;AACxF,WAAA,KAAK,QAAQ,MAAM;AAAA,EAC9B;AAAA,EAED,WAAW,MAAW;AAChB,SAAA,WAAW,KAAK,YAAY,CAAA;AAE1B,WAAA;AAAA,EACR;AAED;AA5FC,cADY,cACJ,KAA2B;AAD7B,IAAM,cAAN;ACIA,MAAM,gBAAN,MAAM,uBAAqBS,mBACxB,uBADwBA,KAAU;AAAA,EAE1C,YAAY,UAA4B,IAAI;AACpC,UAAA;AAAA,MACJ,MAAM,cAAa,eAAe;AAAA,MAClC,YAAY;AAAA,MACZ,GAAG;AAAA,IAAA,CACJ;AAAA,EACH;AAAA,EAEA,MAAgB,aAAa;AAC3B,UAAM,MAAM;AACZ,SAAK,WAAW,WAAW;AAAA,MACzB,IAAI,aAAa,EAAE,MAAM,OAAO,OAAO,MAAM;AAAA,IAAA,CAC9C;AAED,SAAK,WAAW;AAAA,MACd,IAAI,YAAY,EAAE,MAAM,OAAO,OAAO,MAAM;AAAA,MAC5C,IAAI,YAAY;AAAA,QACd,MAAM;AAAA,QACN,OAAO;AAAA,QACP,eAAe;AAAA,MAAA,CAChB;AAAA,MACD,IAAI,kBAAkB;AAAA,IAAA,CACvB;AAAA,EACH;AACF;AAzBE,cADW,eACH,KAA2B;AAD9B,IAAM,eAAN;ACNA,MAAM,eAAN,MAAM,sBAAoB0R,kBACvB,uBADuBA,KAAS;AAAA,EAGxC,YAAY,UAA2B,IAAI;AACnC,UAAA;AAAA,MACJ,MAAM,aAAY,eAAe;AAAA,MACjC,YAAY;AAAA,MACZ,GAAG;AAAA,IAAA,CACJ;AAAA,EACH;AAAA,EAEA,MAAgB,aAAa;AAC3B,UAAM,MAAM;AAEZ,SAAK,WAAW;AAAA,MACd,IAAI,WAAW,EAAE,MAAM,OAAO,OAAO,MAAM,UAAU,MAAM;AAAA,MAC3D,IAAI,WAAW;AAAA,QACb,MAAM;AAAA,QACN,OAAO;AAAA,QACP,eAAe;AAAA,MAAA,CAChB;AAAA,IAAA,CACF;AAAA,EACH;AACF;AAtBE,cADW,cACH,KAA2B;AAD9B,IAAM,cAAN;ACCA,MAAM,uBAAN,MAAM,8BAA4BA,kBAC/B,uBAD+BA,KAAS;AAAA,EAGhD,YAAY,UAA2B,IAAI;AACnC,UAAA;AAAA,MACJ,MAAM,qBAAoB,eAAe;AAAA,MACzC,YAAY;AAAA,MACZ,GAAG;AAAA,IAAA,CACJ;AAAA,EACH;AAAA,EAEA,MAAgB,aAAa;AAC3B,UAAM,MAAM;AACZ,SAAK,WAAW;AAAA,MACd,IAAI,WAAW,EAAE,MAAM,OAAO,OAAO,QAAQ;AAAA,MAC7C,IAAI,WAAW,EAAE,MAAM,SAAS,OAAO,MAAM,UAAU,MAAM;AAAA,MAC7D,IAAI,WAAW;AAAA,QACb,MAAM;AAAA,QACN,OAAO;AAAA,QACP,UAAU;AAAA,QACV,eAAe;AAAA,QACf,gBAAgB;AAAA,UACd,eAAe,IAAI,sBAAsB;AAAA,YACvC,yBAAyB,CAAC,GAAE,CAAC;AAAA,UAAA,CAC9B;AAAA,QACH;AAAA,MAAA,CACD;AAAA,MACD,IAAI,WAAW,EAAE,MAAM,UAAU,OAAO,QAAQ,cAAc,GAAG;AAAA,IAAA,CAClE;AAAA,EACH;AACF;AA7BE,cADW,sBACH,KAA2B;AAD9B,IAAM,sBAAN;ACIA,MAAM,wBAAN,MAAM,+BAA6B1R,mBAChC,uBADgCA,KAAU;AAAA,EAElD,YAAY,UAA0C,IAAI;AAClD,UAAA;AAAA,MACJ,MAAM,sBAAqB,eAAe;AAAA,MAC1C,YAAY;AAAA,MACZ,GAAG;AAAA,IAAA,CACJ;AAAA,EACH;AAAA,EAEA,MAAgB,aAAa;AAC3B,UAAM,MAAM;AAEZ,SAAK,WAAW;AAAA,MACd,IAAI,YAAY,EAAE,MAAM,OAAO,OAAO,QAAQ;AAAA,MAC9C,IAAI,YAAY,EAAE,MAAM,SAAS,OAAO,MAAM;AAAA,MAC9C,IAAI,YAAY;AAAA,QACd,MAAM;AAAA,QACN,OAAO;AAAA,QACP,eAAe;AAAA,MAAA,CAChB;AAAA,MACD,IAAI,YAAY,EAAE,MAAM,UAAU,OAAO,QAAQ;AAAA,MACjD,IAAI,kBAAkB;AAAA,IAAA,CACvB;AAAA,EACH;AACF;AAxBE,cADW,uBACH,KAA2B;AAD9B,IAAM,uBAAN;ACEA,MAAM,mBAAN,MAAM,0BAAwB0R,kBAC5B,uBAD4BA,KAAS;AAAA,EAG7C,YAAY,UAA2B,IAAI;AACpC,UAAA;AAAA,MACL,MAAM,iBAAgB,eAAe;AAAA,MACrC,YAAY;AAAA,MACZ,GAAG;AAAA,IAAA,CACH;AAAA,EACF;AAAA,EACU,YAAY,YAAuE;AACrF,WAAA,MAAM,kBAAkB,UAAU;AAAA,EAC1C;AAAA,EACA,MAAgB,aAAa;AAC5B,UAAM,MAAM;AACZ,SAAK,WAAW;AAAA,MACf,IAAI,WAAW;AAAA,QACd,MAAM;AAAA,QACN,OAAO;AAAA;AAAA,QAEP,eAAe;AAAA,QACf,gBAAgB;AAAA,UACf,gBAAgB;AAAA,UAChB,UAAU,KAAK,SAAS,IAAI,aAAa;AAAA,QAC1C;AAAA,QACA,UAAU;AAAA,MAAA,CACV;AAAA,MACD,IAAI,WAAW;AAAA,QACd,MAAM;AAAA,QACN,OAAO;AAAA,QACP,UAAU;AAAA,MAAA,CACV;AAAA,MACD,IAAI,WAAW;AAAA,QACd,MAAM;AAAA,QACN,OAAO;AAAA,MAAA,CACP;AAAA,MACD,IAAI,WAAW;AAAA,QACd,MAAM;AAAA,QACN,OAAO;AAAA,QACP,eAAe;AAAA,QACf,gBAAgB;AAAA,UACf,eAAe,IAAI,sBAAsB;AAAA,YACxC,yBAAyB,CAAC,CAAC;AAAA,UAAA,CAC3B;AAAA,QACF;AAAA,MAAA,CACA;AAAA,MACD,IAAI,WAAW;AAAA,QACd,MAAM;AAAA,QACN,OAAO;AAAA,MAAA,CACP;AAAA,MACD,IAAI,WAAW;AAAA,QACd,MAAM;AAAA,QACN,OAAO;AAAA,QACP,eAAe;AAAA,QACf,gBAAgB;AAAA,UACf,MAAM;AAAA,UACN,KAAK;AAAA,QACN;AAAA,MAAA,CACA;AAAA,MACD,IAAI,WAAW;AAAA,QACd,MAAM;AAAA,QACN,OAAO;AAAA,MAAA,CACP;AAAA,MACD,IAAI,WAAW;AAAA,QACd,MAAM;AAAA,QACN,OAAO;AAAA,MAAA,CACP;AAAA,MACD,IAAI,WAAW;AAAA,QACd,MAAM;AAAA,QACN,OAAO;AAAA,QACP,eAAe;AAAA,MAAA,CACf;AAAA,MACD,IAAI,WAAW;AAAA,QACd,MAAM;AAAA,QACN,OAAO;AAAA,MAAA,CACP;AAAA,MACD,IAAI,WAAW;AAAA,QACd,MAAM;AAAA,QACN,OAAO;AAAA,MAAA,CACP;AAAA,MACD,IAAI,WAAW;AAAA,QACd,MAAM;AAAA,QACN,OAAO;AAAA,QACP,eAAe;AAAA,QACf,cAAc,CAAC;AAAA,QACf,gBAAgB;AAAA,UACf,aAAa;AAAA,UACb,WAAW,KAAK,SAAS,IAAI,cAAc;AAAA,UAC3C,UAAU,KAAK,SAAS,IAAI,aAAa;AAAA,UACzC,gBAAgB;AAAA,UAChB,UAAU;AAAA,QACX;AAAA,MAAA,CACA;AAAA,MAED,IAAI,WAAW;AAAA,QACd,MAAM;AAAA,QACN,OAAO;AAAA,QACP,cAAc;AAAA,QACd,UAAU;AAAA,MAAA,CACV;AAAA,MACD,IAAI,WAAW;AAAA,QACd,MAAM;AAAA,QACN,OAAO;AAAA,QACP,cAAc;AAAA,QACd,eAAe;AAAA,QACf,gBAAgB;AAAA,UACf,SAAS;AAAA,YACR,EAAE,OAAO,KAAK,OAAO,EAAE;AAAA,YACvB,EAAE,OAAO,KAAK,OAAO,EAAE;AAAA,UACxB;AAAA,QACD;AAAA,QACA,UAAU;AAAA,MAAA,CACV;AAAA,MACD,IAAI,WAAW;AAAA,QACd,MAAM;AAAA,QACN,OAAO;AAAA,QACP,cAAc;AAAA,QACd,eAAe;AAAA,QACf,gBAAgB;AAAA,UACf,SAAS;AAAA,YACR,EAAE,OAAO,KAAK,OAAO,EAAE;AAAA,YACvB,EAAE,OAAO,KAAK,OAAO,EAAE;AAAA,UACxB;AAAA,QACD;AAAA,QACA,UAAU;AAAA,MAAA,CACV;AAAA,MACD,IAAI,WAAW;AAAA,QACd,MAAM;AAAA,QACN,OAAO;AAAA,QACP,cAAc;AAAA,QACd,eAAe;AAAA,QACf,gBAAgB;AAAA,UACf,SAAS;AAAA,YACR,EAAE,OAAO,KAAK,OAAO,EAAE;AAAA,YACvB,EAAE,OAAO,KAAK,OAAO,EAAE;AAAA,UACxB;AAAA,QACD;AAAA,QACA,UAAU;AAAA,MAAA,CACV;AAAA,MACD,IAAI,WAAW;AAAA,QACd,MAAM;AAAA,QACN,OAAO;AAAA,QACP,cAAc;AAAA,QACd,eAAe;AAAA,QACf,gBAAgB;AAAA,UACf,SAAS;AAAA,YACR,EAAE,OAAO,KAAK,OAAO,EAAE;AAAA,YACvB,EAAE,OAAO,KAAK,OAAO,EAAE;AAAA,UACxB;AAAA,QACD;AAAA,QACA,UAAU;AAAA,MAAA,CACV;AAAA,MACD,IAAI,WAAW;AAAA,QACd,MAAM;AAAA,QACN,OAAO;AAAA,QACP,cAAc;AAAA,QACd,eAAe;AAAA,QACf,gBAAgB;AAAA,UACf,SAAS;AAAA,YACR,EAAE,OAAO,KAAK,OAAO,EAAE;AAAA,YACvB,EAAE,OAAO,KAAK,OAAO,EAAE;AAAA,UACxB;AAAA,QACD;AAAA,QACA,UAAU;AAAA,MAAA,CACV;AAAA,MACD,IAAI,WAAW;AAAA,QACd,MAAM;AAAA,QACN,OAAO;AAAA,QACP,cAAc;AAAA,QACd,eAAe;AAAA,QACf,gBAAgB;AAAA,UACf,SAAS;AAAA,YACR,EAAE,OAAO,KAAK,OAAO,EAAE;AAAA,YACvB,EAAE,OAAO,KAAK,OAAO,EAAE;AAAA,UACxB;AAAA,QACD;AAAA,QACA,UAAU;AAAA,MAAA,CACV;AAAA,MACD,IAAI,WAAW;AAAA,QACd,MAAM;AAAA,QACN,OAAO;AAAA,MAAA,CACP;AAAA,MACD,IAAI,WAAW;AAAA,QACd,MAAM;AAAA,QACN,OAAO;AAAA;AAAA,QAEP,eAAe;AAAA,QACf,gBAAgB;AAAA,UACf,YAAY,CAAC,MAAM;AAAA,QACpB;AAAA,MAAA,CACA;AAAA,MAED,IAAI,iBAAiB;AAAA,QACpB,MAAM;AAAA,QACN,OAAO;AAAA,QACP,sBAAsB;AAAA,QACtB,cAAc,CAAC;AAAA,QACf,YAAY,KAAK,SAAS,IAAI,qBAAqB;AAAA,QACnD,aAAa,KAAK,SAAS,IAAI,sBAAsB;AAAA,MAAA,CACrD;AAAA,IAAA,CACD;AAAA,EACF;AAAA,EAEA,iBAAiB,MAAW;AAC3B,WAAO,KAAK,IAAI,EAAE,QAAQ,CAAC,QAAQ;AAC9B,UAAA,KAAK,GAAG,MAAM,IAAI;AACrB,aAAK,GAAG,IAAI;AAAA,MACb;AAAA,IAAA,CACA;AAED,SAAK,UAAU;AAER,WAAA;AAAA,EACR;AAAA,EACA,QAAQ,MAAiB;AACxB,UAAM,QAAQ,IAAI;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA,EAKA,aAAa,QAAQ,MAAc,QAAgB,IAAY;;AAE9D,QAAI,QAAQ,WAAW;AAEtB,aAAO,QAAMnS,MAAA,YAAa,aAAb,gBAAAA,IAAuB,YAAY,KAAK,GAAG,WAAW,oCAAoC;AAAA,QACtG;AAAA,QAAgB,YAAY,CAAC,EAAE;AAAA,MAAA;AAAA,IAC/B,OAEG;AAEJ,aAAO,QAAMQ,MAAA,YAAa,aAAb,gBAAAA,IAAuB,YAAY,KAAK,GAAG,WAAW,4BAA4B;AAAA,QAC9F;AAAA,QAAgB,YAAY,CAAC,EAAE;AAAA,MAAA;AAAA,IAEjC;AAAA,EACD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,eAAe,MAAc;AAE5B,UAAA,SAAS,KAAK,KAAK;AACnB,UAAA,KAAK,KAAK,KAAK;AAEjB,QAAA,SAAc,MAAM,KAAK;AAEzB,QAAA,OAAO,KAAK,QAAQ,KAAK;AAC5B,eAAS,MAAM,iBAAgB,QAAQ,MAAM,QAAQ,EAAE;AAAA,IACxD;AAEO,WAAA;AAAA,EACR;AACD;AA5PC,cADY,kBACJ,KAA2B;AAD7B,IAAM,kBAAN;ACPA,MAAM,oBAAN,MAAM,2BAAyB2R,kBAC7B,uBAD6BA,KAAS;AAAA,EAG9C,YAAY,UAA2B,IAAI;AACpC,UAAA;AAAA,MACL,MAAM,kBAAiB,eAAe;AAAA,MACtC,YAAY;AAAA,MACZ,GAAG;AAAA,IAAA,CACH;AAAA,EACF;AAAA,EAEA,MAAgB,aAAa;AAC5B,UAAM,MAAM;AACP,SAAA,WAAW,CAAC,IAAI,WAAW,EAAE,MAAM,QAAQ,OAAO,MAAM,UAAU,KAAA,CAAM,GAAG,IAAI,WAAW,EAAE,MAAM,yBAAyB,OAAO,UAAU,CAAC,CAAC;AAAA,EACpJ;AACD;AAdC,cADY,mBACJ,KAA2B;AAD7B,IAAM,mBAAN;ACMA,MAAM,qBAAN,MAAM,4BAA0B1R,mBAC7B,uBAD6BA,KAAU;AAAA,EAE/C,YAAY,UAA0C,IAAI;AAClD,UAAA;AAAA,MACJ,MAAM,mBAAkB,eAAe;AAAA,MACvC,YAAY;AAAA,MACZ,GAAG;AAAA,IAAA,CACJ;AAAA,EACH;AAAA,EAEA,MAAgB,aAAa;AAC3B,UAAM,MAAM;AAEZ,SAAK,WAAW,WAAW;AAAA,MACzB,IAAI,aAAa,EAAE,MAAM,QAAQ,OAAO,MAAM;AAAA,IAAA,CAC/C;AACD,SAAK,WAAW;AAAA,MACjB,IAAI,YAAY,EAAE,MAAM,QAAQ,OAAO,MAAK,OAAM,SAAS;AAAA,MAC3D,IAAI,YAAY,EAAE,MAAM,yBAAyB,OAAO,UAAU;AAAA,MAClE,IAAI,kBAAkB;AAAA,IAAA,CACtB;AAAA,EACD;AACF;AArBE,cADW,oBACH,KAA2B;AAD9B,IAAM,oBAAN;ACDA,MAAM,eAAN,MAAM,sBAAoB0R,kBAExB,uBAFwBA,KAAS;AAAA,EAoFzC,YAAY,UAA2B,IAAI;AACpC,UAAA;AAAA,MACL,MAAM,aAAY,eAAe;AAAA,MACjC,YAAY;AAAA,MACZ,GAAG;AAAA,IAAA,CACH;AAGF,uCAAc,KAAK,SAAS,IAAI,YAAa,CAAA;AAC7C,4CAAmB,KAAK,SAAS,IAAI,iBAAkB,CAAA;AAAA,EAHvD;AAAA;AAAA;AAAA;AAAA,EAvBC,aAAa,QAAQ,QAAc,SAAe;;AAE1C,UAAA,eAAcnS,MAAA,YAAY,aAAZ,gBAAAA,IAAsB;AAE1C,UAAM,WAAW,MAAM,YAAY,KAAK,IAAI,WAAW,yBAAyB;AAAA,MAC9E,SAAS,CAAC,MAAM;AAAA,MAAG,GAAG;AAAA,IAAA,CACvB;AAEG,QAAA,SAAS,KAAK,SAAS,KAAK;AAC9B,eAAS,MAAM,EAAE,SAAS,SAAS,KAAK,KAAK;AAC7C;AAAA,IACF;AAEA,aAAS,QAAQ,EAAE,SAAS,OAAQ,CAAA;AAAA,EAEtC;AAAA,EA0CD,MAAgB,aAAa;AAC5B,QAAI,cAAc,KAAK,YAAY,UAAU,GAAG;AAC/C,YAAM,eAAe,KAAK,YAAY,WAAW,gBAAgB;AAEjE,mBAAa,MAAM;AAEN,mBAAA,aAAa,iBAAiB,MAAM,CAAC;AAAA,IACnD;AAEA,SAAK,gBAAgB,GAAG,CAAC,EAAE,WAAW;AACrC,UAAI,cAAc,KAAK,iBAAiB,UAAU,GAAG;AACpD,cAAM,eAAe,KAAK,iBAAiB,WAAW,gBAAgB;AACtE,qBAAa,MAAM;AACf,YAAA,CAAC,EAAC,6BAAM,KAAI;AACf,uBAAa,aAAa,aAAa,KAAK,6BAAM,EAAE;AAAA,QACrD;AAAA,MACD;AAAA,IAAA,CACA;AAED,UAAM,MAAM;AACZ,SAAK,WAAW;AAAA,MACf,IAAI,WAAW;AAAA,QACd,MAAM;AAAA,QACN,OAAO;AAAA,QACP,eAAe;AAAA,QACf,gBAAgB;AAAA,UACf,gBAAgB;AAAA,UAChB,UAAU,KAAK;AAAA,QAChB;AAAA,MAAA,CACA;AAAA,MACD,IAAI,WAAW;AAAA,QACd,MAAM;AAAA,QACN,OAAO;AAAA,QACP,eAAe;AAAA,QACf,cAAc;AAAA,QACd,gBAAgB;AAAA,UACf,gBAAgB;AAAA,UAChB,WAAW,KAAK,SAAS,IAAI,mBAAmB;AAAA,QACjD;AAAA,QACA,UAAU;AAAA,MAAA,CACV;AAAA,MACD,IAAI,WAAW;AAAA,QACd,MAAM;AAAA,QACN,OAAO;AAAA,QACP,eAAe;AAAA,QACf,gBAAgB;AAAA,UACf,gBAAgB;AAAA,UAChB,WAAW,KAAK;AAAA,QACjB;AAAA,MAAA,CACA;AAAA,MACD,IAAI,WAAW;AAAA,QACd,MAAM;AAAA,QACN,OAAO;AAAA,QACP,UAAU;AAAA,MAAA,CACV;AAAA,MACD,IAAI,WAAW;AAAA,QACd,MAAM;AAAA,QACN,OAAO;AAAA,QACP,UAAU;AAAA,MAAA,CACV;AAAA,MACD,IAAI,WAAW;AAAA,QACd,MAAM;AAAA,QACN,OAAO;AAAA,QACP,SAAS;AAAA,QACT,UAAU;AAAA,MAAA,CACV;AAAA,MACD,IAAI,WAAW;AAAA,QACd,MAAM;AAAA,QACN,OAAO;AAAA,QACP,eAAe;AAAA,QACf,gBAAgB,CAAC;AAAA,MAAA,CACjB;AAAA,MACD,IAAI,WAAW;AAAA,QACd,MAAM;AAAA,QACN,OAAO;AAAA,MAAA,CACP;AAAA,MACD,IAAI,WAAW;AAAA,QACd,MAAM;AAAA,QACN,OAAO;AAAA,QACP,eAAe;AAAA,MAAA,CACf;AAAA,MACD,IAAI,WAAW;AAAA,QACd,MAAM;AAAA,QACN,OAAO;AAAA,MAAA,CACP;AAAA,MACD,IAAI,WAAW;AAAA,QACd,MAAM;AAAA,QACN,OAAO;AAAA,QACP,eAAe;AAAA,MAAA,CACf;AAAA,MACD,IAAI,WAAW;AAAA,QACd,MAAM;AAAA,QACN,OAAO;AAAA,MAAA,CACP;AAAA,MACD,IAAI,WAAW;AAAA,QACd,MAAM;AAAA,QACN,OAAO;AAAA,MAAA,CACP;AAAA,MACD,IAAI,WAAW;AAAA,QACd,MAAM;AAAA,QACN,OAAO;AAAA,QACP,eAAe;AAAA,QACf,gBAAgB;AAAA,UACf,MAAM;AAAA,UACN,MAAM;AAAA,QACP;AAAA,MAAA,CACA;AAAA,MACD,IAAI,WAAW;AAAA,QACd,MAAM;AAAA,QACN,OAAO;AAAA,QACP,cAAc;AAAA,QACd,UAAU;AAAA,MAAA,CACV;AAAA,MACD,IAAI,WAAW;AAAA,QACd,MAAM;AAAA,QACN,OAAO;AAAA,QACP,cAAc;AAAA,QACd,UAAU;AAAA,MAAA,CACV;AAAA,MACD,IAAI,WAAW;AAAA,QACd,MAAM;AAAA,QACN,OAAO;AAAA,QACP,cAAc;AAAA,QACd,eAAe;AAAA,QACf,gBAAgB;AAAA,UACf,SAAS;AAAA,YACR,EAAE,OAAO,KAAK,OAAO,EAAE;AAAA,YACvB,EAAE,OAAO,KAAK,OAAO,EAAE;AAAA,UACxB;AAAA,QACD;AAAA,QACA,UAAU;AAAA,MAAA,CACV;AAAA,MACD,IAAI,WAAW;AAAA,QACd,MAAM;AAAA,QACN,OAAO;AAAA,QACP,cAAc;AAAA,QACd,eAAe;AAAA,QACf,gBAAgB;AAAA,UACf,SAAS;AAAA,YACR,EAAE,OAAO,KAAK,OAAO,EAAE;AAAA,YACvB,EAAE,OAAO,KAAK,OAAO,EAAE;AAAA,UACxB;AAAA,QACD;AAAA,QACA,UAAU;AAAA,MAAA,CACV;AAAA,MACD,IAAI,WAAW;AAAA,QACd,MAAM;AAAA,QACN,OAAO;AAAA,QACP,eAAe;AAAA;AAAA,QAEf,gBAAgB;AAAA,UACf,YAAY,CAAC,MAAM;AAAA,QACpB;AAAA,MAAA,CACA;AAAA,IAAA,CACD;AAIK,UAAA,aAAa,CAAC,UAAkB;AAGrC,UAAI,SAAS,GAAG;AAEf,aAAK,WAAW,EAAE,QAAQ,CAAC,WAAW;AACrC,cAAI,aAAY,qBAAqB,QAAQ,OAAO,IAAI,IAAI,IAAI;AAC/D,mBAAO,UAAU;AAAA,UAAA,OACX;AACN,mBAAO,UAAU;AAAA,UAClB;AAAA,QAAA,CACA;AAAA,MAAA,WACS,SAAS,GAAG;AAEtB,aAAK,WAAW,EAAE,QAAQ,CAAC,WAAW;AACrC,cAAI,aAAY,eAAe,QAAQ,OAAO,IAAI,IAAI,IAAI;AACzD,mBAAO,UAAU;AACjB,iBAAK,KAAK,aAAa;AAAA,UAAA,OACjB;AACN,mBAAO,UAAU;AAAA,UAClB;AAAA,QAAA,CACA;AAAA,MAAA,OACK;AAEN,aAAK,WAAW,EAAE,QAAQ,CAAC,WAAW;AACrC,cAAI,aAAY,kBAAkB,QAAQ,OAAO,IAAI,IAAI,IAAI;AAC5D,mBAAO,UAAU;AAAA,UAAA,OACX;AACN,mBAAO,UAAU;AAAA,UAClB;AAAA,QAAA,CACA;AAAA,MACF;AAAA,IAAA;AAGI,SAAA,yBAAyB,GAAG,CAAC,WAAW;AACxC,UAAA,OAAO,SAAS,QAAQ,iBAAiB;AACjC,mBAAA,OAAO,KAAK,KAAK;AAAA,MAC7B;AAAA,IAAA,CACA;AAAA,EACF;AAAA,EAEA,iBAAiB,MAAW;AAC3B,WAAO,KAAK,IAAI,EAAE,QAAQ,CAAC,QAAQ;AAC9B,UAAA,KAAK,GAAG,MAAM,IAAI;AACrB,aAAK,GAAG,IAAI;AAAA,MACb;AAAA,IAAA,CACA;AACD,QAAI,KAAK,QAAQ;AAChB,WAAK,UAAU;AAAA,IAChB;AAEO,WAAA;AAAA,EACR;AACD;AA7UC,cAFY,cAEJ,KAA2B;AAAA;AAAA;AAAA;AAAA;AAAA;AAOlC,cATW,cASJ,eAAc,CAAC,QAAc,WAA0B;AACxD,MAAA,CAAC,CAAC,QAAQ;AACZ,WAAO,KAAK,QAAQ,WAAW,yBAAyB,MAAM,WAAW,MAAM,EAAE;AAAA,EAAA,OAC5E;AACL,WAAO,KAAK,QAAQ,WAAW,yBAAyB,MAAM,EAAE;AAAA,EAClE;AAAA;AAAA;AAAA;AAAA;AAAA;AAOF,cArBW,cAqBJ,cAAa,YAAY;;AAExB,QAAA,eAAcA,MAAA,YAAY,aAAZ,gBAAAA,IAAsB;AAEtC,MAAA,MAAM,SAAS,QAAQ,EAAE,OAAO,QAAQ,SAAS,aAAa,MAAM,UAAU,CAAC,GAAG;AAEpF,UAAM,WAAW,MAAM,YAAY,KAAK,IAAI,WAAW,sBAAsB;AAEzE,QAAA,SAAS,KAAK,SAAS,KAAK;AAC9B,eAAS,MAAM,EAAE,SAAS,SAAS,KAAK,KAAK;AAC7C;AAAA,IACF;AAEA,aAAS,QAAQ,EAAE,SAAS,OAAQ,CAAA;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA;AAAA;AAQF,cA3CW,cA2CJ,iBAAgB,YAAY;AAE7B,QAAA,cAAc,YAAY,SAAU;AAEtC,MAAA,MAAM,SAAS,QAAQ;AAAA,IACzB,OAAO;AAAA,IACP,SAAS;AAAA,IACT,MAAM;AAAA,EAAA,CACP,GAAG;AAEF,UAAM,WAAW,MAAM,YAAY,KAAK,IAAI,WAAW,yBAAyB;AAE5E,QAAA,SAAS,KAAK,SAAS,KAAK;AAC9B,eAAS,MAAM,EAAE,SAAS,SAAS,KAAK,KAAK;AAC7C;AAAA,IACF;AAEA,aAAS,QAAQ,EAAE,SAAS,OAAQ,CAAA;AAAA,EACtC;AAAA;AAiCD,cA9FY,cA8FL,wBAAuB;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAED,cA3GY,cA2GL,kBAAiB;AAAA,EACvB;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;AAED,cA1HY,cA0HL,qBAAoB,CAAC,cAAc;AA1HpC,IAAM,cAAN;ACDA,MAAM,8BAA8B,YAAW;AAAA,EAEpD,MAAM,OAAO,OAA4B,IAAI;AAE3C,WAAO,EAAE,GAAG,KAAK,MAAM,GAAG,KAAK;AAE3B,QAAA;AAEI,YAAA,KAAK,gBAAmB,GAAA;AAAA,MAC9B,KAAK,aAAa;AACL,mBAAA,MAAM,KAAK,OAAO,IAAI;AACjC;AAAA,MACF,KAAK,aAAa;AACL,mBAAA,MAAM,KAAK,IAAI,IAAI;AAC9B;AAAA,MACF;AACQ,cAAA,IAAI,QAAQ,OAAO,6BAA6B;AAAA,IAC1D;AAEG,QAAA,SAAS,KAAK,QAAQ,KAAI;AACtB,WAAA,WAAW,KAAK,EAAE;AACvB,eAAS,QAAQ,OAAc;AAAA,IACjC;AAEO,WAAA;AAAA,EACT;AAEF;AC/BO,MAAM,wBAAwB,YAAY;AAAA,EAC/C,MAAgB,aAAa;AAC3B,UAAM,MAAM;AACZ,SAAK,WAAW;AAAA,MACd,IAAI,WAAW;AAAA,QACb,MAAM;AAAA,QACN,OAAO;AAAA,QACP,eAAe;AAAA,QACf,cAAc;AAAA,QACd,gBAAgB;AAAA,UACd,WAAW,KAAK;AAAA,YACd,IAAI,kBAAkB;AAAA,UACxB;AAAA,QACF;AAAA,QACA,UAAU;AAAA,MAAA,CACX;AAAA,MACD,IAAI,WAAW;AAAA,QACb,MAAM;AAAA,QACN,OAAO;AAAA,QACP,UAAU;AAAA,MAAA,CACX;AAAA,MACD,IAAI,WAAW;AAAA,QACb,MAAM;AAAA,QACN,OAAO;AAAA,QACP,UAAU;AAAA,MAAA,CACX;AAAA,MACD,IAAI,WAAW;AAAA,QACb,MAAM;AAAA,QACN,OAAO;AAAA,QACP,cAAc;AAAA,QACd,eAAe;AAAA,QACf,gBAAgB;AAAA,UACd,SAAS;AAAA,YACP,EAAE,OAAO,KAAK,OAAO,EAAE;AAAA,YACvB,EAAE,OAAO,KAAK,OAAO,EAAE;AAAA,UACzB;AAAA,QACF;AAAA,QACA,UAAU;AAAA,MAAA,CACX;AAAA,IAAA,CACF;AAAA,EACH;AACF;ACvBA,MAAM,YAAsB,CAAC,WAA6B;AACxD,SAAO,kBAAkB,kBAAkB;AAC3C,SAAO,iBAAiB,iBAAiB;AAEzC,SAAO,kBAAkB,iBAAiB;AAC1C,SAAO,iBAAiB,gBAAgB;AAExC,SAAO,iBAAiB,WAAW;AACnC,SAAO,iBAAiB,WAAW;AAEnC,SAAO,kBAAkB,iBAAiB;AAC1C,SAAO,iBAAiB,gBAAgB;AAExC,SAAO,kBAAkB,YAAY;AACrC,SAAO,iBAAiB,WAAW;AAEnC,SAAO,kBAAkB,gBAAgB;AACzC,SAAO,iBAAiB,eAAe;AAEvC,SAAO,oBAAoB;AAAA,IACzB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,WAAW,MAAM,OAAO,qBAAgC;AAAA,EAAA,CACzD;AAGD,SAAO,oBAAoB;AAAA,IACzB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,WAAW,MAAM,OAAO,qBAAgC;AAAA,EAAA,CACzD;AAGD,SAAO,oBAAoB;AAAA,IACzB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,WAAW,MAAM,OAAO,qBAAgC;AAAA,IACxD,MAAM,EAAE,MAAM,eAAe;AAAA,EAAA,CAC9B;AAGD,SAAO,oBAAoB;AAAA,IACzB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,WAAW,MAAM,OAAO,qCAAgD;AAAA,IACxE,MAAM,EAAE,MAAM,cAAc;AAAA,EAAA,CAC7B;AAGD,SAAO,oBAAoB;AAAA,IACzB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,WAAW,MAAM,OAAO,qBAA0B;AAAA;AAAA,EAAA,CAEnD;AACH;AClDO,SAAS,wBAAwB,OAAsB;;AAC5D,QAAM,SAAgB,CAAA;AAEtB,aAAW,QAAQ,OAAO;AACxB,UAAM,WAAW,KAAK,KAAK,MAAM,GAAG;AAEpC,UAAM,QAA6B;AAAA,MACjC,MAAM,CAAC;AAAA,MACP,GAAG,KAAK,OAAO;AAAA,MACf,KAAK;AAAA,MACL,MAAM;AAAA,MACN,WAAW,YAAY,KAAK;AAAA,MAC5B,UAAU,CAAC;AAAA,IAAA;AAGb,QAAI,SAAS;AAEb,eAAW,WAAW,UAAU;AACxB,YAAA,SAAS,aAAa,OAAO;AAC7B,YAAA,cAAc,OAAO,IAAI,CAAC,EAAE,MAAY,MAAA,KAAK,EAAE,KAAK,EAAE;AAEtD,YAAA,QAAQ,MAAM,OAAO,OAAO;AAE5B,YAAAF,QAAO,MAAM,OAAO,aAAa,MAAM,EAAE,QAAQ,YAAY,GAAG;AACtE,YAAM,QAAQ,OAAO;AAAA,QACnB,CAAC,gBACC,YAAY,QAAQ,MAAM,OAAO,YAAY,SAASA;AAAA,MAAA;AAGtD,UAAA,SAAS,MAAM,UAAU;AAC3B,iBAAS,MAAM;AACf,cAAM,OAAO;AAAA,MACJ,WAAA,gBAAgB,WAAW,CAAC,MAAM,MAAM;AACjD,cAAM,QAAQ;AAAA,MAAA,WACL,gBAAgB,SAAS;AAC5B,cAAA,QAAQ,aAAa,MAAM;AAAA,MACnC;AAAA,IACF;AAEA,UAAM,SAAOE,MAAA,KAAK,OAAO,YAAZ,gBAAAA,IAAqB,SAAQ,MAAM;AAEhD,WAAO,KAAK,KAAK;AAAA,EACnB;AAEA,SAAO,cAAc,MAAM;AAC7B;AAEA,SAAS,aAAa,QAAwB;AAC5C,SAAO,OAAO,OAAO,CAACF,OAAM,UAAU;AACpC,WACEA,SACC,MAAM,SAAS,IACZ,IAAI,MAAM,KAAK,MACf,MAAM,SAAS,IACf,IAAI,MAAM,KAAK,OACf,MAAM,SAAS,IACf,IAAI,MAAM,KAAK,UACf,WAAW,MAAM,KAAK,EAAE,QAAQ,MAAM,KAAK;AAAA,KAEhD,GAAG;AACR;AAEA,MAAM,gBAAgB;AAEtB,SAAS,aAAa,SAAiB;AACrC,MAAI,QAA4B;AAEhC,MAAI,IAAI;AAER,MAAI,SAAS;AACb,QAAM,SAAyB,CAAA;AAE/B,WAAS,gBAAgB;AACvB,QAAI,CAAC,QAAQ;AACX;AAAA,IACF;AAEA,QAAI,UAAU,GAA4B;AAClC,YAAA,IAAI,MAAM,OAAO;AAAA,IACzB;AAEA,WAAO,KAAK;AAAA,MACV,MACE,UAAU,IACN,IACA,UAAU,IACV,IACA,UAAU,IACV,IACA;AAAA,MACN,OAAO;AAAA,IAAA,CACR;AAEQ,aAAA;AAAA,EACX;AAEO,SAAA,IAAI,QAAQ,QAAQ;AACnB,UAAA,IAAI,QAAQ,CAAC;AAEnB,YAAQ,OAAO;AAAA,MACb,KAAK;AACM,iBAAA;AAET,YAAI,MAAM,KAAK;AACL,kBAAA;AAAA,QAAA,OACH;AACL;AACQ,kBAAA;AAAA,QACV;AAEA;AAAA,MACF,KAAK;AACH,YAAI,MAAM,KAAK;AACC;AACN,kBAAA;AAAA,QAAA,OACH;AACK,oBAAA;AAAA,QACZ;AACA;AAAA,MACF,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AACH,YAAI,WAAW,OAAO;AACX,mBAAA;AACD,kBAAA;AAAA,QACV;AAEI,YAAA,MAAM,OAAO,UAAU,GAA4B;AAC7C,kBAAA;AAAA,QACV;AAGE,YAAA,MAAM,QACL,UAAU,KAA+B,QAAQ,IAAI,CAAC,MAAM,MAC7D;AACA,cAAI,CAAC,QAAQ;AACL,kBAAA,IAAI,MAAM,KAAK;AAAA,UACvB;AACc;AACN,kBAAA;AAAA,QACC,WAAA,cAAc,KAAK,CAAC,GAAG;AACtB,oBAAA;AAAA,QACZ;AACA;AAAA,IACJ;AAEA;AAAA,EACF;AAEA,MAAI,UAAU,GAA4B;AACxC,UAAM,IAAI,MAAM,qBAAqB,MAAM,GAAG;AAAA,EAChD;AAEc;AAEP,SAAA;AACT;AAEA,SAAS,eAAe,KAAa,QAAgC;AACnE,aAAW,SAAS,QAAQ;AACtB,QAAA,MAAM,QAAQ,KAAK;AACd,aAAA;AAAA,IACT;AAAA,EACF;AACO,SAAA,eAAe,KAAK,MAAM;AACnC;AAEA,SAAS,cAAc,QAAe,QAAc,OAAO,oBAAI,OAAe;;AAC5E,aAAW,SAAS,QAAQ;AAE1B,QAAI,MAAM,KAAK;AACP,YAAA,MAAM,MAAM,IAAI,QAAQ,YAAY,EAAE,EAAE,QAAQ,OAAO,GAAG;AAEhE,UAAI,KAAK,IAAI,MAAM,GAAG,GAAG;AACvB,cAAM,gBAAgB,eAAe,MAAM,KAAK,MAAM;AACtD,cAAM,SAAQ,+CAAe,QACzB,oBAAoB,cAAc,IAAI,OACtC;AACI,gBAAA;AAAA,UACN,8BAA8B,MAAM,IAAI,MAAM,KAAK;AAAA,QAAA;AAAA,MAEvD;AAAA,IACF;AAEA,UAAM,OAAO,MAAM,KAAK,QAAQ,SAAS,GAAG;AAG5C,QAAI,UAAU,MAAM,KAAK,WAAW,GAAG,GAAG;AACxC,YAAM,OAAO,MAAM,KAAK,MAAM,CAAC;AAAA,IACjC;AAEI,SAAAE,MAAA,MAAM,aAAN,gBAAAA,IAAgB,QAAQ;AAC1B,YAAM,WAAW,cAAc,MAAM,UAAU,OAAO,IAAI;AAAA,IAC5D;AAMA,QAAI,MAAM,KAAK;AACR,WAAA,IAAI,MAAM,GAAG;AAAA,IACpB;AAAA,EACF;AAEO,SAAA;AACT;ACtOA,MAAM,QAAQ,YAAY;AC6Cb,MAAA,kBAAkB,OAAO,YAAsC;AAC1E,QAAM,MAAM,QAAQ;AAEpB,MAAI,IAAI,SAAS;AACjB,MAAI,IAAI,OAAO;AACf,MAAI,IAAI,WAAW;AACnB,MAAI,IAAI,KAAK;AAEP,QAAA,YACJ,QAAQ,aACR,aAAa;AAAA,IACX,SAAS,qBAAqB;AAAA,IAC9B,QAAQ,CAAC;AAAA,EAAA,CACV;AAEH,QAAM,cAAc;AAAA,IAClB,IAAI,YAAY;AAAA,MACd;AAAA,MACA,OAAO,QAAS;AAAA,MAChB,MAAM,QAAS,QAAQ;AAAA,MACvB,aAAa,QAAS,eAAe;AAAA,MACrC,aAAa,QAAQ,eAAe,IAAI,eAAe;AAAA,MACvD,QAAQ,SAAS;AAAA,MACjB,QAAQ,QAAS;AAAA,MACjB;AAAA,MACA,qBAAqB,IAAI,oBAAoB;AAAA,MAC7C,2BAA2B,IAAI,0BAA0B;AAAA,MACzD,oBAAoB,IAAI,mBAAmB;AAAA,MAC3C,sBAAsB,IAAI,qBAAqB;AAAA,MAC/C,uBAAuB,IAAI,qBAAqB;AAAA,IAAA,CACjD;AAAA,EAAA;AAGH,cAAY,UAAU,QAAQ;AAC9B,cAAY,UAAU,SAAS;AAE/B,MAAI,QAAQ,yBAAyB,EAAE,YAAa,CAAA;AAEpD,cAAY,WAAW;AAEtB,SAAe,cAAc;AAE9B,QAAM,SAAS;AAAA,IACb,OAAO,KAAK,QAAQ,MAAM,EAAE,IAAI,CAAC,QAAQ;;AAChC,aAAA;AAAA,QACL,MAAM,IAAI,QAAQ,0BAA0B,CAAC4S,IAAG,MAAM,CAAC;AAAA,QACvD,UAAQ5S,MAAA,QAAQ,OAAO,GAAG,MAAlB,gBAAAA,IAAqB,YAAW,QAAQ,OAAO,GAAG;AAAA,MAAA;AAAA,IAC5D,CACD;AAAA,EAAA;AAGS,cAAA,YAAY,gBAAgB,GAAG,MAAM;AAC/C,eAAW,SAAS,QAAQ;AAC1B,UAAI,MAAM,IAAI,WAAW,OAAO,GAAG;AACrB,oBAAA,YAAY,eAAe,KAAK;AAAA,MAAA,OACvC;AACO,oBAAA,YAAY,cAAc,KAAK;AAAA,MAC7C;AAAA,IACF;AAAA,EAAA,CACD;AAED,QAAM,YAAY;AAEd,MAAA,IAAI,YAAY,SAAS;AAEtB,SAAA;AACT;ACjGO,MAAM,UAAU,UAAU;AAC1B,MAAM,UAAU,UAAU;"}