@maketribe/ms-app 4.0.0-alpha.1 → 4.0.0-alpha.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/404-DWSwF-XG.cjs +11 -0
- package/dist/cjs/404-DWSwF-XG.cjs.map +1 -0
- package/dist/cjs/article-edit-add-page-DMGZ8mH4.cjs +882 -0
- package/dist/cjs/article-edit-add-page-DMGZ8mH4.cjs.map +1 -0
- package/dist/cjs/cms-settings-DIOam34M.cjs +49 -0
- package/dist/cjs/cms-settings-DIOam34M.cjs.map +1 -0
- package/dist/cjs/code-editor-BK6E3jKG.cjs +46 -0
- package/dist/cjs/code-editor-BK6E3jKG.cjs.map +1 -0
- package/dist/cjs/dialog-B947T7vf.cjs +61 -0
- package/dist/cjs/dialog-B947T7vf.cjs.map +1 -0
- package/dist/cjs/dialog-BqZgPcm2.cjs +51 -0
- package/dist/cjs/dialog-BqZgPcm2.cjs.map +1 -0
- package/dist/cjs/dialog-vkfjga6H.cjs +52 -0
- package/dist/cjs/dialog-vkfjga6H.cjs.map +1 -0
- package/dist/cjs/edit-6Zmg9aTH.cjs +65 -0
- package/dist/cjs/edit-6Zmg9aTH.cjs.map +1 -0
- package/dist/cjs/index-64qKudS1.cjs +130 -0
- package/dist/cjs/index-64qKudS1.cjs.map +1 -0
- package/dist/cjs/index-9Oy5JtDM.cjs +62 -0
- package/dist/cjs/index-9Oy5JtDM.cjs.map +1 -0
- package/dist/cjs/index-BFgkbUEa.cjs +406 -0
- package/dist/cjs/index-BFgkbUEa.cjs.map +1 -0
- package/dist/cjs/index-BIjMV8Hr.cjs +125 -0
- package/dist/cjs/index-BIjMV8Hr.cjs.map +1 -0
- package/dist/cjs/index-BKHmJq9t.cjs +110 -0
- package/dist/cjs/index-BKHmJq9t.cjs.map +1 -0
- package/dist/cjs/index-BLEQMNvQ.cjs +393 -0
- package/dist/cjs/index-BLEQMNvQ.cjs.map +1 -0
- package/dist/cjs/index-BM8SqnND.cjs +106 -0
- package/dist/cjs/index-BM8SqnND.cjs.map +1 -0
- package/dist/cjs/index-BSPRCyGW.cjs +36 -0
- package/dist/cjs/index-BSPRCyGW.cjs.map +1 -0
- package/dist/cjs/index-BSdIPRXO.cjs +145 -0
- package/dist/cjs/index-BSdIPRXO.cjs.map +1 -0
- package/dist/cjs/index-BaBoZUBz.cjs +22 -0
- package/dist/cjs/index-BaBoZUBz.cjs.map +1 -0
- package/dist/cjs/index-Br7b64td.cjs +393 -0
- package/dist/cjs/index-Br7b64td.cjs.map +1 -0
- package/dist/cjs/index-BrZdnq8W.cjs +37 -0
- package/dist/cjs/index-BrZdnq8W.cjs.map +1 -0
- package/dist/cjs/index-Bu_g8P0A.cjs +54 -0
- package/dist/cjs/index-Bu_g8P0A.cjs.map +1 -0
- package/dist/cjs/index-C2CjifJI.cjs +93 -0
- package/dist/cjs/index-C2CjifJI.cjs.map +1 -0
- package/dist/cjs/index-C2NSwxxH.cjs +232 -0
- package/dist/cjs/index-C2NSwxxH.cjs.map +1 -0
- package/dist/cjs/index-CAZDWsf3.cjs +35 -0
- package/dist/cjs/index-CAZDWsf3.cjs.map +1 -0
- package/dist/cjs/index-CEHVP61_.cjs +51 -0
- package/dist/cjs/index-CEHVP61_.cjs.map +1 -0
- package/dist/cjs/index-CJiJ6jy7.cjs +21516 -0
- package/dist/cjs/index-CJiJ6jy7.cjs.map +1 -0
- package/dist/cjs/index-CYQny13b.cjs +119 -0
- package/dist/cjs/index-CYQny13b.cjs.map +1 -0
- package/dist/cjs/index-CgY5IPuU.cjs +48 -0
- package/dist/cjs/index-CgY5IPuU.cjs.map +1 -0
- package/dist/cjs/index-Cj3GY0CU.cjs +39 -0
- package/dist/cjs/index-Cj3GY0CU.cjs.map +1 -0
- package/dist/cjs/index-Cr2MyczI.cjs +65 -0
- package/dist/cjs/index-Cr2MyczI.cjs.map +1 -0
- package/dist/cjs/index-CvN_2DSE.cjs +36 -0
- package/dist/cjs/index-CvN_2DSE.cjs.map +1 -0
- package/dist/cjs/index-Cw_e9O7Z.cjs +167 -0
- package/dist/cjs/index-Cw_e9O7Z.cjs.map +1 -0
- package/dist/cjs/index-DB88N2cP.cjs +79 -0
- package/dist/cjs/index-DB88N2cP.cjs.map +1 -0
- package/dist/cjs/index-DHbVriDb.cjs +96 -0
- package/dist/cjs/index-DHbVriDb.cjs.map +1 -0
- package/dist/cjs/index-D_CB0k2e.cjs +53 -0
- package/dist/cjs/index-D_CB0k2e.cjs.map +1 -0
- package/dist/cjs/index-Ddqk3hMe.cjs +127 -0
- package/dist/cjs/index-Ddqk3hMe.cjs.map +1 -0
- package/dist/cjs/index-DjP1khaa.cjs +74 -0
- package/dist/cjs/index-DjP1khaa.cjs.map +1 -0
- package/dist/cjs/index-Dl_nvllQ.cjs +96 -0
- package/dist/cjs/index-Dl_nvllQ.cjs.map +1 -0
- package/dist/cjs/index-DmsVtl33.cjs +200 -0
- package/dist/cjs/index-DmsVtl33.cjs.map +1 -0
- package/dist/cjs/index-Dv6z6LqI.cjs +416 -0
- package/dist/cjs/index-Dv6z6LqI.cjs.map +1 -0
- package/dist/cjs/index-RjnvS-h4.cjs +64 -0
- package/dist/cjs/index-RjnvS-h4.cjs.map +1 -0
- package/dist/cjs/index-T3Vf8XMJ.cjs +49 -0
- package/dist/cjs/index-T3Vf8XMJ.cjs.map +1 -0
- package/dist/cjs/index-YRbQttqL.cjs +20 -0
- package/dist/cjs/index-YRbQttqL.cjs.map +1 -0
- package/dist/cjs/index-oxaOb3VO.cjs +1605 -0
- package/dist/cjs/index-oxaOb3VO.cjs.map +1 -0
- package/dist/cjs/index-qBBjmPWr.cjs +54 -0
- package/dist/cjs/index-qBBjmPWr.cjs.map +1 -0
- package/dist/cjs/index-tJqqtY57.cjs +39 -0
- package/dist/cjs/index-tJqqtY57.cjs.map +1 -0
- package/dist/cjs/index-x4E7Eggf.cjs +34 -0
- package/dist/cjs/index-x4E7Eggf.cjs.map +1 -0
- package/dist/cjs/index.js +231 -427
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/index.vue_vue_type_script_setup_true_lang-D8YMnc_N.cjs +1551 -0
- package/dist/cjs/index.vue_vue_type_script_setup_true_lang-D8YMnc_N.cjs.map +1 -0
- package/dist/cjs/json-editor-DcwX0iMa.cjs +43 -0
- package/dist/cjs/json-editor-DcwX0iMa.cjs.map +1 -0
- package/dist/cjs/markdown-editor-8CPE3qxN.cjs +74 -0
- package/dist/cjs/markdown-editor-8CPE3qxN.cjs.map +1 -0
- package/dist/cjs/normal-BRUVTnIj.cjs +71 -0
- package/dist/cjs/normal-BRUVTnIj.cjs.map +1 -0
- package/dist/cjs/normal-Dr8AYe2r.cjs +61 -0
- package/dist/cjs/normal-Dr8AYe2r.cjs.map +1 -0
- package/dist/cjs/permission-manage-DeDXlRil.cjs +265 -0
- package/dist/cjs/permission-manage-DeDXlRil.cjs.map +1 -0
- package/dist/cjs/resource-select-input-DK-y2auR.cjs +51 -0
- package/dist/cjs/resource-select-input-DK-y2auR.cjs.map +1 -0
- package/dist/cjs/style.css +18 -15179
- package/dist/cjs/table-C3yMZ6mu.cjs +70 -0
- package/dist/cjs/table-C3yMZ6mu.cjs.map +1 -0
- package/dist/cjs/use-condition-BsNGbgF4.cjs +17 -0
- package/dist/cjs/use-condition-BsNGbgF4.cjs.map +1 -0
- package/dist/esm/404-D5XFfiHo.js +11 -0
- package/dist/esm/404-D5XFfiHo.js.map +1 -0
- package/dist/esm/article-edit-add-page-AeJ2loBa.js +882 -0
- package/dist/esm/article-edit-add-page-AeJ2loBa.js.map +1 -0
- package/dist/esm/cms-settings-DHQmoLKI.js +50 -0
- package/dist/esm/cms-settings-DHQmoLKI.js.map +1 -0
- package/dist/esm/code-editor-CvI_XMp5.js +46 -0
- package/dist/esm/code-editor-CvI_XMp5.js.map +1 -0
- package/dist/esm/dialog-BQtjgY66.js +52 -0
- package/dist/esm/dialog-BQtjgY66.js.map +1 -0
- package/dist/esm/dialog-CPR8_y9H.js +61 -0
- package/dist/esm/dialog-CPR8_y9H.js.map +1 -0
- package/dist/esm/dialog-Cb7Lps0k.js +51 -0
- package/dist/esm/dialog-Cb7Lps0k.js.map +1 -0
- package/dist/esm/edit-Bk7te-2r.js +65 -0
- package/dist/esm/edit-Bk7te-2r.js.map +1 -0
- package/dist/esm/index-84gxgRCL.js +127 -0
- package/dist/esm/index-84gxgRCL.js.map +1 -0
- package/dist/esm/index-8H_Cvlt6.js +62 -0
- package/dist/esm/index-8H_Cvlt6.js.map +1 -0
- package/dist/esm/index-8jPb4Wj9.js +110 -0
- package/dist/esm/index-8jPb4Wj9.js.map +1 -0
- package/dist/esm/index-B0JN-XM8.js +36 -0
- package/dist/esm/index-B0JN-XM8.js.map +1 -0
- package/dist/esm/index-B0iifroA.js +232 -0
- package/dist/esm/index-B0iifroA.js.map +1 -0
- package/dist/esm/index-B4r9F3Zh.js +22 -0
- package/dist/esm/index-B4r9F3Zh.js.map +1 -0
- package/dist/esm/index-BSvkrpO1.js +416 -0
- package/dist/esm/index-BSvkrpO1.js.map +1 -0
- package/dist/esm/index-BZ4nk74T.js +106 -0
- package/dist/esm/index-BZ4nk74T.js.map +1 -0
- package/dist/esm/index-BZDkvIT8.js +51 -0
- package/dist/esm/index-BZDkvIT8.js.map +1 -0
- package/dist/esm/index-Bus0Ed53.js +108 -0
- package/dist/esm/index-Bus0Ed53.js.map +1 -0
- package/dist/esm/index-C-nug2my.js +54 -0
- package/dist/esm/index-C-nug2my.js.map +1 -0
- package/dist/esm/index-C8z_gFCT.js +39 -0
- package/dist/esm/index-C8z_gFCT.js.map +1 -0
- package/dist/esm/index-CPBRsmn3.js +49 -0
- package/dist/esm/index-CPBRsmn3.js.map +1 -0
- package/dist/esm/index-CYsTe22K.js +34 -0
- package/dist/esm/index-CYsTe22K.js.map +1 -0
- package/dist/esm/index-CZs0cX5Z.js +48 -0
- package/dist/esm/index-CZs0cX5Z.js.map +1 -0
- package/dist/esm/index-CgCwBVWj.js +65 -0
- package/dist/esm/index-CgCwBVWj.js.map +1 -0
- package/dist/esm/index-Cmc71fzA.js +119 -0
- package/dist/esm/index-Cmc71fzA.js.map +1 -0
- package/dist/esm/index-CpnOCrKn.js +130 -0
- package/dist/esm/index-CpnOCrKn.js.map +1 -0
- package/dist/esm/index-CvV8qbPg.js +54 -0
- package/dist/esm/index-CvV8qbPg.js.map +1 -0
- package/dist/esm/index-Cx70jXqW.js +1605 -0
- package/dist/esm/index-Cx70jXqW.js.map +1 -0
- package/dist/esm/index-Cxr1pm2r.js +406 -0
- package/dist/esm/index-Cxr1pm2r.js.map +1 -0
- package/dist/esm/index-D0XxzoBI.js +393 -0
- package/dist/esm/index-D0XxzoBI.js.map +1 -0
- package/dist/esm/index-DCRMtVnn.js +35 -0
- package/dist/esm/index-DCRMtVnn.js.map +1 -0
- package/dist/esm/index-DVjlAsMm.js +53 -0
- package/dist/esm/index-DVjlAsMm.js.map +1 -0
- package/dist/esm/index-Dqckp6RL.js +145 -0
- package/dist/esm/index-Dqckp6RL.js.map +1 -0
- package/dist/esm/index-DulOSNCq.js +96 -0
- package/dist/esm/index-DulOSNCq.js.map +1 -0
- package/dist/esm/index-ELFtoTxz.js +36 -0
- package/dist/esm/index-ELFtoTxz.js.map +1 -0
- package/dist/esm/index-UGKoGZpd.js +64 -0
- package/dist/esm/index-UGKoGZpd.js.map +1 -0
- package/dist/esm/index-VZNiNwyo.js +96 -0
- package/dist/esm/index-VZNiNwyo.js.map +1 -0
- package/dist/esm/index-WK-zyRhV.js +37 -0
- package/dist/esm/index-WK-zyRhV.js.map +1 -0
- package/dist/esm/index-WLPh41ZY.js +93 -0
- package/dist/esm/index-WLPh41ZY.js.map +1 -0
- package/dist/esm/index-Y7lD4xpK.js +20 -0
- package/dist/esm/index-Y7lD4xpK.js.map +1 -0
- package/dist/esm/index-YO7GGbnc.js +39 -0
- package/dist/esm/index-YO7GGbnc.js.map +1 -0
- package/dist/esm/index-_hBIn8hO.js +79 -0
- package/dist/esm/index-_hBIn8hO.js.map +1 -0
- package/dist/esm/index-mNJ5Nh1F.js +200 -0
- package/dist/esm/index-mNJ5Nh1F.js.map +1 -0
- package/dist/esm/index-mq3nYYwD.js +21501 -0
- package/dist/esm/index-mq3nYYwD.js.map +1 -0
- package/dist/esm/index-p8vYirVH.js +74 -0
- package/dist/esm/index-p8vYirVH.js.map +1 -0
- package/dist/esm/index-pWRDGnCA.js +393 -0
- package/dist/esm/index-pWRDGnCA.js.map +1 -0
- package/dist/esm/index-pzNnwUiS.js +167 -0
- package/dist/esm/index-pzNnwUiS.js.map +1 -0
- package/dist/esm/index.js +232 -428
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/index.vue_vue_type_script_setup_true_lang-Bfxqixud.js +1552 -0
- package/dist/esm/index.vue_vue_type_script_setup_true_lang-Bfxqixud.js.map +1 -0
- package/dist/esm/json-editor-wqz1RgJf.js +43 -0
- package/dist/esm/json-editor-wqz1RgJf.js.map +1 -0
- package/dist/esm/markdown-editor-DI3xA77v.js +74 -0
- package/dist/esm/markdown-editor-DI3xA77v.js.map +1 -0
- package/dist/esm/normal-BSDfzy52.js +61 -0
- package/dist/esm/normal-BSDfzy52.js.map +1 -0
- package/dist/esm/normal-kBdt-_xr.js +71 -0
- package/dist/esm/normal-kBdt-_xr.js.map +1 -0
- package/dist/esm/permission-manage-B7Gr83rb.js +265 -0
- package/dist/esm/permission-manage-B7Gr83rb.js.map +1 -0
- package/dist/esm/resource-select-input-Cm9nIaHj.js +51 -0
- package/dist/esm/resource-select-input-Cm9nIaHj.js.map +1 -0
- package/dist/esm/style.css +18 -15179
- package/dist/esm/table-BeLB_exN.js +70 -0
- package/dist/esm/table-BeLB_exN.js.map +1 -0
- package/dist/esm/use-condition-CM-TzG8I.js +18 -0
- package/dist/esm/use-condition-CM-TzG8I.js.map +1 -0
- package/dist/types/index.d.ts +1 -0
- package/package.json +3 -3
- package/dist/cjs/_virtual/_plugin-vue_export-helper.js +0 -10
- package/dist/cjs/_virtual/_plugin-vue_export-helper.js.map +0 -1
- package/dist/cjs/assets/iconfonts/iconfont.js +0 -38
- package/dist/cjs/assets/iconfonts/iconfont.js.map +0 -1
- package/dist/cjs/assets/iconfonts/oa-iconfont.js +0 -38
- package/dist/cjs/assets/iconfonts/oa-iconfont.js.map +0 -1
- package/dist/cjs/assets/styles/resources/utils.scss.js +0 -2
- package/dist/cjs/assets/styles/resources/utils.scss.js.map +0 -1
- package/dist/cjs/assets/styles/resources/variables.scss.js +0 -2
- package/dist/cjs/assets/styles/resources/variables.scss.js.map +0 -1
- package/dist/cjs/components/abstract/abstract-select/abstract-select-options.js +0 -47
- package/dist/cjs/components/abstract/abstract-select/abstract-select-options.js.map +0 -1
- package/dist/cjs/components/abstract/abstract-select/abstract-select.js +0 -156
- package/dist/cjs/components/abstract/abstract-select/abstract-select.js.map +0 -1
- package/dist/cjs/components/abstract/abstract-select/index.js +0 -10
- package/dist/cjs/components/abstract/abstract-select/index.js.map +0 -1
- package/dist/cjs/components/basic/button/button-options.js +0 -35
- package/dist/cjs/components/basic/button/button-options.js.map +0 -1
- package/dist/cjs/components/basic/button/button.js +0 -36
- package/dist/cjs/components/basic/button/button.js.map +0 -1
- package/dist/cjs/components/basic/button/index.js +0 -10
- package/dist/cjs/components/basic/button/index.js.map +0 -1
- package/dist/cjs/components/basic/code-editor/code-editor-options.js +0 -23
- package/dist/cjs/components/basic/code-editor/code-editor-options.js.map +0 -1
- package/dist/cjs/components/basic/code-editor/code-editor.js +0 -28
- package/dist/cjs/components/basic/code-editor/code-editor.js.map +0 -1
- package/dist/cjs/components/basic/code-editor/index.js +0 -11
- package/dist/cjs/components/basic/code-editor/index.js.map +0 -1
- package/dist/cjs/components/basic/config-provider/config-provider-options.js +0 -27
- package/dist/cjs/components/basic/config-provider/config-provider-options.js.map +0 -1
- package/dist/cjs/components/basic/config-provider/config-provider.js +0 -32
- package/dist/cjs/components/basic/config-provider/config-provider.js.map +0 -1
- package/dist/cjs/components/basic/config-provider/constants.js +0 -5
- package/dist/cjs/components/basic/config-provider/constants.js.map +0 -1
- package/dist/cjs/components/basic/config-provider/index.js +0 -11
- package/dist/cjs/components/basic/config-provider/index.js.map +0 -1
- package/dist/cjs/components/basic/config-provider/use-global-config.js +0 -39
- package/dist/cjs/components/basic/config-provider/use-global-config.js.map +0 -1
- package/dist/cjs/components/basic/copy-container/copy-container.js +0 -40
- package/dist/cjs/components/basic/copy-container/copy-container.js.map +0 -1
- package/dist/cjs/components/basic/copy-container/index.js +0 -8
- package/dist/cjs/components/basic/copy-container/index.js.map +0 -1
- package/dist/cjs/components/basic/data-select/data-select-options.js +0 -31
- package/dist/cjs/components/basic/data-select/data-select-options.js.map +0 -1
- package/dist/cjs/components/basic/data-select/data-select.js +0 -95
- package/dist/cjs/components/basic/data-select/data-select.js.map +0 -1
- package/dist/cjs/components/basic/data-select/index.js +0 -11
- package/dist/cjs/components/basic/data-select/index.js.map +0 -1
- package/dist/cjs/components/basic/data-table-select/data-table-select-options.js +0 -24
- package/dist/cjs/components/basic/data-table-select/data-table-select-options.js.map +0 -1
- package/dist/cjs/components/basic/data-table-select/data-table-select.js +0 -79
- package/dist/cjs/components/basic/data-table-select/data-table-select.js.map +0 -1
- package/dist/cjs/components/basic/data-table-select/index.js +0 -8
- package/dist/cjs/components/basic/data-table-select/index.js.map +0 -1
- package/dist/cjs/components/basic/data-tree-select/data-tree-select-options.js +0 -38
- package/dist/cjs/components/basic/data-tree-select/data-tree-select-options.js.map +0 -1
- package/dist/cjs/components/basic/data-tree-select/data-tree-select.js +0 -92
- package/dist/cjs/components/basic/data-tree-select/data-tree-select.js.map +0 -1
- package/dist/cjs/components/basic/data-tree-select/index.js +0 -11
- package/dist/cjs/components/basic/data-tree-select/index.js.map +0 -1
- package/dist/cjs/components/basic/date-picker/date-picker-options.js +0 -28
- package/dist/cjs/components/basic/date-picker/date-picker-options.js.map +0 -1
- package/dist/cjs/components/basic/date-picker/date-picker.js +0 -48
- package/dist/cjs/components/basic/date-picker/date-picker.js.map +0 -1
- package/dist/cjs/components/basic/date-picker/index.js +0 -12
- package/dist/cjs/components/basic/date-picker/index.js.map +0 -1
- package/dist/cjs/components/basic/doc-editor/editor.vue.js +0 -7
- package/dist/cjs/components/basic/doc-editor/editor.vue.js.map +0 -1
- package/dist/cjs/components/basic/doc-editor/editor.vue2.js +0 -81
- package/dist/cjs/components/basic/doc-editor/editor.vue2.js.map +0 -1
- package/dist/cjs/components/basic/doc-editor/index.js +0 -8
- package/dist/cjs/components/basic/doc-editor/index.js.map +0 -1
- package/dist/cjs/components/basic/dynamic-form-panel/DynamicFormPanel.js +0 -76
- package/dist/cjs/components/basic/dynamic-form-panel/DynamicFormPanel.js.map +0 -1
- package/dist/cjs/components/basic/dynamic-form-panel/dialog.js +0 -42
- package/dist/cjs/components/basic/dynamic-form-panel/dialog.js.map +0 -1
- package/dist/cjs/components/basic/dynamic-form-panel/utils.js +0 -11
- package/dist/cjs/components/basic/dynamic-form-panel/utils.js.map +0 -1
- package/dist/cjs/components/basic/icon-select/icon-select-options.js +0 -19
- package/dist/cjs/components/basic/icon-select/icon-select-options.js.map +0 -1
- package/dist/cjs/components/basic/icon-select/icon-select.js +0 -96
- package/dist/cjs/components/basic/icon-select/icon-select.js.map +0 -1
- package/dist/cjs/components/basic/icon-select/index.js +0 -8
- package/dist/cjs/components/basic/icon-select/index.js.map +0 -1
- package/dist/cjs/components/basic/image-cropper/image-cropper-api.js +0 -65
- package/dist/cjs/components/basic/image-cropper/image-cropper-api.js.map +0 -1
- package/dist/cjs/components/basic/image-cropper/image-cropper-content-options.js +0 -20
- package/dist/cjs/components/basic/image-cropper/image-cropper-content-options.js.map +0 -1
- package/dist/cjs/components/basic/image-cropper/image-cropper-content.js +0 -206
- package/dist/cjs/components/basic/image-cropper/image-cropper-content.js.map +0 -1
- package/dist/cjs/components/basic/image-cropper/index.js +0 -15
- package/dist/cjs/components/basic/image-cropper/index.js.map +0 -1
- package/dist/cjs/components/basic/json-editor/index.js +0 -11
- package/dist/cjs/components/basic/json-editor/index.js.map +0 -1
- package/dist/cjs/components/basic/json-editor/json-editor-options.js +0 -19
- package/dist/cjs/components/basic/json-editor/json-editor-options.js.map +0 -1
- package/dist/cjs/components/basic/json-editor/json-editor.js +0 -29
- package/dist/cjs/components/basic/json-editor/json-editor.js.map +0 -1
- package/dist/cjs/components/basic/lexical-editor/DocTheme.js +0 -106
- package/dist/cjs/components/basic/lexical-editor/DocTheme.js.map +0 -1
- package/dist/cjs/components/basic/lexical-editor/LexicalComposer.vue.js +0 -103
- package/dist/cjs/components/basic/lexical-editor/LexicalComposer.vue.js.map +0 -1
- package/dist/cjs/components/basic/lexical-editor/LexicalComposer.vue3.js +0 -5
- package/dist/cjs/components/basic/lexical-editor/LexicalComposer.vue3.js.map +0 -1
- package/dist/cjs/components/basic/lexical-editor/assets/doc-editor-stage.css.js +0 -4
- package/dist/cjs/components/basic/lexical-editor/assets/doc-editor-stage.css.js.map +0 -1
- package/dist/cjs/components/basic/lexical-editor/assets/doc-editor.css.js +0 -4
- package/dist/cjs/components/basic/lexical-editor/assets/doc-editor.css.js.map +0 -1
- package/dist/cjs/components/basic/lexical-editor/assets/iconfont.js +0 -37
- package/dist/cjs/components/basic/lexical-editor/assets/iconfont.js.map +0 -1
- package/dist/cjs/components/basic/lexical-editor/composables/lexicalEditor.js +0 -193
- package/dist/cjs/components/basic/lexical-editor/composables/lexicalEditor.js.map +0 -1
- package/dist/cjs/components/basic/lexical-editor/composables/listenerManager.js +0 -18
- package/dist/cjs/components/basic/lexical-editor/composables/listenerManager.js.map +0 -1
- package/dist/cjs/components/basic/lexical-editor/composables/useCharacterLimit.js +0 -187
- package/dist/cjs/components/basic/lexical-editor/composables/useCharacterLimit.js.map +0 -1
- package/dist/cjs/components/basic/lexical-editor/composables/useElementBlockSelection.js +0 -56
- package/dist/cjs/components/basic/lexical-editor/composables/useElementBlockSelection.js.map +0 -1
- package/dist/cjs/components/basic/lexical-editor/composables/useLexicalCommandsLog.js +0 -37
- package/dist/cjs/components/basic/lexical-editor/composables/useLexicalCommandsLog.js.map +0 -1
- package/dist/cjs/components/basic/lexical-editor/composables/useLexicalEditorState.js +0 -237
- package/dist/cjs/components/basic/lexical-editor/composables/useLexicalEditorState.js.map +0 -1
- package/dist/cjs/components/basic/lexical-editor/composables/useLexicalIsTextContentEmpty.js +0 -21
- package/dist/cjs/components/basic/lexical-editor/composables/useLexicalIsTextContentEmpty.js.map +0 -1
- package/dist/cjs/components/basic/lexical-editor/composables/useTableOfContents.js +0 -176
- package/dist/cjs/components/basic/lexical-editor/composables/useTableOfContents.js.map +0 -1
- package/dist/cjs/components/basic/lexical-editor/composables/utils.js +0 -24
- package/dist/cjs/components/basic/lexical-editor/composables/utils.js.map +0 -1
- package/dist/cjs/components/basic/lexical-editor/nodes/HtmlElementDecoratorNode.js +0 -187
- package/dist/cjs/components/basic/lexical-editor/nodes/HtmlElementDecoratorNode.js.map +0 -1
- package/dist/cjs/components/basic/lexical-editor/nodes/HtmlElementNode.js +0 -159
- package/dist/cjs/components/basic/lexical-editor/nodes/HtmlElementNode.js.map +0 -1
- package/dist/cjs/components/basic/lexical-editor/nodes/ImageNode.js +0 -138
- package/dist/cjs/components/basic/lexical-editor/nodes/ImageNode.js.map +0 -1
- package/dist/cjs/components/basic/lexical-editor/nodes/ImageTextWarpNode.js +0 -120
- package/dist/cjs/components/basic/lexical-editor/nodes/ImageTextWarpNode.js.map +0 -1
- package/dist/cjs/components/basic/lexical-editor/nodes/ModuleDecoratorNode.js +0 -195
- package/dist/cjs/components/basic/lexical-editor/nodes/ModuleDecoratorNode.js.map +0 -1
- package/dist/cjs/components/basic/lexical-editor/nodes/ModuleDecoratorWarpNode.js +0 -76
- package/dist/cjs/components/basic/lexical-editor/nodes/ModuleDecoratorWarpNode.js.map +0 -1
- package/dist/cjs/components/basic/lexical-editor/nodes/Template.js +0 -8
- package/dist/cjs/components/basic/lexical-editor/nodes/Template.js.map +0 -1
- package/dist/cjs/components/basic/lexical-editor/nodes/index.js +0 -45
- package/dist/cjs/components/basic/lexical-editor/nodes/index.js.map +0 -1
- package/dist/cjs/components/basic/lexical-editor/plugins/AutoFocusPlugin.vue.js +0 -45
- package/dist/cjs/components/basic/lexical-editor/plugins/AutoFocusPlugin.vue.js.map +0 -1
- package/dist/cjs/components/basic/lexical-editor/plugins/AutoFocusPlugin.vue2.js +0 -4
- package/dist/cjs/components/basic/lexical-editor/plugins/AutoFocusPlugin.vue2.js.map +0 -1
- package/dist/cjs/components/basic/lexical-editor/plugins/CheckListPlugin.js +0 -213
- package/dist/cjs/components/basic/lexical-editor/plugins/CheckListPlugin.js.map +0 -1
- package/dist/cjs/components/basic/lexical-editor/plugins/ElementBlockSelectionPlugin.vue.js +0 -7
- package/dist/cjs/components/basic/lexical-editor/plugins/ElementBlockSelectionPlugin.vue.js.map +0 -1
- package/dist/cjs/components/basic/lexical-editor/plugins/ElementBlockSelectionPlugin.vue3.js +0 -386
- package/dist/cjs/components/basic/lexical-editor/plugins/ElementBlockSelectionPlugin.vue3.js.map +0 -1
- package/dist/cjs/components/basic/lexical-editor/plugins/HashtagPlugin.js +0 -73
- package/dist/cjs/components/basic/lexical-editor/plugins/HashtagPlugin.js.map +0 -1
- package/dist/cjs/components/basic/lexical-editor/plugins/HistoryPlugin.vue.js +0 -38
- package/dist/cjs/components/basic/lexical-editor/plugins/HistoryPlugin.vue.js.map +0 -1
- package/dist/cjs/components/basic/lexical-editor/plugins/HistoryPlugin.vue2.js +0 -4
- package/dist/cjs/components/basic/lexical-editor/plugins/HistoryPlugin.vue2.js.map +0 -1
- package/dist/cjs/components/basic/lexical-editor/plugins/ListPlugin.js +0 -95
- package/dist/cjs/components/basic/lexical-editor/plugins/ListPlugin.js.map +0 -1
- package/dist/cjs/components/basic/lexical-editor/plugins/NodeTreeViewPlugin.vue.js +0 -7
- package/dist/cjs/components/basic/lexical-editor/plugins/NodeTreeViewPlugin.vue.js.map +0 -1
- package/dist/cjs/components/basic/lexical-editor/plugins/NodeTreeViewPlugin.vue3.js +0 -100
- package/dist/cjs/components/basic/lexical-editor/plugins/NodeTreeViewPlugin.vue3.js.map +0 -1
- package/dist/cjs/components/basic/lexical-editor/plugins/RichTextEditorPlugin.js +0 -401
- package/dist/cjs/components/basic/lexical-editor/plugins/RichTextEditorPlugin.js.map +0 -1
- package/dist/cjs/components/basic/lexical-editor/plugins/TabIndentationPlugin.vue.js +0 -44
- package/dist/cjs/components/basic/lexical-editor/plugins/TabIndentationPlugin.vue.js.map +0 -1
- package/dist/cjs/components/basic/lexical-editor/plugins/TabIndentationPlugin.vue2.js +0 -4
- package/dist/cjs/components/basic/lexical-editor/plugins/TabIndentationPlugin.vue2.js.map +0 -1
- package/dist/cjs/components/basic/lexical-editor/plugins/TablePlugin.js +0 -137
- package/dist/cjs/components/basic/lexical-editor/plugins/TablePlugin.js.map +0 -1
- package/dist/cjs/components/basic/lexical-editor/plugins/ToolbarPlugin.vue.js +0 -8
- package/dist/cjs/components/basic/lexical-editor/plugins/ToolbarPlugin.vue.js.map +0 -1
- package/dist/cjs/components/basic/lexical-editor/plugins/ToolbarPlugin.vue4.js +0 -433
- package/dist/cjs/components/basic/lexical-editor/plugins/ToolbarPlugin.vue4.js.map +0 -1
- package/dist/cjs/components/basic/lexical-editor/stage/ContentEditable.vue.js +0 -82
- package/dist/cjs/components/basic/lexical-editor/stage/ContentEditable.vue.js.map +0 -1
- package/dist/cjs/components/basic/lexical-editor/stage/ContentEditable.vue2.js +0 -4
- package/dist/cjs/components/basic/lexical-editor/stage/ContentEditable.vue2.js.map +0 -1
- package/dist/cjs/components/basic/lexical-editor/stage/DecoratedTeleports.js +0 -45
- package/dist/cjs/components/basic/lexical-editor/stage/DecoratedTeleports.js.map +0 -1
- package/dist/cjs/components/basic/lexical-editor/stage/composables.js +0 -42
- package/dist/cjs/components/basic/lexical-editor/stage/composables.js.map +0 -1
- package/dist/cjs/components/basic/lexical-editor/stage/index.js +0 -4
- package/dist/cjs/components/basic/lexical-editor/stage/index.js.map +0 -1
- package/dist/cjs/components/basic/lexical-editor/stage/index.vue.js +0 -7
- package/dist/cjs/components/basic/lexical-editor/stage/index.vue.js.map +0 -1
- package/dist/cjs/components/basic/lexical-editor/stage/index.vue3.js +0 -133
- package/dist/cjs/components/basic/lexical-editor/stage/index.vue3.js.map +0 -1
- package/dist/cjs/components/basic/lexical-editor/utils/css.js +0 -27
- package/dist/cjs/components/basic/lexical-editor/utils/css.js.map +0 -1
- package/dist/cjs/components/basic/lexical-editor/utils/html.js +0 -227
- package/dist/cjs/components/basic/lexical-editor/utils/html.js.map +0 -1
- package/dist/cjs/components/basic/lexical-editor/utils/image.js +0 -342
- package/dist/cjs/components/basic/lexical-editor/utils/image.js.map +0 -1
- package/dist/cjs/components/basic/lexical-editor/utils/link-edit-dialog.js +0 -51
- package/dist/cjs/components/basic/lexical-editor/utils/link-edit-dialog.js.map +0 -1
- package/dist/cjs/components/basic/lexical-editor/utils/module.js +0 -90
- package/dist/cjs/components/basic/lexical-editor/utils/module.js.map +0 -1
- package/dist/cjs/components/basic/lexical-editor/utils/template.js +0 -133
- package/dist/cjs/components/basic/lexical-editor/utils/template.js.map +0 -1
- package/dist/cjs/components/basic/lexical-editor/utils/url.js +0 -21
- package/dist/cjs/components/basic/lexical-editor/utils/url.js.map +0 -1
- package/dist/cjs/components/basic/page-container/index.js +0 -8
- package/dist/cjs/components/basic/page-container/index.js.map +0 -1
- package/dist/cjs/components/basic/page-container/page-container.vue.js +0 -7
- package/dist/cjs/components/basic/page-container/page-container.vue.js.map +0 -1
- package/dist/cjs/components/basic/page-container/page-container.vue2.js +0 -16
- package/dist/cjs/components/basic/page-container/page-container.vue2.js.map +0 -1
- package/dist/cjs/components/basic/pagination/index.js +0 -11
- package/dist/cjs/components/basic/pagination/index.js.map +0 -1
- package/dist/cjs/components/basic/pagination/pagination-options.js +0 -28
- package/dist/cjs/components/basic/pagination/pagination-options.js.map +0 -1
- package/dist/cjs/components/basic/pagination/pagination.js +0 -39
- package/dist/cjs/components/basic/pagination/pagination.js.map +0 -1
- package/dist/cjs/components/basic/radio/index.js +0 -11
- package/dist/cjs/components/basic/radio/index.js.map +0 -1
- package/dist/cjs/components/basic/radio/radio-options.js +0 -34
- package/dist/cjs/components/basic/radio/radio-options.js.map +0 -1
- package/dist/cjs/components/basic/radio/radio.js +0 -60
- package/dist/cjs/components/basic/radio/radio.js.map +0 -1
- package/dist/cjs/components/basic/svg-icon/index.js +0 -8
- package/dist/cjs/components/basic/svg-icon/index.js.map +0 -1
- package/dist/cjs/components/basic/svg-icon/svg-icon.vue.js +0 -93
- package/dist/cjs/components/basic/svg-icon/svg-icon.vue.js.map +0 -1
- package/dist/cjs/components/basic/svg-icon/svg-icon.vue2.js +0 -4
- package/dist/cjs/components/basic/svg-icon/svg-icon.vue2.js.map +0 -1
- package/dist/cjs/components/basic/system-provider/index.js +0 -8
- package/dist/cjs/components/basic/system-provider/index.js.map +0 -1
- package/dist/cjs/components/basic/system-provider/system-provider.js +0 -70
- package/dist/cjs/components/basic/system-provider/system-provider.js.map +0 -1
- package/dist/cjs/components/basic/upload-file/context/UploadContext.js +0 -13
- package/dist/cjs/components/basic/upload-file/context/UploadContext.js.map +0 -1
- package/dist/cjs/components/basic/upload-file/context/WebFileUploadContext.js +0 -37
- package/dist/cjs/components/basic/upload-file/context/WebFileUploadContext.js.map +0 -1
- package/dist/cjs/components/basic/upload-file/context/web-file-upload-context-options.js +0 -14
- package/dist/cjs/components/basic/upload-file/context/web-file-upload-context-options.js.map +0 -1
- package/dist/cjs/components/basic/upload-file/context/web-file-upload-context.js +0 -37
- package/dist/cjs/components/basic/upload-file/context/web-file-upload-context.js.map +0 -1
- package/dist/cjs/components/basic/upload-file/index.js +0 -33
- package/dist/cjs/components/basic/upload-file/index.js.map +0 -1
- package/dist/cjs/components/basic/upload-file/ui/upload-file/index.js +0 -11
- package/dist/cjs/components/basic/upload-file/ui/upload-file/index.js.map +0 -1
- package/dist/cjs/components/basic/upload-file/ui/upload-file/upload-file-options.js +0 -38
- package/dist/cjs/components/basic/upload-file/ui/upload-file/upload-file-options.js.map +0 -1
- package/dist/cjs/components/basic/upload-file/ui/upload-file/upload-file.js +0 -224
- package/dist/cjs/components/basic/upload-file/ui/upload-file/upload-file.js.map +0 -1
- package/dist/cjs/components/basic/upload-file/ui/upload-image/index.js +0 -11
- package/dist/cjs/components/basic/upload-file/ui/upload-image/index.js.map +0 -1
- package/dist/cjs/components/basic/upload-file/ui/upload-image/upload-image-options.js +0 -38
- package/dist/cjs/components/basic/upload-file/ui/upload-image/upload-image-options.js.map +0 -1
- package/dist/cjs/components/basic/upload-file/ui/upload-image/upload-image.js +0 -213
- package/dist/cjs/components/basic/upload-file/ui/upload-image/upload-image.js.map +0 -1
- package/dist/cjs/components/basic/upload-file/ui/upload-video/index.js +0 -11
- package/dist/cjs/components/basic/upload-file/ui/upload-video/index.js.map +0 -1
- package/dist/cjs/components/basic/upload-file/ui/upload-video/upload-video-options.js +0 -38
- package/dist/cjs/components/basic/upload-file/ui/upload-video/upload-video-options.js.map +0 -1
- package/dist/cjs/components/basic/upload-file/ui/upload-video/upload-video.js +0 -222
- package/dist/cjs/components/basic/upload-file/ui/upload-video/upload-video.js.map +0 -1
- package/dist/cjs/components/basic/upload-file/upload-file-options.js +0 -23
- package/dist/cjs/components/basic/upload-file/upload-file-options.js.map +0 -1
- package/dist/cjs/components/basic/upload-file/upload-file.js +0 -56
- package/dist/cjs/components/basic/upload-file/upload-file.js.map +0 -1
- package/dist/cjs/components/basic/visual-page-editor/content-editable.vue.js +0 -200
- package/dist/cjs/components/basic/visual-page-editor/content-editable.vue.js.map +0 -1
- package/dist/cjs/components/basic/visual-page-editor/content-editable.vue2.js +0 -4
- package/dist/cjs/components/basic/visual-page-editor/content-editable.vue2.js.map +0 -1
- package/dist/cjs/components/basic/visual-page-editor/core/BlockRender.js +0 -38
- package/dist/cjs/components/basic/visual-page-editor/core/BlockRender.js.map +0 -1
- package/dist/cjs/components/basic/visual-page-editor/core/Dialog.js +0 -78
- package/dist/cjs/components/basic/visual-page-editor/core/Dialog.js.map +0 -1
- package/dist/cjs/components/basic/visual-page-editor/core/VisvalPageEditor.js +0 -134
- package/dist/cjs/components/basic/visual-page-editor/core/VisvalPageEditor.js.map +0 -1
- package/dist/cjs/components/basic/visual-page-editor/core/index.js +0 -32
- package/dist/cjs/components/basic/visual-page-editor/core/index.js.map +0 -1
- package/dist/cjs/components/basic/visual-page-editor/editor.vue.js +0 -34
- package/dist/cjs/components/basic/visual-page-editor/editor.vue.js.map +0 -1
- package/dist/cjs/components/basic/visual-page-editor/editor.vue2.js +0 -4
- package/dist/cjs/components/basic/visual-page-editor/editor.vue2.js.map +0 -1
- package/dist/cjs/components/basic/visual-page-editor/index.js +0 -9
- package/dist/cjs/components/basic/visual-page-editor/index.js.map +0 -1
- package/dist/cjs/components/basic/visual-page-editor/modules/BaseImageModule.js +0 -10
- package/dist/cjs/components/basic/visual-page-editor/modules/BaseImageModule.js.map +0 -1
- package/dist/cjs/components/basic/visual-page-editor/toolbar.vue.js +0 -50
- package/dist/cjs/components/basic/visual-page-editor/toolbar.vue.js.map +0 -1
- package/dist/cjs/components/basic/visual-page-editor/toolbar.vue2.js +0 -4
- package/dist/cjs/components/basic/visual-page-editor/toolbar.vue2.js.map +0 -1
- package/dist/cjs/components/business/resource-list/ResourceManager.js +0 -197
- package/dist/cjs/components/business/resource-list/ResourceManager.js.map +0 -1
- package/dist/cjs/components/business/resource-list/components/resource-item/index.vue.js +0 -122
- package/dist/cjs/components/business/resource-list/components/resource-item/index.vue.js.map +0 -1
- package/dist/cjs/components/business/resource-list/components/resource-item/index.vue2.js +0 -4
- package/dist/cjs/components/business/resource-list/components/resource-item/index.vue2.js.map +0 -1
- package/dist/cjs/components/business/resource-list/index.js +0 -17
- package/dist/cjs/components/business/resource-list/index.js.map +0 -1
- package/dist/cjs/components/business/resource-list/resource-list.vue.js +0 -241
- package/dist/cjs/components/business/resource-list/resource-list.vue.js.map +0 -1
- package/dist/cjs/components/business/resource-list/resource-list.vue2.js +0 -4
- package/dist/cjs/components/business/resource-list/resource-list.vue2.js.map +0 -1
- package/dist/cjs/components/business/resource-manager/index.js +0 -8
- package/dist/cjs/components/business/resource-manager/index.js.map +0 -1
- package/dist/cjs/components/business/resource-manager/resource-manager.vue.js +0 -337
- package/dist/cjs/components/business/resource-manager/resource-manager.vue.js.map +0 -1
- package/dist/cjs/components/business/resource-manager/resource-manager.vue2.js +0 -4
- package/dist/cjs/components/business/resource-manager/resource-manager.vue2.js.map +0 -1
- package/dist/cjs/components/business/resource-select/index.js +0 -7
- package/dist/cjs/components/business/resource-select/index.js.map +0 -1
- package/dist/cjs/components/business/resource-select/resource-select-api.js +0 -54
- package/dist/cjs/components/business/resource-select/resource-select-api.js.map +0 -1
- package/dist/cjs/components/business/resource-select/resource-select-input.js +0 -50
- package/dist/cjs/components/business/resource-select/resource-select-input.js.map +0 -1
- package/dist/cjs/components/business/verify-dialog/index.js +0 -7
- package/dist/cjs/components/business/verify-dialog/index.js.map +0 -1
- package/dist/cjs/components/business/verify-dialog/verify-dialog-api.js +0 -28
- package/dist/cjs/components/business/verify-dialog/verify-dialog-api.js.map +0 -1
- package/dist/cjs/components/business/verify-dialog/verify-dialog-option.js +0 -20
- package/dist/cjs/components/business/verify-dialog/verify-dialog-option.js.map +0 -1
- package/dist/cjs/components/business/verify-dialog/verify-panel.js +0 -130
- package/dist/cjs/components/business/verify-dialog/verify-panel.js.map +0 -1
- package/dist/cjs/components/data-model/data-filter-drawer/data-filter-drawer-options.js +0 -20
- package/dist/cjs/components/data-model/data-filter-drawer/data-filter-drawer-options.js.map +0 -1
- package/dist/cjs/components/data-model/data-filter-drawer/data-filter-drawer.js +0 -68
- package/dist/cjs/components/data-model/data-filter-drawer/data-filter-drawer.js.map +0 -1
- package/dist/cjs/components/data-model/data-filter-drawer/index.js +0 -11
- package/dist/cjs/components/data-model/data-filter-drawer/index.js.map +0 -1
- package/dist/cjs/components/data-model/data-filter-form/components/condition-date/condition-date-options.js +0 -25
- package/dist/cjs/components/data-model/data-filter-form/components/condition-date/condition-date-options.js.map +0 -1
- package/dist/cjs/components/data-model/data-filter-form/components/condition-date/condition-date.js +0 -40
- package/dist/cjs/components/data-model/data-filter-form/components/condition-date/condition-date.js.map +0 -1
- package/dist/cjs/components/data-model/data-filter-form/components/condition-date/index.js +0 -11
- package/dist/cjs/components/data-model/data-filter-form/components/condition-date/index.js.map +0 -1
- package/dist/cjs/components/data-model/data-filter-form/components/condition-input/condition-input-options.js +0 -13
- package/dist/cjs/components/data-model/data-filter-form/components/condition-input/condition-input-options.js.map +0 -1
- package/dist/cjs/components/data-model/data-filter-form/components/condition-input/condition-input.js +0 -27
- package/dist/cjs/components/data-model/data-filter-form/components/condition-input/condition-input.js.map +0 -1
- package/dist/cjs/components/data-model/data-filter-form/components/condition-input/index.js +0 -11
- package/dist/cjs/components/data-model/data-filter-form/components/condition-input/index.js.map +0 -1
- package/dist/cjs/components/data-model/data-filter-form/components/condition-number/condition-number-options.js +0 -17
- package/dist/cjs/components/data-model/data-filter-form/components/condition-number/condition-number-options.js.map +0 -1
- package/dist/cjs/components/data-model/data-filter-form/components/condition-number/condition-number.js +0 -37
- package/dist/cjs/components/data-model/data-filter-form/components/condition-number/condition-number.js.map +0 -1
- package/dist/cjs/components/data-model/data-filter-form/components/condition-number/index.js +0 -11
- package/dist/cjs/components/data-model/data-filter-form/components/condition-number/index.js.map +0 -1
- package/dist/cjs/components/data-model/data-filter-form/components/condition-select/condition-select-options.js +0 -24
- package/dist/cjs/components/data-model/data-filter-form/components/condition-select/condition-select-options.js.map +0 -1
- package/dist/cjs/components/data-model/data-filter-form/components/condition-select/condition-select.js +0 -28
- package/dist/cjs/components/data-model/data-filter-form/components/condition-select/condition-select.js.map +0 -1
- package/dist/cjs/components/data-model/data-filter-form/components/condition-select/index.js +0 -11
- package/dist/cjs/components/data-model/data-filter-form/components/condition-select/index.js.map +0 -1
- package/dist/cjs/components/data-model/data-filter-form/composables/use-condition.js +0 -18
- package/dist/cjs/components/data-model/data-filter-form/composables/use-condition.js.map +0 -1
- package/dist/cjs/components/data-model/data-filter-form/data-filter-form-item/data-filter-form-item-options.js +0 -9
- package/dist/cjs/components/data-model/data-filter-form/data-filter-form-item/data-filter-form-item-options.js.map +0 -1
- package/dist/cjs/components/data-model/data-filter-form/data-filter-form-item/data-filter-form-item.js +0 -97
- package/dist/cjs/components/data-model/data-filter-form/data-filter-form-item/data-filter-form-item.js.map +0 -1
- package/dist/cjs/components/data-model/data-filter-form/data-filter-form-item/index.js +0 -10
- package/dist/cjs/components/data-model/data-filter-form/data-filter-form-item/index.js.map +0 -1
- package/dist/cjs/components/data-model/data-filter-form/data-filter-form-options.js +0 -10
- package/dist/cjs/components/data-model/data-filter-form/data-filter-form-options.js.map +0 -1
- package/dist/cjs/components/data-model/data-filter-form/data-filter-form.js +0 -79
- package/dist/cjs/components/data-model/data-filter-form/data-filter-form.js.map +0 -1
- package/dist/cjs/components/data-model/data-filter-form/index.js +0 -25
- package/dist/cjs/components/data-model/data-filter-form/index.js.map +0 -1
- package/dist/cjs/components/data-model/data-filter-form/operator-options.js +0 -39
- package/dist/cjs/components/data-model/data-filter-form/operator-options.js.map +0 -1
- package/dist/cjs/components/data-model/data-filter-form/token.js +0 -7
- package/dist/cjs/components/data-model/data-filter-form/token.js.map +0 -1
- package/dist/cjs/components/data-model/data-form/components/form-detail/form-detail-options.js +0 -24
- package/dist/cjs/components/data-model/data-form/components/form-detail/form-detail-options.js.map +0 -1
- package/dist/cjs/components/data-model/data-form/components/form-detail/form-detail.js +0 -117
- package/dist/cjs/components/data-model/data-form/components/form-detail/form-detail.js.map +0 -1
- package/dist/cjs/components/data-model/data-form/components/form-detail/index.js +0 -11
- package/dist/cjs/components/data-model/data-form/components/form-detail/index.js.map +0 -1
- package/dist/cjs/components/data-model/data-form/composables/use-form-item.js +0 -39
- package/dist/cjs/components/data-model/data-form/composables/use-form-item.js.map +0 -1
- package/dist/cjs/components/data-model/data-form/data-form-item/data-form-item-options.js +0 -11
- package/dist/cjs/components/data-model/data-form/data-form-item/data-form-item-options.js.map +0 -1
- package/dist/cjs/components/data-model/data-form/data-form-item/data-form-item.js +0 -103
- package/dist/cjs/components/data-model/data-form/data-form-item/data-form-item.js.map +0 -1
- package/dist/cjs/components/data-model/data-form/data-form-item/index.js +0 -9
- package/dist/cjs/components/data-model/data-form/data-form-item/index.js.map +0 -1
- package/dist/cjs/components/data-model/data-form/data-form-options.js +0 -41
- package/dist/cjs/components/data-model/data-form/data-form-options.js.map +0 -1
- package/dist/cjs/components/data-model/data-form/data-form.vue.js +0 -7
- package/dist/cjs/components/data-model/data-form/data-form.vue.js.map +0 -1
- package/dist/cjs/components/data-model/data-form/data-form.vue2.js +0 -90
- package/dist/cjs/components/data-model/data-form/data-form.vue2.js.map +0 -1
- package/dist/cjs/components/data-model/data-form/index.js +0 -19
- package/dist/cjs/components/data-model/data-form/index.js.map +0 -1
- package/dist/cjs/components/data-model/data-form/token.js +0 -7
- package/dist/cjs/components/data-model/data-form/token.js.map +0 -1
- package/dist/cjs/components/data-model/data-form/views/form/form-options.js +0 -11
- package/dist/cjs/components/data-model/data-form/views/form/form-options.js.map +0 -1
- package/dist/cjs/components/data-model/data-form/views/form/form.js +0 -142
- package/dist/cjs/components/data-model/data-form/views/form/form.js.map +0 -1
- package/dist/cjs/components/data-model/data-form/views/form/index.js +0 -8
- package/dist/cjs/components/data-model/data-form/views/form/index.js.map +0 -1
- package/dist/cjs/components/data-model/data-form/views/form-view/form-view-options.js +0 -11
- package/dist/cjs/components/data-model/data-form/views/form-view/form-view-options.js.map +0 -1
- package/dist/cjs/components/data-model/data-form/views/form-view/form-view.js +0 -63
- package/dist/cjs/components/data-model/data-form/views/form-view/form-view.js.map +0 -1
- package/dist/cjs/components/data-model/data-form/views/form-view/index.js +0 -8
- package/dist/cjs/components/data-model/data-form/views/form-view/index.js.map +0 -1
- package/dist/cjs/components/data-model/data-table/components/column-action/column-action-options.js +0 -21
- package/dist/cjs/components/data-model/data-table/components/column-action/column-action-options.js.map +0 -1
- package/dist/cjs/components/data-model/data-table/components/column-action/column-action.js +0 -36
- package/dist/cjs/components/data-model/data-table/components/column-action/column-action.js.map +0 -1
- package/dist/cjs/components/data-model/data-table/components/column-action/index.js +0 -7
- package/dist/cjs/components/data-model/data-table/components/column-action/index.js.map +0 -1
- package/dist/cjs/components/data-model/data-table/components/column-date/column-date-options.js +0 -13
- package/dist/cjs/components/data-model/data-table/components/column-date/column-date-options.js.map +0 -1
- package/dist/cjs/components/data-model/data-table/components/column-date/column-date.js +0 -44
- package/dist/cjs/components/data-model/data-table/components/column-date/column-date.js.map +0 -1
- package/dist/cjs/components/data-model/data-table/components/column-date/index.js +0 -10
- package/dist/cjs/components/data-model/data-table/components/column-date/index.js.map +0 -1
- package/dist/cjs/components/data-model/data-table/components/column-icon/column-icon-options.js +0 -10
- package/dist/cjs/components/data-model/data-table/components/column-icon/column-icon-options.js.map +0 -1
- package/dist/cjs/components/data-model/data-table/components/column-icon/column-icon.js +0 -31
- package/dist/cjs/components/data-model/data-table/components/column-icon/column-icon.js.map +0 -1
- package/dist/cjs/components/data-model/data-table/components/column-icon/index.js +0 -9
- package/dist/cjs/components/data-model/data-table/components/column-icon/index.js.map +0 -1
- package/dist/cjs/components/data-model/data-table/components/column-image/column-image-options.js +0 -19
- package/dist/cjs/components/data-model/data-table/components/column-image/column-image-options.js.map +0 -1
- package/dist/cjs/components/data-model/data-table/components/column-image/column-image.js +0 -33
- package/dist/cjs/components/data-model/data-table/components/column-image/column-image.js.map +0 -1
- package/dist/cjs/components/data-model/data-table/components/column-image/index.js +0 -7
- package/dist/cjs/components/data-model/data-table/components/column-image/index.js.map +0 -1
- package/dist/cjs/components/data-model/data-table/components/column-json/column-json-options.js +0 -23
- package/dist/cjs/components/data-model/data-table/components/column-json/column-json-options.js.map +0 -1
- package/dist/cjs/components/data-model/data-table/components/column-json/column-json.js +0 -56
- package/dist/cjs/components/data-model/data-table/components/column-json/column-json.js.map +0 -1
- package/dist/cjs/components/data-model/data-table/components/column-json/index.js +0 -10
- package/dist/cjs/components/data-model/data-table/components/column-json/index.js.map +0 -1
- package/dist/cjs/components/data-model/data-table/components/column-link/column-link-options.js +0 -39
- package/dist/cjs/components/data-model/data-table/components/column-link/column-link-options.js.map +0 -1
- package/dist/cjs/components/data-model/data-table/components/column-link/column-link.js +0 -32
- package/dist/cjs/components/data-model/data-table/components/column-link/column-link.js.map +0 -1
- package/dist/cjs/components/data-model/data-table/components/column-link/index.js +0 -10
- package/dist/cjs/components/data-model/data-table/components/column-link/index.js.map +0 -1
- package/dist/cjs/components/data-model/data-table/components/column-object-mapping-text/column-object-mapping-text-options.js +0 -20
- package/dist/cjs/components/data-model/data-table/components/column-object-mapping-text/column-object-mapping-text-options.js.map +0 -1
- package/dist/cjs/components/data-model/data-table/components/column-object-mapping-text/column-object-mapping-text.js +0 -21
- package/dist/cjs/components/data-model/data-table/components/column-object-mapping-text/column-object-mapping-text.js.map +0 -1
- package/dist/cjs/components/data-model/data-table/components/column-object-mapping-text/index.js +0 -9
- package/dist/cjs/components/data-model/data-table/components/column-object-mapping-text/index.js.map +0 -1
- package/dist/cjs/components/data-model/data-table/components/column-select/column-select-header-options.js +0 -6
- package/dist/cjs/components/data-model/data-table/components/column-select/column-select-header-options.js.map +0 -1
- package/dist/cjs/components/data-model/data-table/components/column-select/column-select-header.js +0 -43
- package/dist/cjs/components/data-model/data-table/components/column-select/column-select-header.js.map +0 -1
- package/dist/cjs/components/data-model/data-table/components/column-select/column-select-options.js +0 -19
- package/dist/cjs/components/data-model/data-table/components/column-select/column-select-options.js.map +0 -1
- package/dist/cjs/components/data-model/data-table/components/column-select/column-select.js +0 -49
- package/dist/cjs/components/data-model/data-table/components/column-select/column-select.js.map +0 -1
- package/dist/cjs/components/data-model/data-table/components/column-select/index.js +0 -7
- package/dist/cjs/components/data-model/data-table/components/column-select/index.js.map +0 -1
- package/dist/cjs/components/data-model/data-table/components/column-sort/column-sort-options.js +0 -23
- package/dist/cjs/components/data-model/data-table/components/column-sort/column-sort-options.js.map +0 -1
- package/dist/cjs/components/data-model/data-table/components/column-sort/column-sort.js +0 -136
- package/dist/cjs/components/data-model/data-table/components/column-sort/column-sort.js.map +0 -1
- package/dist/cjs/components/data-model/data-table/components/column-sort/index.js +0 -9
- package/dist/cjs/components/data-model/data-table/components/column-sort/index.js.map +0 -1
- package/dist/cjs/components/data-model/data-table/components/column-switch/column-switch-options.js +0 -24
- package/dist/cjs/components/data-model/data-table/components/column-switch/column-switch-options.js.map +0 -1
- package/dist/cjs/components/data-model/data-table/components/column-switch/column-switch.js +0 -46
- package/dist/cjs/components/data-model/data-table/components/column-switch/column-switch.js.map +0 -1
- package/dist/cjs/components/data-model/data-table/components/column-switch/index.js +0 -10
- package/dist/cjs/components/data-model/data-table/components/column-switch/index.js.map +0 -1
- package/dist/cjs/components/data-model/data-table/components/column-tag/column-tag-options.js +0 -46
- package/dist/cjs/components/data-model/data-table/components/column-tag/column-tag-options.js.map +0 -1
- package/dist/cjs/components/data-model/data-table/components/column-tag/column-tag.js +0 -66
- package/dist/cjs/components/data-model/data-table/components/column-tag/column-tag.js.map +0 -1
- package/dist/cjs/components/data-model/data-table/components/column-tag/index.js +0 -9
- package/dist/cjs/components/data-model/data-table/components/column-tag/index.js.map +0 -1
- package/dist/cjs/components/data-model/data-table/components/column-text/column-text-options.js +0 -20
- package/dist/cjs/components/data-model/data-table/components/column-text/column-text-options.js.map +0 -1
- package/dist/cjs/components/data-model/data-table/components/column-text/column-text.js +0 -31
- package/dist/cjs/components/data-model/data-table/components/column-text/column-text.js.map +0 -1
- package/dist/cjs/components/data-model/data-table/components/column-text/index.js +0 -10
- package/dist/cjs/components/data-model/data-table/components/column-text/index.js.map +0 -1
- package/dist/cjs/components/data-model/data-table/components/header-components/batch-opt/batch-opt.js +0 -114
- package/dist/cjs/components/data-model/data-table/components/header-components/batch-opt/batch-opt.js.map +0 -1
- package/dist/cjs/components/data-model/data-table/components/header-components/batch-opt/index.js +0 -7
- package/dist/cjs/components/data-model/data-table/components/header-components/batch-opt/index.js.map +0 -1
- package/dist/cjs/components/data-model/data-table/components/header-components/table-filter/index.js +0 -7
- package/dist/cjs/components/data-model/data-table/components/header-components/table-filter/index.js.map +0 -1
- package/dist/cjs/components/data-model/data-table/components/header-components/table-filter/table-filter.js +0 -174
- package/dist/cjs/components/data-model/data-table/components/header-components/table-filter/table-filter.js.map +0 -1
- package/dist/cjs/components/data-model/data-table/composables/use-column.js +0 -18
- package/dist/cjs/components/data-model/data-table/composables/use-column.js.map +0 -1
- package/dist/cjs/components/data-model/data-table/composables/use-query-params.js +0 -76
- package/dist/cjs/components/data-model/data-table/composables/use-query-params.js.map +0 -1
- package/dist/cjs/components/data-model/data-table/data-table-column/data-table-column-options.js +0 -11
- package/dist/cjs/components/data-model/data-table/data-table-column/data-table-column-options.js.map +0 -1
- package/dist/cjs/components/data-model/data-table/data-table-column/data-table-column.js +0 -41
- package/dist/cjs/components/data-model/data-table/data-table-column/data-table-column.js.map +0 -1
- package/dist/cjs/components/data-model/data-table/data-table-column/index.js +0 -9
- package/dist/cjs/components/data-model/data-table/data-table-column/index.js.map +0 -1
- package/dist/cjs/components/data-model/data-table/data-table-options.js +0 -25
- package/dist/cjs/components/data-model/data-table/data-table-options.js.map +0 -1
- package/dist/cjs/components/data-model/data-table/data-table.vue.js +0 -7
- package/dist/cjs/components/data-model/data-table/data-table.vue.js.map +0 -1
- package/dist/cjs/components/data-model/data-table/data-table.vue2.js +0 -111
- package/dist/cjs/components/data-model/data-table/data-table.vue2.js.map +0 -1
- package/dist/cjs/components/data-model/data-table/index.js +0 -26
- package/dist/cjs/components/data-model/data-table/index.js.map +0 -1
- package/dist/cjs/components/data-model/data-table/token.js +0 -7
- package/dist/cjs/components/data-model/data-table/token.js.map +0 -1
- package/dist/cjs/components/data-model/data-table/views/table/index.js +0 -10
- package/dist/cjs/components/data-model/data-table/views/table/index.js.map +0 -1
- package/dist/cjs/components/data-model/data-table/views/table/table-options.js +0 -34
- package/dist/cjs/components/data-model/data-table/views/table/table-options.js.map +0 -1
- package/dist/cjs/components/data-model/data-table/views/table/table.js +0 -156
- package/dist/cjs/components/data-model/data-table/views/table/table.js.map +0 -1
- package/dist/cjs/components/data-model/data-table/views/table-tree/index.js +0 -10
- package/dist/cjs/components/data-model/data-table/views/table-tree/index.js.map +0 -1
- package/dist/cjs/components/data-model/data-table/views/table-tree/table-tree-options.js +0 -15
- package/dist/cjs/components/data-model/data-table/views/table-tree/table-tree-options.js.map +0 -1
- package/dist/cjs/components/data-model/data-table/views/table-tree/table-tree.js +0 -48
- package/dist/cjs/components/data-model/data-table/views/table-tree/table-tree.js.map +0 -1
- package/dist/cjs/components/data-model/data-table/views/table-view/classify-search/classify-search-item/classify-search-item-options.js +0 -29
- package/dist/cjs/components/data-model/data-table/views/table-view/classify-search/classify-search-item/classify-search-item-options.js.map +0 -1
- package/dist/cjs/components/data-model/data-table/views/table-view/classify-search/classify-search-item/classify-search-item.js +0 -74
- package/dist/cjs/components/data-model/data-table/views/table-view/classify-search/classify-search-item/classify-search-item.js.map +0 -1
- package/dist/cjs/components/data-model/data-table/views/table-view/classify-search/classify-search-item/index.js +0 -7
- package/dist/cjs/components/data-model/data-table/views/table-view/classify-search/classify-search-item/index.js.map +0 -1
- package/dist/cjs/components/data-model/data-table/views/table-view/classify-search/classify-search.js +0 -40
- package/dist/cjs/components/data-model/data-table/views/table-view/classify-search/classify-search.js.map +0 -1
- package/dist/cjs/components/data-model/data-table/views/table-view/classify-search/index.js +0 -9
- package/dist/cjs/components/data-model/data-table/views/table-view/classify-search/index.js.map +0 -1
- package/dist/cjs/components/data-model/data-table/views/table-view/header/header-item.js +0 -62
- package/dist/cjs/components/data-model/data-table/views/table-view/header/header-item.js.map +0 -1
- package/dist/cjs/components/data-model/data-table/views/table-view/header/header.js +0 -45
- package/dist/cjs/components/data-model/data-table/views/table-view/header/header.js.map +0 -1
- package/dist/cjs/components/data-model/data-table/views/table-view/header/index.js +0 -10
- package/dist/cjs/components/data-model/data-table/views/table-view/header/index.js.map +0 -1
- package/dist/cjs/components/data-model/data-table/views/table-view/index.js +0 -14
- package/dist/cjs/components/data-model/data-table/views/table-view/index.js.map +0 -1
- package/dist/cjs/components/data-model/data-table/views/table-view/table-view-options.js +0 -10
- package/dist/cjs/components/data-model/data-table/views/table-view/table-view-options.js.map +0 -1
- package/dist/cjs/components/data-model/data-table/views/table-view/table-view.js +0 -48
- package/dist/cjs/components/data-model/data-table/views/table-view/table-view.js.map +0 -1
- package/dist/cjs/components/data-model/data-table/views/tree/index.js +0 -11
- package/dist/cjs/components/data-model/data-table/views/tree/index.js.map +0 -1
- package/dist/cjs/components/data-model/data-table/views/tree/tree-options.js +0 -20
- package/dist/cjs/components/data-model/data-table/views/tree/tree-options.js.map +0 -1
- package/dist/cjs/components/data-model/data-table/views/tree/tree.js +0 -169
- package/dist/cjs/components/data-model/data-table/views/tree/tree.js.map +0 -1
- package/dist/cjs/components/data-model/data-table/views/tree-view/index.js +0 -10
- package/dist/cjs/components/data-model/data-table/views/tree-view/index.js.map +0 -1
- package/dist/cjs/components/data-model/data-table/views/tree-view/tree-view-options.js +0 -15
- package/dist/cjs/components/data-model/data-table/views/tree-view/tree-view-options.js.map +0 -1
- package/dist/cjs/components/data-model/data-table/views/tree-view/tree-view.js +0 -74
- package/dist/cjs/components/data-model/data-table/views/tree-view/tree-view.js.map +0 -1
- package/dist/cjs/components/data-model/data-table-pagination/data-table-pagination-options.js +0 -11
- package/dist/cjs/components/data-model/data-table-pagination/data-table-pagination-options.js.map +0 -1
- package/dist/cjs/components/data-model/data-table-pagination/data-table-pagination.js +0 -28
- package/dist/cjs/components/data-model/data-table-pagination/data-table-pagination.js.map +0 -1
- package/dist/cjs/components/data-model/data-table-pagination/index.js +0 -10
- package/dist/cjs/components/data-model/data-table-pagination/index.js.map +0 -1
- package/dist/cjs/composables/create-data-form.js +0 -9
- package/dist/cjs/composables/create-data-form.js.map +0 -1
- package/dist/cjs/composables/create-data-table.js +0 -9
- package/dist/cjs/composables/create-data-table.js.map +0 -1
- package/dist/cjs/composables/on-tab-before-close.js +0 -11
- package/dist/cjs/composables/on-tab-before-close.js.map +0 -1
- package/dist/cjs/composables/on-tab-before-switch.js +0 -17
- package/dist/cjs/composables/on-tab-before-switch.js.map +0 -1
- package/dist/cjs/composables/on-tab-refresh.js +0 -17
- package/dist/cjs/composables/on-tab-refresh.js.map +0 -1
- package/dist/cjs/composables/use-column-component.js +0 -131
- package/dist/cjs/composables/use-column-component.js.map +0 -1
- package/dist/cjs/composables/use-current-tab.js +0 -12
- package/dist/cjs/composables/use-current-tab.js.map +0 -1
- package/dist/cjs/composables/use-http-request.js +0 -15
- package/dist/cjs/composables/use-http-request.js.map +0 -1
- package/dist/cjs/composables/use-i18n.js +0 -10
- package/dist/cjs/composables/use-i18n.js.map +0 -1
- package/dist/cjs/composables/use-ms-app-client.js +0 -10
- package/dist/cjs/composables/use-ms-app-client.js.map +0 -1
- package/dist/cjs/composables/use-single-view.js +0 -106
- package/dist/cjs/composables/use-single-view.js.map +0 -1
- package/dist/cjs/composables/use-user-info.js +0 -15
- package/dist/cjs/composables/use-user-info.js.map +0 -1
- package/dist/cjs/constants/data-model.js +0 -5
- package/dist/cjs/constants/data-model.js.map +0 -1
- package/dist/cjs/constants/log.js +0 -10
- package/dist/cjs/constants/log.js.map +0 -1
- package/dist/cjs/constants/menu.js +0 -10
- package/dist/cjs/constants/menu.js.map +0 -1
- package/dist/cjs/constants/pattern.js +0 -7
- package/dist/cjs/constants/pattern.js.map +0 -1
- package/dist/cjs/constants/region.js +0 -11
- package/dist/cjs/constants/region.js.map +0 -1
- package/dist/cjs/constants/route.js +0 -9
- package/dist/cjs/constants/route.js.map +0 -1
- package/dist/cjs/core/DataModelDefines.js +0 -40
- package/dist/cjs/core/DataModelDefines.js.map +0 -1
- package/dist/cjs/core/MSAppClient.js +0 -246
- package/dist/cjs/core/MSAppClient.js.map +0 -1
- package/dist/cjs/core/MkModule.js +0 -72
- package/dist/cjs/core/MkModule.js.map +0 -1
- package/dist/cjs/core/PageManager.js +0 -135
- package/dist/cjs/core/PageManager.js.map +0 -1
- package/dist/cjs/core/PermissionPointManager.js +0 -23
- package/dist/cjs/core/PermissionPointManager.js.map +0 -1
- package/dist/cjs/core/Router.js +0 -124
- package/dist/cjs/core/Router.js.map +0 -1
- package/dist/cjs/core/UserInfo.js +0 -44
- package/dist/cjs/core/UserInfo.js.map +0 -1
- package/dist/cjs/core/UserSession.js +0 -133
- package/dist/cjs/core/UserSession.js.map +0 -1
- package/dist/cjs/core/component/ConfigComponents.js +0 -32
- package/dist/cjs/core/component/ConfigComponents.js.map +0 -1
- package/dist/cjs/core/component/DataFilterComponents.js +0 -43
- package/dist/cjs/core/component/DataFilterComponents.js.map +0 -1
- package/dist/cjs/core/component/DataFormComponents.js +0 -107
- package/dist/cjs/core/component/DataFormComponents.js.map +0 -1
- package/dist/cjs/core/component/DataTableComponents.js +0 -95
- package/dist/cjs/core/component/DataTableComponents.js.map +0 -1
- package/dist/cjs/core/component/DataTableHeaderComponents.js +0 -39
- package/dist/cjs/core/component/DataTableHeaderComponents.js.map +0 -1
- package/dist/cjs/core/menu/Menu.js +0 -105
- package/dist/cjs/core/menu/Menu.js.map +0 -1
- package/dist/cjs/core/menu/MenuNode.js +0 -37
- package/dist/cjs/core/menu/MenuNode.js.map +0 -1
- package/dist/cjs/core/tabs/Tab.js +0 -37
- package/dist/cjs/core/tabs/Tab.js.map +0 -1
- package/dist/cjs/core/tabs/Tabs.js +0 -130
- package/dist/cjs/core/tabs/Tabs.js.map +0 -1
- package/dist/cjs/define-data-form.js +0 -22
- package/dist/cjs/define-data-form.js.map +0 -1
- package/dist/cjs/define-data-table.js +0 -22
- package/dist/cjs/define-data-table.js.map +0 -1
- package/dist/cjs/define-data-tree.js +0 -22
- package/dist/cjs/define-data-tree.js.map +0 -1
- package/dist/cjs/init-application.js +0 -81
- package/dist/cjs/init-application.js.map +0 -1
- package/dist/cjs/installer.js +0 -125
- package/dist/cjs/installer.js.map +0 -1
- package/dist/cjs/layouts/components/dialogs/dialogs.js +0 -73
- package/dist/cjs/layouts/components/dialogs/dialogs.js.map +0 -1
- package/dist/cjs/layouts/components/dialogs/index.js +0 -7
- package/dist/cjs/layouts/components/dialogs/index.js.map +0 -1
- package/dist/cjs/layouts/components/simple-page-layout/index.vue.js +0 -55
- package/dist/cjs/layouts/components/simple-page-layout/index.vue.js.map +0 -1
- package/dist/cjs/layouts/components/simple-page-layout/index.vue2.js +0 -4
- package/dist/cjs/layouts/components/simple-page-layout/index.vue2.js.map +0 -1
- package/dist/cjs/layouts/components/simple-page-layout/team-image.vue.js +0 -1506
- package/dist/cjs/layouts/components/simple-page-layout/team-image.vue.js.map +0 -1
- package/dist/cjs/layouts/index.js +0 -8
- package/dist/cjs/layouts/index.js.map +0 -1
- package/dist/cjs/layouts/layout.js +0 -13
- package/dist/cjs/layouts/layout.js.map +0 -1
- package/dist/cjs/layouts/new/common/components/SvgIcon/index.vue.js +0 -83
- package/dist/cjs/layouts/new/common/components/SvgIcon/index.vue.js.map +0 -1
- package/dist/cjs/layouts/new/common/components/SvgIcon/index.vue2.js +0 -4
- package/dist/cjs/layouts/new/common/components/SvgIcon/index.vue2.js.map +0 -1
- package/dist/cjs/layouts/new/components/AppSetting/index.vue.js +0 -7
- package/dist/cjs/layouts/new/components/AppSetting/index.vue.js.map +0 -1
- package/dist/cjs/layouts/new/components/AppSetting/index.vue2.js +0 -573
- package/dist/cjs/layouts/new/components/AppSetting/index.vue2.js.map +0 -1
- package/dist/cjs/layouts/new/components/BackTop/index.vue.js +0 -57
- package/dist/cjs/layouts/new/components/BackTop/index.vue.js.map +0 -1
- package/dist/cjs/layouts/new/components/BackTop/index.vue2.js +0 -4
- package/dist/cjs/layouts/new/components/BackTop/index.vue2.js.map +0 -1
- package/dist/cjs/layouts/new/components/Breadcrumb/index.vue.js +0 -14
- package/dist/cjs/layouts/new/components/Breadcrumb/index.vue.js.map +0 -1
- package/dist/cjs/layouts/new/components/Breadcrumb/item.vue.js +0 -37
- package/dist/cjs/layouts/new/components/Breadcrumb/item.vue.js.map +0 -1
- package/dist/cjs/layouts/new/components/Breadcrumb/item.vue2.js +0 -4
- package/dist/cjs/layouts/new/components/Breadcrumb/item.vue2.js.map +0 -1
- package/dist/cjs/layouts/new/components/Copyright/index.vue.js +0 -7
- package/dist/cjs/layouts/new/components/Copyright/index.vue.js.map +0 -1
- package/dist/cjs/layouts/new/components/Copyright/index.vue2.js +0 -49
- package/dist/cjs/layouts/new/components/Copyright/index.vue2.js.map +0 -1
- package/dist/cjs/layouts/new/components/Header/index.vue.js +0 -7
- package/dist/cjs/layouts/new/components/Header/index.vue.js.map +0 -1
- package/dist/cjs/layouts/new/components/Header/index.vue2.js +0 -84
- package/dist/cjs/layouts/new/components/Header/index.vue2.js.map +0 -1
- package/dist/cjs/layouts/new/components/HotkeysIntro/index.vue.js +0 -194
- package/dist/cjs/layouts/new/components/HotkeysIntro/index.vue.js.map +0 -1
- package/dist/cjs/layouts/new/components/HotkeysIntro/index.vue2.js +0 -4
- package/dist/cjs/layouts/new/components/HotkeysIntro/index.vue2.js.map +0 -1
- package/dist/cjs/layouts/new/components/Logo/index.vue.js +0 -46
- package/dist/cjs/layouts/new/components/Logo/index.vue.js.map +0 -1
- package/dist/cjs/layouts/new/components/Logo/index.vue2.js +0 -4
- package/dist/cjs/layouts/new/components/Logo/index.vue2.js.map +0 -1
- package/dist/cjs/layouts/new/components/MainSidebar/index.vue.js +0 -7
- package/dist/cjs/layouts/new/components/MainSidebar/index.vue.js.map +0 -1
- package/dist/cjs/layouts/new/components/MainSidebar/index.vue2.js +0 -79
- package/dist/cjs/layouts/new/components/MainSidebar/index.vue2.js.map +0 -1
- package/dist/cjs/layouts/new/components/Menu/index.vue.js +0 -192
- package/dist/cjs/layouts/new/components/Menu/index.vue.js.map +0 -1
- package/dist/cjs/layouts/new/components/Menu/index.vue2.js +0 -4
- package/dist/cjs/layouts/new/components/Menu/index.vue2.js.map +0 -1
- package/dist/cjs/layouts/new/components/Menu/item.vue.js +0 -128
- package/dist/cjs/layouts/new/components/Menu/item.vue.js.map +0 -1
- package/dist/cjs/layouts/new/components/Menu/item.vue2.js +0 -4
- package/dist/cjs/layouts/new/components/Menu/item.vue2.js.map +0 -1
- package/dist/cjs/layouts/new/components/Menu/sub.vue.js +0 -228
- package/dist/cjs/layouts/new/components/Menu/sub.vue.js.map +0 -1
- package/dist/cjs/layouts/new/components/Menu/sub.vue2.js +0 -4
- package/dist/cjs/layouts/new/components/Menu/sub.vue2.js.map +0 -1
- package/dist/cjs/layouts/new/components/Menu/types.js +0 -5
- package/dist/cjs/layouts/new/components/Menu/types.js.map +0 -1
- package/dist/cjs/layouts/new/components/Search/index.vue.js +0 -461
- package/dist/cjs/layouts/new/components/Search/index.vue.js.map +0 -1
- package/dist/cjs/layouts/new/components/Search/index.vue2.js +0 -4
- package/dist/cjs/layouts/new/components/Search/index.vue2.js.map +0 -1
- package/dist/cjs/layouts/new/components/SubSidebar/index.vue.js +0 -7
- package/dist/cjs/layouts/new/components/SubSidebar/index.vue.js.map +0 -1
- package/dist/cjs/layouts/new/components/SubSidebar/index.vue2.js +0 -124
- package/dist/cjs/layouts/new/components/SubSidebar/index.vue2.js.map +0 -1
- package/dist/cjs/layouts/new/components/Topbar/Tabbar/index.vue.js +0 -8
- package/dist/cjs/layouts/new/components/Topbar/Tabbar/index.vue.js.map +0 -1
- package/dist/cjs/layouts/new/components/Topbar/Tabbar/index.vue2.js +0 -253
- package/dist/cjs/layouts/new/components/Topbar/Tabbar/index.vue2.js.map +0 -1
- package/dist/cjs/layouts/new/components/Topbar/Toolbar/Breadcrumb/index.vue.js +0 -7
- package/dist/cjs/layouts/new/components/Topbar/Toolbar/Breadcrumb/index.vue.js.map +0 -1
- package/dist/cjs/layouts/new/components/Topbar/Toolbar/Breadcrumb/index.vue2.js +0 -66
- package/dist/cjs/layouts/new/components/Topbar/Toolbar/Breadcrumb/index.vue2.js.map +0 -1
- package/dist/cjs/layouts/new/components/Topbar/Toolbar/ColorScheme/index.vue.js +0 -73
- package/dist/cjs/layouts/new/components/Topbar/Toolbar/ColorScheme/index.vue.js.map +0 -1
- package/dist/cjs/layouts/new/components/Topbar/Toolbar/ColorScheme/index.vue2.js +0 -4
- package/dist/cjs/layouts/new/components/Topbar/Toolbar/ColorScheme/index.vue2.js.map +0 -1
- package/dist/cjs/layouts/new/components/Topbar/Toolbar/Fullscreen/index.vue.js +0 -29
- package/dist/cjs/layouts/new/components/Topbar/Toolbar/Fullscreen/index.vue.js.map +0 -1
- package/dist/cjs/layouts/new/components/Topbar/Toolbar/Fullscreen/index.vue2.js +0 -4
- package/dist/cjs/layouts/new/components/Topbar/Toolbar/Fullscreen/index.vue2.js.map +0 -1
- package/dist/cjs/layouts/new/components/Topbar/Toolbar/NavSearch/index.vue.js +0 -45
- package/dist/cjs/layouts/new/components/Topbar/Toolbar/NavSearch/index.vue.js.map +0 -1
- package/dist/cjs/layouts/new/components/Topbar/Toolbar/NavSearch/index.vue2.js +0 -4
- package/dist/cjs/layouts/new/components/Topbar/Toolbar/NavSearch/index.vue2.js.map +0 -1
- package/dist/cjs/layouts/new/components/Topbar/Toolbar/PageReload/index.vue.js +0 -23
- package/dist/cjs/layouts/new/components/Topbar/Toolbar/PageReload/index.vue.js.map +0 -1
- package/dist/cjs/layouts/new/components/Topbar/Toolbar/PageReload/index.vue2.js +0 -4
- package/dist/cjs/layouts/new/components/Topbar/Toolbar/PageReload/index.vue2.js.map +0 -1
- package/dist/cjs/layouts/new/components/Topbar/Toolbar/index.vue.js +0 -7
- package/dist/cjs/layouts/new/components/Topbar/Toolbar/index.vue.js.map +0 -1
- package/dist/cjs/layouts/new/components/Topbar/Toolbar/index.vue2.js +0 -34
- package/dist/cjs/layouts/new/components/Topbar/Toolbar/index.vue2.js.map +0 -1
- package/dist/cjs/layouts/new/components/Topbar/Toolbar/leftSide.vue.js +0 -29
- package/dist/cjs/layouts/new/components/Topbar/Toolbar/leftSide.vue.js.map +0 -1
- package/dist/cjs/layouts/new/components/Topbar/Toolbar/leftSide.vue2.js +0 -4
- package/dist/cjs/layouts/new/components/Topbar/Toolbar/leftSide.vue2.js.map +0 -1
- package/dist/cjs/layouts/new/components/Topbar/Toolbar/rightSide.vue.js +0 -83
- package/dist/cjs/layouts/new/components/Topbar/Toolbar/rightSide.vue.js.map +0 -1
- package/dist/cjs/layouts/new/components/Topbar/Toolbar/rightSide.vue2.js +0 -4
- package/dist/cjs/layouts/new/components/Topbar/Toolbar/rightSide.vue2.js.map +0 -1
- package/dist/cjs/layouts/new/components/Topbar/index.vue.js +0 -7
- package/dist/cjs/layouts/new/components/Topbar/index.vue.js.map +0 -1
- package/dist/cjs/layouts/new/components/Topbar/index.vue2.js +0 -61
- package/dist/cjs/layouts/new/components/Topbar/index.vue2.js.map +0 -1
- package/dist/cjs/layouts/new/components/views/link.vue.js +0 -7
- package/dist/cjs/layouts/new/components/views/link.vue.js.map +0 -1
- package/dist/cjs/layouts/new/components/views/link.vue2.js +0 -84
- package/dist/cjs/layouts/new/components/views/link.vue2.js.map +0 -1
- package/dist/cjs/layouts/new/index.vue.js +0 -7
- package/dist/cjs/layouts/new/index.vue.js.map +0 -1
- package/dist/cjs/layouts/new/index.vue2.js +0 -255
- package/dist/cjs/layouts/new/index.vue2.js.map +0 -1
- package/dist/cjs/layouts/new/ui-kit/HButton.vue.js +0 -29
- package/dist/cjs/layouts/new/ui-kit/HButton.vue.js.map +0 -1
- package/dist/cjs/layouts/new/ui-kit/HButton.vue2.js +0 -4
- package/dist/cjs/layouts/new/ui-kit/HButton.vue2.js.map +0 -1
- package/dist/cjs/layouts/new/ui-kit/HCheckList.vue.js +0 -44
- package/dist/cjs/layouts/new/ui-kit/HCheckList.vue.js.map +0 -1
- package/dist/cjs/layouts/new/ui-kit/HCheckList.vue2.js +0 -4
- package/dist/cjs/layouts/new/ui-kit/HCheckList.vue2.js.map +0 -1
- package/dist/cjs/layouts/new/ui-kit/HDialog.vue.js +0 -142
- package/dist/cjs/layouts/new/ui-kit/HDialog.vue.js.map +0 -1
- package/dist/cjs/layouts/new/ui-kit/HDialog.vue2.js +0 -4
- package/dist/cjs/layouts/new/ui-kit/HDialog.vue2.js.map +0 -1
- package/dist/cjs/layouts/new/ui-kit/HDropdownMenu.vue.js +0 -50
- package/dist/cjs/layouts/new/ui-kit/HDropdownMenu.vue.js.map +0 -1
- package/dist/cjs/layouts/new/ui-kit/HDropdownMenu.vue2.js +0 -4
- package/dist/cjs/layouts/new/ui-kit/HDropdownMenu.vue2.js.map +0 -1
- package/dist/cjs/layouts/new/ui-kit/HInput.vue.js +0 -37
- package/dist/cjs/layouts/new/ui-kit/HInput.vue.js.map +0 -1
- package/dist/cjs/layouts/new/ui-kit/HInput.vue2.js +0 -4
- package/dist/cjs/layouts/new/ui-kit/HInput.vue2.js.map +0 -1
- package/dist/cjs/layouts/new/ui-kit/HKbd.vue.js +0 -13
- package/dist/cjs/layouts/new/ui-kit/HKbd.vue.js.map +0 -1
- package/dist/cjs/layouts/new/ui-kit/HSlideover.vue.js +0 -160
- package/dist/cjs/layouts/new/ui-kit/HSlideover.vue.js.map +0 -1
- package/dist/cjs/layouts/new/ui-kit/HSlideover.vue2.js +0 -4
- package/dist/cjs/layouts/new/ui-kit/HSlideover.vue2.js.map +0 -1
- package/dist/cjs/layouts/new/ui-kit/HTabList.vue.js +0 -73
- package/dist/cjs/layouts/new/ui-kit/HTabList.vue.js.map +0 -1
- package/dist/cjs/layouts/new/ui-kit/HTabList.vue2.js +0 -4
- package/dist/cjs/layouts/new/ui-kit/HTabList.vue2.js.map +0 -1
- package/dist/cjs/layouts/new/ui-kit/HToggle.vue.js +0 -45
- package/dist/cjs/layouts/new/ui-kit/HToggle.vue.js.map +0 -1
- package/dist/cjs/layouts/new/ui-kit/HToggle.vue2.js +0 -4
- package/dist/cjs/layouts/new/ui-kit/HToggle.vue2.js.map +0 -1
- package/dist/cjs/layouts/new/ui-kit/HTooltip.vue.js +0 -33
- package/dist/cjs/layouts/new/ui-kit/HTooltip.vue.js.map +0 -1
- package/dist/cjs/layouts/new/ui-kit/HTooltip.vue2.js +0 -4
- package/dist/cjs/layouts/new/ui-kit/HTooltip.vue2.js.map +0 -1
- package/dist/cjs/message-impl/DialogerImpl.js +0 -260
- package/dist/cjs/message-impl/DialogerImpl.js.map +0 -1
- package/dist/cjs/message-impl/MessagerImpl.js +0 -20
- package/dist/cjs/message-impl/MessagerImpl.js.map +0 -1
- package/dist/cjs/message-impl/NotificationerImpl.js +0 -20
- package/dist/cjs/message-impl/NotificationerImpl.js.map +0 -1
- package/dist/cjs/modules/cms/cms-settings.js +0 -50
- package/dist/cjs/modules/cms/cms-settings.js.map +0 -1
- package/dist/cjs/modules/cms/components/part-tree/index.js +0 -8
- package/dist/cjs/modules/cms/components/part-tree/index.js.map +0 -1
- package/dist/cjs/modules/cms/components/part-tree/index.vue.js +0 -259
- package/dist/cjs/modules/cms/components/part-tree/index.vue.js.map +0 -1
- package/dist/cjs/modules/cms/components/part-tree/index.vue2.js +0 -4
- package/dist/cjs/modules/cms/components/part-tree/index.vue2.js.map +0 -1
- package/dist/cjs/modules/cms/composables/part-extensions.js +0 -25
- package/dist/cjs/modules/cms/composables/part-extensions.js.map +0 -1
- package/dist/cjs/modules/cms/constants/index.js +0 -5
- package/dist/cjs/modules/cms/constants/index.js.map +0 -1
- package/dist/cjs/modules/cms/dataviews/cms-ad-contents/CmsAdContentsForm.js +0 -178
- package/dist/cjs/modules/cms/dataviews/cms-ad-contents/CmsAdContentsForm.js.map +0 -1
- package/dist/cjs/modules/cms/dataviews/cms-ad-contents/CmsAdContentsTable.js +0 -37
- package/dist/cjs/modules/cms/dataviews/cms-ad-contents/CmsAdContentsTable.js.map +0 -1
- package/dist/cjs/modules/cms/dataviews/cms-ad-defines/CmsAdDefinesForm.js +0 -40
- package/dist/cjs/modules/cms/dataviews/cms-ad-defines/CmsAdDefinesForm.js.map +0 -1
- package/dist/cjs/modules/cms/dataviews/cms-ad-defines/CmsAdDefinesTable.js +0 -27
- package/dist/cjs/modules/cms/dataviews/cms-ad-defines/CmsAdDefinesTable.js.map +0 -1
- package/dist/cjs/modules/cms/dataviews/cms-articles/CmsArticlesForm.js +0 -344
- package/dist/cjs/modules/cms/dataviews/cms-articles/CmsArticlesForm.js.map +0 -1
- package/dist/cjs/modules/cms/dataviews/cms-articles/CmsArticlesTable.js +0 -105
- package/dist/cjs/modules/cms/dataviews/cms-articles/CmsArticlesTable.js.map +0 -1
- package/dist/cjs/modules/cms/dataviews/cms-articles/cms-article-atlas/CmsArticleAtlasForm.js +0 -129
- package/dist/cjs/modules/cms/dataviews/cms-articles/cms-article-atlas/CmsArticleAtlasForm.js.map +0 -1
- package/dist/cjs/modules/cms/dataviews/cms-articles/cms-article-atlas/CmsArticleAtlasTable.js +0 -36
- package/dist/cjs/modules/cms/dataviews/cms-articles/cms-article-atlas/CmsArticleAtlasTable.js.map +0 -1
- package/dist/cjs/modules/cms/dataviews/cms-part-types/CmsPartTypesForm.js +0 -26
- package/dist/cjs/modules/cms/dataviews/cms-part-types/CmsPartTypesForm.js.map +0 -1
- package/dist/cjs/modules/cms/dataviews/cms-part-types/CmsPartTypesTable.js +0 -33
- package/dist/cjs/modules/cms/dataviews/cms-part-types/CmsPartTypesTable.js.map +0 -1
- package/dist/cjs/modules/cms/dataviews/cms-parts/CmsContentManPartForm.js +0 -27
- package/dist/cjs/modules/cms/dataviews/cms-parts/CmsContentManPartForm.js.map +0 -1
- package/dist/cjs/modules/cms/dataviews/cms-parts/CmsPartForm.js +0 -322
- package/dist/cjs/modules/cms/dataviews/cms-parts/CmsPartForm.js.map +0 -1
- package/dist/cjs/modules/cms/dataviews/cms-parts/CmsPartMiniForm.js +0 -49
- package/dist/cjs/modules/cms/dataviews/cms-parts/CmsPartMiniForm.js.map +0 -1
- package/dist/cjs/modules/cms/dataviews/cms-parts/CmsPartTree.js +0 -99
- package/dist/cjs/modules/cms/dataviews/cms-parts/CmsPartTree.js.map +0 -1
- package/dist/cjs/modules/cms/dataviews/cms-tags/CmsTagsForm.js +0 -33
- package/dist/cjs/modules/cms/dataviews/cms-tags/CmsTagsForm.js.map +0 -1
- package/dist/cjs/modules/cms/dataviews/cms-tags/CmsTagsTable.js +0 -37
- package/dist/cjs/modules/cms/dataviews/cms-tags/CmsTagsTable.js.map +0 -1
- package/dist/cjs/modules/cms/index.js +0 -72
- package/dist/cjs/modules/cms/index.js.map +0 -1
- package/dist/cjs/modules/cms/pages/cms-ad/index.vue.js +0 -4
- package/dist/cjs/modules/cms/pages/cms-ad/index.vue.js.map +0 -1
- package/dist/cjs/modules/cms/pages/cms-ad/index.vue2.js +0 -462
- package/dist/cjs/modules/cms/pages/cms-ad/index.vue2.js.map +0 -1
- package/dist/cjs/modules/cms/pages/cms-contents/article-edit-add-page.vue.js +0 -4
- package/dist/cjs/modules/cms/pages/cms-contents/article-edit-add-page.vue.js.map +0 -1
- package/dist/cjs/modules/cms/pages/cms-contents/article-edit-add-page.vue2.js +0 -690
- package/dist/cjs/modules/cms/pages/cms-contents/article-edit-add-page.vue2.js.map +0 -1
- package/dist/cjs/modules/cms/pages/cms-contents/components/article-atlas.vue.js +0 -341
- package/dist/cjs/modules/cms/pages/cms-contents/components/article-atlas.vue.js.map +0 -1
- package/dist/cjs/modules/cms/pages/cms-contents/components/article-atlas.vue2.js +0 -4
- package/dist/cjs/modules/cms/pages/cms-contents/components/article-atlas.vue2.js.map +0 -1
- package/dist/cjs/modules/cms/pages/cms-contents/components/article-list.vue.js +0 -458
- package/dist/cjs/modules/cms/pages/cms-contents/components/article-list.vue.js.map +0 -1
- package/dist/cjs/modules/cms/pages/cms-contents/components/article-list.vue2.js +0 -4
- package/dist/cjs/modules/cms/pages/cms-contents/components/article-list.vue2.js.map +0 -1
- package/dist/cjs/modules/cms/pages/cms-contents/components/part-banner-edit.vue.js +0 -67
- package/dist/cjs/modules/cms/pages/cms-contents/components/part-banner-edit.vue.js.map +0 -1
- package/dist/cjs/modules/cms/pages/cms-contents/components/part-banner-edit.vue2.js +0 -4
- package/dist/cjs/modules/cms/pages/cms-contents/components/part-banner-edit.vue2.js.map +0 -1
- package/dist/cjs/modules/cms/pages/cms-contents/components/part-banner.vue.js +0 -366
- package/dist/cjs/modules/cms/pages/cms-contents/components/part-banner.vue.js.map +0 -1
- package/dist/cjs/modules/cms/pages/cms-contents/components/part-banner.vue2.js +0 -4
- package/dist/cjs/modules/cms/pages/cms-contents/components/part-banner.vue2.js.map +0 -1
- package/dist/cjs/modules/cms/pages/cms-contents/components/part-info.vue.js +0 -256
- package/dist/cjs/modules/cms/pages/cms-contents/components/part-info.vue.js.map +0 -1
- package/dist/cjs/modules/cms/pages/cms-contents/components/part-info.vue2.js +0 -4
- package/dist/cjs/modules/cms/pages/cms-contents/components/part-info.vue2.js.map +0 -1
- package/dist/cjs/modules/cms/pages/cms-contents/index.vue.js +0 -4
- package/dist/cjs/modules/cms/pages/cms-contents/index.vue.js.map +0 -1
- package/dist/cjs/modules/cms/pages/cms-contents/index.vue2.js +0 -627
- package/dist/cjs/modules/cms/pages/cms-contents/index.vue2.js.map +0 -1
- package/dist/cjs/modules/cms/pages/cms-resource/index.vue.js +0 -4
- package/dist/cjs/modules/cms/pages/cms-resource/index.vue.js.map +0 -1
- package/dist/cjs/modules/cms/pages/cms-resource/index.vue2.js +0 -133
- package/dist/cjs/modules/cms/pages/cms-resource/index.vue2.js.map +0 -1
- package/dist/cjs/modules/cms/pages/cms-settigns/index.vue.js +0 -4
- package/dist/cjs/modules/cms/pages/cms-settigns/index.vue.js.map +0 -1
- package/dist/cjs/modules/cms/pages/cms-settigns/index.vue2.js +0 -451
- package/dist/cjs/modules/cms/pages/cms-settigns/index.vue2.js.map +0 -1
- package/dist/cjs/modules/ms/components/image-select/image-select-api.js +0 -88
- package/dist/cjs/modules/ms/components/image-select/image-select-api.js.map +0 -1
- package/dist/cjs/modules/ms/components/image-select/image-select-panel.js +0 -117
- package/dist/cjs/modules/ms/components/image-select/image-select-panel.js.map +0 -1
- package/dist/cjs/modules/ms/components/image-select/index.js +0 -7
- package/dist/cjs/modules/ms/components/image-select/index.js.map +0 -1
- package/dist/cjs/modules/ms/components/markdown-editor/index.js +0 -13
- package/dist/cjs/modules/ms/components/markdown-editor/index.js.map +0 -1
- package/dist/cjs/modules/ms/components/markdown-editor/markdown-editor-options.js +0 -15
- package/dist/cjs/modules/ms/components/markdown-editor/markdown-editor-options.js.map +0 -1
- package/dist/cjs/modules/ms/components/markdown-editor/markdown-editor.js +0 -74
- package/dist/cjs/modules/ms/components/markdown-editor/markdown-editor.js.map +0 -1
- package/dist/cjs/modules/ms/components/material-list/components/file-view/file-view-options.js +0 -8
- package/dist/cjs/modules/ms/components/material-list/components/file-view/file-view-options.js.map +0 -1
- package/dist/cjs/modules/ms/components/material-list/components/file-view/file-view.js +0 -41
- package/dist/cjs/modules/ms/components/material-list/components/file-view/file-view.js.map +0 -1
- package/dist/cjs/modules/ms/components/material-list/components/file-view/index.js +0 -10
- package/dist/cjs/modules/ms/components/material-list/components/file-view/index.js.map +0 -1
- package/dist/cjs/modules/ms/components/material-list/components/image-view/image-view-options.js +0 -14
- package/dist/cjs/modules/ms/components/material-list/components/image-view/image-view-options.js.map +0 -1
- package/dist/cjs/modules/ms/components/material-list/components/image-view/image-view.js +0 -26
- package/dist/cjs/modules/ms/components/material-list/components/image-view/image-view.js.map +0 -1
- package/dist/cjs/modules/ms/components/material-list/components/image-view/index.js +0 -10
- package/dist/cjs/modules/ms/components/material-list/components/image-view/index.js.map +0 -1
- package/dist/cjs/modules/ms/components/material-list/components/video-view/index.js +0 -10
- package/dist/cjs/modules/ms/components/material-list/components/video-view/index.js.map +0 -1
- package/dist/cjs/modules/ms/components/material-list/components/video-view/video-view-options.js +0 -10
- package/dist/cjs/modules/ms/components/material-list/components/video-view/video-view-options.js.map +0 -1
- package/dist/cjs/modules/ms/components/material-list/components/video-view/video-view.js +0 -101
- package/dist/cjs/modules/ms/components/material-list/components/video-view/video-view.js.map +0 -1
- package/dist/cjs/modules/ms/components/material-list/index.js +0 -10
- package/dist/cjs/modules/ms/components/material-list/index.js.map +0 -1
- package/dist/cjs/modules/ms/components/material-list/material-group-form-popover.js +0 -81
- package/dist/cjs/modules/ms/components/material-list/material-group-form-popover.js.map +0 -1
- package/dist/cjs/modules/ms/components/material-list/material-group.js +0 -150
- package/dist/cjs/modules/ms/components/material-list/material-group.js.map +0 -1
- package/dist/cjs/modules/ms/components/material-list/material-item.vue.js +0 -148
- package/dist/cjs/modules/ms/components/material-list/material-item.vue.js.map +0 -1
- package/dist/cjs/modules/ms/components/material-list/material-item.vue2.js +0 -4
- package/dist/cjs/modules/ms/components/material-list/material-item.vue2.js.map +0 -1
- package/dist/cjs/modules/ms/components/material-list/material-list-options.js +0 -100
- package/dist/cjs/modules/ms/components/material-list/material-list-options.js.map +0 -1
- package/dist/cjs/modules/ms/components/material-list/material-list.js +0 -387
- package/dist/cjs/modules/ms/components/material-list/material-list.js.map +0 -1
- package/dist/cjs/modules/ms/components/material-select/index.js +0 -7
- package/dist/cjs/modules/ms/components/material-select/index.js.map +0 -1
- package/dist/cjs/modules/ms/components/material-select/material-select-api.js +0 -147
- package/dist/cjs/modules/ms/components/material-select/material-select-api.js.map +0 -1
- package/dist/cjs/modules/ms/components/rich-text-editor/content.css.js +0 -4
- package/dist/cjs/modules/ms/components/rich-text-editor/content.css.js.map +0 -1
- package/dist/cjs/modules/ms/components/rich-text-editor/index.js +0 -11
- package/dist/cjs/modules/ms/components/rich-text-editor/index.js.map +0 -1
- package/dist/cjs/modules/ms/components/rich-text-editor/langs/zh-Hans.js +0 -3
- package/dist/cjs/modules/ms/components/rich-text-editor/langs/zh-Hans.js.map +0 -1
- package/dist/cjs/modules/ms/components/rich-text-editor/rich-text-editor-options.js +0 -34
- package/dist/cjs/modules/ms/components/rich-text-editor/rich-text-editor-options.js.map +0 -1
- package/dist/cjs/modules/ms/components/rich-text-editor/rich-text-editor.js +0 -114
- package/dist/cjs/modules/ms/components/rich-text-editor/rich-text-editor.js.map +0 -1
- package/dist/cjs/modules/ms/components/rich-text-editor/skins/content/ms/content.js +0 -3
- package/dist/cjs/modules/ms/components/rich-text-editor/skins/content/ms/content.js.map +0 -1
- package/dist/cjs/modules/ms/components/rich-text-editor/skins/ui/ms/content.js +0 -3
- package/dist/cjs/modules/ms/components/rich-text-editor/skins/ui/ms/content.js.map +0 -1
- package/dist/cjs/modules/ms/components/rich-text-editor/skins/ui/ms/skin.js +0 -3
- package/dist/cjs/modules/ms/components/rich-text-editor/skins/ui/ms/skin.js.map +0 -1
- package/dist/cjs/modules/ms/constants/index.js +0 -5
- package/dist/cjs/modules/ms/constants/index.js.map +0 -1
- package/dist/cjs/modules/ms/dataviews/department/DepartmentForm.js +0 -33
- package/dist/cjs/modules/ms/dataviews/department/DepartmentForm.js.map +0 -1
- package/dist/cjs/modules/ms/dataviews/department/DepartmentTable.js +0 -52
- package/dist/cjs/modules/ms/dataviews/department/DepartmentTable.js.map +0 -1
- package/dist/cjs/modules/ms/dataviews/department/DepartmentTree.js +0 -35
- package/dist/cjs/modules/ms/dataviews/department/DepartmentTree.js.map +0 -1
- package/dist/cjs/modules/ms/dataviews/log/local-log/LocalLogTree.js +0 -47
- package/dist/cjs/modules/ms/dataviews/log/local-log/LocalLogTree.js.map +0 -1
- package/dist/cjs/modules/ms/dataviews/log/login-log/LoginLogTable.js +0 -39
- package/dist/cjs/modules/ms/dataviews/log/login-log/LoginLogTable.js.map +0 -1
- package/dist/cjs/modules/ms/dataviews/log/operate-log/OperateLogTable.js +0 -20
- package/dist/cjs/modules/ms/dataviews/log/operate-log/OperateLogTable.js.map +0 -1
- package/dist/cjs/modules/ms/dataviews/log/request-log/RequestLogTable.js +0 -60
- package/dist/cjs/modules/ms/dataviews/log/request-log/RequestLogTable.js.map +0 -1
- package/dist/cjs/modules/ms/dataviews/ms-config/MsConfigForm.js +0 -139
- package/dist/cjs/modules/ms/dataviews/ms-config/MsConfigForm.js.map +0 -1
- package/dist/cjs/modules/ms/dataviews/ms-config/MsConfigTable.js +0 -126
- package/dist/cjs/modules/ms/dataviews/ms-config/MsConfigTable.js.map +0 -1
- package/dist/cjs/modules/ms/dataviews/ms-deny-ip-access-list/MsDenyIPAccessListForm.js +0 -35
- package/dist/cjs/modules/ms/dataviews/ms-deny-ip-access-list/MsDenyIPAccessListForm.js.map +0 -1
- package/dist/cjs/modules/ms/dataviews/ms-deny-ip-access-list/MsDenyIPAccessListTable.js +0 -93
- package/dist/cjs/modules/ms/dataviews/ms-deny-ip-access-list/MsDenyIPAccessListTable.js.map +0 -1
- package/dist/cjs/modules/ms/dataviews/ms-ip-white-list/MsIPWhitelistForm.js +0 -43
- package/dist/cjs/modules/ms/dataviews/ms-ip-white-list/MsIPWhitelistForm.js.map +0 -1
- package/dist/cjs/modules/ms/dataviews/ms-ip-white-list/MsIPWhitelistTable.js +0 -93
- package/dist/cjs/modules/ms/dataviews/ms-ip-white-list/MsIPWhitelistTable.js.map +0 -1
- package/dist/cjs/modules/ms/dataviews/ms-material/MsMaterialComponents.js +0 -32
- package/dist/cjs/modules/ms/dataviews/ms-material/MsMaterialComponents.js.map +0 -1
- package/dist/cjs/modules/ms/dataviews/ms-material/MsMaterialForm.js +0 -49
- package/dist/cjs/modules/ms/dataviews/ms-material/MsMaterialForm.js.map +0 -1
- package/dist/cjs/modules/ms/dataviews/ms-material/MsMaterialTable.js +0 -188
- package/dist/cjs/modules/ms/dataviews/ms-material/MsMaterialTable.js.map +0 -1
- package/dist/cjs/modules/ms/dataviews/ms-material/ms-material-group/MsMaterialGroupForm.js +0 -38
- package/dist/cjs/modules/ms/dataviews/ms-material/ms-material-group/MsMaterialGroupForm.js.map +0 -1
- package/dist/cjs/modules/ms/dataviews/ms-material/ms-material-group/MsMaterialGroupTree.js +0 -54
- package/dist/cjs/modules/ms/dataviews/ms-material/ms-material-group/MsMaterialGroupTree.js.map +0 -1
- package/dist/cjs/modules/ms/dataviews/ms-member/MsMemberForm.js +0 -109
- package/dist/cjs/modules/ms/dataviews/ms-member/MsMemberForm.js.map +0 -1
- package/dist/cjs/modules/ms/dataviews/ms-member/MsMemberTable.js +0 -421
- package/dist/cjs/modules/ms/dataviews/ms-member/MsMemberTable.js.map +0 -1
- package/dist/cjs/modules/ms/dataviews/ms-member/components/MemberNickNameColumn.js +0 -37
- package/dist/cjs/modules/ms/dataviews/ms-member/components/MemberNickNameColumn.js.map +0 -1
- package/dist/cjs/modules/ms/dataviews/ms-member/components/MemberRolesColumn.js +0 -94
- package/dist/cjs/modules/ms/dataviews/ms-member/components/MemberRolesColumn.js.map +0 -1
- package/dist/cjs/modules/ms/dataviews/ms-member-role/MsMemberRoleForm.js +0 -31
- package/dist/cjs/modules/ms/dataviews/ms-member-role/MsMemberRoleForm.js.map +0 -1
- package/dist/cjs/modules/ms/dataviews/ms-member-role/MsMemberRoleTable.js +0 -91
- package/dist/cjs/modules/ms/dataviews/ms-member-role/MsMemberRoleTable.js.map +0 -1
- package/dist/cjs/modules/ms/dataviews/ms-menu/MsMenuForm.js +0 -157
- package/dist/cjs/modules/ms/dataviews/ms-menu/MsMenuForm.js.map +0 -1
- package/dist/cjs/modules/ms/dataviews/ms-menu/MsMenuTable.js +0 -56
- package/dist/cjs/modules/ms/dataviews/ms-menu/MsMenuTable.js.map +0 -1
- package/dist/cjs/modules/ms/dataviews/ms-menu/MsMenuTree.js +0 -76
- package/dist/cjs/modules/ms/dataviews/ms-menu/MsMenuTree.js.map +0 -1
- package/dist/cjs/modules/ms/dataviews/ms-menu/ms-permission-point/MsPermissionPointDefineForm.js +0 -47
- package/dist/cjs/modules/ms/dataviews/ms-menu/ms-permission-point/MsPermissionPointDefineForm.js.map +0 -1
- package/dist/cjs/modules/ms/dataviews/ms-menu/ms-permission-point/MsPermissionPointDefineTable.js +0 -35
- package/dist/cjs/modules/ms/dataviews/ms-menu/ms-permission-point/MsPermissionPointDefineTable.js.map +0 -1
- package/dist/cjs/modules/ms/dataviews/ms-menu/ms-route/MsRouteForm.js +0 -83
- package/dist/cjs/modules/ms/dataviews/ms-menu/ms-route/MsRouteForm.js.map +0 -1
- package/dist/cjs/modules/ms/dataviews/ms-menu/ms-route/MsRouteTable.js +0 -74
- package/dist/cjs/modules/ms/dataviews/ms-menu/ms-route/MsRouteTable.js.map +0 -1
- package/dist/cjs/modules/ms/dataviews/ms-message/MsMessageForm.js +0 -61
- package/dist/cjs/modules/ms/dataviews/ms-message/MsMessageForm.js.map +0 -1
- package/dist/cjs/modules/ms/dataviews/ms-message/MsMessageTable.js +0 -67
- package/dist/cjs/modules/ms/dataviews/ms-message/MsMessageTable.js.map +0 -1
- package/dist/cjs/modules/ms/dataviews/ms-message/SendForm.js +0 -87
- package/dist/cjs/modules/ms/dataviews/ms-message/SendForm.js.map +0 -1
- package/dist/cjs/modules/ms/dataviews/ms-region/MsRegionForm.js +0 -51
- package/dist/cjs/modules/ms/dataviews/ms-region/MsRegionForm.js.map +0 -1
- package/dist/cjs/modules/ms/dataviews/ms-region/MsRegionTable.js +0 -64
- package/dist/cjs/modules/ms/dataviews/ms-region/MsRegionTable.js.map +0 -1
- package/dist/cjs/modules/ms/dataviews/ms-role/MsRoleForm.js +0 -48
- package/dist/cjs/modules/ms/dataviews/ms-role/MsRoleForm.js.map +0 -1
- package/dist/cjs/modules/ms/dataviews/ms-role/MsRolePermissionConfigTable.js +0 -331
- package/dist/cjs/modules/ms/dataviews/ms-role/MsRolePermissionConfigTable.js.map +0 -1
- package/dist/cjs/modules/ms/dataviews/ms-role/MsRoleTable.js +0 -82
- package/dist/cjs/modules/ms/dataviews/ms-role/MsRoleTable.js.map +0 -1
- package/dist/cjs/modules/ms/dataviews/ms-role/ms-role-permission-point/MsRolePermissionPointTable.js +0 -33
- package/dist/cjs/modules/ms/dataviews/ms-role/ms-role-permission-point/MsRolePermissionPointTable.js.map +0 -1
- package/dist/cjs/modules/ms/dataviews/ms-role/ms-role-route/MsRoleRouteTable.js +0 -33
- package/dist/cjs/modules/ms/dataviews/ms-role/ms-role-route/MsRoleRouteTable.js.map +0 -1
- package/dist/cjs/modules/ms/image-upload-context/index.js +0 -57
- package/dist/cjs/modules/ms/image-upload-context/index.js.map +0 -1
- package/dist/cjs/modules/ms/index.js +0 -165
- package/dist/cjs/modules/ms/index.js.map +0 -1
- package/dist/cjs/modules/ms/material-upload-context/MaterialUploadContext.js +0 -55
- package/dist/cjs/modules/ms/material-upload-context/MaterialUploadContext.js.map +0 -1
- package/dist/cjs/modules/ms/material-upload-context/material-upload-context-options.js +0 -10
- package/dist/cjs/modules/ms/material-upload-context/material-upload-context-options.js.map +0 -1
- package/dist/cjs/modules/ms/material-upload-context/material-upload-context.js +0 -41
- package/dist/cjs/modules/ms/material-upload-context/material-upload-context.js.map +0 -1
- package/dist/cjs/modules/ms/pages/icons/index.vue.js +0 -4
- package/dist/cjs/modules/ms/pages/icons/index.vue.js.map +0 -1
- package/dist/cjs/modules/ms/pages/icons/index.vue2.js +0 -177
- package/dist/cjs/modules/ms/pages/icons/index.vue2.js.map +0 -1
- package/dist/cjs/modules/ms/pages/local-log/index.vue.js +0 -4
- package/dist/cjs/modules/ms/pages/local-log/index.vue.js.map +0 -1
- package/dist/cjs/modules/ms/pages/local-log/index.vue2.js +0 -183
- package/dist/cjs/modules/ms/pages/local-log/index.vue2.js.map +0 -1
- package/dist/cjs/modules/ms/pages/ms-material/index.vue.js +0 -4
- package/dist/cjs/modules/ms/pages/ms-material/index.vue.js.map +0 -1
- package/dist/cjs/modules/ms/pages/ms-material/index.vue2.js +0 -102
- package/dist/cjs/modules/ms/pages/ms-material/index.vue2.js.map +0 -1
- package/dist/cjs/modules/ms/pages/ms-menu/index.vue.js +0 -4
- package/dist/cjs/modules/ms/pages/ms-menu/index.vue.js.map +0 -1
- package/dist/cjs/modules/ms/pages/ms-menu/index.vue2.js +0 -186
- package/dist/cjs/modules/ms/pages/ms-menu/index.vue2.js.map +0 -1
- package/dist/cjs/modules/ms/pages/ms-role/components/aside.vue.js +0 -7
- package/dist/cjs/modules/ms/pages/ms-role/components/aside.vue.js.map +0 -1
- package/dist/cjs/modules/ms/pages/ms-role/components/aside.vue2.js +0 -250
- package/dist/cjs/modules/ms/pages/ms-role/components/aside.vue2.js.map +0 -1
- package/dist/cjs/modules/ms/pages/ms-role/components/role-permission-config/index.js +0 -11
- package/dist/cjs/modules/ms/pages/ms-role/components/role-permission-config/index.js.map +0 -1
- package/dist/cjs/modules/ms/pages/ms-role/components/role-permission-config/role-permission-config-options.js +0 -98
- package/dist/cjs/modules/ms/pages/ms-role/components/role-permission-config/role-permission-config-options.js.map +0 -1
- package/dist/cjs/modules/ms/pages/ms-role/components/role-permission-config/role-permission-config.js +0 -183
- package/dist/cjs/modules/ms/pages/ms-role/components/role-permission-config/role-permission-config.js.map +0 -1
- package/dist/cjs/modules/ms/pages/ms-role/index.vue.js +0 -7
- package/dist/cjs/modules/ms/pages/ms-role/index.vue.js.map +0 -1
- package/dist/cjs/modules/ms/pages/ms-role/index.vue2.js +0 -294
- package/dist/cjs/modules/ms/pages/ms-role/index.vue2.js.map +0 -1
- package/dist/cjs/modules/ms/pages/ms-role/permission-manage.vue.js +0 -4
- package/dist/cjs/modules/ms/pages/ms-role/permission-manage.vue.js.map +0 -1
- package/dist/cjs/modules/ms/pages/ms-role/permission-manage.vue2.js +0 -150
- package/dist/cjs/modules/ms/pages/ms-role/permission-manage.vue2.js.map +0 -1
- package/dist/cjs/modules/ms/pages/to-do/index.vue.js +0 -4
- package/dist/cjs/modules/ms/pages/to-do/index.vue.js.map +0 -1
- package/dist/cjs/modules/ms/pages/to-do/index.vue2.js +0 -144
- package/dist/cjs/modules/ms/pages/to-do/index.vue2.js.map +0 -1
- package/dist/cjs/page/index/404.vue.js +0 -10
- package/dist/cjs/page/index/404.vue.js.map +0 -1
- package/dist/cjs/page/index/dv/default/edit.vue.js +0 -4
- package/dist/cjs/page/index/dv/default/edit.vue.js.map +0 -1
- package/dist/cjs/page/index/dv/default/edit.vue2.js +0 -117
- package/dist/cjs/page/index/dv/default/edit.vue2.js.map +0 -1
- package/dist/cjs/page/index/dv/default/single/list/dialog.vue.js +0 -4
- package/dist/cjs/page/index/dv/default/single/list/dialog.vue.js.map +0 -1
- package/dist/cjs/page/index/dv/default/single/list/dialog.vue2.js +0 -104
- package/dist/cjs/page/index/dv/default/single/list/dialog.vue2.js.map +0 -1
- package/dist/cjs/page/index/dv/default/single/list/normal.vue.js +0 -4
- package/dist/cjs/page/index/dv/default/single/list/normal.vue.js.map +0 -1
- package/dist/cjs/page/index/dv/default/single/list/normal.vue2.js +0 -114
- package/dist/cjs/page/index/dv/default/single/list/normal.vue2.js.map +0 -1
- package/dist/cjs/page/index/dv/default/single/table-tree/dialog.vue.js +0 -4
- package/dist/cjs/page/index/dv/default/single/table-tree/dialog.vue.js.map +0 -1
- package/dist/cjs/page/index/dv/default/single/table-tree/dialog.vue2.js +0 -116
- package/dist/cjs/page/index/dv/default/single/table-tree/dialog.vue2.js.map +0 -1
- package/dist/cjs/page/index/dv/default/single/table-tree/normal.vue.js +0 -4
- package/dist/cjs/page/index/dv/default/single/table-tree/normal.vue.js.map +0 -1
- package/dist/cjs/page/index/dv/default/single/table-tree/normal.vue2.js +0 -126
- package/dist/cjs/page/index/dv/default/single/table-tree/normal.vue2.js.map +0 -1
- package/dist/cjs/page/index/dv/default/single/tree/dialog.vue.js +0 -4
- package/dist/cjs/page/index/dv/default/single/tree/dialog.vue.js.map +0 -1
- package/dist/cjs/page/index/dv/default/single/tree/dialog.vue2.js +0 -106
- package/dist/cjs/page/index/dv/default/single/tree/dialog.vue2.js.map +0 -1
- package/dist/cjs/page/index/dv/default/table.vue.js +0 -4
- package/dist/cjs/page/index/dv/default/table.vue.js.map +0 -1
- package/dist/cjs/page/index/dv/default/table.vue2.js +0 -122
- package/dist/cjs/page/index/dv/default/table.vue2.js.map +0 -1
- package/dist/cjs/page/index.vue.js +0 -4
- package/dist/cjs/page/index.vue.js.map +0 -1
- package/dist/cjs/page/index.vue2.js +0 -19
- package/dist/cjs/page/index.vue2.js.map +0 -1
- package/dist/cjs/page/login/index.vue.js +0 -4
- package/dist/cjs/page/login/index.vue.js.map +0 -1
- package/dist/cjs/page/login/index.vue2.js +0 -285
- package/dist/cjs/page/login/index.vue2.js.map +0 -1
- package/dist/cjs/page/signup/index.vue.js +0 -4
- package/dist/cjs/page/signup/index.vue.js.map +0 -1
- package/dist/cjs/page/signup/index.vue2.js +0 -253
- package/dist/cjs/page/signup/index.vue2.js.map +0 -1
- package/dist/cjs/router-middleware/auth.js +0 -26
- package/dist/cjs/router-middleware/auth.js.map +0 -1
- package/dist/cjs/settings.default.js +0 -59
- package/dist/cjs/settings.default.js.map +0 -1
- package/dist/cjs/settings.js +0 -9
- package/dist/cjs/settings.js.map +0 -1
- package/dist/cjs/store/index.js +0 -5
- package/dist/cjs/store/index.js.map +0 -1
- package/dist/cjs/store/modules/keepAlive.js +0 -41
- package/dist/cjs/store/modules/keepAlive.js.map +0 -1
- package/dist/cjs/store/modules/menu.js +0 -160
- package/dist/cjs/store/modules/menu.js.map +0 -1
- package/dist/cjs/store/modules/settings.js +0 -165
- package/dist/cjs/store/modules/settings.js.map +0 -1
- package/dist/cjs/store/modules/tabbar.js +0 -151
- package/dist/cjs/store/modules/tabbar.js.map +0 -1
- package/dist/cjs/tokens/ms-app-client.js +0 -7
- package/dist/cjs/tokens/ms-app-client.js.map +0 -1
- package/dist/cjs/utils/composables/useMainPage.js +0 -15
- package/dist/cjs/utils/composables/useMainPage.js.map +0 -1
- package/dist/cjs/utils/composables/useMenu.js +0 -20
- package/dist/cjs/utils/composables/useMenu.js.map +0 -1
- package/dist/cjs/utils/composables/useTabbar.js +0 -131
- package/dist/cjs/utils/composables/useTabbar.js.map +0 -1
- package/dist/cjs/utils/composables/useViewTransition.js +0 -17
- package/dist/cjs/utils/composables/useViewTransition.js.map +0 -1
- package/dist/cjs/utils/eventBus.js +0 -5
- package/dist/cjs/utils/eventBus.js.map +0 -1
- package/dist/cjs/utils/index.js +0 -8
- package/dist/cjs/utils/index.js.map +0 -1
- package/dist/cjs/utils.js +0 -148
- package/dist/cjs/utils.js.map +0 -1
- package/dist/esm/_virtual/_plugin-vue_export-helper.js +0 -11
- package/dist/esm/_virtual/_plugin-vue_export-helper.js.map +0 -1
- package/dist/esm/assets/iconfonts/iconfont.js +0 -37
- package/dist/esm/assets/iconfonts/iconfont.js.map +0 -1
- package/dist/esm/assets/iconfonts/oa-iconfont.js +0 -37
- package/dist/esm/assets/iconfonts/oa-iconfont.js.map +0 -1
- package/dist/esm/assets/styles/resources/utils.scss.js +0 -2
- package/dist/esm/assets/styles/resources/utils.scss.js.map +0 -1
- package/dist/esm/assets/styles/resources/variables.scss.js +0 -2
- package/dist/esm/assets/styles/resources/variables.scss.js.map +0 -1
- package/dist/esm/components/abstract/abstract-select/abstract-select-options.js +0 -47
- package/dist/esm/components/abstract/abstract-select/abstract-select-options.js.map +0 -1
- package/dist/esm/components/abstract/abstract-select/abstract-select.js +0 -157
- package/dist/esm/components/abstract/abstract-select/abstract-select.js.map +0 -1
- package/dist/esm/components/abstract/abstract-select/index.js +0 -10
- package/dist/esm/components/abstract/abstract-select/index.js.map +0 -1
- package/dist/esm/components/basic/button/button-options.js +0 -35
- package/dist/esm/components/basic/button/button-options.js.map +0 -1
- package/dist/esm/components/basic/button/button.js +0 -37
- package/dist/esm/components/basic/button/button.js.map +0 -1
- package/dist/esm/components/basic/button/index.js +0 -10
- package/dist/esm/components/basic/button/index.js.map +0 -1
- package/dist/esm/components/basic/code-editor/code-editor-options.js +0 -23
- package/dist/esm/components/basic/code-editor/code-editor-options.js.map +0 -1
- package/dist/esm/components/basic/code-editor/code-editor.js +0 -29
- package/dist/esm/components/basic/code-editor/code-editor.js.map +0 -1
- package/dist/esm/components/basic/code-editor/index.js +0 -10
- package/dist/esm/components/basic/code-editor/index.js.map +0 -1
- package/dist/esm/components/basic/config-provider/config-provider-options.js +0 -27
- package/dist/esm/components/basic/config-provider/config-provider-options.js.map +0 -1
- package/dist/esm/components/basic/config-provider/config-provider.js +0 -33
- package/dist/esm/components/basic/config-provider/config-provider.js.map +0 -1
- package/dist/esm/components/basic/config-provider/constants.js +0 -5
- package/dist/esm/components/basic/config-provider/constants.js.map +0 -1
- package/dist/esm/components/basic/config-provider/index.js +0 -11
- package/dist/esm/components/basic/config-provider/index.js.map +0 -1
- package/dist/esm/components/basic/config-provider/use-global-config.js +0 -39
- package/dist/esm/components/basic/config-provider/use-global-config.js.map +0 -1
- package/dist/esm/components/basic/copy-container/copy-container.js +0 -41
- package/dist/esm/components/basic/copy-container/copy-container.js.map +0 -1
- package/dist/esm/components/basic/copy-container/index.js +0 -8
- package/dist/esm/components/basic/copy-container/index.js.map +0 -1
- package/dist/esm/components/basic/data-select/data-select-options.js +0 -31
- package/dist/esm/components/basic/data-select/data-select-options.js.map +0 -1
- package/dist/esm/components/basic/data-select/data-select.js +0 -96
- package/dist/esm/components/basic/data-select/data-select.js.map +0 -1
- package/dist/esm/components/basic/data-select/index.js +0 -11
- package/dist/esm/components/basic/data-select/index.js.map +0 -1
- package/dist/esm/components/basic/data-table-select/data-table-select-options.js +0 -24
- package/dist/esm/components/basic/data-table-select/data-table-select-options.js.map +0 -1
- package/dist/esm/components/basic/data-table-select/data-table-select.js +0 -80
- package/dist/esm/components/basic/data-table-select/data-table-select.js.map +0 -1
- package/dist/esm/components/basic/data-table-select/index.js +0 -8
- package/dist/esm/components/basic/data-table-select/index.js.map +0 -1
- package/dist/esm/components/basic/data-tree-select/data-tree-select-options.js +0 -38
- package/dist/esm/components/basic/data-tree-select/data-tree-select-options.js.map +0 -1
- package/dist/esm/components/basic/data-tree-select/data-tree-select.js +0 -93
- package/dist/esm/components/basic/data-tree-select/data-tree-select.js.map +0 -1
- package/dist/esm/components/basic/data-tree-select/index.js +0 -11
- package/dist/esm/components/basic/data-tree-select/index.js.map +0 -1
- package/dist/esm/components/basic/date-picker/date-picker-options.js +0 -28
- package/dist/esm/components/basic/date-picker/date-picker-options.js.map +0 -1
- package/dist/esm/components/basic/date-picker/date-picker.js +0 -49
- package/dist/esm/components/basic/date-picker/date-picker.js.map +0 -1
- package/dist/esm/components/basic/date-picker/index.js +0 -12
- package/dist/esm/components/basic/date-picker/index.js.map +0 -1
- package/dist/esm/components/basic/doc-editor/editor.vue.js +0 -8
- package/dist/esm/components/basic/doc-editor/editor.vue.js.map +0 -1
- package/dist/esm/components/basic/doc-editor/editor.vue2.js +0 -82
- package/dist/esm/components/basic/doc-editor/editor.vue2.js.map +0 -1
- package/dist/esm/components/basic/doc-editor/index.js +0 -8
- package/dist/esm/components/basic/doc-editor/index.js.map +0 -1
- package/dist/esm/components/basic/dynamic-form-panel/DynamicFormPanel.js +0 -77
- package/dist/esm/components/basic/dynamic-form-panel/DynamicFormPanel.js.map +0 -1
- package/dist/esm/components/basic/dynamic-form-panel/dialog.js +0 -42
- package/dist/esm/components/basic/dynamic-form-panel/dialog.js.map +0 -1
- package/dist/esm/components/basic/dynamic-form-panel/utils.js +0 -11
- package/dist/esm/components/basic/dynamic-form-panel/utils.js.map +0 -1
- package/dist/esm/components/basic/icon-select/icon-select-options.js +0 -19
- package/dist/esm/components/basic/icon-select/icon-select-options.js.map +0 -1
- package/dist/esm/components/basic/icon-select/icon-select.js +0 -80
- package/dist/esm/components/basic/icon-select/icon-select.js.map +0 -1
- package/dist/esm/components/basic/icon-select/index.js +0 -8
- package/dist/esm/components/basic/icon-select/index.js.map +0 -1
- package/dist/esm/components/basic/image-cropper/image-cropper-api.js +0 -65
- package/dist/esm/components/basic/image-cropper/image-cropper-api.js.map +0 -1
- package/dist/esm/components/basic/image-cropper/image-cropper-content-options.js +0 -20
- package/dist/esm/components/basic/image-cropper/image-cropper-content-options.js.map +0 -1
- package/dist/esm/components/basic/image-cropper/image-cropper-content.js +0 -207
- package/dist/esm/components/basic/image-cropper/image-cropper-content.js.map +0 -1
- package/dist/esm/components/basic/image-cropper/index.js +0 -15
- package/dist/esm/components/basic/image-cropper/index.js.map +0 -1
- package/dist/esm/components/basic/json-editor/index.js +0 -10
- package/dist/esm/components/basic/json-editor/index.js.map +0 -1
- package/dist/esm/components/basic/json-editor/json-editor-options.js +0 -19
- package/dist/esm/components/basic/json-editor/json-editor-options.js.map +0 -1
- package/dist/esm/components/basic/json-editor/json-editor.js +0 -30
- package/dist/esm/components/basic/json-editor/json-editor.js.map +0 -1
- package/dist/esm/components/basic/lexical-editor/DocTheme.js +0 -107
- package/dist/esm/components/basic/lexical-editor/DocTheme.js.map +0 -1
- package/dist/esm/components/basic/lexical-editor/LexicalComposer.vue.js +0 -104
- package/dist/esm/components/basic/lexical-editor/LexicalComposer.vue.js.map +0 -1
- package/dist/esm/components/basic/lexical-editor/LexicalComposer.vue3.js +0 -6
- package/dist/esm/components/basic/lexical-editor/LexicalComposer.vue3.js.map +0 -1
- package/dist/esm/components/basic/lexical-editor/assets/doc-editor-stage.css.js +0 -5
- package/dist/esm/components/basic/lexical-editor/assets/doc-editor-stage.css.js.map +0 -1
- package/dist/esm/components/basic/lexical-editor/assets/doc-editor.css.js +0 -5
- package/dist/esm/components/basic/lexical-editor/assets/doc-editor.css.js.map +0 -1
- package/dist/esm/components/basic/lexical-editor/assets/iconfont.js +0 -36
- package/dist/esm/components/basic/lexical-editor/assets/iconfont.js.map +0 -1
- package/dist/esm/components/basic/lexical-editor/composables/lexicalEditor.js +0 -193
- package/dist/esm/components/basic/lexical-editor/composables/lexicalEditor.js.map +0 -1
- package/dist/esm/components/basic/lexical-editor/composables/listenerManager.js +0 -18
- package/dist/esm/components/basic/lexical-editor/composables/listenerManager.js.map +0 -1
- package/dist/esm/components/basic/lexical-editor/composables/useCharacterLimit.js +0 -187
- package/dist/esm/components/basic/lexical-editor/composables/useCharacterLimit.js.map +0 -1
- package/dist/esm/components/basic/lexical-editor/composables/useElementBlockSelection.js +0 -56
- package/dist/esm/components/basic/lexical-editor/composables/useElementBlockSelection.js.map +0 -1
- package/dist/esm/components/basic/lexical-editor/composables/useLexicalCommandsLog.js +0 -37
- package/dist/esm/components/basic/lexical-editor/composables/useLexicalCommandsLog.js.map +0 -1
- package/dist/esm/components/basic/lexical-editor/composables/useLexicalEditorState.js +0 -237
- package/dist/esm/components/basic/lexical-editor/composables/useLexicalEditorState.js.map +0 -1
- package/dist/esm/components/basic/lexical-editor/composables/useLexicalIsTextContentEmpty.js +0 -21
- package/dist/esm/components/basic/lexical-editor/composables/useLexicalIsTextContentEmpty.js.map +0 -1
- package/dist/esm/components/basic/lexical-editor/composables/useTableOfContents.js +0 -176
- package/dist/esm/components/basic/lexical-editor/composables/useTableOfContents.js.map +0 -1
- package/dist/esm/components/basic/lexical-editor/composables/utils.js +0 -24
- package/dist/esm/components/basic/lexical-editor/composables/utils.js.map +0 -1
- package/dist/esm/components/basic/lexical-editor/nodes/HtmlElementDecoratorNode.js +0 -187
- package/dist/esm/components/basic/lexical-editor/nodes/HtmlElementDecoratorNode.js.map +0 -1
- package/dist/esm/components/basic/lexical-editor/nodes/HtmlElementNode.js +0 -159
- package/dist/esm/components/basic/lexical-editor/nodes/HtmlElementNode.js.map +0 -1
- package/dist/esm/components/basic/lexical-editor/nodes/ImageNode.js +0 -138
- package/dist/esm/components/basic/lexical-editor/nodes/ImageNode.js.map +0 -1
- package/dist/esm/components/basic/lexical-editor/nodes/ImageTextWarpNode.js +0 -120
- package/dist/esm/components/basic/lexical-editor/nodes/ImageTextWarpNode.js.map +0 -1
- package/dist/esm/components/basic/lexical-editor/nodes/ModuleDecoratorNode.js +0 -195
- package/dist/esm/components/basic/lexical-editor/nodes/ModuleDecoratorNode.js.map +0 -1
- package/dist/esm/components/basic/lexical-editor/nodes/ModuleDecoratorWarpNode.js +0 -76
- package/dist/esm/components/basic/lexical-editor/nodes/ModuleDecoratorWarpNode.js.map +0 -1
- package/dist/esm/components/basic/lexical-editor/nodes/Template.js +0 -8
- package/dist/esm/components/basic/lexical-editor/nodes/Template.js.map +0 -1
- package/dist/esm/components/basic/lexical-editor/nodes/index.js +0 -45
- package/dist/esm/components/basic/lexical-editor/nodes/index.js.map +0 -1
- package/dist/esm/components/basic/lexical-editor/plugins/AutoFocusPlugin.vue.js +0 -46
- package/dist/esm/components/basic/lexical-editor/plugins/AutoFocusPlugin.vue.js.map +0 -1
- package/dist/esm/components/basic/lexical-editor/plugins/AutoFocusPlugin.vue2.js +0 -5
- package/dist/esm/components/basic/lexical-editor/plugins/AutoFocusPlugin.vue2.js.map +0 -1
- package/dist/esm/components/basic/lexical-editor/plugins/CheckListPlugin.js +0 -212
- package/dist/esm/components/basic/lexical-editor/plugins/CheckListPlugin.js.map +0 -1
- package/dist/esm/components/basic/lexical-editor/plugins/ElementBlockSelectionPlugin.vue.js +0 -8
- package/dist/esm/components/basic/lexical-editor/plugins/ElementBlockSelectionPlugin.vue.js.map +0 -1
- package/dist/esm/components/basic/lexical-editor/plugins/ElementBlockSelectionPlugin.vue3.js +0 -387
- package/dist/esm/components/basic/lexical-editor/plugins/ElementBlockSelectionPlugin.vue3.js.map +0 -1
- package/dist/esm/components/basic/lexical-editor/plugins/HashtagPlugin.js +0 -72
- package/dist/esm/components/basic/lexical-editor/plugins/HashtagPlugin.js.map +0 -1
- package/dist/esm/components/basic/lexical-editor/plugins/HistoryPlugin.vue.js +0 -39
- package/dist/esm/components/basic/lexical-editor/plugins/HistoryPlugin.vue.js.map +0 -1
- package/dist/esm/components/basic/lexical-editor/plugins/HistoryPlugin.vue2.js +0 -5
- package/dist/esm/components/basic/lexical-editor/plugins/HistoryPlugin.vue2.js.map +0 -1
- package/dist/esm/components/basic/lexical-editor/plugins/ListPlugin.js +0 -95
- package/dist/esm/components/basic/lexical-editor/plugins/ListPlugin.js.map +0 -1
- package/dist/esm/components/basic/lexical-editor/plugins/NodeTreeViewPlugin.vue.js +0 -8
- package/dist/esm/components/basic/lexical-editor/plugins/NodeTreeViewPlugin.vue.js.map +0 -1
- package/dist/esm/components/basic/lexical-editor/plugins/NodeTreeViewPlugin.vue3.js +0 -101
- package/dist/esm/components/basic/lexical-editor/plugins/NodeTreeViewPlugin.vue3.js.map +0 -1
- package/dist/esm/components/basic/lexical-editor/plugins/RichTextEditorPlugin.js +0 -400
- package/dist/esm/components/basic/lexical-editor/plugins/RichTextEditorPlugin.js.map +0 -1
- package/dist/esm/components/basic/lexical-editor/plugins/TabIndentationPlugin.vue.js +0 -45
- package/dist/esm/components/basic/lexical-editor/plugins/TabIndentationPlugin.vue.js.map +0 -1
- package/dist/esm/components/basic/lexical-editor/plugins/TabIndentationPlugin.vue2.js +0 -5
- package/dist/esm/components/basic/lexical-editor/plugins/TabIndentationPlugin.vue2.js.map +0 -1
- package/dist/esm/components/basic/lexical-editor/plugins/TablePlugin.js +0 -136
- package/dist/esm/components/basic/lexical-editor/plugins/TablePlugin.js.map +0 -1
- package/dist/esm/components/basic/lexical-editor/plugins/ToolbarPlugin.vue.js +0 -9
- package/dist/esm/components/basic/lexical-editor/plugins/ToolbarPlugin.vue.js.map +0 -1
- package/dist/esm/components/basic/lexical-editor/plugins/ToolbarPlugin.vue4.js +0 -434
- package/dist/esm/components/basic/lexical-editor/plugins/ToolbarPlugin.vue4.js.map +0 -1
- package/dist/esm/components/basic/lexical-editor/stage/ContentEditable.vue.js +0 -83
- package/dist/esm/components/basic/lexical-editor/stage/ContentEditable.vue.js.map +0 -1
- package/dist/esm/components/basic/lexical-editor/stage/ContentEditable.vue2.js +0 -5
- package/dist/esm/components/basic/lexical-editor/stage/ContentEditable.vue2.js.map +0 -1
- package/dist/esm/components/basic/lexical-editor/stage/DecoratedTeleports.js +0 -46
- package/dist/esm/components/basic/lexical-editor/stage/DecoratedTeleports.js.map +0 -1
- package/dist/esm/components/basic/lexical-editor/stage/composables.js +0 -42
- package/dist/esm/components/basic/lexical-editor/stage/composables.js.map +0 -1
- package/dist/esm/components/basic/lexical-editor/stage/index.js +0 -5
- package/dist/esm/components/basic/lexical-editor/stage/index.js.map +0 -1
- package/dist/esm/components/basic/lexical-editor/stage/index.vue.js +0 -8
- package/dist/esm/components/basic/lexical-editor/stage/index.vue.js.map +0 -1
- package/dist/esm/components/basic/lexical-editor/stage/index.vue3.js +0 -134
- package/dist/esm/components/basic/lexical-editor/stage/index.vue3.js.map +0 -1
- package/dist/esm/components/basic/lexical-editor/utils/css.js +0 -27
- package/dist/esm/components/basic/lexical-editor/utils/css.js.map +0 -1
- package/dist/esm/components/basic/lexical-editor/utils/html.js +0 -227
- package/dist/esm/components/basic/lexical-editor/utils/html.js.map +0 -1
- package/dist/esm/components/basic/lexical-editor/utils/image.js +0 -342
- package/dist/esm/components/basic/lexical-editor/utils/image.js.map +0 -1
- package/dist/esm/components/basic/lexical-editor/utils/link-edit-dialog.js +0 -51
- package/dist/esm/components/basic/lexical-editor/utils/link-edit-dialog.js.map +0 -1
- package/dist/esm/components/basic/lexical-editor/utils/module.js +0 -90
- package/dist/esm/components/basic/lexical-editor/utils/module.js.map +0 -1
- package/dist/esm/components/basic/lexical-editor/utils/template.js +0 -133
- package/dist/esm/components/basic/lexical-editor/utils/template.js.map +0 -1
- package/dist/esm/components/basic/lexical-editor/utils/url.js +0 -21
- package/dist/esm/components/basic/lexical-editor/utils/url.js.map +0 -1
- package/dist/esm/components/basic/page-container/index.js +0 -8
- package/dist/esm/components/basic/page-container/index.js.map +0 -1
- package/dist/esm/components/basic/page-container/page-container.vue.js +0 -8
- package/dist/esm/components/basic/page-container/page-container.vue.js.map +0 -1
- package/dist/esm/components/basic/page-container/page-container.vue2.js +0 -17
- package/dist/esm/components/basic/page-container/page-container.vue2.js.map +0 -1
- package/dist/esm/components/basic/pagination/index.js +0 -11
- package/dist/esm/components/basic/pagination/index.js.map +0 -1
- package/dist/esm/components/basic/pagination/pagination-options.js +0 -28
- package/dist/esm/components/basic/pagination/pagination-options.js.map +0 -1
- package/dist/esm/components/basic/pagination/pagination.js +0 -40
- package/dist/esm/components/basic/pagination/pagination.js.map +0 -1
- package/dist/esm/components/basic/radio/index.js +0 -11
- package/dist/esm/components/basic/radio/index.js.map +0 -1
- package/dist/esm/components/basic/radio/radio-options.js +0 -34
- package/dist/esm/components/basic/radio/radio-options.js.map +0 -1
- package/dist/esm/components/basic/radio/radio.js +0 -61
- package/dist/esm/components/basic/radio/radio.js.map +0 -1
- package/dist/esm/components/basic/svg-icon/index.js +0 -8
- package/dist/esm/components/basic/svg-icon/index.js.map +0 -1
- package/dist/esm/components/basic/svg-icon/svg-icon.vue.js +0 -94
- package/dist/esm/components/basic/svg-icon/svg-icon.vue.js.map +0 -1
- package/dist/esm/components/basic/svg-icon/svg-icon.vue2.js +0 -5
- package/dist/esm/components/basic/svg-icon/svg-icon.vue2.js.map +0 -1
- package/dist/esm/components/basic/system-provider/index.js +0 -8
- package/dist/esm/components/basic/system-provider/index.js.map +0 -1
- package/dist/esm/components/basic/system-provider/system-provider.js +0 -71
- package/dist/esm/components/basic/system-provider/system-provider.js.map +0 -1
- package/dist/esm/components/basic/upload-file/context/UploadContext.js +0 -13
- package/dist/esm/components/basic/upload-file/context/UploadContext.js.map +0 -1
- package/dist/esm/components/basic/upload-file/context/WebFileUploadContext.js +0 -37
- package/dist/esm/components/basic/upload-file/context/WebFileUploadContext.js.map +0 -1
- package/dist/esm/components/basic/upload-file/context/web-file-upload-context-options.js +0 -14
- package/dist/esm/components/basic/upload-file/context/web-file-upload-context-options.js.map +0 -1
- package/dist/esm/components/basic/upload-file/context/web-file-upload-context.js +0 -37
- package/dist/esm/components/basic/upload-file/context/web-file-upload-context.js.map +0 -1
- package/dist/esm/components/basic/upload-file/index.js +0 -33
- package/dist/esm/components/basic/upload-file/index.js.map +0 -1
- package/dist/esm/components/basic/upload-file/ui/upload-file/index.js +0 -11
- package/dist/esm/components/basic/upload-file/ui/upload-file/index.js.map +0 -1
- package/dist/esm/components/basic/upload-file/ui/upload-file/upload-file-options.js +0 -38
- package/dist/esm/components/basic/upload-file/ui/upload-file/upload-file-options.js.map +0 -1
- package/dist/esm/components/basic/upload-file/ui/upload-file/upload-file.js +0 -225
- package/dist/esm/components/basic/upload-file/ui/upload-file/upload-file.js.map +0 -1
- package/dist/esm/components/basic/upload-file/ui/upload-image/index.js +0 -11
- package/dist/esm/components/basic/upload-file/ui/upload-image/index.js.map +0 -1
- package/dist/esm/components/basic/upload-file/ui/upload-image/upload-image-options.js +0 -38
- package/dist/esm/components/basic/upload-file/ui/upload-image/upload-image-options.js.map +0 -1
- package/dist/esm/components/basic/upload-file/ui/upload-image/upload-image.js +0 -214
- package/dist/esm/components/basic/upload-file/ui/upload-image/upload-image.js.map +0 -1
- package/dist/esm/components/basic/upload-file/ui/upload-video/index.js +0 -11
- package/dist/esm/components/basic/upload-file/ui/upload-video/index.js.map +0 -1
- package/dist/esm/components/basic/upload-file/ui/upload-video/upload-video-options.js +0 -38
- package/dist/esm/components/basic/upload-file/ui/upload-video/upload-video-options.js.map +0 -1
- package/dist/esm/components/basic/upload-file/ui/upload-video/upload-video.js +0 -223
- package/dist/esm/components/basic/upload-file/ui/upload-video/upload-video.js.map +0 -1
- package/dist/esm/components/basic/upload-file/upload-file-options.js +0 -23
- package/dist/esm/components/basic/upload-file/upload-file-options.js.map +0 -1
- package/dist/esm/components/basic/upload-file/upload-file.js +0 -56
- package/dist/esm/components/basic/upload-file/upload-file.js.map +0 -1
- package/dist/esm/components/basic/visual-page-editor/content-editable.vue.js +0 -201
- package/dist/esm/components/basic/visual-page-editor/content-editable.vue.js.map +0 -1
- package/dist/esm/components/basic/visual-page-editor/content-editable.vue2.js +0 -5
- package/dist/esm/components/basic/visual-page-editor/content-editable.vue2.js.map +0 -1
- package/dist/esm/components/basic/visual-page-editor/core/BlockRender.js +0 -39
- package/dist/esm/components/basic/visual-page-editor/core/BlockRender.js.map +0 -1
- package/dist/esm/components/basic/visual-page-editor/core/Dialog.js +0 -78
- package/dist/esm/components/basic/visual-page-editor/core/Dialog.js.map +0 -1
- package/dist/esm/components/basic/visual-page-editor/core/VisvalPageEditor.js +0 -135
- package/dist/esm/components/basic/visual-page-editor/core/VisvalPageEditor.js.map +0 -1
- package/dist/esm/components/basic/visual-page-editor/core/index.js +0 -32
- package/dist/esm/components/basic/visual-page-editor/core/index.js.map +0 -1
- package/dist/esm/components/basic/visual-page-editor/editor.vue.js +0 -35
- package/dist/esm/components/basic/visual-page-editor/editor.vue.js.map +0 -1
- package/dist/esm/components/basic/visual-page-editor/editor.vue2.js +0 -5
- package/dist/esm/components/basic/visual-page-editor/editor.vue2.js.map +0 -1
- package/dist/esm/components/basic/visual-page-editor/index.js +0 -9
- package/dist/esm/components/basic/visual-page-editor/index.js.map +0 -1
- package/dist/esm/components/basic/visual-page-editor/modules/BaseImageModule.js +0 -9
- package/dist/esm/components/basic/visual-page-editor/modules/BaseImageModule.js.map +0 -1
- package/dist/esm/components/basic/visual-page-editor/toolbar.vue.js +0 -51
- package/dist/esm/components/basic/visual-page-editor/toolbar.vue.js.map +0 -1
- package/dist/esm/components/basic/visual-page-editor/toolbar.vue2.js +0 -5
- package/dist/esm/components/basic/visual-page-editor/toolbar.vue2.js.map +0 -1
- package/dist/esm/components/business/resource-list/ResourceManager.js +0 -197
- package/dist/esm/components/business/resource-list/ResourceManager.js.map +0 -1
- package/dist/esm/components/business/resource-list/components/resource-item/index.vue.js +0 -123
- package/dist/esm/components/business/resource-list/components/resource-item/index.vue.js.map +0 -1
- package/dist/esm/components/business/resource-list/components/resource-item/index.vue2.js +0 -5
- package/dist/esm/components/business/resource-list/components/resource-item/index.vue2.js.map +0 -1
- package/dist/esm/components/business/resource-list/index.js +0 -17
- package/dist/esm/components/business/resource-list/index.js.map +0 -1
- package/dist/esm/components/business/resource-list/resource-list.vue.js +0 -242
- package/dist/esm/components/business/resource-list/resource-list.vue.js.map +0 -1
- package/dist/esm/components/business/resource-list/resource-list.vue2.js +0 -5
- package/dist/esm/components/business/resource-list/resource-list.vue2.js.map +0 -1
- package/dist/esm/components/business/resource-manager/index.js +0 -8
- package/dist/esm/components/business/resource-manager/index.js.map +0 -1
- package/dist/esm/components/business/resource-manager/resource-manager.vue.js +0 -338
- package/dist/esm/components/business/resource-manager/resource-manager.vue.js.map +0 -1
- package/dist/esm/components/business/resource-manager/resource-manager.vue2.js +0 -5
- package/dist/esm/components/business/resource-manager/resource-manager.vue2.js.map +0 -1
- package/dist/esm/components/business/resource-select/index.js +0 -7
- package/dist/esm/components/business/resource-select/index.js.map +0 -1
- package/dist/esm/components/business/resource-select/resource-select-api.js +0 -55
- package/dist/esm/components/business/resource-select/resource-select-api.js.map +0 -1
- package/dist/esm/components/business/resource-select/resource-select-input.js +0 -51
- package/dist/esm/components/business/resource-select/resource-select-input.js.map +0 -1
- package/dist/esm/components/business/verify-dialog/index.js +0 -7
- package/dist/esm/components/business/verify-dialog/index.js.map +0 -1
- package/dist/esm/components/business/verify-dialog/verify-dialog-api.js +0 -29
- package/dist/esm/components/business/verify-dialog/verify-dialog-api.js.map +0 -1
- package/dist/esm/components/business/verify-dialog/verify-dialog-option.js +0 -20
- package/dist/esm/components/business/verify-dialog/verify-dialog-option.js.map +0 -1
- package/dist/esm/components/business/verify-dialog/verify-panel.js +0 -131
- package/dist/esm/components/business/verify-dialog/verify-panel.js.map +0 -1
- package/dist/esm/components/data-model/data-filter-drawer/data-filter-drawer-options.js +0 -20
- package/dist/esm/components/data-model/data-filter-drawer/data-filter-drawer-options.js.map +0 -1
- package/dist/esm/components/data-model/data-filter-drawer/data-filter-drawer.js +0 -69
- package/dist/esm/components/data-model/data-filter-drawer/data-filter-drawer.js.map +0 -1
- package/dist/esm/components/data-model/data-filter-drawer/index.js +0 -11
- package/dist/esm/components/data-model/data-filter-drawer/index.js.map +0 -1
- package/dist/esm/components/data-model/data-filter-form/components/condition-date/condition-date-options.js +0 -25
- package/dist/esm/components/data-model/data-filter-form/components/condition-date/condition-date-options.js.map +0 -1
- package/dist/esm/components/data-model/data-filter-form/components/condition-date/condition-date.js +0 -41
- package/dist/esm/components/data-model/data-filter-form/components/condition-date/condition-date.js.map +0 -1
- package/dist/esm/components/data-model/data-filter-form/components/condition-date/index.js +0 -11
- package/dist/esm/components/data-model/data-filter-form/components/condition-date/index.js.map +0 -1
- package/dist/esm/components/data-model/data-filter-form/components/condition-input/condition-input-options.js +0 -13
- package/dist/esm/components/data-model/data-filter-form/components/condition-input/condition-input-options.js.map +0 -1
- package/dist/esm/components/data-model/data-filter-form/components/condition-input/condition-input.js +0 -28
- package/dist/esm/components/data-model/data-filter-form/components/condition-input/condition-input.js.map +0 -1
- package/dist/esm/components/data-model/data-filter-form/components/condition-input/index.js +0 -11
- package/dist/esm/components/data-model/data-filter-form/components/condition-input/index.js.map +0 -1
- package/dist/esm/components/data-model/data-filter-form/components/condition-number/condition-number-options.js +0 -17
- package/dist/esm/components/data-model/data-filter-form/components/condition-number/condition-number-options.js.map +0 -1
- package/dist/esm/components/data-model/data-filter-form/components/condition-number/condition-number.js +0 -38
- package/dist/esm/components/data-model/data-filter-form/components/condition-number/condition-number.js.map +0 -1
- package/dist/esm/components/data-model/data-filter-form/components/condition-number/index.js +0 -11
- package/dist/esm/components/data-model/data-filter-form/components/condition-number/index.js.map +0 -1
- package/dist/esm/components/data-model/data-filter-form/components/condition-select/condition-select-options.js +0 -24
- package/dist/esm/components/data-model/data-filter-form/components/condition-select/condition-select-options.js.map +0 -1
- package/dist/esm/components/data-model/data-filter-form/components/condition-select/condition-select.js +0 -29
- package/dist/esm/components/data-model/data-filter-form/components/condition-select/condition-select.js.map +0 -1
- package/dist/esm/components/data-model/data-filter-form/components/condition-select/index.js +0 -11
- package/dist/esm/components/data-model/data-filter-form/components/condition-select/index.js.map +0 -1
- package/dist/esm/components/data-model/data-filter-form/composables/use-condition.js +0 -18
- package/dist/esm/components/data-model/data-filter-form/composables/use-condition.js.map +0 -1
- package/dist/esm/components/data-model/data-filter-form/data-filter-form-item/data-filter-form-item-options.js +0 -9
- package/dist/esm/components/data-model/data-filter-form/data-filter-form-item/data-filter-form-item-options.js.map +0 -1
- package/dist/esm/components/data-model/data-filter-form/data-filter-form-item/data-filter-form-item.js +0 -98
- package/dist/esm/components/data-model/data-filter-form/data-filter-form-item/data-filter-form-item.js.map +0 -1
- package/dist/esm/components/data-model/data-filter-form/data-filter-form-item/index.js +0 -10
- package/dist/esm/components/data-model/data-filter-form/data-filter-form-item/index.js.map +0 -1
- package/dist/esm/components/data-model/data-filter-form/data-filter-form-options.js +0 -10
- package/dist/esm/components/data-model/data-filter-form/data-filter-form-options.js.map +0 -1
- package/dist/esm/components/data-model/data-filter-form/data-filter-form.js +0 -80
- package/dist/esm/components/data-model/data-filter-form/data-filter-form.js.map +0 -1
- package/dist/esm/components/data-model/data-filter-form/index.js +0 -25
- package/dist/esm/components/data-model/data-filter-form/index.js.map +0 -1
- package/dist/esm/components/data-model/data-filter-form/operator-options.js +0 -38
- package/dist/esm/components/data-model/data-filter-form/operator-options.js.map +0 -1
- package/dist/esm/components/data-model/data-filter-form/token.js +0 -7
- package/dist/esm/components/data-model/data-filter-form/token.js.map +0 -1
- package/dist/esm/components/data-model/data-form/components/form-detail/form-detail-options.js +0 -24
- package/dist/esm/components/data-model/data-form/components/form-detail/form-detail-options.js.map +0 -1
- package/dist/esm/components/data-model/data-form/components/form-detail/form-detail.js +0 -118
- package/dist/esm/components/data-model/data-form/components/form-detail/form-detail.js.map +0 -1
- package/dist/esm/components/data-model/data-form/components/form-detail/index.js +0 -11
- package/dist/esm/components/data-model/data-form/components/form-detail/index.js.map +0 -1
- package/dist/esm/components/data-model/data-form/composables/use-form-item.js +0 -39
- package/dist/esm/components/data-model/data-form/composables/use-form-item.js.map +0 -1
- package/dist/esm/components/data-model/data-form/data-form-item/data-form-item-options.js +0 -11
- package/dist/esm/components/data-model/data-form/data-form-item/data-form-item-options.js.map +0 -1
- package/dist/esm/components/data-model/data-form/data-form-item/data-form-item.js +0 -104
- package/dist/esm/components/data-model/data-form/data-form-item/data-form-item.js.map +0 -1
- package/dist/esm/components/data-model/data-form/data-form-item/index.js +0 -9
- package/dist/esm/components/data-model/data-form/data-form-item/index.js.map +0 -1
- package/dist/esm/components/data-model/data-form/data-form-options.js +0 -41
- package/dist/esm/components/data-model/data-form/data-form-options.js.map +0 -1
- package/dist/esm/components/data-model/data-form/data-form.vue.js +0 -8
- package/dist/esm/components/data-model/data-form/data-form.vue.js.map +0 -1
- package/dist/esm/components/data-model/data-form/data-form.vue2.js +0 -91
- package/dist/esm/components/data-model/data-form/data-form.vue2.js.map +0 -1
- package/dist/esm/components/data-model/data-form/index.js +0 -19
- package/dist/esm/components/data-model/data-form/index.js.map +0 -1
- package/dist/esm/components/data-model/data-form/token.js +0 -7
- package/dist/esm/components/data-model/data-form/token.js.map +0 -1
- package/dist/esm/components/data-model/data-form/views/form/form-options.js +0 -11
- package/dist/esm/components/data-model/data-form/views/form/form-options.js.map +0 -1
- package/dist/esm/components/data-model/data-form/views/form/form.js +0 -143
- package/dist/esm/components/data-model/data-form/views/form/form.js.map +0 -1
- package/dist/esm/components/data-model/data-form/views/form/index.js +0 -8
- package/dist/esm/components/data-model/data-form/views/form/index.js.map +0 -1
- package/dist/esm/components/data-model/data-form/views/form-view/form-view-options.js +0 -11
- package/dist/esm/components/data-model/data-form/views/form-view/form-view-options.js.map +0 -1
- package/dist/esm/components/data-model/data-form/views/form-view/form-view.js +0 -64
- package/dist/esm/components/data-model/data-form/views/form-view/form-view.js.map +0 -1
- package/dist/esm/components/data-model/data-form/views/form-view/index.js +0 -8
- package/dist/esm/components/data-model/data-form/views/form-view/index.js.map +0 -1
- package/dist/esm/components/data-model/data-table/components/column-action/column-action-options.js +0 -21
- package/dist/esm/components/data-model/data-table/components/column-action/column-action-options.js.map +0 -1
- package/dist/esm/components/data-model/data-table/components/column-action/column-action.js +0 -37
- package/dist/esm/components/data-model/data-table/components/column-action/column-action.js.map +0 -1
- package/dist/esm/components/data-model/data-table/components/column-action/index.js +0 -7
- package/dist/esm/components/data-model/data-table/components/column-action/index.js.map +0 -1
- package/dist/esm/components/data-model/data-table/components/column-date/column-date-options.js +0 -13
- package/dist/esm/components/data-model/data-table/components/column-date/column-date-options.js.map +0 -1
- package/dist/esm/components/data-model/data-table/components/column-date/column-date.js +0 -45
- package/dist/esm/components/data-model/data-table/components/column-date/column-date.js.map +0 -1
- package/dist/esm/components/data-model/data-table/components/column-date/index.js +0 -10
- package/dist/esm/components/data-model/data-table/components/column-date/index.js.map +0 -1
- package/dist/esm/components/data-model/data-table/components/column-icon/column-icon-options.js +0 -10
- package/dist/esm/components/data-model/data-table/components/column-icon/column-icon-options.js.map +0 -1
- package/dist/esm/components/data-model/data-table/components/column-icon/column-icon.js +0 -32
- package/dist/esm/components/data-model/data-table/components/column-icon/column-icon.js.map +0 -1
- package/dist/esm/components/data-model/data-table/components/column-icon/index.js +0 -9
- package/dist/esm/components/data-model/data-table/components/column-icon/index.js.map +0 -1
- package/dist/esm/components/data-model/data-table/components/column-image/column-image-options.js +0 -19
- package/dist/esm/components/data-model/data-table/components/column-image/column-image-options.js.map +0 -1
- package/dist/esm/components/data-model/data-table/components/column-image/column-image.js +0 -34
- package/dist/esm/components/data-model/data-table/components/column-image/column-image.js.map +0 -1
- package/dist/esm/components/data-model/data-table/components/column-image/index.js +0 -7
- package/dist/esm/components/data-model/data-table/components/column-image/index.js.map +0 -1
- package/dist/esm/components/data-model/data-table/components/column-json/column-json-options.js +0 -23
- package/dist/esm/components/data-model/data-table/components/column-json/column-json-options.js.map +0 -1
- package/dist/esm/components/data-model/data-table/components/column-json/column-json.js +0 -57
- package/dist/esm/components/data-model/data-table/components/column-json/column-json.js.map +0 -1
- package/dist/esm/components/data-model/data-table/components/column-json/index.js +0 -10
- package/dist/esm/components/data-model/data-table/components/column-json/index.js.map +0 -1
- package/dist/esm/components/data-model/data-table/components/column-link/column-link-options.js +0 -39
- package/dist/esm/components/data-model/data-table/components/column-link/column-link-options.js.map +0 -1
- package/dist/esm/components/data-model/data-table/components/column-link/column-link.js +0 -33
- package/dist/esm/components/data-model/data-table/components/column-link/column-link.js.map +0 -1
- package/dist/esm/components/data-model/data-table/components/column-link/index.js +0 -10
- package/dist/esm/components/data-model/data-table/components/column-link/index.js.map +0 -1
- package/dist/esm/components/data-model/data-table/components/column-object-mapping-text/column-object-mapping-text-options.js +0 -20
- package/dist/esm/components/data-model/data-table/components/column-object-mapping-text/column-object-mapping-text-options.js.map +0 -1
- package/dist/esm/components/data-model/data-table/components/column-object-mapping-text/column-object-mapping-text.js +0 -22
- package/dist/esm/components/data-model/data-table/components/column-object-mapping-text/column-object-mapping-text.js.map +0 -1
- package/dist/esm/components/data-model/data-table/components/column-object-mapping-text/index.js +0 -9
- package/dist/esm/components/data-model/data-table/components/column-object-mapping-text/index.js.map +0 -1
- package/dist/esm/components/data-model/data-table/components/column-select/column-select-header-options.js +0 -6
- package/dist/esm/components/data-model/data-table/components/column-select/column-select-header-options.js.map +0 -1
- package/dist/esm/components/data-model/data-table/components/column-select/column-select-header.js +0 -44
- package/dist/esm/components/data-model/data-table/components/column-select/column-select-header.js.map +0 -1
- package/dist/esm/components/data-model/data-table/components/column-select/column-select-options.js +0 -19
- package/dist/esm/components/data-model/data-table/components/column-select/column-select-options.js.map +0 -1
- package/dist/esm/components/data-model/data-table/components/column-select/column-select.js +0 -50
- package/dist/esm/components/data-model/data-table/components/column-select/column-select.js.map +0 -1
- package/dist/esm/components/data-model/data-table/components/column-select/index.js +0 -7
- package/dist/esm/components/data-model/data-table/components/column-select/index.js.map +0 -1
- package/dist/esm/components/data-model/data-table/components/column-sort/column-sort-options.js +0 -23
- package/dist/esm/components/data-model/data-table/components/column-sort/column-sort-options.js.map +0 -1
- package/dist/esm/components/data-model/data-table/components/column-sort/column-sort.js +0 -137
- package/dist/esm/components/data-model/data-table/components/column-sort/column-sort.js.map +0 -1
- package/dist/esm/components/data-model/data-table/components/column-sort/index.js +0 -9
- package/dist/esm/components/data-model/data-table/components/column-sort/index.js.map +0 -1
- package/dist/esm/components/data-model/data-table/components/column-switch/column-switch-options.js +0 -24
- package/dist/esm/components/data-model/data-table/components/column-switch/column-switch-options.js.map +0 -1
- package/dist/esm/components/data-model/data-table/components/column-switch/column-switch.js +0 -47
- package/dist/esm/components/data-model/data-table/components/column-switch/column-switch.js.map +0 -1
- package/dist/esm/components/data-model/data-table/components/column-switch/index.js +0 -10
- package/dist/esm/components/data-model/data-table/components/column-switch/index.js.map +0 -1
- package/dist/esm/components/data-model/data-table/components/column-tag/column-tag-options.js +0 -46
- package/dist/esm/components/data-model/data-table/components/column-tag/column-tag-options.js.map +0 -1
- package/dist/esm/components/data-model/data-table/components/column-tag/column-tag.js +0 -67
- package/dist/esm/components/data-model/data-table/components/column-tag/column-tag.js.map +0 -1
- package/dist/esm/components/data-model/data-table/components/column-tag/index.js +0 -9
- package/dist/esm/components/data-model/data-table/components/column-tag/index.js.map +0 -1
- package/dist/esm/components/data-model/data-table/components/column-text/column-text-options.js +0 -20
- package/dist/esm/components/data-model/data-table/components/column-text/column-text-options.js.map +0 -1
- package/dist/esm/components/data-model/data-table/components/column-text/column-text.js +0 -32
- package/dist/esm/components/data-model/data-table/components/column-text/column-text.js.map +0 -1
- package/dist/esm/components/data-model/data-table/components/column-text/index.js +0 -10
- package/dist/esm/components/data-model/data-table/components/column-text/index.js.map +0 -1
- package/dist/esm/components/data-model/data-table/components/header-components/batch-opt/batch-opt.js +0 -115
- package/dist/esm/components/data-model/data-table/components/header-components/batch-opt/batch-opt.js.map +0 -1
- package/dist/esm/components/data-model/data-table/components/header-components/batch-opt/index.js +0 -7
- package/dist/esm/components/data-model/data-table/components/header-components/batch-opt/index.js.map +0 -1
- package/dist/esm/components/data-model/data-table/components/header-components/table-filter/index.js +0 -7
- package/dist/esm/components/data-model/data-table/components/header-components/table-filter/index.js.map +0 -1
- package/dist/esm/components/data-model/data-table/components/header-components/table-filter/table-filter.js +0 -175
- package/dist/esm/components/data-model/data-table/components/header-components/table-filter/table-filter.js.map +0 -1
- package/dist/esm/components/data-model/data-table/composables/use-column.js +0 -18
- package/dist/esm/components/data-model/data-table/composables/use-column.js.map +0 -1
- package/dist/esm/components/data-model/data-table/composables/use-query-params.js +0 -76
- package/dist/esm/components/data-model/data-table/composables/use-query-params.js.map +0 -1
- package/dist/esm/components/data-model/data-table/data-table-column/data-table-column-options.js +0 -11
- package/dist/esm/components/data-model/data-table/data-table-column/data-table-column-options.js.map +0 -1
- package/dist/esm/components/data-model/data-table/data-table-column/data-table-column.js +0 -42
- package/dist/esm/components/data-model/data-table/data-table-column/data-table-column.js.map +0 -1
- package/dist/esm/components/data-model/data-table/data-table-column/index.js +0 -9
- package/dist/esm/components/data-model/data-table/data-table-column/index.js.map +0 -1
- package/dist/esm/components/data-model/data-table/data-table-options.js +0 -25
- package/dist/esm/components/data-model/data-table/data-table-options.js.map +0 -1
- package/dist/esm/components/data-model/data-table/data-table.vue.js +0 -8
- package/dist/esm/components/data-model/data-table/data-table.vue.js.map +0 -1
- package/dist/esm/components/data-model/data-table/data-table.vue2.js +0 -112
- package/dist/esm/components/data-model/data-table/data-table.vue2.js.map +0 -1
- package/dist/esm/components/data-model/data-table/index.js +0 -26
- package/dist/esm/components/data-model/data-table/index.js.map +0 -1
- package/dist/esm/components/data-model/data-table/token.js +0 -7
- package/dist/esm/components/data-model/data-table/token.js.map +0 -1
- package/dist/esm/components/data-model/data-table/views/table/index.js +0 -10
- package/dist/esm/components/data-model/data-table/views/table/index.js.map +0 -1
- package/dist/esm/components/data-model/data-table/views/table/table-options.js +0 -34
- package/dist/esm/components/data-model/data-table/views/table/table-options.js.map +0 -1
- package/dist/esm/components/data-model/data-table/views/table/table.js +0 -157
- package/dist/esm/components/data-model/data-table/views/table/table.js.map +0 -1
- package/dist/esm/components/data-model/data-table/views/table-tree/index.js +0 -10
- package/dist/esm/components/data-model/data-table/views/table-tree/index.js.map +0 -1
- package/dist/esm/components/data-model/data-table/views/table-tree/table-tree-options.js +0 -15
- package/dist/esm/components/data-model/data-table/views/table-tree/table-tree-options.js.map +0 -1
- package/dist/esm/components/data-model/data-table/views/table-tree/table-tree.js +0 -49
- package/dist/esm/components/data-model/data-table/views/table-tree/table-tree.js.map +0 -1
- package/dist/esm/components/data-model/data-table/views/table-view/classify-search/classify-search-item/classify-search-item-options.js +0 -29
- package/dist/esm/components/data-model/data-table/views/table-view/classify-search/classify-search-item/classify-search-item-options.js.map +0 -1
- package/dist/esm/components/data-model/data-table/views/table-view/classify-search/classify-search-item/classify-search-item.js +0 -75
- package/dist/esm/components/data-model/data-table/views/table-view/classify-search/classify-search-item/classify-search-item.js.map +0 -1
- package/dist/esm/components/data-model/data-table/views/table-view/classify-search/classify-search-item/index.js +0 -7
- package/dist/esm/components/data-model/data-table/views/table-view/classify-search/classify-search-item/index.js.map +0 -1
- package/dist/esm/components/data-model/data-table/views/table-view/classify-search/classify-search.js +0 -41
- package/dist/esm/components/data-model/data-table/views/table-view/classify-search/classify-search.js.map +0 -1
- package/dist/esm/components/data-model/data-table/views/table-view/classify-search/index.js +0 -9
- package/dist/esm/components/data-model/data-table/views/table-view/classify-search/index.js.map +0 -1
- package/dist/esm/components/data-model/data-table/views/table-view/header/header-item.js +0 -63
- package/dist/esm/components/data-model/data-table/views/table-view/header/header-item.js.map +0 -1
- package/dist/esm/components/data-model/data-table/views/table-view/header/header.js +0 -46
- package/dist/esm/components/data-model/data-table/views/table-view/header/header.js.map +0 -1
- package/dist/esm/components/data-model/data-table/views/table-view/header/index.js +0 -10
- package/dist/esm/components/data-model/data-table/views/table-view/header/index.js.map +0 -1
- package/dist/esm/components/data-model/data-table/views/table-view/index.js +0 -14
- package/dist/esm/components/data-model/data-table/views/table-view/index.js.map +0 -1
- package/dist/esm/components/data-model/data-table/views/table-view/table-view-options.js +0 -10
- package/dist/esm/components/data-model/data-table/views/table-view/table-view-options.js.map +0 -1
- package/dist/esm/components/data-model/data-table/views/table-view/table-view.js +0 -49
- package/dist/esm/components/data-model/data-table/views/table-view/table-view.js.map +0 -1
- package/dist/esm/components/data-model/data-table/views/tree/index.js +0 -11
- package/dist/esm/components/data-model/data-table/views/tree/index.js.map +0 -1
- package/dist/esm/components/data-model/data-table/views/tree/tree-options.js +0 -20
- package/dist/esm/components/data-model/data-table/views/tree/tree-options.js.map +0 -1
- package/dist/esm/components/data-model/data-table/views/tree/tree.js +0 -170
- package/dist/esm/components/data-model/data-table/views/tree/tree.js.map +0 -1
- package/dist/esm/components/data-model/data-table/views/tree-view/index.js +0 -10
- package/dist/esm/components/data-model/data-table/views/tree-view/index.js.map +0 -1
- package/dist/esm/components/data-model/data-table/views/tree-view/tree-view-options.js +0 -15
- package/dist/esm/components/data-model/data-table/views/tree-view/tree-view-options.js.map +0 -1
- package/dist/esm/components/data-model/data-table/views/tree-view/tree-view.js +0 -75
- package/dist/esm/components/data-model/data-table/views/tree-view/tree-view.js.map +0 -1
- package/dist/esm/components/data-model/data-table-pagination/data-table-pagination-options.js +0 -11
- package/dist/esm/components/data-model/data-table-pagination/data-table-pagination-options.js.map +0 -1
- package/dist/esm/components/data-model/data-table-pagination/data-table-pagination.js +0 -29
- package/dist/esm/components/data-model/data-table-pagination/data-table-pagination.js.map +0 -1
- package/dist/esm/components/data-model/data-table-pagination/index.js +0 -10
- package/dist/esm/components/data-model/data-table-pagination/index.js.map +0 -1
- package/dist/esm/composables/create-data-form.js +0 -9
- package/dist/esm/composables/create-data-form.js.map +0 -1
- package/dist/esm/composables/create-data-table.js +0 -9
- package/dist/esm/composables/create-data-table.js.map +0 -1
- package/dist/esm/composables/on-tab-before-close.js +0 -11
- package/dist/esm/composables/on-tab-before-close.js.map +0 -1
- package/dist/esm/composables/on-tab-before-switch.js +0 -17
- package/dist/esm/composables/on-tab-before-switch.js.map +0 -1
- package/dist/esm/composables/on-tab-refresh.js +0 -17
- package/dist/esm/composables/on-tab-refresh.js.map +0 -1
- package/dist/esm/composables/use-column-component.js +0 -131
- package/dist/esm/composables/use-column-component.js.map +0 -1
- package/dist/esm/composables/use-current-tab.js +0 -12
- package/dist/esm/composables/use-current-tab.js.map +0 -1
- package/dist/esm/composables/use-http-request.js +0 -15
- package/dist/esm/composables/use-http-request.js.map +0 -1
- package/dist/esm/composables/use-i18n.js +0 -10
- package/dist/esm/composables/use-i18n.js.map +0 -1
- package/dist/esm/composables/use-ms-app-client.js +0 -10
- package/dist/esm/composables/use-ms-app-client.js.map +0 -1
- package/dist/esm/composables/use-single-view.js +0 -106
- package/dist/esm/composables/use-single-view.js.map +0 -1
- package/dist/esm/composables/use-user-info.js +0 -15
- package/dist/esm/composables/use-user-info.js.map +0 -1
- package/dist/esm/constants/data-model.js +0 -5
- package/dist/esm/constants/data-model.js.map +0 -1
- package/dist/esm/constants/log.js +0 -10
- package/dist/esm/constants/log.js.map +0 -1
- package/dist/esm/constants/menu.js +0 -10
- package/dist/esm/constants/menu.js.map +0 -1
- package/dist/esm/constants/pattern.js +0 -7
- package/dist/esm/constants/pattern.js.map +0 -1
- package/dist/esm/constants/region.js +0 -11
- package/dist/esm/constants/region.js.map +0 -1
- package/dist/esm/constants/route.js +0 -9
- package/dist/esm/constants/route.js.map +0 -1
- package/dist/esm/core/DataModelDefines.js +0 -40
- package/dist/esm/core/DataModelDefines.js.map +0 -1
- package/dist/esm/core/MSAppClient.js +0 -246
- package/dist/esm/core/MSAppClient.js.map +0 -1
- package/dist/esm/core/MkModule.js +0 -72
- package/dist/esm/core/MkModule.js.map +0 -1
- package/dist/esm/core/PageManager.js +0 -134
- package/dist/esm/core/PageManager.js.map +0 -1
- package/dist/esm/core/PermissionPointManager.js +0 -23
- package/dist/esm/core/PermissionPointManager.js.map +0 -1
- package/dist/esm/core/Router.js +0 -123
- package/dist/esm/core/Router.js.map +0 -1
- package/dist/esm/core/UserInfo.js +0 -44
- package/dist/esm/core/UserInfo.js.map +0 -1
- package/dist/esm/core/UserSession.js +0 -133
- package/dist/esm/core/UserSession.js.map +0 -1
- package/dist/esm/core/component/ConfigComponents.js +0 -32
- package/dist/esm/core/component/ConfigComponents.js.map +0 -1
- package/dist/esm/core/component/DataFilterComponents.js +0 -43
- package/dist/esm/core/component/DataFilterComponents.js.map +0 -1
- package/dist/esm/core/component/DataFormComponents.js +0 -106
- package/dist/esm/core/component/DataFormComponents.js.map +0 -1
- package/dist/esm/core/component/DataTableComponents.js +0 -95
- package/dist/esm/core/component/DataTableComponents.js.map +0 -1
- package/dist/esm/core/component/DataTableHeaderComponents.js +0 -39
- package/dist/esm/core/component/DataTableHeaderComponents.js.map +0 -1
- package/dist/esm/core/menu/Menu.js +0 -105
- package/dist/esm/core/menu/Menu.js.map +0 -1
- package/dist/esm/core/menu/MenuNode.js +0 -37
- package/dist/esm/core/menu/MenuNode.js.map +0 -1
- package/dist/esm/core/tabs/Tab.js +0 -37
- package/dist/esm/core/tabs/Tab.js.map +0 -1
- package/dist/esm/core/tabs/Tabs.js +0 -130
- package/dist/esm/core/tabs/Tabs.js.map +0 -1
- package/dist/esm/define-data-form.js +0 -22
- package/dist/esm/define-data-form.js.map +0 -1
- package/dist/esm/define-data-table.js +0 -22
- package/dist/esm/define-data-table.js.map +0 -1
- package/dist/esm/define-data-tree.js +0 -22
- package/dist/esm/define-data-tree.js.map +0 -1
- package/dist/esm/init-application.js +0 -81
- package/dist/esm/init-application.js.map +0 -1
- package/dist/esm/installer.js +0 -125
- package/dist/esm/installer.js.map +0 -1
- package/dist/esm/layouts/components/dialogs/dialogs.js +0 -74
- package/dist/esm/layouts/components/dialogs/dialogs.js.map +0 -1
- package/dist/esm/layouts/components/dialogs/index.js +0 -7
- package/dist/esm/layouts/components/dialogs/index.js.map +0 -1
- package/dist/esm/layouts/components/simple-page-layout/index.vue.js +0 -56
- package/dist/esm/layouts/components/simple-page-layout/index.vue.js.map +0 -1
- package/dist/esm/layouts/components/simple-page-layout/index.vue2.js +0 -5
- package/dist/esm/layouts/components/simple-page-layout/index.vue2.js.map +0 -1
- package/dist/esm/layouts/components/simple-page-layout/team-image.vue.js +0 -1507
- package/dist/esm/layouts/components/simple-page-layout/team-image.vue.js.map +0 -1
- package/dist/esm/layouts/index.js +0 -8
- package/dist/esm/layouts/index.js.map +0 -1
- package/dist/esm/layouts/layout.js +0 -14
- package/dist/esm/layouts/layout.js.map +0 -1
- package/dist/esm/layouts/new/common/components/SvgIcon/index.vue.js +0 -84
- package/dist/esm/layouts/new/common/components/SvgIcon/index.vue.js.map +0 -1
- package/dist/esm/layouts/new/common/components/SvgIcon/index.vue2.js +0 -5
- package/dist/esm/layouts/new/common/components/SvgIcon/index.vue2.js.map +0 -1
- package/dist/esm/layouts/new/components/AppSetting/index.vue.js +0 -8
- package/dist/esm/layouts/new/components/AppSetting/index.vue.js.map +0 -1
- package/dist/esm/layouts/new/components/AppSetting/index.vue2.js +0 -574
- package/dist/esm/layouts/new/components/AppSetting/index.vue2.js.map +0 -1
- package/dist/esm/layouts/new/components/BackTop/index.vue.js +0 -58
- package/dist/esm/layouts/new/components/BackTop/index.vue.js.map +0 -1
- package/dist/esm/layouts/new/components/BackTop/index.vue2.js +0 -5
- package/dist/esm/layouts/new/components/BackTop/index.vue2.js.map +0 -1
- package/dist/esm/layouts/new/components/Breadcrumb/index.vue.js +0 -15
- package/dist/esm/layouts/new/components/Breadcrumb/index.vue.js.map +0 -1
- package/dist/esm/layouts/new/components/Breadcrumb/item.vue.js +0 -38
- package/dist/esm/layouts/new/components/Breadcrumb/item.vue.js.map +0 -1
- package/dist/esm/layouts/new/components/Breadcrumb/item.vue2.js +0 -5
- package/dist/esm/layouts/new/components/Breadcrumb/item.vue2.js.map +0 -1
- package/dist/esm/layouts/new/components/Copyright/index.vue.js +0 -8
- package/dist/esm/layouts/new/components/Copyright/index.vue.js.map +0 -1
- package/dist/esm/layouts/new/components/Copyright/index.vue2.js +0 -50
- package/dist/esm/layouts/new/components/Copyright/index.vue2.js.map +0 -1
- package/dist/esm/layouts/new/components/Header/index.vue.js +0 -8
- package/dist/esm/layouts/new/components/Header/index.vue.js.map +0 -1
- package/dist/esm/layouts/new/components/Header/index.vue2.js +0 -85
- package/dist/esm/layouts/new/components/Header/index.vue2.js.map +0 -1
- package/dist/esm/layouts/new/components/HotkeysIntro/index.vue.js +0 -195
- package/dist/esm/layouts/new/components/HotkeysIntro/index.vue.js.map +0 -1
- package/dist/esm/layouts/new/components/HotkeysIntro/index.vue2.js +0 -5
- package/dist/esm/layouts/new/components/HotkeysIntro/index.vue2.js.map +0 -1
- package/dist/esm/layouts/new/components/Logo/index.vue.js +0 -47
- package/dist/esm/layouts/new/components/Logo/index.vue.js.map +0 -1
- package/dist/esm/layouts/new/components/Logo/index.vue2.js +0 -5
- package/dist/esm/layouts/new/components/Logo/index.vue2.js.map +0 -1
- package/dist/esm/layouts/new/components/MainSidebar/index.vue.js +0 -8
- package/dist/esm/layouts/new/components/MainSidebar/index.vue.js.map +0 -1
- package/dist/esm/layouts/new/components/MainSidebar/index.vue2.js +0 -80
- package/dist/esm/layouts/new/components/MainSidebar/index.vue2.js.map +0 -1
- package/dist/esm/layouts/new/components/Menu/index.vue.js +0 -193
- package/dist/esm/layouts/new/components/Menu/index.vue.js.map +0 -1
- package/dist/esm/layouts/new/components/Menu/index.vue2.js +0 -5
- package/dist/esm/layouts/new/components/Menu/index.vue2.js.map +0 -1
- package/dist/esm/layouts/new/components/Menu/item.vue.js +0 -129
- package/dist/esm/layouts/new/components/Menu/item.vue.js.map +0 -1
- package/dist/esm/layouts/new/components/Menu/item.vue2.js +0 -5
- package/dist/esm/layouts/new/components/Menu/item.vue2.js.map +0 -1
- package/dist/esm/layouts/new/components/Menu/sub.vue.js +0 -229
- package/dist/esm/layouts/new/components/Menu/sub.vue.js.map +0 -1
- package/dist/esm/layouts/new/components/Menu/sub.vue2.js +0 -5
- package/dist/esm/layouts/new/components/Menu/sub.vue2.js.map +0 -1
- package/dist/esm/layouts/new/components/Menu/types.js +0 -5
- package/dist/esm/layouts/new/components/Menu/types.js.map +0 -1
- package/dist/esm/layouts/new/components/Search/index.vue.js +0 -462
- package/dist/esm/layouts/new/components/Search/index.vue.js.map +0 -1
- package/dist/esm/layouts/new/components/Search/index.vue2.js +0 -5
- package/dist/esm/layouts/new/components/Search/index.vue2.js.map +0 -1
- package/dist/esm/layouts/new/components/SubSidebar/index.vue.js +0 -8
- package/dist/esm/layouts/new/components/SubSidebar/index.vue.js.map +0 -1
- package/dist/esm/layouts/new/components/SubSidebar/index.vue2.js +0 -125
- package/dist/esm/layouts/new/components/SubSidebar/index.vue2.js.map +0 -1
- package/dist/esm/layouts/new/components/Topbar/Tabbar/index.vue.js +0 -9
- package/dist/esm/layouts/new/components/Topbar/Tabbar/index.vue.js.map +0 -1
- package/dist/esm/layouts/new/components/Topbar/Tabbar/index.vue2.js +0 -254
- package/dist/esm/layouts/new/components/Topbar/Tabbar/index.vue2.js.map +0 -1
- package/dist/esm/layouts/new/components/Topbar/Toolbar/Breadcrumb/index.vue.js +0 -8
- package/dist/esm/layouts/new/components/Topbar/Toolbar/Breadcrumb/index.vue.js.map +0 -1
- package/dist/esm/layouts/new/components/Topbar/Toolbar/Breadcrumb/index.vue2.js +0 -67
- package/dist/esm/layouts/new/components/Topbar/Toolbar/Breadcrumb/index.vue2.js.map +0 -1
- package/dist/esm/layouts/new/components/Topbar/Toolbar/ColorScheme/index.vue.js +0 -74
- package/dist/esm/layouts/new/components/Topbar/Toolbar/ColorScheme/index.vue.js.map +0 -1
- package/dist/esm/layouts/new/components/Topbar/Toolbar/ColorScheme/index.vue2.js +0 -5
- package/dist/esm/layouts/new/components/Topbar/Toolbar/ColorScheme/index.vue2.js.map +0 -1
- package/dist/esm/layouts/new/components/Topbar/Toolbar/Fullscreen/index.vue.js +0 -30
- package/dist/esm/layouts/new/components/Topbar/Toolbar/Fullscreen/index.vue.js.map +0 -1
- package/dist/esm/layouts/new/components/Topbar/Toolbar/Fullscreen/index.vue2.js +0 -5
- package/dist/esm/layouts/new/components/Topbar/Toolbar/Fullscreen/index.vue2.js.map +0 -1
- package/dist/esm/layouts/new/components/Topbar/Toolbar/NavSearch/index.vue.js +0 -46
- package/dist/esm/layouts/new/components/Topbar/Toolbar/NavSearch/index.vue.js.map +0 -1
- package/dist/esm/layouts/new/components/Topbar/Toolbar/NavSearch/index.vue2.js +0 -5
- package/dist/esm/layouts/new/components/Topbar/Toolbar/NavSearch/index.vue2.js.map +0 -1
- package/dist/esm/layouts/new/components/Topbar/Toolbar/PageReload/index.vue.js +0 -24
- package/dist/esm/layouts/new/components/Topbar/Toolbar/PageReload/index.vue.js.map +0 -1
- package/dist/esm/layouts/new/components/Topbar/Toolbar/PageReload/index.vue2.js +0 -5
- package/dist/esm/layouts/new/components/Topbar/Toolbar/PageReload/index.vue2.js.map +0 -1
- package/dist/esm/layouts/new/components/Topbar/Toolbar/index.vue.js +0 -8
- package/dist/esm/layouts/new/components/Topbar/Toolbar/index.vue.js.map +0 -1
- package/dist/esm/layouts/new/components/Topbar/Toolbar/index.vue2.js +0 -35
- package/dist/esm/layouts/new/components/Topbar/Toolbar/index.vue2.js.map +0 -1
- package/dist/esm/layouts/new/components/Topbar/Toolbar/leftSide.vue.js +0 -30
- package/dist/esm/layouts/new/components/Topbar/Toolbar/leftSide.vue.js.map +0 -1
- package/dist/esm/layouts/new/components/Topbar/Toolbar/leftSide.vue2.js +0 -5
- package/dist/esm/layouts/new/components/Topbar/Toolbar/leftSide.vue2.js.map +0 -1
- package/dist/esm/layouts/new/components/Topbar/Toolbar/rightSide.vue.js +0 -84
- package/dist/esm/layouts/new/components/Topbar/Toolbar/rightSide.vue.js.map +0 -1
- package/dist/esm/layouts/new/components/Topbar/Toolbar/rightSide.vue2.js +0 -5
- package/dist/esm/layouts/new/components/Topbar/Toolbar/rightSide.vue2.js.map +0 -1
- package/dist/esm/layouts/new/components/Topbar/index.vue.js +0 -8
- package/dist/esm/layouts/new/components/Topbar/index.vue.js.map +0 -1
- package/dist/esm/layouts/new/components/Topbar/index.vue2.js +0 -62
- package/dist/esm/layouts/new/components/Topbar/index.vue2.js.map +0 -1
- package/dist/esm/layouts/new/components/views/link.vue.js +0 -8
- package/dist/esm/layouts/new/components/views/link.vue.js.map +0 -1
- package/dist/esm/layouts/new/components/views/link.vue2.js +0 -85
- package/dist/esm/layouts/new/components/views/link.vue2.js.map +0 -1
- package/dist/esm/layouts/new/index.vue.js +0 -8
- package/dist/esm/layouts/new/index.vue.js.map +0 -1
- package/dist/esm/layouts/new/index.vue2.js +0 -256
- package/dist/esm/layouts/new/index.vue2.js.map +0 -1
- package/dist/esm/layouts/new/ui-kit/HButton.vue.js +0 -30
- package/dist/esm/layouts/new/ui-kit/HButton.vue.js.map +0 -1
- package/dist/esm/layouts/new/ui-kit/HButton.vue2.js +0 -5
- package/dist/esm/layouts/new/ui-kit/HButton.vue2.js.map +0 -1
- package/dist/esm/layouts/new/ui-kit/HCheckList.vue.js +0 -45
- package/dist/esm/layouts/new/ui-kit/HCheckList.vue.js.map +0 -1
- package/dist/esm/layouts/new/ui-kit/HCheckList.vue2.js +0 -5
- package/dist/esm/layouts/new/ui-kit/HCheckList.vue2.js.map +0 -1
- package/dist/esm/layouts/new/ui-kit/HDialog.vue.js +0 -143
- package/dist/esm/layouts/new/ui-kit/HDialog.vue.js.map +0 -1
- package/dist/esm/layouts/new/ui-kit/HDialog.vue2.js +0 -5
- package/dist/esm/layouts/new/ui-kit/HDialog.vue2.js.map +0 -1
- package/dist/esm/layouts/new/ui-kit/HDropdownMenu.vue.js +0 -51
- package/dist/esm/layouts/new/ui-kit/HDropdownMenu.vue.js.map +0 -1
- package/dist/esm/layouts/new/ui-kit/HDropdownMenu.vue2.js +0 -5
- package/dist/esm/layouts/new/ui-kit/HDropdownMenu.vue2.js.map +0 -1
- package/dist/esm/layouts/new/ui-kit/HInput.vue.js +0 -38
- package/dist/esm/layouts/new/ui-kit/HInput.vue.js.map +0 -1
- package/dist/esm/layouts/new/ui-kit/HInput.vue2.js +0 -5
- package/dist/esm/layouts/new/ui-kit/HInput.vue2.js.map +0 -1
- package/dist/esm/layouts/new/ui-kit/HKbd.vue.js +0 -14
- package/dist/esm/layouts/new/ui-kit/HKbd.vue.js.map +0 -1
- package/dist/esm/layouts/new/ui-kit/HSlideover.vue.js +0 -161
- package/dist/esm/layouts/new/ui-kit/HSlideover.vue.js.map +0 -1
- package/dist/esm/layouts/new/ui-kit/HSlideover.vue2.js +0 -5
- package/dist/esm/layouts/new/ui-kit/HSlideover.vue2.js.map +0 -1
- package/dist/esm/layouts/new/ui-kit/HTabList.vue.js +0 -74
- package/dist/esm/layouts/new/ui-kit/HTabList.vue.js.map +0 -1
- package/dist/esm/layouts/new/ui-kit/HTabList.vue2.js +0 -5
- package/dist/esm/layouts/new/ui-kit/HTabList.vue2.js.map +0 -1
- package/dist/esm/layouts/new/ui-kit/HToggle.vue.js +0 -46
- package/dist/esm/layouts/new/ui-kit/HToggle.vue.js.map +0 -1
- package/dist/esm/layouts/new/ui-kit/HToggle.vue2.js +0 -5
- package/dist/esm/layouts/new/ui-kit/HToggle.vue2.js.map +0 -1
- package/dist/esm/layouts/new/ui-kit/HTooltip.vue.js +0 -34
- package/dist/esm/layouts/new/ui-kit/HTooltip.vue.js.map +0 -1
- package/dist/esm/layouts/new/ui-kit/HTooltip.vue2.js +0 -5
- package/dist/esm/layouts/new/ui-kit/HTooltip.vue2.js.map +0 -1
- package/dist/esm/message-impl/DialogerImpl.js +0 -260
- package/dist/esm/message-impl/DialogerImpl.js.map +0 -1
- package/dist/esm/message-impl/MessagerImpl.js +0 -20
- package/dist/esm/message-impl/MessagerImpl.js.map +0 -1
- package/dist/esm/message-impl/NotificationerImpl.js +0 -20
- package/dist/esm/message-impl/NotificationerImpl.js.map +0 -1
- package/dist/esm/modules/cms/cms-settings.js +0 -50
- package/dist/esm/modules/cms/cms-settings.js.map +0 -1
- package/dist/esm/modules/cms/components/part-tree/index.js +0 -8
- package/dist/esm/modules/cms/components/part-tree/index.js.map +0 -1
- package/dist/esm/modules/cms/components/part-tree/index.vue.js +0 -260
- package/dist/esm/modules/cms/components/part-tree/index.vue.js.map +0 -1
- package/dist/esm/modules/cms/components/part-tree/index.vue2.js +0 -5
- package/dist/esm/modules/cms/components/part-tree/index.vue2.js.map +0 -1
- package/dist/esm/modules/cms/composables/part-extensions.js +0 -25
- package/dist/esm/modules/cms/composables/part-extensions.js.map +0 -1
- package/dist/esm/modules/cms/constants/index.js +0 -5
- package/dist/esm/modules/cms/constants/index.js.map +0 -1
- package/dist/esm/modules/cms/dataviews/cms-ad-contents/CmsAdContentsForm.js +0 -178
- package/dist/esm/modules/cms/dataviews/cms-ad-contents/CmsAdContentsForm.js.map +0 -1
- package/dist/esm/modules/cms/dataviews/cms-ad-contents/CmsAdContentsTable.js +0 -37
- package/dist/esm/modules/cms/dataviews/cms-ad-contents/CmsAdContentsTable.js.map +0 -1
- package/dist/esm/modules/cms/dataviews/cms-ad-defines/CmsAdDefinesForm.js +0 -40
- package/dist/esm/modules/cms/dataviews/cms-ad-defines/CmsAdDefinesForm.js.map +0 -1
- package/dist/esm/modules/cms/dataviews/cms-ad-defines/CmsAdDefinesTable.js +0 -27
- package/dist/esm/modules/cms/dataviews/cms-ad-defines/CmsAdDefinesTable.js.map +0 -1
- package/dist/esm/modules/cms/dataviews/cms-articles/CmsArticlesForm.js +0 -344
- package/dist/esm/modules/cms/dataviews/cms-articles/CmsArticlesForm.js.map +0 -1
- package/dist/esm/modules/cms/dataviews/cms-articles/CmsArticlesTable.js +0 -105
- package/dist/esm/modules/cms/dataviews/cms-articles/CmsArticlesTable.js.map +0 -1
- package/dist/esm/modules/cms/dataviews/cms-articles/cms-article-atlas/CmsArticleAtlasForm.js +0 -129
- package/dist/esm/modules/cms/dataviews/cms-articles/cms-article-atlas/CmsArticleAtlasForm.js.map +0 -1
- package/dist/esm/modules/cms/dataviews/cms-articles/cms-article-atlas/CmsArticleAtlasTable.js +0 -36
- package/dist/esm/modules/cms/dataviews/cms-articles/cms-article-atlas/CmsArticleAtlasTable.js.map +0 -1
- package/dist/esm/modules/cms/dataviews/cms-part-types/CmsPartTypesForm.js +0 -26
- package/dist/esm/modules/cms/dataviews/cms-part-types/CmsPartTypesForm.js.map +0 -1
- package/dist/esm/modules/cms/dataviews/cms-part-types/CmsPartTypesTable.js +0 -33
- package/dist/esm/modules/cms/dataviews/cms-part-types/CmsPartTypesTable.js.map +0 -1
- package/dist/esm/modules/cms/dataviews/cms-parts/CmsContentManPartForm.js +0 -27
- package/dist/esm/modules/cms/dataviews/cms-parts/CmsContentManPartForm.js.map +0 -1
- package/dist/esm/modules/cms/dataviews/cms-parts/CmsPartForm.js +0 -322
- package/dist/esm/modules/cms/dataviews/cms-parts/CmsPartForm.js.map +0 -1
- package/dist/esm/modules/cms/dataviews/cms-parts/CmsPartMiniForm.js +0 -49
- package/dist/esm/modules/cms/dataviews/cms-parts/CmsPartMiniForm.js.map +0 -1
- package/dist/esm/modules/cms/dataviews/cms-parts/CmsPartTree.js +0 -99
- package/dist/esm/modules/cms/dataviews/cms-parts/CmsPartTree.js.map +0 -1
- package/dist/esm/modules/cms/dataviews/cms-tags/CmsTagsForm.js +0 -33
- package/dist/esm/modules/cms/dataviews/cms-tags/CmsTagsForm.js.map +0 -1
- package/dist/esm/modules/cms/dataviews/cms-tags/CmsTagsTable.js +0 -37
- package/dist/esm/modules/cms/dataviews/cms-tags/CmsTagsTable.js.map +0 -1
- package/dist/esm/modules/cms/index.js +0 -71
- package/dist/esm/modules/cms/index.js.map +0 -1
- package/dist/esm/modules/cms/pages/cms-ad/index.vue.js +0 -5
- package/dist/esm/modules/cms/pages/cms-ad/index.vue.js.map +0 -1
- package/dist/esm/modules/cms/pages/cms-ad/index.vue2.js +0 -463
- package/dist/esm/modules/cms/pages/cms-ad/index.vue2.js.map +0 -1
- package/dist/esm/modules/cms/pages/cms-contents/article-edit-add-page.vue.js +0 -5
- package/dist/esm/modules/cms/pages/cms-contents/article-edit-add-page.vue.js.map +0 -1
- package/dist/esm/modules/cms/pages/cms-contents/article-edit-add-page.vue2.js +0 -691
- package/dist/esm/modules/cms/pages/cms-contents/article-edit-add-page.vue2.js.map +0 -1
- package/dist/esm/modules/cms/pages/cms-contents/components/article-atlas.vue.js +0 -342
- package/dist/esm/modules/cms/pages/cms-contents/components/article-atlas.vue.js.map +0 -1
- package/dist/esm/modules/cms/pages/cms-contents/components/article-atlas.vue2.js +0 -5
- package/dist/esm/modules/cms/pages/cms-contents/components/article-atlas.vue2.js.map +0 -1
- package/dist/esm/modules/cms/pages/cms-contents/components/article-list.vue.js +0 -459
- package/dist/esm/modules/cms/pages/cms-contents/components/article-list.vue.js.map +0 -1
- package/dist/esm/modules/cms/pages/cms-contents/components/article-list.vue2.js +0 -5
- package/dist/esm/modules/cms/pages/cms-contents/components/article-list.vue2.js.map +0 -1
- package/dist/esm/modules/cms/pages/cms-contents/components/part-banner-edit.vue.js +0 -68
- package/dist/esm/modules/cms/pages/cms-contents/components/part-banner-edit.vue.js.map +0 -1
- package/dist/esm/modules/cms/pages/cms-contents/components/part-banner-edit.vue2.js +0 -5
- package/dist/esm/modules/cms/pages/cms-contents/components/part-banner-edit.vue2.js.map +0 -1
- package/dist/esm/modules/cms/pages/cms-contents/components/part-banner.vue.js +0 -367
- package/dist/esm/modules/cms/pages/cms-contents/components/part-banner.vue.js.map +0 -1
- package/dist/esm/modules/cms/pages/cms-contents/components/part-banner.vue2.js +0 -5
- package/dist/esm/modules/cms/pages/cms-contents/components/part-banner.vue2.js.map +0 -1
- package/dist/esm/modules/cms/pages/cms-contents/components/part-info.vue.js +0 -257
- package/dist/esm/modules/cms/pages/cms-contents/components/part-info.vue.js.map +0 -1
- package/dist/esm/modules/cms/pages/cms-contents/components/part-info.vue2.js +0 -5
- package/dist/esm/modules/cms/pages/cms-contents/components/part-info.vue2.js.map +0 -1
- package/dist/esm/modules/cms/pages/cms-contents/index.vue.js +0 -5
- package/dist/esm/modules/cms/pages/cms-contents/index.vue.js.map +0 -1
- package/dist/esm/modules/cms/pages/cms-contents/index.vue2.js +0 -628
- package/dist/esm/modules/cms/pages/cms-contents/index.vue2.js.map +0 -1
- package/dist/esm/modules/cms/pages/cms-resource/index.vue.js +0 -5
- package/dist/esm/modules/cms/pages/cms-resource/index.vue.js.map +0 -1
- package/dist/esm/modules/cms/pages/cms-resource/index.vue2.js +0 -134
- package/dist/esm/modules/cms/pages/cms-resource/index.vue2.js.map +0 -1
- package/dist/esm/modules/cms/pages/cms-settigns/index.vue.js +0 -5
- package/dist/esm/modules/cms/pages/cms-settigns/index.vue.js.map +0 -1
- package/dist/esm/modules/cms/pages/cms-settigns/index.vue2.js +0 -452
- package/dist/esm/modules/cms/pages/cms-settigns/index.vue2.js.map +0 -1
- package/dist/esm/modules/ms/components/image-select/image-select-api.js +0 -89
- package/dist/esm/modules/ms/components/image-select/image-select-api.js.map +0 -1
- package/dist/esm/modules/ms/components/image-select/image-select-panel.js +0 -118
- package/dist/esm/modules/ms/components/image-select/image-select-panel.js.map +0 -1
- package/dist/esm/modules/ms/components/image-select/index.js +0 -7
- package/dist/esm/modules/ms/components/image-select/index.js.map +0 -1
- package/dist/esm/modules/ms/components/markdown-editor/index.js +0 -12
- package/dist/esm/modules/ms/components/markdown-editor/index.js.map +0 -1
- package/dist/esm/modules/ms/components/markdown-editor/markdown-editor-options.js +0 -15
- package/dist/esm/modules/ms/components/markdown-editor/markdown-editor-options.js.map +0 -1
- package/dist/esm/modules/ms/components/markdown-editor/markdown-editor.js +0 -75
- package/dist/esm/modules/ms/components/markdown-editor/markdown-editor.js.map +0 -1
- package/dist/esm/modules/ms/components/material-list/components/file-view/file-view-options.js +0 -8
- package/dist/esm/modules/ms/components/material-list/components/file-view/file-view-options.js.map +0 -1
- package/dist/esm/modules/ms/components/material-list/components/file-view/file-view.js +0 -42
- package/dist/esm/modules/ms/components/material-list/components/file-view/file-view.js.map +0 -1
- package/dist/esm/modules/ms/components/material-list/components/file-view/index.js +0 -10
- package/dist/esm/modules/ms/components/material-list/components/file-view/index.js.map +0 -1
- package/dist/esm/modules/ms/components/material-list/components/image-view/image-view-options.js +0 -14
- package/dist/esm/modules/ms/components/material-list/components/image-view/image-view-options.js.map +0 -1
- package/dist/esm/modules/ms/components/material-list/components/image-view/image-view.js +0 -27
- package/dist/esm/modules/ms/components/material-list/components/image-view/image-view.js.map +0 -1
- package/dist/esm/modules/ms/components/material-list/components/image-view/index.js +0 -10
- package/dist/esm/modules/ms/components/material-list/components/image-view/index.js.map +0 -1
- package/dist/esm/modules/ms/components/material-list/components/video-view/index.js +0 -10
- package/dist/esm/modules/ms/components/material-list/components/video-view/index.js.map +0 -1
- package/dist/esm/modules/ms/components/material-list/components/video-view/video-view-options.js +0 -10
- package/dist/esm/modules/ms/components/material-list/components/video-view/video-view-options.js.map +0 -1
- package/dist/esm/modules/ms/components/material-list/components/video-view/video-view.js +0 -102
- package/dist/esm/modules/ms/components/material-list/components/video-view/video-view.js.map +0 -1
- package/dist/esm/modules/ms/components/material-list/index.js +0 -10
- package/dist/esm/modules/ms/components/material-list/index.js.map +0 -1
- package/dist/esm/modules/ms/components/material-list/material-group-form-popover.js +0 -82
- package/dist/esm/modules/ms/components/material-list/material-group-form-popover.js.map +0 -1
- package/dist/esm/modules/ms/components/material-list/material-group.js +0 -151
- package/dist/esm/modules/ms/components/material-list/material-group.js.map +0 -1
- package/dist/esm/modules/ms/components/material-list/material-item.vue.js +0 -149
- package/dist/esm/modules/ms/components/material-list/material-item.vue.js.map +0 -1
- package/dist/esm/modules/ms/components/material-list/material-item.vue2.js +0 -5
- package/dist/esm/modules/ms/components/material-list/material-item.vue2.js.map +0 -1
- package/dist/esm/modules/ms/components/material-list/material-list-options.js +0 -100
- package/dist/esm/modules/ms/components/material-list/material-list-options.js.map +0 -1
- package/dist/esm/modules/ms/components/material-list/material-list.js +0 -388
- package/dist/esm/modules/ms/components/material-list/material-list.js.map +0 -1
- package/dist/esm/modules/ms/components/material-select/index.js +0 -7
- package/dist/esm/modules/ms/components/material-select/index.js.map +0 -1
- package/dist/esm/modules/ms/components/material-select/material-select-api.js +0 -148
- package/dist/esm/modules/ms/components/material-select/material-select-api.js.map +0 -1
- package/dist/esm/modules/ms/components/rich-text-editor/content.css.js +0 -5
- package/dist/esm/modules/ms/components/rich-text-editor/content.css.js.map +0 -1
- package/dist/esm/modules/ms/components/rich-text-editor/index.js +0 -11
- package/dist/esm/modules/ms/components/rich-text-editor/index.js.map +0 -1
- package/dist/esm/modules/ms/components/rich-text-editor/langs/zh-Hans.js +0 -2
- package/dist/esm/modules/ms/components/rich-text-editor/langs/zh-Hans.js.map +0 -1
- package/dist/esm/modules/ms/components/rich-text-editor/rich-text-editor-options.js +0 -34
- package/dist/esm/modules/ms/components/rich-text-editor/rich-text-editor-options.js.map +0 -1
- package/dist/esm/modules/ms/components/rich-text-editor/rich-text-editor.js +0 -115
- package/dist/esm/modules/ms/components/rich-text-editor/rich-text-editor.js.map +0 -1
- package/dist/esm/modules/ms/components/rich-text-editor/skins/content/ms/content.js +0 -2
- package/dist/esm/modules/ms/components/rich-text-editor/skins/content/ms/content.js.map +0 -1
- package/dist/esm/modules/ms/components/rich-text-editor/skins/ui/ms/content.js +0 -2
- package/dist/esm/modules/ms/components/rich-text-editor/skins/ui/ms/content.js.map +0 -1
- package/dist/esm/modules/ms/components/rich-text-editor/skins/ui/ms/skin.js +0 -2
- package/dist/esm/modules/ms/components/rich-text-editor/skins/ui/ms/skin.js.map +0 -1
- package/dist/esm/modules/ms/constants/index.js +0 -5
- package/dist/esm/modules/ms/constants/index.js.map +0 -1
- package/dist/esm/modules/ms/dataviews/department/DepartmentForm.js +0 -33
- package/dist/esm/modules/ms/dataviews/department/DepartmentForm.js.map +0 -1
- package/dist/esm/modules/ms/dataviews/department/DepartmentTable.js +0 -52
- package/dist/esm/modules/ms/dataviews/department/DepartmentTable.js.map +0 -1
- package/dist/esm/modules/ms/dataviews/department/DepartmentTree.js +0 -35
- package/dist/esm/modules/ms/dataviews/department/DepartmentTree.js.map +0 -1
- package/dist/esm/modules/ms/dataviews/log/local-log/LocalLogTree.js +0 -47
- package/dist/esm/modules/ms/dataviews/log/local-log/LocalLogTree.js.map +0 -1
- package/dist/esm/modules/ms/dataviews/log/login-log/LoginLogTable.js +0 -39
- package/dist/esm/modules/ms/dataviews/log/login-log/LoginLogTable.js.map +0 -1
- package/dist/esm/modules/ms/dataviews/log/operate-log/OperateLogTable.js +0 -20
- package/dist/esm/modules/ms/dataviews/log/operate-log/OperateLogTable.js.map +0 -1
- package/dist/esm/modules/ms/dataviews/log/request-log/RequestLogTable.js +0 -60
- package/dist/esm/modules/ms/dataviews/log/request-log/RequestLogTable.js.map +0 -1
- package/dist/esm/modules/ms/dataviews/ms-config/MsConfigForm.js +0 -139
- package/dist/esm/modules/ms/dataviews/ms-config/MsConfigForm.js.map +0 -1
- package/dist/esm/modules/ms/dataviews/ms-config/MsConfigTable.js +0 -126
- package/dist/esm/modules/ms/dataviews/ms-config/MsConfigTable.js.map +0 -1
- package/dist/esm/modules/ms/dataviews/ms-deny-ip-access-list/MsDenyIPAccessListForm.js +0 -35
- package/dist/esm/modules/ms/dataviews/ms-deny-ip-access-list/MsDenyIPAccessListForm.js.map +0 -1
- package/dist/esm/modules/ms/dataviews/ms-deny-ip-access-list/MsDenyIPAccessListTable.js +0 -93
- package/dist/esm/modules/ms/dataviews/ms-deny-ip-access-list/MsDenyIPAccessListTable.js.map +0 -1
- package/dist/esm/modules/ms/dataviews/ms-ip-white-list/MsIPWhitelistForm.js +0 -43
- package/dist/esm/modules/ms/dataviews/ms-ip-white-list/MsIPWhitelistForm.js.map +0 -1
- package/dist/esm/modules/ms/dataviews/ms-ip-white-list/MsIPWhitelistTable.js +0 -93
- package/dist/esm/modules/ms/dataviews/ms-ip-white-list/MsIPWhitelistTable.js.map +0 -1
- package/dist/esm/modules/ms/dataviews/ms-material/MsMaterialComponents.js +0 -32
- package/dist/esm/modules/ms/dataviews/ms-material/MsMaterialComponents.js.map +0 -1
- package/dist/esm/modules/ms/dataviews/ms-material/MsMaterialForm.js +0 -49
- package/dist/esm/modules/ms/dataviews/ms-material/MsMaterialForm.js.map +0 -1
- package/dist/esm/modules/ms/dataviews/ms-material/MsMaterialTable.js +0 -188
- package/dist/esm/modules/ms/dataviews/ms-material/MsMaterialTable.js.map +0 -1
- package/dist/esm/modules/ms/dataviews/ms-material/ms-material-group/MsMaterialGroupForm.js +0 -38
- package/dist/esm/modules/ms/dataviews/ms-material/ms-material-group/MsMaterialGroupForm.js.map +0 -1
- package/dist/esm/modules/ms/dataviews/ms-material/ms-material-group/MsMaterialGroupTree.js +0 -54
- package/dist/esm/modules/ms/dataviews/ms-material/ms-material-group/MsMaterialGroupTree.js.map +0 -1
- package/dist/esm/modules/ms/dataviews/ms-member/MsMemberForm.js +0 -109
- package/dist/esm/modules/ms/dataviews/ms-member/MsMemberForm.js.map +0 -1
- package/dist/esm/modules/ms/dataviews/ms-member/MsMemberTable.js +0 -421
- package/dist/esm/modules/ms/dataviews/ms-member/MsMemberTable.js.map +0 -1
- package/dist/esm/modules/ms/dataviews/ms-member/components/MemberNickNameColumn.js +0 -38
- package/dist/esm/modules/ms/dataviews/ms-member/components/MemberNickNameColumn.js.map +0 -1
- package/dist/esm/modules/ms/dataviews/ms-member/components/MemberRolesColumn.js +0 -95
- package/dist/esm/modules/ms/dataviews/ms-member/components/MemberRolesColumn.js.map +0 -1
- package/dist/esm/modules/ms/dataviews/ms-member-role/MsMemberRoleForm.js +0 -31
- package/dist/esm/modules/ms/dataviews/ms-member-role/MsMemberRoleForm.js.map +0 -1
- package/dist/esm/modules/ms/dataviews/ms-member-role/MsMemberRoleTable.js +0 -91
- package/dist/esm/modules/ms/dataviews/ms-member-role/MsMemberRoleTable.js.map +0 -1
- package/dist/esm/modules/ms/dataviews/ms-menu/MsMenuForm.js +0 -157
- package/dist/esm/modules/ms/dataviews/ms-menu/MsMenuForm.js.map +0 -1
- package/dist/esm/modules/ms/dataviews/ms-menu/MsMenuTable.js +0 -56
- package/dist/esm/modules/ms/dataviews/ms-menu/MsMenuTable.js.map +0 -1
- package/dist/esm/modules/ms/dataviews/ms-menu/MsMenuTree.js +0 -76
- package/dist/esm/modules/ms/dataviews/ms-menu/MsMenuTree.js.map +0 -1
- package/dist/esm/modules/ms/dataviews/ms-menu/ms-permission-point/MsPermissionPointDefineForm.js +0 -47
- package/dist/esm/modules/ms/dataviews/ms-menu/ms-permission-point/MsPermissionPointDefineForm.js.map +0 -1
- package/dist/esm/modules/ms/dataviews/ms-menu/ms-permission-point/MsPermissionPointDefineTable.js +0 -35
- package/dist/esm/modules/ms/dataviews/ms-menu/ms-permission-point/MsPermissionPointDefineTable.js.map +0 -1
- package/dist/esm/modules/ms/dataviews/ms-menu/ms-route/MsRouteForm.js +0 -83
- package/dist/esm/modules/ms/dataviews/ms-menu/ms-route/MsRouteForm.js.map +0 -1
- package/dist/esm/modules/ms/dataviews/ms-menu/ms-route/MsRouteTable.js +0 -74
- package/dist/esm/modules/ms/dataviews/ms-menu/ms-route/MsRouteTable.js.map +0 -1
- package/dist/esm/modules/ms/dataviews/ms-message/MsMessageForm.js +0 -61
- package/dist/esm/modules/ms/dataviews/ms-message/MsMessageForm.js.map +0 -1
- package/dist/esm/modules/ms/dataviews/ms-message/MsMessageTable.js +0 -67
- package/dist/esm/modules/ms/dataviews/ms-message/MsMessageTable.js.map +0 -1
- package/dist/esm/modules/ms/dataviews/ms-message/SendForm.js +0 -87
- package/dist/esm/modules/ms/dataviews/ms-message/SendForm.js.map +0 -1
- package/dist/esm/modules/ms/dataviews/ms-region/MsRegionForm.js +0 -51
- package/dist/esm/modules/ms/dataviews/ms-region/MsRegionForm.js.map +0 -1
- package/dist/esm/modules/ms/dataviews/ms-region/MsRegionTable.js +0 -64
- package/dist/esm/modules/ms/dataviews/ms-region/MsRegionTable.js.map +0 -1
- package/dist/esm/modules/ms/dataviews/ms-role/MsRoleForm.js +0 -48
- package/dist/esm/modules/ms/dataviews/ms-role/MsRoleForm.js.map +0 -1
- package/dist/esm/modules/ms/dataviews/ms-role/MsRolePermissionConfigTable.js +0 -331
- package/dist/esm/modules/ms/dataviews/ms-role/MsRolePermissionConfigTable.js.map +0 -1
- package/dist/esm/modules/ms/dataviews/ms-role/MsRoleTable.js +0 -82
- package/dist/esm/modules/ms/dataviews/ms-role/MsRoleTable.js.map +0 -1
- package/dist/esm/modules/ms/dataviews/ms-role/ms-role-permission-point/MsRolePermissionPointTable.js +0 -33
- package/dist/esm/modules/ms/dataviews/ms-role/ms-role-permission-point/MsRolePermissionPointTable.js.map +0 -1
- package/dist/esm/modules/ms/dataviews/ms-role/ms-role-route/MsRoleRouteTable.js +0 -33
- package/dist/esm/modules/ms/dataviews/ms-role/ms-role-route/MsRoleRouteTable.js.map +0 -1
- package/dist/esm/modules/ms/image-upload-context/index.js +0 -57
- package/dist/esm/modules/ms/image-upload-context/index.js.map +0 -1
- package/dist/esm/modules/ms/index.js +0 -164
- package/dist/esm/modules/ms/index.js.map +0 -1
- package/dist/esm/modules/ms/material-upload-context/MaterialUploadContext.js +0 -55
- package/dist/esm/modules/ms/material-upload-context/MaterialUploadContext.js.map +0 -1
- package/dist/esm/modules/ms/material-upload-context/material-upload-context-options.js +0 -10
- package/dist/esm/modules/ms/material-upload-context/material-upload-context-options.js.map +0 -1
- package/dist/esm/modules/ms/material-upload-context/material-upload-context.js +0 -41
- package/dist/esm/modules/ms/material-upload-context/material-upload-context.js.map +0 -1
- package/dist/esm/modules/ms/pages/icons/index.vue.js +0 -5
- package/dist/esm/modules/ms/pages/icons/index.vue.js.map +0 -1
- package/dist/esm/modules/ms/pages/icons/index.vue2.js +0 -161
- package/dist/esm/modules/ms/pages/icons/index.vue2.js.map +0 -1
- package/dist/esm/modules/ms/pages/local-log/index.vue.js +0 -5
- package/dist/esm/modules/ms/pages/local-log/index.vue.js.map +0 -1
- package/dist/esm/modules/ms/pages/local-log/index.vue2.js +0 -184
- package/dist/esm/modules/ms/pages/local-log/index.vue2.js.map +0 -1
- package/dist/esm/modules/ms/pages/ms-material/index.vue.js +0 -5
- package/dist/esm/modules/ms/pages/ms-material/index.vue.js.map +0 -1
- package/dist/esm/modules/ms/pages/ms-material/index.vue2.js +0 -103
- package/dist/esm/modules/ms/pages/ms-material/index.vue2.js.map +0 -1
- package/dist/esm/modules/ms/pages/ms-menu/index.vue.js +0 -5
- package/dist/esm/modules/ms/pages/ms-menu/index.vue.js.map +0 -1
- package/dist/esm/modules/ms/pages/ms-menu/index.vue2.js +0 -187
- package/dist/esm/modules/ms/pages/ms-menu/index.vue2.js.map +0 -1
- package/dist/esm/modules/ms/pages/ms-role/components/aside.vue.js +0 -8
- package/dist/esm/modules/ms/pages/ms-role/components/aside.vue.js.map +0 -1
- package/dist/esm/modules/ms/pages/ms-role/components/aside.vue2.js +0 -251
- package/dist/esm/modules/ms/pages/ms-role/components/aside.vue2.js.map +0 -1
- package/dist/esm/modules/ms/pages/ms-role/components/role-permission-config/index.js +0 -11
- package/dist/esm/modules/ms/pages/ms-role/components/role-permission-config/index.js.map +0 -1
- package/dist/esm/modules/ms/pages/ms-role/components/role-permission-config/role-permission-config-options.js +0 -98
- package/dist/esm/modules/ms/pages/ms-role/components/role-permission-config/role-permission-config-options.js.map +0 -1
- package/dist/esm/modules/ms/pages/ms-role/components/role-permission-config/role-permission-config.js +0 -184
- package/dist/esm/modules/ms/pages/ms-role/components/role-permission-config/role-permission-config.js.map +0 -1
- package/dist/esm/modules/ms/pages/ms-role/index.vue.js +0 -8
- package/dist/esm/modules/ms/pages/ms-role/index.vue.js.map +0 -1
- package/dist/esm/modules/ms/pages/ms-role/index.vue2.js +0 -295
- package/dist/esm/modules/ms/pages/ms-role/index.vue2.js.map +0 -1
- package/dist/esm/modules/ms/pages/ms-role/permission-manage.vue.js +0 -5
- package/dist/esm/modules/ms/pages/ms-role/permission-manage.vue.js.map +0 -1
- package/dist/esm/modules/ms/pages/ms-role/permission-manage.vue2.js +0 -151
- package/dist/esm/modules/ms/pages/ms-role/permission-manage.vue2.js.map +0 -1
- package/dist/esm/modules/ms/pages/to-do/index.vue.js +0 -5
- package/dist/esm/modules/ms/pages/to-do/index.vue.js.map +0 -1
- package/dist/esm/modules/ms/pages/to-do/index.vue2.js +0 -145
- package/dist/esm/modules/ms/pages/to-do/index.vue2.js.map +0 -1
- package/dist/esm/page/index/404.vue.js +0 -11
- package/dist/esm/page/index/404.vue.js.map +0 -1
- package/dist/esm/page/index/dv/default/edit.vue.js +0 -5
- package/dist/esm/page/index/dv/default/edit.vue.js.map +0 -1
- package/dist/esm/page/index/dv/default/edit.vue2.js +0 -118
- package/dist/esm/page/index/dv/default/edit.vue2.js.map +0 -1
- package/dist/esm/page/index/dv/default/single/list/dialog.vue.js +0 -5
- package/dist/esm/page/index/dv/default/single/list/dialog.vue.js.map +0 -1
- package/dist/esm/page/index/dv/default/single/list/dialog.vue2.js +0 -105
- package/dist/esm/page/index/dv/default/single/list/dialog.vue2.js.map +0 -1
- package/dist/esm/page/index/dv/default/single/list/normal.vue.js +0 -5
- package/dist/esm/page/index/dv/default/single/list/normal.vue.js.map +0 -1
- package/dist/esm/page/index/dv/default/single/list/normal.vue2.js +0 -115
- package/dist/esm/page/index/dv/default/single/list/normal.vue2.js.map +0 -1
- package/dist/esm/page/index/dv/default/single/table-tree/dialog.vue.js +0 -5
- package/dist/esm/page/index/dv/default/single/table-tree/dialog.vue.js.map +0 -1
- package/dist/esm/page/index/dv/default/single/table-tree/dialog.vue2.js +0 -117
- package/dist/esm/page/index/dv/default/single/table-tree/dialog.vue2.js.map +0 -1
- package/dist/esm/page/index/dv/default/single/table-tree/normal.vue.js +0 -5
- package/dist/esm/page/index/dv/default/single/table-tree/normal.vue.js.map +0 -1
- package/dist/esm/page/index/dv/default/single/table-tree/normal.vue2.js +0 -127
- package/dist/esm/page/index/dv/default/single/table-tree/normal.vue2.js.map +0 -1
- package/dist/esm/page/index/dv/default/single/tree/dialog.vue.js +0 -5
- package/dist/esm/page/index/dv/default/single/tree/dialog.vue.js.map +0 -1
- package/dist/esm/page/index/dv/default/single/tree/dialog.vue2.js +0 -107
- package/dist/esm/page/index/dv/default/single/tree/dialog.vue2.js.map +0 -1
- package/dist/esm/page/index/dv/default/table.vue.js +0 -5
- package/dist/esm/page/index/dv/default/table.vue.js.map +0 -1
- package/dist/esm/page/index/dv/default/table.vue2.js +0 -123
- package/dist/esm/page/index/dv/default/table.vue2.js.map +0 -1
- package/dist/esm/page/index.vue.js +0 -5
- package/dist/esm/page/index.vue.js.map +0 -1
- package/dist/esm/page/index.vue2.js +0 -20
- package/dist/esm/page/index.vue2.js.map +0 -1
- package/dist/esm/page/login/index.vue.js +0 -5
- package/dist/esm/page/login/index.vue.js.map +0 -1
- package/dist/esm/page/login/index.vue2.js +0 -286
- package/dist/esm/page/login/index.vue2.js.map +0 -1
- package/dist/esm/page/signup/index.vue.js +0 -5
- package/dist/esm/page/signup/index.vue.js.map +0 -1
- package/dist/esm/page/signup/index.vue2.js +0 -254
- package/dist/esm/page/signup/index.vue2.js.map +0 -1
- package/dist/esm/router-middleware/auth.js +0 -26
- package/dist/esm/router-middleware/auth.js.map +0 -1
- package/dist/esm/settings.default.js +0 -60
- package/dist/esm/settings.default.js.map +0 -1
- package/dist/esm/settings.js +0 -10
- package/dist/esm/settings.js.map +0 -1
- package/dist/esm/store/index.js +0 -6
- package/dist/esm/store/index.js.map +0 -1
- package/dist/esm/store/modules/keepAlive.js +0 -42
- package/dist/esm/store/modules/keepAlive.js.map +0 -1
- package/dist/esm/store/modules/menu.js +0 -161
- package/dist/esm/store/modules/menu.js.map +0 -1
- package/dist/esm/store/modules/settings.js +0 -166
- package/dist/esm/store/modules/settings.js.map +0 -1
- package/dist/esm/store/modules/tabbar.js +0 -152
- package/dist/esm/store/modules/tabbar.js.map +0 -1
- package/dist/esm/tokens/ms-app-client.js +0 -7
- package/dist/esm/tokens/ms-app-client.js.map +0 -1
- package/dist/esm/utils/composables/useMainPage.js +0 -16
- package/dist/esm/utils/composables/useMainPage.js.map +0 -1
- package/dist/esm/utils/composables/useMenu.js +0 -21
- package/dist/esm/utils/composables/useMenu.js.map +0 -1
- package/dist/esm/utils/composables/useTabbar.js +0 -132
- package/dist/esm/utils/composables/useTabbar.js.map +0 -1
- package/dist/esm/utils/composables/useViewTransition.js +0 -18
- package/dist/esm/utils/composables/useViewTransition.js.map +0 -1
- package/dist/esm/utils/eventBus.js +0 -6
- package/dist/esm/utils/eventBus.js.map +0 -1
- package/dist/esm/utils/index.js +0 -8
- package/dist/esm/utils/index.js.map +0 -1
- package/dist/esm/utils.js +0 -148
- package/dist/esm/utils.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-CJiJ6jy7.cjs","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/new/common/components/SvgIcon/index.vue","../../src/layouts/new/ui-kit/HDialog.vue","../../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/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/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\";\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 {\n ROUTE = \"0\",\n LINK = \"1\",\n}\n","export enum MenuType {\n Container = \"1\",\n Menu = \"2\",\n SystemSettings = \"3\",\n}\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\";\nimport { Components } from \"@maketribe/dm\";\n\nexport class DataTableComponents extends Components {\n constructor() {\n super();\n\n this.registerComponent({\n name: \"MKColumnAction\",\n title: \"操作\",\n component: defineAsyncComponent(\n async () =>\n import(\n \"../../components/data-model/data-table/components/column-action\"\n )\n ),\n });\n\n this.registerComponent({\n name: \"MKColumnText\",\n title: \"文本\",\n component: defineAsyncComponent(\n async () =>\n import(\n \"../../components/data-model/data-table/components/column-text\"\n )\n ),\n });\n\n this.registerComponent({\n name: \"MKColumnObjectMappingText\",\n title: \"对象映射文本\",\n component: defineAsyncComponent(\n async () =>\n import(\n \"../../components/data-model/data-table/components/column-object-mapping-text\"\n )\n ),\n });\n\n this.registerComponent({\n name: \"MKColumnImage\",\n title: \"图片\",\n component: defineAsyncComponent(\n async () =>\n import(\n \"../../components/data-model/data-table/components/column-image\"\n )\n ),\n });\n\n this.registerComponent({\n name: \"MKColumnSelect\",\n title: \"行选择\",\n component: defineAsyncComponent(\n async () =>\n import(\n \"../../components/data-model/data-table/components/column-select\"\n )\n ),\n });\n\n this.registerComponent({\n name: \"MKColumnJson\",\n title: \"JSON\",\n component: defineAsyncComponent(\n async () =>\n import(\n \"../../components/data-model/data-table/components/column-json\"\n )\n ),\n });\n\n this.registerComponent({\n name: \"MKColumnDate\",\n title: \"日期时间\",\n component: defineAsyncComponent(\n async () =>\n import(\n \"../../components/data-model/data-table/components/column-date\"\n )\n ),\n });\n\n this.registerComponent({\n name: \"MKColumnSwitch\",\n title: \"开关\",\n component: defineAsyncComponent(\n async () =>\n import(\n \"../../components/data-model/data-table/components/column-switch\"\n )\n ),\n });\n\n this.registerComponent({\n name: \"MKColumnTag\",\n title: \"标签\",\n component: defineAsyncComponent(\n async () =>\n import(\"../../components/data-model/data-table/components/column-tag\")\n ),\n });\n\n this.registerComponent({\n name: \"MKColumnLink\",\n title: \"链接\",\n component: defineAsyncComponent(\n async () =>\n import(\n \"../../components/data-model/data-table/components/column-link\"\n )\n ),\n });\n\n this.registerComponent({\n name: \"MKColumnSort\",\n title: \"拖拽排序\",\n component: defineAsyncComponent(\n async () =>\n import(\n \"../../components/data-model/data-table/components/column-sort\"\n )\n ),\n });\n\n this.registerComponent({\n name: \"MKColumnIcon\",\n title: \"图标\",\n component: defineAsyncComponent(\n async () =>\n import(\n \"../../components/data-model/data-table/components/column-icon\"\n )\n ),\n });\n }\n}\n","import { defineAsyncComponent } from \"vue\";\nimport { Components } from \"@maketribe/dm\";\n\nexport class DataTableHeaderComponents extends Components {\n constructor() {\n super();\n\n this.registerComponent({\n name: \"MKButton\",\n title: \"按钮\",\n component: defineAsyncComponent(\n async () => import(\"../../components/basic/button\")\n ),\n });\n\n this.registerComponent({\n name: \"MKClassifySearch\",\n title: \"分类筛选\",\n component: defineAsyncComponent(\n async () =>\n import(\n \"../../components/data-model/data-table/views/table-view/classify-search\"\n )\n ),\n });\n\n this.registerComponent({\n name: \"MKBatchOpt\",\n title: \"批量操作\",\n component: defineAsyncComponent(\n async () =>\n import(\n \"../../components/data-model/data-table/components/header-components/batch-opt\"\n )\n ),\n });\n\n this.registerComponent({\n name: \"MKTableFilter\",\n title: \"筛选\",\n component: defineAsyncComponent(\n async () =>\n import(\n \"../../components/data-model/data-table/components/header-components/table-filter\"\n )\n ),\n });\n }\n}\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\";\nimport { Component, Components, Operator } from \"@maketribe/dm\";\n\nexport type DataFilterComponent = Component & {\n defaultOperator: Operator;\n};\n\nexport class DataFilterComponents extends Components<DataFilterComponent> {\n constructor() {\n super();\n\n this.registerComponent({\n name: \"MKConditionInput\",\n title: \"输入框\",\n defaultOperator: Operator.CONTAIN,\n component: defineAsyncComponent(\n () =>\n import(\n \"../../components/data-model/data-filter-form/components/condition-input\"\n )\n ),\n });\n\n this.registerComponent({\n name: \"MKConditionNumber\",\n title: \"数值\",\n defaultOperator: Operator.EQUAL,\n component: defineAsyncComponent(\n () =>\n import(\n \"../../components/data-model/data-filter-form/components/condition-number\"\n )\n ),\n });\n\n this.registerComponent({\n name: \"MKConditionSelect\",\n title: \"下拉框\",\n defaultOperator: Operator.IN,\n component: defineAsyncComponent(\n () =>\n import(\n \"../../components/data-model/data-filter-form/components/condition-select\"\n )\n ),\n });\n\n this.registerComponent({\n name: \"MKConditionDate\",\n title: \"日期\",\n defaultOperator: Operator.BETWEEN,\n component: defineAsyncComponent(\n () =>\n import(\n \"../../components/data-model/data-filter-form/components/condition-date\"\n )\n ),\n });\n }\n}\n","import { defineAsyncComponent } from \"vue\";\nimport { ElInput, ElInputNumber } from \"element-plus\";\nimport { Components } from \"@maketribe/dm\";\n\nexport class ConfigComponents extends Components {\n constructor() {\n super();\n\n this.registerComponent({\n name: \"MKConfigInput\",\n title: \"输入框\",\n component: ElInput,\n defaultProps: {\n type: \"textarea\",\n },\n });\n\n this.registerComponent({\n name: \"MKConfigInputNumber\",\n title: \"数值输入框\",\n component: ElInputNumber,\n });\n\n this.registerComponent({\n name: \"MKConfigJsonEditor\",\n title: \"JSON\",\n component: defineAsyncComponent(\n () => import(\"../../components/basic/json-editor\")\n ),\n });\n }\n}\n","import { PermissionPoint } from \"../PermissionPointManager\";\nimport type { Route } from \"../Router\";\n\ninterface MenuNodeOptions {\n id: string;\n route?: Route | null;\n iconName: string;\n title: string;\n permissionPoints: PermissionPoint[];\n children: MenuNode[];\n type: string;\n parent?: MenuNode | null;\n}\n\nexport class MenuNode {\n id: string;\n\n iconName: string;\n title: string;\n permissionPoints: PermissionPoint[];\n route: Route | null;\n type: string;\n children: MenuNode[];\n parent: MenuNode | null;\n\n constructor(options: MenuNodeOptions) {\n const { id, children, route, iconName, title, permissionPoints, type } =\n options;\n\n this.id = id;\n this.route = route ?? null;\n this.iconName = iconName;\n this.type = type;\n this.title = title;\n this.children = children;\n this.parent = options.parent ?? null;\n this.permissionPoints = permissionPoints;\n }\n\n getMenuNodePath(): MenuNode[] {\n const path: MenuNode[] = [];\n\n let menuNode: MenuNode | null = this;\n\n while (menuNode) {\n path.unshift(menuNode);\n\n menuNode = menuNode.parent;\n }\n\n return path;\n }\n}\n","import { Disposable, Event } from \"@maketribe/utils\";\nimport { PermissionPointManager } from \"../PermissionPointManager\";\nimport { Router } from \"../Router\";\nimport { MenuNode } from \"./MenuNode\";\nimport type { Route } from \"../Router\";\n\nexport type PermissionPointDefine = {\n id: string;\n menuId: string;\n key: string;\n name: string;\n};\n\nexport type MenuData = {\n id: string;\n title: string | null;\n iconName: string | null;\n pid: string | null;\n routeId: string;\n sort: string;\n type: number;\n routes: Route[];\n permissionPoints: PermissionPointDefine[];\n};\n\nexport class Menu extends Disposable {\n rootMenus: MenuNode[] = [];\n\n _currentMenu: MenuNode | null = null;\n\n isCollapsed: boolean = false;\n\n isVisible: boolean = true;\n\n permissionPointManager: PermissionPointManager;\n\n router: Router;\n\n currentMenuChangeEvent: Event<{ currentMenu: MenuNode | null }> =\n this.register(new Event());\n\n constructor(permissionPointManager: PermissionPointManager, router: Router) {\n super();\n this.permissionPointManager = permissionPointManager;\n this.router = router;\n }\n\n setMenus(menus: MenuData[]) {\n const menuNodes = menus\n .sort((menu1, menu2) => {\n const sort1 = parseInt(menu1.sort) || 0;\n const sort2 = parseInt(menu2.sort) || 0;\n\n return sort2 - sort1;\n })\n .map((menuInfo) => {\n const route = this.router.getRouteByID(menuInfo.routeId);\n\n const permissionPoints =\n this.permissionPointManager.getPermissionPointsByMenuID(menuInfo.id);\n\n return new MenuNode({\n id: menuInfo.id,\n route,\n type: menuInfo.type.toString(),\n iconName: menuInfo.iconName || \"\",\n title: menuInfo.title || \"\",\n permissionPoints,\n children: [],\n });\n });\n\n const rootMenuNodes: MenuNode[] = [];\n\n for (let i = 0, len = menuNodes.length; i < len; i++) {\n const menuNodeInfo = menus[i];\n const menuNode = menuNodes[i];\n\n menuNode.iconName = menuNode.iconName || \"default-menu\";\n\n if (!menuNodeInfo.pid) {\n rootMenuNodes.push(menuNode);\n }\n\n for (const route of this.router.getRoutesByMenuID(menuNode.id)) {\n route.iconName = route.iconName || menuNode.iconName;\n }\n\n for (let j = 0; j < len; j++) {\n const menuNodeInfoInner = menus[j];\n const menuNodeInner = menuNodes[j];\n\n if (menuNodeInfoInner.pid === menuNodeInfo.id) {\n menuNode.children.push(menuNodeInner);\n menuNodeInner.parent = menuNode;\n }\n }\n }\n\n this.rootMenus = rootMenuNodes;\n }\n\n findMenuNodeByID(id: MenuNode[\"id\"]): MenuNode | null {\n if (!id) {\n return null;\n }\n\n let list = this.rootMenus.slice();\n\n for (let i = 0; i < list.length; i++) {\n const node = list[i];\n\n if (node.id === id) {\n return node;\n }\n\n list = list.concat(node.children);\n }\n\n return null;\n }\n\n async setCurrentMenuNode(node: MenuNode | null) {\n this._currentMenu = node;\n\n this.currentMenuChangeEvent.emit({ currentMenu: node });\n\n return true;\n }\n\n getCurrentMenuNode() {\n return this._currentMenu;\n }\n\n getFirstLeafMenuNode(menus: MenuNode[] = this.rootMenus) {\n function _getFirstLeafMenuNode(menus: MenuNode[]): MenuNode | null {\n if (!menus.length) {\n return null;\n }\n\n return _getFirstLeafMenuNode(menus[0].children) || menus[0];\n }\n\n return _getFirstLeafMenuNode(menus);\n }\n\n getMenuNodeByID(id: string): MenuNode | null {\n let nodes = this.rootMenus.slice();\n\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i];\n\n if (node.id === id) {\n return node;\n }\n\n nodes = nodes.concat(node.children);\n }\n\n return null;\n }\n}\n","import { Disposable, Event } from \"@maketribe/utils\";\nimport type { Route } from \"../Router\";\nimport type { Tabs } from \"./Tabs\";\n\nexport interface TabOptions {\n id: string;\n\n title: string;\n\n affix?: boolean;\n\n realRoute: any;\n\n route: Route;\n\n tabs: Tabs;\n}\n\nexport class Tab extends Disposable {\n id: string;\n\n title: string;\n\n affix: boolean;\n\n realRoute: any;\n\n route: Route;\n\n beforeCloseEvent: Event = this.register(new Event());\n\n refreshEvent: Event = this.register(new Event());\n\n beforeSwitchEvent: Event = this.register(new Event());\n\n tabs: Tabs;\n\n constructor(options: TabOptions) {\n super();\n this.id = options.id;\n this.title = options.title;\n this.affix = options.affix ?? false;\n this.realRoute = options.realRoute;\n this.route = options.route;\n this.tabs = options.tabs;\n }\n\n getTitle() {\n return this.title;\n }\n\n getID() {\n return this.id;\n }\n\n close() {\n this.tabs.closeTab(this);\n }\n}\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\";\nimport { PermissionPoint } from \"./PermissionPointManager\";\n\nexport type Role = {\n id: string;\n name: string;\n desc: string;\n};\n\nexport interface MemberInfo {\n id: number;\n account: string;\n email: string;\n nickName: string;\n avatar: string;\n isSuper: number;\n errorCount: string;\n errorDatetime: string;\n isLock: number;\n unlockDatetime: string;\n}\n\nexport class UserInfo {\n id: number;\n account: string;\n email: string;\n nickName: string;\n avatar: string;\n isLocked: boolean;\n isSuper: boolean;\n payload: any;\n\n roles: Role[];\n permissionPoints: PermissionPoint[];\n\n constructor(\n msAppClient: MSAppClient,\n payload: MemberInfo,\n roles: Role[],\n permissionPoints: PermissionPoint[]\n ) {\n this.id = payload.id;\n this.avatar = payload.avatar;\n this.account = payload.account;\n this.email = payload.email;\n this.nickName = payload.nickName;\n this.isLocked = payload.isLock === 1;\n this.isSuper = payload.isSuper === 1;\n this.roles = roles;\n this.permissionPoints = permissionPoints;\n try {\n this.avatar = payload.avatar\n ? payload.avatar.startsWith(\"http\")\n ? payload.avatar\n : new URL(payload.avatar, msAppClient.origin).toString()\n : \"\";\n } catch (e) {\n this.avatar = \"\";\n }\n\n this.payload = payload;\n }\n\n hasRole(name: Role[\"name\"]): boolean {\n return !!this.roles.find((role) => role.name === name);\n }\n\n hasPermissionPoint(key: PermissionPoint[\"key\"]) {\n return !!this.permissionPoints.find(\n (permissionPoint) => permissionPoint.key === key\n );\n }\n}\n","import { Disposable, createDisposable } from \"@maketribe/utils\";\nimport type { UserSession } from \"./UserSession\";\nimport { RouteType } from \"../constants\";\n\nconst NORMALIZE_ROUTE_NAME_REG = /^dv\\/([^/]+)\\/([^/]+)(\\/.+)?$/;\n\nexport type Route = {\n id: string;\n name: string;\n title: string;\n type: RouteType;\n menuId: string;\n iconName: string;\n route: string;\n};\n\nexport class Router extends Disposable {\n userSession: UserSession;\n\n routes: Route[] = [];\n\n constructor(userSession: UserSession) {\n super();\n\n this.userSession = userSession;\n }\n\n setRoutes(routes: Route[]) {\n this.routes = routes;\n }\n\n init() {\n const vueRouter = this.userSession.vueRouter;\n const vueRoutes = vueRouter.getRoutes();\n\n // 给有权限访问的页面,注册默认页面\n const defaultPageRoutes = this.routes.filter(\n (route) => !vueRoutes.find((item) => item.name === route.name)\n );\n\n for (const defaultPageRoute of defaultPageRoutes) {\n const match = defaultPageRoute.name.match(NORMALIZE_ROUTE_NAME_REG);\n\n if (match) {\n const name = match[1];\n const action = match[2];\n\n switch (action) {\n case \"single\":\n const [listType, type] = match[3].slice(1).split(\"/\");\n\n switch (listType) {\n case \"list\":\n switch (type) {\n case \"normal\":\n vueRouter.addRoute(\"mk-ms-layout\", {\n name: defaultPageRoute.name,\n path: defaultPageRoute.route || `/dv/${name}`,\n component: () =>\n import(\n \"../page/index/dv/default/single/list/normal.vue\"\n ),\n meta: { name },\n });\n break;\n case \"dialog\":\n vueRouter.addRoute(\"mk-ms-layout\", {\n name: defaultPageRoute.name,\n path: defaultPageRoute.route || `/dv/${name}`,\n component: () =>\n import(\n \"../page/index/dv/default/single/list/dialog.vue\"\n ),\n meta: { name },\n });\n break;\n }\n\n break;\n case \"tree\":\n switch (type) {\n case \"dialog\":\n vueRouter.addRoute(\"mk-ms-layout\", {\n name: defaultPageRoute.name,\n path: defaultPageRoute.route || `/dv/${name}`,\n component: () =>\n import(\n \"../page/index/dv/default/single/tree/dialog.vue\"\n ),\n meta: { name },\n });\n break;\n }\n break;\n case \"table-tree\":\n switch (type) {\n case \"dialog\":\n vueRouter.addRoute(\"mk-ms-layout\", {\n name: defaultPageRoute.name,\n path: defaultPageRoute.route || `/dv/${name}`,\n component: () =>\n import(\n \"../page/index/dv/default/single/table-tree/dialog.vue\"\n ),\n meta: { name },\n });\n break;\n case \"normal\":\n vueRouter.addRoute(\"mk-ms-layout\", {\n name: defaultPageRoute.name,\n path: defaultPageRoute.route || `/dv/${name}`,\n component: () =>\n import(\n \"../page/index/dv/default/single/table-tree/normal.vue\"\n ),\n meta: { name },\n });\n }\n }\n\n break;\n case \"list\":\n vueRouter.addRoute(\"mk-ms-layout\", {\n name: defaultPageRoute.name,\n path: defaultPageRoute.route || `/dv/${name}`,\n component: () => import(\"../page/index/dv/default/table.vue\"),\n meta: { name },\n });\n break;\n case \"edit\":\n vueRouter.addRoute(\"mk-ms-layout\", {\n name: defaultPageRoute.name,\n path: defaultPageRoute.route || `/dv/${name}/edit/:id?`,\n component: () => import(\"../page/index/dv/default/edit.vue\"),\n meta: { name },\n });\n break;\n // case \"add\":\n // vueRouter.addRoute(\"mk-ms-layout\", {\n // name: defaultPageRoute.name,\n // path: defaultPageRoute.route || `/dv/${name}/add`,\n // component: () => import(\"../page/index/dv/default/add.vue\"),\n // meta: { name },\n // });\n // break;\n }\n }\n }\n\n this.register(\n createDisposable(() => {\n for (const defaultPageRoute of defaultPageRoutes) {\n vueRouter.removeRoute(defaultPageRoute.name);\n }\n })\n );\n }\n\n getRouteByName(name: string): Route | null {\n return this.routes.find((route) => route.name === name) ?? null;\n }\n\n getRouteByID(id: string): Route | null {\n return this.routes.find((route) => route.id === id) ?? null;\n }\n\n getRoutesByMenuID(menuId: Route[\"menuId\"]): Route[] {\n return this.routes.filter((route) => route.menuId === menuId);\n }\n}\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\";\nimport { MemberInfo, UserInfo } from \"./UserInfo\";\nimport { Menu } from \"./menu\";\nimport { Tabs } from \"./tabs\";\nimport { Router, Route } from \"./Router\";\nimport type { Role } from \"./UserInfo\";\nimport {\n PermissionPoint,\n PermissionPointManager,\n} from \"./PermissionPointManager\";\nimport type { MSAppClient, LoginResult } from \"./MSAppClient\";\nimport { MenuData } from \"./menu\";\nimport { ACCESS_TOKEN_HEADER, AUTHORIZATION, AUTHORIZATION_PREFIX, R, X_ACCESS_TOKEN_HEADER, X_AUTHORIZATION } from \"@maketribe/request\";\n\nexport type UserSessionOptions = {\n msAppClient: MSAppClient;\n accessToken?: string;\n xAccessToken?: string;\n};\n\nlet uid = 0;\n\nexport class UserSession extends Disposable {\n id = uid++;\n\n msAppClient: MSAppClient;\n\n vueRouter: MSAppClient[\"vueRouter\"];\n\n userInfo: UserInfo | null;\n\n menu: Menu;\n\n tabs: Tabs;\n\n router: Router;\n\n permissionPointManager: PermissionPointManager;\n\n accessToken: string;\n\n xAccessToken: string;\n\n beforeInitRouterEvent: Event = this.register(new Event());\n\n locking: boolean = false;\n\n lockingChangeEvent: Event<{ locking: boolean }> = this.register(new Event());\n\n constructor(options: UserSessionOptions) {\n super();\n\n this.msAppClient = options.msAppClient;\n\n this.vueRouter = this.msAppClient.vueRouter;\n\n this.userInfo = null;\n\n this.router = this.register(new Router(this));\n this.tabs = this.register(new Tabs(this));\n this.permissionPointManager = new PermissionPointManager();\n this.menu = this.register(\n new Menu(this.permissionPointManager, this.router)\n );\n\n this.accessToken =\n options.accessToken ?? localStorage.getItem(ACCESS_TOKEN_HEADER) ?? \"\";\n this.xAccessToken =\n options.xAccessToken ?? localStorage.getItem(X_ACCESS_TOKEN_HEADER) ?? \"\";\n }\n\n async init() {\n type BasicInfoResult = {\n member: MemberInfo;\n menus: MenuData[];\n routes: Route[];\n roles: Role[];\n permissionPoints: PermissionPoint[];\n };\n\n const msAppClient = this.msAppClient;\n\n const httpRequest = msAppClient.httpRequest;\n\n const beforeRequestInterceptorID = httpRequest\n .getInterceptors()\n .request.use((config) => {\n if (this.accessToken) {\n config.headers[\n AUTHORIZATION\n ] = `${AUTHORIZATION_PREFIX} ${this.accessToken}`;\n }\n\n if (this.xAccessToken) {\n config.headers[\n X_AUTHORIZATION\n ] = `${AUTHORIZATION_PREFIX} ${this.xAccessToken}`;\n }\n\n return config;\n });\n\n const beforeResponseInterceptorID = httpRequest\n .getInterceptors()\n .response.use((config) => {\n if (config.data.code === 401) {\n this.accessToken = this.xAccessToken = \"\";\n } else {\n this.accessToken =\n config.headers[ACCESS_TOKEN_HEADER] || this.accessToken;\n\n this.xAccessToken =\n config.headers[X_ACCESS_TOKEN_HEADER] || this.xAccessToken;\n }\n\n localStorage.setItem(ACCESS_TOKEN_HEADER, this.accessToken);\n\n localStorage.setItem(X_ACCESS_TOKEN_HEADER, this.xAccessToken);\n\n return config;\n });\n\n this.register(\n createDisposable(() => {\n httpRequest.getInterceptors().request.eject(beforeRequestInterceptorID);\n httpRequest\n .getInterceptors()\n .request.eject(beforeResponseInterceptorID);\n })\n );\n\n try {\n let response = await httpRequest.request<R<BasicInfoResult>>({\n url: \"/ms/app/login-info\",\n method: \"GET\",\n });\n\n if (!response.data || response.data.code !== 200) {\n return response;\n }\n\n const BasicInfoResult = response.data!;\n\n const { member, routes, menus, permissionPoints, roles } =\n BasicInfoResult.data!;\n\n this.userInfo = new UserInfo(\n msAppClient,\n member,\n roles,\n permissionPoints\n );\n\n this.router.setRoutes(routes);\n this.permissionPointManager.setPermissionPoints(permissionPoints);\n this.menu.setMenus(menus);\n\n this.tabs.init();\n\n this.beforeInitRouterEvent.emit();\n this.router.init();\n\n return response;\n } catch (e) {\n httpRequest.getInterceptors().request.eject(beforeRequestInterceptorID);\n httpRequest.getInterceptors().request.eject(beforeResponseInterceptorID);\n }\n }\n\n lock() {\n this.locking = true;\n\n this.lockingChangeEvent.emit({ locking: this.locking });\n }\n\n async unlock(password: string, code: string) {\n const response = await this.msAppClient.httpRequest.request<R<LoginResult>>(\n {\n url: \"/ms/ms-login/login\",\n method: \"POST\",\n data: {\n account: this.userInfo!.account,\n password: md5(`mkbl#${password}`),\n vCode: code,\n },\n }\n );\n\n if (response.data.code !== 200) {\n return response;\n }\n\n this.accessToken = response.headers[ACCESS_TOKEN_HEADER];\n this.xAccessToken = response.headers[X_ACCESS_TOKEN_HEADER];\n\n this.locking = false;\n\n this.lockingChangeEvent.emit({ locking: this.locking });\n\n return response;\n }\n\n public dispose(): void {\n this.msAppClient.httpRequest.get(\"/ms/app/logout\").finally(() => {\n localStorage.removeItem(ACCESS_TOKEN_HEADER);\n localStorage.removeItem(X_ACCESS_TOKEN_HEADER);\n });\n\n super.dispose();\n }\n}\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}\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\";\nimport type { MSAppClient } from \"./MSAppClient\";\nimport { Disposable, Event, createDisposable } from \"@maketribe/utils\";\n\nexport class PageManager {\n normalPages: RouteRecordRaw[] = [];\n\n extendsPages: RouteRecordRaw[] = [];\n\n msAppClient: MSAppClient | null = null;\n\n msAppClientChangeEvent: Event<{ msAppClient: MSAppClient | null }> =\n new Event();\n\n afterInitdEvent: Event = new Event();\n\n msAppClientDisposable: Disposable | null = null;\n\n setMSAppCLient(msAppClient: MSAppClient | null) {\n this.msAppClientDisposable?.dispose();\n\n this.msAppClientDisposable = new Disposable();\n\n this.msAppClient = msAppClient;\n\n this.msAppClientChangeEvent.emit({ msAppClient });\n }\n\n addNormalPage(normalPage: RouteRecordRaw) {\n const index = this.normalPages.findIndex(\n (item) => item.name === normalPage.name\n );\n\n if (index > -1) {\n this.normalPages.splice(index, 1);\n }\n\n this.normalPages.push(normalPage);\n }\n\n addExtendsPage(extendsPage: RouteRecordRaw) {\n const index = this.extendsPages.findIndex(\n (item) => item.name === extendsPage.name\n );\n\n if (index > -1) {\n this.extendsPages.splice(index, 1);\n }\n\n this.extendsPages.push(extendsPage);\n }\n\n init() {\n this.addNormalPage({\n name: \"mk-ms-layout\",\n path: \"/\",\n component: () => import(\"../page/index.vue\"),\n });\n\n this.addNormalPage({\n name: \"login\",\n path: \"/login\",\n meta: {\n isAuthorization: false,\n },\n component: () => import(\"../page/login/index.vue\"),\n });\n\n this.addNormalPage({\n name: \"signup\",\n path: \"/signup\",\n meta: {\n isAuthorization: false,\n },\n component: () => import(\"../page/signup/index.vue\"),\n });\n\n this.afterInitdEvent.emit();\n\n this.msAppClientChangeEvent.on(({ msAppClient }) => {\n if (!msAppClient) {\n return;\n }\n\n const vueRouter = msAppClient.vueRouter;\n const vueRoutes = vueRouter.getRoutes();\n\n const addedNormalPageNames: string[] = [];\n\n for (const normalPage of this.normalPages) {\n const vueRoute = vueRoutes.find(\n (vueRoute) => vueRoute.name === normalPage.name\n );\n\n if (!vueRoute) {\n addedNormalPageNames.push(normalPage.name as string);\n vueRouter.addRoute(normalPage);\n }\n }\n\n this.msAppClientDisposable?.register(\n createDisposable(() => {\n for (const addedNormalPageName of addedNormalPageNames) {\n vueRouter.removeRoute(addedNormalPageName);\n }\n })\n );\n\n this.msAppClientDisposable?.register(\n msAppClient.beforeInitUserSessionEvent.on(({ userSession }) => {\n if (!userSession) {\n return;\n }\n\n userSession.beforeInitRouterEvent.on(() => {\n const router = userSession.router;\n\n const addedExtendsPageNames: string[] = [];\n\n for (const extendsPage of this.extendsPages) {\n const routeInfo = router.getRouteByName(\n extendsPage.name as string\n );\n\n if (!routeInfo) {\n continue;\n }\n\n const vueRoute = vueRoutes.find(\n (vueRoute) => vueRoute.name === extendsPage.name\n );\n\n if (!vueRoute) {\n extendsPage.path = routeInfo.route || extendsPage.path;\n addedExtendsPageNames.push(extendsPage.name as string);\n vueRouter.addRoute(\"mk-ms-layout\", extendsPage);\n }\n }\n\n if (!this.extendsPages.find((page) => page.name === \"notFound\")) {\n this.addExtendsPage({\n name: \"notFound\",\n // path: \":pathMatch(.*)*\",\n path: \"\",\n component: () => import(\"../page/index/404.vue\"),\n });\n }\n\n userSession.register(\n createDisposable(() => {\n for (const addedExtendsPageName of addedExtendsPageNames) {\n vueRouter.removeRoute(addedExtendsPageName);\n }\n })\n );\n });\n })\n );\n });\n }\n}\n","import { RouteRecordRaw } from \"vue-router\";\nimport { DATA_MODEL_NAME } from \"../constants\";\nimport {\n DataFormClass,\n DataTableClass,\n DataTreeClass,\n} from \"./DataModelDefines\";\nimport { Components, IComponents } from \"@maketribe/dm\";\nimport { App } from \"vue\";\n\nexport type MkModule = (module: InternalMkModule) => void;\n\n/**\n * 模块\n * 模块主要包含有以下几点\n * 1.dataview相关的表格表单等待,\n * 2.定制页面\n * 3.组件\n */\nexport class InternalMkModule {\n app: App;\n\n dataTableComponents: IComponents = new Components();\n\n dataFormComponents: IComponents = new Components();\n\n dataFilterComponents: IComponents = new Components();\n\n whereFilterComponents: IComponents = new Components();\n\n dataTableClasses: DataTableClass[] = [];\n\n dataFormClasses: DataFormClass[] = [];\n\n dataTreeClasses: DataTreeClass[] = [];\n\n normalPages: RouteRecordRaw[] = [];\n\n extendsPages: RouteRecordRaw[] = [];\n\n constructor(app: App) {\n this.app = app;\n }\n\n /**\n * 注册DataTable\n * @param dataTableClass\n */\n registerDataTable(dataTableClass: DataTableClass) {\n const name = (dataTableClass as any)[DATA_MODEL_NAME];\n\n const existDataTableClass = this.dataTableClasses.find(\n (item) => (item as any)[DATA_MODEL_NAME] === name\n );\n\n if (existDataTableClass) {\n throw new Error(`已经存在相同name为 ${name} 的DataTable`);\n }\n\n this.dataTableClasses.push(dataTableClass);\n }\n\n /**\n * 注册DataForm\n * @param dataFormClass\n */\n registerDataForm(dataFormClass: DataFormClass) {\n const name = (dataFormClass as any)[DATA_MODEL_NAME];\n\n const existDataFormClass = this.dataFormClasses.find(\n (item) => (item as any)[DATA_MODEL_NAME] === name\n );\n\n if (existDataFormClass) {\n throw new Error(`已经存在相同name为 ${name} 的DataTable`);\n }\n\n this.dataFormClasses.push(dataFormClass);\n }\n\n /**\n * 注册DataTree\n * @param dataTreClass\n */\n registerDataTree(dataTreClass: DataTreeClass) {\n const name = (dataTreClass as any)[DATA_MODEL_NAME];\n\n const existDataTreeClass = this.dataTreeClasses.find(\n (item) => (item as any)[DATA_MODEL_NAME] === name\n );\n\n if (existDataTreeClass) {\n throw new Error(`已经存在相同name为 ${name} 的DataTable`);\n }\n\n this.dataTreeClasses.push(dataTreClass);\n }\n\n registerNormalPage(route: RouteRecordRaw) {\n this.normalPages.push(route);\n }\n\n registerExtendsPage(route: RouteRecordRaw) {\n this.extendsPages.push(route);\n }\n}\n","import {\n createRouter,\n createWebHashHistory,\n Router as VueRouter,\n} from \"vue-router\";\nimport {\n ACCESS_TOKEN_HEADER,\n DVQueryable,\n HttpRequest,\n R,\n WebHttpRequest,\n X_ACCESS_TOKEN_HEADER,\n} from \"@maketribe/request\";\nimport { IComponents, Components, ComponentsCombine } from \"@maketribe/dm\";\nimport { I18n } from \"@maketribe/locale\";\n\nimport { Event, md5 } from \"@maketribe/utils\";\nimport { UserSession } from \"./UserSession\";\nimport { authBeforeEach } from \"../router-middleware\";\nimport { PageManager } from \"./PageManager\";\nimport { InternalMkModule, MkModule } from \"./MkModule\";\nimport { DataModelDefines } from \"./DataModelDefines\";\nimport { App } from \"vue\";\nimport { DATA_MODEL_NAME } from \"../constants\";\n\nexport type LoginResult = {\n account: string;\n email: string;\n nickName: string;\n avatarPath: string;\n};\n\nexport interface MSAppClientOptions {\n app: App;\n pageManager?: PageManager;\n projectName: string;\n httpRequest?: HttpRequest;\n origin: string;\n appID: string;\n logo?: string;\n locale?: string;\n vueRouter?: VueRouter;\n dataTableComponents?: IComponents;\n dataTableHeaderComponents?: IComponents;\n dataFormComponents?: IComponents;\n dataFilterComponents?: IComponents;\n whereFilterComponents?: IComponents;\n}\n\nexport class MSAppClient {\n static instance: MSAppClient | null = null;\n\n origin: string = \"\";\n\n private _options: Required<MSAppClientOptions>;\n\n app: App;\n\n projectName: string;\n\n logo: string;\n\n appID: string;\n\n userSession: UserSession | null = null;\n\n httpRequest: HttpRequest;\n\n ready: boolean = false;\n\n initd: boolean = false;\n\n pageManager: PageManager;\n\n modules: MkModule[] = [];\n\n /**\n * @deprecated\n * @description 使用 MSAppClient.instance.userSession.userInfo\n */\n get userInfo() {\n return this.userSession?.userInfo ?? null;\n }\n\n dataTableComponents: IComponents;\n dataTableHeaderComponents: IComponents;\n dataFormComponents: IComponents;\n dataFilterComponents: IComponents;\n whereFilterComponents: IComponents;\n i18n: I18n;\n\n vueRouter: VueRouter;\n\n beforeInitUserSessionEvent: Event<{ userSession: UserSession }> = new Event();\n\n userSessionChangeEvent: Event<{ userSession: UserSession | null }> =\n new Event();\n\n constructor(options: MSAppClientOptions) {\n this._options = this._normalizeOptions(options);\n\n this.app = options.app;\n\n this.appID = this._options.appID;\n\n this.logo = this._options.logo;\n\n this.projectName = options.projectName;\n\n this.dataTableComponents = this._options.dataTableComponents;\n this.dataTableHeaderComponents = this._options.dataTableHeaderComponents;\n this.dataFormComponents = this._options.dataFormComponents;\n this.dataFilterComponents = this._options.dataFilterComponents;\n this.whereFilterComponents = this._options.whereFilterComponents;\n this.i18n = I18n.instance;\n this.i18n.setCurrentLanguageName(this._options.locale);\n\n this.dataTableComponents = this._options.dataTableComponents;\n this.dataFormComponents = this._options.dataFormComponents;\n this.dataFilterComponents = this._options.dataFilterComponents;\n this.whereFilterComponents = this._options.whereFilterComponents;\n\n this.vueRouter = this._options.vueRouter;\n\n this.pageManager = this._options.pageManager;\n\n this.httpRequest = this._options.httpRequest;\n\n HttpRequest.appID = this.appID;\n HttpRequest.setDefaultHttpRequest(this.httpRequest);\n\n DVQueryable.setHttpRequest(this.httpRequest);\n }\n\n setUserSession(userSession: UserSession | null) {\n if (this.userSession) {\n this.userSession.dispose();\n }\n\n this.userSession = userSession;\n\n this.userSessionChangeEvent.emit({ userSession });\n }\n\n private _normalizeOptions(\n options: MSAppClientOptions\n ): Required<MSAppClientOptions> {\n return {\n app: options.app,\n appID: options.appID,\n projectName: options.projectName,\n httpRequest: options.httpRequest ?? new WebHttpRequest(),\n origin: options.origin,\n logo: options.logo || \"\",\n locale: options.locale || \"zh-cn\",\n vueRouter:\n options.vueRouter ??\n createRouter({\n history: createWebHashHistory(),\n routes: [],\n }),\n pageManager: options.pageManager ?? new PageManager(),\n dataTableComponents: options.dataTableComponents ?? new Components(),\n dataTableHeaderComponents:\n options.dataTableHeaderComponents ?? new Components(),\n dataFormComponents: options.dataFormComponents ?? new Components(),\n dataFilterComponents: options.dataFilterComponents ?? new Components(),\n whereFilterComponents: options.whereFilterComponents ?? new Components(),\n };\n }\n getI18n() {\n return this.i18n;\n }\n\n getOptions() {\n return this._options;\n }\n\n async loadCurrentUserSession(options?: {\n accessToken: string;\n xAccessToken: string;\n }) {\n const userSession = (this.userSession = new UserSession({\n msAppClient: this,\n ...options,\n }));\n this.userSession = null;\n\n this.beforeInitUserSessionEvent.emit({ userSession });\n const userSessionInitResult = await userSession.init();\n\n if (userSessionInitResult?.data.code !== 200) {\n userSession.dispose();\n return userSessionInitResult!;\n }\n\n this.setUserSession(userSession);\n }\n\n async init() {\n if (this.initd) {\n return;\n }\n\n const internalModules = this.modules.map((module) => {\n const internalModule = new InternalMkModule(this.app);\n\n module(internalModule);\n\n return internalModule;\n });\n\n const dataTableComponents = [];\n const dataFormComponents = [];\n const whereFilterComponents = [];\n const dataFilterComponents = [];\n\n for (let internalModule of internalModules) {\n for (let item of internalModule.dataTableClasses) {\n DataModelDefines.instance.registerDataTableDefine(\n (item as any)[DATA_MODEL_NAME],\n item\n );\n }\n\n for (let item of internalModule.dataFormClasses) {\n DataModelDefines.instance.registerDataFormDefine(\n (item as any)[DATA_MODEL_NAME],\n item\n );\n }\n\n for (let item of internalModule.dataTreeClasses) {\n DataModelDefines.instance.registerDataTreeDefine(\n (item as any)[DATA_MODEL_NAME],\n item\n );\n }\n\n dataTableComponents.push(internalModule.dataTableComponents);\n dataFormComponents.push(internalModule.dataFormComponents);\n dataFilterComponents.push(internalModule.dataFilterComponents);\n whereFilterComponents.push(internalModule.whereFilterComponents);\n }\n\n this.dataTableComponents = new ComponentsCombine({\n componentsList: [...dataTableComponents, this.dataTableComponents],\n });\n this.dataFormComponents = new ComponentsCombine({\n componentsList: [...dataFormComponents, this.dataFormComponents],\n });\n this.dataFilterComponents = new ComponentsCombine({\n componentsList: [...dataFilterComponents, this.dataFilterComponents],\n });\n this.whereFilterComponents = new ComponentsCombine({\n componentsList: [...whereFilterComponents, this.whereFilterComponents],\n });\n\n this.vueRouter.beforeEach(async (to, from, next) => {\n const route = await authBeforeEach(this, to, from);\n\n if (route) {\n next(route);\n return;\n }\n\n next();\n });\n\n this.pageManager.init();\n this.pageManager.setMSAppCLient(this);\n\n for (let internalModule of internalModules) {\n for (let item of internalModule.normalPages) {\n this.pageManager.addNormalPage(item);\n }\n\n for (let item of internalModule.extendsPages) {\n this.pageManager.addExtendsPage(item);\n }\n }\n\n this.httpRequest.getInterceptors().response.use((config) => {\n if (config.data.code === 401) {\n this.userSession?.dispose();\n this.vueRouter.push({ name: \"login\" });\n }\n return config;\n });\n\n this.initd = true;\n }\n\n async login(username: string, password: string, code: string) {\n const response = await this.httpRequest.request<R<LoginResult>>({\n url: \"/ms/app/login\",\n method: \"POST\",\n data: {\n account: username,\n password: md5(`mkbl#${password}`),\n vCode: code,\n },\n });\n\n if (response.data.code === 200) {\n await this.loadCurrentUserSession({\n accessToken: response.headers[ACCESS_TOKEN_HEADER],\n xAccessToken: response.headers[X_ACCESS_TOKEN_HEADER],\n });\n }\n\n return response;\n }\n\n formatURL(url: string) {\n return url;\n }\n\n async resetPassword(username: string, code: string) {\n type LoginResult = {\n account: string;\n email: string;\n nickName: string;\n avatarPath: string;\n };\n\n const response = await this.httpRequest.request<R<LoginResult>>({\n url: \"/ms/app/reset-password\",\n method: \"POST\",\n data: { account: username, vCode: code },\n });\n\n return response;\n }\n\n async logout() {\n this.setUserSession(null);\n }\n async changePassword(password: string, newPassword: string, vCode: string) {\n type LoginResult = {\n account: string;\n email: string;\n nickName: string;\n avatarPath: string;\n };\n\n const response = await this.httpRequest.request<R<LoginResult>>({\n url: \"/ms/app/modify-password\",\n method: \"POST\",\n data: {\n password: md5(`mkbl#${password}`),\n newPassword: md5(`mkbl#${newPassword}`),\n vCode,\n },\n });\n\n return response;\n }\n\n addModule(module: MkModule) {\n this.modules.push(module);\n }\n}\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\";\nimport { buildProps } from \"@maketribe/utils\";\nimport { ExtractPropTypes } from \"vue\";\n\nexport const abstractSelectProps = buildProps({\n modelValue: {\n type: null,\n },\n dataTable: {\n type: DataTable<any>,\n },\n objectValue: {\n type: Boolean,\n default: false,\n },\n multiple: {\n type: Boolean,\n default: false,\n },\n options: {\n type: Array,\n },\n primaryFieldName: {\n type: String,\n },\n labelFieldName: {\n type: String,\n },\n formatOptions: {\n type: Function,\n default: (item: any) => {\n const value = item.value ?? item.id ?? item.name;\n const label = item.label ?? item.desc ?? item.title ?? item.name;\n\n return { value, label };\n },\n },\n additional: {\n type: Boolean,\n default: true,\n },\n});\n\nexport type AbstractSelectProps = ExtractPropTypes<typeof abstractSelectProps>;\n\nexport const abstractSelectEmits = {\n \"update:model-value\": (modelValue: any) => true,\n};\n\nexport type AbstractSelectEmits = typeof abstractSelectEmits;\n","import {\n computed,\n ComputedRef,\n defineComponent,\n Ref,\n ref,\n unref,\n watch,\n} from \"vue\";\nimport {\n abstractSelectEmits,\n abstractSelectProps,\n} from \"./abstract-select-options\";\nimport { isEqual } from \"lodash-es\";\nimport { Where } from \"@maketribe/request\";\n\nexport type DataOptionItem = {\n value: any;\n label: string;\n data: any;\n children?: DataOptionItem[];\n};\n\nexport default defineComponent({\n name: \"MKAbstractSelect\",\n props: abstractSelectProps,\n emits: abstractSelectEmits,\n inheritAttrs: false,\n setup(props, { emit }) {\n const modelValue = computed({\n get: () => unref(props.modelValue),\n set: (v) => {\n emit(\"update:model-value\", v);\n },\n });\n\n const selections = computed(() => {\n const _primaryKey = unref(primaryKey);\n const _modelValue = unref(modelValue);\n\n if (props.objectValue) {\n return props.multiple\n ? _modelValue?.map((item: any) => item[_primaryKey]) ?? []\n : _modelValue?.[_primaryKey] ?? \"\";\n }\n\n return _modelValue;\n });\n\n const innerSelections = ref(unref(modelValue));\n const selectRecords: Ref<any[]> = ref([]);\n\n const primaryKey = computed(\n () => props.primaryFieldName ?? props.dataTable?.primaryKey ?? \"value\"\n );\n\n const formatOptions = computed(() => {\n let _formatOptions;\n\n if (props.labelFieldName) {\n _formatOptions = (item: any) => {\n return {\n value: item[unref(primaryKey)],\n label: item[props.labelFieldName!],\n };\n };\n } else {\n _formatOptions = props.formatOptions;\n }\n\n const innerFormatOptions = (item: any) => {\n const options = _formatOptions(item) as DataOptionItem;\n\n options.data = item;\n\n if (Array.isArray(item.children)) {\n options.children = item.children.map(innerFormatOptions);\n }\n\n return options as DataOptionItem;\n };\n\n return innerFormatOptions;\n });\n\n const options: ComputedRef<DataOptionItem[]> = computed(() => {\n let options: DataOptionItem[] = [];\n\n const _formatOptions = unref(formatOptions);\n\n if (props.dataTable) {\n options = props.dataTable\n .getList()\n .map((item) => _formatOptions.call(null, item));\n } else if (Array.isArray(props.options)) {\n options = props.options.map((item) => _formatOptions.call(null, item));\n }\n\n const optionValues = options.map((options) => options.value);\n\n let additionOptions: any[] = [];\n\n if (props.additional) {\n additionOptions = unref(selectRecords)\n .map(_formatOptions)\n .filter(\n (additionOption) => !optionValues.includes(additionOption.value)\n );\n }\n\n return options.concat(additionOptions);\n });\n\n watch(\n modelValue,\n async (modelValue) => {\n let _values: any;\n if (props.objectValue) {\n _values = props.multiple\n ? modelValue?.map((item: any) => item[unref(primaryKey)]) ?? []\n : modelValue?.[unref(primaryKey)] ?? null;\n } else {\n _values = modelValue;\n }\n\n if (!isEqual(_values, unref(innerSelections))) {\n innerSelections.value = _values;\n }\n },\n { immediate: true }\n );\n\n const getSelectDataOptions = async () => {\n const _primaryKey = unref(primaryKey);\n\n const _selections = unref(innerSelections);\n\n const recordIds = Array.isArray(_selections)\n ? _selections\n : _selections\n ? [_selections]\n : [];\n\n if (props.dataTable) {\n const dataTable = props.dataTable;\n\n let existingRecords = unref(options)\n .filter((option) => recordIds.includes(option.value))\n .map((item) => item.data);\n\n if (existingRecords.length !== recordIds.length) {\n const notExistingRecords = recordIds.filter(\n (id) => !existingRecords.find((item) => item[_primaryKey] === id)\n );\n\n const where = new Where();\n where.addCondition(\n unref(primaryKey),\n \"in\",\n `${notExistingRecords.join(\",\")}`\n );\n // where.addCondition(\n // unref(primaryKey),\n // \"in\",\n // `${notExistingRecords.map((id) => JSON.stringify(id)).join(\",\")}`\n // );\n\n const response = await dataTable.dataViewRequest.allList({\n data: { condition: where },\n });\n\n if (response.data.code === 200) {\n existingRecords = [...existingRecords, ...response.data.data];\n }\n }\n\n return recordIds\n .map((id) => existingRecords.find((item) => item[_primaryKey] === id))\n .filter(Boolean);\n } else if (Array.isArray(props.options)) {\n const _options = unref(options);\n\n return _options\n .filter((option) => recordIds.includes(option.value))\n .map((item) => item.data);\n }\n\n return [];\n };\n\n watch(\n innerSelections,\n async (selections) => {\n selectRecords.value = await getSelectDataOptions();\n if (modelValue.value !== selections) {\n if (props.objectValue) {\n modelValue.value = props.multiple\n ? [...selectRecords.value]\n : selectRecords.value[0] ?? null;\n } else {\n modelValue.value = selections;\n }\n }\n },\n { immediate: true }\n );\n\n const setSelections = (v: any) => {\n innerSelections.value = v;\n };\n\n return {\n options,\n selections,\n selectRecords,\n setSelections,\n formatOptions,\n };\n },\n render() {\n return this.$slots.default?.({\n options: this.options,\n selections: this.selections,\n selectRecords: this.selectRecords,\n setSelections: this.setSelections,\n formatOptions: this.formatOptions,\n });\n },\n});\n","import AbstractSelect from \"./abstract-select\";\n\nexport const MKAbstractSelect = AbstractSelect;\n\nexport default MKAbstractSelect;\n\nexport * from \"./abstract-select-options\";\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\";\nimport { buildProps } from \"@maketribe/utils\";\n\nexport const buttonProps = buildProps({\n icon: {\n type: String,\n default: \"\",\n },\n label: {\n type: String,\n default: \"\",\n },\n type: {\n values: [\n \"\",\n \"default\",\n \"text\",\n \"success\",\n \"warning\",\n \"info\",\n \"primary\",\n \"danger\",\n ],\n },\n link: {\n type: Boolean,\n default: false,\n },\n} as const);\n\nexport type ButtonProps = ExtractPropTypes<typeof buttonProps>;\n\nexport const buttonEmits = {\n click: () => true,\n};\n\nexport type ButtonEmits = typeof buttonEmits;\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\";\nimport { Components } from \"@maketribe/dm\";\nimport { buildProps } from \"@maketribe/utils\";\nimport { I18n } from \"@maketribe/locale\";\n\nexport const configProviderProps = buildProps({\n dataTableComponents: {\n type: Components,\n },\n dataFormComponents: {\n type: Components,\n },\n dataFilterComponents: {\n type: Components,\n },\n whereFilterComponents: {\n type: Components,\n },\n dataTableHeaderComponents: {\n type: Components,\n },\n i18n: {\n type: I18n,\n },\n});\n\nexport type ConfigProviderProps = ExtractPropTypes<typeof configProviderProps>;\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\";\nimport { buildProps } from \"@maketribe/utils\";\nimport { abstractSelectEmits, abstractSelectProps } from \"../../abstract\";\nimport { DataTable } from \"@maketribe/dm\";\n\nconst { options: _, ...restAbstractSelectProps } = abstractSelectProps;\n\nexport const dataTableSelectProps = buildProps({\n ...restAbstractSelectProps,\n dataTable: {\n type: DataTable<any>,\n required: true,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n} as const);\n\nexport type DataTableSelectProps = ExtractPropTypes<\n typeof dataTableSelectProps\n>;\n\nexport const dataTableSelectEmits = {\n ...abstractSelectEmits,\n};\n\nexport type DataTableSelectEmits = typeof dataTableSelectEmits;\n","import { computed, defineComponent, ref, Ref, unref, watch } from \"vue\";\nimport { ElSelect } from \"element-plus\";\nimport { Grid } from \"@element-plus/icons-vue\";\nimport {\n dataTableSelectEmits,\n dataTableSelectProps,\n} from \"./data-table-select-options\";\nimport { MKAbstractSelect } from \"../../abstract\";\nimport { DataTable, Dialoger, TableSelectCacheColumn } from \"@maketribe/dm\";\n\nexport default defineComponent({\n name: \"MKDataTableSelect\",\n inheritAttrs: false,\n props: dataTableSelectProps,\n emits: dataTableSelectEmits,\n setup(props, { emit }) {\n const abstractSelectInstance: Ref<typeof MKAbstractSelect | null> =\n ref(null);\n\n const dataTable = computed(() => props.dataTable);\n\n const modelValue = computed({\n get: () => props.modelValue,\n set: (v) => emit(\"update:model-value\", v),\n });\n\n watch(\n computed(\n () => [unref(dataTable), props.multiple] as [DataTable, boolean]\n ),\n ([dataTable, multiple]) => {\n dataTable.setSelectionColumn(new TableSelectCacheColumn({ multiple }));\n },\n { immediate: true }\n );\n\n const handleMousedown = async () => {\n if (props.disabled) {\n return;\n }\n\n const _dataTable = unref(dataTable);\n\n const _selections = unref(abstractSelectInstance)?.selections;\n\n const selections = props.multiple\n ? _selections ?? []\n : _selections\n ? [_selections]\n : [];\n\n _dataTable.setSelection(selections);\n\n const result = await Dialoger.dataTableSelectDialog(unref(dataTable)!);\n if (result.isConfirm) {\n unref(abstractSelectInstance)?.setSelections(\n props.multiple ? result.selections : result.selections[0]\n );\n }\n };\n\n return () => {\n return (\n <div class=\"mk-data-table-select\" onMousedown={handleMousedown}>\n <MKAbstractSelect\n modelValue={unref(modelValue)}\n onUpdate:model-value={(v: any) => {\n modelValue.value = v;\n }}\n ref={(el) => (abstractSelectInstance.value = el as any)}\n dataTable={props.dataTable}\n objectValue={props.objectValue}\n multiple={props.multiple}\n labelFieldName={props.labelFieldName}\n primaryFieldName={props.primaryFieldName}\n formatOptions={props.formatOptions}\n v-slots={{\n default: ({ selectRecords, formatOptions }: any) => {\n const options = selectRecords.map(formatOptions);\n\n return (\n <ElSelect\n disabled={props.disabled}\n multiple={props.multiple}\n suffixIcon={Grid}\n popperClass=\"mk-data-table-select__popper\"\n clearable\n modelValue={props.multiple ? options : options[0] ?? null}\n />\n );\n },\n }}\n />\n </div>\n );\n };\n },\n});\n","import { withInstall } from \"@maketribe/utils\";\nimport DataTableSelect from \"./data-table-select\";\n\nexport const MKDataTableSelect = withInstall(DataTableSelect);\n\nexport default MKDataTableSelect;\n","import { ExtractPropTypes } from \"vue\";\nimport { buildProps } from \"@maketribe/utils\";\nimport { abstractSelectEmits, abstractSelectProps } from \"../../abstract\";\n\nexport const dataSelectProps = buildProps({\n ...abstractSelectProps,\n disabled: {\n type: Boolean,\n default: false,\n },\n allowCreate: {\n type: Boolean,\n default: false,\n },\n filterable: {\n type: Boolean,\n default: false,\n },\n filterFieldNames: {\n type: Array<string>,\n default: () => [],\n },\n primaryKey: String,\n} as const);\n\nexport type DataSelectProps = ExtractPropTypes<typeof dataSelectProps>;\n\nexport const dataSelectEmit = {\n ...abstractSelectEmits,\n};\n\nexport type DataSelectEmit = typeof dataSelectEmit;\n","import { computed, defineComponent, onMounted, unref, watch } from \"vue\";\nimport { ElSelect, ElOption } from \"element-plus\";\n\nimport { dataSelectProps, dataSelectEmit } from \"./data-select-options\";\nimport { MKAbstractSelect } from \"../../abstract\";\nimport { debounce } from \"lodash-es\";\n\nexport type DataOptionItem = { value: any; label: string };\n\nexport default defineComponent({\n name: \"MKDataSelect\",\n props: dataSelectProps,\n emits: dataSelectEmit,\n setup(props, { emit }) {\n const loading = computed(() => props.dataTable?.loading ?? false);\n\n const modelValue = computed({\n get: () => unref(props.modelValue),\n set: (v) => {\n emit(\"update:model-value\", v);\n },\n });\n\n const dataTable = computed(() => props.dataTable);\n\n onMounted(() => [\n watch(\n dataTable,\n async () => {\n await unref(dataTable)?.init();\n unref(dataTable)?.dataFilter.setReady();\n unref(dataTable)?.load();\n },\n { immediate: true }\n ),\n ]);\n\n const filterMethod = debounce(async (value: string) => {\n if (props.dataTable) {\n if (!props.filterFieldNames.length) {\n return null;\n }\n\n props.dataTable.useCondition((group) => {\n group.clear();\n\n for (let fieldName of props.filterFieldNames) {\n group.addCondition(fieldName, \"like\", `%${value}%`);\n }\n });\n\n const dataFilter = props.dataTable.dataFilter;\n\n await props.dataTable.load();\n\n return;\n }\n }, 500);\n\n return () => {\n return (\n <MKAbstractSelect\n modelValue={unref(modelValue)}\n onUpdate:model-value={(v: any) => {\n modelValue.value = v;\n }}\n dataTable={props.dataTable}\n objectValue={props.objectValue}\n multiple={props.multiple}\n options={props.options}\n labelFieldName={props.labelFieldName}\n primaryFieldName={props.primaryFieldName}\n formatOptions={props.formatOptions}\n v-slots={{\n default: ({ options, selections, setSelections }: any) => {\n const children = unref(options).map((item: any) => (\n <ElOption\n key={item.value}\n value={item.value}\n label={item.label}\n />\n ));\n\n return (\n <ElSelect\n disabled={props.disabled}\n loading={unref(loading)}\n class=\"data-select\"\n modelValue={selections}\n onUpdate:modelValue={setSelections}\n filterMethod={filterMethod}\n multiple={props.multiple}\n allowCreate={props.allowCreate}\n filterable={props.filterable}\n >\n {children}\n </ElSelect>\n );\n },\n }}\n />\n );\n };\n },\n});\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 {\n computed,\n defineComponent,\n renderSlot,\n unref,\n useSlots,\n watch,\n} from \"vue\";\nimport { useRouter } from \"vue-router\";\nimport { Components } from \"@maketribe/dm\";\nimport { MSAppClient } from \"../../../core\";\nimport { MKConfigProvider } from \"../config-provider\";\n\n/**\n * 路由变动的几种情况,\n * 1.点击菜单跳转陆游\n * 2.特定业务逻辑需要跳转路由\n * 3.返回上一页\n * 4.刷新页面\n */\n\nexport default defineComponent({\n name: \"MKSystemProvider\",\n setup() {\n const vueRouter = useRouter();\n\n const msAppClient = MSAppClient.instance!;\n\n const ready = computed(() => msAppClient.ready);\n\n const slots = useSlots();\n\n watch(\n computed(() => unref(vueRouter.currentRoute)),\n (route) => {\n const userSession = msAppClient.userSession;\n\n if (!userSession) {\n return;\n }\n\n const router = userSession.router;\n const menu = userSession.menu;\n const tabs = userSession.tabs;\n\n const routeInfo = router.getRouteByName(route.name as string);\n\n if (!routeInfo) {\n menu.setCurrentMenuNode(null);\n tabs.setCurrentTab(null);\n return;\n }\n\n const menuNode = menu.findMenuNodeByID(routeInfo.menuId);\n\n if (!menuNode) {\n menu.setCurrentMenuNode(null);\n tabs.setCurrentTab(null);\n return;\n }\n\n menu.setCurrentMenuNode(menuNode);\n\n const tab =\n tabs.findTabByID(route.fullPath) ??\n tabs.createTab({\n id: route.fullPath,\n title: routeInfo.title,\n affix: !!route.matched?.[route.matched?.length - 1]?.meta?.affix,\n realRoute: route,\n route: routeInfo,\n });\n\n tabs.switchTab(tab);\n },\n { immediate: true }\n );\n\n return () => {\n return (\n <MKConfigProvider\n dataTableComponents={msAppClient.dataTableComponents as Components}\n dataFormComponents={msAppClient.dataFormComponents as Components}\n dataFilterComponents={msAppClient.dataFilterComponents as Components}\n whereFilterComponents={\n msAppClient.whereFilterComponents as Components\n }\n dataTableHeaderComponents={msAppClient.dataTableHeaderComponents as Components}\n i18n={msAppClient.i18n}\n >\n {renderSlot(slots, \"default\")}\n </MKConfigProvider>\n );\n };\n },\n});\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\";\nimport { withInstall } from \"@maketribe/utils\";\n\nexport const MKCodeEditor = withInstall(\n defineAsyncComponent(() => import(\"./code-editor\"))\n);\n\nexport default MKCodeEditor;\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\";\nimport { ExtractPropTypes } from \"vue\";\n\nexport const datePickerTypes = [\"date\", \"year\", \"month\", \"datetime\"] as const;\n\nexport const datePickerProps = buildProps({\n modelValue: {\n type: String,\n default: null,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n type: {\n default: \"date\",\n values: datePickerTypes,\n },\n valueFormat: {\n type: String,\n },\n});\n\nexport type DatePickerProps = ExtractPropTypes<typeof datePickerProps>;\n\nexport const datePickerEmits = {\n \"update:model-value\": (value: string) => true,\n};\n\nexport type DatePickerEmits = ExtractPropTypes<typeof datePickerEmits>;\n","import { computed, defineComponent, unref } from \"vue\";\nimport { ElDatePicker } from \"element-plus\";\nimport {\n datePickerTypes,\n datePickerProps,\n datePickerEmits,\n} from \"./date-picker-options\";\n\nexport default defineComponent({\n name: \"MKFormDatePicker\",\n props: datePickerProps,\n emits: datePickerEmits,\n setup(props, { emit }) {\n const modelValue = computed({\n get: () => props.modelValue,\n set: (v) => {\n emit(\"update:model-value\", v);\n },\n });\n\n const disabled = computed(() => props.disabled);\n\n const type = computed(() =>\n datePickerTypes.includes(props.type) ? props.type : \"date\"\n );\n\n const valueFormat = computed(() => {\n if (props.valueFormat) {\n return props.valueFormat;\n }\n\n switch (unref(type)) {\n case \"datetime\":\n return \"YYYY-MM-DD HH:mm:ss\";\n case \"month\":\n return \"YYYY-MM\";\n case \"year\":\n return \"YYYY\";\n default:\n return \"YYYY-MM-DD\";\n }\n });\n\n return () => {\n return (\n <ElDatePicker\n class=\"mk-form-date-picker\"\n type={unref(type)}\n valueFormat={unref(valueFormat)}\n disabled={unref(disabled)}\n modelValue={unref(modelValue)}\n onUpdate:modelValue={(v: any) => (modelValue.value = v)}\n />\n );\n };\n },\n});\n","import { withInstall } from \"@maketribe/utils\";\nimport FormDatePicker from \"./date-picker\";\n\nexport const MKFormDatePicker = withInstall(FormDatePicker);\n\nexport default MKFormDatePicker;\n\nexport * from \"./date-picker-options\";\n","import { ExtractPropTypes } from \"vue\";\nimport { buildProps } from \"@maketribe/utils\";\n\nexport const iconSelectProps = buildProps({\n modelValue: {\n type: String,\n default: null,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n});\n\nexport type IconSelectProps = ExtractPropTypes<typeof iconSelectProps>;\n\nexport const iconSelectEmits = {\n \"update:model-value\": (value: string) => true,\n};\n\nexport type IconSelectEmits = ExtractPropTypes<typeof iconSelectEmits>;\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\";\nimport FormIconSelect from \"./icon-select\";\n\nexport const MKFormIconSelect = withInstall(FormIconSelect);\nexport default MKFormIconSelect;\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\";\nimport { MsMaterialGroup } from \"./MsMaterialGroupForm\";\nimport { ResponseConfig, R } from \"@maketribe/request\";\nimport { DATA_MODEL_NAME } from \"../../../../../constants\";\nimport { MODULE_NAME } from \"../../../constants\";\n\nexport type MsMaterialGroupNode = MsMaterialGroup & {\n children: MsMaterialGroupNode[];\n};\n\nexport class MsMaterialGroupTree extends DataTree<MsMaterialGroupNode> {\n static [DATA_MODEL_NAME]: string = \"mk-material-group\";\n\n currentDataTreeNode: DataTreeNode<MsMaterialGroupNode> | null;\n\n constructor(options: DataTableOptions = {}) {\n super({\n name: MsMaterialGroupTree[DATA_MODEL_NAME],\n moduleName: MODULE_NAME,\n props: { label: \"desc\", parent: \"parentGroupId\" },\n ...options,\n });\n\n this.currentDataTreeNode = null;\n }\n\n formatItem(item: MsMaterialGroupNode): MsMaterialGroupNode {\n item.children = item.children ?? [];\n\n return item;\n }\n\n load(\n params?: Record<string, any>\n ): Promise<\n ResponseConfig<R<MsMaterialGroupNode[]> & { totalRecCount: string }>\n > {\n return this.loadAll(params);\n }\n\n public nodeHasChildren(node: DataTreeNode<MsMaterialGroupNode>): boolean {\n return node.children.length > 0;\n }\n\n getCurrentNode() {\n if (this.currentDataTreeNode) {\n return this.currentDataTreeNode;\n }\n\n const getFirstNode = (\n nodes: DataTreeNode<MsMaterialGroupNode>[]\n ): DataTreeNode<MsMaterialGroupNode> | null => {\n const node = nodes[0];\n\n if (node.children.length) {\n return getFirstNode(node.children);\n }\n\n return node;\n };\n\n if (this.rootNodes.length === 0) {\n return null;\n }\n\n return (this.currentDataTreeNode = getFirstNode(this.rootNodes));\n }\n\n setCurrentNode(node: DataTreeNode<MsMaterialGroupNode> | null) {\n this.currentDataTreeNode = node;\n }\n}\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 {\n DataForm,\n DataFormOptions,\n FormColumn,\n IComponents,\n} from \"@maketribe/dm\";\nimport { ConfigComponents, ITypeResolver } from \"../../../../core\";\nimport { Disposable } from \"@maketribe/utils\";\nimport { DATA_MODEL_NAME } from \"../../../../constants\";\nimport { MODULE_NAME } from \"../../constants\";\n\nexport type MsConfig<T = any> = {\n id: string;\n key: string;\n type: string;\n value: T;\n};\n\nexport type MsConfigFormOptions = DataFormOptions & {\n configComponent?: IComponents;\n};\n\nexport class MsConfigForm\n extends DataForm<MsConfig>\n implements ITypeResolver<MsConfig>\n{\n static [DATA_MODEL_NAME]: string = \"mk-sys-config\";\n\n configComponent: IComponents;\n\n constructor(options: MsConfigFormOptions = {}) {\n super({\n name: MsConfigForm[DATA_MODEL_NAME],\n moduleName: MODULE_NAME,\n ...options,\n });\n\n this.configComponent = options.configComponent ?? new ConfigComponents();\n }\n\n protected async initialize() {\n await super.initialize();\n\n (window as any).configForm = this;\n\n const defaultType = \"string\";\n this.setColumns([\n new FormColumn({ name: \"id\", label: \"编号\" }),\n new FormColumn({ name: \"key\", label: \"配置键\", required: true }),\n new FormColumn({\n name: \"type\",\n label: \"类型\",\n componentInfo: \"MKFormDataSelect\",\n defaultValue: defaultType,\n required: true,\n componentProps: {\n options: [\n { value: \"string\", label: \"字符串\" },\n { value: \"int\", label: \"整数\" },\n { value: \"json\", label: \"JSON\" },\n ],\n },\n }),\n new FormColumn({\n name: \"value\",\n label: \"配置值\",\n required: true,\n defaultValue: null,\n rules: [\n {\n validator: (rule, value, callback) => {\n if (this.data?.type === \"json\") {\n try {\n JSON.parse(value);\n } catch (e) {\n callback(new Error(\"JSON格式错误\"));\n }\n }\n\n callback();\n },\n },\n ],\n componentInfo: this.resolveType(defaultType),\n }),\n new FormColumn({\n name: \"memo\",\n label: \"备注\",\n defaultValue: \"\",\n componentInfo: \"MKFormInput\",\n componentProps: { type: \"textarea\", rows: 4 },\n }),\n ]);\n\n let disposable: Disposable | null = null;\n\n this.dataChangeEvent.on(({ data }) => {\n disposable?.dispose();\n\n if (!data) {\n return null;\n }\n\n disposable = new Disposable();\n\n const valueFormColumn = this.getColumn(\"value\")!;\n valueFormColumn.componentInfo =\n this.configComponent.resolveComponent(\n this.resolveItemType(this.data!)\n ) || this.configComponent.resolveComponent(\"MKFormInput\")!;\n\n disposable.register(\n this.getColumn(\"type\")!.valueChangeEvent.on(() => {\n if (!this.data) {\n return;\n }\n\n const valueFormColumn = this.getColumn(\"value\")!;\n valueFormColumn.componentInfo =\n this.configComponent.resolveComponent(\n this.resolveItemType(this.data!)\n ) || this.configComponent.resolveComponent(\"MKFormInput\")!;\n\n this.data!.value = null;\n })\n );\n });\n }\n\n formatItem(item: MsConfig): MsConfig {\n let value = item.value;\n\n if (item.type !== \"json\") {\n try {\n value = JSON.parse(item.value);\n } catch (e) {}\n }\n\n return { ...item, value };\n }\n\n formatSubmitData(data: any) {\n return {\n ...data,\n value: data.type === \"json\" ? data.value : JSON.stringify(data.value),\n };\n }\n\n resolveType(type: string) {\n switch (type) {\n case \"int\":\n return \"MKConfigInputNumber\";\n case \"json\":\n return \"MKConfigJsonEditor\";\n default:\n return \"MKConfigInput\";\n }\n }\n\n resolveItemType(config: MsConfig) {\n return this.resolveType(config.type);\n }\n}\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 {\n Component,\n DataTable,\n DataTableOptions,\n IComponents,\n Messager,\n TableColumn,\n} from \"@maketribe/dm\";\nimport { MsMaterial, MsMaterialForm } from \"./MsMaterialForm\";\nimport { MsConfigTable } from \"../ms-config\";\nimport { ITypeResolver } from \"../../../../core\";\nimport { DATA_MODEL_NAME } from \"../../../../constants\";\nimport { MODULE_NAME } from \"../../constants\";\nimport { MsMaterialGroupNode } from \"./ms-material-group\";\nimport { DvOpt, UploadError, WebFileUpload } from \"@maketribe/request\";\nimport { MsMaterialComponents } from \"./MsMaterialComponents\";\nimport { isEqual } from \"lodash-es\";\n\nexport type MsMaterialType = {\n value: number;\n accept: string;\n label: string;\n limit: number;\n};\n\nexport type MaterialTableOptions = DataTableOptions & {\n materialComponents?: IComponents;\n};\n\nexport class MsMaterialTable\n extends DataTable<MsMaterial>\n implements ITypeResolver<MsMaterial>\n{\n static [DATA_MODEL_NAME]: string = \"mk-material\";\n\n materialTypes: MsMaterialType[] = [];\n\n allowMaterialTypeValues: MsMaterialType[\"value\"][] = [];\n\n materialComponents: IComponents;\n\n currentMaterialGroupId: MsMaterialGroupNode[\"id\"] | null = null;\n\n currentMaterialType: MsMaterialType | null = null;\n\n upload: WebFileUpload;\n\n materialForm: MsMaterialForm = this.register(new MsMaterialForm());\n\n constructor(options: MaterialTableOptions = {}) {\n super({\n name: MsMaterialTable[DATA_MODEL_NAME],\n moduleName: MODULE_NAME,\n ...options,\n });\n\n this.materialComponents =\n options.materialComponents ?? new MsMaterialComponents();\n\n this.upload = new WebFileUpload({\n filters: [\n (file) => {\n if (!this.currentMaterialType) {\n throw new UploadError(\"不能上传文件,素材类型无效\");\n }\n\n if (this.currentMaterialType.limit * 1024 * 1024 < file.size) {\n throw new UploadError(\"文件太大不能上传\");\n }\n },\n ],\n });\n }\n\n getMaterialTypes(): MsMaterialType[] {\n if (!this.allowMaterialTypeValues.length) {\n return this.materialTypes;\n }\n\n return this.materialTypes.filter((materialType) =>\n this.allowMaterialTypeValues.includes(materialType.value)\n );\n }\n\n async loadMaterialTypes() {\n const configResponse = await MsConfigTable.loadConfig<MsMaterialType[]>(\n \"ms-material-types\"\n );\n\n if (configResponse.data.code !== 200 || !configResponse.data.data) {\n throw new Error();\n }\n\n const config = configResponse.data.data;\n\n this.materialTypes = config.value || [];\n }\n\n protected async initialize() {\n await super.initialize();\n\n const dvOpt = DvOpt.createInstance({\n name: MsMaterialTable[DATA_MODEL_NAME],\n });\n\n this.upload.uploadEvent.on(({ uploadItem }) => {\n uploadItem.completeEvent.once(async () => {\n if (!this.currentMaterialGroupId || !this.currentMaterialType) {\n Messager.error({ message: \"上传失败\" });\n return;\n }\n\n try {\n const response = await dvOpt.save({\n materialGroupId: this.currentMaterialGroupId,\n type: this.currentMaterialType.value!,\n desc: uploadItem.payload.name,\n path: uploadItem.response!.data.data.path,\n });\n\n if (response.code !== 200) {\n Messager.error({ message: response.msg });\n return;\n }\n } catch {\n Messager.error({ message: \"网络异常\" });\n }\n\n this.load();\n });\n });\n\n this.materialTypes = [\n { value: 1, accept: \"image/*\", limit: 10, label: \"图片\" },\n { value: 2, accept: \"video/*\", limit: 500, label: \"视频\" },\n { value: 4, accept: \"*\", limit: 100, label: \"文档\" },\n ];\n\n this.currentMaterialType = this.materialTypes[0];\n\n const mapping = this.materialTypes.reduce((result, item) => {\n result[item.value] = result.label;\n\n return result;\n }, {} as Record<any, any>);\n\n this.setColumns([\n new TableColumn({ name: \"id\", label: \"编号\", visible: false }),\n new TableColumn({\n name: \"type\",\n label: \"类型\",\n componentInfo: \"MKColumnObjectMappingText\",\n componentProps: {\n mapping,\n },\n }),\n new TableColumn({ name: \"desc\", label: \"描述\" }),\n new TableColumn({ name: \"path\", label: \"路径\" }),\n ]);\n }\n formatItem(item: MsMaterial): MsMaterial {\n return {\n id: item.id,\n materialGroupId: item.materialGroupId || null,\n type: item.type ? item.type : 1,\n desc: item.desc || \"\",\n path: item.path || \"\",\n };\n }\n\n resolveType(type: string): string {\n switch (type) {\n case \"1\":\n return \"MKImageView\";\n case \"2\":\n return \"MKVideoView\";\n case \"3\":\n return \"MKAudioView\";\n default:\n return \"MKDocumentView\";\n }\n }\n\n resolveItemType(item: MsMaterial): string {\n return this.resolveType(item.type.toString());\n }\n\n resolveMaterialComponent(item: MsMaterial): Component | null {\n return this.materialComponents.resolveComponent(this.resolveItemType(item));\n }\n\n setCurrentMaterialGroupId(materialGroupId: MsMaterialGroupNode[\"id\"] | null) {\n this.currentMaterialGroupId = materialGroupId;\n\n this.attachMaterialTableCondition();\n }\n\n setCurrentMaterialType(materialType: MsMaterialType | null) {\n if (materialType?.value === this.currentMaterialType?.value) {\n return;\n }\n\n this.currentMaterialType = materialType;\n\n this.attachMaterialTableCondition();\n }\n\n setAllowMaterialTypeValues(\n allowMaterialTypeValues: MsMaterialType[\"value\"][]\n ) {\n const targetAllowMaterialTypeValues = allowMaterialTypeValues\n .slice()\n .sort();\n\n const originAllowMaterialTypeValues = this.allowMaterialTypeValues\n .slice()\n .sort();\n\n if (isEqual(targetAllowMaterialTypeValues, originAllowMaterialTypeValues)) {\n return;\n }\n\n this.allowMaterialTypeValues = allowMaterialTypeValues;\n\n this.setCurrentMaterialType(this.getMaterialTypes()[0] ?? null);\n }\n\n protected attachMaterialTableCondition() {\n if (!this.currentMaterialGroupId || !this.currentMaterialType) {\n return;\n }\n\n this.useCondition((defaultGroup) => {\n defaultGroup.clear();\n\n defaultGroup.addCondition(\n \"materialGroupId\",\n \"=\",\n this.currentMaterialGroupId\n );\n\n defaultGroup.addCondition(\"type\", \"=\", this.currentMaterialType!.value);\n });\n\n this.load();\n }\n}\n","import {\n DataForm,\n DataFormOptions,\n DataFormType,\n FormColumn,\n} from \"@maketribe/dm\";\nimport { DATA_MODEL_NAME } from \"../../../../constants\";\nimport { MODULE_NAME } from \"../../constants\";\nimport { Role } from \"../../../../core\";\n\nexport type MsRole = Role & { memo: string };\n\nexport class MsRoleForm extends DataForm<MsRole> {\n static [DATA_MODEL_NAME]: string = \"ms-role\";\n\n constructor(options: DataFormOptions = {}) {\n super({\n name: MsRoleForm[DATA_MODEL_NAME],\n moduleName: MODULE_NAME,\n ...options,\n });\n }\n\n protected async initialize() {\n await super.initialize();\n\n this.setColumns([\n new FormColumn({ name: \"id\", label: \"编号\" }),\n new FormColumn({ name: \"name\", label: \"角色名\", required: true }),\n new FormColumn({ name: \"desc\", label: \"角色描述\", required: true }),\n new FormColumn({\n name: \"memo\",\n label: \"备注\",\n defaultValue: \"\",\n componentInfo: \"MKFormInput\",\n componentProps: { type: \"textarea\", rows: 4 },\n }),\n ]);\n\n this.dataFormTypeChangeEvent.on(({ dataFormType }) => {\n this.getColumn(\"name\")!.disabled = dataFormType == DataFormType.UPDATE;\n });\n }\n\n formatItem(item: MsRole): MsRole {\n return {\n id: item.id,\n name: item.name || \"\",\n desc: item.desc || \"\",\n memo: item.memo || \"\",\n };\n }\n}\n","import {\n DataTable,\n DataTableOptions,\n TableColumn,\n FilterColumn,\n TableActionColumn,\n ActionButton,\n EditButton,\n DeleteButton,\n TableHeaderItem,\n RefreshButton,\n AddButton,\n} from \"@maketribe/dm\";\nimport { MsRole } from \"./MsRoleForm\";\nimport { Event } from \"@maketribe/utils\";\nimport { MSAppClient } from \"../../../../core\";\nimport { DATA_MODEL_NAME } from \"../../../../constants\";\nimport { MODULE_NAME } from \"../../constants\";\n\nexport class MsRoleTable<\n F extends MsRole = MsRole,\n T extends MsRole = MsRole\n> extends DataTable<T, F> {\n static [DATA_MODEL_NAME]: string = \"ms-role\";\n\n configRolePermissionEvent: Event<{ item: MsRole }> = this.register(\n new Event()\n );\n\n constructor(options: DataTableOptions = {}) {\n super({\n name: MsRoleTable[DATA_MODEL_NAME],\n moduleName: MODULE_NAME,\n ...options,\n });\n }\n\n protected async initialize() {\n await super.initialize();\n\n this.header.rightArea = [\n new RefreshButton(),\n new AddButton(),\n new TableHeaderItem({\n componentInfo: \"MKBatchOpt\",\n predicate: () =>\n MSAppClient.instance?.userSession?.userInfo?.isSuper ?? false,\n }),\n ];\n\n this.dataFilter.setColumns([\n new FilterColumn({\n name: \"name\",\n label: \"角色名\",\n componentInfo: \"MKConditionInput\",\n }),\n new FilterColumn({\n name: \"desc\",\n label: \"角色描述\",\n componentInfo: \"MKConditionInput\",\n }),\n ]);\n\n this.setColumns([\n new TableColumn({ name: \"id\", label: \"编号\", visible: false }),\n new TableColumn({ name: \"name\", label: \"角色名\" }),\n new TableColumn({ name: \"desc\", label: \"角色描述\" }),\n new TableActionColumn({\n width: \"160px\",\n buttons: [\n new ActionButton({\n label: \"权限\",\n handler: (row: MsRole) => {\n this.configRolePermissionEvent.emit({ item: row });\n },\n }),\n new EditButton(),\n new DeleteButton(),\n ],\n }),\n ]);\n }\n\n formatItem(item: T): F {\n return {\n id: item.id,\n name: item.name || \"\",\n desc: item.desc || \"\",\n } as F;\n }\n}\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 {\n AddButton,\n DataTable,\n DataTableOptions,\n RefreshButton,\n TableActionColumn,\n TableColumn,\n TableHeaderItem,\n} from \"@maketribe/dm\";\nimport type { MsMenuItem, MsMenuResult } from \"./MsMenuForm\";\nimport { MSAppClient } from \"../../../../core\";\nimport { DATA_MODEL_NAME } from \"../../../../constants\";\nimport { MODULE_NAME } from \"../../constants\";\n\nexport class MsMenuTable<T extends MsMenuItem = MsMenuItem> extends DataTable<\n MsMenuResult,\n T\n> {\n static [DATA_MODEL_NAME]: string = \"ms-menu\";\n\n constructor(options: Omit<DataTableOptions, \"name\"> = {}) {\n super({\n name: MsMenuTable[DATA_MODEL_NAME],\n moduleName: MODULE_NAME,\n ...options,\n });\n }\n\n protected async initialize() {\n await super.initialize();\n\n this.header.rightArea = [\n new RefreshButton(),\n new AddButton(),\n new TableHeaderItem({\n componentInfo: \"MKBatchOpt\",\n predicate: () =>\n MSAppClient.instance?.userSession?.userInfo?.isSuper ?? false,\n }),\n ];\n\n this.setColumns([\n new TableColumn({ name: \"id\", label: \"编号\", visible: false }),\n new TableColumn({ name: \"title\", label: \"菜单描述\" }),\n new TableActionColumn(),\n ]);\n }\n\n formatItem(item: MsMenuResult): T {\n return {\n id: item.id,\n title: item.title || \"\",\n iconName: item.iconName || \"\",\n pid: item.pid || \"\",\n routeId: item.routeId,\n } as T;\n }\n}\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\";\nimport { MsMenuTable } from \"../MsMenuTable\";\nimport { DATA_MODEL_NAME } from \"../../../../../constants\";\nimport { MODULE_NAME } from \"../../../constants\";\nimport { PermissionPointDefine } from \"../../../../../core\";\n\nexport type MsPermissionPointDefine = PermissionPointDefine & { memo: string };\n\nexport class MsPermissionPointDefineForm extends DataForm<MsPermissionPointDefine> {\n static [DATA_MODEL_NAME]: string = \"ms-permission-point-def\";\n\n constructor(options: DataFormOptions = {}) {\n super({\n name: MsPermissionPointDefineForm[DATA_MODEL_NAME],\n moduleName: MODULE_NAME,\n ...options,\n });\n }\n\n protected async initialize() {\n await super.initialize();\n\n this.setColumns([\n new FormColumn({ name: \"id\", label: \"编号\" }),\n new FormColumn({\n name: \"menuId\",\n label: \"所属菜单\",\n componentInfo: \"MKFormDataTableSelect\",\n required: true,\n componentProps: {\n labelFieldName: \"title\",\n dataTable: new MsMenuTable({ pageSize: 10 }),\n },\n }),\n new FormColumn({ name: \"key\", label: \"权限键\", required: true }),\n new FormColumn({ name: \"name\", label: \"权限描述\", required: true }),\n new FormColumn({\n name: \"memo\",\n label: \"备注\",\n componentInfo: \"MKFormInput\",\n componentProps: { type: \"textarea\", rows: 4 },\n }),\n ]);\n }\n}\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 {\n DataTableOptions,\n DataTree,\n DataTreeNode,\n TableActionColumn,\n TableColumn,\n} from \"@maketribe/dm\";\nimport type { MsMenuItem } from \"./MsMenuForm\";\nimport { DATA_MODEL_NAME, MenuType } from \"../../../../constants\";\nimport { MODULE_NAME } from \"../../constants\";\nimport { MSAppClient } from \"../../../../core/MSAppClient\";\n\nexport type MsMenuItemNode = MsMenuItem & {\n children: MsMenuItemNode[];\n targetUrl: string;\n};\n\nexport class MsMenuTree extends DataTree<MsMenuItemNode> {\n static [DATA_MODEL_NAME]: string = \"ms-menu\";\n\n constructor(options: Omit<DataTableOptions, \"name\"> = {}) {\n super({\n name: MsMenuTree[DATA_MODEL_NAME],\n moduleName: MODULE_NAME,\n sortFieldName: \"sort\",\n ...options,\n });\n }\n\n protected async initialize() {\n await super.initialize();\n\n this.setColumns([\n new TableColumn({ name: \"data.title\", label: \"菜单描述\", align: \"left\" }),\n new TableColumn({\n name: \"data.type\",\n width: \"100px\",\n label: \"菜单类型\",\n componentInfo: \"MKColumnObjectMappingText\",\n componentProps: {\n mapping: {\n [MenuType.Container]: \"菜单组\",\n [MenuType.Menu]: \"菜单\",\n [MenuType.SystemSettings]: \"系统设置\",\n },\n },\n }),\n new TableActionColumn(),\n ]);\n }\n\n formatItem(item: MsMenuItemNode): MsMenuItemNode {\n item.type += \"\";\n item.children = item.children || [];\n\n item.targetUrl = \"\";\n\n if (!item.targetUrl) {\n const route = item.routes.find((route) => route.id === item.routeId);\n item.targetUrl = route?.route || \"\";\n\n if (!item.targetUrl && route) {\n const pageRoute = MSAppClient.instance!.pageManager.extendsPages.find(\n (item) => item.name === route.name\n );\n\n item.targetUrl = pageRoute?.path ?? \"\";\n }\n\n if (!item.targetUrl && route) {\n const match = route.name.match(/^dv\\/([^/]+)\\/(edit|.+)$/i);\n\n if (match) {\n item.targetUrl =\n match[2] === \"edit\" ? `/dv/${match[1]}/edit` : `/dv/${match[1]}`;\n }\n }\n }\n\n return item;\n }\n\n public nodeHasChildren(node: DataTreeNode<MsMenuItemNode>): boolean {\n return ([MenuType.Container, MenuType.SystemSettings] as string[]).includes(\n node.data?.type as string\n );\n }\n\n async load(params?: Record<string, any>) {\n return super.loadAll(params);\n }\n}\n","import {\n DataForm,\n DataFormOptions,\n DataFormType,\n FormColumn,\n FormDetailColumn,\n} from \"@maketribe/dm\";\nimport { MsMenuTable } from \"./MsMenuTable\";\nimport { MsRouteTable, MsRouteForm, MsRouteResult } from \"./ms-route\";\nimport {\n MsPermissionPointDefine,\n MsPermissionPointDefineForm,\n MsPermissionPointDefineTable,\n} from \"./ms-permission-point\";\nimport { DATA_MODEL_NAME, MenuType } from \"../../../../constants\";\nimport { MODULE_NAME } from \"../../constants\";\nimport { MenuData } from \"../../../../core\";\nimport { MsMenuTree } from \"./MsMenuTree\";\n\nexport type MsMenuResult = MenuData & { memo?: string };\n\nexport type MsMenuItem = {\n id: string;\n title: string;\n iconName: string;\n pid: string;\n routeId: string;\n sort: string;\n type: string;\n routes: MsRouteResult[];\n permissionPoints: MsPermissionPointDefine[];\n memo: string;\n};\n\nexport class MsMenuForm extends DataForm<MsMenuResult, MsMenuItem> {\n static [DATA_MODEL_NAME]: string = \"ms-menu\";\n\n constructor(options: DataFormOptions = {}) {\n super({\n name: MsMenuForm[DATA_MODEL_NAME],\n moduleName: MODULE_NAME,\n ...options,\n });\n }\n\n protected async initialize() {\n await super.initialize();\n\n const menuTable = this.register(new MsMenuTable({ pageSize: 10 }));\n\n menuTable.useCondition((group) => {\n group.addCondition(\n \"type\",\n \"in\",\n `${[MenuType.Container, MenuType.SystemSettings]\n .map((menuType) => parseInt(menuType))\n .join(\",\")}`\n );\n });\n\n const routeTable = this.register(new MsRouteTable({ pageSize: 10 }));\n\n this.setColumns([\n new FormColumn({ name: \"id\", label: \"编号\" }),\n new FormColumn({ name: \"title\", label: \"菜单描述\", required: true }),\n new FormColumn({\n name: \"iconName\",\n label: \"图标\",\n componentInfo: \"MKFormIconSelect\",\n required: true,\n }),\n new FormColumn({\n name: \"type\",\n label: \"菜单类型\",\n componentInfo: \"MKFormDataSelect\",\n defaultValue: MenuType.Menu,\n required: true,\n componentProps: {\n options: [\n { value: MenuType.Container, label: \"菜单组\" },\n { value: MenuType.Menu, label: \"菜单\" },\n { value: MenuType.SystemSettings, label: \"系统设置\" },\n ],\n },\n }),\n // new FormColumn({\n // name: \"routeId\",\n // label: \"默认路由\",\n // componentInfo: \"MKFormDataTableSelect\",\n // componentProps: {\n // labelFieldName: \"title\",\n // dataTable: routeTable,\n // },\n // }),\n new FormColumn({\n name: \"pid\",\n label: \"父菜单\",\n componentInfo: \"MKDataTreeSelect\",\n // componentInfo: \"MKFormDataTableSelect\",\n componentProps: {\n labelFieldName: \"title\",\n dataTree: new MsMenuTree(),\n clearable: true,\n // dataTable: menuTable,\n },\n }),\n new FormColumn({ name: \"sort\", label: \"排序\", defaultValue: \"0\" }),\n new FormDetailColumn({\n name: \"routes\",\n label: \"该菜单所属路由定义\",\n associationFieldName: \"menuId\",\n detailForm: this.register(new MsRouteForm()),\n detailTable: this.register(new MsRouteTable()),\n }),\n new FormDetailColumn({\n name: \"permissionPoints\",\n label: \"该菜单所属权限定义\",\n associationFieldName: \"menuId\",\n detailForm: this.register(new MsPermissionPointDefineForm()),\n detailTable: this.register(new MsPermissionPointDefineTable()),\n }),\n new FormColumn({\n name: \"memo\",\n label: \"备注\",\n componentInfo: \"MKFormInput\",\n componentProps: { type: \"textarea\", rows: 4 },\n }),\n ]);\n\n this.dataFormTypeChangeEvent.on(({ dataFormType }) => {\n if (dataFormType === DataFormType.UPDATE) {\n routeTable.useCondition((group) => {\n group.clear();\n group.addCondition(\"menuId\", \"=\", this.data!.id);\n });\n }\n });\n\n const handleMenuTypeChange = () => {\n const visible = this.data?.type === MenuType.Menu;\n\n // this.getColumn(\"routeId\")!.visible = visible;\n this.getColumn(\"routes\")!.visible = visible;\n this.getColumn(\"permissionPoints\")!.visible = visible;\n };\n\n this.formItemValueChangeEvent.on(({ formItem }) => {\n if (formItem.name === \"type\") {\n handleMenuTypeChange();\n }\n });\n\n this.dataFormTypeChangeEvent.on(({ dataFormType }) => {\n this.getColumn(\"type\")!.disabled = dataFormType !== DataFormType.ADD;\n });\n }\n\n formatSubmitData(data: any) {\n const permissionPoints =\n data.type === MenuType.Menu ? data.permissionPoints : [];\n const routes = data.type === MenuType.Menu ? data.routes : [];\n\n const parsedType = parseInt(data.type);\n\n return {\n ...data,\n type: isNaN(parsedType) ? parseInt(MenuType.Menu) : parsedType,\n iconName: data.iconName || null,\n pid: data.pid || null,\n routeId: data.routeId || null,\n permissionPoints,\n routes,\n };\n }\n\n formatItem(item: MsMenuResult): MsMenuItem {\n return {\n id: item.id,\n title: item.title || \"\",\n iconName: item.iconName || \"\",\n pid: item.pid || \"\",\n routeId: item.routeId,\n type: item.type ? `${item.type}` : \"1\",\n sort: item.sort || \"0\",\n routes: (item.routes || []) as unknown as MsMenuItem[\"routes\"],\n permissionPoints: (item.permissionPoints ||\n []) as unknown as MsMenuItem[\"permissionPoints\"],\n memo: item.memo || \"\",\n };\n }\n}\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 {\n DataForm,\n DataFormOptions,\n DataFormType,\n FormColumn,\n} from \"@maketribe/dm\";\nimport { MsRoleTable } from \"../ms-role\";\nimport { DATA_MODEL_NAME, EMAIL_PATTERN } from \"../../../../constants\";\nimport { WebFileUploadContext } from \"../../../../components/basic/upload-file/context/WebFileUploadContext\";\nimport { MODULE_NAME } from \"../../constants\";\n\nexport type MsMemberResult = {\n id: string;\n name: string;\n wechatNo: string;\n nickName: string;\n email: string;\n normalizedEmail: string;\n emailConfirmed: boolean;\n phoneNumber: string;\n phoneNumberConfirmed: string;\n userName: string;\n normalizedUserName: string;\n avatar: string;\n roles: any[];\n passwordHash: string;\n // depts: any[];\n valid: number;\n lockoutEnabled?: number;\n accessFailedCount?: number;\n lockoutEnd?: string;\n memo?: string;\n twoFactorEnabled: boolean;\n concurrencyStamp: string;\n securityStamp: string;\n isLock: number;\n};\n\nexport type MsMember = {\n id: string;\n name: string;\n wechatNo: string;\n nickName: string;\n email: string;\n normalizedEmail: string;\n emailConfirmed: boolean;\n phoneNumber: string;\n phoneNumberConfirmed: string;\n userName: string;\n normalizedUserName: string;\n avatar: string;\n roles: any[];\n passwordHash: string;\n // depts: any[];\n valid: number;\n lockoutEnabled?: number;\n accessFailedCount?: number;\n lockoutEnd?: string;\n memo?: string;\n twoFactorEnabled: boolean;\n concurrencyStamp: string;\n securityStamp: string;\n isLock: number;\n};\n\nexport class MsMemberForm<\n T extends MsMemberResult = MsMemberResult,\n F extends MsMember = MsMember\n> extends DataForm<T, F> {\n static [DATA_MODEL_NAME]: string = \"ms-member\";\n\n constructor(options: DataFormOptions = {}) {\n super({\n name: MsMemberForm[DATA_MODEL_NAME],\n moduleName: MODULE_NAME,\n ...options,\n });\n }\n\n protected async initialize() {\n await super.initialize();\n\n this.setColumns([\n new FormColumn({ name: \"id\", label: \"编号\" }),\n new FormColumn({ name: \"name\", label: \"姓名\", required: true }),\n new FormColumn({ name: \"wechatNo\", label: \"微信号\", defaultValue: null }),\n new FormColumn({ name: \"nickName\", label: \"昵称\", required: true }),\n new FormColumn({\n name: \"email\",\n label: \"邮箱\",\n required: true,\n rules: [{ message: \"邮箱格式有误\", pattern: EMAIL_PATTERN }],\n }),\n new FormColumn({ name: \"phone\", label: \"手机号\", defaultValue: null }),\n new FormColumn({\n name: \"account\",\n label: \"账号\",\n required: true,\n disabled: true,\n }),\n new FormColumn({\n name: \"avatar\",\n label: \"头像\",\n defaultValue: null,\n componentInfo: \"MKFormImageUpload\",\n componentProps: { uploadContext: new WebFileUploadContext() },\n }),\n new FormColumn({\n name: \"roles\",\n label: \"角色\",\n defaultValue: null,\n required: true,\n // componentInfo: \"MKFormDataTableSelect\",\n componentInfo: \"MKFormDataSelect\",\n componentProps: {\n multiple: true,\n objectValue: true,\n labelFieldName: \"desc\",\n // filterable: true,\n filterFieldNames: [\"desc\", \"name\"],\n dataTable: new MsRoleTable(),\n },\n }),\n new FormColumn({\n name: \"memo\",\n label: \"备注\",\n componentInfo: \"MKFormInput\",\n componentProps: { type: \"textarea\", rows: 4 },\n }),\n ]);\n\n this.dataFormTypeChangeEvent.on(({ dataFormType }) => {\n const accountColumn = this.getColumn(\"account\");\n\n if (accountColumn) {\n accountColumn.disabled = dataFormType !== DataFormType.ADD;\n }\n });\n }\n\n // formatItem(item: T): F {\n // debugger;\n // return item;\n // return {\n // id: item.id,\n // name: item.name || \"\",\n // wechatNo: item.wechatNo || \"\",\n // nickName: item.nickName || \"\",\n // email: item.email || \"\",\n // phoneNumber: item.phoneNumber || \"\",\n // userName: item.userName || \"\",\n // avatar: item.avatar,\n // roles: item.roles,\n // // depts: item.depts?.map((department) => department.deptId),\n // valid: item.valid,\n // memo: item.memo || \"\",\n // } as F;\n // }\n}\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\";\nimport { DataForm, FormColumn } from \"@maketribe/dm\";\n\nexport interface DataFormContext {\n dataForm: DataForm;\n el: HTMLElement | null;\n}\n\nexport const DATA_FORM_CONTEXT_KEY: InjectionKey<DataFormContext> =\n Symbol(\"dataFormContextKey\");\n\nexport interface DataFormItemContext {\n column: FormColumn;\n}\n\nexport const DATA_FORM_ITEM_CONTEXT_KEY: InjectionKey<DataFormItemContext> =\n Symbol(\"dataFormItemContextKey\");\n","import { ExtractPropTypes } from \"vue\";\n\nimport { buildProps } from \"@maketribe/utils\";\nimport { DataForm } from \"@maketribe/dm\";\n\nexport const formProps = buildProps({\n rules: { type: Object },\n labelWidth: { type: String },\n dataForm: { type: DataForm<any> },\n} as const);\n\nexport type FormProps = ExtractPropTypes<typeof formProps>;\n\nexport const formEmits = {};\n\nexport const FormEmits = typeof formEmits;\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\";\nimport {\n Column,\n Component,\n ComponentsCombine,\n DataForm,\n DataTable,\n FilterColumn,\n DataFilter,\n FormColumn,\n IComponents,\n TableColumn,\n isWhereFilter,\n} from \"@maketribe/dm\";\nimport { useGlobalConfig } from \"../components/basic/config-provider\";\n\nexport const useComponent = (\n componentName: MaybeRef<string>,\n components: MaybeRef<IComponents>\n): {\n componentInfo: ComputedRef<Component | null>;\n component: ComputedRef<any>;\n componentProps: ComputedRef<Record<string, any> | null>;\n} => {\n const componentInfo = computed(() =>\n unref(components).resolveComponent(unref(componentName))\n );\n\n const component = computed(() => unref(componentInfo)?.component ?? null);\n\n const componentProps = computed(() => {\n const componentProps = unref(componentInfo)?.defaultProps ?? null;\n\n return componentProps ? { ...componentProps } : null;\n });\n\n return { componentInfo, component, componentProps };\n};\n\nexport const useComponentWithDefault = (\n componentInfo: ReturnType<typeof useComponent>,\n defaultComponentInfo: ReturnType<typeof useComponent>\n) => {\n const _componentInfo = computed(() =>\n unref(componentInfo.componentInfo)\n ? unref(componentInfo.componentInfo)\n : unref(defaultComponentInfo.componentInfo)\n );\n\n const _componentProps = computed(() =>\n unref(componentInfo.componentInfo)\n ? unref(componentInfo.componentProps)\n : unref(defaultComponentInfo.componentProps)\n );\n\n const _component = computed(() =>\n unref(componentInfo.componentInfo)\n ? unref(componentInfo.component)\n : unref(defaultComponentInfo.component)\n );\n\n return {\n componentInfo: _componentInfo,\n componentProps: _componentProps,\n component: _component,\n };\n};\n\nexport type RenderInfo = {\n componentInfo: string | Component;\n componentProps: Record<string, any>;\n};\n\nexport const useRenderInfoComponent = (\n column: Ref<RenderInfo | null> | RenderInfo,\n components: Ref<IComponents> | IComponents\n) => {\n const columnComponentInfo = computed(\n () => unref(column)?.componentInfo || \"\"\n );\n\n const componentInfo: Ref<Component | null> = ref(null);\n watch(\n columnComponentInfo,\n (columnComponentInfo) => {\n if (typeof columnComponentInfo === \"string\") {\n const { componentInfo: _componentInfo } = useComponent(\n columnComponentInfo,\n components\n );\n\n componentInfo.value = unref(_componentInfo);\n return;\n }\n\n componentInfo.value = columnComponentInfo;\n },\n { immediate: true }\n );\n\n const component = computed(() => unref(componentInfo)?.component ?? null);\n const componentProps = computed(() => {\n const _componentInfo = unref(componentInfo);\n\n if (!_componentInfo) {\n return null;\n }\n\n return {\n ..._componentInfo.defaultProps,\n ...unref(column)?.componentProps,\n };\n });\n\n return {\n componentInfo: computed(() => unref(componentInfo)),\n component,\n componentProps,\n };\n};\n\nexport const useTableColumnComponent = (\n column: Ref<TableColumn | null> | TableColumn,\n dataTable: Ref<DataTable | null> | DataTable\n) => {\n const defaultDataTableComponents = useGlobalConfig(\"dataTableComponents\");\n\n const componentCombine = computed(() => {\n const _defaultDataTableComponents = unref(defaultDataTableComponents);\n\n const componentsList = ([unref(dataTable)] as IComponents[]).concat(\n _defaultDataTableComponents ? [_defaultDataTableComponents] : []\n );\n\n return new ComponentsCombine({ componentsList });\n });\n\n return useComponentWithDefault(\n useRenderInfoComponent(column, componentCombine),\n useComponent(\"MKColumnText\", componentCombine)\n );\n};\n\nexport const useFormColumnComponent = (\n column: Ref<FormColumn | null> | FormColumn,\n dataForm: Ref<DataForm | null> | DataForm\n) => {\n const defaultDataFormComponents = useGlobalConfig(\"dataFormComponents\");\n\n const componentCombine = computed(() => {\n const _defaultDataFormComponents = unref(defaultDataFormComponents);\n\n const componentsList = ([unref(dataForm)] as IComponents[]).concat(\n _defaultDataFormComponents ? [_defaultDataFormComponents] : []\n );\n\n return new ComponentsCombine({ componentsList });\n });\n\n return useComponentWithDefault(\n useRenderInfoComponent(column, componentCombine),\n useComponent(\"MKFormInput\", componentCombine)\n );\n};\n\nexport const useFilterColumnComponent = (\n column: Ref<FilterColumn | null> | FilterColumn,\n dataFilter: Ref<DataFilter | null> | DataFilter\n) => {\n const defaultDataFilterComponents = useGlobalConfig(\"dataFilterComponents\");\n const defaultWhereFilterComponents = useGlobalConfig(\"whereFilterComponents\");\n\n const componentCombine = computed(() => {\n const systemComponents = isWhereFilter(unref(dataFilter))\n ? unref(defaultWhereFilterComponents)\n : unref(defaultDataFilterComponents);\n\n const componentsList = ([unref(dataFilter)] as IComponents[]).concat(\n systemComponents ? [systemComponents] : []\n );\n\n return new ComponentsCombine({ componentsList });\n });\n\n return useComponentWithDefault(\n useRenderInfoComponent(column, componentCombine),\n useComponent(\"MKConditionInput\", componentCombine)\n );\n};\n","import { unref } from \"vue\";\nimport { I18n } from \"@maketribe/locale\";\nimport { useGlobalConfig } from \"../components/basic/config-provider\";\n\nexport const useI18n = (): I18n | null => {\n return unref(useGlobalConfig(\"i18n\")) ?? null;\n};\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\";\nimport { isRef, onBeforeUnmount, Ref, ref, unref, watch } from \"vue\";\n\nexport type UseSingleViewOptions = {\n dataTable: Ref<DataTable | null> | DataTable;\n dataForm: Ref<DataForm | null> | DataForm;\n};\n\nexport const useSingleView = (options: UseSingleViewOptions) => {\n const isShowDataForm = ref(false);\n\n const handleDataTable = (dataTable: DataTable | null) => {\n if (dataTable) {\n dataTable.addRecordEvent.on(async ({ item }) => {\n const _dataForm = unref(options.dataForm);\n\n if (!_dataForm) {\n console.warn(`没有对应的 (${dataTable.name}) DataForm 实现`);\n return;\n }\n\n isShowDataForm.value = true;\n\n _dataForm.addRecord(item);\n });\n\n dataTable.editRecordEvent.on(async ({ item }) => {\n const _dataForm = unref(options.dataForm);\n\n if (!_dataForm) {\n console.warn(`没有对应的 (${dataTable.name}) DataForm 实现`);\n return;\n }\n\n isShowDataForm.value = true;\n\n try {\n const response = await _dataForm.editRecord(item);\n\n if (response.data.code !== 200) {\n Messager.error({ message: response.data.msg });\n isShowDataForm.value = false;\n return;\n }\n } catch (e) {\n console.error(e);\n isShowDataForm.value = false;\n }\n });\n }\n };\n\n const handleDataForm = (dataForm: DataForm | null) => {\n if (dataForm) {\n dataForm.submittedEvent.on(() => {\n isShowDataForm.value = false;\n\n unref(options.dataTable)?.load();\n });\n\n dataForm.cancelEvent.on(() => {\n isShowDataForm.value = false;\n });\n }\n };\n\n if (isRef(options.dataTable)) {\n watch(\n options.dataTable,\n (dataTable, _, onCleanup) => {\n isShowDataForm.value = false;\n\n handleDataTable(dataTable);\n\n onCleanup(() => {\n dataTable?.clearSelection();\n dataTable?.dispose();\n });\n },\n { immediate: true }\n );\n } else {\n const dataTable = options.dataTable;\n handleDataTable(dataTable);\n\n onBeforeUnmount(() => {\n dataTable.clearSelection();\n dataTable.dispose();\n });\n }\n\n if (isRef(options.dataForm)) {\n watch(\n options.dataForm,\n (dataForm, _, onCleanup) => {\n isShowDataForm.value = false;\n\n handleDataForm(dataForm);\n\n onCleanup(() => {\n dataForm?.dispose();\n });\n },\n { immediate: true }\n );\n } else {\n const dataForm = options.dataForm;\n handleDataForm(dataForm);\n\n onBeforeUnmount(() => {\n dataForm.dispose();\n });\n }\n\n return { isShowDataForm };\n};\n\nexport const useSingleViewWithDialog = (options: UseSingleViewOptions) => {\n const { isShowDataForm } = useSingleView(options);\n\n watch(isShowDataForm, async (isShowDataForm) => {\n if (isShowDataForm) {\n await Dialoger.dataFormDialog({\n dataForm: unref(options.dataForm)!,\n customDataFormStatus: true,\n });\n }\n });\n};\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\";\nimport {\n Ref,\n computed,\n defineComponent,\n inject,\n provide,\n reactive,\n ref,\n toRaw,\n unref,\n useSlots,\n watch,\n} from \"vue\";\nimport { FormColumn } from \"@maketribe/dm\";\n\nimport { useFormColumnComponent } from \"../../../../composables\";\nimport {\n DATA_FORM_CONTEXT_KEY,\n DATA_FORM_ITEM_CONTEXT_KEY,\n DataFormItemContext,\n} from \"../token\";\nimport { dataFormItemProps } from \"./data-form-item-options\";\n\nexport default defineComponent({\n name: \"MKDataFormItem\",\n props: dataFormItemProps,\n setup(props) {\n const slots = useSlots();\n\n const dataFormContext = inject(DATA_FORM_CONTEXT_KEY);\n\n const dataForm = computed(() => dataFormContext?.dataForm ?? null);\n\n let _formColumn: FormColumn | null = null;\n\n const existFormColumn = ref(\n unref(dataForm)!.getColumn(props.name!)\n ) as Ref<FormColumn | null>;\n\n const formColumn = computed(() => {\n const existingColumn = unref(existFormColumn);\n\n if (existingColumn) {\n return existingColumn;\n }\n\n if (!_formColumn) {\n _formColumn = reactive(\n new FormColumn({\n required: props.required,\n name: props.name!,\n label: props.label!,\n })\n ) as FormColumn;\n }\n\n return _formColumn!;\n });\n\n watch(\n formColumn,\n (formColumn, _, onCleanup) => {\n const existFormColumn = unref(dataForm)!.getColumn(formColumn.name);\n\n if (!existFormColumn && _formColumn) {\n unref(dataForm)!.addColumn(_formColumn);\n }\n\n onCleanup(() => {\n if (_formColumn) {\n unref(dataForm)!.removeColumn(_formColumn);\n }\n });\n },\n { immediate: true }\n );\n\n const { component, componentProps } = useFormColumnComponent(\n formColumn,\n dataForm\n );\n\n const disabled = useFormDisabled(\n computed(() => unref(formColumn).disabled)\n );\n\n const value = computed({\n get: () => unref(formColumn)?.getValue(),\n set: (v) => {\n unref(formColumn).setValue(v);\n },\n });\n\n const label = computed(() =>\n typeof props.label !== \"string\" ? unref(formColumn).label : props.label\n );\n\n provide(\n DATA_FORM_ITEM_CONTEXT_KEY,\n reactive({ column: formColumn }) as DataFormItemContext\n );\n\n return () => {\n let _formColumn = unref(formColumn);\n\n let _component = unref(component);\n\n let children: any =\n slots.default?.({\n data: unref(dataForm)!.data,\n column: _formColumn,\n dataForm: unref(dataForm),\n }) || null;\n\n if (!children && _component) {\n const FormColumnComponent = toRaw(_component);\n\n children = (\n <FormColumnComponent\n {...unref(componentProps)}\n column={_formColumn}\n modelValue={value.value}\n disabled={unref(disabled)}\n onUpdate:modelValue={(v: any) => (value.value = v)}\n />\n );\n }\n\n return (\n <ElFormItem\n prop={_formColumn.name}\n label={unref(label)}\n required={_formColumn.required}\n labelWidth={props.labelWidth}\n >\n {children}\n </ElFormItem>\n );\n };\n },\n});\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 {\n Fragment,\n computed,\n defineComponent,\n inject,\n nextTick,\n onMounted,\n ref,\n unref,\n watch,\n} from \"vue\";\nimport {\n ElDivider,\n ElForm,\n FormItemRule,\n FormRules,\n FormContext,\n} from \"element-plus\";\nimport { formProps } from \"./form-options\";\nimport { DataFormType, FormColumn } from \"@maketribe/dm\";\nimport MKDataFormItem from \"../../data-form-item\";\nimport { DATA_FORM_CONTEXT_KEY } from \"../../token\";\n\nlet uid = 0;\n\nexport default defineComponent({\n name: \"MKForm\",\n props: formProps,\n setup(props, { slots }) {\n const formUID = uid++;\n\n const dataFormContext = inject(DATA_FORM_CONTEXT_KEY);\n\n const formEl = ref<FormContext | null>(null);\n\n const dataForm = computed(\n () => props.dataForm ?? dataFormContext!.dataForm\n );\n\n const data = computed(() => unref(dataForm).data as any);\n\n const columns = computed(() =>\n unref(dataForm)\n .getColumns()\n .filter((column) => column.visible)\n );\n\n const rules = computed(() => {\n const rules: FormRules = {};\n\n for (const column of unref(columns)) {\n if (column.required && !column.rules.find((rule) => rule.required)) {\n rules[column.name] = [\n {\n required: column.required,\n message: `请录入${column.label}.`,\n },\n ];\n }\n let componentRules: FormItemRule[] = props.rules?.[column.name] || [];\n\n if (!Array.isArray(componentRules)) {\n componentRules = [componentRules];\n }\n\n if (column.rules.length) {\n rules[column.name] = [\n ...((rules[column.name] as FormItemRule[]) || []),\n ...column.rules,\n ...componentRules,\n ];\n }\n }\n\n return rules;\n });\n\n const labelWidth = computed(() => {\n return (\n props.labelWidth ||\n Math.max.apply(\n null,\n columns.value\n .filter((column) => column.visible)\n .filter((column) => column.componentInfo !== \"MKFormDetail\")\n .map((item: FormColumn) => {\n // + 8 像素只是预留 必填 * 号的宽度位置 12 像素是label的padding\n return item.label.length * 16 + 8 + 12;\n })\n )\n );\n });\n\n const disabled = computed(() => unref(dataForm).disabled);\n\n onMounted(() => {\n watch(\n dataForm,\n (dataForm, _, onCleanup) => {\n unref(dataForm).formModels.push({\n id: formUID,\n validate: async () => {\n return unref(formEl)?.validateField() ?? false;\n },\n reset: () => {\n unref(formEl)?.resetFields();\n },\n clearValidate: () => {\n unref(formEl)?.clearValidate();\n },\n });\n\n const disposable = dataForm.dataFormTypeChangeEvent.on(\n async ({ dataFormType }) => {\n if (dataFormType !== DataFormType.NONE) {\n // 测试下来 需要两次nextTick才能清除验证\n await nextTick();\n await nextTick();\n\n dataForm.clearValidate();\n }\n }\n );\n\n onCleanup(() => {\n const index = dataForm.formModels.findIndex(\n (formModel) => formModel.id === formUID\n );\n\n if (index === -1) {\n return;\n }\n\n dataForm.formModels.splice(index, 1);\n\n disposable.dispose();\n });\n },\n { immediate: true }\n );\n });\n\n return () => {\n if (!unref(dataForm).initd) {\n return null;\n }\n\n let children: any = slots.default?.();\n\n const detailColumns = unref(columns).filter(\n (column) => column.componentInfo === \"MKFormDetail\"\n );\n\n if (!children) {\n children = unref(columns)\n .filter(\n (column) => !detailColumns.find((item) => item.name === column.name)\n )\n .map((column) => {\n if (!column.name) {\n return null;\n }\n\n return (\n slots[`col-${column.name}`]?.() || (\n <MKDataFormItem\n key={column.name}\n name={column.name}\n v-slots={{ default: slots[`col-${column.name}-content`] }}\n />\n )\n );\n });\n\n children.push(\n detailColumns.map((column) => {\n if (!column.name) {\n return null;\n }\n\n return (\n <Fragment>\n <ElDivider contentPosition=\"left\">{column.label}</ElDivider>\n <MKDataFormItem\n label=\"\"\n labelWidth=\"0px\"\n key={column.name}\n name={column.name}\n />\n </Fragment>\n );\n })\n );\n }\n\n if (!unref(data)) {\n return null;\n }\n\n return (\n <ElForm\n validateOnRuleChange={false}\n {...props}\n ref={formEl}\n model={unref(data)}\n rules={unref(rules)}\n disabled={unref(disabled)}\n labelWidth={unref(labelWidth)}\n >\n {children}\n </ElForm>\n );\n };\n },\n});\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\";\nimport { ElButton, ElCard, ElScrollbar } from \"element-plus\";\nimport { formViewProps } from \"./form-view-options\";\nimport { I18n } from \"@maketribe/locale\";\nimport MKForm from \"../form\";\nimport { DATA_FORM_CONTEXT_KEY } from \"../../token\";\n\nexport default defineComponent({\n name: \"MKFormView\",\n props: formViewProps,\n setup(props, { slots }) {\n const dataFormContext = inject(DATA_FORM_CONTEXT_KEY);\n\n const dataForm = computed(\n () => props.dataForm ?? dataFormContext!.dataForm\n );\n\n const isChange = computed(() => unref(dataForm).isChanged);\n\n const handleSave = async () => {\n await unref(dataForm)?.simpleSubmit();\n };\n\n const handleCancel = () => {\n unref(dataForm).cancel();\n };\n\n return () => {\n return (\n <ElCard class=\"mk-form-view\" shadow=\"never\">\n <div class=\"mk-form-view__main\">\n <ElScrollbar>\n <MKForm\n rules={props.rules}\n labelWidth={props.labelWidth}\n dataForm={props.dataForm}\n v-slots={slots}\n />\n </ElScrollbar>\n </div>\n <div class=\"mk-form-view__footer\">\n {slots[\"footer-button\"]?.()}\n <ElButton\n type=\"primary\"\n onClick={handleSave}\n disabled={!unref(isChange)}\n loading={!unref(unref(dataForm).allowSubmit)}\n >\n {I18n.instance.translate(\"mk.dataForm.saveButton\")}\n </ElButton>\n <ElButton onClick={handleCancel}>\n {I18n.instance.translate(\"mk.dataForm.cancelButton\")}\n </ElButton>\n </div>\n </ElCard>\n );\n };\n },\n});\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\";\nimport { ColumnOptions, DataTable } from \"@maketribe/dm\";\nimport { buildProps } from \"@maketribe/utils\";\n\nexport const dataTableProps = buildProps({\n dataTable: { type: DataTable<any>, required: true },\n selection: { type: Boolean, default: false },\n name: { type: String },\n primaryKey: { type: String },\n pageSize: { type: Number },\n interfaceURL: { type: Object },\n listInterfaceURL: { type: String },\n deleteInterfaceURL: { type: String },\n autoLoad: { type: Boolean, default: true },\n columns: { type: Array<ColumnOptions>, default: () => [] },\n enableQueryParams: { type: Boolean, default: false },\n} as const);\n\nexport type DataTableProps = ExtractPropTypes<typeof dataTableProps>;\n\nexport const dataTableEmits = {\n changeDataTable: (dataTable: any) => dataTable instanceof DataTable,\n};\n\nexport const DataTableEmits = typeof dataTableEmits;\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\";\nimport { aesDecrypt, aesEncrypt, Disposable, Event } from \"@maketribe/utils\";\nimport { Ref, unref, watch } from \"vue\";\nimport { useRouter } from \"vue-router\";\nimport { MSAppClient } from \"../../../../core\";\nimport { debounce, isEmpty } from \"lodash-es\";\n\nexport const useQueryParams = (dataTable: Ref<DataTable>) => {\n const router = useRouter();\n\n watch(\n dataTable,\n (dataTable, _, onCleanup) => {\n const disposable = new Disposable();\n\n disposable.register(\n dataTable.afterInitdEvent.on(() => {\n if (!dataTable.isEnableQueryParams) {\n return;\n }\n\n const event = disposable.register(\n Event.combine([\n dataTable.paginationChangeEvent,\n dataTable.dataFilter.beforeSearchEvent,\n ])\n );\n\n event.on(\n debounce(([paginationEvent]) => {\n const pagination = paginationEvent?.pagination ?? null;\n const params = dataTable.dataFilter.getParams()\n\n const query: Record<string, any> = {};\n\n if (pagination) {\n Object.assign(query, {\n currentPage: pagination.currentPage,\n pageSize: pagination.pageSize,\n });\n }\n\n const hasParams =\n Reflect.ownKeys(params).filter(\n (key) => params[key as string] != null\n ).length > 0;\n\n if (hasParams) {\n query.params = aesEncrypt(params, MSAppClient.instance!.appID);\n }\n\n router.replace({ query: !isEmpty(query) ? query : {} });\n })\n );\n\n const query = unref(router.currentRoute).query;\n\n try {\n const paramsString = query.params as string;\n\n if (paramsString) {\n const params = aesDecrypt(\n paramsString,\n MSAppClient.instance!.appID\n );\n\n dataTable.dataFilter.setParams(params);\n }\n } catch (e) {}\n\n const currentPage = Number.parseInt(query.currentPage as string);\n const pageSize = Number.parseInt(query.pageSize as string);\n\n if (!Number.isNaN(currentPage) && !Number.isNaN(pageSize)) {\n dataTable.setPagination({ currentPage, pageSize });\n }\n })\n );\n\n onCleanup(() => {\n disposable.dispose();\n });\n },\n { immediate: true }\n );\n};\n","import { InjectionKey } from \"vue\";\nimport { DataTable } from \"@maketribe/dm\";\n\nexport interface DataTableContext {\n dataTable: DataTable;\n el: HTMLElement | null\n}\n\nexport const DATA_TABLE_CONTEXT_KEY: InjectionKey<DataTableContext> = Symbol(\n \"dataTableContextKey\"\n);\n","import { ExtractPropTypes } from \"vue\";\nimport { buildProps } from \"@maketribe/utils\";\nimport { DataTable } from \"@maketribe/dm\";\n\nexport const dataTablePaginationProps = buildProps({\n dataTable: {\n type: DataTable<any>,\n },\n} as const);\n\nexport type DataTablePaginationProps = ExtractPropTypes<\n typeof dataTablePaginationProps\n>;\n","import { computed, defineComponent, inject, unref } from \"vue\";\nimport { dataTablePaginationProps } from \"./data-table-pagination-options\";\nimport MKPagination from \"../../basic/pagination\";\nimport { DATA_TABLE_CONTEXT_KEY } from \"../data-table/token\";\n\nexport default defineComponent({\n name: \"MKDataTablePagination\",\n props: dataTablePaginationProps,\n setup(props) {\n const dataTableContext = inject(DATA_TABLE_CONTEXT_KEY);\n\n const dataTable = computed(\n () => props.dataTable ?? dataTableContext!.dataTable\n );\n\n return () => {\n return (\n <MKPagination\n currentPage={unref(dataTable).currentPage}\n pageSize={unref(dataTable).pageSize}\n pageSizes={unref(dataTable).pageSizes}\n total={unref(dataTable).totalRecCount}\n onUpdate:currentPage={(v) => unref(dataTable).pageTo(v)}\n onUpdate:pageSize={(v) => {\n unref(dataTable).setPageSize(v);\n unref(dataTable).load();\n }}\n />\n );\n };\n },\n});\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\";\nimport { buildProps } from \"@maketribe/utils\";\nimport { TableColumn } from \"@maketribe/dm\";\n\nexport const dataTableColumnProps = buildProps({\n column: { type: TableColumn, required: true },\n row: { type: null },\n index: { type: Number, required: true },\n} as const);\n\nexport type DataTableColumnProps = ExtractPropTypes<\n typeof dataTableColumnProps\n>;\n","import { computed, defineComponent, inject, toRaw, unref } from \"vue\";\nimport { useTableColumnComponent } from \"../../../../composables\";\nimport { DATA_TABLE_CONTEXT_KEY } from \"../token\";\nimport { dataTableColumnProps } from \"./data-table-column-options\";\n\nexport default defineComponent({\n name: \"MKDataTableColumn\",\n props: dataTableColumnProps,\n setup(props) {\n const dataTableContext = inject(DATA_TABLE_CONTEXT_KEY);\n\n const dataTable = computed(() => dataTableContext?.dataTable ?? null);\n\n const tableColumn = computed(() => props.column);\n\n const { component, componentProps } = useTableColumnComponent(\n tableColumn,\n dataTable\n );\n\n return () => {\n const TableColumnComponent = toRaw(unref(component));\n\n if (!TableColumnComponent) {\n return null;\n }\n\n return (\n <TableColumnComponent\n {...unref(componentProps)}\n column={unref(tableColumn)}\n index={props.index}\n row={props.row}\n />\n );\n };\n },\n});\n","import DataTableColumnComponent from \"./data-table-column\";\n\nexport const MKDataTableColumn = DataTableColumnComponent;\n\nexport default MKDataTableColumn;\n\nexport * from \"./data-table-column-options\";\n","import { ExtractPropTypes } from \"vue\";\nimport { DataTable } from \"@maketribe/dm\";\nimport { buildProps } from \"@maketribe/utils\";\n\nexport const tableProps = buildProps({\n dataTable: {\n type: DataTable<any>,\n },\n getList: {\n type: Function,\n default: (dataTable: DataTable<any>): any[] => dataTable.getList(),\n },\n lazy: {\n type: Boolean,\n default: false,\n },\n treeProps: {\n type: Object,\n default: () => ({ children: \"children\", hasChildren: \"hasChildren\" }),\n },\n load: {\n type: Function,\n default: null,\n },\n rowKey: {\n type: String,\n },\n defaultExpandAll: {\n type: Boolean,\n default: false,\n },\n} as const);\n\nexport type TableProps = ExtractPropTypes<typeof tableProps>;\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\";\nimport { buildProps } from \"@maketribe/utils\";\nimport { DataTable } from \"@maketribe/dm\";\n\nexport const tableViewProps = buildProps({\n dataTable: { type: DataTable<any> },\n showHeader: { type: Boolean, default: true },\n} as const);\n\nexport type TableViewProps = ExtractPropTypes<typeof tableViewProps>;\n\nexport const tableViewEmits = {};\n\nexport const TableViewEmits = typeof tableViewEmits;\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\";\nimport TableHeaderItem from \"./header-item\";\nimport { DATA_TABLE_CONTEXT_KEY } from \"../../../token\";\n\nexport default defineComponent({\n name: \"MKTableHeader\",\n setup(props, { slots }) {\n const dataTableContext = inject(DATA_TABLE_CONTEXT_KEY)!;\n\n const dataTable = computed(() => dataTableContext.dataTable)\n\n const tableHeader = computed(() => unref(dataTable)?.header!);\n\n const leftArea = computed(() => {\n var items = unref(tableHeader)?.leftArea ?? [];\n\n return items.filter((item) => item.predicate());\n });\n const rightArea = computed(() => {\n var items = unref(tableHeader)?.rightArea ?? [];\n\n return items.filter((item) => item.predicate());\n });\n\n return () => {\n const leftItems = unref(leftArea).map((item) => (\n <TableHeaderItem tableHeaderItem={item} />\n ));\n\n const rightItems = unref(rightArea).map((item) => (\n <TableHeaderItem tableHeaderItem={item} />\n ));\n \n return (\n <div class=\"mk-table-view__header\">\n <div class=\"mk-table-view__header-main\">\n {leftItems}\n {slots['header-main']?.()}\n </div>\n <div class=\"mk-table-view__header-tools\">\n {rightItems}\n {slots[\"header-tools\"]?.()}\n </div>\n </div>\n );\n };\n },\n});\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\";\nimport { ElCard } from \"element-plus\";\nimport { DataTree } from \"@maketribe/dm\";\n\nimport { MKDataTablePagination } from \"../../../data-table-pagination\";\nimport { MKTable } from \"../table\";\nimport { tableViewProps } from \"./table-view-options\";\nimport { MKTableHeader } from \"./header\";\nimport { DATA_TABLE_CONTEXT_KEY } from \"../../token\";\n\nexport default defineComponent({\n name: \"MKTableView\",\n props: tableViewProps,\n setup(props, { slots }) {\n const dataTableContext = inject(DATA_TABLE_CONTEXT_KEY);\n\n const dataTable = computed(\n () => props.dataTable ?? dataTableContext!.dataTable\n );\n\n const pageSizes = computed(() => unref(dataTable).pageSizes);\n\n //树形表格不需要显示分页\n const isTree = computed(() => unref(dataTable) instanceof DataTree);\n\n return () => {\n const pagination =\n slots.pagination?.({ dataTable: unref(dataTable) }) ||\n (unref(pageSizes).length && !unref(isTree) ? (\n <MKDataTablePagination dataTable={unref(dataTable)} />\n ) : null);\n\n const _slots: Record<string, any> = {};\n\n if (props.showHeader) {\n _slots.header = () => <MKTableHeader v-slots={slots} />;\n }\n\n return (\n <ElCard class=\"mk-table-view\" v-slots={_slots}>\n {slots.default?.({ dataTable: unref(dataTable) }) || (\n <MKTable dataTable={unref(dataTable)} />\n )}\n {pagination}\n </ElCard>\n );\n };\n },\n});\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\";\nimport MKTableClassifySearchItem from \"./classify-search-item\";\nimport { DATA_TABLE_CONTEXT_KEY } from \"../../../token\";\n\nexport default defineComponent({\n name: \"MKTableClassifySearch\",\n setup(props, { slots }) {\n const dataTable = inject(DATA_TABLE_CONTEXT_KEY)?.dataTable;\n\n const classifySearch = computed(() => dataTable?.classifySearch ?? null);\n\n return () => {\n let children: any = slots.default?.();\n\n const _classifySearch = unref(classifySearch);\n\n if (!children && _classifySearch) {\n if (!_classifySearch.getClassifySearchItems().length) {\n return;\n }\n\n children = (\n <Fragment>\n {_classifySearch.getClassifySearchItems().map((item) => (\n <MKTableClassifySearchItem\n label={item.label}\n labelWidth={_classifySearch.labelWidth}\n modelValue={_classifySearch.getParam(item.name)}\n onUpdate:model-value={(v: any) => {\n _classifySearch.setParam(item.name, v);\n }}\n multiple={item.multiple}\n options={item.options}\n formatOptions={item.formatOptions || undefined}\n />\n ))}\n </Fragment>\n );\n }\n\n return <div class=\"mk-classify-search\">{children}</div>;\n };\n },\n});\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\";\nimport { DataTree } from \"@maketribe/dm\";\nimport { buildProps } from \"@maketribe/utils\";\n\nexport const tableTreeProps = buildProps({\n dataTree: {\n type: DataTree<any>,\n },\n defaultExpandAll: {\n type: Boolean,\n default: false,\n },\n} as const);\n\nexport type TableTreeProps = ExtractPropTypes<typeof tableTreeProps>;\n","import { computed, defineComponent, inject, onMounted, unref } from \"vue\";\nimport { TreeNode } from \"element-plus\";\nimport { tableTreeProps } from \"./table-tree-options\";\nimport { DataTree, DataTreeNode } from \"@maketribe/dm\";\nimport { MKTable } from \"../table\";\nimport { DATA_TABLE_CONTEXT_KEY } from \"../../token\";\n\nexport default defineComponent({\n name: \"MKTableTree\",\n props: tableTreeProps,\n setup(props, { slots }) {\n const dataTableContext = inject(DATA_TABLE_CONTEXT_KEY);\n\n const dataTree = computed(\n () => props.dataTree ?? (dataTableContext!.dataTable as DataTree)\n );\n\n (window as any).dataTree = dataTree;\n\n const treeProps = computed(() => {\n const _dataTree = unref(dataTree);\n\n return { children: _dataTree.props.children, hasChildren: \"hasChildren\" };\n });\n\n const lazy = computed(() => unref(dataTree).lazy);\n\n const handleLoad = async (\n row: DataTreeNode,\n node: TreeNode,\n resolve: Function\n ) => {\n if (!unref(dataTree).lazy) {\n resolve(row.children);\n return;\n }\n\n await row.load();\n\n resolve(row.children);\n };\n\n const getList = (dataTree: DataTree<any>) => {\n return dataTree.children;\n };\n\n return () => {\n return (\n <MKTable\n dataTable={unref(dataTree)}\n getList={getList}\n rowKey=\"primaryValue\"\n tree-props={unref(treeProps)}\n load={handleLoad}\n lazy={unref(lazy)}\n v-slots={slots}\n default-expand-all={props.defaultExpandAll}\n />\n );\n };\n },\n});\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\";\nimport { DataTree, DataTreeNode } from \"@maketribe/dm\";\nimport { buildProps } from \"@maketribe/utils\";\n\nexport const treeProps = buildProps({\n dataTree: {\n type: DataTree<any>,\n },\n currentNodeKey: { type: String, default: \"\" },\n draggable: { type: Boolean, default: false },\n filterNodeMethod: { type: Function },\n defaultExpandAll: { type: Boolean, default: false },\n allowSelectContainer: { type: Boolean, default: true },\n} as const);\n\nexport type TreeProps = ExtractPropTypes<typeof treeProps>;\n\nexport const treeEmits = {\n nodeClick: (node: DataTreeNode<any>) => true,\n};\n\nexport type TreeEmits = typeof treeEmits;\n","import {\n Fragment,\n computed,\n defineComponent,\n inject,\n nextTick,\n onMounted,\n ref,\n unref,\n watch,\n} from \"vue\";\nimport { ElButton, ElTree } from \"element-plus\";\nimport type { NodeDropType } from \"element-plus/es/components/tree/src/tree.type\";\nimport type { DragEvents } from \"element-plus/es/components/tree/src/model/useDragNode\";\nimport type Node from \"element-plus/es/components/tree/src/model/node\";\nimport { DataTree, DataTreeNode } from \"@maketribe/dm\";\nimport { treeEmits, treeProps } from \"./tree-options\";\nimport { DATA_TABLE_CONTEXT_KEY } from \"../../token\";\n\nexport default defineComponent({\n name: \"MKTree\",\n props: treeProps,\n emits: treeEmits,\n setup(props, { emit }) {\n const dataTableContext = inject(DATA_TABLE_CONTEXT_KEY);\n\n const dataTree = computed(\n () => props.dataTree ?? (dataTableContext!.dataTable as DataTree)\n );\n\n const treeRef = ref<typeof ElTree | null>(null);\n\n const rootNodes = computed(() => unref(dataTree).rootNodes);\n\n const currentNodeKey = computed(\n () => (props.currentNodeKey || unref(dataTree).getSelection()[0]) ?? \"\"\n );\n\n onMounted(() => {\n watch(\n currentNodeKey,\n (currentNodeKey) => {\n unref(treeRef)?.setCurrentKey(currentNodeKey || null);\n },\n { immediate: true }\n );\n });\n\n unref(dataTree).afterLoadEvent.on(async () => {\n await nextTick();\n\n unref(treeRef)?.setCurrentKey(unref(currentNodeKey) || null);\n });\n\n const handleAdd = (dataTreeNode?: DataTreeNode) => {\n unref(dataTree).addRecord(\n dataTreeNode ? { pid: dataTreeNode.data.id } : {}\n );\n };\n\n const handleEdit = (dataTreeNode: DataTreeNode) => {\n unref(dataTree).editRecord(dataTreeNode.data);\n };\n\n const handleDelete = async (dataTreeNode: DataTreeNode) => {\n unref(dataTree).deleteRecord(dataTreeNode.data);\n };\n\n const handleLoad = async (node: Node, resolve: Function) => {\n if (node.level === 0) {\n return;\n }\n\n if (!unref(dataTree).lazy) {\n resolve(node.data.children);\n return;\n }\n\n const dataTreeNode = node.data as DataTreeNode;\n\n await dataTreeNode.load();\n\n resolve(dataTreeNode.children);\n };\n\n const filter = (value: any) => {\n unref(treeRef)?.filter(value);\n };\n\n const handleCurrentChange = (\n dataTreeNode: DataTreeNode | null,\n node: Node | null\n ) => {\n if (!dataTreeNode) {\n return;\n }\n\n const _dataTree = unref(dataTree);\n\n if (!props.allowSelectContainer && !dataTreeNode.isLeaf) {\n const current = _dataTree.getSelection()[0] ?? null;\n\n unref(treeRef)?.setCurrentKey(current);\n\n return;\n }\n\n _dataTree.setSelection([dataTreeNode.data[_dataTree.primaryKey]]);\n };\n\n // 没作用\n // watch(()=>props.currentNodeKey,()=>{\n // treeRef.value?.getCurrentKey(props.currentNodeKey)\n // console.log(\"props.currentNodeKey\",props.currentNodeKey)\n // },{ immediate:true })\n\n const handleNodeDrop = (\n draggingNode: Node,\n dropNode: Node,\n dropType: NodeDropType,\n event: DragEvents\n ) => {\n // console.log(draggingNode, dropNode);\n unref(dataTree).handleNodeDrop(\n draggingNode.data! as any,\n dropNode.data! as any,\n dropType\n );\n };\n\n const handleNodeClick = (node: DataTreeNode<any>) => {\n emit(\"nodeClick\", node);\n };\n\n return {\n treeRef,\n innerDataTree: dataTree,\n rootNodes,\n handleAdd,\n handleEdit,\n handleDelete,\n handleLoad,\n filter,\n handleCurrentChange,\n handleNodeDrop,\n handleNodeClick,\n };\n },\n render() {\n const {\n defaultExpandAll,\n filterNodeMethod,\n innerDataTree,\n rootNodes,\n handleAdd,\n handleEdit,\n handleDelete,\n handleLoad,\n handleCurrentChange,\n handleNodeDrop,\n handleNodeClick,\n $slots,\n } = this;\n\n return (\n <ElTree\n props={{ children: \"children\", isLeaf: \"isLeaf\" }}\n defaultExpandAll={defaultExpandAll}\n ref=\"treeRef\"\n class=\"mk-data-tree\"\n highlight-current\n data={rootNodes}\n lazy\n filterNodeMethod={filterNodeMethod as any}\n nodeKey=\"primaryValue\"\n expand-on-click-node={false}\n load={handleLoad}\n onCurrent-change={handleCurrentChange}\n onNode-drop={handleNodeDrop}\n draggable={this.$props.draggable}\n onNode-click={handleNodeClick}\n v-slots={{\n default: (scope: any) => {\n let children = $slots.default?.(scope);\n\n if (children) {\n return children;\n }\n\n const { data } = scope;\n\n const label = data.data[innerDataTree.props.label];\n\n const main = $slots[\"node-main\"]?.(scope) || label;\n\n const tools = $slots[\"node-tools\"]?.(scope) || (\n <Fragment>\n {$slots[\"node-tools-prefix\"]?.(scope)}\n <ElButton type=\"primary\" link onClick={() => handleAdd(data)}>\n 添加\n </ElButton>\n <ElButton type=\"primary\" link onClick={() => handleEdit(data)}>\n 编辑\n </ElButton>\n <ElButton type=\"danger\" link onClick={() => handleDelete(data)}>\n 删除\n </ElButton>\n {$slots[\"node-tools-suffix\"]?.(scope)}\n </Fragment>\n );\n\n return (\n <div class=\"mk-data-tree-node\">\n <div class=\"mk-data-tree-node_main\">{main}</div>\n\n <div\n class=\"mk-data-tree-node__tools\"\n onClick={(e) => e.stopPropagation()}\n >\n {tools}\n </div>\n </div>\n );\n },\n }}\n />\n );\n },\n});\n","import { withInstall } from \"@maketribe/utils\";\nimport Tree from \"./tree\";\n\nexport const MKTree = withInstall(Tree);\n\nexport default MKTree;\n\nexport * from \"./tree-options\";\n","import { ExtractPropTypes } from \"vue\";\nimport { DataTree } from \"@maketribe/dm\";\nimport { buildProps } from \"@maketribe/utils\";\n\nexport const treeViewProps = buildProps({\n dataTree: {\n type: DataTree<any>,\n },\n filterNodeMethod: {\n type: Function,\n },\n defaultExpandAll: { type: Boolean, default: true },\n} as const);\n\nexport type TreeViewProps = ExtractPropTypes<typeof treeViewProps>;\n","import { computed, defineComponent, inject, ref, unref, watch } from \"vue\";\nimport { ElButton, ElCard, ElInput } from \"element-plus\";\nimport { Search } from \"@element-plus/icons-vue\";\nimport { MKTree } from \"../tree\";\nimport { treeViewProps } from \"./tree-view-options\";\nimport { I18n } from \"@maketribe/locale\";\nimport { DATA_TABLE_CONTEXT_KEY } from \"../../token\";\nimport { DataTree } from \"@maketribe/dm\";\n\nexport default defineComponent({\n name: \"MKTreeView\",\n props: treeViewProps,\n setup(props, { slots }) {\n const dataTableContext = inject(DATA_TABLE_CONTEXT_KEY);\n\n const dataTree = computed(\n () => props.dataTree ?? (dataTableContext!.dataTable as DataTree)\n );\n\n const treeRef = ref<InstanceType<typeof MKTree>>();\n\n const searchInputValue = ref(\"\");\n watch(searchInputValue, (value) => {\n unref(treeRef)?.filter(value);\n });\n\n const filterNodeMethod = (value: string, data: any) => {\n if (typeof props.filterNodeMethod === \"function\") {\n return props.filterNodeMethod(value, data);\n }\n\n if (!searchInputValue.value) return true;\n\n return data.data[unref(dataTree).props.label].includes(\n searchInputValue.value\n );\n };\n\n const handleAdd = () => {\n unref(dataTree).addRecord();\n };\n\n return () => {\n const content = slots.default?.({ dataTree: props.dataTree }) || (\n <MKTree\n ref={\n ((component: InstanceType<typeof MKTree>) =>\n (treeRef.value = component)) as any\n }\n dataTree={unref(dataTree)}\n filterNodeMethod={filterNodeMethod}\n />\n );\n\n return (\n <ElCard\n class=\"mk-data-tree-page\"\n v-slots={{\n header: () => {\n return (\n <div class=\"header-box\">\n <div class=\"header-box-main\">\n <ElInput\n modelValue={unref(searchInputValue)}\n clearable={true}\n onUpdate:modelValue={(v: string) =>\n (searchInputValue.value = v)\n }\n prefix-icon={Search}\n />\n </div>\n <div class=\"header-box-tools\">\n <ElButton onClick={handleAdd} type=\"primary\">\n {I18n.instance.translate(\"mk.dataTreePage.addButton\")}\n </ElButton>\n </div>\n </div>\n );\n },\n }}\n >\n {content}\n </ElCard>\n );\n };\n },\n});\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 { defineComponent } from \"vue\";\r\nimport { 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 <MKSvgIcon name=\"solar:user-bold-duotone\" class=\"member-info-img__icon\" />\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\";\nimport { dataTableColumnProps } from \"../../../../../components\";\nimport { ElTag } from \"element-plus\";\n\nexport default defineComponent({\n props: dataTableColumnProps,\n setup(props) {\n return () => {\n const roles = props.row.roles.map((role: any) => (\n <ElTag key={role.id} size=\"large\" type=\"info\" class=\"roles-Info-tag\">\n {role.desc}\n </ElTag>\n ));\n\n return <div class=\"roles-Info\">{roles}</div>;\n };\n },\n});\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 {\n AddButton,\n DataFormOptions,\n DataTable,\n DeleteButton,\n RefreshButton,\n TableActionColumn,\n TableColumn,\n} from \"@maketribe/dm\";\nimport { DATA_MODEL_NAME } from \"../../../../constants\";\nimport { MODULE_NAME } from \"../../constants\";\nimport { MsMember, MsMemberTable } from \"../ms-member\";\nimport { CancelToken, R } from \"@maketribe/request\";\nimport { MsRole } from \"../ms-role\";\n\nexport type MsMemberRole = {\n id: string;\n memberId: string;\n roleId: string;\n member: Omit<MsMember, \"roles\">;\n};\n\nexport class MsMemberRoleTable extends DataTable<MsMemberRole> {\n static [DATA_MODEL_NAME]: string = \"ms-member-role\";\n\n memberTable: MsMemberTable;\n\n currentRole: MsRole | null = null;\n\n constructor(options: DataFormOptions = {}) {\n super({\n name: MsMemberRoleTable[DATA_MODEL_NAME],\n moduleName: MODULE_NAME,\n ...options,\n });\n\n const memberRoleTable = this;\n\n this.memberTable = this.register(\n new (class extends MsMemberTable {\n protected async loadRequest(params: Record<string, any>) {\n const response = await this.dataViewRequest.callDVRequest<\n R<MsMember[]> & { totalRecCount: string }\n >({\n action: \"non-role-member-page-list\",\n name: \"ms-member-role\",\n data: {\n pn: this.currentPage,\n pc: this.pageSize,\n roleId: memberRoleTable.currentRole?.id!,\n },\n cancelToken: new CancelToken((cancel) => {\n this.loadCancel = cancel;\n }),\n });\n\n this.loadCancel = null;\n\n return response;\n }\n })()\n );\n }\n\n setCurrentRole(role: MsRole | null) {\n const oldRole = this.currentRole;\n\n this.currentRole = role;\n this.memberTable.setList([]);\n\n if (!role) {\n this.setList([]);\n return;\n }\n\n this.useCondition((group) => {\n group.clear();\n\n group.addCondition(\"roleId\", \"=\", role.id);\n });\n\n if (oldRole) {\n this.load();\n }\n }\n\n protected async initialize() {\n await super.initialize();\n\n await this.memberTable.init();\n\n this.dataFilter.afterReadyEvent.on(() => {\n this.memberTable.dataFilter.setReady();\n });\n\n this.memberTable.header.rightArea = [new RefreshButton()];\n\n const rolesColumn = this.memberTable.getColumn(\"roles\");\n if (rolesColumn) {\n rolesColumn.visible = false;\n }\n\n this.header.rightArea = [new RefreshButton(), new AddButton()];\n\n this.setColumns([\n new TableColumn({ name: \"member.nickName\", label: \"名称\" }),\n new TableActionColumn({\n buttons: [new DeleteButton()],\n }),\n ]);\n }\n}\n","import { DataForm, DataFormOptions, FormColumn, RefreshButton } from \"@maketribe/dm\";\nimport { DATA_MODEL_NAME } from \"../../../../constants\";\nimport { MODULE_NAME } from \"../../constants\";\n\nexport class MsMemberRoleForm extends DataForm {\n static [DATA_MODEL_NAME]: string = \"ms-member-role\";\n\n constructor(options: DataFormOptions = {}) {\n super({\n name: MsMemberRoleForm[DATA_MODEL_NAME],\n moduleName: MODULE_NAME,\n ...options,\n });\n }\n\n protected async initialize() {\n await super.initialize();\n\n // this.setColumns([\n // new FormColumn({\n // name: \"memberId\",\n // label: \"成员\",\n // componentInfo: \"MKFormDataTableSelect\",\n // componentProps: {\n // dataTable: this.memberTable,\n // labelFieldName: \"nickName\",\n // },\n // }),\n // ]);\n }\n\n // formatSubmitData(data: any) {\n // return {\n // ...data,\n // roleId: this.currentRole?.id!,\n // };\n // }\n}\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 {\n ActionButton,\n DataTable,\n DeleteButton,\n EditButton,\n TableActionColumn,\n TableColumn,\n Messager,\n TableHeaderItem,\n RefreshButton,\n AddButton,\n} from \"@maketribe/dm\";\nimport { MsIPWhitelist } from \"./MsIPWhitelistForm\";\nimport { MSAppClient } from \"../../../../core\";\nimport { DATA_MODEL_NAME } from \"../../../../constants\";\nimport { MODULE_NAME } from \"../../constants\";\n\nexport class MsIPWhitelistTable<T = MsIPWhitelist, F = T> extends DataTable<\n T,\n F\n> {\n static [DATA_MODEL_NAME]: string = \"ms-access-ip-whitelist\";\n\n constructor(options = {}) {\n super({\n name: MsIPWhitelistTable[DATA_MODEL_NAME],\n moduleName: MODULE_NAME,\n ...options,\n });\n }\n\n async initialize() {\n await super.initialize();\n\n this.header.rightArea = [\n new RefreshButton(),\n new AddButton(),\n new TableHeaderItem({\n componentInfo: \"MKBatchOpt\",\n predicate: () =>\n MSAppClient.instance?.userSession?.userInfo?.isSuper ?? false,\n }),\n ];\n\n this.setColumns([\n new TableColumn({ name: \"ipAddress\", label: \"IP地址\" }),\n new TableColumn({ name: \"createdAt\", label: \"创建时间\" }),\n new TableActionColumn({\n width: \"180px\",\n buttons: [\n new EditButton(),\n new DeleteButton({ label: \"移除\" }),\n new ActionButton({\n label: \"禁用\",\n type: \"danger\",\n handler: async (row) => {\n this.loadingManager.startLoading();\n\n const result = await this.dataViewRequest.callDVRequest({\n action: `disable/${row.id}`,\n });\n\n this.loadingManager.completeLoading();\n if (result.data.code !== 200) {\n Messager.error({\n message: result.data.msg || \"禁用失败\",\n });\n return;\n }\n Messager.success({ message: \"禁用成功\" });\n\n this.load();\n },\n predicate: (row) => row.valid === 1,\n }),\n new ActionButton({\n label: \"启用\",\n type: \"success\",\n handler: async (row) => {\n this.loadingManager.startLoading();\n\n const result = await this.dataViewRequest.callDVRequest({\n action: `enable/${row.id}`,\n });\n\n this.loadingManager.completeLoading();\n if (result.data.code !== 200) {\n Messager.error({\n message: result.data.msg || \"启用失败\",\n });\n return;\n }\n Messager.success({ message: \"启用成功\" });\n\n this.load();\n },\n predicate: (row) => row.valid === 0,\n }),\n ],\n }),\n ]);\n }\n}\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 {\n ActionButton,\n DataTable,\n DeleteButton,\n EditButton,\n TableActionColumn,\n TableColumn,\n Messager,\n TableHeaderItem,\n RefreshButton,\n AddButton,\n} from \"@maketribe/dm\";\nimport { MsDenyIPAccessList } from \"./MsDenyIPAccessListForm\";\nimport { MSAppClient } from \"../../../../core\";\nimport { DATA_MODEL_NAME } from \"../../../../constants\";\nimport { MODULE_NAME } from \"../../constants\";\n\nexport class MsDenyIPAccessListTable<\n T = MsDenyIPAccessList,\n F = T\n> extends DataTable<T, F> {\n static [DATA_MODEL_NAME]: string = \"ms-deny-access-ip-list\";\n\n constructor(options = {}) {\n super({\n name: MsDenyIPAccessListTable[DATA_MODEL_NAME],\n moduleName: MODULE_NAME,\n ...options,\n });\n }\n\n async initialize() {\n await super.initialize();\n\n this.header.rightArea = [\n new RefreshButton(),\n new AddButton(),\n new TableHeaderItem({\n componentInfo: \"MKBatchOpt\",\n predicate: () =>\n MSAppClient.instance?.userSession?.userInfo?.isSuper ?? false,\n }),\n ];\n\n this.setColumns([\n new TableColumn({ name: \"ipAddress\", label: \"IP地址\" }),\n new TableColumn({ name: \"createdAt\", label: \"创建时间\" }),\n new TableActionColumn({\n width: \"180px\",\n buttons: [\n new EditButton(),\n new DeleteButton({ label: \"移除\" }),\n new ActionButton({\n label: \"禁用\",\n type: \"danger\",\n handler: async (row) => {\n this.loadingManager.startLoading();\n\n const result = await this.dataViewRequest.callDVRequest({\n action: `disable/${row.id}`,\n });\n\n this.loadingManager.completeLoading();\n if (result.data.code !== 200) {\n Messager.error({\n message: result.data.msg || \"禁用失败\",\n });\n return;\n }\n Messager.success({ message: \"禁用成功\" });\n\n this.load();\n },\n predicate: (row) => row.valid === 1,\n }),\n new ActionButton({\n label: \"启用\",\n type: \"success\",\n handler: async (row) => {\n this.loadingManager.startLoading();\n\n const result = await this.dataViewRequest.callDVRequest({\n action: `enable/${row.id}`,\n });\n\n this.loadingManager.completeLoading();\n if (result.data.code !== 200) {\n Messager.error({\n message: result.data.msg || \"启用失败\",\n });\n return;\n }\n Messager.success({ message: \"启用成功\" });\n\n this.load();\n },\n predicate: (row) => row.valid === 0,\n }),\n ],\n }),\n ]);\n }\n}\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\";\nimport { DataModelDefines, DataTableClass } from \"./core\";\n\nexport const defineDataTable = <T extends DataTableClass>(\n DataTableClass: T\n): T => {\n DataModelDefines.instance.registerDataTableDefine(\n (DataTableClass as any)[DATA_MODEL_NAME] as string,\n DataTableClass\n );\n\n return DataTableClass;\n};\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\";\nimport { DataTreeClass, DataModelDefines } from \"./core\";\n\nexport const defineDataTree = <T extends DataTreeClass>(\n DataTreeClass: T\n): T => {\n DataModelDefines.instance.registerDataTreeDefine(\n (DataTreeClass as any)[DATA_MODEL_NAME] as string,\n DataTreeClass\n );\n\n return DataTreeClass;\n};\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\";\nimport { R, CancelToken } from \"@maketribe/request\";\nimport { defineDataTree } from \"../../../../../define-data-tree\";\nimport { Event } from \"@maketribe/utils\";\n\nexport type LocalLog = {\n name: string;\n path: string;\n isDirectory: boolean;\n children: LocalLog[];\n};\n\nexport class LocalLogTree extends DataTree<LocalLog> {\n constructor(options: DataTreeOptions = { props: { label: \"name\" } }) {\n super({ name: \"local-log\", props: { label: \"path\" }, ...options });\n }\n\n protected async initialize(): Promise<void> {\n await super.initialize();\n\n // this.afterInitdEvent.once(() => {\n // this.append(\n // this.createDataTreeNode({\n // name: \"root\",\n // path: \"/\",\n // isDirectory: true,\n // children: [],\n // })\n // );\n // });\n }\n\n // createDataTreeNode(data: LocalLog) {\n // const dataTreeNode: DataTreeNode<LocalLog> =\n // new (class extends DataTreeNode<LocalLog> {\n // get isLeaf() {\n // return !(this.data?.isDirectory ?? false);\n // }\n\n // protected async loadRequest(params: Record<string, any>) {\n // const response = await this.httpRequest.get<\n // R<LocalLog[]> & { totalRecCount: string }\n // >(\"/ms/system/local-log-dir-root\", {\n // params: { ...params, path: this.data!.path },\n // cancelToken: new CancelToken((cancel) => {\n // this.loadCancel = cancel;\n // }),\n // });\n\n // response.data.data = response.data.data.map((item) => ({\n // name: item.name,\n // path: item.path,\n // isDirectory: item.isDirectory,\n // children: [],\n // })) as LocalLog[];\n\n // this.loadCancel = null;\n\n // return response;\n // }\n // })({ name: this.name });\n\n // dataTreeNode.setTree(this);\n\n // dataTreeNode.setData(data);\n\n // return dataTreeNode;\n // }\n\n formatItem(item: LocalLog): LocalLog {\n return { ...item, children: [] };\n }\n}\n\ndefineDataTree(LocalLogTree);\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\";\nimport { buildProps } from \"@maketribe/utils\";\nimport { MsMaterial, MsMaterialTable } from \"../../dataviews\";\n\nexport const materialListProps = buildProps({\n materialTable: {\n type: MsMaterialTable,\n },\n selectable: {\n type: Boolean,\n default: false,\n },\n allowMaterialTypeValues: {\n type: Array,\n default: () => []\n },\n} as const);\n\nexport type MaterialListProps = ExtractPropTypes<typeof materialListProps>;\n","import { defineComponent, reactive, computed, unref, ref } from \"vue\";\nimport { ElButton, ElPopover } from \"element-plus\";\nimport { MKDataForm, MKForm } from \"../../../../components/data-model\";\nimport { MsMaterialGroupForm, MsMaterialGroupTree } from \"../../dataviews/ms-material\";\nimport { buildProps } from \"@maketribe/utils\";\n\nexport default defineComponent({\n name: \"MKMaterialFormPopover\",\n props: buildProps({\n materialGroupTree: {\n type: MsMaterialGroupTree,\n required: true,\n },\n materialGroupForm: {\n type: MsMaterialGroupForm,\n required: true,\n },\n } as const),\n setup(props, { slots }) {\n const visible = ref(false);\n\n const loading = computed(() => props.materialGroupForm.loading);\n\n const handleConfirmClick = async () => {\n await props.materialGroupForm.simpleSubmit();\n\n props.materialGroupTree.load();\n\n visible.value = false;\n };\n\n const handleCancelClick = () => {\n visible.value = false;\n };\n\n return () => {\n return (\n <ElPopover\n visible={unref(visible)}\n onUpdate:visible={(v: boolean) => (visible.value = v)}\n title=\"添加素材分组\"\n effect=\"light\"\n placement=\"right\"\n trigger=\"click\"\n width=\"320\"\n v-slots={{\n reference: () => slots.default?.(),\n }}\n >\n <div>\n <MKDataForm data-form={props.materialGroupForm}>\n <MKForm />\n </MKDataForm>\n <div class=\"mk-material-list__group-form-footer\">\n <ElButton onClick={handleCancelClick}>取消</ElButton>\n <ElButton\n type=\"primary\"\n loading={unref(loading)}\n onClick={handleConfirmClick}\n >\n 保存\n </ElButton>\n </div>\n </div>\n </ElPopover>\n );\n };\n },\n});\n","import {\n computed,\n defineComponent,\n nextTick,\n onBeforeUnmount,\n reactive,\n ref,\n Ref,\n unref,\n} from \"vue\";\nimport {\n ElButton,\n ElIcon,\n ElMessage,\n ElMessageBox,\n ElScrollbar,\n ElTooltip,\n} from \"element-plus\";\nimport { Plus, Edit, Delete } from \"@element-plus/icons-vue\";\nimport { buildProps } from \"@maketribe/utils\";\nimport {\n MsMaterialGroupForm,\n MsMaterialGroupNode,\n MsMaterialGroupTree,\n} from \"../../dataviews/ms-material\";\nimport { MKDataTable, MKTree } from \"../../../../components/data-model\";\nimport MaterialGroupFormPopover from \"./material-group-form-popover\";\nimport { I18n } from \"@maketribe/locale\";\n\nexport default defineComponent({\n name: \"MKMaterialGroup\",\n props: buildProps({\n materialGroupTree: {\n type: MsMaterialGroupTree,\n required: true,\n },\n } as const),\n setup(props) {\n const treeRef: Ref<typeof MKTree | null> = ref(null);\n\n const materialGroupForm = reactive(\n new MsMaterialGroupForm()\n ) as MsMaterialGroupForm;\n\n const materialGroupTree = computed(() => props.materialGroupTree);\n\n const loading = computed(() => unref(materialGroupTree).loading);\n\n onBeforeUnmount(() => {\n materialGroupForm.dispose();\n });\n\n const handleAddClick = async (parent?: MsMaterialGroupNode) => {\n materialGroupForm.addRecord();\n\n await nextTick();\n\n materialGroupForm.setData({\n ...materialGroupForm.data,\n parentGroupId: parent?.id || null,\n } as MsMaterialGroupNode);\n };\n\n const handleEditClick = (item: MsMaterialGroupNode) => {\n materialGroupForm.editRecord(item);\n };\n\n const handleDeleteClick = async (item: MsMaterialGroupNode) => {\n const isConfirm = await ElMessageBox.confirm(\n I18n.instance.translate(\"mk.dataTablePage.deleteMessage\"),\n I18n.instance.translate(\"mk.dataTablePage.deleteTitle\"),\n { type: \"warning\" }\n ).then(\n () => true,\n () => false\n );\n\n if (!isConfirm) {\n return;\n }\n\n const result = await unref(materialGroupTree).deleteAfterRefresh(item);\n\n if (result.data.code !== 200) {\n ElMessage.error(result.data.msg);\n return;\n }\n };\n\n return () => {\n return (\n <div class=\"mk-material-group\" v-loading={unref(loading)}>\n <div class=\"mk-material-group__header\">\n <div class=\"mk-material-group__header-title\">素材分组</div>\n <MaterialGroupFormPopover\n materialGroupTree={unref(materialGroupTree)}\n materialGroupForm={materialGroupForm}\n >\n <ElButton\n onClick={() => handleAddClick()}\n icon={Plus}\n size=\"small\"\n type=\"primary\"\n />\n </MaterialGroupFormPopover>\n </div>\n\n <div class=\"mk-material-group__main\">\n <ElScrollbar height=\"100%\">\n <MKDataTable\n dataTable={unref(materialGroupTree)}\n highlight-current\n >\n <MKTree\n dataTree={unref(materialGroupTree)}\n allowSelectContainer={false}\n ref={((el: any) => (treeRef.value = el)) as any}\n v-slots={{\n \"node-tools\": ({ data }: any) => {\n return (\n <div\n class=\"mk-material-group__tools\"\n onClick={(e) => {\n e.preventDefault();\n }}\n >\n <ElTooltip content=\"添加\">\n <span class=\"mk-material-group__tools-item\">\n <MaterialGroupFormPopover\n materialGroupTree={unref(materialGroupTree)}\n materialGroupForm={materialGroupForm}\n >\n <span\n onClick={(e) => handleAddClick(data.data)}\n >\n <ElIcon>\n <Plus />\n </ElIcon>\n </span>\n </MaterialGroupFormPopover>\n </span>\n </ElTooltip>\n <ElTooltip content=\"编辑\">\n <span class=\"mk-material-group__tools-item\">\n <MaterialGroupFormPopover\n materialGroupTree={unref(materialGroupTree)}\n materialGroupForm={materialGroupForm}\n >\n <span\n onClick={(e) => handleEditClick(data.data)}\n >\n <ElIcon>\n <Edit />\n </ElIcon>\n </span>\n </MaterialGroupFormPopover>\n </span>\n </ElTooltip>\n <ElTooltip content=\"删除\">\n <span class=\"mk-material-group__tools-item\">\n <span\n onClick={() => handleDeleteClick(data.data)}\n >\n <ElIcon>\n <Delete />\n </ElIcon>\n </span>\n </span>\n </ElTooltip>\n </div>\n );\n },\n }}\n />\n </MKDataTable>\n </ElScrollbar>\n </div>\n </div>\n );\n };\n },\n});\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\";\nimport ImageCropperContent from \"./image-cropper-content\";\n\nexport * from \"./image-cropper-api\";\n\nexport const MKImageCropperContent = withInstall(ImageCropperContent);\n\nexport default MKImageCropperContent;\n\nexport * from \"./image-cropper-content-options\";\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","import {\n computed,\n defineComponent,\n Fragment,\n getCurrentInstance,\n onBeforeUnmount,\n onMounted,\n reactive,\n unref,\n watch,\n} from \"vue\";\nimport { base64ToBlob } from \"@maketribe/utils\";\nimport { DvOpt, WebFileUpload } from \"@maketribe/request\";\nimport { materialListProps } from \"./material-list-options\";\nimport MaterialGroup from \"./material-group\";\nimport {\n MsMaterial,\n MsMaterialForm,\n MsMaterialGroupNode,\n MsMaterialGroupTree,\n MsMaterialTable,\n MsMaterialType,\n} from \"../../dataviews\";\nimport {\n MKUploadFile,\n MKWebFileUploadContext,\n} from \"../../../../components/basic/upload-file\";\nimport { ImageCropper } from \"../../../../components/basic/image-cropper\";\nimport {\n MKDataTable,\n MKDataTablePagination,\n} from \"../../../../components/data-model\";\nimport { ElButton, ElScrollbar } from \"element-plus\";\nimport MaterialItem from \"./material-item.vue\";\nimport { Dialoger, FormColumn, Messager } from \"@maketribe/dm\";\n\nconst RATIO_OPTIONS = [\n {\n value: \"1\",\n label: \"1:1\",\n width: 1,\n height: 1,\n },\n {\n value: \"2\",\n label: \"2:1\",\n width: 2,\n height: 1,\n },\n {\n value: \"3\",\n label: \"4:3\",\n width: 4,\n height: 3,\n },\n {\n value: \"3\",\n label: \"16:9\",\n width: 16,\n height: 9,\n },\n];\n\nexport default defineComponent({\n name: \"MKMaterialList\",\n props: materialListProps,\n setup(props) {\n const materialGroupTree = reactive(\n new MsMaterialGroupTree()\n ) as MsMaterialGroupTree;\n\n const webFileUpload = new WebFileUpload();\n\n const _materialTable = reactive(new MsMaterialTable());\n\n const materialForm = reactive(\n new (class extends MsMaterialForm {\n protected async initialize() {\n await super.initialize();\n\n this.setColumns([\n new FormColumn({\n name: \"materialGroupId\",\n label: \"素材组\",\n componentInfo: \"MKDataTreeSelect\",\n componentProps: {\n dataTree: this.register(new MsMaterialGroupTree()),\n checkStrictly: false,\n },\n }),\n ]);\n }\n })()\n ) as MsMaterialForm;\n\n const materialTable = computed(\n () => (props.materialTable ?? _materialTable) as MsMaterialTable\n );\n\n const loading = computed(() => unref(materialTable).loading);\n\n const materialTypes = computed(() =>\n unref(materialTable).getMaterialTypes()\n );\n\n const currentMaterialType = computed(\n () => unref(materialTable).currentMaterialType\n );\n\n const currentMaterialTypeId = computed(\n () => unref(currentMaterialType)?.value ?? \"\"\n );\n\n const materialList = computed(() => unref(materialTable).getList());\n\n onBeforeUnmount(() => {\n _materialTable.dispose();\n materialGroupTree.dispose();\n materialForm.dispose();\n });\n\n onMounted(() => {\n const instance = getCurrentInstance();\n\n watch(\n materialTable,\n (materialTable, _, onCleanup) => {\n const disposable = materialTable.afterInitdEvent.on(() => {\n materialTable.setAllowMaterialTypeValues(\n props.allowMaterialTypeValues as MsMaterialType[\"value\"][]\n );\n });\n\n onCleanup(() => {\n disposable.dispose();\n });\n },\n { immediate: true }\n );\n\n watch(\n computed(() => props.allowMaterialTypeValues),\n (allowMaterialTypeValues) => {\n unref(materialTable).setAllowMaterialTypeValues(\n allowMaterialTypeValues as MsMaterialType[\"value\"][]\n );\n }\n );\n });\n\n watch(\n materialTable,\n (materialTable, _, onCleanup) => {\n const disposable = materialTable.deleteRecordEvent.on(\n async ({ item }) => {\n const isConfirm = await Dialoger.confirm({\n message: \"是否确认删除\",\n title: \"素材删除\",\n type: \"warning\",\n });\n\n if (!isConfirm) {\n return;\n }\n\n materialTable.deleteAfterRefresh(item);\n }\n );\n\n onCleanup(() => {\n disposable.dispose();\n });\n },\n { immediate: true }\n );\n\n const handleMaterialTypeClick = (materialType: MsMaterialType) => {\n if (materialType.value === unref(currentMaterialTypeId)) {\n return;\n }\n\n unref(materialTable).setCurrentMaterialType(materialType);\n };\n\n materialGroupTree.selectionChangeEvent.on(() => {\n const currentGroupId = materialGroupTree.getSelection()[0];\n\n if (!currentGroupId) {\n unref(materialTable).setList([]);\n }\n\n unref(materialTable).setCurrentMaterialGroupId(currentGroupId);\n });\n\n function getDefaultSelectMaterialGroup(\n nodes: MsMaterialGroupNode[]\n ): MsMaterialGroupNode | null {\n if (!nodes.length) {\n return null;\n }\n\n return getDefaultSelectMaterialGroup(nodes[0].children) ?? nodes[0];\n }\n\n materialGroupTree.afterLoadEvent.on(() => {\n const list = materialGroupTree.getList();\n\n const defaultSelectGroup = getDefaultSelectMaterialGroup(list);\n\n if (defaultSelectGroup) {\n materialGroupTree.setSelection([defaultSelectGroup.id]);\n }\n });\n\n materialForm.submittedEvent.on(() => {\n unref(materialTable).load();\n });\n\n const handleMaterialItemClick = (\n event: MouseEvent,\n material: MsMaterial\n ) => {\n if (!props.selectable) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n unref(materialTable).setSelection([material.id]);\n };\n\n const handleMoveClick = (material: MsMaterial) => {\n Dialoger.dataFormDialog({\n recId: material.id,\n title: \"设置素材分组\",\n dataForm: materialForm,\n });\n };\n\n const handleCutClick = async (material: MsMaterial) => {\n const cropperResult = await ImageCropper({\n src: material.path,\n ratioOptions: RATIO_OPTIONS,\n });\n\n if (!cropperResult.isConfirm) {\n return;\n }\n\n const handleOverrideClick = async () => {\n try {\n const blob = base64ToBlob(cropperResult.data);\n\n const uploadResponse = await webFileUpload.upload(\n new File([blob], material.desc, { type: blob.type })\n );\n\n if (uploadResponse.data.code !== 200) {\n Messager.error({ message: uploadResponse.data.msg });\n return;\n }\n\n const response = await DvOpt.createInstance({\n name: \"mk-material\",\n }).save({\n ...material,\n path: uploadResponse.data.data.path,\n });\n\n if (response.code !== 200) {\n Messager.error({ message: response.msg });\n return;\n }\n\n unref(materialTable).load();\n } catch {\n Messager.error({ message: \"网络异常\" });\n } finally {\n dialogInstance.destroy();\n }\n };\n\n const handleNewClick = async () => {\n try {\n const blob = base64ToBlob(cropperResult.data);\n\n const result = await unref(materialTable).upload.upload(\n new File([blob], material.desc, { type: blob.type })\n );\n\n if (result.data.code !== 200) {\n Messager.error({ message: result.data.msg });\n return;\n }\n } catch {\n Messager.error({ message: \"网络异常\" });\n } finally {\n dialogInstance.destroy();\n }\n };\n\n const handleCancelClick = () => {\n dialogInstance.destroy();\n };\n\n const dialogInstance = Dialoger.customRender({\n title: \"提示\",\n width: \"400px\",\n onClose: handleCancelClick,\n body: () => \"修改已存在的素材。是新建新素材还是覆盖现有素材\",\n footer: () => {\n return (\n <Fragment>\n <ElButton type=\"danger\" onClick={handleOverrideClick}>\n 覆盖\n </ElButton>\n <ElButton type=\"primary\" onClick={handleNewClick}>\n 新建\n </ElButton>\n <ElButton onClick={handleCancelClick}>取消</ElButton>\n </Fragment>\n );\n },\n });\n };\n\n const handleDownload = () => {};\n\n return () => {\n const materialTypeVNodes = unref(materialTypes).map((materialType) => {\n const className = [\n \"mk-material-list__type\",\n unref(currentMaterialTypeId) === materialType.value\n ? \"is-active\"\n : \"\",\n ];\n\n return (\n <div\n key={materialType.value}\n class={className}\n onClick={() => handleMaterialTypeClick(materialType)}\n >\n {materialType.label}\n </div>\n );\n });\n\n let currentMaterialTypeVNode: any = null;\n\n if (unref(currentMaterialType)) {\n currentMaterialTypeVNode = (\n <Fragment>\n <span>\n {unref(currentMaterialType)!.label}大小不超过\n {unref(currentMaterialType)!.limit} M\n </span>\n <MKWebFileUploadContext\n webFileUpload={unref(materialTable).upload}\n accept={unref(currentMaterialType)!.accept}\n >\n <MKUploadFile>\n <ElButton type=\"primary\">\n 选择{unref(currentMaterialType)!.label}\n </ElButton>\n </MKUploadFile>\n </MKWebFileUploadContext>\n </Fragment>\n );\n }\n\n const materialListVNodes = unref(materialList).map((material) => (\n <MaterialItem\n key={material.id}\n class=\"mk-material-list__item\"\n materialTable={unref(materialTable)}\n material={material}\n onMove={handleMoveClick}\n onCut={handleCutClick}\n onDownload={handleDownload}\n onClick={\n ((event: MouseEvent) =>\n handleMaterialItemClick(event, material)) as any\n }\n />\n ));\n\n return (\n <div class=\"mk-material-list\">\n <MaterialGroup materialGroupTree={unref(materialGroupTree)} />\n\n <div class=\"mk-material-list__main\" v-loading={unref(loading)}>\n <div class=\"mk-material-list__header\">\n <div class=\"mk-material-list__header-left\">\n <div class=\"mk-material-list__types\">{materialTypeVNodes}</div>\n </div>\n <div class=\"mk-material-list__header-right\">\n {currentMaterialTypeVNode}\n </div>\n </div>\n\n <div class=\"mk-material-list__body\">\n <MKDataTable dataTable={unref(materialTable)} autoLoad={false}>\n <ElScrollbar height=\"100%\">\n <div class=\"mk-material-list__wrapper\">\n {materialListVNodes}\n </div>\n </ElScrollbar>\n <div class=\"mk-material-list__footer\">\n <MKDataTablePagination dataTable={unref(materialTable)} />\n </div>\n </MKDataTable>\n </div>\n </div>\n </div>\n );\n };\n },\n});\n","import { withInstall } from \"@maketribe/utils\";\nimport MaterialList from \"./material-list\";\n\nexport const MKMaterialList = withInstall(MaterialList);\nexport default MKMaterialList;\n\nexport * from \"./material-list-options\";\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 {\n computed,\n defineComponent,\n unref,\n ref,\n onMounted,\n Ref,\n Fragment,\n} from \"vue\";\nimport { useHttpRequest } from \"../../../composables\";\nimport { verifyDialogProps, verifyDialogEmits } from \"./verify-dialog-option\";\nimport { WebHttpRequest } from \"@maketribe/request\";\nimport { Disposable, createDisposable } from \"@maketribe/utils\";\nimport { MSAppClient } from \"../../../core\";\n\n// 建一个私有的类吧客户端id放出来\n// const webHttpRequest = new (class InnerWebHttpRequest extends WebHttpRequest {\n// async getClientId() {\n// await this.loadClientIDPromise;\n// return this.clientID;\n// }\n// })();\n\nexport default defineComponent({\n name: \"VerifyPanel\",\n props: verifyDialogProps,\n emits: verifyDialogEmits,\n setup(props, { emit, expose }) {\n const wrapperEl: Ref<HTMLElement | null> = ref(null);\n const buttonEl: Ref<HTMLElement | null> = ref(null);\n const grandEl: Ref<HTMLElement | null> = ref(null);\n\n const httpRequest = MSAppClient.instance!.httpRequest;\n\n // 样式默认宽度是48px\n let slideWidth: number = 48;\n\n const isError = ref(false);\n\n const deg = ref(0);\n const imageUrl = ref(\"\");\n const loading = ref(false);\n const imageStyle = computed(() => {\n return {\n backgroundImage: `url(${unref(imageUrl)})`,\n transform: `rotate(-${unref(deg)}deg)`,\n };\n });\n\n const loadImage = async (): Promise<undefined> => {\n loading.value = true;\n\n try {\n const response = await httpRequest.get<Blob>(\n \"/ms/app/captcha/rotation/image\",\n {\n params: {\n scene: props.scene,\n t: Math.random(),\n },\n responseType: \"blob\",\n }\n );\n\n if (!(response.data instanceof Blob)) {\n return;\n }\n\n imageUrl.value = URL.createObjectURL(response.data);\n } finally {\n loading.value = false;\n }\n\n // const clientId = await webHttpRequest.getClientId();\n\n // return await new Promise(reslove=>{\n\n // const img = new Image();\n\n // img.onload = ()=>{\n // imageUrl.value = img.src;\n // reslove(undefined);\n // loading.value = false;\n // }\n\n // img.src = `/api/ms/app/captcha/rotation/image?scene=${props.scene}&t=${Math.random()}&rcid=${clientId}`\n // })\n };\n\n const handleSwitchConfirm = () => {\n emit(\"confirm\", unref(deg));\n };\n\n const handleMouseDown = (mouseDownEvent: MouseEvent | TouchEvent) => {\n if (unref(isError)) {\n return;\n }\n\n const startX =\n mouseDownEvent instanceof MouseEvent\n ? mouseDownEvent.clientX\n : mouseDownEvent.touches[0].clientX;\n const disposable = new Disposable();\n const totalWidth = unref(wrapperEl)!.getBoundingClientRect().width;\n\n const handleMouseMove = (event: MouseEvent | TouchEvent) => {\n const moveX =\n event instanceof MouseEvent\n ? event.clientX\n : event.touches[0].clientX;\n\n // 限定宽度范围\n slideWidth = Math.min(Math.max(moveX - startX + 48, 48), totalWidth);\n\n deg.value = Math.floor(((slideWidth - 48) / (totalWidth - 48)) * 360);\n\n unref(grandEl)!.style.width = `${slideWidth}px`;\n unref(buttonEl)!.style.transform = `translateX(${slideWidth - 48}px)`;\n };\n\n const handleMouseUp = (event: MouseEvent | TouchEvent) => {\n if (deg.value !== 0) {\n handleSwitchConfirm();\n }\n\n disposable.dispose();\n };\n\n document.addEventListener(\"mousemove\", handleMouseMove);\n document.addEventListener(\"touchmove\", handleMouseMove);\n document.addEventListener(\"mouseup\", handleMouseUp);\n document.addEventListener(\"touchend\", handleMouseUp);\n document.addEventListener(\"touchcancel\", handleMouseUp);\n\n disposable.register(\n createDisposable(() => {\n document.removeEventListener(\"mousemove\", handleMouseMove);\n document.removeEventListener(\"touchmove\", handleMouseMove);\n document.removeEventListener(\"mouseup\", handleMouseUp);\n document.removeEventListener(\"touchend\", handleMouseUp);\n document.removeEventListener(\"touchcancel\", handleMouseUp);\n })\n );\n };\n\n const reset = () => {\n unref(grandEl)!.style.width = ``;\n unref(buttonEl)!.style.transform = ``;\n };\n\n expose({\n fail: () => {\n isError.value = true;\n\n setTimeout(() => {\n isError.value = false;\n\n reset();\n }, 1000);\n },\n });\n\n onMounted(async () => {\n await loadImage();\n });\n\n return () => {\n return (\n <Fragment>\n <div class=\"mk-verify-dialog__wrapper\" v-loading={unref(loading)}>\n <div\n class=\"mk-verify-dialog__image\"\n ref=\"imageEl\"\n style={imageStyle.value}\n />\n <div class=\"mk-verify-dialog__coordinate\" />\n </div>\n <div class={[\"mk-verify-switch\", unref(isError) ? \"is-error\" : \"\"]}>\n <div\n class=\"mk-verify-switch__wrapper\"\n ref={((el: HTMLDivElement) => (wrapperEl.value = el)) as any}\n >\n <div\n class=\"mk-verify-switch__button-grand\"\n ref={((el: HTMLDivElement) => (grandEl.value = el)) as any}\n />\n <div\n class=\"mk-verify-switch__button\"\n ref={((el: HTMLDivElement) => (buttonEl.value = el)) as any}\n onMousedown={handleMouseDown}\n onTouchstart={handleMouseDown}\n />\n </div>\n </div>\n </Fragment>\n );\n };\n },\n});\n","import { Fragment, reactive } from \"vue\";\r\nimport { Dialoger } from \"@maketribe/dm\";\r\nimport VerifyPanel from \"./verify-panel\";\r\nimport { ElButton } from \"element-plus\";\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\";\nimport { MSAppClient } from \"../../../core\";\nimport { Dialoger, LoadingManager, Messager } from \"@maketribe/dm\";\nimport { R } from \"@maketribe/request\";\n\nexport type ResourceInfo = {\n name: string;\n path: string;\n isDirectory: boolean;\n extension: string;\n length: string;\n lastModified: string;\n isSelected: boolean;\n};\n\nexport type ResourceManagerOptions = {\n extensions?: string[];\n baseURL: string;\n};\n\nexport class ResourceManager extends Disposable {\n directories: string[];\n\n resourceInfoList: ResourceInfo[];\n\n loadingManager: LoadingManager;\n\n isShowEditDialog: boolean = false;\n\n currentEditText: string = \"\";\n\n filterExtensions: string[] = [];\n\n baseURL: string = \"\";\n\n get selectResourceList() {\n return this.resourceInfoList.filter((item) => item.isSelected);\n }\n\n get loading() {\n return this.loadingManager.loading;\n }\n\n constructor(options: ResourceManagerOptions) {\n super();\n\n this.directories = [];\n\n this.resourceInfoList = [];\n\n this.loadingManager = new LoadingManager();\n\n this.filterExtensions = options.extensions ?? [];\n this.baseURL = options.baseURL;\n }\n\n async loadResourceInfoList(\n toPath: string = this.directories.length\n ? `/${this.directories.join(\"/\")}`\n : \"\"\n ) {\n const httpRequest = MSAppClient.instance!.httpRequest;\n\n try {\n this.loadingManager.startLoading();\n\n const response = await httpRequest.post<R<ResourceInfo[]>>(\n `${this.baseURL}/list`,\n {\n directoryPath: toPath,\n extensions: this.filterExtensions,\n }\n );\n\n if (response.data.code !== 200) {\n Messager.error({ message: response.data.msg });\n this.resourceInfoList = [];\n return;\n }\n\n this.resourceInfoList = response.data.data.map((item) => ({\n ...item,\n isSelected: false,\n }));\n\n var directorySegments = toPath.startsWith(\"/\")\n ? toPath.slice(1).split(\"/\")\n : toPath.split(\"/\");\n\n this.directories = directorySegments.filter(Boolean);\n } catch (e) {\n console.error(e);\n\n Messager.error({ message: \"网络异常\" });\n } finally {\n this.loadingManager.completeLoading();\n }\n }\n\n async deleteSelectResourceList() {\n const httpRequest = MSAppClient.instance!.httpRequest;\n\n try {\n this.loadingManager.startLoading();\n\n const response = await httpRequest.post(`${this.baseURL}/delete`, {\n paths: this.selectResourceList.map((item) => item.path),\n });\n\n if (response.data.code !== 200) {\n Messager.error({ message: response.data.msg });\n this.loadResourceInfoList();\n return;\n }\n\n await this.loadResourceInfoList();\n } catch (e) {\n console.error(e);\n\n Messager.error({ message: \"网络异常\" });\n } finally {\n this.loadingManager.completeLoading();\n }\n }\n // 暂不做调整\n async getExistPathList(pathList: string[]) {\n const httpRequest = MSAppClient.instance!.httpRequest;\n\n try {\n this.loadingManager.startLoading();\n\n const directoryPath = this.directories.length\n ? `/${this.directories.join(\"/\")}`\n : \"\";\n\n return await httpRequest.post(`${this.baseURL}/exist-path-list`, {\n pathList,\n directoryPath,\n });\n } catch (e) {\n console.error(e);\n\n Messager.error({ message: \"网络异常\" });\n\n throw e;\n } finally {\n this.loadingManager.completeLoading();\n }\n }\n\n async uploadResourceList(files: File[]) {\n const httpRequest = MSAppClient.instance!.httpRequest;\n\n try {\n this.loadingManager.startLoading();\n\n var directory = this.directories.length\n ? `/${this.directories.join(\"/\")}`\n : \"\";\n\n var formData = new FormData();\n for (var i = 0; i < files.length; i++) {\n formData.append(files[i].name, files[i]);\n }\n formData.append(\"directory\", directory);\n\n const response = await httpRequest.post(`${this.baseURL}/save`, formData);\n\n if (response.data.code !== 200) {\n Messager.error({ message: response.data.msg });\n this.loadResourceInfoList();\n return;\n }\n\n await this.loadResourceInfoList();\n } catch (e) {\n console.error(e);\n\n Messager.error({ message: \"网络异常\" });\n } finally {\n this.loadingManager.completeLoading();\n }\n }\n\n async downloadSelectResource() {\n const httpRequest = MSAppClient.instance!.httpRequest;\n\n try {\n const response = await httpRequest.post<Blob>(\n `${this.baseURL}/download`,\n {\n path: this.selectResourceList[0].path,\n },\n { responseType: \"blob\" }\n );\n\n const url = URL.createObjectURL(response.data);\n\n var aElement = document.createElement(\"a\");\n aElement.href = url;\n aElement.target = \"_blank\";\n aElement.download = this.selectResourceList[0].name;\n\n aElement.click();\n\n URL.revokeObjectURL(url);\n } catch (e) {\n console.error(e);\n\n Messager.error({ message: \"网络异常\" });\n }\n }\n\n async editSelectFile() {\n const httpRequest = MSAppClient.instance!.httpRequest;\n\n try {\n this.loadingManager.startLoading();\n\n var resourceInfo = this.selectResourceList[0];\n\n const response = await httpRequest.post(`${this.baseURL}/text/read`, {\n path: resourceInfo.path,\n });\n\n this.isShowEditDialog = true;\n this.currentEditText = response.data.data;\n } finally {\n this.loadingManager.completeLoading();\n }\n }\n\n async saveEditFile() {\n const httpRequest = MSAppClient.instance!.httpRequest;\n\n try {\n this.loadingManager.startLoading();\n\n var resourceInfo = this.selectResourceList[0];\n\n const response = await httpRequest.post(`${this.baseURL}/text/write`, {\n path: resourceInfo.path,\n content: this.currentEditText,\n });\n\n if (response.data.code !== 200) {\n Messager.error({ message: response.data.msg });\n return;\n }\n\n await this.loadResourceInfoList();\n\n this.isShowEditDialog = false;\n this.currentEditText = \"\";\n } finally {\n this.loadingManager.completeLoading();\n }\n }\n\n clearAllSelect() {\n for (var resourceInfo of this.selectResourceList) {\n resourceInfo.isSelected = false;\n }\n }\n\n handleSelectClick(event: MouseEvent, item: ResourceInfo) {\n if (!event.ctrlKey) {\n this.clearAllSelect();\n\n item.isSelected = true;\n return;\n }\n\n item.isSelected = !item.isSelected;\n }\n}\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\";\nimport ResourceList from \"./resource-list.vue\";\n\nexport const MKResourceList = withInstall(ResourceList);\n\nexport default MKResourceList;\n\nexport * from \"./ResourceManager\";\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\";\nimport ResourceManager from \"./resource-manager.vue\";\n\nexport const MKResourceManager = withInstall(ResourceManager);\n\nexport default MKResourceManager;\n","import { Fragment, reactive } from \"vue\";\nimport {\n MKResourceSelectOptions,\n MKResourceSelectResult,\n} from \"./resource-select-types\";\nimport { Dialoger } from \"@maketribe/dm\";\nimport MKResourceList, { ResourceManager } from \"../resource-list\";\nimport { ElButton } from \"element-plus\";\n\nasync function ResourceSelect(\n options: MKResourceSelectOptions\n): Promise<MKResourceSelectResult> {\n return new Promise((resolve) => {\n const resourceManager = reactive(\n new ResourceManager(options)\n ) as ResourceManager;\n\n const dialogInstance = Dialoger.customRender({\n width: options.width ?? \"932px\",\n title: options.title ?? \"选择文件\",\n class: \"resource-select-dialog\",\n body: () => (\n <MKResourceList resourceManager={resourceManager}></MKResourceList>\n ),\n footer: () => {\n const file =\n resourceManager.selectResourceList.filter(\n (item) => !item.isDirectory\n )[0] ?? null;\n\n return (\n <Fragment>\n <ElButton\n onClick={() => {\n dialogInstance.destroy();\n resolve({ confirmed: false, data: null, path: \"\" });\n }}\n >\n 取消\n </ElButton>\n <ElButton\n type=\"primary\"\n disabled={!file}\n onClick={() => {\n dialogInstance.destroy();\n\n resolve({ confirmed: true, data: file, path: file.path });\n }}\n >\n 确认\n </ElButton>\n </Fragment>\n );\n },\n onClose: () => {\n setTimeout(() => {\n dialogInstance.destroy();\n }, 100);\n },\n });\n });\n}\n\nexport default ResourceSelect;\n","import ResourceSelect from \"./resource-select-api\";\nexport * from \"./resource-select-types\";\n\nexport const MKResourceSelect = ResourceSelect;\n\nexport default MKResourceSelect;\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","<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 { Dialog, DialogDescription, DialogPanel, DialogTitle, TransitionChild, TransitionRoot } from '@headlessui/vue'\r\nimport SvgIcon from \"../common/components/SvgIcon/index.vue\";\r\n\r\nwithDefaults(\r\n defineProps<{\r\n appear?: boolean\r\n title?: string\r\n preventClose?: boolean\r\n overlay?: boolean\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\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\" :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 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 <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","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\nimport HDialog from '../../new/ui-kit/HDialog.vue';\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 <HDialog\r\n class={dialogInstance.class}\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\n// import imgLogo from \"@/assets/images/logo.png\";\r\n\r\ndefineOptions({\r\n name: \"Logo\",\r\n});\r\n\r\nwithDefaults(\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\n// const title = ref(import.meta.env.VITE_APP_TITLE);\r\n// TODO\r\nconst title = ref(\"码客部落\");\r\n// TODO\r\nconst logo = ref('/favicon.ico');\r\n\r\nconst to = computed(() =>\r\n settingsStore.settings.home.enable ? settingsStore.settings.home.fullPath : \"\"\r\n);\r\n</script>\r\n\r\n<template>\r\n <RouterLink\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\"\r\n :src=\"logo\"\r\n class=\"logo h-[30px] w-[30px] object-contain\"\r\n />\r\n <span v-if=\"showTitle\" 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 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\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</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 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 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\";\nimport { Dialoger } from \"@maketribe/dm\";\nimport { MKMaterialList } from \"../material-list\";\nimport { MsMaterial, MsMaterialTable } from \"../../dataviews\";\nimport { ElButton } from \"element-plus\";\n\nexport type MKMaterialSelectOptions = {\n allowMaterialTypeValues?: any[];\n};\nexport type MKMaterialSelectResult = {\n success: boolean;\n data: MsMaterial | null;\n path: string;\n};\n\nexport default async function MaterialSelect(\n options: MKMaterialSelectOptions = {}\n): Promise<MKMaterialSelectResult> {\n return new Promise((resolve) => {\n const materialTable = reactive(new MsMaterialTable()) as MsMaterialTable;\n\n const handleCancelClick = () => {\n dialogInstance.destroy();\n\n resolve({ success: false, data: null, path: \"\" });\n };\n\n const handleConfirmClick = () => {\n dialogInstance.destroy();\n\n const selection = materialTable.getSelection()[0];\n\n const selectMaterial = materialTable\n .getList()\n .find((item) => item.id === selection);\n\n if (!selectMaterial) {\n resolve({ success: false, data: null, path: \"\" });\n return;\n }\n\n resolve({\n success: true,\n data: selectMaterial,\n path: selectMaterial.path,\n });\n };\n\n const dialogInstance = Dialoger.customRender({\n title: \"素材选择\",\n class: \"mk-material-select\",\n width: \"70%\",\n onClose: () => {\n dialogInstance.destroy();\n },\n body: () => {\n return (\n <MKMaterialList\n class=\"mk-material-select__list\"\n selectable\n materialTable={materialTable}\n allowMaterialTypeValues={options.allowMaterialTypeValues}\n />\n );\n },\n footer: () => {\n return (\n <Fragment>\n <ElButton onClick={handleCancelClick}>取消</ElButton>\n <ElButton\n type=\"primary\"\n disabled={materialTable.getSelection().length === 0}\n onClick={handleConfirmClick}\n >\n 确定\n </ElButton>\n </Fragment>\n );\n },\n });\n });\n}\n","import MaterialSelect from \"./material-select-api\";\n\nexport const MKMaterialSelect = MaterialSelect;\n\nexport default MaterialSelect;\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, \"&\").replace(/</g, \"<\").replace(/>/g, \">\").replace(/\"/g, \""\").replace(/'/g, \"'\");\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\";\nimport RichTextEditor from \"./rich-text-editor\"\n\nexport const MKRichTextEditor = withInstall(RichTextEditor );\n\nexport default MKRichTextEditor;\n\nexport * from \"./rich-text-editor-options\";\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\";\nimport { buildProps } from \"@maketribe/utils\";\nimport { MsMaterialType } from \"../dataviews\";\n\nexport const materialUploadContextProps = buildProps({\n allowMaterialTypeValues: {\n type: Array<MsMaterialType[\"value\"]>,\n },\n} as const);\n\nexport type MaterialUploadContextProps = ExtractPropTypes<\n typeof materialUploadContextProps\n>;\n","import { computed, defineComponent, inject, unref, watch } from \"vue\";\nimport { materialUploadContextProps } from \"./material-upload-context-options\";\nimport { MaterialUploadContext } from \"./MaterialUploadContext\";\nimport { UploadContextCtxKey } from \"../../../components/basic/upload-file\";\nimport { withInstall } from \"@maketribe/utils\";\n\nconst _MaterialUploadContext = defineComponent({\n name: \"MKMaterialUploadContext\",\n props: materialUploadContextProps,\n inheritAttrs: false,\n setup(props, { slots }) {\n const allowMaterialTypeValues = computed(\n () => props.allowMaterialTypeValues\n );\n\n const materialUploadContext = new MaterialUploadContext({\n allowMaterialTypeValues: unref(allowMaterialTypeValues) ?? [],\n });\n\n watch(allowMaterialTypeValues, (allowMaterialTypeValues) => {\n materialUploadContext.setAllowMaterialTypeValues(\n allowMaterialTypeValues ?? []\n );\n });\n\n inject(UploadContextCtxKey, { uploadContext: materialUploadContext });\n\n return () => {\n return slots.default?.();\n };\n },\n});\n\nexport const MKMaterialUploadContext = withInstall(_MaterialUploadContext);\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\";\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 {\n DataTable,\n DataTableOptions,\n TableActionColumn,\n TableColumn,\n} from \"@maketribe/dm\";\nimport { DATA_MODEL_NAME } from \"../../../../constants\";\nimport { MODULE_NAME } from \"../../constants\";\n\nexport class CmsAdContentsTable extends DataTable {\n static [DATA_MODEL_NAME]: string = \"ad-content\";\n constructor(options: Omit<DataTableOptions, \"name\"> = {}) {\n super({\n name: CmsAdContentsTable[DATA_MODEL_NAME],\n moduleName: MODULE_NAME,\n ...options,\n });\n }\n\n protected async initialize() {\n await super.initialize();\n\n this.setColumns([\n new TableColumn({ name: \"desc\", label: \"描述\" }),\n new TableColumn({ name: \"title\", label: \"标题\" }),\n new TableColumn({ name: \"type\", label: \"素材类型\" }),\n new TableColumn({\n name: \"path\",\n label: \"素材路径\",\n componentInfo: \"MKColumnImage\",\n }),\n new TableColumn({ name: \"link\", label: \"跳转链接\" }),\n new TableActionColumn(),\n ]);\n }\n}\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\";\nimport { DATA_MODEL_NAME } from \"../../../../constants\";\nimport { MODULE_NAME } from \"../../constants\";\nimport { OrderType, R, ResponseConfig } from \"@maketribe/request\";\nimport { MSAppClient } from \"../../../../core\";\n\nexport class CmsPartTree extends DataTree {\n\tstatic [DATA_MODEL_NAME]: string = \"part\";\n\n\tconstructor(options: Omit<DataTableOptions, \"name\"> = {}) {\n\t\tsuper({\n\t\t\tname: CmsPartTree[DATA_MODEL_NAME],\n\t\t\tmoduleName: MODULE_NAME,\n\t\t\tprops: { parent: \"parentId\" },\n sortFieldName: \"sortNo\",\n\t\t\t...options,\n\t\t});\n\t}\n\n\tprotected async initialize() {\n\t\tawait super.initialize();\n \n\t\tthis.sorter.setColumnSort(\"sortNo\", OrderType.DESC);\n\n\t\t// const { data } = await new CmsPartTypesTable().dataViewRequest.allList();\n\n\t\t// this.dataFilter.setColumns([new FilterColumn({ name: \"name\", label: \"栏目名称\" })]);\n\n\t\tthis.setColumns([\n\t\t\tnew TableColumn({\n\t\t\t\tname: \"data.name\",\n\t\t\t\tlabel: \"栏目名称\",\n\t\t\t\talign: \"left\",\n\t\t\t\twidth: \"150px\",\n\t\t\t}),\n\t\t\t// new TableColumn({\n\t\t\t// \tname: \"data.cmsPartTypeId\",\n\t\t\t// \tlabel: \"栏目类型\",\n\t\t\t// \tcomponentInfo: \"MKColumnObjectMappingText\",\n\t\t\t// \tcomponentProps: {\n\t\t\t// \t\tmapping: data.data.reduce((result, cur) => {\n\t\t\t// \t\t\tresult[cur.id] = cur.desc;\n\t\t\t// \t\t\treturn result;\n\t\t\t// \t\t}, {}),\n\t\t\t// \t},\n\t\t\t// }),\n\t\t\tnew TableColumn({\n\t\t\t\tname: \"data.isHome\",\n\t\t\t\tlabel: \"是否是首页\",\n\t\t\t\tcomponentInfo: \"MKColumnObjectMappingText\",\n\t\t\t\tcomponentProps: {\n\t\t\t\t\tmapping: [\"否\", \"是\"],\n\t\t\t\t},\n\t\t\t}),\n\t\t\tnew TableColumn({\n\t\t\t\tname: \"data.isShowMenu\",\n\t\t\t\tlabel: \"是否在菜单\",\n\t\t\t\tcomponentInfo: \"MKColumnObjectMappingText\",\n\t\t\t\tcomponentProps: {\n\t\t\t\t\tmapping: [\"否\", \"是\"],\n\t\t\t\t},\n\t\t\t}),\n\t\t\tnew TableColumn({ name: \"sortNo\", label: \"排序号\" }),\n\t\t\tnew TableActionColumn({\n\t\t\t\twidth: \"180px\",\n\t\t\t\tbuttons: [\n\t\t\t\t\tnew EditButton(),\n\t\t\t\t\tnew DeleteButton(),\n\t\t\t\t\tnew ActionButton({\n\t\t\t\t\t\tlabel: \"栏目文章\",\n\t\t\t\t\t\thandler: (item) => {\n\t\t\t\t\t\t\tMSAppClient.instance?.vueRouter.push({\n\t\t\t\t\t\t\t\tpath: \"/dv/article\",\n\t\t\t\t\t\t\t\tquery: {\n\t\t\t\t\t\t\t\t\tcmsPartId: item.data.id,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t},\n\t\t\t\t\t}),\n\t\t\t\t],\n\t\t\t}),\n\t\t]);\n\t}\n\n\tpublic nodeHasChildren(node: DataTreeNode<any>): boolean {\n\t\treturn true;\n\t\t// return ![\"1\"].includes(node.data.cmsPartTypeId);\n\t}\n\n load(params?: Record<string, any>): Promise<ResponseConfig<R<any[]> & { totalRecCount: string; }>> {\n return this.loadAll(params);\n }\n\n\tformatItem(item: any) {\n\t\titem.children = item.children || [];\n\n\t\treturn item;\n\t}\n\n}\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 {\n DataTable,\n DataTableOptions,\n TableActionColumn,\n TableColumn,\n} from \"@maketribe/dm\";\nimport { DATA_MODEL_NAME } from \"../../../../../constants\";\nimport { MODULE_NAME } from \"../../../constants\";\n\nexport class CmsArticleAtlasTable extends DataTable {\n static [DATA_MODEL_NAME]: string = \"article-atlas\";\n constructor(options: Omit<DataTableOptions, \"name\"> = {}) {\n super({\n name: CmsArticleAtlasTable[DATA_MODEL_NAME],\n moduleName: MODULE_NAME,\n ...options,\n });\n }\n\n protected async initialize() {\n await super.initialize();\n\n this.setColumns([\n new TableColumn({ name: \"key\", label: \"图集标识\" }),\n new TableColumn({ name: \"title\", label: \"标题\" }),\n new TableColumn({\n name: \"path\",\n label: \"图片路径\",\n componentInfo: \"MKColumnImage\",\n }),\n new TableColumn({ name: \"sortNo\", label: \"跳转链接\" }),\n new TableActionColumn(),\n ]);\n }\n}\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":["l","c","a","RouteType","MenuType","RegionLevel","LoginLogType","Components","defineAsyncComponent","ElInput","ElInputNumber","Operator","path","Disposable","Event","list","menus","_a","index","vueRouter","createDisposable","uid","ACCESS_TOKEN_HEADER","X_ACCESS_TOKEN_HEADER","AUTHORIZATION","AUTHORIZATION_PREFIX","X_AUTHORIZATION","code","md5","defaultsDeep","settingsDefault","defineStore","ref","watch","computed","menu","item","defaultOpenedPaths","vueRoute","_b","I18n","HttpRequest","DVQueryable","WebHttpRequest","createRouter","createWebHashHistory","module","ComponentsCombine","SkeletonMessageSender","ElMessage","ElNotification","buildProps","DataTable","defineComponent","unref","options","modelValue","isEqual","Where","selections","handleClick","withInstall","SvgIcon","name","props","buttonProps","emits","buttonEmits","setup","emit","icon","_createVNode","MKSvgIcon","text","label","ElButton","type","link","default","getCurrentInstance","inject","provide","_isSlot","s","Object","prototype","toString","call","_isVNode","inheritAttrs","configProviderProps","slots","provideGlobalConfig","currentLocale","i18n","currentLanguage","_slot","ElConfigProvider","renderSlot","dataTableSelectProps","dataTableSelectEmits","abstractSelectInstance","dataTable","get","set","v","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","total","Number","required","currentPage","pageSize","pageSizes","Array","paginationEmits","handleCurrentPageChange","handlePageSizeChange","_createTextVNode","ElPagination","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","Search","ElScrollbar","WebFileUpload","fileSelect","_WebFileUploadContext","webFileUploadContextProps","accept","webFileUpload","webFileUploadContext","WebFileUploadContext","setAccept","setWebFileUpload","UploadContextCtxKey","uploadContext","MKWebFileUploadContext","_UploadFile","uploadFileProps","uploadFileEmits","uploadContextCtx","handleUpload","uploadResult","selectFile","success","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","h","watchEffect","onUnmounted","OverflowNode","$rootTextContent","mergeRegister","$dfs","$isOverflowNode","selection","$getSelection","$isRangeSelection","$isTextNode","$isLeafNode","$setSelection","$createOverflowNode","COMMAND_PRIORITY_HIGH","readonly","$isRootTextContentEmptyCurry","ElementNode","DecoratorNode","createCommand","$createParagraphNode","$copyNode","$isElementNode","ArtificialNode__DO_NOT_USE","$createLineBreakNode","$isBlockElementNode","isInlineDomNode","isBlockDomNode","$isRootOrShadowRoot","$cloneWithProperties","$sliceSelectedTextNodeContent","isHTMLElement","$getRoot","showLinkEditDialog","href","Promise","resolve","reject","hrefValue","handleCancelClick","dialogInstance","destroy","handleConfirmClick","customRender","class","onClose","body","$event","prepend","footer","MODULE_NAME","DataForm","FormColumn","DataTree","valueFormColumn","RefreshButton","AddButton","TableHeaderItem","_c","FilterColumn","TableColumn","TableActionColumn","UploadError","DvOpt","Messager","DataFormType","ActionButton","EditButton","DeleteButton","FormDetailColumn","Group","postTraverse","permissionPointDefine","roleMenu","reactive","components","componentProps","columnComponentInfo","isWhereFilter","isRef","_","onBeforeUnmount","isShowDataForm","dataFormItemProps","dataFormContext","DATA_FORM_CONTEXT_KEY","dataForm","_formColumn","existFormColumn","getColumn","formColumn","existingColumn","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","NONE","nextTick","findIndex","formModel","dispose","initd","detailColumns","MKDataFormItem","ElDivider","ElForm","formViewProps","isChange","isChanged","handleSave","simpleSubmit","handleCancel","cancel","_slot2","ElCard","MKForm","allowSubmit","translate","createDataForm","query","aesEncrypt","isEmpty","aesDecrypt","dataTablePaginationProps","dataTableContext","DATA_TABLE_CONTEXT_KEY","MKPagination","totalRecCount","pageTo","setPageSize","dataTableColumnProps","tableColumn","useTableColumnComponent","TableColumnComponent","row","tableProps","treeProps","dataTableEl","tableEl","rowKey","primaryKey","getList","selectionColumn","handleSortChange","prop","order","orderType","OrderType","DESC","ASC","sorter","setColumnSort","allowChangeSelection","handleSelectionChange","items","_tableEl","getSelection","tableSelections","getSelectionRows","sort","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","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","userInfo","isSuper","setColumns","MemberNickNameColumn","MemberRolesColumn","buttons","handler","dataFormDialog","recId","member","confirm","cancelButtonText","confirmButtonText","loadingManager","startLoading","response","dataViewRequest","callDVRequest","action","color","marginRight","cursor","input","createElement","appendChild","setAttribute","select","execCommand","removeChild","completeLoading","update","isLock","errorCount","unlockDatetime","defaultValue","beforeSubmitEvent","approveMember","rolesColumn","valueChangeEvent","getLoadingManager","_data","Memo","memo","approveResult","MKCopyContainer","formatItem","CancelToken","DataFormClass","DataTableClass","DataTreeClass","TableHeaderButton","materialGroupTree","MsMaterialGroupTree","materialGroupForm","MsMaterialGroupForm","ElPopover","MKDataForm","reference","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","ImageCropper","imageCropperContentEl","size","getCropData","bind","ImageCropperContent","RATIO_OPTIONS","materialListProps","_materialTable","MsMaterialTable","materialForm","MsMaterialForm","checkStrictly","materialTable","materialTypes","getMaterialTypes","currentMaterialType","currentMaterialTypeId","materialList","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","createInstance","save","handleNewClick","handleDownload","materialTypeVNodes","className","currentMaterialTypeVNode","limit","materialListVNodes","MaterialItem","MaterialGroup","selectState","imageUpload","random","Error","ImageEditPanelComponent","expose","attrs","margin","t","r","b","vals","split","selectImage","file","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","createEditor","FORMAT_TEXT_COMMAND","TOGGLE_LINK_COMMAND","$patchStyleText","$setBlocksType","$createHeadingNode","CAN_UNDO_COMMAND","CAN_REDO_COMMAND","$findMatchingParent","$isHeadingNode","$getSelectionStyleValueForProperty","_e","_d","_g","_f","_h","$isLinkNode","$isNodeSelection","UNDO_COMMAND","REDO_COMMAND","$getNodeByKey","$createNodeSelection","$getNextRightPreorderNode","HeadingNode","TextNode","createEmptyHistoryState","registerHistory","KEY_TAB_COMMAND","OUTDENT_CONTENT_COMMAND","INDENT_CONTENT_COMMAND","COMMAND_PRIORITY_EDITOR","$isParagraphNode","shallowRef","CLICK_COMMAND","SELECTION_CHANGE_COMMAND","$isRootNode","activeTabName","selectLocalImage","ImageSelect","cutWidth","cutHeight","isCut","ImageSelectPanel","dataRef","formItems","condition","resloveComponent","resolveComponent","defaultSlot","dt","cutSize","ImageUploadContext","labelPosition","model","style","overflow","padding","Fragment","ElLoading","$insertNodeToNearestRoot","AutoLinkNode","LinkNode","CodeHighlightNode","CodeNode","QuoteNode","COMMAND_PRIORITY_LOW","DRAG_DROP_PASTE","mediaFileReader","isMimeType","$toggleLink","hashtag","$createHashtagNode","HashtagNode","registerLexicalTextEntity","$createListNode","$createListItemNode","$isListItemNode","ListNode","ListItemNode","INSERT_UNORDERED_LIST_COMMAND","INSERT_ORDERED_LIST_COMMAND","REMOVE_LIST_COMMAND","removeList","INSERT_PARAGRAPH_COMMAND","$handleListInsertParagraph","$getNearestNodeFromDOMNode","$isListNode","INSERT_CHECK_LIST_COMMAND","insertList","KEY_ARROW_DOWN_COMMAND","KEY_ARROW_UP_COMMAND","KEY_ESCAPE_COMMAND","KEY_SPACE_COMMAND","KEY_ARROW_LEFT_COMMAND","TableCellNode","TableNode","TableRowNode","$getNodeTriplet","$computeTableMap","$isTableRowNode","$isTableCellNode","$createTableCellNode","$insertFirst","applyTableHandlers","$nodesOfType","$isTableNode","INSERT_TABLE_COMMAND","$createTableNodeWithDimensions","$canShowPlaceholderCurry","Teleport","registerRichText","registerPlainText","registerDragonSupport","copyContainer","copyHandle","copyText","innerText","navigator","clipboard","writeText","showEditPanel","moduleOptons","showDynamicFormDialoger","showModuleSelectPanel","selectComponentOption","ElCollapse","ElCollapseItem","PageEditor","shallowReactive","ViewDevice","VisualPageEditor","verifyDialogProps","verifyDialogEmits","wrapperEl","buttonEl","grandEl","httpRequest","slideWidth","isError","deg","imageUrl","imageStyle","backgroundImage","transform","loadImage","params","scene","responseType","Blob","createObjectURL","handleSwitchConfirm","handleMouseDown","mouseDownEvent","startX","MouseEvent","clientX","touches","totalWidth","getBoundingClientRect","handleMouseMove","moveX","min","floor","handleMouseUp","addEventListener","removeEventListener","fail","setTimeout","OpenVerifyCode","VerifyPanel","sence","LoadingManager","ResourceList","ResourceManager","ResourceSelect","resourceManager","MKResourceList","selectResourceList","isDirectory","confirmed","DialogerImpl","SkeletonDialoger","dialogInstanceCreateEvent","prompt","promptResult","alert","visibleChangeEvent","destroyEvent","custom","onConfirm","isFunction","onCancel","once","actionColumnName","handleConfirm","dataFormOptions","customDataFormStatus","_useModel","dialogInstances","dialogImplInstance","implInstance","handleClose","dialogs","HDialog","makeInstaller","version","Notificationer","createVNode","_sfc_render","_openBlock","_createElementBlock","_hoisted_1","useFullscreen","useTimeoutFn","useRoute","useElementSize","useMagicKeys","onBeforeUpdate","breadcrumbList","compile","cloneDeep","useClipboard","NewLayout","MaterialSelect","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","html","MKError","Errors","encodePath","createPinia"],"mappings":"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"}
|