From 2ae3ff54934546024fae30dc6065c1de829750d1 Mon Sep 17 00:00:00 2001 From: ruying408 <1877972603@qq.com> Date: Sun, 13 Apr 2025 20:49:43 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../deps_temp_910682de/chunk-CQOUZRMK.js | 12542 ---------------- .../deps_temp_910682de/chunk-CQOUZRMK.js.map | 7 - .../deps_temp_910682de/chunk-MSWVC7RX.js | 9719 ------------ .../deps_temp_910682de/chunk-MSWVC7RX.js.map | 7 - .../cache/deps_temp_910682de/package.json | 3 - .../vitepress___@vue_devtools-api.js | 4504 ------ .../vitepress___@vue_devtools-api.js.map | 7 - .../vitepress___@vueuse_core.js | 583 - .../vitepress___@vueuse_core.js.map | 7 - ...ess___@vueuse_integrations_useFocusTrap.js | 1145 -- ...__@vueuse_integrations_useFocusTrap.js.map | 7 - .../vitepress___mark__js_src_vanilla__js.js | 1665 -- ...itepress___mark__js_src_vanilla__js.js.map | 7 - .../vitepress___minisearch.js | 1812 --- .../vitepress___minisearch.js.map | 7 - .vitepress/cache/deps_temp_910682de/vue.js | 343 - .../cache/deps_temp_910682de/vue.js.map | 7 - .vitepress/dist/404.html | 4 +- .vitepress/dist/README.html | 12 +- .vitepress/dist/assets/README.md.B6Ga_CkE.js | 1 + .../dist/assets/README.md.B6Ga_CkE.lean.js | 1 + .vitepress/dist/assets/README.md.Rd2D_BZq.js | 1 - .../dist/assets/README.md.Rd2D_BZq.lean.js | 1 - .../{app.CVFqtsWk.js => app.B1l1PJ-k.js} | 2 +- .../chunks/@localSearchIndexroot.CyyBpyLd.js | 1 - .../chunks/@localSearchIndexroot.DESyfF_S.js | 1 + .../chunks/VPLocalSearchBox.CRB2ZbE3.js | 8 + .../chunks/VPLocalSearchBox.Dtbezcl8.js | 8 - .../dist/assets/chunks/framework.BKXlU_Nx.js | 18 + .../dist/assets/chunks/framework.BjhQB2K5.js | 17 - .../dist/assets/chunks/theme.C9_-QGMz.js | 4 + .../dist/assets/chunks/theme.Dh5vPo0_.js | 4 - ...ex.md.Dsd7aigo.js => index.md.rtwKissJ.js} | 2 +- ...aigo.lean.js => index.md.rtwKissJ.lean.js} | 2 +- .../assets/src_about_index.md.-unb0L2u.js | 1 - .../src_about_index.md.-unb0L2u.lean.js | 1 - .../assets/src_about_index.md.C_NFm4P1.js | 1 + .../src_about_index.md.C_NFm4P1.lean.js | 1 + .../dist/assets/src_guide_ai.md.Cpqw5Ts-.js | 1 + .../assets/src_guide_ai.md.Cpqw5Ts-.lean.js | 1 + .../dist/assets/src_guide_ai.md.aIl2n3N7.js | 1 - .../assets/src_guide_ai.md.aIl2n3N7.lean.js | 1 - ...oE7d.js => src_guide_cache.md.CngBGKWx.js} | 4 +- .../src_guide_cache.md.CngBGKWx.lean.js | 1 + .../src_guide_cache.md.DYexoE7d.lean.js | 1 - ...js => src_guide_controller.md.Bnr5Inb1.js} | 4 +- .../src_guide_controller.md.Bnr5Inb1.lean.js | 1 + .../src_guide_controller.md.ChJ_NED0.lean.js | 1 - .../dist/assets/src_guide_db.md.CH-r16iF.js | 1 - .../assets/src_guide_db.md.CH-r16iF.lean.js | 1 - .../dist/assets/src_guide_db.md.Dcqu3WUK.js | 1 + .../assets/src_guide_db.md.Dcqu3WUK.lean.js | 1 + ...XEU.js => src_guide_deploy.md.C0fiYODu.js} | 4 +- .../src_guide_deploy.md.C0fiYODu.lean.js | 1 + .../src_guide_deploy.md.CVc1dXEU.lean.js | 1 - ...1UjwvK.js => src_guide_dev.md.Cdra16SF.js} | 4 +- .../assets/src_guide_dev.md.Cdra16SF.lean.js | 1 + .../assets/src_guide_dev.md.DM1UjwvK.lean.js | 1 - .../assets/src_guide_dir.md.Bywk12Mo.lean.js | 1 - ...wk12Mo.js => src_guide_dir.md.XwivTI0b.js} | 4 +- .../assets/src_guide_dir.md.XwivTI0b.lean.js | 1 + .../src_guide_exception.md.1HCd76m1.lean.js | 1 - ....js => src_guide_exception.md.CQgM0zu7.js} | 4 +- .../src_guide_exception.md.CQgM0zu7.lean.js | 1 + .../dist/assets/src_guide_flow.md.DMDsOCkF.js | 1 - .../assets/src_guide_flow.md.DMDsOCkF.lean.js | 1 - .../dist/assets/src_guide_flow.md.d_l3AjDo.js | 1 + .../assets/src_guide_flow.md.d_l3AjDo.lean.js | 1 + .../dist/assets/src_guide_i18n.md.D4ikqxxm.js | 4 - .../assets/src_guide_i18n.md.D4ikqxxm.lean.js | 1 - .../dist/assets/src_guide_i18n.md.DKQqA29O.js | 4 + .../assets/src_guide_i18n.md.DKQqA29O.lean.js | 1 + .../src_guide_initData.md.BhdPvNop.lean.js | 1 - ...p.js => src_guide_initData.md.CPwPPPgb.js} | 4 +- .../src_guide_initData.md.CPwPPPgb.lean.js | 1 + .../dist/assets/src_guide_lock.md.B34nqu5N.js | 11 + .../assets/src_guide_lock.md.B34nqu5N.lean.js | 1 + .../dist/assets/src_guide_lock.md.C8JTDlsP.js | 11 - .../assets/src_guide_lock.md.C8JTDlsP.lean.js | 1 - ...c_guide_noRepeatSubmit.md.CvFjLc1r.lean.js | 1 - ...> src_guide_noRepeatSubmit.md.DIyr__Bf.js} | 4 +- ...c_guide_noRepeatSubmit.md.DIyr__Bf.lean.js | 1 + ...REO.js => src_guide_plugin.md.CyRIknxk.js} | 4 +- .../src_guide_plugin.md.CyRIknxk.lean.js | 1 + .../src_guide_plugin.md.DSQp6REO.lean.js | 1 - ...bvkh.js => src_guide_quick.md.DotkVVeu.js} | 6 +- .../src_guide_quick.md.DotkVVeu.lean.js | 1 + .../src_guide_quick.md.g_DIbvkh.lean.js | 1 - .../src_guide_recordLog.md.B0w4IZH7.lean.js | 1 - ....js => src_guide_recordLog.md.Ct7SggAu.js} | 4 +- .../src_guide_recordLog.md.Ct7SggAu.lean.js | 1 + ...9.js => src_guide_security.md.B2rQeGT7.js} | 4 +- .../src_guide_security.md.B2rQeGT7.lean.js | 1 + .../src_guide_security.md.BFmZQZP9.lean.js | 1 - ...eI.js => src_guide_service.md.BSPrcE3u.js} | 4 +- .../src_guide_service.md.BSPrcE3u.lean.js | 1 + .../src_guide_service.md.CokY9neI.lean.js | 1 - ...BH.js => src_guide_swagger.md.B2QMWjN_.js} | 4 +- .../src_guide_swagger.md.B2QMWjN_.lean.js | 1 + .../src_guide_swagger.md.CCfA6TBH.lean.js | 1 - .../assets/src_guide_tenant.md.A1tSE7xk.js | 5 + .../src_guide_tenant.md.A1tSE7xk.lean.js | 1 + .../assets/src_guide_tenant.md.CP_z92JB.js | 5 - .../src_guide_tenant.md.CP_z92JB.lean.js | 1 - ...s => src_guide_uniqueIDGen.md.2lkhYWAH.js} | 4 +- .../src_guide_uniqueIDGen.md.2lkhYWAH.lean.js | 1 + .../src_guide_uniqueIDGen.md.BNiKKfQz.lean.js | 1 - ...FKU.js => src_guide_upload.md.90xW7PAK.js} | 4 +- .../src_guide_upload.md.90xW7PAK.lean.js | 1 + .../src_guide_upload.md.D-dQqFKU.lean.js | 1 - .../assets/src_introduce_index.md.BaUz4Xtw.js | 1 - .../src_introduce_index.md.BaUz4Xtw.lean.js | 1 - .../assets/src_introduce_index.md.DIqLm5J3.js | 1 + .../src_introduce_index.md.DIqLm5J3.lean.js | 1 + .../assets/src_introduce_show.md.Ck0DuCIX.js | 1 - .../src_introduce_show.md.Ck0DuCIX.lean.js | 1 - .../assets/src_introduce_show.md.Dy5qurfj.js | 1 + .../src_introduce_show.md.Dy5qurfj.lean.js | 1 + .../assets/src_introduce_src.md.BO7rlY2n.js | 1 + .../src_introduce_src.md.BO7rlY2n.lean.js | 1 + .../assets/src_introduce_src.md.UlNmfnNt.js | 1 - .../src_introduce_src.md.UlNmfnNt.lean.js | 1 - .../assets/src_question_common.md.BqW7OjdF.js | 1 + .../src_question_common.md.BqW7OjdF.lean.js | 1 + .../assets/src_question_common.md.Caojqqth.js | 1 - .../src_question_common.md.Caojqqth.lean.js | 1 - .../dist/assets/src_todo_plan.md.CISv3gFT.js | 1 + .../assets/src_todo_plan.md.CISv3gFT.lean.js | 1 + .../dist/assets/src_todo_plan.md.pGnBM6_r.js | 1 - .../assets/src_todo_plan.md.pGnBM6_r.lean.js | 1 - .../assets/src_todo_update.md.C-VVOl5_.js | 1 + .../src_todo_update.md.C-VVOl5_.lean.js | 1 + .../assets/src_todo_update.md.DUbMUQW8.js | 1 - .../src_todo_update.md.DUbMUQW8.lean.js | 1 - .vitepress/dist/hashmap.json | 2 +- .vitepress/dist/index.html | 12 +- .vitepress/dist/src/about/index.html | 12 +- .vitepress/dist/src/guide/ai.html | 12 +- .vitepress/dist/src/guide/cache.html | 12 +- .vitepress/dist/src/guide/controller.html | 12 +- .vitepress/dist/src/guide/db.html | 12 +- .vitepress/dist/src/guide/deploy.html | 12 +- .vitepress/dist/src/guide/dev.html | 12 +- .vitepress/dist/src/guide/dir.html | 12 +- .vitepress/dist/src/guide/exception.html | 12 +- .vitepress/dist/src/guide/flow.html | 12 +- .vitepress/dist/src/guide/i18n.html | 14 +- .vitepress/dist/src/guide/initData.html | 12 +- .vitepress/dist/src/guide/lock.html | 12 +- .vitepress/dist/src/guide/noRepeatSubmit.html | 12 +- .vitepress/dist/src/guide/plugin.html | 12 +- .vitepress/dist/src/guide/quick.html | 12 +- .vitepress/dist/src/guide/recordLog.html | 12 +- .vitepress/dist/src/guide/security.html | 12 +- .vitepress/dist/src/guide/service.html | 12 +- .vitepress/dist/src/guide/swagger.html | 12 +- .vitepress/dist/src/guide/tenant.html | 12 +- .vitepress/dist/src/guide/uniqueIDGen.html | 12 +- .vitepress/dist/src/guide/upload.html | 12 +- .vitepress/dist/src/introduce/index.html | 12 +- .vitepress/dist/src/introduce/show.html | 12 +- .vitepress/dist/src/introduce/src.html | 12 +- .vitepress/dist/src/question/common.html | 12 +- .vitepress/dist/src/todo/plan.html | 12 +- .vitepress/dist/src/todo/update.html | 12 +- 165 files changed, 318 insertions(+), 32689 deletions(-) delete mode 100644 .vitepress/cache/deps_temp_910682de/chunk-CQOUZRMK.js delete mode 100644 .vitepress/cache/deps_temp_910682de/chunk-CQOUZRMK.js.map delete mode 100644 .vitepress/cache/deps_temp_910682de/chunk-MSWVC7RX.js delete mode 100644 .vitepress/cache/deps_temp_910682de/chunk-MSWVC7RX.js.map delete mode 100644 .vitepress/cache/deps_temp_910682de/package.json delete mode 100644 .vitepress/cache/deps_temp_910682de/vitepress___@vue_devtools-api.js delete mode 100644 .vitepress/cache/deps_temp_910682de/vitepress___@vue_devtools-api.js.map delete mode 100644 .vitepress/cache/deps_temp_910682de/vitepress___@vueuse_core.js delete mode 100644 .vitepress/cache/deps_temp_910682de/vitepress___@vueuse_core.js.map delete mode 100644 .vitepress/cache/deps_temp_910682de/vitepress___@vueuse_integrations_useFocusTrap.js delete mode 100644 .vitepress/cache/deps_temp_910682de/vitepress___@vueuse_integrations_useFocusTrap.js.map delete mode 100644 .vitepress/cache/deps_temp_910682de/vitepress___mark__js_src_vanilla__js.js delete mode 100644 .vitepress/cache/deps_temp_910682de/vitepress___mark__js_src_vanilla__js.js.map delete mode 100644 .vitepress/cache/deps_temp_910682de/vitepress___minisearch.js delete mode 100644 .vitepress/cache/deps_temp_910682de/vitepress___minisearch.js.map delete mode 100644 .vitepress/cache/deps_temp_910682de/vue.js delete mode 100644 .vitepress/cache/deps_temp_910682de/vue.js.map create mode 100644 .vitepress/dist/assets/README.md.B6Ga_CkE.js create mode 100644 .vitepress/dist/assets/README.md.B6Ga_CkE.lean.js delete mode 100644 .vitepress/dist/assets/README.md.Rd2D_BZq.js delete mode 100644 .vitepress/dist/assets/README.md.Rd2D_BZq.lean.js rename .vitepress/dist/assets/{app.CVFqtsWk.js => app.B1l1PJ-k.js} (66%) delete mode 100644 .vitepress/dist/assets/chunks/@localSearchIndexroot.CyyBpyLd.js create mode 100644 .vitepress/dist/assets/chunks/@localSearchIndexroot.DESyfF_S.js create mode 100644 .vitepress/dist/assets/chunks/VPLocalSearchBox.CRB2ZbE3.js delete mode 100644 .vitepress/dist/assets/chunks/VPLocalSearchBox.Dtbezcl8.js create mode 100644 .vitepress/dist/assets/chunks/framework.BKXlU_Nx.js delete mode 100644 .vitepress/dist/assets/chunks/framework.BjhQB2K5.js create mode 100644 .vitepress/dist/assets/chunks/theme.C9_-QGMz.js delete mode 100644 .vitepress/dist/assets/chunks/theme.Dh5vPo0_.js rename .vitepress/dist/assets/{index.md.Dsd7aigo.js => index.md.rtwKissJ.js} (99%) rename .vitepress/dist/assets/{index.md.Dsd7aigo.lean.js => index.md.rtwKissJ.lean.js} (99%) delete mode 100644 .vitepress/dist/assets/src_about_index.md.-unb0L2u.js delete mode 100644 .vitepress/dist/assets/src_about_index.md.-unb0L2u.lean.js create mode 100644 .vitepress/dist/assets/src_about_index.md.C_NFm4P1.js create mode 100644 .vitepress/dist/assets/src_about_index.md.C_NFm4P1.lean.js create mode 100644 .vitepress/dist/assets/src_guide_ai.md.Cpqw5Ts-.js create mode 100644 .vitepress/dist/assets/src_guide_ai.md.Cpqw5Ts-.lean.js delete mode 100644 .vitepress/dist/assets/src_guide_ai.md.aIl2n3N7.js delete mode 100644 .vitepress/dist/assets/src_guide_ai.md.aIl2n3N7.lean.js rename .vitepress/dist/assets/{src_guide_cache.md.DYexoE7d.js => src_guide_cache.md.CngBGKWx.js} (91%) create mode 100644 .vitepress/dist/assets/src_guide_cache.md.CngBGKWx.lean.js delete mode 100644 .vitepress/dist/assets/src_guide_cache.md.DYexoE7d.lean.js rename .vitepress/dist/assets/{src_guide_controller.md.ChJ_NED0.js => src_guide_controller.md.Bnr5Inb1.js} (96%) create mode 100644 .vitepress/dist/assets/src_guide_controller.md.Bnr5Inb1.lean.js delete mode 100644 .vitepress/dist/assets/src_guide_controller.md.ChJ_NED0.lean.js delete mode 100644 .vitepress/dist/assets/src_guide_db.md.CH-r16iF.js delete mode 100644 .vitepress/dist/assets/src_guide_db.md.CH-r16iF.lean.js create mode 100644 .vitepress/dist/assets/src_guide_db.md.Dcqu3WUK.js create mode 100644 .vitepress/dist/assets/src_guide_db.md.Dcqu3WUK.lean.js rename .vitepress/dist/assets/{src_guide_deploy.md.CVc1dXEU.js => src_guide_deploy.md.C0fiYODu.js} (84%) create mode 100644 .vitepress/dist/assets/src_guide_deploy.md.C0fiYODu.lean.js delete mode 100644 .vitepress/dist/assets/src_guide_deploy.md.CVc1dXEU.lean.js rename .vitepress/dist/assets/{src_guide_dev.md.DM1UjwvK.js => src_guide_dev.md.Cdra16SF.js} (90%) create mode 100644 .vitepress/dist/assets/src_guide_dev.md.Cdra16SF.lean.js delete mode 100644 .vitepress/dist/assets/src_guide_dev.md.DM1UjwvK.lean.js delete mode 100644 .vitepress/dist/assets/src_guide_dir.md.Bywk12Mo.lean.js rename .vitepress/dist/assets/{src_guide_dir.md.Bywk12Mo.js => src_guide_dir.md.XwivTI0b.js} (85%) create mode 100644 .vitepress/dist/assets/src_guide_dir.md.XwivTI0b.lean.js delete mode 100644 .vitepress/dist/assets/src_guide_exception.md.1HCd76m1.lean.js rename .vitepress/dist/assets/{src_guide_exception.md.1HCd76m1.js => src_guide_exception.md.CQgM0zu7.js} (93%) create mode 100644 .vitepress/dist/assets/src_guide_exception.md.CQgM0zu7.lean.js delete mode 100644 .vitepress/dist/assets/src_guide_flow.md.DMDsOCkF.js delete mode 100644 .vitepress/dist/assets/src_guide_flow.md.DMDsOCkF.lean.js create mode 100644 .vitepress/dist/assets/src_guide_flow.md.d_l3AjDo.js create mode 100644 .vitepress/dist/assets/src_guide_flow.md.d_l3AjDo.lean.js delete mode 100644 .vitepress/dist/assets/src_guide_i18n.md.D4ikqxxm.js delete mode 100644 .vitepress/dist/assets/src_guide_i18n.md.D4ikqxxm.lean.js create mode 100644 .vitepress/dist/assets/src_guide_i18n.md.DKQqA29O.js create mode 100644 .vitepress/dist/assets/src_guide_i18n.md.DKQqA29O.lean.js delete mode 100644 .vitepress/dist/assets/src_guide_initData.md.BhdPvNop.lean.js rename .vitepress/dist/assets/{src_guide_initData.md.BhdPvNop.js => src_guide_initData.md.CPwPPPgb.js} (83%) create mode 100644 .vitepress/dist/assets/src_guide_initData.md.CPwPPPgb.lean.js create mode 100644 .vitepress/dist/assets/src_guide_lock.md.B34nqu5N.js create mode 100644 .vitepress/dist/assets/src_guide_lock.md.B34nqu5N.lean.js delete mode 100644 .vitepress/dist/assets/src_guide_lock.md.C8JTDlsP.js delete mode 100644 .vitepress/dist/assets/src_guide_lock.md.C8JTDlsP.lean.js delete mode 100644 .vitepress/dist/assets/src_guide_noRepeatSubmit.md.CvFjLc1r.lean.js rename .vitepress/dist/assets/{src_guide_noRepeatSubmit.md.CvFjLc1r.js => src_guide_noRepeatSubmit.md.DIyr__Bf.js} (89%) create mode 100644 .vitepress/dist/assets/src_guide_noRepeatSubmit.md.DIyr__Bf.lean.js rename .vitepress/dist/assets/{src_guide_plugin.md.DSQp6REO.js => src_guide_plugin.md.CyRIknxk.js} (96%) create mode 100644 .vitepress/dist/assets/src_guide_plugin.md.CyRIknxk.lean.js delete mode 100644 .vitepress/dist/assets/src_guide_plugin.md.DSQp6REO.lean.js rename .vitepress/dist/assets/{src_guide_quick.md.g_DIbvkh.js => src_guide_quick.md.DotkVVeu.js} (66%) create mode 100644 .vitepress/dist/assets/src_guide_quick.md.DotkVVeu.lean.js delete mode 100644 .vitepress/dist/assets/src_guide_quick.md.g_DIbvkh.lean.js delete mode 100644 .vitepress/dist/assets/src_guide_recordLog.md.B0w4IZH7.lean.js rename .vitepress/dist/assets/{src_guide_recordLog.md.B0w4IZH7.js => src_guide_recordLog.md.Ct7SggAu.js} (74%) create mode 100644 .vitepress/dist/assets/src_guide_recordLog.md.Ct7SggAu.lean.js rename .vitepress/dist/assets/{src_guide_security.md.BFmZQZP9.js => src_guide_security.md.B2rQeGT7.js} (98%) create mode 100644 .vitepress/dist/assets/src_guide_security.md.B2rQeGT7.lean.js delete mode 100644 .vitepress/dist/assets/src_guide_security.md.BFmZQZP9.lean.js rename .vitepress/dist/assets/{src_guide_service.md.CokY9neI.js => src_guide_service.md.BSPrcE3u.js} (72%) create mode 100644 .vitepress/dist/assets/src_guide_service.md.BSPrcE3u.lean.js delete mode 100644 .vitepress/dist/assets/src_guide_service.md.CokY9neI.lean.js rename .vitepress/dist/assets/{src_guide_swagger.md.CCfA6TBH.js => src_guide_swagger.md.B2QMWjN_.js} (67%) create mode 100644 .vitepress/dist/assets/src_guide_swagger.md.B2QMWjN_.lean.js delete mode 100644 .vitepress/dist/assets/src_guide_swagger.md.CCfA6TBH.lean.js create mode 100644 .vitepress/dist/assets/src_guide_tenant.md.A1tSE7xk.js create mode 100644 .vitepress/dist/assets/src_guide_tenant.md.A1tSE7xk.lean.js delete mode 100644 .vitepress/dist/assets/src_guide_tenant.md.CP_z92JB.js delete mode 100644 .vitepress/dist/assets/src_guide_tenant.md.CP_z92JB.lean.js rename .vitepress/dist/assets/{src_guide_uniqueIDGen.md.BNiKKfQz.js => src_guide_uniqueIDGen.md.2lkhYWAH.js} (83%) create mode 100644 .vitepress/dist/assets/src_guide_uniqueIDGen.md.2lkhYWAH.lean.js delete mode 100644 .vitepress/dist/assets/src_guide_uniqueIDGen.md.BNiKKfQz.lean.js rename .vitepress/dist/assets/{src_guide_upload.md.D-dQqFKU.js => src_guide_upload.md.90xW7PAK.js} (86%) create mode 100644 .vitepress/dist/assets/src_guide_upload.md.90xW7PAK.lean.js delete mode 100644 .vitepress/dist/assets/src_guide_upload.md.D-dQqFKU.lean.js delete mode 100644 .vitepress/dist/assets/src_introduce_index.md.BaUz4Xtw.js delete mode 100644 .vitepress/dist/assets/src_introduce_index.md.BaUz4Xtw.lean.js create mode 100644 .vitepress/dist/assets/src_introduce_index.md.DIqLm5J3.js create mode 100644 .vitepress/dist/assets/src_introduce_index.md.DIqLm5J3.lean.js delete mode 100644 .vitepress/dist/assets/src_introduce_show.md.Ck0DuCIX.js delete mode 100644 .vitepress/dist/assets/src_introduce_show.md.Ck0DuCIX.lean.js create mode 100644 .vitepress/dist/assets/src_introduce_show.md.Dy5qurfj.js create mode 100644 .vitepress/dist/assets/src_introduce_show.md.Dy5qurfj.lean.js create mode 100644 .vitepress/dist/assets/src_introduce_src.md.BO7rlY2n.js create mode 100644 .vitepress/dist/assets/src_introduce_src.md.BO7rlY2n.lean.js delete mode 100644 .vitepress/dist/assets/src_introduce_src.md.UlNmfnNt.js delete mode 100644 .vitepress/dist/assets/src_introduce_src.md.UlNmfnNt.lean.js create mode 100644 .vitepress/dist/assets/src_question_common.md.BqW7OjdF.js create mode 100644 .vitepress/dist/assets/src_question_common.md.BqW7OjdF.lean.js delete mode 100644 .vitepress/dist/assets/src_question_common.md.Caojqqth.js delete mode 100644 .vitepress/dist/assets/src_question_common.md.Caojqqth.lean.js create mode 100644 .vitepress/dist/assets/src_todo_plan.md.CISv3gFT.js create mode 100644 .vitepress/dist/assets/src_todo_plan.md.CISv3gFT.lean.js delete mode 100644 .vitepress/dist/assets/src_todo_plan.md.pGnBM6_r.js delete mode 100644 .vitepress/dist/assets/src_todo_plan.md.pGnBM6_r.lean.js create mode 100644 .vitepress/dist/assets/src_todo_update.md.C-VVOl5_.js create mode 100644 .vitepress/dist/assets/src_todo_update.md.C-VVOl5_.lean.js delete mode 100644 .vitepress/dist/assets/src_todo_update.md.DUbMUQW8.js delete mode 100644 .vitepress/dist/assets/src_todo_update.md.DUbMUQW8.lean.js diff --git a/.vitepress/cache/deps_temp_910682de/chunk-CQOUZRMK.js b/.vitepress/cache/deps_temp_910682de/chunk-CQOUZRMK.js deleted file mode 100644 index bc476d6..0000000 --- a/.vitepress/cache/deps_temp_910682de/chunk-CQOUZRMK.js +++ /dev/null @@ -1,12542 +0,0 @@ -// node_modules/.pnpm/@vue+shared@3.5.13/node_modules/@vue/shared/dist/shared.esm-bundler.js -function makeMap(str) { - const map2 = /* @__PURE__ */ Object.create(null); - for (const key of str.split(",")) map2[key] = 1; - return (val) => val in map2; -} -var EMPTY_OBJ = true ? Object.freeze({}) : {}; -var EMPTY_ARR = true ? Object.freeze([]) : []; -var NOOP = () => { -}; -var NO = () => false; -var isOn = (key) => key.charCodeAt(0) === 111 && key.charCodeAt(1) === 110 && // uppercase letter -(key.charCodeAt(2) > 122 || key.charCodeAt(2) < 97); -var isModelListener = (key) => key.startsWith("onUpdate:"); -var extend = Object.assign; -var remove = (arr, el) => { - const i = arr.indexOf(el); - if (i > -1) { - arr.splice(i, 1); - } -}; -var hasOwnProperty = Object.prototype.hasOwnProperty; -var hasOwn = (val, key) => hasOwnProperty.call(val, key); -var isArray = Array.isArray; -var isMap = (val) => toTypeString(val) === "[object Map]"; -var isSet = (val) => toTypeString(val) === "[object Set]"; -var isDate = (val) => toTypeString(val) === "[object Date]"; -var isRegExp = (val) => toTypeString(val) === "[object RegExp]"; -var isFunction = (val) => typeof val === "function"; -var isString = (val) => typeof val === "string"; -var isSymbol = (val) => typeof val === "symbol"; -var isObject = (val) => val !== null && typeof val === "object"; -var isPromise = (val) => { - return (isObject(val) || isFunction(val)) && isFunction(val.then) && isFunction(val.catch); -}; -var objectToString = Object.prototype.toString; -var toTypeString = (value) => objectToString.call(value); -var toRawType = (value) => { - return toTypeString(value).slice(8, -1); -}; -var isPlainObject = (val) => toTypeString(val) === "[object Object]"; -var isIntegerKey = (key) => isString(key) && key !== "NaN" && key[0] !== "-" && "" + parseInt(key, 10) === key; -var isReservedProp = makeMap( - // the leading comma is intentional so empty string "" is also included - ",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted" -); -var isBuiltInDirective = makeMap( - "bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo" -); -var cacheStringFunction = (fn) => { - const cache = /* @__PURE__ */ Object.create(null); - return (str) => { - const hit = cache[str]; - return hit || (cache[str] = fn(str)); - }; -}; -var camelizeRE = /-(\w)/g; -var camelize = cacheStringFunction( - (str) => { - return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : ""); - } -); -var hyphenateRE = /\B([A-Z])/g; -var hyphenate = cacheStringFunction( - (str) => str.replace(hyphenateRE, "-$1").toLowerCase() -); -var capitalize = cacheStringFunction((str) => { - return str.charAt(0).toUpperCase() + str.slice(1); -}); -var toHandlerKey = cacheStringFunction( - (str) => { - const s = str ? `on${capitalize(str)}` : ``; - return s; - } -); -var hasChanged = (value, oldValue) => !Object.is(value, oldValue); -var invokeArrayFns = (fns, ...arg) => { - for (let i = 0; i < fns.length; i++) { - fns[i](...arg); - } -}; -var def = (obj, key, value, writable = false) => { - Object.defineProperty(obj, key, { - configurable: true, - enumerable: false, - writable, - value - }); -}; -var looseToNumber = (val) => { - const n = parseFloat(val); - return isNaN(n) ? val : n; -}; -var toNumber = (val) => { - const n = isString(val) ? Number(val) : NaN; - return isNaN(n) ? val : n; -}; -var _globalThis; -var getGlobalThis = () => { - return _globalThis || (_globalThis = typeof globalThis !== "undefined" ? globalThis : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : {}); -}; -var GLOBALS_ALLOWED = "Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,console,Error,Symbol"; -var isGloballyAllowed = makeMap(GLOBALS_ALLOWED); -function normalizeStyle(value) { - if (isArray(value)) { - const res = {}; - for (let i = 0; i < value.length; i++) { - const item = value[i]; - const normalized = isString(item) ? parseStringStyle(item) : normalizeStyle(item); - if (normalized) { - for (const key in normalized) { - res[key] = normalized[key]; - } - } - } - return res; - } else if (isString(value) || isObject(value)) { - return value; - } -} -var listDelimiterRE = /;(?![^(]*\))/g; -var propertyDelimiterRE = /:([^]+)/; -var styleCommentRE = /\/\*[^]*?\*\//g; -function parseStringStyle(cssText) { - const ret = {}; - cssText.replace(styleCommentRE, "").split(listDelimiterRE).forEach((item) => { - if (item) { - const tmp = item.split(propertyDelimiterRE); - tmp.length > 1 && (ret[tmp[0].trim()] = tmp[1].trim()); - } - }); - return ret; -} -function stringifyStyle(styles) { - if (!styles) return ""; - if (isString(styles)) return styles; - let ret = ""; - for (const key in styles) { - const value = styles[key]; - if (isString(value) || typeof value === "number") { - const normalizedKey = key.startsWith(`--`) ? key : hyphenate(key); - ret += `${normalizedKey}:${value};`; - } - } - return ret; -} -function normalizeClass(value) { - let res = ""; - if (isString(value)) { - res = value; - } else if (isArray(value)) { - for (let i = 0; i < value.length; i++) { - const normalized = normalizeClass(value[i]); - if (normalized) { - res += normalized + " "; - } - } - } else if (isObject(value)) { - for (const name in value) { - if (value[name]) { - res += name + " "; - } - } - } - return res.trim(); -} -function normalizeProps(props) { - if (!props) return null; - let { class: klass, style } = props; - if (klass && !isString(klass)) { - props.class = normalizeClass(klass); - } - if (style) { - props.style = normalizeStyle(style); - } - return props; -} -var HTML_TAGS = "html,body,base,head,link,meta,style,title,address,article,aside,footer,header,hgroup,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,summary,template,blockquote,iframe,tfoot"; -var SVG_TAGS = "svg,animate,animateMotion,animateTransform,circle,clipPath,color-profile,defs,desc,discard,ellipse,feBlend,feColorMatrix,feComponentTransfer,feComposite,feConvolveMatrix,feDiffuseLighting,feDisplacementMap,feDistantLight,feDropShadow,feFlood,feFuncA,feFuncB,feFuncG,feFuncR,feGaussianBlur,feImage,feMerge,feMergeNode,feMorphology,feOffset,fePointLight,feSpecularLighting,feSpotLight,feTile,feTurbulence,filter,foreignObject,g,hatch,hatchpath,image,line,linearGradient,marker,mask,mesh,meshgradient,meshpatch,meshrow,metadata,mpath,path,pattern,polygon,polyline,radialGradient,rect,set,solidcolor,stop,switch,symbol,text,textPath,title,tspan,unknown,use,view"; -var MATH_TAGS = "annotation,annotation-xml,maction,maligngroup,malignmark,math,menclose,merror,mfenced,mfrac,mfraction,mglyph,mi,mlabeledtr,mlongdiv,mmultiscripts,mn,mo,mover,mpadded,mphantom,mprescripts,mroot,mrow,ms,mscarries,mscarry,msgroup,msline,mspace,msqrt,msrow,mstack,mstyle,msub,msubsup,msup,mtable,mtd,mtext,mtr,munder,munderover,none,semantics"; -var VOID_TAGS = "area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr"; -var isHTMLTag = makeMap(HTML_TAGS); -var isSVGTag = makeMap(SVG_TAGS); -var isMathMLTag = makeMap(MATH_TAGS); -var isVoidTag = makeMap(VOID_TAGS); -var specialBooleanAttrs = `itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly`; -var isSpecialBooleanAttr = makeMap(specialBooleanAttrs); -var isBooleanAttr = makeMap( - specialBooleanAttrs + `,async,autofocus,autoplay,controls,default,defer,disabled,hidden,inert,loop,open,required,reversed,scoped,seamless,checked,muted,multiple,selected` -); -function includeBooleanAttr(value) { - return !!value || value === ""; -} -var isKnownHtmlAttr = makeMap( - `accept,accept-charset,accesskey,action,align,allow,alt,async,autocapitalize,autocomplete,autofocus,autoplay,background,bgcolor,border,buffered,capture,challenge,charset,checked,cite,class,code,codebase,color,cols,colspan,content,contenteditable,contextmenu,controls,coords,crossorigin,csp,data,datetime,decoding,default,defer,dir,dirname,disabled,download,draggable,dropzone,enctype,enterkeyhint,for,form,formaction,formenctype,formmethod,formnovalidate,formtarget,headers,height,hidden,high,href,hreflang,http-equiv,icon,id,importance,inert,integrity,ismap,itemprop,keytype,kind,label,lang,language,loading,list,loop,low,manifest,max,maxlength,minlength,media,min,multiple,muted,name,novalidate,open,optimum,pattern,ping,placeholder,poster,preload,radiogroup,readonly,referrerpolicy,rel,required,reversed,rows,rowspan,sandbox,scope,scoped,selected,shape,size,sizes,slot,span,spellcheck,src,srcdoc,srclang,srcset,start,step,style,summary,tabindex,target,title,translate,type,usemap,value,width,wrap` -); -var isKnownSvgAttr = makeMap( - `xmlns,accent-height,accumulate,additive,alignment-baseline,alphabetic,amplitude,arabic-form,ascent,attributeName,attributeType,azimuth,baseFrequency,baseline-shift,baseProfile,bbox,begin,bias,by,calcMode,cap-height,class,clip,clipPathUnits,clip-path,clip-rule,color,color-interpolation,color-interpolation-filters,color-profile,color-rendering,contentScriptType,contentStyleType,crossorigin,cursor,cx,cy,d,decelerate,descent,diffuseConstant,direction,display,divisor,dominant-baseline,dur,dx,dy,edgeMode,elevation,enable-background,end,exponent,fill,fill-opacity,fill-rule,filter,filterRes,filterUnits,flood-color,flood-opacity,font-family,font-size,font-size-adjust,font-stretch,font-style,font-variant,font-weight,format,from,fr,fx,fy,g1,g2,glyph-name,glyph-orientation-horizontal,glyph-orientation-vertical,glyphRef,gradientTransform,gradientUnits,hanging,height,href,hreflang,horiz-adv-x,horiz-origin-x,id,ideographic,image-rendering,in,in2,intercept,k,k1,k2,k3,k4,kernelMatrix,kernelUnitLength,kerning,keyPoints,keySplines,keyTimes,lang,lengthAdjust,letter-spacing,lighting-color,limitingConeAngle,local,marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,mask,maskContentUnits,maskUnits,mathematical,max,media,method,min,mode,name,numOctaves,offset,opacity,operator,order,orient,orientation,origin,overflow,overline-position,overline-thickness,panose-1,paint-order,path,pathLength,patternContentUnits,patternTransform,patternUnits,ping,pointer-events,points,pointsAtX,pointsAtY,pointsAtZ,preserveAlpha,preserveAspectRatio,primitiveUnits,r,radius,referrerPolicy,refX,refY,rel,rendering-intent,repeatCount,repeatDur,requiredExtensions,requiredFeatures,restart,result,rotate,rx,ry,scale,seed,shape-rendering,slope,spacing,specularConstant,specularExponent,speed,spreadMethod,startOffset,stdDeviation,stemh,stemv,stitchTiles,stop-color,stop-opacity,strikethrough-position,strikethrough-thickness,string,stroke,stroke-dasharray,stroke-dashoffset,stroke-linecap,stroke-linejoin,stroke-miterlimit,stroke-opacity,stroke-width,style,surfaceScale,systemLanguage,tabindex,tableValues,target,targetX,targetY,text-anchor,text-decoration,text-rendering,textLength,to,transform,transform-origin,type,u1,u2,underline-position,underline-thickness,unicode,unicode-bidi,unicode-range,units-per-em,v-alphabetic,v-hanging,v-ideographic,v-mathematical,values,vector-effect,version,vert-adv-y,vert-origin-x,vert-origin-y,viewBox,viewTarget,visibility,width,widths,word-spacing,writing-mode,x,x-height,x1,x2,xChannelSelector,xlink:actuate,xlink:arcrole,xlink:href,xlink:role,xlink:show,xlink:title,xlink:type,xmlns:xlink,xml:base,xml:lang,xml:space,y,y1,y2,yChannelSelector,z,zoomAndPan` -); -var isKnownMathMLAttr = makeMap( - `accent,accentunder,actiontype,align,alignmentscope,altimg,altimg-height,altimg-valign,altimg-width,alttext,bevelled,close,columnsalign,columnlines,columnspan,denomalign,depth,dir,display,displaystyle,encoding,equalcolumns,equalrows,fence,fontstyle,fontweight,form,frame,framespacing,groupalign,height,href,id,indentalign,indentalignfirst,indentalignlast,indentshift,indentshiftfirst,indentshiftlast,indextype,justify,largetop,largeop,lquote,lspace,mathbackground,mathcolor,mathsize,mathvariant,maxsize,minlabelspacing,mode,other,overflow,position,rowalign,rowlines,rowspan,rquote,rspace,scriptlevel,scriptminsize,scriptsizemultiplier,selection,separator,separators,shift,side,src,stackalign,stretchy,subscriptshift,superscriptshift,symmetric,voffset,width,widths,xlink:href,xlink:show,xlink:type,xmlns` -); -function isRenderableAttrValue(value) { - if (value == null) { - return false; - } - const type = typeof value; - return type === "string" || type === "number" || type === "boolean"; -} -var cssVarNameEscapeSymbolsRE = /[ !"#$%&'()*+,./:;<=>?@[\\\]^`{|}~]/g; -function getEscapedCssVarName(key, doubleEscape) { - return key.replace( - cssVarNameEscapeSymbolsRE, - (s) => doubleEscape ? s === '"' ? '\\\\\\"' : `\\\\${s}` : `\\${s}` - ); -} -function looseCompareArrays(a, b) { - if (a.length !== b.length) return false; - let equal = true; - for (let i = 0; equal && i < a.length; i++) { - equal = looseEqual(a[i], b[i]); - } - return equal; -} -function looseEqual(a, b) { - if (a === b) return true; - let aValidType = isDate(a); - let bValidType = isDate(b); - if (aValidType || bValidType) { - return aValidType && bValidType ? a.getTime() === b.getTime() : false; - } - aValidType = isSymbol(a); - bValidType = isSymbol(b); - if (aValidType || bValidType) { - return a === b; - } - aValidType = isArray(a); - bValidType = isArray(b); - if (aValidType || bValidType) { - return aValidType && bValidType ? looseCompareArrays(a, b) : false; - } - aValidType = isObject(a); - bValidType = isObject(b); - if (aValidType || bValidType) { - if (!aValidType || !bValidType) { - return false; - } - const aKeysCount = Object.keys(a).length; - const bKeysCount = Object.keys(b).length; - if (aKeysCount !== bKeysCount) { - return false; - } - for (const key in a) { - const aHasKey = a.hasOwnProperty(key); - const bHasKey = b.hasOwnProperty(key); - if (aHasKey && !bHasKey || !aHasKey && bHasKey || !looseEqual(a[key], b[key])) { - return false; - } - } - } - return String(a) === String(b); -} -function looseIndexOf(arr, val) { - return arr.findIndex((item) => looseEqual(item, val)); -} -var isRef = (val) => { - return !!(val && val["__v_isRef"] === true); -}; -var toDisplayString = (val) => { - return isString(val) ? val : val == null ? "" : isArray(val) || isObject(val) && (val.toString === objectToString || !isFunction(val.toString)) ? isRef(val) ? toDisplayString(val.value) : JSON.stringify(val, replacer, 2) : String(val); -}; -var replacer = (_key, val) => { - if (isRef(val)) { - return replacer(_key, val.value); - } else if (isMap(val)) { - return { - [`Map(${val.size})`]: [...val.entries()].reduce( - (entries, [key, val2], i) => { - entries[stringifySymbol(key, i) + " =>"] = val2; - return entries; - }, - {} - ) - }; - } else if (isSet(val)) { - return { - [`Set(${val.size})`]: [...val.values()].map((v) => stringifySymbol(v)) - }; - } else if (isSymbol(val)) { - return stringifySymbol(val); - } else if (isObject(val) && !isArray(val) && !isPlainObject(val)) { - return String(val); - } - return val; -}; -var stringifySymbol = (v, i = "") => { - var _a; - return ( - // Symbol.description in es2019+ so we need to cast here to pass - // the lib: es2016 check - isSymbol(v) ? `Symbol(${(_a = v.description) != null ? _a : i})` : v - ); -}; - -// node_modules/.pnpm/@vue+reactivity@3.5.13/node_modules/@vue/reactivity/dist/reactivity.esm-bundler.js -function warn(msg, ...args) { - console.warn(`[Vue warn] ${msg}`, ...args); -} -var activeEffectScope; -var EffectScope = class { - constructor(detached = false) { - this.detached = detached; - this._active = true; - this.effects = []; - this.cleanups = []; - this._isPaused = false; - this.parent = activeEffectScope; - if (!detached && activeEffectScope) { - this.index = (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push( - this - ) - 1; - } - } - get active() { - return this._active; - } - pause() { - if (this._active) { - this._isPaused = true; - let i, l; - if (this.scopes) { - for (i = 0, l = this.scopes.length; i < l; i++) { - this.scopes[i].pause(); - } - } - for (i = 0, l = this.effects.length; i < l; i++) { - this.effects[i].pause(); - } - } - } - /** - * Resumes the effect scope, including all child scopes and effects. - */ - resume() { - if (this._active) { - if (this._isPaused) { - this._isPaused = false; - let i, l; - if (this.scopes) { - for (i = 0, l = this.scopes.length; i < l; i++) { - this.scopes[i].resume(); - } - } - for (i = 0, l = this.effects.length; i < l; i++) { - this.effects[i].resume(); - } - } - } - } - run(fn) { - if (this._active) { - const currentEffectScope = activeEffectScope; - try { - activeEffectScope = this; - return fn(); - } finally { - activeEffectScope = currentEffectScope; - } - } else if (true) { - warn(`cannot run an inactive effect scope.`); - } - } - /** - * This should only be called on non-detached scopes - * @internal - */ - on() { - activeEffectScope = this; - } - /** - * This should only be called on non-detached scopes - * @internal - */ - off() { - activeEffectScope = this.parent; - } - stop(fromParent) { - if (this._active) { - this._active = false; - let i, l; - for (i = 0, l = this.effects.length; i < l; i++) { - this.effects[i].stop(); - } - this.effects.length = 0; - for (i = 0, l = this.cleanups.length; i < l; i++) { - this.cleanups[i](); - } - this.cleanups.length = 0; - if (this.scopes) { - for (i = 0, l = this.scopes.length; i < l; i++) { - this.scopes[i].stop(true); - } - this.scopes.length = 0; - } - if (!this.detached && this.parent && !fromParent) { - const last = this.parent.scopes.pop(); - if (last && last !== this) { - this.parent.scopes[this.index] = last; - last.index = this.index; - } - } - this.parent = void 0; - } - } -}; -function effectScope(detached) { - return new EffectScope(detached); -} -function getCurrentScope() { - return activeEffectScope; -} -function onScopeDispose(fn, failSilently = false) { - if (activeEffectScope) { - activeEffectScope.cleanups.push(fn); - } else if (!failSilently) { - warn( - `onScopeDispose() is called when there is no active effect scope to be associated with.` - ); - } -} -var activeSub; -var pausedQueueEffects = /* @__PURE__ */ new WeakSet(); -var ReactiveEffect = class { - constructor(fn) { - this.fn = fn; - this.deps = void 0; - this.depsTail = void 0; - this.flags = 1 | 4; - this.next = void 0; - this.cleanup = void 0; - this.scheduler = void 0; - if (activeEffectScope && activeEffectScope.active) { - activeEffectScope.effects.push(this); - } - } - pause() { - this.flags |= 64; - } - resume() { - if (this.flags & 64) { - this.flags &= ~64; - if (pausedQueueEffects.has(this)) { - pausedQueueEffects.delete(this); - this.trigger(); - } - } - } - /** - * @internal - */ - notify() { - if (this.flags & 2 && !(this.flags & 32)) { - return; - } - if (!(this.flags & 8)) { - batch(this); - } - } - run() { - if (!(this.flags & 1)) { - return this.fn(); - } - this.flags |= 2; - cleanupEffect(this); - prepareDeps(this); - const prevEffect = activeSub; - const prevShouldTrack = shouldTrack; - activeSub = this; - shouldTrack = true; - try { - return this.fn(); - } finally { - if (activeSub !== this) { - warn( - "Active effect was not restored correctly - this is likely a Vue internal bug." - ); - } - cleanupDeps(this); - activeSub = prevEffect; - shouldTrack = prevShouldTrack; - this.flags &= ~2; - } - } - stop() { - if (this.flags & 1) { - for (let link = this.deps; link; link = link.nextDep) { - removeSub(link); - } - this.deps = this.depsTail = void 0; - cleanupEffect(this); - this.onStop && this.onStop(); - this.flags &= ~1; - } - } - trigger() { - if (this.flags & 64) { - pausedQueueEffects.add(this); - } else if (this.scheduler) { - this.scheduler(); - } else { - this.runIfDirty(); - } - } - /** - * @internal - */ - runIfDirty() { - if (isDirty(this)) { - this.run(); - } - } - get dirty() { - return isDirty(this); - } -}; -var batchDepth = 0; -var batchedSub; -var batchedComputed; -function batch(sub, isComputed = false) { - sub.flags |= 8; - if (isComputed) { - sub.next = batchedComputed; - batchedComputed = sub; - return; - } - sub.next = batchedSub; - batchedSub = sub; -} -function startBatch() { - batchDepth++; -} -function endBatch() { - if (--batchDepth > 0) { - return; - } - if (batchedComputed) { - let e = batchedComputed; - batchedComputed = void 0; - while (e) { - const next = e.next; - e.next = void 0; - e.flags &= ~8; - e = next; - } - } - let error; - while (batchedSub) { - let e = batchedSub; - batchedSub = void 0; - while (e) { - const next = e.next; - e.next = void 0; - e.flags &= ~8; - if (e.flags & 1) { - try { - ; - e.trigger(); - } catch (err) { - if (!error) error = err; - } - } - e = next; - } - } - if (error) throw error; -} -function prepareDeps(sub) { - for (let link = sub.deps; link; link = link.nextDep) { - link.version = -1; - link.prevActiveLink = link.dep.activeLink; - link.dep.activeLink = link; - } -} -function cleanupDeps(sub) { - let head; - let tail = sub.depsTail; - let link = tail; - while (link) { - const prev = link.prevDep; - if (link.version === -1) { - if (link === tail) tail = prev; - removeSub(link); - removeDep(link); - } else { - head = link; - } - link.dep.activeLink = link.prevActiveLink; - link.prevActiveLink = void 0; - link = prev; - } - sub.deps = head; - sub.depsTail = tail; -} -function isDirty(sub) { - for (let link = sub.deps; link; link = link.nextDep) { - if (link.dep.version !== link.version || link.dep.computed && (refreshComputed(link.dep.computed) || link.dep.version !== link.version)) { - return true; - } - } - if (sub._dirty) { - return true; - } - return false; -} -function refreshComputed(computed3) { - if (computed3.flags & 4 && !(computed3.flags & 16)) { - return; - } - computed3.flags &= ~16; - if (computed3.globalVersion === globalVersion) { - return; - } - computed3.globalVersion = globalVersion; - const dep = computed3.dep; - computed3.flags |= 2; - if (dep.version > 0 && !computed3.isSSR && computed3.deps && !isDirty(computed3)) { - computed3.flags &= ~2; - return; - } - const prevSub = activeSub; - const prevShouldTrack = shouldTrack; - activeSub = computed3; - shouldTrack = true; - try { - prepareDeps(computed3); - const value = computed3.fn(computed3._value); - if (dep.version === 0 || hasChanged(value, computed3._value)) { - computed3._value = value; - dep.version++; - } - } catch (err) { - dep.version++; - throw err; - } finally { - activeSub = prevSub; - shouldTrack = prevShouldTrack; - cleanupDeps(computed3); - computed3.flags &= ~2; - } -} -function removeSub(link, soft = false) { - const { dep, prevSub, nextSub } = link; - if (prevSub) { - prevSub.nextSub = nextSub; - link.prevSub = void 0; - } - if (nextSub) { - nextSub.prevSub = prevSub; - link.nextSub = void 0; - } - if (dep.subsHead === link) { - dep.subsHead = nextSub; - } - if (dep.subs === link) { - dep.subs = prevSub; - if (!prevSub && dep.computed) { - dep.computed.flags &= ~4; - for (let l = dep.computed.deps; l; l = l.nextDep) { - removeSub(l, true); - } - } - } - if (!soft && !--dep.sc && dep.map) { - dep.map.delete(dep.key); - } -} -function removeDep(link) { - const { prevDep, nextDep } = link; - if (prevDep) { - prevDep.nextDep = nextDep; - link.prevDep = void 0; - } - if (nextDep) { - nextDep.prevDep = prevDep; - link.nextDep = void 0; - } -} -function effect(fn, options) { - if (fn.effect instanceof ReactiveEffect) { - fn = fn.effect.fn; - } - const e = new ReactiveEffect(fn); - if (options) { - extend(e, options); - } - try { - e.run(); - } catch (err) { - e.stop(); - throw err; - } - const runner = e.run.bind(e); - runner.effect = e; - return runner; -} -function stop(runner) { - runner.effect.stop(); -} -var shouldTrack = true; -var trackStack = []; -function pauseTracking() { - trackStack.push(shouldTrack); - shouldTrack = false; -} -function resetTracking() { - const last = trackStack.pop(); - shouldTrack = last === void 0 ? true : last; -} -function cleanupEffect(e) { - const { cleanup } = e; - e.cleanup = void 0; - if (cleanup) { - const prevSub = activeSub; - activeSub = void 0; - try { - cleanup(); - } finally { - activeSub = prevSub; - } - } -} -var globalVersion = 0; -var Link = class { - constructor(sub, dep) { - this.sub = sub; - this.dep = dep; - this.version = dep.version; - this.nextDep = this.prevDep = this.nextSub = this.prevSub = this.prevActiveLink = void 0; - } -}; -var Dep = class { - constructor(computed3) { - this.computed = computed3; - this.version = 0; - this.activeLink = void 0; - this.subs = void 0; - this.map = void 0; - this.key = void 0; - this.sc = 0; - if (true) { - this.subsHead = void 0; - } - } - track(debugInfo) { - if (!activeSub || !shouldTrack || activeSub === this.computed) { - return; - } - let link = this.activeLink; - if (link === void 0 || link.sub !== activeSub) { - link = this.activeLink = new Link(activeSub, this); - if (!activeSub.deps) { - activeSub.deps = activeSub.depsTail = link; - } else { - link.prevDep = activeSub.depsTail; - activeSub.depsTail.nextDep = link; - activeSub.depsTail = link; - } - addSub(link); - } else if (link.version === -1) { - link.version = this.version; - if (link.nextDep) { - const next = link.nextDep; - next.prevDep = link.prevDep; - if (link.prevDep) { - link.prevDep.nextDep = next; - } - link.prevDep = activeSub.depsTail; - link.nextDep = void 0; - activeSub.depsTail.nextDep = link; - activeSub.depsTail = link; - if (activeSub.deps === link) { - activeSub.deps = next; - } - } - } - if (activeSub.onTrack) { - activeSub.onTrack( - extend( - { - effect: activeSub - }, - debugInfo - ) - ); - } - return link; - } - trigger(debugInfo) { - this.version++; - globalVersion++; - this.notify(debugInfo); - } - notify(debugInfo) { - startBatch(); - try { - if (true) { - for (let head = this.subsHead; head; head = head.nextSub) { - if (head.sub.onTrigger && !(head.sub.flags & 8)) { - head.sub.onTrigger( - extend( - { - effect: head.sub - }, - debugInfo - ) - ); - } - } - } - for (let link = this.subs; link; link = link.prevSub) { - if (link.sub.notify()) { - ; - link.sub.dep.notify(); - } - } - } finally { - endBatch(); - } - } -}; -function addSub(link) { - link.dep.sc++; - if (link.sub.flags & 4) { - const computed3 = link.dep.computed; - if (computed3 && !link.dep.subs) { - computed3.flags |= 4 | 16; - for (let l = computed3.deps; l; l = l.nextDep) { - addSub(l); - } - } - const currentTail = link.dep.subs; - if (currentTail !== link) { - link.prevSub = currentTail; - if (currentTail) currentTail.nextSub = link; - } - if (link.dep.subsHead === void 0) { - link.dep.subsHead = link; - } - link.dep.subs = link; - } -} -var targetMap = /* @__PURE__ */ new WeakMap(); -var ITERATE_KEY = Symbol( - true ? "Object iterate" : "" -); -var MAP_KEY_ITERATE_KEY = Symbol( - true ? "Map keys iterate" : "" -); -var ARRAY_ITERATE_KEY = Symbol( - true ? "Array iterate" : "" -); -function track(target, type, key) { - if (shouldTrack && activeSub) { - let depsMap = targetMap.get(target); - if (!depsMap) { - targetMap.set(target, depsMap = /* @__PURE__ */ new Map()); - } - let dep = depsMap.get(key); - if (!dep) { - depsMap.set(key, dep = new Dep()); - dep.map = depsMap; - dep.key = key; - } - if (true) { - dep.track({ - target, - type, - key - }); - } else { - dep.track(); - } - } -} -function trigger(target, type, key, newValue, oldValue, oldTarget) { - const depsMap = targetMap.get(target); - if (!depsMap) { - globalVersion++; - return; - } - const run = (dep) => { - if (dep) { - if (true) { - dep.trigger({ - target, - type, - key, - newValue, - oldValue, - oldTarget - }); - } else { - dep.trigger(); - } - } - }; - startBatch(); - if (type === "clear") { - depsMap.forEach(run); - } else { - const targetIsArray = isArray(target); - const isArrayIndex = targetIsArray && isIntegerKey(key); - if (targetIsArray && key === "length") { - const newLength = Number(newValue); - depsMap.forEach((dep, key2) => { - if (key2 === "length" || key2 === ARRAY_ITERATE_KEY || !isSymbol(key2) && key2 >= newLength) { - run(dep); - } - }); - } else { - if (key !== void 0 || depsMap.has(void 0)) { - run(depsMap.get(key)); - } - if (isArrayIndex) { - run(depsMap.get(ARRAY_ITERATE_KEY)); - } - switch (type) { - case "add": - if (!targetIsArray) { - run(depsMap.get(ITERATE_KEY)); - if (isMap(target)) { - run(depsMap.get(MAP_KEY_ITERATE_KEY)); - } - } else if (isArrayIndex) { - run(depsMap.get("length")); - } - break; - case "delete": - if (!targetIsArray) { - run(depsMap.get(ITERATE_KEY)); - if (isMap(target)) { - run(depsMap.get(MAP_KEY_ITERATE_KEY)); - } - } - break; - case "set": - if (isMap(target)) { - run(depsMap.get(ITERATE_KEY)); - } - break; - } - } - } - endBatch(); -} -function getDepFromReactive(object, key) { - const depMap = targetMap.get(object); - return depMap && depMap.get(key); -} -function reactiveReadArray(array) { - const raw = toRaw(array); - if (raw === array) return raw; - track(raw, "iterate", ARRAY_ITERATE_KEY); - return isShallow(array) ? raw : raw.map(toReactive); -} -function shallowReadArray(arr) { - track(arr = toRaw(arr), "iterate", ARRAY_ITERATE_KEY); - return arr; -} -var arrayInstrumentations = { - __proto__: null, - [Symbol.iterator]() { - return iterator(this, Symbol.iterator, toReactive); - }, - concat(...args) { - return reactiveReadArray(this).concat( - ...args.map((x) => isArray(x) ? reactiveReadArray(x) : x) - ); - }, - entries() { - return iterator(this, "entries", (value) => { - value[1] = toReactive(value[1]); - return value; - }); - }, - every(fn, thisArg) { - return apply(this, "every", fn, thisArg, void 0, arguments); - }, - filter(fn, thisArg) { - return apply(this, "filter", fn, thisArg, (v) => v.map(toReactive), arguments); - }, - find(fn, thisArg) { - return apply(this, "find", fn, thisArg, toReactive, arguments); - }, - findIndex(fn, thisArg) { - return apply(this, "findIndex", fn, thisArg, void 0, arguments); - }, - findLast(fn, thisArg) { - return apply(this, "findLast", fn, thisArg, toReactive, arguments); - }, - findLastIndex(fn, thisArg) { - return apply(this, "findLastIndex", fn, thisArg, void 0, arguments); - }, - // flat, flatMap could benefit from ARRAY_ITERATE but are not straight-forward to implement - forEach(fn, thisArg) { - return apply(this, "forEach", fn, thisArg, void 0, arguments); - }, - includes(...args) { - return searchProxy(this, "includes", args); - }, - indexOf(...args) { - return searchProxy(this, "indexOf", args); - }, - join(separator) { - return reactiveReadArray(this).join(separator); - }, - // keys() iterator only reads `length`, no optimisation required - lastIndexOf(...args) { - return searchProxy(this, "lastIndexOf", args); - }, - map(fn, thisArg) { - return apply(this, "map", fn, thisArg, void 0, arguments); - }, - pop() { - return noTracking(this, "pop"); - }, - push(...args) { - return noTracking(this, "push", args); - }, - reduce(fn, ...args) { - return reduce(this, "reduce", fn, args); - }, - reduceRight(fn, ...args) { - return reduce(this, "reduceRight", fn, args); - }, - shift() { - return noTracking(this, "shift"); - }, - // slice could use ARRAY_ITERATE but also seems to beg for range tracking - some(fn, thisArg) { - return apply(this, "some", fn, thisArg, void 0, arguments); - }, - splice(...args) { - return noTracking(this, "splice", args); - }, - toReversed() { - return reactiveReadArray(this).toReversed(); - }, - toSorted(comparer) { - return reactiveReadArray(this).toSorted(comparer); - }, - toSpliced(...args) { - return reactiveReadArray(this).toSpliced(...args); - }, - unshift(...args) { - return noTracking(this, "unshift", args); - }, - values() { - return iterator(this, "values", toReactive); - } -}; -function iterator(self2, method, wrapValue) { - const arr = shallowReadArray(self2); - const iter = arr[method](); - if (arr !== self2 && !isShallow(self2)) { - iter._next = iter.next; - iter.next = () => { - const result = iter._next(); - if (result.value) { - result.value = wrapValue(result.value); - } - return result; - }; - } - return iter; -} -var arrayProto = Array.prototype; -function apply(self2, method, fn, thisArg, wrappedRetFn, args) { - const arr = shallowReadArray(self2); - const needsWrap = arr !== self2 && !isShallow(self2); - const methodFn = arr[method]; - if (methodFn !== arrayProto[method]) { - const result2 = methodFn.apply(self2, args); - return needsWrap ? toReactive(result2) : result2; - } - let wrappedFn = fn; - if (arr !== self2) { - if (needsWrap) { - wrappedFn = function(item, index) { - return fn.call(this, toReactive(item), index, self2); - }; - } else if (fn.length > 2) { - wrappedFn = function(item, index) { - return fn.call(this, item, index, self2); - }; - } - } - const result = methodFn.call(arr, wrappedFn, thisArg); - return needsWrap && wrappedRetFn ? wrappedRetFn(result) : result; -} -function reduce(self2, method, fn, args) { - const arr = shallowReadArray(self2); - let wrappedFn = fn; - if (arr !== self2) { - if (!isShallow(self2)) { - wrappedFn = function(acc, item, index) { - return fn.call(this, acc, toReactive(item), index, self2); - }; - } else if (fn.length > 3) { - wrappedFn = function(acc, item, index) { - return fn.call(this, acc, item, index, self2); - }; - } - } - return arr[method](wrappedFn, ...args); -} -function searchProxy(self2, method, args) { - const arr = toRaw(self2); - track(arr, "iterate", ARRAY_ITERATE_KEY); - const res = arr[method](...args); - if ((res === -1 || res === false) && isProxy(args[0])) { - args[0] = toRaw(args[0]); - return arr[method](...args); - } - return res; -} -function noTracking(self2, method, args = []) { - pauseTracking(); - startBatch(); - const res = toRaw(self2)[method].apply(self2, args); - endBatch(); - resetTracking(); - return res; -} -var isNonTrackableKeys = makeMap(`__proto__,__v_isRef,__isVue`); -var builtInSymbols = new Set( - Object.getOwnPropertyNames(Symbol).filter((key) => key !== "arguments" && key !== "caller").map((key) => Symbol[key]).filter(isSymbol) -); -function hasOwnProperty2(key) { - if (!isSymbol(key)) key = String(key); - const obj = toRaw(this); - track(obj, "has", key); - return obj.hasOwnProperty(key); -} -var BaseReactiveHandler = class { - constructor(_isReadonly = false, _isShallow = false) { - this._isReadonly = _isReadonly; - this._isShallow = _isShallow; - } - get(target, key, receiver) { - if (key === "__v_skip") return target["__v_skip"]; - const isReadonly2 = this._isReadonly, isShallow2 = this._isShallow; - if (key === "__v_isReactive") { - return !isReadonly2; - } else if (key === "__v_isReadonly") { - return isReadonly2; - } else if (key === "__v_isShallow") { - return isShallow2; - } else if (key === "__v_raw") { - if (receiver === (isReadonly2 ? isShallow2 ? shallowReadonlyMap : readonlyMap : isShallow2 ? shallowReactiveMap : reactiveMap).get(target) || // receiver is not the reactive proxy, but has the same prototype - // this means the receiver is a user proxy of the reactive proxy - Object.getPrototypeOf(target) === Object.getPrototypeOf(receiver)) { - return target; - } - return; - } - const targetIsArray = isArray(target); - if (!isReadonly2) { - let fn; - if (targetIsArray && (fn = arrayInstrumentations[key])) { - return fn; - } - if (key === "hasOwnProperty") { - return hasOwnProperty2; - } - } - const res = Reflect.get( - target, - key, - // if this is a proxy wrapping a ref, return methods using the raw ref - // as receiver so that we don't have to call `toRaw` on the ref in all - // its class methods - isRef2(target) ? target : receiver - ); - if (isSymbol(key) ? builtInSymbols.has(key) : isNonTrackableKeys(key)) { - return res; - } - if (!isReadonly2) { - track(target, "get", key); - } - if (isShallow2) { - return res; - } - if (isRef2(res)) { - return targetIsArray && isIntegerKey(key) ? res : res.value; - } - if (isObject(res)) { - return isReadonly2 ? readonly(res) : reactive(res); - } - return res; - } -}; -var MutableReactiveHandler = class extends BaseReactiveHandler { - constructor(isShallow2 = false) { - super(false, isShallow2); - } - set(target, key, value, receiver) { - let oldValue = target[key]; - if (!this._isShallow) { - const isOldValueReadonly = isReadonly(oldValue); - if (!isShallow(value) && !isReadonly(value)) { - oldValue = toRaw(oldValue); - value = toRaw(value); - } - if (!isArray(target) && isRef2(oldValue) && !isRef2(value)) { - if (isOldValueReadonly) { - return false; - } else { - oldValue.value = value; - return true; - } - } - } - const hadKey = isArray(target) && isIntegerKey(key) ? Number(key) < target.length : hasOwn(target, key); - const result = Reflect.set( - target, - key, - value, - isRef2(target) ? target : receiver - ); - if (target === toRaw(receiver)) { - if (!hadKey) { - trigger(target, "add", key, value); - } else if (hasChanged(value, oldValue)) { - trigger(target, "set", key, value, oldValue); - } - } - return result; - } - deleteProperty(target, key) { - const hadKey = hasOwn(target, key); - const oldValue = target[key]; - const result = Reflect.deleteProperty(target, key); - if (result && hadKey) { - trigger(target, "delete", key, void 0, oldValue); - } - return result; - } - has(target, key) { - const result = Reflect.has(target, key); - if (!isSymbol(key) || !builtInSymbols.has(key)) { - track(target, "has", key); - } - return result; - } - ownKeys(target) { - track( - target, - "iterate", - isArray(target) ? "length" : ITERATE_KEY - ); - return Reflect.ownKeys(target); - } -}; -var ReadonlyReactiveHandler = class extends BaseReactiveHandler { - constructor(isShallow2 = false) { - super(true, isShallow2); - } - set(target, key) { - if (true) { - warn( - `Set operation on key "${String(key)}" failed: target is readonly.`, - target - ); - } - return true; - } - deleteProperty(target, key) { - if (true) { - warn( - `Delete operation on key "${String(key)}" failed: target is readonly.`, - target - ); - } - return true; - } -}; -var mutableHandlers = new MutableReactiveHandler(); -var readonlyHandlers = new ReadonlyReactiveHandler(); -var shallowReactiveHandlers = new MutableReactiveHandler(true); -var shallowReadonlyHandlers = new ReadonlyReactiveHandler(true); -var toShallow = (value) => value; -var getProto = (v) => Reflect.getPrototypeOf(v); -function createIterableMethod(method, isReadonly2, isShallow2) { - return function(...args) { - const target = this["__v_raw"]; - const rawTarget = toRaw(target); - const targetIsMap = isMap(rawTarget); - const isPair = method === "entries" || method === Symbol.iterator && targetIsMap; - const isKeyOnly = method === "keys" && targetIsMap; - const innerIterator = target[method](...args); - const wrap = isShallow2 ? toShallow : isReadonly2 ? toReadonly : toReactive; - !isReadonly2 && track( - rawTarget, - "iterate", - isKeyOnly ? MAP_KEY_ITERATE_KEY : ITERATE_KEY - ); - return { - // iterator protocol - next() { - const { value, done } = innerIterator.next(); - return done ? { value, done } : { - value: isPair ? [wrap(value[0]), wrap(value[1])] : wrap(value), - done - }; - }, - // iterable protocol - [Symbol.iterator]() { - return this; - } - }; - }; -} -function createReadonlyMethod(type) { - return function(...args) { - if (true) { - const key = args[0] ? `on key "${args[0]}" ` : ``; - warn( - `${capitalize(type)} operation ${key}failed: target is readonly.`, - toRaw(this) - ); - } - return type === "delete" ? false : type === "clear" ? void 0 : this; - }; -} -function createInstrumentations(readonly2, shallow) { - const instrumentations = { - get(key) { - const target = this["__v_raw"]; - const rawTarget = toRaw(target); - const rawKey = toRaw(key); - if (!readonly2) { - if (hasChanged(key, rawKey)) { - track(rawTarget, "get", key); - } - track(rawTarget, "get", rawKey); - } - const { has } = getProto(rawTarget); - const wrap = shallow ? toShallow : readonly2 ? toReadonly : toReactive; - if (has.call(rawTarget, key)) { - return wrap(target.get(key)); - } else if (has.call(rawTarget, rawKey)) { - return wrap(target.get(rawKey)); - } else if (target !== rawTarget) { - target.get(key); - } - }, - get size() { - const target = this["__v_raw"]; - !readonly2 && track(toRaw(target), "iterate", ITERATE_KEY); - return Reflect.get(target, "size", target); - }, - has(key) { - const target = this["__v_raw"]; - const rawTarget = toRaw(target); - const rawKey = toRaw(key); - if (!readonly2) { - if (hasChanged(key, rawKey)) { - track(rawTarget, "has", key); - } - track(rawTarget, "has", rawKey); - } - return key === rawKey ? target.has(key) : target.has(key) || target.has(rawKey); - }, - forEach(callback, thisArg) { - const observed = this; - const target = observed["__v_raw"]; - const rawTarget = toRaw(target); - const wrap = shallow ? toShallow : readonly2 ? toReadonly : toReactive; - !readonly2 && track(rawTarget, "iterate", ITERATE_KEY); - return target.forEach((value, key) => { - return callback.call(thisArg, wrap(value), wrap(key), observed); - }); - } - }; - extend( - instrumentations, - readonly2 ? { - add: createReadonlyMethod("add"), - set: createReadonlyMethod("set"), - delete: createReadonlyMethod("delete"), - clear: createReadonlyMethod("clear") - } : { - add(value) { - if (!shallow && !isShallow(value) && !isReadonly(value)) { - value = toRaw(value); - } - const target = toRaw(this); - const proto = getProto(target); - const hadKey = proto.has.call(target, value); - if (!hadKey) { - target.add(value); - trigger(target, "add", value, value); - } - return this; - }, - set(key, value) { - if (!shallow && !isShallow(value) && !isReadonly(value)) { - value = toRaw(value); - } - const target = toRaw(this); - const { has, get } = getProto(target); - let hadKey = has.call(target, key); - if (!hadKey) { - key = toRaw(key); - hadKey = has.call(target, key); - } else if (true) { - checkIdentityKeys(target, has, key); - } - const oldValue = get.call(target, key); - target.set(key, value); - if (!hadKey) { - trigger(target, "add", key, value); - } else if (hasChanged(value, oldValue)) { - trigger(target, "set", key, value, oldValue); - } - return this; - }, - delete(key) { - const target = toRaw(this); - const { has, get } = getProto(target); - let hadKey = has.call(target, key); - if (!hadKey) { - key = toRaw(key); - hadKey = has.call(target, key); - } else if (true) { - checkIdentityKeys(target, has, key); - } - const oldValue = get ? get.call(target, key) : void 0; - const result = target.delete(key); - if (hadKey) { - trigger(target, "delete", key, void 0, oldValue); - } - return result; - }, - clear() { - const target = toRaw(this); - const hadItems = target.size !== 0; - const oldTarget = true ? isMap(target) ? new Map(target) : new Set(target) : void 0; - const result = target.clear(); - if (hadItems) { - trigger( - target, - "clear", - void 0, - void 0, - oldTarget - ); - } - return result; - } - } - ); - const iteratorMethods = [ - "keys", - "values", - "entries", - Symbol.iterator - ]; - iteratorMethods.forEach((method) => { - instrumentations[method] = createIterableMethod(method, readonly2, shallow); - }); - return instrumentations; -} -function createInstrumentationGetter(isReadonly2, shallow) { - const instrumentations = createInstrumentations(isReadonly2, shallow); - return (target, key, receiver) => { - if (key === "__v_isReactive") { - return !isReadonly2; - } else if (key === "__v_isReadonly") { - return isReadonly2; - } else if (key === "__v_raw") { - return target; - } - return Reflect.get( - hasOwn(instrumentations, key) && key in target ? instrumentations : target, - key, - receiver - ); - }; -} -var mutableCollectionHandlers = { - get: createInstrumentationGetter(false, false) -}; -var shallowCollectionHandlers = { - get: createInstrumentationGetter(false, true) -}; -var readonlyCollectionHandlers = { - get: createInstrumentationGetter(true, false) -}; -var shallowReadonlyCollectionHandlers = { - get: createInstrumentationGetter(true, true) -}; -function checkIdentityKeys(target, has, key) { - const rawKey = toRaw(key); - if (rawKey !== key && has.call(target, rawKey)) { - const type = toRawType(target); - warn( - `Reactive ${type} contains both the raw and reactive versions of the same object${type === `Map` ? ` as keys` : ``}, which can lead to inconsistencies. Avoid differentiating between the raw and reactive versions of an object and only use the reactive version if possible.` - ); - } -} -var reactiveMap = /* @__PURE__ */ new WeakMap(); -var shallowReactiveMap = /* @__PURE__ */ new WeakMap(); -var readonlyMap = /* @__PURE__ */ new WeakMap(); -var shallowReadonlyMap = /* @__PURE__ */ new WeakMap(); -function targetTypeMap(rawType) { - switch (rawType) { - case "Object": - case "Array": - return 1; - case "Map": - case "Set": - case "WeakMap": - case "WeakSet": - return 2; - default: - return 0; - } -} -function getTargetType(value) { - return value["__v_skip"] || !Object.isExtensible(value) ? 0 : targetTypeMap(toRawType(value)); -} -function reactive(target) { - if (isReadonly(target)) { - return target; - } - return createReactiveObject( - target, - false, - mutableHandlers, - mutableCollectionHandlers, - reactiveMap - ); -} -function shallowReactive(target) { - return createReactiveObject( - target, - false, - shallowReactiveHandlers, - shallowCollectionHandlers, - shallowReactiveMap - ); -} -function readonly(target) { - return createReactiveObject( - target, - true, - readonlyHandlers, - readonlyCollectionHandlers, - readonlyMap - ); -} -function shallowReadonly(target) { - return createReactiveObject( - target, - true, - shallowReadonlyHandlers, - shallowReadonlyCollectionHandlers, - shallowReadonlyMap - ); -} -function createReactiveObject(target, isReadonly2, baseHandlers, collectionHandlers, proxyMap) { - if (!isObject(target)) { - if (true) { - warn( - `value cannot be made ${isReadonly2 ? "readonly" : "reactive"}: ${String( - target - )}` - ); - } - return target; - } - if (target["__v_raw"] && !(isReadonly2 && target["__v_isReactive"])) { - return target; - } - const existingProxy = proxyMap.get(target); - if (existingProxy) { - return existingProxy; - } - const targetType = getTargetType(target); - if (targetType === 0) { - return target; - } - const proxy = new Proxy( - target, - targetType === 2 ? collectionHandlers : baseHandlers - ); - proxyMap.set(target, proxy); - return proxy; -} -function isReactive(value) { - if (isReadonly(value)) { - return isReactive(value["__v_raw"]); - } - return !!(value && value["__v_isReactive"]); -} -function isReadonly(value) { - return !!(value && value["__v_isReadonly"]); -} -function isShallow(value) { - return !!(value && value["__v_isShallow"]); -} -function isProxy(value) { - return value ? !!value["__v_raw"] : false; -} -function toRaw(observed) { - const raw = observed && observed["__v_raw"]; - return raw ? toRaw(raw) : observed; -} -function markRaw(value) { - if (!hasOwn(value, "__v_skip") && Object.isExtensible(value)) { - def(value, "__v_skip", true); - } - return value; -} -var toReactive = (value) => isObject(value) ? reactive(value) : value; -var toReadonly = (value) => isObject(value) ? readonly(value) : value; -function isRef2(r) { - return r ? r["__v_isRef"] === true : false; -} -function ref(value) { - return createRef(value, false); -} -function shallowRef(value) { - return createRef(value, true); -} -function createRef(rawValue, shallow) { - if (isRef2(rawValue)) { - return rawValue; - } - return new RefImpl(rawValue, shallow); -} -var RefImpl = class { - constructor(value, isShallow2) { - this.dep = new Dep(); - this["__v_isRef"] = true; - this["__v_isShallow"] = false; - this._rawValue = isShallow2 ? value : toRaw(value); - this._value = isShallow2 ? value : toReactive(value); - this["__v_isShallow"] = isShallow2; - } - get value() { - if (true) { - this.dep.track({ - target: this, - type: "get", - key: "value" - }); - } else { - this.dep.track(); - } - return this._value; - } - set value(newValue) { - const oldValue = this._rawValue; - const useDirectValue = this["__v_isShallow"] || isShallow(newValue) || isReadonly(newValue); - newValue = useDirectValue ? newValue : toRaw(newValue); - if (hasChanged(newValue, oldValue)) { - this._rawValue = newValue; - this._value = useDirectValue ? newValue : toReactive(newValue); - if (true) { - this.dep.trigger({ - target: this, - type: "set", - key: "value", - newValue, - oldValue - }); - } else { - this.dep.trigger(); - } - } - } -}; -function triggerRef(ref2) { - if (ref2.dep) { - if (true) { - ref2.dep.trigger({ - target: ref2, - type: "set", - key: "value", - newValue: ref2._value - }); - } else { - ref2.dep.trigger(); - } - } -} -function unref(ref2) { - return isRef2(ref2) ? ref2.value : ref2; -} -function toValue(source) { - return isFunction(source) ? source() : unref(source); -} -var shallowUnwrapHandlers = { - get: (target, key, receiver) => key === "__v_raw" ? target : unref(Reflect.get(target, key, receiver)), - set: (target, key, value, receiver) => { - const oldValue = target[key]; - if (isRef2(oldValue) && !isRef2(value)) { - oldValue.value = value; - return true; - } else { - return Reflect.set(target, key, value, receiver); - } - } -}; -function proxyRefs(objectWithRefs) { - return isReactive(objectWithRefs) ? objectWithRefs : new Proxy(objectWithRefs, shallowUnwrapHandlers); -} -var CustomRefImpl = class { - constructor(factory) { - this["__v_isRef"] = true; - this._value = void 0; - const dep = this.dep = new Dep(); - const { get, set } = factory(dep.track.bind(dep), dep.trigger.bind(dep)); - this._get = get; - this._set = set; - } - get value() { - return this._value = this._get(); - } - set value(newVal) { - this._set(newVal); - } -}; -function customRef(factory) { - return new CustomRefImpl(factory); -} -function toRefs(object) { - if (!isProxy(object)) { - warn(`toRefs() expects a reactive object but received a plain one.`); - } - const ret = isArray(object) ? new Array(object.length) : {}; - for (const key in object) { - ret[key] = propertyToRef(object, key); - } - return ret; -} -var ObjectRefImpl = class { - constructor(_object, _key, _defaultValue) { - this._object = _object; - this._key = _key; - this._defaultValue = _defaultValue; - this["__v_isRef"] = true; - this._value = void 0; - } - get value() { - const val = this._object[this._key]; - return this._value = val === void 0 ? this._defaultValue : val; - } - set value(newVal) { - this._object[this._key] = newVal; - } - get dep() { - return getDepFromReactive(toRaw(this._object), this._key); - } -}; -var GetterRefImpl = class { - constructor(_getter) { - this._getter = _getter; - this["__v_isRef"] = true; - this["__v_isReadonly"] = true; - this._value = void 0; - } - get value() { - return this._value = this._getter(); - } -}; -function toRef(source, key, defaultValue) { - if (isRef2(source)) { - return source; - } else if (isFunction(source)) { - return new GetterRefImpl(source); - } else if (isObject(source) && arguments.length > 1) { - return propertyToRef(source, key, defaultValue); - } else { - return ref(source); - } -} -function propertyToRef(source, key, defaultValue) { - const val = source[key]; - return isRef2(val) ? val : new ObjectRefImpl(source, key, defaultValue); -} -var ComputedRefImpl = class { - constructor(fn, setter, isSSR) { - this.fn = fn; - this.setter = setter; - this._value = void 0; - this.dep = new Dep(this); - this.__v_isRef = true; - this.deps = void 0; - this.depsTail = void 0; - this.flags = 16; - this.globalVersion = globalVersion - 1; - this.next = void 0; - this.effect = this; - this["__v_isReadonly"] = !setter; - this.isSSR = isSSR; - } - /** - * @internal - */ - notify() { - this.flags |= 16; - if (!(this.flags & 8) && // avoid infinite self recursion - activeSub !== this) { - batch(this, true); - return true; - } else if (true) ; - } - get value() { - const link = true ? this.dep.track({ - target: this, - type: "get", - key: "value" - }) : this.dep.track(); - refreshComputed(this); - if (link) { - link.version = this.dep.version; - } - return this._value; - } - set value(newValue) { - if (this.setter) { - this.setter(newValue); - } else if (true) { - warn("Write operation failed: computed value is readonly"); - } - } -}; -function computed(getterOrOptions, debugOptions, isSSR = false) { - let getter; - let setter; - if (isFunction(getterOrOptions)) { - getter = getterOrOptions; - } else { - getter = getterOrOptions.get; - setter = getterOrOptions.set; - } - const cRef = new ComputedRefImpl(getter, setter, isSSR); - if (debugOptions && !isSSR) { - cRef.onTrack = debugOptions.onTrack; - cRef.onTrigger = debugOptions.onTrigger; - } - return cRef; -} -var TrackOpTypes = { - "GET": "get", - "HAS": "has", - "ITERATE": "iterate" -}; -var TriggerOpTypes = { - "SET": "set", - "ADD": "add", - "DELETE": "delete", - "CLEAR": "clear" -}; -var INITIAL_WATCHER_VALUE = {}; -var cleanupMap = /* @__PURE__ */ new WeakMap(); -var activeWatcher = void 0; -function getCurrentWatcher() { - return activeWatcher; -} -function onWatcherCleanup(cleanupFn, failSilently = false, owner = activeWatcher) { - if (owner) { - let cleanups = cleanupMap.get(owner); - if (!cleanups) cleanupMap.set(owner, cleanups = []); - cleanups.push(cleanupFn); - } else if (!failSilently) { - warn( - `onWatcherCleanup() was called when there was no active watcher to associate with.` - ); - } -} -function watch(source, cb, options = EMPTY_OBJ) { - const { immediate, deep, once, scheduler, augmentJob, call } = options; - const warnInvalidSource = (s) => { - (options.onWarn || warn)( - `Invalid watch source: `, - s, - `A watch source can only be a getter/effect function, a ref, a reactive object, or an array of these types.` - ); - }; - const reactiveGetter = (source2) => { - if (deep) return source2; - if (isShallow(source2) || deep === false || deep === 0) - return traverse(source2, 1); - return traverse(source2); - }; - let effect2; - let getter; - let cleanup; - let boundCleanup; - let forceTrigger = false; - let isMultiSource = false; - if (isRef2(source)) { - getter = () => source.value; - forceTrigger = isShallow(source); - } else if (isReactive(source)) { - getter = () => reactiveGetter(source); - forceTrigger = true; - } else if (isArray(source)) { - isMultiSource = true; - forceTrigger = source.some((s) => isReactive(s) || isShallow(s)); - getter = () => source.map((s) => { - if (isRef2(s)) { - return s.value; - } else if (isReactive(s)) { - return reactiveGetter(s); - } else if (isFunction(s)) { - return call ? call(s, 2) : s(); - } else { - warnInvalidSource(s); - } - }); - } else if (isFunction(source)) { - if (cb) { - getter = call ? () => call(source, 2) : source; - } else { - getter = () => { - if (cleanup) { - pauseTracking(); - try { - cleanup(); - } finally { - resetTracking(); - } - } - const currentEffect = activeWatcher; - activeWatcher = effect2; - try { - return call ? call(source, 3, [boundCleanup]) : source(boundCleanup); - } finally { - activeWatcher = currentEffect; - } - }; - } - } else { - getter = NOOP; - warnInvalidSource(source); - } - if (cb && deep) { - const baseGetter = getter; - const depth = deep === true ? Infinity : deep; - getter = () => traverse(baseGetter(), depth); - } - const scope = getCurrentScope(); - const watchHandle = () => { - effect2.stop(); - if (scope && scope.active) { - remove(scope.effects, effect2); - } - }; - if (once && cb) { - const _cb = cb; - cb = (...args) => { - _cb(...args); - watchHandle(); - }; - } - let oldValue = isMultiSource ? new Array(source.length).fill(INITIAL_WATCHER_VALUE) : INITIAL_WATCHER_VALUE; - const job = (immediateFirstRun) => { - if (!(effect2.flags & 1) || !effect2.dirty && !immediateFirstRun) { - return; - } - if (cb) { - const newValue = effect2.run(); - if (deep || forceTrigger || (isMultiSource ? newValue.some((v, i) => hasChanged(v, oldValue[i])) : hasChanged(newValue, oldValue))) { - if (cleanup) { - cleanup(); - } - const currentWatcher = activeWatcher; - activeWatcher = effect2; - try { - const args = [ - newValue, - // pass undefined as the old value when it's changed for the first time - oldValue === INITIAL_WATCHER_VALUE ? void 0 : isMultiSource && oldValue[0] === INITIAL_WATCHER_VALUE ? [] : oldValue, - boundCleanup - ]; - call ? call(cb, 3, args) : ( - // @ts-expect-error - cb(...args) - ); - oldValue = newValue; - } finally { - activeWatcher = currentWatcher; - } - } - } else { - effect2.run(); - } - }; - if (augmentJob) { - augmentJob(job); - } - effect2 = new ReactiveEffect(getter); - effect2.scheduler = scheduler ? () => scheduler(job, false) : job; - boundCleanup = (fn) => onWatcherCleanup(fn, false, effect2); - cleanup = effect2.onStop = () => { - const cleanups = cleanupMap.get(effect2); - if (cleanups) { - if (call) { - call(cleanups, 4); - } else { - for (const cleanup2 of cleanups) cleanup2(); - } - cleanupMap.delete(effect2); - } - }; - if (true) { - effect2.onTrack = options.onTrack; - effect2.onTrigger = options.onTrigger; - } - if (cb) { - if (immediate) { - job(true); - } else { - oldValue = effect2.run(); - } - } else if (scheduler) { - scheduler(job.bind(null, true), true); - } else { - effect2.run(); - } - watchHandle.pause = effect2.pause.bind(effect2); - watchHandle.resume = effect2.resume.bind(effect2); - watchHandle.stop = watchHandle; - return watchHandle; -} -function traverse(value, depth = Infinity, seen) { - if (depth <= 0 || !isObject(value) || value["__v_skip"]) { - return value; - } - seen = seen || /* @__PURE__ */ new Set(); - if (seen.has(value)) { - return value; - } - seen.add(value); - depth--; - if (isRef2(value)) { - traverse(value.value, depth, seen); - } else if (isArray(value)) { - for (let i = 0; i < value.length; i++) { - traverse(value[i], depth, seen); - } - } else if (isSet(value) || isMap(value)) { - value.forEach((v) => { - traverse(v, depth, seen); - }); - } else if (isPlainObject(value)) { - for (const key in value) { - traverse(value[key], depth, seen); - } - for (const key of Object.getOwnPropertySymbols(value)) { - if (Object.prototype.propertyIsEnumerable.call(value, key)) { - traverse(value[key], depth, seen); - } - } - } - return value; -} - -// node_modules/.pnpm/@vue+runtime-core@3.5.13/node_modules/@vue/runtime-core/dist/runtime-core.esm-bundler.js -var stack = []; -function pushWarningContext(vnode) { - stack.push(vnode); -} -function popWarningContext() { - stack.pop(); -} -var isWarning = false; -function warn$1(msg, ...args) { - if (isWarning) return; - isWarning = true; - pauseTracking(); - const instance = stack.length ? stack[stack.length - 1].component : null; - const appWarnHandler = instance && instance.appContext.config.warnHandler; - const trace = getComponentTrace(); - if (appWarnHandler) { - callWithErrorHandling( - appWarnHandler, - instance, - 11, - [ - // eslint-disable-next-line no-restricted-syntax - msg + args.map((a) => { - var _a, _b; - return (_b = (_a = a.toString) == null ? void 0 : _a.call(a)) != null ? _b : JSON.stringify(a); - }).join(""), - instance && instance.proxy, - trace.map( - ({ vnode }) => `at <${formatComponentName(instance, vnode.type)}>` - ).join("\n"), - trace - ] - ); - } else { - const warnArgs = [`[Vue warn]: ${msg}`, ...args]; - if (trace.length && // avoid spamming console during tests - true) { - warnArgs.push(` -`, ...formatTrace(trace)); - } - console.warn(...warnArgs); - } - resetTracking(); - isWarning = false; -} -function getComponentTrace() { - let currentVNode = stack[stack.length - 1]; - if (!currentVNode) { - return []; - } - const normalizedStack = []; - while (currentVNode) { - const last = normalizedStack[0]; - if (last && last.vnode === currentVNode) { - last.recurseCount++; - } else { - normalizedStack.push({ - vnode: currentVNode, - recurseCount: 0 - }); - } - const parentInstance = currentVNode.component && currentVNode.component.parent; - currentVNode = parentInstance && parentInstance.vnode; - } - return normalizedStack; -} -function formatTrace(trace) { - const logs = []; - trace.forEach((entry, i) => { - logs.push(...i === 0 ? [] : [` -`], ...formatTraceEntry(entry)); - }); - return logs; -} -function formatTraceEntry({ vnode, recurseCount }) { - const postfix = recurseCount > 0 ? `... (${recurseCount} recursive calls)` : ``; - const isRoot = vnode.component ? vnode.component.parent == null : false; - const open = ` at <${formatComponentName( - vnode.component, - vnode.type, - isRoot - )}`; - const close = `>` + postfix; - return vnode.props ? [open, ...formatProps(vnode.props), close] : [open + close]; -} -function formatProps(props) { - const res = []; - const keys = Object.keys(props); - keys.slice(0, 3).forEach((key) => { - res.push(...formatProp(key, props[key])); - }); - if (keys.length > 3) { - res.push(` ...`); - } - return res; -} -function formatProp(key, value, raw) { - if (isString(value)) { - value = JSON.stringify(value); - return raw ? value : [`${key}=${value}`]; - } else if (typeof value === "number" || typeof value === "boolean" || value == null) { - return raw ? value : [`${key}=${value}`]; - } else if (isRef2(value)) { - value = formatProp(key, toRaw(value.value), true); - return raw ? value : [`${key}=Ref<`, value, `>`]; - } else if (isFunction(value)) { - return [`${key}=fn${value.name ? `<${value.name}>` : ``}`]; - } else { - value = toRaw(value); - return raw ? value : [`${key}=`, value]; - } -} -function assertNumber(val, type) { - if (false) return; - if (val === void 0) { - return; - } else if (typeof val !== "number") { - warn$1(`${type} is not a valid number - got ${JSON.stringify(val)}.`); - } else if (isNaN(val)) { - warn$1(`${type} is NaN - the duration expression might be incorrect.`); - } -} -var ErrorCodes = { - "SETUP_FUNCTION": 0, - "0": "SETUP_FUNCTION", - "RENDER_FUNCTION": 1, - "1": "RENDER_FUNCTION", - "NATIVE_EVENT_HANDLER": 5, - "5": "NATIVE_EVENT_HANDLER", - "COMPONENT_EVENT_HANDLER": 6, - "6": "COMPONENT_EVENT_HANDLER", - "VNODE_HOOK": 7, - "7": "VNODE_HOOK", - "DIRECTIVE_HOOK": 8, - "8": "DIRECTIVE_HOOK", - "TRANSITION_HOOK": 9, - "9": "TRANSITION_HOOK", - "APP_ERROR_HANDLER": 10, - "10": "APP_ERROR_HANDLER", - "APP_WARN_HANDLER": 11, - "11": "APP_WARN_HANDLER", - "FUNCTION_REF": 12, - "12": "FUNCTION_REF", - "ASYNC_COMPONENT_LOADER": 13, - "13": "ASYNC_COMPONENT_LOADER", - "SCHEDULER": 14, - "14": "SCHEDULER", - "COMPONENT_UPDATE": 15, - "15": "COMPONENT_UPDATE", - "APP_UNMOUNT_CLEANUP": 16, - "16": "APP_UNMOUNT_CLEANUP" -}; -var ErrorTypeStrings$1 = { - ["sp"]: "serverPrefetch hook", - ["bc"]: "beforeCreate hook", - ["c"]: "created hook", - ["bm"]: "beforeMount hook", - ["m"]: "mounted hook", - ["bu"]: "beforeUpdate hook", - ["u"]: "updated", - ["bum"]: "beforeUnmount hook", - ["um"]: "unmounted hook", - ["a"]: "activated hook", - ["da"]: "deactivated hook", - ["ec"]: "errorCaptured hook", - ["rtc"]: "renderTracked hook", - ["rtg"]: "renderTriggered hook", - [0]: "setup function", - [1]: "render function", - [2]: "watcher getter", - [3]: "watcher callback", - [4]: "watcher cleanup function", - [5]: "native event handler", - [6]: "component event handler", - [7]: "vnode hook", - [8]: "directive hook", - [9]: "transition hook", - [10]: "app errorHandler", - [11]: "app warnHandler", - [12]: "ref function", - [13]: "async component loader", - [14]: "scheduler flush", - [15]: "component update", - [16]: "app unmount cleanup function" -}; -function callWithErrorHandling(fn, instance, type, args) { - try { - return args ? fn(...args) : fn(); - } catch (err) { - handleError(err, instance, type); - } -} -function callWithAsyncErrorHandling(fn, instance, type, args) { - if (isFunction(fn)) { - const res = callWithErrorHandling(fn, instance, type, args); - if (res && isPromise(res)) { - res.catch((err) => { - handleError(err, instance, type); - }); - } - return res; - } - if (isArray(fn)) { - const values = []; - for (let i = 0; i < fn.length; i++) { - values.push(callWithAsyncErrorHandling(fn[i], instance, type, args)); - } - return values; - } else if (true) { - warn$1( - `Invalid value type passed to callWithAsyncErrorHandling(): ${typeof fn}` - ); - } -} -function handleError(err, instance, type, throwInDev = true) { - const contextVNode = instance ? instance.vnode : null; - const { errorHandler, throwUnhandledErrorInProduction } = instance && instance.appContext.config || EMPTY_OBJ; - if (instance) { - let cur = instance.parent; - const exposedInstance = instance.proxy; - const errorInfo = true ? ErrorTypeStrings$1[type] : `https://vuejs.org/error-reference/#runtime-${type}`; - while (cur) { - const errorCapturedHooks = cur.ec; - if (errorCapturedHooks) { - for (let i = 0; i < errorCapturedHooks.length; i++) { - if (errorCapturedHooks[i](err, exposedInstance, errorInfo) === false) { - return; - } - } - } - cur = cur.parent; - } - if (errorHandler) { - pauseTracking(); - callWithErrorHandling(errorHandler, null, 10, [ - err, - exposedInstance, - errorInfo - ]); - resetTracking(); - return; - } - } - logError(err, type, contextVNode, throwInDev, throwUnhandledErrorInProduction); -} -function logError(err, type, contextVNode, throwInDev = true, throwInProd = false) { - if (true) { - const info = ErrorTypeStrings$1[type]; - if (contextVNode) { - pushWarningContext(contextVNode); - } - warn$1(`Unhandled error${info ? ` during execution of ${info}` : ``}`); - if (contextVNode) { - popWarningContext(); - } - if (throwInDev) { - throw err; - } else { - console.error(err); - } - } else if (throwInProd) { - throw err; - } else { - console.error(err); - } -} -var queue = []; -var flushIndex = -1; -var pendingPostFlushCbs = []; -var activePostFlushCbs = null; -var postFlushIndex = 0; -var resolvedPromise = Promise.resolve(); -var currentFlushPromise = null; -var RECURSION_LIMIT = 100; -function nextTick(fn) { - const p2 = currentFlushPromise || resolvedPromise; - return fn ? p2.then(this ? fn.bind(this) : fn) : p2; -} -function findInsertionIndex(id) { - let start = flushIndex + 1; - let end = queue.length; - while (start < end) { - const middle = start + end >>> 1; - const middleJob = queue[middle]; - const middleJobId = getId(middleJob); - if (middleJobId < id || middleJobId === id && middleJob.flags & 2) { - start = middle + 1; - } else { - end = middle; - } - } - return start; -} -function queueJob(job) { - if (!(job.flags & 1)) { - const jobId = getId(job); - const lastJob = queue[queue.length - 1]; - if (!lastJob || // fast path when the job id is larger than the tail - !(job.flags & 2) && jobId >= getId(lastJob)) { - queue.push(job); - } else { - queue.splice(findInsertionIndex(jobId), 0, job); - } - job.flags |= 1; - queueFlush(); - } -} -function queueFlush() { - if (!currentFlushPromise) { - currentFlushPromise = resolvedPromise.then(flushJobs); - } -} -function queuePostFlushCb(cb) { - if (!isArray(cb)) { - if (activePostFlushCbs && cb.id === -1) { - activePostFlushCbs.splice(postFlushIndex + 1, 0, cb); - } else if (!(cb.flags & 1)) { - pendingPostFlushCbs.push(cb); - cb.flags |= 1; - } - } else { - pendingPostFlushCbs.push(...cb); - } - queueFlush(); -} -function flushPreFlushCbs(instance, seen, i = flushIndex + 1) { - if (true) { - seen = seen || /* @__PURE__ */ new Map(); - } - for (; i < queue.length; i++) { - const cb = queue[i]; - if (cb && cb.flags & 2) { - if (instance && cb.id !== instance.uid) { - continue; - } - if (checkRecursiveUpdates(seen, cb)) { - continue; - } - queue.splice(i, 1); - i--; - if (cb.flags & 4) { - cb.flags &= ~1; - } - cb(); - if (!(cb.flags & 4)) { - cb.flags &= ~1; - } - } - } -} -function flushPostFlushCbs(seen) { - if (pendingPostFlushCbs.length) { - const deduped = [...new Set(pendingPostFlushCbs)].sort( - (a, b) => getId(a) - getId(b) - ); - pendingPostFlushCbs.length = 0; - if (activePostFlushCbs) { - activePostFlushCbs.push(...deduped); - return; - } - activePostFlushCbs = deduped; - if (true) { - seen = seen || /* @__PURE__ */ new Map(); - } - for (postFlushIndex = 0; postFlushIndex < activePostFlushCbs.length; postFlushIndex++) { - const cb = activePostFlushCbs[postFlushIndex]; - if (checkRecursiveUpdates(seen, cb)) { - continue; - } - if (cb.flags & 4) { - cb.flags &= ~1; - } - if (!(cb.flags & 8)) cb(); - cb.flags &= ~1; - } - activePostFlushCbs = null; - postFlushIndex = 0; - } -} -var getId = (job) => job.id == null ? job.flags & 2 ? -1 : Infinity : job.id; -function flushJobs(seen) { - if (true) { - seen = seen || /* @__PURE__ */ new Map(); - } - const check = true ? (job) => checkRecursiveUpdates(seen, job) : NOOP; - try { - for (flushIndex = 0; flushIndex < queue.length; flushIndex++) { - const job = queue[flushIndex]; - if (job && !(job.flags & 8)) { - if (check(job)) { - continue; - } - if (job.flags & 4) { - job.flags &= ~1; - } - callWithErrorHandling( - job, - job.i, - job.i ? 15 : 14 - ); - if (!(job.flags & 4)) { - job.flags &= ~1; - } - } - } - } finally { - for (; flushIndex < queue.length; flushIndex++) { - const job = queue[flushIndex]; - if (job) { - job.flags &= ~1; - } - } - flushIndex = -1; - queue.length = 0; - flushPostFlushCbs(seen); - currentFlushPromise = null; - if (queue.length || pendingPostFlushCbs.length) { - flushJobs(seen); - } - } -} -function checkRecursiveUpdates(seen, fn) { - const count = seen.get(fn) || 0; - if (count > RECURSION_LIMIT) { - const instance = fn.i; - const componentName = instance && getComponentName(instance.type); - handleError( - `Maximum recursive updates exceeded${componentName ? ` in component <${componentName}>` : ``}. This means you have a reactive effect that is mutating its own dependencies and thus recursively triggering itself. Possible sources include component template, render function, updated hook or watcher source function.`, - null, - 10 - ); - return true; - } - seen.set(fn, count + 1); - return false; -} -var isHmrUpdating = false; -var hmrDirtyComponents = /* @__PURE__ */ new Map(); -if (true) { - getGlobalThis().__VUE_HMR_RUNTIME__ = { - createRecord: tryWrap(createRecord), - rerender: tryWrap(rerender), - reload: tryWrap(reload) - }; -} -var map = /* @__PURE__ */ new Map(); -function registerHMR(instance) { - const id = instance.type.__hmrId; - let record = map.get(id); - if (!record) { - createRecord(id, instance.type); - record = map.get(id); - } - record.instances.add(instance); -} -function unregisterHMR(instance) { - map.get(instance.type.__hmrId).instances.delete(instance); -} -function createRecord(id, initialDef) { - if (map.has(id)) { - return false; - } - map.set(id, { - initialDef: normalizeClassComponent(initialDef), - instances: /* @__PURE__ */ new Set() - }); - return true; -} -function normalizeClassComponent(component) { - return isClassComponent(component) ? component.__vccOpts : component; -} -function rerender(id, newRender) { - const record = map.get(id); - if (!record) { - return; - } - record.initialDef.render = newRender; - [...record.instances].forEach((instance) => { - if (newRender) { - instance.render = newRender; - normalizeClassComponent(instance.type).render = newRender; - } - instance.renderCache = []; - isHmrUpdating = true; - instance.update(); - isHmrUpdating = false; - }); -} -function reload(id, newComp) { - const record = map.get(id); - if (!record) return; - newComp = normalizeClassComponent(newComp); - updateComponentDef(record.initialDef, newComp); - const instances = [...record.instances]; - for (let i = 0; i < instances.length; i++) { - const instance = instances[i]; - const oldComp = normalizeClassComponent(instance.type); - let dirtyInstances = hmrDirtyComponents.get(oldComp); - if (!dirtyInstances) { - if (oldComp !== record.initialDef) { - updateComponentDef(oldComp, newComp); - } - hmrDirtyComponents.set(oldComp, dirtyInstances = /* @__PURE__ */ new Set()); - } - dirtyInstances.add(instance); - instance.appContext.propsCache.delete(instance.type); - instance.appContext.emitsCache.delete(instance.type); - instance.appContext.optionsCache.delete(instance.type); - if (instance.ceReload) { - dirtyInstances.add(instance); - instance.ceReload(newComp.styles); - dirtyInstances.delete(instance); - } else if (instance.parent) { - queueJob(() => { - isHmrUpdating = true; - instance.parent.update(); - isHmrUpdating = false; - dirtyInstances.delete(instance); - }); - } else if (instance.appContext.reload) { - instance.appContext.reload(); - } else if (typeof window !== "undefined") { - window.location.reload(); - } else { - console.warn( - "[HMR] Root or manually mounted instance modified. Full reload required." - ); - } - if (instance.root.ce && instance !== instance.root) { - instance.root.ce._removeChildStyle(oldComp); - } - } - queuePostFlushCb(() => { - hmrDirtyComponents.clear(); - }); -} -function updateComponentDef(oldComp, newComp) { - extend(oldComp, newComp); - for (const key in oldComp) { - if (key !== "__file" && !(key in newComp)) { - delete oldComp[key]; - } - } -} -function tryWrap(fn) { - return (id, arg) => { - try { - return fn(id, arg); - } catch (e) { - console.error(e); - console.warn( - `[HMR] Something went wrong during Vue component hot-reload. Full reload required.` - ); - } - }; -} -var devtools$1; -var buffer = []; -var devtoolsNotInstalled = false; -function emit$1(event, ...args) { - if (devtools$1) { - devtools$1.emit(event, ...args); - } else if (!devtoolsNotInstalled) { - buffer.push({ event, args }); - } -} -function setDevtoolsHook$1(hook, target) { - var _a, _b; - devtools$1 = hook; - if (devtools$1) { - devtools$1.enabled = true; - buffer.forEach(({ event, args }) => devtools$1.emit(event, ...args)); - buffer = []; - } else if ( - // handle late devtools injection - only do this if we are in an actual - // browser environment to avoid the timer handle stalling test runner exit - // (#4815) - typeof window !== "undefined" && // some envs mock window but not fully - window.HTMLElement && // also exclude jsdom - // eslint-disable-next-line no-restricted-syntax - !((_b = (_a = window.navigator) == null ? void 0 : _a.userAgent) == null ? void 0 : _b.includes("jsdom")) - ) { - const replay = target.__VUE_DEVTOOLS_HOOK_REPLAY__ = target.__VUE_DEVTOOLS_HOOK_REPLAY__ || []; - replay.push((newHook) => { - setDevtoolsHook$1(newHook, target); - }); - setTimeout(() => { - if (!devtools$1) { - target.__VUE_DEVTOOLS_HOOK_REPLAY__ = null; - devtoolsNotInstalled = true; - buffer = []; - } - }, 3e3); - } else { - devtoolsNotInstalled = true; - buffer = []; - } -} -function devtoolsInitApp(app, version2) { - emit$1("app:init", app, version2, { - Fragment, - Text, - Comment, - Static - }); -} -function devtoolsUnmountApp(app) { - emit$1("app:unmount", app); -} -var devtoolsComponentAdded = createDevtoolsComponentHook( - "component:added" - /* COMPONENT_ADDED */ -); -var devtoolsComponentUpdated = createDevtoolsComponentHook( - "component:updated" - /* COMPONENT_UPDATED */ -); -var _devtoolsComponentRemoved = createDevtoolsComponentHook( - "component:removed" - /* COMPONENT_REMOVED */ -); -var devtoolsComponentRemoved = (component) => { - if (devtools$1 && typeof devtools$1.cleanupBuffer === "function" && // remove the component if it wasn't buffered - !devtools$1.cleanupBuffer(component)) { - _devtoolsComponentRemoved(component); - } -}; -function createDevtoolsComponentHook(hook) { - return (component) => { - emit$1( - hook, - component.appContext.app, - component.uid, - component.parent ? component.parent.uid : void 0, - component - ); - }; -} -var devtoolsPerfStart = createDevtoolsPerformanceHook( - "perf:start" - /* PERFORMANCE_START */ -); -var devtoolsPerfEnd = createDevtoolsPerformanceHook( - "perf:end" - /* PERFORMANCE_END */ -); -function createDevtoolsPerformanceHook(hook) { - return (component, type, time) => { - emit$1(hook, component.appContext.app, component.uid, component, type, time); - }; -} -function devtoolsComponentEmit(component, event, params) { - emit$1( - "component:emit", - component.appContext.app, - component, - event, - params - ); -} -var currentRenderingInstance = null; -var currentScopeId = null; -function setCurrentRenderingInstance(instance) { - const prev = currentRenderingInstance; - currentRenderingInstance = instance; - currentScopeId = instance && instance.type.__scopeId || null; - return prev; -} -function pushScopeId(id) { - currentScopeId = id; -} -function popScopeId() { - currentScopeId = null; -} -var withScopeId = (_id) => withCtx; -function withCtx(fn, ctx = currentRenderingInstance, isNonScopedSlot) { - if (!ctx) return fn; - if (fn._n) { - return fn; - } - const renderFnWithContext = (...args) => { - if (renderFnWithContext._d) { - setBlockTracking(-1); - } - const prevInstance = setCurrentRenderingInstance(ctx); - let res; - try { - res = fn(...args); - } finally { - setCurrentRenderingInstance(prevInstance); - if (renderFnWithContext._d) { - setBlockTracking(1); - } - } - if (true) { - devtoolsComponentUpdated(ctx); - } - return res; - }; - renderFnWithContext._n = true; - renderFnWithContext._c = true; - renderFnWithContext._d = true; - return renderFnWithContext; -} -function validateDirectiveName(name) { - if (isBuiltInDirective(name)) { - warn$1("Do not use built-in directive ids as custom directive id: " + name); - } -} -function withDirectives(vnode, directives) { - if (currentRenderingInstance === null) { - warn$1(`withDirectives can only be used inside render functions.`); - return vnode; - } - const instance = getComponentPublicInstance(currentRenderingInstance); - const bindings = vnode.dirs || (vnode.dirs = []); - for (let i = 0; i < directives.length; i++) { - let [dir, value, arg, modifiers = EMPTY_OBJ] = directives[i]; - if (dir) { - if (isFunction(dir)) { - dir = { - mounted: dir, - updated: dir - }; - } - if (dir.deep) { - traverse(value); - } - bindings.push({ - dir, - instance, - value, - oldValue: void 0, - arg, - modifiers - }); - } - } - return vnode; -} -function invokeDirectiveHook(vnode, prevVNode, instance, name) { - const bindings = vnode.dirs; - const oldBindings = prevVNode && prevVNode.dirs; - for (let i = 0; i < bindings.length; i++) { - const binding = bindings[i]; - if (oldBindings) { - binding.oldValue = oldBindings[i].value; - } - let hook = binding.dir[name]; - if (hook) { - pauseTracking(); - callWithAsyncErrorHandling(hook, instance, 8, [ - vnode.el, - binding, - vnode, - prevVNode - ]); - resetTracking(); - } - } -} -var TeleportEndKey = Symbol("_vte"); -var isTeleport = (type) => type.__isTeleport; -var isTeleportDisabled = (props) => props && (props.disabled || props.disabled === ""); -var isTeleportDeferred = (props) => props && (props.defer || props.defer === ""); -var isTargetSVG = (target) => typeof SVGElement !== "undefined" && target instanceof SVGElement; -var isTargetMathML = (target) => typeof MathMLElement === "function" && target instanceof MathMLElement; -var resolveTarget = (props, select) => { - const targetSelector = props && props.to; - if (isString(targetSelector)) { - if (!select) { - warn$1( - `Current renderer does not support string target for Teleports. (missing querySelector renderer option)` - ); - return null; - } else { - const target = select(targetSelector); - if (!target && !isTeleportDisabled(props)) { - warn$1( - `Failed to locate Teleport target with selector "${targetSelector}". Note the target element must exist before the component is mounted - i.e. the target cannot be rendered by the component itself, and ideally should be outside of the entire Vue component tree.` - ); - } - return target; - } - } else { - if (!targetSelector && !isTeleportDisabled(props)) { - warn$1(`Invalid Teleport target: ${targetSelector}`); - } - return targetSelector; - } -}; -var TeleportImpl = { - name: "Teleport", - __isTeleport: true, - process(n1, n2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized, internals) { - const { - mc: mountChildren, - pc: patchChildren, - pbc: patchBlockChildren, - o: { insert, querySelector, createText, createComment } - } = internals; - const disabled = isTeleportDisabled(n2.props); - let { shapeFlag, children, dynamicChildren } = n2; - if (isHmrUpdating) { - optimized = false; - dynamicChildren = null; - } - if (n1 == null) { - const placeholder = n2.el = true ? createComment("teleport start") : createText(""); - const mainAnchor = n2.anchor = true ? createComment("teleport end") : createText(""); - insert(placeholder, container, anchor); - insert(mainAnchor, container, anchor); - const mount = (container2, anchor2) => { - if (shapeFlag & 16) { - if (parentComponent && parentComponent.isCE) { - parentComponent.ce._teleportTarget = container2; - } - mountChildren( - children, - container2, - anchor2, - parentComponent, - parentSuspense, - namespace, - slotScopeIds, - optimized - ); - } - }; - const mountToTarget = () => { - const target = n2.target = resolveTarget(n2.props, querySelector); - const targetAnchor = prepareAnchor(target, n2, createText, insert); - if (target) { - if (namespace !== "svg" && isTargetSVG(target)) { - namespace = "svg"; - } else if (namespace !== "mathml" && isTargetMathML(target)) { - namespace = "mathml"; - } - if (!disabled) { - mount(target, targetAnchor); - updateCssVars(n2, false); - } - } else if (!disabled) { - warn$1( - "Invalid Teleport target on mount:", - target, - `(${typeof target})` - ); - } - }; - if (disabled) { - mount(container, mainAnchor); - updateCssVars(n2, true); - } - if (isTeleportDeferred(n2.props)) { - queuePostRenderEffect(() => { - mountToTarget(); - n2.el.__isMounted = true; - }, parentSuspense); - } else { - mountToTarget(); - } - } else { - if (isTeleportDeferred(n2.props) && !n1.el.__isMounted) { - queuePostRenderEffect(() => { - TeleportImpl.process( - n1, - n2, - container, - anchor, - parentComponent, - parentSuspense, - namespace, - slotScopeIds, - optimized, - internals - ); - delete n1.el.__isMounted; - }, parentSuspense); - return; - } - n2.el = n1.el; - n2.targetStart = n1.targetStart; - const mainAnchor = n2.anchor = n1.anchor; - const target = n2.target = n1.target; - const targetAnchor = n2.targetAnchor = n1.targetAnchor; - const wasDisabled = isTeleportDisabled(n1.props); - const currentContainer = wasDisabled ? container : target; - const currentAnchor = wasDisabled ? mainAnchor : targetAnchor; - if (namespace === "svg" || isTargetSVG(target)) { - namespace = "svg"; - } else if (namespace === "mathml" || isTargetMathML(target)) { - namespace = "mathml"; - } - if (dynamicChildren) { - patchBlockChildren( - n1.dynamicChildren, - dynamicChildren, - currentContainer, - parentComponent, - parentSuspense, - namespace, - slotScopeIds - ); - traverseStaticChildren(n1, n2, true); - } else if (!optimized) { - patchChildren( - n1, - n2, - currentContainer, - currentAnchor, - parentComponent, - parentSuspense, - namespace, - slotScopeIds, - false - ); - } - if (disabled) { - if (!wasDisabled) { - moveTeleport( - n2, - container, - mainAnchor, - internals, - 1 - ); - } else { - if (n2.props && n1.props && n2.props.to !== n1.props.to) { - n2.props.to = n1.props.to; - } - } - } else { - if ((n2.props && n2.props.to) !== (n1.props && n1.props.to)) { - const nextTarget = n2.target = resolveTarget( - n2.props, - querySelector - ); - if (nextTarget) { - moveTeleport( - n2, - nextTarget, - null, - internals, - 0 - ); - } else if (true) { - warn$1( - "Invalid Teleport target on update:", - target, - `(${typeof target})` - ); - } - } else if (wasDisabled) { - moveTeleport( - n2, - target, - targetAnchor, - internals, - 1 - ); - } - } - updateCssVars(n2, disabled); - } - }, - remove(vnode, parentComponent, parentSuspense, { um: unmount, o: { remove: hostRemove } }, doRemove) { - const { - shapeFlag, - children, - anchor, - targetStart, - targetAnchor, - target, - props - } = vnode; - if (target) { - hostRemove(targetStart); - hostRemove(targetAnchor); - } - doRemove && hostRemove(anchor); - if (shapeFlag & 16) { - const shouldRemove = doRemove || !isTeleportDisabled(props); - for (let i = 0; i < children.length; i++) { - const child = children[i]; - unmount( - child, - parentComponent, - parentSuspense, - shouldRemove, - !!child.dynamicChildren - ); - } - } - }, - move: moveTeleport, - hydrate: hydrateTeleport -}; -function moveTeleport(vnode, container, parentAnchor, { o: { insert }, m: move }, moveType = 2) { - if (moveType === 0) { - insert(vnode.targetAnchor, container, parentAnchor); - } - const { el, anchor, shapeFlag, children, props } = vnode; - const isReorder = moveType === 2; - if (isReorder) { - insert(el, container, parentAnchor); - } - if (!isReorder || isTeleportDisabled(props)) { - if (shapeFlag & 16) { - for (let i = 0; i < children.length; i++) { - move( - children[i], - container, - parentAnchor, - 2 - ); - } - } - } - if (isReorder) { - insert(anchor, container, parentAnchor); - } -} -function hydrateTeleport(node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized, { - o: { nextSibling, parentNode, querySelector, insert, createText } -}, hydrateChildren) { - const target = vnode.target = resolveTarget( - vnode.props, - querySelector - ); - if (target) { - const disabled = isTeleportDisabled(vnode.props); - const targetNode = target._lpa || target.firstChild; - if (vnode.shapeFlag & 16) { - if (disabled) { - vnode.anchor = hydrateChildren( - nextSibling(node), - vnode, - parentNode(node), - parentComponent, - parentSuspense, - slotScopeIds, - optimized - ); - vnode.targetStart = targetNode; - vnode.targetAnchor = targetNode && nextSibling(targetNode); - } else { - vnode.anchor = nextSibling(node); - let targetAnchor = targetNode; - while (targetAnchor) { - if (targetAnchor && targetAnchor.nodeType === 8) { - if (targetAnchor.data === "teleport start anchor") { - vnode.targetStart = targetAnchor; - } else if (targetAnchor.data === "teleport anchor") { - vnode.targetAnchor = targetAnchor; - target._lpa = vnode.targetAnchor && nextSibling(vnode.targetAnchor); - break; - } - } - targetAnchor = nextSibling(targetAnchor); - } - if (!vnode.targetAnchor) { - prepareAnchor(target, vnode, createText, insert); - } - hydrateChildren( - targetNode && nextSibling(targetNode), - vnode, - target, - parentComponent, - parentSuspense, - slotScopeIds, - optimized - ); - } - } - updateCssVars(vnode, disabled); - } - return vnode.anchor && nextSibling(vnode.anchor); -} -var Teleport = TeleportImpl; -function updateCssVars(vnode, isDisabled) { - const ctx = vnode.ctx; - if (ctx && ctx.ut) { - let node, anchor; - if (isDisabled) { - node = vnode.el; - anchor = vnode.anchor; - } else { - node = vnode.targetStart; - anchor = vnode.targetAnchor; - } - while (node && node !== anchor) { - if (node.nodeType === 1) node.setAttribute("data-v-owner", ctx.uid); - node = node.nextSibling; - } - ctx.ut(); - } -} -function prepareAnchor(target, vnode, createText, insert) { - const targetStart = vnode.targetStart = createText(""); - const targetAnchor = vnode.targetAnchor = createText(""); - targetStart[TeleportEndKey] = targetAnchor; - if (target) { - insert(targetStart, target); - insert(targetAnchor, target); - } - return targetAnchor; -} -var leaveCbKey = Symbol("_leaveCb"); -var enterCbKey = Symbol("_enterCb"); -function useTransitionState() { - const state = { - isMounted: false, - isLeaving: false, - isUnmounting: false, - leavingVNodes: /* @__PURE__ */ new Map() - }; - onMounted(() => { - state.isMounted = true; - }); - onBeforeUnmount(() => { - state.isUnmounting = true; - }); - return state; -} -var TransitionHookValidator = [Function, Array]; -var BaseTransitionPropsValidators = { - mode: String, - appear: Boolean, - persisted: Boolean, - // enter - onBeforeEnter: TransitionHookValidator, - onEnter: TransitionHookValidator, - onAfterEnter: TransitionHookValidator, - onEnterCancelled: TransitionHookValidator, - // leave - onBeforeLeave: TransitionHookValidator, - onLeave: TransitionHookValidator, - onAfterLeave: TransitionHookValidator, - onLeaveCancelled: TransitionHookValidator, - // appear - onBeforeAppear: TransitionHookValidator, - onAppear: TransitionHookValidator, - onAfterAppear: TransitionHookValidator, - onAppearCancelled: TransitionHookValidator -}; -var recursiveGetSubtree = (instance) => { - const subTree = instance.subTree; - return subTree.component ? recursiveGetSubtree(subTree.component) : subTree; -}; -var BaseTransitionImpl = { - name: `BaseTransition`, - props: BaseTransitionPropsValidators, - setup(props, { slots }) { - const instance = getCurrentInstance(); - const state = useTransitionState(); - return () => { - const children = slots.default && getTransitionRawChildren(slots.default(), true); - if (!children || !children.length) { - return; - } - const child = findNonCommentChild(children); - const rawProps = toRaw(props); - const { mode } = rawProps; - if (mode && mode !== "in-out" && mode !== "out-in" && mode !== "default") { - warn$1(`invalid mode: ${mode}`); - } - if (state.isLeaving) { - return emptyPlaceholder(child); - } - const innerChild = getInnerChild$1(child); - if (!innerChild) { - return emptyPlaceholder(child); - } - let enterHooks = resolveTransitionHooks( - innerChild, - rawProps, - state, - instance, - // #11061, ensure enterHooks is fresh after clone - (hooks) => enterHooks = hooks - ); - if (innerChild.type !== Comment) { - setTransitionHooks(innerChild, enterHooks); - } - let oldInnerChild = instance.subTree && getInnerChild$1(instance.subTree); - if (oldInnerChild && oldInnerChild.type !== Comment && !isSameVNodeType(innerChild, oldInnerChild) && recursiveGetSubtree(instance).type !== Comment) { - let leavingHooks = resolveTransitionHooks( - oldInnerChild, - rawProps, - state, - instance - ); - setTransitionHooks(oldInnerChild, leavingHooks); - if (mode === "out-in" && innerChild.type !== Comment) { - state.isLeaving = true; - leavingHooks.afterLeave = () => { - state.isLeaving = false; - if (!(instance.job.flags & 8)) { - instance.update(); - } - delete leavingHooks.afterLeave; - oldInnerChild = void 0; - }; - return emptyPlaceholder(child); - } else if (mode === "in-out" && innerChild.type !== Comment) { - leavingHooks.delayLeave = (el, earlyRemove, delayedLeave) => { - const leavingVNodesCache = getLeavingNodesForType( - state, - oldInnerChild - ); - leavingVNodesCache[String(oldInnerChild.key)] = oldInnerChild; - el[leaveCbKey] = () => { - earlyRemove(); - el[leaveCbKey] = void 0; - delete enterHooks.delayedLeave; - oldInnerChild = void 0; - }; - enterHooks.delayedLeave = () => { - delayedLeave(); - delete enterHooks.delayedLeave; - oldInnerChild = void 0; - }; - }; - } else { - oldInnerChild = void 0; - } - } else if (oldInnerChild) { - oldInnerChild = void 0; - } - return child; - }; - } -}; -function findNonCommentChild(children) { - let child = children[0]; - if (children.length > 1) { - let hasFound = false; - for (const c of children) { - if (c.type !== Comment) { - if (hasFound) { - warn$1( - " can only be used on a single element or component. Use for lists." - ); - break; - } - child = c; - hasFound = true; - if (false) break; - } - } - } - return child; -} -var BaseTransition = BaseTransitionImpl; -function getLeavingNodesForType(state, vnode) { - const { leavingVNodes } = state; - let leavingVNodesCache = leavingVNodes.get(vnode.type); - if (!leavingVNodesCache) { - leavingVNodesCache = /* @__PURE__ */ Object.create(null); - leavingVNodes.set(vnode.type, leavingVNodesCache); - } - return leavingVNodesCache; -} -function resolveTransitionHooks(vnode, props, state, instance, postClone) { - const { - appear, - mode, - persisted = false, - onBeforeEnter, - onEnter, - onAfterEnter, - onEnterCancelled, - onBeforeLeave, - onLeave, - onAfterLeave, - onLeaveCancelled, - onBeforeAppear, - onAppear, - onAfterAppear, - onAppearCancelled - } = props; - const key = String(vnode.key); - const leavingVNodesCache = getLeavingNodesForType(state, vnode); - const callHook3 = (hook, args) => { - hook && callWithAsyncErrorHandling( - hook, - instance, - 9, - args - ); - }; - const callAsyncHook = (hook, args) => { - const done = args[1]; - callHook3(hook, args); - if (isArray(hook)) { - if (hook.every((hook2) => hook2.length <= 1)) done(); - } else if (hook.length <= 1) { - done(); - } - }; - const hooks = { - mode, - persisted, - beforeEnter(el) { - let hook = onBeforeEnter; - if (!state.isMounted) { - if (appear) { - hook = onBeforeAppear || onBeforeEnter; - } else { - return; - } - } - if (el[leaveCbKey]) { - el[leaveCbKey]( - true - /* cancelled */ - ); - } - const leavingVNode = leavingVNodesCache[key]; - if (leavingVNode && isSameVNodeType(vnode, leavingVNode) && leavingVNode.el[leaveCbKey]) { - leavingVNode.el[leaveCbKey](); - } - callHook3(hook, [el]); - }, - enter(el) { - let hook = onEnter; - let afterHook = onAfterEnter; - let cancelHook = onEnterCancelled; - if (!state.isMounted) { - if (appear) { - hook = onAppear || onEnter; - afterHook = onAfterAppear || onAfterEnter; - cancelHook = onAppearCancelled || onEnterCancelled; - } else { - return; - } - } - let called = false; - const done = el[enterCbKey] = (cancelled) => { - if (called) return; - called = true; - if (cancelled) { - callHook3(cancelHook, [el]); - } else { - callHook3(afterHook, [el]); - } - if (hooks.delayedLeave) { - hooks.delayedLeave(); - } - el[enterCbKey] = void 0; - }; - if (hook) { - callAsyncHook(hook, [el, done]); - } else { - done(); - } - }, - leave(el, remove2) { - const key2 = String(vnode.key); - if (el[enterCbKey]) { - el[enterCbKey]( - true - /* cancelled */ - ); - } - if (state.isUnmounting) { - return remove2(); - } - callHook3(onBeforeLeave, [el]); - let called = false; - const done = el[leaveCbKey] = (cancelled) => { - if (called) return; - called = true; - remove2(); - if (cancelled) { - callHook3(onLeaveCancelled, [el]); - } else { - callHook3(onAfterLeave, [el]); - } - el[leaveCbKey] = void 0; - if (leavingVNodesCache[key2] === vnode) { - delete leavingVNodesCache[key2]; - } - }; - leavingVNodesCache[key2] = vnode; - if (onLeave) { - callAsyncHook(onLeave, [el, done]); - } else { - done(); - } - }, - clone(vnode2) { - const hooks2 = resolveTransitionHooks( - vnode2, - props, - state, - instance, - postClone - ); - if (postClone) postClone(hooks2); - return hooks2; - } - }; - return hooks; -} -function emptyPlaceholder(vnode) { - if (isKeepAlive(vnode)) { - vnode = cloneVNode(vnode); - vnode.children = null; - return vnode; - } -} -function getInnerChild$1(vnode) { - if (!isKeepAlive(vnode)) { - if (isTeleport(vnode.type) && vnode.children) { - return findNonCommentChild(vnode.children); - } - return vnode; - } - if (vnode.component) { - return vnode.component.subTree; - } - const { shapeFlag, children } = vnode; - if (children) { - if (shapeFlag & 16) { - return children[0]; - } - if (shapeFlag & 32 && isFunction(children.default)) { - return children.default(); - } - } -} -function setTransitionHooks(vnode, hooks) { - if (vnode.shapeFlag & 6 && vnode.component) { - vnode.transition = hooks; - setTransitionHooks(vnode.component.subTree, hooks); - } else if (vnode.shapeFlag & 128) { - vnode.ssContent.transition = hooks.clone(vnode.ssContent); - vnode.ssFallback.transition = hooks.clone(vnode.ssFallback); - } else { - vnode.transition = hooks; - } -} -function getTransitionRawChildren(children, keepComment = false, parentKey) { - let ret = []; - let keyedFragmentCount = 0; - for (let i = 0; i < children.length; i++) { - let child = children[i]; - const key = parentKey == null ? child.key : String(parentKey) + String(child.key != null ? child.key : i); - if (child.type === Fragment) { - if (child.patchFlag & 128) keyedFragmentCount++; - ret = ret.concat( - getTransitionRawChildren(child.children, keepComment, key) - ); - } else if (keepComment || child.type !== Comment) { - ret.push(key != null ? cloneVNode(child, { key }) : child); - } - } - if (keyedFragmentCount > 1) { - for (let i = 0; i < ret.length; i++) { - ret[i].patchFlag = -2; - } - } - return ret; -} -function defineComponent(options, extraOptions) { - return isFunction(options) ? ( - // #8236: extend call and options.name access are considered side-effects - // by Rollup, so we have to wrap it in a pure-annotated IIFE. - (() => extend({ name: options.name }, extraOptions, { setup: options }))() - ) : options; -} -function useId() { - const i = getCurrentInstance(); - if (i) { - return (i.appContext.config.idPrefix || "v") + "-" + i.ids[0] + i.ids[1]++; - } else if (true) { - warn$1( - `useId() is called when there is no active component instance to be associated with.` - ); - } - return ""; -} -function markAsyncBoundary(instance) { - instance.ids = [instance.ids[0] + instance.ids[2]++ + "-", 0, 0]; -} -var knownTemplateRefs = /* @__PURE__ */ new WeakSet(); -function useTemplateRef(key) { - const i = getCurrentInstance(); - const r = shallowRef(null); - if (i) { - const refs = i.refs === EMPTY_OBJ ? i.refs = {} : i.refs; - let desc; - if ((desc = Object.getOwnPropertyDescriptor(refs, key)) && !desc.configurable) { - warn$1(`useTemplateRef('${key}') already exists.`); - } else { - Object.defineProperty(refs, key, { - enumerable: true, - get: () => r.value, - set: (val) => r.value = val - }); - } - } else if (true) { - warn$1( - `useTemplateRef() is called when there is no active component instance to be associated with.` - ); - } - const ret = true ? readonly(r) : r; - if (true) { - knownTemplateRefs.add(ret); - } - return ret; -} -function setRef(rawRef, oldRawRef, parentSuspense, vnode, isUnmount = false) { - if (isArray(rawRef)) { - rawRef.forEach( - (r, i) => setRef( - r, - oldRawRef && (isArray(oldRawRef) ? oldRawRef[i] : oldRawRef), - parentSuspense, - vnode, - isUnmount - ) - ); - return; - } - if (isAsyncWrapper(vnode) && !isUnmount) { - if (vnode.shapeFlag & 512 && vnode.type.__asyncResolved && vnode.component.subTree.component) { - setRef(rawRef, oldRawRef, parentSuspense, vnode.component.subTree); - } - return; - } - const refValue = vnode.shapeFlag & 4 ? getComponentPublicInstance(vnode.component) : vnode.el; - const value = isUnmount ? null : refValue; - const { i: owner, r: ref2 } = rawRef; - if (!owner) { - warn$1( - `Missing ref owner context. ref cannot be used on hoisted vnodes. A vnode with ref must be created inside the render function.` - ); - return; - } - const oldRef = oldRawRef && oldRawRef.r; - const refs = owner.refs === EMPTY_OBJ ? owner.refs = {} : owner.refs; - const setupState = owner.setupState; - const rawSetupState = toRaw(setupState); - const canSetSetupRef = setupState === EMPTY_OBJ ? () => false : (key) => { - if (true) { - if (hasOwn(rawSetupState, key) && !isRef2(rawSetupState[key])) { - warn$1( - `Template ref "${key}" used on a non-ref value. It will not work in the production build.` - ); - } - if (knownTemplateRefs.has(rawSetupState[key])) { - return false; - } - } - return hasOwn(rawSetupState, key); - }; - if (oldRef != null && oldRef !== ref2) { - if (isString(oldRef)) { - refs[oldRef] = null; - if (canSetSetupRef(oldRef)) { - setupState[oldRef] = null; - } - } else if (isRef2(oldRef)) { - oldRef.value = null; - } - } - if (isFunction(ref2)) { - callWithErrorHandling(ref2, owner, 12, [value, refs]); - } else { - const _isString = isString(ref2); - const _isRef = isRef2(ref2); - if (_isString || _isRef) { - const doSet = () => { - if (rawRef.f) { - const existing = _isString ? canSetSetupRef(ref2) ? setupState[ref2] : refs[ref2] : ref2.value; - if (isUnmount) { - isArray(existing) && remove(existing, refValue); - } else { - if (!isArray(existing)) { - if (_isString) { - refs[ref2] = [refValue]; - if (canSetSetupRef(ref2)) { - setupState[ref2] = refs[ref2]; - } - } else { - ref2.value = [refValue]; - if (rawRef.k) refs[rawRef.k] = ref2.value; - } - } else if (!existing.includes(refValue)) { - existing.push(refValue); - } - } - } else if (_isString) { - refs[ref2] = value; - if (canSetSetupRef(ref2)) { - setupState[ref2] = value; - } - } else if (_isRef) { - ref2.value = value; - if (rawRef.k) refs[rawRef.k] = value; - } else if (true) { - warn$1("Invalid template ref type:", ref2, `(${typeof ref2})`); - } - }; - if (value) { - doSet.id = -1; - queuePostRenderEffect(doSet, parentSuspense); - } else { - doSet(); - } - } else if (true) { - warn$1("Invalid template ref type:", ref2, `(${typeof ref2})`); - } - } -} -var hasLoggedMismatchError = false; -var logMismatchError = () => { - if (hasLoggedMismatchError) { - return; - } - console.error("Hydration completed but contains mismatches."); - hasLoggedMismatchError = true; -}; -var isSVGContainer = (container) => container.namespaceURI.includes("svg") && container.tagName !== "foreignObject"; -var isMathMLContainer = (container) => container.namespaceURI.includes("MathML"); -var getContainerType = (container) => { - if (container.nodeType !== 1) return void 0; - if (isSVGContainer(container)) return "svg"; - if (isMathMLContainer(container)) return "mathml"; - return void 0; -}; -var isComment = (node) => node.nodeType === 8; -function createHydrationFunctions(rendererInternals) { - const { - mt: mountComponent, - p: patch, - o: { - patchProp: patchProp2, - createText, - nextSibling, - parentNode, - remove: remove2, - insert, - createComment - } - } = rendererInternals; - const hydrate2 = (vnode, container) => { - if (!container.hasChildNodes()) { - warn$1( - `Attempting to hydrate existing markup but container is empty. Performing full mount instead.` - ); - patch(null, vnode, container); - flushPostFlushCbs(); - container._vnode = vnode; - return; - } - hydrateNode(container.firstChild, vnode, null, null, null); - flushPostFlushCbs(); - container._vnode = vnode; - }; - const hydrateNode = (node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized = false) => { - optimized = optimized || !!vnode.dynamicChildren; - const isFragmentStart = isComment(node) && node.data === "["; - const onMismatch = () => handleMismatch( - node, - vnode, - parentComponent, - parentSuspense, - slotScopeIds, - isFragmentStart - ); - const { type, ref: ref2, shapeFlag, patchFlag } = vnode; - let domType = node.nodeType; - vnode.el = node; - if (true) { - def(node, "__vnode", vnode, true); - def(node, "__vueParentComponent", parentComponent, true); - } - if (patchFlag === -2) { - optimized = false; - vnode.dynamicChildren = null; - } - let nextNode = null; - switch (type) { - case Text: - if (domType !== 3) { - if (vnode.children === "") { - insert(vnode.el = createText(""), parentNode(node), node); - nextNode = node; - } else { - nextNode = onMismatch(); - } - } else { - if (node.data !== vnode.children) { - warn$1( - `Hydration text mismatch in`, - node.parentNode, - ` - - rendered on server: ${JSON.stringify( - node.data - )} - - expected on client: ${JSON.stringify(vnode.children)}` - ); - logMismatchError(); - node.data = vnode.children; - } - nextNode = nextSibling(node); - } - break; - case Comment: - if (isTemplateNode(node)) { - nextNode = nextSibling(node); - replaceNode( - vnode.el = node.content.firstChild, - node, - parentComponent - ); - } else if (domType !== 8 || isFragmentStart) { - nextNode = onMismatch(); - } else { - nextNode = nextSibling(node); - } - break; - case Static: - if (isFragmentStart) { - node = nextSibling(node); - domType = node.nodeType; - } - if (domType === 1 || domType === 3) { - nextNode = node; - const needToAdoptContent = !vnode.children.length; - for (let i = 0; i < vnode.staticCount; i++) { - if (needToAdoptContent) - vnode.children += nextNode.nodeType === 1 ? nextNode.outerHTML : nextNode.data; - if (i === vnode.staticCount - 1) { - vnode.anchor = nextNode; - } - nextNode = nextSibling(nextNode); - } - return isFragmentStart ? nextSibling(nextNode) : nextNode; - } else { - onMismatch(); - } - break; - case Fragment: - if (!isFragmentStart) { - nextNode = onMismatch(); - } else { - nextNode = hydrateFragment( - node, - vnode, - parentComponent, - parentSuspense, - slotScopeIds, - optimized - ); - } - break; - default: - if (shapeFlag & 1) { - if ((domType !== 1 || vnode.type.toLowerCase() !== node.tagName.toLowerCase()) && !isTemplateNode(node)) { - nextNode = onMismatch(); - } else { - nextNode = hydrateElement( - node, - vnode, - parentComponent, - parentSuspense, - slotScopeIds, - optimized - ); - } - } else if (shapeFlag & 6) { - vnode.slotScopeIds = slotScopeIds; - const container = parentNode(node); - if (isFragmentStart) { - nextNode = locateClosingAnchor(node); - } else if (isComment(node) && node.data === "teleport start") { - nextNode = locateClosingAnchor(node, node.data, "teleport end"); - } else { - nextNode = nextSibling(node); - } - mountComponent( - vnode, - container, - null, - parentComponent, - parentSuspense, - getContainerType(container), - optimized - ); - if (isAsyncWrapper(vnode) && !vnode.type.__asyncResolved) { - let subTree; - if (isFragmentStart) { - subTree = createVNode(Fragment); - subTree.anchor = nextNode ? nextNode.previousSibling : container.lastChild; - } else { - subTree = node.nodeType === 3 ? createTextVNode("") : createVNode("div"); - } - subTree.el = node; - vnode.component.subTree = subTree; - } - } else if (shapeFlag & 64) { - if (domType !== 8) { - nextNode = onMismatch(); - } else { - nextNode = vnode.type.hydrate( - node, - vnode, - parentComponent, - parentSuspense, - slotScopeIds, - optimized, - rendererInternals, - hydrateChildren - ); - } - } else if (shapeFlag & 128) { - nextNode = vnode.type.hydrate( - node, - vnode, - parentComponent, - parentSuspense, - getContainerType(parentNode(node)), - slotScopeIds, - optimized, - rendererInternals, - hydrateNode - ); - } else if (true) { - warn$1("Invalid HostVNode type:", type, `(${typeof type})`); - } - } - if (ref2 != null) { - setRef(ref2, null, parentSuspense, vnode); - } - return nextNode; - }; - const hydrateElement = (el, vnode, parentComponent, parentSuspense, slotScopeIds, optimized) => { - optimized = optimized || !!vnode.dynamicChildren; - const { type, props, patchFlag, shapeFlag, dirs, transition } = vnode; - const forcePatch = type === "input" || type === "option"; - if (true) { - if (dirs) { - invokeDirectiveHook(vnode, null, parentComponent, "created"); - } - let needCallTransitionHooks = false; - if (isTemplateNode(el)) { - needCallTransitionHooks = needTransition( - null, - // no need check parentSuspense in hydration - transition - ) && parentComponent && parentComponent.vnode.props && parentComponent.vnode.props.appear; - const content = el.content.firstChild; - if (needCallTransitionHooks) { - transition.beforeEnter(content); - } - replaceNode(content, el, parentComponent); - vnode.el = el = content; - } - if (shapeFlag & 16 && // skip if element has innerHTML / textContent - !(props && (props.innerHTML || props.textContent))) { - let next = hydrateChildren( - el.firstChild, - vnode, - el, - parentComponent, - parentSuspense, - slotScopeIds, - optimized - ); - let hasWarned2 = false; - while (next) { - if (!isMismatchAllowed( - el, - 1 - /* CHILDREN */ - )) { - if (!hasWarned2) { - warn$1( - `Hydration children mismatch on`, - el, - ` -Server rendered element contains more child nodes than client vdom.` - ); - hasWarned2 = true; - } - logMismatchError(); - } - const cur = next; - next = next.nextSibling; - remove2(cur); - } - } else if (shapeFlag & 8) { - let clientText = vnode.children; - if (clientText[0] === "\n" && (el.tagName === "PRE" || el.tagName === "TEXTAREA")) { - clientText = clientText.slice(1); - } - if (el.textContent !== clientText) { - if (!isMismatchAllowed( - el, - 0 - /* TEXT */ - )) { - warn$1( - `Hydration text content mismatch on`, - el, - ` - - rendered on server: ${el.textContent} - - expected on client: ${vnode.children}` - ); - logMismatchError(); - } - el.textContent = vnode.children; - } - } - if (props) { - if (true) { - const isCustomElement = el.tagName.includes("-"); - for (const key in props) { - if (// #11189 skip if this node has directives that have created hooks - // as it could have mutated the DOM in any possible way - !(dirs && dirs.some((d) => d.dir.created)) && propHasMismatch(el, key, props[key], vnode, parentComponent)) { - logMismatchError(); - } - if (forcePatch && (key.endsWith("value") || key === "indeterminate") || isOn(key) && !isReservedProp(key) || // force hydrate v-bind with .prop modifiers - key[0] === "." || isCustomElement) { - patchProp2(el, key, null, props[key], void 0, parentComponent); - } - } - } else if (props.onClick) { - patchProp2( - el, - "onClick", - null, - props.onClick, - void 0, - parentComponent - ); - } else if (patchFlag & 4 && isReactive(props.style)) { - for (const key in props.style) props.style[key]; - } - } - let vnodeHooks; - if (vnodeHooks = props && props.onVnodeBeforeMount) { - invokeVNodeHook(vnodeHooks, parentComponent, vnode); - } - if (dirs) { - invokeDirectiveHook(vnode, null, parentComponent, "beforeMount"); - } - if ((vnodeHooks = props && props.onVnodeMounted) || dirs || needCallTransitionHooks) { - queueEffectWithSuspense(() => { - vnodeHooks && invokeVNodeHook(vnodeHooks, parentComponent, vnode); - needCallTransitionHooks && transition.enter(el); - dirs && invokeDirectiveHook(vnode, null, parentComponent, "mounted"); - }, parentSuspense); - } - } - return el.nextSibling; - }; - const hydrateChildren = (node, parentVNode, container, parentComponent, parentSuspense, slotScopeIds, optimized) => { - optimized = optimized || !!parentVNode.dynamicChildren; - const children = parentVNode.children; - const l = children.length; - let hasWarned2 = false; - for (let i = 0; i < l; i++) { - const vnode = optimized ? children[i] : children[i] = normalizeVNode(children[i]); - const isText = vnode.type === Text; - if (node) { - if (isText && !optimized) { - if (i + 1 < l && normalizeVNode(children[i + 1]).type === Text) { - insert( - createText( - node.data.slice(vnode.children.length) - ), - container, - nextSibling(node) - ); - node.data = vnode.children; - } - } - node = hydrateNode( - node, - vnode, - parentComponent, - parentSuspense, - slotScopeIds, - optimized - ); - } else if (isText && !vnode.children) { - insert(vnode.el = createText(""), container); - } else { - if (!isMismatchAllowed( - container, - 1 - /* CHILDREN */ - )) { - if (!hasWarned2) { - warn$1( - `Hydration children mismatch on`, - container, - ` -Server rendered element contains fewer child nodes than client vdom.` - ); - hasWarned2 = true; - } - logMismatchError(); - } - patch( - null, - vnode, - container, - null, - parentComponent, - parentSuspense, - getContainerType(container), - slotScopeIds - ); - } - } - return node; - }; - const hydrateFragment = (node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized) => { - const { slotScopeIds: fragmentSlotScopeIds } = vnode; - if (fragmentSlotScopeIds) { - slotScopeIds = slotScopeIds ? slotScopeIds.concat(fragmentSlotScopeIds) : fragmentSlotScopeIds; - } - const container = parentNode(node); - const next = hydrateChildren( - nextSibling(node), - vnode, - container, - parentComponent, - parentSuspense, - slotScopeIds, - optimized - ); - if (next && isComment(next) && next.data === "]") { - return nextSibling(vnode.anchor = next); - } else { - logMismatchError(); - insert(vnode.anchor = createComment(`]`), container, next); - return next; - } - }; - const handleMismatch = (node, vnode, parentComponent, parentSuspense, slotScopeIds, isFragment) => { - if (!isMismatchAllowed( - node.parentElement, - 1 - /* CHILDREN */ - )) { - warn$1( - `Hydration node mismatch: -- rendered on server:`, - node, - node.nodeType === 3 ? `(text)` : isComment(node) && node.data === "[" ? `(start of fragment)` : ``, - ` -- expected on client:`, - vnode.type - ); - logMismatchError(); - } - vnode.el = null; - if (isFragment) { - const end = locateClosingAnchor(node); - while (true) { - const next2 = nextSibling(node); - if (next2 && next2 !== end) { - remove2(next2); - } else { - break; - } - } - } - const next = nextSibling(node); - const container = parentNode(node); - remove2(node); - patch( - null, - vnode, - container, - next, - parentComponent, - parentSuspense, - getContainerType(container), - slotScopeIds - ); - if (parentComponent) { - parentComponent.vnode.el = vnode.el; - updateHOCHostEl(parentComponent, vnode.el); - } - return next; - }; - const locateClosingAnchor = (node, open = "[", close = "]") => { - let match = 0; - while (node) { - node = nextSibling(node); - if (node && isComment(node)) { - if (node.data === open) match++; - if (node.data === close) { - if (match === 0) { - return nextSibling(node); - } else { - match--; - } - } - } - } - return node; - }; - const replaceNode = (newNode, oldNode, parentComponent) => { - const parentNode2 = oldNode.parentNode; - if (parentNode2) { - parentNode2.replaceChild(newNode, oldNode); - } - let parent = parentComponent; - while (parent) { - if (parent.vnode.el === oldNode) { - parent.vnode.el = parent.subTree.el = newNode; - } - parent = parent.parent; - } - }; - const isTemplateNode = (node) => { - return node.nodeType === 1 && node.tagName === "TEMPLATE"; - }; - return [hydrate2, hydrateNode]; -} -function propHasMismatch(el, key, clientValue, vnode, instance) { - let mismatchType; - let mismatchKey; - let actual; - let expected; - if (key === "class") { - actual = el.getAttribute("class"); - expected = normalizeClass(clientValue); - if (!isSetEqual(toClassSet(actual || ""), toClassSet(expected))) { - mismatchType = 2; - mismatchKey = `class`; - } - } else if (key === "style") { - actual = el.getAttribute("style") || ""; - expected = isString(clientValue) ? clientValue : stringifyStyle(normalizeStyle(clientValue)); - const actualMap = toStyleMap(actual); - const expectedMap = toStyleMap(expected); - if (vnode.dirs) { - for (const { dir, value } of vnode.dirs) { - if (dir.name === "show" && !value) { - expectedMap.set("display", "none"); - } - } - } - if (instance) { - resolveCssVars(instance, vnode, expectedMap); - } - if (!isMapEqual(actualMap, expectedMap)) { - mismatchType = 3; - mismatchKey = "style"; - } - } else if (el instanceof SVGElement && isKnownSvgAttr(key) || el instanceof HTMLElement && (isBooleanAttr(key) || isKnownHtmlAttr(key))) { - if (isBooleanAttr(key)) { - actual = el.hasAttribute(key); - expected = includeBooleanAttr(clientValue); - } else if (clientValue == null) { - actual = el.hasAttribute(key); - expected = false; - } else { - if (el.hasAttribute(key)) { - actual = el.getAttribute(key); - } else if (key === "value" && el.tagName === "TEXTAREA") { - actual = el.value; - } else { - actual = false; - } - expected = isRenderableAttrValue(clientValue) ? String(clientValue) : false; - } - if (actual !== expected) { - mismatchType = 4; - mismatchKey = key; - } - } - if (mismatchType != null && !isMismatchAllowed(el, mismatchType)) { - const format = (v) => v === false ? `(not rendered)` : `${mismatchKey}="${v}"`; - const preSegment = `Hydration ${MismatchTypeString[mismatchType]} mismatch on`; - const postSegment = ` - - rendered on server: ${format(actual)} - - expected on client: ${format(expected)} - Note: this mismatch is check-only. The DOM will not be rectified in production due to performance overhead. - You should fix the source of the mismatch.`; - { - warn$1(preSegment, el, postSegment); - } - return true; - } - return false; -} -function toClassSet(str) { - return new Set(str.trim().split(/\s+/)); -} -function isSetEqual(a, b) { - if (a.size !== b.size) { - return false; - } - for (const s of a) { - if (!b.has(s)) { - return false; - } - } - return true; -} -function toStyleMap(str) { - const styleMap = /* @__PURE__ */ new Map(); - for (const item of str.split(";")) { - let [key, value] = item.split(":"); - key = key.trim(); - value = value && value.trim(); - if (key && value) { - styleMap.set(key, value); - } - } - return styleMap; -} -function isMapEqual(a, b) { - if (a.size !== b.size) { - return false; - } - for (const [key, value] of a) { - if (value !== b.get(key)) { - return false; - } - } - return true; -} -function resolveCssVars(instance, vnode, expectedMap) { - const root = instance.subTree; - if (instance.getCssVars && (vnode === root || root && root.type === Fragment && root.children.includes(vnode))) { - const cssVars = instance.getCssVars(); - for (const key in cssVars) { - expectedMap.set( - `--${getEscapedCssVarName(key, false)}`, - String(cssVars[key]) - ); - } - } - if (vnode === root && instance.parent) { - resolveCssVars(instance.parent, instance.vnode, expectedMap); - } -} -var allowMismatchAttr = "data-allow-mismatch"; -var MismatchTypeString = { - [ - 0 - /* TEXT */ - ]: "text", - [ - 1 - /* CHILDREN */ - ]: "children", - [ - 2 - /* CLASS */ - ]: "class", - [ - 3 - /* STYLE */ - ]: "style", - [ - 4 - /* ATTRIBUTE */ - ]: "attribute" -}; -function isMismatchAllowed(el, allowedType) { - if (allowedType === 0 || allowedType === 1) { - while (el && !el.hasAttribute(allowMismatchAttr)) { - el = el.parentElement; - } - } - const allowedAttr = el && el.getAttribute(allowMismatchAttr); - if (allowedAttr == null) { - return false; - } else if (allowedAttr === "") { - return true; - } else { - const list = allowedAttr.split(","); - if (allowedType === 0 && list.includes("children")) { - return true; - } - return allowedAttr.split(",").includes(MismatchTypeString[allowedType]); - } -} -var requestIdleCallback = getGlobalThis().requestIdleCallback || ((cb) => setTimeout(cb, 1)); -var cancelIdleCallback = getGlobalThis().cancelIdleCallback || ((id) => clearTimeout(id)); -var hydrateOnIdle = (timeout = 1e4) => (hydrate2) => { - const id = requestIdleCallback(hydrate2, { timeout }); - return () => cancelIdleCallback(id); -}; -function elementIsVisibleInViewport(el) { - const { top, left, bottom, right } = el.getBoundingClientRect(); - const { innerHeight, innerWidth } = window; - return (top > 0 && top < innerHeight || bottom > 0 && bottom < innerHeight) && (left > 0 && left < innerWidth || right > 0 && right < innerWidth); -} -var hydrateOnVisible = (opts) => (hydrate2, forEach) => { - const ob = new IntersectionObserver((entries) => { - for (const e of entries) { - if (!e.isIntersecting) continue; - ob.disconnect(); - hydrate2(); - break; - } - }, opts); - forEach((el) => { - if (!(el instanceof Element)) return; - if (elementIsVisibleInViewport(el)) { - hydrate2(); - ob.disconnect(); - return false; - } - ob.observe(el); - }); - return () => ob.disconnect(); -}; -var hydrateOnMediaQuery = (query) => (hydrate2) => { - if (query) { - const mql = matchMedia(query); - if (mql.matches) { - hydrate2(); - } else { - mql.addEventListener("change", hydrate2, { once: true }); - return () => mql.removeEventListener("change", hydrate2); - } - } -}; -var hydrateOnInteraction = (interactions = []) => (hydrate2, forEach) => { - if (isString(interactions)) interactions = [interactions]; - let hasHydrated = false; - const doHydrate = (e) => { - if (!hasHydrated) { - hasHydrated = true; - teardown(); - hydrate2(); - e.target.dispatchEvent(new e.constructor(e.type, e)); - } - }; - const teardown = () => { - forEach((el) => { - for (const i of interactions) { - el.removeEventListener(i, doHydrate); - } - }); - }; - forEach((el) => { - for (const i of interactions) { - el.addEventListener(i, doHydrate, { once: true }); - } - }); - return teardown; -}; -function forEachElement(node, cb) { - if (isComment(node) && node.data === "[") { - let depth = 1; - let next = node.nextSibling; - while (next) { - if (next.nodeType === 1) { - const result = cb(next); - if (result === false) { - break; - } - } else if (isComment(next)) { - if (next.data === "]") { - if (--depth === 0) break; - } else if (next.data === "[") { - depth++; - } - } - next = next.nextSibling; - } - } else { - cb(node); - } -} -var isAsyncWrapper = (i) => !!i.type.__asyncLoader; -function defineAsyncComponent(source) { - if (isFunction(source)) { - source = { loader: source }; - } - const { - loader, - loadingComponent, - errorComponent, - delay = 200, - hydrate: hydrateStrategy, - timeout, - // undefined = never times out - suspensible = true, - onError: userOnError - } = source; - let pendingRequest = null; - let resolvedComp; - let retries = 0; - const retry = () => { - retries++; - pendingRequest = null; - return load(); - }; - const load = () => { - let thisRequest; - return pendingRequest || (thisRequest = pendingRequest = loader().catch((err) => { - err = err instanceof Error ? err : new Error(String(err)); - if (userOnError) { - return new Promise((resolve2, reject) => { - const userRetry = () => resolve2(retry()); - const userFail = () => reject(err); - userOnError(err, userRetry, userFail, retries + 1); - }); - } else { - throw err; - } - }).then((comp) => { - if (thisRequest !== pendingRequest && pendingRequest) { - return pendingRequest; - } - if (!comp) { - warn$1( - `Async component loader resolved to undefined. If you are using retry(), make sure to return its return value.` - ); - } - if (comp && (comp.__esModule || comp[Symbol.toStringTag] === "Module")) { - comp = comp.default; - } - if (comp && !isObject(comp) && !isFunction(comp)) { - throw new Error(`Invalid async component load result: ${comp}`); - } - resolvedComp = comp; - return comp; - })); - }; - return defineComponent({ - name: "AsyncComponentWrapper", - __asyncLoader: load, - __asyncHydrate(el, instance, hydrate2) { - const doHydrate = hydrateStrategy ? () => { - const teardown = hydrateStrategy( - hydrate2, - (cb) => forEachElement(el, cb) - ); - if (teardown) { - (instance.bum || (instance.bum = [])).push(teardown); - } - } : hydrate2; - if (resolvedComp) { - doHydrate(); - } else { - load().then(() => !instance.isUnmounted && doHydrate()); - } - }, - get __asyncResolved() { - return resolvedComp; - }, - setup() { - const instance = currentInstance; - markAsyncBoundary(instance); - if (resolvedComp) { - return () => createInnerComp(resolvedComp, instance); - } - const onError = (err) => { - pendingRequest = null; - handleError( - err, - instance, - 13, - !errorComponent - ); - }; - if (suspensible && instance.suspense || isInSSRComponentSetup) { - return load().then((comp) => { - return () => createInnerComp(comp, instance); - }).catch((err) => { - onError(err); - return () => errorComponent ? createVNode(errorComponent, { - error: err - }) : null; - }); - } - const loaded = ref(false); - const error = ref(); - const delayed = ref(!!delay); - if (delay) { - setTimeout(() => { - delayed.value = false; - }, delay); - } - if (timeout != null) { - setTimeout(() => { - if (!loaded.value && !error.value) { - const err = new Error( - `Async component timed out after ${timeout}ms.` - ); - onError(err); - error.value = err; - } - }, timeout); - } - load().then(() => { - loaded.value = true; - if (instance.parent && isKeepAlive(instance.parent.vnode)) { - instance.parent.update(); - } - }).catch((err) => { - onError(err); - error.value = err; - }); - return () => { - if (loaded.value && resolvedComp) { - return createInnerComp(resolvedComp, instance); - } else if (error.value && errorComponent) { - return createVNode(errorComponent, { - error: error.value - }); - } else if (loadingComponent && !delayed.value) { - return createVNode(loadingComponent); - } - }; - } - }); -} -function createInnerComp(comp, parent) { - const { ref: ref2, props, children, ce } = parent.vnode; - const vnode = createVNode(comp, props, children); - vnode.ref = ref2; - vnode.ce = ce; - delete parent.vnode.ce; - return vnode; -} -var isKeepAlive = (vnode) => vnode.type.__isKeepAlive; -var KeepAliveImpl = { - name: `KeepAlive`, - // Marker for special handling inside the renderer. We are not using a === - // check directly on KeepAlive in the renderer, because importing it directly - // would prevent it from being tree-shaken. - __isKeepAlive: true, - props: { - include: [String, RegExp, Array], - exclude: [String, RegExp, Array], - max: [String, Number] - }, - setup(props, { slots }) { - const instance = getCurrentInstance(); - const sharedContext = instance.ctx; - if (!sharedContext.renderer) { - return () => { - const children = slots.default && slots.default(); - return children && children.length === 1 ? children[0] : children; - }; - } - const cache = /* @__PURE__ */ new Map(); - const keys = /* @__PURE__ */ new Set(); - let current = null; - if (true) { - instance.__v_cache = cache; - } - const parentSuspense = instance.suspense; - const { - renderer: { - p: patch, - m: move, - um: _unmount, - o: { createElement } - } - } = sharedContext; - const storageContainer = createElement("div"); - sharedContext.activate = (vnode, container, anchor, namespace, optimized) => { - const instance2 = vnode.component; - move(vnode, container, anchor, 0, parentSuspense); - patch( - instance2.vnode, - vnode, - container, - anchor, - instance2, - parentSuspense, - namespace, - vnode.slotScopeIds, - optimized - ); - queuePostRenderEffect(() => { - instance2.isDeactivated = false; - if (instance2.a) { - invokeArrayFns(instance2.a); - } - const vnodeHook = vnode.props && vnode.props.onVnodeMounted; - if (vnodeHook) { - invokeVNodeHook(vnodeHook, instance2.parent, vnode); - } - }, parentSuspense); - if (true) { - devtoolsComponentAdded(instance2); - } - }; - sharedContext.deactivate = (vnode) => { - const instance2 = vnode.component; - invalidateMount(instance2.m); - invalidateMount(instance2.a); - move(vnode, storageContainer, null, 1, parentSuspense); - queuePostRenderEffect(() => { - if (instance2.da) { - invokeArrayFns(instance2.da); - } - const vnodeHook = vnode.props && vnode.props.onVnodeUnmounted; - if (vnodeHook) { - invokeVNodeHook(vnodeHook, instance2.parent, vnode); - } - instance2.isDeactivated = true; - }, parentSuspense); - if (true) { - devtoolsComponentAdded(instance2); - } - }; - function unmount(vnode) { - resetShapeFlag(vnode); - _unmount(vnode, instance, parentSuspense, true); - } - function pruneCache(filter) { - cache.forEach((vnode, key) => { - const name = getComponentName(vnode.type); - if (name && !filter(name)) { - pruneCacheEntry(key); - } - }); - } - function pruneCacheEntry(key) { - const cached = cache.get(key); - if (cached && (!current || !isSameVNodeType(cached, current))) { - unmount(cached); - } else if (current) { - resetShapeFlag(current); - } - cache.delete(key); - keys.delete(key); - } - watch2( - () => [props.include, props.exclude], - ([include, exclude]) => { - include && pruneCache((name) => matches(include, name)); - exclude && pruneCache((name) => !matches(exclude, name)); - }, - // prune post-render after `current` has been updated - { flush: "post", deep: true } - ); - let pendingCacheKey = null; - const cacheSubtree = () => { - if (pendingCacheKey != null) { - if (isSuspense(instance.subTree.type)) { - queuePostRenderEffect(() => { - cache.set(pendingCacheKey, getInnerChild(instance.subTree)); - }, instance.subTree.suspense); - } else { - cache.set(pendingCacheKey, getInnerChild(instance.subTree)); - } - } - }; - onMounted(cacheSubtree); - onUpdated(cacheSubtree); - onBeforeUnmount(() => { - cache.forEach((cached) => { - const { subTree, suspense } = instance; - const vnode = getInnerChild(subTree); - if (cached.type === vnode.type && cached.key === vnode.key) { - resetShapeFlag(vnode); - const da = vnode.component.da; - da && queuePostRenderEffect(da, suspense); - return; - } - unmount(cached); - }); - }); - return () => { - pendingCacheKey = null; - if (!slots.default) { - return current = null; - } - const children = slots.default(); - const rawVNode = children[0]; - if (children.length > 1) { - if (true) { - warn$1(`KeepAlive should contain exactly one component child.`); - } - current = null; - return children; - } else if (!isVNode(rawVNode) || !(rawVNode.shapeFlag & 4) && !(rawVNode.shapeFlag & 128)) { - current = null; - return rawVNode; - } - let vnode = getInnerChild(rawVNode); - if (vnode.type === Comment) { - current = null; - return vnode; - } - const comp = vnode.type; - const name = getComponentName( - isAsyncWrapper(vnode) ? vnode.type.__asyncResolved || {} : comp - ); - const { include, exclude, max } = props; - if (include && (!name || !matches(include, name)) || exclude && name && matches(exclude, name)) { - vnode.shapeFlag &= ~256; - current = vnode; - return rawVNode; - } - const key = vnode.key == null ? comp : vnode.key; - const cachedVNode = cache.get(key); - if (vnode.el) { - vnode = cloneVNode(vnode); - if (rawVNode.shapeFlag & 128) { - rawVNode.ssContent = vnode; - } - } - pendingCacheKey = key; - if (cachedVNode) { - vnode.el = cachedVNode.el; - vnode.component = cachedVNode.component; - if (vnode.transition) { - setTransitionHooks(vnode, vnode.transition); - } - vnode.shapeFlag |= 512; - keys.delete(key); - keys.add(key); - } else { - keys.add(key); - if (max && keys.size > parseInt(max, 10)) { - pruneCacheEntry(keys.values().next().value); - } - } - vnode.shapeFlag |= 256; - current = vnode; - return isSuspense(rawVNode.type) ? rawVNode : vnode; - }; - } -}; -var KeepAlive = KeepAliveImpl; -function matches(pattern, name) { - if (isArray(pattern)) { - return pattern.some((p2) => matches(p2, name)); - } else if (isString(pattern)) { - return pattern.split(",").includes(name); - } else if (isRegExp(pattern)) { - pattern.lastIndex = 0; - return pattern.test(name); - } - return false; -} -function onActivated(hook, target) { - registerKeepAliveHook(hook, "a", target); -} -function onDeactivated(hook, target) { - registerKeepAliveHook(hook, "da", target); -} -function registerKeepAliveHook(hook, type, target = currentInstance) { - const wrappedHook = hook.__wdc || (hook.__wdc = () => { - let current = target; - while (current) { - if (current.isDeactivated) { - return; - } - current = current.parent; - } - return hook(); - }); - injectHook(type, wrappedHook, target); - if (target) { - let current = target.parent; - while (current && current.parent) { - if (isKeepAlive(current.parent.vnode)) { - injectToKeepAliveRoot(wrappedHook, type, target, current); - } - current = current.parent; - } - } -} -function injectToKeepAliveRoot(hook, type, target, keepAliveRoot) { - const injected = injectHook( - type, - hook, - keepAliveRoot, - true - /* prepend */ - ); - onUnmounted(() => { - remove(keepAliveRoot[type], injected); - }, target); -} -function resetShapeFlag(vnode) { - vnode.shapeFlag &= ~256; - vnode.shapeFlag &= ~512; -} -function getInnerChild(vnode) { - return vnode.shapeFlag & 128 ? vnode.ssContent : vnode; -} -function injectHook(type, hook, target = currentInstance, prepend = false) { - if (target) { - const hooks = target[type] || (target[type] = []); - const wrappedHook = hook.__weh || (hook.__weh = (...args) => { - pauseTracking(); - const reset = setCurrentInstance(target); - const res = callWithAsyncErrorHandling(hook, target, type, args); - reset(); - resetTracking(); - return res; - }); - if (prepend) { - hooks.unshift(wrappedHook); - } else { - hooks.push(wrappedHook); - } - return wrappedHook; - } else if (true) { - const apiName = toHandlerKey(ErrorTypeStrings$1[type].replace(/ hook$/, "")); - warn$1( - `${apiName} is called when there is no active component instance to be associated with. Lifecycle injection APIs can only be used during execution of setup(). If you are using async setup(), make sure to register lifecycle hooks before the first await statement.` - ); - } -} -var createHook = (lifecycle) => (hook, target = currentInstance) => { - if (!isInSSRComponentSetup || lifecycle === "sp") { - injectHook(lifecycle, (...args) => hook(...args), target); - } -}; -var onBeforeMount = createHook("bm"); -var onMounted = createHook("m"); -var onBeforeUpdate = createHook( - "bu" -); -var onUpdated = createHook("u"); -var onBeforeUnmount = createHook( - "bum" -); -var onUnmounted = createHook("um"); -var onServerPrefetch = createHook( - "sp" -); -var onRenderTriggered = createHook("rtg"); -var onRenderTracked = createHook("rtc"); -function onErrorCaptured(hook, target = currentInstance) { - injectHook("ec", hook, target); -} -var COMPONENTS = "components"; -var DIRECTIVES = "directives"; -function resolveComponent(name, maybeSelfReference) { - return resolveAsset(COMPONENTS, name, true, maybeSelfReference) || name; -} -var NULL_DYNAMIC_COMPONENT = Symbol.for("v-ndc"); -function resolveDynamicComponent(component) { - if (isString(component)) { - return resolveAsset(COMPONENTS, component, false) || component; - } else { - return component || NULL_DYNAMIC_COMPONENT; - } -} -function resolveDirective(name) { - return resolveAsset(DIRECTIVES, name); -} -function resolveAsset(type, name, warnMissing = true, maybeSelfReference = false) { - const instance = currentRenderingInstance || currentInstance; - if (instance) { - const Component = instance.type; - if (type === COMPONENTS) { - const selfName = getComponentName( - Component, - false - ); - if (selfName && (selfName === name || selfName === camelize(name) || selfName === capitalize(camelize(name)))) { - return Component; - } - } - const res = ( - // local registration - // check instance[type] first which is resolved for options API - resolve(instance[type] || Component[type], name) || // global registration - resolve(instance.appContext[type], name) - ); - if (!res && maybeSelfReference) { - return Component; - } - if (warnMissing && !res) { - const extra = type === COMPONENTS ? ` -If this is a native custom element, make sure to exclude it from component resolution via compilerOptions.isCustomElement.` : ``; - warn$1(`Failed to resolve ${type.slice(0, -1)}: ${name}${extra}`); - } - return res; - } else if (true) { - warn$1( - `resolve${capitalize(type.slice(0, -1))} can only be used in render() or setup().` - ); - } -} -function resolve(registry, name) { - return registry && (registry[name] || registry[camelize(name)] || registry[capitalize(camelize(name))]); -} -function renderList(source, renderItem, cache, index) { - let ret; - const cached = cache && cache[index]; - const sourceIsArray = isArray(source); - if (sourceIsArray || isString(source)) { - const sourceIsReactiveArray = sourceIsArray && isReactive(source); - let needsWrap = false; - if (sourceIsReactiveArray) { - needsWrap = !isShallow(source); - source = shallowReadArray(source); - } - ret = new Array(source.length); - for (let i = 0, l = source.length; i < l; i++) { - ret[i] = renderItem( - needsWrap ? toReactive(source[i]) : source[i], - i, - void 0, - cached && cached[i] - ); - } - } else if (typeof source === "number") { - if (!Number.isInteger(source)) { - warn$1(`The v-for range expect an integer value but got ${source}.`); - } - ret = new Array(source); - for (let i = 0; i < source; i++) { - ret[i] = renderItem(i + 1, i, void 0, cached && cached[i]); - } - } else if (isObject(source)) { - if (source[Symbol.iterator]) { - ret = Array.from( - source, - (item, i) => renderItem(item, i, void 0, cached && cached[i]) - ); - } else { - const keys = Object.keys(source); - ret = new Array(keys.length); - for (let i = 0, l = keys.length; i < l; i++) { - const key = keys[i]; - ret[i] = renderItem(source[key], key, i, cached && cached[i]); - } - } - } else { - ret = []; - } - if (cache) { - cache[index] = ret; - } - return ret; -} -function createSlots(slots, dynamicSlots) { - for (let i = 0; i < dynamicSlots.length; i++) { - const slot = dynamicSlots[i]; - if (isArray(slot)) { - for (let j = 0; j < slot.length; j++) { - slots[slot[j].name] = slot[j].fn; - } - } else if (slot) { - slots[slot.name] = slot.key ? (...args) => { - const res = slot.fn(...args); - if (res) res.key = slot.key; - return res; - } : slot.fn; - } - } - return slots; -} -function renderSlot(slots, name, props = {}, fallback, noSlotted) { - if (currentRenderingInstance.ce || currentRenderingInstance.parent && isAsyncWrapper(currentRenderingInstance.parent) && currentRenderingInstance.parent.ce) { - if (name !== "default") props.name = name; - return openBlock(), createBlock( - Fragment, - null, - [createVNode("slot", props, fallback && fallback())], - 64 - ); - } - let slot = slots[name]; - if (slot && slot.length > 1) { - warn$1( - `SSR-optimized slot function detected in a non-SSR-optimized render function. You need to mark this component with $dynamic-slots in the parent template.` - ); - slot = () => []; - } - if (slot && slot._c) { - slot._d = false; - } - openBlock(); - const validSlotContent = slot && ensureValidVNode(slot(props)); - const slotKey = props.key || // slot content array of a dynamic conditional slot may have a branch - // key attached in the `createSlots` helper, respect that - validSlotContent && validSlotContent.key; - const rendered = createBlock( - Fragment, - { - key: (slotKey && !isSymbol(slotKey) ? slotKey : `_${name}`) + // #7256 force differentiate fallback content from actual content - (!validSlotContent && fallback ? "_fb" : "") - }, - validSlotContent || (fallback ? fallback() : []), - validSlotContent && slots._ === 1 ? 64 : -2 - ); - if (!noSlotted && rendered.scopeId) { - rendered.slotScopeIds = [rendered.scopeId + "-s"]; - } - if (slot && slot._c) { - slot._d = true; - } - return rendered; -} -function ensureValidVNode(vnodes) { - return vnodes.some((child) => { - if (!isVNode(child)) return true; - if (child.type === Comment) return false; - if (child.type === Fragment && !ensureValidVNode(child.children)) - return false; - return true; - }) ? vnodes : null; -} -function toHandlers(obj, preserveCaseIfNecessary) { - const ret = {}; - if (!isObject(obj)) { - warn$1(`v-on with no argument expects an object value.`); - return ret; - } - for (const key in obj) { - ret[preserveCaseIfNecessary && /[A-Z]/.test(key) ? `on:${key}` : toHandlerKey(key)] = obj[key]; - } - return ret; -} -var getPublicInstance = (i) => { - if (!i) return null; - if (isStatefulComponent(i)) return getComponentPublicInstance(i); - return getPublicInstance(i.parent); -}; -var publicPropertiesMap = ( - // Move PURE marker to new line to workaround compiler discarding it - // due to type annotation - extend(/* @__PURE__ */ Object.create(null), { - $: (i) => i, - $el: (i) => i.vnode.el, - $data: (i) => i.data, - $props: (i) => true ? shallowReadonly(i.props) : i.props, - $attrs: (i) => true ? shallowReadonly(i.attrs) : i.attrs, - $slots: (i) => true ? shallowReadonly(i.slots) : i.slots, - $refs: (i) => true ? shallowReadonly(i.refs) : i.refs, - $parent: (i) => getPublicInstance(i.parent), - $root: (i) => getPublicInstance(i.root), - $host: (i) => i.ce, - $emit: (i) => i.emit, - $options: (i) => __VUE_OPTIONS_API__ ? resolveMergedOptions(i) : i.type, - $forceUpdate: (i) => i.f || (i.f = () => { - queueJob(i.update); - }), - $nextTick: (i) => i.n || (i.n = nextTick.bind(i.proxy)), - $watch: (i) => __VUE_OPTIONS_API__ ? instanceWatch.bind(i) : NOOP - }) -); -var isReservedPrefix = (key) => key === "_" || key === "$"; -var hasSetupBinding = (state, key) => state !== EMPTY_OBJ && !state.__isScriptSetup && hasOwn(state, key); -var PublicInstanceProxyHandlers = { - get({ _: instance }, key) { - if (key === "__v_skip") { - return true; - } - const { ctx, setupState, data, props, accessCache, type, appContext } = instance; - if (key === "__isVue") { - return true; - } - let normalizedProps; - if (key[0] !== "$") { - const n = accessCache[key]; - if (n !== void 0) { - switch (n) { - case 1: - return setupState[key]; - case 2: - return data[key]; - case 4: - return ctx[key]; - case 3: - return props[key]; - } - } else if (hasSetupBinding(setupState, key)) { - accessCache[key] = 1; - return setupState[key]; - } else if (data !== EMPTY_OBJ && hasOwn(data, key)) { - accessCache[key] = 2; - return data[key]; - } else if ( - // only cache other properties when instance has declared (thus stable) - // props - (normalizedProps = instance.propsOptions[0]) && hasOwn(normalizedProps, key) - ) { - accessCache[key] = 3; - return props[key]; - } else if (ctx !== EMPTY_OBJ && hasOwn(ctx, key)) { - accessCache[key] = 4; - return ctx[key]; - } else if (!__VUE_OPTIONS_API__ || shouldCacheAccess) { - accessCache[key] = 0; - } - } - const publicGetter = publicPropertiesMap[key]; - let cssModule, globalProperties; - if (publicGetter) { - if (key === "$attrs") { - track(instance.attrs, "get", ""); - markAttrsAccessed(); - } else if (key === "$slots") { - track(instance, "get", key); - } - return publicGetter(instance); - } else if ( - // css module (injected by vue-loader) - (cssModule = type.__cssModules) && (cssModule = cssModule[key]) - ) { - return cssModule; - } else if (ctx !== EMPTY_OBJ && hasOwn(ctx, key)) { - accessCache[key] = 4; - return ctx[key]; - } else if ( - // global properties - globalProperties = appContext.config.globalProperties, hasOwn(globalProperties, key) - ) { - { - return globalProperties[key]; - } - } else if (currentRenderingInstance && (!isString(key) || // #1091 avoid internal isRef/isVNode checks on component instance leading - // to infinite warning loop - key.indexOf("__v") !== 0)) { - if (data !== EMPTY_OBJ && isReservedPrefix(key[0]) && hasOwn(data, key)) { - warn$1( - `Property ${JSON.stringify( - key - )} must be accessed via $data because it starts with a reserved character ("$" or "_") and is not proxied on the render context.` - ); - } else if (instance === currentRenderingInstance) { - warn$1( - `Property ${JSON.stringify(key)} was accessed during render but is not defined on instance.` - ); - } - } - }, - set({ _: instance }, key, value) { - const { data, setupState, ctx } = instance; - if (hasSetupBinding(setupState, key)) { - setupState[key] = value; - return true; - } else if (setupState.__isScriptSetup && hasOwn(setupState, key)) { - warn$1(`Cannot mutate +
- + \ No newline at end of file diff --git a/.vitepress/dist/README.html b/.vitepress/dist/README.html index af02407..09ace4a 100644 --- a/.vitepress/dist/README.html +++ b/.vitepress/dist/README.html @@ -9,17 +9,17 @@ - + - - - + + + - - + + \ No newline at end of file diff --git a/.vitepress/dist/assets/README.md.B6Ga_CkE.js b/.vitepress/dist/assets/README.md.B6Ga_CkE.js new file mode 100644 index 0000000..a5b02bb --- /dev/null +++ b/.vitepress/dist/assets/README.md.B6Ga_CkE.js @@ -0,0 +1 @@ +import{_ as e,a as t,o as r,ah as o}from"./chunks/framework.BKXlU_Nx.js";const m=JSON.parse('{"title":"介绍","description":"","frontmatter":{},"headers":[],"relativePath":"README.md","filePath":"README.md","lastUpdated":1720848653000}'),l={name:"README.md"};function n(i,a,s,c,d,p){return r(),t("div",null,a[0]||(a[0]=[o('

介绍 ​

这是 Cool Admin(Java 版)的在线文档仓库,我们会尽力完善文档。也希望广大开发者粉丝帮助完善文档,积极提交Pull requests,共同参与开源,你的贡献可能给其他人代码巨大的帮助

地址 ​

',4)]))}const h=e(l,[["render",n]]);export{m as __pageData,h as default}; diff --git a/.vitepress/dist/assets/README.md.B6Ga_CkE.lean.js b/.vitepress/dist/assets/README.md.B6Ga_CkE.lean.js new file mode 100644 index 0000000..846f55d --- /dev/null +++ b/.vitepress/dist/assets/README.md.B6Ga_CkE.lean.js @@ -0,0 +1 @@ +import{_ as e,a as t,o as r,ah as o}from"./chunks/framework.BKXlU_Nx.js";const m=JSON.parse('{"title":"介绍","description":"","frontmatter":{},"headers":[],"relativePath":"README.md","filePath":"README.md","lastUpdated":1720848653000}'),l={name:"README.md"};function n(i,a,s,c,d,p){return r(),t("div",null,a[0]||(a[0]=[o("",4)]))}const h=e(l,[["render",n]]);export{m as __pageData,h as default}; diff --git a/.vitepress/dist/assets/README.md.Rd2D_BZq.js b/.vitepress/dist/assets/README.md.Rd2D_BZq.js deleted file mode 100644 index a45f9ca..0000000 --- a/.vitepress/dist/assets/README.md.Rd2D_BZq.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,a as e,o as t,aj as o}from"./chunks/framework.BjhQB2K5.js";const f=JSON.parse('{"title":"介绍","description":"","frontmatter":{},"headers":[],"relativePath":"README.md","filePath":"README.md","lastUpdated":1720848653000}'),r={name:"README.md"},l=o('

介绍 ​

这是 Cool Admin(Java 版)的在线文档仓库,我们会尽力完善文档。也希望广大开发者粉丝帮助完善文档,积极提交Pull requests,共同参与开源,你的贡献可能给其他人代码巨大的帮助

地址 ​

',4),n=[l];function c(s,i,_,d,h,p){return t(),e("div",null,n)}const u=a(r,[["render",c]]);export{f as __pageData,u as default}; diff --git a/.vitepress/dist/assets/README.md.Rd2D_BZq.lean.js b/.vitepress/dist/assets/README.md.Rd2D_BZq.lean.js deleted file mode 100644 index 2f572c1..0000000 --- a/.vitepress/dist/assets/README.md.Rd2D_BZq.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,a as e,o as t,aj as o}from"./chunks/framework.BjhQB2K5.js";const f=JSON.parse('{"title":"介绍","description":"","frontmatter":{},"headers":[],"relativePath":"README.md","filePath":"README.md","lastUpdated":1720848653000}'),r={name:"README.md"},l=o("",4),n=[l];function c(s,i,_,d,h,p){return t(),e("div",null,n)}const u=a(r,[["render",c]]);export{f as __pageData,u as default}; diff --git a/.vitepress/dist/assets/app.CVFqtsWk.js b/.vitepress/dist/assets/app.B1l1PJ-k.js similarity index 66% rename from .vitepress/dist/assets/app.CVFqtsWk.js rename to .vitepress/dist/assets/app.B1l1PJ-k.js index 1b9f69c..7400ca1 100644 --- a/.vitepress/dist/assets/app.CVFqtsWk.js +++ b/.vitepress/dist/assets/app.B1l1PJ-k.js @@ -1 +1 @@ -import{R as p}from"./chunks/theme.Dh5vPo0_.js";import{U as s,a5 as i,a6 as u,a7 as c,a8 as l,a9 as f,aa as d,ab as m,ac as h,ad as g,ae as A,d as v,u as w,s as y,q as C,af as P,ag as R,ah as b,ai as E}from"./chunks/framework.BjhQB2K5.js";function r(e){if(e.extends){const a=r(e.extends);return{...a,...e,async enhanceApp(t){a.enhanceApp&&await a.enhanceApp(t),e.enhanceApp&&await e.enhanceApp(t)}}}return e}const n=r(p),S=v({name:"VitePressApp",setup(){const{site:e,lang:a,dir:t}=w();return y(()=>{C(()=>{document.documentElement.lang=a.value,document.documentElement.dir=t.value})}),e.value.router.prefetchLinks&&P(),R(),b(),n.setup&&n.setup(),()=>E(n.Layout)}});async function T(){globalThis.__VITEPRESS__=!0;const e=_(),a=D();a.provide(u,e);const t=c(e.route);return a.provide(l,t),a.component("Content",f),a.component("ClientOnly",d),Object.defineProperties(a.config.globalProperties,{$frontmatter:{get(){return t.frontmatter.value}},$params:{get(){return t.page.value.params}}}),n.enhanceApp&&await n.enhanceApp({app:a,router:e,siteData:m}),{app:a,router:e,data:t}}function D(){return A(S)}function _(){let e=s;return h(a=>{let t=g(a),o=null;return t&&(e&&(t=t.replace(/\.js$/,".lean.js")),o=import(t)),s&&(e=!1),o},n.NotFound)}s&&T().then(({app:e,router:a,data:t})=>{a.go().then(()=>{i(a.route,t.site),e.mount("#app")})});export{T as createApp}; +import{R as p}from"./chunks/theme.C9_-QGMz.js";import{R as s,a3 as i,a4 as u,a5 as c,a6 as l,a7 as f,a8 as d,a9 as m,aa as h,ab as g,ac as A,d as R,u as v,p as w,n as y,ad as C,ae as P,af as b,ag as E}from"./chunks/framework.BKXlU_Nx.js";function r(e){if(e.extends){const a=r(e.extends);return{...a,...e,async enhanceApp(t){a.enhanceApp&&await a.enhanceApp(t),e.enhanceApp&&await e.enhanceApp(t)}}}return e}const n=r(p),S=R({name:"VitePressApp",setup(){const{site:e,lang:a,dir:t}=v();return w(()=>{y(()=>{document.documentElement.lang=a.value,document.documentElement.dir=t.value})}),e.value.router.prefetchLinks&&C(),P(),b(),n.setup&&n.setup(),()=>E(n.Layout)}});async function T(){globalThis.__VITEPRESS__=!0;const e=_(),a=D();a.provide(u,e);const t=c(e.route);return a.provide(l,t),a.component("Content",f),a.component("ClientOnly",d),Object.defineProperties(a.config.globalProperties,{$frontmatter:{get(){return t.frontmatter.value}},$params:{get(){return t.page.value.params}}}),n.enhanceApp&&await n.enhanceApp({app:a,router:e,siteData:m}),{app:a,router:e,data:t}}function D(){return A(S)}function _(){let e=s;return h(a=>{let t=g(a),o=null;return t&&(e&&(t=t.replace(/\.js$/,".lean.js")),o=import(t)),s&&(e=!1),o},n.NotFound)}s&&T().then(({app:e,router:a,data:t})=>{a.go().then(()=>{i(a.route,t.site),e.mount("#app")})});export{T as createApp}; diff --git a/.vitepress/dist/assets/chunks/@localSearchIndexroot.CyyBpyLd.js b/.vitepress/dist/assets/chunks/@localSearchIndexroot.CyyBpyLd.js deleted file mode 100644 index 934fadb..0000000 --- a/.vitepress/dist/assets/chunks/@localSearchIndexroot.CyyBpyLd.js +++ /dev/null @@ -1 +0,0 @@ -const e='{"documentCount":119,"nextId":119,"documentIds":{"0":"/README.html#介绍","1":"/README.html#地址","2":"/src/about/#交流合作","3":"/src/about/#微信","4":"/src/about/#抖音","5":"/src/about/#b-站","6":"/src/about/#公众号","7":"/src/guide/ai.html#ai-编码","8":"/src/guide/cache.html#缓存","9":"/src/guide/cache.html#使用","10":"/src/guide/cache.html#框架特有的通用工具类-coolcache","11":"/src/guide/cache.html#通过coolcache缓存模板-获取数据","12":"/src/guide/controller.html#控制器","13":"/src/guide/controller.html#示例","14":"/src/guide/controller.html#查询配置","15":"/src/guide/controller.html#请求参数","16":"/src/guide/controller.html#重写实现","17":"/src/guide/controller.html#原理","18":"/src/guide/controller.html#接口路由规则","19":"/src/guide/controller.html#自定义路由注解","20":"/src/guide/controller.html#重写-getmappingformethod","21":"/src/guide/db.html#数据库","22":"/src/guide/db.html#功能对比","23":"/src/guide/db.html#支持数据库","24":"/src/guide/db.html#自动建表","25":"/src/guide/deploy.html#项目部署","26":"/src/guide/deploy.html#普通方式","27":"/src/guide/deploy.html#_1、部署流程-以宝塔为例","28":"/src/guide/deploy.html#_2、推荐使用-pnpm-安装依赖","29":"/src/guide/deploy.html#_3、pm2-运行后端服务","30":"/src/guide/deploy.html#_4、nginx-配置示例","31":"/src/guide/deploy.html#docker-方式","32":"/src/guide/deploy.html#_1、部署流程-以宝塔为例-1","33":"/src/guide/deploy.html#_2、打包镜像","34":"/src/guide/deploy.html#_3、运行","35":"/src/guide/deploy.html#注意事项","36":"/src/guide/dev.html#开发方式","37":"/src/guide/dev.html#ai-全自动","38":"/src/guide/dev.html#半自动","39":"/src/guide/dir.html#目录结构","40":"/src/guide/dir.html#结构","41":"/src/guide/exception.html#统一异常处理","42":"/src/guide/exception.html#异常统一捕获","43":"/src/guide/flow.html#ai-流程编排","44":"/src/guide/i18n.html#国际化多语言-v8-0新增","45":"/src/guide/i18n.html#实现","46":"/src/guide/i18n.html#使用","47":"/src/guide/initData.html#数据初始化","48":"/src/guide/lock.html#锁","49":"/src/guide/noRepeatSubmit.html#防重复提交","50":"/src/guide/plugin.html#扩展插件","51":"/src/guide/plugin.html#使用插件","52":"/src/guide/plugin.html#_1、安装","53":"/src/guide/plugin.html#_2、调用","54":"/src/guide/plugin.html#_3、配置","55":"/src/guide/plugin.html#开发插件","56":"/src/guide/plugin.html#_1、脚手架","57":"/src/guide/plugin.html#_2、目录结构","58":"/src/guide/plugin.html#_3、开发过程","59":"/src/guide/plugin.html#_4、字段解释","60":"/src/guide/plugin.html#插件详解","61":"/src/guide/plugin.html#打包","62":"/src/guide/plugin.html#安装插件","63":"/src/guide/plugin.html#实现原理","64":"/src/guide/quick.html#快速开始","65":"/src/guide/quick.html#环境准备","66":"/src/guide/quick.html#运行系统","67":"/src/guide/quick.html#_1、拉取源码","68":"/src/guide/quick.html#_2、配置数据库","69":"/src/guide/quick.html#_3、启动后端服务","70":"/src/guide/quick.html#_4、启动前端服务","71":"/src/guide/recordLog.html#请求日志记录","72":"/src/guide/security.html#权限校验","73":"/src/guide/security.html#配置","74":"/src/guide/security.html#原理","75":"/src/guide/security.html#当前用户","76":"/src/guide/security.html#后端用户","77":"/src/guide/security.html#应用用户","78":"/src/guide/security.html#忽略-token","79":"/src/guide/security.html#方式一-注解","80":"/src/guide/security.html#方法上","81":"/src/guide/security.html#类上","82":"/src/guide/security.html#方式二-配置文件","83":"/src/guide/service.html#服务","84":"/src/guide/service.html#crud","85":"/src/guide/service.html#修改前后","86":"/src/guide/swagger.html#swagger-文档","87":"/src/guide/tenant.html#多租户-v8-0新增","88":"/src/guide/tenant.html#主要特点","89":"/src/guide/tenant.html#实现","90":"/src/guide/tenant.html#_1、数据隔离","91":"/src/guide/tenant.html#使用","92":"/src/guide/tenant.html#_1、开启多租户","93":"/src/guide/tenant.html#_2、继承对象调整","94":"/src/guide/uniqueIDGen.html#唯一id","95":"/src/guide/upload.html#文件上传","96":"/src/guide/upload.html#使用","97":"/src/introduce/#简介","98":"/src/introduce/#技术选型","99":"/src/introduce/#一、环境要求","100":"/src/introduce/#二、后端框架","101":"/src/introduce/#三、前端框架","102":"/src/introduce/#为什么选择-cool-admin","103":"/src/introduce/#内置功能","104":"/src/introduce/show.html#演示","105":"/src/introduce/src.html#源码","106":"/src/introduce/src.html#后端-点个-star-哦","107":"/src/introduce/src.html#前端-点个-star-哦","108":"/src/introduce/src.html#文档-star-哦","109":"/src/question/common.html#常见问题","110":"/src/question/common.html#_1、找不到类似xxxtabledef文件","111":"/src/todo/plan.html#计划","112":"/src/todo/plan.html#完善插件","113":"/src/todo/update.html#更新","114":"/src/todo/update.html#v8-0-0-2025-04-13","115":"/src/todo/update.html#v7-1-3-2024-08-25","116":"/src/todo/update.html#v7-1-2-2024-08-04","117":"/src/todo/update.html#v7-1-1-2024-07-15","118":"/src/todo/update.html#v7-1-0-2024-06-27"},"fieldIds":{"title":0,"titles":1,"text":2},"fieldLength":{"0":[1,1,13],"1":[1,1,8],"2":[1,1,4],"3":[1,1,2],"4":[1,1,11],"5":[2,1,3],"6":[1,1,6],"7":[2,1,8],"8":[1,1,35],"9":[1,1,31],"10":[2,1,22],"11":[2,1,37],"12":[1,1,15],"13":[1,1,48],"14":[1,1,171],"15":[1,1,57],"16":[1,1,63],"17":[1,1,1],"18":[1,1,44],"19":[1,1,14],"20":[2,1,43],"21":[1,1,41],"22":[1,1,79],"23":[1,1,112],"24":[1,1,21],"25":[1,1,9],"26":[1,1,8],"27":[4,2,36],"28":[4,2,15],"29":[3,2,41],"30":[3,2,92],"31":[2,1,10],"32":[4,3,12],"33":[2,3,31],"34":[2,3,16],"35":[1,3,9],"36":[1,1,7],"37":[2,1,12],"38":[1,1,51],"39":[1,1,4],"40":[1,1,58],"41":[1,1,8],"42":[1,1,78],"43":[2,1,23],"44":[4,1,21],"45":[1,1,11],"46":[1,1,149],"47":[1,1,76],"48":[1,1,27],"49":[1,1,70],"50":[1,1,9],"51":[1,1,1],"52":[2,2,9],"53":[2,2,204],"54":[2,2,18],"55":[1,1,1],"56":[2,2,16],"57":[2,2,25],"58":[2,2,31],"59":[2,2,27],"60":[1,1,185],"61":[1,1,31],"62":[1,1,5],"63":[1,1,66],"64":[1,1,4],"65":[1,1,19],"66":[1,1,1],"67":[2,2,4],"68":[2,2,45],"69":[2,2,59],"70":[2,2,25],"71":[1,1,44],"72":[1,1,7],"73":[1,1,14],"74":[1,1,243],"75":[1,1,2],"76":[1,2,39],"77":[1,2,6],"78":[2,1,5],"79":[2,3,1],"80":[1,5,14],"81":[1,5,22],"82":[2,3,25],"83":[1,1,2],"84":[1,1,5],"85":[1,1,21],"86":[2,1,48],"87":[4,1,9],"88":[1,1,10],"89":[1,1,1],"90":[2,1,11],"91":[1,1,1],"92":[2,1,17],"93":[2,1,6],"94":[1,1,64],"95":[1,1,17],"96":[1,1,98],"97":[1,1,1],"98":[1,1,4],"99":[2,2,14],"100":[2,2,10],"101":[2,2,5],"102":[4,1,26],"103":[1,1,38],"104":[1,1,11],"105":[1,1,7],"106":[5,1,12],"107":[5,1,13],"108":[4,1,15],"109":[1,1,2],"110":[2,1,29],"111":[1,1,4],"112":[1,1,9],"113":[1,1,8],"114":[6,1,26],"115":[7,1,24],"116":[7,1,11],"117":[6,1,9],"118":[7,1,8]},"averageFieldLength":[1.781512605042017,1.3361344537815127,29.966386554621852],"storedFields":{"0":{"title":"介绍","titles":[]},"1":{"title":"地址","titles":[]},"2":{"title":"交流合作","titles":[]},"3":{"title":"微信","titles":["交流合作"]},"4":{"title":"抖音","titles":["交流合作"]},"5":{"title":"B 站","titles":["交流合作"]},"6":{"title":"公众号","titles":["交流合作"]},"7":{"title":"Ai 编码","titles":[]},"8":{"title":"缓存","titles":[]},"9":{"title":"使用","titles":["缓存"]},"10":{"title":"框架特有的通用工具类,CoolCache","titles":["缓存"]},"11":{"title":"通过coolCache缓存模板,获取数据","titles":["缓存"]},"12":{"title":"控制器","titles":[]},"13":{"title":"示例","titles":["控制器"]},"14":{"title":"查询配置","titles":["控制器"]},"15":{"title":"请求参数","titles":["控制器"]},"16":{"title":"重写实现","titles":["控制器"]},"17":{"title":"原理","titles":[]},"18":{"title":"接口路由规则","titles":["原理"]},"19":{"title":"自定义路由注解","titles":["原理"]},"20":{"title":"重写 getMappingForMethod","titles":["原理"]},"21":{"title":"数据库","titles":[]},"22":{"title":"功能对比","titles":["数据库"]},"23":{"title":"支持数据库","titles":["数据库"]},"24":{"title":"自动建表","titles":["数据库"]},"25":{"title":"项目部署","titles":[]},"26":{"title":"普通方式","titles":["项目部署"]},"27":{"title":"1、部署流程(以宝塔为例):","titles":["项目部署","普通方式"]},"28":{"title":"2、推荐使用 pnpm 安装依赖","titles":["项目部署","普通方式"]},"29":{"title":"3、PM2 运行后端服务","titles":["项目部署","普通方式"]},"30":{"title":"4、nginx 配置示例","titles":["项目部署","普通方式"]},"31":{"title":"Docker 方式","titles":["项目部署"]},"32":{"title":"1、部署流程(以宝塔为例):","titles":["项目部署","Docker 方式"]},"33":{"title":"2、打包镜像","titles":["项目部署","Docker 方式"]},"34":{"title":"3、运行","titles":["项目部署","Docker 方式"]},"35":{"title":"注意事项","titles":["项目部署","Docker 方式"]},"36":{"title":"开发方式","titles":[]},"37":{"title":"Ai 全自动","titles":["开发方式"]},"38":{"title":"半自动","titles":["开发方式"]},"39":{"title":"目录结构","titles":[]},"40":{"title":"结构","titles":["目录结构"]},"41":{"title":"统一异常处理","titles":[]},"42":{"title":"异常统一捕获","titles":["统一异常处理"]},"43":{"title":"Ai 流程编排","titles":[]},"44":{"title":"国际化多语言(v8.0新增)","titles":[]},"45":{"title":"实现","titles":[]},"46":{"title":"使用","titles":[]},"47":{"title":"数据初始化","titles":[]},"48":{"title":"锁","titles":[]},"49":{"title":"防重复提交","titles":[]},"50":{"title":"扩展插件","titles":[]},"51":{"title":"使用插件","titles":["扩展插件"]},"52":{"title":"1、安装","titles":["扩展插件","使用插件"]},"53":{"title":"2、调用","titles":["扩展插件","使用插件"]},"54":{"title":"3、配置","titles":["扩展插件","使用插件"]},"55":{"title":"开发插件","titles":["扩展插件"]},"56":{"title":"1、脚手架","titles":["扩展插件","开发插件"]},"57":{"title":"2、目录结构","titles":["扩展插件","开发插件"]},"58":{"title":"3、开发过程","titles":["扩展插件","开发插件"]},"59":{"title":"4、字段解释","titles":["扩展插件","开发插件"]},"60":{"title":"插件详解","titles":["扩展插件"]},"61":{"title":"打包","titles":["扩展插件"]},"62":{"title":"安装插件","titles":["扩展插件"]},"63":{"title":"实现原理","titles":["扩展插件"]},"64":{"title":"快速开始","titles":[]},"65":{"title":"环境准备","titles":["快速开始"]},"66":{"title":"运行系统","titles":["快速开始"]},"67":{"title":"1、拉取源码","titles":["快速开始","运行系统"]},"68":{"title":"2、配置数据库","titles":["快速开始","运行系统"]},"69":{"title":"3、启动后端服务","titles":["快速开始","运行系统"]},"70":{"title":"4、启动前端服务","titles":["快速开始","运行系统"]},"71":{"title":"请求日志记录","titles":[]},"72":{"title":"权限校验","titles":[]},"73":{"title":"配置","titles":["权限校验"]},"74":{"title":"原理","titles":["权限校验"]},"75":{"title":"当前用户","titles":["权限校验"]},"76":{"title":"后端用户","titles":["权限校验","当前用户"]},"77":{"title":"应用用户","titles":["权限校验","当前用户"]},"78":{"title":"忽略 token","titles":["权限校验"]},"79":{"title":"方式一: 注解","titles":["权限校验","忽略 token"]},"80":{"title":"方法上","titles":["权限校验","忽略 token","方式一: 注解"]},"81":{"title":"类上","titles":["权限校验","忽略 token","方式一: 注解"]},"82":{"title":"方式二: 配置文件","titles":["权限校验","忽略 token"]},"83":{"title":"服务","titles":[]},"84":{"title":"Crud","titles":["服务"]},"85":{"title":"修改前后","titles":["服务"]},"86":{"title":"swagger 文档","titles":[]},"87":{"title":"多租户(v8.0新增)","titles":[]},"88":{"title":"主要特点","titles":[]},"89":{"title":"实现","titles":[]},"90":{"title":"1、数据隔离","titles":["实现"]},"91":{"title":"使用","titles":[]},"92":{"title":"1、开启多租户","titles":["使用"]},"93":{"title":"2、继承对象调整","titles":["使用"]},"94":{"title":"唯一id","titles":[]},"95":{"title":"文件上传","titles":[]},"96":{"title":"使用","titles":[]},"97":{"title":"简介","titles":[]},"98":{"title":"技术选型","titles":["简介"]},"99":{"title":"一、环境要求","titles":["简介","技术选型"]},"100":{"title":"二、后端框架","titles":["简介","技术选型"]},"101":{"title":"三、前端框架","titles":["简介","技术选型"]},"102":{"title":"为什么选择 Cool Admin?","titles":["简介"]},"103":{"title":"内置功能","titles":["简介"]},"104":{"title":"演示","titles":[]},"105":{"title":"源码","titles":[]},"106":{"title":"后端(点个 Star 哦)","titles":["源码"]},"107":{"title":"前端(点个 Star 哦)","titles":["源码"]},"108":{"title":"文档 (Star 哦)","titles":["源码"]},"109":{"title":"常见问题","titles":[]},"110":{"title":"1、找不到类似xxxTableDef文件","titles":["常见问题"]},"111":{"title":"计划","titles":[]},"112":{"title":"完善插件","titles":["计划"]},"113":{"title":"更新","titles":[]},"114":{"title":"v8.0.0(2025-04-13)","titles":["更新"]},"115":{"title":"v7.1.3(2024-08-25)","titles":["更新"]},"116":{"title":"v7.1.2(2024-08-04)","titles":["更新"]},"117":{"title":"v7.1.1(2024-07-15)","titles":["更新"]},"118":{"title":"v7.1.0(2024-06-27)","titles":["更新"]}},"dirtCount":0,"index":[["移除插件jar文件落库",{"2":{"116":1}}],["移除锁",{"2":{"49":1}}],["鉴权调整兼容app端",{"2":{"116":1}}],["鉴权拦截配置",{"2":{"74":1}}],["指定id插入不生效问题",{"2":{"115":1}}],["修复",{"2":{"115":2,"116":1}}],["修改之后",{"2":{"85":2}}],["修改之前",{"2":{"85":2}}],["修改类型",{"2":{"85":2}}],["修改前后",{"0":{"85":1}}],["修改",{"2":{"13":1,"103":1}}],["图形验证码获取区分app和admin",{"2":{"115":1}}],["解析规则",{"2":{"115":1}}],["解析设计",{"2":{"22":1}}],["参考",{"2":{"115":6}}],["参数管理",{"2":{"103":1}}],["参数",{"2":{"53":1}}],["涉及包结构变更",{"2":{"114":1}}],["升级所有相关依赖到最新",{"2":{"118":1}}],["升级到",{"2":{"118":1}}],["升级autotable和mybatis",{"2":{"114":1}}],["升级",{"2":{"114":2}}],["响应类型封装优化",{"2":{"114":1}}],["全局动态注入查询条件详情",{"2":{"114":1}}],["全自动",{"0":{"37":1}}],["支付",{"2":{"117":1}}],["支付插件",{"2":{"112":1}}],["支持postgresql",{"2":{"116":1}}],["支持自定义返回结果类型",{"2":{"115":1}}],["支持多语言",{"2":{"114":1}}],["支持多租户",{"2":{"114":1}}],["支持多主键",{"2":{"22":1}}],["支持动态安装",{"2":{"103":1}}],["支持回滚操作",{"2":{"103":1}}],["支持静态资源文件上传云端进行云管理",{"2":{"103":1}}],["支持通配",{"2":{"82":1}}],["支持很多数据库",{"2":{"23":1}}],["支持的数据库类型",{"2":{"23":1}}],["支持数据库",{"0":{"23":1}}],["支持关联查询",{"2":{"21":1}}],["短信等功能可以通过安装插件的方式添加",{"2":{"117":1}}],["短信插件",{"2":{"112":1}}],["短信这类功能的插件可以通过后台动态安装卸载",{"2":{"102":1}}],["完善插件",{"0":{"112":1}}],["计划",{"0":{"111":1},"1":{"112":1}}],["找不到类似xxxtabledef文件",{"0":{"110":1}}],["常见问题",{"0":{"109":1},"1":{"110":1}}],["常用的技术进行选择",{"2":{"98":1}}],["常用命令",{"2":{"29":1}}],["您的贡献可能会给其他人来带巨大的帮助",{"2":{"108":1}}],["哦",{"0":{"106":1,"107":1,"108":1}}],["点个",{"0":{"106":1,"107":1}}],["点击前往前端项目详细文档",{"2":{"70":1,"107":1}}],["点击前往插件市场",{"2":{"50":1}}],["点击前往插件市场下载安装",{"2":{"43":1}}],["点击+按钮",{"2":{"52":1}}],["点击左侧菜单扩展管理",{"2":{"52":1}}],["源码",{"0":{"105":1},"1":{"106":1,"107":1,"108":1}}],["源码仓库",{"2":{"67":1}}],["演示",{"0":{"104":1}}],["卸载插件",{"2":{"103":1}}],["卸载和替换",{"2":{"63":2}}],["前后端插件",{"2":{"103":1}}],["前端",{"0":{"107":1}}],["前端框架",{"0":{"101":1}}],["前端会根据后端返回的上传模式进行本地上传或者云存储签名直传",{"2":{"95":1}}],["前端请前往前端文档查看",{"2":{"45":1}}],["前端不需要特意写调用接口的",{"2":{"33":1}}],["前端打包完放这边",{"2":{"30":1}}],["前端访问后端的接口地址默认是前端根地址+",{"2":{"27":1}}],["前端接口",{"2":{"18":1}}],["天的保留",{"2":{"103":1}}],["任务调度包含执行结果日志",{"2":{"103":1}}],["添加",{"2":{"103":1}}],["定时任务",{"2":{"103":1}}],["定时任务模块",{"2":{"40":1}}],["便于问题排查",{"2":{"103":1}}],["设置角色按机构进行数据范围权限划分",{"2":{"103":1}}],["呈现公司组织部门树形结构",{"2":{"103":1}}],["内置功能",{"0":{"103":1}}],["代码简洁",{"2":{"102":1}}],["代理服务端地址",{"2":{"30":1}}],["灵活又不臃肿",{"2":{"102":1}}],["灵活性",{"2":{"63":1}}],["灵活性高",{"2":{"63":1}}],["专门为",{"2":{"102":1}}],["部分功能实现零代码",{"2":{"102":1}}],["部署",{"2":{"35":1}}],["部署的简单流程",{"2":{"31":1}}],["部署的配置方式可以参考普通的部署方式",{"2":{"31":1}}],["部署成功",{"2":{"27":1,"32":1}}],["部署流程",{"0":{"27":1,"32":1}}],["部署视频教程",{"2":{"26":1,"31":1}}],["从页面到后端代码",{"2":{"102":1}}],["从第三方",{"2":{"11":1}}],["特别是最近",{"2":{"102":1}}],["特别是跟",{"2":{"4":1}}],["三",{"0":{"101":1}}],["二",{"0":{"100":1}}],["环境要求",{"0":{"99":1}}],["环境准备",{"0":{"65":1}}],["减少技术栈的复杂度",{"2":{"98":1}}],["技术选型",{"0":{"98":1},"1":{"99":1,"100":1,"101":1}}],["技术分享",{"2":{"4":1,"6":1}}],["水印等处理",{"2":{"96":1}}],["裁剪",{"2":{"96":1}}],["条件允许的话尽量选择云存储上传",{"2":{"96":1}}],["动静分离有许多好处",{"2":{"96":1}}],["动态加载使得应用程序能够在不停机的情况下进行热更新",{"2":{"63":1}}],["动态加载允许应用程序在运行时根据需求加载",{"2":{"63":1}}],["动态加载",{"2":{"63":2}}],["动态",{"2":{"22":1}}],["动态表名",{"2":{"22":1}}],["线上环境请用nginx等静态服务器代理",{"2":{"96":1}}],["线上的数据库是需要本地传上去的",{"2":{"27":1}}],["七牛云等",{"2":{"95":1}}],["腾讯云",{"2":{"95":1}}],["云存储上传服务端值提供签名供前端直传到对应的云存储",{"2":{"95":1}}],["云存储",{"2":{"95":1}}],["直接上传到对应的云存储",{"2":{"95":1}}],["分布式id",{"2":{"115":1}}],["分布式id生成组件",{"2":{"115":1}}],["分布式唯一id组件",{"2":{"94":1}}],["分页查询无",{"2":{"22":1}}],["分页查询之总量缓存",{"2":{"22":1}}],["分页查询配置",{"2":{"14":1}}],["分页查询",{"2":{"13":1,"22":1}}],["启用唯一id组件",{"2":{"94":1}}],["启动",{"2":{"70":1}}],["启动前端服务",{"0":{"70":1}}],["启动文件",{"2":{"69":1}}],["启动后端服务",{"0":{"69":1}}],["启动一个服务",{"2":{"29":1}}],["启动服务",{"2":{"27":1}}],["入参为key",{"2":{"94":1}}],["步长",{"2":{"94":1}}],["唯一id分配",{"2":{"94":1}}],["唯一id",{"0":{"94":1}}],["继承对象调整",{"0":{"93":1}}],["关于tenantid的使用请参考",{"2":{"92":1}}],["关联查询用法参考",{"2":{"14":1}}],["租户id",{"2":{"90":1}}],["成本优化",{"2":{"88":1}}],["成功",{"2":{"46":1}}],["独立配置",{"2":{"88":1}}],["互不可见",{"2":{"88":1}}],["确保不同租户之间的数据严格分离",{"2":{"88":1}}],["但最为常见的是以列进行隔离的方式",{"2":{"90":1}}],["但共享同一个应用程序代码和基础设施",{"2":{"87":1}}],["但是每次都是用代码手搓",{"2":{"43":1}}],["但是它为我们提供了改造的可能",{"2":{"23":1}}],["但是",{"2":{"23":1}}],["客户组织",{"2":{"87":1}}],["允许单个应用实例服务多个租户",{"2":{"87":1}}],["允许网页iframe",{"2":{"74":1}}],["操作日志",{"2":{"103":1}}],["操作权限标识等",{"2":{"103":1}}],["操作",{"2":{"84":1}}],["处理业务逻辑的代码应该被封装在服务中",{"2":{"83":1}}],["处理逻辑在以下方法",{"2":{"47":1}}],["都必须配合coolrestcontroller使用",{"2":{"81":1}}],["都继承自",{"2":{"12":1}}],["校验",{"2":{"78":1,"80":1}}],["应用用户",{"0":{"77":1}}],["应用必备",{"2":{"43":1}}],["类上",{"0":{"81":1}}],["类型",{"2":{"76":1}}],["类必须继承",{"2":{"53":1,"60":2}}],["类必须要有",{"2":{"53":1,"60":2}}],["当前最大id",{"2":{"94":1}}],["当前用户",{"0":{"75":1},"1":{"76":1,"77":1}}],["当你在控制台看到这样的输出",{"2":{"46":1}}],["监控用户行为",{"2":{"74":1}}],["监听",{"2":{"22":1}}],["权限管理拦截器",{"2":{"74":1}}],["权限校验",{"0":{"72":1},"1":{"73":1,"74":1,"75":1,"76":1,"77":1,"78":1,"79":1,"80":1,"81":1,"82":1}}],["每次调用接口的时候spring",{"2":{"74":1}}],["每个租户可以有自己的个性化配置和定制化需求",{"2":{"88":1}}],["每个租户的数据是相互隔离的",{"2":{"87":1}}],["每个插件的配置各不相同",{"2":{"59":1}}],["每个对象中的",{"2":{"47":1}}],["每个模块都有其特有的功能",{"2":{"39":1}}],["判定用户请求的url是否在权限表中",{"2":{"74":1}}],["判断",{"2":{"42":1}}],["刷新token过期时间",{"2":{"73":1}}],["半小时",{"2":{"73":1}}],["半自动",{"0":{"38":1}}],["秒",{"2":{"73":2}}],["单位",{"2":{"73":2}}],["单主键配置",{"2":{"22":1}}],["过期时间",{"2":{"73":1}}],["作为文档",{"2":{"86":1}}],["作为myaccessdecisionmanager类的decide的第三个参数",{"2":{"74":1}}],["作为框架安全与权限校验",{"2":{"72":1}}],["作者",{"2":{"58":1,"59":1}}],["采用",{"2":{"72":1}}],["忽略后台鉴权url",{"2":{"82":1}}],["忽略",{"0":{"78":1},"1":{"79":1,"80":1,"81":1,"82":1},"2":{"78":1}}],["忽略权限控制的地址",{"2":{"74":1}}],["忽略记录请求日志url配置",{"2":{"116":1}}],["忽略记录请求日志url",{"2":{"71":1}}],["忽略url",{"2":{"71":1,"82":1}}],["记录日志",{"2":{"71":1}}],["记录接口请求日志入库",{"2":{"71":1}}],["密码版本号",{"2":{"76":1}}],["密码",{"2":{"70":1,"104":1}}],["账户",{"2":{"70":1,"104":1}}],["账户密码不正确",{"2":{"42":1}}],["执行",{"2":{"110":1}}],["执行命令",{"2":{"70":1}}],["执行的过程中",{"2":{"21":1}}],["跟进nodejs",{"2":{"118":1}}],["跟",{"2":{"70":1}}],["跟分页查询一样",{"2":{"14":1}}],["端口",{"2":{"69":1}}],["服务",{"0":{"83":1},"1":{"84":1,"85":1}}],["服务启动成功",{"2":{"69":1}}],["服务器环境准备",{"2":{"27":1}}],["构建eps信息",{"2":{"69":1}}],["控制台打印出下面信息",{"2":{"69":1}}],["控制器",{"0":{"12":1},"1":{"13":1,"14":1,"15":1,"16":1},"2":{"115":1}}],["驱动已经内置",{"2":{"68":1}}],["yamlcool",{"2":{"73":1}}],["yaml",{"2":{"68":1,"82":1,"92":1,"94":1}}],["yamlspring",{"2":{"8":1,"96":1}}],["yml",{"2":{"68":1,"96":1}}],["9000",{"2":{"70":1}}],["941+08",{"2":{"69":1}}],["9",{"2":{"65":1}}],["7天",{"2":{"73":1}}],["7版本",{"2":{"68":1}}],["7",{"2":{"65":1,"99":1}}],["选择",{"2":{"65":1,"99":1}}],["选择插件包进行安装",{"2":{"52":1}}],["开启",{"2":{"110":1}}],["开启多租户",{"0":{"92":1}}],["开放接口",{"2":{"78":1}}],["开始使用",{"2":{"64":1}}],["开发几乎不用写代码",{"2":{"102":1}}],["开发设计的",{"2":{"102":1}}],["开发过程",{"0":{"58":1}}],["开发过程只需点一点",{"2":{"37":1}}],["开发插件",{"0":{"55":1},"1":{"56":1,"57":1,"58":1,"59":1}}],["开发的时候无法调试",{"2":{"53":1}}],["开发的时候只是模拟",{"2":{"53":1}}],["开发的一个",{"2":{"8":1}}],["开发",{"2":{"43":1}}],["开发方式",{"0":{"36":1},"1":{"37":1,"38":1}}],["开发者可以从中方便的获取各种参数",{"2":{"15":1}}],["快速开始",{"0":{"64":1},"1":{"65":1,"66":1,"67":1,"68":1,"69":1,"70":1}}],["扩展性",{"2":{"63":1}}],["扩展插件",{"0":{"50":1},"1":{"51":1,"52":1,"53":1,"54":1,"55":1,"56":1,"57":1,"58":1,"59":1,"60":1,"61":1,"62":1,"63":1},"2":{"102":1}}],["大大提高了系统的可用性和稳定性",{"2":{"63":1}}],["热更新",{"2":{"63":1}}],["优化若干问题",{"2":{"118":1}}],["优化插件过大加载慢问题",{"2":{"116":1}}],["优化角色修改循环单个处理为批量处理",{"2":{"115":1}}],["优化eps解析规则",{"2":{"115":1}}],["优化",{"2":{"114":1}}],["优势",{"2":{"63":1}}],["优炫数据库",{"2":{"23":1}}],["远程服务器和",{"2":{"63":1}}],["它可以加载指定的",{"2":{"63":1}}],["它是指让软件支持多种语言和地区的功能",{"2":{"44":1}}],["标准库中提供的一个类加载器",{"2":{"63":1}}],["最终打出的包为",{"2":{"61":1}}],["里指定",{"2":{"61":1}}],["里面是个数组",{"2":{"47":1}}],["后台人员查询列表字段关联错误",{"2":{"115":1}}],["后端",{"0":{"106":1}}],["后端框架",{"0":{"100":1}}],["后端用户",{"0":{"76":1}}],["后端修改数据库配置",{"2":{"68":1}}],["后端接口",{"2":{"18":1}}],["后缀的文件",{"2":{"61":1}}],["避免打包结果过大",{"2":{"60":1}}],["避免插件过大不会在打入jar包中",{"2":{"60":1}}],["主应用以有这些依赖",{"2":{"60":1}}],["主应用项目已经有的依赖给排除掉",{"2":{"60":1}}],["主应用没有这些依赖",{"2":{"60":1}}],["主要特点",{"0":{"88":1},"2":{"21":1,"102":1}}],["主要是做一些技术教程",{"2":{"4":1}}],["引入依赖",{"2":{"60":1}}],["引入插件",{"2":{"46":1}}],["可商用",{"2":{"105":1}}],["可插拔",{"2":{"102":1}}],["可选",{"2":{"96":1}}],["可维护性",{"2":{"63":1}}],["可控性强",{"2":{"63":1}}],["可在",{"2":{"61":1}}],["可使用",{"2":{"60":1}}],["可以重写modifybefore和modifyafter方法",{"2":{"85":1}}],["可以参考baseservice的实现",{"2":{"84":1}}],["可以轻松地添加新的功能模块或服务",{"2":{"63":1}}],["可以将应用程序的核心逻辑和配置分离",{"2":{"63":1}}],["可以通过代码控制加载",{"2":{"63":1}}],["可以通过插件的方式来扩展系统功能",{"2":{"50":1}}],["可以动态指定",{"2":{"63":1}}],["可以快速开发我们的插件",{"2":{"56":1}}],["可以大大节省开发时间",{"2":{"36":1}}],["可以大大简化代码",{"2":{"12":1}}],["可以考虑这个时间配置长一点",{"2":{"30":1}}],["可以自己指定数量",{"2":{"29":1}}],["可以自动创建表",{"2":{"24":1}}],["可以在yml文件中配置",{"2":{"71":1}}],["可以在打包日志中查看我们排除和引入了哪些包",{"2":{"60":1}}],["可以在",{"2":{"47":1}}],["可以在对应的",{"2":{"16":1}}],["可以在这边实现一下列表数据排序规则",{"2":{"13":1,"15":1,"16":1,"86":1}}],["可以选择你想使用的缓存",{"2":{"8":1}}],["满足以上条件",{"2":{"60":1}}],["拼音",{"2":{"60":1}}],["汉字",{"2":{"60":1}}],["汉字字符",{"2":{"60":1}}],["会持续不断地更新",{"2":{"113":1}}],["会展示在插件的详情中",{"2":{"59":1}}],["会更加简洁",{"2":{"42":1}}],["建议",{"2":{"68":1}}],["建议尺寸",{"2":{"59":1}}],["建议将缓存换成",{"2":{"35":1}}],["说明后端服务启动成功",{"2":{"69":1}}],["说明",{"2":{"59":1,"76":1}}],["测试",{"2":{"58":1}}],["测试curd",{"2":{"13":2,"14":2,"15":2,"16":2,"38":1,"86":2}}],["或",{"2":{"56":1,"106":2,"107":2,"108":1}}],["或者db",{"2":{"11":1}}],["脚手架源码仓库",{"2":{"56":1}}],["脚手架",{"0":{"56":1}}],["下",{"2":{"54":1}}],["下的",{"2":{"47":1}}],["范围在",{"2":{"54":1}}],["路径可以自己指定",{"2":{"54":1}}],["例如原本的配置文件是这样的",{"2":{"54":1}}],["其它的无效",{"2":{"81":1}}],["其中对应的包名称",{"2":{"61":1}}],["其中",{"2":{"54":1}}],["其中我们可以在插件包里通过",{"2":{"53":1}}],["其他数据库适配中",{"2":{"68":1}}],["其他部署方式也可以参考这个流程",{"2":{"26":1}}],["其他查询方式",{"2":{"14":2}}],["获得用户信息",{"2":{"74":1,"76":1}}],["获得其他插件",{"2":{"53":1}}],["获取id",{"2":{"94":1}}],["获取当前用户信息",{"2":{"75":1}}],["获取启用的权限操作请求",{"2":{"74":1}}],["获取主应用resources下的",{"2":{"53":1}}],["获取主应用resources目录下的资源文件",{"2":{"53":1}}],["获取锁后的逻辑",{"2":{"48":1}}],["获取物流信息",{"2":{"11":1}}],["获取数据",{"0":{"11":1},"2":{"11":1}}],["||",{"2":{"53":7}}],["|",{"2":{"53":67}}],["一",{"0":{"99":1}}],["一个插件",{"2":{"60":1}}],["一个插件jar有且只能有一个类被",{"2":{"53":1,"60":1}}],["一个项目用cool就够了",{"2":{"53":2}}],["一般抛异常写法",{"2":{"42":1}}],["`",{"2":{"53":10}}],["`update",{"2":{"53":1}}],["`create",{"2":{"53":1}}],["`params`",{"2":{"53":1}}],["`ip`",{"2":{"53":1}}],["`action`",{"2":{"53":1}}],["`base",{"2":{"53":1}}],["500",{"2":{"94":2}}],["564+08",{"2":{"53":1}}],["556",{"2":{"69":1}}],["559+08",{"2":{"53":1}}],["558+08",{"2":{"53":1}}],["557+08",{"2":{"53":1}}],["554+08",{"2":{"53":1}}],["544+08",{"2":{"53":1}}],["543+08",{"2":{"53":2}}],["5",{"2":{"53":8,"60":6,"65":1,"99":1}}],["就是我们的插件包",{"2":{"61":1}}],["就可以在代码中调用插件的方法了",{"2":{"53":1}}],["就不需要在entity",{"2":{"14":1}}],["调整",{"2":{"115":4,"116":2}}],["调用其他插件",{"2":{"53":1}}],["调用其他插件aliyun",{"2":{"53":1}}],["调用主应用获取缓存",{"2":{"53":1}}],["调用主应用设置缓存",{"2":{"53":1}}],["调用主应用",{"2":{"53":3}}],["调用插件类",{"2":{"53":1}}],["调用",{"0":{"53":1}}],["调一调",{"2":{"37":1}}],["打开后台管理系统",{"2":{"52":1}}],["打包结果",{"2":{"61":1}}],["打包命令",{"2":{"61":1}}],["打包",{"0":{"61":1}}],["打包时可以排除",{"2":{"60":1}}],["打包前端镜像",{"2":{"33":1}}],["打包前后端代码",{"2":{"27":1}}],["打包后端镜像",{"2":{"33":1}}],["打包后端和前端镜像",{"2":{"32":1}}],["打包镜像之前",{"2":{"33":1}}],["打包镜像",{"0":{"33":1}}],["打包之前注意配置生产环境的数据库配置config",{"2":{"27":1}}],["然后在系统中安装插件包",{"2":{"52":1}}],["首次启动会自动初始化并导入数据",{"2":{"68":1}}],["首先下载插件包",{"2":{"52":1}}],["首末字符",{"2":{"44":1}}],["导致系统臃肿",{"2":{"50":1}}],["领取优惠券",{"2":{"49":1}}],["基于deepseek",{"2":{"114":1}}],["基于大模型自动翻译",{"2":{"114":1}}],["基于表来完成分布式id生成",{"2":{"94":1}}],["基于用户维度的防重复提交",{"2":{"49":1}}],["基础模块",{"2":{"40":1}}],["防重提交",{"2":{"115":1}}],["防重提交注解",{"2":{"115":1}}],["防重复提交",{"0":{"49":1}}],["防止上传恶意文件等",{"2":{"96":1}}],["防止操作不当导致的数据丢失",{"2":{"35":1}}],["防止刷新404",{"2":{"30":1}}],["释放锁",{"2":{"48":1}}],["尝试获取锁",{"2":{"48":1}}],["注入service",{"2":{"94":1}}],["注入锁",{"2":{"48":1}}],["注解",{"0":{"79":1},"1":{"80":1,"81":1},"2":{"49":1,"53":2,"60":4}}],["注意事项",{"0":{"35":1}}],["注意",{"2":{"18":1,"22":1,"23":1,"24":1,"25":1,"27":1,"33":1,"47":1,"65":1,"81":1,"96":1}}],["注意如果该表有json字段",{"2":{"14":1}}],["简单功能零代码实现",{"2":{"117":1}}],["简单锁的使用",{"2":{"48":1}}],["简介",{"0":{"97":1},"1":{"98":1,"99":1,"100":1,"101":1,"102":1,"103":1}}],["简体中文",{"2":{"46":1}}],["锁工具",{"2":{"115":2}}],["锁是基于redis",{"2":{"48":1}}],["锁",{"0":{"48":1}}],["加载权限表中所有操作请求权限",{"2":{"74":1}}],["加载成功后文件名称将被当作唯一键标识",{"2":{"47":1}}],["加上",{"2":{"57":1}}],["加锁",{"2":{"49":1}}],["加泰罗尼亚语",{"2":{"46":1}}],["要新增一个",{"2":{"47":1}}],["要让其再次翻译",{"2":{"46":1}}],["初始化数据",{"2":{"115":1}}],["初始化数据json文件",{"2":{"40":1}}],["初始化eps完成",{"2":{"69":1}}],["初始化菜单数据",{"2":{"47":1}}],["初始化自定义的数据",{"2":{"47":1}}],["富文本参数",{"2":{"47":1}}],["规范",{"2":{"47":1}}],["规则为",{"2":{"18":1}}],["数组里可以包含多个对象",{"2":{"47":1}}],["数据有",{"2":{"103":1}}],["数据回收站",{"2":{"103":1}}],["数据回收站模块",{"2":{"40":1}}],["数据隔离",{"0":{"90":1},"2":{"88":1}}],["数据初始化完成",{"2":{"47":1}}],["数据初始化",{"0":{"47":1},"2":{"94":1}}],["数据脱敏",{"2":{"22":1}}],["数据脱敏等等",{"2":{"21":1}}],["数据填充",{"2":{"21":1,"22":1}}],["数据库初始数据初始化",{"2":{"47":1}}],["数据库",{"0":{"21":1},"1":{"22":1,"23":1,"24":1},"2":{"23":32}}],["格式如下",{"2":{"47":1}}],["目录下",{"2":{"61":1}}],["目录下创建",{"2":{"47":1}}],["目录创建",{"2":{"47":1}}],["目录结构",{"0":{"39":1,"57":1},"1":{"40":1}}],["马来语",{"2":{"46":1}}],["孟加拉语",{"2":{"46":1}}],["世界语",{"2":{"46":1}}],["克罗地亚语",{"2":{"46":1}}],["亚美尼亚语",{"2":{"46":1}}],["亚马逊",{"2":{"23":1}}],["吉尔吉斯语",{"2":{"46":1}}],["巴斯克语",{"2":{"46":1}}],["巴西葡萄牙语",{"2":{"46":1}}],["塞尔维亚语",{"2":{"46":1}}],["维吾尔语",{"2":{"46":1}}],["库尔德语",{"2":{"46":2}}],["罗马尼亚语",{"2":{"46":1}}],["匈牙利语",{"2":{"46":1}}],["哈萨克语",{"2":{"46":1}}],["蒙古语",{"2":{"46":1}}],["立陶宛语",{"2":{"46":1}}],["希伯来语",{"2":{"46":1}}],["希腊语",{"2":{"46":1}}],["阿拉伯语",{"2":{"46":1}}],["阿塞拜疆语",{"2":{"46":1}}],["斯洛文尼亚语",{"2":{"46":1}}],["斯洛伐克语",{"2":{"46":1}}],["爱沙尼亚语",{"2":{"46":1}}],["南非荷兰语",{"2":{"46":1}}],["南大通用数据库",{"2":{"23":1}}],["南大通用",{"2":{"23":1}}],["拉取源码",{"0":{"67":1}}],["拉取前后端代码",{"2":{"27":1,"32":1}}],["拉脱维亚语",{"2":{"46":1}}],["泰米尔语",{"2":{"46":1}}],["泰语",{"2":{"46":1}}],["土库曼语",{"2":{"46":1}}],["土耳其语",{"2":{"46":1}}],["乌克兰语",{"2":{"46":1}}],["捷克语",{"2":{"46":1}}],["瑞典语",{"2":{"46":1}}],["芬兰语",{"2":{"46":1}}],["波兰语",{"2":{"46":1}}],["波斯语",{"2":{"46":1}}],["普什图语",{"2":{"46":1}}],["普通方式",{"0":{"26":1},"1":{"27":1,"28":1,"29":1,"30":1}}],["保加利亚语",{"2":{"46":1}}],["印度尼西亚语",{"2":{"46":1}}],["俄语",{"2":{"46":1}}],["越南语",{"2":{"46":1}}],["越来越多的企业开始走向国际化",{"2":{"44":1}}],["荷兰语",{"2":{"46":1}}],["日语",{"2":{"46":1}}],["日志",{"2":{"29":1}}],["韩语",{"2":{"46":1}}],["意大利语",{"2":{"46":1}}],["繁体中文",{"2":{"46":1}}],["挪威语",{"2":{"46":1}}],["法语",{"2":{"46":1}}],["丹麦语",{"2":{"46":1}}],["西班牙语",{"2":{"46":1}}],["葡萄牙语",{"2":{"46":1}}],["德语",{"2":{"46":1}}],["美国英语",{"2":{"46":1}}],["语言配置对照表",{"2":{"46":1}}],["得对应地删除相应的文件",{"2":{"46":1}}],["则框架会自动注入tenantid",{"2":{"90":1}}],["则返回给decide方法",{"2":{"74":1}}],["则该种类的国际化将不会进行翻译",{"2":{"46":1}}],["则代表成功",{"2":{"46":1}}],["翻译完成之后会默认在路径assets",{"2":{"46":1}}],["翻译",{"2":{"46":1}}],["翻译成功",{"2":{"46":1}}],["翻译中",{"2":{"46":1}}],["只需极少编码即可实现大部分需求",{"2":{"102":1}}],["只需拖一拖即可",{"2":{"102":1}}],["只需三步",{"2":{"38":1}}],["只有安装到cool",{"2":{"53":1}}],["只要开启并配置了国际化",{"2":{"46":1}}],["只要开启就能自动翻译",{"2":{"45":1}}],["比传统机翻更加准确",{"2":{"45":1}}],["比如orderid",{"2":{"94":1}}],["比如替换系统的上传组件",{"2":{"59":1}}],["比如你有一个订单管理的模块",{"2":{"40":1}}],["比如",{"2":{"22":1,"47":1,"53":1}}],["显示相应的语言界面",{"2":{"44":1}}],["个字母",{"2":{"44":1}}],["个接口",{"2":{"13":1}}],["之间有",{"2":{"44":1}}],["国际化多语言",{"0":{"44":1}}],["相关配置",{"2":{"73":1}}],["相关应用",{"2":{"43":1}}],["相关的技术发展",{"2":{"102":1}}],["相关的",{"2":{"4":1}}],["很容易就能完成一个",{"2":{"43":1}}],["很多应用希望接入",{"2":{"43":1}}],["结尾",{"2":{"47":1}}],["结合知识库",{"2":{"43":1}}],["结构",{"0":{"40":1}}],["做为后来者有后发优势",{"2":{"102":1}}],["做了一个",{"2":{"43":1}}],["做解析",{"2":{"20":1}}],["于是我们面向开发者和软件开发公司",{"2":{"43":1}}],["容易把我们累死",{"2":{"43":1}}],["随着技术不断地发展",{"2":{"102":1}}],["随着互联网的发展",{"2":{"44":1}}],["随着",{"2":{"43":1}}],["视频演示",{"2":{"43":1}}],["流程编排插件",{"2":{"112":1}}],["流程编排功能",{"2":{"43":1}}],["流程编排",{"0":{"43":1},"2":{"102":1}}],["异常消息",{"2":{"46":1}}],["异常信息为",{"2":{"42":1}}],["异常统一捕获",{"0":{"42":1}}],["即抛异常",{"2":{"42":1}}],["手动抛异常",{"2":{"42":1}}],["手动进行转换",{"2":{"14":1}}],["业务key",{"2":{"94":1}}],["业务校验的工具",{"2":{"42":1}}],["业务代码放在这边",{"2":{"40":1}}],["系统异常信息日志记录和查询",{"2":{"103":1}}],["系统正常操作日志记录和查询",{"2":{"103":1}}],["系统通用",{"2":{"96":2}}],["系统的文件上传就会自动替换成云存储上传的方式",{"2":{"95":1}}],["系统启动完成访问",{"2":{"86":1}}],["系统启动的时候",{"2":{"74":1}}],["系统会查询并向spring",{"2":{"74":1}}],["系统提供了",{"2":{"42":1}}],["系统用户",{"2":{"40":1}}],["请求日志",{"2":{"103":1}}],["请求日志记录",{"0":{"71":1}}],["请求过程中会解析",{"2":{"76":1}}],["请求参数",{"0":{"15":1},"2":{"85":2}}],["请勿重复操作",{"2":{"49":1}}],["请区分post",{"2":{"42":1}}],["不要吝啬你们免费的star哦",{"2":{"105":1}}],["不像一般代码生成器生成一堆冗余代码",{"2":{"102":1}}],["不经过服务器",{"2":{"95":1}}],["不然调用时会报错",{"2":{"60":1}}],["不带声调",{"2":{"60":1}}],["不同的插件有不同的配置",{"2":{"58":1}}],["不会重复初始化",{"2":{"47":1}}],["不支持该请求方式",{"2":{"42":1}}],["不用写一行代码",{"2":{"37":1}}],["已存在该记录",{"2":{"42":1}}],["统一异常处理",{"0":{"41":1},"1":{"42":1}}],["按照简单",{"2":{"98":1}}],["按上面的包结构新增即可",{"2":{"40":1}}],["按规则组装",{"2":{"20":1}}],["为什么选择",{"0":{"102":1}}],["为例",{"2":{"68":1}}],["为排除引入",{"2":{"60":1}}],["为引入",{"2":{"60":1}}],["为主应用",{"2":{"54":1}}],["为插件key",{"2":{"53":1}}],["为对应的值",{"2":{"47":1}}],["为表的字段",{"2":{"47":1}}],["为表的名称",{"2":{"47":1}}],["为业务模块",{"2":{"40":1}}],["为核心模块",{"2":{"40":1}}],["为了使项目能够持续",{"2":{"105":1}}],["为了开发插件如果引入了主应用已经有的maven依赖可以在下面的",{"2":{"60":2}}],["为了方便开发插件和统一插件开发规范",{"2":{"56":1}}],["为了方便获取参数",{"2":{"15":1}}],["为了丰富系统功能",{"2":{"50":1}}],["为了不过多依赖环境",{"2":{"8":1}}],["插件可以在打包的时候将在我们",{"2":{"60":1}}],["插件详解",{"0":{"60":1}}],["插件配置",{"2":{"59":1}}],["插件介绍",{"2":{"59":1}}],["插件",{"2":{"59":1,"112":1}}],["插件钩子",{"2":{"59":1}}],["插件唯一标识",{"2":{"59":1}}],["插件描述",{"2":{"58":1,"59":1}}],["插件运行测试类",{"2":{"57":1}}],["插件信息配置文件",{"2":{"57":1}}],["插件类放在这个包下",{"2":{"57":1}}],["插件包",{"2":{"57":1}}],["插件包可以通过官网下载插件",{"2":{"52":1}}],["插件方法",{"2":{"53":1,"60":1}}],["插件管理",{"2":{"52":1}}],["插件模块",{"2":{"40":1}}],["插件分享等",{"2":{"6":1}}],["插件分享等内容",{"2":{"4":1}}],["角色菜单权限分配",{"2":{"103":1}}],["角色管理",{"2":{"103":1}}],["角色数组",{"2":{"59":1,"76":1}}],["角色",{"2":{"40":1}}],["资源共享",{"2":{"88":1}}],["资源目录下的文件",{"2":{"54":1}}],["资源文件",{"2":{"40":1}}],["资源",{"2":{"40":1,"63":1}}],["菜单管理",{"2":{"103":1}}],["菜单",{"2":{"40":1}}],["└─",{"2":{"40":8,"57":7}}],["└──",{"2":{"18":6}}],["核心包",{"2":{"40":1,"57":1}}],["├─core",{"2":{"57":1}}],["├─",{"2":{"40":15,"57":3}}],["├──",{"2":{"18":1}}],["清晰明了便于管理",{"2":{"39":1}}],["组件会根据字段智能选择",{"2":{"38":1}}],["零代码开发",{"2":{"37":1}}],["提高了代码的可维护性",{"2":{"63":1}}],["提高开发效率",{"2":{"36":1}}],["提示",{"2":{"40":1}}],["提供了极大的灵活性",{"2":{"63":1}}],["提供了简化的业务异常抛出工具",{"2":{"41":1}}],["提供了非常灵活的",{"2":{"21":1}}],["提供了一种高效且可靠的解决方案",{"2":{"8":1}}],["降低开发成本",{"2":{"36":1}}],["推荐",{"2":{"65":2,"110":1}}],["推荐两种快速开发方式",{"2":{"36":1}}],["推荐使用",{"0":{"28":1}}],["文件管理",{"2":{"103":1}}],["文件管理模块",{"2":{"40":1}}],["文件存放路径",{"2":{"96":1}}],["文件根地址",{"2":{"96":1}}],["文件等",{"2":{"63":1}}],["文件上传插件",{"2":{"112":1}}],["文件上传模式",{"2":{"96":1}}],["文件上传相关",{"2":{"96":1}}],["文件上传",{"0":{"95":1},"2":{"62":1,"96":1}}],["文件上传换成云存储",{"2":{"35":1}}],["文件内容",{"2":{"53":1}}],["文件后",{"2":{"47":1}}],["文件",{"2":{"38":1,"40":1,"47":2,"96":1}}],["文档",{"0":{"86":1,"108":1},"2":{"1":1}}],["运行系统",{"0":{"66":1},"1":{"67":1,"68":1,"69":1,"70":1}}],["运行结果",{"2":{"53":1}}],["运行代码生成器",{"2":{"38":1}}],["运行",{"0":{"34":1}}],["运行后端",{"2":{"34":2}}],["运行后端和前端",{"2":{"32":1}}],["运行后端服务",{"0":{"29":1}}],["否则使用",{"2":{"48":1}}],["否则你将无法正常访问你的",{"2":{"33":1}}],["否则这个controller",{"2":{"18":1}}],["让前端能够自动生成eps",{"2":{"33":1}}],["创建实体类生成表",{"2":{"38":1}}],["创建docker",{"2":{"33":1}}],["创建",{"2":{"32":1,"47":1}}],["持久化连接相关配置",{"2":{"30":1}}],["持续添加更多的数据库支持",{"2":{"23":1}}],["$",{"2":{"96":1}}],["$1",{"2":{"30":1}}],["$upstream",{"2":{"30":1}}],["$uri",{"2":{"30":2}}],["$http",{"2":{"30":2}}],["$host$request",{"2":{"30":1}}],["$host",{"2":{"30":2}}],["$proxy",{"2":{"30":2}}],["$remote",{"2":{"30":5}}],["访问http",{"2":{"70":1}}],["访问如果登录页正常出现验证码",{"2":{"32":1}}],["访问",{"2":{"30":1,"69":1}}],["访问域名",{"2":{"27":1}}],["8",{"2":{"53":1,"60":3,"65":1,"68":2}}],["80",{"2":{"34":2}}],["8001",{"2":{"30":1,"34":2,"53":5,"69":2,"86":1}}],["86400s",{"2":{"30":1}}],["8s",{"2":{"23":2}}],["403",{"2":{"74":1}}],["401",{"2":{"74":1}}],["46",{"2":{"69":1}}],["45",{"2":{"69":3}}],["4b57",{"2":{"60":1}}],["47ac",{"2":{"60":1}}],["4fd03504",{"2":{"60":1}}],["4",{"0":{"30":1,"59":1,"70":1},"2":{"60":2,"63":1,"74":1}}],["改成自己的应用名称",{"2":{"29":1}}],["表示访问服务端接口而不是静态资源",{"2":{"30":1}}],["表示",{"2":{"29":2}}],["表单",{"2":{"15":1}}],["方便一张图片使用在多种场景",{"2":{"96":1}}],["方式二",{"0":{"82":1}}],["方式一",{"0":{"79":1},"1":{"80":1,"81":1}}],["方式",{"0":{"31":1},"1":{"32":1,"33":1,"34":1,"35":1},"2":{"31":1,"76":1}}],["方式启动",{"2":{"29":1}}],["方法上",{"0":{"80":1}}],["方法去调用主应用的一些对象方法",{"2":{"53":1}}],["方法第一个参数如果为",{"2":{"42":1}}],["方法",{"2":{"20":1,"53":5}}],["重启生成表",{"2":{"38":1}}],["重启",{"2":{"29":1}}],["重启某个服务",{"2":{"29":1}}],["重写",{"0":{"20":1}}],["重写逻辑",{"2":{"16":2}}],["重写实现",{"0":{"16":1}}],["停止某个服务",{"2":{"29":1}}],["命令行安装",{"2":{"29":1}}],["到后端服务",{"2":{"27":1}}],["所以需要配置",{"2":{"27":1}}],["所有的",{"2":{"12":1}}],["安全考虑生产环境不会自动初始化数据库",{"2":{"27":1}}],["安装云存储插件",{"2":{"95":1}}],["安装插件将打包好的",{"2":{"62":1}}],["安装插件",{"0":{"62":1}}],["安装插件之后",{"2":{"53":1}}],["安装后",{"2":{"46":1}}],["安装",{"0":{"52":1},"2":{"28":1}}],["安装依赖",{"0":{"28":1},"2":{"27":1,"70":1}}],["安装宝塔",{"2":{"27":1}}],["恭喜你",{"2":{"27":1,"32":1}}],["反向代理",{"2":{"27":2}}],["编写实体类",{"2":{"38":1}}],["编译打包后端服务",{"2":{"27":1}}],["编码",{"0":{"7":1},"2":{"102":1}}],["上传模式",{"2":{"96":1}}],["上传前后端代码到服务器",{"2":{"27":1}}],["上面只是个例子",{"2":{"58":1}}],["上加了这个注解后",{"2":{"20":1}}],["官方多环境配置文档",{"2":{"27":1}}],["官网文档",{"2":{"21":1}}],["官网",{"2":{"1":1,"28":1}}],["查看服务的输出日志",{"2":{"29":1}}],["查看",{"2":{"27":1}}],["查询该用户所具有的权限并缓存",{"2":{"74":1}}],["查询模式querymodeenum",{"2":{"14":1}}],["查询连表字段",{"2":{"14":1}}],["查询另一张表的字段",{"2":{"14":1}}],["查询配置",{"0":{"14":1}}],["查询列表",{"2":{"13":1}}],["查询条件过滤",{"2":{"13":1,"15":1,"16":1,"86":1}}],["本地上传配置",{"2":{"96":1}}],["本地上传",{"2":{"95":1}}],["本地配置完数据库运行",{"2":{"27":1,"32":1}}],["本部署教程以",{"2":{"26":1}}],["本身",{"2":{"21":1}}],["以往的框架已经越来越不能满足现代化的开发需求",{"2":{"102":1}}],["以",{"2":{"68":1}}],["以前该怎么写还是怎么写",{"2":{"45":1}}],["以下包会打入jar",{"2":{"60":1}}],["以下是我们的一些计划",{"2":{"111":1}}],["以下是",{"2":{"31":1}}],["以下教程以",{"2":{"25":1}}],["以宝塔为例",{"0":{"27":1,"32":1}}],["以上包在主应用已经引入",{"2":{"60":1}}],["以上内容来自第三方相关产品的官方文档或第三方平台",{"2":{"22":1}}],["以上是针对entity单表查询方式",{"2":{"14":1}}],["低价云服务器推荐",{"2":{"25":1}}],["🔥",{"2":{"25":1}}],["因为有你们的支持",{"2":{"113":1}}],["因为这可能会造成数据丢失",{"2":{"24":1}}],["因此如果你需要开发",{"2":{"43":1}}],["因此会带来指数级的性能增长",{"2":{"21":1}}],["因此会带来更高的自主性",{"2":{"21":1}}],["切勿在生产环境开启自动建表功能",{"2":{"24":1}}],["并异步进行刷新用户权限",{"2":{"115":1}}],["并可以在init方法中初始化返回字段类型及数据组装函数定义",{"2":{"115":1}}],["并将用户信息存在整个请求过程中的",{"2":{"76":1}}],["并实现",{"2":{"53":1,"60":1}}],["并实现值的插入",{"2":{"47":1}}],["并定义表数据",{"2":{"47":1}}],["并调用大模型对其进行翻译",{"2":{"46":1}}],["并且支持表字段的修改",{"2":{"24":1}}],["并重写了",{"2":{"20":1}}],["节省了大量手动工作",{"2":{"24":1}}],["尤其是开发过程中频繁的新增表及变更表结构",{"2":{"24":1}}],["列出当前的服务",{"2":{"29":1}}],["列的配置",{"2":{"24":1}}],["列表查询",{"2":{"14":1}}],["而不用一味地堆功能",{"2":{"50":1}}],["而不需要关心数据库的表",{"2":{"24":1}}],["而且不需要改变任何原有代码",{"2":{"45":1}}],["而是也非常不灵活",{"2":{"43":1}}],["而是对它做一层封装",{"2":{"20":1}}],["有且只能有一个类被",{"2":{"60":1}}],["有时候开发时的配置和生产环境的配置是不一样的",{"2":{"54":1}}],["有些功能模块上线时",{"2":{"47":1}}],["有了该文件",{"2":{"33":1}}],["有一项重要的能力就是表结构自动维护",{"2":{"24":1}}],["有兴趣的可以关注我们",{"2":{"4":1}}],["用法",{"2":{"94":1}}],["用来判定用户是否有此权限",{"2":{"74":1}}],["用configattribute的集合作为value",{"2":{"74":1}}],["用权限的path作为map的key",{"2":{"74":1}}],["用户是系统操作者",{"2":{"103":1}}],["用户管理",{"2":{"103":1}}],["用户管理模块",{"2":{"40":1}}],["用户",{"2":{"76":1}}],["用户详情",{"2":{"74":1}}],["用户名",{"2":{"76":1}}],["用户名不存在",{"2":{"74":1}}],["用户名已存在",{"2":{"41":1,"42":3}}],["用户登录",{"2":{"74":1}}],["用户id",{"2":{"14":1}}],["用过",{"2":{"24":1}}],["理论上你只需修改一些不兼容的代码就可以正常运行了",{"2":{"23":1}}],["那样工作量太大了",{"2":{"23":1}}],["是否开启多租户",{"2":{"92":1}}],["是否支持在微服务项目下进行",{"2":{"22":1}}],["是一种软件架构模式",{"2":{"87":1}}],["是",{"2":{"63":1}}],["是插件的配置信息",{"2":{"58":1}}],["是软件国际化的标准缩写",{"2":{"44":1}}],["是具体的业务框架",{"2":{"23":1}}],["虽然",{"2":{"23":1}}],["星瑞格数据库",{"2":{"23":1}}],["华为",{"2":{"23":1}}],["华库",{"2":{"23":1}}],["行云数据库",{"2":{"23":1}}],["瀚高数据库",{"2":{"23":1}}],["神通数据库",{"2":{"23":1}}],["人大金仓数据库",{"2":{"23":1}}],["kyi=",{"2":{"53":1}}],["ky",{"2":{"46":1}}],["km",{"2":{"46":1}}],["ku",{"2":{"46":1}}],["kk",{"2":{"46":1}}],["ko",{"2":{"46":1}}],["kingbasees",{"2":{"23":1}}],["keyname",{"2":{"47":2}}],["keyword",{"2":{"14":1}}],["keywordlikefields",{"2":{"14":1}}],["key",{"2":{"9":1,"30":1,"47":1,"48":3,"49":3,"53":4,"58":1,"59":1,"94":2}}],["虚谷数据库",{"2":{"23":1}}],["达梦数据库",{"2":{"23":1}}],["及以上数据库",{"2":{"23":1}}],["及以下数据库",{"2":{"23":1}}],["及更高性能",{"2":{"22":1}}],["描述",{"2":{"23":1,"94":1}}],["欢迎联系我们",{"2":{"111":1}}],["欢迎提交pr",{"2":{"108":1}}],["欢迎纠正",{"2":{"22":1}}],["欢迎加入我们大家庭一起讨论",{"2":{"2":1}}],["若有错误",{"2":{"22":1}}],["项目中常见的问题",{"2":{"109":1}}],["项目是开源免费",{"2":{"105":1}}],["项目是前后端分离的",{"2":{"67":1}}],["项目启动自动插入数据参考",{"2":{"94":1}}],["项目按照模块化的方式组织",{"2":{"39":1}}],["项目部署",{"0":{"25":1},"1":{"26":1,"27":1,"28":1,"29":1,"30":1,"31":1,"32":1,"33":1,"34":1,"35":1}}],["项目",{"2":{"22":1}}],["非低代码",{"2":{"37":1}}],["非",{"2":{"22":1}}],["quot",{"2":{"22":2,"41":2,"42":2}}],["querymodeenum",{"2":{"14":2}}],["querywrapper",{"2":{"14":6,"16":3,"21":1,"22":1}}],["query",{"2":{"11":1,"14":1}}],["和",{"2":{"22":1,"44":1}}],["和传统的",{"2":{"16":1}}],["借助其他框架或收费",{"2":{"22":1}}],["字典管理",{"2":{"103":1}}],["字典信息",{"2":{"81":1}}],["字典",{"2":{"46":1}}],["字典回写",{"2":{"22":1}}],["字段",{"2":{"59":1,"76":1}}],["字段解释",{"0":{"59":1}}],["字段模块",{"2":{"40":1}}],["字段加密",{"2":{"22":1}}],["字段权限",{"2":{"22":1}}],["字段的",{"2":{"22":1}}],["字段全匹配",{"2":{"14":1}}],["收费",{"2":{"22":4}}],["✔️",{"2":{"22":4}}],["审计",{"2":{"22":1}}],["乐观锁",{"2":{"22":1}}],["乐观锁更新",{"2":{"21":1}}],["未知",{"2":{"22":1}}],["传输",{"2":{"22":1}}],["无论是注解在方法还是类上",{"2":{"81":1}}],["无需更改原有代码详情",{"2":{"114":1}}],["无需授权的",{"2":{"105":1}}],["无需安装",{"2":{"68":1}}],["无需手动配置",{"2":{"45":1}}],["无需手动通过",{"2":{"42":1}}],["无需额外安装软件",{"2":{"8":1}}],["无法做到全部支持",{"2":{"23":1}}],["无其他第三方依赖",{"2":{"22":1}}],["配置完数据库直接启动",{"2":{"110":1}}],["配置系统菜单",{"2":{"103":1}}],["配置文件",{"0":{"82":1}}],["配置文件位于src",{"2":{"68":1}}],["配置数据库",{"0":{"68":1}}],["配置插件信息",{"2":{"58":1}}],["配置点3",{"2":{"30":1}}],["配置点2",{"2":{"30":1}}],["配置点1",{"2":{"30":1}}],["配置示例",{"0":{"30":1}}],["配置淘宝镜像",{"2":{"28":1}}],["配置",{"0":{"54":1,"73":1},"2":{"22":1,"27":1}}],["复合主键",{"2":{"22":1}}],["生成",{"2":{"38":1}}],["生成前端代码",{"2":{"38":1}}],["生成后端代码",{"2":{"38":1}}],["生成策略",{"2":{"22":1}}],["生成的路由前缀为",{"2":{"18":1}}],["❌",{"2":{"22":30}}],["✅国际化",{"2":{"46":1}}],["✅",{"2":{"22":51}}],["功能",{"2":{"110":1}}],["功能几乎跟nodejs",{"2":{"104":1}}],["功能或特点",{"2":{"22":1}}],["功能对比",{"0":{"22":1}}],["拦截器",{"2":{"21":1}}],["没有可初始化的插件",{"2":{"69":1}}],["没有任何的",{"2":{"21":1}}],["没有任何",{"2":{"21":1}}],["没有设置astype",{"2":{"14":1}}],["高棉语",{"2":{"46":1}}],["高性能",{"2":{"21":1}}],["高效的缓存解决方案",{"2":{"8":1}}],["逻辑删除",{"2":{"21":1,"22":1}}],["多个租户共享同一套应用程序代码和基础设施",{"2":{"88":1}}],["多语言是需要前后端共同支持的",{"2":{"45":1}}],["多语言的支持已经成为了一个必备的功能",{"2":{"44":1}}],["多租户的数据隔离有许多种方案",{"2":{"90":1}}],["多租户",{"0":{"87":1},"2":{"22":1,"87":1}}],["多数据源是否支持",{"2":{"22":2}}],["多数据源支持",{"2":{"22":1}}],["多种",{"2":{"22":1}}],["多张表",{"2":{"22":1}}],["多主键",{"2":{"21":1}}],["多表查询",{"2":{"21":1,"22":3}}],["稳定性越差",{"2":{"21":1}}],["依赖越多",{"2":{"21":1}}],["把控性和稳定性",{"2":{"21":1}}],["再无任何第三方依赖",{"2":{"21":1}}],["除了",{"2":{"21":1,"22":1,"23":1}}],["更新",{"0":{"113":1},"1":{"114":1,"115":1,"116":1,"117":1,"118":1}}],["更灵活",{"2":{"21":1}}],["更轻量",{"2":{"21":1,"22":2}}],["更加强大的",{"2":{"21":1}}],["更加简洁",{"2":{"12":1}}],["详细用法请查看",{"2":{"21":1}}],["集成了比",{"2":{"21":1}}],["根据",{"2":{"24":1}}],["根据一定规则生成",{"2":{"20":1}}],["根据列表查询单个信息",{"2":{"13":1}}],["自动编码功能",{"2":{"117":1}}],["自动编码",{"2":{"114":1}}],["自动生成前端页面",{"2":{"38":1}}],["自动映射成数据库的表结构",{"2":{"24":1}}],["自动建表",{"0":{"24":1}}],["自带的注解",{"2":{"20":1}}],["自定义路由注解",{"0":{"19":1}}],["自定义类型默认为",{"2":{"14":1}}],["自定义场景主要使用在关联表查询插件",{"2":{"14":1}}],["自定义查询模式",{"2":{"14":1}}],["自定义的查询方式",{"2":{"14":1}}],["包或其内部的类和资源",{"2":{"63":1}}],["包或类",{"2":{"63":1}}],["包具有以下几个显著的优势",{"2":{"63":1}}],["包的位置和版本",{"2":{"63":1}}],["包括本地文件系统",{"2":{"63":1}}],["包括一些核心的组件工具",{"2":{"40":1}}],["包时会想该插件注入",{"2":{"53":1}}],["包下创建",{"2":{"40":1}}],["包下加一级",{"2":{"18":1}}],["包",{"2":{"18":1,"40":1,"63":3}}],["在线",{"2":{"103":1}}],["在线演示",{"2":{"7":1}}],["在修改数据之前或之后做一些处理",{"2":{"85":1}}],["在配置文件中加需要忽略的路径",{"2":{"82":1}}],["在项目编译的时候会自动生成这些文件",{"2":{"110":1}}],["在项目根目录下",{"2":{"70":1}}],["在项目启动的时候会去加载该文件",{"2":{"47":1}}],["在后台插件管理页面",{"2":{"62":1}}],["在后台插件管理里可以动态修改",{"2":{"58":1}}],["在执行打包的过程",{"2":{"60":1}}],["在我们脚手架上你可以发现",{"2":{"60":1}}],["在开发过程中如果需要引入第三方类库",{"2":{"60":1}}],["在开发环境下重启",{"2":{"46":1}}],["在提供的插件脚手架中已经应用了常用的依赖如",{"2":{"60":1}}],["在插件导入时才能被识别到",{"2":{"60":1}}],["在打包的时候选择要打包的插件",{"2":{"57":1}}],["在加载",{"2":{"53":1}}],["在controller接口上加上",{"2":{"49":1}}],["在某个版本需要新增数据的话",{"2":{"47":1}}],["在官网下载并安装国际化多语言插件",{"2":{"46":1}}],["在新增功能模块时",{"2":{"40":1}}],["在",{"2":{"21":1,"40":2,"42":1,"47":1,"61":1,"63":1}}],["在任何一个系统中",{"2":{"21":1}}],["在历史版本中需在",{"2":{"18":1}}],["27",{"0":{"118":1}}],["2b8",{"2":{"68":1}}],["26",{"2":{"60":3}}],["2025",{"0":{"114":1}}],["2024",{"0":{"115":1,"116":1,"117":1,"118":1},"2":{"18":1,"53":8,"69":4}}],["20",{"2":{"94":1}}],["200",{"2":{"30":1}}],["2",{"0":{"28":1,"33":1,"53":1,"57":1,"68":1,"93":1,"116":1},"2":{"46":1,"60":5,"63":2,"74":1}}],["256x256",{"2":{"59":1}}],["25",{"0":{"115":1},"2":{"18":1}}],["31908",{"2":{"69":4}}],["383+08",{"2":{"69":1}}],["382+08",{"2":{"69":1}}],["38",{"2":{"69":4}}],["3306",{"2":{"68":1}}],["32",{"2":{"60":1}}],["32615",{"2":{"53":8}}],["3c64059230d0",{"2":{"60":1}}],["3600s",{"2":{"30":3}}],["3",{"0":{"29":1,"34":1,"54":1,"58":1,"69":1,"115":1},"2":{"18":1,"46":1,"60":1,"63":1,"65":2,"69":1,"74":1,"99":1,"100":1}}],["3000s",{"2":{"30":2}}],["302",{"2":{"30":1}}],["301",{"2":{"30":1}}],["304",{"2":{"30":1}}],["30",{"2":{"11":1}}],["该功能主要完成系统用户配置",{"2":{"103":1}}],["该接口需要登录鉴权",{"2":{"49":1}}],["该接口解析的前缀则是",{"2":{"18":1}}],["该文件是前端自动扫描后端接口生成的",{"2":{"33":1}}],["该类继承了",{"2":{"20":1}}],["该父类已经实现了以下六个基础方法",{"2":{"12":1}}],["同时如果个别接口需要忽略记录请求日志",{"2":{"71":1}}],["同级",{"2":{"70":1}}],["同级下有个",{"2":{"18":1}}],["同样也可以对",{"2":{"16":1}}],["转成小写替换掉",{"2":{"18":1}}],["与前端紧密结合",{"2":{"95":1}}],["与其它实现方案不同的是",{"2":{"45":1}}],["与",{"2":{"18":1,"72":1}}],["ximu",{"2":{"114":1}}],["x26",{"2":{"68":2}}],["xml",{"2":{"40":1,"60":2,"61":2}}],["x",{"2":{"30":7,"53":1,"100":1,"118":1}}],["xcloud",{"2":{"23":1}}],["xugu",{"2":{"23":1}}],["xxxxx",{"2":{"54":2}}],["xxx",{"2":{"18":3,"53":2,"58":2}}],["x3c",{"2":{"13":1,"14":4,"15":1,"16":5,"20":1,"42":2,"53":1,"60":81,"61":4,"74":13,"86":1,"94":1}}],["模块化",{"2":{"63":1}}],["模块包",{"2":{"40":1}}],["模块名和",{"2":{"18":1}}],["模块名",{"2":{"18":2}}],["模块目录",{"2":{"18":1}}],["│─",{"2":{"57":1}}],["│",{"2":{"18":17,"40":36,"57":12}}],["原理参考美团点评分布式id",{"2":{"94":1}}],["原理",{"0":{"17":1,"74":1},"1":{"18":1,"19":1,"20":1}}],["原生",{"2":{"9":1}}],["接口的请求入参日志",{"2":{"103":1}}],["接口",{"2":{"18":1,"33":1}}],["接口路由规则",{"0":{"18":1}}],["接口到前端页面的一键生成",{"2":{"7":1,"37":1}}],["接下来我们看看实现的原理",{"2":{"16":1}}],["对系统中经常使用的一些较为固定的数据进行维护",{"2":{"103":1}}],["对系统动态配置常用参数",{"2":{"103":1}}],["对于需要租户隔离的表",{"2":{"93":1}}],["对数据进行隔离",{"2":{"90":1}}],["对应实体",{"2":{"85":2}}],["对应插件内的方法",{"2":{"53":1}}],["对应请求参数中的",{"2":{"14":1}}],["对应请求参数中同名参数",{"2":{"14":1}}],["对",{"2":{"22":1}}],["对比一下是简化了不少",{"2":{"16":1}}],["进行重写",{"2":{"16":1}}],["中获得",{"2":{"76":1}}],["中实现动态加载",{"2":{"63":1}}],["中的",{"2":{"61":1}}],["中排除掉不打入jar",{"2":{"60":2}}],["中重写方法",{"2":{"16":1}}],["中加非存储数据库的字段",{"2":{"14":1}}],["r1",{"2":{"114":1}}],["rawpassword",{"2":{"74":4}}],["rich",{"2":{"47":1}}],["ru",{"2":{"46":1}}],["runtimeexception",{"2":{"60":1}}],["run",{"2":{"34":2,"47":1,"70":1}}],["roleids",{"2":{"74":3,"76":1}}],["ro",{"2":{"46":1}}],["root",{"2":{"29":1,"30":1,"68":1}}],["row",{"2":{"22":1}}],["rpc",{"2":{"22":1}}],["r",{"2":{"15":2,"16":1,"42":17,"49":2,"76":1,"80":2,"96":4}}],["refreshtoken可以当token使用问题",{"2":{"116":1}}],["refreshexpire",{"2":{"73":1}}],["replace",{"2":{"74":1}}],["replaceall",{"2":{"74":1}}],["record",{"2":{"71":1}}],["receive",{"2":{"49":3}}],["recycle",{"2":{"40":1}}],["reentrantlock",{"2":{"48":1}}],["required",{"2":{"96":1}}],["requiredargsconstructor",{"2":{"47":1,"49":1,"53":2,"96":1}}],["requirenonnull",{"2":{"49":1}}],["requestpart",{"2":{"96":1}}],["requestparam",{"2":{"53":3}}],["requestparams",{"2":{"13":1,"14":2,"15":4,"16":5,"42":4,"49":2,"71":1,"76":2,"85":4,"86":1}}],["requestmatchers",{"2":{"74":1}}],["requestmappinginfo",{"2":{"20":2}}],["requestmappinghandlermapping",{"2":{"20":2}}],["requestmapping",{"2":{"19":2,"53":1}}],["requestcontextholder",{"2":{"49":1}}],["requestattribute",{"2":{"15":1,"49":1,"76":1}}],["request",{"2":{"13":1,"14":2,"15":1,"16":1,"49":2,"71":3,"74":2,"86":1,"96":2}}],["requests",{"2":{"0":1}}],["remark",{"2":{"47":2}}],["remote",{"2":{"30":2}}],["rewrite",{"2":{"30":1}}],["readme",{"2":{"58":2,"59":1}}],["readbytes",{"2":{"53":1}}],["read",{"2":{"30":2}}],["real",{"2":{"30":2}}],["registry",{"2":{"28":2}}],["redirect",{"2":{"30":1}}],["redis",{"2":{"8":6,"35":1}}],["redshift",{"2":{"23":2}}],["relationonetomany",{"2":{"14":2}}],["relations",{"2":{"14":2}}],["response",{"2":{"74":2}}],["responsebody",{"2":{"53":2}}],["restaccessdeniedhandler",{"2":{"74":3}}],["restart",{"2":{"29":2}}],["restcontrolleradvice",{"2":{"42":1}}],["result",{"2":{"11":3,"53":8}}],["resources",{"2":{"40":1,"47":1,"54":2,"57":1,"68":1,"96":1}}],["resource",{"2":{"10":1,"71":1,"74":10}}],["return",{"2":{"9":1,"10":1,"11":3,"15":1,"16":2,"20":1,"42":8,"49":2,"53":2,"60":1,"74":13,"80":1,"96":2}}],["将由以下这个类实现自动配置模块路由",{"2":{"20":1}}],["将",{"2":{"15":1}}],["gt",{"2":{"65":3,"68":1,"93":1,"99":3,"110":3,"114":1}}],["grantedauthority>",{"2":{"74":1}}],["graalvm",{"2":{"65":1,"99":1}}],["groupid>org",{"2":{"60":1}}],["groupid>com",{"2":{"60":1}}],["groupid>cn",{"2":{"60":1}}],["groupid>",{"2":{"60":3}}],["greenplum",{"2":{"23":2}}],["gitcode",{"2":{"106":1,"107":1}}],["gitee",{"2":{"56":1,"106":1,"107":1,"108":1}}],["github",{"2":{"56":1,"106":1,"107":1,"108":1}}],["g",{"2":{"28":1,"29":1}}],["goal>",{"2":{"60":1}}],["goal>shade",{"2":{"60":1}}],["goals>",{"2":{"60":2}}],["goldilocks",{"2":{"23":2}}],["goodslist",{"2":{"14":1}}],["gbase",{"2":{"23":3}}],["gauss",{"2":{"23":2}}],["getbytes",{"2":{"74":2}}],["geturls",{"2":{"74":1}}],["getusername",{"2":{"42":4,"74":3}}],["getsecureobjectclass",{"2":{"74":1}}],["getstatus",{"2":{"74":2}}],["getstr",{"2":{"15":1}}],["getroles",{"2":{"74":1}}],["getresponse",{"2":{"74":1}}],["getresourceasstream",{"2":{"53":1}}],["getrequesturl",{"2":{"74":1}}],["getrequesturi",{"2":{"49":1}}],["getrequest",{"2":{"49":1,"74":1}}],["getrequestattributes",{"2":{"49":1}}],["getdepartmentidsbyroleids",{"2":{"74":1}}],["getperms",{"2":{"74":1}}],["getparent",{"2":{"53":1}}],["getparentresource",{"2":{"53":2}}],["getpasswordv",{"2":{"74":1}}],["getpassword",{"2":{"42":2,"74":1}}],["getapp",{"2":{"80":1}}],["getadminuserinfo",{"2":{"76":1}}],["getadminusername",{"2":{"76":1}}],["getauthenticationmanager",{"2":{"74":1}}],["getallconfigattributes",{"2":{"74":1}}],["getallperms",{"2":{"74":1}}],["getattributes",{"2":{"74":1}}],["getattribute",{"2":{"71":1}}],["getabsolutepath",{"2":{"63":1}}],["getannotationsbytype",{"2":{"20":1}}],["getinstance",{"2":{"53":1}}],["getid",{"2":{"42":2,"74":6}}],["getone",{"2":{"42":2,"74":1}}],["get等请求方式是否正确",{"2":{"42":1}}],["getmode",{"2":{"96":1}}],["getmapping",{"2":{"76":1,"80":1,"96":1}}],["getmappingformethod",{"0":{"20":1},"2":{"20":3}}],["getmessage",{"2":{"42":7}}],["getchain",{"2":{"74":1}}],["getcontextclassloader",{"2":{"63":1}}],["getcode",{"2":{"42":1}}],["getclassloader",{"2":{"53":1}}],["getclass",{"2":{"53":1}}],["getcurrentuserid",{"2":{"14":1,"49":2,"76":1,"77":1}}],["getter",{"2":{"14":1}}],["getnum",{"2":{"11":1}}],["getlogistics",{"2":{"11":1}}],["get",{"2":{"10":1,"11":2,"13":1,"14":2,"49":1,"53":2,"60":1,"74":1}}],["订单id",{"2":{"94":1}}],["订单商品列表",{"2":{"14":1}}],["订单信息",{"2":{"14":1}}],["订单产品列表也一并查出",{"2":{"14":1}}],["如文件上传",{"2":{"117":1}}],["如支付",{"2":{"102":1}}],["如不占用主服务器带宽",{"2":{"96":1}}],["如阿里云",{"2":{"95":1}}],["如需启用调整为",{"2":{"94":2}}],["如我们这边示例使用到了中文转拼音",{"2":{"60":1}}],["如",{"2":{"35":1,"95":1,"96":1}}],["如下表格所示",{"2":{"23":1}}],["如下面这个订单查询",{"2":{"14":1}}],["如果方便请点下",{"2":{"113":1}}],["如果你有更好的建议",{"2":{"111":1}}],["如果你是自动化部署",{"2":{"33":1}}],["如果文档有缺失",{"2":{"108":1}}],["如果登录的用户token信息有携带tenantid",{"2":{"90":1}}],["如果不在权限表中则放行",{"2":{"74":1}}],["如果不满足需求",{"2":{"16":1}}],["如果项目中启用了redis",{"2":{"48":1}}],["如果同一张表历史已经有初始化过数据",{"2":{"47":1}}],["如果这个文件存在",{"2":{"46":1}}],["如果没效",{"2":{"30":1}}],["如果一切正常",{"2":{"27":1}}],["如果在权限表中",{"2":{"74":1}}],["如果在原文件直接修改将不生效",{"2":{"47":1}}],["如果在",{"2":{"18":1}}],["如果我们有需要连表查询",{"2":{"14":1}}],["如果我们的项目对你有用",{"2":{"2":1}}],["web设置配合使用",{"2":{"96":1}}],["web设置",{"2":{"96":1}}],["web",{"2":{"53":4,"96":1}}],["wrappers",{"2":{"42":2,"74":1}}],["without",{"2":{"60":1}}],["with",{"2":{"14":1}}],["wuliu",{"2":{"11":1}}],["还可以对图片进行各种如压缩",{"2":{"96":1}}],["还可以了解到一些前沿的技术",{"2":{"4":1}}],["还有",{"2":{"14":1}}],["也支持绝对路径",{"2":{"96":1}}],["也可以注解在类上",{"2":{"81":1}}],["也可以使用别人开发的插件",{"2":{"50":1}}],["也可以自己定义vo",{"2":{"14":1}}],["也就是后续你有新增相关的内容",{"2":{"46":1}}],["也对此做了支持",{"2":{"44":1}}],["也希望广大开发者粉丝帮助完善文档",{"2":{"0":1}}],["实际开发中可以根据自己的需求来配置",{"2":{"58":1}}],["实现功能可插拔",{"2":{"103":1}}],["实现应用程序的快速扩展和升级",{"2":{"63":1}}],["实现方法",{"2":{"63":1}}],["实现动态加载的技术方案",{"2":{"63":1}}],["实现原理",{"0":{"63":1},"2":{"46":1}}],["实现",{"0":{"45":1,"89":1},"1":{"90":1},"2":{"48":1}}],["实现简单功能从",{"2":{"7":1,"37":1}}],["实例数量",{"2":{"29":1}}],["实体需以",{"2":{"47":1}}],["实体中",{"2":{"14":1}}],["实体",{"2":{"14":1,"24":1}}],["默认是相对路径",{"2":{"96":1}}],["默认禁用",{"2":{"94":2}}],["默认关闭",{"2":{"92":1}}],["默认集成springdoc",{"2":{"86":1}}],["默认忽略app端接口",{"2":{"71":1}}],["默认账户密码",{"2":{"70":1}}],["默认的日志位置",{"2":{"29":1}}],["默认实现了通用的六个接口方法",{"2":{"16":1}}],["默认实现了两种缓存",{"2":{"8":1}}],["默认为map",{"2":{"14":1}}],["默认为entity",{"2":{"14":1}}],["默认转成map",{"2":{"14":1}}],["连表查询",{"2":{"14":1}}],["utf",{"2":{"53":1}}],["util",{"2":{"53":4}}],["uniindex",{"2":{"94":1}}],["union",{"2":{"22":2}}],["unlock",{"2":{"48":1,"49":1}}],["ug",{"2":{"46":1}}],["uk",{"2":{"46":1}}],["ui",{"2":{"38":1,"82":1,"86":1,"101":1}}],["uploadmode",{"2":{"96":2}}],["uploadpath",{"2":{"96":1}}],["upload",{"2":{"59":1,"82":1,"96":5}}],["upgrade",{"2":{"30":6}}],["updates",{"2":{"53":1}}],["update",{"2":{"12":1,"13":1,"14":1,"15":1,"16":1,"81":1,"86":1}}],["uri$is",{"2":{"30":1}}],["urlclassloader",{"2":{"63":2}}],["url",{"2":{"15":1,"63":3,"68":1,"74":2,"96":1}}],["uxdb",{"2":{"23":1}}],["useunicode=true",{"2":{"68":1}}],["useplugin",{"2":{"53":2}}],["usecache",{"2":{"53":2}}],["usestatus",{"2":{"14":1}}],["users",{"2":{"96":2}}],["userinfo",{"2":{"74":1,"76":2}}],["userid",{"2":{"14":1,"76":2,"77":1}}],["userdetails",{"2":{"74":2}}],["userdetailsservice",{"2":{"74":4}}],["usernamepasswordauthenticationfilter",{"2":{"74":1}}],["usernamenotfoundexception",{"2":{"74":2}}],["username",{"2":{"68":1,"74":2,"76":2}}],["user",{"2":{"14":5,"15":2,"18":2,"40":1}}],["epsevent",{"2":{"69":1}}],["eps",{"2":{"69":2,"80":2}}],["eps识别不了",{"2":{"18":1}}],["eo",{"2":{"46":1}}],["eu",{"2":{"46":1}}],["et",{"2":{"46":1}}],["element",{"2":{"101":1}}],["else",{"2":{"53":1}}],["el",{"2":{"46":1}}],["es",{"2":{"46":1}}],["enable",{"2":{"92":1,"94":1}}],["enable修改为",{"2":{"92":1}}],["enablewebsecurity",{"2":{"74":1}}],["encodedpassword",{"2":{"74":2}}],["encode",{"2":{"74":1}}],["entrypointunauthorizedhandler",{"2":{"74":3}}],["entity",{"2":{"14":8,"22":2,"40":2,"42":12,"47":1}}],["en",{"2":{"46":1}}],["error",{"2":{"42":10}}],["e",{"2":{"42":19,"60":2}}],["expression",{"2":{"60":2}}],["expire",{"2":{"73":1}}],["expiretime",{"2":{"48":1,"49":1}}],["expires",{"2":{"30":1}}],["excluding",{"2":{"60":14}}],["exclude>cn",{"2":{"60":2}}],["exclude>jakarta",{"2":{"60":1}}],["exclude>io",{"2":{"60":4}}],["exclude>",{"2":{"60":16}}],["exclude>org",{"2":{"60":9}}],["excludes>",{"2":{"60":2}}],["exceptionhandling",{"2":{"74":1}}],["exceptionhandler",{"2":{"42":6}}],["exception",{"2":{"42":2,"60":1,"74":2}}],["execution",{"2":{"110":1}}],["execution>",{"2":{"60":2}}],["executions>",{"2":{"60":2}}],["exec",{"2":{"53":5}}],["extern",{"2":{"53":1}}],["extends",{"2":{"13":1,"14":3,"15":1,"16":2,"20":1,"53":1,"60":1,"74":1,"86":1,"94":1}}],["extractedmenu",{"2":{"47":1}}],["extracteddb",{"2":{"47":1}}],["equals",{"2":{"74":1}}],["eq",{"2":{"14":2,"42":2,"74":2}}],["针对这种场景",{"2":{"14":1}}],["zh",{"2":{"14":3,"46":2}}],["false",{"2":{"92":1,"94":1,"96":1}}],["favicon",{"2":{"71":1,"82":1}}],["fa",{"2":{"46":1}}],["frameoptionsconfig",{"2":{"74":1}}],["frameoptions",{"2":{"74":1}}],["fr",{"2":{"46":1}}],["front",{"2":{"30":1}}],["from",{"2":{"14":1,"22":1,"60":13}}],["form",{"2":{"96":1}}],["format",{"2":{"60":7}}],["for",{"2":{"30":4,"69":1,"74":2}}],["forwarded",{"2":{"30":4}}],["fluent",{"2":{"22":1}}],["flex版本",{"2":{"114":1}}],["flex",{"2":{"14":3,"21":2,"22":1,"23":2,"92":1,"100":1,"110":1}}],["filterconfig",{"2":{"74":2}}],["filterchain",{"2":{"71":3,"74":1}}],["filterinvocation",{"2":{"74":5}}],["filterinvocationsecuritymetadatasource",{"2":{"74":2}}],["filter",{"2":{"71":1,"74":1}}],["fileuploadstrategyfactory",{"2":{"96":4}}],["filepath",{"2":{"54":1}}],["files",{"2":{"30":1,"96":2}}],["file",{"2":{"8":1,"63":2,"96":4}}],["finally",{"2":{"49":1,"74":1}}],["final",{"2":{"48":1,"49":1,"94":1,"96":1}}],["fi",{"2":{"46":1,"74":7}}],["firebird",{"2":{"23":2}}],["fieldeq",{"2":{"14":1}}],["具体看",{"2":{"14":2}}],["返回给",{"2":{"20":1}}],["返回字段",{"2":{"14":1}}],["返回哪些字段等",{"2":{"13":1,"15":1,"16":1,"86":1}}],["需和上面的",{"2":{"96":1}}],["需要提取初始化到上面那个",{"2":{"94":1}}],["需要对应的表实体继承对象进行调整",{"2":{"93":1}}],["需要手动开启",{"2":{"92":1}}],["需要分别拉取前后端代码到本地",{"2":{"67":1}}],["需要初始化一些数据",{"2":{"47":1}}],["需要确保前端和后端在本地运行过一次",{"2":{"33":1}}],["需要通过下面的",{"2":{"14":1}}],["需要组装数据",{"2":{"14":1}}],["需要返回的字段分布在各个表里",{"2":{"14":1}}],["需要模糊查询的字段",{"2":{"14":1}}],["需安装",{"2":{"8":1}}],["604800",{"2":{"73":1}}],["6",{"2":{"13":1,"60":12,"65":1,"99":1}}],["6379",{"2":{"8":1}}],["等包",{"2":{"40":1}}],["等待数据库初始化完成",{"2":{"27":1,"32":1}}],["等等",{"2":{"22":1}}],["等参数封装在了一个",{"2":{"15":1}}],["等",{"2":{"13":1,"22":1,"27":1,"38":1,"60":2}}],["删除某个服务",{"2":{"29":1}}],["删除",{"2":{"13":1,"103":1}}],["新增后台扩展插件",{"2":{"117":1}}],["新增一个",{"2":{"40":1}}],["新增",{"2":{"13":1,"114":2,"115":4,"116":3,"117":1}}],["这将会给我们带来更多的动力",{"2":{"113":1}}],["这些方式都可以解决这个问题",{"2":{"110":1}}],["这边使用到了",{"2":{"60":1}}],["这会使得打包结果很臃肿",{"2":{"60":1}}],["这个可能会给你带来巨大的帮助",{"2":{"43":1}}],["这个解析规则在",{"2":{"18":1}}],["这让我们可以可以专注于业务逻辑和实体",{"2":{"24":1}}],["这样就需要在entity加上另一张表的的字段",{"2":{"14":1}}],["这样就默认实现了以下六个接口",{"2":{"13":1}}],["这是",{"2":{"0":1}}],["v3",{"2":{"82":1}}],["vi",{"2":{"46":1}}],["v8",{"0":{"44":1,"87":1,"114":1}}],["vue3",{"2":{"101":1}}],["vue",{"2":{"33":1,"34":2,"107":3}}],["verify",{"2":{"60":1}}],["version>3",{"2":{"60":1}}],["version>2",{"2":{"60":1}}],["version>",{"2":{"60":3}}],["version>5",{"2":{"60":1}}],["version",{"2":{"30":2,"58":1,"59":1}}],["vertica",{"2":{"23":2}}],["valid",{"2":{"30":1}}],["values",{"2":{"53":1}}],["value",{"2":{"13":1,"14":2,"15":1,"16":1,"19":1,"47":1,"81":1,"86":1,"94":1,"96":4}}],["v7",{"0":{"115":1,"116":1,"117":1,"118":1},"2":{"18":1,"53":1}}],["void",{"2":{"13":1,"14":2,"15":1,"16":1,"38":1,"47":1,"53":3,"71":1,"74":6,"85":2,"86":1}}],["nio",{"2":{"53":5}}],["nl",{"2":{"46":1}}],["nb",{"2":{"46":1}}],["n",{"2":{"44":1,"103":1}}],["next",{"2":{"94":1}}],["net",{"2":{"60":4}}],["network",{"2":{"32":1,"33":2,"34":2}}],["new",{"2":{"38":2,"42":2,"60":2,"63":4,"74":12}}],["npm",{"2":{"29":1,"70":2}}],["npmmirror",{"2":{"28":1}}],["nginx",{"0":{"30":1},"2":{"27":3}}],["now",{"2":{"53":2}}],["norepeatsubmitaspect",{"2":{"49":1}}],["norepeatsubmit",{"2":{"48":1,"49":6}}],["no",{"2":{"30":1,"46":1}}],["node",{"2":{"26":1}}],["nodejs",{"2":{"25":1,"27":1}}],["notnull",{"2":{"14":1,"94":3}}],["name>",{"2":{"61":1}}],["name>my",{"2":{"61":1}}],["name",{"2":{"13":1,"14":3,"15":1,"16":1,"19":1,"29":1,"34":2,"47":2,"58":1,"59":1,"68":1,"86":1,"96":1}}],["null",{"2":{"11":1,"41":1,"42":2,"47":2,"53":1,"60":1,"74":3}}],["number",{"2":{"29":1}}],["num",{"2":{"11":4}}],["示例",{"0":{"13":1}}],["使得代码更加清晰",{"2":{"63":1}}],["使得可以在插件中获取主应用中的",{"2":{"53":1}}],["使得同一个软件可以面向不同语言地区的用户",{"2":{"44":1}}],["使得",{"2":{"12":1}}],["使用cool",{"2":{"53":1}}],["使用缓存",{"2":{"53":1}}],["使用插件",{"0":{"51":1},"1":{"52":1,"53":1,"54":1}}],["使用了关联查询",{"2":{"14":1}}],["使用",{"0":{"9":1,"46":1,"91":1,"96":1},"1":{"92":1,"93":1},"2":{"49":1}}],["lt",{"2":{"46":1}}],["lv",{"2":{"46":1}}],["length",{"2":{"94":1}}],["leafallocentity>",{"2":{"94":1}}],["leafallocentity",{"2":{"94":1}}],["leaf",{"2":{"94":3}}],["lealone",{"2":{"23":2}}],["left",{"2":{"22":1}}],["leftjoin",{"2":{"14":2}}],["loaduserbyusername",{"2":{"74":1}}],["loadresourcedefine",{"2":{"74":2}}],["lombok",{"2":{"53":2,"60":2}}],["local",{"2":{"68":1,"96":2}}],["locations",{"2":{"96":1}}],["location",{"2":{"30":3}}],["lockkey",{"2":{"48":1}}],["logurls",{"2":{"71":1}}],["logo",{"2":{"58":2,"59":2}}],["log`",{"2":{"53":1}}],["log",{"2":{"42":5,"47":1}}],["logs",{"2":{"29":3}}],["logistics",{"2":{"11":2}}],["long",{"2":{"14":1,"42":2,"49":2,"74":2,"76":4,"94":2}}],["list和page支持关联查询",{"2":{"115":1}}],["list",{"2":{"12":1,"13":1,"14":2,"15":1,"16":1,"29":1,"74":1,"81":1,"86":1}}],["jwtauthenticationtokenfilter",{"2":{"74":3}}],["jwtsecurityconfig",{"2":{"74":1}}],["jwtuser",{"2":{"74":6}}],["jwtuserdetailsserviceimpl",{"2":{"74":1}}],["jwt",{"2":{"72":1,"74":1}}],["jdbc",{"2":{"68":2}}],["jdk",{"2":{"65":1,"99":1}}],["jcl",{"2":{"60":2}}],["jakarta",{"2":{"60":3}}],["jarfilepath",{"2":{"63":1}}],["jarurl",{"2":{"63":2}}],["jar",{"2":{"53":1,"60":31,"63":9}}],["ja",{"2":{"46":1}}],["javalong",{"2":{"77":1}}],["javaurl",{"2":{"63":1}}],["javapackage",{"2":{"47":1,"53":2,"60":1}}],["javapublic",{"2":{"14":1,"19":1,"20":1,"38":1,"42":2,"71":1}}],["java文件",{"2":{"18":1}}],["java",{"2":{"0":1,"1":1,"8":1,"9":1,"10":1,"11":1,"13":1,"14":2,"15":1,"16":2,"18":3,"24":1,"25":1,"38":2,"40":1,"42":1,"49":2,"53":10,"56":2,"57":2,"60":2,"61":1,"63":1,"65":1,"69":6,"74":4,"76":3,"80":1,"81":1,"85":2,"86":1,"94":1,"96":1,"99":1,"106":3,"108":2}}],["js",{"2":{"29":1,"71":1,"82":1}}],["json参数",{"2":{"47":1}}],["json",{"2":{"47":7,"54":1,"57":1,"58":2,"60":2,"70":1,"94":1}}],["json也提交到代码仓库",{"2":{"33":1}}],["json文件",{"2":{"33":1,"47":1}}],["jsonobject",{"2":{"13":1,"14":2,"15":3,"16":3,"42":2,"49":1,"71":1,"76":1,"85":2,"86":1}}],["jsonutil",{"2":{"11":1,"14":1}}],["jpa",{"2":{"24":2}}],["joinpoint",{"2":{"49":2}}],["join",{"2":{"22":2}}],[">",{"2":{"11":1,"14":1,"20":1,"60":5,"74":10}}],["物流单号",{"2":{"11":1}}],["通过在tenantentity中加入指定的列",{"2":{"90":1}}],["通过在方法上加tokenignore注解可以的接口不会进行",{"2":{"80":1}}],["通过资源共享降低运营和维护成本",{"2":{"88":1}}],["通过动态加载",{"2":{"63":2}}],["通过反射实现",{"2":{"53":1}}],["通过拖动配置",{"2":{"43":1}}],["通过",{"2":{"42":1,"63":1}}],["通过管理后台菜单管理的快速创建即可生成",{"2":{"38":1}}],["通过独特的架构",{"2":{"21":1}}],["通过这种方式",{"2":{"14":1}}],["通过coolcache缓存模板",{"0":{"11":1}}],["通过微调大模型学习框架特有写法",{"2":{"7":1,"37":1}}],["我是插件",{"2":{"60":1}}],["我们还引入了其他包",{"2":{"60":1}}],["我们还可以通过自定义方言的方式",{"2":{"23":1}}],["我们提供了插件脚手架",{"2":{"56":1}}],["我们提供了插件系统",{"2":{"50":1}}],["我们可以在运行时动态地加载外部的",{"2":{"63":1}}],["我们可以通过配置文件来实现",{"2":{"54":1}}],["我们可以使用",{"2":{"14":1}}],["我们正在适配",{"2":{"23":1}}],["我们不直接使用",{"2":{"20":1}}],["我们会尽力完善文档",{"2":{"0":1}}],["我被缓存了",{"2":{"9":1}}],["我被调用了",{"2":{"9":1}}],["ico",{"2":{"71":1,"82":1}}],["img",{"2":{"60":1}}],["import",{"2":{"53":14,"60":6}}],["impala",{"2":{"23":2}}],["implements",{"2":{"9":1,"10":1,"16":1,"47":1,"71":1,"74":3}}],["ioexception",{"2":{"71":1,"74":2}}],["ioutil",{"2":{"53":2}}],["io",{"2":{"53":2,"60":2}}],["it",{"2":{"46":1}}],["i18n下生成对应种类的语言文件",{"2":{"46":1}}],["i18n",{"2":{"44":1,"46":1}}],["illegalargumentexception",{"2":{"42":2,"74":2}}],["ip",{"2":{"30":2}}],["i",{"2":{"29":2,"44":1}}],["ignoredurlsproperties",{"2":{"74":3}}],["ignored",{"2":{"71":1,"82":1}}],["ignore",{"2":{"14":2}}],["is",{"2":{"69":1}}],["isnotempty",{"2":{"14":1}}],["isempty",{"2":{"11":1,"53":1,"74":1}}],["if",{"2":{"11":1,"14":1,"42":2,"48":1,"53":1,"74":2}}],["in",{"2":{"60":1}}],["including",{"2":{"60":2}}],["inputstream",{"2":{"53":4}}],["into",{"2":{"53":1}}],["interceptorstatustoken",{"2":{"74":1}}],["internationalization",{"2":{"44":1}}],["interface",{"2":{"19":1}}],["integer",{"2":{"10":1,"76":1,"94":1}}],["insert",{"2":{"53":4}}],["instances",{"2":{"29":1}}],["install",{"2":{"28":1,"29":1,"70":1}}],["inner",{"2":{"22":1}}],["index",{"2":{"14":1,"30":1,"86":1}}],["init",{"2":{"13":1,"14":2,"15":1,"16":1,"38":1,"69":1,"74":1,"86":1}}],["informix",{"2":{"23":2}}],["info",{"2":{"12":1,"13":1,"14":5,"15":1,"16":1,"18":3,"20":5,"47":1,"53":5,"60":15,"69":4,"81":1,"86":1}}],["invokeotherplugin",{"2":{"53":1}}],["invokemain",{"2":{"53":3,"60":1}}],["invokemethod",{"2":{"53":4}}],["invokeplugin",{"2":{"53":11,"60":2}}],["invoke",{"2":{"11":4,"74":2}}],["idea",{"2":{"110":1}}],["idgenservice",{"2":{"94":3}}],["id",{"2":{"9":1,"10":1,"14":4,"22":1,"46":1,"76":1,"94":1}}],["obtainsecuritymetadatasource",{"2":{"74":1}}],["observation",{"2":{"60":3}}],["objutil",{"2":{"11":1,"14":1,"53":2}}],["objectutil",{"2":{"74":1}}],["object中包含用户请求request",{"2":{"74":1}}],["objects",{"2":{"49":1}}],["object",{"2":{"9":1,"10":1,"11":2,"16":1,"49":1,"53":4,"60":2,"74":1}}],["ossaccesskeyid=ltai5t8xtpd99yzsjqcc",{"2":{"53":1}}],["oss",{"2":{"35":1,"53":3,"95":1,"96":1}}],["oscar",{"2":{"23":1}}],["ofmillis",{"2":{"48":1,"49":1}}],["ofminutes",{"2":{"11":1}}],["official",{"2":{"56":2,"106":2,"107":2,"108":2}}],["off",{"2":{"30":1}}],["open",{"2":{"82":1}}],["openapi",{"2":{"69":1}}],["opengauss",{"2":{"23":2}}],["operation",{"2":{"49":1,"96":2}}],["option",{"2":{"16":2}}],["oceanbase",{"2":{"23":2}}],["org",{"2":{"53":5,"60":8,"114":1}}],["oracle12c",{"2":{"23":2}}],["oracle11g",{"2":{"23":1}}],["oracle",{"2":{"23":1}}],["ordergoodsentity>",{"2":{"14":1}}],["order",{"2":{"14":1,"40":2}}],["orderid",{"2":{"11":1,"14":1,"94":4}}],["orderinfoentity>",{"2":{"14":1}}],["orderinfoentity",{"2":{"11":1,"14":1}}],["ok",{"2":{"15":1,"49":1,"80":1,"96":2}}],["o",{"2":{"14":2,"69":1,"74":3}}],["one",{"2":{"30":1}}],["on",{"2":{"14":1}}],["out",{"2":{"9":1,"15":1,"53":5,"60":1}}],["override",{"2":{"9":1,"10":1,"13":1,"14":1,"15":1,"16":3,"20":1,"47":1,"53":1,"60":1,"71":1,"74":11,"85":2,"86":1}}],["multipartfile",{"2":{"96":1}}],["multipart",{"2":{"96":1}}],["multi",{"2":{"87":1,"92":1}}],["mutate",{"2":{"20":1}}],["mode",{"2":{"96":1}}],["modifyafter",{"2":{"85":1}}],["modifyenum",{"2":{"85":2}}],["modifybefore",{"2":{"85":1}}],["modules",{"2":{"18":1,"40":3}}],["mvn",{"2":{"61":1}}],["micrometer",{"2":{"60":12}}],["midway",{"2":{"27":1,"33":1,"34":2}}],["md",{"2":{"58":1}}],["md5digestashex",{"2":{"74":2}}],["md5",{"2":{"42":2}}],["m",{"2":{"53":6}}],["ms",{"2":{"46":1,"69":1}}],["mn",{"2":{"46":1}}],["mediatype",{"2":{"96":2}}],["message",{"2":{"42":1}}],["method",{"2":{"20":3}}],["methodname",{"2":{"9":1,"53":3}}],["myaccessdecisionmanager",{"2":{"74":3}}],["myfiltersecurityinterceptor",{"2":{"74":1}}],["mysecuritymetadatasource",{"2":{"74":1}}],["mysql",{"2":{"23":3,"27":1,"65":1,"68":5,"99":1}}],["my",{"2":{"61":1}}],["mycoolplugintest",{"2":{"57":1}}],["mycoolplugin",{"2":{"53":1,"57":1}}],["mybatis",{"2":{"14":3,"21":5,"22":4,"23":2,"92":1,"100":1}}],["mac",{"2":{"96":2}}],["matches",{"2":{"74":1}}],["maven",{"2":{"60":7,"65":1,"99":1,"110":1}}],["main",{"2":{"38":1,"40":1,"57":1,"69":3}}],["maxid",{"2":{"94":1}}],["max",{"2":{"29":2,"94":1}}],["mariadb",{"2":{"23":2}}],["marketcouponinfoservice",{"2":{"49":1}}],["marketcouponuserentity>",{"2":{"14":1}}],["marketcouponuserservice",{"2":{"14":1}}],["market",{"2":{"14":7}}],["mappings",{"2":{"96":1}}],["mapper",{"2":{"38":1,"40":4}}],["map",{"2":{"14":9,"74":6}}],["manes",{"2":{"8":1}}],["+",{"2":{"9":2,"11":3,"22":1,"49":2,"53":2,"60":3,"63":2,"74":5}}],["tip",{"2":{"95":1}}],["time`",{"2":{"53":2}}],["timeout",{"2":{"30":6}}],["tenantentity",{"2":{"93":1}}],["tenant",{"2":{"92":1}}],["tenantid",{"2":{"90":1}}],["tenancy",{"2":{"87":1}}],["team",{"2":{"56":2,"106":3,"107":3,"108":2}}],["testplugin",{"2":{"53":2}}],["test",{"2":{"9":1,"10":1,"15":2,"30":1,"38":1,"53":2,"57":1}}],["txt",{"2":{"53":2,"54":2}}],["tk",{"2":{"46":1}}],["this",{"2":{"74":1}}],["thread",{"2":{"63":1,"69":1}}],["throwable",{"2":{"49":1}}],["throws",{"2":{"49":1,"71":1,"74":8}}],["throw",{"2":{"42":1,"60":1,"74":1}}],["the",{"2":{"60":14}}],["th",{"2":{"46":1}}],["tw",{"2":{"46":1}}],["t",{"2":{"33":2,"85":6}}],["tsupstream",{"2":{"30":1}}],["ts",{"2":{"27":1}}],["tdengine",{"2":{"23":2}}],["tr",{"2":{"46":1}}],["trylock",{"2":{"48":1,"49":1}}],["try",{"2":{"30":1,"49":1,"60":1,"74":1}}],["translate",{"2":{"46":1}}],["transparent",{"2":{"30":1}}],["transactiontemplate",{"2":{"22":1}}],["transactional",{"2":{"22":1}}],["transform",{"2":{"14":2}}],["true",{"2":{"14":2,"42":1,"74":1,"92":1,"94":5,"96":1}}],["toarray",{"2":{"74":1}}],["tokenignore",{"2":{"80":1,"81":1}}],["token",{"0":{"78":1},"1":{"79":1,"80":1,"81":1,"82":1},"2":{"73":2,"74":2,"76":1,"78":1,"80":1}}],["tohanyupinyinstring",{"2":{"60":1}}],["tone",{"2":{"60":1}}],["todo",{"2":{"48":1}}],["tostring",{"2":{"14":1}}],["tobean",{"2":{"14":1}}],["tangzc",{"2":{"114":1}}],["tao",{"2":{"114":1}}],["ta",{"2":{"46":1}}],["task",{"2":{"40":1,"53":3,"69":1}}],["target",{"2":{"61":2}}],["targetfield",{"2":{"14":1}}],["targetclass",{"2":{"9":1}}],["table",{"2":{"14":1,"24":1,"94":1,"100":1}}],["tag",{"2":{"13":1,"14":1,"15":1,"16":1,"86":1,"96":1}}],["typescript",{"2":{"101":1}}],["typehandler",{"2":{"22":1}}],["type",{"2":{"8":2,"85":4}}],["dromara",{"2":{"114":1}}],["druid",{"2":{"82":1}}],["driver",{"2":{"68":2}}],["dynamicjarclassloader",{"2":{"63":3}}],["daoauthenticationprovider",{"2":{"74":2}}],["da",{"2":{"46":1}}],["datasource",{"2":{"68":1}}],["database",{"2":{"8":1}}],["data",{"2":{"8":1,"40":1,"47":2,"96":1}}],["digestutils",{"2":{"74":2}}],["digesthex",{"2":{"42":2}}],["disable",{"2":{"74":2}}],["dict",{"2":{"40":1}}],["duplicatekeyexception",{"2":{"42":2}}],["duration",{"2":{"11":1,"48":1,"49":1,"69":1}}],["docs",{"2":{"82":1,"108":2}}],["docker",{"0":{"31":1},"1":{"32":1,"33":1,"34":1,"35":1},"2":{"31":3,"32":2,"33":3,"34":2,"35":1}}],["download",{"2":{"82":1}}],["dofilter",{"2":{"71":2,"74":2}}],["doris",{"2":{"23":2}}],["dm",{"2":{"23":1}}],["dbfromjsoninit",{"2":{"47":1}}],["db2",{"2":{"23":2}}],["db",{"2":{"22":1,"40":1,"47":2}}],["desktop",{"2":{"96":2}}],["destroy",{"2":{"74":1}}],["description",{"2":{"13":1,"14":1,"15":1,"16":1,"58":1,"59":1,"86":1,"94":2,"96":2}}],["deployment",{"2":{"110":1}}],["department",{"2":{"74":1}}],["departmentids",{"2":{"74":2}}],["dependency>",{"2":{"60":4}}],["dev",{"2":{"70":1}}],["debug",{"2":{"53":3}}],["de",{"2":{"46":1}}],["derby",{"2":{"23":2}}],["defaultvalue",{"2":{"94":2}}],["default",{"2":{"19":3,"60":1}}],["democoolplugin",{"2":{"60":1}}],["democacheservice",{"2":{"9":1,"10":1}}],["democacheserviceimpl",{"2":{"9":1,"10":1}}],["demov2",{"2":{"47":1}}],["demoentity",{"2":{"38":1}}],["demoentity>",{"2":{"13":1,"14":1,"15":1,"16":5,"86":1}}],["demo",{"2":{"18":4,"38":1,"47":4,"58":1}}],["demomapper",{"2":{"16":1}}],["demoserviceimpl",{"2":{"16":1}}],["demoservice",{"2":{"13":1,"14":1,"15":1,"16":2,"86":1}}],["delete",{"2":{"12":1,"13":1,"14":1,"15":1,"16":1,"29":1,"81":1,"86":1}}],["sdk",{"2":{"112":1}}],["swagger",{"0":{"86":1},"2":{"82":2,"86":1}}],["snapshot",{"2":{"61":1}}],["show",{"2":{"104":1}}],["shaded",{"2":{"60":14}}],["shade",{"2":{"60":6}}],["shellpm2",{"2":{"29":1}}],["shell",{"2":{"29":3,"33":1,"34":1,"70":1}}],["s",{"2":{"60":1}}],["sourceforge",{"2":{"60":4}}],["socket",{"2":{"30":3}}],["socket需额外配置",{"2":{"30":1}}],["simplegrantedauthority",{"2":{"74":1}}],["signature=krlj0uv96tbliagpji",{"2":{"53":1}}],["sinodb",{"2":{"23":1}}],["supports",{"2":{"74":1}}],["super",{"2":{"16":2,"20":1,"42":2,"74":3}}],["success",{"2":{"53":1}}],["summary",{"2":{"49":1,"96":2}}],["sr",{"2":{"46":1}}],["src",{"2":{"38":1,"69":1}}],["sl",{"2":{"46":1}}],["slf4j",{"2":{"42":1,"47":1,"53":3,"60":4,"74":2}}],["sk",{"2":{"46":1}}],["sv",{"2":{"46":1}}],["split",{"2":{"74":1}}],["space",{"2":{"40":1}}],["springdoc",{"2":{"69":2}}],["springboot3",{"2":{"118":1}}],["springboot",{"2":{"63":1}}],["springframework",{"2":{"53":5,"60":14}}],["spring",{"2":{"20":3,"22":2,"60":13,"68":1,"72":1,"96":1,"100":1}}],["spring方式",{"2":{"9":1}}],["springcache",{"2":{"8":1}}],["sap",{"2":{"23":1}}],["sysuserentity",{"2":{"74":14}}],["sys",{"2":{"53":4}}],["system",{"2":{"9":1,"15":1,"53":5,"60":1}}],["sybase",{"2":{"23":2}}],["schema",{"2":{"22":1}}],["sqlserver",{"2":{"23":2}}],["sqlserver2005",{"2":{"23":2}}],["sqlite",{"2":{"23":3}}],["sql",{"2":{"21":2,"22":2,"23":1}}],["step",{"2":{"94":2}}],["stereotype",{"2":{"53":1}}],["stream",{"2":{"74":1}}],["str",{"2":{"53":1}}],["strutil",{"2":{"53":2}}],["string",{"2":{"9":1,"10":1,"11":5,"15":1,"19":3,"38":1,"48":1,"49":1,"53":7,"60":4,"74":12,"76":2,"94":2}}],["stop",{"2":{"29":1}}],["star",{"0":{"106":1,"107":1,"108":1},"2":{"113":1}}],["start",{"2":{"29":2}}],["stateless",{"2":{"74":1}}],["static",{"2":{"38":1,"82":1,"96":2}}],["status=200",{"2":{"53":1}}],["status",{"2":{"14":2,"30":1}}],["segment",{"2":{"94":1}}],["sessioncreationpolicy",{"2":{"74":2}}],["sessionmanagement",{"2":{"74":1}}],["securityfilterchain",{"2":{"74":2}}],["securitymetadatasource",{"2":{"74":3}}],["security权限拦截器校验当前用户权限",{"2":{"74":1}}],["securityconfig",{"2":{"74":1}}],["security加载所有设置的权限",{"2":{"74":1}}],["security",{"2":{"72":1,"76":1}}],["send",{"2":{"30":2}}],["servletexception",{"2":{"71":1,"74":3}}],["servletresponse",{"2":{"71":3,"74":1}}],["servletrequest",{"2":{"71":4,"74":1}}],["servletrequestattributes",{"2":{"49":1}}],["servertimezone=gmt",{"2":{"68":1}}],["server",{"2":{"30":2,"96":1}}],["service",{"2":{"9":1,"10":1,"16":3,"33":1,"38":2,"40":2,"69":1}}],["selffield",{"2":{"14":1}}],["select",{"2":{"14":2}}],["setuserdetailsservice",{"2":{"74":1}}],["setaccessdecisionmanager",{"2":{"74":1}}],["setmyaccessdecisionmanager",{"2":{"74":1}}],["setmodule",{"2":{"38":1}}],["setpasswordencoder",{"2":{"74":1}}],["setpassword",{"2":{"42":2}}],["setpageoption",{"2":{"14":2}}],["setentity",{"2":{"38":1}}],["setname",{"2":{"38":1}}],["settings",{"2":{"110":1}}],["settonetype",{"2":{"60":1}}],["settype",{"2":{"38":1}}],["setter",{"2":{"14":1}}],["setlistoption",{"2":{"14":1}}],["set",{"2":{"10":1,"28":1,"30":12,"53":2,"74":5}}],["=5",{"2":{"68":1}}],["==",{"2":{"53":1,"74":2}}],["==>",{"2":{"53":2}}],["=",{"2":{"9":2,"11":4,"13":4,"14":12,"15":4,"16":4,"19":2,"20":3,"38":2,"41":1,"42":5,"48":1,"49":4,"53":8,"60":5,"63":2,"65":3,"71":1,"74":15,"76":3,"77":1,"81":2,"86":4,"94":13,"96":9,"99":3}}],["性能要求比较高或有分布式部署需求的建议配置成",{"2":{"8":1}}],["person",{"2":{"76":2}}],["permitall",{"2":{"74":1}}],["perm",{"2":{"74":5}}],["perms",{"2":{"74":4}}],["phase>",{"2":{"60":1}}],["phase>package",{"2":{"60":1}}],["phoenix",{"2":{"23":2}}],["phone",{"2":{"14":2}}],["pinyin",{"2":{"60":3}}],["pinyinhelper",{"2":{"60":2}}],["pinyin4j",{"2":{"60":5}}],["png",{"2":{"58":1}}],["pnpm",{"0":{"28":1},"2":{"27":1,"28":2}}],["pl",{"2":{"46":1}}],["plugins",{"2":{"60":1}}],["plugins>",{"2":{"60":2}}],["plugin>",{"2":{"60":2}}],["plugin",{"2":{"40":1,"53":6,"56":2,"57":3,"58":2,"60":8,"61":5,"69":1}}],["plus",{"2":{"21":1,"22":1}}],["pt",{"2":{"46":2}}],["p",{"2":{"34":2}}],["pm2将自动检测可用cpu的数量",{"2":{"29":1}}],["pm2",{"0":{"29":1},"2":{"29":11}}],["put",{"2":{"14":1,"42":2,"74":1}}],["public",{"2":{"9":2,"10":2,"11":1,"13":1,"14":2,"15":2,"16":3,"38":1,"42":7,"47":2,"49":3,"53":4,"60":2,"71":1,"74":22,"76":1,"80":1,"81":1,"85":2,"86":1,"94":1,"96":4}}],["pool",{"2":{"69":1}}],["pom",{"2":{"61":1}}],["policy=eyjlehb0wny0xm1qxmjowmto0oc41njvaiiwiy29uzgl0aw9ucyi6w1siy29udgvudc1szw5ndggtcmfuz2uildasnti0mjg4mdbdxx0=",{"2":{"53":1}}],["postgresql",{"2":{"23":3}}],["postmapping",{"2":{"15":1,"16":1,"49":1,"53":2,"96":1}}],["post",{"2":{"13":5}}],["port",{"2":{"8":1,"96":1}}],["preparing",{"2":{"53":1}}],["project",{"2":{"110":2}}],["projectlombok",{"2":{"60":2}}],["properties>",{"2":{"61":2}}],["properties",{"2":{"61":1}}],["proceed",{"2":{"49":1}}],["proceedingjoinpoint",{"2":{"49":1}}],["proxy",{"2":{"30":28}}],["prod",{"2":{"27":1}}],["protected",{"2":{"13":1,"14":2,"15":1,"16":2,"20":1,"86":1}}],["private",{"2":{"14":2,"48":1,"49":1,"53":3,"71":1,"74":11,"94":5,"96":1}}],["println",{"2":{"9":1,"15":1,"53":5,"60":1}}],["package",{"2":{"61":1,"70":1}}],["parentclassloader",{"2":{"53":2}}],["parameter",{"2":{"96":1}}],["parameters",{"2":{"53":1}}],["param",{"2":{"74":1,"85":6}}],["params",{"2":{"53":1,"60":2}}],["parse",{"2":{"21":1}}],["parseobj",{"2":{"11":1}}],["pa",{"2":{"46":1}}],["pass",{"2":{"30":2}}],["passwordencoder",{"2":{"74":4}}],["passwordversion",{"2":{"74":1,"76":1}}],["password",{"2":{"8":1,"68":1}}],["paths",{"2":{"20":1}}],["path",{"2":{"20":3}}],["page",{"2":{"12":1,"13":1,"14":1,"15":1,"16":9,"81":2,"86":1}}],["p0",{"2":{"9":1}}],["15",{"0":{"117":1}}],["15t14",{"2":{"69":4}}],["101+08",{"2":{"69":1}}],["17",{"2":{"65":1,"99":1}}],["13",{"0":{"114":1},"2":{"60":1}}],["13t20",{"2":{"53":8}}],["1800",{"2":{"73":1}}],["18",{"2":{"44":1,"53":8,"60":1}}],["123456",{"2":{"68":1,"70":1,"104":1}}],["12",{"2":{"60":2}}],["12h",{"2":{"30":1}}],["127",{"2":{"8":1,"30":1,"53":1,"68":1,"69":1,"70":1,"86":1,"96":1}}],["1h",{"2":{"30":1}}],["1",{"0":{"27":1,"32":1,"52":1,"56":1,"67":1,"90":1,"92":1,"110":1,"115":1,"116":1,"117":2,"118":1},"2":{"8":1,"10":1,"18":1,"30":5,"33":2,"34":2,"46":1,"53":2,"58":1,"60":11,"61":1,"63":2,"68":1,"69":3,"70":1,"74":3,"86":1,"94":2,"96":1}}],["06",{"0":{"118":1}}],["04",{"0":{"114":1,"116":1}}],["00",{"2":{"53":8,"69":4}}],["01",{"2":{"53":8}}],["07",{"0":{"117":1},"2":{"53":8,"69":4}}],["0新增",{"0":{"44":1,"87":1}}],["08",{"0":{"115":1,"116":1},"2":{"18":1}}],["0",{"0":{"114":2,"118":1},"2":{"8":3,"30":2,"33":2,"34":2,"53":2,"58":2,"60":4,"61":1,"65":1,"68":3,"69":2,"70":2,"74":1,"86":2,"96":2}}],["hashmap",{"2":{"74":1}}],["hanyupinyintonetype",{"2":{"60":2}}],["hanyupinyinoutputformat",{"2":{"60":3}}],["hangzhou",{"2":{"53":1}}],["handleexception",{"2":{"42":1}}],["handleillegalargumentexception",{"2":{"42":1}}],["handlehttprequestmethodnotsupportedexception",{"2":{"42":1}}],["handlebadcredentialsexception",{"2":{"42":1}}],["handleduplicatekeyexception",{"2":{"42":1}}],["handlerrexception",{"2":{"42":1}}],["handlertype",{"2":{"20":3}}],["hana",{"2":{"23":2}}],["hr",{"2":{"46":1}}],["hy",{"2":{"46":1}}],["hutool",{"2":{"53":3,"60":11,"100":1}}],["hu",{"2":{"46":1}}],["hello",{"2":{"53":4,"60":1}}],["he",{"2":{"46":1}}],["headersconfigurer",{"2":{"74":1}}],["headers",{"2":{"74":1}}],["header",{"2":{"30":13}}],["hook",{"2":{"58":1,"59":1}}],["home",{"2":{"30":1}}],["host=https",{"2":{"53":1}}],["host",{"2":{"8":1,"30":4}}],["hive",{"2":{"23":2}}],["highgo",{"2":{"23":1}}],["hbase",{"2":{"23":1}}],["hsql",{"2":{"23":2}}],["h2",{"2":{"23":2}}],["httprequestmethodnotsupportedexception",{"2":{"42":2}}],["http",{"2":{"30":4,"69":1,"86":1,"96":1}}],["httpsecurity",{"2":{"74":3}}],["httpservletrequest",{"2":{"13":1,"14":2,"15":1,"16":1,"49":1,"71":2,"86":1,"96":1}}],["https",{"2":{"1":2,"14":3,"28":1,"53":1,"56":2,"104":1,"106":3,"107":3,"108":2}}],["html",{"2":{"14":1,"30":1,"86":1}}],["html文档",{"2":{"14":2}}],["能够显著提升应用程序的性能和响应速度",{"2":{"8":1}}],["旨在提供高性能",{"2":{"8":1}}],["由该类统一执行初始化",{"2":{"47":1}}],["由",{"2":{"8":1}}],["cfg",{"2":{"74":3}}],["cj",{"2":{"68":1}}],["charsequence",{"2":{"74":2}}],["characterencoding=utf",{"2":{"68":1}}],["chain",{"2":{"74":2}}],["chinesechar",{"2":{"60":4}}],["check",{"2":{"41":2,"42":6,"46":1,"49":1}}],["c",{"2":{"53":6,"69":3}}],["ckb",{"2":{"46":1}}],["csrf",{"2":{"74":1}}],["css",{"2":{"71":1,"82":1}}],["cs",{"2":{"46":1}}],["csiidb",{"2":{"23":2}}],["cn",{"2":{"46":2,"53":4,"60":2}}],["c端用户",{"2":{"40":1}}],["currentthread",{"2":{"63":1}}],["cubrid",{"2":{"23":2}}],["custom",{"2":{"14":1}}],["clean",{"2":{"61":1}}],["cluster",{"2":{"29":1}}],["clickhouse",{"2":{"23":2}}],["classloader",{"2":{"53":4}}],["classpath",{"2":{"47":1,"96":1}}],["class",{"2":{"9":1,"10":2,"13":1,"14":5,"15":1,"16":2,"19":2,"20":3,"38":2,"42":7,"47":1,"49":2,"53":2,"60":1,"68":1,"71":1,"74":8,"81":1,"86":1,"94":1,"96":1}}],["crud",{"0":{"84":1},"2":{"84":1}}],["crudoption",{"2":{"16":1}}],["create",{"2":{"14":2,"33":1,"42":2}}],["createop",{"2":{"14":3}}],["catch",{"2":{"60":1}}],["ca",{"2":{"46":1}}],["cachekey",{"2":{"11":2}}],["cacheable",{"2":{"9":1}}],["cachenames",{"2":{"9":1}}],["cacheconfig",{"2":{"9":1}}],["cache",{"2":{"8":3,"30":8,"53":2,"60":1}}],["caffeine",{"2":{"8":3}}],["collection",{"2":{"74":4}}],["column",{"2":{"14":1}}],["columndefine",{"2":{"14":1,"94":4}}],["columns",{"2":{"14":1}}],["core",{"2":{"40":2,"47":1,"53":12,"60":6,"69":2}}],["code",{"2":{"42":1}}],["codetypeenum",{"2":{"38":1}}],["codemodel",{"2":{"38":10}}],["codegenerator",{"2":{"38":7}}],["consumes",{"2":{"96":1}}],["console",{"2":{"46":1}}],["conf",{"2":{"74":4}}],["configuration",{"2":{"74":1}}],["configuration>",{"2":{"60":2}}],["configattribute",{"2":{"74":1}}],["configattributes",{"2":{"74":4}}],["configattribute>",{"2":{"74":3}}],["configattribute>>",{"2":{"74":1}}],["config",{"2":{"27":1,"28":1,"58":2,"59":1,"74":7}}],["context",{"2":{"60":2}}],["controller",{"2":{"12":2,"16":1,"18":2,"20":1,"38":2,"40":2,"53":3,"76":1}}],["connection",{"2":{"30":2}}],["connect",{"2":{"30":2}}],["condition",{"2":{"14":3}}],["couponid",{"2":{"49":3}}],["coupon",{"2":{"14":8}}],["compiler",{"2":{"110":1}}],["compile命令",{"2":{"110":1}}],["component",{"2":{"49":1,"74":3}}],["combine",{"2":{"20":1}}],["commons",{"2":{"60":3}}],["commoncontroller",{"2":{"53":1}}],["comment",{"2":{"14":2,"94":5}}],["comm",{"2":{"9":1}}],["com",{"2":{"1":2,"14":3,"28":1,"38":1,"40":1,"47":1,"53":12,"56":2,"57":2,"60":4,"68":1,"69":3,"104":1,"106":3,"107":3,"108":2,"114":1}}],["cool相关配置",{"2":{"92":1}}],["cooleps",{"2":{"69":1,"80":1}}],["coolexception",{"2":{"42":3}}],["coolexceptionhandler",{"2":{"42":1}}],["coollock",{"2":{"48":4,"49":4}}],["coolplugin注解",{"2":{"57":1}}],["coolplugin",{"2":{"53":4,"60":6}}],["coolpluginservice",{"2":{"53":1,"69":1}}],["coolplugininvokers",{"2":{"11":1,"53":4}}],["coolpreconditions",{"2":{"41":1,"42":2,"46":1,"49":1}}],["coolapplication",{"2":{"40":1,"69":1}}],["cooladminjavaapplicationtests",{"2":{"38":1}}],["coolcodegeneratortest",{"2":{"38":1}}],["coolcache",{"0":{"10":1},"2":{"10":4,"11":1,"53":5,"60":1,"74":7}}],["coolsecurityutil",{"2":{"14":1,"49":2,"76":3,"77":1}}],["coolrestcontroller",{"2":{"13":1,"14":1,"15":1,"16":1,"19":1,"20":2,"81":1,"86":1,"96":1}}],["cool",{"0":{"102":1},"2":{"0":1,"1":2,"5":1,"6":1,"13":1,"14":1,"15":1,"16":1,"21":1,"23":1,"26":1,"29":3,"30":3,"31":1,"33":3,"34":4,"36":1,"38":1,"40":2,"44":1,"45":1,"47":3,"53":19,"56":4,"57":2,"60":5,"61":8,"62":1,"64":1,"68":1,"69":7,"86":1,"90":1,"92":1,"96":1,"102":2,"104":1,"106":6,"107":6,"108":4,"113":1}}],["框架用到了mybatis",{"2":{"110":1}}],["框架自带两种文件上传方式本地上传与云存储",{"2":{"95":1}}],["框架自带基于",{"2":{"8":1}}],["框架默认关闭多租户",{"2":{"92":1}}],["框架就会自动扫描菜单",{"2":{"46":1}}],["框架就会自动扫描并翻译成对应的语言",{"2":{"46":1}}],["框架集成了auto",{"2":{"24":1}}],["框架封装了一个请求属性",{"2":{"15":1}}],["框架特有的通用工具类",{"0":{"10":1}}],["框架更新",{"2":{"4":1,"6":1}}],["缓存数据模板",{"2":{"115":1}}],["缓存对象",{"2":{"53":1}}],["缓存结果",{"2":{"53":2}}],["缓存相关配置",{"2":{"30":1}}],["缓存库",{"2":{"8":1}}],["缓存",{"0":{"8":1},"1":{"9":1,"10":1,"11":1},"2":{"8":2,"115":1}}],["的build",{"2":{"110":1}}],["的mvn",{"2":{"110":1}}],["的缩写",{"2":{"44":1}}],["的核心流程",{"2":{"43":1}}],["的能力",{"2":{"43":1}}],["的火热",{"2":{"43":1}}],["的都知道",{"2":{"24":1}}],["的事务管理",{"2":{"22":1}}],["的基本增删改查",{"2":{"22":1}}],["的",{"2":{"20":1,"110":1}}],["的一些最新资讯",{"2":{"6":1}}],["的在线文档仓库",{"2":{"0":1}}],["公众号",{"0":{"6":1}}],["团队哔哩哔哩官方账户",{"2":{"5":1}}],["站视频教程",{"2":{"7":1,"37":1}}],["站",{"0":{"5":1}}],["by",{"2":{"114":1}}],["bypass",{"2":{"30":1}}],["b8e4",{"2":{"60":1}}],["bbb",{"2":{"58":1}}],["beforeinvocation",{"2":{"74":1}}],["belerweb",{"2":{"60":2}}],["beans",{"2":{"60":3}}],["bean",{"2":{"53":1,"74":4}}],["ben",{"2":{"8":1}}],["bn",{"2":{"46":1}}],["bg",{"2":{"46":1}}],["br",{"2":{"46":1}}],["break",{"2":{"30":1}}],["badhanyupinyinoutputformatcombination",{"2":{"60":2}}],["badcredentialsexception",{"2":{"42":2}}],["banner",{"2":{"53":2,"54":2}}],["bashpnpm",{"2":{"28":1}}],["bashnpm",{"2":{"28":1}}],["baselogfilter",{"2":{"71":1}}],["basecoolplugin",{"2":{"53":7,"60":4}}],["basecontroller",{"2":{"12":1,"13":1,"14":2,"15":1,"16":1,"86":1}}],["baseservice中集成了常用的",{"2":{"84":1}}],["baseserviceimpl",{"2":{"16":1}}],["basesysuserservice",{"2":{"74":3}}],["basesysuserentity>lambdaquery",{"2":{"42":2,"74":1}}],["basesysuserentity",{"2":{"42":6,"74":3}}],["basesyspermsservice",{"2":{"74":8}}],["basesyslogservice",{"2":{"71":3}}],["basesyslogmapper",{"2":{"53":3}}],["baseentity",{"2":{"14":1,"93":1,"94":1}}],["base",{"2":{"14":3,"40":1,"53":1,"82":1,"96":1}}],["bind",{"2":{"30":1,"53":4}}],["boot",{"2":{"100":1}}],["bootstrap",{"2":{"29":1}}],["boolean",{"2":{"74":2}}],["body",{"2":{"15":1}}],["build>",{"2":{"60":2}}],["build",{"2":{"20":1,"33":2,"74":1,"110":3}}],["b",{"0":{"5":1},"2":{"7":1,"37":1,"53":3}}],["abstracthttpconfigurer",{"2":{"74":1}}],["abstractsecurityinterceptor",{"2":{"74":1}}],["abstractopenapiresource",{"2":{"69":1}}],["actuator",{"2":{"82":1}}],["action",{"2":{"53":1}}],["accessdeniedhandler",{"2":{"74":1}}],["aclass",{"2":{"74":1}}],["aop",{"2":{"60":2}}],["aaa",{"2":{"58":1}}],["authprovider",{"2":{"74":4}}],["authenticationconfiguration",{"2":{"74":1}}],["authenticationmanager",{"2":{"74":2}}],["authenticationprovider",{"2":{"74":2}}],["authenticationentrypoint",{"2":{"74":1}}],["authenticated",{"2":{"74":1}}],["authorizehttprequests",{"2":{"74":1}}],["authority",{"2":{"74":3}}],["author",{"2":{"58":1,"59":1}}],["autotable",{"2":{"114":2}}],["automatically",{"2":{"110":1}}],["automatically自动编译功能",{"2":{"110":1}}],["auto",{"2":{"100":1}}],["autowired",{"2":{"74":1}}],["autoprefixurlmapping",{"2":{"20":1}}],["am",{"2":{"46":1}}],["arraylist",{"2":{"74":3}}],["artifactset>",{"2":{"60":2}}],["artifactid>maven",{"2":{"60":1}}],["artifactid>pinyin4j",{"2":{"60":1}}],["artifactid>",{"2":{"60":3}}],["artifactid>hutool",{"2":{"60":1}}],["around",{"2":{"49":2}}],["ar",{"2":{"46":1}}],["args",{"2":{"38":1,"47":1}}],["args$args",{"2":{"30":1}}],["afterinvocation",{"2":{"74":1}}],["af",{"2":{"46":1}}],["az",{"2":{"46":1}}],["anyrequest",{"2":{"74":1}}],["annotations",{"2":{"20":1}}],["annotation",{"2":{"19":2,"40":1,"49":1,"53":5,"57":1,"60":5}}],["and",{"2":{"14":1}}],["aliyun",{"2":{"53":1}}],["aliyuncs",{"2":{"53":1}}],["aliasfor",{"2":{"19":2}}],["alloc",{"2":{"94":2}}],["all",{"2":{"14":1,"22":1,"60":1,"96":1}}],["assets",{"2":{"58":2,"96":1}}],["aspect",{"2":{"49":1}}],["ase",{"2":{"23":1}}],["astype",{"2":{"14":1}}],["as",{"2":{"14":1}}],["apt",{"2":{"110":1}}],["apache",{"2":{"60":1}}],["app端手机密码登录和手机验证码登录",{"2":{"116":1}}],["appsecret",{"2":{"54":1}}],["appid",{"2":{"54":1}}],["application",{"2":{"68":1,"96":1}}],["applicationcontext",{"2":{"53":1}}],["applicationarguments",{"2":{"47":1}}],["applicationrunner",{"2":{"47":1}}],["appdemoinfocontroller",{"2":{"18":1}}],["app",{"2":{"18":4,"71":1}}],["appmarketcouponusercontroller",{"2":{"14":1}}],["api",{"2":{"7":1,"13":1,"14":1,"15":1,"16":1,"19":1,"27":2,"30":2,"33":1,"37":1,"60":4,"69":1,"81":1,"82":1,"86":1}}],["age",{"2":{"14":1}}],["addfilterbefore",{"2":{"74":1}}],["addr",{"2":{"30":5}}],["add",{"2":{"12":1,"13":1,"14":1,"15":1,"16":1,"30":3,"42":4,"74":2,"81":1,"86":1,"96":1}}],["adminbasecommcontroller",{"2":{"96":1}}],["adminauthurls",{"2":{"82":1}}],["admindictinfocontroller",{"2":{"81":1}}],["admindemouserinfocontroller",{"2":{"18":1}}],["admindemoinfocontroller",{"2":{"13":1,"14":1,"15":1,"16":1,"18":3,"86":1}}],["adminuserid",{"2":{"76":1}}],["admin中才能调试",{"2":{"53":1}}],["admin的缓存",{"2":{"53":1}}],["admin前后端的多语言都是基于大模型翻译的",{"2":{"45":1}}],["admin",{"0":{"102":1},"2":{"0":1,"1":2,"18":6,"21":1,"23":1,"26":1,"29":3,"31":1,"33":2,"34":2,"36":1,"38":1,"44":1,"53":9,"56":2,"60":2,"61":1,"64":1,"69":4,"70":1,"74":6,"82":1,"90":1,"102":1,"104":2,"106":3,"107":3,"108":2,"113":1}}],["a",{"2":{"10":2,"53":2}}],["ai",{"0":{"7":1,"37":1,"43":1},"2":{"4":1,"43":6,"102":5,"112":1,"114":1,"117":1}}],["你的项目",{"2":{"110":1}}],["你的star是我们最大的动力",{"2":{"105":1}}],["你的贡献可能给其他人代码巨大的帮助",{"2":{"0":1}}],["你将会看到后端的欢迎页面",{"2":{"69":1}}],["你可以这样做",{"2":{"110":1}}],["你可以自己开发插件",{"2":{"50":1}}],["你可以在这边了解到一些关于我们框架的最新动态",{"2":{"4":1}}],["你需要把生成的eps",{"2":{"33":1}}],["抖音",{"0":{"4":1}}],["扫一扫加入微信开发交流群",{"2":{"3":1}}],["微信",{"0":{"3":1},"2":{"112":1}}],["共创一些美好的事情",{"2":{"2":1}}],["共同参与开源",{"2":{"0":1}}],["交流合作",{"0":{"2":1},"1":{"3":1,"4":1,"5":1,"6":1}}],["地址",{"0":{"1":1}}],["积极提交pull",{"2":{"0":1}}],["版相关功能",{"2":{"118":1}}],["版本一致",{"2":{"104":1}}],["版本号",{"2":{"59":1}}],["版本+宝塔为例",{"2":{"26":1}}],["版本的也可以参考",{"2":{"25":1}}],["版本为例",{"2":{"25":1}}],["版本才有",{"2":{"18":1}}],["版",{"2":{"0":1}}],["介绍",{"0":{"0":1}}]],"serializationVersion":2}';export{e as default}; diff --git a/.vitepress/dist/assets/chunks/@localSearchIndexroot.DESyfF_S.js b/.vitepress/dist/assets/chunks/@localSearchIndexroot.DESyfF_S.js new file mode 100644 index 0000000..48e25c7 --- /dev/null +++ b/.vitepress/dist/assets/chunks/@localSearchIndexroot.DESyfF_S.js @@ -0,0 +1 @@ +const e='{"documentCount":119,"nextId":119,"documentIds":{"0":"/README.html#介绍","1":"/README.html#地址","2":"/src/about/#交流合作","3":"/src/about/#微信","4":"/src/about/#抖音","5":"/src/about/#b-站","6":"/src/about/#公众号","7":"/src/guide/ai.html#ai-编码","8":"/src/guide/cache.html#缓存","9":"/src/guide/cache.html#使用","10":"/src/guide/cache.html#框架特有的通用工具类-coolcache","11":"/src/guide/cache.html#通过coolcache缓存模板-获取数据","12":"/src/guide/controller.html#控制器","13":"/src/guide/controller.html#示例","14":"/src/guide/controller.html#查询配置","15":"/src/guide/controller.html#请求参数","16":"/src/guide/controller.html#重写实现","17":"/src/guide/controller.html#原理","18":"/src/guide/controller.html#接口路由规则","19":"/src/guide/controller.html#自定义路由注解","20":"/src/guide/controller.html#重写-getmappingformethod","21":"/src/guide/db.html#数据库","22":"/src/guide/db.html#功能对比","23":"/src/guide/db.html#支持数据库","24":"/src/guide/db.html#自动建表","25":"/src/guide/deploy.html#项目部署","26":"/src/guide/deploy.html#普通方式","27":"/src/guide/deploy.html#_1、部署流程-以宝塔为例","28":"/src/guide/deploy.html#_2、推荐使用-pnpm-安装依赖","29":"/src/guide/deploy.html#_3、pm2-运行后端服务","30":"/src/guide/deploy.html#_4、nginx-配置示例","31":"/src/guide/deploy.html#docker-方式","32":"/src/guide/deploy.html#_1、部署流程-以宝塔为例-1","33":"/src/guide/deploy.html#_2、打包镜像","34":"/src/guide/deploy.html#_3、运行","35":"/src/guide/deploy.html#注意事项","36":"/src/guide/dev.html#开发方式","37":"/src/guide/dev.html#ai-全自动","38":"/src/guide/dev.html#半自动","39":"/src/guide/dir.html#目录结构","40":"/src/guide/dir.html#结构","41":"/src/guide/exception.html#统一异常处理","42":"/src/guide/exception.html#异常统一捕获","43":"/src/guide/flow.html#ai-流程编排","44":"/src/guide/i18n.html#国际化多语言-v8-0新增","45":"/src/guide/i18n.html#实现","46":"/src/guide/i18n.html#使用","47":"/src/guide/initData.html#数据初始化","48":"/src/guide/lock.html#锁","49":"/src/guide/noRepeatSubmit.html#防重复提交","50":"/src/guide/plugin.html#扩展插件","51":"/src/guide/plugin.html#使用插件","52":"/src/guide/plugin.html#_1、安装","53":"/src/guide/plugin.html#_2、调用","54":"/src/guide/plugin.html#_3、配置","55":"/src/guide/plugin.html#开发插件","56":"/src/guide/plugin.html#_1、脚手架","57":"/src/guide/plugin.html#_2、目录结构","58":"/src/guide/plugin.html#_3、开发过程","59":"/src/guide/plugin.html#_4、字段解释","60":"/src/guide/plugin.html#插件详解","61":"/src/guide/plugin.html#打包","62":"/src/guide/plugin.html#安装插件","63":"/src/guide/plugin.html#实现原理","64":"/src/guide/quick.html#快速开始","65":"/src/guide/quick.html#环境准备","66":"/src/guide/quick.html#运行系统","67":"/src/guide/quick.html#_1、拉取源码","68":"/src/guide/quick.html#_2、配置数据库","69":"/src/guide/quick.html#_3、启动后端服务","70":"/src/guide/quick.html#_4、启动前端服务","71":"/src/guide/recordLog.html#请求日志记录","72":"/src/guide/security.html#权限校验","73":"/src/guide/security.html#配置","74":"/src/guide/security.html#原理","75":"/src/guide/security.html#当前用户","76":"/src/guide/security.html#后端用户","77":"/src/guide/security.html#应用用户","78":"/src/guide/security.html#忽略-token","79":"/src/guide/security.html#方式一-注解","80":"/src/guide/security.html#方法上","81":"/src/guide/security.html#类上","82":"/src/guide/security.html#方式二-配置文件","83":"/src/guide/service.html#服务","84":"/src/guide/service.html#crud","85":"/src/guide/service.html#修改前后","86":"/src/guide/swagger.html#swagger-文档","87":"/src/guide/tenant.html#多租户-v8-0新增","88":"/src/guide/tenant.html#主要特点","89":"/src/guide/tenant.html#实现","90":"/src/guide/tenant.html#_1、数据隔离","91":"/src/guide/tenant.html#使用","92":"/src/guide/tenant.html#_1、开启多租户","93":"/src/guide/tenant.html#_2、继承对象调整","94":"/src/guide/uniqueIDGen.html#唯一id","95":"/src/guide/upload.html#文件上传","96":"/src/guide/upload.html#使用","97":"/src/introduce/show.html#演示","98":"/src/introduce/src.html#源码","99":"/src/introduce/src.html#后端-点个-star-哦","100":"/src/introduce/src.html#前端-点个-star-哦","101":"/src/introduce/src.html#文档-star-哦","102":"/src/introduce/#简介","103":"/src/introduce/#技术选型","104":"/src/introduce/#一、环境要求","105":"/src/introduce/#二、后端框架","106":"/src/introduce/#三、前端框架","107":"/src/introduce/#为什么选择-cool-admin","108":"/src/introduce/#内置功能","109":"/src/question/common.html#常见问题","110":"/src/question/common.html#_1、找不到类似xxxtabledef文件","111":"/src/todo/plan.html#计划","112":"/src/todo/plan.html#完善插件","113":"/src/todo/update.html#更新","114":"/src/todo/update.html#v8-0-0-2025-04-13","115":"/src/todo/update.html#v7-1-3-2024-08-25","116":"/src/todo/update.html#v7-1-2-2024-08-04","117":"/src/todo/update.html#v7-1-1-2024-07-15","118":"/src/todo/update.html#v7-1-0-2024-06-27"},"fieldIds":{"title":0,"titles":1,"text":2},"fieldLength":{"0":[1,1,13],"1":[1,1,8],"2":[1,1,4],"3":[1,1,2],"4":[1,1,11],"5":[2,1,3],"6":[1,1,6],"7":[2,1,8],"8":[1,1,35],"9":[1,1,31],"10":[2,1,22],"11":[2,1,37],"12":[1,1,15],"13":[1,1,48],"14":[1,1,171],"15":[1,1,57],"16":[1,1,63],"17":[1,1,1],"18":[1,1,44],"19":[1,1,14],"20":[2,1,43],"21":[1,1,41],"22":[1,1,79],"23":[1,1,112],"24":[1,1,21],"25":[1,1,9],"26":[1,1,8],"27":[4,2,36],"28":[4,2,15],"29":[3,2,41],"30":[3,2,92],"31":[2,1,10],"32":[4,3,12],"33":[2,3,31],"34":[2,3,16],"35":[1,3,9],"36":[1,1,7],"37":[2,1,12],"38":[1,1,51],"39":[1,1,4],"40":[1,1,58],"41":[1,1,8],"42":[1,1,78],"43":[2,1,23],"44":[4,1,21],"45":[1,1,11],"46":[1,1,149],"47":[1,1,76],"48":[1,1,27],"49":[1,1,70],"50":[1,1,9],"51":[1,1,1],"52":[2,2,9],"53":[2,2,204],"54":[2,2,18],"55":[1,1,1],"56":[2,2,16],"57":[2,2,25],"58":[2,2,31],"59":[2,2,27],"60":[1,1,185],"61":[1,1,31],"62":[1,1,5],"63":[1,1,66],"64":[1,1,4],"65":[1,1,19],"66":[1,1,1],"67":[2,2,4],"68":[2,2,45],"69":[2,2,59],"70":[2,2,25],"71":[1,1,44],"72":[1,1,7],"73":[1,1,14],"74":[1,1,243],"75":[1,1,2],"76":[1,2,39],"77":[1,2,6],"78":[2,1,5],"79":[2,3,1],"80":[1,5,14],"81":[1,5,22],"82":[2,3,25],"83":[1,1,2],"84":[1,1,5],"85":[1,1,21],"86":[2,1,48],"87":[4,1,9],"88":[1,1,10],"89":[1,1,1],"90":[2,1,11],"91":[1,1,1],"92":[2,1,17],"93":[2,1,6],"94":[1,1,64],"95":[1,1,17],"96":[1,1,98],"97":[1,1,11],"98":[1,1,7],"99":[5,1,12],"100":[5,1,13],"101":[4,1,15],"102":[1,1,1],"103":[1,1,4],"104":[2,2,14],"105":[2,2,10],"106":[2,2,5],"107":[4,1,26],"108":[1,1,38],"109":[1,1,2],"110":[2,1,29],"111":[1,1,4],"112":[1,1,9],"113":[1,1,8],"114":[6,1,26],"115":[7,1,24],"116":[7,1,11],"117":[6,1,9],"118":[7,1,8]},"averageFieldLength":[1.781512605042017,1.3361344537815127,29.966386554621845],"storedFields":{"0":{"title":"介绍","titles":[]},"1":{"title":"地址","titles":[]},"2":{"title":"交流合作","titles":[]},"3":{"title":"微信","titles":["交流合作"]},"4":{"title":"抖音","titles":["交流合作"]},"5":{"title":"B 站","titles":["交流合作"]},"6":{"title":"公众号","titles":["交流合作"]},"7":{"title":"Ai 编码","titles":[]},"8":{"title":"缓存","titles":[]},"9":{"title":"使用","titles":["缓存"]},"10":{"title":"框架特有的通用工具类,CoolCache","titles":["缓存"]},"11":{"title":"通过coolCache缓存模板,获取数据","titles":["缓存"]},"12":{"title":"控制器","titles":[]},"13":{"title":"示例","titles":["控制器"]},"14":{"title":"查询配置","titles":["控制器"]},"15":{"title":"请求参数","titles":["控制器"]},"16":{"title":"重写实现","titles":["控制器"]},"17":{"title":"原理","titles":[]},"18":{"title":"接口路由规则","titles":["原理"]},"19":{"title":"自定义路由注解","titles":["原理"]},"20":{"title":"重写 getMappingForMethod","titles":["原理"]},"21":{"title":"数据库","titles":[]},"22":{"title":"功能对比","titles":["数据库"]},"23":{"title":"支持数据库","titles":["数据库"]},"24":{"title":"自动建表","titles":["数据库"]},"25":{"title":"项目部署","titles":[]},"26":{"title":"普通方式","titles":["项目部署"]},"27":{"title":"1、部署流程(以宝塔为例):","titles":["项目部署","普通方式"]},"28":{"title":"2、推荐使用 pnpm 安装依赖","titles":["项目部署","普通方式"]},"29":{"title":"3、PM2 运行后端服务","titles":["项目部署","普通方式"]},"30":{"title":"4、nginx 配置示例","titles":["项目部署","普通方式"]},"31":{"title":"Docker 方式","titles":["项目部署"]},"32":{"title":"1、部署流程(以宝塔为例):","titles":["项目部署","Docker 方式"]},"33":{"title":"2、打包镜像","titles":["项目部署","Docker 方式"]},"34":{"title":"3、运行","titles":["项目部署","Docker 方式"]},"35":{"title":"注意事项","titles":["项目部署","Docker 方式"]},"36":{"title":"开发方式","titles":[]},"37":{"title":"Ai 全自动","titles":["开发方式"]},"38":{"title":"半自动","titles":["开发方式"]},"39":{"title":"目录结构","titles":[]},"40":{"title":"结构","titles":["目录结构"]},"41":{"title":"统一异常处理","titles":[]},"42":{"title":"异常统一捕获","titles":["统一异常处理"]},"43":{"title":"Ai 流程编排","titles":[]},"44":{"title":"国际化多语言(v8.0新增)","titles":[]},"45":{"title":"实现","titles":[]},"46":{"title":"使用","titles":[]},"47":{"title":"数据初始化","titles":[]},"48":{"title":"锁","titles":[]},"49":{"title":"防重复提交","titles":[]},"50":{"title":"扩展插件","titles":[]},"51":{"title":"使用插件","titles":["扩展插件"]},"52":{"title":"1、安装","titles":["扩展插件","使用插件"]},"53":{"title":"2、调用","titles":["扩展插件","使用插件"]},"54":{"title":"3、配置","titles":["扩展插件","使用插件"]},"55":{"title":"开发插件","titles":["扩展插件"]},"56":{"title":"1、脚手架","titles":["扩展插件","开发插件"]},"57":{"title":"2、目录结构","titles":["扩展插件","开发插件"]},"58":{"title":"3、开发过程","titles":["扩展插件","开发插件"]},"59":{"title":"4、字段解释","titles":["扩展插件","开发插件"]},"60":{"title":"插件详解","titles":["扩展插件"]},"61":{"title":"打包","titles":["扩展插件"]},"62":{"title":"安装插件","titles":["扩展插件"]},"63":{"title":"实现原理","titles":["扩展插件"]},"64":{"title":"快速开始","titles":[]},"65":{"title":"环境准备","titles":["快速开始"]},"66":{"title":"运行系统","titles":["快速开始"]},"67":{"title":"1、拉取源码","titles":["快速开始","运行系统"]},"68":{"title":"2、配置数据库","titles":["快速开始","运行系统"]},"69":{"title":"3、启动后端服务","titles":["快速开始","运行系统"]},"70":{"title":"4、启动前端服务","titles":["快速开始","运行系统"]},"71":{"title":"请求日志记录","titles":[]},"72":{"title":"权限校验","titles":[]},"73":{"title":"配置","titles":["权限校验"]},"74":{"title":"原理","titles":["权限校验"]},"75":{"title":"当前用户","titles":["权限校验"]},"76":{"title":"后端用户","titles":["权限校验","当前用户"]},"77":{"title":"应用用户","titles":["权限校验","当前用户"]},"78":{"title":"忽略 token","titles":["权限校验"]},"79":{"title":"方式一: 注解","titles":["权限校验","忽略 token"]},"80":{"title":"方法上","titles":["权限校验","忽略 token","方式一: 注解"]},"81":{"title":"类上","titles":["权限校验","忽略 token","方式一: 注解"]},"82":{"title":"方式二: 配置文件","titles":["权限校验","忽略 token"]},"83":{"title":"服务","titles":[]},"84":{"title":"Crud","titles":["服务"]},"85":{"title":"修改前后","titles":["服务"]},"86":{"title":"swagger 文档","titles":[]},"87":{"title":"多租户(v8.0新增)","titles":[]},"88":{"title":"主要特点","titles":[]},"89":{"title":"实现","titles":[]},"90":{"title":"1、数据隔离","titles":["实现"]},"91":{"title":"使用","titles":[]},"92":{"title":"1、开启多租户","titles":["使用"]},"93":{"title":"2、继承对象调整","titles":["使用"]},"94":{"title":"唯一id","titles":[]},"95":{"title":"文件上传","titles":[]},"96":{"title":"使用","titles":[]},"97":{"title":"演示","titles":[]},"98":{"title":"源码","titles":[]},"99":{"title":"后端(点个 Star 哦)","titles":["源码"]},"100":{"title":"前端(点个 Star 哦)","titles":["源码"]},"101":{"title":"文档 (Star 哦)","titles":["源码"]},"102":{"title":"简介","titles":[]},"103":{"title":"技术选型","titles":["简介"]},"104":{"title":"一、环境要求","titles":["简介","技术选型"]},"105":{"title":"二、后端框架","titles":["简介","技术选型"]},"106":{"title":"三、前端框架","titles":["简介","技术选型"]},"107":{"title":"为什么选择 Cool Admin?","titles":["简介"]},"108":{"title":"内置功能","titles":["简介"]},"109":{"title":"常见问题","titles":[]},"110":{"title":"1、找不到类似xxxTableDef文件","titles":["常见问题"]},"111":{"title":"计划","titles":[]},"112":{"title":"完善插件","titles":["计划"]},"113":{"title":"更新","titles":[]},"114":{"title":"v8.0.0(2025-04-13)","titles":["更新"]},"115":{"title":"v7.1.3(2024-08-25)","titles":["更新"]},"116":{"title":"v7.1.2(2024-08-04)","titles":["更新"]},"117":{"title":"v7.1.1(2024-07-15)","titles":["更新"]},"118":{"title":"v7.1.0(2024-06-27)","titles":["更新"]}},"dirtCount":0,"index":[["移除插件jar文件落库",{"2":{"116":1}}],["移除锁",{"2":{"49":1}}],["鉴权调整兼容app端",{"2":{"116":1}}],["鉴权拦截配置",{"2":{"74":1}}],["指定id插入不生效问题",{"2":{"115":1}}],["修复",{"2":{"115":2,"116":1}}],["修改之后",{"2":{"85":2}}],["修改之前",{"2":{"85":2}}],["修改类型",{"2":{"85":2}}],["修改前后",{"0":{"85":1}}],["修改",{"2":{"13":1,"108":1}}],["图形验证码获取区分app和admin",{"2":{"115":1}}],["解析规则",{"2":{"115":1}}],["解析设计",{"2":{"22":1}}],["参考",{"2":{"115":6}}],["参数管理",{"2":{"108":1}}],["参数",{"2":{"53":1}}],["涉及包结构变更",{"2":{"114":1}}],["升级所有相关依赖到最新",{"2":{"118":1}}],["升级到",{"2":{"118":1}}],["升级autotable和mybatis",{"2":{"114":1}}],["升级",{"2":{"114":2}}],["响应类型封装优化",{"2":{"114":1}}],["全局动态注入查询条件详情",{"2":{"114":1}}],["全自动",{"0":{"37":1}}],["支付",{"2":{"117":1}}],["支付插件",{"2":{"112":1}}],["支持postgresql",{"2":{"116":1}}],["支持自定义返回结果类型",{"2":{"115":1}}],["支持多语言",{"2":{"114":1}}],["支持多租户",{"2":{"114":1}}],["支持多主键",{"2":{"22":1}}],["支持动态安装",{"2":{"108":1}}],["支持回滚操作",{"2":{"108":1}}],["支持静态资源文件上传云端进行云管理",{"2":{"108":1}}],["支持通配",{"2":{"82":1}}],["支持很多数据库",{"2":{"23":1}}],["支持的数据库类型",{"2":{"23":1}}],["支持数据库",{"0":{"23":1}}],["支持关联查询",{"2":{"21":1}}],["短信等功能可以通过安装插件的方式添加",{"2":{"117":1}}],["短信插件",{"2":{"112":1}}],["短信这类功能的插件可以通过后台动态安装卸载",{"2":{"107":1}}],["完善插件",{"0":{"112":1}}],["计划",{"0":{"111":1},"1":{"112":1}}],["找不到类似xxxtabledef文件",{"0":{"110":1}}],["常见问题",{"0":{"109":1},"1":{"110":1}}],["常用的技术进行选择",{"2":{"103":1}}],["常用命令",{"2":{"29":1}}],["卸载插件",{"2":{"108":1}}],["卸载和替换",{"2":{"63":2}}],["前后端插件",{"2":{"108":1}}],["前端框架",{"0":{"106":1}}],["前端",{"0":{"100":1}}],["前端会根据后端返回的上传模式进行本地上传或者云存储签名直传",{"2":{"95":1}}],["前端请前往前端文档查看",{"2":{"45":1}}],["前端不需要特意写调用接口的",{"2":{"33":1}}],["前端打包完放这边",{"2":{"30":1}}],["前端访问后端的接口地址默认是前端根地址+",{"2":{"27":1}}],["前端接口",{"2":{"18":1}}],["天的保留",{"2":{"108":1}}],["任务调度包含执行结果日志",{"2":{"108":1}}],["添加",{"2":{"108":1}}],["定时任务",{"2":{"108":1}}],["定时任务模块",{"2":{"40":1}}],["便于问题排查",{"2":{"108":1}}],["设置角色按机构进行数据范围权限划分",{"2":{"108":1}}],["呈现公司组织部门树形结构",{"2":{"108":1}}],["内置功能",{"0":{"108":1}}],["代码简洁",{"2":{"107":1}}],["代理服务端地址",{"2":{"30":1}}],["灵活又不臃肿",{"2":{"107":1}}],["灵活性",{"2":{"63":1}}],["灵活性高",{"2":{"63":1}}],["专门为",{"2":{"107":1}}],["部分功能实现零代码",{"2":{"107":1}}],["部署",{"2":{"35":1}}],["部署的简单流程",{"2":{"31":1}}],["部署的配置方式可以参考普通的部署方式",{"2":{"31":1}}],["部署成功",{"2":{"27":1,"32":1}}],["部署流程",{"0":{"27":1,"32":1}}],["部署视频教程",{"2":{"26":1,"31":1}}],["从页面到后端代码",{"2":{"107":1}}],["从第三方",{"2":{"11":1}}],["特别是最近",{"2":{"107":1}}],["特别是跟",{"2":{"4":1}}],["三",{"0":{"106":1}}],["二",{"0":{"105":1}}],["环境要求",{"0":{"104":1}}],["环境准备",{"0":{"65":1}}],["减少技术栈的复杂度",{"2":{"103":1}}],["技术选型",{"0":{"103":1},"1":{"104":1,"105":1,"106":1}}],["技术分享",{"2":{"4":1,"6":1}}],["您的贡献可能会给其他人来带巨大的帮助",{"2":{"101":1}}],["哦",{"0":{"99":1,"100":1,"101":1}}],["点个",{"0":{"99":1,"100":1}}],["点击前往前端项目详细文档",{"2":{"70":1,"100":1}}],["点击前往插件市场",{"2":{"50":1}}],["点击前往插件市场下载安装",{"2":{"43":1}}],["点击+按钮",{"2":{"52":1}}],["点击左侧菜单扩展管理",{"2":{"52":1}}],["源码",{"0":{"98":1},"1":{"99":1,"100":1,"101":1}}],["源码仓库",{"2":{"67":1}}],["演示",{"0":{"97":1}}],["水印等处理",{"2":{"96":1}}],["裁剪",{"2":{"96":1}}],["条件允许的话尽量选择云存储上传",{"2":{"96":1}}],["动静分离有许多好处",{"2":{"96":1}}],["动态加载使得应用程序能够在不停机的情况下进行热更新",{"2":{"63":1}}],["动态加载允许应用程序在运行时根据需求加载",{"2":{"63":1}}],["动态加载",{"2":{"63":2}}],["动态",{"2":{"22":1}}],["动态表名",{"2":{"22":1}}],["线上环境请用nginx等静态服务器代理",{"2":{"96":1}}],["线上的数据库是需要本地传上去的",{"2":{"27":1}}],["七牛云等",{"2":{"95":1}}],["腾讯云",{"2":{"95":1}}],["云存储上传服务端值提供签名供前端直传到对应的云存储",{"2":{"95":1}}],["云存储",{"2":{"95":1}}],["直接上传到对应的云存储",{"2":{"95":1}}],["分布式id",{"2":{"115":1}}],["分布式id生成组件",{"2":{"115":1}}],["分布式唯一id组件",{"2":{"94":1}}],["分页查询无",{"2":{"22":1}}],["分页查询之总量缓存",{"2":{"22":1}}],["分页查询配置",{"2":{"14":1}}],["分页查询",{"2":{"13":1,"22":1}}],["启用唯一id组件",{"2":{"94":1}}],["启动",{"2":{"70":1}}],["启动前端服务",{"0":{"70":1}}],["启动文件",{"2":{"69":1}}],["启动后端服务",{"0":{"69":1}}],["启动一个服务",{"2":{"29":1}}],["启动服务",{"2":{"27":1}}],["入参为key",{"2":{"94":1}}],["步长",{"2":{"94":1}}],["唯一id分配",{"2":{"94":1}}],["唯一id",{"0":{"94":1}}],["继承对象调整",{"0":{"93":1}}],["关于tenantid的使用请参考",{"2":{"92":1}}],["关联查询用法参考",{"2":{"14":1}}],["租户id",{"2":{"90":1}}],["成本优化",{"2":{"88":1}}],["成功",{"2":{"46":1}}],["独立配置",{"2":{"88":1}}],["互不可见",{"2":{"88":1}}],["确保不同租户之间的数据严格分离",{"2":{"88":1}}],["但最为常见的是以列进行隔离的方式",{"2":{"90":1}}],["但共享同一个应用程序代码和基础设施",{"2":{"87":1}}],["但是每次都是用代码手搓",{"2":{"43":1}}],["但是它为我们提供了改造的可能",{"2":{"23":1}}],["但是",{"2":{"23":1}}],["客户组织",{"2":{"87":1}}],["允许单个应用实例服务多个租户",{"2":{"87":1}}],["允许网页iframe",{"2":{"74":1}}],["操作日志",{"2":{"108":1}}],["操作权限标识等",{"2":{"108":1}}],["操作",{"2":{"84":1}}],["处理业务逻辑的代码应该被封装在服务中",{"2":{"83":1}}],["处理逻辑在以下方法",{"2":{"47":1}}],["都必须配合coolrestcontroller使用",{"2":{"81":1}}],["都继承自",{"2":{"12":1}}],["校验",{"2":{"78":1,"80":1}}],["应用用户",{"0":{"77":1}}],["应用必备",{"2":{"43":1}}],["类上",{"0":{"81":1}}],["类型",{"2":{"76":1}}],["类必须继承",{"2":{"53":1,"60":2}}],["类必须要有",{"2":{"53":1,"60":2}}],["当前最大id",{"2":{"94":1}}],["当前用户",{"0":{"75":1},"1":{"76":1,"77":1}}],["当你在控制台看到这样的输出",{"2":{"46":1}}],["监控用户行为",{"2":{"74":1}}],["监听",{"2":{"22":1}}],["权限管理拦截器",{"2":{"74":1}}],["权限校验",{"0":{"72":1},"1":{"73":1,"74":1,"75":1,"76":1,"77":1,"78":1,"79":1,"80":1,"81":1,"82":1}}],["每次调用接口的时候spring",{"2":{"74":1}}],["每个租户可以有自己的个性化配置和定制化需求",{"2":{"88":1}}],["每个租户的数据是相互隔离的",{"2":{"87":1}}],["每个插件的配置各不相同",{"2":{"59":1}}],["每个对象中的",{"2":{"47":1}}],["每个模块都有其特有的功能",{"2":{"39":1}}],["判定用户请求的url是否在权限表中",{"2":{"74":1}}],["判断",{"2":{"42":1}}],["刷新token过期时间",{"2":{"73":1}}],["半小时",{"2":{"73":1}}],["半自动",{"0":{"38":1}}],["秒",{"2":{"73":2}}],["单位",{"2":{"73":2}}],["单主键配置",{"2":{"22":1}}],["过期时间",{"2":{"73":1}}],["作为文档",{"2":{"86":1}}],["作为myaccessdecisionmanager类的decide的第三个参数",{"2":{"74":1}}],["作为框架安全与权限校验",{"2":{"72":1}}],["作者",{"2":{"58":1,"59":1}}],["采用",{"2":{"72":1}}],["忽略后台鉴权url",{"2":{"82":1}}],["忽略",{"0":{"78":1},"1":{"79":1,"80":1,"81":1,"82":1},"2":{"78":1}}],["忽略权限控制的地址",{"2":{"74":1}}],["忽略记录请求日志url配置",{"2":{"116":1}}],["忽略记录请求日志url",{"2":{"71":1}}],["忽略url",{"2":{"71":1,"82":1}}],["记录日志",{"2":{"71":1}}],["记录接口请求日志入库",{"2":{"71":1}}],["密码版本号",{"2":{"76":1}}],["密码",{"2":{"70":1,"97":1}}],["账户",{"2":{"70":1,"97":1}}],["账户密码不正确",{"2":{"42":1}}],["执行",{"2":{"110":1}}],["执行命令",{"2":{"70":1}}],["执行的过程中",{"2":{"21":1}}],["跟进nodejs",{"2":{"118":1}}],["跟",{"2":{"70":1}}],["跟分页查询一样",{"2":{"14":1}}],["端口",{"2":{"69":1}}],["服务",{"0":{"83":1},"1":{"84":1,"85":1}}],["服务启动成功",{"2":{"69":1}}],["服务器环境准备",{"2":{"27":1}}],["构建eps信息",{"2":{"69":1}}],["控制台打印出下面信息",{"2":{"69":1}}],["控制器",{"0":{"12":1},"1":{"13":1,"14":1,"15":1,"16":1},"2":{"115":1}}],["驱动已经内置",{"2":{"68":1}}],["yamlcool",{"2":{"73":1}}],["yaml",{"2":{"68":1,"82":1,"92":1,"94":1}}],["yamlspring",{"2":{"8":1,"96":1}}],["yml",{"2":{"68":1,"96":1}}],["9000",{"2":{"70":1}}],["941+08",{"2":{"69":1}}],["9",{"2":{"65":1}}],["7天",{"2":{"73":1}}],["7版本",{"2":{"68":1}}],["7",{"2":{"65":1,"104":1}}],["选择",{"2":{"65":1,"104":1}}],["选择插件包进行安装",{"2":{"52":1}}],["开启",{"2":{"110":1}}],["开启多租户",{"0":{"92":1}}],["开放接口",{"2":{"78":1}}],["开始使用",{"2":{"64":1}}],["开发几乎不用写代码",{"2":{"107":1}}],["开发设计的",{"2":{"107":1}}],["开发过程",{"0":{"58":1}}],["开发过程只需点一点",{"2":{"37":1}}],["开发插件",{"0":{"55":1},"1":{"56":1,"57":1,"58":1,"59":1}}],["开发的时候无法调试",{"2":{"53":1}}],["开发的时候只是模拟",{"2":{"53":1}}],["开发的一个",{"2":{"8":1}}],["开发",{"2":{"43":1}}],["开发方式",{"0":{"36":1},"1":{"37":1,"38":1}}],["开发者可以从中方便的获取各种参数",{"2":{"15":1}}],["快速开始",{"0":{"64":1},"1":{"65":1,"66":1,"67":1,"68":1,"69":1,"70":1}}],["扩展性",{"2":{"63":1}}],["扩展插件",{"0":{"50":1},"1":{"51":1,"52":1,"53":1,"54":1,"55":1,"56":1,"57":1,"58":1,"59":1,"60":1,"61":1,"62":1,"63":1},"2":{"107":1}}],["大大提高了系统的可用性和稳定性",{"2":{"63":1}}],["热更新",{"2":{"63":1}}],["优化若干问题",{"2":{"118":1}}],["优化插件过大加载慢问题",{"2":{"116":1}}],["优化角色修改循环单个处理为批量处理",{"2":{"115":1}}],["优化eps解析规则",{"2":{"115":1}}],["优化",{"2":{"114":1}}],["优势",{"2":{"63":1}}],["优炫数据库",{"2":{"23":1}}],["远程服务器和",{"2":{"63":1}}],["它可以加载指定的",{"2":{"63":1}}],["它是指让软件支持多种语言和地区的功能",{"2":{"44":1}}],["标准库中提供的一个类加载器",{"2":{"63":1}}],["最终打出的包为",{"2":{"61":1}}],["里指定",{"2":{"61":1}}],["里面是个数组",{"2":{"47":1}}],["后台人员查询列表字段关联错误",{"2":{"115":1}}],["后端框架",{"0":{"105":1}}],["后端",{"0":{"99":1}}],["后端用户",{"0":{"76":1}}],["后端修改数据库配置",{"2":{"68":1}}],["后端接口",{"2":{"18":1}}],["后缀的文件",{"2":{"61":1}}],["避免打包结果过大",{"2":{"60":1}}],["避免插件过大不会在打入jar包中",{"2":{"60":1}}],["主应用以有这些依赖",{"2":{"60":1}}],["主应用项目已经有的依赖给排除掉",{"2":{"60":1}}],["主应用没有这些依赖",{"2":{"60":1}}],["主要特点",{"0":{"88":1},"2":{"21":1,"107":1}}],["主要是做一些技术教程",{"2":{"4":1}}],["引入依赖",{"2":{"60":1}}],["引入插件",{"2":{"46":1}}],["可插拔",{"2":{"107":1}}],["可商用",{"2":{"98":1}}],["可选",{"2":{"96":1}}],["可维护性",{"2":{"63":1}}],["可控性强",{"2":{"63":1}}],["可在",{"2":{"61":1}}],["可使用",{"2":{"60":1}}],["可以重写modifybefore和modifyafter方法",{"2":{"85":1}}],["可以参考baseservice的实现",{"2":{"84":1}}],["可以轻松地添加新的功能模块或服务",{"2":{"63":1}}],["可以将应用程序的核心逻辑和配置分离",{"2":{"63":1}}],["可以通过代码控制加载",{"2":{"63":1}}],["可以通过插件的方式来扩展系统功能",{"2":{"50":1}}],["可以动态指定",{"2":{"63":1}}],["可以快速开发我们的插件",{"2":{"56":1}}],["可以大大节省开发时间",{"2":{"36":1}}],["可以大大简化代码",{"2":{"12":1}}],["可以考虑这个时间配置长一点",{"2":{"30":1}}],["可以自己指定数量",{"2":{"29":1}}],["可以自动创建表",{"2":{"24":1}}],["可以在yml文件中配置",{"2":{"71":1}}],["可以在打包日志中查看我们排除和引入了哪些包",{"2":{"60":1}}],["可以在",{"2":{"47":1}}],["可以在对应的",{"2":{"16":1}}],["可以在这边实现一下列表数据排序规则",{"2":{"13":1,"15":1,"16":1,"86":1}}],["可以选择你想使用的缓存",{"2":{"8":1}}],["满足以上条件",{"2":{"60":1}}],["拼音",{"2":{"60":1}}],["汉字",{"2":{"60":1}}],["汉字字符",{"2":{"60":1}}],["会持续不断地更新",{"2":{"113":1}}],["会展示在插件的详情中",{"2":{"59":1}}],["会更加简洁",{"2":{"42":1}}],["建议",{"2":{"68":1}}],["建议尺寸",{"2":{"59":1}}],["建议将缓存换成",{"2":{"35":1}}],["说明后端服务启动成功",{"2":{"69":1}}],["说明",{"2":{"59":1,"76":1}}],["测试",{"2":{"58":1}}],["测试curd",{"2":{"13":2,"14":2,"15":2,"16":2,"38":1,"86":2}}],["或",{"2":{"56":1,"99":2,"100":2,"101":1}}],["或者db",{"2":{"11":1}}],["脚手架源码仓库",{"2":{"56":1}}],["脚手架",{"0":{"56":1}}],["下",{"2":{"54":1}}],["下的",{"2":{"47":1}}],["范围在",{"2":{"54":1}}],["路径可以自己指定",{"2":{"54":1}}],["例如原本的配置文件是这样的",{"2":{"54":1}}],["其它的无效",{"2":{"81":1}}],["其中对应的包名称",{"2":{"61":1}}],["其中",{"2":{"54":1}}],["其中我们可以在插件包里通过",{"2":{"53":1}}],["其他数据库适配中",{"2":{"68":1}}],["其他部署方式也可以参考这个流程",{"2":{"26":1}}],["其他查询方式",{"2":{"14":2}}],["获得用户信息",{"2":{"74":1,"76":1}}],["获得其他插件",{"2":{"53":1}}],["获取id",{"2":{"94":1}}],["获取当前用户信息",{"2":{"75":1}}],["获取启用的权限操作请求",{"2":{"74":1}}],["获取主应用resources下的",{"2":{"53":1}}],["获取主应用resources目录下的资源文件",{"2":{"53":1}}],["获取锁后的逻辑",{"2":{"48":1}}],["获取物流信息",{"2":{"11":1}}],["获取数据",{"0":{"11":1},"2":{"11":1}}],["||",{"2":{"53":7}}],["|",{"2":{"53":67}}],["一",{"0":{"104":1}}],["一个插件",{"2":{"60":1}}],["一个插件jar有且只能有一个类被",{"2":{"53":1,"60":1}}],["一个项目用cool就够了",{"2":{"53":2}}],["一般抛异常写法",{"2":{"42":1}}],["`",{"2":{"53":10}}],["`update",{"2":{"53":1}}],["`create",{"2":{"53":1}}],["`params`",{"2":{"53":1}}],["`ip`",{"2":{"53":1}}],["`action`",{"2":{"53":1}}],["`base",{"2":{"53":1}}],["500",{"2":{"94":2}}],["564+08",{"2":{"53":1}}],["556",{"2":{"69":1}}],["559+08",{"2":{"53":1}}],["558+08",{"2":{"53":1}}],["557+08",{"2":{"53":1}}],["554+08",{"2":{"53":1}}],["544+08",{"2":{"53":1}}],["543+08",{"2":{"53":2}}],["5",{"2":{"53":8,"60":6,"65":1,"104":1}}],["就是我们的插件包",{"2":{"61":1}}],["就可以在代码中调用插件的方法了",{"2":{"53":1}}],["就不需要在entity",{"2":{"14":1}}],["调整",{"2":{"115":4,"116":2}}],["调用其他插件",{"2":{"53":1}}],["调用其他插件aliyun",{"2":{"53":1}}],["调用主应用获取缓存",{"2":{"53":1}}],["调用主应用设置缓存",{"2":{"53":1}}],["调用主应用",{"2":{"53":3}}],["调用插件类",{"2":{"53":1}}],["调用",{"0":{"53":1}}],["调一调",{"2":{"37":1}}],["打开后台管理系统",{"2":{"52":1}}],["打包结果",{"2":{"61":1}}],["打包命令",{"2":{"61":1}}],["打包",{"0":{"61":1}}],["打包时可以排除",{"2":{"60":1}}],["打包前端镜像",{"2":{"33":1}}],["打包前后端代码",{"2":{"27":1}}],["打包后端镜像",{"2":{"33":1}}],["打包后端和前端镜像",{"2":{"32":1}}],["打包镜像之前",{"2":{"33":1}}],["打包镜像",{"0":{"33":1}}],["打包之前注意配置生产环境的数据库配置config",{"2":{"27":1}}],["然后在系统中安装插件包",{"2":{"52":1}}],["首次启动会自动初始化并导入数据",{"2":{"68":1}}],["首先下载插件包",{"2":{"52":1}}],["首末字符",{"2":{"44":1}}],["导致系统臃肿",{"2":{"50":1}}],["领取优惠券",{"2":{"49":1}}],["基于deepseek",{"2":{"114":1}}],["基于大模型自动翻译",{"2":{"114":1}}],["基于表来完成分布式id生成",{"2":{"94":1}}],["基于用户维度的防重复提交",{"2":{"49":1}}],["基础模块",{"2":{"40":1}}],["防重提交",{"2":{"115":1}}],["防重提交注解",{"2":{"115":1}}],["防重复提交",{"0":{"49":1}}],["防止上传恶意文件等",{"2":{"96":1}}],["防止操作不当导致的数据丢失",{"2":{"35":1}}],["防止刷新404",{"2":{"30":1}}],["释放锁",{"2":{"48":1}}],["尝试获取锁",{"2":{"48":1}}],["注入service",{"2":{"94":1}}],["注入锁",{"2":{"48":1}}],["注解",{"0":{"79":1},"1":{"80":1,"81":1},"2":{"49":1,"53":2,"60":4}}],["注意事项",{"0":{"35":1}}],["注意",{"2":{"18":1,"22":1,"23":1,"24":1,"25":1,"27":1,"33":1,"47":1,"65":1,"81":1,"96":1}}],["注意如果该表有json字段",{"2":{"14":1}}],["简单功能零代码实现",{"2":{"117":1}}],["简单锁的使用",{"2":{"48":1}}],["简介",{"0":{"102":1},"1":{"103":1,"104":1,"105":1,"106":1,"107":1,"108":1}}],["简体中文",{"2":{"46":1}}],["锁工具",{"2":{"115":2}}],["锁是基于redis",{"2":{"48":1}}],["锁",{"0":{"48":1}}],["加载权限表中所有操作请求权限",{"2":{"74":1}}],["加载成功后文件名称将被当作唯一键标识",{"2":{"47":1}}],["加上",{"2":{"57":1}}],["加锁",{"2":{"49":1}}],["加泰罗尼亚语",{"2":{"46":1}}],["要新增一个",{"2":{"47":1}}],["要让其再次翻译",{"2":{"46":1}}],["初始化数据",{"2":{"115":1}}],["初始化数据json文件",{"2":{"40":1}}],["初始化eps完成",{"2":{"69":1}}],["初始化菜单数据",{"2":{"47":1}}],["初始化自定义的数据",{"2":{"47":1}}],["富文本参数",{"2":{"47":1}}],["规范",{"2":{"47":1}}],["规则为",{"2":{"18":1}}],["数组里可以包含多个对象",{"2":{"47":1}}],["数据有",{"2":{"108":1}}],["数据回收站",{"2":{"108":1}}],["数据回收站模块",{"2":{"40":1}}],["数据隔离",{"0":{"90":1},"2":{"88":1}}],["数据初始化完成",{"2":{"47":1}}],["数据初始化",{"0":{"47":1},"2":{"94":1}}],["数据脱敏",{"2":{"22":1}}],["数据脱敏等等",{"2":{"21":1}}],["数据填充",{"2":{"21":1,"22":1}}],["数据库初始数据初始化",{"2":{"47":1}}],["数据库",{"0":{"21":1},"1":{"22":1,"23":1,"24":1},"2":{"23":32}}],["格式如下",{"2":{"47":1}}],["目录下",{"2":{"61":1}}],["目录下创建",{"2":{"47":1}}],["目录创建",{"2":{"47":1}}],["目录结构",{"0":{"39":1,"57":1},"1":{"40":1}}],["马来语",{"2":{"46":1}}],["孟加拉语",{"2":{"46":1}}],["世界语",{"2":{"46":1}}],["克罗地亚语",{"2":{"46":1}}],["亚美尼亚语",{"2":{"46":1}}],["亚马逊",{"2":{"23":1}}],["吉尔吉斯语",{"2":{"46":1}}],["巴斯克语",{"2":{"46":1}}],["巴西葡萄牙语",{"2":{"46":1}}],["塞尔维亚语",{"2":{"46":1}}],["维吾尔语",{"2":{"46":1}}],["库尔德语",{"2":{"46":2}}],["罗马尼亚语",{"2":{"46":1}}],["匈牙利语",{"2":{"46":1}}],["哈萨克语",{"2":{"46":1}}],["蒙古语",{"2":{"46":1}}],["立陶宛语",{"2":{"46":1}}],["希伯来语",{"2":{"46":1}}],["希腊语",{"2":{"46":1}}],["阿拉伯语",{"2":{"46":1}}],["阿塞拜疆语",{"2":{"46":1}}],["斯洛文尼亚语",{"2":{"46":1}}],["斯洛伐克语",{"2":{"46":1}}],["爱沙尼亚语",{"2":{"46":1}}],["南非荷兰语",{"2":{"46":1}}],["南大通用数据库",{"2":{"23":1}}],["南大通用",{"2":{"23":1}}],["拉取源码",{"0":{"67":1}}],["拉取前后端代码",{"2":{"27":1,"32":1}}],["拉脱维亚语",{"2":{"46":1}}],["泰米尔语",{"2":{"46":1}}],["泰语",{"2":{"46":1}}],["土库曼语",{"2":{"46":1}}],["土耳其语",{"2":{"46":1}}],["乌克兰语",{"2":{"46":1}}],["捷克语",{"2":{"46":1}}],["瑞典语",{"2":{"46":1}}],["芬兰语",{"2":{"46":1}}],["波兰语",{"2":{"46":1}}],["波斯语",{"2":{"46":1}}],["普什图语",{"2":{"46":1}}],["普通方式",{"0":{"26":1},"1":{"27":1,"28":1,"29":1,"30":1}}],["保加利亚语",{"2":{"46":1}}],["印度尼西亚语",{"2":{"46":1}}],["俄语",{"2":{"46":1}}],["越南语",{"2":{"46":1}}],["越来越多的企业开始走向国际化",{"2":{"44":1}}],["荷兰语",{"2":{"46":1}}],["日语",{"2":{"46":1}}],["日志",{"2":{"29":1}}],["韩语",{"2":{"46":1}}],["意大利语",{"2":{"46":1}}],["繁体中文",{"2":{"46":1}}],["挪威语",{"2":{"46":1}}],["法语",{"2":{"46":1}}],["丹麦语",{"2":{"46":1}}],["西班牙语",{"2":{"46":1}}],["葡萄牙语",{"2":{"46":1}}],["德语",{"2":{"46":1}}],["美国英语",{"2":{"46":1}}],["语言配置对照表",{"2":{"46":1}}],["得对应地删除相应的文件",{"2":{"46":1}}],["则框架会自动注入tenantid",{"2":{"90":1}}],["则返回给decide方法",{"2":{"74":1}}],["则该种类的国际化将不会进行翻译",{"2":{"46":1}}],["则代表成功",{"2":{"46":1}}],["翻译完成之后会默认在路径assets",{"2":{"46":1}}],["翻译",{"2":{"46":1}}],["翻译成功",{"2":{"46":1}}],["翻译中",{"2":{"46":1}}],["只需极少编码即可实现大部分需求",{"2":{"107":1}}],["只需拖一拖即可",{"2":{"107":1}}],["只需三步",{"2":{"38":1}}],["只有安装到cool",{"2":{"53":1}}],["只要开启并配置了国际化",{"2":{"46":1}}],["只要开启就能自动翻译",{"2":{"45":1}}],["比传统机翻更加准确",{"2":{"45":1}}],["比如orderid",{"2":{"94":1}}],["比如替换系统的上传组件",{"2":{"59":1}}],["比如你有一个订单管理的模块",{"2":{"40":1}}],["比如",{"2":{"22":1,"47":1,"53":1}}],["显示相应的语言界面",{"2":{"44":1}}],["个字母",{"2":{"44":1}}],["个接口",{"2":{"13":1}}],["之间有",{"2":{"44":1}}],["国际化多语言",{"0":{"44":1}}],["相关配置",{"2":{"73":1}}],["相关应用",{"2":{"43":1}}],["相关的技术发展",{"2":{"107":1}}],["相关的",{"2":{"4":1}}],["很容易就能完成一个",{"2":{"43":1}}],["很多应用希望接入",{"2":{"43":1}}],["结尾",{"2":{"47":1}}],["结合知识库",{"2":{"43":1}}],["结构",{"0":{"40":1}}],["做为后来者有后发优势",{"2":{"107":1}}],["做了一个",{"2":{"43":1}}],["做解析",{"2":{"20":1}}],["于是我们面向开发者和软件开发公司",{"2":{"43":1}}],["容易把我们累死",{"2":{"43":1}}],["随着技术不断地发展",{"2":{"107":1}}],["随着互联网的发展",{"2":{"44":1}}],["随着",{"2":{"43":1}}],["视频演示",{"2":{"43":1}}],["流程编排插件",{"2":{"112":1}}],["流程编排功能",{"2":{"43":1}}],["流程编排",{"0":{"43":1},"2":{"107":1}}],["异常消息",{"2":{"46":1}}],["异常信息为",{"2":{"42":1}}],["异常统一捕获",{"0":{"42":1}}],["即抛异常",{"2":{"42":1}}],["手动抛异常",{"2":{"42":1}}],["手动进行转换",{"2":{"14":1}}],["业务key",{"2":{"94":1}}],["业务校验的工具",{"2":{"42":1}}],["业务代码放在这边",{"2":{"40":1}}],["系统异常信息日志记录和查询",{"2":{"108":1}}],["系统正常操作日志记录和查询",{"2":{"108":1}}],["系统通用",{"2":{"96":2}}],["系统的文件上传就会自动替换成云存储上传的方式",{"2":{"95":1}}],["系统启动完成访问",{"2":{"86":1}}],["系统启动的时候",{"2":{"74":1}}],["系统会查询并向spring",{"2":{"74":1}}],["系统提供了",{"2":{"42":1}}],["系统用户",{"2":{"40":1}}],["请求日志",{"2":{"108":1}}],["请求日志记录",{"0":{"71":1}}],["请求过程中会解析",{"2":{"76":1}}],["请求参数",{"0":{"15":1},"2":{"85":2}}],["请勿重复操作",{"2":{"49":1}}],["请区分post",{"2":{"42":1}}],["不像一般代码生成器生成一堆冗余代码",{"2":{"107":1}}],["不要吝啬你们免费的star哦",{"2":{"98":1}}],["不经过服务器",{"2":{"95":1}}],["不然调用时会报错",{"2":{"60":1}}],["不带声调",{"2":{"60":1}}],["不同的插件有不同的配置",{"2":{"58":1}}],["不会重复初始化",{"2":{"47":1}}],["不支持该请求方式",{"2":{"42":1}}],["不用写一行代码",{"2":{"37":1}}],["已存在该记录",{"2":{"42":1}}],["统一异常处理",{"0":{"41":1},"1":{"42":1}}],["按照简单",{"2":{"103":1}}],["按上面的包结构新增即可",{"2":{"40":1}}],["按规则组装",{"2":{"20":1}}],["为什么选择",{"0":{"107":1}}],["为例",{"2":{"68":1}}],["为排除引入",{"2":{"60":1}}],["为引入",{"2":{"60":1}}],["为主应用",{"2":{"54":1}}],["为插件key",{"2":{"53":1}}],["为对应的值",{"2":{"47":1}}],["为表的字段",{"2":{"47":1}}],["为表的名称",{"2":{"47":1}}],["为业务模块",{"2":{"40":1}}],["为核心模块",{"2":{"40":1}}],["为了使项目能够持续",{"2":{"98":1}}],["为了开发插件如果引入了主应用已经有的maven依赖可以在下面的",{"2":{"60":2}}],["为了方便开发插件和统一插件开发规范",{"2":{"56":1}}],["为了方便获取参数",{"2":{"15":1}}],["为了丰富系统功能",{"2":{"50":1}}],["为了不过多依赖环境",{"2":{"8":1}}],["插件可以在打包的时候将在我们",{"2":{"60":1}}],["插件详解",{"0":{"60":1}}],["插件配置",{"2":{"59":1}}],["插件介绍",{"2":{"59":1}}],["插件",{"2":{"59":1,"112":1}}],["插件钩子",{"2":{"59":1}}],["插件唯一标识",{"2":{"59":1}}],["插件描述",{"2":{"58":1,"59":1}}],["插件运行测试类",{"2":{"57":1}}],["插件信息配置文件",{"2":{"57":1}}],["插件类放在这个包下",{"2":{"57":1}}],["插件包",{"2":{"57":1}}],["插件包可以通过官网下载插件",{"2":{"52":1}}],["插件方法",{"2":{"53":1,"60":1}}],["插件管理",{"2":{"52":1}}],["插件模块",{"2":{"40":1}}],["插件分享等",{"2":{"6":1}}],["插件分享等内容",{"2":{"4":1}}],["角色菜单权限分配",{"2":{"108":1}}],["角色管理",{"2":{"108":1}}],["角色数组",{"2":{"59":1,"76":1}}],["角色",{"2":{"40":1}}],["资源共享",{"2":{"88":1}}],["资源目录下的文件",{"2":{"54":1}}],["资源文件",{"2":{"40":1}}],["资源",{"2":{"40":1,"63":1}}],["菜单管理",{"2":{"108":1}}],["菜单",{"2":{"40":1}}],["└─",{"2":{"40":8,"57":7}}],["└──",{"2":{"18":6}}],["核心包",{"2":{"40":1,"57":1}}],["├─core",{"2":{"57":1}}],["├─",{"2":{"40":15,"57":3}}],["├──",{"2":{"18":1}}],["清晰明了便于管理",{"2":{"39":1}}],["组件会根据字段智能选择",{"2":{"38":1}}],["零代码开发",{"2":{"37":1}}],["提高了代码的可维护性",{"2":{"63":1}}],["提高开发效率",{"2":{"36":1}}],["提示",{"2":{"40":1}}],["提供了极大的灵活性",{"2":{"63":1}}],["提供了简化的业务异常抛出工具",{"2":{"41":1}}],["提供了非常灵活的",{"2":{"21":1}}],["提供了一种高效且可靠的解决方案",{"2":{"8":1}}],["降低开发成本",{"2":{"36":1}}],["推荐",{"2":{"65":2,"110":1}}],["推荐两种快速开发方式",{"2":{"36":1}}],["推荐使用",{"0":{"28":1}}],["文件管理",{"2":{"108":1}}],["文件管理模块",{"2":{"40":1}}],["文件存放路径",{"2":{"96":1}}],["文件根地址",{"2":{"96":1}}],["文件等",{"2":{"63":1}}],["文件上传插件",{"2":{"112":1}}],["文件上传模式",{"2":{"96":1}}],["文件上传相关",{"2":{"96":1}}],["文件上传",{"0":{"95":1},"2":{"62":1,"96":1}}],["文件上传换成云存储",{"2":{"35":1}}],["文件内容",{"2":{"53":1}}],["文件后",{"2":{"47":1}}],["文件",{"2":{"38":1,"40":1,"47":2,"96":1}}],["文档",{"0":{"86":1,"101":1},"2":{"1":1}}],["运行系统",{"0":{"66":1},"1":{"67":1,"68":1,"69":1,"70":1}}],["运行结果",{"2":{"53":1}}],["运行代码生成器",{"2":{"38":1}}],["运行",{"0":{"34":1}}],["运行后端",{"2":{"34":2}}],["运行后端和前端",{"2":{"32":1}}],["运行后端服务",{"0":{"29":1}}],["否则使用",{"2":{"48":1}}],["否则你将无法正常访问你的",{"2":{"33":1}}],["否则这个controller",{"2":{"18":1}}],["让前端能够自动生成eps",{"2":{"33":1}}],["创建实体类生成表",{"2":{"38":1}}],["创建docker",{"2":{"33":1}}],["创建",{"2":{"32":1,"47":1}}],["持久化连接相关配置",{"2":{"30":1}}],["持续添加更多的数据库支持",{"2":{"23":1}}],["$",{"2":{"96":1}}],["$1",{"2":{"30":1}}],["$upstream",{"2":{"30":1}}],["$uri",{"2":{"30":2}}],["$http",{"2":{"30":2}}],["$host$request",{"2":{"30":1}}],["$host",{"2":{"30":2}}],["$proxy",{"2":{"30":2}}],["$remote",{"2":{"30":5}}],["访问http",{"2":{"70":1}}],["访问如果登录页正常出现验证码",{"2":{"32":1}}],["访问",{"2":{"30":1,"69":1}}],["访问域名",{"2":{"27":1}}],["8",{"2":{"53":1,"60":3,"65":1,"68":2}}],["80",{"2":{"34":2}}],["8001",{"2":{"30":1,"34":2,"53":5,"69":2,"86":1}}],["86400s",{"2":{"30":1}}],["8s",{"2":{"23":2}}],["403",{"2":{"74":1}}],["401",{"2":{"74":1}}],["46",{"2":{"69":1}}],["45",{"2":{"69":3}}],["4b57",{"2":{"60":1}}],["47ac",{"2":{"60":1}}],["4fd03504",{"2":{"60":1}}],["4",{"0":{"30":1,"59":1,"70":1},"2":{"60":2,"63":1,"74":1}}],["改成自己的应用名称",{"2":{"29":1}}],["表示访问服务端接口而不是静态资源",{"2":{"30":1}}],["表示",{"2":{"29":2}}],["表单",{"2":{"15":1}}],["方便一张图片使用在多种场景",{"2":{"96":1}}],["方式二",{"0":{"82":1}}],["方式一",{"0":{"79":1},"1":{"80":1,"81":1}}],["方式",{"0":{"31":1},"1":{"32":1,"33":1,"34":1,"35":1},"2":{"31":1,"76":1}}],["方式启动",{"2":{"29":1}}],["方法上",{"0":{"80":1}}],["方法去调用主应用的一些对象方法",{"2":{"53":1}}],["方法第一个参数如果为",{"2":{"42":1}}],["方法",{"2":{"20":1,"53":5}}],["重启生成表",{"2":{"38":1}}],["重启",{"2":{"29":1}}],["重启某个服务",{"2":{"29":1}}],["重写",{"0":{"20":1}}],["重写逻辑",{"2":{"16":2}}],["重写实现",{"0":{"16":1}}],["停止某个服务",{"2":{"29":1}}],["命令行安装",{"2":{"29":1}}],["到后端服务",{"2":{"27":1}}],["所以需要配置",{"2":{"27":1}}],["所有的",{"2":{"12":1}}],["安全考虑生产环境不会自动初始化数据库",{"2":{"27":1}}],["安装云存储插件",{"2":{"95":1}}],["安装插件将打包好的",{"2":{"62":1}}],["安装插件",{"0":{"62":1}}],["安装插件之后",{"2":{"53":1}}],["安装后",{"2":{"46":1}}],["安装",{"0":{"52":1},"2":{"28":1}}],["安装依赖",{"0":{"28":1},"2":{"27":1,"70":1}}],["安装宝塔",{"2":{"27":1}}],["恭喜你",{"2":{"27":1,"32":1}}],["反向代理",{"2":{"27":2}}],["编写实体类",{"2":{"38":1}}],["编译打包后端服务",{"2":{"27":1}}],["编码",{"0":{"7":1},"2":{"107":1}}],["上传模式",{"2":{"96":1}}],["上传前后端代码到服务器",{"2":{"27":1}}],["上面只是个例子",{"2":{"58":1}}],["上加了这个注解后",{"2":{"20":1}}],["官方多环境配置文档",{"2":{"27":1}}],["官网文档",{"2":{"21":1}}],["官网",{"2":{"1":1,"28":1}}],["查看服务的输出日志",{"2":{"29":1}}],["查看",{"2":{"27":1}}],["查询该用户所具有的权限并缓存",{"2":{"74":1}}],["查询模式querymodeenum",{"2":{"14":1}}],["查询连表字段",{"2":{"14":1}}],["查询另一张表的字段",{"2":{"14":1}}],["查询配置",{"0":{"14":1}}],["查询列表",{"2":{"13":1}}],["查询条件过滤",{"2":{"13":1,"15":1,"16":1,"86":1}}],["本地上传配置",{"2":{"96":1}}],["本地上传",{"2":{"95":1}}],["本地配置完数据库运行",{"2":{"27":1,"32":1}}],["本部署教程以",{"2":{"26":1}}],["本身",{"2":{"21":1}}],["以往的框架已经越来越不能满足现代化的开发需求",{"2":{"107":1}}],["以",{"2":{"68":1}}],["以前该怎么写还是怎么写",{"2":{"45":1}}],["以下包会打入jar",{"2":{"60":1}}],["以下是我们的一些计划",{"2":{"111":1}}],["以下是",{"2":{"31":1}}],["以下教程以",{"2":{"25":1}}],["以宝塔为例",{"0":{"27":1,"32":1}}],["以上包在主应用已经引入",{"2":{"60":1}}],["以上内容来自第三方相关产品的官方文档或第三方平台",{"2":{"22":1}}],["以上是针对entity单表查询方式",{"2":{"14":1}}],["低价云服务器推荐",{"2":{"25":1}}],["🔥",{"2":{"25":1}}],["因为有你们的支持",{"2":{"113":1}}],["因为这可能会造成数据丢失",{"2":{"24":1}}],["因此如果你需要开发",{"2":{"43":1}}],["因此会带来指数级的性能增长",{"2":{"21":1}}],["因此会带来更高的自主性",{"2":{"21":1}}],["切勿在生产环境开启自动建表功能",{"2":{"24":1}}],["并异步进行刷新用户权限",{"2":{"115":1}}],["并可以在init方法中初始化返回字段类型及数据组装函数定义",{"2":{"115":1}}],["并将用户信息存在整个请求过程中的",{"2":{"76":1}}],["并实现",{"2":{"53":1,"60":1}}],["并实现值的插入",{"2":{"47":1}}],["并定义表数据",{"2":{"47":1}}],["并调用大模型对其进行翻译",{"2":{"46":1}}],["并且支持表字段的修改",{"2":{"24":1}}],["并重写了",{"2":{"20":1}}],["节省了大量手动工作",{"2":{"24":1}}],["尤其是开发过程中频繁的新增表及变更表结构",{"2":{"24":1}}],["列出当前的服务",{"2":{"29":1}}],["列的配置",{"2":{"24":1}}],["列表查询",{"2":{"14":1}}],["而不用一味地堆功能",{"2":{"50":1}}],["而不需要关心数据库的表",{"2":{"24":1}}],["而且不需要改变任何原有代码",{"2":{"45":1}}],["而是也非常不灵活",{"2":{"43":1}}],["而是对它做一层封装",{"2":{"20":1}}],["有且只能有一个类被",{"2":{"60":1}}],["有时候开发时的配置和生产环境的配置是不一样的",{"2":{"54":1}}],["有些功能模块上线时",{"2":{"47":1}}],["有了该文件",{"2":{"33":1}}],["有一项重要的能力就是表结构自动维护",{"2":{"24":1}}],["有兴趣的可以关注我们",{"2":{"4":1}}],["用法",{"2":{"94":1}}],["用来判定用户是否有此权限",{"2":{"74":1}}],["用configattribute的集合作为value",{"2":{"74":1}}],["用权限的path作为map的key",{"2":{"74":1}}],["用户是系统操作者",{"2":{"108":1}}],["用户管理",{"2":{"108":1}}],["用户管理模块",{"2":{"40":1}}],["用户",{"2":{"76":1}}],["用户详情",{"2":{"74":1}}],["用户名",{"2":{"76":1}}],["用户名不存在",{"2":{"74":1}}],["用户名已存在",{"2":{"41":1,"42":3}}],["用户登录",{"2":{"74":1}}],["用户id",{"2":{"14":1}}],["用过",{"2":{"24":1}}],["理论上你只需修改一些不兼容的代码就可以正常运行了",{"2":{"23":1}}],["那样工作量太大了",{"2":{"23":1}}],["是否开启多租户",{"2":{"92":1}}],["是否支持在微服务项目下进行",{"2":{"22":1}}],["是一种软件架构模式",{"2":{"87":1}}],["是",{"2":{"63":1}}],["是插件的配置信息",{"2":{"58":1}}],["是软件国际化的标准缩写",{"2":{"44":1}}],["是具体的业务框架",{"2":{"23":1}}],["虽然",{"2":{"23":1}}],["星瑞格数据库",{"2":{"23":1}}],["华为",{"2":{"23":1}}],["华库",{"2":{"23":1}}],["行云数据库",{"2":{"23":1}}],["瀚高数据库",{"2":{"23":1}}],["神通数据库",{"2":{"23":1}}],["人大金仓数据库",{"2":{"23":1}}],["kyi=",{"2":{"53":1}}],["ky",{"2":{"46":1}}],["km",{"2":{"46":1}}],["ku",{"2":{"46":1}}],["kk",{"2":{"46":1}}],["ko",{"2":{"46":1}}],["kingbasees",{"2":{"23":1}}],["keyname",{"2":{"47":2}}],["keyword",{"2":{"14":1}}],["keywordlikefields",{"2":{"14":1}}],["key",{"2":{"9":1,"30":1,"47":1,"48":3,"49":3,"53":4,"58":1,"59":1,"94":2}}],["虚谷数据库",{"2":{"23":1}}],["达梦数据库",{"2":{"23":1}}],["及以上数据库",{"2":{"23":1}}],["及以下数据库",{"2":{"23":1}}],["及更高性能",{"2":{"22":1}}],["描述",{"2":{"23":1,"94":1}}],["欢迎联系我们",{"2":{"111":1}}],["欢迎提交pr",{"2":{"101":1}}],["欢迎纠正",{"2":{"22":1}}],["欢迎加入我们大家庭一起讨论",{"2":{"2":1}}],["若有错误",{"2":{"22":1}}],["项目中常见的问题",{"2":{"109":1}}],["项目是开源免费",{"2":{"98":1}}],["项目是前后端分离的",{"2":{"67":1}}],["项目启动自动插入数据参考",{"2":{"94":1}}],["项目按照模块化的方式组织",{"2":{"39":1}}],["项目部署",{"0":{"25":1},"1":{"26":1,"27":1,"28":1,"29":1,"30":1,"31":1,"32":1,"33":1,"34":1,"35":1}}],["项目",{"2":{"22":1}}],["非低代码",{"2":{"37":1}}],["非",{"2":{"22":1}}],["quot",{"2":{"22":2,"41":2,"42":2}}],["querymodeenum",{"2":{"14":2}}],["querywrapper",{"2":{"14":6,"16":3,"21":1,"22":1}}],["query",{"2":{"11":1,"14":1}}],["和",{"2":{"22":1,"44":1}}],["和传统的",{"2":{"16":1}}],["借助其他框架或收费",{"2":{"22":1}}],["字典管理",{"2":{"108":1}}],["字典信息",{"2":{"81":1}}],["字典",{"2":{"46":1}}],["字典回写",{"2":{"22":1}}],["字段",{"2":{"59":1,"76":1}}],["字段解释",{"0":{"59":1}}],["字段模块",{"2":{"40":1}}],["字段加密",{"2":{"22":1}}],["字段权限",{"2":{"22":1}}],["字段的",{"2":{"22":1}}],["字段全匹配",{"2":{"14":1}}],["收费",{"2":{"22":4}}],["✔️",{"2":{"22":4}}],["审计",{"2":{"22":1}}],["乐观锁",{"2":{"22":1}}],["乐观锁更新",{"2":{"21":1}}],["未知",{"2":{"22":1}}],["传输",{"2":{"22":1}}],["无论是注解在方法还是类上",{"2":{"81":1}}],["无需更改原有代码详情",{"2":{"114":1}}],["无需授权的",{"2":{"98":1}}],["无需安装",{"2":{"68":1}}],["无需手动配置",{"2":{"45":1}}],["无需手动通过",{"2":{"42":1}}],["无需额外安装软件",{"2":{"8":1}}],["无法做到全部支持",{"2":{"23":1}}],["无其他第三方依赖",{"2":{"22":1}}],["配置完数据库直接启动",{"2":{"110":1}}],["配置系统菜单",{"2":{"108":1}}],["配置文件",{"0":{"82":1}}],["配置文件位于src",{"2":{"68":1}}],["配置数据库",{"0":{"68":1}}],["配置插件信息",{"2":{"58":1}}],["配置点3",{"2":{"30":1}}],["配置点2",{"2":{"30":1}}],["配置点1",{"2":{"30":1}}],["配置示例",{"0":{"30":1}}],["配置淘宝镜像",{"2":{"28":1}}],["配置",{"0":{"54":1,"73":1},"2":{"22":1,"27":1}}],["复合主键",{"2":{"22":1}}],["生成",{"2":{"38":1}}],["生成前端代码",{"2":{"38":1}}],["生成后端代码",{"2":{"38":1}}],["生成策略",{"2":{"22":1}}],["生成的路由前缀为",{"2":{"18":1}}],["❌",{"2":{"22":30}}],["✅国际化",{"2":{"46":1}}],["✅",{"2":{"22":51}}],["功能",{"2":{"110":1}}],["功能几乎跟nodejs",{"2":{"97":1}}],["功能或特点",{"2":{"22":1}}],["功能对比",{"0":{"22":1}}],["拦截器",{"2":{"21":1}}],["没有可初始化的插件",{"2":{"69":1}}],["没有任何的",{"2":{"21":1}}],["没有任何",{"2":{"21":1}}],["没有设置astype",{"2":{"14":1}}],["高棉语",{"2":{"46":1}}],["高性能",{"2":{"21":1}}],["高效的缓存解决方案",{"2":{"8":1}}],["逻辑删除",{"2":{"21":1,"22":1}}],["多个租户共享同一套应用程序代码和基础设施",{"2":{"88":1}}],["多语言是需要前后端共同支持的",{"2":{"45":1}}],["多语言的支持已经成为了一个必备的功能",{"2":{"44":1}}],["多租户的数据隔离有许多种方案",{"2":{"90":1}}],["多租户",{"0":{"87":1},"2":{"22":1,"87":1}}],["多数据源是否支持",{"2":{"22":2}}],["多数据源支持",{"2":{"22":1}}],["多种",{"2":{"22":1}}],["多张表",{"2":{"22":1}}],["多主键",{"2":{"21":1}}],["多表查询",{"2":{"21":1,"22":3}}],["稳定性越差",{"2":{"21":1}}],["依赖越多",{"2":{"21":1}}],["把控性和稳定性",{"2":{"21":1}}],["再无任何第三方依赖",{"2":{"21":1}}],["除了",{"2":{"21":1,"22":1,"23":1}}],["更新",{"0":{"113":1},"1":{"114":1,"115":1,"116":1,"117":1,"118":1}}],["更灵活",{"2":{"21":1}}],["更轻量",{"2":{"21":1,"22":2}}],["更加强大的",{"2":{"21":1}}],["更加简洁",{"2":{"12":1}}],["详细用法请查看",{"2":{"21":1}}],["集成了比",{"2":{"21":1}}],["根据",{"2":{"24":1}}],["根据一定规则生成",{"2":{"20":1}}],["根据列表查询单个信息",{"2":{"13":1}}],["自动编码功能",{"2":{"117":1}}],["自动编码",{"2":{"114":1}}],["自动生成前端页面",{"2":{"38":1}}],["自动映射成数据库的表结构",{"2":{"24":1}}],["自动建表",{"0":{"24":1}}],["自带的注解",{"2":{"20":1}}],["自定义路由注解",{"0":{"19":1}}],["自定义类型默认为",{"2":{"14":1}}],["自定义场景主要使用在关联表查询插件",{"2":{"14":1}}],["自定义查询模式",{"2":{"14":1}}],["自定义的查询方式",{"2":{"14":1}}],["包或其内部的类和资源",{"2":{"63":1}}],["包或类",{"2":{"63":1}}],["包具有以下几个显著的优势",{"2":{"63":1}}],["包的位置和版本",{"2":{"63":1}}],["包括本地文件系统",{"2":{"63":1}}],["包括一些核心的组件工具",{"2":{"40":1}}],["包时会想该插件注入",{"2":{"53":1}}],["包下创建",{"2":{"40":1}}],["包下加一级",{"2":{"18":1}}],["包",{"2":{"18":1,"40":1,"63":3}}],["在线",{"2":{"108":1}}],["在线演示",{"2":{"7":1}}],["在修改数据之前或之后做一些处理",{"2":{"85":1}}],["在配置文件中加需要忽略的路径",{"2":{"82":1}}],["在项目编译的时候会自动生成这些文件",{"2":{"110":1}}],["在项目根目录下",{"2":{"70":1}}],["在项目启动的时候会去加载该文件",{"2":{"47":1}}],["在后台插件管理页面",{"2":{"62":1}}],["在后台插件管理里可以动态修改",{"2":{"58":1}}],["在执行打包的过程",{"2":{"60":1}}],["在我们脚手架上你可以发现",{"2":{"60":1}}],["在开发过程中如果需要引入第三方类库",{"2":{"60":1}}],["在开发环境下重启",{"2":{"46":1}}],["在提供的插件脚手架中已经应用了常用的依赖如",{"2":{"60":1}}],["在插件导入时才能被识别到",{"2":{"60":1}}],["在打包的时候选择要打包的插件",{"2":{"57":1}}],["在加载",{"2":{"53":1}}],["在controller接口上加上",{"2":{"49":1}}],["在某个版本需要新增数据的话",{"2":{"47":1}}],["在官网下载并安装国际化多语言插件",{"2":{"46":1}}],["在新增功能模块时",{"2":{"40":1}}],["在",{"2":{"21":1,"40":2,"42":1,"47":1,"61":1,"63":1}}],["在任何一个系统中",{"2":{"21":1}}],["在历史版本中需在",{"2":{"18":1}}],["27",{"0":{"118":1}}],["2b8",{"2":{"68":1}}],["26",{"2":{"60":3}}],["2025",{"0":{"114":1}}],["2024",{"0":{"115":1,"116":1,"117":1,"118":1},"2":{"18":1,"53":8,"69":4}}],["20",{"2":{"94":1}}],["200",{"2":{"30":1}}],["2",{"0":{"28":1,"33":1,"53":1,"57":1,"68":1,"93":1,"116":1},"2":{"46":1,"60":5,"63":2,"74":1}}],["256x256",{"2":{"59":1}}],["25",{"0":{"115":1},"2":{"18":1}}],["31908",{"2":{"69":4}}],["383+08",{"2":{"69":1}}],["382+08",{"2":{"69":1}}],["38",{"2":{"69":4}}],["3306",{"2":{"68":1}}],["32",{"2":{"60":1}}],["32615",{"2":{"53":8}}],["3c64059230d0",{"2":{"60":1}}],["3600s",{"2":{"30":3}}],["3",{"0":{"29":1,"34":1,"54":1,"58":1,"69":1,"115":1},"2":{"18":1,"46":1,"60":1,"63":1,"65":2,"69":1,"74":1,"104":1,"105":1}}],["3000s",{"2":{"30":2}}],["302",{"2":{"30":1}}],["301",{"2":{"30":1}}],["304",{"2":{"30":1}}],["30",{"2":{"11":1}}],["该功能主要完成系统用户配置",{"2":{"108":1}}],["该接口需要登录鉴权",{"2":{"49":1}}],["该接口解析的前缀则是",{"2":{"18":1}}],["该文件是前端自动扫描后端接口生成的",{"2":{"33":1}}],["该类继承了",{"2":{"20":1}}],["该父类已经实现了以下六个基础方法",{"2":{"12":1}}],["同时如果个别接口需要忽略记录请求日志",{"2":{"71":1}}],["同级",{"2":{"70":1}}],["同级下有个",{"2":{"18":1}}],["同样也可以对",{"2":{"16":1}}],["转成小写替换掉",{"2":{"18":1}}],["与前端紧密结合",{"2":{"95":1}}],["与其它实现方案不同的是",{"2":{"45":1}}],["与",{"2":{"18":1,"72":1}}],["ximu",{"2":{"114":1}}],["x26",{"2":{"68":2}}],["xml",{"2":{"40":1,"60":2,"61":2}}],["x",{"2":{"30":7,"53":1,"105":1,"118":1}}],["xcloud",{"2":{"23":1}}],["xugu",{"2":{"23":1}}],["xxxxx",{"2":{"54":2}}],["xxx",{"2":{"18":3,"53":2,"58":2}}],["x3c",{"2":{"13":1,"14":4,"15":1,"16":5,"20":1,"42":2,"53":1,"60":81,"61":4,"74":13,"86":1,"94":1}}],["模块化",{"2":{"63":1}}],["模块包",{"2":{"40":1}}],["模块名和",{"2":{"18":1}}],["模块名",{"2":{"18":2}}],["模块目录",{"2":{"18":1}}],["│─",{"2":{"57":1}}],["│",{"2":{"18":17,"40":36,"57":12}}],["原理参考美团点评分布式id",{"2":{"94":1}}],["原理",{"0":{"17":1,"74":1},"1":{"18":1,"19":1,"20":1}}],["原生",{"2":{"9":1}}],["接口的请求入参日志",{"2":{"108":1}}],["接口",{"2":{"18":1,"33":1}}],["接口路由规则",{"0":{"18":1}}],["接口到前端页面的一键生成",{"2":{"7":1,"37":1}}],["接下来我们看看实现的原理",{"2":{"16":1}}],["对系统中经常使用的一些较为固定的数据进行维护",{"2":{"108":1}}],["对系统动态配置常用参数",{"2":{"108":1}}],["对于需要租户隔离的表",{"2":{"93":1}}],["对数据进行隔离",{"2":{"90":1}}],["对应实体",{"2":{"85":2}}],["对应插件内的方法",{"2":{"53":1}}],["对应请求参数中的",{"2":{"14":1}}],["对应请求参数中同名参数",{"2":{"14":1}}],["对",{"2":{"22":1}}],["对比一下是简化了不少",{"2":{"16":1}}],["进行重写",{"2":{"16":1}}],["中获得",{"2":{"76":1}}],["中实现动态加载",{"2":{"63":1}}],["中的",{"2":{"61":1}}],["中排除掉不打入jar",{"2":{"60":2}}],["中重写方法",{"2":{"16":1}}],["中加非存储数据库的字段",{"2":{"14":1}}],["r1",{"2":{"114":1}}],["rawpassword",{"2":{"74":4}}],["rich",{"2":{"47":1}}],["ru",{"2":{"46":1}}],["runtimeexception",{"2":{"60":1}}],["run",{"2":{"34":2,"47":1,"70":1}}],["roleids",{"2":{"74":3,"76":1}}],["ro",{"2":{"46":1}}],["root",{"2":{"29":1,"30":1,"68":1}}],["row",{"2":{"22":1}}],["rpc",{"2":{"22":1}}],["r",{"2":{"15":2,"16":1,"42":17,"49":2,"76":1,"80":2,"96":4}}],["refreshtoken可以当token使用问题",{"2":{"116":1}}],["refreshexpire",{"2":{"73":1}}],["replace",{"2":{"74":1}}],["replaceall",{"2":{"74":1}}],["record",{"2":{"71":1}}],["receive",{"2":{"49":3}}],["recycle",{"2":{"40":1}}],["reentrantlock",{"2":{"48":1}}],["required",{"2":{"96":1}}],["requiredargsconstructor",{"2":{"47":1,"49":1,"53":2,"96":1}}],["requirenonnull",{"2":{"49":1}}],["requestpart",{"2":{"96":1}}],["requestparam",{"2":{"53":3}}],["requestparams",{"2":{"13":1,"14":2,"15":4,"16":5,"42":4,"49":2,"71":1,"76":2,"85":4,"86":1}}],["requestmatchers",{"2":{"74":1}}],["requestmappinginfo",{"2":{"20":2}}],["requestmappinghandlermapping",{"2":{"20":2}}],["requestmapping",{"2":{"19":2,"53":1}}],["requestcontextholder",{"2":{"49":1}}],["requestattribute",{"2":{"15":1,"49":1,"76":1}}],["request",{"2":{"13":1,"14":2,"15":1,"16":1,"49":2,"71":3,"74":2,"86":1,"96":2}}],["requests",{"2":{"0":1}}],["remark",{"2":{"47":2}}],["remote",{"2":{"30":2}}],["rewrite",{"2":{"30":1}}],["readme",{"2":{"58":2,"59":1}}],["readbytes",{"2":{"53":1}}],["read",{"2":{"30":2}}],["real",{"2":{"30":2}}],["registry",{"2":{"28":2}}],["redirect",{"2":{"30":1}}],["redis",{"2":{"8":6,"35":1}}],["redshift",{"2":{"23":2}}],["relationonetomany",{"2":{"14":2}}],["relations",{"2":{"14":2}}],["response",{"2":{"74":2}}],["responsebody",{"2":{"53":2}}],["restaccessdeniedhandler",{"2":{"74":3}}],["restart",{"2":{"29":2}}],["restcontrolleradvice",{"2":{"42":1}}],["result",{"2":{"11":3,"53":8}}],["resources",{"2":{"40":1,"47":1,"54":2,"57":1,"68":1,"96":1}}],["resource",{"2":{"10":1,"71":1,"74":10}}],["return",{"2":{"9":1,"10":1,"11":3,"15":1,"16":2,"20":1,"42":8,"49":2,"53":2,"60":1,"74":13,"80":1,"96":2}}],["将由以下这个类实现自动配置模块路由",{"2":{"20":1}}],["将",{"2":{"15":1}}],["gt",{"2":{"65":3,"68":1,"93":1,"104":3,"110":3,"114":1}}],["grantedauthority>",{"2":{"74":1}}],["graalvm",{"2":{"65":1,"104":1}}],["groupid>org",{"2":{"60":1}}],["groupid>com",{"2":{"60":1}}],["groupid>cn",{"2":{"60":1}}],["groupid>",{"2":{"60":3}}],["greenplum",{"2":{"23":2}}],["gitcode",{"2":{"99":1,"100":1}}],["gitee",{"2":{"56":1,"99":1,"100":1,"101":1}}],["github",{"2":{"56":1,"99":1,"100":1,"101":1}}],["g",{"2":{"28":1,"29":1}}],["goal>",{"2":{"60":1}}],["goal>shade",{"2":{"60":1}}],["goals>",{"2":{"60":2}}],["goldilocks",{"2":{"23":2}}],["goodslist",{"2":{"14":1}}],["gbase",{"2":{"23":3}}],["gauss",{"2":{"23":2}}],["getbytes",{"2":{"74":2}}],["geturls",{"2":{"74":1}}],["getusername",{"2":{"42":4,"74":3}}],["getsecureobjectclass",{"2":{"74":1}}],["getstatus",{"2":{"74":2}}],["getstr",{"2":{"15":1}}],["getroles",{"2":{"74":1}}],["getresponse",{"2":{"74":1}}],["getresourceasstream",{"2":{"53":1}}],["getrequesturl",{"2":{"74":1}}],["getrequesturi",{"2":{"49":1}}],["getrequest",{"2":{"49":1,"74":1}}],["getrequestattributes",{"2":{"49":1}}],["getdepartmentidsbyroleids",{"2":{"74":1}}],["getperms",{"2":{"74":1}}],["getparent",{"2":{"53":1}}],["getparentresource",{"2":{"53":2}}],["getpasswordv",{"2":{"74":1}}],["getpassword",{"2":{"42":2,"74":1}}],["getapp",{"2":{"80":1}}],["getadminuserinfo",{"2":{"76":1}}],["getadminusername",{"2":{"76":1}}],["getauthenticationmanager",{"2":{"74":1}}],["getallconfigattributes",{"2":{"74":1}}],["getallperms",{"2":{"74":1}}],["getattributes",{"2":{"74":1}}],["getattribute",{"2":{"71":1}}],["getabsolutepath",{"2":{"63":1}}],["getannotationsbytype",{"2":{"20":1}}],["getinstance",{"2":{"53":1}}],["getid",{"2":{"42":2,"74":6}}],["getone",{"2":{"42":2,"74":1}}],["get等请求方式是否正确",{"2":{"42":1}}],["getmode",{"2":{"96":1}}],["getmapping",{"2":{"76":1,"80":1,"96":1}}],["getmappingformethod",{"0":{"20":1},"2":{"20":3}}],["getmessage",{"2":{"42":7}}],["getchain",{"2":{"74":1}}],["getcontextclassloader",{"2":{"63":1}}],["getcode",{"2":{"42":1}}],["getclassloader",{"2":{"53":1}}],["getclass",{"2":{"53":1}}],["getcurrentuserid",{"2":{"14":1,"49":2,"76":1,"77":1}}],["getter",{"2":{"14":1}}],["getnum",{"2":{"11":1}}],["getlogistics",{"2":{"11":1}}],["get",{"2":{"10":1,"11":2,"13":1,"14":2,"49":1,"53":2,"60":1,"74":1}}],["订单id",{"2":{"94":1}}],["订单商品列表",{"2":{"14":1}}],["订单信息",{"2":{"14":1}}],["订单产品列表也一并查出",{"2":{"14":1}}],["如文件上传",{"2":{"117":1}}],["如支付",{"2":{"107":1}}],["如不占用主服务器带宽",{"2":{"96":1}}],["如阿里云",{"2":{"95":1}}],["如需启用调整为",{"2":{"94":2}}],["如我们这边示例使用到了中文转拼音",{"2":{"60":1}}],["如",{"2":{"35":1,"95":1,"96":1}}],["如下表格所示",{"2":{"23":1}}],["如下面这个订单查询",{"2":{"14":1}}],["如果方便请点下",{"2":{"113":1}}],["如果你有更好的建议",{"2":{"111":1}}],["如果你是自动化部署",{"2":{"33":1}}],["如果文档有缺失",{"2":{"101":1}}],["如果登录的用户token信息有携带tenantid",{"2":{"90":1}}],["如果不在权限表中则放行",{"2":{"74":1}}],["如果不满足需求",{"2":{"16":1}}],["如果项目中启用了redis",{"2":{"48":1}}],["如果同一张表历史已经有初始化过数据",{"2":{"47":1}}],["如果这个文件存在",{"2":{"46":1}}],["如果没效",{"2":{"30":1}}],["如果一切正常",{"2":{"27":1}}],["如果在权限表中",{"2":{"74":1}}],["如果在原文件直接修改将不生效",{"2":{"47":1}}],["如果在",{"2":{"18":1}}],["如果我们有需要连表查询",{"2":{"14":1}}],["如果我们的项目对你有用",{"2":{"2":1}}],["web设置配合使用",{"2":{"96":1}}],["web设置",{"2":{"96":1}}],["web",{"2":{"53":4,"96":1}}],["wrappers",{"2":{"42":2,"74":1}}],["without",{"2":{"60":1}}],["with",{"2":{"14":1}}],["wuliu",{"2":{"11":1}}],["还可以对图片进行各种如压缩",{"2":{"96":1}}],["还可以了解到一些前沿的技术",{"2":{"4":1}}],["还有",{"2":{"14":1}}],["也支持绝对路径",{"2":{"96":1}}],["也可以注解在类上",{"2":{"81":1}}],["也可以使用别人开发的插件",{"2":{"50":1}}],["也可以自己定义vo",{"2":{"14":1}}],["也就是后续你有新增相关的内容",{"2":{"46":1}}],["也对此做了支持",{"2":{"44":1}}],["也希望广大开发者粉丝帮助完善文档",{"2":{"0":1}}],["实际开发中可以根据自己的需求来配置",{"2":{"58":1}}],["实现功能可插拔",{"2":{"108":1}}],["实现应用程序的快速扩展和升级",{"2":{"63":1}}],["实现方法",{"2":{"63":1}}],["实现动态加载的技术方案",{"2":{"63":1}}],["实现原理",{"0":{"63":1},"2":{"46":1}}],["实现",{"0":{"45":1,"89":1},"1":{"90":1},"2":{"48":1}}],["实现简单功能从",{"2":{"7":1,"37":1}}],["实例数量",{"2":{"29":1}}],["实体需以",{"2":{"47":1}}],["实体中",{"2":{"14":1}}],["实体",{"2":{"14":1,"24":1}}],["默认是相对路径",{"2":{"96":1}}],["默认禁用",{"2":{"94":2}}],["默认关闭",{"2":{"92":1}}],["默认集成springdoc",{"2":{"86":1}}],["默认忽略app端接口",{"2":{"71":1}}],["默认账户密码",{"2":{"70":1}}],["默认的日志位置",{"2":{"29":1}}],["默认实现了通用的六个接口方法",{"2":{"16":1}}],["默认实现了两种缓存",{"2":{"8":1}}],["默认为map",{"2":{"14":1}}],["默认为entity",{"2":{"14":1}}],["默认转成map",{"2":{"14":1}}],["连表查询",{"2":{"14":1}}],["utf",{"2":{"53":1}}],["util",{"2":{"53":4}}],["uniindex",{"2":{"94":1}}],["union",{"2":{"22":2}}],["unlock",{"2":{"48":1,"49":1}}],["ug",{"2":{"46":1}}],["uk",{"2":{"46":1}}],["ui",{"2":{"38":1,"82":1,"86":1,"106":1}}],["uploadmode",{"2":{"96":2}}],["uploadpath",{"2":{"96":1}}],["upload",{"2":{"59":1,"82":1,"96":5}}],["upgrade",{"2":{"30":6}}],["updates",{"2":{"53":1}}],["update",{"2":{"12":1,"13":1,"14":1,"15":1,"16":1,"81":1,"86":1}}],["uri$is",{"2":{"30":1}}],["urlclassloader",{"2":{"63":2}}],["url",{"2":{"15":1,"63":3,"68":1,"74":2,"96":1}}],["uxdb",{"2":{"23":1}}],["useunicode=true",{"2":{"68":1}}],["useplugin",{"2":{"53":2}}],["usecache",{"2":{"53":2}}],["usestatus",{"2":{"14":1}}],["users",{"2":{"96":2}}],["userinfo",{"2":{"74":1,"76":2}}],["userid",{"2":{"14":1,"76":2,"77":1}}],["userdetails",{"2":{"74":2}}],["userdetailsservice",{"2":{"74":4}}],["usernamepasswordauthenticationfilter",{"2":{"74":1}}],["usernamenotfoundexception",{"2":{"74":2}}],["username",{"2":{"68":1,"74":2,"76":2}}],["user",{"2":{"14":5,"15":2,"18":2,"40":1}}],["epsevent",{"2":{"69":1}}],["eps",{"2":{"69":2,"80":2}}],["eps识别不了",{"2":{"18":1}}],["eo",{"2":{"46":1}}],["eu",{"2":{"46":1}}],["et",{"2":{"46":1}}],["element",{"2":{"106":1}}],["else",{"2":{"53":1}}],["el",{"2":{"46":1}}],["es",{"2":{"46":1}}],["enable",{"2":{"92":1,"94":1}}],["enable修改为",{"2":{"92":1}}],["enablewebsecurity",{"2":{"74":1}}],["encodedpassword",{"2":{"74":2}}],["encode",{"2":{"74":1}}],["entrypointunauthorizedhandler",{"2":{"74":3}}],["entity",{"2":{"14":8,"22":2,"40":2,"42":12,"47":1}}],["en",{"2":{"46":1}}],["error",{"2":{"42":10}}],["e",{"2":{"42":19,"60":2}}],["expression",{"2":{"60":2}}],["expire",{"2":{"73":1}}],["expiretime",{"2":{"48":1,"49":1}}],["expires",{"2":{"30":1}}],["excluding",{"2":{"60":14}}],["exclude>cn",{"2":{"60":2}}],["exclude>jakarta",{"2":{"60":1}}],["exclude>io",{"2":{"60":4}}],["exclude>",{"2":{"60":16}}],["exclude>org",{"2":{"60":9}}],["excludes>",{"2":{"60":2}}],["exceptionhandling",{"2":{"74":1}}],["exceptionhandler",{"2":{"42":6}}],["exception",{"2":{"42":2,"60":1,"74":2}}],["execution",{"2":{"110":1}}],["execution>",{"2":{"60":2}}],["executions>",{"2":{"60":2}}],["exec",{"2":{"53":5}}],["extern",{"2":{"53":1}}],["extends",{"2":{"13":1,"14":3,"15":1,"16":2,"20":1,"53":1,"60":1,"74":1,"86":1,"94":1}}],["extractedmenu",{"2":{"47":1}}],["extracteddb",{"2":{"47":1}}],["equals",{"2":{"74":1}}],["eq",{"2":{"14":2,"42":2,"74":2}}],["针对这种场景",{"2":{"14":1}}],["zh",{"2":{"14":3,"46":2}}],["false",{"2":{"92":1,"94":1,"96":1}}],["favicon",{"2":{"71":1,"82":1}}],["fa",{"2":{"46":1}}],["frameoptionsconfig",{"2":{"74":1}}],["frameoptions",{"2":{"74":1}}],["fr",{"2":{"46":1}}],["front",{"2":{"30":1}}],["from",{"2":{"14":1,"22":1,"60":13}}],["form",{"2":{"96":1}}],["format",{"2":{"60":7}}],["for",{"2":{"30":4,"69":1,"74":2}}],["forwarded",{"2":{"30":4}}],["fluent",{"2":{"22":1}}],["flex版本",{"2":{"114":1}}],["flex",{"2":{"14":3,"21":2,"22":1,"23":2,"92":1,"105":1,"110":1}}],["filterconfig",{"2":{"74":2}}],["filterchain",{"2":{"71":3,"74":1}}],["filterinvocation",{"2":{"74":5}}],["filterinvocationsecuritymetadatasource",{"2":{"74":2}}],["filter",{"2":{"71":1,"74":1}}],["fileuploadstrategyfactory",{"2":{"96":4}}],["filepath",{"2":{"54":1}}],["files",{"2":{"30":1,"96":2}}],["file",{"2":{"8":1,"63":2,"96":4}}],["finally",{"2":{"49":1,"74":1}}],["final",{"2":{"48":1,"49":1,"94":1,"96":1}}],["fi",{"2":{"46":1,"74":7}}],["firebird",{"2":{"23":2}}],["fieldeq",{"2":{"14":1}}],["具体看",{"2":{"14":2}}],["返回给",{"2":{"20":1}}],["返回字段",{"2":{"14":1}}],["返回哪些字段等",{"2":{"13":1,"15":1,"16":1,"86":1}}],["需和上面的",{"2":{"96":1}}],["需要提取初始化到上面那个",{"2":{"94":1}}],["需要对应的表实体继承对象进行调整",{"2":{"93":1}}],["需要手动开启",{"2":{"92":1}}],["需要分别拉取前后端代码到本地",{"2":{"67":1}}],["需要初始化一些数据",{"2":{"47":1}}],["需要确保前端和后端在本地运行过一次",{"2":{"33":1}}],["需要通过下面的",{"2":{"14":1}}],["需要组装数据",{"2":{"14":1}}],["需要返回的字段分布在各个表里",{"2":{"14":1}}],["需要模糊查询的字段",{"2":{"14":1}}],["需安装",{"2":{"8":1}}],["604800",{"2":{"73":1}}],["6",{"2":{"13":1,"60":12,"65":1,"104":1}}],["6379",{"2":{"8":1}}],["等包",{"2":{"40":1}}],["等待数据库初始化完成",{"2":{"27":1,"32":1}}],["等等",{"2":{"22":1}}],["等参数封装在了一个",{"2":{"15":1}}],["等",{"2":{"13":1,"22":1,"27":1,"38":1,"60":2}}],["删除某个服务",{"2":{"29":1}}],["删除",{"2":{"13":1,"108":1}}],["新增后台扩展插件",{"2":{"117":1}}],["新增一个",{"2":{"40":1}}],["新增",{"2":{"13":1,"114":2,"115":4,"116":3,"117":1}}],["这将会给我们带来更多的动力",{"2":{"113":1}}],["这些方式都可以解决这个问题",{"2":{"110":1}}],["这边使用到了",{"2":{"60":1}}],["这会使得打包结果很臃肿",{"2":{"60":1}}],["这个可能会给你带来巨大的帮助",{"2":{"43":1}}],["这个解析规则在",{"2":{"18":1}}],["这让我们可以可以专注于业务逻辑和实体",{"2":{"24":1}}],["这样就需要在entity加上另一张表的的字段",{"2":{"14":1}}],["这样就默认实现了以下六个接口",{"2":{"13":1}}],["这是",{"2":{"0":1}}],["v3",{"2":{"82":1}}],["vi",{"2":{"46":1}}],["v8",{"0":{"44":1,"87":1,"114":1}}],["vue3",{"2":{"106":1}}],["vue",{"2":{"33":1,"34":2,"100":3}}],["verify",{"2":{"60":1}}],["version>3",{"2":{"60":1}}],["version>2",{"2":{"60":1}}],["version>",{"2":{"60":3}}],["version>5",{"2":{"60":1}}],["version",{"2":{"30":2,"58":1,"59":1}}],["vertica",{"2":{"23":2}}],["valid",{"2":{"30":1}}],["values",{"2":{"53":1}}],["value",{"2":{"13":1,"14":2,"15":1,"16":1,"19":1,"47":1,"81":1,"86":1,"94":1,"96":4}}],["v7",{"0":{"115":1,"116":1,"117":1,"118":1},"2":{"18":1,"53":1}}],["void",{"2":{"13":1,"14":2,"15":1,"16":1,"38":1,"47":1,"53":3,"71":1,"74":6,"85":2,"86":1}}],["nio",{"2":{"53":5}}],["nl",{"2":{"46":1}}],["nb",{"2":{"46":1}}],["n",{"2":{"44":1,"108":1}}],["next",{"2":{"94":1}}],["net",{"2":{"60":4}}],["network",{"2":{"32":1,"33":2,"34":2}}],["new",{"2":{"38":2,"42":2,"60":2,"63":4,"74":12}}],["npm",{"2":{"29":1,"70":2}}],["npmmirror",{"2":{"28":1}}],["nginx",{"0":{"30":1},"2":{"27":3}}],["now",{"2":{"53":2}}],["norepeatsubmitaspect",{"2":{"49":1}}],["norepeatsubmit",{"2":{"48":1,"49":6}}],["no",{"2":{"30":1,"46":1}}],["node",{"2":{"26":1}}],["nodejs",{"2":{"25":1,"27":1}}],["notnull",{"2":{"14":1,"94":3}}],["name>",{"2":{"61":1}}],["name>my",{"2":{"61":1}}],["name",{"2":{"13":1,"14":3,"15":1,"16":1,"19":1,"29":1,"34":2,"47":2,"58":1,"59":1,"68":1,"86":1,"96":1}}],["null",{"2":{"11":1,"41":1,"42":2,"47":2,"53":1,"60":1,"74":3}}],["number",{"2":{"29":1}}],["num",{"2":{"11":4}}],["示例",{"0":{"13":1}}],["使得代码更加清晰",{"2":{"63":1}}],["使得可以在插件中获取主应用中的",{"2":{"53":1}}],["使得同一个软件可以面向不同语言地区的用户",{"2":{"44":1}}],["使得",{"2":{"12":1}}],["使用cool",{"2":{"53":1}}],["使用缓存",{"2":{"53":1}}],["使用插件",{"0":{"51":1},"1":{"52":1,"53":1,"54":1}}],["使用了关联查询",{"2":{"14":1}}],["使用",{"0":{"9":1,"46":1,"91":1,"96":1},"1":{"92":1,"93":1},"2":{"49":1}}],["lt",{"2":{"46":1}}],["lv",{"2":{"46":1}}],["length",{"2":{"94":1}}],["leafallocentity>",{"2":{"94":1}}],["leafallocentity",{"2":{"94":1}}],["leaf",{"2":{"94":3}}],["lealone",{"2":{"23":2}}],["left",{"2":{"22":1}}],["leftjoin",{"2":{"14":2}}],["loaduserbyusername",{"2":{"74":1}}],["loadresourcedefine",{"2":{"74":2}}],["lombok",{"2":{"53":2,"60":2}}],["local",{"2":{"68":1,"96":2}}],["locations",{"2":{"96":1}}],["location",{"2":{"30":3}}],["lockkey",{"2":{"48":1}}],["logurls",{"2":{"71":1}}],["logo",{"2":{"58":2,"59":2}}],["log`",{"2":{"53":1}}],["log",{"2":{"42":5,"47":1}}],["logs",{"2":{"29":3}}],["logistics",{"2":{"11":2}}],["long",{"2":{"14":1,"42":2,"49":2,"74":2,"76":4,"94":2}}],["list和page支持关联查询",{"2":{"115":1}}],["list",{"2":{"12":1,"13":1,"14":2,"15":1,"16":1,"29":1,"74":1,"81":1,"86":1}}],["jwtauthenticationtokenfilter",{"2":{"74":3}}],["jwtsecurityconfig",{"2":{"74":1}}],["jwtuser",{"2":{"74":6}}],["jwtuserdetailsserviceimpl",{"2":{"74":1}}],["jwt",{"2":{"72":1,"74":1}}],["jdbc",{"2":{"68":2}}],["jdk",{"2":{"65":1,"104":1}}],["jcl",{"2":{"60":2}}],["jakarta",{"2":{"60":3}}],["jarfilepath",{"2":{"63":1}}],["jarurl",{"2":{"63":2}}],["jar",{"2":{"53":1,"60":31,"63":9}}],["ja",{"2":{"46":1}}],["javalong",{"2":{"77":1}}],["javaurl",{"2":{"63":1}}],["javapackage",{"2":{"47":1,"53":2,"60":1}}],["javapublic",{"2":{"14":1,"19":1,"20":1,"38":1,"42":2,"71":1}}],["java文件",{"2":{"18":1}}],["java",{"2":{"0":1,"1":1,"8":1,"9":1,"10":1,"11":1,"13":1,"14":2,"15":1,"16":2,"18":3,"24":1,"25":1,"38":2,"40":1,"42":1,"49":2,"53":10,"56":2,"57":2,"60":2,"61":1,"63":1,"65":1,"69":6,"74":4,"76":3,"80":1,"81":1,"85":2,"86":1,"94":1,"96":1,"99":3,"101":2,"104":1}}],["js",{"2":{"29":1,"71":1,"82":1}}],["json参数",{"2":{"47":1}}],["json",{"2":{"47":7,"54":1,"57":1,"58":2,"60":2,"70":1,"94":1}}],["json也提交到代码仓库",{"2":{"33":1}}],["json文件",{"2":{"33":1,"47":1}}],["jsonobject",{"2":{"13":1,"14":2,"15":3,"16":3,"42":2,"49":1,"71":1,"76":1,"85":2,"86":1}}],["jsonutil",{"2":{"11":1,"14":1}}],["jpa",{"2":{"24":2}}],["joinpoint",{"2":{"49":2}}],["join",{"2":{"22":2}}],[">",{"2":{"11":1,"14":1,"20":1,"60":5,"74":10}}],["物流单号",{"2":{"11":1}}],["通过在tenantentity中加入指定的列",{"2":{"90":1}}],["通过在方法上加tokenignore注解可以的接口不会进行",{"2":{"80":1}}],["通过资源共享降低运营和维护成本",{"2":{"88":1}}],["通过动态加载",{"2":{"63":2}}],["通过反射实现",{"2":{"53":1}}],["通过拖动配置",{"2":{"43":1}}],["通过",{"2":{"42":1,"63":1}}],["通过管理后台菜单管理的快速创建即可生成",{"2":{"38":1}}],["通过独特的架构",{"2":{"21":1}}],["通过这种方式",{"2":{"14":1}}],["通过coolcache缓存模板",{"0":{"11":1}}],["通过微调大模型学习框架特有写法",{"2":{"7":1,"37":1}}],["我是插件",{"2":{"60":1}}],["我们还引入了其他包",{"2":{"60":1}}],["我们还可以通过自定义方言的方式",{"2":{"23":1}}],["我们提供了插件脚手架",{"2":{"56":1}}],["我们提供了插件系统",{"2":{"50":1}}],["我们可以在运行时动态地加载外部的",{"2":{"63":1}}],["我们可以通过配置文件来实现",{"2":{"54":1}}],["我们可以使用",{"2":{"14":1}}],["我们正在适配",{"2":{"23":1}}],["我们不直接使用",{"2":{"20":1}}],["我们会尽力完善文档",{"2":{"0":1}}],["我被缓存了",{"2":{"9":1}}],["我被调用了",{"2":{"9":1}}],["ico",{"2":{"71":1,"82":1}}],["img",{"2":{"60":1}}],["import",{"2":{"53":14,"60":6}}],["impala",{"2":{"23":2}}],["implements",{"2":{"9":1,"10":1,"16":1,"47":1,"71":1,"74":3}}],["ioexception",{"2":{"71":1,"74":2}}],["ioutil",{"2":{"53":2}}],["io",{"2":{"53":2,"60":2}}],["it",{"2":{"46":1}}],["i18n下生成对应种类的语言文件",{"2":{"46":1}}],["i18n",{"2":{"44":1,"46":1}}],["illegalargumentexception",{"2":{"42":2,"74":2}}],["ip",{"2":{"30":2}}],["i",{"2":{"29":2,"44":1}}],["ignoredurlsproperties",{"2":{"74":3}}],["ignored",{"2":{"71":1,"82":1}}],["ignore",{"2":{"14":2}}],["is",{"2":{"69":1}}],["isnotempty",{"2":{"14":1}}],["isempty",{"2":{"11":1,"53":1,"74":1}}],["if",{"2":{"11":1,"14":1,"42":2,"48":1,"53":1,"74":2}}],["in",{"2":{"60":1}}],["including",{"2":{"60":2}}],["inputstream",{"2":{"53":4}}],["into",{"2":{"53":1}}],["interceptorstatustoken",{"2":{"74":1}}],["internationalization",{"2":{"44":1}}],["interface",{"2":{"19":1}}],["integer",{"2":{"10":1,"76":1,"94":1}}],["insert",{"2":{"53":4}}],["instances",{"2":{"29":1}}],["install",{"2":{"28":1,"29":1,"70":1}}],["inner",{"2":{"22":1}}],["index",{"2":{"14":1,"30":1,"86":1}}],["init",{"2":{"13":1,"14":2,"15":1,"16":1,"38":1,"69":1,"74":1,"86":1}}],["informix",{"2":{"23":2}}],["info",{"2":{"12":1,"13":1,"14":5,"15":1,"16":1,"18":3,"20":5,"47":1,"53":5,"60":15,"69":4,"81":1,"86":1}}],["invokeotherplugin",{"2":{"53":1}}],["invokemain",{"2":{"53":3,"60":1}}],["invokemethod",{"2":{"53":4}}],["invokeplugin",{"2":{"53":11,"60":2}}],["invoke",{"2":{"11":4,"74":2}}],["idea",{"2":{"110":1}}],["idgenservice",{"2":{"94":3}}],["id",{"2":{"9":1,"10":1,"14":4,"22":1,"46":1,"76":1,"94":1}}],["obtainsecuritymetadatasource",{"2":{"74":1}}],["observation",{"2":{"60":3}}],["objutil",{"2":{"11":1,"14":1,"53":2}}],["objectutil",{"2":{"74":1}}],["object中包含用户请求request",{"2":{"74":1}}],["objects",{"2":{"49":1}}],["object",{"2":{"9":1,"10":1,"11":2,"16":1,"49":1,"53":4,"60":2,"74":1}}],["ossaccesskeyid=ltai5t8xtpd99yzsjqcc",{"2":{"53":1}}],["oss",{"2":{"35":1,"53":3,"95":1,"96":1}}],["oscar",{"2":{"23":1}}],["ofmillis",{"2":{"48":1,"49":1}}],["ofminutes",{"2":{"11":1}}],["official",{"2":{"56":2,"99":2,"100":2,"101":2}}],["off",{"2":{"30":1}}],["open",{"2":{"82":1}}],["openapi",{"2":{"69":1}}],["opengauss",{"2":{"23":2}}],["operation",{"2":{"49":1,"96":2}}],["option",{"2":{"16":2}}],["oceanbase",{"2":{"23":2}}],["org",{"2":{"53":5,"60":8,"114":1}}],["oracle12c",{"2":{"23":2}}],["oracle11g",{"2":{"23":1}}],["oracle",{"2":{"23":1}}],["ordergoodsentity>",{"2":{"14":1}}],["order",{"2":{"14":1,"40":2}}],["orderid",{"2":{"11":1,"14":1,"94":4}}],["orderinfoentity>",{"2":{"14":1}}],["orderinfoentity",{"2":{"11":1,"14":1}}],["ok",{"2":{"15":1,"49":1,"80":1,"96":2}}],["o",{"2":{"14":2,"69":1,"74":3}}],["one",{"2":{"30":1}}],["on",{"2":{"14":1}}],["out",{"2":{"9":1,"15":1,"53":5,"60":1}}],["override",{"2":{"9":1,"10":1,"13":1,"14":1,"15":1,"16":3,"20":1,"47":1,"53":1,"60":1,"71":1,"74":11,"85":2,"86":1}}],["multipartfile",{"2":{"96":1}}],["multipart",{"2":{"96":1}}],["multi",{"2":{"87":1,"92":1}}],["mutate",{"2":{"20":1}}],["mode",{"2":{"96":1}}],["modifyafter",{"2":{"85":1}}],["modifyenum",{"2":{"85":2}}],["modifybefore",{"2":{"85":1}}],["modules",{"2":{"18":1,"40":3}}],["mvn",{"2":{"61":1}}],["micrometer",{"2":{"60":12}}],["midway",{"2":{"27":1,"33":1,"34":2}}],["md",{"2":{"58":1}}],["md5digestashex",{"2":{"74":2}}],["md5",{"2":{"42":2}}],["m",{"2":{"53":6}}],["ms",{"2":{"46":1,"69":1}}],["mn",{"2":{"46":1}}],["mediatype",{"2":{"96":2}}],["message",{"2":{"42":1}}],["method",{"2":{"20":3}}],["methodname",{"2":{"9":1,"53":3}}],["myaccessdecisionmanager",{"2":{"74":3}}],["myfiltersecurityinterceptor",{"2":{"74":1}}],["mysecuritymetadatasource",{"2":{"74":1}}],["mysql",{"2":{"23":3,"27":1,"65":1,"68":5,"104":1}}],["my",{"2":{"61":1}}],["mycoolplugintest",{"2":{"57":1}}],["mycoolplugin",{"2":{"53":1,"57":1}}],["mybatis",{"2":{"14":3,"21":5,"22":4,"23":2,"92":1,"105":1}}],["mac",{"2":{"96":2}}],["matches",{"2":{"74":1}}],["maven",{"2":{"60":7,"65":1,"104":1,"110":1}}],["main",{"2":{"38":1,"40":1,"57":1,"69":3}}],["maxid",{"2":{"94":1}}],["max",{"2":{"29":2,"94":1}}],["mariadb",{"2":{"23":2}}],["marketcouponinfoservice",{"2":{"49":1}}],["marketcouponuserentity>",{"2":{"14":1}}],["marketcouponuserservice",{"2":{"14":1}}],["market",{"2":{"14":7}}],["mappings",{"2":{"96":1}}],["mapper",{"2":{"38":1,"40":4}}],["map",{"2":{"14":9,"74":6}}],["manes",{"2":{"8":1}}],["+",{"2":{"9":2,"11":3,"22":1,"49":2,"53":2,"60":3,"63":2,"74":5}}],["tip",{"2":{"95":1}}],["time`",{"2":{"53":2}}],["timeout",{"2":{"30":6}}],["tenantentity",{"2":{"93":1}}],["tenant",{"2":{"92":1}}],["tenantid",{"2":{"90":1}}],["tenancy",{"2":{"87":1}}],["team",{"2":{"56":2,"99":3,"100":3,"101":2}}],["testplugin",{"2":{"53":2}}],["test",{"2":{"9":1,"10":1,"15":2,"30":1,"38":1,"53":2,"57":1}}],["txt",{"2":{"53":2,"54":2}}],["tk",{"2":{"46":1}}],["this",{"2":{"74":1}}],["thread",{"2":{"63":1,"69":1}}],["throwable",{"2":{"49":1}}],["throws",{"2":{"49":1,"71":1,"74":8}}],["throw",{"2":{"42":1,"60":1,"74":1}}],["the",{"2":{"60":14}}],["th",{"2":{"46":1}}],["tw",{"2":{"46":1}}],["t",{"2":{"33":2,"85":6}}],["tsupstream",{"2":{"30":1}}],["ts",{"2":{"27":1}}],["tdengine",{"2":{"23":2}}],["tr",{"2":{"46":1}}],["trylock",{"2":{"48":1,"49":1}}],["try",{"2":{"30":1,"49":1,"60":1,"74":1}}],["translate",{"2":{"46":1}}],["transparent",{"2":{"30":1}}],["transactiontemplate",{"2":{"22":1}}],["transactional",{"2":{"22":1}}],["transform",{"2":{"14":2}}],["true",{"2":{"14":2,"42":1,"74":1,"92":1,"94":5,"96":1}}],["toarray",{"2":{"74":1}}],["tokenignore",{"2":{"80":1,"81":1}}],["token",{"0":{"78":1},"1":{"79":1,"80":1,"81":1,"82":1},"2":{"73":2,"74":2,"76":1,"78":1,"80":1}}],["tohanyupinyinstring",{"2":{"60":1}}],["tone",{"2":{"60":1}}],["todo",{"2":{"48":1}}],["tostring",{"2":{"14":1}}],["tobean",{"2":{"14":1}}],["tangzc",{"2":{"114":1}}],["tao",{"2":{"114":1}}],["ta",{"2":{"46":1}}],["task",{"2":{"40":1,"53":3,"69":1}}],["target",{"2":{"61":2}}],["targetfield",{"2":{"14":1}}],["targetclass",{"2":{"9":1}}],["table",{"2":{"14":1,"24":1,"94":1,"105":1}}],["tag",{"2":{"13":1,"14":1,"15":1,"16":1,"86":1,"96":1}}],["typescript",{"2":{"106":1}}],["typehandler",{"2":{"22":1}}],["type",{"2":{"8":2,"85":4}}],["dromara",{"2":{"114":1}}],["druid",{"2":{"82":1}}],["driver",{"2":{"68":2}}],["dynamicjarclassloader",{"2":{"63":3}}],["daoauthenticationprovider",{"2":{"74":2}}],["da",{"2":{"46":1}}],["datasource",{"2":{"68":1}}],["database",{"2":{"8":1}}],["data",{"2":{"8":1,"40":1,"47":2,"96":1}}],["digestutils",{"2":{"74":2}}],["digesthex",{"2":{"42":2}}],["disable",{"2":{"74":2}}],["dict",{"2":{"40":1}}],["duplicatekeyexception",{"2":{"42":2}}],["duration",{"2":{"11":1,"48":1,"49":1,"69":1}}],["docs",{"2":{"82":1,"101":2}}],["docker",{"0":{"31":1},"1":{"32":1,"33":1,"34":1,"35":1},"2":{"31":3,"32":2,"33":3,"34":2,"35":1}}],["download",{"2":{"82":1}}],["dofilter",{"2":{"71":2,"74":2}}],["doris",{"2":{"23":2}}],["dm",{"2":{"23":1}}],["dbfromjsoninit",{"2":{"47":1}}],["db2",{"2":{"23":2}}],["db",{"2":{"22":1,"40":1,"47":2}}],["desktop",{"2":{"96":2}}],["destroy",{"2":{"74":1}}],["description",{"2":{"13":1,"14":1,"15":1,"16":1,"58":1,"59":1,"86":1,"94":2,"96":2}}],["deployment",{"2":{"110":1}}],["department",{"2":{"74":1}}],["departmentids",{"2":{"74":2}}],["dependency>",{"2":{"60":4}}],["dev",{"2":{"70":1}}],["debug",{"2":{"53":3}}],["de",{"2":{"46":1}}],["derby",{"2":{"23":2}}],["defaultvalue",{"2":{"94":2}}],["default",{"2":{"19":3,"60":1}}],["democoolplugin",{"2":{"60":1}}],["democacheservice",{"2":{"9":1,"10":1}}],["democacheserviceimpl",{"2":{"9":1,"10":1}}],["demov2",{"2":{"47":1}}],["demoentity",{"2":{"38":1}}],["demoentity>",{"2":{"13":1,"14":1,"15":1,"16":5,"86":1}}],["demo",{"2":{"18":4,"38":1,"47":4,"58":1}}],["demomapper",{"2":{"16":1}}],["demoserviceimpl",{"2":{"16":1}}],["demoservice",{"2":{"13":1,"14":1,"15":1,"16":2,"86":1}}],["delete",{"2":{"12":1,"13":1,"14":1,"15":1,"16":1,"29":1,"81":1,"86":1}}],["sdk",{"2":{"112":1}}],["swagger",{"0":{"86":1},"2":{"82":2,"86":1}}],["snapshot",{"2":{"61":1}}],["show",{"2":{"97":1}}],["shaded",{"2":{"60":14}}],["shade",{"2":{"60":6}}],["shellpm2",{"2":{"29":1}}],["shell",{"2":{"29":3,"33":1,"34":1,"70":1}}],["s",{"2":{"60":1}}],["sourceforge",{"2":{"60":4}}],["socket",{"2":{"30":3}}],["socket需额外配置",{"2":{"30":1}}],["simplegrantedauthority",{"2":{"74":1}}],["signature=krlj0uv96tbliagpji",{"2":{"53":1}}],["sinodb",{"2":{"23":1}}],["supports",{"2":{"74":1}}],["super",{"2":{"16":2,"20":1,"42":2,"74":3}}],["success",{"2":{"53":1}}],["summary",{"2":{"49":1,"96":2}}],["sr",{"2":{"46":1}}],["src",{"2":{"38":1,"69":1}}],["sl",{"2":{"46":1}}],["slf4j",{"2":{"42":1,"47":1,"53":3,"60":4,"74":2}}],["sk",{"2":{"46":1}}],["sv",{"2":{"46":1}}],["split",{"2":{"74":1}}],["space",{"2":{"40":1}}],["springdoc",{"2":{"69":2}}],["springboot3",{"2":{"118":1}}],["springboot",{"2":{"63":1}}],["springframework",{"2":{"53":5,"60":14}}],["spring",{"2":{"20":3,"22":2,"60":13,"68":1,"72":1,"96":1,"105":1}}],["spring方式",{"2":{"9":1}}],["springcache",{"2":{"8":1}}],["sap",{"2":{"23":1}}],["sysuserentity",{"2":{"74":14}}],["sys",{"2":{"53":4}}],["system",{"2":{"9":1,"15":1,"53":5,"60":1}}],["sybase",{"2":{"23":2}}],["schema",{"2":{"22":1}}],["sqlserver",{"2":{"23":2}}],["sqlserver2005",{"2":{"23":2}}],["sqlite",{"2":{"23":3}}],["sql",{"2":{"21":2,"22":2,"23":1}}],["step",{"2":{"94":2}}],["stereotype",{"2":{"53":1}}],["stream",{"2":{"74":1}}],["str",{"2":{"53":1}}],["strutil",{"2":{"53":2}}],["string",{"2":{"9":1,"10":1,"11":5,"15":1,"19":3,"38":1,"48":1,"49":1,"53":7,"60":4,"74":12,"76":2,"94":2}}],["stop",{"2":{"29":1}}],["star",{"0":{"99":1,"100":1,"101":1},"2":{"113":1}}],["start",{"2":{"29":2}}],["stateless",{"2":{"74":1}}],["static",{"2":{"38":1,"82":1,"96":2}}],["status=200",{"2":{"53":1}}],["status",{"2":{"14":2,"30":1}}],["segment",{"2":{"94":1}}],["sessioncreationpolicy",{"2":{"74":2}}],["sessionmanagement",{"2":{"74":1}}],["securityfilterchain",{"2":{"74":2}}],["securitymetadatasource",{"2":{"74":3}}],["security权限拦截器校验当前用户权限",{"2":{"74":1}}],["securityconfig",{"2":{"74":1}}],["security加载所有设置的权限",{"2":{"74":1}}],["security",{"2":{"72":1,"76":1}}],["send",{"2":{"30":2}}],["servletexception",{"2":{"71":1,"74":3}}],["servletresponse",{"2":{"71":3,"74":1}}],["servletrequest",{"2":{"71":4,"74":1}}],["servletrequestattributes",{"2":{"49":1}}],["servertimezone=gmt",{"2":{"68":1}}],["server",{"2":{"30":2,"96":1}}],["service",{"2":{"9":1,"10":1,"16":3,"33":1,"38":2,"40":2,"69":1}}],["selffield",{"2":{"14":1}}],["select",{"2":{"14":2}}],["setuserdetailsservice",{"2":{"74":1}}],["setaccessdecisionmanager",{"2":{"74":1}}],["setmyaccessdecisionmanager",{"2":{"74":1}}],["setmodule",{"2":{"38":1}}],["setpasswordencoder",{"2":{"74":1}}],["setpassword",{"2":{"42":2}}],["setpageoption",{"2":{"14":2}}],["setentity",{"2":{"38":1}}],["setname",{"2":{"38":1}}],["settings",{"2":{"110":1}}],["settonetype",{"2":{"60":1}}],["settype",{"2":{"38":1}}],["setter",{"2":{"14":1}}],["setlistoption",{"2":{"14":1}}],["set",{"2":{"10":1,"28":1,"30":12,"53":2,"74":5}}],["=5",{"2":{"68":1}}],["==",{"2":{"53":1,"74":2}}],["==>",{"2":{"53":2}}],["=",{"2":{"9":2,"11":4,"13":4,"14":12,"15":4,"16":4,"19":2,"20":3,"38":2,"41":1,"42":5,"48":1,"49":4,"53":8,"60":5,"63":2,"65":3,"71":1,"74":15,"76":3,"77":1,"81":2,"86":4,"94":13,"96":9,"104":3}}],["性能要求比较高或有分布式部署需求的建议配置成",{"2":{"8":1}}],["person",{"2":{"76":2}}],["permitall",{"2":{"74":1}}],["perm",{"2":{"74":5}}],["perms",{"2":{"74":4}}],["phase>",{"2":{"60":1}}],["phase>package",{"2":{"60":1}}],["phoenix",{"2":{"23":2}}],["phone",{"2":{"14":2}}],["pinyin",{"2":{"60":3}}],["pinyinhelper",{"2":{"60":2}}],["pinyin4j",{"2":{"60":5}}],["png",{"2":{"58":1}}],["pnpm",{"0":{"28":1},"2":{"27":1,"28":2}}],["pl",{"2":{"46":1}}],["plugins",{"2":{"60":1}}],["plugins>",{"2":{"60":2}}],["plugin>",{"2":{"60":2}}],["plugin",{"2":{"40":1,"53":6,"56":2,"57":3,"58":2,"60":8,"61":5,"69":1}}],["plus",{"2":{"21":1,"22":1}}],["pt",{"2":{"46":2}}],["p",{"2":{"34":2}}],["pm2将自动检测可用cpu的数量",{"2":{"29":1}}],["pm2",{"0":{"29":1},"2":{"29":11}}],["put",{"2":{"14":1,"42":2,"74":1}}],["public",{"2":{"9":2,"10":2,"11":1,"13":1,"14":2,"15":2,"16":3,"38":1,"42":7,"47":2,"49":3,"53":4,"60":2,"71":1,"74":22,"76":1,"80":1,"81":1,"85":2,"86":1,"94":1,"96":4}}],["pool",{"2":{"69":1}}],["pom",{"2":{"61":1}}],["policy=eyjlehb0wny0xm1qxmjowmto0oc41njvaiiwiy29uzgl0aw9ucyi6w1siy29udgvudc1szw5ndggtcmfuz2uildasnti0mjg4mdbdxx0=",{"2":{"53":1}}],["postgresql",{"2":{"23":3}}],["postmapping",{"2":{"15":1,"16":1,"49":1,"53":2,"96":1}}],["post",{"2":{"13":5}}],["port",{"2":{"8":1,"96":1}}],["preparing",{"2":{"53":1}}],["project",{"2":{"110":2}}],["projectlombok",{"2":{"60":2}}],["properties>",{"2":{"61":2}}],["properties",{"2":{"61":1}}],["proceed",{"2":{"49":1}}],["proceedingjoinpoint",{"2":{"49":1}}],["proxy",{"2":{"30":28}}],["prod",{"2":{"27":1}}],["protected",{"2":{"13":1,"14":2,"15":1,"16":2,"20":1,"86":1}}],["private",{"2":{"14":2,"48":1,"49":1,"53":3,"71":1,"74":11,"94":5,"96":1}}],["println",{"2":{"9":1,"15":1,"53":5,"60":1}}],["package",{"2":{"61":1,"70":1}}],["parentclassloader",{"2":{"53":2}}],["parameter",{"2":{"96":1}}],["parameters",{"2":{"53":1}}],["param",{"2":{"74":1,"85":6}}],["params",{"2":{"53":1,"60":2}}],["parse",{"2":{"21":1}}],["parseobj",{"2":{"11":1}}],["pa",{"2":{"46":1}}],["pass",{"2":{"30":2}}],["passwordencoder",{"2":{"74":4}}],["passwordversion",{"2":{"74":1,"76":1}}],["password",{"2":{"8":1,"68":1}}],["paths",{"2":{"20":1}}],["path",{"2":{"20":3}}],["page",{"2":{"12":1,"13":1,"14":1,"15":1,"16":9,"81":2,"86":1}}],["p0",{"2":{"9":1}}],["15",{"0":{"117":1}}],["15t14",{"2":{"69":4}}],["101+08",{"2":{"69":1}}],["17",{"2":{"65":1,"104":1}}],["13",{"0":{"114":1},"2":{"60":1}}],["13t20",{"2":{"53":8}}],["1800",{"2":{"73":1}}],["18",{"2":{"44":1,"53":8,"60":1}}],["123456",{"2":{"68":1,"70":1,"97":1}}],["12",{"2":{"60":2}}],["12h",{"2":{"30":1}}],["127",{"2":{"8":1,"30":1,"53":1,"68":1,"69":1,"70":1,"86":1,"96":1}}],["1h",{"2":{"30":1}}],["1",{"0":{"27":1,"32":1,"52":1,"56":1,"67":1,"90":1,"92":1,"110":1,"115":1,"116":1,"117":2,"118":1},"2":{"8":1,"10":1,"18":1,"30":5,"33":2,"34":2,"46":1,"53":2,"58":1,"60":11,"61":1,"63":2,"68":1,"69":3,"70":1,"74":3,"86":1,"94":2,"96":1}}],["06",{"0":{"118":1}}],["04",{"0":{"114":1,"116":1}}],["00",{"2":{"53":8,"69":4}}],["01",{"2":{"53":8}}],["07",{"0":{"117":1},"2":{"53":8,"69":4}}],["0新增",{"0":{"44":1,"87":1}}],["08",{"0":{"115":1,"116":1},"2":{"18":1}}],["0",{"0":{"114":2,"118":1},"2":{"8":3,"30":2,"33":2,"34":2,"53":2,"58":2,"60":4,"61":1,"65":1,"68":3,"69":2,"70":2,"74":1,"86":2,"96":2}}],["hashmap",{"2":{"74":1}}],["hanyupinyintonetype",{"2":{"60":2}}],["hanyupinyinoutputformat",{"2":{"60":3}}],["hangzhou",{"2":{"53":1}}],["handleexception",{"2":{"42":1}}],["handleillegalargumentexception",{"2":{"42":1}}],["handlehttprequestmethodnotsupportedexception",{"2":{"42":1}}],["handlebadcredentialsexception",{"2":{"42":1}}],["handleduplicatekeyexception",{"2":{"42":1}}],["handlerrexception",{"2":{"42":1}}],["handlertype",{"2":{"20":3}}],["hana",{"2":{"23":2}}],["hr",{"2":{"46":1}}],["hy",{"2":{"46":1}}],["hutool",{"2":{"53":3,"60":11,"105":1}}],["hu",{"2":{"46":1}}],["hello",{"2":{"53":4,"60":1}}],["he",{"2":{"46":1}}],["headersconfigurer",{"2":{"74":1}}],["headers",{"2":{"74":1}}],["header",{"2":{"30":13}}],["hook",{"2":{"58":1,"59":1}}],["home",{"2":{"30":1}}],["host=https",{"2":{"53":1}}],["host",{"2":{"8":1,"30":4}}],["hive",{"2":{"23":2}}],["highgo",{"2":{"23":1}}],["hbase",{"2":{"23":1}}],["hsql",{"2":{"23":2}}],["h2",{"2":{"23":2}}],["httprequestmethodnotsupportedexception",{"2":{"42":2}}],["http",{"2":{"30":4,"69":1,"86":1,"96":1}}],["httpsecurity",{"2":{"74":3}}],["httpservletrequest",{"2":{"13":1,"14":2,"15":1,"16":1,"49":1,"71":2,"86":1,"96":1}}],["https",{"2":{"1":2,"14":3,"28":1,"53":1,"56":2,"97":1,"99":3,"100":3,"101":2}}],["html",{"2":{"14":1,"30":1,"86":1}}],["html文档",{"2":{"14":2}}],["能够显著提升应用程序的性能和响应速度",{"2":{"8":1}}],["旨在提供高性能",{"2":{"8":1}}],["由该类统一执行初始化",{"2":{"47":1}}],["由",{"2":{"8":1}}],["cfg",{"2":{"74":3}}],["cj",{"2":{"68":1}}],["charsequence",{"2":{"74":2}}],["characterencoding=utf",{"2":{"68":1}}],["chain",{"2":{"74":2}}],["chinesechar",{"2":{"60":4}}],["check",{"2":{"41":2,"42":6,"46":1,"49":1}}],["c",{"2":{"53":6,"69":3}}],["ckb",{"2":{"46":1}}],["csrf",{"2":{"74":1}}],["css",{"2":{"71":1,"82":1}}],["cs",{"2":{"46":1}}],["csiidb",{"2":{"23":2}}],["cn",{"2":{"46":2,"53":4,"60":2}}],["c端用户",{"2":{"40":1}}],["currentthread",{"2":{"63":1}}],["cubrid",{"2":{"23":2}}],["custom",{"2":{"14":1}}],["clean",{"2":{"61":1}}],["cluster",{"2":{"29":1}}],["clickhouse",{"2":{"23":2}}],["classloader",{"2":{"53":4}}],["classpath",{"2":{"47":1,"96":1}}],["class",{"2":{"9":1,"10":2,"13":1,"14":5,"15":1,"16":2,"19":2,"20":3,"38":2,"42":7,"47":1,"49":2,"53":2,"60":1,"68":1,"71":1,"74":8,"81":1,"86":1,"94":1,"96":1}}],["crud",{"0":{"84":1},"2":{"84":1}}],["crudoption",{"2":{"16":1}}],["create",{"2":{"14":2,"33":1,"42":2}}],["createop",{"2":{"14":3}}],["catch",{"2":{"60":1}}],["ca",{"2":{"46":1}}],["cachekey",{"2":{"11":2}}],["cacheable",{"2":{"9":1}}],["cachenames",{"2":{"9":1}}],["cacheconfig",{"2":{"9":1}}],["cache",{"2":{"8":3,"30":8,"53":2,"60":1}}],["caffeine",{"2":{"8":3}}],["collection",{"2":{"74":4}}],["column",{"2":{"14":1}}],["columndefine",{"2":{"14":1,"94":4}}],["columns",{"2":{"14":1}}],["core",{"2":{"40":2,"47":1,"53":12,"60":6,"69":2}}],["code",{"2":{"42":1}}],["codetypeenum",{"2":{"38":1}}],["codemodel",{"2":{"38":10}}],["codegenerator",{"2":{"38":7}}],["consumes",{"2":{"96":1}}],["console",{"2":{"46":1}}],["conf",{"2":{"74":4}}],["configuration",{"2":{"74":1}}],["configuration>",{"2":{"60":2}}],["configattribute",{"2":{"74":1}}],["configattributes",{"2":{"74":4}}],["configattribute>",{"2":{"74":3}}],["configattribute>>",{"2":{"74":1}}],["config",{"2":{"27":1,"28":1,"58":2,"59":1,"74":7}}],["context",{"2":{"60":2}}],["controller",{"2":{"12":2,"16":1,"18":2,"20":1,"38":2,"40":2,"53":3,"76":1}}],["connection",{"2":{"30":2}}],["connect",{"2":{"30":2}}],["condition",{"2":{"14":3}}],["couponid",{"2":{"49":3}}],["coupon",{"2":{"14":8}}],["compiler",{"2":{"110":1}}],["compile命令",{"2":{"110":1}}],["component",{"2":{"49":1,"74":3}}],["combine",{"2":{"20":1}}],["commons",{"2":{"60":3}}],["commoncontroller",{"2":{"53":1}}],["comment",{"2":{"14":2,"94":5}}],["comm",{"2":{"9":1}}],["com",{"2":{"1":2,"14":3,"28":1,"38":1,"40":1,"47":1,"53":12,"56":2,"57":2,"60":4,"68":1,"69":3,"97":1,"99":3,"100":3,"101":2,"114":1}}],["cool相关配置",{"2":{"92":1}}],["cooleps",{"2":{"69":1,"80":1}}],["coolexception",{"2":{"42":3}}],["coolexceptionhandler",{"2":{"42":1}}],["coollock",{"2":{"48":4,"49":4}}],["coolplugin注解",{"2":{"57":1}}],["coolplugin",{"2":{"53":4,"60":6}}],["coolpluginservice",{"2":{"53":1,"69":1}}],["coolplugininvokers",{"2":{"11":1,"53":4}}],["coolpreconditions",{"2":{"41":1,"42":2,"46":1,"49":1}}],["coolapplication",{"2":{"40":1,"69":1}}],["cooladminjavaapplicationtests",{"2":{"38":1}}],["coolcodegeneratortest",{"2":{"38":1}}],["coolcache",{"0":{"10":1},"2":{"10":4,"11":1,"53":5,"60":1,"74":7}}],["coolsecurityutil",{"2":{"14":1,"49":2,"76":3,"77":1}}],["coolrestcontroller",{"2":{"13":1,"14":1,"15":1,"16":1,"19":1,"20":2,"81":1,"86":1,"96":1}}],["cool",{"0":{"107":1},"2":{"0":1,"1":2,"5":1,"6":1,"13":1,"14":1,"15":1,"16":1,"21":1,"23":1,"26":1,"29":3,"30":3,"31":1,"33":3,"34":4,"36":1,"38":1,"40":2,"44":1,"45":1,"47":3,"53":19,"56":4,"57":2,"60":5,"61":8,"62":1,"64":1,"68":1,"69":7,"86":1,"90":1,"92":1,"96":1,"97":1,"99":6,"100":6,"101":4,"107":2,"113":1}}],["框架用到了mybatis",{"2":{"110":1}}],["框架自带两种文件上传方式本地上传与云存储",{"2":{"95":1}}],["框架自带基于",{"2":{"8":1}}],["框架默认关闭多租户",{"2":{"92":1}}],["框架就会自动扫描菜单",{"2":{"46":1}}],["框架就会自动扫描并翻译成对应的语言",{"2":{"46":1}}],["框架集成了auto",{"2":{"24":1}}],["框架封装了一个请求属性",{"2":{"15":1}}],["框架特有的通用工具类",{"0":{"10":1}}],["框架更新",{"2":{"4":1,"6":1}}],["缓存数据模板",{"2":{"115":1}}],["缓存对象",{"2":{"53":1}}],["缓存结果",{"2":{"53":2}}],["缓存相关配置",{"2":{"30":1}}],["缓存库",{"2":{"8":1}}],["缓存",{"0":{"8":1},"1":{"9":1,"10":1,"11":1},"2":{"8":2,"115":1}}],["的build",{"2":{"110":1}}],["的mvn",{"2":{"110":1}}],["的缩写",{"2":{"44":1}}],["的核心流程",{"2":{"43":1}}],["的能力",{"2":{"43":1}}],["的火热",{"2":{"43":1}}],["的都知道",{"2":{"24":1}}],["的事务管理",{"2":{"22":1}}],["的基本增删改查",{"2":{"22":1}}],["的",{"2":{"20":1,"110":1}}],["的一些最新资讯",{"2":{"6":1}}],["的在线文档仓库",{"2":{"0":1}}],["公众号",{"0":{"6":1}}],["团队哔哩哔哩官方账户",{"2":{"5":1}}],["站视频教程",{"2":{"7":1,"37":1}}],["站",{"0":{"5":1}}],["by",{"2":{"114":1}}],["bypass",{"2":{"30":1}}],["b8e4",{"2":{"60":1}}],["bbb",{"2":{"58":1}}],["beforeinvocation",{"2":{"74":1}}],["belerweb",{"2":{"60":2}}],["beans",{"2":{"60":3}}],["bean",{"2":{"53":1,"74":4}}],["ben",{"2":{"8":1}}],["bn",{"2":{"46":1}}],["bg",{"2":{"46":1}}],["br",{"2":{"46":1}}],["break",{"2":{"30":1}}],["badhanyupinyinoutputformatcombination",{"2":{"60":2}}],["badcredentialsexception",{"2":{"42":2}}],["banner",{"2":{"53":2,"54":2}}],["bashpnpm",{"2":{"28":1}}],["bashnpm",{"2":{"28":1}}],["baselogfilter",{"2":{"71":1}}],["basecoolplugin",{"2":{"53":7,"60":4}}],["basecontroller",{"2":{"12":1,"13":1,"14":2,"15":1,"16":1,"86":1}}],["baseservice中集成了常用的",{"2":{"84":1}}],["baseserviceimpl",{"2":{"16":1}}],["basesysuserservice",{"2":{"74":3}}],["basesysuserentity>lambdaquery",{"2":{"42":2,"74":1}}],["basesysuserentity",{"2":{"42":6,"74":3}}],["basesyspermsservice",{"2":{"74":8}}],["basesyslogservice",{"2":{"71":3}}],["basesyslogmapper",{"2":{"53":3}}],["baseentity",{"2":{"14":1,"93":1,"94":1}}],["base",{"2":{"14":3,"40":1,"53":1,"82":1,"96":1}}],["bind",{"2":{"30":1,"53":4}}],["boot",{"2":{"105":1}}],["bootstrap",{"2":{"29":1}}],["boolean",{"2":{"74":2}}],["body",{"2":{"15":1}}],["build>",{"2":{"60":2}}],["build",{"2":{"20":1,"33":2,"74":1,"110":3}}],["b",{"0":{"5":1},"2":{"7":1,"37":1,"53":3}}],["abstracthttpconfigurer",{"2":{"74":1}}],["abstractsecurityinterceptor",{"2":{"74":1}}],["abstractopenapiresource",{"2":{"69":1}}],["actuator",{"2":{"82":1}}],["action",{"2":{"53":1}}],["accessdeniedhandler",{"2":{"74":1}}],["aclass",{"2":{"74":1}}],["aop",{"2":{"60":2}}],["aaa",{"2":{"58":1}}],["authprovider",{"2":{"74":4}}],["authenticationconfiguration",{"2":{"74":1}}],["authenticationmanager",{"2":{"74":2}}],["authenticationprovider",{"2":{"74":2}}],["authenticationentrypoint",{"2":{"74":1}}],["authenticated",{"2":{"74":1}}],["authorizehttprequests",{"2":{"74":1}}],["authority",{"2":{"74":3}}],["author",{"2":{"58":1,"59":1}}],["autotable",{"2":{"114":2}}],["automatically",{"2":{"110":1}}],["automatically自动编译功能",{"2":{"110":1}}],["auto",{"2":{"105":1}}],["autowired",{"2":{"74":1}}],["autoprefixurlmapping",{"2":{"20":1}}],["am",{"2":{"46":1}}],["arraylist",{"2":{"74":3}}],["artifactset>",{"2":{"60":2}}],["artifactid>maven",{"2":{"60":1}}],["artifactid>pinyin4j",{"2":{"60":1}}],["artifactid>",{"2":{"60":3}}],["artifactid>hutool",{"2":{"60":1}}],["around",{"2":{"49":2}}],["ar",{"2":{"46":1}}],["args",{"2":{"38":1,"47":1}}],["args$args",{"2":{"30":1}}],["afterinvocation",{"2":{"74":1}}],["af",{"2":{"46":1}}],["az",{"2":{"46":1}}],["anyrequest",{"2":{"74":1}}],["annotations",{"2":{"20":1}}],["annotation",{"2":{"19":2,"40":1,"49":1,"53":5,"57":1,"60":5}}],["and",{"2":{"14":1}}],["aliyun",{"2":{"53":1}}],["aliyuncs",{"2":{"53":1}}],["aliasfor",{"2":{"19":2}}],["alloc",{"2":{"94":2}}],["all",{"2":{"14":1,"22":1,"60":1,"96":1}}],["assets",{"2":{"58":2,"96":1}}],["aspect",{"2":{"49":1}}],["ase",{"2":{"23":1}}],["astype",{"2":{"14":1}}],["as",{"2":{"14":1}}],["apt",{"2":{"110":1}}],["apache",{"2":{"60":1}}],["app端手机密码登录和手机验证码登录",{"2":{"116":1}}],["appsecret",{"2":{"54":1}}],["appid",{"2":{"54":1}}],["application",{"2":{"68":1,"96":1}}],["applicationcontext",{"2":{"53":1}}],["applicationarguments",{"2":{"47":1}}],["applicationrunner",{"2":{"47":1}}],["appdemoinfocontroller",{"2":{"18":1}}],["app",{"2":{"18":4,"71":1}}],["appmarketcouponusercontroller",{"2":{"14":1}}],["api",{"2":{"7":1,"13":1,"14":1,"15":1,"16":1,"19":1,"27":2,"30":2,"33":1,"37":1,"60":4,"69":1,"81":1,"82":1,"86":1}}],["age",{"2":{"14":1}}],["addfilterbefore",{"2":{"74":1}}],["addr",{"2":{"30":5}}],["add",{"2":{"12":1,"13":1,"14":1,"15":1,"16":1,"30":3,"42":4,"74":2,"81":1,"86":1,"96":1}}],["adminbasecommcontroller",{"2":{"96":1}}],["adminauthurls",{"2":{"82":1}}],["admindictinfocontroller",{"2":{"81":1}}],["admindemouserinfocontroller",{"2":{"18":1}}],["admindemoinfocontroller",{"2":{"13":1,"14":1,"15":1,"16":1,"18":3,"86":1}}],["adminuserid",{"2":{"76":1}}],["admin中才能调试",{"2":{"53":1}}],["admin的缓存",{"2":{"53":1}}],["admin前后端的多语言都是基于大模型翻译的",{"2":{"45":1}}],["admin",{"0":{"107":1},"2":{"0":1,"1":2,"18":6,"21":1,"23":1,"26":1,"29":3,"31":1,"33":2,"34":2,"36":1,"38":1,"44":1,"53":9,"56":2,"60":2,"61":1,"64":1,"69":4,"70":1,"74":6,"82":1,"90":1,"97":2,"99":3,"100":3,"101":2,"107":1,"113":1}}],["a",{"2":{"10":2,"53":2}}],["ai",{"0":{"7":1,"37":1,"43":1},"2":{"4":1,"43":6,"107":5,"112":1,"114":1,"117":1}}],["你的项目",{"2":{"110":1}}],["你的star是我们最大的动力",{"2":{"98":1}}],["你的贡献可能给其他人代码巨大的帮助",{"2":{"0":1}}],["你将会看到后端的欢迎页面",{"2":{"69":1}}],["你可以这样做",{"2":{"110":1}}],["你可以自己开发插件",{"2":{"50":1}}],["你可以在这边了解到一些关于我们框架的最新动态",{"2":{"4":1}}],["你需要把生成的eps",{"2":{"33":1}}],["抖音",{"0":{"4":1}}],["扫一扫加入微信开发交流群",{"2":{"3":1}}],["微信",{"0":{"3":1},"2":{"112":1}}],["共创一些美好的事情",{"2":{"2":1}}],["共同参与开源",{"2":{"0":1}}],["交流合作",{"0":{"2":1},"1":{"3":1,"4":1,"5":1,"6":1}}],["地址",{"0":{"1":1}}],["积极提交pull",{"2":{"0":1}}],["版相关功能",{"2":{"118":1}}],["版本一致",{"2":{"97":1}}],["版本号",{"2":{"59":1}}],["版本+宝塔为例",{"2":{"26":1}}],["版本的也可以参考",{"2":{"25":1}}],["版本为例",{"2":{"25":1}}],["版本才有",{"2":{"18":1}}],["版",{"2":{"0":1}}],["介绍",{"0":{"0":1}}]],"serializationVersion":2}';export{e as default}; diff --git a/.vitepress/dist/assets/chunks/VPLocalSearchBox.CRB2ZbE3.js b/.vitepress/dist/assets/chunks/VPLocalSearchBox.CRB2ZbE3.js new file mode 100644 index 0000000..085b93d --- /dev/null +++ b/.vitepress/dist/assets/chunks/VPLocalSearchBox.CRB2ZbE3.js @@ -0,0 +1,8 @@ +var Nt=Object.defineProperty;var Ft=(a,e,t)=>e in a?Nt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t;var Ce=(a,e,t)=>Ft(a,typeof e!="symbol"?e+"":e,t);import{V as Ot,B as le,f as ge,ai as et,aj as Rt,ak as Ct,al as At,m as $e,am as Mt,d as Lt,an as tt,r as fe,ao as Dt,ap as zt,n as Pt,aq as Vt,p as Ae,P as he,O as _e,ar as $t,as as jt,W as Bt,R as Wt,$ as Kt,c as Jt,o as H,g as _,a0 as Ut,at as qt,j as L,au as Gt,av as Ht,a as Z,b as Se,z as nt,A as st,F as it,I as pe,h as me,aw as Qt,ax as rt,ay as Yt,a6 as Zt,ab as Xt,az as en,_ as tn}from"./framework.BKXlU_Nx.js";import{u as nn,c as sn}from"./theme.C9_-QGMz.js";const rn={root:()=>Ot(()=>import("./@localSearchIndexroot.DESyfF_S.js"),[])};/*! +* tabbable 6.2.0 +* @license MIT, https://github.com/focus-trap/tabbable/blob/master/LICENSE +*/var mt=["input:not([inert])","select:not([inert])","textarea:not([inert])","a[href]:not([inert])","button:not([inert])","[tabindex]:not(slot):not([inert])","audio[controls]:not([inert])","video[controls]:not([inert])",'[contenteditable]:not([contenteditable="false"]):not([inert])',"details>summary:first-of-type:not([inert])","details:not([inert])"],ke=mt.join(","),vt=typeof Element>"u",re=vt?function(){}:Element.prototype.matches||Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector,Ne=!vt&&Element.prototype.getRootNode?function(a){var e;return a==null||(e=a.getRootNode)===null||e===void 0?void 0:e.call(a)}:function(a){return a==null?void 0:a.ownerDocument},Fe=function a(e,t){var n;t===void 0&&(t=!0);var s=e==null||(n=e.getAttribute)===null||n===void 0?void 0:n.call(e,"inert"),r=s===""||s==="true",i=r||t&&e&&a(e.parentNode);return i},an=function(e){var t,n=e==null||(t=e.getAttribute)===null||t===void 0?void 0:t.call(e,"contenteditable");return n===""||n==="true"},gt=function(e,t,n){if(Fe(e))return[];var s=Array.prototype.slice.apply(e.querySelectorAll(ke));return t&&re.call(e,ke)&&s.unshift(e),s=s.filter(n),s},bt=function a(e,t,n){for(var s=[],r=Array.from(e);r.length;){var i=r.shift();if(!Fe(i,!1))if(i.tagName==="SLOT"){var o=i.assignedElements(),l=o.length?o:i.children,c=a(l,!0,n);n.flatten?s.push.apply(s,c):s.push({scopeParent:i,candidates:c})}else{var f=re.call(i,ke);f&&n.filter(i)&&(t||!e.includes(i))&&s.push(i);var v=i.shadowRoot||typeof n.getShadowRoot=="function"&&n.getShadowRoot(i),h=!Fe(v,!1)&&(!n.shadowRootFilter||n.shadowRootFilter(i));if(v&&h){var b=a(v===!0?i.children:v.children,!0,n);n.flatten?s.push.apply(s,b):s.push({scopeParent:i,candidates:b})}else r.unshift.apply(r,i.children)}}return s},yt=function(e){return!isNaN(parseInt(e.getAttribute("tabindex"),10))},ie=function(e){if(!e)throw new Error("No node provided");return e.tabIndex<0&&(/^(AUDIO|VIDEO|DETAILS)$/.test(e.tagName)||an(e))&&!yt(e)?0:e.tabIndex},on=function(e,t){var n=ie(e);return n<0&&t&&!yt(e)?0:n},ln=function(e,t){return e.tabIndex===t.tabIndex?e.documentOrder-t.documentOrder:e.tabIndex-t.tabIndex},wt=function(e){return e.tagName==="INPUT"},cn=function(e){return wt(e)&&e.type==="hidden"},un=function(e){var t=e.tagName==="DETAILS"&&Array.prototype.slice.apply(e.children).some(function(n){return n.tagName==="SUMMARY"});return t},dn=function(e,t){for(var n=0;nsummary:first-of-type"),i=r?e.parentElement:e;if(re.call(i,"details:not([open]) *"))return!0;if(!n||n==="full"||n==="legacy-full"){if(typeof s=="function"){for(var o=e;e;){var l=e.parentElement,c=Ne(e);if(l&&!l.shadowRoot&&s(l)===!0)return at(e);e.assignedSlot?e=e.assignedSlot:!l&&c!==e.ownerDocument?e=c.host:e=l}e=o}if(mn(e))return!e.getClientRects().length;if(n!=="legacy-full")return!0}else if(n==="non-zero-area")return at(e);return!1},gn=function(e){if(/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(e.tagName))for(var t=e.parentElement;t;){if(t.tagName==="FIELDSET"&&t.disabled){for(var n=0;n=0)},yn=function a(e){var t=[],n=[];return e.forEach(function(s,r){var i=!!s.scopeParent,o=i?s.scopeParent:s,l=on(o,i),c=i?a(s.candidates):o;l===0?i?t.push.apply(t,c):t.push(o):n.push({documentOrder:r,tabIndex:l,item:s,isScope:i,content:c})}),n.sort(ln).reduce(function(s,r){return r.isScope?s.push.apply(s,r.content):s.push(r.content),s},[]).concat(t)},wn=function(e,t){t=t||{};var n;return t.getShadowRoot?n=bt([e],t.includeContainer,{filter:je.bind(null,t),flatten:!1,getShadowRoot:t.getShadowRoot,shadowRootFilter:bn}):n=gt(e,t.includeContainer,je.bind(null,t)),yn(n)},xn=function(e,t){t=t||{};var n;return t.getShadowRoot?n=bt([e],t.includeContainer,{filter:Oe.bind(null,t),flatten:!0,getShadowRoot:t.getShadowRoot}):n=gt(e,t.includeContainer,Oe.bind(null,t)),n},ae=function(e,t){if(t=t||{},!e)throw new Error("No node provided");return re.call(e,ke)===!1?!1:je(t,e)},_n=mt.concat("iframe").join(","),Me=function(e,t){if(t=t||{},!e)throw new Error("No node provided");return re.call(e,_n)===!1?!1:Oe(t,e)};/*! +* focus-trap 7.6.4 +* @license MIT, https://github.com/focus-trap/focus-trap/blob/master/LICENSE +*/function Be(a,e){(e==null||e>a.length)&&(e=a.length);for(var t=0,n=Array(e);t0){var n=e[e.length-1];n!==t&&n._setPausedState(!0)}var s=e.indexOf(t);s===-1||e.splice(s,1),e.push(t)},deactivateTrap:function(e,t){var n=e.indexOf(t);n!==-1&&e.splice(n,1),e.length>0&&!e[e.length-1]._isManuallyPaused()&&e[e.length-1]._setPausedState(!1)}},Rn=function(e){return e.tagName&&e.tagName.toLowerCase()==="input"&&typeof e.select=="function"},Cn=function(e){return(e==null?void 0:e.key)==="Escape"||(e==null?void 0:e.key)==="Esc"||(e==null?void 0:e.keyCode)===27},be=function(e){return(e==null?void 0:e.key)==="Tab"||(e==null?void 0:e.keyCode)===9},An=function(e){return be(e)&&!e.shiftKey},Mn=function(e){return be(e)&&e.shiftKey},ut=function(e){return setTimeout(e,0)},ve=function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),s=1;s1&&arguments[1]!==void 0?arguments[1]:{},g=d.hasFallback,E=g===void 0?!1:g,T=d.params,F=T===void 0?[]:T,S=r[u];if(typeof S=="function"&&(S=S.apply(void 0,kn(F))),S===!0&&(S=void 0),!S){if(S===void 0||S===!1)return S;throw new Error("`".concat(u,"` was specified but was not a node, or did not return a node"))}var R=S;if(typeof S=="string"){try{R=n.querySelector(S)}catch(m){throw new Error("`".concat(u,'` appears to be an invalid selector; error="').concat(m.message,'"'))}if(!R&&!E)throw new Error("`".concat(u,"` as selector refers to no known node"))}return R},v=function(){var u=f("initialFocus",{hasFallback:!0});if(u===!1)return!1;if(u===void 0||u&&!Me(u,r.tabbableOptions))if(c(n.activeElement)>=0)u=n.activeElement;else{var d=i.tabbableGroups[0],g=d&&d.firstTabbableNode;u=g||f("fallbackFocus")}else u===null&&(u=f("fallbackFocus"));if(!u)throw new Error("Your focus-trap needs to have at least one focusable element");return u},h=function(){if(i.containerGroups=i.containers.map(function(u){var d=wn(u,r.tabbableOptions),g=xn(u,r.tabbableOptions),E=d.length>0?d[0]:void 0,T=d.length>0?d[d.length-1]:void 0,F=g.find(function(m){return ae(m)}),S=g.slice().reverse().find(function(m){return ae(m)}),R=!!d.find(function(m){return ie(m)>0});return{container:u,tabbableNodes:d,focusableNodes:g,posTabIndexesFound:R,firstTabbableNode:E,lastTabbableNode:T,firstDomTabbableNode:F,lastDomTabbableNode:S,nextTabbableNode:function(p){var I=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,O=d.indexOf(p);return O<0?I?g.slice(g.indexOf(p)+1).find(function(z){return ae(z)}):g.slice(0,g.indexOf(p)).reverse().find(function(z){return ae(z)}):d[O+(I?1:-1)]}}}),i.tabbableGroups=i.containerGroups.filter(function(u){return u.tabbableNodes.length>0}),i.tabbableGroups.length<=0&&!f("fallbackFocus"))throw new Error("Your focus-trap must have at least one container with at least one tabbable node in it at all times");if(i.containerGroups.find(function(u){return u.posTabIndexesFound})&&i.containerGroups.length>1)throw new Error("At least one node with a positive tabindex was found in one of your focus-trap's multiple containers. Positive tabindexes are only supported in single-container focus-traps.")},b=function(u){var d=u.activeElement;if(d)return d.shadowRoot&&d.shadowRoot.activeElement!==null?b(d.shadowRoot):d},y=function(u){if(u!==!1&&u!==b(document)){if(!u||!u.focus){y(v());return}u.focus({preventScroll:!!r.preventScroll}),i.mostRecentlyFocusedNode=u,Rn(u)&&u.select()}},x=function(u){var d=f("setReturnFocus",{params:[u]});return d||(d===!1?!1:u)},w=function(u){var d=u.target,g=u.event,E=u.isBackward,T=E===void 0?!1:E;d=d||Ee(g),h();var F=null;if(i.tabbableGroups.length>0){var S=c(d,g),R=S>=0?i.containerGroups[S]:void 0;if(S<0)T?F=i.tabbableGroups[i.tabbableGroups.length-1].lastTabbableNode:F=i.tabbableGroups[0].firstTabbableNode;else if(T){var m=i.tabbableGroups.findIndex(function(V){var k=V.firstTabbableNode;return d===k});if(m<0&&(R.container===d||Me(d,r.tabbableOptions)&&!ae(d,r.tabbableOptions)&&!R.nextTabbableNode(d,!1))&&(m=S),m>=0){var p=m===0?i.tabbableGroups.length-1:m-1,I=i.tabbableGroups[p];F=ie(d)>=0?I.lastTabbableNode:I.lastDomTabbableNode}else be(g)||(F=R.nextTabbableNode(d,!1))}else{var O=i.tabbableGroups.findIndex(function(V){var k=V.lastTabbableNode;return d===k});if(O<0&&(R.container===d||Me(d,r.tabbableOptions)&&!ae(d,r.tabbableOptions)&&!R.nextTabbableNode(d))&&(O=S),O>=0){var z=O===i.tabbableGroups.length-1?0:O+1,P=i.tabbableGroups[z];F=ie(d)>=0?P.firstTabbableNode:P.firstDomTabbableNode}else be(g)||(F=R.nextTabbableNode(d))}}else F=f("fallbackFocus");return F},C=function(u){var d=Ee(u);if(!(c(d,u)>=0)){if(ve(r.clickOutsideDeactivates,u)){o.deactivate({returnFocus:r.returnFocusOnDeactivate});return}ve(r.allowOutsideClick,u)||u.preventDefault()}},A=function(u){var d=Ee(u),g=c(d,u)>=0;if(g||d instanceof Document)g&&(i.mostRecentlyFocusedNode=d);else{u.stopImmediatePropagation();var E,T=!0;if(i.mostRecentlyFocusedNode)if(ie(i.mostRecentlyFocusedNode)>0){var F=c(i.mostRecentlyFocusedNode),S=i.containerGroups[F].tabbableNodes;if(S.length>0){var R=S.findIndex(function(m){return m===i.mostRecentlyFocusedNode});R>=0&&(r.isKeyForward(i.recentNavEvent)?R+1=0&&(E=S[R-1],T=!1))}}else i.containerGroups.some(function(m){return m.tabbableNodes.some(function(p){return ie(p)>0})})||(T=!1);else T=!1;T&&(E=w({target:i.mostRecentlyFocusedNode,isBackward:r.isKeyBackward(i.recentNavEvent)})),y(E||i.mostRecentlyFocusedNode||v())}i.recentNavEvent=void 0},J=function(u){var d=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;i.recentNavEvent=u;var g=w({event:u,isBackward:d});g&&(be(u)&&u.preventDefault(),y(g))},Q=function(u){(r.isKeyForward(u)||r.isKeyBackward(u))&&J(u,r.isKeyBackward(u))},W=function(u){Cn(u)&&ve(r.escapeDeactivates,u)!==!1&&(u.preventDefault(),o.deactivate())},$=function(u){var d=Ee(u);c(d,u)>=0||ve(r.clickOutsideDeactivates,u)||ve(r.allowOutsideClick,u)||(u.preventDefault(),u.stopImmediatePropagation())},j=function(){if(i.active)return ct.activateTrap(s,o),i.delayInitialFocusTimer=r.delayInitialFocus?ut(function(){y(v())}):y(v()),n.addEventListener("focusin",A,!0),n.addEventListener("mousedown",C,{capture:!0,passive:!1}),n.addEventListener("touchstart",C,{capture:!0,passive:!1}),n.addEventListener("click",$,{capture:!0,passive:!1}),n.addEventListener("keydown",Q,{capture:!0,passive:!1}),n.addEventListener("keydown",W),o},ye=function(){if(i.active)return n.removeEventListener("focusin",A,!0),n.removeEventListener("mousedown",C,!0),n.removeEventListener("touchstart",C,!0),n.removeEventListener("click",$,!0),n.removeEventListener("keydown",Q,!0),n.removeEventListener("keydown",W),o},M=function(u){var d=u.some(function(g){var E=Array.from(g.removedNodes);return E.some(function(T){return T===i.mostRecentlyFocusedNode})});d&&y(v())},U=typeof window<"u"&&"MutationObserver"in window?new MutationObserver(M):void 0,q=function(){U&&(U.disconnect(),i.active&&!i.paused&&i.containers.map(function(u){U.observe(u,{subtree:!0,childList:!0})}))};return o={get active(){return i.active},get paused(){return i.paused},activate:function(u){if(i.active)return this;var d=l(u,"onActivate"),g=l(u,"onPostActivate"),E=l(u,"checkCanFocusTrap");E||h(),i.active=!0,i.paused=!1,i.nodeFocusedBeforeActivation=n.activeElement,d==null||d();var T=function(){E&&h(),j(),q(),g==null||g()};return E?(E(i.containers.concat()).then(T,T),this):(T(),this)},deactivate:function(u){if(!i.active)return this;var d=lt({onDeactivate:r.onDeactivate,onPostDeactivate:r.onPostDeactivate,checkCanReturnFocus:r.checkCanReturnFocus},u);clearTimeout(i.delayInitialFocusTimer),i.delayInitialFocusTimer=void 0,ye(),i.active=!1,i.paused=!1,q(),ct.deactivateTrap(s,o);var g=l(d,"onDeactivate"),E=l(d,"onPostDeactivate"),T=l(d,"checkCanReturnFocus"),F=l(d,"returnFocus","returnFocusOnDeactivate");g==null||g();var S=function(){ut(function(){F&&y(x(i.nodeFocusedBeforeActivation)),E==null||E()})};return F&&T?(T(x(i.nodeFocusedBeforeActivation)).then(S,S),this):(S(),this)},pause:function(u){return i.active?(i.manuallyPaused=!0,this._setPausedState(!0,u)):this},unpause:function(u){return i.active?(i.manuallyPaused=!1,s[s.length-1]!==this?this:this._setPausedState(!1,u)):this},updateContainerElements:function(u){var d=[].concat(u).filter(Boolean);return i.containers=d.map(function(g){return typeof g=="string"?n.querySelector(g):g}),i.active&&h(),q(),this}},Object.defineProperties(o,{_isManuallyPaused:{value:function(){return i.manuallyPaused}},_setPausedState:{value:function(u,d){if(i.paused===u)return this;if(i.paused=u,u){var g=l(d,"onPause"),E=l(d,"onPostPause");g==null||g(),ye(),q(),E==null||E()}else{var T=l(d,"onUnpause"),F=l(d,"onPostUnpause");T==null||T(),h(),j(),q(),F==null||F()}return this}}}),o.updateContainerElements(e),o};function zn(a,e={}){let t;const{immediate:n,...s}=e,r=le(!1),i=le(!1),o=h=>t&&t.activate(h),l=h=>t&&t.deactivate(h),c=()=>{t&&(t.pause(),i.value=!0)},f=()=>{t&&(t.unpause(),i.value=!1)},v=ge(()=>{const h=et(a);return Rt(h).map(b=>{const y=et(b);return typeof y=="string"?y:Ct(y)}).filter(At)});return $e(v,h=>{h.length&&(t=Dn(h,{...s,onActivate(){r.value=!0,e.onActivate&&e.onActivate()},onDeactivate(){r.value=!1,e.onDeactivate&&e.onDeactivate()}}),n&&o())},{flush:"post"}),Mt(()=>l()),{hasFocus:r,isPaused:i,activate:o,deactivate:l,pause:c,unpause:f}}class ce{constructor(e,t=!0,n=[],s=5e3){this.ctx=e,this.iframes=t,this.exclude=n,this.iframesTimeout=s}static matches(e,t){const n=typeof t=="string"?[t]:t,s=e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.oMatchesSelector||e.webkitMatchesSelector;if(s){let r=!1;return n.every(i=>s.call(e,i)?(r=!0,!1):!0),r}else return!1}getContexts(){let e,t=[];return typeof this.ctx>"u"||!this.ctx?e=[]:NodeList.prototype.isPrototypeOf(this.ctx)?e=Array.prototype.slice.call(this.ctx):Array.isArray(this.ctx)?e=this.ctx:typeof this.ctx=="string"?e=Array.prototype.slice.call(document.querySelectorAll(this.ctx)):e=[this.ctx],e.forEach(n=>{const s=t.filter(r=>r.contains(n)).length>0;t.indexOf(n)===-1&&!s&&t.push(n)}),t}getIframeContents(e,t,n=()=>{}){let s;try{const r=e.contentWindow;if(s=r.document,!r||!s)throw new Error("iframe inaccessible")}catch{n()}s&&t(s)}isIframeBlank(e){const t="about:blank",n=e.getAttribute("src").trim();return e.contentWindow.location.href===t&&n!==t&&n}observeIframeLoad(e,t,n){let s=!1,r=null;const i=()=>{if(!s){s=!0,clearTimeout(r);try{this.isIframeBlank(e)||(e.removeEventListener("load",i),this.getIframeContents(e,t,n))}catch{n()}}};e.addEventListener("load",i),r=setTimeout(i,this.iframesTimeout)}onIframeReady(e,t,n){try{e.contentWindow.document.readyState==="complete"?this.isIframeBlank(e)?this.observeIframeLoad(e,t,n):this.getIframeContents(e,t,n):this.observeIframeLoad(e,t,n)}catch{n()}}waitForIframes(e,t){let n=0;this.forEachIframe(e,()=>!0,s=>{n++,this.waitForIframes(s.querySelector("html"),()=>{--n||t()})},s=>{s||t()})}forEachIframe(e,t,n,s=()=>{}){let r=e.querySelectorAll("iframe"),i=r.length,o=0;r=Array.prototype.slice.call(r);const l=()=>{--i<=0&&s(o)};i||l(),r.forEach(c=>{ce.matches(c,this.exclude)?l():this.onIframeReady(c,f=>{t(c)&&(o++,n(f)),l()},l)})}createIterator(e,t,n){return document.createNodeIterator(e,t,n,!1)}createInstanceOnIframe(e){return new ce(e.querySelector("html"),this.iframes)}compareNodeIframe(e,t,n){const s=e.compareDocumentPosition(n),r=Node.DOCUMENT_POSITION_PRECEDING;if(s&r)if(t!==null){const i=t.compareDocumentPosition(n),o=Node.DOCUMENT_POSITION_FOLLOWING;if(i&o)return!0}else return!0;return!1}getIteratorNode(e){const t=e.previousNode();let n;return t===null?n=e.nextNode():n=e.nextNode()&&e.nextNode(),{prevNode:t,node:n}}checkIframeFilter(e,t,n,s){let r=!1,i=!1;return s.forEach((o,l)=>{o.val===n&&(r=l,i=o.handled)}),this.compareNodeIframe(e,t,n)?(r===!1&&!i?s.push({val:n,handled:!0}):r!==!1&&!i&&(s[r].handled=!0),!0):(r===!1&&s.push({val:n,handled:!1}),!1)}handleOpenIframes(e,t,n,s){e.forEach(r=>{r.handled||this.getIframeContents(r.val,i=>{this.createInstanceOnIframe(i).forEachNode(t,n,s)})})}iterateThroughNodes(e,t,n,s,r){const i=this.createIterator(t,e,s);let o=[],l=[],c,f,v=()=>({prevNode:f,node:c}=this.getIteratorNode(i),c);for(;v();)this.iframes&&this.forEachIframe(t,h=>this.checkIframeFilter(c,f,h,o),h=>{this.createInstanceOnIframe(h).forEachNode(e,b=>l.push(b),s)}),l.push(c);l.forEach(h=>{n(h)}),this.iframes&&this.handleOpenIframes(o,e,n,s),r()}forEachNode(e,t,n,s=()=>{}){const r=this.getContexts();let i=r.length;i||s(),r.forEach(o=>{const l=()=>{this.iterateThroughNodes(e,o,t,n,()=>{--i<=0&&s()})};this.iframes?this.waitForIframes(o,l):l()})}}let Pn=class{constructor(e){this.ctx=e,this.ie=!1;const t=window.navigator.userAgent;(t.indexOf("MSIE")>-1||t.indexOf("Trident")>-1)&&(this.ie=!0)}set opt(e){this._opt=Object.assign({},{element:"",className:"",exclude:[],iframes:!1,iframesTimeout:5e3,separateWordSearch:!0,diacritics:!0,synonyms:{},accuracy:"partially",acrossElements:!1,caseSensitive:!1,ignoreJoiners:!1,ignoreGroups:0,ignorePunctuation:[],wildcards:"disabled",each:()=>{},noMatch:()=>{},filter:()=>!0,done:()=>{},debug:!1,log:window.console},e)}get opt(){return this._opt}get iterator(){return new ce(this.ctx,this.opt.iframes,this.opt.exclude,this.opt.iframesTimeout)}log(e,t="debug"){const n=this.opt.log;this.opt.debug&&typeof n=="object"&&typeof n[t]=="function"&&n[t](`mark.js: ${e}`)}escapeStr(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}createRegExp(e){return this.opt.wildcards!=="disabled"&&(e=this.setupWildcardsRegExp(e)),e=this.escapeStr(e),Object.keys(this.opt.synonyms).length&&(e=this.createSynonymsRegExp(e)),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),this.opt.diacritics&&(e=this.createDiacriticsRegExp(e)),e=this.createMergedBlanksRegExp(e),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.createJoinersRegExp(e)),this.opt.wildcards!=="disabled"&&(e=this.createWildcardsRegExp(e)),e=this.createAccuracyRegExp(e),e}createSynonymsRegExp(e){const t=this.opt.synonyms,n=this.opt.caseSensitive?"":"i",s=this.opt.ignoreJoiners||this.opt.ignorePunctuation.length?"\0":"";for(let r in t)if(t.hasOwnProperty(r)){const i=t[r],o=this.opt.wildcards!=="disabled"?this.setupWildcardsRegExp(r):this.escapeStr(r),l=this.opt.wildcards!=="disabled"?this.setupWildcardsRegExp(i):this.escapeStr(i);o!==""&&l!==""&&(e=e.replace(new RegExp(`(${this.escapeStr(o)}|${this.escapeStr(l)})`,`gm${n}`),s+`(${this.processSynomyms(o)}|${this.processSynomyms(l)})`+s))}return e}processSynomyms(e){return(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),e}setupWildcardsRegExp(e){return e=e.replace(/(?:\\)*\?/g,t=>t.charAt(0)==="\\"?"?":""),e.replace(/(?:\\)*\*/g,t=>t.charAt(0)==="\\"?"*":"")}createWildcardsRegExp(e){let t=this.opt.wildcards==="withSpaces";return e.replace(/\u0001/g,t?"[\\S\\s]?":"\\S?").replace(/\u0002/g,t?"[\\S\\s]*?":"\\S*")}setupIgnoreJoinersRegExp(e){return e.replace(/[^(|)\\]/g,(t,n,s)=>{let r=s.charAt(n+1);return/[(|)\\]/.test(r)||r===""?t:t+"\0"})}createJoinersRegExp(e){let t=[];const n=this.opt.ignorePunctuation;return Array.isArray(n)&&n.length&&t.push(this.escapeStr(n.join(""))),this.opt.ignoreJoiners&&t.push("\\u00ad\\u200b\\u200c\\u200d"),t.length?e.split(/\u0000+/).join(`[${t.join("")}]*`):e}createDiacriticsRegExp(e){const t=this.opt.caseSensitive?"":"i",n=this.opt.caseSensitive?["aàáảãạăằắẳẵặâầấẩẫậäåāą","AÀÁẢÃẠĂẰẮẲẴẶÂẦẤẨẪẬÄÅĀĄ","cçćč","CÇĆČ","dđď","DĐĎ","eèéẻẽẹêềếểễệëěēę","EÈÉẺẼẸÊỀẾỂỄỆËĚĒĘ","iìíỉĩịîïī","IÌÍỈĨỊÎÏĪ","lł","LŁ","nñňń","NÑŇŃ","oòóỏõọôồốổỗộơởỡớờợöøō","OÒÓỎÕỌÔỒỐỔỖỘƠỞỠỚỜỢÖØŌ","rř","RŘ","sšśșş","SŠŚȘŞ","tťțţ","TŤȚŢ","uùúủũụưừứửữựûüůū","UÙÚỦŨỤƯỪỨỬỮỰÛÜŮŪ","yýỳỷỹỵÿ","YÝỲỶỸỴŸ","zžżź","ZŽŻŹ"]:["aàáảãạăằắẳẵặâầấẩẫậäåāąAÀÁẢÃẠĂẰẮẲẴẶÂẦẤẨẪẬÄÅĀĄ","cçćčCÇĆČ","dđďDĐĎ","eèéẻẽẹêềếểễệëěēęEÈÉẺẼẸÊỀẾỂỄỆËĚĒĘ","iìíỉĩịîïīIÌÍỈĨỊÎÏĪ","lłLŁ","nñňńNÑŇŃ","oòóỏõọôồốổỗộơởỡớờợöøōOÒÓỎÕỌÔỒỐỔỖỘƠỞỠỚỜỢÖØŌ","rřRŘ","sšśșşSŠŚȘŞ","tťțţTŤȚŢ","uùúủũụưừứửữựûüůūUÙÚỦŨỤƯỪỨỬỮỰÛÜŮŪ","yýỳỷỹỵÿYÝỲỶỸỴŸ","zžżźZŽŻŹ"];let s=[];return e.split("").forEach(r=>{n.every(i=>{if(i.indexOf(r)!==-1){if(s.indexOf(i)>-1)return!1;e=e.replace(new RegExp(`[${i}]`,`gm${t}`),`[${i}]`),s.push(i)}return!0})}),e}createMergedBlanksRegExp(e){return e.replace(/[\s]+/gmi,"[\\s]+")}createAccuracyRegExp(e){const t="!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~¡¿";let n=this.opt.accuracy,s=typeof n=="string"?n:n.value,r=typeof n=="string"?[]:n.limiters,i="";switch(r.forEach(o=>{i+=`|${this.escapeStr(o)}`}),s){case"partially":default:return`()(${e})`;case"complementary":return i="\\s"+(i||this.escapeStr(t)),`()([^${i}]*${e}[^${i}]*)`;case"exactly":return`(^|\\s${i})(${e})(?=$|\\s${i})`}}getSeparatedKeywords(e){let t=[];return e.forEach(n=>{this.opt.separateWordSearch?n.split(" ").forEach(s=>{s.trim()&&t.indexOf(s)===-1&&t.push(s)}):n.trim()&&t.indexOf(n)===-1&&t.push(n)}),{keywords:t.sort((n,s)=>s.length-n.length),length:t.length}}isNumeric(e){return Number(parseFloat(e))==e}checkRanges(e){if(!Array.isArray(e)||Object.prototype.toString.call(e[0])!=="[object Object]")return this.log("markRanges() will only accept an array of objects"),this.opt.noMatch(e),[];const t=[];let n=0;return e.sort((s,r)=>s.start-r.start).forEach(s=>{let{start:r,end:i,valid:o}=this.callNoMatchOnInvalidRanges(s,n);o&&(s.start=r,s.length=i-r,t.push(s),n=i)}),t}callNoMatchOnInvalidRanges(e,t){let n,s,r=!1;return e&&typeof e.start<"u"?(n=parseInt(e.start,10),s=n+parseInt(e.length,10),this.isNumeric(e.start)&&this.isNumeric(e.length)&&s-t>0&&s-n>0?r=!0:(this.log(`Ignoring invalid or overlapping range: ${JSON.stringify(e)}`),this.opt.noMatch(e))):(this.log(`Ignoring invalid range: ${JSON.stringify(e)}`),this.opt.noMatch(e)),{start:n,end:s,valid:r}}checkWhitespaceRanges(e,t,n){let s,r=!0,i=n.length,o=t-i,l=parseInt(e.start,10)-o;return l=l>i?i:l,s=l+parseInt(e.length,10),s>i&&(s=i,this.log(`End range automatically set to the max value of ${i}`)),l<0||s-l<0||l>i||s>i?(r=!1,this.log(`Invalid range: ${JSON.stringify(e)}`),this.opt.noMatch(e)):n.substring(l,s).replace(/\s+/g,"")===""&&(r=!1,this.log("Skipping whitespace only range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:l,end:s,valid:r}}getTextNodes(e){let t="",n=[];this.iterator.forEachNode(NodeFilter.SHOW_TEXT,s=>{n.push({start:t.length,end:(t+=s.textContent).length,node:s})},s=>this.matchesExclude(s.parentNode)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT,()=>{e({value:t,nodes:n})})}matchesExclude(e){return ce.matches(e,this.opt.exclude.concat(["script","style","title","head","html"]))}wrapRangeInTextNode(e,t,n){const s=this.opt.element?this.opt.element:"mark",r=e.splitText(t),i=r.splitText(n-t);let o=document.createElement(s);return o.setAttribute("data-markjs","true"),this.opt.className&&o.setAttribute("class",this.opt.className),o.textContent=r.textContent,r.parentNode.replaceChild(o,r),i}wrapRangeInMappedTextNode(e,t,n,s,r){e.nodes.every((i,o)=>{const l=e.nodes[o+1];if(typeof l>"u"||l.start>t){if(!s(i.node))return!1;const c=t-i.start,f=(n>i.end?i.end:n)-i.start,v=e.value.substr(0,i.start),h=e.value.substr(f+i.start);if(i.node=this.wrapRangeInTextNode(i.node,c,f),e.value=v+h,e.nodes.forEach((b,y)=>{y>=o&&(e.nodes[y].start>0&&y!==o&&(e.nodes[y].start-=f),e.nodes[y].end-=f)}),n-=f,r(i.node.previousSibling,i.start),n>i.end)t=i.end;else return!1}return!0})}wrapMatches(e,t,n,s,r){const i=t===0?0:t+1;this.getTextNodes(o=>{o.nodes.forEach(l=>{l=l.node;let c;for(;(c=e.exec(l.textContent))!==null&&c[i]!=="";){if(!n(c[i],l))continue;let f=c.index;if(i!==0)for(let v=1;v{let l;for(;(l=e.exec(o.value))!==null&&l[i]!=="";){let c=l.index;if(i!==0)for(let v=1;vn(l[i],v),(v,h)=>{e.lastIndex=h,s(v)})}r()})}wrapRangeFromIndex(e,t,n,s){this.getTextNodes(r=>{const i=r.value.length;e.forEach((o,l)=>{let{start:c,end:f,valid:v}=this.checkWhitespaceRanges(o,i,r.value);v&&this.wrapRangeInMappedTextNode(r,c,f,h=>t(h,o,r.value.substring(c,f),l),h=>{n(h,o)})}),s()})}unwrapMatches(e){const t=e.parentNode;let n=document.createDocumentFragment();for(;e.firstChild;)n.appendChild(e.removeChild(e.firstChild));t.replaceChild(n,e),this.ie?this.normalizeTextNode(t):t.normalize()}normalizeTextNode(e){if(e){if(e.nodeType===3)for(;e.nextSibling&&e.nextSibling.nodeType===3;)e.nodeValue+=e.nextSibling.nodeValue,e.parentNode.removeChild(e.nextSibling);else this.normalizeTextNode(e.firstChild);this.normalizeTextNode(e.nextSibling)}}markRegExp(e,t){this.opt=t,this.log(`Searching with expression "${e}"`);let n=0,s="wrapMatches";const r=i=>{n++,this.opt.each(i)};this.opt.acrossElements&&(s="wrapMatchesAcrossElements"),this[s](e,this.opt.ignoreGroups,(i,o)=>this.opt.filter(o,i,n),r,()=>{n===0&&this.opt.noMatch(e),this.opt.done(n)})}mark(e,t){this.opt=t;let n=0,s="wrapMatches";const{keywords:r,length:i}=this.getSeparatedKeywords(typeof e=="string"?[e]:e),o=this.opt.caseSensitive?"":"i",l=c=>{let f=new RegExp(this.createRegExp(c),`gm${o}`),v=0;this.log(`Searching with expression "${f}"`),this[s](f,1,(h,b)=>this.opt.filter(b,c,n,v),h=>{v++,n++,this.opt.each(h)},()=>{v===0&&this.opt.noMatch(c),r[i-1]===c?this.opt.done(n):l(r[r.indexOf(c)+1])})};this.opt.acrossElements&&(s="wrapMatchesAcrossElements"),i===0?this.opt.done(n):l(r[0])}markRanges(e,t){this.opt=t;let n=0,s=this.checkRanges(e);s&&s.length?(this.log("Starting to mark with the following ranges: "+JSON.stringify(s)),this.wrapRangeFromIndex(s,(r,i,o,l)=>this.opt.filter(r,i,o,l),(r,i)=>{n++,this.opt.each(r,i)},()=>{this.opt.done(n)})):this.opt.done(n)}unmark(e){this.opt=e;let t=this.opt.element?this.opt.element:"*";t+="[data-markjs]",this.opt.className&&(t+=`.${this.opt.className}`),this.log(`Removal selector "${t}"`),this.iterator.forEachNode(NodeFilter.SHOW_ELEMENT,n=>{this.unwrapMatches(n)},n=>{const s=ce.matches(n,t),r=this.matchesExclude(n);return!s||r?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT},this.opt.done)}};function Vn(a){const e=new Pn(a);return this.mark=(t,n)=>(e.mark(t,n),this),this.markRegExp=(t,n)=>(e.markRegExp(t,n),this),this.markRanges=(t,n)=>(e.markRanges(t,n),this),this.unmark=t=>(e.unmark(t),this),this}const $n="ENTRIES",xt="KEYS",_t="VALUES",D="";class Le{constructor(e,t){const n=e._tree,s=Array.from(n.keys());this.set=e,this._type=t,this._path=s.length>0?[{node:n,keys:s}]:[]}next(){const e=this.dive();return this.backtrack(),e}dive(){if(this._path.length===0)return{done:!0,value:void 0};const{node:e,keys:t}=oe(this._path);if(oe(t)===D)return{done:!1,value:this.result()};const n=e.get(oe(t));return this._path.push({node:n,keys:Array.from(n.keys())}),this.dive()}backtrack(){if(this._path.length===0)return;const e=oe(this._path).keys;e.pop(),!(e.length>0)&&(this._path.pop(),this.backtrack())}key(){return this.set._prefix+this._path.map(({keys:e})=>oe(e)).filter(e=>e!==D).join("")}value(){return oe(this._path).node.get(D)}result(){switch(this._type){case _t:return this.value();case xt:return this.key();default:return[this.key(),this.value()]}}[Symbol.iterator](){return this}}const oe=a=>a[a.length-1],jn=(a,e,t)=>{const n=new Map;if(e===void 0)return n;const s=e.length+1,r=s+t,i=new Uint8Array(r*s).fill(t+1);for(let o=0;o{const l=r*i;e:for(const c of a.keys())if(c===D){const f=s[l-1];f<=t&&n.set(o,[a.get(c),f])}else{let f=r;for(let v=0;vt)continue e}St(a.get(c),e,t,n,s,f,i,o+c)}};class X{constructor(e=new Map,t=""){this._size=void 0,this._tree=e,this._prefix=t}atPrefix(e){if(!e.startsWith(this._prefix))throw new Error("Mismatched prefix");const[t,n]=Re(this._tree,e.slice(this._prefix.length));if(t===void 0){const[s,r]=Ue(n);for(const i of s.keys())if(i!==D&&i.startsWith(r)){const o=new Map;return o.set(i.slice(r.length),s.get(i)),new X(o,e)}}return new X(t,e)}clear(){this._size=void 0,this._tree.clear()}delete(e){return this._size=void 0,Bn(this._tree,e)}entries(){return new Le(this,$n)}forEach(e){for(const[t,n]of this)e(t,n,this)}fuzzyGet(e,t){return jn(this._tree,e,t)}get(e){const t=We(this._tree,e);return t!==void 0?t.get(D):void 0}has(e){const t=We(this._tree,e);return t!==void 0&&t.has(D)}keys(){return new Le(this,xt)}set(e,t){if(typeof e!="string")throw new Error("key must be a string");return this._size=void 0,De(this._tree,e).set(D,t),this}get size(){if(this._size)return this._size;this._size=0;const e=this.entries();for(;!e.next().done;)this._size+=1;return this._size}update(e,t){if(typeof e!="string")throw new Error("key must be a string");this._size=void 0;const n=De(this._tree,e);return n.set(D,t(n.get(D))),this}fetch(e,t){if(typeof e!="string")throw new Error("key must be a string");this._size=void 0;const n=De(this._tree,e);let s=n.get(D);return s===void 0&&n.set(D,s=t()),s}values(){return new Le(this,_t)}[Symbol.iterator](){return this.entries()}static from(e){const t=new X;for(const[n,s]of e)t.set(n,s);return t}static fromObject(e){return X.from(Object.entries(e))}}const Re=(a,e,t=[])=>{if(e.length===0||a==null)return[a,t];for(const n of a.keys())if(n!==D&&e.startsWith(n))return t.push([a,n]),Re(a.get(n),e.slice(n.length),t);return t.push([a,e]),Re(void 0,"",t)},We=(a,e)=>{if(e.length===0||a==null)return a;for(const t of a.keys())if(t!==D&&e.startsWith(t))return We(a.get(t),e.slice(t.length))},De=(a,e)=>{const t=e.length;e:for(let n=0;a&&n{const[t,n]=Re(a,e);if(t!==void 0){if(t.delete(D),t.size===0)Et(n);else if(t.size===1){const[s,r]=t.entries().next().value;Tt(n,s,r)}}},Et=a=>{if(a.length===0)return;const[e,t]=Ue(a);if(e.delete(t),e.size===0)Et(a.slice(0,-1));else if(e.size===1){const[n,s]=e.entries().next().value;n!==D&&Tt(a.slice(0,-1),n,s)}},Tt=(a,e,t)=>{if(a.length===0)return;const[n,s]=Ue(a);n.set(s+e,t),n.delete(s)},Ue=a=>a[a.length-1],qe="or",It="and",Wn="and_not";class ue{constructor(e){if((e==null?void 0:e.fields)==null)throw new Error('MiniSearch: option "fields" must be provided');const t=e.autoVacuum==null||e.autoVacuum===!0?Ve:e.autoVacuum;this._options={...Pe,...e,autoVacuum:t,searchOptions:{...dt,...e.searchOptions||{}},autoSuggestOptions:{...Gn,...e.autoSuggestOptions||{}}},this._index=new X,this._documentCount=0,this._documentIds=new Map,this._idToShortId=new Map,this._fieldIds={},this._fieldLength=new Map,this._avgFieldLength=[],this._nextId=0,this._storedFields=new Map,this._dirtCount=0,this._currentVacuum=null,this._enqueuedVacuum=null,this._enqueuedVacuumConditions=Je,this.addFields(this._options.fields)}add(e){const{extractField:t,tokenize:n,processTerm:s,fields:r,idField:i}=this._options,o=t(e,i);if(o==null)throw new Error(`MiniSearch: document does not have ID field "${i}"`);if(this._idToShortId.has(o))throw new Error(`MiniSearch: duplicate ID ${o}`);const l=this.addDocumentId(o);this.saveStoredFields(l,e);for(const c of r){const f=t(e,c);if(f==null)continue;const v=n(f.toString(),c),h=this._fieldIds[c],b=new Set(v).size;this.addFieldLength(l,h,this._documentCount-1,b);for(const y of v){const x=s(y,c);if(Array.isArray(x))for(const w of x)this.addTerm(h,l,w);else x&&this.addTerm(h,l,x)}}}addAll(e){for(const t of e)this.add(t)}addAllAsync(e,t={}){const{chunkSize:n=10}=t,s={chunk:[],promise:Promise.resolve()},{chunk:r,promise:i}=e.reduce(({chunk:o,promise:l},c,f)=>(o.push(c),(f+1)%n===0?{chunk:[],promise:l.then(()=>new Promise(v=>setTimeout(v,0))).then(()=>this.addAll(o))}:{chunk:o,promise:l}),s);return i.then(()=>this.addAll(r))}remove(e){const{tokenize:t,processTerm:n,extractField:s,fields:r,idField:i}=this._options,o=s(e,i);if(o==null)throw new Error(`MiniSearch: document does not have ID field "${i}"`);const l=this._idToShortId.get(o);if(l==null)throw new Error(`MiniSearch: cannot remove document with ID ${o}: it is not in the index`);for(const c of r){const f=s(e,c);if(f==null)continue;const v=t(f.toString(),c),h=this._fieldIds[c],b=new Set(v).size;this.removeFieldLength(l,h,this._documentCount,b);for(const y of v){const x=n(y,c);if(Array.isArray(x))for(const w of x)this.removeTerm(h,l,w);else x&&this.removeTerm(h,l,x)}}this._storedFields.delete(l),this._documentIds.delete(l),this._idToShortId.delete(o),this._fieldLength.delete(l),this._documentCount-=1}removeAll(e){if(e)for(const t of e)this.remove(t);else{if(arguments.length>0)throw new Error("Expected documents to be present. Omit the argument to remove all documents.");this._index=new X,this._documentCount=0,this._documentIds=new Map,this._idToShortId=new Map,this._fieldLength=new Map,this._avgFieldLength=[],this._storedFields=new Map,this._nextId=0}}discard(e){const t=this._idToShortId.get(e);if(t==null)throw new Error(`MiniSearch: cannot discard document with ID ${e}: it is not in the index`);this._idToShortId.delete(e),this._documentIds.delete(t),this._storedFields.delete(t),(this._fieldLength.get(t)||[]).forEach((n,s)=>{this.removeFieldLength(t,s,this._documentCount,n)}),this._fieldLength.delete(t),this._documentCount-=1,this._dirtCount+=1,this.maybeAutoVacuum()}maybeAutoVacuum(){if(this._options.autoVacuum===!1)return;const{minDirtFactor:e,minDirtCount:t,batchSize:n,batchWait:s}=this._options.autoVacuum;this.conditionalVacuum({batchSize:n,batchWait:s},{minDirtCount:t,minDirtFactor:e})}discardAll(e){const t=this._options.autoVacuum;try{this._options.autoVacuum=!1;for(const n of e)this.discard(n)}finally{this._options.autoVacuum=t}this.maybeAutoVacuum()}replace(e){const{idField:t,extractField:n}=this._options,s=n(e,t);this.discard(s),this.add(e)}vacuum(e={}){return this.conditionalVacuum(e)}conditionalVacuum(e,t){return this._currentVacuum?(this._enqueuedVacuumConditions=this._enqueuedVacuumConditions&&t,this._enqueuedVacuum!=null?this._enqueuedVacuum:(this._enqueuedVacuum=this._currentVacuum.then(()=>{const n=this._enqueuedVacuumConditions;return this._enqueuedVacuumConditions=Je,this.performVacuuming(e,n)}),this._enqueuedVacuum)):this.vacuumConditionsMet(t)===!1?Promise.resolve():(this._currentVacuum=this.performVacuuming(e),this._currentVacuum)}async performVacuuming(e,t){const n=this._dirtCount;if(this.vacuumConditionsMet(t)){const s=e.batchSize||Ke.batchSize,r=e.batchWait||Ke.batchWait;let i=1;for(const[o,l]of this._index){for(const[c,f]of l)for(const[v]of f)this._documentIds.has(v)||(f.size<=1?l.delete(c):f.delete(v));this._index.get(o).size===0&&this._index.delete(o),i%s===0&&await new Promise(c=>setTimeout(c,r)),i+=1}this._dirtCount-=n}await null,this._currentVacuum=this._enqueuedVacuum,this._enqueuedVacuum=null}vacuumConditionsMet(e){if(e==null)return!0;let{minDirtCount:t,minDirtFactor:n}=e;return t=t||Ve.minDirtCount,n=n||Ve.minDirtFactor,this.dirtCount>=t&&this.dirtFactor>=n}get isVacuuming(){return this._currentVacuum!=null}get dirtCount(){return this._dirtCount}get dirtFactor(){return this._dirtCount/(1+this._documentCount+this._dirtCount)}has(e){return this._idToShortId.has(e)}getStoredFields(e){const t=this._idToShortId.get(e);if(t!=null)return this._storedFields.get(t)}search(e,t={}){const{searchOptions:n}=this._options,s={...n,...t},r=this.executeQuery(e,t),i=[];for(const[o,{score:l,terms:c,match:f}]of r){const v=c.length||1,h={id:this._documentIds.get(o),score:l*v,terms:Object.keys(f),queryTerms:c,match:f};Object.assign(h,this._storedFields.get(o)),(s.filter==null||s.filter(h))&&i.push(h)}return e===ue.wildcard&&s.boostDocument==null||i.sort(ht),i}autoSuggest(e,t={}){t={...this._options.autoSuggestOptions,...t};const n=new Map;for(const{score:r,terms:i}of this.search(e,t)){const o=i.join(" "),l=n.get(o);l!=null?(l.score+=r,l.count+=1):n.set(o,{score:r,terms:i,count:1})}const s=[];for(const[r,{score:i,terms:o,count:l}]of n)s.push({suggestion:r,terms:o,score:i/l});return s.sort(ht),s}get documentCount(){return this._documentCount}get termCount(){return this._index.size}static loadJSON(e,t){if(t==null)throw new Error("MiniSearch: loadJSON should be given the same options used when serializing the index");return this.loadJS(JSON.parse(e),t)}static async loadJSONAsync(e,t){if(t==null)throw new Error("MiniSearch: loadJSON should be given the same options used when serializing the index");return this.loadJSAsync(JSON.parse(e),t)}static getDefault(e){if(Pe.hasOwnProperty(e))return ze(Pe,e);throw new Error(`MiniSearch: unknown option "${e}"`)}static loadJS(e,t){const{index:n,documentIds:s,fieldLength:r,storedFields:i,serializationVersion:o}=e,l=this.instantiateMiniSearch(e,t);l._documentIds=Te(s),l._fieldLength=Te(r),l._storedFields=Te(i);for(const[c,f]of l._documentIds)l._idToShortId.set(f,c);for(const[c,f]of n){const v=new Map;for(const h of Object.keys(f)){let b=f[h];o===1&&(b=b.ds),v.set(parseInt(h,10),Te(b))}l._index.set(c,v)}return l}static async loadJSAsync(e,t){const{index:n,documentIds:s,fieldLength:r,storedFields:i,serializationVersion:o}=e,l=this.instantiateMiniSearch(e,t);l._documentIds=await Ie(s),l._fieldLength=await Ie(r),l._storedFields=await Ie(i);for(const[f,v]of l._documentIds)l._idToShortId.set(v,f);let c=0;for(const[f,v]of n){const h=new Map;for(const b of Object.keys(v)){let y=v[b];o===1&&(y=y.ds),h.set(parseInt(b,10),await Ie(y))}++c%1e3===0&&await kt(0),l._index.set(f,h)}return l}static instantiateMiniSearch(e,t){const{documentCount:n,nextId:s,fieldIds:r,averageFieldLength:i,dirtCount:o,serializationVersion:l}=e;if(l!==1&&l!==2)throw new Error("MiniSearch: cannot deserialize an index created with an incompatible version");const c=new ue(t);return c._documentCount=n,c._nextId=s,c._idToShortId=new Map,c._fieldIds=r,c._avgFieldLength=i,c._dirtCount=o||0,c._index=new X,c}executeQuery(e,t={}){if(e===ue.wildcard)return this.executeWildcardQuery(t);if(typeof e!="string"){const h={...t,...e,queries:void 0},b=e.queries.map(y=>this.executeQuery(y,h));return this.combineResults(b,h.combineWith)}const{tokenize:n,processTerm:s,searchOptions:r}=this._options,i={tokenize:n,processTerm:s,...r,...t},{tokenize:o,processTerm:l}=i,v=o(e).flatMap(h=>l(h)).filter(h=>!!h).map(qn(i)).map(h=>this.executeQuerySpec(h,i));return this.combineResults(v,i.combineWith)}executeQuerySpec(e,t){const n={...this._options.searchOptions,...t},s=(n.fields||this._options.fields).reduce((x,w)=>({...x,[w]:ze(n.boost,w)||1}),{}),{boostDocument:r,weights:i,maxFuzzy:o,bm25:l}=n,{fuzzy:c,prefix:f}={...dt.weights,...i},v=this._index.get(e.term),h=this.termResults(e.term,e.term,1,e.termBoost,v,s,r,l);let b,y;if(e.prefix&&(b=this._index.atPrefix(e.term)),e.fuzzy){const x=e.fuzzy===!0?.2:e.fuzzy,w=x<1?Math.min(o,Math.round(e.term.length*x)):x;w&&(y=this._index.fuzzyGet(e.term,w))}if(b)for(const[x,w]of b){const C=x.length-e.term.length;if(!C)continue;y==null||y.delete(x);const A=f*x.length/(x.length+.3*C);this.termResults(e.term,x,A,e.termBoost,w,s,r,l,h)}if(y)for(const x of y.keys()){const[w,C]=y.get(x);if(!C)continue;const A=c*x.length/(x.length+C);this.termResults(e.term,x,A,e.termBoost,w,s,r,l,h)}return h}executeWildcardQuery(e){const t=new Map,n={...this._options.searchOptions,...e};for(const[s,r]of this._documentIds){const i=n.boostDocument?n.boostDocument(r,"",this._storedFields.get(s)):1;t.set(s,{score:i,terms:[],match:{}})}return t}combineResults(e,t=qe){if(e.length===0)return new Map;const n=t.toLowerCase(),s=Kn[n];if(!s)throw new Error(`Invalid combination operator: ${t}`);return e.reduce(s)||new Map}toJSON(){const e=[];for(const[t,n]of this._index){const s={};for(const[r,i]of n)s[r]=Object.fromEntries(i);e.push([t,s])}return{documentCount:this._documentCount,nextId:this._nextId,documentIds:Object.fromEntries(this._documentIds),fieldIds:this._fieldIds,fieldLength:Object.fromEntries(this._fieldLength),averageFieldLength:this._avgFieldLength,storedFields:Object.fromEntries(this._storedFields),dirtCount:this._dirtCount,index:e,serializationVersion:2}}termResults(e,t,n,s,r,i,o,l,c=new Map){if(r==null)return c;for(const f of Object.keys(i)){const v=i[f],h=this._fieldIds[f],b=r.get(h);if(b==null)continue;let y=b.size;const x=this._avgFieldLength[h];for(const w of b.keys()){if(!this._documentIds.has(w)){this.removeTerm(h,w,t),y-=1;continue}const C=o?o(this._documentIds.get(w),t,this._storedFields.get(w)):1;if(!C)continue;const A=b.get(w),J=this._fieldLength.get(w)[h],Q=Un(A,y,this._documentCount,J,x,l),W=n*s*v*C*Q,$=c.get(w);if($){$.score+=W,Hn($.terms,e);const j=ze($.match,t);j?j.push(f):$.match[t]=[f]}else c.set(w,{score:W,terms:[e],match:{[t]:[f]}})}}return c}addTerm(e,t,n){const s=this._index.fetch(n,pt);let r=s.get(e);if(r==null)r=new Map,r.set(t,1),s.set(e,r);else{const i=r.get(t);r.set(t,(i||0)+1)}}removeTerm(e,t,n){if(!this._index.has(n)){this.warnDocumentChanged(t,e,n);return}const s=this._index.fetch(n,pt),r=s.get(e);r==null||r.get(t)==null?this.warnDocumentChanged(t,e,n):r.get(t)<=1?r.size<=1?s.delete(e):r.delete(t):r.set(t,r.get(t)-1),this._index.get(n).size===0&&this._index.delete(n)}warnDocumentChanged(e,t,n){for(const s of Object.keys(this._fieldIds))if(this._fieldIds[s]===t){this._options.logger("warn",`MiniSearch: document with ID ${this._documentIds.get(e)} has changed before removal: term "${n}" was not present in field "${s}". Removing a document after it has changed can corrupt the index!`,"version_conflict");return}}addDocumentId(e){const t=this._nextId;return this._idToShortId.set(e,t),this._documentIds.set(t,e),this._documentCount+=1,this._nextId+=1,t}addFields(e){for(let t=0;tObject.prototype.hasOwnProperty.call(a,e)?a[e]:void 0,Kn={[qe]:(a,e)=>{for(const t of e.keys()){const n=a.get(t);if(n==null)a.set(t,e.get(t));else{const{score:s,terms:r,match:i}=e.get(t);n.score=n.score+s,n.match=Object.assign(n.match,i),ft(n.terms,r)}}return a},[It]:(a,e)=>{const t=new Map;for(const n of e.keys()){const s=a.get(n);if(s==null)continue;const{score:r,terms:i,match:o}=e.get(n);ft(s.terms,i),t.set(n,{score:s.score+r,terms:s.terms,match:Object.assign(s.match,o)})}return t},[Wn]:(a,e)=>{for(const t of e.keys())a.delete(t);return a}},Jn={k:1.2,b:.7,d:.5},Un=(a,e,t,n,s,r)=>{const{k:i,b:o,d:l}=r;return Math.log(1+(t-e+.5)/(e+.5))*(l+a*(i+1)/(a+i*(1-o+o*n/s)))},qn=a=>(e,t,n)=>{const s=typeof a.fuzzy=="function"?a.fuzzy(e,t,n):a.fuzzy||!1,r=typeof a.prefix=="function"?a.prefix(e,t,n):a.prefix===!0,i=typeof a.boostTerm=="function"?a.boostTerm(e,t,n):1;return{term:e,fuzzy:s,prefix:r,termBoost:i}},Pe={idField:"id",extractField:(a,e)=>a[e],tokenize:a=>a.split(Qn),processTerm:a=>a.toLowerCase(),fields:void 0,searchOptions:void 0,storeFields:[],logger:(a,e)=>{typeof(console==null?void 0:console[a])=="function"&&console[a](e)},autoVacuum:!0},dt={combineWith:qe,prefix:!1,fuzzy:!1,maxFuzzy:6,boost:{},weights:{fuzzy:.45,prefix:.375},bm25:Jn},Gn={combineWith:It,prefix:(a,e,t)=>e===t.length-1},Ke={batchSize:1e3,batchWait:10},Je={minDirtFactor:.1,minDirtCount:20},Ve={...Ke,...Je},Hn=(a,e)=>{a.includes(e)||a.push(e)},ft=(a,e)=>{for(const t of e)a.includes(t)||a.push(t)},ht=({score:a},{score:e})=>e-a,pt=()=>new Map,Te=a=>{const e=new Map;for(const t of Object.keys(a))e.set(parseInt(t,10),a[t]);return e},Ie=async a=>{const e=new Map;let t=0;for(const n of Object.keys(a))e.set(parseInt(n,10),a[n]),++t%1e3===0&&await kt(0);return e},kt=a=>new Promise(e=>setTimeout(e,a)),Qn=/[\n\r\p{Z}\p{P}]+/u;class Yn{constructor(e=10){Ce(this,"max");Ce(this,"cache");this.max=e,this.cache=new Map}get(e){let t=this.cache.get(e);return t!==void 0&&(this.cache.delete(e),this.cache.set(e,t)),t}set(e,t){this.cache.has(e)?this.cache.delete(e):this.cache.size===this.max&&this.cache.delete(this.first()),this.cache.set(e,t)}first(){return this.cache.keys().next().value}clear(){this.cache.clear()}}const Zn=["aria-owns"],Xn={class:"shell"},es=["title"],ts={class:"search-actions before"},ns=["title"],ss=["aria-activedescendant","aria-controls","placeholder"],is={class:"search-actions"},rs=["title"],as=["disabled","title"],os=["id","role","aria-labelledby"],ls=["id","aria-selected"],cs=["href","aria-label","onMouseenter","onFocusin","data-index"],us={class:"titles"},ds=["innerHTML"],fs={class:"title main"},hs=["innerHTML"],ps={key:0,class:"excerpt-wrapper"},ms={key:0,class:"excerpt",inert:""},vs=["innerHTML"],gs={key:0,class:"no-results"},bs={class:"search-keyboard-shortcuts"},ys=["aria-label"],ws=["aria-label"],xs=["aria-label"],_s=["aria-label"],Ss=Lt({__name:"VPLocalSearchBox",emits:["close"],setup(a,{emit:e}){var S,R;const t=e,n=le(),s=le(),r=le(rn),i=nn(),{activate:o}=zn(n,{immediate:!0,allowOutsideClick:!0,clickOutsideDeactivates:!0,escapeDeactivates:!0}),{localeIndex:l,theme:c}=i,f=tt(async()=>{var m,p,I,O,z,P,V,k,K;return rt(ue.loadJSON((I=await((p=(m=r.value)[l.value])==null?void 0:p.call(m)))==null?void 0:I.default,{fields:["title","titles","text"],storeFields:["title","titles"],searchOptions:{fuzzy:.2,prefix:!0,boost:{title:4,text:2,titles:1},...((O=c.value.search)==null?void 0:O.provider)==="local"&&((P=(z=c.value.search.options)==null?void 0:z.miniSearch)==null?void 0:P.searchOptions)},...((V=c.value.search)==null?void 0:V.provider)==="local"&&((K=(k=c.value.search.options)==null?void 0:k.miniSearch)==null?void 0:K.options)}))}),h=ge(()=>{var m,p;return((m=c.value.search)==null?void 0:m.provider)==="local"&&((p=c.value.search.options)==null?void 0:p.disableQueryPersistence)===!0}).value?fe(""):Dt("vitepress:local-search-filter",""),b=zt("vitepress:local-search-detailed-list",((S=c.value.search)==null?void 0:S.provider)==="local"&&((R=c.value.search.options)==null?void 0:R.detailedView)===!0),y=ge(()=>{var m,p,I;return((m=c.value.search)==null?void 0:m.provider)==="local"&&(((p=c.value.search.options)==null?void 0:p.disableDetailedView)===!0||((I=c.value.search.options)==null?void 0:I.detailedView)===!1)}),x=ge(()=>{var p,I,O,z,P,V,k;const m=((p=c.value.search)==null?void 0:p.options)??c.value.algolia;return((P=(z=(O=(I=m==null?void 0:m.locales)==null?void 0:I[l.value])==null?void 0:O.translations)==null?void 0:z.button)==null?void 0:P.buttonText)||((k=(V=m==null?void 0:m.translations)==null?void 0:V.button)==null?void 0:k.buttonText)||"Search"});Pt(()=>{y.value&&(b.value=!1)});const w=le([]),C=fe(!1);$e(h,()=>{C.value=!1});const A=tt(async()=>{if(s.value)return rt(new Vn(s.value))},null),J=new Yn(16);Vt(()=>[f.value,h.value,b.value],async([m,p,I],O,z)=>{var ee,we,Ge,He;(O==null?void 0:O[0])!==m&&J.clear();let P=!1;if(z(()=>{P=!0}),!m)return;w.value=m.search(p).slice(0,16),C.value=!0;const V=I?await Promise.all(w.value.map(B=>Q(B.id))):[];if(P)return;for(const{id:B,mod:te}of V){const ne=B.slice(0,B.indexOf("#"));let Y=J.get(ne);if(Y)continue;Y=new Map,J.set(ne,Y);const G=te.default??te;if(G!=null&&G.render||G!=null&&G.setup){const se=Yt(G);se.config.warnHandler=()=>{},se.provide(Zt,i),Object.defineProperties(se.config.globalProperties,{$frontmatter:{get(){return i.frontmatter.value}},$params:{get(){return i.page.value.params}}});const Qe=document.createElement("div");se.mount(Qe),Qe.querySelectorAll("h1, h2, h3, h4, h5, h6").forEach(de=>{var Xe;const xe=(Xe=de.querySelector("a"))==null?void 0:Xe.getAttribute("href"),Ye=(xe==null?void 0:xe.startsWith("#"))&&xe.slice(1);if(!Ye)return;let Ze="";for(;(de=de.nextElementSibling)&&!/^h[1-6]$/i.test(de.tagName);)Ze+=de.outerHTML;Y.set(Ye,Ze)}),se.unmount()}if(P)return}const k=new Set;if(w.value=w.value.map(B=>{const[te,ne]=B.id.split("#"),Y=J.get(te),G=(Y==null?void 0:Y.get(ne))??"";for(const se in B.match)k.add(se);return{...B,text:G}}),await he(),P)return;await new Promise(B=>{var te;(te=A.value)==null||te.unmark({done:()=>{var ne;(ne=A.value)==null||ne.markRegExp(T(k),{done:B})}})});const K=((ee=n.value)==null?void 0:ee.querySelectorAll(".result .excerpt"))??[];for(const B of K)(we=B.querySelector('mark[data-markjs="true"]'))==null||we.scrollIntoView({block:"center"});(He=(Ge=s.value)==null?void 0:Ge.firstElementChild)==null||He.scrollIntoView({block:"start"})},{debounce:200,immediate:!0});async function Q(m){const p=Xt(m.slice(0,m.indexOf("#")));try{if(!p)throw new Error(`Cannot find file for id: ${m}`);return{id:m,mod:await import(p)}}catch(I){return console.error(I),{id:m,mod:{}}}}const W=fe(),$=ge(()=>{var m;return((m=h.value)==null?void 0:m.length)<=0});function j(m=!0){var p,I;(p=W.value)==null||p.focus(),m&&((I=W.value)==null||I.select())}Ae(()=>{j()});function ye(m){m.pointerType==="mouse"&&j()}const M=fe(-1),U=fe(!0);$e(w,m=>{M.value=m.length?0:-1,q()});function q(){he(()=>{const m=document.querySelector(".result.selected");m==null||m.scrollIntoView({block:"nearest"})})}_e("ArrowUp",m=>{m.preventDefault(),M.value--,M.value<0&&(M.value=w.value.length-1),U.value=!0,q()}),_e("ArrowDown",m=>{m.preventDefault(),M.value++,M.value>=w.value.length&&(M.value=0),U.value=!0,q()});const N=$t();_e("Enter",m=>{if(m.isComposing||m.target instanceof HTMLButtonElement&&m.target.type!=="submit")return;const p=w.value[M.value];if(m.target instanceof HTMLInputElement&&!p){m.preventDefault();return}p&&(N.go(p.id),t("close"))}),_e("Escape",()=>{t("close")});const d=sn({modal:{displayDetails:"Display detailed list",resetButtonTitle:"Reset search",backButtonTitle:"Close search",noResultsText:"No results for",footer:{selectText:"to select",selectKeyAriaLabel:"enter",navigateText:"to navigate",navigateUpKeyAriaLabel:"up arrow",navigateDownKeyAriaLabel:"down arrow",closeText:"to close",closeKeyAriaLabel:"escape"}}});Ae(()=>{window.history.pushState(null,"",null)}),jt("popstate",m=>{m.preventDefault(),t("close")});const g=Bt(Wt?document.body:null);Ae(()=>{he(()=>{g.value=!0,he().then(()=>o())})}),Kt(()=>{g.value=!1});function E(){h.value="",he().then(()=>j(!1))}function T(m){return new RegExp([...m].sort((p,I)=>I.length-p.length).map(p=>`(${en(p)})`).join("|"),"gi")}function F(m){var O;if(!U.value)return;const p=(O=m.target)==null?void 0:O.closest(".result"),I=Number.parseInt(p==null?void 0:p.dataset.index);I>=0&&I!==M.value&&(M.value=I),U.value=!1}return(m,p)=>{var I,O,z,P,V;return H(),Jt(Qt,{to:"body"},[_("div",{ref_key:"el",ref:n,role:"button","aria-owns":(I=w.value)!=null&&I.length?"localsearch-list":void 0,"aria-expanded":"true","aria-haspopup":"listbox","aria-labelledby":"localsearch-label",class:"VPLocalSearchBox"},[_("div",{class:"backdrop",onClick:p[0]||(p[0]=k=>m.$emit("close"))}),_("div",Xn,[_("form",{class:"search-bar",onPointerup:p[4]||(p[4]=k=>ye(k)),onSubmit:p[5]||(p[5]=Ut(()=>{},["prevent"]))},[_("label",{title:x.value,id:"localsearch-label",for:"localsearch-input"},p[7]||(p[7]=[_("span",{"aria-hidden":"true",class:"vpi-search search-icon local-search-icon"},null,-1)]),8,es),_("div",ts,[_("button",{class:"back-button",title:L(d)("modal.backButtonTitle"),onClick:p[1]||(p[1]=k=>m.$emit("close"))},p[8]||(p[8]=[_("span",{class:"vpi-arrow-left local-search-icon"},null,-1)]),8,ns)]),qt(_("input",{ref_key:"searchInput",ref:W,"onUpdate:modelValue":p[2]||(p[2]=k=>Ht(h)?h.value=k:null),"aria-activedescendant":M.value>-1?"localsearch-item-"+M.value:void 0,"aria-autocomplete":"both","aria-controls":(O=w.value)!=null&&O.length?"localsearch-list":void 0,"aria-labelledby":"localsearch-label",autocapitalize:"off",autocomplete:"off",autocorrect:"off",class:"search-input",id:"localsearch-input",enterkeyhint:"go",maxlength:"64",placeholder:x.value,spellcheck:"false",type:"search"},null,8,ss),[[Gt,L(h)]]),_("div",is,[y.value?Se("",!0):(H(),Z("button",{key:0,class:nt(["toggle-layout-button",{"detailed-list":L(b)}]),type:"button",title:L(d)("modal.displayDetails"),onClick:p[3]||(p[3]=k=>M.value>-1&&(b.value=!L(b)))},p[9]||(p[9]=[_("span",{class:"vpi-layout-list local-search-icon"},null,-1)]),10,rs)),_("button",{class:"clear-button",type:"reset",disabled:$.value,title:L(d)("modal.resetButtonTitle"),onClick:E},p[10]||(p[10]=[_("span",{class:"vpi-delete local-search-icon"},null,-1)]),8,as)])],32),_("ul",{ref_key:"resultsEl",ref:s,id:(z=w.value)!=null&&z.length?"localsearch-list":void 0,role:(P=w.value)!=null&&P.length?"listbox":void 0,"aria-labelledby":(V=w.value)!=null&&V.length?"localsearch-label":void 0,class:"results",onMousemove:F},[(H(!0),Z(it,null,st(w.value,(k,K)=>(H(),Z("li",{key:k.id,id:"localsearch-item-"+K,"aria-selected":M.value===K?"true":"false",role:"option"},[_("a",{href:k.id,class:nt(["result",{selected:M.value===K}]),"aria-label":[...k.titles,k.title].join(" > "),onMouseenter:ee=>!U.value&&(M.value=K),onFocusin:ee=>M.value=K,onClick:p[6]||(p[6]=ee=>m.$emit("close")),"data-index":K},[_("div",null,[_("div",us,[p[12]||(p[12]=_("span",{class:"title-icon"},"#",-1)),(H(!0),Z(it,null,st(k.titles,(ee,we)=>(H(),Z("span",{key:we,class:"title"},[_("span",{class:"text",innerHTML:ee},null,8,ds),p[11]||(p[11]=_("span",{class:"vpi-chevron-right local-search-icon"},null,-1))]))),128)),_("span",fs,[_("span",{class:"text",innerHTML:k.title},null,8,hs)])]),L(b)?(H(),Z("div",ps,[k.text?(H(),Z("div",ms,[_("div",{class:"vp-doc",innerHTML:k.text},null,8,vs)])):Se("",!0),p[13]||(p[13]=_("div",{class:"excerpt-gradient-bottom"},null,-1)),p[14]||(p[14]=_("div",{class:"excerpt-gradient-top"},null,-1))])):Se("",!0)])],42,cs)],8,ls))),128)),L(h)&&!w.value.length&&C.value?(H(),Z("li",gs,[pe(me(L(d)("modal.noResultsText"))+' "',1),_("strong",null,me(L(h)),1),p[15]||(p[15]=pe('" '))])):Se("",!0)],40,os),_("div",bs,[_("span",null,[_("kbd",{"aria-label":L(d)("modal.footer.navigateUpKeyAriaLabel")},p[16]||(p[16]=[_("span",{class:"vpi-arrow-up navigate-icon"},null,-1)]),8,ys),_("kbd",{"aria-label":L(d)("modal.footer.navigateDownKeyAriaLabel")},p[17]||(p[17]=[_("span",{class:"vpi-arrow-down navigate-icon"},null,-1)]),8,ws),pe(" "+me(L(d)("modal.footer.navigateText")),1)]),_("span",null,[_("kbd",{"aria-label":L(d)("modal.footer.selectKeyAriaLabel")},p[18]||(p[18]=[_("span",{class:"vpi-corner-down-left navigate-icon"},null,-1)]),8,xs),pe(" "+me(L(d)("modal.footer.selectText")),1)]),_("span",null,[_("kbd",{"aria-label":L(d)("modal.footer.closeKeyAriaLabel")},"esc",8,_s),pe(" "+me(L(d)("modal.footer.closeText")),1)])])])],8,Zn)])}}}),Fs=tn(Ss,[["__scopeId","data-v-ffdd78e7"]]);export{Fs as default}; diff --git a/.vitepress/dist/assets/chunks/VPLocalSearchBox.Dtbezcl8.js b/.vitepress/dist/assets/chunks/VPLocalSearchBox.Dtbezcl8.js deleted file mode 100644 index b7cc0f8..0000000 --- a/.vitepress/dist/assets/chunks/VPLocalSearchBox.Dtbezcl8.js +++ /dev/null @@ -1,8 +0,0 @@ -var Ft=Object.defineProperty;var Ot=(a,e,t)=>e in a?Ft(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t;var Ae=(a,e,t)=>Ot(a,typeof e!="symbol"?e+"":e,t);import{X as Ct,D as ce,f as be,ak as tt,al as Rt,am as At,an as Mt,n as je,ao as Lt,d as Dt,ap as nt,r as fe,aq as zt,ar as Pt,q as Vt,as as $t,s as Me,R as pe,Q as Se,at as jt,au as Bt,Y as Wt,U as Kt,a1 as Jt,c as Ut,o as Q,g as x,a2 as qt,av as Gt,j as L,aw as Ht,ax as Qt,a as X,b as Ee,B as st,C as it,F as rt,K as me,h as ve,ay as Yt,p as Zt,k as Xt,az as at,aA as en,a8 as tn,ad as nn,aB as sn,_ as rn}from"./framework.BjhQB2K5.js";import{u as an,c as on}from"./theme.Dh5vPo0_.js";const ln={root:()=>Ct(()=>import("./@localSearchIndexroot.CyyBpyLd.js"),[])};/*! -* tabbable 6.2.0 -* @license MIT, https://github.com/focus-trap/tabbable/blob/master/LICENSE -*/var vt=["input:not([inert])","select:not([inert])","textarea:not([inert])","a[href]:not([inert])","button:not([inert])","[tabindex]:not(slot):not([inert])","audio[controls]:not([inert])","video[controls]:not([inert])",'[contenteditable]:not([contenteditable="false"]):not([inert])',"details>summary:first-of-type:not([inert])","details:not([inert])"],Ne=vt.join(","),gt=typeof Element>"u",ae=gt?function(){}:Element.prototype.matches||Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector,Fe=!gt&&Element.prototype.getRootNode?function(a){var e;return a==null||(e=a.getRootNode)===null||e===void 0?void 0:e.call(a)}:function(a){return a==null?void 0:a.ownerDocument},Oe=function a(e,t){var n;t===void 0&&(t=!0);var s=e==null||(n=e.getAttribute)===null||n===void 0?void 0:n.call(e,"inert"),r=s===""||s==="true",i=r||t&&e&&a(e.parentNode);return i},cn=function(e){var t,n=e==null||(t=e.getAttribute)===null||t===void 0?void 0:t.call(e,"contenteditable");return n===""||n==="true"},bt=function(e,t,n){if(Oe(e))return[];var s=Array.prototype.slice.apply(e.querySelectorAll(Ne));return t&&ae.call(e,Ne)&&s.unshift(e),s=s.filter(n),s},yt=function a(e,t,n){for(var s=[],r=Array.from(e);r.length;){var i=r.shift();if(!Oe(i,!1))if(i.tagName==="SLOT"){var o=i.assignedElements(),l=o.length?o:i.children,c=a(l,!0,n);n.flatten?s.push.apply(s,c):s.push({scopeParent:i,candidates:c})}else{var h=ae.call(i,Ne);h&&n.filter(i)&&(t||!e.includes(i))&&s.push(i);var m=i.shadowRoot||typeof n.getShadowRoot=="function"&&n.getShadowRoot(i),f=!Oe(m,!1)&&(!n.shadowRootFilter||n.shadowRootFilter(i));if(m&&f){var b=a(m===!0?i.children:m.children,!0,n);n.flatten?s.push.apply(s,b):s.push({scopeParent:i,candidates:b})}else r.unshift.apply(r,i.children)}}return s},wt=function(e){return!isNaN(parseInt(e.getAttribute("tabindex"),10))},re=function(e){if(!e)throw new Error("No node provided");return e.tabIndex<0&&(/^(AUDIO|VIDEO|DETAILS)$/.test(e.tagName)||cn(e))&&!wt(e)?0:e.tabIndex},un=function(e,t){var n=re(e);return n<0&&t&&!wt(e)?0:n},dn=function(e,t){return e.tabIndex===t.tabIndex?e.documentOrder-t.documentOrder:e.tabIndex-t.tabIndex},_t=function(e){return e.tagName==="INPUT"},hn=function(e){return _t(e)&&e.type==="hidden"},fn=function(e){var t=e.tagName==="DETAILS"&&Array.prototype.slice.apply(e.children).some(function(n){return n.tagName==="SUMMARY"});return t},pn=function(e,t){for(var n=0;nsummary:first-of-type"),i=r?e.parentElement:e;if(ae.call(i,"details:not([open]) *"))return!0;if(!n||n==="full"||n==="legacy-full"){if(typeof s=="function"){for(var o=e;e;){var l=e.parentElement,c=Fe(e);if(l&&!l.shadowRoot&&s(l)===!0)return ot(e);e.assignedSlot?e=e.assignedSlot:!l&&c!==e.ownerDocument?e=c.host:e=l}e=o}if(bn(e))return!e.getClientRects().length;if(n!=="legacy-full")return!0}else if(n==="non-zero-area")return ot(e);return!1},wn=function(e){if(/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(e.tagName))for(var t=e.parentElement;t;){if(t.tagName==="FIELDSET"&&t.disabled){for(var n=0;n=0)},xn=function a(e){var t=[],n=[];return e.forEach(function(s,r){var i=!!s.scopeParent,o=i?s.scopeParent:s,l=un(o,i),c=i?a(s.candidates):o;l===0?i?t.push.apply(t,c):t.push(o):n.push({documentOrder:r,tabIndex:l,item:s,isScope:i,content:c})}),n.sort(dn).reduce(function(s,r){return r.isScope?s.push.apply(s,r.content):s.push(r.content),s},[]).concat(t)},Sn=function(e,t){t=t||{};var n;return t.getShadowRoot?n=yt([e],t.includeContainer,{filter:Be.bind(null,t),flatten:!1,getShadowRoot:t.getShadowRoot,shadowRootFilter:_n}):n=bt(e,t.includeContainer,Be.bind(null,t)),xn(n)},En=function(e,t){t=t||{};var n;return t.getShadowRoot?n=yt([e],t.includeContainer,{filter:Ce.bind(null,t),flatten:!0,getShadowRoot:t.getShadowRoot}):n=bt(e,t.includeContainer,Ce.bind(null,t)),n},oe=function(e,t){if(t=t||{},!e)throw new Error("No node provided");return ae.call(e,Ne)===!1?!1:Be(t,e)},Tn=vt.concat("iframe").join(","),Le=function(e,t){if(t=t||{},!e)throw new Error("No node provided");return ae.call(e,Tn)===!1?!1:Ce(t,e)};/*! -* focus-trap 7.6.4 -* @license MIT, https://github.com/focus-trap/focus-trap/blob/master/LICENSE -*/function We(a,e){(e==null||e>a.length)&&(e=a.length);for(var t=0,n=Array(e);t0){var n=e[e.length-1];n!==t&&n._setPausedState(!0)}var s=e.indexOf(t);s===-1||e.splice(s,1),e.push(t)},deactivateTrap:function(e,t){var n=e.indexOf(t);n!==-1&&e.splice(n,1),e.length>0&&!e[e.length-1]._isManuallyPaused()&&e[e.length-1]._setPausedState(!1)}},Mn=function(e){return e.tagName&&e.tagName.toLowerCase()==="input"&&typeof e.select=="function"},Ln=function(e){return(e==null?void 0:e.key)==="Escape"||(e==null?void 0:e.key)==="Esc"||(e==null?void 0:e.keyCode)===27},ye=function(e){return(e==null?void 0:e.key)==="Tab"||(e==null?void 0:e.keyCode)===9},Dn=function(e){return ye(e)&&!e.shiftKey},zn=function(e){return ye(e)&&e.shiftKey},dt=function(e){return setTimeout(e,0)},ge=function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),s=1;s1&&arguments[1]!==void 0?arguments[1]:{},g=d.hasFallback,E=g===void 0?!1:g,T=d.params,F=T===void 0?[]:T,S=r[u];if(typeof S=="function"&&(S=S.apply(void 0,On(F))),S===!0&&(S=void 0),!S){if(S===void 0||S===!1)return S;throw new Error("`".concat(u,"` was specified but was not a node, or did not return a node"))}var C=S;if(typeof S=="string"){try{C=n.querySelector(S)}catch(p){throw new Error("`".concat(u,'` appears to be an invalid selector; error="').concat(p.message,'"'))}if(!C&&!E)throw new Error("`".concat(u,"` as selector refers to no known node"))}return C},m=function(){var u=h("initialFocus",{hasFallback:!0});if(u===!1)return!1;if(u===void 0||u&&!Le(u,r.tabbableOptions))if(c(n.activeElement)>=0)u=n.activeElement;else{var d=i.tabbableGroups[0],g=d&&d.firstTabbableNode;u=g||h("fallbackFocus")}else u===null&&(u=h("fallbackFocus"));if(!u)throw new Error("Your focus-trap needs to have at least one focusable element");return u},f=function(){if(i.containerGroups=i.containers.map(function(u){var d=Sn(u,r.tabbableOptions),g=En(u,r.tabbableOptions),E=d.length>0?d[0]:void 0,T=d.length>0?d[d.length-1]:void 0,F=g.find(function(p){return oe(p)}),S=g.slice().reverse().find(function(p){return oe(p)}),C=!!d.find(function(p){return re(p)>0});return{container:u,tabbableNodes:d,focusableNodes:g,posTabIndexesFound:C,firstTabbableNode:E,lastTabbableNode:T,firstDomTabbableNode:F,lastDomTabbableNode:S,nextTabbableNode:function(v){var I=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,O=d.indexOf(v);return O<0?I?g.slice(g.indexOf(v)+1).find(function(z){return oe(z)}):g.slice(0,g.indexOf(v)).reverse().find(function(z){return oe(z)}):d[O+(I?1:-1)]}}}),i.tabbableGroups=i.containerGroups.filter(function(u){return u.tabbableNodes.length>0}),i.tabbableGroups.length<=0&&!h("fallbackFocus"))throw new Error("Your focus-trap must have at least one container with at least one tabbable node in it at all times");if(i.containerGroups.find(function(u){return u.posTabIndexesFound})&&i.containerGroups.length>1)throw new Error("At least one node with a positive tabindex was found in one of your focus-trap's multiple containers. Positive tabindexes are only supported in single-container focus-traps.")},b=function(u){var d=u.activeElement;if(d)return d.shadowRoot&&d.shadowRoot.activeElement!==null?b(d.shadowRoot):d},y=function(u){if(u!==!1&&u!==b(document)){if(!u||!u.focus){y(m());return}u.focus({preventScroll:!!r.preventScroll}),i.mostRecentlyFocusedNode=u,Mn(u)&&u.select()}},_=function(u){var d=h("setReturnFocus",{params:[u]});return d||(d===!1?!1:u)},w=function(u){var d=u.target,g=u.event,E=u.isBackward,T=E===void 0?!1:E;d=d||Te(g),f();var F=null;if(i.tabbableGroups.length>0){var S=c(d,g),C=S>=0?i.containerGroups[S]:void 0;if(S<0)T?F=i.tabbableGroups[i.tabbableGroups.length-1].lastTabbableNode:F=i.tabbableGroups[0].firstTabbableNode;else if(T){var p=i.tabbableGroups.findIndex(function(V){var k=V.firstTabbableNode;return d===k});if(p<0&&(C.container===d||Le(d,r.tabbableOptions)&&!oe(d,r.tabbableOptions)&&!C.nextTabbableNode(d,!1))&&(p=S),p>=0){var v=p===0?i.tabbableGroups.length-1:p-1,I=i.tabbableGroups[v];F=re(d)>=0?I.lastTabbableNode:I.lastDomTabbableNode}else ye(g)||(F=C.nextTabbableNode(d,!1))}else{var O=i.tabbableGroups.findIndex(function(V){var k=V.lastTabbableNode;return d===k});if(O<0&&(C.container===d||Le(d,r.tabbableOptions)&&!oe(d,r.tabbableOptions)&&!C.nextTabbableNode(d))&&(O=S),O>=0){var z=O===i.tabbableGroups.length-1?0:O+1,P=i.tabbableGroups[z];F=re(d)>=0?P.firstTabbableNode:P.firstDomTabbableNode}else ye(g)||(F=C.nextTabbableNode(d))}}else F=h("fallbackFocus");return F},R=function(u){var d=Te(u);if(!(c(d,u)>=0)){if(ge(r.clickOutsideDeactivates,u)){o.deactivate({returnFocus:r.returnFocusOnDeactivate});return}ge(r.allowOutsideClick,u)||u.preventDefault()}},A=function(u){var d=Te(u),g=c(d,u)>=0;if(g||d instanceof Document)g&&(i.mostRecentlyFocusedNode=d);else{u.stopImmediatePropagation();var E,T=!0;if(i.mostRecentlyFocusedNode)if(re(i.mostRecentlyFocusedNode)>0){var F=c(i.mostRecentlyFocusedNode),S=i.containerGroups[F].tabbableNodes;if(S.length>0){var C=S.findIndex(function(p){return p===i.mostRecentlyFocusedNode});C>=0&&(r.isKeyForward(i.recentNavEvent)?C+1=0&&(E=S[C-1],T=!1))}}else i.containerGroups.some(function(p){return p.tabbableNodes.some(function(v){return re(v)>0})})||(T=!1);else T=!1;T&&(E=w({target:i.mostRecentlyFocusedNode,isBackward:r.isKeyBackward(i.recentNavEvent)})),y(E||i.mostRecentlyFocusedNode||m())}i.recentNavEvent=void 0},U=function(u){var d=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;i.recentNavEvent=u;var g=w({event:u,isBackward:d});g&&(ye(u)&&u.preventDefault(),y(g))},Y=function(u){(r.isKeyForward(u)||r.isKeyBackward(u))&&U(u,r.isKeyBackward(u))},W=function(u){Ln(u)&&ge(r.escapeDeactivates,u)!==!1&&(u.preventDefault(),o.deactivate())},$=function(u){var d=Te(u);c(d,u)>=0||ge(r.clickOutsideDeactivates,u)||ge(r.allowOutsideClick,u)||(u.preventDefault(),u.stopImmediatePropagation())},j=function(){if(i.active)return ut.activateTrap(s,o),i.delayInitialFocusTimer=r.delayInitialFocus?dt(function(){y(m())}):y(m()),n.addEventListener("focusin",A,!0),n.addEventListener("mousedown",R,{capture:!0,passive:!1}),n.addEventListener("touchstart",R,{capture:!0,passive:!1}),n.addEventListener("click",$,{capture:!0,passive:!1}),n.addEventListener("keydown",Y,{capture:!0,passive:!1}),n.addEventListener("keydown",W),o},we=function(){if(i.active)return n.removeEventListener("focusin",A,!0),n.removeEventListener("mousedown",R,!0),n.removeEventListener("touchstart",R,!0),n.removeEventListener("click",$,!0),n.removeEventListener("keydown",Y,!0),n.removeEventListener("keydown",W),o},M=function(u){var d=u.some(function(g){var E=Array.from(g.removedNodes);return E.some(function(T){return T===i.mostRecentlyFocusedNode})});d&&y(m())},q=typeof window<"u"&&"MutationObserver"in window?new MutationObserver(M):void 0,G=function(){q&&(q.disconnect(),i.active&&!i.paused&&i.containers.map(function(u){q.observe(u,{subtree:!0,childList:!0})}))};return o={get active(){return i.active},get paused(){return i.paused},activate:function(u){if(i.active)return this;var d=l(u,"onActivate"),g=l(u,"onPostActivate"),E=l(u,"checkCanFocusTrap");E||f(),i.active=!0,i.paused=!1,i.nodeFocusedBeforeActivation=n.activeElement,d==null||d();var T=function(){E&&f(),j(),G(),g==null||g()};return E?(E(i.containers.concat()).then(T,T),this):(T(),this)},deactivate:function(u){if(!i.active)return this;var d=ct({onDeactivate:r.onDeactivate,onPostDeactivate:r.onPostDeactivate,checkCanReturnFocus:r.checkCanReturnFocus},u);clearTimeout(i.delayInitialFocusTimer),i.delayInitialFocusTimer=void 0,we(),i.active=!1,i.paused=!1,G(),ut.deactivateTrap(s,o);var g=l(d,"onDeactivate"),E=l(d,"onPostDeactivate"),T=l(d,"checkCanReturnFocus"),F=l(d,"returnFocus","returnFocusOnDeactivate");g==null||g();var S=function(){dt(function(){F&&y(_(i.nodeFocusedBeforeActivation)),E==null||E()})};return F&&T?(T(_(i.nodeFocusedBeforeActivation)).then(S,S),this):(S(),this)},pause:function(u){return i.active?(i.manuallyPaused=!0,this._setPausedState(!0,u)):this},unpause:function(u){return i.active?(i.manuallyPaused=!1,s[s.length-1]!==this?this:this._setPausedState(!1,u)):this},updateContainerElements:function(u){var d=[].concat(u).filter(Boolean);return i.containers=d.map(function(g){return typeof g=="string"?n.querySelector(g):g}),i.active&&f(),G(),this}},Object.defineProperties(o,{_isManuallyPaused:{value:function(){return i.manuallyPaused}},_setPausedState:{value:function(u,d){if(i.paused===u)return this;if(i.paused=u,u){var g=l(d,"onPause"),E=l(d,"onPostPause");g==null||g(),we(),G(),E==null||E()}else{var T=l(d,"onUnpause"),F=l(d,"onPostUnpause");T==null||T(),f(),j(),G(),F==null||F()}return this}}}),o.updateContainerElements(e),o};function $n(a,e={}){let t;const{immediate:n,...s}=e,r=ce(!1),i=ce(!1),o=f=>t&&t.activate(f),l=f=>t&&t.deactivate(f),c=()=>{t&&(t.pause(),i.value=!0)},h=()=>{t&&(t.unpause(),i.value=!1)},m=be(()=>{const f=tt(a);return Rt(f).map(b=>{const y=tt(b);return typeof y=="string"?y:At(y)}).filter(Mt)});return je(m,f=>{f.length&&(t=Vn(f,{...s,onActivate(){r.value=!0,e.onActivate&&e.onActivate()},onDeactivate(){r.value=!1,e.onDeactivate&&e.onDeactivate()}}),n&&o())},{flush:"post"}),Lt(()=>l()),{hasFocus:r,isPaused:i,activate:o,deactivate:l,pause:c,unpause:h}}class ue{constructor(e,t=!0,n=[],s=5e3){this.ctx=e,this.iframes=t,this.exclude=n,this.iframesTimeout=s}static matches(e,t){const n=typeof t=="string"?[t]:t,s=e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.oMatchesSelector||e.webkitMatchesSelector;if(s){let r=!1;return n.every(i=>s.call(e,i)?(r=!0,!1):!0),r}else return!1}getContexts(){let e,t=[];return typeof this.ctx>"u"||!this.ctx?e=[]:NodeList.prototype.isPrototypeOf(this.ctx)?e=Array.prototype.slice.call(this.ctx):Array.isArray(this.ctx)?e=this.ctx:typeof this.ctx=="string"?e=Array.prototype.slice.call(document.querySelectorAll(this.ctx)):e=[this.ctx],e.forEach(n=>{const s=t.filter(r=>r.contains(n)).length>0;t.indexOf(n)===-1&&!s&&t.push(n)}),t}getIframeContents(e,t,n=()=>{}){let s;try{const r=e.contentWindow;if(s=r.document,!r||!s)throw new Error("iframe inaccessible")}catch{n()}s&&t(s)}isIframeBlank(e){const t="about:blank",n=e.getAttribute("src").trim();return e.contentWindow.location.href===t&&n!==t&&n}observeIframeLoad(e,t,n){let s=!1,r=null;const i=()=>{if(!s){s=!0,clearTimeout(r);try{this.isIframeBlank(e)||(e.removeEventListener("load",i),this.getIframeContents(e,t,n))}catch{n()}}};e.addEventListener("load",i),r=setTimeout(i,this.iframesTimeout)}onIframeReady(e,t,n){try{e.contentWindow.document.readyState==="complete"?this.isIframeBlank(e)?this.observeIframeLoad(e,t,n):this.getIframeContents(e,t,n):this.observeIframeLoad(e,t,n)}catch{n()}}waitForIframes(e,t){let n=0;this.forEachIframe(e,()=>!0,s=>{n++,this.waitForIframes(s.querySelector("html"),()=>{--n||t()})},s=>{s||t()})}forEachIframe(e,t,n,s=()=>{}){let r=e.querySelectorAll("iframe"),i=r.length,o=0;r=Array.prototype.slice.call(r);const l=()=>{--i<=0&&s(o)};i||l(),r.forEach(c=>{ue.matches(c,this.exclude)?l():this.onIframeReady(c,h=>{t(c)&&(o++,n(h)),l()},l)})}createIterator(e,t,n){return document.createNodeIterator(e,t,n,!1)}createInstanceOnIframe(e){return new ue(e.querySelector("html"),this.iframes)}compareNodeIframe(e,t,n){const s=e.compareDocumentPosition(n),r=Node.DOCUMENT_POSITION_PRECEDING;if(s&r)if(t!==null){const i=t.compareDocumentPosition(n),o=Node.DOCUMENT_POSITION_FOLLOWING;if(i&o)return!0}else return!0;return!1}getIteratorNode(e){const t=e.previousNode();let n;return t===null?n=e.nextNode():n=e.nextNode()&&e.nextNode(),{prevNode:t,node:n}}checkIframeFilter(e,t,n,s){let r=!1,i=!1;return s.forEach((o,l)=>{o.val===n&&(r=l,i=o.handled)}),this.compareNodeIframe(e,t,n)?(r===!1&&!i?s.push({val:n,handled:!0}):r!==!1&&!i&&(s[r].handled=!0),!0):(r===!1&&s.push({val:n,handled:!1}),!1)}handleOpenIframes(e,t,n,s){e.forEach(r=>{r.handled||this.getIframeContents(r.val,i=>{this.createInstanceOnIframe(i).forEachNode(t,n,s)})})}iterateThroughNodes(e,t,n,s,r){const i=this.createIterator(t,e,s);let o=[],l=[],c,h,m=()=>({prevNode:h,node:c}=this.getIteratorNode(i),c);for(;m();)this.iframes&&this.forEachIframe(t,f=>this.checkIframeFilter(c,h,f,o),f=>{this.createInstanceOnIframe(f).forEachNode(e,b=>l.push(b),s)}),l.push(c);l.forEach(f=>{n(f)}),this.iframes&&this.handleOpenIframes(o,e,n,s),r()}forEachNode(e,t,n,s=()=>{}){const r=this.getContexts();let i=r.length;i||s(),r.forEach(o=>{const l=()=>{this.iterateThroughNodes(e,o,t,n,()=>{--i<=0&&s()})};this.iframes?this.waitForIframes(o,l):l()})}}let jn=class{constructor(e){this.ctx=e,this.ie=!1;const t=window.navigator.userAgent;(t.indexOf("MSIE")>-1||t.indexOf("Trident")>-1)&&(this.ie=!0)}set opt(e){this._opt=Object.assign({},{element:"",className:"",exclude:[],iframes:!1,iframesTimeout:5e3,separateWordSearch:!0,diacritics:!0,synonyms:{},accuracy:"partially",acrossElements:!1,caseSensitive:!1,ignoreJoiners:!1,ignoreGroups:0,ignorePunctuation:[],wildcards:"disabled",each:()=>{},noMatch:()=>{},filter:()=>!0,done:()=>{},debug:!1,log:window.console},e)}get opt(){return this._opt}get iterator(){return new ue(this.ctx,this.opt.iframes,this.opt.exclude,this.opt.iframesTimeout)}log(e,t="debug"){const n=this.opt.log;this.opt.debug&&typeof n=="object"&&typeof n[t]=="function"&&n[t](`mark.js: ${e}`)}escapeStr(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}createRegExp(e){return this.opt.wildcards!=="disabled"&&(e=this.setupWildcardsRegExp(e)),e=this.escapeStr(e),Object.keys(this.opt.synonyms).length&&(e=this.createSynonymsRegExp(e)),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),this.opt.diacritics&&(e=this.createDiacriticsRegExp(e)),e=this.createMergedBlanksRegExp(e),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.createJoinersRegExp(e)),this.opt.wildcards!=="disabled"&&(e=this.createWildcardsRegExp(e)),e=this.createAccuracyRegExp(e),e}createSynonymsRegExp(e){const t=this.opt.synonyms,n=this.opt.caseSensitive?"":"i",s=this.opt.ignoreJoiners||this.opt.ignorePunctuation.length?"\0":"";for(let r in t)if(t.hasOwnProperty(r)){const i=t[r],o=this.opt.wildcards!=="disabled"?this.setupWildcardsRegExp(r):this.escapeStr(r),l=this.opt.wildcards!=="disabled"?this.setupWildcardsRegExp(i):this.escapeStr(i);o!==""&&l!==""&&(e=e.replace(new RegExp(`(${this.escapeStr(o)}|${this.escapeStr(l)})`,`gm${n}`),s+`(${this.processSynomyms(o)}|${this.processSynomyms(l)})`+s))}return e}processSynomyms(e){return(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),e}setupWildcardsRegExp(e){return e=e.replace(/(?:\\)*\?/g,t=>t.charAt(0)==="\\"?"?":""),e.replace(/(?:\\)*\*/g,t=>t.charAt(0)==="\\"?"*":"")}createWildcardsRegExp(e){let t=this.opt.wildcards==="withSpaces";return e.replace(/\u0001/g,t?"[\\S\\s]?":"\\S?").replace(/\u0002/g,t?"[\\S\\s]*?":"\\S*")}setupIgnoreJoinersRegExp(e){return e.replace(/[^(|)\\]/g,(t,n,s)=>{let r=s.charAt(n+1);return/[(|)\\]/.test(r)||r===""?t:t+"\0"})}createJoinersRegExp(e){let t=[];const n=this.opt.ignorePunctuation;return Array.isArray(n)&&n.length&&t.push(this.escapeStr(n.join(""))),this.opt.ignoreJoiners&&t.push("\\u00ad\\u200b\\u200c\\u200d"),t.length?e.split(/\u0000+/).join(`[${t.join("")}]*`):e}createDiacriticsRegExp(e){const t=this.opt.caseSensitive?"":"i",n=this.opt.caseSensitive?["aàáảãạăằắẳẵặâầấẩẫậäåāą","AÀÁẢÃẠĂẰẮẲẴẶÂẦẤẨẪẬÄÅĀĄ","cçćč","CÇĆČ","dđď","DĐĎ","eèéẻẽẹêềếểễệëěēę","EÈÉẺẼẸÊỀẾỂỄỆËĚĒĘ","iìíỉĩịîïī","IÌÍỈĨỊÎÏĪ","lł","LŁ","nñňń","NÑŇŃ","oòóỏõọôồốổỗộơởỡớờợöøō","OÒÓỎÕỌÔỒỐỔỖỘƠỞỠỚỜỢÖØŌ","rř","RŘ","sšśșş","SŠŚȘŞ","tťțţ","TŤȚŢ","uùúủũụưừứửữựûüůū","UÙÚỦŨỤƯỪỨỬỮỰÛÜŮŪ","yýỳỷỹỵÿ","YÝỲỶỸỴŸ","zžżź","ZŽŻŹ"]:["aàáảãạăằắẳẵặâầấẩẫậäåāąAÀÁẢÃẠĂẰẮẲẴẶÂẦẤẨẪẬÄÅĀĄ","cçćčCÇĆČ","dđďDĐĎ","eèéẻẽẹêềếểễệëěēęEÈÉẺẼẸÊỀẾỂỄỆËĚĒĘ","iìíỉĩịîïīIÌÍỈĨỊÎÏĪ","lłLŁ","nñňńNÑŇŃ","oòóỏõọôồốổỗộơởỡớờợöøōOÒÓỎÕỌÔỒỐỔỖỘƠỞỠỚỜỢÖØŌ","rřRŘ","sšśșşSŠŚȘŞ","tťțţTŤȚŢ","uùúủũụưừứửữựûüůūUÙÚỦŨỤƯỪỨỬỮỰÛÜŮŪ","yýỳỷỹỵÿYÝỲỶỸỴŸ","zžżźZŽŻŹ"];let s=[];return e.split("").forEach(r=>{n.every(i=>{if(i.indexOf(r)!==-1){if(s.indexOf(i)>-1)return!1;e=e.replace(new RegExp(`[${i}]`,`gm${t}`),`[${i}]`),s.push(i)}return!0})}),e}createMergedBlanksRegExp(e){return e.replace(/[\s]+/gmi,"[\\s]+")}createAccuracyRegExp(e){const t="!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~¡¿";let n=this.opt.accuracy,s=typeof n=="string"?n:n.value,r=typeof n=="string"?[]:n.limiters,i="";switch(r.forEach(o=>{i+=`|${this.escapeStr(o)}`}),s){case"partially":default:return`()(${e})`;case"complementary":return i="\\s"+(i||this.escapeStr(t)),`()([^${i}]*${e}[^${i}]*)`;case"exactly":return`(^|\\s${i})(${e})(?=$|\\s${i})`}}getSeparatedKeywords(e){let t=[];return e.forEach(n=>{this.opt.separateWordSearch?n.split(" ").forEach(s=>{s.trim()&&t.indexOf(s)===-1&&t.push(s)}):n.trim()&&t.indexOf(n)===-1&&t.push(n)}),{keywords:t.sort((n,s)=>s.length-n.length),length:t.length}}isNumeric(e){return Number(parseFloat(e))==e}checkRanges(e){if(!Array.isArray(e)||Object.prototype.toString.call(e[0])!=="[object Object]")return this.log("markRanges() will only accept an array of objects"),this.opt.noMatch(e),[];const t=[];let n=0;return e.sort((s,r)=>s.start-r.start).forEach(s=>{let{start:r,end:i,valid:o}=this.callNoMatchOnInvalidRanges(s,n);o&&(s.start=r,s.length=i-r,t.push(s),n=i)}),t}callNoMatchOnInvalidRanges(e,t){let n,s,r=!1;return e&&typeof e.start<"u"?(n=parseInt(e.start,10),s=n+parseInt(e.length,10),this.isNumeric(e.start)&&this.isNumeric(e.length)&&s-t>0&&s-n>0?r=!0:(this.log(`Ignoring invalid or overlapping range: ${JSON.stringify(e)}`),this.opt.noMatch(e))):(this.log(`Ignoring invalid range: ${JSON.stringify(e)}`),this.opt.noMatch(e)),{start:n,end:s,valid:r}}checkWhitespaceRanges(e,t,n){let s,r=!0,i=n.length,o=t-i,l=parseInt(e.start,10)-o;return l=l>i?i:l,s=l+parseInt(e.length,10),s>i&&(s=i,this.log(`End range automatically set to the max value of ${i}`)),l<0||s-l<0||l>i||s>i?(r=!1,this.log(`Invalid range: ${JSON.stringify(e)}`),this.opt.noMatch(e)):n.substring(l,s).replace(/\s+/g,"")===""&&(r=!1,this.log("Skipping whitespace only range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:l,end:s,valid:r}}getTextNodes(e){let t="",n=[];this.iterator.forEachNode(NodeFilter.SHOW_TEXT,s=>{n.push({start:t.length,end:(t+=s.textContent).length,node:s})},s=>this.matchesExclude(s.parentNode)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT,()=>{e({value:t,nodes:n})})}matchesExclude(e){return ue.matches(e,this.opt.exclude.concat(["script","style","title","head","html"]))}wrapRangeInTextNode(e,t,n){const s=this.opt.element?this.opt.element:"mark",r=e.splitText(t),i=r.splitText(n-t);let o=document.createElement(s);return o.setAttribute("data-markjs","true"),this.opt.className&&o.setAttribute("class",this.opt.className),o.textContent=r.textContent,r.parentNode.replaceChild(o,r),i}wrapRangeInMappedTextNode(e,t,n,s,r){e.nodes.every((i,o)=>{const l=e.nodes[o+1];if(typeof l>"u"||l.start>t){if(!s(i.node))return!1;const c=t-i.start,h=(n>i.end?i.end:n)-i.start,m=e.value.substr(0,i.start),f=e.value.substr(h+i.start);if(i.node=this.wrapRangeInTextNode(i.node,c,h),e.value=m+f,e.nodes.forEach((b,y)=>{y>=o&&(e.nodes[y].start>0&&y!==o&&(e.nodes[y].start-=h),e.nodes[y].end-=h)}),n-=h,r(i.node.previousSibling,i.start),n>i.end)t=i.end;else return!1}return!0})}wrapMatches(e,t,n,s,r){const i=t===0?0:t+1;this.getTextNodes(o=>{o.nodes.forEach(l=>{l=l.node;let c;for(;(c=e.exec(l.textContent))!==null&&c[i]!=="";){if(!n(c[i],l))continue;let h=c.index;if(i!==0)for(let m=1;m{let l;for(;(l=e.exec(o.value))!==null&&l[i]!=="";){let c=l.index;if(i!==0)for(let m=1;mn(l[i],m),(m,f)=>{e.lastIndex=f,s(m)})}r()})}wrapRangeFromIndex(e,t,n,s){this.getTextNodes(r=>{const i=r.value.length;e.forEach((o,l)=>{let{start:c,end:h,valid:m}=this.checkWhitespaceRanges(o,i,r.value);m&&this.wrapRangeInMappedTextNode(r,c,h,f=>t(f,o,r.value.substring(c,h),l),f=>{n(f,o)})}),s()})}unwrapMatches(e){const t=e.parentNode;let n=document.createDocumentFragment();for(;e.firstChild;)n.appendChild(e.removeChild(e.firstChild));t.replaceChild(n,e),this.ie?this.normalizeTextNode(t):t.normalize()}normalizeTextNode(e){if(e){if(e.nodeType===3)for(;e.nextSibling&&e.nextSibling.nodeType===3;)e.nodeValue+=e.nextSibling.nodeValue,e.parentNode.removeChild(e.nextSibling);else this.normalizeTextNode(e.firstChild);this.normalizeTextNode(e.nextSibling)}}markRegExp(e,t){this.opt=t,this.log(`Searching with expression "${e}"`);let n=0,s="wrapMatches";const r=i=>{n++,this.opt.each(i)};this.opt.acrossElements&&(s="wrapMatchesAcrossElements"),this[s](e,this.opt.ignoreGroups,(i,o)=>this.opt.filter(o,i,n),r,()=>{n===0&&this.opt.noMatch(e),this.opt.done(n)})}mark(e,t){this.opt=t;let n=0,s="wrapMatches";const{keywords:r,length:i}=this.getSeparatedKeywords(typeof e=="string"?[e]:e),o=this.opt.caseSensitive?"":"i",l=c=>{let h=new RegExp(this.createRegExp(c),`gm${o}`),m=0;this.log(`Searching with expression "${h}"`),this[s](h,1,(f,b)=>this.opt.filter(b,c,n,m),f=>{m++,n++,this.opt.each(f)},()=>{m===0&&this.opt.noMatch(c),r[i-1]===c?this.opt.done(n):l(r[r.indexOf(c)+1])})};this.opt.acrossElements&&(s="wrapMatchesAcrossElements"),i===0?this.opt.done(n):l(r[0])}markRanges(e,t){this.opt=t;let n=0,s=this.checkRanges(e);s&&s.length?(this.log("Starting to mark with the following ranges: "+JSON.stringify(s)),this.wrapRangeFromIndex(s,(r,i,o,l)=>this.opt.filter(r,i,o,l),(r,i)=>{n++,this.opt.each(r,i)},()=>{this.opt.done(n)})):this.opt.done(n)}unmark(e){this.opt=e;let t=this.opt.element?this.opt.element:"*";t+="[data-markjs]",this.opt.className&&(t+=`.${this.opt.className}`),this.log(`Removal selector "${t}"`),this.iterator.forEachNode(NodeFilter.SHOW_ELEMENT,n=>{this.unwrapMatches(n)},n=>{const s=ue.matches(n,t),r=this.matchesExclude(n);return!s||r?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT},this.opt.done)}};function Bn(a){const e=new jn(a);return this.mark=(t,n)=>(e.mark(t,n),this),this.markRegExp=(t,n)=>(e.markRegExp(t,n),this),this.markRanges=(t,n)=>(e.markRanges(t,n),this),this.unmark=t=>(e.unmark(t),this),this}const Wn="ENTRIES",xt="KEYS",St="VALUES",D="";class De{constructor(e,t){const n=e._tree,s=Array.from(n.keys());this.set=e,this._type=t,this._path=s.length>0?[{node:n,keys:s}]:[]}next(){const e=this.dive();return this.backtrack(),e}dive(){if(this._path.length===0)return{done:!0,value:void 0};const{node:e,keys:t}=le(this._path);if(le(t)===D)return{done:!1,value:this.result()};const n=e.get(le(t));return this._path.push({node:n,keys:Array.from(n.keys())}),this.dive()}backtrack(){if(this._path.length===0)return;const e=le(this._path).keys;e.pop(),!(e.length>0)&&(this._path.pop(),this.backtrack())}key(){return this.set._prefix+this._path.map(({keys:e})=>le(e)).filter(e=>e!==D).join("")}value(){return le(this._path).node.get(D)}result(){switch(this._type){case St:return this.value();case xt:return this.key();default:return[this.key(),this.value()]}}[Symbol.iterator](){return this}}const le=a=>a[a.length-1],Kn=(a,e,t)=>{const n=new Map;if(e===void 0)return n;const s=e.length+1,r=s+t,i=new Uint8Array(r*s).fill(t+1);for(let o=0;o{const l=r*i;e:for(const c of a.keys())if(c===D){const h=s[l-1];h<=t&&n.set(o,[a.get(c),h])}else{let h=r;for(let m=0;mt)continue e}Et(a.get(c),e,t,n,s,h,i,o+c)}};class ee{constructor(e=new Map,t=""){this._size=void 0,this._tree=e,this._prefix=t}atPrefix(e){if(!e.startsWith(this._prefix))throw new Error("Mismatched prefix");const[t,n]=Re(this._tree,e.slice(this._prefix.length));if(t===void 0){const[s,r]=qe(n);for(const i of s.keys())if(i!==D&&i.startsWith(r)){const o=new Map;return o.set(i.slice(r.length),s.get(i)),new ee(o,e)}}return new ee(t,e)}clear(){this._size=void 0,this._tree.clear()}delete(e){return this._size=void 0,Jn(this._tree,e)}entries(){return new De(this,Wn)}forEach(e){for(const[t,n]of this)e(t,n,this)}fuzzyGet(e,t){return Kn(this._tree,e,t)}get(e){const t=Ke(this._tree,e);return t!==void 0?t.get(D):void 0}has(e){const t=Ke(this._tree,e);return t!==void 0&&t.has(D)}keys(){return new De(this,xt)}set(e,t){if(typeof e!="string")throw new Error("key must be a string");return this._size=void 0,ze(this._tree,e).set(D,t),this}get size(){if(this._size)return this._size;this._size=0;const e=this.entries();for(;!e.next().done;)this._size+=1;return this._size}update(e,t){if(typeof e!="string")throw new Error("key must be a string");this._size=void 0;const n=ze(this._tree,e);return n.set(D,t(n.get(D))),this}fetch(e,t){if(typeof e!="string")throw new Error("key must be a string");this._size=void 0;const n=ze(this._tree,e);let s=n.get(D);return s===void 0&&n.set(D,s=t()),s}values(){return new De(this,St)}[Symbol.iterator](){return this.entries()}static from(e){const t=new ee;for(const[n,s]of e)t.set(n,s);return t}static fromObject(e){return ee.from(Object.entries(e))}}const Re=(a,e,t=[])=>{if(e.length===0||a==null)return[a,t];for(const n of a.keys())if(n!==D&&e.startsWith(n))return t.push([a,n]),Re(a.get(n),e.slice(n.length),t);return t.push([a,e]),Re(void 0,"",t)},Ke=(a,e)=>{if(e.length===0||a==null)return a;for(const t of a.keys())if(t!==D&&e.startsWith(t))return Ke(a.get(t),e.slice(t.length))},ze=(a,e)=>{const t=e.length;e:for(let n=0;a&&n{const[t,n]=Re(a,e);if(t!==void 0){if(t.delete(D),t.size===0)Tt(n);else if(t.size===1){const[s,r]=t.entries().next().value;It(n,s,r)}}},Tt=a=>{if(a.length===0)return;const[e,t]=qe(a);if(e.delete(t),e.size===0)Tt(a.slice(0,-1));else if(e.size===1){const[n,s]=e.entries().next().value;n!==D&&It(a.slice(0,-1),n,s)}},It=(a,e,t)=>{if(a.length===0)return;const[n,s]=qe(a);n.set(s+e,t),n.delete(s)},qe=a=>a[a.length-1],Ge="or",kt="and",Un="and_not";class de{constructor(e){if((e==null?void 0:e.fields)==null)throw new Error('MiniSearch: option "fields" must be provided');const t=e.autoVacuum==null||e.autoVacuum===!0?$e:e.autoVacuum;this._options={...Ve,...e,autoVacuum:t,searchOptions:{...ht,...e.searchOptions||{}},autoSuggestOptions:{...Yn,...e.autoSuggestOptions||{}}},this._index=new ee,this._documentCount=0,this._documentIds=new Map,this._idToShortId=new Map,this._fieldIds={},this._fieldLength=new Map,this._avgFieldLength=[],this._nextId=0,this._storedFields=new Map,this._dirtCount=0,this._currentVacuum=null,this._enqueuedVacuum=null,this._enqueuedVacuumConditions=Ue,this.addFields(this._options.fields)}add(e){const{extractField:t,tokenize:n,processTerm:s,fields:r,idField:i}=this._options,o=t(e,i);if(o==null)throw new Error(`MiniSearch: document does not have ID field "${i}"`);if(this._idToShortId.has(o))throw new Error(`MiniSearch: duplicate ID ${o}`);const l=this.addDocumentId(o);this.saveStoredFields(l,e);for(const c of r){const h=t(e,c);if(h==null)continue;const m=n(h.toString(),c),f=this._fieldIds[c],b=new Set(m).size;this.addFieldLength(l,f,this._documentCount-1,b);for(const y of m){const _=s(y,c);if(Array.isArray(_))for(const w of _)this.addTerm(f,l,w);else _&&this.addTerm(f,l,_)}}}addAll(e){for(const t of e)this.add(t)}addAllAsync(e,t={}){const{chunkSize:n=10}=t,s={chunk:[],promise:Promise.resolve()},{chunk:r,promise:i}=e.reduce(({chunk:o,promise:l},c,h)=>(o.push(c),(h+1)%n===0?{chunk:[],promise:l.then(()=>new Promise(m=>setTimeout(m,0))).then(()=>this.addAll(o))}:{chunk:o,promise:l}),s);return i.then(()=>this.addAll(r))}remove(e){const{tokenize:t,processTerm:n,extractField:s,fields:r,idField:i}=this._options,o=s(e,i);if(o==null)throw new Error(`MiniSearch: document does not have ID field "${i}"`);const l=this._idToShortId.get(o);if(l==null)throw new Error(`MiniSearch: cannot remove document with ID ${o}: it is not in the index`);for(const c of r){const h=s(e,c);if(h==null)continue;const m=t(h.toString(),c),f=this._fieldIds[c],b=new Set(m).size;this.removeFieldLength(l,f,this._documentCount,b);for(const y of m){const _=n(y,c);if(Array.isArray(_))for(const w of _)this.removeTerm(f,l,w);else _&&this.removeTerm(f,l,_)}}this._storedFields.delete(l),this._documentIds.delete(l),this._idToShortId.delete(o),this._fieldLength.delete(l),this._documentCount-=1}removeAll(e){if(e)for(const t of e)this.remove(t);else{if(arguments.length>0)throw new Error("Expected documents to be present. Omit the argument to remove all documents.");this._index=new ee,this._documentCount=0,this._documentIds=new Map,this._idToShortId=new Map,this._fieldLength=new Map,this._avgFieldLength=[],this._storedFields=new Map,this._nextId=0}}discard(e){const t=this._idToShortId.get(e);if(t==null)throw new Error(`MiniSearch: cannot discard document with ID ${e}: it is not in the index`);this._idToShortId.delete(e),this._documentIds.delete(t),this._storedFields.delete(t),(this._fieldLength.get(t)||[]).forEach((n,s)=>{this.removeFieldLength(t,s,this._documentCount,n)}),this._fieldLength.delete(t),this._documentCount-=1,this._dirtCount+=1,this.maybeAutoVacuum()}maybeAutoVacuum(){if(this._options.autoVacuum===!1)return;const{minDirtFactor:e,minDirtCount:t,batchSize:n,batchWait:s}=this._options.autoVacuum;this.conditionalVacuum({batchSize:n,batchWait:s},{minDirtCount:t,minDirtFactor:e})}discardAll(e){const t=this._options.autoVacuum;try{this._options.autoVacuum=!1;for(const n of e)this.discard(n)}finally{this._options.autoVacuum=t}this.maybeAutoVacuum()}replace(e){const{idField:t,extractField:n}=this._options,s=n(e,t);this.discard(s),this.add(e)}vacuum(e={}){return this.conditionalVacuum(e)}conditionalVacuum(e,t){return this._currentVacuum?(this._enqueuedVacuumConditions=this._enqueuedVacuumConditions&&t,this._enqueuedVacuum!=null?this._enqueuedVacuum:(this._enqueuedVacuum=this._currentVacuum.then(()=>{const n=this._enqueuedVacuumConditions;return this._enqueuedVacuumConditions=Ue,this.performVacuuming(e,n)}),this._enqueuedVacuum)):this.vacuumConditionsMet(t)===!1?Promise.resolve():(this._currentVacuum=this.performVacuuming(e),this._currentVacuum)}async performVacuuming(e,t){const n=this._dirtCount;if(this.vacuumConditionsMet(t)){const s=e.batchSize||Je.batchSize,r=e.batchWait||Je.batchWait;let i=1;for(const[o,l]of this._index){for(const[c,h]of l)for(const[m]of h)this._documentIds.has(m)||(h.size<=1?l.delete(c):h.delete(m));this._index.get(o).size===0&&this._index.delete(o),i%s===0&&await new Promise(c=>setTimeout(c,r)),i+=1}this._dirtCount-=n}await null,this._currentVacuum=this._enqueuedVacuum,this._enqueuedVacuum=null}vacuumConditionsMet(e){if(e==null)return!0;let{minDirtCount:t,minDirtFactor:n}=e;return t=t||$e.minDirtCount,n=n||$e.minDirtFactor,this.dirtCount>=t&&this.dirtFactor>=n}get isVacuuming(){return this._currentVacuum!=null}get dirtCount(){return this._dirtCount}get dirtFactor(){return this._dirtCount/(1+this._documentCount+this._dirtCount)}has(e){return this._idToShortId.has(e)}getStoredFields(e){const t=this._idToShortId.get(e);if(t!=null)return this._storedFields.get(t)}search(e,t={}){const{searchOptions:n}=this._options,s={...n,...t},r=this.executeQuery(e,t),i=[];for(const[o,{score:l,terms:c,match:h}]of r){const m=c.length||1,f={id:this._documentIds.get(o),score:l*m,terms:Object.keys(h),queryTerms:c,match:h};Object.assign(f,this._storedFields.get(o)),(s.filter==null||s.filter(f))&&i.push(f)}return e===de.wildcard&&s.boostDocument==null||i.sort(pt),i}autoSuggest(e,t={}){t={...this._options.autoSuggestOptions,...t};const n=new Map;for(const{score:r,terms:i}of this.search(e,t)){const o=i.join(" "),l=n.get(o);l!=null?(l.score+=r,l.count+=1):n.set(o,{score:r,terms:i,count:1})}const s=[];for(const[r,{score:i,terms:o,count:l}]of n)s.push({suggestion:r,terms:o,score:i/l});return s.sort(pt),s}get documentCount(){return this._documentCount}get termCount(){return this._index.size}static loadJSON(e,t){if(t==null)throw new Error("MiniSearch: loadJSON should be given the same options used when serializing the index");return this.loadJS(JSON.parse(e),t)}static async loadJSONAsync(e,t){if(t==null)throw new Error("MiniSearch: loadJSON should be given the same options used when serializing the index");return this.loadJSAsync(JSON.parse(e),t)}static getDefault(e){if(Ve.hasOwnProperty(e))return Pe(Ve,e);throw new Error(`MiniSearch: unknown option "${e}"`)}static loadJS(e,t){const{index:n,documentIds:s,fieldLength:r,storedFields:i,serializationVersion:o}=e,l=this.instantiateMiniSearch(e,t);l._documentIds=Ie(s),l._fieldLength=Ie(r),l._storedFields=Ie(i);for(const[c,h]of l._documentIds)l._idToShortId.set(h,c);for(const[c,h]of n){const m=new Map;for(const f of Object.keys(h)){let b=h[f];o===1&&(b=b.ds),m.set(parseInt(f,10),Ie(b))}l._index.set(c,m)}return l}static async loadJSAsync(e,t){const{index:n,documentIds:s,fieldLength:r,storedFields:i,serializationVersion:o}=e,l=this.instantiateMiniSearch(e,t);l._documentIds=await ke(s),l._fieldLength=await ke(r),l._storedFields=await ke(i);for(const[h,m]of l._documentIds)l._idToShortId.set(m,h);let c=0;for(const[h,m]of n){const f=new Map;for(const b of Object.keys(m)){let y=m[b];o===1&&(y=y.ds),f.set(parseInt(b,10),await ke(y))}++c%1e3===0&&await Nt(0),l._index.set(h,f)}return l}static instantiateMiniSearch(e,t){const{documentCount:n,nextId:s,fieldIds:r,averageFieldLength:i,dirtCount:o,serializationVersion:l}=e;if(l!==1&&l!==2)throw new Error("MiniSearch: cannot deserialize an index created with an incompatible version");const c=new de(t);return c._documentCount=n,c._nextId=s,c._idToShortId=new Map,c._fieldIds=r,c._avgFieldLength=i,c._dirtCount=o||0,c._index=new ee,c}executeQuery(e,t={}){if(e===de.wildcard)return this.executeWildcardQuery(t);if(typeof e!="string"){const f={...t,...e,queries:void 0},b=e.queries.map(y=>this.executeQuery(y,f));return this.combineResults(b,f.combineWith)}const{tokenize:n,processTerm:s,searchOptions:r}=this._options,i={tokenize:n,processTerm:s,...r,...t},{tokenize:o,processTerm:l}=i,m=o(e).flatMap(f=>l(f)).filter(f=>!!f).map(Qn(i)).map(f=>this.executeQuerySpec(f,i));return this.combineResults(m,i.combineWith)}executeQuerySpec(e,t){const n={...this._options.searchOptions,...t},s=(n.fields||this._options.fields).reduce((_,w)=>({..._,[w]:Pe(n.boost,w)||1}),{}),{boostDocument:r,weights:i,maxFuzzy:o,bm25:l}=n,{fuzzy:c,prefix:h}={...ht.weights,...i},m=this._index.get(e.term),f=this.termResults(e.term,e.term,1,e.termBoost,m,s,r,l);let b,y;if(e.prefix&&(b=this._index.atPrefix(e.term)),e.fuzzy){const _=e.fuzzy===!0?.2:e.fuzzy,w=_<1?Math.min(o,Math.round(e.term.length*_)):_;w&&(y=this._index.fuzzyGet(e.term,w))}if(b)for(const[_,w]of b){const R=_.length-e.term.length;if(!R)continue;y==null||y.delete(_);const A=h*_.length/(_.length+.3*R);this.termResults(e.term,_,A,e.termBoost,w,s,r,l,f)}if(y)for(const _ of y.keys()){const[w,R]=y.get(_);if(!R)continue;const A=c*_.length/(_.length+R);this.termResults(e.term,_,A,e.termBoost,w,s,r,l,f)}return f}executeWildcardQuery(e){const t=new Map,n={...this._options.searchOptions,...e};for(const[s,r]of this._documentIds){const i=n.boostDocument?n.boostDocument(r,"",this._storedFields.get(s)):1;t.set(s,{score:i,terms:[],match:{}})}return t}combineResults(e,t=Ge){if(e.length===0)return new Map;const n=t.toLowerCase(),s=qn[n];if(!s)throw new Error(`Invalid combination operator: ${t}`);return e.reduce(s)||new Map}toJSON(){const e=[];for(const[t,n]of this._index){const s={};for(const[r,i]of n)s[r]=Object.fromEntries(i);e.push([t,s])}return{documentCount:this._documentCount,nextId:this._nextId,documentIds:Object.fromEntries(this._documentIds),fieldIds:this._fieldIds,fieldLength:Object.fromEntries(this._fieldLength),averageFieldLength:this._avgFieldLength,storedFields:Object.fromEntries(this._storedFields),dirtCount:this._dirtCount,index:e,serializationVersion:2}}termResults(e,t,n,s,r,i,o,l,c=new Map){if(r==null)return c;for(const h of Object.keys(i)){const m=i[h],f=this._fieldIds[h],b=r.get(f);if(b==null)continue;let y=b.size;const _=this._avgFieldLength[f];for(const w of b.keys()){if(!this._documentIds.has(w)){this.removeTerm(f,w,t),y-=1;continue}const R=o?o(this._documentIds.get(w),t,this._storedFields.get(w)):1;if(!R)continue;const A=b.get(w),U=this._fieldLength.get(w)[f],Y=Hn(A,y,this._documentCount,U,_,l),W=n*s*m*R*Y,$=c.get(w);if($){$.score+=W,Zn($.terms,e);const j=Pe($.match,t);j?j.push(h):$.match[t]=[h]}else c.set(w,{score:W,terms:[e],match:{[t]:[h]}})}}return c}addTerm(e,t,n){const s=this._index.fetch(n,mt);let r=s.get(e);if(r==null)r=new Map,r.set(t,1),s.set(e,r);else{const i=r.get(t);r.set(t,(i||0)+1)}}removeTerm(e,t,n){if(!this._index.has(n)){this.warnDocumentChanged(t,e,n);return}const s=this._index.fetch(n,mt),r=s.get(e);r==null||r.get(t)==null?this.warnDocumentChanged(t,e,n):r.get(t)<=1?r.size<=1?s.delete(e):r.delete(t):r.set(t,r.get(t)-1),this._index.get(n).size===0&&this._index.delete(n)}warnDocumentChanged(e,t,n){for(const s of Object.keys(this._fieldIds))if(this._fieldIds[s]===t){this._options.logger("warn",`MiniSearch: document with ID ${this._documentIds.get(e)} has changed before removal: term "${n}" was not present in field "${s}". Removing a document after it has changed can corrupt the index!`,"version_conflict");return}}addDocumentId(e){const t=this._nextId;return this._idToShortId.set(e,t),this._documentIds.set(t,e),this._documentCount+=1,this._nextId+=1,t}addFields(e){for(let t=0;tObject.prototype.hasOwnProperty.call(a,e)?a[e]:void 0,qn={[Ge]:(a,e)=>{for(const t of e.keys()){const n=a.get(t);if(n==null)a.set(t,e.get(t));else{const{score:s,terms:r,match:i}=e.get(t);n.score=n.score+s,n.match=Object.assign(n.match,i),ft(n.terms,r)}}return a},[kt]:(a,e)=>{const t=new Map;for(const n of e.keys()){const s=a.get(n);if(s==null)continue;const{score:r,terms:i,match:o}=e.get(n);ft(s.terms,i),t.set(n,{score:s.score+r,terms:s.terms,match:Object.assign(s.match,o)})}return t},[Un]:(a,e)=>{for(const t of e.keys())a.delete(t);return a}},Gn={k:1.2,b:.7,d:.5},Hn=(a,e,t,n,s,r)=>{const{k:i,b:o,d:l}=r;return Math.log(1+(t-e+.5)/(e+.5))*(l+a*(i+1)/(a+i*(1-o+o*n/s)))},Qn=a=>(e,t,n)=>{const s=typeof a.fuzzy=="function"?a.fuzzy(e,t,n):a.fuzzy||!1,r=typeof a.prefix=="function"?a.prefix(e,t,n):a.prefix===!0,i=typeof a.boostTerm=="function"?a.boostTerm(e,t,n):1;return{term:e,fuzzy:s,prefix:r,termBoost:i}},Ve={idField:"id",extractField:(a,e)=>a[e],tokenize:a=>a.split(Xn),processTerm:a=>a.toLowerCase(),fields:void 0,searchOptions:void 0,storeFields:[],logger:(a,e)=>{typeof(console==null?void 0:console[a])=="function"&&console[a](e)},autoVacuum:!0},ht={combineWith:Ge,prefix:!1,fuzzy:!1,maxFuzzy:6,boost:{},weights:{fuzzy:.45,prefix:.375},bm25:Gn},Yn={combineWith:kt,prefix:(a,e,t)=>e===t.length-1},Je={batchSize:1e3,batchWait:10},Ue={minDirtFactor:.1,minDirtCount:20},$e={...Je,...Ue},Zn=(a,e)=>{a.includes(e)||a.push(e)},ft=(a,e)=>{for(const t of e)a.includes(t)||a.push(t)},pt=({score:a},{score:e})=>e-a,mt=()=>new Map,Ie=a=>{const e=new Map;for(const t of Object.keys(a))e.set(parseInt(t,10),a[t]);return e},ke=async a=>{const e=new Map;let t=0;for(const n of Object.keys(a))e.set(parseInt(n,10),a[n]),++t%1e3===0&&await Nt(0);return e},Nt=a=>new Promise(e=>setTimeout(e,a)),Xn=/[\n\r\p{Z}\p{P}]+/u;class es{constructor(e=10){Ae(this,"max");Ae(this,"cache");this.max=e,this.cache=new Map}get(e){let t=this.cache.get(e);return t!==void 0&&(this.cache.delete(e),this.cache.set(e,t)),t}set(e,t){this.cache.has(e)?this.cache.delete(e):this.cache.size===this.max&&this.cache.delete(this.first()),this.cache.set(e,t)}first(){return this.cache.keys().next().value}clear(){this.cache.clear()}}const J=a=>(Zt("data-v-ffdd78e7"),a=a(),Xt(),a),ts=["aria-owns"],ns={class:"shell"},ss=["title"],is=J(()=>x("span",{"aria-hidden":"true",class:"vpi-search search-icon local-search-icon"},null,-1)),rs=[is],as={class:"search-actions before"},os=["title"],ls=J(()=>x("span",{class:"vpi-arrow-left local-search-icon"},null,-1)),cs=[ls],us=["aria-activedescendant","aria-controls","placeholder"],ds={class:"search-actions"},hs=["title"],fs=J(()=>x("span",{class:"vpi-layout-list local-search-icon"},null,-1)),ps=[fs],ms=["disabled","title"],vs=J(()=>x("span",{class:"vpi-delete local-search-icon"},null,-1)),gs=[vs],bs=["id","role","aria-labelledby"],ys=["id","aria-selected"],ws=["href","aria-label","onMouseenter","onFocusin","data-index"],_s={class:"titles"},xs=J(()=>x("span",{class:"title-icon"},"#",-1)),Ss=["innerHTML"],Es=J(()=>x("span",{class:"vpi-chevron-right local-search-icon"},null,-1)),Ts={class:"title main"},Is=["innerHTML"],ks={key:0,class:"excerpt-wrapper"},Ns={key:0,class:"excerpt",inert:""},Fs=["innerHTML"],Os=J(()=>x("div",{class:"excerpt-gradient-bottom"},null,-1)),Cs=J(()=>x("div",{class:"excerpt-gradient-top"},null,-1)),Rs={key:0,class:"no-results"},As={class:"search-keyboard-shortcuts"},Ms=["aria-label"],Ls=J(()=>x("span",{class:"vpi-arrow-up navigate-icon"},null,-1)),Ds=[Ls],zs=["aria-label"],Ps=J(()=>x("span",{class:"vpi-arrow-down navigate-icon"},null,-1)),Vs=[Ps],$s=["aria-label"],js=J(()=>x("span",{class:"vpi-corner-down-left navigate-icon"},null,-1)),Bs=[js],Ws=["aria-label"],Ks=Dt({__name:"VPLocalSearchBox",emits:["close"],setup(a,{emit:e}){var S,C;const t=e,n=ce(),s=ce(),r=ce(ln),i=an(),{activate:o}=$n(n,{immediate:!0,allowOutsideClick:!0,clickOutsideDeactivates:!0,escapeDeactivates:!0}),{localeIndex:l,theme:c}=i,h=nt(async()=>{var p,v,I,O,z,P,V,k,K;return at(de.loadJSON((I=await((v=(p=r.value)[l.value])==null?void 0:v.call(p)))==null?void 0:I.default,{fields:["title","titles","text"],storeFields:["title","titles"],searchOptions:{fuzzy:.2,prefix:!0,boost:{title:4,text:2,titles:1},...((O=c.value.search)==null?void 0:O.provider)==="local"&&((P=(z=c.value.search.options)==null?void 0:z.miniSearch)==null?void 0:P.searchOptions)},...((V=c.value.search)==null?void 0:V.provider)==="local"&&((K=(k=c.value.search.options)==null?void 0:k.miniSearch)==null?void 0:K.options)}))}),f=be(()=>{var p,v;return((p=c.value.search)==null?void 0:p.provider)==="local"&&((v=c.value.search.options)==null?void 0:v.disableQueryPersistence)===!0}).value?fe(""):zt("vitepress:local-search-filter",""),b=Pt("vitepress:local-search-detailed-list",((S=c.value.search)==null?void 0:S.provider)==="local"&&((C=c.value.search.options)==null?void 0:C.detailedView)===!0),y=be(()=>{var p,v,I;return((p=c.value.search)==null?void 0:p.provider)==="local"&&(((v=c.value.search.options)==null?void 0:v.disableDetailedView)===!0||((I=c.value.search.options)==null?void 0:I.detailedView)===!1)}),_=be(()=>{var v,I,O,z,P,V,k;const p=((v=c.value.search)==null?void 0:v.options)??c.value.algolia;return((P=(z=(O=(I=p==null?void 0:p.locales)==null?void 0:I[l.value])==null?void 0:O.translations)==null?void 0:z.button)==null?void 0:P.buttonText)||((k=(V=p==null?void 0:p.translations)==null?void 0:V.button)==null?void 0:k.buttonText)||"Search"});Vt(()=>{y.value&&(b.value=!1)});const w=ce([]),R=fe(!1);je(f,()=>{R.value=!1});const A=nt(async()=>{if(s.value)return at(new Bn(s.value))},null),U=new es(16);$t(()=>[h.value,f.value,b.value],async([p,v,I],O,z)=>{var te,_e,He,Qe;(O==null?void 0:O[0])!==p&&U.clear();let P=!1;if(z(()=>{P=!0}),!p)return;w.value=p.search(v).slice(0,16),R.value=!0;const V=I?await Promise.all(w.value.map(B=>Y(B.id))):[];if(P)return;for(const{id:B,mod:ne}of V){const se=B.slice(0,B.indexOf("#"));let Z=U.get(se);if(Z)continue;Z=new Map,U.set(se,Z);const H=ne.default??ne;if(H!=null&&H.render||H!=null&&H.setup){const ie=en(H);ie.config.warnHandler=()=>{},ie.provide(tn,i),Object.defineProperties(ie.config.globalProperties,{$frontmatter:{get(){return i.frontmatter.value}},$params:{get(){return i.page.value.params}}});const Ye=document.createElement("div");ie.mount(Ye),Ye.querySelectorAll("h1, h2, h3, h4, h5, h6").forEach(he=>{var et;const xe=(et=he.querySelector("a"))==null?void 0:et.getAttribute("href"),Ze=(xe==null?void 0:xe.startsWith("#"))&&xe.slice(1);if(!Ze)return;let Xe="";for(;(he=he.nextElementSibling)&&!/^h[1-6]$/i.test(he.tagName);)Xe+=he.outerHTML;Z.set(Ze,Xe)}),ie.unmount()}if(P)return}const k=new Set;if(w.value=w.value.map(B=>{const[ne,se]=B.id.split("#"),Z=U.get(ne),H=(Z==null?void 0:Z.get(se))??"";for(const ie in B.match)k.add(ie);return{...B,text:H}}),await pe(),P)return;await new Promise(B=>{var ne;(ne=A.value)==null||ne.unmark({done:()=>{var se;(se=A.value)==null||se.markRegExp(T(k),{done:B})}})});const K=((te=n.value)==null?void 0:te.querySelectorAll(".result .excerpt"))??[];for(const B of K)(_e=B.querySelector('mark[data-markjs="true"]'))==null||_e.scrollIntoView({block:"center"});(Qe=(He=s.value)==null?void 0:He.firstElementChild)==null||Qe.scrollIntoView({block:"start"})},{debounce:200,immediate:!0});async function Y(p){const v=nn(p.slice(0,p.indexOf("#")));try{if(!v)throw new Error(`Cannot find file for id: ${p}`);return{id:p,mod:await import(v)}}catch(I){return console.error(I),{id:p,mod:{}}}}const W=fe(),$=be(()=>{var p;return((p=f.value)==null?void 0:p.length)<=0});function j(p=!0){var v,I;(v=W.value)==null||v.focus(),p&&((I=W.value)==null||I.select())}Me(()=>{j()});function we(p){p.pointerType==="mouse"&&j()}const M=fe(-1),q=fe(!0);je(w,p=>{M.value=p.length?0:-1,G()});function G(){pe(()=>{const p=document.querySelector(".result.selected");p==null||p.scrollIntoView({block:"nearest"})})}Se("ArrowUp",p=>{p.preventDefault(),M.value--,M.value<0&&(M.value=w.value.length-1),q.value=!0,G()}),Se("ArrowDown",p=>{p.preventDefault(),M.value++,M.value>=w.value.length&&(M.value=0),q.value=!0,G()});const N=jt();Se("Enter",p=>{if(p.isComposing||p.target instanceof HTMLButtonElement&&p.target.type!=="submit")return;const v=w.value[M.value];if(p.target instanceof HTMLInputElement&&!v){p.preventDefault();return}v&&(N.go(v.id),t("close"))}),Se("Escape",()=>{t("close")});const d=on({modal:{displayDetails:"Display detailed list",resetButtonTitle:"Reset search",backButtonTitle:"Close search",noResultsText:"No results for",footer:{selectText:"to select",selectKeyAriaLabel:"enter",navigateText:"to navigate",navigateUpKeyAriaLabel:"up arrow",navigateDownKeyAriaLabel:"down arrow",closeText:"to close",closeKeyAriaLabel:"escape"}}});Me(()=>{window.history.pushState(null,"",null)}),Bt("popstate",p=>{p.preventDefault(),t("close")});const g=Wt(Kt?document.body:null);Me(()=>{pe(()=>{g.value=!0,pe().then(()=>o())})}),Jt(()=>{g.value=!1});function E(){f.value="",pe().then(()=>j(!1))}function T(p){return new RegExp([...p].sort((v,I)=>I.length-v.length).map(v=>`(${sn(v)})`).join("|"),"gi")}function F(p){var O;if(!q.value)return;const v=(O=p.target)==null?void 0:O.closest(".result"),I=Number.parseInt(v==null?void 0:v.dataset.index);I>=0&&I!==M.value&&(M.value=I),q.value=!1}return(p,v)=>{var I,O,z,P,V;return Q(),Ut(Yt,{to:"body"},[x("div",{ref_key:"el",ref:n,role:"button","aria-owns":(I=w.value)!=null&&I.length?"localsearch-list":void 0,"aria-expanded":"true","aria-haspopup":"listbox","aria-labelledby":"localsearch-label",class:"VPLocalSearchBox"},[x("div",{class:"backdrop",onClick:v[0]||(v[0]=k=>p.$emit("close"))}),x("div",ns,[x("form",{class:"search-bar",onPointerup:v[4]||(v[4]=k=>we(k)),onSubmit:v[5]||(v[5]=qt(()=>{},["prevent"]))},[x("label",{title:_.value,id:"localsearch-label",for:"localsearch-input"},rs,8,ss),x("div",as,[x("button",{class:"back-button",title:L(d)("modal.backButtonTitle"),onClick:v[1]||(v[1]=k=>p.$emit("close"))},cs,8,os)]),Gt(x("input",{ref_key:"searchInput",ref:W,"onUpdate:modelValue":v[2]||(v[2]=k=>Qt(f)?f.value=k:null),"aria-activedescendant":M.value>-1?"localsearch-item-"+M.value:void 0,"aria-autocomplete":"both","aria-controls":(O=w.value)!=null&&O.length?"localsearch-list":void 0,"aria-labelledby":"localsearch-label",autocapitalize:"off",autocomplete:"off",autocorrect:"off",class:"search-input",id:"localsearch-input",enterkeyhint:"go",maxlength:"64",placeholder:_.value,spellcheck:"false",type:"search"},null,8,us),[[Ht,L(f)]]),x("div",ds,[y.value?Ee("",!0):(Q(),X("button",{key:0,class:st(["toggle-layout-button",{"detailed-list":L(b)}]),type:"button",title:L(d)("modal.displayDetails"),onClick:v[3]||(v[3]=k=>M.value>-1&&(b.value=!L(b)))},ps,10,hs)),x("button",{class:"clear-button",type:"reset",disabled:$.value,title:L(d)("modal.resetButtonTitle"),onClick:E},gs,8,ms)])],32),x("ul",{ref_key:"resultsEl",ref:s,id:(z=w.value)!=null&&z.length?"localsearch-list":void 0,role:(P=w.value)!=null&&P.length?"listbox":void 0,"aria-labelledby":(V=w.value)!=null&&V.length?"localsearch-label":void 0,class:"results",onMousemove:F},[(Q(!0),X(rt,null,it(w.value,(k,K)=>(Q(),X("li",{key:k.id,id:"localsearch-item-"+K,"aria-selected":M.value===K?"true":"false",role:"option"},[x("a",{href:k.id,class:st(["result",{selected:M.value===K}]),"aria-label":[...k.titles,k.title].join(" > "),onMouseenter:te=>!q.value&&(M.value=K),onFocusin:te=>M.value=K,onClick:v[6]||(v[6]=te=>p.$emit("close")),"data-index":K},[x("div",null,[x("div",_s,[xs,(Q(!0),X(rt,null,it(k.titles,(te,_e)=>(Q(),X("span",{key:_e,class:"title"},[x("span",{class:"text",innerHTML:te},null,8,Ss),Es]))),128)),x("span",Ts,[x("span",{class:"text",innerHTML:k.title},null,8,Is)])]),L(b)?(Q(),X("div",ks,[k.text?(Q(),X("div",Ns,[x("div",{class:"vp-doc",innerHTML:k.text},null,8,Fs)])):Ee("",!0),Os,Cs])):Ee("",!0)])],42,ws)],8,ys))),128)),L(f)&&!w.value.length&&R.value?(Q(),X("li",Rs,[me(ve(L(d)("modal.noResultsText"))+' "',1),x("strong",null,ve(L(f)),1),me('" ')])):Ee("",!0)],40,bs),x("div",As,[x("span",null,[x("kbd",{"aria-label":L(d)("modal.footer.navigateUpKeyAriaLabel")},Ds,8,Ms),x("kbd",{"aria-label":L(d)("modal.footer.navigateDownKeyAriaLabel")},Vs,8,zs),me(" "+ve(L(d)("modal.footer.navigateText")),1)]),x("span",null,[x("kbd",{"aria-label":L(d)("modal.footer.selectKeyAriaLabel")},Bs,8,$s),me(" "+ve(L(d)("modal.footer.selectText")),1)]),x("span",null,[x("kbd",{"aria-label":L(d)("modal.footer.closeKeyAriaLabel")},"esc",8,Ws),me(" "+ve(L(d)("modal.footer.closeText")),1)])])])],8,ts)])}}}),Qs=rn(Ks,[["__scopeId","data-v-ffdd78e7"]]);export{Qs as default}; diff --git a/.vitepress/dist/assets/chunks/framework.BKXlU_Nx.js b/.vitepress/dist/assets/chunks/framework.BKXlU_Nx.js new file mode 100644 index 0000000..9070a9c --- /dev/null +++ b/.vitepress/dist/assets/chunks/framework.BKXlU_Nx.js @@ -0,0 +1,18 @@ +const zo=window.__VP_SITE_DATA__;/** +* @vue/shared v3.5.13 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**//*! #__NO_SIDE_EFFECTS__ */function $s(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const ee={},Mt=[],Be=()=>{},Qo=()=>!1,nn=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),js=e=>e.startsWith("onUpdate:"),he=Object.assign,Vs=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Zo=Object.prototype.hasOwnProperty,Q=(e,t)=>Zo.call(e,t),K=Array.isArray,Ot=e=>Hn(e)==="[object Map]",ai=e=>Hn(e)==="[object Set]",q=e=>typeof e=="function",oe=e=>typeof e=="string",ze=e=>typeof e=="symbol",se=e=>e!==null&&typeof e=="object",fi=e=>(se(e)||q(e))&&q(e.then)&&q(e.catch),ui=Object.prototype.toString,Hn=e=>ui.call(e),el=e=>Hn(e).slice(8,-1),di=e=>Hn(e)==="[object Object]",ks=e=>oe(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,Pt=$s(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Dn=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},tl=/-(\w)/g,Ne=Dn(e=>e.replace(tl,(t,n)=>n?n.toUpperCase():"")),nl=/\B([A-Z])/g,ot=Dn(e=>e.replace(nl,"-$1").toLowerCase()),$n=Dn(e=>e.charAt(0).toUpperCase()+e.slice(1)),Sn=Dn(e=>e?`on${$n(e)}`:""),st=(e,t)=>!Object.is(e,t),Tn=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:s,value:n})},Ss=e=>{const t=parseFloat(e);return isNaN(t)?e:t},sl=e=>{const t=oe(e)?Number(e):NaN;return isNaN(t)?e:t};let dr;const jn=()=>dr||(dr=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Us(e){if(K(e)){const t={};for(let n=0;n{if(n){const s=n.split(il);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function Ws(e){let t="";if(oe(e))t=e;else if(K(e))for(let n=0;n!!(e&&e.__v_isRef===!0),fl=e=>oe(e)?e:e==null?"":K(e)||se(e)&&(e.toString===ui||!q(e.toString))?gi(e)?fl(e.value):JSON.stringify(e,mi,2):String(e),mi=(e,t)=>gi(t)?mi(e,t.value):Ot(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,r],i)=>(n[Zn(s,i)+" =>"]=r,n),{})}:ai(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>Zn(n))}:ze(t)?Zn(t):se(t)&&!K(t)&&!di(t)?String(t):t,Zn=(e,t="")=>{var n;return ze(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};/** +* @vue/reactivity v3.5.13 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let we;class ul{constructor(t=!1){this.detached=t,this._active=!0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.parent=we,!t&&we&&(this.index=(we.scopes||(we.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes)for(t=0,n=this.scopes.length;t0)return;if(Ut){let t=Ut;for(Ut=void 0;t;){const n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;kt;){let t=kt;for(kt=void 0;t;){const n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(s){e||(e=s)}t=n}}if(e)throw e}function wi(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function Si(e){let t,n=e.depsTail,s=n;for(;s;){const r=s.prevDep;s.version===-1?(s===n&&(n=r),qs(s),hl(s)):t=s,s.dep.activeLink=s.prevActiveLink,s.prevActiveLink=void 0,s=r}e.deps=t,e.depsTail=n}function Ts(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(Ti(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function Ti(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===Xt))return;e.globalVersion=Xt;const t=e.dep;if(e.flags|=2,t.version>0&&!e.isSSR&&e.deps&&!Ts(e)){e.flags&=-3;return}const n=ne,s=He;ne=e,He=!0;try{wi(e);const r=e.fn(e._value);(t.version===0||st(r,e._value))&&(e._value=r,t.version++)}catch(r){throw t.version++,r}finally{ne=n,He=s,Si(e),e.flags&=-3}}function qs(e,t=!1){const{dep:n,prevSub:s,nextSub:r}=e;if(s&&(s.nextSub=r,e.prevSub=void 0),r&&(r.prevSub=s,e.nextSub=void 0),n.subs===e&&(n.subs=s,!s&&n.computed)){n.computed.flags&=-5;for(let i=n.computed.deps;i;i=i.nextDep)qs(i,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function hl(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let He=!0;const xi=[];function lt(){xi.push(He),He=!1}function ct(){const e=xi.pop();He=e===void 0?!0:e}function hr(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=ne;ne=void 0;try{t()}finally{ne=n}}}let Xt=0;class pl{constructor(t,n){this.sub=t,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class Vn{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0}track(t){if(!ne||!He||ne===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==ne)n=this.activeLink=new pl(ne,this),ne.deps?(n.prevDep=ne.depsTail,ne.depsTail.nextDep=n,ne.depsTail=n):ne.deps=ne.depsTail=n,Ei(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const s=n.nextDep;s.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=s),n.prevDep=ne.depsTail,n.nextDep=void 0,ne.depsTail.nextDep=n,ne.depsTail=n,ne.deps===n&&(ne.deps=s)}return n}trigger(t){this.version++,Xt++,this.notify(t)}notify(t){Bs();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{Ks()}}}function Ei(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let s=t.deps;s;s=s.nextDep)Ei(s)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const Mn=new WeakMap,gt=Symbol(""),xs=Symbol(""),Yt=Symbol("");function me(e,t,n){if(He&&ne){let s=Mn.get(e);s||Mn.set(e,s=new Map);let r=s.get(n);r||(s.set(n,r=new Vn),r.map=s,r.key=n),r.track()}}function Xe(e,t,n,s,r,i){const o=Mn.get(e);if(!o){Xt++;return}const l=c=>{c&&c.trigger()};if(Bs(),t==="clear")o.forEach(l);else{const c=K(e),f=c&&ks(n);if(c&&n==="length"){const a=Number(s);o.forEach((d,m)=>{(m==="length"||m===Yt||!ze(m)&&m>=a)&&l(d)})}else switch((n!==void 0||o.has(void 0))&&l(o.get(n)),f&&l(o.get(Yt)),t){case"add":c?f&&l(o.get("length")):(l(o.get(gt)),Ot(e)&&l(o.get(xs)));break;case"delete":c||(l(o.get(gt)),Ot(e)&&l(o.get(xs)));break;case"set":Ot(e)&&l(o.get(gt));break}}Ks()}function gl(e,t){const n=Mn.get(e);return n&&n.get(t)}function xt(e){const t=z(e);return t===e?t:(me(t,"iterate",Yt),Le(e)?t:t.map(ve))}function kn(e){return me(e=z(e),"iterate",Yt),e}const ml={__proto__:null,[Symbol.iterator](){return ts(this,Symbol.iterator,ve)},concat(...e){return xt(this).concat(...e.map(t=>K(t)?xt(t):t))},entries(){return ts(this,"entries",e=>(e[1]=ve(e[1]),e))},every(e,t){return Ke(this,"every",e,t,void 0,arguments)},filter(e,t){return Ke(this,"filter",e,t,n=>n.map(ve),arguments)},find(e,t){return Ke(this,"find",e,t,ve,arguments)},findIndex(e,t){return Ke(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return Ke(this,"findLast",e,t,ve,arguments)},findLastIndex(e,t){return Ke(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return Ke(this,"forEach",e,t,void 0,arguments)},includes(...e){return ns(this,"includes",e)},indexOf(...e){return ns(this,"indexOf",e)},join(e){return xt(this).join(e)},lastIndexOf(...e){return ns(this,"lastIndexOf",e)},map(e,t){return Ke(this,"map",e,t,void 0,arguments)},pop(){return $t(this,"pop")},push(...e){return $t(this,"push",e)},reduce(e,...t){return pr(this,"reduce",e,t)},reduceRight(e,...t){return pr(this,"reduceRight",e,t)},shift(){return $t(this,"shift")},some(e,t){return Ke(this,"some",e,t,void 0,arguments)},splice(...e){return $t(this,"splice",e)},toReversed(){return xt(this).toReversed()},toSorted(e){return xt(this).toSorted(e)},toSpliced(...e){return xt(this).toSpliced(...e)},unshift(...e){return $t(this,"unshift",e)},values(){return ts(this,"values",ve)}};function ts(e,t,n){const s=kn(e),r=s[t]();return s!==e&&!Le(e)&&(r._next=r.next,r.next=()=>{const i=r._next();return i.value&&(i.value=n(i.value)),i}),r}const vl=Array.prototype;function Ke(e,t,n,s,r,i){const o=kn(e),l=o!==e&&!Le(e),c=o[t];if(c!==vl[t]){const d=c.apply(e,i);return l?ve(d):d}let f=n;o!==e&&(l?f=function(d,m){return n.call(this,ve(d),m,e)}:n.length>2&&(f=function(d,m){return n.call(this,d,m,e)}));const a=c.call(o,f,s);return l&&r?r(a):a}function pr(e,t,n,s){const r=kn(e);let i=n;return r!==e&&(Le(e)?n.length>3&&(i=function(o,l,c){return n.call(this,o,l,c,e)}):i=function(o,l,c){return n.call(this,o,ve(l),c,e)}),r[t](i,...s)}function ns(e,t,n){const s=z(e);me(s,"iterate",Yt);const r=s[t](...n);return(r===-1||r===!1)&&Ys(n[0])?(n[0]=z(n[0]),s[t](...n)):r}function $t(e,t,n=[]){lt(),Bs();const s=z(e)[t].apply(e,n);return Ks(),ct(),s}const yl=$s("__proto__,__v_isRef,__isVue"),Ci=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(ze));function bl(e){ze(e)||(e=String(e));const t=z(this);return me(t,"has",e),t.hasOwnProperty(e)}class Ai{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,s){if(n==="__v_skip")return t.__v_skip;const r=this._isReadonly,i=this._isShallow;if(n==="__v_isReactive")return!r;if(n==="__v_isReadonly")return r;if(n==="__v_isShallow")return i;if(n==="__v_raw")return s===(r?i?Ml:Pi:i?Oi:Mi).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(s)?t:void 0;const o=K(t);if(!r){let c;if(o&&(c=ml[n]))return c;if(n==="hasOwnProperty")return bl}const l=Reflect.get(t,n,fe(t)?t:s);return(ze(n)?Ci.has(n):yl(n))||(r||me(t,"get",n),i)?l:fe(l)?o&&ks(n)?l:l.value:se(l)?r?Un(l):It(l):l}}class Ri extends Ai{constructor(t=!1){super(!1,t)}set(t,n,s,r){let i=t[n];if(!this._isShallow){const c=St(i);if(!Le(s)&&!St(s)&&(i=z(i),s=z(s)),!K(t)&&fe(i)&&!fe(s))return c?!1:(i.value=s,!0)}const o=K(t)&&ks(n)?Number(n)e,un=e=>Reflect.getPrototypeOf(e);function xl(e,t,n){return function(...s){const r=this.__v_raw,i=z(r),o=Ot(i),l=e==="entries"||e===Symbol.iterator&&o,c=e==="keys"&&o,f=r[e](...s),a=n?Es:t?Cs:ve;return!t&&me(i,"iterate",c?xs:gt),{next(){const{value:d,done:m}=f.next();return m?{value:d,done:m}:{value:l?[a(d[0]),a(d[1])]:a(d),done:m}},[Symbol.iterator](){return this}}}}function dn(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function El(e,t){const n={get(r){const i=this.__v_raw,o=z(i),l=z(r);e||(st(r,l)&&me(o,"get",r),me(o,"get",l));const{has:c}=un(o),f=t?Es:e?Cs:ve;if(c.call(o,r))return f(i.get(r));if(c.call(o,l))return f(i.get(l));i!==o&&i.get(r)},get size(){const r=this.__v_raw;return!e&&me(z(r),"iterate",gt),Reflect.get(r,"size",r)},has(r){const i=this.__v_raw,o=z(i),l=z(r);return e||(st(r,l)&&me(o,"has",r),me(o,"has",l)),r===l?i.has(r):i.has(r)||i.has(l)},forEach(r,i){const o=this,l=o.__v_raw,c=z(l),f=t?Es:e?Cs:ve;return!e&&me(c,"iterate",gt),l.forEach((a,d)=>r.call(i,f(a),f(d),o))}};return he(n,e?{add:dn("add"),set:dn("set"),delete:dn("delete"),clear:dn("clear")}:{add(r){!t&&!Le(r)&&!St(r)&&(r=z(r));const i=z(this);return un(i).has.call(i,r)||(i.add(r),Xe(i,"add",r,r)),this},set(r,i){!t&&!Le(i)&&!St(i)&&(i=z(i));const o=z(this),{has:l,get:c}=un(o);let f=l.call(o,r);f||(r=z(r),f=l.call(o,r));const a=c.call(o,r);return o.set(r,i),f?st(i,a)&&Xe(o,"set",r,i):Xe(o,"add",r,i),this},delete(r){const i=z(this),{has:o,get:l}=un(i);let c=o.call(i,r);c||(r=z(r),c=o.call(i,r)),l&&l.call(i,r);const f=i.delete(r);return c&&Xe(i,"delete",r,void 0),f},clear(){const r=z(this),i=r.size!==0,o=r.clear();return i&&Xe(r,"clear",void 0,void 0),o}}),["keys","values","entries",Symbol.iterator].forEach(r=>{n[r]=xl(r,e,t)}),n}function Gs(e,t){const n=El(e,t);return(s,r,i)=>r==="__v_isReactive"?!e:r==="__v_isReadonly"?e:r==="__v_raw"?s:Reflect.get(Q(n,r)&&r in s?n:s,r,i)}const Cl={get:Gs(!1,!1)},Al={get:Gs(!1,!0)},Rl={get:Gs(!0,!1)};const Mi=new WeakMap,Oi=new WeakMap,Pi=new WeakMap,Ml=new WeakMap;function Ol(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Pl(e){return e.__v_skip||!Object.isExtensible(e)?0:Ol(el(e))}function It(e){return St(e)?e:Xs(e,!1,wl,Cl,Mi)}function Ll(e){return Xs(e,!1,Tl,Al,Oi)}function Un(e){return Xs(e,!0,Sl,Rl,Pi)}function Xs(e,t,n,s,r){if(!se(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const i=r.get(e);if(i)return i;const o=Pl(e);if(o===0)return e;const l=new Proxy(e,o===2?s:n);return r.set(e,l),l}function mt(e){return St(e)?mt(e.__v_raw):!!(e&&e.__v_isReactive)}function St(e){return!!(e&&e.__v_isReadonly)}function Le(e){return!!(e&&e.__v_isShallow)}function Ys(e){return e?!!e.__v_raw:!1}function z(e){const t=e&&e.__v_raw;return t?z(t):e}function xn(e){return!Q(e,"__v_skip")&&Object.isExtensible(e)&&hi(e,"__v_skip",!0),e}const ve=e=>se(e)?It(e):e,Cs=e=>se(e)?Un(e):e;function fe(e){return e?e.__v_isRef===!0:!1}function De(e){return Li(e,!1)}function xe(e){return Li(e,!0)}function Li(e,t){return fe(e)?e:new Il(e,t)}class Il{constructor(t,n){this.dep=new Vn,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:z(t),this._value=n?t:ve(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,s=this.__v_isShallow||Le(t)||St(t);t=s?t:z(t),st(t,n)&&(this._rawValue=t,this._value=s?t:ve(t),this.dep.trigger())}}function Js(e){return fe(e)?e.value:e}function le(e){return q(e)?e():Js(e)}const Nl={get:(e,t,n)=>t==="__v_raw"?e:Js(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const r=e[t];return fe(r)&&!fe(n)?(r.value=n,!0):Reflect.set(e,t,n,s)}};function Ii(e){return mt(e)?e:new Proxy(e,Nl)}class Fl{constructor(t){this.__v_isRef=!0,this._value=void 0;const n=this.dep=new Vn,{get:s,set:r}=t(n.track.bind(n),n.trigger.bind(n));this._get=s,this._set=r}get value(){return this._value=this._get()}set value(t){this._set(t)}}function Hl(e){return new Fl(e)}class Dl{constructor(t,n,s){this._object=t,this._key=n,this._defaultValue=s,this.__v_isRef=!0,this._value=void 0}get value(){const t=this._object[this._key];return this._value=t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}get dep(){return gl(z(this._object),this._key)}}class $l{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0,this._value=void 0}get value(){return this._value=this._getter()}}function jl(e,t,n){return fe(e)?e:q(e)?new $l(e):se(e)&&arguments.length>1?Vl(e,t,n):De(e)}function Vl(e,t,n){const s=e[t];return fe(s)?s:new Dl(e,t,n)}class kl{constructor(t,n,s){this.fn=t,this.setter=n,this._value=void 0,this.dep=new Vn(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=Xt-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=s}notify(){if(this.flags|=16,!(this.flags&8)&&ne!==this)return _i(this,!0),!0}get value(){const t=this.dep.track();return Ti(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function Ul(e,t,n=!1){let s,r;return q(e)?s=e:(s=e.get,r=e.set),new kl(s,r,n)}const hn={},On=new WeakMap;let ht;function Wl(e,t=!1,n=ht){if(n){let s=On.get(n);s||On.set(n,s=[]),s.push(e)}}function Bl(e,t,n=ee){const{immediate:s,deep:r,once:i,scheduler:o,augmentJob:l,call:c}=n,f=g=>r?g:Le(g)||r===!1||r===0?Ye(g,1):Ye(g);let a,d,m,v,_=!1,b=!1;if(fe(e)?(d=()=>e.value,_=Le(e)):mt(e)?(d=()=>f(e),_=!0):K(e)?(b=!0,_=e.some(g=>mt(g)||Le(g)),d=()=>e.map(g=>{if(fe(g))return g.value;if(mt(g))return f(g);if(q(g))return c?c(g,2):g()})):q(e)?t?d=c?()=>c(e,2):e:d=()=>{if(m){lt();try{m()}finally{ct()}}const g=ht;ht=a;try{return c?c(e,3,[v]):e(v)}finally{ht=g}}:d=Be,t&&r){const g=d,O=r===!0?1/0:r;d=()=>Ye(g(),O)}const k=vi(),P=()=>{a.stop(),k&&k.active&&Vs(k.effects,a)};if(i&&t){const g=t;t=(...O)=>{g(...O),P()}}let D=b?new Array(e.length).fill(hn):hn;const p=g=>{if(!(!(a.flags&1)||!a.dirty&&!g))if(t){const O=a.run();if(r||_||(b?O.some(($,R)=>st($,D[R])):st(O,D))){m&&m();const $=ht;ht=a;try{const R=[O,D===hn?void 0:b&&D[0]===hn?[]:D,v];c?c(t,3,R):t(...R),D=O}finally{ht=$}}}else a.run()};return l&&l(p),a=new yi(d),a.scheduler=o?()=>o(p,!1):p,v=g=>Wl(g,!1,a),m=a.onStop=()=>{const g=On.get(a);if(g){if(c)c(g,4);else for(const O of g)O();On.delete(a)}},t?s?p(!0):D=a.run():o?o(p.bind(null,!0),!0):a.run(),P.pause=a.pause.bind(a),P.resume=a.resume.bind(a),P.stop=P,P}function Ye(e,t=1/0,n){if(t<=0||!se(e)||e.__v_skip||(n=n||new Set,n.has(e)))return e;if(n.add(e),t--,fe(e))Ye(e.value,t,n);else if(K(e))for(let s=0;s{Ye(s,t,n)});else if(di(e)){for(const s in e)Ye(e[s],t,n);for(const s of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,s)&&Ye(e[s],t,n)}return e}/** +* @vue/runtime-core v3.5.13 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/function sn(e,t,n,s){try{return s?e(...s):e()}catch(r){rn(r,t,n)}}function $e(e,t,n,s){if(q(e)){const r=sn(e,t,n,s);return r&&fi(r)&&r.catch(i=>{rn(i,t,n)}),r}if(K(e)){const r=[];for(let i=0;i>>1,r=Se[s],i=Jt(r);i=Jt(n)?Se.push(e):Se.splice(ql(t),0,e),e.flags|=1,Fi()}}function Fi(){Pn||(Pn=Ni.then(Hi))}function Gl(e){K(e)?Lt.push(...e):et&&e.id===-1?et.splice(Ct+1,0,e):e.flags&1||(Lt.push(e),e.flags|=1),Fi()}function gr(e,t,n=Ue+1){for(;nJt(n)-Jt(s));if(Lt.length=0,et){et.push(...t);return}for(et=t,Ct=0;Cte.id==null?e.flags&2?-1:1/0:e.id;function Hi(e){try{for(Ue=0;Ue{s._d&&Or(-1);const i=In(t);let o;try{o=e(...r)}finally{In(i),s._d&&Or(1)}return o};return s._n=!0,s._c=!0,s._d=!0,s}function Pf(e,t){if(de===null)return e;const n=Xn(de),s=e.dirs||(e.dirs=[]);for(let r=0;re.__isTeleport,Wt=e=>e&&(e.disabled||e.disabled===""),mr=e=>e&&(e.defer||e.defer===""),vr=e=>typeof SVGElement<"u"&&e instanceof SVGElement,yr=e=>typeof MathMLElement=="function"&&e instanceof MathMLElement,As=(e,t)=>{const n=e&&e.to;return oe(n)?t?t(n):null:n},Vi={name:"Teleport",__isTeleport:!0,process(e,t,n,s,r,i,o,l,c,f){const{mc:a,pc:d,pbc:m,o:{insert:v,querySelector:_,createText:b,createComment:k}}=f,P=Wt(t.props);let{shapeFlag:D,children:p,dynamicChildren:g}=t;if(e==null){const O=t.el=b(""),$=t.anchor=b("");v(O,n,s),v($,n,s);const R=(T,M)=>{D&16&&(r&&r.isCE&&(r.ce._teleportTarget=T),a(p,T,M,r,i,o,l,c))},j=()=>{const T=t.target=As(t.props,_),M=ki(T,t,b,v);T&&(o!=="svg"&&vr(T)?o="svg":o!=="mathml"&&yr(T)&&(o="mathml"),P||(R(T,M),En(t,!1)))};P&&(R(n,$),En(t,!0)),mr(t.props)?_e(()=>{j(),t.el.__isMounted=!0},i):j()}else{if(mr(t.props)&&!e.el.__isMounted){_e(()=>{Vi.process(e,t,n,s,r,i,o,l,c,f),delete e.el.__isMounted},i);return}t.el=e.el,t.targetStart=e.targetStart;const O=t.anchor=e.anchor,$=t.target=e.target,R=t.targetAnchor=e.targetAnchor,j=Wt(e.props),T=j?n:$,M=j?O:R;if(o==="svg"||vr($)?o="svg":(o==="mathml"||yr($))&&(o="mathml"),g?(m(e.dynamicChildren,g,T,r,i,o,l),tr(e,t,!0)):c||d(e,t,T,M,r,i,o,l,!1),P)j?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):pn(t,n,O,f,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const A=t.target=As(t.props,_);A&&pn(t,A,null,f,0)}else j&&pn(t,$,R,f,1);En(t,P)}},remove(e,t,n,{um:s,o:{remove:r}},i){const{shapeFlag:o,children:l,anchor:c,targetStart:f,targetAnchor:a,target:d,props:m}=e;if(d&&(r(f),r(a)),i&&r(c),o&16){const v=i||!Wt(m);for(let _=0;_{e.isMounted=!0}),Xi(()=>{e.isUnmounting=!0}),e}const Me=[Function,Array],Ui={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:Me,onEnter:Me,onAfterEnter:Me,onEnterCancelled:Me,onBeforeLeave:Me,onLeave:Me,onAfterLeave:Me,onLeaveCancelled:Me,onBeforeAppear:Me,onAppear:Me,onAfterAppear:Me,onAppearCancelled:Me},Wi=e=>{const t=e.subTree;return t.component?Wi(t.component):t},zl={name:"BaseTransition",props:Ui,setup(e,{slots:t}){const n=ln(),s=Jl();return()=>{const r=t.default&&qi(t.default(),!0);if(!r||!r.length)return;const i=Bi(r),o=z(e),{mode:l}=o;if(s.isLeaving)return ss(i);const c=br(i);if(!c)return ss(i);let f=Rs(c,o,s,n,d=>f=d);c.type!==ye&&zt(c,f);let a=n.subTree&&br(n.subTree);if(a&&a.type!==ye&&!pt(c,a)&&Wi(n).type!==ye){let d=Rs(a,o,s,n);if(zt(a,d),l==="out-in"&&c.type!==ye)return s.isLeaving=!0,d.afterLeave=()=>{s.isLeaving=!1,n.job.flags&8||n.update(),delete d.afterLeave,a=void 0},ss(i);l==="in-out"&&c.type!==ye?d.delayLeave=(m,v,_)=>{const b=Ki(s,a);b[String(a.key)]=a,m[tt]=()=>{v(),m[tt]=void 0,delete f.delayedLeave,a=void 0},f.delayedLeave=()=>{_(),delete f.delayedLeave,a=void 0}}:a=void 0}else a&&(a=void 0);return i}}};function Bi(e){let t=e[0];if(e.length>1){for(const n of e)if(n.type!==ye){t=n;break}}return t}const Ql=zl;function Ki(e,t){const{leavingVNodes:n}=e;let s=n.get(t.type);return s||(s=Object.create(null),n.set(t.type,s)),s}function Rs(e,t,n,s,r){const{appear:i,mode:o,persisted:l=!1,onBeforeEnter:c,onEnter:f,onAfterEnter:a,onEnterCancelled:d,onBeforeLeave:m,onLeave:v,onAfterLeave:_,onLeaveCancelled:b,onBeforeAppear:k,onAppear:P,onAfterAppear:D,onAppearCancelled:p}=t,g=String(e.key),O=Ki(n,e),$=(T,M)=>{T&&$e(T,s,9,M)},R=(T,M)=>{const A=M[1];$(T,M),K(T)?T.every(w=>w.length<=1)&&A():T.length<=1&&A()},j={mode:o,persisted:l,beforeEnter(T){let M=c;if(!n.isMounted)if(i)M=k||c;else return;T[tt]&&T[tt](!0);const A=O[g];A&&pt(e,A)&&A.el[tt]&&A.el[tt](),$(M,[T])},enter(T){let M=f,A=a,w=d;if(!n.isMounted)if(i)M=P||f,A=D||a,w=p||d;else return;let F=!1;const Y=T[gn]=ie=>{F||(F=!0,ie?$(w,[T]):$(A,[T]),j.delayedLeave&&j.delayedLeave(),T[gn]=void 0)};M?R(M,[T,Y]):Y()},leave(T,M){const A=String(e.key);if(T[gn]&&T[gn](!0),n.isUnmounting)return M();$(m,[T]);let w=!1;const F=T[tt]=Y=>{w||(w=!0,M(),Y?$(b,[T]):$(_,[T]),T[tt]=void 0,O[A]===e&&delete O[A])};O[A]=e,v?R(v,[T,F]):F()},clone(T){const M=Rs(T,t,n,s,r);return r&&r(M),M}};return j}function ss(e){if(on(e))return e=rt(e),e.children=null,e}function br(e){if(!on(e))return ji(e.type)&&e.children?Bi(e.children):e;const{shapeFlag:t,children:n}=e;if(n){if(t&16)return n[0];if(t&32&&q(n.default))return n.default()}}function zt(e,t){e.shapeFlag&6&&e.component?(e.transition=t,zt(e.component.subTree,t)):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function qi(e,t=!1,n){let s=[],r=0;for(let i=0;i1)for(let i=0;iQt(_,t&&(K(t)?t[b]:t),n,s,r));return}if(vt(s)&&!r){s.shapeFlag&512&&s.type.__asyncResolved&&s.component.subTree.component&&Qt(e,t,n,s.component.subTree);return}const i=s.shapeFlag&4?Xn(s.component):s.el,o=r?null:i,{i:l,r:c}=e,f=t&&t.r,a=l.refs===ee?l.refs={}:l.refs,d=l.setupState,m=z(d),v=d===ee?()=>!1:_=>Q(m,_);if(f!=null&&f!==c&&(oe(f)?(a[f]=null,v(f)&&(d[f]=null)):fe(f)&&(f.value=null)),q(c))sn(c,l,12,[o,a]);else{const _=oe(c),b=fe(c);if(_||b){const k=()=>{if(e.f){const P=_?v(c)?d[c]:a[c]:c.value;r?K(P)&&Vs(P,i):K(P)?P.includes(i)||P.push(i):_?(a[c]=[i],v(c)&&(d[c]=a[c])):(c.value=[i],e.k&&(a[e.k]=c.value))}else _?(a[c]=o,v(c)&&(d[c]=o)):b&&(c.value=o,e.k&&(a[e.k]=o))};o?(k.id=-1,_e(k,n)):k()}}}let _r=!1;const Et=()=>{_r||(console.error("Hydration completed but contains mismatches."),_r=!0)},Zl=e=>e.namespaceURI.includes("svg")&&e.tagName!=="foreignObject",ec=e=>e.namespaceURI.includes("MathML"),mn=e=>{if(e.nodeType===1){if(Zl(e))return"svg";if(ec(e))return"mathml"}},Rt=e=>e.nodeType===8;function tc(e){const{mt:t,p:n,o:{patchProp:s,createText:r,nextSibling:i,parentNode:o,remove:l,insert:c,createComment:f}}=e,a=(p,g)=>{if(!g.hasChildNodes()){n(null,p,g),Ln(),g._vnode=p;return}d(g.firstChild,p,null,null,null),Ln(),g._vnode=p},d=(p,g,O,$,R,j=!1)=>{j=j||!!g.dynamicChildren;const T=Rt(p)&&p.data==="[",M=()=>b(p,g,O,$,R,T),{type:A,ref:w,shapeFlag:F,patchFlag:Y}=g;let ie=p.nodeType;g.el=p,Y===-2&&(j=!1,g.dynamicChildren=null);let U=null;switch(A){case _t:ie!==3?g.children===""?(c(g.el=r(""),o(p),p),U=p):U=M():(p.data!==g.children&&(Et(),p.data=g.children),U=i(p));break;case ye:D(p)?(U=i(p),P(g.el=p.content.firstChild,p,O)):ie!==8||T?U=M():U=i(p);break;case Kt:if(T&&(p=i(p),ie=p.nodeType),ie===1||ie===3){U=p;const X=!g.children.length;for(let V=0;V{j=j||!!g.dynamicChildren;const{type:T,props:M,patchFlag:A,shapeFlag:w,dirs:F,transition:Y}=g,ie=T==="input"||T==="option";if(ie||A!==-1){F&&We(g,null,O,"created");let U=!1;if(D(p)){U=po(null,Y)&&O&&O.vnode.props&&O.vnode.props.appear;const V=p.content.firstChild;U&&Y.beforeEnter(V),P(V,p,O),g.el=p=V}if(w&16&&!(M&&(M.innerHTML||M.textContent))){let V=v(p.firstChild,g,p,O,$,R,j);for(;V;){vn(p,1)||Et();const ae=V;V=V.nextSibling,l(ae)}}else if(w&8){let V=g.children;V[0]===` +`&&(p.tagName==="PRE"||p.tagName==="TEXTAREA")&&(V=V.slice(1)),p.textContent!==V&&(vn(p,0)||Et(),p.textContent=g.children)}if(M){if(ie||!j||A&48){const V=p.tagName.includes("-");for(const ae in M)(ie&&(ae.endsWith("value")||ae==="indeterminate")||nn(ae)&&!Pt(ae)||ae[0]==="."||V)&&s(p,ae,null,M[ae],void 0,O)}else if(M.onClick)s(p,"onClick",null,M.onClick,void 0,O);else if(A&4&&mt(M.style))for(const V in M.style)M.style[V]}let X;(X=M&&M.onVnodeBeforeMount)&&Oe(X,O,g),F&&We(g,null,O,"beforeMount"),((X=M&&M.onVnodeMounted)||F||U)&&_o(()=>{X&&Oe(X,O,g),U&&Y.enter(p),F&&We(g,null,O,"mounted")},$)}return p.nextSibling},v=(p,g,O,$,R,j,T)=>{T=T||!!g.dynamicChildren;const M=g.children,A=M.length;for(let w=0;w{const{slotScopeIds:T}=g;T&&(R=R?R.concat(T):T);const M=o(p),A=v(i(p),g,M,O,$,R,j);return A&&Rt(A)&&A.data==="]"?i(g.anchor=A):(Et(),c(g.anchor=f("]"),M,A),A)},b=(p,g,O,$,R,j)=>{if(vn(p.parentElement,1)||Et(),g.el=null,j){const A=k(p);for(;;){const w=i(p);if(w&&w!==A)l(w);else break}}const T=i(p),M=o(p);return l(p),n(null,g,M,T,O,$,mn(M),R),O&&(O.vnode.el=g.el,yo(O,g.el)),T},k=(p,g="[",O="]")=>{let $=0;for(;p;)if(p=i(p),p&&Rt(p)&&(p.data===g&&$++,p.data===O)){if($===0)return i(p);$--}return p},P=(p,g,O)=>{const $=g.parentNode;$&&$.replaceChild(p,g);let R=O;for(;R;)R.vnode.el===g&&(R.vnode.el=R.subTree.el=p),R=R.parent},D=p=>p.nodeType===1&&p.tagName==="TEMPLATE";return[a,d]}const wr="data-allow-mismatch",nc={0:"text",1:"children",2:"class",3:"style",4:"attribute"};function vn(e,t){if(t===0||t===1)for(;e&&!e.hasAttribute(wr);)e=e.parentElement;const n=e&&e.getAttribute(wr);if(n==null)return!1;if(n==="")return!0;{const s=n.split(",");return t===0&&s.includes("children")?!0:n.split(",").includes(nc[t])}}jn().requestIdleCallback;jn().cancelIdleCallback;function sc(e,t){if(Rt(e)&&e.data==="["){let n=1,s=e.nextSibling;for(;s;){if(s.nodeType===1){if(t(s)===!1)break}else if(Rt(s))if(s.data==="]"){if(--n===0)break}else s.data==="["&&n++;s=s.nextSibling}}else t(e)}const vt=e=>!!e.type.__asyncLoader;/*! #__NO_SIDE_EFFECTS__ */function If(e){q(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:s,delay:r=200,hydrate:i,timeout:o,suspensible:l=!0,onError:c}=e;let f=null,a,d=0;const m=()=>(d++,f=null,v()),v=()=>{let _;return f||(_=f=t().catch(b=>{if(b=b instanceof Error?b:new Error(String(b)),c)return new Promise((k,P)=>{c(b,()=>k(m()),()=>P(b),d+1)});throw b}).then(b=>_!==f&&f?f:(b&&(b.__esModule||b[Symbol.toStringTag]==="Module")&&(b=b.default),a=b,b)))};return Qs({name:"AsyncComponentWrapper",__asyncLoader:v,__asyncHydrate(_,b,k){const P=i?()=>{const D=i(k,p=>sc(_,p));D&&(b.bum||(b.bum=[])).push(D)}:k;a?P():v().then(()=>!b.isUnmounted&&P())},get __asyncResolved(){return a},setup(){const _=ue;if(Zs(_),a)return()=>rs(a,_);const b=p=>{f=null,rn(p,_,13,!s)};if(l&&_.suspense||Nt)return v().then(p=>()=>rs(p,_)).catch(p=>(b(p),()=>s?ce(s,{error:p}):null));const k=De(!1),P=De(),D=De(!!r);return r&&setTimeout(()=>{D.value=!1},r),o!=null&&setTimeout(()=>{if(!k.value&&!P.value){const p=new Error(`Async component timed out after ${o}ms.`);b(p),P.value=p}},o),v().then(()=>{k.value=!0,_.parent&&on(_.parent.vnode)&&_.parent.update()}).catch(p=>{b(p),P.value=p}),()=>{if(k.value&&a)return rs(a,_);if(P.value&&s)return ce(s,{error:P.value});if(n&&!D.value)return ce(n)}}})}function rs(e,t){const{ref:n,props:s,children:r,ce:i}=t.vnode,o=ce(e,s,r);return o.ref=n,o.ce=i,delete t.vnode.ce,o}const on=e=>e.type.__isKeepAlive;function rc(e,t){Gi(e,"a",t)}function ic(e,t){Gi(e,"da",t)}function Gi(e,t,n=ue){const s=e.__wdc||(e.__wdc=()=>{let r=n;for(;r;){if(r.isDeactivated)return;r=r.parent}return e()});if(Bn(t,s,n),n){let r=n.parent;for(;r&&r.parent;)on(r.parent.vnode)&&oc(s,t,n,r),r=r.parent}}function oc(e,t,n,s){const r=Bn(t,e,s,!0);Kn(()=>{Vs(s[t],r)},n)}function Bn(e,t,n=ue,s=!1){if(n){const r=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...o)=>{lt();const l=cn(n),c=$e(t,n,e,o);return l(),ct(),c});return s?r.unshift(i):r.push(i),i}}const Qe=e=>(t,n=ue)=>{(!Nt||e==="sp")&&Bn(e,(...s)=>t(...s),n)},lc=Qe("bm"),Ft=Qe("m"),cc=Qe("bu"),ac=Qe("u"),Xi=Qe("bum"),Kn=Qe("um"),fc=Qe("sp"),uc=Qe("rtg"),dc=Qe("rtc");function hc(e,t=ue){Bn("ec",e,t)}const Yi="components";function Nf(e,t){return zi(Yi,e,!0,t)||e}const Ji=Symbol.for("v-ndc");function Ff(e){return oe(e)?zi(Yi,e,!1)||e:e||Ji}function zi(e,t,n=!0,s=!1){const r=de||ue;if(r){const i=r.type;{const l=zc(i,!1);if(l&&(l===t||l===Ne(t)||l===$n(Ne(t))))return i}const o=Sr(r[e]||i[e],t)||Sr(r.appContext[e],t);return!o&&s?i:o}}function Sr(e,t){return e&&(e[t]||e[Ne(t)]||e[$n(Ne(t))])}function Hf(e,t,n,s){let r;const i=n,o=K(e);if(o||oe(e)){const l=o&&mt(e);let c=!1;l&&(c=!Le(e),e=kn(e)),r=new Array(e.length);for(let f=0,a=e.length;ft(l,c,void 0,i));else{const l=Object.keys(e);r=new Array(l.length);for(let c=0,f=l.length;cen(t)?!(t.type===ye||t.type===Te&&!Qi(t.children)):!0)?e:null}function $f(e,t){const n={};for(const s in e)n[/[A-Z]/.test(s)?`on:${s}`:Sn(s)]=e[s];return n}const Ms=e=>e?Eo(e)?Xn(e):Ms(e.parent):null,Bt=he(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>Ms(e.parent),$root:e=>Ms(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>eo(e),$forceUpdate:e=>e.f||(e.f=()=>{zs(e.update)}),$nextTick:e=>e.n||(e.n=Wn.bind(e.proxy)),$watch:e=>Fc.bind(e)}),is=(e,t)=>e!==ee&&!e.__isScriptSetup&&Q(e,t),pc={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:s,data:r,props:i,accessCache:o,type:l,appContext:c}=e;let f;if(t[0]!=="$"){const v=o[t];if(v!==void 0)switch(v){case 1:return s[t];case 2:return r[t];case 4:return n[t];case 3:return i[t]}else{if(is(s,t))return o[t]=1,s[t];if(r!==ee&&Q(r,t))return o[t]=2,r[t];if((f=e.propsOptions[0])&&Q(f,t))return o[t]=3,i[t];if(n!==ee&&Q(n,t))return o[t]=4,n[t];Os&&(o[t]=0)}}const a=Bt[t];let d,m;if(a)return t==="$attrs"&&me(e.attrs,"get",""),a(e);if((d=l.__cssModules)&&(d=d[t]))return d;if(n!==ee&&Q(n,t))return o[t]=4,n[t];if(m=c.config.globalProperties,Q(m,t))return m[t]},set({_:e},t,n){const{data:s,setupState:r,ctx:i}=e;return is(r,t)?(r[t]=n,!0):s!==ee&&Q(s,t)?(s[t]=n,!0):Q(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:r,propsOptions:i}},o){let l;return!!n[o]||e!==ee&&Q(e,o)||is(t,o)||(l=i[0])&&Q(l,o)||Q(s,o)||Q(Bt,o)||Q(r.config.globalProperties,o)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:Q(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function jf(){return gc().slots}function gc(){const e=ln();return e.setupContext||(e.setupContext=Ao(e))}function Tr(e){return K(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let Os=!0;function mc(e){const t=eo(e),n=e.proxy,s=e.ctx;Os=!1,t.beforeCreate&&xr(t.beforeCreate,e,"bc");const{data:r,computed:i,methods:o,watch:l,provide:c,inject:f,created:a,beforeMount:d,mounted:m,beforeUpdate:v,updated:_,activated:b,deactivated:k,beforeDestroy:P,beforeUnmount:D,destroyed:p,unmounted:g,render:O,renderTracked:$,renderTriggered:R,errorCaptured:j,serverPrefetch:T,expose:M,inheritAttrs:A,components:w,directives:F,filters:Y}=t;if(f&&vc(f,s,null),o)for(const X in o){const V=o[X];q(V)&&(s[X]=V.bind(n))}if(r){const X=r.call(n,n);se(X)&&(e.data=It(X))}if(Os=!0,i)for(const X in i){const V=i[X],ae=q(V)?V.bind(n,n):q(V.get)?V.get.bind(n,n):Be,an=!q(V)&&q(V.set)?V.set.bind(n):Be,at=re({get:ae,set:an});Object.defineProperty(s,X,{enumerable:!0,configurable:!0,get:()=>at.value,set:Ve=>at.value=Ve})}if(l)for(const X in l)Zi(l[X],s,n,X);if(c){const X=q(c)?c.call(n):c;Reflect.ownKeys(X).forEach(V=>{Tc(V,X[V])})}a&&xr(a,e,"c");function U(X,V){K(V)?V.forEach(ae=>X(ae.bind(n))):V&&X(V.bind(n))}if(U(lc,d),U(Ft,m),U(cc,v),U(ac,_),U(rc,b),U(ic,k),U(hc,j),U(dc,$),U(uc,R),U(Xi,D),U(Kn,g),U(fc,T),K(M))if(M.length){const X=e.exposed||(e.exposed={});M.forEach(V=>{Object.defineProperty(X,V,{get:()=>n[V],set:ae=>n[V]=ae})})}else e.exposed||(e.exposed={});O&&e.render===Be&&(e.render=O),A!=null&&(e.inheritAttrs=A),w&&(e.components=w),F&&(e.directives=F),T&&Zs(e)}function vc(e,t,n=Be){K(e)&&(e=Ps(e));for(const s in e){const r=e[s];let i;se(r)?"default"in r?i=bt(r.from||s,r.default,!0):i=bt(r.from||s):i=bt(r),fe(i)?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>i.value,set:o=>i.value=o}):t[s]=i}}function xr(e,t,n){$e(K(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function Zi(e,t,n,s){let r=s.includes(".")?mo(n,s):()=>n[s];if(oe(e)){const i=t[e];q(i)&&Ie(r,i)}else if(q(e))Ie(r,e.bind(n));else if(se(e))if(K(e))e.forEach(i=>Zi(i,t,n,s));else{const i=q(e.handler)?e.handler.bind(n):t[e.handler];q(i)&&Ie(r,i,e)}}function eo(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:r,optionsCache:i,config:{optionMergeStrategies:o}}=e.appContext,l=i.get(t);let c;return l?c=l:!r.length&&!n&&!s?c=t:(c={},r.length&&r.forEach(f=>Nn(c,f,o,!0)),Nn(c,t,o)),se(t)&&i.set(t,c),c}function Nn(e,t,n,s=!1){const{mixins:r,extends:i}=t;i&&Nn(e,i,n,!0),r&&r.forEach(o=>Nn(e,o,n,!0));for(const o in t)if(!(s&&o==="expose")){const l=yc[o]||n&&n[o];e[o]=l?l(e[o],t[o]):t[o]}return e}const yc={data:Er,props:Cr,emits:Cr,methods:Vt,computed:Vt,beforeCreate:be,created:be,beforeMount:be,mounted:be,beforeUpdate:be,updated:be,beforeDestroy:be,beforeUnmount:be,destroyed:be,unmounted:be,activated:be,deactivated:be,errorCaptured:be,serverPrefetch:be,components:Vt,directives:Vt,watch:_c,provide:Er,inject:bc};function Er(e,t){return t?e?function(){return he(q(e)?e.call(this,this):e,q(t)?t.call(this,this):t)}:t:e}function bc(e,t){return Vt(Ps(e),Ps(t))}function Ps(e){if(K(e)){const t={};for(let n=0;n1)return n&&q(t)?t.call(s&&s.proxy):t}}function no(){return!!(ue||de||yt)}const so={},ro=()=>Object.create(so),io=e=>Object.getPrototypeOf(e)===so;function xc(e,t,n,s=!1){const r={},i=ro();e.propsDefaults=Object.create(null),oo(e,t,r,i);for(const o in e.propsOptions[0])o in r||(r[o]=void 0);n?e.props=s?r:Ll(r):e.type.props?e.props=r:e.props=i,e.attrs=i}function Ec(e,t,n,s){const{props:r,attrs:i,vnode:{patchFlag:o}}=e,l=z(r),[c]=e.propsOptions;let f=!1;if((s||o>0)&&!(o&16)){if(o&8){const a=e.vnode.dynamicProps;for(let d=0;d{c=!0;const[m,v]=lo(d,t,!0);he(o,m),v&&l.push(...v)};!n&&t.mixins.length&&t.mixins.forEach(a),e.extends&&a(e.extends),e.mixins&&e.mixins.forEach(a)}if(!i&&!c)return se(e)&&s.set(e,Mt),Mt;if(K(i))for(let a=0;ae[0]==="_"||e==="$stable",er=e=>K(e)?e.map(Pe):[Pe(e)],Ac=(e,t,n)=>{if(t._n)return t;const s=Xl((...r)=>er(t(...r)),n);return s._c=!1,s},ao=(e,t,n)=>{const s=e._ctx;for(const r in e){if(co(r))continue;const i=e[r];if(q(i))t[r]=Ac(r,i,s);else if(i!=null){const o=er(i);t[r]=()=>o}}},fo=(e,t)=>{const n=er(t);e.slots.default=()=>n},uo=(e,t,n)=>{for(const s in t)(n||s!=="_")&&(e[s]=t[s])},Rc=(e,t,n)=>{const s=e.slots=ro();if(e.vnode.shapeFlag&32){const r=t._;r?(uo(s,t,n),n&&hi(s,"_",r,!0)):ao(t,s)}else t&&fo(e,t)},Mc=(e,t,n)=>{const{vnode:s,slots:r}=e;let i=!0,o=ee;if(s.shapeFlag&32){const l=t._;l?n&&l===1?i=!1:uo(r,t,n):(i=!t.$stable,ao(t,r)),o=t}else t&&(fo(e,t),o={default:1});if(i)for(const l in r)!co(l)&&o[l]==null&&delete r[l]},_e=_o;function Oc(e){return ho(e)}function Pc(e){return ho(e,tc)}function ho(e,t){const n=jn();n.__VUE__=!0;const{insert:s,remove:r,patchProp:i,createElement:o,createText:l,createComment:c,setText:f,setElementText:a,parentNode:d,nextSibling:m,setScopeId:v=Be,insertStaticContent:_}=e,b=(u,h,y,E=null,S=null,x=null,N=void 0,I=null,L=!!h.dynamicChildren)=>{if(u===h)return;u&&!pt(u,h)&&(E=fn(u),Ve(u,S,x,!0),u=null),h.patchFlag===-2&&(L=!1,h.dynamicChildren=null);const{type:C,ref:B,shapeFlag:H}=h;switch(C){case _t:k(u,h,y,E);break;case ye:P(u,h,y,E);break;case Kt:u==null&&D(h,y,E,N);break;case Te:w(u,h,y,E,S,x,N,I,L);break;default:H&1?O(u,h,y,E,S,x,N,I,L):H&6?F(u,h,y,E,S,x,N,I,L):(H&64||H&128)&&C.process(u,h,y,E,S,x,N,I,L,Tt)}B!=null&&S&&Qt(B,u&&u.ref,x,h||u,!h)},k=(u,h,y,E)=>{if(u==null)s(h.el=l(h.children),y,E);else{const S=h.el=u.el;h.children!==u.children&&f(S,h.children)}},P=(u,h,y,E)=>{u==null?s(h.el=c(h.children||""),y,E):h.el=u.el},D=(u,h,y,E)=>{[u.el,u.anchor]=_(u.children,h,y,E,u.el,u.anchor)},p=({el:u,anchor:h},y,E)=>{let S;for(;u&&u!==h;)S=m(u),s(u,y,E),u=S;s(h,y,E)},g=({el:u,anchor:h})=>{let y;for(;u&&u!==h;)y=m(u),r(u),u=y;r(h)},O=(u,h,y,E,S,x,N,I,L)=>{h.type==="svg"?N="svg":h.type==="math"&&(N="mathml"),u==null?$(h,y,E,S,x,N,I,L):T(u,h,S,x,N,I,L)},$=(u,h,y,E,S,x,N,I)=>{let L,C;const{props:B,shapeFlag:H,transition:W,dirs:G}=u;if(L=u.el=o(u.type,x,B&&B.is,B),H&8?a(L,u.children):H&16&&j(u.children,L,null,E,S,os(u,x),N,I),G&&We(u,null,E,"created"),R(L,u,u.scopeId,N,E),B){for(const te in B)te!=="value"&&!Pt(te)&&i(L,te,null,B[te],x,E);"value"in B&&i(L,"value",null,B.value,x),(C=B.onVnodeBeforeMount)&&Oe(C,E,u)}G&&We(u,null,E,"beforeMount");const J=po(S,W);J&&W.beforeEnter(L),s(L,h,y),((C=B&&B.onVnodeMounted)||J||G)&&_e(()=>{C&&Oe(C,E,u),J&&W.enter(L),G&&We(u,null,E,"mounted")},S)},R=(u,h,y,E,S)=>{if(y&&v(u,y),E)for(let x=0;x{for(let C=L;C{const I=h.el=u.el;let{patchFlag:L,dynamicChildren:C,dirs:B}=h;L|=u.patchFlag&16;const H=u.props||ee,W=h.props||ee;let G;if(y&&ft(y,!1),(G=W.onVnodeBeforeUpdate)&&Oe(G,y,h,u),B&&We(h,u,y,"beforeUpdate"),y&&ft(y,!0),(H.innerHTML&&W.innerHTML==null||H.textContent&&W.textContent==null)&&a(I,""),C?M(u.dynamicChildren,C,I,y,E,os(h,S),x):N||V(u,h,I,null,y,E,os(h,S),x,!1),L>0){if(L&16)A(I,H,W,y,S);else if(L&2&&H.class!==W.class&&i(I,"class",null,W.class,S),L&4&&i(I,"style",H.style,W.style,S),L&8){const J=h.dynamicProps;for(let te=0;te{G&&Oe(G,y,h,u),B&&We(h,u,y,"updated")},E)},M=(u,h,y,E,S,x,N)=>{for(let I=0;I{if(h!==y){if(h!==ee)for(const x in h)!Pt(x)&&!(x in y)&&i(u,x,h[x],null,S,E);for(const x in y){if(Pt(x))continue;const N=y[x],I=h[x];N!==I&&x!=="value"&&i(u,x,I,N,S,E)}"value"in y&&i(u,"value",h.value,y.value,S)}},w=(u,h,y,E,S,x,N,I,L)=>{const C=h.el=u?u.el:l(""),B=h.anchor=u?u.anchor:l("");let{patchFlag:H,dynamicChildren:W,slotScopeIds:G}=h;G&&(I=I?I.concat(G):G),u==null?(s(C,y,E),s(B,y,E),j(h.children||[],y,B,S,x,N,I,L)):H>0&&H&64&&W&&u.dynamicChildren?(M(u.dynamicChildren,W,y,S,x,N,I),(h.key!=null||S&&h===S.subTree)&&tr(u,h,!0)):V(u,h,y,B,S,x,N,I,L)},F=(u,h,y,E,S,x,N,I,L)=>{h.slotScopeIds=I,u==null?h.shapeFlag&512?S.ctx.activate(h,y,E,N,L):Y(h,y,E,S,x,N,L):ie(u,h,L)},Y=(u,h,y,E,S,x,N)=>{const I=u.component=Gc(u,E,S);if(on(u)&&(I.ctx.renderer=Tt),Xc(I,!1,N),I.asyncDep){if(S&&S.registerDep(I,U,N),!u.el){const L=I.subTree=ce(ye);P(null,L,h,y)}}else U(I,u,h,y,S,x,N)},ie=(u,h,y)=>{const E=h.component=u.component;if(Vc(u,h,y))if(E.asyncDep&&!E.asyncResolved){X(E,h,y);return}else E.next=h,E.update();else h.el=u.el,E.vnode=h},U=(u,h,y,E,S,x,N)=>{const I=()=>{if(u.isMounted){let{next:H,bu:W,u:G,parent:J,vnode:te}=u;{const Ce=go(u);if(Ce){H&&(H.el=te.el,X(u,H,N)),Ce.asyncDep.then(()=>{u.isUnmounted||I()});return}}let Z=H,Ee;ft(u,!1),H?(H.el=te.el,X(u,H,N)):H=te,W&&Tn(W),(Ee=H.props&&H.props.onVnodeBeforeUpdate)&&Oe(Ee,J,H,te),ft(u,!0);const pe=ls(u),Fe=u.subTree;u.subTree=pe,b(Fe,pe,d(Fe.el),fn(Fe),u,S,x),H.el=pe.el,Z===null&&yo(u,pe.el),G&&_e(G,S),(Ee=H.props&&H.props.onVnodeUpdated)&&_e(()=>Oe(Ee,J,H,te),S)}else{let H;const{el:W,props:G}=h,{bm:J,m:te,parent:Z,root:Ee,type:pe}=u,Fe=vt(h);if(ft(u,!1),J&&Tn(J),!Fe&&(H=G&&G.onVnodeBeforeMount)&&Oe(H,Z,h),ft(u,!0),W&&Qn){const Ce=()=>{u.subTree=ls(u),Qn(W,u.subTree,u,S,null)};Fe&&pe.__asyncHydrate?pe.__asyncHydrate(W,u,Ce):Ce()}else{Ee.ce&&Ee.ce._injectChildStyle(pe);const Ce=u.subTree=ls(u);b(null,Ce,y,E,u,S,x),h.el=Ce.el}if(te&&_e(te,S),!Fe&&(H=G&&G.onVnodeMounted)){const Ce=h;_e(()=>Oe(H,Z,Ce),S)}(h.shapeFlag&256||Z&&vt(Z.vnode)&&Z.vnode.shapeFlag&256)&&u.a&&_e(u.a,S),u.isMounted=!0,h=y=E=null}};u.scope.on();const L=u.effect=new yi(I);u.scope.off();const C=u.update=L.run.bind(L),B=u.job=L.runIfDirty.bind(L);B.i=u,B.id=u.uid,L.scheduler=()=>zs(B),ft(u,!0),C()},X=(u,h,y)=>{h.component=u;const E=u.vnode.props;u.vnode=h,u.next=null,Ec(u,h.props,E,y),Mc(u,h.children,y),lt(),gr(u),ct()},V=(u,h,y,E,S,x,N,I,L=!1)=>{const C=u&&u.children,B=u?u.shapeFlag:0,H=h.children,{patchFlag:W,shapeFlag:G}=h;if(W>0){if(W&128){an(C,H,y,E,S,x,N,I,L);return}else if(W&256){ae(C,H,y,E,S,x,N,I,L);return}}G&8?(B&16&&Ht(C,S,x),H!==C&&a(y,H)):B&16?G&16?an(C,H,y,E,S,x,N,I,L):Ht(C,S,x,!0):(B&8&&a(y,""),G&16&&j(H,y,E,S,x,N,I,L))},ae=(u,h,y,E,S,x,N,I,L)=>{u=u||Mt,h=h||Mt;const C=u.length,B=h.length,H=Math.min(C,B);let W;for(W=0;WB?Ht(u,S,x,!0,!1,H):j(h,y,E,S,x,N,I,L,H)},an=(u,h,y,E,S,x,N,I,L)=>{let C=0;const B=h.length;let H=u.length-1,W=B-1;for(;C<=H&&C<=W;){const G=u[C],J=h[C]=L?nt(h[C]):Pe(h[C]);if(pt(G,J))b(G,J,y,null,S,x,N,I,L);else break;C++}for(;C<=H&&C<=W;){const G=u[H],J=h[W]=L?nt(h[W]):Pe(h[W]);if(pt(G,J))b(G,J,y,null,S,x,N,I,L);else break;H--,W--}if(C>H){if(C<=W){const G=W+1,J=GW)for(;C<=H;)Ve(u[C],S,x,!0),C++;else{const G=C,J=C,te=new Map;for(C=J;C<=W;C++){const Ae=h[C]=L?nt(h[C]):Pe(h[C]);Ae.key!=null&&te.set(Ae.key,C)}let Z,Ee=0;const pe=W-J+1;let Fe=!1,Ce=0;const Dt=new Array(pe);for(C=0;C=pe){Ve(Ae,S,x,!0);continue}let ke;if(Ae.key!=null)ke=te.get(Ae.key);else for(Z=J;Z<=W;Z++)if(Dt[Z-J]===0&&pt(Ae,h[Z])){ke=Z;break}ke===void 0?Ve(Ae,S,x,!0):(Dt[ke-J]=C+1,ke>=Ce?Ce=ke:Fe=!0,b(Ae,h[ke],y,null,S,x,N,I,L),Ee++)}const fr=Fe?Lc(Dt):Mt;for(Z=fr.length-1,C=pe-1;C>=0;C--){const Ae=J+C,ke=h[Ae],ur=Ae+1{const{el:x,type:N,transition:I,children:L,shapeFlag:C}=u;if(C&6){at(u.component.subTree,h,y,E);return}if(C&128){u.suspense.move(h,y,E);return}if(C&64){N.move(u,h,y,Tt);return}if(N===Te){s(x,h,y);for(let H=0;HI.enter(x),S);else{const{leave:H,delayLeave:W,afterLeave:G}=I,J=()=>s(x,h,y),te=()=>{H(x,()=>{J(),G&&G()})};W?W(x,J,te):te()}else s(x,h,y)},Ve=(u,h,y,E=!1,S=!1)=>{const{type:x,props:N,ref:I,children:L,dynamicChildren:C,shapeFlag:B,patchFlag:H,dirs:W,cacheIndex:G}=u;if(H===-2&&(S=!1),I!=null&&Qt(I,null,y,u,!0),G!=null&&(h.renderCache[G]=void 0),B&256){h.ctx.deactivate(u);return}const J=B&1&&W,te=!vt(u);let Z;if(te&&(Z=N&&N.onVnodeBeforeUnmount)&&Oe(Z,h,u),B&6)Jo(u.component,y,E);else{if(B&128){u.suspense.unmount(y,E);return}J&&We(u,null,h,"beforeUnmount"),B&64?u.type.remove(u,h,y,Tt,E):C&&!C.hasOnce&&(x!==Te||H>0&&H&64)?Ht(C,h,y,!1,!0):(x===Te&&H&384||!S&&B&16)&&Ht(L,h,y),E&&cr(u)}(te&&(Z=N&&N.onVnodeUnmounted)||J)&&_e(()=>{Z&&Oe(Z,h,u),J&&We(u,null,h,"unmounted")},y)},cr=u=>{const{type:h,el:y,anchor:E,transition:S}=u;if(h===Te){Yo(y,E);return}if(h===Kt){g(u);return}const x=()=>{r(y),S&&!S.persisted&&S.afterLeave&&S.afterLeave()};if(u.shapeFlag&1&&S&&!S.persisted){const{leave:N,delayLeave:I}=S,L=()=>N(y,x);I?I(u.el,x,L):L()}else x()},Yo=(u,h)=>{let y;for(;u!==h;)y=m(u),r(u),u=y;r(h)},Jo=(u,h,y)=>{const{bum:E,scope:S,job:x,subTree:N,um:I,m:L,a:C}=u;Rr(L),Rr(C),E&&Tn(E),S.stop(),x&&(x.flags|=8,Ve(N,u,h,y)),I&&_e(I,h),_e(()=>{u.isUnmounted=!0},h),h&&h.pendingBranch&&!h.isUnmounted&&u.asyncDep&&!u.asyncResolved&&u.suspenseId===h.pendingId&&(h.deps--,h.deps===0&&h.resolve())},Ht=(u,h,y,E=!1,S=!1,x=0)=>{for(let N=x;N{if(u.shapeFlag&6)return fn(u.component.subTree);if(u.shapeFlag&128)return u.suspense.next();const h=m(u.anchor||u.el),y=h&&h[$i];return y?m(y):h};let Jn=!1;const ar=(u,h,y)=>{u==null?h._vnode&&Ve(h._vnode,null,null,!0):b(h._vnode||null,u,h,null,null,null,y),h._vnode=u,Jn||(Jn=!0,gr(),Ln(),Jn=!1)},Tt={p:b,um:Ve,m:at,r:cr,mt:Y,mc:j,pc:V,pbc:M,n:fn,o:e};let zn,Qn;return t&&([zn,Qn]=t(Tt)),{render:ar,hydrate:zn,createApp:Sc(ar,zn)}}function os({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function ft({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function po(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function tr(e,t,n=!1){const s=e.children,r=t.children;if(K(s)&&K(r))for(let i=0;i>1,e[n[l]]0&&(t[s]=n[i-1]),n[i]=s)}}for(i=n.length,o=n[i-1];i-- >0;)n[i]=o,o=t[o];return n}function go(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:go(t)}function Rr(e){if(e)for(let t=0;tbt(Ic);function nr(e,t){return qn(e,null,t)}function Vf(e,t){return qn(e,null,{flush:"post"})}function Ie(e,t,n){return qn(e,t,n)}function qn(e,t,n=ee){const{immediate:s,deep:r,flush:i,once:o}=n,l=he({},n),c=t&&s||!t&&i!=="post";let f;if(Nt){if(i==="sync"){const v=Nc();f=v.__watcherHandles||(v.__watcherHandles=[])}else if(!c){const v=()=>{};return v.stop=Be,v.resume=Be,v.pause=Be,v}}const a=ue;l.call=(v,_,b)=>$e(v,a,_,b);let d=!1;i==="post"?l.scheduler=v=>{_e(v,a&&a.suspense)}:i!=="sync"&&(d=!0,l.scheduler=(v,_)=>{_?v():zs(v)}),l.augmentJob=v=>{t&&(v.flags|=4),d&&(v.flags|=2,a&&(v.id=a.uid,v.i=a))};const m=Bl(e,t,l);return Nt&&(f?f.push(m):c&&m()),m}function Fc(e,t,n){const s=this.proxy,r=oe(e)?e.includes(".")?mo(s,e):()=>s[e]:e.bind(s,s);let i;q(t)?i=t:(i=t.handler,n=t);const o=cn(this),l=qn(r,i.bind(s),n);return o(),l}function mo(e,t){const n=t.split(".");return()=>{let s=e;for(let r=0;rt==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${Ne(t)}Modifiers`]||e[`${ot(t)}Modifiers`];function Dc(e,t,...n){if(e.isUnmounted)return;const s=e.vnode.props||ee;let r=n;const i=t.startsWith("update:"),o=i&&Hc(s,t.slice(7));o&&(o.trim&&(r=n.map(a=>oe(a)?a.trim():a)),o.number&&(r=n.map(Ss)));let l,c=s[l=Sn(t)]||s[l=Sn(Ne(t))];!c&&i&&(c=s[l=Sn(ot(t))]),c&&$e(c,e,6,r);const f=s[l+"Once"];if(f){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,$e(f,e,6,r)}}function vo(e,t,n=!1){const s=t.emitsCache,r=s.get(e);if(r!==void 0)return r;const i=e.emits;let o={},l=!1;if(!q(e)){const c=f=>{const a=vo(f,t,!0);a&&(l=!0,he(o,a))};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}return!i&&!l?(se(e)&&s.set(e,null),null):(K(i)?i.forEach(c=>o[c]=null):he(o,i),se(e)&&s.set(e,o),o)}function Gn(e,t){return!e||!nn(t)?!1:(t=t.slice(2).replace(/Once$/,""),Q(e,t[0].toLowerCase()+t.slice(1))||Q(e,ot(t))||Q(e,t))}function ls(e){const{type:t,vnode:n,proxy:s,withProxy:r,propsOptions:[i],slots:o,attrs:l,emit:c,render:f,renderCache:a,props:d,data:m,setupState:v,ctx:_,inheritAttrs:b}=e,k=In(e);let P,D;try{if(n.shapeFlag&4){const g=r||s,O=g;P=Pe(f.call(O,g,a,d,v,m,_)),D=l}else{const g=t;P=Pe(g.length>1?g(d,{attrs:l,slots:o,emit:c}):g(d,null)),D=t.props?l:$c(l)}}catch(g){qt.length=0,rn(g,e,1),P=ce(ye)}let p=P;if(D&&b!==!1){const g=Object.keys(D),{shapeFlag:O}=p;g.length&&O&7&&(i&&g.some(js)&&(D=jc(D,i)),p=rt(p,D,!1,!0))}return n.dirs&&(p=rt(p,null,!1,!0),p.dirs=p.dirs?p.dirs.concat(n.dirs):n.dirs),n.transition&&zt(p,n.transition),P=p,In(k),P}const $c=e=>{let t;for(const n in e)(n==="class"||n==="style"||nn(n))&&((t||(t={}))[n]=e[n]);return t},jc=(e,t)=>{const n={};for(const s in e)(!js(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function Vc(e,t,n){const{props:s,children:r,component:i}=e,{props:o,children:l,patchFlag:c}=t,f=i.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&c>=0){if(c&1024)return!0;if(c&16)return s?Mr(s,o,f):!!o;if(c&8){const a=t.dynamicProps;for(let d=0;de.__isSuspense;function _o(e,t){t&&t.pendingBranch?K(e)?t.effects.push(...e):t.effects.push(e):Gl(e)}const Te=Symbol.for("v-fgt"),_t=Symbol.for("v-txt"),ye=Symbol.for("v-cmt"),Kt=Symbol.for("v-stc"),qt=[];let Re=null;function Is(e=!1){qt.push(Re=e?null:[])}function kc(){qt.pop(),Re=qt[qt.length-1]||null}let Zt=1;function Or(e,t=!1){Zt+=e,e<0&&Re&&t&&(Re.hasOnce=!0)}function wo(e){return e.dynamicChildren=Zt>0?Re||Mt:null,kc(),Zt>0&&Re&&Re.push(e),e}function kf(e,t,n,s,r,i){return wo(To(e,t,n,s,r,i,!0))}function Ns(e,t,n,s,r){return wo(ce(e,t,n,s,r,!0))}function en(e){return e?e.__v_isVNode===!0:!1}function pt(e,t){return e.type===t.type&&e.key===t.key}const So=({key:e})=>e??null,Cn=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?oe(e)||fe(e)||q(e)?{i:de,r:e,k:t,f:!!n}:e:null);function To(e,t=null,n=null,s=0,r=null,i=e===Te?0:1,o=!1,l=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&So(t),ref:t&&Cn(t),scopeId:Di,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:s,dynamicProps:r,dynamicChildren:null,appContext:null,ctx:de};return l?(sr(c,n),i&128&&e.normalize(c)):n&&(c.shapeFlag|=oe(n)?8:16),Zt>0&&!o&&Re&&(c.patchFlag>0||i&6)&&c.patchFlag!==32&&Re.push(c),c}const ce=Uc;function Uc(e,t=null,n=null,s=0,r=null,i=!1){if((!e||e===Ji)&&(e=ye),en(e)){const l=rt(e,t,!0);return n&&sr(l,n),Zt>0&&!i&&Re&&(l.shapeFlag&6?Re[Re.indexOf(e)]=l:Re.push(l)),l.patchFlag=-2,l}if(Qc(e)&&(e=e.__vccOpts),t){t=Wc(t);let{class:l,style:c}=t;l&&!oe(l)&&(t.class=Ws(l)),se(c)&&(Ys(c)&&!K(c)&&(c=he({},c)),t.style=Us(c))}const o=oe(e)?1:bo(e)?128:ji(e)?64:se(e)?4:q(e)?2:0;return To(e,t,n,s,r,o,i,!0)}function Wc(e){return e?Ys(e)||io(e)?he({},e):e:null}function rt(e,t,n=!1,s=!1){const{props:r,ref:i,patchFlag:o,children:l,transition:c}=e,f=t?Bc(r||{},t):r,a={__v_isVNode:!0,__v_skip:!0,type:e.type,props:f,key:f&&So(f),ref:t&&t.ref?n&&i?K(i)?i.concat(Cn(t)):[i,Cn(t)]:Cn(t):i,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Te?o===-1?16:o|16:o,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:c,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&rt(e.ssContent),ssFallback:e.ssFallback&&rt(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return c&&s&&zt(a,c.clone(a)),a}function xo(e=" ",t=0){return ce(_t,null,e,t)}function Uf(e,t){const n=ce(Kt,null,e);return n.staticCount=t,n}function Wf(e="",t=!1){return t?(Is(),Ns(ye,null,e)):ce(ye,null,e)}function Pe(e){return e==null||typeof e=="boolean"?ce(ye):K(e)?ce(Te,null,e.slice()):en(e)?nt(e):ce(_t,null,String(e))}function nt(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:rt(e)}function sr(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(K(t))n=16;else if(typeof t=="object")if(s&65){const r=t.default;r&&(r._c&&(r._d=!1),sr(e,r()),r._c&&(r._d=!0));return}else{n=32;const r=t._;!r&&!io(t)?t._ctx=de:r===3&&de&&(de.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else q(t)?(t={default:t,_ctx:de},n=32):(t=String(t),s&64?(n=16,t=[xo(t)]):n=8);e.children=t,e.shapeFlag|=n}function Bc(...e){const t={};for(let n=0;nue||de;let Fn,Fs;{const e=jn(),t=(n,s)=>{let r;return(r=e[n])||(r=e[n]=[]),r.push(s),i=>{r.length>1?r.forEach(o=>o(i)):r[0](i)}};Fn=t("__VUE_INSTANCE_SETTERS__",n=>ue=n),Fs=t("__VUE_SSR_SETTERS__",n=>Nt=n)}const cn=e=>{const t=ue;return Fn(e),e.scope.on(),()=>{e.scope.off(),Fn(t)}},Pr=()=>{ue&&ue.scope.off(),Fn(null)};function Eo(e){return e.vnode.shapeFlag&4}let Nt=!1;function Xc(e,t=!1,n=!1){t&&Fs(t);const{props:s,children:r}=e.vnode,i=Eo(e);xc(e,s,i,t),Rc(e,r,n);const o=i?Yc(e,t):void 0;return t&&Fs(!1),o}function Yc(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,pc);const{setup:s}=n;if(s){lt();const r=e.setupContext=s.length>1?Ao(e):null,i=cn(e),o=sn(s,e,0,[e.props,r]),l=fi(o);if(ct(),i(),(l||e.sp)&&!vt(e)&&Zs(e),l){if(o.then(Pr,Pr),t)return o.then(c=>{Lr(e,c)}).catch(c=>{rn(c,e,0)});e.asyncDep=o}else Lr(e,o)}else Co(e)}function Lr(e,t,n){q(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:se(t)&&(e.setupState=Ii(t)),Co(e)}function Co(e,t,n){const s=e.type;e.render||(e.render=s.render||Be);{const r=cn(e);lt();try{mc(e)}finally{ct(),r()}}}const Jc={get(e,t){return me(e,"get",""),e[t]}};function Ao(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,Jc),slots:e.slots,emit:e.emit,expose:t}}function Xn(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(Ii(xn(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Bt)return Bt[n](e)},has(t,n){return n in t||n in Bt}})):e.proxy}function zc(e,t=!0){return q(e)?e.displayName||e.name:e.name||t&&e.__name}function Qc(e){return q(e)&&"__vccOpts"in e}const re=(e,t)=>Ul(e,t,Nt);function Hs(e,t,n){const s=arguments.length;return s===2?se(t)&&!K(t)?en(t)?ce(e,null,[t]):ce(e,t):ce(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&en(n)&&(n=[n]),ce(e,t,n))}const Zc="3.5.13";/** +* @vue/runtime-dom v3.5.13 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let Ds;const Ir=typeof window<"u"&&window.trustedTypes;if(Ir)try{Ds=Ir.createPolicy("vue",{createHTML:e=>e})}catch{}const Ro=Ds?e=>Ds.createHTML(e):e=>e,ea="http://www.w3.org/2000/svg",ta="http://www.w3.org/1998/Math/MathML",Ge=typeof document<"u"?document:null,Nr=Ge&&Ge.createElement("template"),na={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const r=t==="svg"?Ge.createElementNS(ea,e):t==="mathml"?Ge.createElementNS(ta,e):n?Ge.createElement(e,{is:n}):Ge.createElement(e);return e==="select"&&s&&s.multiple!=null&&r.setAttribute("multiple",s.multiple),r},createText:e=>Ge.createTextNode(e),createComment:e=>Ge.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Ge.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,r,i){const o=n?n.previousSibling:t.lastChild;if(r&&(r===i||r.nextSibling))for(;t.insertBefore(r.cloneNode(!0),n),!(r===i||!(r=r.nextSibling)););else{Nr.innerHTML=Ro(s==="svg"?`${e}`:s==="mathml"?`${e}`:e);const l=Nr.content;if(s==="svg"||s==="mathml"){const c=l.firstChild;for(;c.firstChild;)l.appendChild(c.firstChild);l.removeChild(c)}t.insertBefore(l,n)}return[o?o.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},Ze="transition",jt="animation",tn=Symbol("_vtc"),Mo={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},sa=he({},Ui,Mo),ra=e=>(e.displayName="Transition",e.props=sa,e),Bf=ra((e,{slots:t})=>Hs(Ql,ia(e),t)),ut=(e,t=[])=>{K(e)?e.forEach(n=>n(...t)):e&&e(...t)},Fr=e=>e?K(e)?e.some(t=>t.length>1):e.length>1:!1;function ia(e){const t={};for(const w in e)w in Mo||(t[w]=e[w]);if(e.css===!1)return t;const{name:n="v",type:s,duration:r,enterFromClass:i=`${n}-enter-from`,enterActiveClass:o=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:c=i,appearActiveClass:f=o,appearToClass:a=l,leaveFromClass:d=`${n}-leave-from`,leaveActiveClass:m=`${n}-leave-active`,leaveToClass:v=`${n}-leave-to`}=e,_=oa(r),b=_&&_[0],k=_&&_[1],{onBeforeEnter:P,onEnter:D,onEnterCancelled:p,onLeave:g,onLeaveCancelled:O,onBeforeAppear:$=P,onAppear:R=D,onAppearCancelled:j=p}=t,T=(w,F,Y,ie)=>{w._enterCancelled=ie,dt(w,F?a:l),dt(w,F?f:o),Y&&Y()},M=(w,F)=>{w._isLeaving=!1,dt(w,d),dt(w,v),dt(w,m),F&&F()},A=w=>(F,Y)=>{const ie=w?R:D,U=()=>T(F,w,Y);ut(ie,[F,U]),Hr(()=>{dt(F,w?c:i),qe(F,w?a:l),Fr(ie)||Dr(F,s,b,U)})};return he(t,{onBeforeEnter(w){ut(P,[w]),qe(w,i),qe(w,o)},onBeforeAppear(w){ut($,[w]),qe(w,c),qe(w,f)},onEnter:A(!1),onAppear:A(!0),onLeave(w,F){w._isLeaving=!0;const Y=()=>M(w,F);qe(w,d),w._enterCancelled?(qe(w,m),Vr()):(Vr(),qe(w,m)),Hr(()=>{w._isLeaving&&(dt(w,d),qe(w,v),Fr(g)||Dr(w,s,k,Y))}),ut(g,[w,Y])},onEnterCancelled(w){T(w,!1,void 0,!0),ut(p,[w])},onAppearCancelled(w){T(w,!0,void 0,!0),ut(j,[w])},onLeaveCancelled(w){M(w),ut(O,[w])}})}function oa(e){if(e==null)return null;if(se(e))return[cs(e.enter),cs(e.leave)];{const t=cs(e);return[t,t]}}function cs(e){return sl(e)}function qe(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[tn]||(e[tn]=new Set)).add(t)}function dt(e,t){t.split(/\s+/).forEach(s=>s&&e.classList.remove(s));const n=e[tn];n&&(n.delete(t),n.size||(e[tn]=void 0))}function Hr(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let la=0;function Dr(e,t,n,s){const r=e._endId=++la,i=()=>{r===e._endId&&s()};if(n!=null)return setTimeout(i,n);const{type:o,timeout:l,propCount:c}=ca(e,t);if(!o)return s();const f=o+"end";let a=0;const d=()=>{e.removeEventListener(f,m),i()},m=v=>{v.target===e&&++a>=c&&d()};setTimeout(()=>{a(n[_]||"").split(", "),r=s(`${Ze}Delay`),i=s(`${Ze}Duration`),o=$r(r,i),l=s(`${jt}Delay`),c=s(`${jt}Duration`),f=$r(l,c);let a=null,d=0,m=0;t===Ze?o>0&&(a=Ze,d=o,m=i.length):t===jt?f>0&&(a=jt,d=f,m=c.length):(d=Math.max(o,f),a=d>0?o>f?Ze:jt:null,m=a?a===Ze?i.length:c.length:0);const v=a===Ze&&/\b(transform|all)(,|$)/.test(s(`${Ze}Property`).toString());return{type:a,timeout:d,propCount:m,hasTransform:v}}function $r(e,t){for(;e.lengthjr(n)+jr(e[s])))}function jr(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function Vr(){return document.body.offsetHeight}function aa(e,t,n){const s=e[tn];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const kr=Symbol("_vod"),fa=Symbol("_vsh"),ua=Symbol(""),da=/(^|;)\s*display\s*:/;function ha(e,t,n){const s=e.style,r=oe(n);let i=!1;if(n&&!r){if(t)if(oe(t))for(const o of t.split(";")){const l=o.slice(0,o.indexOf(":")).trim();n[l]==null&&An(s,l,"")}else for(const o in t)n[o]==null&&An(s,o,"");for(const o in n)o==="display"&&(i=!0),An(s,o,n[o])}else if(r){if(t!==n){const o=s[ua];o&&(n+=";"+o),s.cssText=n,i=da.test(n)}}else t&&e.removeAttribute("style");kr in e&&(e[kr]=i?s.display:"",e[fa]&&(s.display="none"))}const Ur=/\s*!important$/;function An(e,t,n){if(K(n))n.forEach(s=>An(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=pa(e,t);Ur.test(n)?e.setProperty(ot(s),n.replace(Ur,""),"important"):e[s]=n}}const Wr=["Webkit","Moz","ms"],as={};function pa(e,t){const n=as[t];if(n)return n;let s=Ne(t);if(s!=="filter"&&s in e)return as[t]=s;s=$n(s);for(let r=0;rfs||(ya.then(()=>fs=0),fs=Date.now());function _a(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;$e(wa(s,n.value),t,5,[s])};return n.value=e,n.attached=ba(),n}function wa(e,t){if(K(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(s=>r=>!r._stopped&&s&&s(r))}else return t}const Yr=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,Sa=(e,t,n,s,r,i)=>{const o=r==="svg";t==="class"?aa(e,s,o):t==="style"?ha(e,n,s):nn(t)?js(t)||ma(e,t,n,s,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Ta(e,t,s,o))?(qr(e,t,s),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&Kr(e,t,s,o,i,t!=="value")):e._isVueCE&&(/[A-Z]/.test(t)||!oe(s))?qr(e,Ne(t),s,i,t):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),Kr(e,t,s,o))};function Ta(e,t,n,s){if(s)return!!(t==="innerHTML"||t==="textContent"||t in e&&Yr(t)&&q(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const r=e.tagName;if(r==="IMG"||r==="VIDEO"||r==="CANVAS"||r==="SOURCE")return!1}return Yr(t)&&oe(n)?!1:t in e}const Jr=e=>{const t=e.props["onUpdate:modelValue"]||!1;return K(t)?n=>Tn(t,n):t};function xa(e){e.target.composing=!0}function zr(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const us=Symbol("_assign"),Kf={created(e,{modifiers:{lazy:t,trim:n,number:s}},r){e[us]=Jr(r);const i=s||r.props&&r.props.type==="number";At(e,t?"change":"input",o=>{if(o.target.composing)return;let l=e.value;n&&(l=l.trim()),i&&(l=Ss(l)),e[us](l)}),n&&At(e,"change",()=>{e.value=e.value.trim()}),t||(At(e,"compositionstart",xa),At(e,"compositionend",zr),At(e,"change",zr))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:s,trim:r,number:i}},o){if(e[us]=Jr(o),e.composing)return;const l=(i||e.type==="number")&&!/^0\d/.test(e.value)?Ss(e.value):e.value,c=t??"";l!==c&&(document.activeElement===e&&e.type!=="range"&&(s&&t===n||r&&e.value.trim()===c)||(e.value=c))}},Ea=["ctrl","shift","alt","meta"],Ca={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>Ea.some(n=>e[`${n}Key`]&&!t.includes(n))},qf=(e,t)=>{const n=e._withMods||(e._withMods={}),s=t.join(".");return n[s]||(n[s]=(r,...i)=>{for(let o=0;o{const n=e._withKeys||(e._withKeys={}),s=t.join(".");return n[s]||(n[s]=r=>{if(!("key"in r))return;const i=ot(r.key);if(t.some(o=>o===i||Aa[o]===i))return e(r)})},Oo=he({patchProp:Sa},na);let Gt,Qr=!1;function Ra(){return Gt||(Gt=Oc(Oo))}function Ma(){return Gt=Qr?Gt:Pc(Oo),Qr=!0,Gt}const Xf=(...e)=>{const t=Ra().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=Lo(s);if(!r)return;const i=t._component;!q(i)&&!i.render&&!i.template&&(i.template=r.innerHTML),r.nodeType===1&&(r.textContent="");const o=n(r,!1,Po(r));return r instanceof Element&&(r.removeAttribute("v-cloak"),r.setAttribute("data-v-app","")),o},t},Yf=(...e)=>{const t=Ma().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=Lo(s);if(r)return n(r,!0,Po(r))},t};function Po(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function Lo(e){return oe(e)?document.querySelector(e):e}function Io(e){return vi()?(dl(e),!0):!1}const ds=new WeakMap,Oa=(...e)=>{var t;const n=e[0],s=(t=ln())==null?void 0:t.proxy;if(s==null&&!no())throw new Error("injectLocal must be called in setup");return s&&ds.has(s)&&n in ds.get(s)?ds.get(s)[n]:bt(...e)},No=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const Jf=e=>e!=null,Pa=Object.prototype.toString,La=e=>Pa.call(e)==="[object Object]",it=()=>{},Zr=Ia();function Ia(){var e,t;return No&&((e=window==null?void 0:window.navigator)==null?void 0:e.userAgent)&&(/iP(?:ad|hone|od)/.test(window.navigator.userAgent)||((t=window==null?void 0:window.navigator)==null?void 0:t.maxTouchPoints)>2&&/iPad|Macintosh/.test(window==null?void 0:window.navigator.userAgent))}function rr(e,t){function n(...s){return new Promise((r,i)=>{Promise.resolve(e(()=>t.apply(this,s),{fn:t,thisArg:this,args:s})).then(r).catch(i)})}return n}const Fo=e=>e();function Ho(e,t={}){let n,s,r=it;const i=c=>{clearTimeout(c),r(),r=it};let o;return c=>{const f=le(e),a=le(t.maxWait);return n&&i(n),f<=0||a!==void 0&&a<=0?(s&&(i(s),s=null),Promise.resolve(c())):new Promise((d,m)=>{r=t.rejectOnCancel?m:d,o=c,a&&!s&&(s=setTimeout(()=>{n&&i(n),s=null,d(o())},a)),n=setTimeout(()=>{s&&i(s),s=null,d(c())},f)})}}function Na(...e){let t=0,n,s=!0,r=it,i,o,l,c,f;!fe(e[0])&&typeof e[0]=="object"?{delay:o,trailing:l=!0,leading:c=!0,rejectOnCancel:f=!1}=e[0]:[o,l=!0,c=!0,f=!1]=e;const a=()=>{n&&(clearTimeout(n),n=void 0,r(),r=it)};return m=>{const v=le(o),_=Date.now()-t,b=()=>i=m();return a(),v<=0?(t=Date.now(),b()):(_>v&&(c||!s)?(t=Date.now(),b()):l&&(i=new Promise((k,P)=>{r=f?P:k,n=setTimeout(()=>{t=Date.now(),s=!0,k(b()),a()},Math.max(0,v-_))})),!c&&!n&&(n=setTimeout(()=>s=!0,v)),s=!1,i)}}function Fa(e=Fo,t={}){const{initialState:n="active"}=t,s=ir(n==="active");function r(){s.value=!1}function i(){s.value=!0}const o=(...l)=>{s.value&&e(...l)};return{isActive:Un(s),pause:r,resume:i,eventFilter:o}}function ei(e){return e.endsWith("rem")?Number.parseFloat(e)*16:Number.parseFloat(e)}function Ha(e){return ln()}function hs(e){return Array.isArray(e)?e:[e]}function ir(...e){if(e.length!==1)return jl(...e);const t=e[0];return typeof t=="function"?Un(Hl(()=>({get:t,set:it}))):De(t)}function Da(e,t=200,n={}){return rr(Ho(t,n),e)}function $a(e,t=200,n=!1,s=!0,r=!1){return rr(Na(t,n,s,r),e)}function Do(e,t,n={}){const{eventFilter:s=Fo,...r}=n;return Ie(e,rr(s,t),r)}function ja(e,t,n={}){const{eventFilter:s,initialState:r="active",...i}=n,{eventFilter:o,pause:l,resume:c,isActive:f}=Fa(s,{initialState:r});return{stop:Do(e,t,{...i,eventFilter:o}),pause:l,resume:c,isActive:f}}function Yn(e,t=!0,n){Ha()?Ft(e,n):t?e():Wn(e)}function zf(e,t,n={}){const{debounce:s=0,maxWait:r=void 0,...i}=n;return Do(e,t,{...i,eventFilter:Ho(s,{maxWait:r})})}function Va(e,t,n){return Ie(e,t,{...n,immediate:!0})}function Qf(e,t,n){let s;fe(n)?s={evaluating:n}:s={};const{lazy:r=!1,evaluating:i=void 0,shallow:o=!0,onError:l=it}=s,c=xe(!r),f=o?xe(t):De(t);let a=0;return nr(async d=>{if(!c.value)return;a++;const m=a;let v=!1;i&&Promise.resolve().then(()=>{i.value=!0});try{const _=await e(b=>{d(()=>{i&&(i.value=!1),v||b()})});m===a&&(f.value=_)}catch(_){l(_)}finally{i&&m===a&&(i.value=!1),v=!0}}),r?re(()=>(c.value=!0,f.value)):f}const je=No?window:void 0;function or(e){var t;const n=le(e);return(t=n==null?void 0:n.$el)!=null?t:n}function Je(...e){const t=[],n=()=>{t.forEach(l=>l()),t.length=0},s=(l,c,f,a)=>(l.addEventListener(c,f,a),()=>l.removeEventListener(c,f,a)),r=re(()=>{const l=hs(le(e[0])).filter(c=>c!=null);return l.every(c=>typeof c!="string")?l:void 0}),i=Va(()=>{var l,c;return[(c=(l=r.value)==null?void 0:l.map(f=>or(f)))!=null?c:[je].filter(f=>f!=null),hs(le(r.value?e[1]:e[0])),hs(Js(r.value?e[2]:e[1])),le(r.value?e[3]:e[2])]},([l,c,f,a])=>{if(n(),!(l!=null&&l.length)||!(c!=null&&c.length)||!(f!=null&&f.length))return;const d=La(a)?{...a}:a;t.push(...l.flatMap(m=>c.flatMap(v=>f.map(_=>s(m,v,_,d)))))},{flush:"post"}),o=()=>{i(),n()};return Io(n),o}function ka(){const e=xe(!1),t=ln();return t&&Ft(()=>{e.value=!0},t),e}function Ua(e){const t=ka();return re(()=>(t.value,!!e()))}function Wa(e){return typeof e=="function"?e:typeof e=="string"?t=>t.key===e:Array.isArray(e)?t=>e.includes(t.key):()=>!0}function Zf(...e){let t,n,s={};e.length===3?(t=e[0],n=e[1],s=e[2]):e.length===2?typeof e[1]=="object"?(t=!0,n=e[0],s=e[1]):(t=e[0],n=e[1]):(t=!0,n=e[0]);const{target:r=je,eventName:i="keydown",passive:o=!1,dedupe:l=!1}=s,c=Wa(t);return Je(r,i,a=>{a.repeat&&le(l)||c(a)&&n(a)},o)}const Ba=Symbol("vueuse-ssr-width");function Ka(){const e=no()?Oa(Ba,null):null;return typeof e=="number"?e:void 0}function $o(e,t={}){const{window:n=je,ssrWidth:s=Ka()}=t,r=Ua(()=>n&&"matchMedia"in n&&typeof n.matchMedia=="function"),i=xe(typeof s=="number"),o=xe(),l=xe(!1),c=f=>{l.value=f.matches};return nr(()=>{if(i.value){i.value=!r.value;const f=le(e).split(",");l.value=f.some(a=>{const d=a.includes("not all"),m=a.match(/\(\s*min-width:\s*(-?\d+(?:\.\d*)?[a-z]+\s*)\)/),v=a.match(/\(\s*max-width:\s*(-?\d+(?:\.\d*)?[a-z]+\s*)\)/);let _=!!(m||v);return m&&_&&(_=s>=ei(m[1])),v&&_&&(_=s<=ei(v[1])),d?!_:_});return}r.value&&(o.value=n.matchMedia(le(e)),l.value=o.value.matches)}),Je(o,"change",c,{passive:!0}),re(()=>l.value)}const yn=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},bn="__vueuse_ssr_handlers__",qa=Ga();function Ga(){return bn in yn||(yn[bn]=yn[bn]||{}),yn[bn]}function jo(e,t){return qa[e]||t}function Vo(e){return $o("(prefers-color-scheme: dark)",e)}function Xa(e){return e==null?"any":e instanceof Set?"set":e instanceof Map?"map":e instanceof Date?"date":typeof e=="boolean"?"boolean":typeof e=="string"?"string":typeof e=="object"?"object":Number.isNaN(e)?"any":"number"}const Ya={boolean:{read:e=>e==="true",write:e=>String(e)},object:{read:e=>JSON.parse(e),write:e=>JSON.stringify(e)},number:{read:e=>Number.parseFloat(e),write:e=>String(e)},any:{read:e=>e,write:e=>String(e)},string:{read:e=>e,write:e=>String(e)},map:{read:e=>new Map(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))},set:{read:e=>new Set(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e))},date:{read:e=>new Date(e),write:e=>e.toISOString()}},ti="vueuse-storage";function lr(e,t,n,s={}){var r;const{flush:i="pre",deep:o=!0,listenToStorageChanges:l=!0,writeDefaults:c=!0,mergeDefaults:f=!1,shallow:a,window:d=je,eventFilter:m,onError:v=A=>{console.error(A)},initOnMounted:_}=s,b=(a?xe:De)(typeof t=="function"?t():t),k=re(()=>le(e));if(!n)try{n=jo("getDefaultStorage",()=>{var A;return(A=je)==null?void 0:A.localStorage})()}catch(A){v(A)}if(!n)return b;const P=le(t),D=Xa(P),p=(r=s.serializer)!=null?r:Ya[D],{pause:g,resume:O}=ja(b,()=>R(b.value),{flush:i,deep:o,eventFilter:m});Ie(k,()=>T(),{flush:i}),d&&l&&Yn(()=>{n instanceof Storage?Je(d,"storage",T,{passive:!0}):Je(d,ti,M),_&&T()}),_||T();function $(A,w){if(d){const F={key:k.value,oldValue:A,newValue:w,storageArea:n};d.dispatchEvent(n instanceof Storage?new StorageEvent("storage",F):new CustomEvent(ti,{detail:F}))}}function R(A){try{const w=n.getItem(k.value);if(A==null)$(w,null),n.removeItem(k.value);else{const F=p.write(A);w!==F&&(n.setItem(k.value,F),$(w,F))}}catch(w){v(w)}}function j(A){const w=A?A.newValue:n.getItem(k.value);if(w==null)return c&&P!=null&&n.setItem(k.value,p.write(P)),P;if(!A&&f){const F=p.read(w);return typeof f=="function"?f(F,P):D==="object"&&!Array.isArray(F)?{...P,...F}:F}else return typeof w!="string"?w:p.read(w)}function T(A){if(!(A&&A.storageArea!==n)){if(A&&A.key==null){b.value=P;return}if(!(A&&A.key!==k.value)){g();try{(A==null?void 0:A.newValue)!==p.write(b.value)&&(b.value=j(A))}catch(w){v(w)}finally{A?Wn(O):O()}}}}function M(A){T(A.detail)}return b}const Ja="*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}";function za(e={}){const{selector:t="html",attribute:n="class",initialValue:s="auto",window:r=je,storage:i,storageKey:o="vueuse-color-scheme",listenToStorageChanges:l=!0,storageRef:c,emitAuto:f,disableTransition:a=!0}=e,d={auto:"",light:"light",dark:"dark",...e.modes||{}},m=Vo({window:r}),v=re(()=>m.value?"dark":"light"),_=c||(o==null?ir(s):lr(o,s,i,{window:r,listenToStorageChanges:l})),b=re(()=>_.value==="auto"?v.value:_.value),k=jo("updateHTMLAttrs",(g,O,$)=>{const R=typeof g=="string"?r==null?void 0:r.document.querySelector(g):or(g);if(!R)return;const j=new Set,T=new Set;let M=null;if(O==="class"){const w=$.split(/\s/g);Object.values(d).flatMap(F=>(F||"").split(/\s/g)).filter(Boolean).forEach(F=>{w.includes(F)?j.add(F):T.add(F)})}else M={key:O,value:$};if(j.size===0&&T.size===0&&M===null)return;let A;a&&(A=r.document.createElement("style"),A.appendChild(document.createTextNode(Ja)),r.document.head.appendChild(A));for(const w of j)R.classList.add(w);for(const w of T)R.classList.remove(w);M&&R.setAttribute(M.key,M.value),a&&(r.getComputedStyle(A).opacity,document.head.removeChild(A))});function P(g){var O;k(t,n,(O=d[g])!=null?O:g)}function D(g){e.onChanged?e.onChanged(g,P):P(g)}Ie(b,D,{flush:"post",immediate:!0}),Yn(()=>D(b.value));const p=re({get(){return f?_.value:b.value},set(g){_.value=g}});return Object.assign(p,{store:_,system:v,state:b})}function Qa(e={}){const{valueDark:t="dark",valueLight:n=""}=e,s=za({...e,onChanged:(o,l)=>{var c;e.onChanged?(c=e.onChanged)==null||c.call(e,o==="dark",l,o):l(o)},modes:{dark:t,light:n}}),r=re(()=>s.system.value);return re({get(){return s.value==="dark"},set(o){const l=o?"dark":"light";r.value===l?s.value="auto":s.value=l}})}function ps(e){return typeof Window<"u"&&e instanceof Window?e.document.documentElement:typeof Document<"u"&&e instanceof Document?e.documentElement:e}const ni=1;function Za(e,t={}){const{throttle:n=0,idle:s=200,onStop:r=it,onScroll:i=it,offset:o={left:0,right:0,top:0,bottom:0},eventListenerOptions:l={capture:!1,passive:!0},behavior:c="auto",window:f=je,onError:a=R=>{console.error(R)}}=t,d=xe(0),m=xe(0),v=re({get(){return d.value},set(R){b(R,void 0)}}),_=re({get(){return m.value},set(R){b(void 0,R)}});function b(R,j){var T,M,A,w;if(!f)return;const F=le(e);if(!F)return;(A=F instanceof Document?f.document.body:F)==null||A.scrollTo({top:(T=le(j))!=null?T:_.value,left:(M=le(R))!=null?M:v.value,behavior:le(c)});const Y=((w=F==null?void 0:F.document)==null?void 0:w.documentElement)||(F==null?void 0:F.documentElement)||F;v!=null&&(d.value=Y.scrollLeft),_!=null&&(m.value=Y.scrollTop)}const k=xe(!1),P=It({left:!0,right:!1,top:!0,bottom:!1}),D=It({left:!1,right:!1,top:!1,bottom:!1}),p=R=>{k.value&&(k.value=!1,D.left=!1,D.right=!1,D.top=!1,D.bottom=!1,r(R))},g=Da(p,n+s),O=R=>{var j;if(!f)return;const T=((j=R==null?void 0:R.document)==null?void 0:j.documentElement)||(R==null?void 0:R.documentElement)||or(R),{display:M,flexDirection:A,direction:w}=getComputedStyle(T),F=w==="rtl"?-1:1,Y=T.scrollLeft;D.left=Yd.value;const ie=Math.abs(Y*F)<=(o.left||0),U=Math.abs(Y*F)+T.clientWidth>=T.scrollWidth-(o.right||0)-ni;M==="flex"&&A==="row-reverse"?(P.left=U,P.right=ie):(P.left=ie,P.right=U),d.value=Y;let X=T.scrollTop;R===f.document&&!X&&(X=f.document.body.scrollTop),D.top=Xm.value;const V=Math.abs(X)<=(o.top||0),ae=Math.abs(X)+T.clientHeight>=T.scrollHeight-(o.bottom||0)-ni;M==="flex"&&A==="column-reverse"?(P.top=ae,P.bottom=V):(P.top=V,P.bottom=ae),m.value=X},$=R=>{var j;if(!f)return;const T=(j=R.target.documentElement)!=null?j:R.target;O(T),k.value=!0,g(R),i(R)};return Je(e,"scroll",n?$a($,n,!0,!1):$,l),Yn(()=>{try{const R=le(e);if(!R)return;O(R)}catch(R){a(R)}}),Je(e,"scrollend",p,l),{x:v,y:_,isScrolling:k,arrivedState:P,directions:D,measure(){const R=le(e);f&&R&&O(R)}}}function eu(e,t,n={}){const{window:s=je}=n;return lr(e,t,s==null?void 0:s.localStorage,n)}function ko(e){const t=window.getComputedStyle(e);if(t.overflowX==="scroll"||t.overflowY==="scroll"||t.overflowX==="auto"&&e.clientWidth1?!0:(t.preventDefault&&t.preventDefault(),!1)}const gs=new WeakMap;function tu(e,t=!1){const n=xe(t);let s=null,r="";Ie(ir(e),l=>{const c=ps(le(l));if(c){const f=c;if(gs.get(f)||gs.set(f,f.style.overflow),f.style.overflow!=="hidden"&&(r=f.style.overflow),f.style.overflow==="hidden")return n.value=!0;if(n.value)return f.style.overflow="hidden"}},{immediate:!0});const i=()=>{const l=ps(le(e));!l||n.value||(Zr&&(s=Je(l,"touchmove",c=>{ef(c)},{passive:!1})),l.style.overflow="hidden",n.value=!0)},o=()=>{const l=ps(le(e));!l||!n.value||(Zr&&(s==null||s()),l.style.overflow=r,gs.delete(l),n.value=!1)};return Io(o),re({get(){return n.value},set(l){l?i():o()}})}function nu(e,t,n={}){const{window:s=je}=n;return lr(e,t,s==null?void 0:s.sessionStorage,n)}function su(e={}){const{window:t=je,...n}=e;return Za(t,n)}function ru(e={}){const{window:t=je,initialWidth:n=Number.POSITIVE_INFINITY,initialHeight:s=Number.POSITIVE_INFINITY,listenOrientation:r=!0,includeScrollbar:i=!0,type:o="inner"}=e,l=xe(n),c=xe(s),f=()=>{if(t)if(o==="outer")l.value=t.outerWidth,c.value=t.outerHeight;else if(o==="visual"&&t.visualViewport){const{width:d,height:m,scale:v}=t.visualViewport;l.value=Math.round(d*v),c.value=Math.round(m*v)}else i?(l.value=t.innerWidth,c.value=t.innerHeight):(l.value=t.document.documentElement.clientWidth,c.value=t.document.documentElement.clientHeight)};f(),Yn(f);const a={passive:!0};if(Je("resize",f,a),t&&o==="visual"&&t.visualViewport&&Je(t.visualViewport,"resize",f,a),r){const d=$o("(orientation: portrait)");Ie(d,()=>f())}return{width:l,height:c}}const ms={};var vs={};const Uo=/^(?:[a-z]+:|\/\/)/i,tf="vitepress-theme-appearance",nf=/#.*$/,sf=/[?#].*$/,rf=/(?:(^|\/)index)?\.(?:md|html)$/,ge=typeof document<"u",Wo={relativePath:"404.md",filePath:"",title:"404",description:"Not Found",headers:[],frontmatter:{sidebar:!1,layout:"page"},lastUpdated:0,isNotFound:!0};function of(e,t,n=!1){if(t===void 0)return!1;if(e=si(`/${e}`),n)return new RegExp(t).test(e);if(si(t)!==e)return!1;const s=t.match(nf);return s?(ge?location.hash:"")===s[0]:!0}function si(e){return decodeURI(e).replace(sf,"").replace(rf,"$1")}function lf(e){return Uo.test(e)}function cf(e,t){return Object.keys((e==null?void 0:e.locales)||{}).find(n=>n!=="root"&&!lf(n)&&of(t,`/${n}/`,!0))||"root"}function af(e,t){var s,r,i,o,l,c,f;const n=cf(e,t);return Object.assign({},e,{localeIndex:n,lang:((s=e.locales[n])==null?void 0:s.lang)??e.lang,dir:((r=e.locales[n])==null?void 0:r.dir)??e.dir,title:((i=e.locales[n])==null?void 0:i.title)??e.title,titleTemplate:((o=e.locales[n])==null?void 0:o.titleTemplate)??e.titleTemplate,description:((l=e.locales[n])==null?void 0:l.description)??e.description,head:Ko(e.head,((c=e.locales[n])==null?void 0:c.head)??[]),themeConfig:{...e.themeConfig,...(f=e.locales[n])==null?void 0:f.themeConfig}})}function Bo(e,t){const n=t.title||e.title,s=t.titleTemplate??e.titleTemplate;if(typeof s=="string"&&s.includes(":title"))return s.replace(/:title/g,n);const r=ff(e.title,s);return n===r.slice(3)?n:`${n}${r}`}function ff(e,t){return t===!1?"":t===!0||t===void 0?` | ${e}`:e===t?"":` | ${t}`}function uf(e,t){const[n,s]=t;if(n!=="meta")return!1;const r=Object.entries(s)[0];return r==null?!1:e.some(([i,o])=>i===n&&o[r[0]]===r[1])}function Ko(e,t){return[...e.filter(n=>!uf(t,n)),...t]}const df=/[\u0000-\u001F"#$&*+,:;<=>?[\]^`{|}\u007F]/g,hf=/^[a-z]:/i;function ri(e){const t=hf.exec(e),n=t?t[0]:"";return n+e.slice(n.length).replace(df,"_").replace(/(^|\/)_+(?=[^/]*$)/,"$1")}const ys=new Set;function pf(e){if(ys.size===0){const n=typeof process=="object"&&(vs==null?void 0:vs.VITE_EXTRA_EXTENSIONS)||(ms==null?void 0:ms.VITE_EXTRA_EXTENSIONS)||"";("3g2,3gp,aac,ai,apng,au,avif,bin,bmp,cer,class,conf,crl,css,csv,dll,doc,eps,epub,exe,gif,gz,ics,ief,jar,jpe,jpeg,jpg,js,json,jsonld,m4a,man,mid,midi,mjs,mov,mp2,mp3,mp4,mpe,mpeg,mpg,mpp,oga,ogg,ogv,ogx,opus,otf,p10,p7c,p7m,p7s,pdf,png,ps,qt,roff,rtf,rtx,ser,svg,t,tif,tiff,tr,ts,tsv,ttf,txt,vtt,wav,weba,webm,webp,woff,woff2,xhtml,xml,yaml,yml,zip"+(n&&typeof n=="string"?","+n:"")).split(",").forEach(s=>ys.add(s))}const t=e.split(".").pop();return t==null||!ys.has(t.toLowerCase())}function iu(e){return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}const gf=Symbol(),wt=xe(zo);function ou(e){const t=re(()=>af(wt.value,e.data.relativePath)),n=t.value.appearance,s=n==="force-dark"?De(!0):n==="force-auto"?Vo():n?Qa({storageKey:tf,initialValue:()=>n==="dark"?"dark":"auto",...typeof n=="object"?n:{}}):De(!1),r=De(ge?location.hash:"");return ge&&window.addEventListener("hashchange",()=>{r.value=location.hash}),Ie(()=>e.data,()=>{r.value=ge?location.hash:""}),{site:t,theme:re(()=>t.value.themeConfig),page:re(()=>e.data),frontmatter:re(()=>e.data.frontmatter),params:re(()=>e.data.params),lang:re(()=>t.value.lang),dir:re(()=>e.data.frontmatter.dir||t.value.dir),localeIndex:re(()=>t.value.localeIndex||"root"),title:re(()=>Bo(t.value,e.data)),description:re(()=>e.data.description||t.value.description),isDark:s,hash:re(()=>r.value)}}function mf(){const e=bt(gf);if(!e)throw new Error("vitepress data not properly injected in app");return e}function vf(e,t){return`${e}${t}`.replace(/\/+/g,"/")}function ii(e){return Uo.test(e)||!e.startsWith("/")?e:vf(wt.value.base,e)}function yf(e){let t=e.replace(/\.html$/,"");if(t=decodeURIComponent(t),t=t.replace(/\/$/,"/index"),ge){const n="/";t=ri(t.slice(n.length).replace(/\//g,"_")||"index")+".md";let s=__VP_HASH_MAP__[t.toLowerCase()];if(s||(t=t.endsWith("_index.md")?t.slice(0,-9)+".md":t.slice(0,-3)+"_index.md",s=__VP_HASH_MAP__[t.toLowerCase()]),!s)return null;t=`${n}assets/${t}.${s}.js`}else t=`./${ri(t.slice(1).replace(/\//g,"_"))}.md.js`;return t}let Rn=[];function lu(e){Rn.push(e),Kn(()=>{Rn=Rn.filter(t=>t!==e)})}function bf(){let e=wt.value.scrollOffset,t=0,n=24;if(typeof e=="object"&&"padding"in e&&(n=e.padding,e=e.selector),typeof e=="number")t=e;else if(typeof e=="string")t=oi(e,n);else if(Array.isArray(e))for(const s of e){const r=oi(s,n);if(r){t=r;break}}return t}function oi(e,t){const n=document.querySelector(e);if(!n)return 0;const s=n.getBoundingClientRect().bottom;return s<0?0:s+t}const _f=Symbol(),qo="http://a.com",wf=()=>({path:"/",component:null,data:Wo});function cu(e,t){const n=It(wf()),s={route:n,go:r};async function r(l=ge?location.href:"/"){var c,f;l=bs(l),await((c=s.onBeforeRouteChange)==null?void 0:c.call(s,l))!==!1&&(ge&&l!==bs(location.href)&&(history.replaceState({scrollPosition:window.scrollY},""),history.pushState({},"",l)),await o(l),await((f=s.onAfterRouteChange??s.onAfterRouteChanged)==null?void 0:f(l)))}let i=null;async function o(l,c=0,f=!1){var m,v;if(await((m=s.onBeforePageLoad)==null?void 0:m.call(s,l))===!1)return;const a=new URL(l,qo),d=i=a.pathname;try{let _=await e(d);if(!_)throw new Error(`Page not found: ${d}`);if(i===d){i=null;const{default:b,__pageData:k}=_;if(!b)throw new Error(`Invalid route component: ${b}`);await((v=s.onAfterPageLoad)==null?void 0:v.call(s,l)),n.path=ge?d:ii(d),n.component=xn(b),n.data=xn(k),ge&&Wn(()=>{let P=wt.value.base+k.relativePath.replace(/(?:(^|\/)index)?\.md$/,"$1");if(!wt.value.cleanUrls&&!P.endsWith("/")&&(P+=".html"),P!==a.pathname&&(a.pathname=P,l=P+a.search+a.hash,history.replaceState({},"",l)),a.hash&&!c){let D=null;try{D=document.getElementById(decodeURIComponent(a.hash).slice(1))}catch(p){console.warn(p)}if(D){li(D,a.hash);return}}window.scrollTo(0,c)})}}catch(_){if(!/fetch|Page not found/.test(_.message)&&!/^\/404(\.html|\/)?$/.test(l)&&console.error(_),!f)try{const b=await fetch(wt.value.base+"hashmap.json");window.__VP_HASH_MAP__=await b.json(),await o(l,c,!0);return}catch{}if(i===d){i=null,n.path=ge?d:ii(d),n.component=t?xn(t):null;const b=ge?d.replace(/(^|\/)$/,"$1index").replace(/(\.html)?$/,".md").replace(/^\//,""):"404.md";n.data={...Wo,relativePath:b}}}}return ge&&(history.state===null&&history.replaceState({},""),window.addEventListener("click",l=>{if(l.defaultPrevented||!(l.target instanceof Element)||l.target.closest("button")||l.button!==0||l.ctrlKey||l.shiftKey||l.altKey||l.metaKey)return;const c=l.target.closest("a");if(!c||c.closest(".vp-raw")||c.hasAttribute("download")||c.hasAttribute("target"))return;const f=c.getAttribute("href")??(c instanceof SVGAElement?c.getAttribute("xlink:href"):null);if(f==null)return;const{href:a,origin:d,pathname:m,hash:v,search:_}=new URL(f,c.baseURI),b=new URL(location.href);d===b.origin&&pf(m)&&(l.preventDefault(),m===b.pathname&&_===b.search?(v!==b.hash&&(history.pushState({},"",a),window.dispatchEvent(new HashChangeEvent("hashchange",{oldURL:b.href,newURL:a}))),v?li(c,v,c.classList.contains("header-anchor")):window.scrollTo(0,0)):r(a))},{capture:!0}),window.addEventListener("popstate",async l=>{var f;if(l.state===null)return;const c=bs(location.href);await o(c,l.state&&l.state.scrollPosition||0),await((f=s.onAfterRouteChange??s.onAfterRouteChanged)==null?void 0:f(c))}),window.addEventListener("hashchange",l=>{l.preventDefault()})),s}function Sf(){const e=bt(_f);if(!e)throw new Error("useRouter() is called without provider.");return e}function Go(){return Sf().route}function li(e,t,n=!1){let s=null;try{s=e.classList.contains("header-anchor")?e:document.getElementById(decodeURIComponent(t).slice(1))}catch(r){console.warn(r)}if(s){let r=function(){!n||Math.abs(o-window.scrollY)>window.innerHeight?window.scrollTo(0,o):window.scrollTo({left:0,top:o,behavior:"smooth"})};const i=parseInt(window.getComputedStyle(s).paddingTop,10),o=window.scrollY+s.getBoundingClientRect().top-bf()+i;requestAnimationFrame(r)}}function bs(e){const t=new URL(e,qo);return t.pathname=t.pathname.replace(/(^|\/)index(\.html)?$/,"$1"),wt.value.cleanUrls?t.pathname=t.pathname.replace(/\.html$/,""):!t.pathname.endsWith("/")&&!t.pathname.endsWith(".html")&&(t.pathname+=".html"),t.pathname+t.search+t.hash}const _n=()=>Rn.forEach(e=>e()),au=Qs({name:"VitePressContent",props:{as:{type:[Object,String],default:"div"}},setup(e){const t=Go(),{frontmatter:n,site:s}=mf();return Ie(n,_n,{deep:!0,flush:"post"}),()=>Hs(e.as,s.value.contentProps??{style:{position:"relative"}},[t.component?Hs(t.component,{onVnodeMounted:_n,onVnodeUpdated:_n,onVnodeUnmounted:_n}):"404 Page Not Found"])}}),fu=(e,t)=>{const n=e.__vccOpts||e;for(const[s,r]of t)n[s]=r;return n},Tf="modulepreload",xf=function(e){return"/"+e},ci={},uu=function(t,n,s){let r=Promise.resolve();if(n&&n.length>0){document.getElementsByTagName("link");const o=document.querySelector("meta[property=csp-nonce]"),l=(o==null?void 0:o.nonce)||(o==null?void 0:o.getAttribute("nonce"));r=Promise.allSettled(n.map(c=>{if(c=xf(c),c in ci)return;ci[c]=!0;const f=c.endsWith(".css"),a=f?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${c}"]${a}`))return;const d=document.createElement("link");if(d.rel=f?"stylesheet":Tf,f||(d.as="script"),d.crossOrigin="",d.href=c,l&&d.setAttribute("nonce",l),document.head.appendChild(d),f)return new Promise((m,v)=>{d.addEventListener("load",m),d.addEventListener("error",()=>v(new Error(`Unable to preload CSS for ${c}`)))})}))}function i(o){const l=new Event("vite:preloadError",{cancelable:!0});if(l.payload=o,window.dispatchEvent(l),!l.defaultPrevented)throw o}return r.then(o=>{for(const l of o||[])l.status==="rejected"&&i(l.reason);return t().catch(i)})},du=Qs({setup(e,{slots:t}){const n=De(!1);return Ft(()=>{n.value=!0}),()=>n.value&&t.default?t.default():null}});function hu(){ge&&window.addEventListener("click",e=>{var n;const t=e.target;if(t.matches(".vp-code-group input")){const s=(n=t.parentElement)==null?void 0:n.parentElement;if(!s)return;const r=Array.from(s.querySelectorAll("input")).indexOf(t);if(r<0)return;const i=s.querySelector(".blocks");if(!i)return;const o=Array.from(i.children).find(f=>f.classList.contains("active"));if(!o)return;const l=i.children[r];if(!l||o===l)return;o.classList.remove("active"),l.classList.add("active");const c=s==null?void 0:s.querySelector(`label[for="${t.id}"]`);c==null||c.scrollIntoView({block:"nearest"})}})}function pu(){if(ge){const e=new WeakMap;window.addEventListener("click",t=>{var s;const n=t.target;if(n.matches('div[class*="language-"] > button.copy')){const r=n.parentElement,i=(s=n.nextElementSibling)==null?void 0:s.nextElementSibling;if(!r||!i)return;const o=/language-(shellscript|shell|bash|sh|zsh)/.test(r.className),l=[".vp-copy-ignore",".diff.remove"],c=i.cloneNode(!0);c.querySelectorAll(l.join(",")).forEach(a=>a.remove());let f=c.textContent||"";o&&(f=f.replace(/^ *(\$|>) /gm,"").trim()),Ef(f).then(()=>{n.classList.add("copied"),clearTimeout(e.get(n));const a=setTimeout(()=>{n.classList.remove("copied"),n.blur(),e.delete(n)},2e3);e.set(n,a)})}})}}async function Ef(e){try{return navigator.clipboard.writeText(e)}catch{const t=document.createElement("textarea"),n=document.activeElement;t.value=e,t.setAttribute("readonly",""),t.style.contain="strict",t.style.position="absolute",t.style.left="-9999px",t.style.fontSize="12pt";const s=document.getSelection(),r=s?s.rangeCount>0&&s.getRangeAt(0):null;document.body.appendChild(t),t.select(),t.selectionStart=0,t.selectionEnd=e.length,document.execCommand("copy"),document.body.removeChild(t),r&&(s.removeAllRanges(),s.addRange(r)),n&&n.focus()}}function gu(e,t){let n=!0,s=[];const r=i=>{if(n){n=!1,i.forEach(l=>{const c=_s(l);for(const f of document.head.children)if(f.isEqualNode(c)){s.push(f);return}});return}const o=i.map(_s);s.forEach((l,c)=>{const f=o.findIndex(a=>a==null?void 0:a.isEqualNode(l??null));f!==-1?delete o[f]:(l==null||l.remove(),delete s[c])}),o.forEach(l=>l&&document.head.appendChild(l)),s=[...s,...o].filter(Boolean)};nr(()=>{const i=e.data,o=t.value,l=i&&i.description,c=i&&i.frontmatter.head||[],f=Bo(o,i);f!==document.title&&(document.title=f);const a=l||o.description;let d=document.querySelector("meta[name=description]");d?d.getAttribute("content")!==a&&d.setAttribute("content",a):_s(["meta",{name:"description",content:a}]),r(Ko(o.head,Af(c)))})}function _s([e,t,n]){const s=document.createElement(e);for(const r in t)s.setAttribute(r,t[r]);return n&&(s.innerHTML=n),e==="script"&&t.async==null&&(s.async=!1),s}function Cf(e){return e[0]==="meta"&&e[1]&&e[1].name==="description"}function Af(e){return e.filter(t=>!Cf(t))}const ws=new Set,Xo=()=>document.createElement("link"),Rf=e=>{const t=Xo();t.rel="prefetch",t.href=e,document.head.appendChild(t)},Mf=e=>{const t=new XMLHttpRequest;t.open("GET",e,t.withCredentials=!0),t.send()};let wn;const Of=ge&&(wn=Xo())&&wn.relList&&wn.relList.supports&&wn.relList.supports("prefetch")?Rf:Mf;function mu(){if(!ge||!window.IntersectionObserver)return;let e;if((e=navigator.connection)&&(e.saveData||/2g/.test(e.effectiveType)))return;const t=window.requestIdleCallback||setTimeout;let n=null;const s=()=>{n&&n.disconnect(),n=new IntersectionObserver(i=>{i.forEach(o=>{if(o.isIntersecting){const l=o.target;n.unobserve(l);const{pathname:c}=l;if(!ws.has(c)){ws.add(c);const f=yf(c);f&&Of(f)}}})}),t(()=>{document.querySelectorAll("#app a").forEach(i=>{const{hostname:o,pathname:l}=new URL(i.href instanceof SVGAnimatedString?i.href.animVal:i.href,i.baseURI),c=l.match(/\.\w+$/);c&&c[0]!==".html"||i.target!=="_blank"&&o===location.hostname&&(l!==location.pathname?n.observe(i):ws.add(l))})})};Ft(s);const r=Go();Ie(()=>r.path,s),Kn(()=>{n&&n.disconnect()})}export{Xi as $,Hf as A,xe as B,lu as C,ce as D,Df as E,Te as F,Uo as G,Ff as H,xo as I,Go as J,Bc as K,bt as L,ru as M,Us as N,Zf as O,Wn as P,su as Q,ge as R,Un as S,Bf as T,If as U,uu as V,tu as W,Tc as X,$f as Y,Gf as Z,fu as _,kf as a,qf as a0,jf as a1,It as a2,gu as a3,_f as a4,ou as a5,gf as a6,au as a7,du as a8,wt as a9,cu as aa,yf as ab,Yf as ac,mu as ad,pu as ae,hu as af,Hs as ag,Uf as ah,le as ai,hs as aj,or as ak,Jf as al,Io as am,Qf as an,nu as ao,eu as ap,zf as aq,Sf as ar,Je as as,Pf as at,Kf as au,fe as av,Lf as aw,xn as ax,Xf as ay,iu as az,Wf as b,Ns as c,Qs as d,ii as e,re as f,To as g,fl as h,lf as i,Js as j,of as k,$o as l,Ie as m,nr as n,Is as o,Ft as p,Kn as q,De as r,Vf as s,pf as t,mf as u,ac as v,Xl as w,bf as x,Nf as y,Ws as z}; diff --git a/.vitepress/dist/assets/chunks/framework.BjhQB2K5.js b/.vitepress/dist/assets/chunks/framework.BjhQB2K5.js deleted file mode 100644 index a7deaef..0000000 --- a/.vitepress/dist/assets/chunks/framework.BjhQB2K5.js +++ /dev/null @@ -1,17 +0,0 @@ -const $i=window.__VP_SITE_DATA__;/** -* @vue/shared v3.4.31 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**//*! #__NO_SIDE_EFFECTS__ */function Tr(e,t){const n=new Set(e.split(","));return r=>n.has(r)}const re={},bt=[],xe=()=>{},ji=()=>!1,Kt=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),xr=e=>e.startsWith("onUpdate:"),fe=Object.assign,Ar=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Vi=Object.prototype.hasOwnProperty,Y=(e,t)=>Vi.call(e,t),K=Array.isArray,wt=e=>On(e)==="[object Map]",to=e=>On(e)==="[object Set]",q=e=>typeof e=="function",oe=e=>typeof e=="string",nt=e=>typeof e=="symbol",ee=e=>e!==null&&typeof e=="object",no=e=>(ee(e)||q(e))&&q(e.then)&&q(e.catch),ro=Object.prototype.toString,On=e=>ro.call(e),Di=e=>On(e).slice(8,-1),so=e=>On(e)==="[object Object]",Rr=e=>oe(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,Et=Tr(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Ln=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},Ui=/-(\w)/g,je=Ln(e=>e.replace(Ui,(t,n)=>n?n.toUpperCase():"")),ki=/\B([A-Z])/g,gt=Ln(e=>e.replace(ki,"-$1").toLowerCase()),In=Ln(e=>e.charAt(0).toUpperCase()+e.slice(1)),pn=Ln(e=>e?`on${In(e)}`:""),Ze=(e,t)=>!Object.is(e,t),gn=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:r,value:n})},dr=e=>{const t=parseFloat(e);return isNaN(t)?e:t},Bi=e=>{const t=oe(e)?Number(e):NaN;return isNaN(t)?e:t};let ts;const io=()=>ts||(ts=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Or(e){if(K(e)){const t={};for(let n=0;n{if(n){const r=n.split(Ki);r.length>1&&(t[r[0].trim()]=r[1].trim())}}),t}function Lr(e){let t="";if(oe(e))t=e;else if(K(e))for(let n=0;n!!(e&&e.__v_isRef===!0),Yi=e=>oe(e)?e:e==null?"":K(e)||ee(e)&&(e.toString===ro||!q(e.toString))?co(e)?Yi(e.value):JSON.stringify(e,ao,2):String(e),ao=(e,t)=>co(t)?ao(e,t.value):wt(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[r,s],o)=>(n[qn(r,o)+" =>"]=s,n),{})}:to(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>qn(n))}:nt(t)?qn(t):ee(t)&&!K(t)&&!so(t)?String(t):t,qn=(e,t="")=>{var n;return nt(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};/** -* @vue/reactivity v3.4.31 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/let Ee;class Ji{constructor(t=!1){this.detached=t,this._active=!0,this.effects=[],this.cleanups=[],this.parent=Ee,!t&&Ee&&(this.index=(Ee.scopes||(Ee.scopes=[])).push(this)-1)}get active(){return this._active}run(t){if(this._active){const n=Ee;try{return Ee=this,t()}finally{Ee=n}}}on(){Ee=this}off(){Ee=this.parent}stop(t){if(this._active){let n,r;for(n=0,r=this.effects.length;n=4))break}this._dirtyLevel===1&&(this._dirtyLevel=0),st()}return this._dirtyLevel>=4}set dirty(t){this._dirtyLevel=t?4:0}run(){if(this._dirtyLevel=0,!this.active)return this.fn();let t=Je,n=ft;try{return Je=!0,ft=this,this._runnings++,ns(this),this.fn()}finally{rs(this),this._runnings--,ft=n,Je=t}}stop(){this.active&&(ns(this),rs(this),this.onStop&&this.onStop(),this.active=!1)}}function el(e){return e.value}function ns(e){e._trackId++,e._depsLength=0}function rs(e){if(e.deps.length>e._depsLength){for(let t=e._depsLength;t{const n=new Map;return n.cleanup=e,n.computed=t,n},bn=new WeakMap,dt=Symbol(""),gr=Symbol("");function be(e,t,n){if(Je&&ft){let r=bn.get(e);r||bn.set(e,r=new Map);let s=r.get(n);s||r.set(n,s=mo(()=>r.delete(n))),po(ft,s)}}function Ue(e,t,n,r,s,o){const i=bn.get(e);if(!i)return;let l=[];if(t==="clear")l=[...i.values()];else if(n==="length"&&K(e)){const c=Number(r);i.forEach((a,f)=>{(f==="length"||!nt(f)&&f>=c)&&l.push(a)})}else switch(n!==void 0&&l.push(i.get(n)),t){case"add":K(e)?Rr(n)&&l.push(i.get("length")):(l.push(i.get(dt)),wt(e)&&l.push(i.get(gr)));break;case"delete":K(e)||(l.push(i.get(dt)),wt(e)&&l.push(i.get(gr)));break;case"set":wt(e)&&l.push(i.get(dt));break}Mr();for(const c of l)c&&go(c,4);Pr()}function tl(e,t){const n=bn.get(e);return n&&n.get(t)}const nl=Tr("__proto__,__v_isRef,__isVue"),yo=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(nt)),ss=rl();function rl(){const e={};return["includes","indexOf","lastIndexOf"].forEach(t=>{e[t]=function(...n){const r=J(this);for(let o=0,i=this.length;o{e[t]=function(...n){rt(),Mr();const r=J(this)[t].apply(this,n);return Pr(),st(),r}}),e}function sl(e){nt(e)||(e=String(e));const t=J(this);return be(t,"has",e),t.hasOwnProperty(e)}class vo{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,r){const s=this._isReadonly,o=this._isShallow;if(n==="__v_isReactive")return!s;if(n==="__v_isReadonly")return s;if(n==="__v_isShallow")return o;if(n==="__v_raw")return r===(s?o?yl:Eo:o?wo:bo).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(r)?t:void 0;const i=K(t);if(!s){if(i&&Y(ss,n))return Reflect.get(ss,n,r);if(n==="hasOwnProperty")return sl}const l=Reflect.get(t,n,r);return(nt(n)?yo.has(n):nl(n))||(s||be(t,"get",n),o)?l:de(l)?i&&Rr(n)?l:l.value:ee(l)?s?Pn(l):xt(l):l}}class _o extends vo{constructor(t=!1){super(!1,t)}set(t,n,r,s){let o=t[n];if(!this._isShallow){const c=Vt(o);if(!wn(r)&&!Vt(r)&&(o=J(o),r=J(r)),!K(t)&&de(o)&&!de(r))return c?!1:(o.value=r,!0)}const i=K(t)&&Rr(n)?Number(n)e,Mn=e=>Reflect.getPrototypeOf(e);function Zt(e,t,n=!1,r=!1){e=e.__v_raw;const s=J(e),o=J(t);n||(Ze(t,o)&&be(s,"get",t),be(s,"get",o));const{has:i}=Mn(s),l=r?Nr:n?$r:Dt;if(i.call(s,t))return l(e.get(t));if(i.call(s,o))return l(e.get(o));e!==s&&e.get(t)}function en(e,t=!1){const n=this.__v_raw,r=J(n),s=J(e);return t||(Ze(e,s)&&be(r,"has",e),be(r,"has",s)),e===s?n.has(e):n.has(e)||n.has(s)}function tn(e,t=!1){return e=e.__v_raw,!t&&be(J(e),"iterate",dt),Reflect.get(e,"size",e)}function os(e){e=J(e);const t=J(this);return Mn(t).has.call(t,e)||(t.add(e),Ue(t,"add",e,e)),this}function is(e,t){t=J(t);const n=J(this),{has:r,get:s}=Mn(n);let o=r.call(n,e);o||(e=J(e),o=r.call(n,e));const i=s.call(n,e);return n.set(e,t),o?Ze(t,i)&&Ue(n,"set",e,t):Ue(n,"add",e,t),this}function ls(e){const t=J(this),{has:n,get:r}=Mn(t);let s=n.call(t,e);s||(e=J(e),s=n.call(t,e)),r&&r.call(t,e);const o=t.delete(e);return s&&Ue(t,"delete",e,void 0),o}function cs(){const e=J(this),t=e.size!==0,n=e.clear();return t&&Ue(e,"clear",void 0,void 0),n}function nn(e,t){return function(r,s){const o=this,i=o.__v_raw,l=J(i),c=t?Nr:e?$r:Dt;return!e&&be(l,"iterate",dt),i.forEach((a,f)=>r.call(s,c(a),c(f),o))}}function rn(e,t,n){return function(...r){const s=this.__v_raw,o=J(s),i=wt(o),l=e==="entries"||e===Symbol.iterator&&i,c=e==="keys"&&i,a=s[e](...r),f=n?Nr:t?$r:Dt;return!t&&be(o,"iterate",c?gr:dt),{next(){const{value:h,done:p}=a.next();return p?{value:h,done:p}:{value:l?[f(h[0]),f(h[1])]:f(h),done:p}},[Symbol.iterator](){return this}}}}function We(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function al(){const e={get(o){return Zt(this,o)},get size(){return tn(this)},has:en,add:os,set:is,delete:ls,clear:cs,forEach:nn(!1,!1)},t={get(o){return Zt(this,o,!1,!0)},get size(){return tn(this)},has:en,add:os,set:is,delete:ls,clear:cs,forEach:nn(!1,!0)},n={get(o){return Zt(this,o,!0)},get size(){return tn(this,!0)},has(o){return en.call(this,o,!0)},add:We("add"),set:We("set"),delete:We("delete"),clear:We("clear"),forEach:nn(!0,!1)},r={get(o){return Zt(this,o,!0,!0)},get size(){return tn(this,!0)},has(o){return en.call(this,o,!0)},add:We("add"),set:We("set"),delete:We("delete"),clear:We("clear"),forEach:nn(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(o=>{e[o]=rn(o,!1,!1),n[o]=rn(o,!0,!1),t[o]=rn(o,!1,!0),r[o]=rn(o,!0,!0)}),[e,n,t,r]}const[ul,fl,dl,hl]=al();function Fr(e,t){const n=t?e?hl:dl:e?fl:ul;return(r,s,o)=>s==="__v_isReactive"?!e:s==="__v_isReadonly"?e:s==="__v_raw"?r:Reflect.get(Y(n,s)&&s in r?n:r,s,o)}const pl={get:Fr(!1,!1)},gl={get:Fr(!1,!0)},ml={get:Fr(!0,!1)};const bo=new WeakMap,wo=new WeakMap,Eo=new WeakMap,yl=new WeakMap;function vl(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function _l(e){return e.__v_skip||!Object.isExtensible(e)?0:vl(Di(e))}function xt(e){return Vt(e)?e:Hr(e,!1,il,pl,bo)}function bl(e){return Hr(e,!1,cl,gl,wo)}function Pn(e){return Hr(e,!0,ll,ml,Eo)}function Hr(e,t,n,r,s){if(!ee(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const o=s.get(e);if(o)return o;const i=_l(e);if(i===0)return e;const l=new Proxy(e,i===2?r:n);return s.set(e,l),l}function Mt(e){return Vt(e)?Mt(e.__v_raw):!!(e&&e.__v_isReactive)}function Vt(e){return!!(e&&e.__v_isReadonly)}function wn(e){return!!(e&&e.__v_isShallow)}function So(e){return e?!!e.__v_raw:!1}function J(e){const t=e&&e.__v_raw;return t?J(t):e}function mn(e){return Object.isExtensible(e)&&oo(e,"__v_skip",!0),e}const Dt=e=>ee(e)?xt(e):e,$r=e=>ee(e)?Pn(e):e;class Co{constructor(t,n,r,s){this.getter=t,this._setter=n,this.dep=void 0,this.__v_isRef=!0,this.__v_isReadonly=!1,this.effect=new Ir(()=>t(this._value),()=>Pt(this,this.effect._dirtyLevel===2?2:3)),this.effect.computed=this,this.effect.active=this._cacheable=!s,this.__v_isReadonly=r}get value(){const t=J(this);return(!t._cacheable||t.effect.dirty)&&Ze(t._value,t._value=t.effect.run())&&Pt(t,4),jr(t),t.effect._dirtyLevel>=2&&Pt(t,2),t._value}set value(t){this._setter(t)}get _dirty(){return this.effect.dirty}set _dirty(t){this.effect.dirty=t}}function wl(e,t,n=!1){let r,s;const o=q(e);return o?(r=e,s=xe):(r=e.get,s=e.set),new Co(r,s,o||!s,n)}function jr(e){var t;Je&&ft&&(e=J(e),po(ft,(t=e.dep)!=null?t:e.dep=mo(()=>e.dep=void 0,e instanceof Co?e:void 0)))}function Pt(e,t=4,n,r){e=J(e);const s=e.dep;s&&go(s,t)}function de(e){return!!(e&&e.__v_isRef===!0)}function Me(e){return To(e,!1)}function _e(e){return To(e,!0)}function To(e,t){return de(e)?e:new El(e,t)}class El{constructor(t,n){this.__v_isShallow=n,this.dep=void 0,this.__v_isRef=!0,this._rawValue=n?t:J(t),this._value=n?t:Dt(t)}get value(){return jr(this),this._value}set value(t){const n=this.__v_isShallow||wn(t)||Vt(t);t=n?t:J(t),Ze(t,this._rawValue)&&(this._rawValue,this._rawValue=t,this._value=n?t:Dt(t),Pt(this,4))}}function Vr(e){return de(e)?e.value:e}function ie(e){return q(e)?e():Vr(e)}const Sl={get:(e,t,n)=>Vr(Reflect.get(e,t,n)),set:(e,t,n,r)=>{const s=e[t];return de(s)&&!de(n)?(s.value=n,!0):Reflect.set(e,t,n,r)}};function xo(e){return Mt(e)?e:new Proxy(e,Sl)}class Cl{constructor(t){this.dep=void 0,this.__v_isRef=!0;const{get:n,set:r}=t(()=>jr(this),()=>Pt(this));this._get=n,this._set=r}get value(){return this._get()}set value(t){this._set(t)}}function Tl(e){return new Cl(e)}class xl{constructor(t,n,r){this._object=t,this._key=n,this._defaultValue=r,this.__v_isRef=!0}get value(){const t=this._object[this._key];return t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}get dep(){return tl(J(this._object),this._key)}}class Al{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0}get value(){return this._getter()}}function Rl(e,t,n){return de(e)?e:q(e)?new Al(e):ee(e)&&arguments.length>1?Ol(e,t,n):Me(e)}function Ol(e,t,n){const r=e[t];return de(r)?r:new xl(e,t,n)}/** -* @vue/runtime-core v3.4.31 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/function Qe(e,t,n,r){try{return r?e(...r):e()}catch(s){qt(s,t,n)}}function Ae(e,t,n,r){if(q(e)){const s=Qe(e,t,n,r);return s&&no(s)&&s.catch(o=>{qt(o,t,n)}),s}if(K(e)){const s=[];for(let o=0;o>>1,s=pe[r],o=kt(s);o$e&&pe.splice(t,1)}function Pl(e){K(e)?St.push(...e):(!Ge||!Ge.includes(e,e.allowRecurse?at+1:at))&&St.push(e),Ro()}function as(e,t,n=Ut?$e+1:0){for(;nkt(n)-kt(r));if(St.length=0,Ge){Ge.push(...t);return}for(Ge=t,at=0;ate.id==null?1/0:e.id,Nl=(e,t)=>{const n=kt(e)-kt(t);if(n===0){if(e.pre&&!t.pre)return-1;if(t.pre&&!e.pre)return 1}return n};function Oo(e){mr=!1,Ut=!0,pe.sort(Nl);try{for($e=0;$eoe(y)?y.trim():y)),h&&(s=n.map(dr))}let l,c=r[l=pn(t)]||r[l=pn(je(t))];!c&&o&&(c=r[l=pn(gt(t))]),c&&Ae(c,e,6,s);const a=r[l+"Once"];if(a){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,Ae(a,e,6,s)}}function Lo(e,t,n=!1){const r=t.emitsCache,s=r.get(e);if(s!==void 0)return s;const o=e.emits;let i={},l=!1;if(!q(e)){const c=a=>{const f=Lo(a,t,!0);f&&(l=!0,fe(i,f))};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}return!o&&!l?(ee(e)&&r.set(e,null),null):(K(o)?o.forEach(c=>i[c]=null):fe(i,o),ee(e)&&r.set(e,i),i)}function Hn(e,t){return!e||!Kt(t)?!1:(t=t.slice(2).replace(/Once$/,""),Y(e,t[0].toLowerCase()+t.slice(1))||Y(e,gt(t))||Y(e,t))}let ae=null,$n=null;function Sn(e){const t=ae;return ae=e,$n=e&&e.type.__scopeId||null,t}function yu(e){$n=e}function vu(){$n=null}function Hl(e,t=ae,n){if(!t||e._n)return e;const r=(...s)=>{r._d&&Ts(-1);const o=Sn(t);let i;try{i=e(...s)}finally{Sn(o),r._d&&Ts(1)}return i};return r._n=!0,r._c=!0,r._d=!0,r}function Gn(e){const{type:t,vnode:n,proxy:r,withProxy:s,propsOptions:[o],slots:i,attrs:l,emit:c,render:a,renderCache:f,props:h,data:p,setupState:y,ctx:E,inheritAttrs:R}=e,k=Sn(e);let $,j;try{if(n.shapeFlag&4){const v=s||r,N=v;$=Le(a.call(N,v,f,h,y,p,E)),j=l}else{const v=t;$=Le(v.length>1?v(h,{attrs:l,slots:i,emit:c}):v(h,null)),j=t.props?l:$l(l)}}catch(v){$t.length=0,qt(v,e,1),$=le(me)}let g=$;if(j&&R!==!1){const v=Object.keys(j),{shapeFlag:N}=g;v.length&&N&7&&(o&&v.some(xr)&&(j=jl(j,o)),g=et(g,j,!1,!0))}return n.dirs&&(g=et(g,null,!1,!0),g.dirs=g.dirs?g.dirs.concat(n.dirs):n.dirs),n.transition&&(g.transition=n.transition),$=g,Sn(k),$}const $l=e=>{let t;for(const n in e)(n==="class"||n==="style"||Kt(n))&&((t||(t={}))[n]=e[n]);return t},jl=(e,t)=>{const n={};for(const r in e)(!xr(r)||!(r.slice(9)in t))&&(n[r]=e[r]);return n};function Vl(e,t,n){const{props:r,children:s,component:o}=e,{props:i,children:l,patchFlag:c}=t,a=o.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&c>=0){if(c&1024)return!0;if(c&16)return r?us(r,i,a):!!i;if(c&8){const f=t.dynamicProps;for(let h=0;he.__isSuspense;function No(e,t){t&&t.pendingBranch?K(e)?t.effects.push(...e):t.effects.push(e):Pl(e)}function jn(e,t,n=ce,r=!1){if(n){const s=n[e]||(n[e]=[]),o=t.__weh||(t.__weh=(...i)=>{rt();const l=Xt(n),c=Ae(t,n,e,i);return l(),st(),c});return r?s.unshift(o):s.push(o),o}}const Be=e=>(t,n=ce)=>{(!Yt||e==="sp")&&jn(e,(...r)=>t(...r),n)},kl=Be("bm"),Rt=Be("m"),Bl=Be("bu"),Wl=Be("u"),Fo=Be("bum"),Vn=Be("um"),Kl=Be("sp"),ql=Be("rtg"),Gl=Be("rtc");function zl(e,t=ce){jn("ec",e,t)}function wu(e,t){if(ae===null)return e;const n=Un(ae),r=e.dirs||(e.dirs=[]);for(let s=0;st(i,l,void 0,o));else{const i=Object.keys(e);s=new Array(i.length);for(let l=0,c=i.length;l!!e.type.__asyncLoader;/*! #__NO_SIDE_EFFECTS__ */function Su(e){q(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:r,delay:s=200,timeout:o,suspensible:i=!0,onError:l}=e;let c=null,a,f=0;const h=()=>(f++,c=null,p()),p=()=>{let y;return c||(y=c=t().catch(E=>{if(E=E instanceof Error?E:new Error(String(E)),l)return new Promise((R,k)=>{l(E,()=>R(h()),()=>k(E),f+1)});throw E}).then(E=>y!==c&&c?c:(E&&(E.__esModule||E[Symbol.toStringTag]==="Module")&&(E=E.default),a=E,E)))};return Ur({name:"AsyncComponentWrapper",__asyncLoader:p,get __asyncResolved(){return a},setup(){const y=ce;if(a)return()=>zn(a,y);const E=j=>{c=null,qt(j,y,13,!r)};if(i&&y.suspense||Yt)return p().then(j=>()=>zn(j,y)).catch(j=>(E(j),()=>r?le(r,{error:j}):null));const R=Me(!1),k=Me(),$=Me(!!s);return s&&setTimeout(()=>{$.value=!1},s),o!=null&&setTimeout(()=>{if(!R.value&&!k.value){const j=new Error(`Async component timed out after ${o}ms.`);E(j),k.value=j}},o),p().then(()=>{R.value=!0,y.parent&&Gt(y.parent.vnode)&&(y.parent.effect.dirty=!0,Fn(y.parent.update))}).catch(j=>{E(j),k.value=j}),()=>{if(R.value&&a)return zn(a,y);if(k.value&&r)return le(r,{error:k.value});if(n&&!$.value)return le(n)}}})}function zn(e,t){const{ref:n,props:r,children:s,ce:o}=t.vnode,i=le(e,r,s);return i.ref=n,i.ce=o,delete t.vnode.ce,i}function Cu(e,t,n={},r,s){if(ae.isCE||ae.parent&&Ct(ae.parent)&&ae.parent.isCE)return t!=="default"&&(n.name=t),le("slot",n,r&&r());let o=e[t];o&&o._c&&(o._d=!1),oi();const i=o&&Ho(o(n)),l=li(ve,{key:n.key||i&&i.key||`_${t}`},i||(r?r():[]),i&&e._===1?64:-2);return!s&&l.scopeId&&(l.slotScopeIds=[l.scopeId+"-s"]),o&&o._c&&(o._d=!0),l}function Ho(e){return e.some(t=>An(t)?!(t.type===me||t.type===ve&&!Ho(t.children)):!0)?e:null}function Tu(e,t){const n={};for(const r in e)n[/[A-Z]/.test(r)?`on:${r}`:pn(r)]=e[r];return n}const yr=e=>e?fi(e)?Un(e):yr(e.parent):null,Nt=fe(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>yr(e.parent),$root:e=>yr(e.root),$emit:e=>e.emit,$options:e=>jo(e),$forceUpdate:e=>e.f||(e.f=()=>{e.effect.dirty=!0,Fn(e.update)}),$nextTick:e=>e.n||(e.n=Nn.bind(e.proxy)),$watch:e=>vc.bind(e)}),Xn=(e,t)=>e!==re&&!e.__isScriptSetup&&Y(e,t),Xl={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:r,data:s,props:o,accessCache:i,type:l,appContext:c}=e;let a;if(t[0]!=="$"){const y=i[t];if(y!==void 0)switch(y){case 1:return r[t];case 2:return s[t];case 4:return n[t];case 3:return o[t]}else{if(Xn(r,t))return i[t]=1,r[t];if(s!==re&&Y(s,t))return i[t]=2,s[t];if((a=e.propsOptions[0])&&Y(a,t))return i[t]=3,o[t];if(n!==re&&Y(n,t))return i[t]=4,n[t];vr&&(i[t]=0)}}const f=Nt[t];let h,p;if(f)return t==="$attrs"&&be(e.attrs,"get",""),f(e);if((h=l.__cssModules)&&(h=h[t]))return h;if(n!==re&&Y(n,t))return i[t]=4,n[t];if(p=c.config.globalProperties,Y(p,t))return p[t]},set({_:e},t,n){const{data:r,setupState:s,ctx:o}=e;return Xn(s,t)?(s[t]=n,!0):r!==re&&Y(r,t)?(r[t]=n,!0):Y(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(o[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:r,appContext:s,propsOptions:o}},i){let l;return!!n[i]||e!==re&&Y(e,i)||Xn(t,i)||(l=o[0])&&Y(l,i)||Y(r,i)||Y(Nt,i)||Y(s.config.globalProperties,i)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:Y(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function xu(){return Yl().slots}function Yl(){const e=zt();return e.setupContext||(e.setupContext=hi(e))}function ds(e){return K(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let vr=!0;function Jl(e){const t=jo(e),n=e.proxy,r=e.ctx;vr=!1,t.beforeCreate&&hs(t.beforeCreate,e,"bc");const{data:s,computed:o,methods:i,watch:l,provide:c,inject:a,created:f,beforeMount:h,mounted:p,beforeUpdate:y,updated:E,activated:R,deactivated:k,beforeDestroy:$,beforeUnmount:j,destroyed:g,unmounted:v,render:N,renderTracked:O,renderTriggered:T,errorCaptured:V,serverPrefetch:C,expose:M,inheritAttrs:x,components:w,directives:F,filters:Q}=t;if(a&&Ql(a,r,null),i)for(const G in i){const D=i[G];q(D)&&(r[G]=D.bind(n))}if(s){const G=s.call(n,n);ee(G)&&(e.data=xt(G))}if(vr=!0,o)for(const G in o){const D=o[G],Se=q(D)?D.bind(n,n):q(D.get)?D.get.bind(n,n):xe,Jt=!q(D)&&q(D.set)?D.set.bind(n):xe,ot=ne({get:Se,set:Jt});Object.defineProperty(r,G,{enumerable:!0,configurable:!0,get:()=>ot.value,set:Ne=>ot.value=Ne})}if(l)for(const G in l)$o(l[G],r,n,G);if(c){const G=q(c)?c.call(n):c;Reflect.ownKeys(G).forEach(D=>{sc(D,G[D])})}f&&hs(f,e,"c");function U(G,D){K(D)?D.forEach(Se=>G(Se.bind(n))):D&&G(D.bind(n))}if(U(kl,h),U(Rt,p),U(Bl,y),U(Wl,E),U(_c,R),U(bc,k),U(zl,V),U(Gl,O),U(ql,T),U(Fo,j),U(Vn,v),U(Kl,C),K(M))if(M.length){const G=e.exposed||(e.exposed={});M.forEach(D=>{Object.defineProperty(G,D,{get:()=>n[D],set:Se=>n[D]=Se})})}else e.exposed||(e.exposed={});N&&e.render===xe&&(e.render=N),x!=null&&(e.inheritAttrs=x),w&&(e.components=w),F&&(e.directives=F)}function Ql(e,t,n=xe){K(e)&&(e=_r(e));for(const r in e){const s=e[r];let o;ee(s)?"default"in s?o=ht(s.from||r,s.default,!0):o=ht(s.from||r):o=ht(s),de(o)?Object.defineProperty(t,r,{enumerable:!0,configurable:!0,get:()=>o.value,set:i=>o.value=i}):t[r]=o}}function hs(e,t,n){Ae(K(e)?e.map(r=>r.bind(t.proxy)):e.bind(t.proxy),t,n)}function $o(e,t,n,r){const s=r.includes(".")?Qo(n,r):()=>n[r];if(oe(e)){const o=t[e];q(o)&&Re(s,o)}else if(q(e))Re(s,e.bind(n));else if(ee(e))if(K(e))e.forEach(o=>$o(o,t,n,r));else{const o=q(e.handler)?e.handler.bind(n):t[e.handler];q(o)&&Re(s,o,e)}}function jo(e){const t=e.type,{mixins:n,extends:r}=t,{mixins:s,optionsCache:o,config:{optionMergeStrategies:i}}=e.appContext,l=o.get(t);let c;return l?c=l:!s.length&&!n&&!r?c=t:(c={},s.length&&s.forEach(a=>Cn(c,a,i,!0)),Cn(c,t,i)),ee(t)&&o.set(t,c),c}function Cn(e,t,n,r=!1){const{mixins:s,extends:o}=t;o&&Cn(e,o,n,!0),s&&s.forEach(i=>Cn(e,i,n,!0));for(const i in t)if(!(r&&i==="expose")){const l=Zl[i]||n&&n[i];e[i]=l?l(e[i],t[i]):t[i]}return e}const Zl={data:ps,props:gs,emits:gs,methods:It,computed:It,beforeCreate:ge,created:ge,beforeMount:ge,mounted:ge,beforeUpdate:ge,updated:ge,beforeDestroy:ge,beforeUnmount:ge,destroyed:ge,unmounted:ge,activated:ge,deactivated:ge,errorCaptured:ge,serverPrefetch:ge,components:It,directives:It,watch:tc,provide:ps,inject:ec};function ps(e,t){return t?e?function(){return fe(q(e)?e.call(this,this):e,q(t)?t.call(this,this):t)}:t:e}function ec(e,t){return It(_r(e),_r(t))}function _r(e){if(K(e)){const t={};for(let n=0;n1)return n&&q(t)?t.call(r&&r.proxy):t}}function Do(){return!!(ce||ae||Tt)}const Uo={},ko=()=>Object.create(Uo),Bo=e=>Object.getPrototypeOf(e)===Uo;function oc(e,t,n,r=!1){const s={},o=ko();e.propsDefaults=Object.create(null),Wo(e,t,s,o);for(const i in e.propsOptions[0])i in s||(s[i]=void 0);n?e.props=r?s:bl(s):e.type.props?e.props=s:e.props=o,e.attrs=o}function ic(e,t,n,r){const{props:s,attrs:o,vnode:{patchFlag:i}}=e,l=J(s),[c]=e.propsOptions;let a=!1;if((r||i>0)&&!(i&16)){if(i&8){const f=e.vnode.dynamicProps;for(let h=0;h{c=!0;const[p,y]=Ko(h,t,!0);fe(i,p),y&&l.push(...y)};!n&&t.mixins.length&&t.mixins.forEach(f),e.extends&&f(e.extends),e.mixins&&e.mixins.forEach(f)}if(!o&&!c)return ee(e)&&r.set(e,bt),bt;if(K(o))for(let f=0;f-1,y[1]=R<0||E-1||Y(y,"default"))&&l.push(h)}}}const a=[i,l];return ee(e)&&r.set(e,a),a}function ms(e){return e[0]!=="$"&&!Et(e)}function ys(e){return e===null?"null":typeof e=="function"?e.name||"":typeof e=="object"&&e.constructor&&e.constructor.name||""}function vs(e,t){return ys(e)===ys(t)}function _s(e,t){return K(t)?t.findIndex(n=>vs(n,e)):q(t)&&vs(t,e)?0:-1}const qo=e=>e[0]==="_"||e==="$stable",kr=e=>K(e)?e.map(Le):[Le(e)],lc=(e,t,n)=>{if(t._n)return t;const r=Hl((...s)=>kr(t(...s)),n);return r._c=!1,r},Go=(e,t,n)=>{const r=e._ctx;for(const s in e){if(qo(s))continue;const o=e[s];if(q(o))t[s]=lc(s,o,r);else if(o!=null){const i=kr(o);t[s]=()=>i}}},zo=(e,t)=>{const n=kr(t);e.slots.default=()=>n},cc=(e,t)=>{const n=e.slots=ko();if(e.vnode.shapeFlag&32){const r=t._;r?(fe(n,t),oo(n,"_",r,!0)):Go(t,n)}else t&&zo(e,t)},ac=(e,t,n)=>{const{vnode:r,slots:s}=e;let o=!0,i=re;if(r.shapeFlag&32){const l=t._;l?n&&l===1?o=!1:(fe(s,t),!n&&l===1&&delete s._):(o=!t.$stable,Go(t,s)),i=t}else t&&(zo(e,t),i={default:1});if(o)for(const l in s)!qo(l)&&i[l]==null&&delete s[l]};function Tn(e,t,n,r,s=!1){if(K(e)){e.forEach((p,y)=>Tn(p,t&&(K(t)?t[y]:t),n,r,s));return}if(Ct(r)&&!s)return;const o=r.shapeFlag&4?Un(r.component):r.el,i=s?null:o,{i:l,r:c}=e,a=t&&t.r,f=l.refs===re?l.refs={}:l.refs,h=l.setupState;if(a!=null&&a!==c&&(oe(a)?(f[a]=null,Y(h,a)&&(h[a]=null)):de(a)&&(a.value=null)),q(c))Qe(c,l,12,[i,f]);else{const p=oe(c),y=de(c);if(p||y){const E=()=>{if(e.f){const R=p?Y(h,c)?h[c]:f[c]:c.value;s?K(R)&&Ar(R,o):K(R)?R.includes(o)||R.push(o):p?(f[c]=[o],Y(h,c)&&(h[c]=f[c])):(c.value=[o],e.k&&(f[e.k]=c.value))}else p?(f[c]=i,Y(h,c)&&(h[c]=i)):y&&(c.value=i,e.k&&(f[e.k]=i))};i?(E.id=-1,ye(E,n)):E()}}}let bs=!1;const vt=()=>{bs||(console.error("Hydration completed but contains mismatches."),bs=!0)},uc=e=>e.namespaceURI.includes("svg")&&e.tagName!=="foreignObject",fc=e=>e.namespaceURI.includes("MathML"),sn=e=>{if(uc(e))return"svg";if(fc(e))return"mathml"},on=e=>e.nodeType===8;function dc(e){const{mt:t,p:n,o:{patchProp:r,createText:s,nextSibling:o,parentNode:i,remove:l,insert:c,createComment:a}}=e,f=(g,v)=>{if(!v.hasChildNodes()){n(null,g,v),En(),v._vnode=g;return}h(v.firstChild,g,null,null,null),En(),v._vnode=g},h=(g,v,N,O,T,V=!1)=>{V=V||!!v.dynamicChildren;const C=on(g)&&g.data==="[",M=()=>R(g,v,N,O,T,C),{type:x,ref:w,shapeFlag:F,patchFlag:Q}=v;let se=g.nodeType;v.el=g,Q===-2&&(V=!1,v.dynamicChildren=null);let U=null;switch(x){case At:se!==3?v.children===""?(c(v.el=s(""),i(g),g),U=g):U=M():(g.data!==v.children&&(vt(),g.data=v.children),U=o(g));break;case me:j(g)?(U=o(g),$(v.el=g.content.firstChild,g,N)):se!==8||C?U=M():U=o(g);break;case Ht:if(C&&(g=o(g),se=g.nodeType),se===1||se===3){U=g;const G=!v.children.length;for(let D=0;D{V=V||!!v.dynamicChildren;const{type:C,props:M,patchFlag:x,shapeFlag:w,dirs:F,transition:Q}=v,se=C==="input"||C==="option";if(se||x!==-1){F&&He(v,null,N,"created");let U=!1;if(j(g)){U=Yo(O,Q)&&N&&N.vnode.props&&N.vnode.props.appear;const D=g.content.firstChild;U&&Q.beforeEnter(D),$(D,g,N),v.el=g=D}if(w&16&&!(M&&(M.innerHTML||M.textContent))){let D=y(g.firstChild,v,g,N,O,T,V);for(;D;){vt();const Se=D;D=D.nextSibling,l(Se)}}else w&8&&g.textContent!==v.children&&(vt(),g.textContent=v.children);if(M)if(se||!V||x&48)for(const D in M)(se&&(D.endsWith("value")||D==="indeterminate")||Kt(D)&&!Et(D)||D[0]===".")&&r(g,D,null,M[D],void 0,void 0,N);else M.onClick&&r(g,"onClick",null,M.onClick,void 0,void 0,N);let G;(G=M&&M.onVnodeBeforeMount)&&Te(G,N,v),F&&He(v,null,N,"beforeMount"),((G=M&&M.onVnodeMounted)||F||U)&&No(()=>{G&&Te(G,N,v),U&&Q.enter(g),F&&He(v,null,N,"mounted")},O)}return g.nextSibling},y=(g,v,N,O,T,V,C)=>{C=C||!!v.dynamicChildren;const M=v.children,x=M.length;for(let w=0;w{const{slotScopeIds:C}=v;C&&(T=T?T.concat(C):C);const M=i(g),x=y(o(g),v,M,N,O,T,V);return x&&on(x)&&x.data==="]"?o(v.anchor=x):(vt(),c(v.anchor=a("]"),M,x),x)},R=(g,v,N,O,T,V)=>{if(vt(),v.el=null,V){const x=k(g);for(;;){const w=o(g);if(w&&w!==x)l(w);else break}}const C=o(g),M=i(g);return l(g),n(null,v,M,C,N,O,sn(M),T),C},k=(g,v="[",N="]")=>{let O=0;for(;g;)if(g=o(g),g&&on(g)&&(g.data===v&&O++,g.data===N)){if(O===0)return o(g);O--}return g},$=(g,v,N)=>{const O=v.parentNode;O&&O.replaceChild(g,v);let T=N;for(;T;)T.vnode.el===v&&(T.vnode.el=T.subTree.el=g),T=T.parent},j=g=>g.nodeType===1&&g.tagName.toLowerCase()==="template";return[f,h]}const ye=No;function hc(e){return Xo(e)}function pc(e){return Xo(e,dc)}function Xo(e,t){const n=io();n.__VUE__=!0;const{insert:r,remove:s,patchProp:o,createElement:i,createText:l,createComment:c,setText:a,setElementText:f,parentNode:h,nextSibling:p,setScopeId:y=xe,insertStaticContent:E}=e,R=(u,d,m,_=null,b=null,L=null,P=void 0,A=null,I=!!d.dynamicChildren)=>{if(u===d)return;u&&!ut(u,d)&&(_=Qt(u),Ne(u,b,L,!0),u=null),d.patchFlag===-2&&(I=!1,d.dynamicChildren=null);const{type:S,ref:H,shapeFlag:W}=d;switch(S){case At:k(u,d,m,_);break;case me:$(u,d,m,_);break;case Ht:u==null&&j(d,m,_,P);break;case ve:w(u,d,m,_,b,L,P,A,I);break;default:W&1?N(u,d,m,_,b,L,P,A,I):W&6?F(u,d,m,_,b,L,P,A,I):(W&64||W&128)&&S.process(u,d,m,_,b,L,P,A,I,mt)}H!=null&&b&&Tn(H,u&&u.ref,L,d||u,!d)},k=(u,d,m,_)=>{if(u==null)r(d.el=l(d.children),m,_);else{const b=d.el=u.el;d.children!==u.children&&a(b,d.children)}},$=(u,d,m,_)=>{u==null?r(d.el=c(d.children||""),m,_):d.el=u.el},j=(u,d,m,_)=>{[u.el,u.anchor]=E(u.children,d,m,_,u.el,u.anchor)},g=({el:u,anchor:d},m,_)=>{let b;for(;u&&u!==d;)b=p(u),r(u,m,_),u=b;r(d,m,_)},v=({el:u,anchor:d})=>{let m;for(;u&&u!==d;)m=p(u),s(u),u=m;s(d)},N=(u,d,m,_,b,L,P,A,I)=>{d.type==="svg"?P="svg":d.type==="math"&&(P="mathml"),u==null?O(d,m,_,b,L,P,A,I):C(u,d,b,L,P,A,I)},O=(u,d,m,_,b,L,P,A)=>{let I,S;const{props:H,shapeFlag:W,transition:B,dirs:z}=u;if(I=u.el=i(u.type,L,H&&H.is,H),W&8?f(I,u.children):W&16&&V(u.children,I,null,_,b,Yn(u,L),P,A),z&&He(u,null,_,"created"),T(I,u,u.scopeId,P,_),H){for(const te in H)te!=="value"&&!Et(te)&&o(I,te,null,H[te],L,u.children,_,b,Ve);"value"in H&&o(I,"value",null,H.value,L),(S=H.onVnodeBeforeMount)&&Te(S,_,u)}z&&He(u,null,_,"beforeMount");const X=Yo(b,B);X&&B.beforeEnter(I),r(I,d,m),((S=H&&H.onVnodeMounted)||X||z)&&ye(()=>{S&&Te(S,_,u),X&&B.enter(I),z&&He(u,null,_,"mounted")},b)},T=(u,d,m,_,b)=>{if(m&&y(u,m),_)for(let L=0;L<_.length;L++)y(u,_[L]);if(b){let L=b.subTree;if(d===L){const P=b.vnode;T(u,P,P.scopeId,P.slotScopeIds,b.parent)}}},V=(u,d,m,_,b,L,P,A,I=0)=>{for(let S=I;S{const A=d.el=u.el;let{patchFlag:I,dynamicChildren:S,dirs:H}=d;I|=u.patchFlag&16;const W=u.props||re,B=d.props||re;let z;if(m&&it(m,!1),(z=B.onVnodeBeforeUpdate)&&Te(z,m,d,u),H&&He(d,u,m,"beforeUpdate"),m&&it(m,!0),S?M(u.dynamicChildren,S,A,m,_,Yn(d,b),L):P||D(u,d,A,null,m,_,Yn(d,b),L,!1),I>0){if(I&16)x(A,d,W,B,m,_,b);else if(I&2&&W.class!==B.class&&o(A,"class",null,B.class,b),I&4&&o(A,"style",W.style,B.style,b),I&8){const X=d.dynamicProps;for(let te=0;te{z&&Te(z,m,d,u),H&&He(d,u,m,"updated")},_)},M=(u,d,m,_,b,L,P)=>{for(let A=0;A{if(m!==_){if(m!==re)for(const A in m)!Et(A)&&!(A in _)&&o(u,A,m[A],null,P,d.children,b,L,Ve);for(const A in _){if(Et(A))continue;const I=_[A],S=m[A];I!==S&&A!=="value"&&o(u,A,S,I,P,d.children,b,L,Ve)}"value"in _&&o(u,"value",m.value,_.value,P)}},w=(u,d,m,_,b,L,P,A,I)=>{const S=d.el=u?u.el:l(""),H=d.anchor=u?u.anchor:l("");let{patchFlag:W,dynamicChildren:B,slotScopeIds:z}=d;z&&(A=A?A.concat(z):z),u==null?(r(S,m,_),r(H,m,_),V(d.children||[],m,H,b,L,P,A,I)):W>0&&W&64&&B&&u.dynamicChildren?(M(u.dynamicChildren,B,m,b,L,P,A),(d.key!=null||b&&d===b.subTree)&&Br(u,d,!0)):D(u,d,m,H,b,L,P,A,I)},F=(u,d,m,_,b,L,P,A,I)=>{d.slotScopeIds=A,u==null?d.shapeFlag&512?b.ctx.activate(d,m,_,P,I):Q(d,m,_,b,L,P,I):se(u,d,I)},Q=(u,d,m,_,b,L,P)=>{const A=u.component=Nc(u,_,b);if(Gt(u)&&(A.ctx.renderer=mt),Fc(A),A.asyncDep){if(b&&b.registerDep(A,U,P),!u.el){const I=A.subTree=le(me);$(null,I,d,m)}}else U(A,u,d,m,b,L,P)},se=(u,d,m)=>{const _=d.component=u.component;if(Vl(u,d,m))if(_.asyncDep&&!_.asyncResolved){G(_,d,m);return}else _.next=d,Ml(_.update),_.effect.dirty=!0,_.update();else d.el=u.el,_.vnode=d},U=(u,d,m,_,b,L,P)=>{const A=()=>{if(u.isMounted){let{next:H,bu:W,u:B,parent:z,vnode:X}=u;{const yt=Jo(u);if(yt){H&&(H.el=X.el,G(u,H,P)),yt.asyncDep.then(()=>{u.isUnmounted||A()});return}}let te=H,Z;it(u,!1),H?(H.el=X.el,G(u,H,P)):H=X,W&&gn(W),(Z=H.props&&H.props.onVnodeBeforeUpdate)&&Te(Z,z,H,X),it(u,!0);const ue=Gn(u),Oe=u.subTree;u.subTree=ue,R(Oe,ue,h(Oe.el),Qt(Oe),u,b,L),H.el=ue.el,te===null&&Dl(u,ue.el),B&&ye(B,b),(Z=H.props&&H.props.onVnodeUpdated)&&ye(()=>Te(Z,z,H,X),b)}else{let H;const{el:W,props:B}=d,{bm:z,m:X,parent:te}=u,Z=Ct(d);if(it(u,!1),z&&gn(z),!Z&&(H=B&&B.onVnodeBeforeMount)&&Te(H,te,d),it(u,!0),W&&Kn){const ue=()=>{u.subTree=Gn(u),Kn(W,u.subTree,u,b,null)};Z?d.type.__asyncLoader().then(()=>!u.isUnmounted&&ue()):ue()}else{const ue=u.subTree=Gn(u);R(null,ue,m,_,u,b,L),d.el=ue.el}if(X&&ye(X,b),!Z&&(H=B&&B.onVnodeMounted)){const ue=d;ye(()=>Te(H,te,ue),b)}(d.shapeFlag&256||te&&Ct(te.vnode)&&te.vnode.shapeFlag&256)&&u.a&&ye(u.a,b),u.isMounted=!0,d=m=_=null}},I=u.effect=new Ir(A,xe,()=>Fn(S),u.scope),S=u.update=()=>{I.dirty&&I.run()};S.id=u.uid,it(u,!0),S()},G=(u,d,m)=>{d.component=u;const _=u.vnode.props;u.vnode=d,u.next=null,ic(u,d.props,_,m),ac(u,d.children,m),rt(),as(u),st()},D=(u,d,m,_,b,L,P,A,I=!1)=>{const S=u&&u.children,H=u?u.shapeFlag:0,W=d.children,{patchFlag:B,shapeFlag:z}=d;if(B>0){if(B&128){Jt(S,W,m,_,b,L,P,A,I);return}else if(B&256){Se(S,W,m,_,b,L,P,A,I);return}}z&8?(H&16&&Ve(S,b,L),W!==S&&f(m,W)):H&16?z&16?Jt(S,W,m,_,b,L,P,A,I):Ve(S,b,L,!0):(H&8&&f(m,""),z&16&&V(W,m,_,b,L,P,A,I))},Se=(u,d,m,_,b,L,P,A,I)=>{u=u||bt,d=d||bt;const S=u.length,H=d.length,W=Math.min(S,H);let B;for(B=0;BH?Ve(u,b,L,!0,!1,W):V(d,m,_,b,L,P,A,I,W)},Jt=(u,d,m,_,b,L,P,A,I)=>{let S=0;const H=d.length;let W=u.length-1,B=H-1;for(;S<=W&&S<=B;){const z=u[S],X=d[S]=I?Xe(d[S]):Le(d[S]);if(ut(z,X))R(z,X,m,null,b,L,P,A,I);else break;S++}for(;S<=W&&S<=B;){const z=u[W],X=d[B]=I?Xe(d[B]):Le(d[B]);if(ut(z,X))R(z,X,m,null,b,L,P,A,I);else break;W--,B--}if(S>W){if(S<=B){const z=B+1,X=zB)for(;S<=W;)Ne(u[S],b,L,!0),S++;else{const z=S,X=S,te=new Map;for(S=X;S<=B;S++){const we=d[S]=I?Xe(d[S]):Le(d[S]);we.key!=null&&te.set(we.key,S)}let Z,ue=0;const Oe=B-X+1;let yt=!1,Qr=0;const Ot=new Array(Oe);for(S=0;S=Oe){Ne(we,b,L,!0);continue}let Fe;if(we.key!=null)Fe=te.get(we.key);else for(Z=X;Z<=B;Z++)if(Ot[Z-X]===0&&ut(we,d[Z])){Fe=Z;break}Fe===void 0?Ne(we,b,L,!0):(Ot[Fe-X]=S+1,Fe>=Qr?Qr=Fe:yt=!0,R(we,d[Fe],m,null,b,L,P,A,I),ue++)}const Zr=yt?gc(Ot):bt;for(Z=Zr.length-1,S=Oe-1;S>=0;S--){const we=X+S,Fe=d[we],es=we+1{const{el:L,type:P,transition:A,children:I,shapeFlag:S}=u;if(S&6){ot(u.component.subTree,d,m,_);return}if(S&128){u.suspense.move(d,m,_);return}if(S&64){P.move(u,d,m,mt);return}if(P===ve){r(L,d,m);for(let W=0;WA.enter(L),b);else{const{leave:W,delayLeave:B,afterLeave:z}=A,X=()=>r(L,d,m),te=()=>{W(L,()=>{X(),z&&z()})};B?B(L,X,te):te()}else r(L,d,m)},Ne=(u,d,m,_=!1,b=!1)=>{const{type:L,props:P,ref:A,children:I,dynamicChildren:S,shapeFlag:H,patchFlag:W,dirs:B,memoIndex:z}=u;if(W===-2&&(b=!1),A!=null&&Tn(A,null,m,u,!0),z!=null&&(d.renderCache[z]=void 0),H&256){d.ctx.deactivate(u);return}const X=H&1&&B,te=!Ct(u);let Z;if(te&&(Z=P&&P.onVnodeBeforeUnmount)&&Te(Z,d,u),H&6)Hi(u.component,m,_);else{if(H&128){u.suspense.unmount(m,_);return}X&&He(u,null,d,"beforeUnmount"),H&64?u.type.remove(u,d,m,mt,_):S&&(L!==ve||W>0&&W&64)?Ve(S,d,m,!1,!0):(L===ve&&W&384||!b&&H&16)&&Ve(I,d,m),_&&Yr(u)}(te&&(Z=P&&P.onVnodeUnmounted)||X)&&ye(()=>{Z&&Te(Z,d,u),X&&He(u,null,d,"unmounted")},m)},Yr=u=>{const{type:d,el:m,anchor:_,transition:b}=u;if(d===ve){Fi(m,_);return}if(d===Ht){v(u);return}const L=()=>{s(m),b&&!b.persisted&&b.afterLeave&&b.afterLeave()};if(u.shapeFlag&1&&b&&!b.persisted){const{leave:P,delayLeave:A}=b,I=()=>P(m,L);A?A(u.el,L,I):I()}else L()},Fi=(u,d)=>{let m;for(;u!==d;)m=p(u),s(u),u=m;s(d)},Hi=(u,d,m)=>{const{bum:_,scope:b,update:L,subTree:P,um:A,m:I,a:S}=u;ws(I),ws(S),_&&gn(_),b.stop(),L&&(L.active=!1,Ne(P,u,d,m)),A&&ye(A,d),ye(()=>{u.isUnmounted=!0},d),d&&d.pendingBranch&&!d.isUnmounted&&u.asyncDep&&!u.asyncResolved&&u.suspenseId===d.pendingId&&(d.deps--,d.deps===0&&d.resolve())},Ve=(u,d,m,_=!1,b=!1,L=0)=>{for(let P=L;Pu.shapeFlag&6?Qt(u.component.subTree):u.shapeFlag&128?u.suspense.next():p(u.anchor||u.el);let Bn=!1;const Jr=(u,d,m)=>{u==null?d._vnode&&Ne(d._vnode,null,null,!0):R(d._vnode||null,u,d,null,null,null,m),Bn||(Bn=!0,as(),En(),Bn=!1),d._vnode=u},mt={p:R,um:Ne,m:ot,r:Yr,mt:Q,mc:V,pc:D,pbc:M,n:Qt,o:e};let Wn,Kn;return t&&([Wn,Kn]=t(mt)),{render:Jr,hydrate:Wn,createApp:rc(Jr,Wn)}}function Yn({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function it({effect:e,update:t},n){e.allowRecurse=t.allowRecurse=n}function Yo(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function Br(e,t,n=!1){const r=e.children,s=t.children;if(K(r)&&K(s))for(let o=0;o>1,e[n[l]]0&&(t[r]=n[o-1]),n[o]=r)}}for(o=n.length,i=n[o-1];o-- >0;)n[o]=i,i=t[i];return n}function Jo(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:Jo(t)}function ws(e){if(e)for(let t=0;tht(mc);function Wr(e,t){return Dn(e,null,t)}function Au(e,t){return Dn(e,null,{flush:"post"})}const ln={};function Re(e,t,n){return Dn(e,t,n)}function Dn(e,t,{immediate:n,deep:r,flush:s,once:o,onTrack:i,onTrigger:l}=re){if(t&&o){const O=t;t=(...T)=>{O(...T),N()}}const c=ce,a=O=>r===!0?O:Ye(O,r===!1?1:void 0);let f,h=!1,p=!1;if(de(e)?(f=()=>e.value,h=wn(e)):Mt(e)?(f=()=>a(e),h=!0):K(e)?(p=!0,h=e.some(O=>Mt(O)||wn(O)),f=()=>e.map(O=>{if(de(O))return O.value;if(Mt(O))return a(O);if(q(O))return Qe(O,c,2)})):q(e)?t?f=()=>Qe(e,c,2):f=()=>(y&&y(),Ae(e,c,3,[E])):f=xe,t&&r){const O=f;f=()=>Ye(O())}let y,E=O=>{y=g.onStop=()=>{Qe(O,c,4),y=g.onStop=void 0}},R;if(Yt)if(E=xe,t?n&&Ae(t,c,3,[f(),p?[]:void 0,E]):f(),s==="sync"){const O=yc();R=O.__watcherHandles||(O.__watcherHandles=[])}else return xe;let k=p?new Array(e.length).fill(ln):ln;const $=()=>{if(!(!g.active||!g.dirty))if(t){const O=g.run();(r||h||(p?O.some((T,V)=>Ze(T,k[V])):Ze(O,k)))&&(y&&y(),Ae(t,c,3,[O,k===ln?void 0:p&&k[0]===ln?[]:k,E]),k=O)}else g.run()};$.allowRecurse=!!t;let j;s==="sync"?j=$:s==="post"?j=()=>ye($,c&&c.suspense):($.pre=!0,c&&($.id=c.uid),j=()=>Fn($));const g=new Ir(f,xe,j),v=uo(),N=()=>{g.stop(),v&&Ar(v.effects,g)};return t?n?$():k=g.run():s==="post"?ye(g.run.bind(g),c&&c.suspense):g.run(),R&&R.push(N),N}function vc(e,t,n){const r=this.proxy,s=oe(e)?e.includes(".")?Qo(r,e):()=>r[e]:e.bind(r,r);let o;q(t)?o=t:(o=t.handler,n=t);const i=Xt(this),l=Dn(s,o.bind(r),n);return i(),l}function Qo(e,t){const n=t.split(".");return()=>{let r=e;for(let s=0;s{Ye(r,t,n)});else if(so(e)){for(const r in e)Ye(e[r],t,n);for(const r of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,r)&&Ye(e[r],t,n)}return e}const Gt=e=>e.type.__isKeepAlive;function _c(e,t){Zo(e,"a",t)}function bc(e,t){Zo(e,"da",t)}function Zo(e,t,n=ce){const r=e.__wdc||(e.__wdc=()=>{let s=n;for(;s;){if(s.isDeactivated)return;s=s.parent}return e()});if(jn(t,r,n),n){let s=n.parent;for(;s&&s.parent;)Gt(s.parent.vnode)&&wc(r,t,n,s),s=s.parent}}function wc(e,t,n,r){const s=jn(t,e,r,!0);Vn(()=>{Ar(r[t],s)},n)}const ze=Symbol("_leaveCb"),cn=Symbol("_enterCb");function Ec(){const e={isMounted:!1,isLeaving:!1,isUnmounting:!1,leavingVNodes:new Map};return Rt(()=>{e.isMounted=!0}),Fo(()=>{e.isUnmounting=!0}),e}const Ce=[Function,Array],ei={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:Ce,onEnter:Ce,onAfterEnter:Ce,onEnterCancelled:Ce,onBeforeLeave:Ce,onLeave:Ce,onAfterLeave:Ce,onLeaveCancelled:Ce,onBeforeAppear:Ce,onAppear:Ce,onAfterAppear:Ce,onAppearCancelled:Ce},ti=e=>{const t=e.subTree;return t.component?ti(t.component):t},Sc={name:"BaseTransition",props:ei,setup(e,{slots:t}){const n=zt(),r=Ec();return()=>{const s=t.default&&ri(t.default(),!0);if(!s||!s.length)return;let o=s[0];if(s.length>1){for(const p of s)if(p.type!==me){o=p;break}}const i=J(e),{mode:l}=i;if(r.isLeaving)return Jn(o);const c=Es(o);if(!c)return Jn(o);let a=wr(c,i,r,n,p=>a=p);xn(c,a);const f=n.subTree,h=f&&Es(f);if(h&&h.type!==me&&!ut(c,h)&&ti(n).type!==me){const p=wr(h,i,r,n);if(xn(h,p),l==="out-in"&&c.type!==me)return r.isLeaving=!0,p.afterLeave=()=>{r.isLeaving=!1,n.update.active!==!1&&(n.effect.dirty=!0,n.update())},Jn(o);l==="in-out"&&c.type!==me&&(p.delayLeave=(y,E,R)=>{const k=ni(r,h);k[String(h.key)]=h,y[ze]=()=>{E(),y[ze]=void 0,delete a.delayedLeave},a.delayedLeave=R})}return o}}},Cc=Sc;function ni(e,t){const{leavingVNodes:n}=e;let r=n.get(t.type);return r||(r=Object.create(null),n.set(t.type,r)),r}function wr(e,t,n,r,s){const{appear:o,mode:i,persisted:l=!1,onBeforeEnter:c,onEnter:a,onAfterEnter:f,onEnterCancelled:h,onBeforeLeave:p,onLeave:y,onAfterLeave:E,onLeaveCancelled:R,onBeforeAppear:k,onAppear:$,onAfterAppear:j,onAppearCancelled:g}=t,v=String(e.key),N=ni(n,e),O=(C,M)=>{C&&Ae(C,r,9,M)},T=(C,M)=>{const x=M[1];O(C,M),K(C)?C.every(w=>w.length<=1)&&x():C.length<=1&&x()},V={mode:i,persisted:l,beforeEnter(C){let M=c;if(!n.isMounted)if(o)M=k||c;else return;C[ze]&&C[ze](!0);const x=N[v];x&&ut(e,x)&&x.el[ze]&&x.el[ze](),O(M,[C])},enter(C){let M=a,x=f,w=h;if(!n.isMounted)if(o)M=$||a,x=j||f,w=g||h;else return;let F=!1;const Q=C[cn]=se=>{F||(F=!0,se?O(w,[C]):O(x,[C]),V.delayedLeave&&V.delayedLeave(),C[cn]=void 0)};M?T(M,[C,Q]):Q()},leave(C,M){const x=String(e.key);if(C[cn]&&C[cn](!0),n.isUnmounting)return M();O(p,[C]);let w=!1;const F=C[ze]=Q=>{w||(w=!0,M(),Q?O(R,[C]):O(E,[C]),C[ze]=void 0,N[x]===e&&delete N[x])};N[x]=e,y?T(y,[C,F]):F()},clone(C){const M=wr(C,t,n,r,s);return s&&s(M),M}};return V}function Jn(e){if(Gt(e))return e=et(e),e.children=null,e}function Es(e){if(!Gt(e))return e;const{shapeFlag:t,children:n}=e;if(n){if(t&16)return n[0];if(t&32&&q(n.default))return n.default()}}function xn(e,t){e.shapeFlag&6&&e.component?xn(e.component.subTree,t):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function ri(e,t=!1,n){let r=[],s=0;for(let o=0;o1)for(let o=0;oe.__isTeleport,Ft=e=>e&&(e.disabled||e.disabled===""),Ss=e=>typeof SVGElement<"u"&&e instanceof SVGElement,Cs=e=>typeof MathMLElement=="function"&&e instanceof MathMLElement,Er=(e,t)=>{const n=e&&e.to;return oe(n)?t?t(n):null:n},xc={name:"Teleport",__isTeleport:!0,process(e,t,n,r,s,o,i,l,c,a){const{mc:f,pc:h,pbc:p,o:{insert:y,querySelector:E,createText:R,createComment:k}}=a,$=Ft(t.props);let{shapeFlag:j,children:g,dynamicChildren:v}=t;if(e==null){const N=t.el=R(""),O=t.anchor=R("");y(N,n,r),y(O,n,r);const T=t.target=Er(t.props,E),V=t.targetAnchor=R("");T&&(y(V,T),i==="svg"||Ss(T)?i="svg":(i==="mathml"||Cs(T))&&(i="mathml"));const C=(M,x)=>{j&16&&f(g,M,x,s,o,i,l,c)};$?C(n,O):T&&C(T,V)}else{t.el=e.el;const N=t.anchor=e.anchor,O=t.target=e.target,T=t.targetAnchor=e.targetAnchor,V=Ft(e.props),C=V?n:O,M=V?N:T;if(i==="svg"||Ss(O)?i="svg":(i==="mathml"||Cs(O))&&(i="mathml"),v?(p(e.dynamicChildren,v,C,s,o,i,l),Br(e,t,!0)):c||h(e,t,C,M,s,o,i,l,!1),$)V?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):an(t,n,N,a,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const x=t.target=Er(t.props,E);x&&an(t,x,null,a,0)}else V&&an(t,O,T,a,1)}si(t)},remove(e,t,n,{um:r,o:{remove:s}},o){const{shapeFlag:i,children:l,anchor:c,targetAnchor:a,target:f,props:h}=e;if(f&&s(a),o&&s(c),i&16){const p=o||!Ft(h);for(let y=0;y0?Ie||bt:null,Rc(),Bt>0&&Ie&&Ie.push(e),e}function Ou(e,t,n,r,s,o){return ii(ai(e,t,n,r,s,o,!0))}function li(e,t,n,r,s){return ii(le(e,t,n,r,s,!0))}function An(e){return e?e.__v_isVNode===!0:!1}function ut(e,t){return e.type===t.type&&e.key===t.key}const ci=({key:e})=>e??null,yn=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?oe(e)||de(e)||q(e)?{i:ae,r:e,k:t,f:!!n}:e:null);function ai(e,t=null,n=null,r=0,s=null,o=e===ve?0:1,i=!1,l=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&ci(t),ref:t&&yn(t),scopeId:$n,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:o,patchFlag:r,dynamicProps:s,dynamicChildren:null,appContext:null,ctx:ae};return l?(Kr(c,n),o&128&&e.normalize(c)):n&&(c.shapeFlag|=oe(n)?8:16),Bt>0&&!i&&Ie&&(c.patchFlag>0||o&6)&&c.patchFlag!==32&&Ie.push(c),c}const le=Oc;function Oc(e,t=null,n=null,r=0,s=null,o=!1){if((!e||e===Mo)&&(e=me),An(e)){const l=et(e,t,!0);return n&&Kr(l,n),Bt>0&&!o&&Ie&&(l.shapeFlag&6?Ie[Ie.indexOf(e)]=l:Ie.push(l)),l.patchFlag=-2,l}if(Vc(e)&&(e=e.__vccOpts),t){t=Lc(t);let{class:l,style:c}=t;l&&!oe(l)&&(t.class=Lr(l)),ee(c)&&(So(c)&&!K(c)&&(c=fe({},c)),t.style=Or(c))}const i=oe(e)?1:Ul(e)?128:Tc(e)?64:ee(e)?4:q(e)?2:0;return ai(e,t,n,r,s,i,o,!0)}function Lc(e){return e?So(e)||Bo(e)?fe({},e):e:null}function et(e,t,n=!1,r=!1){const{props:s,ref:o,patchFlag:i,children:l,transition:c}=e,a=t?Ic(s||{},t):s,f={__v_isVNode:!0,__v_skip:!0,type:e.type,props:a,key:a&&ci(a),ref:t&&t.ref?n&&o?K(o)?o.concat(yn(t)):[o,yn(t)]:yn(t):o,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==ve?i===-1?16:i|16:i,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:c,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&et(e.ssContent),ssFallback:e.ssFallback&&et(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return c&&r&&xn(f,c.clone(f)),f}function ui(e=" ",t=0){return le(At,null,e,t)}function Lu(e,t){const n=le(Ht,null,e);return n.staticCount=t,n}function Iu(e="",t=!1){return t?(oi(),li(me,null,e)):le(me,null,e)}function Le(e){return e==null||typeof e=="boolean"?le(me):K(e)?le(ve,null,e.slice()):typeof e=="object"?Xe(e):le(At,null,String(e))}function Xe(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:et(e)}function Kr(e,t){let n=0;const{shapeFlag:r}=e;if(t==null)t=null;else if(K(t))n=16;else if(typeof t=="object")if(r&65){const s=t.default;s&&(s._c&&(s._d=!1),Kr(e,s()),s._c&&(s._d=!0));return}else{n=32;const s=t._;!s&&!Bo(t)?t._ctx=ae:s===3&&ae&&(ae.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else q(t)?(t={default:t,_ctx:ae},n=32):(t=String(t),r&64?(n=16,t=[ui(t)]):n=8);e.children=t,e.shapeFlag|=n}function Ic(...e){const t={};for(let n=0;nce||ae;let Rn,Sr;{const e=io(),t=(n,r)=>{let s;return(s=e[n])||(s=e[n]=[]),s.push(r),o=>{s.length>1?s.forEach(i=>i(o)):s[0](o)}};Rn=t("__VUE_INSTANCE_SETTERS__",n=>ce=n),Sr=t("__VUE_SSR_SETTERS__",n=>Yt=n)}const Xt=e=>{const t=ce;return Rn(e),e.scope.on(),()=>{e.scope.off(),Rn(t)}},xs=()=>{ce&&ce.scope.off(),Rn(null)};function fi(e){return e.vnode.shapeFlag&4}let Yt=!1;function Fc(e,t=!1){t&&Sr(t);const{props:n,children:r}=e.vnode,s=fi(e);oc(e,n,s,t),cc(e,r);const o=s?Hc(e,t):void 0;return t&&Sr(!1),o}function Hc(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,Xl);const{setup:r}=n;if(r){const s=e.setupContext=r.length>1?hi(e):null,o=Xt(e);rt();const i=Qe(r,e,0,[e.props,s]);if(st(),o(),no(i)){if(i.then(xs,xs),t)return i.then(l=>{As(e,l)}).catch(l=>{qt(l,e,0)});e.asyncDep=i}else As(e,i)}else di(e)}function As(e,t,n){q(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:ee(t)&&(e.setupState=xo(t)),di(e)}function di(e,t,n){const r=e.type;e.render||(e.render=r.render||xe);{const s=Xt(e);rt();try{Jl(e)}finally{st(),s()}}}const $c={get(e,t){return be(e,"get",""),e[t]}};function hi(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,$c),slots:e.slots,emit:e.emit,expose:t}}function Un(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(xo(mn(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Nt)return Nt[n](e)},has(t,n){return n in t||n in Nt}})):e.proxy}function jc(e,t=!0){return q(e)?e.displayName||e.name:e.name||t&&e.__name}function Vc(e){return q(e)&&"__vccOpts"in e}const ne=(e,t)=>wl(e,t,Yt);function Cr(e,t,n){const r=arguments.length;return r===2?ee(t)&&!K(t)?An(t)?le(e,null,[t]):le(e,t):le(e,null,t):(r>3?n=Array.prototype.slice.call(arguments,2):r===3&&An(n)&&(n=[n]),le(e,t,n))}const Dc="3.4.31";/** -* @vue/runtime-dom v3.4.31 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/const Uc="http://www.w3.org/2000/svg",kc="http://www.w3.org/1998/Math/MathML",De=typeof document<"u"?document:null,Rs=De&&De.createElement("template"),Bc={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,r)=>{const s=t==="svg"?De.createElementNS(Uc,e):t==="mathml"?De.createElementNS(kc,e):n?De.createElement(e,{is:n}):De.createElement(e);return e==="select"&&r&&r.multiple!=null&&s.setAttribute("multiple",r.multiple),s},createText:e=>De.createTextNode(e),createComment:e=>De.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>De.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,r,s,o){const i=n?n.previousSibling:t.lastChild;if(s&&(s===o||s.nextSibling))for(;t.insertBefore(s.cloneNode(!0),n),!(s===o||!(s=s.nextSibling)););else{Rs.innerHTML=r==="svg"?`${e}`:r==="mathml"?`${e}`:e;const l=Rs.content;if(r==="svg"||r==="mathml"){const c=l.firstChild;for(;c.firstChild;)l.appendChild(c.firstChild);l.removeChild(c)}t.insertBefore(l,n)}return[i?i.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},Ke="transition",Lt="animation",Wt=Symbol("_vtc"),pi=(e,{slots:t})=>Cr(Cc,Wc(e),t);pi.displayName="Transition";const gi={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String};pi.props=fe({},ei,gi);const lt=(e,t=[])=>{K(e)?e.forEach(n=>n(...t)):e&&e(...t)},Os=e=>e?K(e)?e.some(t=>t.length>1):e.length>1:!1;function Wc(e){const t={};for(const w in e)w in gi||(t[w]=e[w]);if(e.css===!1)return t;const{name:n="v",type:r,duration:s,enterFromClass:o=`${n}-enter-from`,enterActiveClass:i=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:c=o,appearActiveClass:a=i,appearToClass:f=l,leaveFromClass:h=`${n}-leave-from`,leaveActiveClass:p=`${n}-leave-active`,leaveToClass:y=`${n}-leave-to`}=e,E=Kc(s),R=E&&E[0],k=E&&E[1],{onBeforeEnter:$,onEnter:j,onEnterCancelled:g,onLeave:v,onLeaveCancelled:N,onBeforeAppear:O=$,onAppear:T=j,onAppearCancelled:V=g}=t,C=(w,F,Q)=>{ct(w,F?f:l),ct(w,F?a:i),Q&&Q()},M=(w,F)=>{w._isLeaving=!1,ct(w,h),ct(w,y),ct(w,p),F&&F()},x=w=>(F,Q)=>{const se=w?T:j,U=()=>C(F,w,Q);lt(se,[F,U]),Ls(()=>{ct(F,w?c:o),qe(F,w?f:l),Os(se)||Is(F,r,R,U)})};return fe(t,{onBeforeEnter(w){lt($,[w]),qe(w,o),qe(w,i)},onBeforeAppear(w){lt(O,[w]),qe(w,c),qe(w,a)},onEnter:x(!1),onAppear:x(!0),onLeave(w,F){w._isLeaving=!0;const Q=()=>M(w,F);qe(w,h),qe(w,p),zc(),Ls(()=>{w._isLeaving&&(ct(w,h),qe(w,y),Os(v)||Is(w,r,k,Q))}),lt(v,[w,Q])},onEnterCancelled(w){C(w,!1),lt(g,[w])},onAppearCancelled(w){C(w,!0),lt(V,[w])},onLeaveCancelled(w){M(w),lt(N,[w])}})}function Kc(e){if(e==null)return null;if(ee(e))return[Qn(e.enter),Qn(e.leave)];{const t=Qn(e);return[t,t]}}function Qn(e){return Bi(e)}function qe(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[Wt]||(e[Wt]=new Set)).add(t)}function ct(e,t){t.split(/\s+/).forEach(r=>r&&e.classList.remove(r));const n=e[Wt];n&&(n.delete(t),n.size||(e[Wt]=void 0))}function Ls(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let qc=0;function Is(e,t,n,r){const s=e._endId=++qc,o=()=>{s===e._endId&&r()};if(n)return setTimeout(o,n);const{type:i,timeout:l,propCount:c}=Gc(e,t);if(!i)return r();const a=i+"end";let f=0;const h=()=>{e.removeEventListener(a,p),o()},p=y=>{y.target===e&&++f>=c&&h()};setTimeout(()=>{f(n[E]||"").split(", "),s=r(`${Ke}Delay`),o=r(`${Ke}Duration`),i=Ms(s,o),l=r(`${Lt}Delay`),c=r(`${Lt}Duration`),a=Ms(l,c);let f=null,h=0,p=0;t===Ke?i>0&&(f=Ke,h=i,p=o.length):t===Lt?a>0&&(f=Lt,h=a,p=c.length):(h=Math.max(i,a),f=h>0?i>a?Ke:Lt:null,p=f?f===Ke?o.length:c.length:0);const y=f===Ke&&/\b(transform|all)(,|$)/.test(r(`${Ke}Property`).toString());return{type:f,timeout:h,propCount:p,hasTransform:y}}function Ms(e,t){for(;e.lengthPs(n)+Ps(e[r])))}function Ps(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function zc(){return document.body.offsetHeight}function Xc(e,t,n){const r=e[Wt];r&&(t=(t?[t,...r]:[...r]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const Ns=Symbol("_vod"),Yc=Symbol("_vsh"),Jc=Symbol(""),Qc=/(^|;)\s*display\s*:/;function Zc(e,t,n){const r=e.style,s=oe(n);let o=!1;if(n&&!s){if(t)if(oe(t))for(const i of t.split(";")){const l=i.slice(0,i.indexOf(":")).trim();n[l]==null&&vn(r,l,"")}else for(const i in t)n[i]==null&&vn(r,i,"");for(const i in n)i==="display"&&(o=!0),vn(r,i,n[i])}else if(s){if(t!==n){const i=r[Jc];i&&(n+=";"+i),r.cssText=n,o=Qc.test(n)}}else t&&e.removeAttribute("style");Ns in e&&(e[Ns]=o?r.display:"",e[Yc]&&(r.display="none"))}const Fs=/\s*!important$/;function vn(e,t,n){if(K(n))n.forEach(r=>vn(e,t,r));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const r=ea(e,t);Fs.test(n)?e.setProperty(gt(r),n.replace(Fs,""),"important"):e[r]=n}}const Hs=["Webkit","Moz","ms"],Zn={};function ea(e,t){const n=Zn[t];if(n)return n;let r=je(t);if(r!=="filter"&&r in e)return Zn[t]=r;r=In(r);for(let s=0;ser||(oa.then(()=>er=0),er=Date.now());function la(e,t){const n=r=>{if(!r._vts)r._vts=Date.now();else if(r._vts<=n.attached)return;Ae(ca(r,n.value),t,5,[r])};return n.value=e,n.attached=ia(),n}function ca(e,t){if(K(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(r=>s=>!s._stopped&&r&&r(s))}else return t}const Us=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,aa=(e,t,n,r,s,o,i,l,c)=>{const a=s==="svg";t==="class"?Xc(e,r,a):t==="style"?Zc(e,n,r):Kt(t)?xr(t)||ra(e,t,n,r,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):ua(e,t,r,a))?(ta(e,t,r,o,i,l,c),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&js(e,t,r,a,i,t!=="value")):(t==="true-value"?e._trueValue=r:t==="false-value"&&(e._falseValue=r),js(e,t,r,a))};function ua(e,t,n,r){if(r)return!!(t==="innerHTML"||t==="textContent"||t in e&&Us(t)&&q(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const s=e.tagName;if(s==="IMG"||s==="VIDEO"||s==="CANVAS"||s==="SOURCE")return!1}return Us(t)&&oe(n)?!1:t in e}const ks=e=>{const t=e.props["onUpdate:modelValue"]||!1;return K(t)?n=>gn(t,n):t};function fa(e){e.target.composing=!0}function Bs(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const tr=Symbol("_assign"),Mu={created(e,{modifiers:{lazy:t,trim:n,number:r}},s){e[tr]=ks(s);const o=r||s.props&&s.props.type==="number";_t(e,t?"change":"input",i=>{if(i.target.composing)return;let l=e.value;n&&(l=l.trim()),o&&(l=dr(l)),e[tr](l)}),n&&_t(e,"change",()=>{e.value=e.value.trim()}),t||(_t(e,"compositionstart",fa),_t(e,"compositionend",Bs),_t(e,"change",Bs))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:r,trim:s,number:o}},i){if(e[tr]=ks(i),e.composing)return;const l=(o||e.type==="number")&&!/^0\d/.test(e.value)?dr(e.value):e.value,c=t??"";l!==c&&(document.activeElement===e&&e.type!=="range"&&(r&&t===n||s&&e.value.trim()===c)||(e.value=c))}},da=["ctrl","shift","alt","meta"],ha={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>da.some(n=>e[`${n}Key`]&&!t.includes(n))},Pu=(e,t)=>{const n=e._withMods||(e._withMods={}),r=t.join(".");return n[r]||(n[r]=(s,...o)=>{for(let i=0;i{const n=e._withKeys||(e._withKeys={}),r=t.join(".");return n[r]||(n[r]=s=>{if(!("key"in s))return;const o=gt(s.key);if(t.some(i=>i===o||pa[i]===o))return e(s)})},mi=fe({patchProp:aa},Bc);let jt,Ws=!1;function ga(){return jt||(jt=hc(mi))}function ma(){return jt=Ws?jt:pc(mi),Ws=!0,jt}const Fu=(...e)=>{const t=ga().createApp(...e),{mount:n}=t;return t.mount=r=>{const s=vi(r);if(!s)return;const o=t._component;!q(o)&&!o.render&&!o.template&&(o.template=s.innerHTML),s.innerHTML="";const i=n(s,!1,yi(s));return s instanceof Element&&(s.removeAttribute("v-cloak"),s.setAttribute("data-v-app","")),i},t},Hu=(...e)=>{const t=ma().createApp(...e),{mount:n}=t;return t.mount=r=>{const s=vi(r);if(s)return n(s,!0,yi(s))},t};function yi(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function vi(e){return oe(e)?document.querySelector(e):e}function _i(e){return uo()?(Zi(e),!0):!1}const nr=new WeakMap,ya=(...e)=>{var t;const n=e[0],r=(t=zt())==null?void 0:t.proxy;if(r==null&&!Do())throw new Error("injectLocal must be called in setup");return r&&nr.has(r)&&n in nr.get(r)?nr.get(r)[n]:ht(...e)},bi=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const $u=e=>e!=null,va=Object.prototype.toString,_a=e=>va.call(e)==="[object Object]",tt=()=>{},Ks=ba();function ba(){var e,t;return bi&&((e=window==null?void 0:window.navigator)==null?void 0:e.userAgent)&&(/iP(?:ad|hone|od)/.test(window.navigator.userAgent)||((t=window==null?void 0:window.navigator)==null?void 0:t.maxTouchPoints)>2&&/iPad|Macintosh/.test(window==null?void 0:window.navigator.userAgent))}function qr(e,t){function n(...r){return new Promise((s,o)=>{Promise.resolve(e(()=>t.apply(this,r),{fn:t,thisArg:this,args:r})).then(s).catch(o)})}return n}const wi=e=>e();function Ei(e,t={}){let n,r,s=tt;const o=c=>{clearTimeout(c),s(),s=tt};let i;return c=>{const a=ie(e),f=ie(t.maxWait);return n&&o(n),a<=0||f!==void 0&&f<=0?(r&&(o(r),r=null),Promise.resolve(c())):new Promise((h,p)=>{s=t.rejectOnCancel?p:h,i=c,f&&!r&&(r=setTimeout(()=>{n&&o(n),r=null,h(i())},f)),n=setTimeout(()=>{r&&o(r),r=null,h(c())},a)})}}function wa(...e){let t=0,n,r=!0,s=tt,o,i,l,c,a;!de(e[0])&&typeof e[0]=="object"?{delay:i,trailing:l=!0,leading:c=!0,rejectOnCancel:a=!1}=e[0]:[i,l=!0,c=!0,a=!1]=e;const f=()=>{n&&(clearTimeout(n),n=void 0,s(),s=tt)};return p=>{const y=ie(i),E=Date.now()-t,R=()=>o=p();return f(),y<=0?(t=Date.now(),R()):(E>y&&(c||!r)?(t=Date.now(),R()):l&&(o=new Promise((k,$)=>{s=a?$:k,n=setTimeout(()=>{t=Date.now(),r=!0,k(R()),f()},Math.max(0,y-E))})),!c&&!n&&(n=setTimeout(()=>r=!0,y)),r=!1,o)}}function Ea(e=wi,t={}){const{initialState:n="active"}=t,r=Gr(n==="active");function s(){r.value=!1}function o(){r.value=!0}const i=(...l)=>{r.value&&e(...l)};return{isActive:Pn(r),pause:s,resume:o,eventFilter:i}}function qs(e){return e.endsWith("rem")?Number.parseFloat(e)*16:Number.parseFloat(e)}function Sa(e){return zt()}function rr(e){return Array.isArray(e)?e:[e]}function Gr(...e){if(e.length!==1)return Rl(...e);const t=e[0];return typeof t=="function"?Pn(Tl(()=>({get:t,set:tt}))):Me(t)}function Ca(e,t=200,n={}){return qr(Ei(t,n),e)}function Ta(e,t=200,n=!1,r=!0,s=!1){return qr(wa(t,n,r,s),e)}function Si(e,t,n={}){const{eventFilter:r=wi,...s}=n;return Re(e,qr(r,t),s)}function xa(e,t,n={}){const{eventFilter:r,initialState:s="active",...o}=n,{eventFilter:i,pause:l,resume:c,isActive:a}=Ea(r,{initialState:s});return{stop:Si(e,t,{...o,eventFilter:i}),pause:l,resume:c,isActive:a}}function kn(e,t=!0,n){Sa()?Rt(e,n):t?e():Nn(e)}function ju(e,t,n={}){const{debounce:r=0,maxWait:s=void 0,...o}=n;return Si(e,t,{...o,eventFilter:Ei(r,{maxWait:s})})}function Aa(e,t,n){return Re(e,t,{...n,immediate:!0})}function Vu(e,t,n){let r;de(n)?r={evaluating:n}:r={};const{lazy:s=!1,evaluating:o=void 0,shallow:i=!0,onError:l=tt}=r,c=_e(!s),a=i?_e(t):Me(t);let f=0;return Wr(async h=>{if(!c.value)return;f++;const p=f;let y=!1;o&&Promise.resolve().then(()=>{o.value=!0});try{const E=await e(R=>{h(()=>{o&&(o.value=!1),y||R()})});p===f&&(a.value=E)}catch(E){l(E)}finally{o&&p===f&&(o.value=!1),y=!0}}),s?ne(()=>(c.value=!0,a.value)):a}const Pe=bi?window:void 0;function zr(e){var t;const n=ie(e);return(t=n==null?void 0:n.$el)!=null?t:n}function ke(...e){const t=[],n=()=>{t.forEach(l=>l()),t.length=0},r=(l,c,a,f)=>(l.addEventListener(c,a,f),()=>l.removeEventListener(c,a,f)),s=ne(()=>{const l=rr(ie(e[0])).filter(c=>c!=null);return l.every(c=>typeof c!="string")?l:void 0}),o=Aa(()=>{var l,c;return[(c=(l=s.value)==null?void 0:l.map(a=>zr(a)))!=null?c:[Pe].filter(a=>a!=null),rr(ie(s.value?e[1]:e[0])),rr(Vr(s.value?e[2]:e[1])),ie(s.value?e[3]:e[2])]},([l,c,a,f])=>{if(n(),!(l!=null&&l.length)||!(c!=null&&c.length)||!(a!=null&&a.length))return;const h=_a(f)?{...f}:f;t.push(...l.flatMap(p=>c.flatMap(y=>a.map(E=>r(p,y,E,h)))))},{flush:"post"}),i=()=>{o(),n()};return _i(n),i}function Ra(){const e=_e(!1),t=zt();return t&&Rt(()=>{e.value=!0},t),e}function Oa(e){const t=Ra();return ne(()=>(t.value,!!e()))}function La(e){return typeof e=="function"?e:typeof e=="string"?t=>t.key===e:Array.isArray(e)?t=>e.includes(t.key):()=>!0}function Du(...e){let t,n,r={};e.length===3?(t=e[0],n=e[1],r=e[2]):e.length===2?typeof e[1]=="object"?(t=!0,n=e[0],r=e[1]):(t=e[0],n=e[1]):(t=!0,n=e[0]);const{target:s=Pe,eventName:o="keydown",passive:i=!1,dedupe:l=!1}=r,c=La(t);return ke(s,o,f=>{f.repeat&&ie(l)||c(f)&&n(f)},i)}const Ia=Symbol("vueuse-ssr-width");function Ma(){const e=Do()?ya(Ia,null):null;return typeof e=="number"?e:void 0}function Ci(e,t={}){const{window:n=Pe,ssrWidth:r=Ma()}=t,s=Oa(()=>n&&"matchMedia"in n&&typeof n.matchMedia=="function"),o=_e(typeof r=="number"),i=_e(),l=_e(!1),c=a=>{l.value=a.matches};return Wr(()=>{if(o.value){o.value=!s.value;const a=ie(e).split(",");l.value=a.some(f=>{const h=f.includes("not all"),p=f.match(/\(\s*min-width:\s*(-?\d+(?:\.\d*)?[a-z]+\s*)\)/),y=f.match(/\(\s*max-width:\s*(-?\d+(?:\.\d*)?[a-z]+\s*)\)/);let E=!!(p||y);return p&&E&&(E=r>=qs(p[1])),y&&E&&(E=r<=qs(y[1])),h?!E:E});return}s.value&&(i.value=n.matchMedia(ie(e)),l.value=i.value.matches)}),ke(i,"change",c,{passive:!0}),ne(()=>l.value)}const un=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},fn="__vueuse_ssr_handlers__",Pa=Na();function Na(){return fn in un||(un[fn]=un[fn]||{}),un[fn]}function Ti(e,t){return Pa[e]||t}function xi(e){return Ci("(prefers-color-scheme: dark)",e)}function Fa(e){return e==null?"any":e instanceof Set?"set":e instanceof Map?"map":e instanceof Date?"date":typeof e=="boolean"?"boolean":typeof e=="string"?"string":typeof e=="object"?"object":Number.isNaN(e)?"any":"number"}const Ha={boolean:{read:e=>e==="true",write:e=>String(e)},object:{read:e=>JSON.parse(e),write:e=>JSON.stringify(e)},number:{read:e=>Number.parseFloat(e),write:e=>String(e)},any:{read:e=>e,write:e=>String(e)},string:{read:e=>e,write:e=>String(e)},map:{read:e=>new Map(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))},set:{read:e=>new Set(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e))},date:{read:e=>new Date(e),write:e=>e.toISOString()}},Gs="vueuse-storage";function Xr(e,t,n,r={}){var s;const{flush:o="pre",deep:i=!0,listenToStorageChanges:l=!0,writeDefaults:c=!0,mergeDefaults:a=!1,shallow:f,window:h=Pe,eventFilter:p,onError:y=x=>{console.error(x)},initOnMounted:E}=r,R=(f?_e:Me)(typeof t=="function"?t():t),k=ne(()=>ie(e));if(!n)try{n=Ti("getDefaultStorage",()=>{var x;return(x=Pe)==null?void 0:x.localStorage})()}catch(x){y(x)}if(!n)return R;const $=ie(t),j=Fa($),g=(s=r.serializer)!=null?s:Ha[j],{pause:v,resume:N}=xa(R,()=>T(R.value),{flush:o,deep:i,eventFilter:p});Re(k,()=>C(),{flush:o}),h&&l&&kn(()=>{n instanceof Storage?ke(h,"storage",C,{passive:!0}):ke(h,Gs,M),E&&C()}),E||C();function O(x,w){if(h){const F={key:k.value,oldValue:x,newValue:w,storageArea:n};h.dispatchEvent(n instanceof Storage?new StorageEvent("storage",F):new CustomEvent(Gs,{detail:F}))}}function T(x){try{const w=n.getItem(k.value);if(x==null)O(w,null),n.removeItem(k.value);else{const F=g.write(x);w!==F&&(n.setItem(k.value,F),O(w,F))}}catch(w){y(w)}}function V(x){const w=x?x.newValue:n.getItem(k.value);if(w==null)return c&&$!=null&&n.setItem(k.value,g.write($)),$;if(!x&&a){const F=g.read(w);return typeof a=="function"?a(F,$):j==="object"&&!Array.isArray(F)?{...$,...F}:F}else return typeof w!="string"?w:g.read(w)}function C(x){if(!(x&&x.storageArea!==n)){if(x&&x.key==null){R.value=$;return}if(!(x&&x.key!==k.value)){v();try{(x==null?void 0:x.newValue)!==g.write(R.value)&&(R.value=V(x))}catch(w){y(w)}finally{x?Nn(N):N()}}}}function M(x){C(x.detail)}return R}const $a="*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}";function ja(e={}){const{selector:t="html",attribute:n="class",initialValue:r="auto",window:s=Pe,storage:o,storageKey:i="vueuse-color-scheme",listenToStorageChanges:l=!0,storageRef:c,emitAuto:a,disableTransition:f=!0}=e,h={auto:"",light:"light",dark:"dark",...e.modes||{}},p=xi({window:s}),y=ne(()=>p.value?"dark":"light"),E=c||(i==null?Gr(r):Xr(i,r,o,{window:s,listenToStorageChanges:l})),R=ne(()=>E.value==="auto"?y.value:E.value),k=Ti("updateHTMLAttrs",(v,N,O)=>{const T=typeof v=="string"?s==null?void 0:s.document.querySelector(v):zr(v);if(!T)return;const V=new Set,C=new Set;let M=null;if(N==="class"){const w=O.split(/\s/g);Object.values(h).flatMap(F=>(F||"").split(/\s/g)).filter(Boolean).forEach(F=>{w.includes(F)?V.add(F):C.add(F)})}else M={key:N,value:O};if(V.size===0&&C.size===0&&M===null)return;let x;f&&(x=s.document.createElement("style"),x.appendChild(document.createTextNode($a)),s.document.head.appendChild(x));for(const w of V)T.classList.add(w);for(const w of C)T.classList.remove(w);M&&T.setAttribute(M.key,M.value),f&&(s.getComputedStyle(x).opacity,document.head.removeChild(x))});function $(v){var N;k(t,n,(N=h[v])!=null?N:v)}function j(v){e.onChanged?e.onChanged(v,$):$(v)}Re(R,j,{flush:"post",immediate:!0}),kn(()=>j(R.value));const g=ne({get(){return a?E.value:R.value},set(v){E.value=v}});return Object.assign(g,{store:E,system:y,state:R})}function Va(e={}){const{valueDark:t="dark",valueLight:n=""}=e,r=ja({...e,onChanged:(i,l)=>{var c;e.onChanged?(c=e.onChanged)==null||c.call(e,i==="dark",l,i):l(i)},modes:{dark:t,light:n}}),s=ne(()=>r.system.value);return ne({get(){return r.value==="dark"},set(i){const l=i?"dark":"light";s.value===l?r.value="auto":r.value=l}})}function sr(e){return typeof Window<"u"&&e instanceof Window?e.document.documentElement:typeof Document<"u"&&e instanceof Document?e.documentElement:e}const zs=1;function Da(e,t={}){const{throttle:n=0,idle:r=200,onStop:s=tt,onScroll:o=tt,offset:i={left:0,right:0,top:0,bottom:0},eventListenerOptions:l={capture:!1,passive:!0},behavior:c="auto",window:a=Pe,onError:f=T=>{console.error(T)}}=t,h=_e(0),p=_e(0),y=ne({get(){return h.value},set(T){R(T,void 0)}}),E=ne({get(){return p.value},set(T){R(void 0,T)}});function R(T,V){var C,M,x,w;if(!a)return;const F=ie(e);if(!F)return;(x=F instanceof Document?a.document.body:F)==null||x.scrollTo({top:(C=ie(V))!=null?C:E.value,left:(M=ie(T))!=null?M:y.value,behavior:ie(c)});const Q=((w=F==null?void 0:F.document)==null?void 0:w.documentElement)||(F==null?void 0:F.documentElement)||F;y!=null&&(h.value=Q.scrollLeft),E!=null&&(p.value=Q.scrollTop)}const k=_e(!1),$=xt({left:!0,right:!1,top:!0,bottom:!1}),j=xt({left:!1,right:!1,top:!1,bottom:!1}),g=T=>{k.value&&(k.value=!1,j.left=!1,j.right=!1,j.top=!1,j.bottom=!1,s(T))},v=Ca(g,n+r),N=T=>{var V;if(!a)return;const C=((V=T==null?void 0:T.document)==null?void 0:V.documentElement)||(T==null?void 0:T.documentElement)||zr(T),{display:M,flexDirection:x,direction:w}=getComputedStyle(C),F=w==="rtl"?-1:1,Q=C.scrollLeft;j.left=Qh.value;const se=Math.abs(Q*F)<=(i.left||0),U=Math.abs(Q*F)+C.clientWidth>=C.scrollWidth-(i.right||0)-zs;M==="flex"&&x==="row-reverse"?($.left=U,$.right=se):($.left=se,$.right=U),h.value=Q;let G=C.scrollTop;T===a.document&&!G&&(G=a.document.body.scrollTop),j.top=Gp.value;const D=Math.abs(G)<=(i.top||0),Se=Math.abs(G)+C.clientHeight>=C.scrollHeight-(i.bottom||0)-zs;M==="flex"&&x==="column-reverse"?($.top=Se,$.bottom=D):($.top=D,$.bottom=Se),p.value=G},O=T=>{var V;if(!a)return;const C=(V=T.target.documentElement)!=null?V:T.target;N(C),k.value=!0,v(T),o(T)};return ke(e,"scroll",n?Ta(O,n,!0,!1):O,l),kn(()=>{try{const T=ie(e);if(!T)return;N(T)}catch(T){f(T)}}),ke(e,"scrollend",g,l),{x:y,y:E,isScrolling:k,arrivedState:$,directions:j,measure(){const T=ie(e);a&&T&&N(T)}}}function Uu(e,t,n={}){const{window:r=Pe}=n;return Xr(e,t,r==null?void 0:r.localStorage,n)}function Ai(e){const t=window.getComputedStyle(e);if(t.overflowX==="scroll"||t.overflowY==="scroll"||t.overflowX==="auto"&&e.clientWidth1?!0:(t.preventDefault&&t.preventDefault(),!1)}const or=new WeakMap;function ku(e,t=!1){const n=_e(t);let r=null,s="";Re(Gr(e),l=>{const c=sr(ie(l));if(c){const a=c;if(or.get(a)||or.set(a,a.style.overflow),a.style.overflow!=="hidden"&&(s=a.style.overflow),a.style.overflow==="hidden")return n.value=!0;if(n.value)return a.style.overflow="hidden"}},{immediate:!0});const o=()=>{const l=sr(ie(e));!l||n.value||(Ks&&(r=ke(l,"touchmove",c=>{Ua(c)},{passive:!1})),l.style.overflow="hidden",n.value=!0)},i=()=>{const l=sr(ie(e));!l||!n.value||(Ks&&(r==null||r()),l.style.overflow=s,or.delete(l),n.value=!1)};return _i(i),ne({get(){return n.value},set(l){l?o():i()}})}function Bu(e,t,n={}){const{window:r=Pe}=n;return Xr(e,t,r==null?void 0:r.sessionStorage,n)}function Wu(e={}){const{window:t=Pe,...n}=e;return Da(t,n)}function Ku(e={}){const{window:t=Pe,initialWidth:n=Number.POSITIVE_INFINITY,initialHeight:r=Number.POSITIVE_INFINITY,listenOrientation:s=!0,includeScrollbar:o=!0,type:i="inner"}=e,l=_e(n),c=_e(r),a=()=>{if(t)if(i==="outer")l.value=t.outerWidth,c.value=t.outerHeight;else if(i==="visual"&&t.visualViewport){const{width:h,height:p,scale:y}=t.visualViewport;l.value=Math.round(h*y),c.value=Math.round(p*y)}else o?(l.value=t.innerWidth,c.value=t.innerHeight):(l.value=t.document.documentElement.clientWidth,c.value=t.document.documentElement.clientHeight)};a(),kn(a);const f={passive:!0};if(ke("resize",a,f),t&&i==="visual"&&t.visualViewport&&ke(t.visualViewport,"resize",a,f),s){const h=Ci("(orientation: portrait)");Re(h,()=>a())}return{width:l,height:c}}const ir={};var lr={};const Ri=/^(?:[a-z]+:|\/\/)/i,ka="vitepress-theme-appearance",Ba=/#.*$/,Wa=/[?#].*$/,Ka=/(?:(^|\/)index)?\.(?:md|html)$/,he=typeof document<"u",Oi={relativePath:"404.md",filePath:"",title:"404",description:"Not Found",headers:[],frontmatter:{sidebar:!1,layout:"page"},lastUpdated:0,isNotFound:!0};function qa(e,t,n=!1){if(t===void 0)return!1;if(e=Xs(`/${e}`),n)return new RegExp(t).test(e);if(Xs(t)!==e)return!1;const r=t.match(Ba);return r?(he?location.hash:"")===r[0]:!0}function Xs(e){return decodeURI(e).replace(Wa,"").replace(Ka,"$1")}function Ga(e){return Ri.test(e)}function za(e,t){return Object.keys((e==null?void 0:e.locales)||{}).find(n=>n!=="root"&&!Ga(n)&&qa(t,`/${n}/`,!0))||"root"}function Xa(e,t){var r,s,o,i,l,c,a;const n=za(e,t);return Object.assign({},e,{localeIndex:n,lang:((r=e.locales[n])==null?void 0:r.lang)??e.lang,dir:((s=e.locales[n])==null?void 0:s.dir)??e.dir,title:((o=e.locales[n])==null?void 0:o.title)??e.title,titleTemplate:((i=e.locales[n])==null?void 0:i.titleTemplate)??e.titleTemplate,description:((l=e.locales[n])==null?void 0:l.description)??e.description,head:Ii(e.head,((c=e.locales[n])==null?void 0:c.head)??[]),themeConfig:{...e.themeConfig,...(a=e.locales[n])==null?void 0:a.themeConfig}})}function Li(e,t){const n=t.title||e.title,r=t.titleTemplate??e.titleTemplate;if(typeof r=="string"&&r.includes(":title"))return r.replace(/:title/g,n);const s=Ya(e.title,r);return n===s.slice(3)?n:`${n}${s}`}function Ya(e,t){return t===!1?"":t===!0||t===void 0?` | ${e}`:e===t?"":` | ${t}`}function Ja(e,t){const[n,r]=t;if(n!=="meta")return!1;const s=Object.entries(r)[0];return s==null?!1:e.some(([o,i])=>o===n&&i[s[0]]===s[1])}function Ii(e,t){return[...e.filter(n=>!Ja(t,n)),...t]}const Qa=/[\u0000-\u001F"#$&*+,:;<=>?[\]^`{|}\u007F]/g,Za=/^[a-z]:/i;function Ys(e){const t=Za.exec(e),n=t?t[0]:"";return n+e.slice(n.length).replace(Qa,"_").replace(/(^|\/)_+(?=[^/]*$)/,"$1")}const cr=new Set;function eu(e){if(cr.size===0){const n=typeof process=="object"&&(lr==null?void 0:lr.VITE_EXTRA_EXTENSIONS)||(ir==null?void 0:ir.VITE_EXTRA_EXTENSIONS)||"";("3g2,3gp,aac,ai,apng,au,avif,bin,bmp,cer,class,conf,crl,css,csv,dll,doc,eps,epub,exe,gif,gz,ics,ief,jar,jpe,jpeg,jpg,js,json,jsonld,m4a,man,mid,midi,mjs,mov,mp2,mp3,mp4,mpe,mpeg,mpg,mpp,oga,ogg,ogv,ogx,opus,otf,p10,p7c,p7m,p7s,pdf,png,ps,qt,roff,rtf,rtx,ser,svg,t,tif,tiff,tr,ts,tsv,ttf,txt,vtt,wav,weba,webm,webp,woff,woff2,xhtml,xml,yaml,yml,zip"+(n&&typeof n=="string"?","+n:"")).split(",").forEach(r=>cr.add(r))}const t=e.split(".").pop();return t==null||!cr.has(t.toLowerCase())}function qu(e){return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}const tu=Symbol(),pt=_e($i);function Gu(e){const t=ne(()=>Xa(pt.value,e.data.relativePath)),n=t.value.appearance,r=n==="force-dark"?Me(!0):n==="force-auto"?xi():n?Va({storageKey:ka,initialValue:()=>n==="dark"?"dark":"auto",...typeof n=="object"?n:{}}):Me(!1),s=Me(he?location.hash:"");return he&&window.addEventListener("hashchange",()=>{s.value=location.hash}),Re(()=>e.data,()=>{s.value=he?location.hash:""}),{site:t,theme:ne(()=>t.value.themeConfig),page:ne(()=>e.data),frontmatter:ne(()=>e.data.frontmatter),params:ne(()=>e.data.params),lang:ne(()=>t.value.lang),dir:ne(()=>e.data.frontmatter.dir||t.value.dir),localeIndex:ne(()=>t.value.localeIndex||"root"),title:ne(()=>Li(t.value,e.data)),description:ne(()=>e.data.description||t.value.description),isDark:r,hash:ne(()=>s.value)}}function nu(){const e=ht(tu);if(!e)throw new Error("vitepress data not properly injected in app");return e}function ru(e,t){return`${e}${t}`.replace(/\/+/g,"/")}function Js(e){return Ri.test(e)||!e.startsWith("/")?e:ru(pt.value.base,e)}function su(e){let t=e.replace(/\.html$/,"");if(t=decodeURIComponent(t),t=t.replace(/\/$/,"/index"),he){const n="/";t=Ys(t.slice(n.length).replace(/\//g,"_")||"index")+".md";let r=__VP_HASH_MAP__[t.toLowerCase()];if(r||(t=t.endsWith("_index.md")?t.slice(0,-9)+".md":t.slice(0,-3)+"_index.md",r=__VP_HASH_MAP__[t.toLowerCase()]),!r)return null;t=`${n}assets/${t}.${r}.js`}else t=`./${Ys(t.slice(1).replace(/\//g,"_"))}.md.js`;return t}let _n=[];function zu(e){_n.push(e),Vn(()=>{_n=_n.filter(t=>t!==e)})}function ou(){let e=pt.value.scrollOffset,t=0,n=24;if(typeof e=="object"&&"padding"in e&&(n=e.padding,e=e.selector),typeof e=="number")t=e;else if(typeof e=="string")t=Qs(e,n);else if(Array.isArray(e))for(const r of e){const s=Qs(r,n);if(s){t=s;break}}return t}function Qs(e,t){const n=document.querySelector(e);if(!n)return 0;const r=n.getBoundingClientRect().bottom;return r<0?0:r+t}const iu=Symbol(),Mi="http://a.com",lu=()=>({path:"/",component:null,data:Oi});function Xu(e,t){const n=xt(lu()),r={route:n,go:s};async function s(l=he?location.href:"/"){var c,a;l=ar(l),await((c=r.onBeforeRouteChange)==null?void 0:c.call(r,l))!==!1&&(he&&l!==ar(location.href)&&(history.replaceState({scrollPosition:window.scrollY},""),history.pushState({},"",l)),await i(l),await((a=r.onAfterRouteChange??r.onAfterRouteChanged)==null?void 0:a(l)))}let o=null;async function i(l,c=0,a=!1){var p,y;if(await((p=r.onBeforePageLoad)==null?void 0:p.call(r,l))===!1)return;const f=new URL(l,Mi),h=o=f.pathname;try{let E=await e(h);if(!E)throw new Error(`Page not found: ${h}`);if(o===h){o=null;const{default:R,__pageData:k}=E;if(!R)throw new Error(`Invalid route component: ${R}`);await((y=r.onAfterPageLoad)==null?void 0:y.call(r,l)),n.path=he?h:Js(h),n.component=mn(R),n.data=mn(k),he&&Nn(()=>{let $=pt.value.base+k.relativePath.replace(/(?:(^|\/)index)?\.md$/,"$1");if(!pt.value.cleanUrls&&!$.endsWith("/")&&($+=".html"),$!==f.pathname&&(f.pathname=$,l=$+f.search+f.hash,history.replaceState({},"",l)),f.hash&&!c){let j=null;try{j=document.getElementById(decodeURIComponent(f.hash).slice(1))}catch(g){console.warn(g)}if(j){Zs(j,f.hash);return}}window.scrollTo(0,c)})}}catch(E){if(!/fetch|Page not found/.test(E.message)&&!/^\/404(\.html|\/)?$/.test(l)&&console.error(E),!a)try{const R=await fetch(pt.value.base+"hashmap.json");window.__VP_HASH_MAP__=await R.json(),await i(l,c,!0);return}catch{}if(o===h){o=null,n.path=he?h:Js(h),n.component=t?mn(t):null;const R=he?h.replace(/(^|\/)$/,"$1index").replace(/(\.html)?$/,".md").replace(/^\//,""):"404.md";n.data={...Oi,relativePath:R}}}}return he&&(history.state===null&&history.replaceState({},""),window.addEventListener("click",l=>{if(l.defaultPrevented||!(l.target instanceof Element)||l.target.closest("button")||l.button!==0||l.ctrlKey||l.shiftKey||l.altKey||l.metaKey)return;const c=l.target.closest("a");if(!c||c.closest(".vp-raw")||c.hasAttribute("download")||c.hasAttribute("target"))return;const a=c.getAttribute("href")??(c instanceof SVGAElement?c.getAttribute("xlink:href"):null);if(a==null)return;const{href:f,origin:h,pathname:p,hash:y,search:E}=new URL(a,c.baseURI),R=new URL(location.href);h===R.origin&&eu(p)&&(l.preventDefault(),p===R.pathname&&E===R.search?(y!==R.hash&&(history.pushState({},"",f),window.dispatchEvent(new HashChangeEvent("hashchange",{oldURL:R.href,newURL:f}))),y?Zs(c,y,c.classList.contains("header-anchor")):window.scrollTo(0,0)):s(f))},{capture:!0}),window.addEventListener("popstate",async l=>{var a;if(l.state===null)return;const c=ar(location.href);await i(c,l.state&&l.state.scrollPosition||0),await((a=r.onAfterRouteChange??r.onAfterRouteChanged)==null?void 0:a(c))}),window.addEventListener("hashchange",l=>{l.preventDefault()})),r}function cu(){const e=ht(iu);if(!e)throw new Error("useRouter() is called without provider.");return e}function Pi(){return cu().route}function Zs(e,t,n=!1){let r=null;try{r=e.classList.contains("header-anchor")?e:document.getElementById(decodeURIComponent(t).slice(1))}catch(s){console.warn(s)}if(r){let s=function(){!n||Math.abs(i-window.scrollY)>window.innerHeight?window.scrollTo(0,i):window.scrollTo({left:0,top:i,behavior:"smooth"})};const o=parseInt(window.getComputedStyle(r).paddingTop,10),i=window.scrollY+r.getBoundingClientRect().top-ou()+o;requestAnimationFrame(s)}}function ar(e){const t=new URL(e,Mi);return t.pathname=t.pathname.replace(/(^|\/)index(\.html)?$/,"$1"),pt.value.cleanUrls?t.pathname=t.pathname.replace(/\.html$/,""):!t.pathname.endsWith("/")&&!t.pathname.endsWith(".html")&&(t.pathname+=".html"),t.pathname+t.search+t.hash}const dn=()=>_n.forEach(e=>e()),Yu=Ur({name:"VitePressContent",props:{as:{type:[Object,String],default:"div"}},setup(e){const t=Pi(),{frontmatter:n,site:r}=nu();return Re(n,dn,{deep:!0,flush:"post"}),()=>Cr(e.as,r.value.contentProps??{style:{position:"relative"}},[t.component?Cr(t.component,{onVnodeMounted:dn,onVnodeUpdated:dn,onVnodeUnmounted:dn}):"404 Page Not Found"])}}),Ju=(e,t)=>{const n=e.__vccOpts||e;for(const[r,s]of t)n[r]=s;return n},au="modulepreload",uu=function(e){return"/"+e},eo={},Qu=function(t,n,r){let s=Promise.resolve();if(n&&n.length>0){document.getElementsByTagName("link");const i=document.querySelector("meta[property=csp-nonce]"),l=(i==null?void 0:i.nonce)||(i==null?void 0:i.getAttribute("nonce"));s=Promise.allSettled(n.map(c=>{if(c=uu(c),c in eo)return;eo[c]=!0;const a=c.endsWith(".css"),f=a?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${c}"]${f}`))return;const h=document.createElement("link");if(h.rel=a?"stylesheet":au,a||(h.as="script"),h.crossOrigin="",h.href=c,l&&h.setAttribute("nonce",l),document.head.appendChild(h),a)return new Promise((p,y)=>{h.addEventListener("load",p),h.addEventListener("error",()=>y(new Error(`Unable to preload CSS for ${c}`)))})}))}function o(i){const l=new Event("vite:preloadError",{cancelable:!0});if(l.payload=i,window.dispatchEvent(l),!l.defaultPrevented)throw i}return s.then(i=>{for(const l of i||[])l.status==="rejected"&&o(l.reason);return t().catch(o)})},Zu=Ur({setup(e,{slots:t}){const n=Me(!1);return Rt(()=>{n.value=!0}),()=>n.value&&t.default?t.default():null}});function ef(){he&&window.addEventListener("click",e=>{var n;const t=e.target;if(t.matches(".vp-code-group input")){const r=(n=t.parentElement)==null?void 0:n.parentElement;if(!r)return;const s=Array.from(r.querySelectorAll("input")).indexOf(t);if(s<0)return;const o=r.querySelector(".blocks");if(!o)return;const i=Array.from(o.children).find(a=>a.classList.contains("active"));if(!i)return;const l=o.children[s];if(!l||i===l)return;i.classList.remove("active"),l.classList.add("active");const c=r==null?void 0:r.querySelector(`label[for="${t.id}"]`);c==null||c.scrollIntoView({block:"nearest"})}})}function tf(){if(he){const e=new WeakMap;window.addEventListener("click",t=>{var r;const n=t.target;if(n.matches('div[class*="language-"] > button.copy')){const s=n.parentElement,o=(r=n.nextElementSibling)==null?void 0:r.nextElementSibling;if(!s||!o)return;const i=/language-(shellscript|shell|bash|sh|zsh)/.test(s.className),l=[".vp-copy-ignore",".diff.remove"],c=o.cloneNode(!0);c.querySelectorAll(l.join(",")).forEach(f=>f.remove());let a=c.textContent||"";i&&(a=a.replace(/^ *(\$|>) /gm,"").trim()),fu(a).then(()=>{n.classList.add("copied"),clearTimeout(e.get(n));const f=setTimeout(()=>{n.classList.remove("copied"),n.blur(),e.delete(n)},2e3);e.set(n,f)})}})}}async function fu(e){try{return navigator.clipboard.writeText(e)}catch{const t=document.createElement("textarea"),n=document.activeElement;t.value=e,t.setAttribute("readonly",""),t.style.contain="strict",t.style.position="absolute",t.style.left="-9999px",t.style.fontSize="12pt";const r=document.getSelection(),s=r?r.rangeCount>0&&r.getRangeAt(0):null;document.body.appendChild(t),t.select(),t.selectionStart=0,t.selectionEnd=e.length,document.execCommand("copy"),document.body.removeChild(t),s&&(r.removeAllRanges(),r.addRange(s)),n&&n.focus()}}function nf(e,t){let n=!0,r=[];const s=o=>{if(n){n=!1,o.forEach(l=>{const c=ur(l);for(const a of document.head.children)if(a.isEqualNode(c)){r.push(a);return}});return}const i=o.map(ur);r.forEach((l,c)=>{const a=i.findIndex(f=>f==null?void 0:f.isEqualNode(l??null));a!==-1?delete i[a]:(l==null||l.remove(),delete r[c])}),i.forEach(l=>l&&document.head.appendChild(l)),r=[...r,...i].filter(Boolean)};Wr(()=>{const o=e.data,i=t.value,l=o&&o.description,c=o&&o.frontmatter.head||[],a=Li(i,o);a!==document.title&&(document.title=a);const f=l||i.description;let h=document.querySelector("meta[name=description]");h?h.getAttribute("content")!==f&&h.setAttribute("content",f):ur(["meta",{name:"description",content:f}]),s(Ii(i.head,hu(c)))})}function ur([e,t,n]){const r=document.createElement(e);for(const s in t)r.setAttribute(s,t[s]);return n&&(r.innerHTML=n),e==="script"&&t.async==null&&(r.async=!1),r}function du(e){return e[0]==="meta"&&e[1]&&e[1].name==="description"}function hu(e){return e.filter(t=>!du(t))}const fr=new Set,Ni=()=>document.createElement("link"),pu=e=>{const t=Ni();t.rel="prefetch",t.href=e,document.head.appendChild(t)},gu=e=>{const t=new XMLHttpRequest;t.open("GET",e,t.withCredentials=!0),t.send()};let hn;const mu=he&&(hn=Ni())&&hn.relList&&hn.relList.supports&&hn.relList.supports("prefetch")?pu:gu;function rf(){if(!he||!window.IntersectionObserver)return;let e;if((e=navigator.connection)&&(e.saveData||/2g/.test(e.effectiveType)))return;const t=window.requestIdleCallback||setTimeout;let n=null;const r=()=>{n&&n.disconnect(),n=new IntersectionObserver(o=>{o.forEach(i=>{if(i.isIntersecting){const l=i.target;n.unobserve(l);const{pathname:c}=l;if(!fr.has(c)){fr.add(c);const a=su(c);a&&mu(a)}}})}),t(()=>{document.querySelectorAll("#app a").forEach(o=>{const{hostname:i,pathname:l}=new URL(o.href instanceof SVGAnimatedString?o.href.animVal:o.href,o.baseURI),c=l.match(/\.\w+$/);c&&c[0]!==".html"||o.target!=="_blank"&&i===location.hostname&&(l!==location.pathname?n.observe(o):fr.add(l))})})};Rt(r);const s=Pi();Re(()=>s.path,r),Vn(()=>{n&&n.disconnect()})}export{Tu as $,_u as A,Lr as B,Eu as C,_e as D,zu as E,ve as F,le as G,Cu as H,Ri as I,bu as J,ui as K,Pi as L,Ic as M,ht as N,Ku as O,Or as P,Du as Q,Nn as R,Wu as S,pi as T,he as U,Pn as V,Su as W,Qu as X,ku as Y,sc as Z,Ju as _,Ou as a,Nu as a0,Fo as a1,Pu as a2,xu as a3,xt as a4,nf as a5,iu as a6,Gu as a7,tu as a8,Yu as a9,Fu as aA,qu as aB,Zu as aa,pt as ab,Xu as ac,su as ad,Hu as ae,rf as af,tf as ag,ef as ah,Cr as ai,Lu as aj,ie as ak,rr as al,zr as am,$u as an,_i as ao,Vu as ap,Bu as aq,Uu as ar,ju as as,cu as at,ke as au,wu as av,Mu as aw,de as ax,Ru as ay,mn as az,Iu as b,li as c,Ur as d,Js as e,ne as f,ai as g,Yi as h,Ga as i,Vr as j,vu as k,qa as l,Ci as m,Re as n,oi as o,yu as p,Wr as q,Me as r,Rt as s,eu as t,nu as u,Vn as v,Hl as w,Au as x,Wl as y,ou as z}; diff --git a/.vitepress/dist/assets/chunks/theme.C9_-QGMz.js b/.vitepress/dist/assets/chunks/theme.C9_-QGMz.js new file mode 100644 index 0000000..a784ccb --- /dev/null +++ b/.vitepress/dist/assets/chunks/theme.C9_-QGMz.js @@ -0,0 +1,4 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/chunks/VPLocalSearchBox.CRB2ZbE3.js","assets/chunks/framework.BKXlU_Nx.js"])))=>i.map(i=>d[i]); +import{d as _,c as k,o as s,T as Me,w as p,a as u,b as h,_ as y,u as bt,i as kt,t as yt,e as ze,f as L,g as m,h as A,j as i,k as se,l as Ne,r as H,m as Q,n as be,p as x,q as Ae,s as Be,v as $t,x as Lt,y as re,z as M,F as B,A as G,B as Xe,C as ke,D as b,E as c,G as Ze,H as X,I as ce,J as de,K as oe,L as ye,M as Pt,N as Qe,O as Ee,P as Oe,Q as xe,R as $e,S as St,U as Vt,V as Tt,W as et,X as tt,Y as wt,Z as Nt,$ as Et,a0 as It,a1 as Ct,a2 as Ht}from"./framework.BKXlU_Nx.js";/*! medium-zoom 1.1.0 | MIT License | https://github.com/francoischalifour/medium-zoom */var ae=Object.assign||function(a){for(var e=1;e1&&arguments[1]!==void 0?arguments[1]:{},n=window.Promise||function(S){function w(){}S(w,w)},o=function(S){var w=S.target;if(w===me){E();return}D.indexOf(w)!==-1&&F({target:w})},r=function(){if(!(Y||!f.original)){var S=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0;Math.abs(We-S)>z.scrollOffset&&setTimeout(E,150)}},l=function(S){var w=S.key||S.keyCode;(w==="Escape"||w==="Esc"||w===27)&&E()},d=function(){var S=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},w=S;if(S.background&&(me.style.background=S.background),S.container&&S.container instanceof Object&&(w.container=ae({},z.container,S.container)),S.template){var O=he(S.template)?S.template:document.querySelector(S.template);w.template=O}return z=ae({},z,w),D.forEach(function(j){j.dispatchEvent(le("medium-zoom:update",{detail:{zoom:U}}))}),U},v=function(){var S=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};return a(ae({},z,S))},$=function(){for(var S=arguments.length,w=Array(S),O=0;O0?w.reduce(function(N,W){return[].concat(N,Je(W))},[]):D;return j.forEach(function(N){N.classList.remove("medium-zoom-image"),N.dispatchEvent(le("medium-zoom:detach",{detail:{zoom:U}}))}),D=D.filter(function(N){return j.indexOf(N)===-1}),U},g=function(S,w){var O=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return D.forEach(function(j){j.addEventListener("medium-zoom:"+S,w,O)}),te.push({type:"medium-zoom:"+S,listener:w,options:O}),U},P=function(S,w){var O=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return D.forEach(function(j){j.removeEventListener("medium-zoom:"+S,w,O)}),te=te.filter(function(j){return!(j.type==="medium-zoom:"+S&&j.listener.toString()===w.toString())}),U},I=function(){var S=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},w=S.target,O=function(){var N={width:document.documentElement.clientWidth,height:document.documentElement.clientHeight,left:0,top:0,right:0,bottom:0},W=void 0,K=void 0;if(z.container)if(z.container instanceof Object)N=ae({},N,z.container),W=N.width-N.left-N.right-z.margin*2,K=N.height-N.top-N.bottom-z.margin*2;else{var ie=he(z.container)?z.container:document.querySelector(z.container),ne=ie.getBoundingClientRect(),Pe=ne.width,lt=ne.height,ct=ne.left,ut=ne.top;N=ae({},N,{width:Pe,height:lt,left:ct,top:ut})}W=W||N.width-z.margin*2,K=K||N.height-z.margin*2;var ue=f.zoomedHd||f.original,dt=Ke(ue)?W:ue.naturalWidth||W,vt=Ke(ue)?K:ue.naturalHeight||K,pe=ue.getBoundingClientRect(),mt=pe.top,pt=pe.left,Se=pe.width,Ve=pe.height,ft=Math.min(Math.max(Se,dt),W)/Se,ht=Math.min(Math.max(Ve,vt),K)/Ve,Te=Math.min(ft,ht),_t=(-pt+(W-Se)/2+z.margin+N.left)/Te,gt=(-mt+(K-Ve)/2+z.margin+N.top)/Te,Re="scale("+Te+") translate3d("+_t+"px, "+gt+"px, 0)";f.zoomed.style.transform=Re,f.zoomedHd&&(f.zoomedHd.style.transform=Re)};return new n(function(j){if(w&&D.indexOf(w)===-1){j(U);return}var N=function Pe(){Y=!1,f.zoomed.removeEventListener("transitionend",Pe),f.original.dispatchEvent(le("medium-zoom:opened",{detail:{zoom:U}})),j(U)};if(f.zoomed){j(U);return}if(w)f.original=w;else if(D.length>0){var W=D;f.original=W[0]}else{j(U);return}if(f.original.dispatchEvent(le("medium-zoom:open",{detail:{zoom:U}})),We=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,Y=!0,f.zoomed=At(f.original),document.body.appendChild(me),z.template){var K=he(z.template)?z.template:document.querySelector(z.template);f.template=document.createElement("div"),f.template.appendChild(K.content.cloneNode(!0)),document.body.appendChild(f.template)}if(f.original.parentElement&&f.original.parentElement.tagName==="PICTURE"&&f.original.currentSrc&&(f.zoomed.src=f.original.currentSrc),document.body.appendChild(f.zoomed),window.requestAnimationFrame(function(){document.body.classList.add("medium-zoom--opened")}),f.original.classList.add("medium-zoom-image--hidden"),f.zoomed.classList.add("medium-zoom-image--opened"),f.zoomed.addEventListener("click",E),f.zoomed.addEventListener("transitionend",N),f.original.getAttribute("data-zoom-src")){f.zoomedHd=f.zoomed.cloneNode(),f.zoomedHd.removeAttribute("srcset"),f.zoomedHd.removeAttribute("sizes"),f.zoomedHd.removeAttribute("loading"),f.zoomedHd.src=f.zoomed.getAttribute("data-zoom-src"),f.zoomedHd.onerror=function(){clearInterval(ie),console.warn("Unable to reach the zoom image target "+f.zoomedHd.src),f.zoomedHd=null,O()};var ie=setInterval(function(){f.zoomedHd.complete&&(clearInterval(ie),f.zoomedHd.classList.add("medium-zoom-image--opened"),f.zoomedHd.addEventListener("click",E),document.body.appendChild(f.zoomedHd),O())},10)}else if(f.original.hasAttribute("srcset")){f.zoomedHd=f.zoomed.cloneNode(),f.zoomedHd.removeAttribute("sizes"),f.zoomedHd.removeAttribute("loading");var ne=f.zoomedHd.addEventListener("load",function(){f.zoomedHd.removeEventListener("load",ne),f.zoomedHd.classList.add("medium-zoom-image--opened"),f.zoomedHd.addEventListener("click",E),document.body.appendChild(f.zoomedHd),O()})}else O()})},E=function(){return new n(function(S){if(Y||!f.original){S(U);return}var w=function O(){f.original.classList.remove("medium-zoom-image--hidden"),document.body.removeChild(f.zoomed),f.zoomedHd&&document.body.removeChild(f.zoomedHd),document.body.removeChild(me),f.zoomed.classList.remove("medium-zoom-image--opened"),f.template&&document.body.removeChild(f.template),Y=!1,f.zoomed.removeEventListener("transitionend",O),f.original.dispatchEvent(le("medium-zoom:closed",{detail:{zoom:U}})),f.original=null,f.zoomed=null,f.zoomedHd=null,f.template=null,S(U)};Y=!0,document.body.classList.remove("medium-zoom--opened"),f.zoomed.style.transform="",f.zoomedHd&&(f.zoomedHd.style.transform=""),f.template&&(f.template.style.transition="opacity 150ms",f.template.style.opacity=0),f.original.dispatchEvent(le("medium-zoom:close",{detail:{zoom:U}})),f.zoomed.addEventListener("transitionend",w)})},F=function(){var S=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},w=S.target;return f.original?E():I({target:w})},C=function(){return z},R=function(){return D},J=function(){return f.original},D=[],te=[],Y=!1,We=0,z=t,f={original:null,zoomed:null,zoomedHd:null,template:null};Object.prototype.toString.call(e)==="[object Object]"?z=e:(e||typeof e=="string")&&$(e),z=ae({margin:0,background:"#fff",scrollOffset:40,container:null,template:null},z);var me=zt(z.background);document.addEventListener("click",o),document.addEventListener("keyup",l),document.addEventListener("scroll",r),window.addEventListener("resize",E);var U={open:I,close:E,toggle:F,update:d,clone:v,attach:$,detach:T,on:g,off:P,getOptions:C,getImages:R,getZoomedImage:J};return U};function Ot(a,e){e===void 0&&(e={});var t=e.insertAt;if(!(typeof document>"u")){var n=document.head||document.getElementsByTagName("head")[0],o=document.createElement("style");o.type="text/css",t==="top"&&n.firstChild?n.insertBefore(o,n.firstChild):n.appendChild(o),o.styleSheet?o.styleSheet.cssText=a:o.appendChild(document.createTextNode(a))}}var Ft=".medium-zoom-overlay{position:fixed;top:0;right:0;bottom:0;left:0;opacity:0;transition:opacity .3s;will-change:opacity}.medium-zoom--opened .medium-zoom-overlay{cursor:pointer;cursor:zoom-out;opacity:1}.medium-zoom-image{cursor:pointer;cursor:zoom-in;transition:transform .3s cubic-bezier(.2,0,.2,1)!important}.medium-zoom-image--hidden{visibility:hidden}.medium-zoom-image--opened{position:relative;cursor:pointer;cursor:zoom-out;will-change:transform}";Ot(Ft);const Dt={key:0,class:"VPBackdrop"},jt=_({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(a){return(e,t)=>(s(),k(Me,{name:"fade"},{default:p(()=>[e.show?(s(),u("div",Dt)):h("",!0)]),_:1}))}}),Ut=y(jt,[["__scopeId","data-v-eab00006"]]),V=bt;function Gt(a,e){let t,n=!1;return()=>{t&&clearTimeout(t),n?t=setTimeout(a,e):(a(),(n=!0)&&setTimeout(()=>n=!1,e))}}function Ie(a){return a.startsWith("/")?a:`/${a}`}function Fe(a){const{pathname:e,search:t,hash:n,protocol:o}=new URL(a,"http://a.com");if(kt(a)||a.startsWith("#")||!o.startsWith("http")||!yt(e))return a;const{site:r}=V(),l=e.endsWith("/")||e.endsWith(".html")?a:a.replace(/(?:(^\.+)\/)?.*$/,`$1${e.replace(/(\.md)?$/,r.value.cleanUrls?"":".html")}${t}${n}`);return ze(l)}function ve({correspondingLink:a=!1}={}){const{site:e,localeIndex:t,page:n,theme:o,hash:r}=V(),l=L(()=>{var v,$;return{label:(v=e.value.locales[t.value])==null?void 0:v.label,link:(($=e.value.locales[t.value])==null?void 0:$.link)||(t.value==="root"?"/":`/${t.value}/`)}});return{localeLinks:L(()=>Object.entries(e.value.locales).flatMap(([v,$])=>l.value.label===$.label?[]:{text:$.label,link:qt($.link||(v==="root"?"/":`/${v}/`),o.value.i18nRouting!==!1&&a,n.value.relativePath.slice(l.value.link.length-1),!e.value.cleanUrls)+r.value})),currentLang:l}}function qt(a,e,t,n){return e?a.replace(/\/$/,"")+Ie(t.replace(/(^|\/)index\.md$/,"$1").replace(/\.md$/,n?".html":"")):a}const Wt={class:"NotFound"},Rt={class:"code"},Kt={class:"title"},Jt={class:"quote"},Yt={class:"action"},Xt=["href","aria-label"],Zt=_({__name:"NotFound",setup(a){const{theme:e}=V(),{currentLang:t}=ve();return(n,o)=>{var r,l,d,v,$;return s(),u("div",Wt,[m("p",Rt,A(((r=i(e).notFound)==null?void 0:r.code)??"404"),1),m("h1",Kt,A(((l=i(e).notFound)==null?void 0:l.title)??"PAGE NOT FOUND"),1),o[0]||(o[0]=m("div",{class:"divider"},null,-1)),m("blockquote",Jt,A(((d=i(e).notFound)==null?void 0:d.quote)??"But if you don't change your direction, and if you keep looking, you may end up where you are heading."),1),m("div",Yt,[m("a",{class:"link",href:i(ze)(i(t).link),"aria-label":((v=i(e).notFound)==null?void 0:v.linkLabel)??"go to home"},A((($=i(e).notFound)==null?void 0:$.linkText)??"Take me home"),9,Xt)])])}}}),Qt=y(Zt,[["__scopeId","data-v-60b89e81"]]);function nt(a,e){if(Array.isArray(a))return _e(a);if(a==null)return[];e=Ie(e);const t=Object.keys(a).sort((o,r)=>r.split("/").length-o.split("/").length).find(o=>e.startsWith(Ie(o))),n=t?a[t]:[];return Array.isArray(n)?_e(n):_e(n.items,n.base)}function xt(a){const e=[];let t=0;for(const n in a){const o=a[n];if(o.items){t=e.push(o);continue}e[t]||e.push({items:[]}),e[t].items.push(o)}return e}function en(a){const e=[];function t(n){for(const o of n)o.text&&o.link&&e.push({text:o.text,link:o.link,docFooterText:o.docFooterText}),o.items&&t(o.items)}return t(a),e}function Ce(a,e){return Array.isArray(e)?e.some(t=>Ce(a,t)):se(a,e.link)?!0:e.items?Ce(a,e.items):!1}function _e(a,e){return[...a].map(t=>{const n={...t},o=n.base||e;return o&&n.link&&(n.link=o+n.link),n.items&&(n.items=_e(n.items,o)),n})}function ee(){const{frontmatter:a,page:e,theme:t}=V(),n=Ne("(min-width: 960px)"),o=H(!1),r=L(()=>{const F=t.value.sidebar,C=e.value.relativePath;return F?nt(F,C):[]}),l=H(r.value);Q(r,(F,C)=>{JSON.stringify(F)!==JSON.stringify(C)&&(l.value=r.value)});const d=L(()=>a.value.sidebar!==!1&&l.value.length>0&&a.value.layout!=="home"),v=L(()=>$?a.value.aside==null?t.value.aside==="left":a.value.aside==="left":!1),$=L(()=>a.value.layout==="home"?!1:a.value.aside!=null?!!a.value.aside:t.value.aside!==!1),T=L(()=>d.value&&n.value),g=L(()=>d.value?xt(l.value):[]);function P(){o.value=!0}function I(){o.value=!1}function E(){o.value?I():P()}return{isOpen:o,sidebar:l,sidebarGroups:g,hasSidebar:d,hasAside:$,leftAside:v,isSidebarEnabled:T,open:P,close:I,toggle:E}}function tn(a,e){let t;be(()=>{t=a.value?document.activeElement:void 0}),x(()=>{window.addEventListener("keyup",n)}),Ae(()=>{window.removeEventListener("keyup",n)});function n(o){o.key==="Escape"&&a.value&&(e(),t==null||t.focus())}}function nn(a){const{page:e,hash:t}=V(),n=H(!1),o=L(()=>a.value.collapsed!=null),r=L(()=>!!a.value.link),l=H(!1),d=()=>{l.value=se(e.value.relativePath,a.value.link)};Q([e,a,t],d),x(d);const v=L(()=>l.value?!0:a.value.items?Ce(e.value.relativePath,a.value.items):!1),$=L(()=>!!(a.value.items&&a.value.items.length));be(()=>{n.value=!!(o.value&&a.value.collapsed)}),Be(()=>{(l.value||v.value)&&(n.value=!1)});function T(){o.value&&(n.value=!n.value)}return{collapsed:n,collapsible:o,isLink:r,isActiveLink:l,hasActiveLink:v,hasChildren:$,toggle:T}}function on(){const{hasSidebar:a}=ee(),e=Ne("(min-width: 960px)"),t=Ne("(min-width: 1280px)");return{isAsideEnabled:L(()=>!t.value&&!e.value?!1:a.value?t.value:e.value)}}const an=/\b(?:VPBadge|header-anchor|footnote-ref|ignore-header)\b/,He=[];function ot(a){return typeof a.outline=="object"&&!Array.isArray(a.outline)&&a.outline.label||a.outlineTitle||"On this page"}function De(a){const e=[...document.querySelectorAll(".VPDoc :where(h1,h2,h3,h4,h5,h6)")].filter(t=>t.id&&t.hasChildNodes()).map(t=>{const n=Number(t.tagName[1]);return{element:t,title:sn(t),link:"#"+t.id,level:n}});return rn(e,a)}function sn(a){let e="";for(const t of a.childNodes)if(t.nodeType===1){if(an.test(t.className))continue;e+=t.textContent}else t.nodeType===3&&(e+=t.textContent);return e.trim()}function rn(a,e){if(e===!1)return[];const t=(typeof e=="object"&&!Array.isArray(e)?e.level:e)||2,[n,o]=typeof t=="number"?[t,t]:t==="deep"?[2,6]:t;return un(a,n,o)}function ln(a,e){const{isAsideEnabled:t}=on(),n=Gt(r,100);let o=null;x(()=>{requestAnimationFrame(r),window.addEventListener("scroll",n)}),$t(()=>{l(location.hash)}),Ae(()=>{window.removeEventListener("scroll",n)});function r(){if(!t.value)return;const d=window.scrollY,v=window.innerHeight,$=document.body.offsetHeight,T=Math.abs(d+v-$)<1,g=He.map(({element:I,link:E})=>({link:E,top:cn(I)})).filter(({top:I})=>!Number.isNaN(I)).sort((I,E)=>I.top-E.top);if(!g.length){l(null);return}if(d<1){l(null);return}if(T){l(g[g.length-1].link);return}let P=null;for(const{link:I,top:E}of g){if(E>d+Lt()+4)break;P=I}l(P)}function l(d){o&&o.classList.remove("active"),d==null?o=null:o=a.value.querySelector(`a[href="${decodeURIComponent(d)}"]`);const v=o;v?(v.classList.add("active"),e.value.style.top=v.offsetTop+39+"px",e.value.style.opacity="1"):(e.value.style.top="33px",e.value.style.opacity="0")}}function cn(a){let e=0;for(;a!==document.body;){if(a===null)return NaN;e+=a.offsetTop,a=a.offsetParent}return e}function un(a,e,t){He.length=0;const n=[],o=[];return a.forEach(r=>{const l={...r,children:[]};let d=o[o.length-1];for(;d&&d.level>=l.level;)o.pop(),d=o[o.length-1];if(l.element.classList.contains("ignore-header")||d&&"shouldIgnore"in d){o.push({level:l.level,shouldIgnore:!0});return}l.level>t||l.level{const o=re("VPDocOutlineItem",!0);return s(),u("ul",{class:M(["VPDocOutlineItem",t.root?"root":"nested"])},[(s(!0),u(B,null,G(t.headers,({children:r,link:l,title:d})=>(s(),u("li",null,[m("a",{class:"outline-link",href:l,onClick:e,title:d},A(d),9,dn),r!=null&&r.length?(s(),k(o,{key:0,headers:r},null,8,["headers"])):h("",!0)]))),256))],2)}}}),at=y(vn,[["__scopeId","data-v-c8fd7940"]]),mn={class:"content"},pn={"aria-level":"2",class:"outline-title",id:"doc-outline-aria-label",role:"heading"},fn=_({__name:"VPDocAsideOutline",setup(a){const{frontmatter:e,theme:t}=V(),n=Xe([]);ke(()=>{n.value=De(e.value.outline??t.value.outline)});const o=H(),r=H();return ln(o,r),(l,d)=>(s(),u("nav",{"aria-labelledby":"doc-outline-aria-label",class:M(["VPDocAsideOutline",{"has-outline":n.value.length>0}]),ref_key:"container",ref:o},[m("div",mn,[m("div",{class:"outline-marker",ref_key:"marker",ref:r},null,512),m("div",pn,A(i(ot)(i(t))),1),b(at,{headers:n.value,root:!0},null,8,["headers"])])],2))}}),hn=y(fn,[["__scopeId","data-v-beb6bc9f"]]),_n={class:"VPDocAsideCarbonAds"},gn=_({__name:"VPDocAsideCarbonAds",props:{carbonAds:{}},setup(a){const e=()=>null;return(t,n)=>(s(),u("div",_n,[b(i(e),{"carbon-ads":t.carbonAds},null,8,["carbon-ads"])]))}}),bn={class:"VPDocAside"},kn=_({__name:"VPDocAside",setup(a){const{theme:e}=V();return(t,n)=>(s(),u("div",bn,[c(t.$slots,"aside-top",{},void 0,!0),c(t.$slots,"aside-outline-before",{},void 0,!0),b(hn),c(t.$slots,"aside-outline-after",{},void 0,!0),n[0]||(n[0]=m("div",{class:"spacer"},null,-1)),c(t.$slots,"aside-ads-before",{},void 0,!0),i(e).carbonAds?(s(),k(gn,{key:0,"carbon-ads":i(e).carbonAds},null,8,["carbon-ads"])):h("",!0),c(t.$slots,"aside-ads-after",{},void 0,!0),c(t.$slots,"aside-bottom",{},void 0,!0)]))}}),yn=y(kn,[["__scopeId","data-v-c4200bf2"]]);function $n(){const{theme:a,page:e}=V();return L(()=>{const{text:t="Edit this page",pattern:n=""}=a.value.editLink||{};let o;return typeof n=="function"?o=n(e.value):o=n.replace(/:path/g,e.value.filePath),{url:o,text:t}})}function Ln(){const{page:a,theme:e,frontmatter:t}=V();return L(()=>{var $,T,g,P,I,E,F,C;const n=nt(e.value.sidebar,a.value.relativePath),o=en(n),r=Pn(o,R=>R.link.replace(/[?#].*$/,"")),l=r.findIndex(R=>se(a.value.relativePath,R.link)),d=(($=e.value.docFooter)==null?void 0:$.prev)===!1&&!t.value.prev||t.value.prev===!1,v=((T=e.value.docFooter)==null?void 0:T.next)===!1&&!t.value.next||t.value.next===!1;return{prev:d?void 0:{text:(typeof t.value.prev=="string"?t.value.prev:typeof t.value.prev=="object"?t.value.prev.text:void 0)??((g=r[l-1])==null?void 0:g.docFooterText)??((P=r[l-1])==null?void 0:P.text),link:(typeof t.value.prev=="object"?t.value.prev.link:void 0)??((I=r[l-1])==null?void 0:I.link)},next:v?void 0:{text:(typeof t.value.next=="string"?t.value.next:typeof t.value.next=="object"?t.value.next.text:void 0)??((E=r[l+1])==null?void 0:E.docFooterText)??((F=r[l+1])==null?void 0:F.text),link:(typeof t.value.next=="object"?t.value.next.link:void 0)??((C=r[l+1])==null?void 0:C.link)}}})}function Pn(a,e){const t=new Set;return a.filter(n=>{const o=e(n);return t.has(o)?!1:t.add(o)})}const Z=_({__name:"VPLink",props:{tag:{},href:{},noIcon:{type:Boolean},target:{},rel:{}},setup(a){const e=a,t=L(()=>e.tag??(e.href?"a":"span")),n=L(()=>e.href&&Ze.test(e.href)||e.target==="_blank");return(o,r)=>(s(),k(X(t.value),{class:M(["VPLink",{link:o.href,"vp-external-link-icon":n.value,"no-icon":o.noIcon}]),href:o.href?i(Fe)(o.href):void 0,target:o.target??(n.value?"_blank":void 0),rel:o.rel??(n.value?"noreferrer":void 0)},{default:p(()=>[c(o.$slots,"default")]),_:3},8,["class","href","target","rel"]))}}),Sn={class:"VPLastUpdated"},Vn=["datetime"],Tn=_({__name:"VPDocFooterLastUpdated",setup(a){const{theme:e,page:t,lang:n}=V(),o=L(()=>new Date(t.value.lastUpdated)),r=L(()=>o.value.toISOString()),l=H("");return x(()=>{be(()=>{var d,v,$;l.value=new Intl.DateTimeFormat((v=(d=e.value.lastUpdated)==null?void 0:d.formatOptions)!=null&&v.forceLocale?n.value:void 0,(($=e.value.lastUpdated)==null?void 0:$.formatOptions)??{dateStyle:"short",timeStyle:"short"}).format(o.value)})}),(d,v)=>{var $;return s(),u("p",Sn,[ce(A((($=i(e).lastUpdated)==null?void 0:$.text)||i(e).lastUpdatedText||"Last updated")+": ",1),m("time",{datetime:r.value},A(l.value),9,Vn)])}}}),wn=y(Tn,[["__scopeId","data-v-32a58613"]]),Nn={key:0,class:"VPDocFooter"},En={key:0,class:"edit-info"},In={key:0,class:"edit-link"},Cn={key:1,class:"last-updated"},Hn={key:1,class:"prev-next","aria-labelledby":"doc-footer-aria-label"},Mn={class:"pager"},zn=["innerHTML"],An=["innerHTML"],Bn={class:"pager"},On=["innerHTML"],Fn=["innerHTML"],Dn=_({__name:"VPDocFooter",setup(a){const{theme:e,page:t,frontmatter:n}=V(),o=$n(),r=Ln(),l=L(()=>e.value.editLink&&n.value.editLink!==!1),d=L(()=>t.value.lastUpdated),v=L(()=>l.value||d.value||r.value.prev||r.value.next);return($,T)=>{var g,P,I,E;return v.value?(s(),u("footer",Nn,[c($.$slots,"doc-footer-before",{},void 0,!0),l.value||d.value?(s(),u("div",En,[l.value?(s(),u("div",In,[b(Z,{class:"edit-link-button",href:i(o).url,"no-icon":!0},{default:p(()=>[T[0]||(T[0]=m("span",{class:"vpi-square-pen edit-link-icon"},null,-1)),ce(" "+A(i(o).text),1)]),_:1},8,["href"])])):h("",!0),d.value?(s(),u("div",Cn,[b(wn)])):h("",!0)])):h("",!0),(g=i(r).prev)!=null&&g.link||(P=i(r).next)!=null&&P.link?(s(),u("nav",Hn,[T[1]||(T[1]=m("span",{class:"visually-hidden",id:"doc-footer-aria-label"},"Pager",-1)),m("div",Mn,[(I=i(r).prev)!=null&&I.link?(s(),k(Z,{key:0,class:"pager-link prev",href:i(r).prev.link},{default:p(()=>{var F;return[m("span",{class:"desc",innerHTML:((F=i(e).docFooter)==null?void 0:F.prev)||"Previous page"},null,8,zn),m("span",{class:"title",innerHTML:i(r).prev.text},null,8,An)]}),_:1},8,["href"])):h("",!0)]),m("div",Bn,[(E=i(r).next)!=null&&E.link?(s(),k(Z,{key:0,class:"pager-link next",href:i(r).next.link},{default:p(()=>{var F;return[m("span",{class:"desc",innerHTML:((F=i(e).docFooter)==null?void 0:F.next)||"Next page"},null,8,On),m("span",{class:"title",innerHTML:i(r).next.text},null,8,Fn)]}),_:1},8,["href"])):h("",!0)])])):h("",!0)])):h("",!0)}}}),jn=y(Dn,[["__scopeId","data-v-35768638"]]),Un={class:"container"},Gn={class:"aside-container"},qn={class:"aside-content"},Wn={class:"content"},Rn={class:"content-container"},Kn={class:"main"},Jn=_({__name:"VPDoc",setup(a){const{theme:e}=V(),t=de(),{hasSidebar:n,hasAside:o,leftAside:r}=ee(),l=L(()=>t.path.replace(/[./]+/g,"_").replace(/_html$/,""));return(d,v)=>{const $=re("Content");return s(),u("div",{class:M(["VPDoc",{"has-sidebar":i(n),"has-aside":i(o)}])},[c(d.$slots,"doc-top",{},void 0,!0),m("div",Un,[i(o)?(s(),u("div",{key:0,class:M(["aside",{"left-aside":i(r)}])},[v[0]||(v[0]=m("div",{class:"aside-curtain"},null,-1)),m("div",Gn,[m("div",qn,[b(yn,null,{"aside-top":p(()=>[c(d.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":p(()=>[c(d.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":p(()=>[c(d.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":p(()=>[c(d.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":p(()=>[c(d.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":p(()=>[c(d.$slots,"aside-ads-after",{},void 0,!0)]),_:3})])])],2)):h("",!0),m("div",Wn,[m("div",Rn,[c(d.$slots,"doc-before",{},void 0,!0),m("main",Kn,[b($,{class:M(["vp-doc",[l.value,i(e).externalLinkIcon&&"external-link-icon-enabled"]])},null,8,["class"])]),b(jn,null,{"doc-footer-before":p(()=>[c(d.$slots,"doc-footer-before",{},void 0,!0)]),_:3}),c(d.$slots,"doc-after",{},void 0,!0)])])]),c(d.$slots,"doc-bottom",{},void 0,!0)],2)}}}),Yn=y(Jn,[["__scopeId","data-v-4d316cbc"]]),Xn=_({__name:"VPButton",props:{tag:{},size:{default:"medium"},theme:{default:"brand"},text:{},href:{},target:{},rel:{}},setup(a){const e=a,t=L(()=>e.href&&Ze.test(e.href)),n=L(()=>e.tag||(e.href?"a":"button"));return(o,r)=>(s(),k(X(n.value),{class:M(["VPButton",[o.size,o.theme]]),href:o.href?i(Fe)(o.href):void 0,target:e.target??(t.value?"_blank":void 0),rel:e.rel??(t.value?"noreferrer":void 0)},{default:p(()=>[ce(A(o.text),1)]),_:1},8,["class","href","target","rel"]))}}),Zn=y(Xn,[["__scopeId","data-v-70e9ece9"]]),Qn=["src","alt"],xn=_({inheritAttrs:!1,__name:"VPImage",props:{image:{},alt:{}},setup(a){return(e,t)=>{const n=re("VPImage",!0);return e.image?(s(),u(B,{key:0},[typeof e.image=="string"||"src"in e.image?(s(),u("img",oe({key:0,class:"VPImage"},typeof e.image=="string"?e.$attrs:{...e.image,...e.$attrs},{src:i(ze)(typeof e.image=="string"?e.image:e.image.src),alt:e.alt??(typeof e.image=="string"?"":e.image.alt||"")}),null,16,Qn)):(s(),u(B,{key:1},[b(n,oe({class:"dark",image:e.image.dark,alt:e.image.alt},e.$attrs),null,16,["image","alt"]),b(n,oe({class:"light",image:e.image.light,alt:e.image.alt},e.$attrs),null,16,["image","alt"])],64))],64)):h("",!0)}}}),ge=y(xn,[["__scopeId","data-v-4d0b3a1f"]]),eo={class:"container"},to={class:"main"},no={class:"heading"},oo=["innerHTML"],ao=["innerHTML"],so=["innerHTML"],ro={key:0,class:"actions"},io={key:0,class:"image"},lo={class:"image-container"},co=_({__name:"VPHero",props:{name:{},text:{},tagline:{},image:{},actions:{}},setup(a){const e=ye("hero-image-slot-exists");return(t,n)=>(s(),u("div",{class:M(["VPHero",{"has-image":t.image||i(e)}])},[m("div",eo,[m("div",to,[c(t.$slots,"home-hero-info-before",{},void 0,!0),c(t.$slots,"home-hero-info",{},()=>[m("h1",no,[t.name?(s(),u("span",{key:0,innerHTML:t.name,class:"name clip"},null,8,oo)):h("",!0),t.text?(s(),u("span",{key:1,innerHTML:t.text,class:"text"},null,8,ao)):h("",!0)]),t.tagline?(s(),u("p",{key:0,innerHTML:t.tagline,class:"tagline"},null,8,so)):h("",!0)],!0),c(t.$slots,"home-hero-info-after",{},void 0,!0),t.actions?(s(),u("div",ro,[(s(!0),u(B,null,G(t.actions,o=>(s(),u("div",{key:o.link,class:"action"},[b(Zn,{tag:"a",size:"medium",theme:o.theme,text:o.text,href:o.link,target:o.target,rel:o.rel},null,8,["theme","text","href","target","rel"])]))),128))])):h("",!0),c(t.$slots,"home-hero-actions-after",{},void 0,!0)]),t.image||i(e)?(s(),u("div",io,[m("div",lo,[n[0]||(n[0]=m("div",{class:"image-bg"},null,-1)),c(t.$slots,"home-hero-image",{},()=>[t.image?(s(),k(ge,{key:0,class:"image-src",image:t.image},null,8,["image"])):h("",!0)],!0)])])):h("",!0)])],2))}}),uo=y(co,[["__scopeId","data-v-b684e0c8"]]),vo=_({__name:"VPHomeHero",setup(a){const{frontmatter:e}=V();return(t,n)=>i(e).hero?(s(),k(uo,{key:0,class:"VPHomeHero",name:i(e).hero.name,text:i(e).hero.text,tagline:i(e).hero.tagline,image:i(e).hero.image,actions:i(e).hero.actions},{"home-hero-info-before":p(()=>[c(t.$slots,"home-hero-info-before")]),"home-hero-info":p(()=>[c(t.$slots,"home-hero-info")]),"home-hero-info-after":p(()=>[c(t.$slots,"home-hero-info-after")]),"home-hero-actions-after":p(()=>[c(t.$slots,"home-hero-actions-after")]),"home-hero-image":p(()=>[c(t.$slots,"home-hero-image")]),_:3},8,["name","text","tagline","image","actions"])):h("",!0)}}),mo={class:"box"},po={key:0,class:"icon"},fo=["innerHTML"],ho=["innerHTML"],_o=["innerHTML"],go={key:4,class:"link-text"},bo={class:"link-text-value"},ko=_({__name:"VPFeature",props:{icon:{},title:{},details:{},link:{},linkText:{},rel:{},target:{}},setup(a){return(e,t)=>(s(),k(Z,{class:"VPFeature",href:e.link,rel:e.rel,target:e.target,"no-icon":!0,tag:e.link?"a":"div"},{default:p(()=>[m("article",mo,[typeof e.icon=="object"&&e.icon.wrap?(s(),u("div",po,[b(ge,{image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])])):typeof e.icon=="object"?(s(),k(ge,{key:1,image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])):e.icon?(s(),u("div",{key:2,class:"icon",innerHTML:e.icon},null,8,fo)):h("",!0),m("h2",{class:"title",innerHTML:e.title},null,8,ho),e.details?(s(),u("p",{key:3,class:"details",innerHTML:e.details},null,8,_o)):h("",!0),e.linkText?(s(),u("div",go,[m("p",bo,[ce(A(e.linkText)+" ",1),t[0]||(t[0]=m("span",{class:"vpi-arrow-right link-text-icon"},null,-1))])])):h("",!0)])]),_:1},8,["href","rel","target","tag"]))}}),yo=y(ko,[["__scopeId","data-v-8c30a0c0"]]),$o={key:0,class:"VPFeatures"},Lo={class:"container"},Po={class:"items"},So=_({__name:"VPFeatures",props:{features:{}},setup(a){const e=a,t=L(()=>{const n=e.features.length;if(n){if(n===2)return"grid-2";if(n===3)return"grid-3";if(n%3===0)return"grid-6";if(n>3)return"grid-4"}else return});return(n,o)=>n.features?(s(),u("div",$o,[m("div",Lo,[m("div",Po,[(s(!0),u(B,null,G(n.features,r=>(s(),u("div",{key:r.title,class:M(["item",[t.value]])},[b(yo,{icon:r.icon,title:r.title,details:r.details,link:r.link,"link-text":r.linkText,rel:r.rel,target:r.target},null,8,["icon","title","details","link","link-text","rel","target"])],2))),128))])])])):h("",!0)}}),Vo=y(So,[["__scopeId","data-v-7cef5655"]]),To=_({__name:"VPHomeFeatures",setup(a){const{frontmatter:e}=V();return(t,n)=>i(e).features?(s(),k(Vo,{key:0,class:"VPHomeFeatures",features:i(e).features},null,8,["features"])):h("",!0)}}),wo=_({__name:"VPHomeContent",setup(a){const{width:e}=Pt({initialWidth:0,includeScrollbar:!1});return(t,n)=>(s(),u("div",{class:"vp-doc container",style:Qe(i(e)?{"--vp-offset":`calc(50% - ${i(e)/2}px)`}:{})},[c(t.$slots,"default",{},void 0,!0)],4))}}),No=y(wo,[["__scopeId","data-v-5377254e"]]),Eo=_({__name:"VPHome",setup(a){const{frontmatter:e,theme:t}=V();return(n,o)=>{const r=re("Content");return s(),u("div",{class:M(["VPHome",{"external-link-icon-enabled":i(t).externalLinkIcon}])},[c(n.$slots,"home-hero-before",{},void 0,!0),b(vo,null,{"home-hero-info-before":p(()=>[c(n.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":p(()=>[c(n.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":p(()=>[c(n.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":p(()=>[c(n.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":p(()=>[c(n.$slots,"home-hero-image",{},void 0,!0)]),_:3}),c(n.$slots,"home-hero-after",{},void 0,!0),c(n.$slots,"home-features-before",{},void 0,!0),b(To),c(n.$slots,"home-features-after",{},void 0,!0),i(e).markdownStyles!==!1?(s(),k(No,{key:0},{default:p(()=>[b(r)]),_:1})):(s(),k(r,{key:1}))],2)}}}),Io=y(Eo,[["__scopeId","data-v-1bcd8668"]]),Co={},Ho={class:"VPPage"};function Mo(a,e){const t=re("Content");return s(),u("div",Ho,[c(a.$slots,"page-top"),b(t),c(a.$slots,"page-bottom")])}const zo=y(Co,[["render",Mo]]),Ao=_({__name:"VPContent",setup(a){const{page:e,frontmatter:t}=V(),{hasSidebar:n}=ee();return(o,r)=>(s(),u("div",{class:M(["VPContent",{"has-sidebar":i(n),"is-home":i(t).layout==="home"}]),id:"VPContent"},[i(e).isNotFound?c(o.$slots,"not-found",{key:0},()=>[b(Qt)],!0):i(t).layout==="page"?(s(),k(zo,{key:1},{"page-top":p(()=>[c(o.$slots,"page-top",{},void 0,!0)]),"page-bottom":p(()=>[c(o.$slots,"page-bottom",{},void 0,!0)]),_:3})):i(t).layout==="home"?(s(),k(Io,{key:2},{"home-hero-before":p(()=>[c(o.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":p(()=>[c(o.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":p(()=>[c(o.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":p(()=>[c(o.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":p(()=>[c(o.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":p(()=>[c(o.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":p(()=>[c(o.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":p(()=>[c(o.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":p(()=>[c(o.$slots,"home-features-after",{},void 0,!0)]),_:3})):i(t).layout&&i(t).layout!=="doc"?(s(),k(X(i(t).layout),{key:3})):(s(),k(Yn,{key:4},{"doc-top":p(()=>[c(o.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":p(()=>[c(o.$slots,"doc-bottom",{},void 0,!0)]),"doc-footer-before":p(()=>[c(o.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":p(()=>[c(o.$slots,"doc-before",{},void 0,!0)]),"doc-after":p(()=>[c(o.$slots,"doc-after",{},void 0,!0)]),"aside-top":p(()=>[c(o.$slots,"aside-top",{},void 0,!0)]),"aside-outline-before":p(()=>[c(o.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":p(()=>[c(o.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":p(()=>[c(o.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":p(()=>[c(o.$slots,"aside-ads-after",{},void 0,!0)]),"aside-bottom":p(()=>[c(o.$slots,"aside-bottom",{},void 0,!0)]),_:3}))],2))}}),Bo=y(Ao,[["__scopeId","data-v-8d143afd"]]),Oo={class:"container"},Fo=["innerHTML"],Do=["innerHTML"],jo=_({__name:"VPFooter",setup(a){const{theme:e,frontmatter:t}=V(),{hasSidebar:n}=ee();return(o,r)=>i(e).footer&&i(t).footer!==!1?(s(),u("footer",{key:0,class:M(["VPFooter",{"has-sidebar":i(n)}])},[m("div",Oo,[i(e).footer.message?(s(),u("p",{key:0,class:"message",innerHTML:i(e).footer.message},null,8,Fo)):h("",!0),i(e).footer.copyright?(s(),u("p",{key:1,class:"copyright",innerHTML:i(e).footer.copyright},null,8,Do)):h("",!0)])],2)):h("",!0)}}),Uo=y(jo,[["__scopeId","data-v-45624e61"]]);function Go(){const{theme:a,frontmatter:e}=V(),t=Xe([]),n=L(()=>t.value.length>0);return ke(()=>{t.value=De(e.value.outline??a.value.outline)}),{headers:t,hasLocalNav:n}}const qo={class:"menu-text"},Wo={class:"header"},Ro={class:"outline"},Ko=_({__name:"VPLocalNavOutlineDropdown",props:{headers:{},navHeight:{}},setup(a){const e=a,{theme:t}=V(),n=H(!1),o=H(0),r=H(),l=H();function d(g){var P;(P=r.value)!=null&&P.contains(g.target)||(n.value=!1)}Q(n,g=>{if(g){document.addEventListener("click",d);return}document.removeEventListener("click",d)}),Ee("Escape",()=>{n.value=!1}),ke(()=>{n.value=!1});function v(){n.value=!n.value,o.value=window.innerHeight+Math.min(window.scrollY-e.navHeight,0)}function $(g){g.target.classList.contains("outline-link")&&(l.value&&(l.value.style.transition="none"),Oe(()=>{n.value=!1}))}function T(){n.value=!1,window.scrollTo({top:0,left:0,behavior:"smooth"})}return(g,P)=>(s(),u("div",{class:"VPLocalNavOutlineDropdown",style:Qe({"--vp-vh":o.value+"px"}),ref_key:"main",ref:r},[g.headers.length>0?(s(),u("button",{key:0,onClick:v,class:M({open:n.value})},[m("span",qo,A(i(ot)(i(t))),1),P[0]||(P[0]=m("span",{class:"vpi-chevron-right icon"},null,-1))],2)):(s(),u("button",{key:1,onClick:T},A(i(t).returnToTopLabel||"Return to top"),1)),b(Me,{name:"flyout"},{default:p(()=>[n.value?(s(),u("div",{key:0,ref_key:"items",ref:l,class:"items",onClick:$},[m("div",Wo,[m("a",{class:"top-link",href:"#",onClick:T},A(i(t).returnToTopLabel||"Return to top"),1)]),m("div",Ro,[b(at,{headers:g.headers},null,8,["headers"])])],512)):h("",!0)]),_:1})],4))}}),Jo=y(Ko,[["__scopeId","data-v-bd1fb31f"]]),Yo={class:"container"},Xo=["aria-expanded"],Zo={class:"menu-text"},Qo=_({__name:"VPLocalNav",props:{open:{type:Boolean}},emits:["open-menu"],setup(a){const{theme:e,frontmatter:t}=V(),{hasSidebar:n}=ee(),{headers:o}=Go(),{y:r}=xe(),l=H(0);x(()=>{l.value=parseInt(getComputedStyle(document.documentElement).getPropertyValue("--vp-nav-height"))}),ke(()=>{o.value=De(t.value.outline??e.value.outline)});const d=L(()=>o.value.length===0),v=L(()=>d.value&&!n.value),$=L(()=>({VPLocalNav:!0,"has-sidebar":n.value,empty:d.value,fixed:v.value}));return(T,g)=>i(t).layout!=="home"&&(!v.value||i(r)>=l.value)?(s(),u("div",{key:0,class:M($.value)},[m("div",Yo,[i(n)?(s(),u("button",{key:0,class:"menu","aria-expanded":T.open,"aria-controls":"VPSidebarNav",onClick:g[0]||(g[0]=P=>T.$emit("open-menu"))},[g[1]||(g[1]=m("span",{class:"vpi-align-left menu-icon"},null,-1)),m("span",Zo,A(i(e).sidebarMenuLabel||"Menu"),1)],8,Xo)):h("",!0),b(Jo,{headers:i(o),navHeight:l.value},null,8,["headers","navHeight"])])],2)):h("",!0)}}),xo=y(Qo,[["__scopeId","data-v-3eeb2970"]]);function ea(){const a=H(!1);function e(){a.value=!0,window.addEventListener("resize",o)}function t(){a.value=!1,window.removeEventListener("resize",o)}function n(){a.value?t():e()}function o(){window.outerWidth>=768&&t()}const r=de();return Q(()=>r.path,t),{isScreenOpen:a,openScreen:e,closeScreen:t,toggleScreen:n}}const ta={},na={class:"VPSwitch",type:"button",role:"switch"},oa={class:"check"},aa={key:0,class:"icon"};function sa(a,e){return s(),u("button",na,[m("span",oa,[a.$slots.default?(s(),u("span",aa,[c(a.$slots,"default",{},void 0,!0)])):h("",!0)])])}const ra=y(ta,[["render",sa],["__scopeId","data-v-4ec3b2fe"]]),ia=_({__name:"VPSwitchAppearance",setup(a){const{isDark:e,theme:t}=V(),n=ye("toggle-appearance",()=>{e.value=!e.value}),o=H("");return Be(()=>{o.value=e.value?t.value.lightModeSwitchTitle||"Switch to light theme":t.value.darkModeSwitchTitle||"Switch to dark theme"}),(r,l)=>(s(),k(ra,{title:o.value,class:"VPSwitchAppearance","aria-checked":i(e),onClick:i(n)},{default:p(()=>l[0]||(l[0]=[m("span",{class:"vpi-sun sun"},null,-1),m("span",{class:"vpi-moon moon"},null,-1)])),_:1},8,["title","aria-checked","onClick"]))}}),je=y(ia,[["__scopeId","data-v-ae950ac5"]]),la={key:0,class:"VPNavBarAppearance"},ca=_({__name:"VPNavBarAppearance",setup(a){const{site:e}=V();return(t,n)=>i(e).appearance&&i(e).appearance!=="force-dark"&&i(e).appearance!=="force-auto"?(s(),u("div",la,[b(je)])):h("",!0)}}),ua=y(ca,[["__scopeId","data-v-764c0058"]]),Ue=H();let st=!1,we=0;function da(a){const e=H(!1);if($e){!st&&va(),we++;const t=Q(Ue,n=>{var o,r,l;n===a.el.value||(o=a.el.value)!=null&&o.contains(n)?(e.value=!0,(r=a.onFocus)==null||r.call(a)):(e.value=!1,(l=a.onBlur)==null||l.call(a))});Ae(()=>{t(),we--,we||ma()})}return St(e)}function va(){document.addEventListener("focusin",rt),st=!0,Ue.value=document.activeElement}function ma(){document.removeEventListener("focusin",rt)}function rt(){Ue.value=document.activeElement}const pa={class:"VPMenuLink"},fa=["innerHTML"],ha=_({__name:"VPMenuLink",props:{item:{}},setup(a){const{page:e}=V();return(t,n)=>(s(),u("div",pa,[b(Z,{class:M({active:i(se)(i(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,target:t.item.target,rel:t.item.rel,"no-icon":t.item.noIcon},{default:p(()=>[m("span",{innerHTML:t.item.text},null,8,fa)]),_:1},8,["class","href","target","rel","no-icon"])]))}}),Le=y(ha,[["__scopeId","data-v-acee1e57"]]),_a={class:"VPMenuGroup"},ga={key:0,class:"title"},ba=_({__name:"VPMenuGroup",props:{text:{},items:{}},setup(a){return(e,t)=>(s(),u("div",_a,[e.text?(s(),u("p",ga,A(e.text),1)):h("",!0),(s(!0),u(B,null,G(e.items,n=>(s(),u(B,null,["link"in n?(s(),k(Le,{key:0,item:n},null,8,["item"])):h("",!0)],64))),256))]))}}),ka=y(ba,[["__scopeId","data-v-9e18ca71"]]),ya={class:"VPMenu"},$a={key:0,class:"items"},La=_({__name:"VPMenu",props:{items:{}},setup(a){return(e,t)=>(s(),u("div",ya,[e.items?(s(),u("div",$a,[(s(!0),u(B,null,G(e.items,n=>(s(),u(B,{key:JSON.stringify(n)},["link"in n?(s(),k(Le,{key:0,item:n},null,8,["item"])):"component"in n?(s(),k(X(n.component),oe({key:1,ref_for:!0},n.props),null,16)):(s(),k(ka,{key:2,text:n.text,items:n.items},null,8,["text","items"]))],64))),128))])):h("",!0),c(e.$slots,"default",{},void 0,!0)]))}}),Pa=y(La,[["__scopeId","data-v-3e022afb"]]),Sa=["aria-expanded","aria-label"],Va={key:0,class:"text"},Ta=["innerHTML"],wa={key:1,class:"vpi-more-horizontal icon"},Na={class:"menu"},Ea=_({__name:"VPFlyout",props:{icon:{},button:{},label:{},items:{}},setup(a){const e=H(!1),t=H();da({el:t,onBlur:n});function n(){e.value=!1}return(o,r)=>(s(),u("div",{class:"VPFlyout",ref_key:"el",ref:t,onMouseenter:r[1]||(r[1]=l=>e.value=!0),onMouseleave:r[2]||(r[2]=l=>e.value=!1)},[m("button",{type:"button",class:"button","aria-haspopup":"true","aria-expanded":e.value,"aria-label":o.label,onClick:r[0]||(r[0]=l=>e.value=!e.value)},[o.button||o.icon?(s(),u("span",Va,[o.icon?(s(),u("span",{key:0,class:M([o.icon,"option-icon"])},null,2)):h("",!0),o.button?(s(),u("span",{key:1,innerHTML:o.button},null,8,Ta)):h("",!0),r[3]||(r[3]=m("span",{class:"vpi-chevron-down text-icon"},null,-1))])):(s(),u("span",wa))],8,Sa),m("div",Na,[b(Pa,{items:o.items},{default:p(()=>[c(o.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}}),Ge=y(Ea,[["__scopeId","data-v-95325d79"]]),Ia=["href","aria-label","innerHTML"],Ca=_({__name:"VPSocialLink",props:{icon:{},link:{},ariaLabel:{}},setup(a){const e=a,t=H();x(async()=>{var r;await Oe();const o=(r=t.value)==null?void 0:r.children[0];o instanceof HTMLElement&&o.className.startsWith("vpi-social-")&&(getComputedStyle(o).maskImage||getComputedStyle(o).webkitMaskImage)==="none"&&o.style.setProperty("--icon",`url('https://api.iconify.design/simple-icons/${e.icon}.svg')`)});const n=L(()=>typeof e.icon=="object"?e.icon.svg:``);return(o,r)=>(s(),u("a",{ref_key:"el",ref:t,class:"VPSocialLink no-icon",href:o.link,"aria-label":o.ariaLabel??(typeof o.icon=="string"?o.icon:""),target:"_blank",rel:"noopener",innerHTML:n.value},null,8,Ia))}}),Ha=y(Ca,[["__scopeId","data-v-71029e87"]]),Ma={class:"VPSocialLinks"},za=_({__name:"VPSocialLinks",props:{links:{}},setup(a){return(e,t)=>(s(),u("div",Ma,[(s(!0),u(B,null,G(e.links,({link:n,icon:o,ariaLabel:r})=>(s(),k(Ha,{key:n,icon:o,link:n,ariaLabel:r},null,8,["icon","link","ariaLabel"]))),128))]))}}),qe=y(za,[["__scopeId","data-v-c9b9e435"]]),Aa={key:0,class:"group translations"},Ba={class:"trans-title"},Oa={key:1,class:"group"},Fa={class:"item appearance"},Da={class:"label"},ja={class:"appearance-action"},Ua={key:2,class:"group"},Ga={class:"item social-links"},qa=_({__name:"VPNavBarExtra",setup(a){const{site:e,theme:t}=V(),{localeLinks:n,currentLang:o}=ve({correspondingLink:!0}),r=L(()=>n.value.length&&o.value.label||e.value.appearance||t.value.socialLinks);return(l,d)=>r.value?(s(),k(Ge,{key:0,class:"VPNavBarExtra",label:"extra navigation"},{default:p(()=>[i(n).length&&i(o).label?(s(),u("div",Aa,[m("p",Ba,A(i(o).label),1),(s(!0),u(B,null,G(i(n),v=>(s(),k(Le,{key:v.link,item:v},null,8,["item"]))),128))])):h("",!0),i(e).appearance&&i(e).appearance!=="force-dark"&&i(e).appearance!=="force-auto"?(s(),u("div",Oa,[m("div",Fa,[m("p",Da,A(i(t).darkModeSwitchLabel||"Appearance"),1),m("div",ja,[b(je)])])])):h("",!0),i(t).socialLinks?(s(),u("div",Ua,[m("div",Ga,[b(qe,{class:"social-links-list",links:i(t).socialLinks},null,8,["links"])])])):h("",!0)]),_:1})):h("",!0)}}),Wa=y(qa,[["__scopeId","data-v-cc85dc96"]]),Ra=["aria-expanded"],Ka=_({__name:"VPNavBarHamburger",props:{active:{type:Boolean}},emits:["click"],setup(a){return(e,t)=>(s(),u("button",{type:"button",class:M(["VPNavBarHamburger",{active:e.active}]),"aria-label":"mobile navigation","aria-expanded":e.active,"aria-controls":"VPNavScreen",onClick:t[0]||(t[0]=n=>e.$emit("click"))},t[1]||(t[1]=[m("span",{class:"container"},[m("span",{class:"top"}),m("span",{class:"middle"}),m("span",{class:"bottom"})],-1)]),10,Ra))}}),Ja=y(Ka,[["__scopeId","data-v-e08ccaba"]]),Ya=["innerHTML"],Xa=_({__name:"VPNavBarMenuLink",props:{item:{}},setup(a){const{page:e}=V();return(t,n)=>(s(),k(Z,{class:M({VPNavBarMenuLink:!0,active:i(se)(i(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,target:t.item.target,rel:t.item.rel,"no-icon":t.item.noIcon,tabindex:"0"},{default:p(()=>[m("span",{innerHTML:t.item.text},null,8,Ya)]),_:1},8,["class","href","target","rel","no-icon"]))}}),Za=y(Xa,[["__scopeId","data-v-bbf7f74d"]]),Qa=_({__name:"VPNavBarMenuGroup",props:{item:{}},setup(a){const e=a,{page:t}=V(),n=r=>"component"in r?!1:"link"in r?se(t.value.relativePath,r.link,!!e.item.activeMatch):r.items.some(n),o=L(()=>n(e.item));return(r,l)=>(s(),k(Ge,{class:M({VPNavBarMenuGroup:!0,active:i(se)(i(t).relativePath,r.item.activeMatch,!!r.item.activeMatch)||o.value}),button:r.item.text,items:r.item.items},null,8,["class","button","items"]))}}),xa={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},es=_({__name:"VPNavBarMenu",setup(a){const{theme:e}=V();return(t,n)=>i(e).nav?(s(),u("nav",xa,[n[0]||(n[0]=m("span",{id:"main-nav-aria-label",class:"visually-hidden"}," Main Navigation ",-1)),(s(!0),u(B,null,G(i(e).nav,o=>(s(),u(B,{key:JSON.stringify(o)},["link"in o?(s(),k(Za,{key:0,item:o},null,8,["item"])):"component"in o?(s(),k(X(o.component),oe({key:1,ref_for:!0},o.props),null,16)):(s(),k(Qa,{key:2,item:o},null,8,["item"]))],64))),128))])):h("",!0)}}),ts=y(es,[["__scopeId","data-v-d53bf4df"]]);function ns(a){const{localeIndex:e,theme:t}=V();function n(o){var E,F,C;const r=o.split("."),l=(E=t.value.search)==null?void 0:E.options,d=l&&typeof l=="object",v=d&&((C=(F=l.locales)==null?void 0:F[e.value])==null?void 0:C.translations)||null,$=d&&l.translations||null;let T=v,g=$,P=a;const I=r.pop();for(const R of r){let J=null;const D=P==null?void 0:P[R];D&&(J=P=D);const te=g==null?void 0:g[R];te&&(J=g=te);const Y=T==null?void 0:T[R];Y&&(J=T=Y),D||(P=J),te||(g=J),Y||(T=J)}return(T==null?void 0:T[I])??(g==null?void 0:g[I])??(P==null?void 0:P[I])??""}return n}const os=["aria-label"],as={class:"DocSearch-Button-Container"},ss={class:"DocSearch-Button-Placeholder"},Ye=_({__name:"VPNavBarSearchButton",setup(a){const t=ns({button:{buttonText:"Search",buttonAriaLabel:"Search"}});return(n,o)=>(s(),u("button",{type:"button",class:"DocSearch DocSearch-Button","aria-label":i(t)("button.buttonAriaLabel")},[m("span",as,[o[0]||(o[0]=m("span",{class:"vp-icon DocSearch-Search-Icon"},null,-1)),m("span",ss,A(i(t)("button.buttonText")),1)]),o[1]||(o[1]=m("span",{class:"DocSearch-Button-Keys"},[m("kbd",{class:"DocSearch-Button-Key"}),m("kbd",{class:"DocSearch-Button-Key"},"K")],-1))],8,os))}}),rs={class:"VPNavBarSearch"},is={id:"local-search"},ls={key:1,id:"docsearch"},cs=_({__name:"VPNavBarSearch",setup(a){const e=Vt(()=>Tt(()=>import("./VPLocalSearchBox.CRB2ZbE3.js"),__vite__mapDeps([0,1]))),t=()=>null,{theme:n}=V(),o=H(!1),r=H(!1);x(()=>{});function l(){o.value||(o.value=!0,setTimeout(d,16))}function d(){const g=new Event("keydown");g.key="k",g.metaKey=!0,window.dispatchEvent(g),setTimeout(()=>{document.querySelector(".DocSearch-Modal")||d()},16)}function v(g){const P=g.target,I=P.tagName;return P.isContentEditable||I==="INPUT"||I==="SELECT"||I==="TEXTAREA"}const $=H(!1);Ee("k",g=>{(g.ctrlKey||g.metaKey)&&(g.preventDefault(),$.value=!0)}),Ee("/",g=>{v(g)||(g.preventDefault(),$.value=!0)});const T="local";return(g,P)=>{var I;return s(),u("div",rs,[i(T)==="local"?(s(),u(B,{key:0},[$.value?(s(),k(i(e),{key:0,onClose:P[0]||(P[0]=E=>$.value=!1)})):h("",!0),m("div",is,[b(Ye,{onClick:P[1]||(P[1]=E=>$.value=!0)})])],64)):i(T)==="algolia"?(s(),u(B,{key:1},[o.value?(s(),k(i(t),{key:0,algolia:((I=i(n).search)==null?void 0:I.options)??i(n).algolia,onVnodeBeforeMount:P[2]||(P[2]=E=>r.value=!0)},null,8,["algolia"])):h("",!0),r.value?h("",!0):(s(),u("div",ls,[b(Ye,{onClick:l})]))],64)):h("",!0)])}}}),us=_({__name:"VPNavBarSocialLinks",setup(a){const{theme:e}=V();return(t,n)=>i(e).socialLinks?(s(),k(qe,{key:0,class:"VPNavBarSocialLinks",links:i(e).socialLinks},null,8,["links"])):h("",!0)}}),ds=y(us,[["__scopeId","data-v-d6e28fe5"]]),vs=["href","rel","target"],ms=["innerHTML"],ps={key:2},fs=_({__name:"VPNavBarTitle",setup(a){const{site:e,theme:t}=V(),{hasSidebar:n}=ee(),{currentLang:o}=ve(),r=L(()=>{var v;return typeof t.value.logoLink=="string"?t.value.logoLink:(v=t.value.logoLink)==null?void 0:v.link}),l=L(()=>{var v;return typeof t.value.logoLink=="string"||(v=t.value.logoLink)==null?void 0:v.rel}),d=L(()=>{var v;return typeof t.value.logoLink=="string"||(v=t.value.logoLink)==null?void 0:v.target});return(v,$)=>(s(),u("div",{class:M(["VPNavBarTitle",{"has-sidebar":i(n)}])},[m("a",{class:"title",href:r.value??i(Fe)(i(o).link),rel:l.value,target:d.value},[c(v.$slots,"nav-bar-title-before",{},void 0,!0),i(t).logo?(s(),k(ge,{key:0,class:"logo",image:i(t).logo},null,8,["image"])):h("",!0),i(t).siteTitle?(s(),u("span",{key:1,innerHTML:i(t).siteTitle},null,8,ms)):i(t).siteTitle===void 0?(s(),u("span",ps,A(i(e).title),1)):h("",!0),c(v.$slots,"nav-bar-title-after",{},void 0,!0)],8,vs)],2))}}),hs=y(fs,[["__scopeId","data-v-211643ab"]]),_s={class:"items"},gs={class:"title"},bs=_({__name:"VPNavBarTranslations",setup(a){const{theme:e}=V(),{localeLinks:t,currentLang:n}=ve({correspondingLink:!0});return(o,r)=>i(t).length&&i(n).label?(s(),k(Ge,{key:0,class:"VPNavBarTranslations",icon:"vpi-languages",label:i(e).langMenuLabel||"Change language"},{default:p(()=>[m("div",_s,[m("p",gs,A(i(n).label),1),(s(!0),u(B,null,G(i(t),l=>(s(),k(Le,{key:l.link,item:l},null,8,["item"]))),128))])]),_:1},8,["label"])):h("",!0)}}),ks=y(bs,[["__scopeId","data-v-9d8c2f62"]]),ys={class:"wrapper"},$s={class:"container"},Ls={class:"title"},Ps={class:"content"},Ss={class:"content-body"},Vs=_({__name:"VPNavBar",props:{isScreenOpen:{type:Boolean}},emits:["toggle-screen"],setup(a){const e=a,{y:t}=xe(),{hasSidebar:n}=ee(),{frontmatter:o}=V(),r=H({});return Be(()=>{r.value={"has-sidebar":n.value,home:o.value.layout==="home",top:t.value===0,"screen-open":e.isScreenOpen}}),(l,d)=>(s(),u("div",{class:M(["VPNavBar",r.value])},[m("div",ys,[m("div",$s,[m("div",Ls,[b(hs,null,{"nav-bar-title-before":p(()=>[c(l.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":p(()=>[c(l.$slots,"nav-bar-title-after",{},void 0,!0)]),_:3})]),m("div",Ps,[m("div",Ss,[c(l.$slots,"nav-bar-content-before",{},void 0,!0),b(cs,{class:"search"}),b(ts,{class:"menu"}),b(ks,{class:"translations"}),b(ua,{class:"appearance"}),b(ds,{class:"social-links"}),b(Wa,{class:"extra"}),c(l.$slots,"nav-bar-content-after",{},void 0,!0),b(Ja,{class:"hamburger",active:l.isScreenOpen,onClick:d[0]||(d[0]=v=>l.$emit("toggle-screen"))},null,8,["active"])])])])]),d[1]||(d[1]=m("div",{class:"divider"},[m("div",{class:"divider-line"})],-1))],2))}}),Ts=y(Vs,[["__scopeId","data-v-511c2cc9"]]),ws={key:0,class:"VPNavScreenAppearance"},Ns={class:"text"},Es=_({__name:"VPNavScreenAppearance",setup(a){const{site:e,theme:t}=V();return(n,o)=>i(e).appearance&&i(e).appearance!=="force-dark"&&i(e).appearance!=="force-auto"?(s(),u("div",ws,[m("p",Ns,A(i(t).darkModeSwitchLabel||"Appearance"),1),b(je)])):h("",!0)}}),Is=y(Es,[["__scopeId","data-v-15ad096a"]]),Cs=["innerHTML"],Hs=_({__name:"VPNavScreenMenuLink",props:{item:{}},setup(a){const e=ye("close-screen");return(t,n)=>(s(),k(Z,{class:"VPNavScreenMenuLink",href:t.item.link,target:t.item.target,rel:t.item.rel,"no-icon":t.item.noIcon,onClick:i(e)},{default:p(()=>[m("span",{innerHTML:t.item.text},null,8,Cs)]),_:1},8,["href","target","rel","no-icon","onClick"]))}}),Ms=y(Hs,[["__scopeId","data-v-4fb78c30"]]),zs=["innerHTML"],As=_({__name:"VPNavScreenMenuGroupLink",props:{item:{}},setup(a){const e=ye("close-screen");return(t,n)=>(s(),k(Z,{class:"VPNavScreenMenuGroupLink",href:t.item.link,target:t.item.target,rel:t.item.rel,"no-icon":t.item.noIcon,onClick:i(e)},{default:p(()=>[m("span",{innerHTML:t.item.text},null,8,zs)]),_:1},8,["href","target","rel","no-icon","onClick"]))}}),it=y(As,[["__scopeId","data-v-64059e46"]]),Bs={class:"VPNavScreenMenuGroupSection"},Os={key:0,class:"title"},Fs=_({__name:"VPNavScreenMenuGroupSection",props:{text:{},items:{}},setup(a){return(e,t)=>(s(),u("div",Bs,[e.text?(s(),u("p",Os,A(e.text),1)):h("",!0),(s(!0),u(B,null,G(e.items,n=>(s(),k(it,{key:n.text,item:n},null,8,["item"]))),128))]))}}),Ds=y(Fs,[["__scopeId","data-v-52a35d42"]]),js=["aria-controls","aria-expanded"],Us=["innerHTML"],Gs=["id"],qs={key:0,class:"item"},Ws={key:1,class:"item"},Rs={key:2,class:"group"},Ks=_({__name:"VPNavScreenMenuGroup",props:{text:{},items:{}},setup(a){const e=a,t=H(!1),n=L(()=>`NavScreenGroup-${e.text.replace(" ","-").toLowerCase()}`);function o(){t.value=!t.value}return(r,l)=>(s(),u("div",{class:M(["VPNavScreenMenuGroup",{open:t.value}])},[m("button",{class:"button","aria-controls":n.value,"aria-expanded":t.value,onClick:o},[m("span",{class:"button-text",innerHTML:r.text},null,8,Us),l[0]||(l[0]=m("span",{class:"vpi-plus button-icon"},null,-1))],8,js),m("div",{id:n.value,class:"items"},[(s(!0),u(B,null,G(r.items,d=>(s(),u(B,{key:JSON.stringify(d)},["link"in d?(s(),u("div",qs,[b(it,{item:d},null,8,["item"])])):"component"in d?(s(),u("div",Ws,[(s(),k(X(d.component),oe({ref_for:!0},d.props,{"screen-menu":""}),null,16))])):(s(),u("div",Rs,[b(Ds,{text:d.text,items:d.items},null,8,["text","items"])]))],64))),128))],8,Gs)],2))}}),Js=y(Ks,[["__scopeId","data-v-1e2bb94d"]]),Ys={key:0,class:"VPNavScreenMenu"},Xs=_({__name:"VPNavScreenMenu",setup(a){const{theme:e}=V();return(t,n)=>i(e).nav?(s(),u("nav",Ys,[(s(!0),u(B,null,G(i(e).nav,o=>(s(),u(B,{key:JSON.stringify(o)},["link"in o?(s(),k(Ms,{key:0,item:o},null,8,["item"])):"component"in o?(s(),k(X(o.component),oe({key:1,ref_for:!0},o.props,{"screen-menu":""}),null,16)):(s(),k(Js,{key:2,text:o.text||"",items:o.items},null,8,["text","items"]))],64))),128))])):h("",!0)}}),Zs=_({__name:"VPNavScreenSocialLinks",setup(a){const{theme:e}=V();return(t,n)=>i(e).socialLinks?(s(),k(qe,{key:0,class:"VPNavScreenSocialLinks",links:i(e).socialLinks},null,8,["links"])):h("",!0)}}),Qs={class:"list"},xs=_({__name:"VPNavScreenTranslations",setup(a){const{localeLinks:e,currentLang:t}=ve({correspondingLink:!0}),n=H(!1);function o(){n.value=!n.value}return(r,l)=>i(e).length&&i(t).label?(s(),u("div",{key:0,class:M(["VPNavScreenTranslations",{open:n.value}])},[m("button",{class:"title",onClick:o},[l[0]||(l[0]=m("span",{class:"vpi-languages icon lang"},null,-1)),ce(" "+A(i(t).label)+" ",1),l[1]||(l[1]=m("span",{class:"vpi-chevron-down icon chevron"},null,-1))]),m("ul",Qs,[(s(!0),u(B,null,G(i(e),d=>(s(),u("li",{key:d.link,class:"item"},[b(Z,{class:"link",href:d.link},{default:p(()=>[ce(A(d.text),1)]),_:2},1032,["href"])]))),128))])],2)):h("",!0)}}),er=y(xs,[["__scopeId","data-v-da51982f"]]),tr={class:"container"},nr=_({__name:"VPNavScreen",props:{open:{type:Boolean}},setup(a){const e=H(null),t=et($e?document.body:null);return(n,o)=>(s(),k(Me,{name:"fade",onEnter:o[0]||(o[0]=r=>t.value=!0),onAfterLeave:o[1]||(o[1]=r=>t.value=!1)},{default:p(()=>[n.open?(s(),u("div",{key:0,class:"VPNavScreen",ref_key:"screen",ref:e,id:"VPNavScreen"},[m("div",tr,[c(n.$slots,"nav-screen-content-before",{},void 0,!0),b(Xs,{class:"menu"}),b(er,{class:"translations"}),b(Is,{class:"appearance"}),b(Zs,{class:"social-links"}),c(n.$slots,"nav-screen-content-after",{},void 0,!0)])],512)):h("",!0)]),_:3}))}}),or=y(nr,[["__scopeId","data-v-9cc6cbea"]]),ar={key:0,class:"VPNav"},sr=_({__name:"VPNav",setup(a){const{isScreenOpen:e,closeScreen:t,toggleScreen:n}=ea(),{frontmatter:o}=V(),r=L(()=>o.value.navbar!==!1);return tt("close-screen",t),be(()=>{$e&&document.documentElement.classList.toggle("hide-nav",!r.value)}),(l,d)=>r.value?(s(),u("header",ar,[b(Ts,{"is-screen-open":i(e),onToggleScreen:i(n)},{"nav-bar-title-before":p(()=>[c(l.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":p(()=>[c(l.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":p(()=>[c(l.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":p(()=>[c(l.$slots,"nav-bar-content-after",{},void 0,!0)]),_:3},8,["is-screen-open","onToggleScreen"]),b(or,{open:i(e)},{"nav-screen-content-before":p(()=>[c(l.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":p(()=>[c(l.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3},8,["open"])])):h("",!0)}}),rr=y(sr,[["__scopeId","data-v-1f7b0f5c"]]),ir=["role","tabindex"],lr={key:1,class:"items"},cr=_({__name:"VPSidebarItem",props:{item:{},depth:{}},setup(a){const e=a,{collapsed:t,collapsible:n,isLink:o,isActiveLink:r,hasActiveLink:l,hasChildren:d,toggle:v}=nn(L(()=>e.item)),$=L(()=>d.value?"section":"div"),T=L(()=>o.value?"a":"div"),g=L(()=>d.value?e.depth+2===7?"p":`h${e.depth+2}`:"p"),P=L(()=>o.value?void 0:"button"),I=L(()=>[[`level-${e.depth}`],{collapsible:n.value},{collapsed:t.value},{"is-link":o.value},{"is-active":r.value},{"has-active":l.value}]);function E(C){"key"in C&&C.key!=="Enter"||!e.item.link&&v()}function F(){e.item.link&&v()}return(C,R)=>{const J=re("VPSidebarItem",!0);return s(),k(X($.value),{class:M(["VPSidebarItem",I.value])},{default:p(()=>[C.item.text?(s(),u("div",oe({key:0,class:"item",role:P.value},wt(C.item.items?{click:E,keydown:E}:{},!0),{tabindex:C.item.items&&0}),[R[1]||(R[1]=m("div",{class:"indicator"},null,-1)),C.item.link?(s(),k(Z,{key:0,tag:T.value,class:"link",href:C.item.link,rel:C.item.rel,target:C.item.target},{default:p(()=>[(s(),k(X(g.value),{class:"text",innerHTML:C.item.text},null,8,["innerHTML"]))]),_:1},8,["tag","href","rel","target"])):(s(),k(X(g.value),{key:1,class:"text",innerHTML:C.item.text},null,8,["innerHTML"])),C.item.collapsed!=null&&C.item.items&&C.item.items.length?(s(),u("div",{key:2,class:"caret",role:"button","aria-label":"toggle section",onClick:F,onKeydown:Nt(F,["enter"]),tabindex:"0"},R[0]||(R[0]=[m("span",{class:"vpi-chevron-right caret-icon"},null,-1)]),32)):h("",!0)],16,ir)):h("",!0),C.item.items&&C.item.items.length?(s(),u("div",lr,[C.depth<5?(s(!0),u(B,{key:0},G(C.item.items,D=>(s(),k(J,{key:D.text,item:D,depth:C.depth+1},null,8,["item","depth"]))),128)):h("",!0)])):h("",!0)]),_:1},8,["class"])}}}),ur=y(cr,[["__scopeId","data-v-6092ddf2"]]),dr=_({__name:"VPSidebarGroup",props:{items:{}},setup(a){const e=H(!0);let t=null;return x(()=>{t=setTimeout(()=>{t=null,e.value=!1},300)}),Et(()=>{t!=null&&(clearTimeout(t),t=null)}),(n,o)=>(s(!0),u(B,null,G(n.items,r=>(s(),u("div",{key:r.text,class:M(["group",{"no-transition":e.value}])},[b(ur,{item:r,depth:0},null,8,["item"])],2))),128))}}),vr=y(dr,[["__scopeId","data-v-7eb7a422"]]),mr={class:"nav",id:"VPSidebarNav","aria-labelledby":"sidebar-aria-label",tabindex:"-1"},pr=_({__name:"VPSidebar",props:{open:{type:Boolean}},setup(a){const{sidebarGroups:e,hasSidebar:t}=ee(),n=a,o=H(null),r=et($e?document.body:null);Q([n,o],()=>{var d;n.open?(r.value=!0,(d=o.value)==null||d.focus()):r.value=!1},{immediate:!0,flush:"post"});const l=H(0);return Q(e,()=>{l.value+=1},{deep:!0}),(d,v)=>i(t)?(s(),u("aside",{key:0,class:M(["VPSidebar",{open:d.open}]),ref_key:"navEl",ref:o,onClick:v[0]||(v[0]=It(()=>{},["stop"]))},[v[2]||(v[2]=m("div",{class:"curtain"},null,-1)),m("nav",mr,[v[1]||(v[1]=m("span",{class:"visually-hidden",id:"sidebar-aria-label"}," Sidebar Navigation ",-1)),c(d.$slots,"sidebar-nav-before",{},void 0,!0),(s(),k(vr,{items:i(e),key:l.value},null,8,["items"])),c(d.$slots,"sidebar-nav-after",{},void 0,!0)])],2)):h("",!0)}}),fr=y(pr,[["__scopeId","data-v-130e406e"]]),hr=_({__name:"VPSkipLink",setup(a){const{theme:e}=V(),t=de(),n=H();Q(()=>t.path,()=>n.value.focus());function o({target:r}){const l=document.getElementById(decodeURIComponent(r.hash).slice(1));if(l){const d=()=>{l.removeAttribute("tabindex"),l.removeEventListener("blur",d)};l.setAttribute("tabindex","-1"),l.addEventListener("blur",d),l.focus(),window.scrollTo(0,0)}}return(r,l)=>(s(),u(B,null,[m("span",{ref_key:"backToTop",ref:n,tabindex:"-1"},null,512),m("a",{href:"#VPContent",class:"VPSkipLink visually-hidden",onClick:o},A(i(e).skipToContentLabel||"Skip to content"),1)],64))}}),_r=y(hr,[["__scopeId","data-v-5d3e946a"]]),gr=_({__name:"Layout",setup(a){const{isOpen:e,open:t,close:n}=ee(),o=de();Q(()=>o.path,n),tn(e,n);const{frontmatter:r}=V(),l=Ct(),d=L(()=>!!l["home-hero-image"]);return tt("hero-image-slot-exists",d),(v,$)=>{const T=re("Content");return i(r).layout!==!1?(s(),u("div",{key:0,class:M(["Layout",i(r).pageClass])},[c(v.$slots,"layout-top",{},void 0,!0),b(_r),b(Ut,{class:"backdrop",show:i(e),onClick:i(n)},null,8,["show","onClick"]),b(rr,null,{"nav-bar-title-before":p(()=>[c(v.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":p(()=>[c(v.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":p(()=>[c(v.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":p(()=>[c(v.$slots,"nav-bar-content-after",{},void 0,!0)]),"nav-screen-content-before":p(()=>[c(v.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":p(()=>[c(v.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3}),b(xo,{open:i(e),onOpenMenu:i(t)},null,8,["open","onOpenMenu"]),b(fr,{open:i(e)},{"sidebar-nav-before":p(()=>[c(v.$slots,"sidebar-nav-before",{},void 0,!0)]),"sidebar-nav-after":p(()=>[c(v.$slots,"sidebar-nav-after",{},void 0,!0)]),_:3},8,["open"]),b(Bo,null,{"page-top":p(()=>[c(v.$slots,"page-top",{},void 0,!0)]),"page-bottom":p(()=>[c(v.$slots,"page-bottom",{},void 0,!0)]),"not-found":p(()=>[c(v.$slots,"not-found",{},void 0,!0)]),"home-hero-before":p(()=>[c(v.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":p(()=>[c(v.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":p(()=>[c(v.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":p(()=>[c(v.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":p(()=>[c(v.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":p(()=>[c(v.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":p(()=>[c(v.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":p(()=>[c(v.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":p(()=>[c(v.$slots,"home-features-after",{},void 0,!0)]),"doc-footer-before":p(()=>[c(v.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":p(()=>[c(v.$slots,"doc-before",{},void 0,!0)]),"doc-after":p(()=>[c(v.$slots,"doc-after",{},void 0,!0)]),"doc-top":p(()=>[c(v.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":p(()=>[c(v.$slots,"doc-bottom",{},void 0,!0)]),"aside-top":p(()=>[c(v.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":p(()=>[c(v.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":p(()=>[c(v.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":p(()=>[c(v.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":p(()=>[c(v.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":p(()=>[c(v.$slots,"aside-ads-after",{},void 0,!0)]),_:3}),b(Uo),c(v.$slots,"layout-bottom",{},void 0,!0)],2)):(s(),k(T,{key:1}))}}}),br=y(gr,[["__scopeId","data-v-fbfa64bf"]]),kr={Layout:br},yr={class:"ad"},$r=["src","onClick"],Lr={__name:"layout",setup(a){const{Layout:e}=kr,t=Ht({list:[],toLink(n){n.link?window.open(n.link):window.open(`https://cool-js.com/ad/${n.id}`)},get(){fetch("https://service.cool-js.com/api/app/info/ad/list",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({channel:1})}).then(n=>n.json()).then(n=>{this.list=n.data})}});return x(()=>{t.get()}),(n,o)=>(s(),k(i(e),null,{"sidebar-nav-before":p(()=>[m("div",yr,[(s(!0),u(B,null,G(t.list,r=>(s(),u("img",{key:r,src:r.pic,onClick:l=>t.toLink(r)},null,8,$r))),128))])]),_:1}))}},Pr=y(Lr,[["__scopeId","data-v-96d1ba1f"]]),Vr={Layout:Pr,setup(){const a=de(),e=()=>{new Bt("[data-zoomable]",{background:"var(--vp-c-bg)"})};x(()=>{e()}),Q(()=>a.path,()=>Oe(()=>e()))}};export{Vr as R,ns as c,V as u}; diff --git a/.vitepress/dist/assets/chunks/theme.Dh5vPo0_.js b/.vitepress/dist/assets/chunks/theme.Dh5vPo0_.js deleted file mode 100644 index 8545930..0000000 --- a/.vitepress/dist/assets/chunks/theme.Dh5vPo0_.js +++ /dev/null @@ -1,4 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/chunks/VPLocalSearchBox.Dtbezcl8.js","assets/chunks/framework.BjhQB2K5.js"])))=>i.map(i=>d[i]); -import{d as _,c as b,o as s,T as Ae,w as p,a as u,b as h,_ as $,u as Vt,i as wt,t as Tt,e as Be,f as L,g as v,h as A,j as r,p as G,k as q,l as ie,m as Ee,r as H,n as ee,q as $e,s as te,v as Oe,x as Fe,y as It,z as Nt,A as le,B as M,F as B,C as W,D as Qe,E as ye,G as g,H as c,I as xe,J as Q,K as de,L as pe,M as se,N as Le,O as Et,P as et,Q as Ce,R as De,S as tt,U as Pe,V as Ct,W as Ht,X as Mt,Y as ot,Z as nt,$ as zt,a0 as At,a1 as Bt,a2 as Ot,a3 as Ft,a4 as Dt}from"./framework.BjhQB2K5.js";/*! medium-zoom 1.1.0 | MIT License | https://github.com/francoischalifour/medium-zoom */var re=Object.assign||function(o){for(var e=1;e1&&arguments[1]!==void 0?arguments[1]:{},n=window.Promise||function(P){function w(){}P(w,w)},a=function(P){var w=P.target;if(w===fe){N();return}D.indexOf(w)!==-1&&F({target:w})},i=function(){if(!(Z||!f.original)){var P=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0;Math.abs(Ke-P)>z.scrollOffset&&setTimeout(N,150)}},l=function(P){var w=P.key||P.keyCode;(w==="Escape"||w==="Esc"||w===27)&&N()},d=function(){var P=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},w=P;if(P.background&&(fe.style.background=P.background),P.container&&P.container instanceof Object&&(w.container=re({},z.container,P.container)),P.template){var O=ge(P.template)?P.template:document.querySelector(P.template);w.template=O}return z=re({},z,w),D.forEach(function(j){j.dispatchEvent(ue("medium-zoom:update",{detail:{zoom:U}}))}),U},m=function(){var P=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};return o(re({},z,P))},y=function(){for(var P=arguments.length,w=Array(P),O=0;O0?w.reduce(function(T,K){return[].concat(T,Xe(K))},[]):D;return j.forEach(function(T){T.classList.remove("medium-zoom-image"),T.dispatchEvent(ue("medium-zoom:detach",{detail:{zoom:U}}))}),D=D.filter(function(T){return j.indexOf(T)===-1}),U},k=function(P,w){var O=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return D.forEach(function(j){j.addEventListener("medium-zoom:"+P,w,O)}),ne.push({type:"medium-zoom:"+P,listener:w,options:O}),U},S=function(P,w){var O=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return D.forEach(function(j){j.removeEventListener("medium-zoom:"+P,w,O)}),ne=ne.filter(function(j){return!(j.type==="medium-zoom:"+P&&j.listener.toString()===w.toString())}),U},E=function(){var P=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},w=P.target,O=function(){var T={width:document.documentElement.clientWidth,height:document.documentElement.clientHeight,left:0,top:0,right:0,bottom:0},K=void 0,J=void 0;if(z.container)if(z.container instanceof Object)T=re({},T,z.container),K=T.width-T.left-T.right-z.margin*2,J=T.height-T.top-T.bottom-z.margin*2;else{var ce=ge(z.container)?z.container:document.querySelector(z.container),ae=ce.getBoundingClientRect(),Ve=ae.width,ft=ae.height,ht=ae.left,_t=ae.top;T=re({},T,{width:Ve,height:ft,left:ht,top:_t})}K=K||T.width-z.margin*2,J=J||T.height-z.margin*2;var ve=f.zoomedHd||f.original,gt=Ye(ve)?K:ve.naturalWidth||K,bt=Ye(ve)?J:ve.naturalHeight||J,he=ve.getBoundingClientRect(),kt=he.top,$t=he.left,we=he.width,Te=he.height,yt=Math.min(Math.max(we,gt),K)/we,Lt=Math.min(Math.max(Te,bt),J)/Te,Ie=Math.min(yt,Lt),Pt=(-$t+(K-we)/2+z.margin+T.left)/Ie,St=(-kt+(J-Te)/2+z.margin+T.top)/Ie,Je="scale("+Ie+") translate3d("+Pt+"px, "+St+"px, 0)";f.zoomed.style.transform=Je,f.zoomedHd&&(f.zoomedHd.style.transform=Je)};return new n(function(j){if(w&&D.indexOf(w)===-1){j(U);return}var T=function Ve(){Z=!1,f.zoomed.removeEventListener("transitionend",Ve),f.original.dispatchEvent(ue("medium-zoom:opened",{detail:{zoom:U}})),j(U)};if(f.zoomed){j(U);return}if(w)f.original=w;else if(D.length>0){var K=D;f.original=K[0]}else{j(U);return}if(f.original.dispatchEvent(ue("medium-zoom:open",{detail:{zoom:U}})),Ke=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,Z=!0,f.zoomed=Gt(f.original),document.body.appendChild(fe),z.template){var J=ge(z.template)?z.template:document.querySelector(z.template);f.template=document.createElement("div"),f.template.appendChild(J.content.cloneNode(!0)),document.body.appendChild(f.template)}if(f.original.parentElement&&f.original.parentElement.tagName==="PICTURE"&&f.original.currentSrc&&(f.zoomed.src=f.original.currentSrc),document.body.appendChild(f.zoomed),window.requestAnimationFrame(function(){document.body.classList.add("medium-zoom--opened")}),f.original.classList.add("medium-zoom-image--hidden"),f.zoomed.classList.add("medium-zoom-image--opened"),f.zoomed.addEventListener("click",N),f.zoomed.addEventListener("transitionend",T),f.original.getAttribute("data-zoom-src")){f.zoomedHd=f.zoomed.cloneNode(),f.zoomedHd.removeAttribute("srcset"),f.zoomedHd.removeAttribute("sizes"),f.zoomedHd.removeAttribute("loading"),f.zoomedHd.src=f.zoomed.getAttribute("data-zoom-src"),f.zoomedHd.onerror=function(){clearInterval(ce),console.warn("Unable to reach the zoom image target "+f.zoomedHd.src),f.zoomedHd=null,O()};var ce=setInterval(function(){f.zoomedHd.complete&&(clearInterval(ce),f.zoomedHd.classList.add("medium-zoom-image--opened"),f.zoomedHd.addEventListener("click",N),document.body.appendChild(f.zoomedHd),O())},10)}else if(f.original.hasAttribute("srcset")){f.zoomedHd=f.zoomed.cloneNode(),f.zoomedHd.removeAttribute("sizes"),f.zoomedHd.removeAttribute("loading");var ae=f.zoomedHd.addEventListener("load",function(){f.zoomedHd.removeEventListener("load",ae),f.zoomedHd.classList.add("medium-zoom-image--opened"),f.zoomedHd.addEventListener("click",N),document.body.appendChild(f.zoomedHd),O()})}else O()})},N=function(){return new n(function(P){if(Z||!f.original){P(U);return}var w=function O(){f.original.classList.remove("medium-zoom-image--hidden"),document.body.removeChild(f.zoomed),f.zoomedHd&&document.body.removeChild(f.zoomedHd),document.body.removeChild(fe),f.zoomed.classList.remove("medium-zoom-image--opened"),f.template&&document.body.removeChild(f.template),Z=!1,f.zoomed.removeEventListener("transitionend",O),f.original.dispatchEvent(ue("medium-zoom:closed",{detail:{zoom:U}})),f.original=null,f.zoomed=null,f.zoomedHd=null,f.template=null,P(U)};Z=!0,document.body.classList.remove("medium-zoom--opened"),f.zoomed.style.transform="",f.zoomedHd&&(f.zoomedHd.style.transform=""),f.template&&(f.template.style.transition="opacity 150ms",f.template.style.opacity=0),f.original.dispatchEvent(ue("medium-zoom:close",{detail:{zoom:U}})),f.zoomed.addEventListener("transitionend",w)})},F=function(){var P=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},w=P.target;return f.original?N():E({target:w})},C=function(){return z},Y=function(){return D},X=function(){return f.original},D=[],ne=[],Z=!1,Ke=0,z=t,f={original:null,zoomed:null,zoomedHd:null,template:null};Object.prototype.toString.call(e)==="[object Object]"?z=e:(e||typeof e=="string")&&y(e),z=re({margin:0,background:"#fff",scrollOffset:40,container:null,template:null},z);var fe=Ut(z.background);document.addEventListener("click",a),document.addEventListener("keyup",l),document.addEventListener("scroll",i),window.addEventListener("resize",N);var U={open:E,close:N,toggle:F,update:d,clone:m,attach:y,detach:I,on:k,off:S,getOptions:C,getImages:Y,getZoomedImage:X};return U};function Wt(o,e){e===void 0&&(e={});var t=e.insertAt;if(!(typeof document>"u")){var n=document.head||document.getElementsByTagName("head")[0],a=document.createElement("style");a.type="text/css",t==="top"&&n.firstChild?n.insertBefore(a,n.firstChild):n.appendChild(a),a.styleSheet?a.styleSheet.cssText=o:a.appendChild(document.createTextNode(o))}}var Rt=".medium-zoom-overlay{position:fixed;top:0;right:0;bottom:0;left:0;opacity:0;transition:opacity .3s;will-change:opacity}.medium-zoom--opened .medium-zoom-overlay{cursor:pointer;cursor:zoom-out;opacity:1}.medium-zoom-image{cursor:pointer;cursor:zoom-in;transition:transform .3s cubic-bezier(.2,0,.2,1)!important}.medium-zoom-image--hidden{visibility:hidden}.medium-zoom-image--opened{position:relative;cursor:pointer;cursor:zoom-out;will-change:transform}";Wt(Rt);const Kt={key:0,class:"VPBackdrop"},Jt=_({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(o){return(e,t)=>(s(),b(Ae,{name:"fade"},{default:p(()=>[e.show?(s(),u("div",Kt)):h("",!0)]),_:1}))}}),Yt=$(Jt,[["__scopeId","data-v-eab00006"]]),V=Vt;function Xt(o,e){let t,n=!1;return()=>{t&&clearTimeout(t),n?t=setTimeout(o,e):(o(),(n=!0)&&setTimeout(()=>n=!1,e))}}function He(o){return o.startsWith("/")?o:`/${o}`}function je(o){const{pathname:e,search:t,hash:n,protocol:a}=new URL(o,"http://a.com");if(wt(o)||o.startsWith("#")||!a.startsWith("http")||!Tt(e))return o;const{site:i}=V(),l=e.endsWith("/")||e.endsWith(".html")?o:o.replace(/(?:(^\.+)\/)?.*$/,`$1${e.replace(/(\.md)?$/,i.value.cleanUrls?"":".html")}${t}${n}`);return Be(l)}function me({correspondingLink:o=!1}={}){const{site:e,localeIndex:t,page:n,theme:a,hash:i}=V(),l=L(()=>{var m,y;return{label:(m=e.value.locales[t.value])==null?void 0:m.label,link:((y=e.value.locales[t.value])==null?void 0:y.link)||(t.value==="root"?"/":`/${t.value}/`)}});return{localeLinks:L(()=>Object.entries(e.value.locales).flatMap(([m,y])=>l.value.label===y.label?[]:{text:y.label,link:Zt(y.link||(m==="root"?"/":`/${m}/`),a.value.i18nRouting!==!1&&o,n.value.relativePath.slice(l.value.link.length-1),!e.value.cleanUrls)+i.value})),currentLang:l}}function Zt(o,e,t,n){return e?o.replace(/\/$/,"")+He(t.replace(/(^|\/)index\.md$/,"$1").replace(/\.md$/,n?".html":"")):o}const Qt=o=>(G("data-v-60b89e81"),o=o(),q(),o),xt={class:"NotFound"},eo={class:"code"},to={class:"title"},oo=Qt(()=>v("div",{class:"divider"},null,-1)),no={class:"quote"},ao={class:"action"},so=["href","aria-label"],ro=_({__name:"NotFound",setup(o){const{theme:e}=V(),{currentLang:t}=me();return(n,a)=>{var i,l,d,m,y;return s(),u("div",xt,[v("p",eo,A(((i=r(e).notFound)==null?void 0:i.code)??"404"),1),v("h1",to,A(((l=r(e).notFound)==null?void 0:l.title)??"PAGE NOT FOUND"),1),oo,v("blockquote",no,A(((d=r(e).notFound)==null?void 0:d.quote)??"But if you don't change your direction, and if you keep looking, you may end up where you are heading."),1),v("div",ao,[v("a",{class:"link",href:r(Be)(r(t).link),"aria-label":((m=r(e).notFound)==null?void 0:m.linkLabel)??"go to home"},A(((y=r(e).notFound)==null?void 0:y.linkText)??"Take me home"),9,so)])])}}}),io=$(ro,[["__scopeId","data-v-60b89e81"]]);function at(o,e){if(Array.isArray(o))return be(o);if(o==null)return[];e=He(e);const t=Object.keys(o).sort((a,i)=>i.split("/").length-a.split("/").length).find(a=>e.startsWith(He(a))),n=t?o[t]:[];return Array.isArray(n)?be(n):be(n.items,n.base)}function lo(o){const e=[];let t=0;for(const n in o){const a=o[n];if(a.items){t=e.push(a);continue}e[t]||e.push({items:[]}),e[t].items.push(a)}return e}function co(o){const e=[];function t(n){for(const a of n)a.text&&a.link&&e.push({text:a.text,link:a.link,docFooterText:a.docFooterText}),a.items&&t(a.items)}return t(o),e}function Me(o,e){return Array.isArray(e)?e.some(t=>Me(o,t)):ie(o,e.link)?!0:e.items?Me(o,e.items):!1}function be(o,e){return[...o].map(t=>{const n={...t},a=n.base||e;return a&&n.link&&(n.link=a+n.link),n.items&&(n.items=be(n.items,a)),n})}function oe(){const{frontmatter:o,page:e,theme:t}=V(),n=Ee("(min-width: 960px)"),a=H(!1),i=L(()=>{const F=t.value.sidebar,C=e.value.relativePath;return F?at(F,C):[]}),l=H(i.value);ee(i,(F,C)=>{JSON.stringify(F)!==JSON.stringify(C)&&(l.value=i.value)});const d=L(()=>o.value.sidebar!==!1&&l.value.length>0&&o.value.layout!=="home"),m=L(()=>y?o.value.aside==null?t.value.aside==="left":o.value.aside==="left":!1),y=L(()=>o.value.layout==="home"?!1:o.value.aside!=null?!!o.value.aside:t.value.aside!==!1),I=L(()=>d.value&&n.value),k=L(()=>d.value?lo(l.value):[]);function S(){a.value=!0}function E(){a.value=!1}function N(){a.value?E():S()}return{isOpen:a,sidebar:l,sidebarGroups:k,hasSidebar:d,hasAside:y,leftAside:m,isSidebarEnabled:I,open:S,close:E,toggle:N}}function uo(o,e){let t;$e(()=>{t=o.value?document.activeElement:void 0}),te(()=>{window.addEventListener("keyup",n)}),Oe(()=>{window.removeEventListener("keyup",n)});function n(a){a.key==="Escape"&&o.value&&(e(),t==null||t.focus())}}function vo(o){const{page:e,hash:t}=V(),n=H(!1),a=L(()=>o.value.collapsed!=null),i=L(()=>!!o.value.link),l=H(!1),d=()=>{l.value=ie(e.value.relativePath,o.value.link)};ee([e,o,t],d),te(d);const m=L(()=>l.value?!0:o.value.items?Me(e.value.relativePath,o.value.items):!1),y=L(()=>!!(o.value.items&&o.value.items.length));$e(()=>{n.value=!!(a.value&&o.value.collapsed)}),Fe(()=>{(l.value||m.value)&&(n.value=!1)});function I(){a.value&&(n.value=!n.value)}return{collapsed:n,collapsible:a,isLink:i,isActiveLink:l,hasActiveLink:m,hasChildren:y,toggle:I}}function po(){const{hasSidebar:o}=oe(),e=Ee("(min-width: 960px)"),t=Ee("(min-width: 1280px)");return{isAsideEnabled:L(()=>!t.value&&!e.value?!1:o.value?t.value:e.value)}}const mo=/\b(?:VPBadge|header-anchor|footnote-ref|ignore-header)\b/,ze=[];function st(o){return typeof o.outline=="object"&&!Array.isArray(o.outline)&&o.outline.label||o.outlineTitle||"On this page"}function Ue(o){const e=[...document.querySelectorAll(".VPDoc :where(h1,h2,h3,h4,h5,h6)")].filter(t=>t.id&&t.hasChildNodes()).map(t=>{const n=Number(t.tagName[1]);return{element:t,title:fo(t),link:"#"+t.id,level:n}});return ho(e,o)}function fo(o){let e="";for(const t of o.childNodes)if(t.nodeType===1){if(mo.test(t.className))continue;e+=t.textContent}else t.nodeType===3&&(e+=t.textContent);return e.trim()}function ho(o,e){if(e===!1)return[];const t=(typeof e=="object"&&!Array.isArray(e)?e.level:e)||2,[n,a]=typeof t=="number"?[t,t]:t==="deep"?[2,6]:t;return bo(o,n,a)}function _o(o,e){const{isAsideEnabled:t}=po(),n=Xt(i,100);let a=null;te(()=>{requestAnimationFrame(i),window.addEventListener("scroll",n)}),It(()=>{l(location.hash)}),Oe(()=>{window.removeEventListener("scroll",n)});function i(){if(!t.value)return;const d=window.scrollY,m=window.innerHeight,y=document.body.offsetHeight,I=Math.abs(d+m-y)<1,k=ze.map(({element:E,link:N})=>({link:N,top:go(E)})).filter(({top:E})=>!Number.isNaN(E)).sort((E,N)=>E.top-N.top);if(!k.length){l(null);return}if(d<1){l(null);return}if(I){l(k[k.length-1].link);return}let S=null;for(const{link:E,top:N}of k){if(N>d+Nt()+4)break;S=E}l(S)}function l(d){a&&a.classList.remove("active"),d==null?a=null:a=o.value.querySelector(`a[href="${decodeURIComponent(d)}"]`);const m=a;m?(m.classList.add("active"),e.value.style.top=m.offsetTop+39+"px",e.value.style.opacity="1"):(e.value.style.top="33px",e.value.style.opacity="0")}}function go(o){let e=0;for(;o!==document.body;){if(o===null)return NaN;e+=o.offsetTop,o=o.offsetParent}return e}function bo(o,e,t){ze.length=0;const n=[],a=[];return o.forEach(i=>{const l={...i,children:[]};let d=a[a.length-1];for(;d&&d.level>=l.level;)a.pop(),d=a[a.length-1];if(l.element.classList.contains("ignore-header")||d&&"shouldIgnore"in d){a.push({level:l.level,shouldIgnore:!0});return}l.level>t||l.level{const a=le("VPDocOutlineItem",!0);return s(),u("ul",{class:M(["VPDocOutlineItem",t.root?"root":"nested"])},[(s(!0),u(B,null,W(t.headers,({children:i,link:l,title:d})=>(s(),u("li",null,[v("a",{class:"outline-link",href:l,onClick:e,title:d},A(d),9,ko),i!=null&&i.length?(s(),b(a,{key:0,headers:i},null,8,["headers"])):h("",!0)]))),256))],2)}}}),rt=$($o,[["__scopeId","data-v-c8fd7940"]]),yo={class:"content"},Lo={"aria-level":"2",class:"outline-title",id:"doc-outline-aria-label",role:"heading"},Po=_({__name:"VPDocAsideOutline",setup(o){const{frontmatter:e,theme:t}=V(),n=Qe([]);ye(()=>{n.value=Ue(e.value.outline??t.value.outline)});const a=H(),i=H();return _o(a,i),(l,d)=>(s(),u("nav",{"aria-labelledby":"doc-outline-aria-label",class:M(["VPDocAsideOutline",{"has-outline":n.value.length>0}]),ref_key:"container",ref:a},[v("div",yo,[v("div",{class:"outline-marker",ref_key:"marker",ref:i},null,512),v("div",Lo,A(r(st)(r(t))),1),g(rt,{headers:n.value,root:!0},null,8,["headers"])])],2))}}),So=$(Po,[["__scopeId","data-v-beb6bc9f"]]),Vo={class:"VPDocAsideCarbonAds"},wo=_({__name:"VPDocAsideCarbonAds",props:{carbonAds:{}},setup(o){const e=()=>null;return(t,n)=>(s(),u("div",Vo,[g(r(e),{"carbon-ads":t.carbonAds},null,8,["carbon-ads"])]))}}),To=o=>(G("data-v-c4200bf2"),o=o(),q(),o),Io={class:"VPDocAside"},No=To(()=>v("div",{class:"spacer"},null,-1)),Eo=_({__name:"VPDocAside",setup(o){const{theme:e}=V();return(t,n)=>(s(),u("div",Io,[c(t.$slots,"aside-top",{},void 0,!0),c(t.$slots,"aside-outline-before",{},void 0,!0),g(So),c(t.$slots,"aside-outline-after",{},void 0,!0),No,c(t.$slots,"aside-ads-before",{},void 0,!0),r(e).carbonAds?(s(),b(wo,{key:0,"carbon-ads":r(e).carbonAds},null,8,["carbon-ads"])):h("",!0),c(t.$slots,"aside-ads-after",{},void 0,!0),c(t.$slots,"aside-bottom",{},void 0,!0)]))}}),Co=$(Eo,[["__scopeId","data-v-c4200bf2"]]);function Ho(){const{theme:o,page:e}=V();return L(()=>{const{text:t="Edit this page",pattern:n=""}=o.value.editLink||{};let a;return typeof n=="function"?a=n(e.value):a=n.replace(/:path/g,e.value.filePath),{url:a,text:t}})}function Mo(){const{page:o,theme:e,frontmatter:t}=V();return L(()=>{var y,I,k,S,E,N,F,C;const n=at(e.value.sidebar,o.value.relativePath),a=co(n),i=zo(a,Y=>Y.link.replace(/[?#].*$/,"")),l=i.findIndex(Y=>ie(o.value.relativePath,Y.link)),d=((y=e.value.docFooter)==null?void 0:y.prev)===!1&&!t.value.prev||t.value.prev===!1,m=((I=e.value.docFooter)==null?void 0:I.next)===!1&&!t.value.next||t.value.next===!1;return{prev:d?void 0:{text:(typeof t.value.prev=="string"?t.value.prev:typeof t.value.prev=="object"?t.value.prev.text:void 0)??((k=i[l-1])==null?void 0:k.docFooterText)??((S=i[l-1])==null?void 0:S.text),link:(typeof t.value.prev=="object"?t.value.prev.link:void 0)??((E=i[l-1])==null?void 0:E.link)},next:m?void 0:{text:(typeof t.value.next=="string"?t.value.next:typeof t.value.next=="object"?t.value.next.text:void 0)??((N=i[l+1])==null?void 0:N.docFooterText)??((F=i[l+1])==null?void 0:F.text),link:(typeof t.value.next=="object"?t.value.next.link:void 0)??((C=i[l+1])==null?void 0:C.link)}}})}function zo(o,e){const t=new Set;return o.filter(n=>{const a=e(n);return t.has(a)?!1:t.add(a)})}const x=_({__name:"VPLink",props:{tag:{},href:{},noIcon:{type:Boolean},target:{},rel:{}},setup(o){const e=o,t=L(()=>e.tag??(e.href?"a":"span")),n=L(()=>e.href&&xe.test(e.href)||e.target==="_blank");return(a,i)=>(s(),b(Q(t.value),{class:M(["VPLink",{link:a.href,"vp-external-link-icon":n.value,"no-icon":a.noIcon}]),href:a.href?r(je)(a.href):void 0,target:a.target??(n.value?"_blank":void 0),rel:a.rel??(n.value?"noreferrer":void 0)},{default:p(()=>[c(a.$slots,"default")]),_:3},8,["class","href","target","rel"]))}}),Ao={class:"VPLastUpdated"},Bo=["datetime"],Oo=_({__name:"VPDocFooterLastUpdated",setup(o){const{theme:e,page:t,lang:n}=V(),a=L(()=>new Date(t.value.lastUpdated)),i=L(()=>a.value.toISOString()),l=H("");return te(()=>{$e(()=>{var d,m,y;l.value=new Intl.DateTimeFormat((m=(d=e.value.lastUpdated)==null?void 0:d.formatOptions)!=null&&m.forceLocale?n.value:void 0,((y=e.value.lastUpdated)==null?void 0:y.formatOptions)??{dateStyle:"short",timeStyle:"short"}).format(a.value)})}),(d,m)=>{var y;return s(),u("p",Ao,[de(A(((y=r(e).lastUpdated)==null?void 0:y.text)||r(e).lastUpdatedText||"Last updated")+": ",1),v("time",{datetime:i.value},A(l.value),9,Bo)])}}}),Fo=$(Oo,[["__scopeId","data-v-32a58613"]]),it=o=>(G("data-v-35768638"),o=o(),q(),o),Do={key:0,class:"VPDocFooter"},jo={key:0,class:"edit-info"},Uo={key:0,class:"edit-link"},Go=it(()=>v("span",{class:"vpi-square-pen edit-link-icon"},null,-1)),qo={key:1,class:"last-updated"},Wo={key:1,class:"prev-next","aria-labelledby":"doc-footer-aria-label"},Ro=it(()=>v("span",{class:"visually-hidden",id:"doc-footer-aria-label"},"Pager",-1)),Ko={class:"pager"},Jo=["innerHTML"],Yo=["innerHTML"],Xo={class:"pager"},Zo=["innerHTML"],Qo=["innerHTML"],xo=_({__name:"VPDocFooter",setup(o){const{theme:e,page:t,frontmatter:n}=V(),a=Ho(),i=Mo(),l=L(()=>e.value.editLink&&n.value.editLink!==!1),d=L(()=>t.value.lastUpdated),m=L(()=>l.value||d.value||i.value.prev||i.value.next);return(y,I)=>{var k,S,E,N;return m.value?(s(),u("footer",Do,[c(y.$slots,"doc-footer-before",{},void 0,!0),l.value||d.value?(s(),u("div",jo,[l.value?(s(),u("div",Uo,[g(x,{class:"edit-link-button",href:r(a).url,"no-icon":!0},{default:p(()=>[Go,de(" "+A(r(a).text),1)]),_:1},8,["href"])])):h("",!0),d.value?(s(),u("div",qo,[g(Fo)])):h("",!0)])):h("",!0),(k=r(i).prev)!=null&&k.link||(S=r(i).next)!=null&&S.link?(s(),u("nav",Wo,[Ro,v("div",Ko,[(E=r(i).prev)!=null&&E.link?(s(),b(x,{key:0,class:"pager-link prev",href:r(i).prev.link},{default:p(()=>{var F;return[v("span",{class:"desc",innerHTML:((F=r(e).docFooter)==null?void 0:F.prev)||"Previous page"},null,8,Jo),v("span",{class:"title",innerHTML:r(i).prev.text},null,8,Yo)]}),_:1},8,["href"])):h("",!0)]),v("div",Xo,[(N=r(i).next)!=null&&N.link?(s(),b(x,{key:0,class:"pager-link next",href:r(i).next.link},{default:p(()=>{var F;return[v("span",{class:"desc",innerHTML:((F=r(e).docFooter)==null?void 0:F.next)||"Next page"},null,8,Zo),v("span",{class:"title",innerHTML:r(i).next.text},null,8,Qo)]}),_:1},8,["href"])):h("",!0)])])):h("",!0)])):h("",!0)}}}),en=$(xo,[["__scopeId","data-v-35768638"]]),tn=o=>(G("data-v-4d316cbc"),o=o(),q(),o),on={class:"container"},nn=tn(()=>v("div",{class:"aside-curtain"},null,-1)),an={class:"aside-container"},sn={class:"aside-content"},rn={class:"content"},ln={class:"content-container"},cn={class:"main"},un=_({__name:"VPDoc",setup(o){const{theme:e}=V(),t=pe(),{hasSidebar:n,hasAside:a,leftAside:i}=oe(),l=L(()=>t.path.replace(/[./]+/g,"_").replace(/_html$/,""));return(d,m)=>{const y=le("Content");return s(),u("div",{class:M(["VPDoc",{"has-sidebar":r(n),"has-aside":r(a)}])},[c(d.$slots,"doc-top",{},void 0,!0),v("div",on,[r(a)?(s(),u("div",{key:0,class:M(["aside",{"left-aside":r(i)}])},[nn,v("div",an,[v("div",sn,[g(Co,null,{"aside-top":p(()=>[c(d.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":p(()=>[c(d.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":p(()=>[c(d.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":p(()=>[c(d.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":p(()=>[c(d.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":p(()=>[c(d.$slots,"aside-ads-after",{},void 0,!0)]),_:3})])])],2)):h("",!0),v("div",rn,[v("div",ln,[c(d.$slots,"doc-before",{},void 0,!0),v("main",cn,[g(y,{class:M(["vp-doc",[l.value,r(e).externalLinkIcon&&"external-link-icon-enabled"]])},null,8,["class"])]),g(en,null,{"doc-footer-before":p(()=>[c(d.$slots,"doc-footer-before",{},void 0,!0)]),_:3}),c(d.$slots,"doc-after",{},void 0,!0)])])]),c(d.$slots,"doc-bottom",{},void 0,!0)],2)}}}),dn=$(un,[["__scopeId","data-v-4d316cbc"]]),vn=_({__name:"VPButton",props:{tag:{},size:{default:"medium"},theme:{default:"brand"},text:{},href:{},target:{},rel:{}},setup(o){const e=o,t=L(()=>e.href&&xe.test(e.href)),n=L(()=>e.tag||(e.href?"a":"button"));return(a,i)=>(s(),b(Q(n.value),{class:M(["VPButton",[a.size,a.theme]]),href:a.href?r(je)(a.href):void 0,target:e.target??(t.value?"_blank":void 0),rel:e.rel??(t.value?"noreferrer":void 0)},{default:p(()=>[de(A(a.text),1)]),_:1},8,["class","href","target","rel"]))}}),pn=$(vn,[["__scopeId","data-v-70e9ece9"]]),mn=["src","alt"],fn=_({inheritAttrs:!1,__name:"VPImage",props:{image:{},alt:{}},setup(o){return(e,t)=>{const n=le("VPImage",!0);return e.image?(s(),u(B,{key:0},[typeof e.image=="string"||"src"in e.image?(s(),u("img",se({key:0,class:"VPImage"},typeof e.image=="string"?e.$attrs:{...e.image,...e.$attrs},{src:r(Be)(typeof e.image=="string"?e.image:e.image.src),alt:e.alt??(typeof e.image=="string"?"":e.image.alt||"")}),null,16,mn)):(s(),u(B,{key:1},[g(n,se({class:"dark",image:e.image.dark,alt:e.image.alt},e.$attrs),null,16,["image","alt"]),g(n,se({class:"light",image:e.image.light,alt:e.image.alt},e.$attrs),null,16,["image","alt"])],64))],64)):h("",!0)}}}),ke=$(fn,[["__scopeId","data-v-4d0b3a1f"]]),hn=o=>(G("data-v-b684e0c8"),o=o(),q(),o),_n={class:"container"},gn={class:"main"},bn={class:"heading"},kn=["innerHTML"],$n=["innerHTML"],yn=["innerHTML"],Ln={key:0,class:"actions"},Pn={key:0,class:"image"},Sn={class:"image-container"},Vn=hn(()=>v("div",{class:"image-bg"},null,-1)),wn=_({__name:"VPHero",props:{name:{},text:{},tagline:{},image:{},actions:{}},setup(o){const e=Le("hero-image-slot-exists");return(t,n)=>(s(),u("div",{class:M(["VPHero",{"has-image":t.image||r(e)}])},[v("div",_n,[v("div",gn,[c(t.$slots,"home-hero-info-before",{},void 0,!0),c(t.$slots,"home-hero-info",{},()=>[v("h1",bn,[t.name?(s(),u("span",{key:0,innerHTML:t.name,class:"name clip"},null,8,kn)):h("",!0),t.text?(s(),u("span",{key:1,innerHTML:t.text,class:"text"},null,8,$n)):h("",!0)]),t.tagline?(s(),u("p",{key:0,innerHTML:t.tagline,class:"tagline"},null,8,yn)):h("",!0)],!0),c(t.$slots,"home-hero-info-after",{},void 0,!0),t.actions?(s(),u("div",Ln,[(s(!0),u(B,null,W(t.actions,a=>(s(),u("div",{key:a.link,class:"action"},[g(pn,{tag:"a",size:"medium",theme:a.theme,text:a.text,href:a.link,target:a.target,rel:a.rel},null,8,["theme","text","href","target","rel"])]))),128))])):h("",!0),c(t.$slots,"home-hero-actions-after",{},void 0,!0)]),t.image||r(e)?(s(),u("div",Pn,[v("div",Sn,[Vn,c(t.$slots,"home-hero-image",{},()=>[t.image?(s(),b(ke,{key:0,class:"image-src",image:t.image},null,8,["image"])):h("",!0)],!0)])])):h("",!0)])],2))}}),Tn=$(wn,[["__scopeId","data-v-b684e0c8"]]),In=_({__name:"VPHomeHero",setup(o){const{frontmatter:e}=V();return(t,n)=>r(e).hero?(s(),b(Tn,{key:0,class:"VPHomeHero",name:r(e).hero.name,text:r(e).hero.text,tagline:r(e).hero.tagline,image:r(e).hero.image,actions:r(e).hero.actions},{"home-hero-info-before":p(()=>[c(t.$slots,"home-hero-info-before")]),"home-hero-info":p(()=>[c(t.$slots,"home-hero-info")]),"home-hero-info-after":p(()=>[c(t.$slots,"home-hero-info-after")]),"home-hero-actions-after":p(()=>[c(t.$slots,"home-hero-actions-after")]),"home-hero-image":p(()=>[c(t.$slots,"home-hero-image")]),_:3},8,["name","text","tagline","image","actions"])):h("",!0)}}),Nn=o=>(G("data-v-8c30a0c0"),o=o(),q(),o),En={class:"box"},Cn={key:0,class:"icon"},Hn=["innerHTML"],Mn=["innerHTML"],zn=["innerHTML"],An={key:4,class:"link-text"},Bn={class:"link-text-value"},On=Nn(()=>v("span",{class:"vpi-arrow-right link-text-icon"},null,-1)),Fn=_({__name:"VPFeature",props:{icon:{},title:{},details:{},link:{},linkText:{},rel:{},target:{}},setup(o){return(e,t)=>(s(),b(x,{class:"VPFeature",href:e.link,rel:e.rel,target:e.target,"no-icon":!0,tag:e.link?"a":"div"},{default:p(()=>[v("article",En,[typeof e.icon=="object"&&e.icon.wrap?(s(),u("div",Cn,[g(ke,{image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])])):typeof e.icon=="object"?(s(),b(ke,{key:1,image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])):e.icon?(s(),u("div",{key:2,class:"icon",innerHTML:e.icon},null,8,Hn)):h("",!0),v("h2",{class:"title",innerHTML:e.title},null,8,Mn),e.details?(s(),u("p",{key:3,class:"details",innerHTML:e.details},null,8,zn)):h("",!0),e.linkText?(s(),u("div",An,[v("p",Bn,[de(A(e.linkText)+" ",1),On])])):h("",!0)])]),_:1},8,["href","rel","target","tag"]))}}),Dn=$(Fn,[["__scopeId","data-v-8c30a0c0"]]),jn={key:0,class:"VPFeatures"},Un={class:"container"},Gn={class:"items"},qn=_({__name:"VPFeatures",props:{features:{}},setup(o){const e=o,t=L(()=>{const n=e.features.length;if(n){if(n===2)return"grid-2";if(n===3)return"grid-3";if(n%3===0)return"grid-6";if(n>3)return"grid-4"}else return});return(n,a)=>n.features?(s(),u("div",jn,[v("div",Un,[v("div",Gn,[(s(!0),u(B,null,W(n.features,i=>(s(),u("div",{key:i.title,class:M(["item",[t.value]])},[g(Dn,{icon:i.icon,title:i.title,details:i.details,link:i.link,"link-text":i.linkText,rel:i.rel,target:i.target},null,8,["icon","title","details","link","link-text","rel","target"])],2))),128))])])])):h("",!0)}}),Wn=$(qn,[["__scopeId","data-v-7cef5655"]]),Rn=_({__name:"VPHomeFeatures",setup(o){const{frontmatter:e}=V();return(t,n)=>r(e).features?(s(),b(Wn,{key:0,class:"VPHomeFeatures",features:r(e).features},null,8,["features"])):h("",!0)}}),Kn=_({__name:"VPHomeContent",setup(o){const{width:e}=Et({initialWidth:0,includeScrollbar:!1});return(t,n)=>(s(),u("div",{class:"vp-doc container",style:et(r(e)?{"--vp-offset":`calc(50% - ${r(e)/2}px)`}:{})},[c(t.$slots,"default",{},void 0,!0)],4))}}),Jn=$(Kn,[["__scopeId","data-v-5377254e"]]),Yn=_({__name:"VPHome",setup(o){const{frontmatter:e,theme:t}=V();return(n,a)=>{const i=le("Content");return s(),u("div",{class:M(["VPHome",{"external-link-icon-enabled":r(t).externalLinkIcon}])},[c(n.$slots,"home-hero-before",{},void 0,!0),g(In,null,{"home-hero-info-before":p(()=>[c(n.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":p(()=>[c(n.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":p(()=>[c(n.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":p(()=>[c(n.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":p(()=>[c(n.$slots,"home-hero-image",{},void 0,!0)]),_:3}),c(n.$slots,"home-hero-after",{},void 0,!0),c(n.$slots,"home-features-before",{},void 0,!0),g(Rn),c(n.$slots,"home-features-after",{},void 0,!0),r(e).markdownStyles!==!1?(s(),b(Jn,{key:0},{default:p(()=>[g(i)]),_:1})):(s(),b(i,{key:1}))],2)}}}),Xn=$(Yn,[["__scopeId","data-v-1bcd8668"]]),Zn={},Qn={class:"VPPage"};function xn(o,e){const t=le("Content");return s(),u("div",Qn,[c(o.$slots,"page-top"),g(t),c(o.$slots,"page-bottom")])}const ea=$(Zn,[["render",xn]]),ta=_({__name:"VPContent",setup(o){const{page:e,frontmatter:t}=V(),{hasSidebar:n}=oe();return(a,i)=>(s(),u("div",{class:M(["VPContent",{"has-sidebar":r(n),"is-home":r(t).layout==="home"}]),id:"VPContent"},[r(e).isNotFound?c(a.$slots,"not-found",{key:0},()=>[g(io)],!0):r(t).layout==="page"?(s(),b(ea,{key:1},{"page-top":p(()=>[c(a.$slots,"page-top",{},void 0,!0)]),"page-bottom":p(()=>[c(a.$slots,"page-bottom",{},void 0,!0)]),_:3})):r(t).layout==="home"?(s(),b(Xn,{key:2},{"home-hero-before":p(()=>[c(a.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":p(()=>[c(a.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":p(()=>[c(a.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":p(()=>[c(a.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":p(()=>[c(a.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":p(()=>[c(a.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":p(()=>[c(a.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":p(()=>[c(a.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":p(()=>[c(a.$slots,"home-features-after",{},void 0,!0)]),_:3})):r(t).layout&&r(t).layout!=="doc"?(s(),b(Q(r(t).layout),{key:3})):(s(),b(dn,{key:4},{"doc-top":p(()=>[c(a.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":p(()=>[c(a.$slots,"doc-bottom",{},void 0,!0)]),"doc-footer-before":p(()=>[c(a.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":p(()=>[c(a.$slots,"doc-before",{},void 0,!0)]),"doc-after":p(()=>[c(a.$slots,"doc-after",{},void 0,!0)]),"aside-top":p(()=>[c(a.$slots,"aside-top",{},void 0,!0)]),"aside-outline-before":p(()=>[c(a.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":p(()=>[c(a.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":p(()=>[c(a.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":p(()=>[c(a.$slots,"aside-ads-after",{},void 0,!0)]),"aside-bottom":p(()=>[c(a.$slots,"aside-bottom",{},void 0,!0)]),_:3}))],2))}}),oa=$(ta,[["__scopeId","data-v-8d143afd"]]),na={class:"container"},aa=["innerHTML"],sa=["innerHTML"],ra=_({__name:"VPFooter",setup(o){const{theme:e,frontmatter:t}=V(),{hasSidebar:n}=oe();return(a,i)=>r(e).footer&&r(t).footer!==!1?(s(),u("footer",{key:0,class:M(["VPFooter",{"has-sidebar":r(n)}])},[v("div",na,[r(e).footer.message?(s(),u("p",{key:0,class:"message",innerHTML:r(e).footer.message},null,8,aa)):h("",!0),r(e).footer.copyright?(s(),u("p",{key:1,class:"copyright",innerHTML:r(e).footer.copyright},null,8,sa)):h("",!0)])],2)):h("",!0)}}),ia=$(ra,[["__scopeId","data-v-45624e61"]]);function la(){const{theme:o,frontmatter:e}=V(),t=Qe([]),n=L(()=>t.value.length>0);return ye(()=>{t.value=Ue(e.value.outline??o.value.outline)}),{headers:t,hasLocalNav:n}}const ca=o=>(G("data-v-bd1fb31f"),o=o(),q(),o),ua={class:"menu-text"},da=ca(()=>v("span",{class:"vpi-chevron-right icon"},null,-1)),va={class:"header"},pa={class:"outline"},ma=_({__name:"VPLocalNavOutlineDropdown",props:{headers:{},navHeight:{}},setup(o){const e=o,{theme:t}=V(),n=H(!1),a=H(0),i=H(),l=H();function d(k){var S;(S=i.value)!=null&&S.contains(k.target)||(n.value=!1)}ee(n,k=>{if(k){document.addEventListener("click",d);return}document.removeEventListener("click",d)}),Ce("Escape",()=>{n.value=!1}),ye(()=>{n.value=!1});function m(){n.value=!n.value,a.value=window.innerHeight+Math.min(window.scrollY-e.navHeight,0)}function y(k){k.target.classList.contains("outline-link")&&(l.value&&(l.value.style.transition="none"),De(()=>{n.value=!1}))}function I(){n.value=!1,window.scrollTo({top:0,left:0,behavior:"smooth"})}return(k,S)=>(s(),u("div",{class:"VPLocalNavOutlineDropdown",style:et({"--vp-vh":a.value+"px"}),ref_key:"main",ref:i},[k.headers.length>0?(s(),u("button",{key:0,onClick:m,class:M({open:n.value})},[v("span",ua,A(r(st)(r(t))),1),da],2)):(s(),u("button",{key:1,onClick:I},A(r(t).returnToTopLabel||"Return to top"),1)),g(Ae,{name:"flyout"},{default:p(()=>[n.value?(s(),u("div",{key:0,ref_key:"items",ref:l,class:"items",onClick:y},[v("div",va,[v("a",{class:"top-link",href:"#",onClick:I},A(r(t).returnToTopLabel||"Return to top"),1)]),v("div",pa,[g(rt,{headers:k.headers},null,8,["headers"])])],512)):h("",!0)]),_:1})],4))}}),fa=$(ma,[["__scopeId","data-v-bd1fb31f"]]),ha=o=>(G("data-v-3eeb2970"),o=o(),q(),o),_a={class:"container"},ga=["aria-expanded"],ba=ha(()=>v("span",{class:"vpi-align-left menu-icon"},null,-1)),ka={class:"menu-text"},$a=_({__name:"VPLocalNav",props:{open:{type:Boolean}},emits:["open-menu"],setup(o){const{theme:e,frontmatter:t}=V(),{hasSidebar:n}=oe(),{headers:a}=la(),{y:i}=tt(),l=H(0);te(()=>{l.value=parseInt(getComputedStyle(document.documentElement).getPropertyValue("--vp-nav-height"))}),ye(()=>{a.value=Ue(t.value.outline??e.value.outline)});const d=L(()=>a.value.length===0),m=L(()=>d.value&&!n.value),y=L(()=>({VPLocalNav:!0,"has-sidebar":n.value,empty:d.value,fixed:m.value}));return(I,k)=>r(t).layout!=="home"&&(!m.value||r(i)>=l.value)?(s(),u("div",{key:0,class:M(y.value)},[v("div",_a,[r(n)?(s(),u("button",{key:0,class:"menu","aria-expanded":I.open,"aria-controls":"VPSidebarNav",onClick:k[0]||(k[0]=S=>I.$emit("open-menu"))},[ba,v("span",ka,A(r(e).sidebarMenuLabel||"Menu"),1)],8,ga)):h("",!0),g(fa,{headers:r(a),navHeight:l.value},null,8,["headers","navHeight"])])],2)):h("",!0)}}),ya=$($a,[["__scopeId","data-v-3eeb2970"]]);function La(){const o=H(!1);function e(){o.value=!0,window.addEventListener("resize",a)}function t(){o.value=!1,window.removeEventListener("resize",a)}function n(){o.value?t():e()}function a(){window.outerWidth>=768&&t()}const i=pe();return ee(()=>i.path,t),{isScreenOpen:o,openScreen:e,closeScreen:t,toggleScreen:n}}const Pa={},Sa={class:"VPSwitch",type:"button",role:"switch"},Va={class:"check"},wa={key:0,class:"icon"};function Ta(o,e){return s(),u("button",Sa,[v("span",Va,[o.$slots.default?(s(),u("span",wa,[c(o.$slots,"default",{},void 0,!0)])):h("",!0)])])}const Ia=$(Pa,[["render",Ta],["__scopeId","data-v-4ec3b2fe"]]),lt=o=>(G("data-v-ae950ac5"),o=o(),q(),o),Na=lt(()=>v("span",{class:"vpi-sun sun"},null,-1)),Ea=lt(()=>v("span",{class:"vpi-moon moon"},null,-1)),Ca=_({__name:"VPSwitchAppearance",setup(o){const{isDark:e,theme:t}=V(),n=Le("toggle-appearance",()=>{e.value=!e.value}),a=H("");return Fe(()=>{a.value=e.value?t.value.lightModeSwitchTitle||"Switch to light theme":t.value.darkModeSwitchTitle||"Switch to dark theme"}),(i,l)=>(s(),b(Ia,{title:a.value,class:"VPSwitchAppearance","aria-checked":r(e),onClick:r(n)},{default:p(()=>[Na,Ea]),_:1},8,["title","aria-checked","onClick"]))}}),Ge=$(Ca,[["__scopeId","data-v-ae950ac5"]]),Ha={key:0,class:"VPNavBarAppearance"},Ma=_({__name:"VPNavBarAppearance",setup(o){const{site:e}=V();return(t,n)=>r(e).appearance&&r(e).appearance!=="force-dark"&&r(e).appearance!=="force-auto"?(s(),u("div",Ha,[g(Ge)])):h("",!0)}}),za=$(Ma,[["__scopeId","data-v-764c0058"]]),qe=H();let ct=!1,Ne=0;function Aa(o){const e=H(!1);if(Pe){!ct&&Ba(),Ne++;const t=ee(qe,n=>{var a,i,l;n===o.el.value||(a=o.el.value)!=null&&a.contains(n)?(e.value=!0,(i=o.onFocus)==null||i.call(o)):(e.value=!1,(l=o.onBlur)==null||l.call(o))});Oe(()=>{t(),Ne--,Ne||Oa()})}return Ct(e)}function Ba(){document.addEventListener("focusin",ut),ct=!0,qe.value=document.activeElement}function Oa(){document.removeEventListener("focusin",ut)}function ut(){qe.value=document.activeElement}const Fa={class:"VPMenuLink"},Da=["innerHTML"],ja=_({__name:"VPMenuLink",props:{item:{}},setup(o){const{page:e}=V();return(t,n)=>(s(),u("div",Fa,[g(x,{class:M({active:r(ie)(r(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,target:t.item.target,rel:t.item.rel,"no-icon":t.item.noIcon},{default:p(()=>[v("span",{innerHTML:t.item.text},null,8,Da)]),_:1},8,["class","href","target","rel","no-icon"])]))}}),Se=$(ja,[["__scopeId","data-v-acee1e57"]]),Ua={class:"VPMenuGroup"},Ga={key:0,class:"title"},qa=_({__name:"VPMenuGroup",props:{text:{},items:{}},setup(o){return(e,t)=>(s(),u("div",Ua,[e.text?(s(),u("p",Ga,A(e.text),1)):h("",!0),(s(!0),u(B,null,W(e.items,n=>(s(),u(B,null,["link"in n?(s(),b(Se,{key:0,item:n},null,8,["item"])):h("",!0)],64))),256))]))}}),Wa=$(qa,[["__scopeId","data-v-9e18ca71"]]),Ra={class:"VPMenu"},Ka={key:0,class:"items"},Ja=_({__name:"VPMenu",props:{items:{}},setup(o){return(e,t)=>(s(),u("div",Ra,[e.items?(s(),u("div",Ka,[(s(!0),u(B,null,W(e.items,n=>(s(),u(B,{key:JSON.stringify(n)},["link"in n?(s(),b(Se,{key:0,item:n},null,8,["item"])):"component"in n?(s(),b(Q(n.component),se({key:1,ref_for:!0},n.props),null,16)):(s(),b(Wa,{key:2,text:n.text,items:n.items},null,8,["text","items"]))],64))),128))])):h("",!0),c(e.$slots,"default",{},void 0,!0)]))}}),Ya=$(Ja,[["__scopeId","data-v-3e022afb"]]),Xa=o=>(G("data-v-95325d79"),o=o(),q(),o),Za=["aria-expanded","aria-label"],Qa={key:0,class:"text"},xa=["innerHTML"],es=Xa(()=>v("span",{class:"vpi-chevron-down text-icon"},null,-1)),ts={key:1,class:"vpi-more-horizontal icon"},os={class:"menu"},ns=_({__name:"VPFlyout",props:{icon:{},button:{},label:{},items:{}},setup(o){const e=H(!1),t=H();Aa({el:t,onBlur:n});function n(){e.value=!1}return(a,i)=>(s(),u("div",{class:"VPFlyout",ref_key:"el",ref:t,onMouseenter:i[1]||(i[1]=l=>e.value=!0),onMouseleave:i[2]||(i[2]=l=>e.value=!1)},[v("button",{type:"button",class:"button","aria-haspopup":"true","aria-expanded":e.value,"aria-label":a.label,onClick:i[0]||(i[0]=l=>e.value=!e.value)},[a.button||a.icon?(s(),u("span",Qa,[a.icon?(s(),u("span",{key:0,class:M([a.icon,"option-icon"])},null,2)):h("",!0),a.button?(s(),u("span",{key:1,innerHTML:a.button},null,8,xa)):h("",!0),es])):(s(),u("span",ts))],8,Za),v("div",os,[g(Ya,{items:a.items},{default:p(()=>[c(a.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}}),We=$(ns,[["__scopeId","data-v-95325d79"]]),as=["href","aria-label","innerHTML"],ss=_({__name:"VPSocialLink",props:{icon:{},link:{},ariaLabel:{}},setup(o){const e=o,t=H();te(async()=>{var i;await De();const a=(i=t.value)==null?void 0:i.children[0];a instanceof HTMLElement&&a.className.startsWith("vpi-social-")&&(getComputedStyle(a).maskImage||getComputedStyle(a).webkitMaskImage)==="none"&&a.style.setProperty("--icon",`url('https://api.iconify.design/simple-icons/${e.icon}.svg')`)});const n=L(()=>typeof e.icon=="object"?e.icon.svg:``);return(a,i)=>(s(),u("a",{ref_key:"el",ref:t,class:"VPSocialLink no-icon",href:a.link,"aria-label":a.ariaLabel??(typeof a.icon=="string"?a.icon:""),target:"_blank",rel:"noopener",innerHTML:n.value},null,8,as))}}),rs=$(ss,[["__scopeId","data-v-71029e87"]]),is={class:"VPSocialLinks"},ls=_({__name:"VPSocialLinks",props:{links:{}},setup(o){return(e,t)=>(s(),u("div",is,[(s(!0),u(B,null,W(e.links,({link:n,icon:a,ariaLabel:i})=>(s(),b(rs,{key:n,icon:a,link:n,ariaLabel:i},null,8,["icon","link","ariaLabel"]))),128))]))}}),Re=$(ls,[["__scopeId","data-v-c9b9e435"]]),cs={key:0,class:"group translations"},us={class:"trans-title"},ds={key:1,class:"group"},vs={class:"item appearance"},ps={class:"label"},ms={class:"appearance-action"},fs={key:2,class:"group"},hs={class:"item social-links"},_s=_({__name:"VPNavBarExtra",setup(o){const{site:e,theme:t}=V(),{localeLinks:n,currentLang:a}=me({correspondingLink:!0}),i=L(()=>n.value.length&&a.value.label||e.value.appearance||t.value.socialLinks);return(l,d)=>i.value?(s(),b(We,{key:0,class:"VPNavBarExtra",label:"extra navigation"},{default:p(()=>[r(n).length&&r(a).label?(s(),u("div",cs,[v("p",us,A(r(a).label),1),(s(!0),u(B,null,W(r(n),m=>(s(),b(Se,{key:m.link,item:m},null,8,["item"]))),128))])):h("",!0),r(e).appearance&&r(e).appearance!=="force-dark"&&r(e).appearance!=="force-auto"?(s(),u("div",ds,[v("div",vs,[v("p",ps,A(r(t).darkModeSwitchLabel||"Appearance"),1),v("div",ms,[g(Ge)])])])):h("",!0),r(t).socialLinks?(s(),u("div",fs,[v("div",hs,[g(Re,{class:"social-links-list",links:r(t).socialLinks},null,8,["links"])])])):h("",!0)]),_:1})):h("",!0)}}),gs=$(_s,[["__scopeId","data-v-cc85dc96"]]),bs=o=>(G("data-v-e08ccaba"),o=o(),q(),o),ks=["aria-expanded"],$s=bs(()=>v("span",{class:"container"},[v("span",{class:"top"}),v("span",{class:"middle"}),v("span",{class:"bottom"})],-1)),ys=[$s],Ls=_({__name:"VPNavBarHamburger",props:{active:{type:Boolean}},emits:["click"],setup(o){return(e,t)=>(s(),u("button",{type:"button",class:M(["VPNavBarHamburger",{active:e.active}]),"aria-label":"mobile navigation","aria-expanded":e.active,"aria-controls":"VPNavScreen",onClick:t[0]||(t[0]=n=>e.$emit("click"))},ys,10,ks))}}),Ps=$(Ls,[["__scopeId","data-v-e08ccaba"]]),Ss=["innerHTML"],Vs=_({__name:"VPNavBarMenuLink",props:{item:{}},setup(o){const{page:e}=V();return(t,n)=>(s(),b(x,{class:M({VPNavBarMenuLink:!0,active:r(ie)(r(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,target:t.item.target,rel:t.item.rel,"no-icon":t.item.noIcon,tabindex:"0"},{default:p(()=>[v("span",{innerHTML:t.item.text},null,8,Ss)]),_:1},8,["class","href","target","rel","no-icon"]))}}),ws=$(Vs,[["__scopeId","data-v-bbf7f74d"]]),Ts=_({__name:"VPNavBarMenuGroup",props:{item:{}},setup(o){const e=o,{page:t}=V(),n=i=>"component"in i?!1:"link"in i?ie(t.value.relativePath,i.link,!!e.item.activeMatch):i.items.some(n),a=L(()=>n(e.item));return(i,l)=>(s(),b(We,{class:M({VPNavBarMenuGroup:!0,active:r(ie)(r(t).relativePath,i.item.activeMatch,!!i.item.activeMatch)||a.value}),button:i.item.text,items:i.item.items},null,8,["class","button","items"]))}}),Is=o=>(G("data-v-d53bf4df"),o=o(),q(),o),Ns={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},Es=Is(()=>v("span",{id:"main-nav-aria-label",class:"visually-hidden"}," Main Navigation ",-1)),Cs=_({__name:"VPNavBarMenu",setup(o){const{theme:e}=V();return(t,n)=>r(e).nav?(s(),u("nav",Ns,[Es,(s(!0),u(B,null,W(r(e).nav,a=>(s(),u(B,{key:JSON.stringify(a)},["link"in a?(s(),b(ws,{key:0,item:a},null,8,["item"])):"component"in a?(s(),b(Q(a.component),se({key:1,ref_for:!0},a.props),null,16)):(s(),b(Ts,{key:2,item:a},null,8,["item"]))],64))),128))])):h("",!0)}}),Hs=$(Cs,[["__scopeId","data-v-d53bf4df"]]);function Ms(o){const{localeIndex:e,theme:t}=V();function n(a){var N,F,C;const i=a.split("."),l=(N=t.value.search)==null?void 0:N.options,d=l&&typeof l=="object",m=d&&((C=(F=l.locales)==null?void 0:F[e.value])==null?void 0:C.translations)||null,y=d&&l.translations||null;let I=m,k=y,S=o;const E=i.pop();for(const Y of i){let X=null;const D=S==null?void 0:S[Y];D&&(X=S=D);const ne=k==null?void 0:k[Y];ne&&(X=k=ne);const Z=I==null?void 0:I[Y];Z&&(X=I=Z),D||(S=X),ne||(k=X),Z||(I=X)}return(I==null?void 0:I[E])??(k==null?void 0:k[E])??(S==null?void 0:S[E])??""}return n}const zs=["aria-label"],As={class:"DocSearch-Button-Container"},Bs=v("span",{class:"vp-icon DocSearch-Search-Icon"},null,-1),Os={class:"DocSearch-Button-Placeholder"},Fs=v("span",{class:"DocSearch-Button-Keys"},[v("kbd",{class:"DocSearch-Button-Key"}),v("kbd",{class:"DocSearch-Button-Key"},"K")],-1),Ze=_({__name:"VPNavBarSearchButton",setup(o){const t=Ms({button:{buttonText:"Search",buttonAriaLabel:"Search"}});return(n,a)=>(s(),u("button",{type:"button",class:"DocSearch DocSearch-Button","aria-label":r(t)("button.buttonAriaLabel")},[v("span",As,[Bs,v("span",Os,A(r(t)("button.buttonText")),1)]),Fs],8,zs))}}),Ds={class:"VPNavBarSearch"},js={id:"local-search"},Us={key:1,id:"docsearch"},Gs=_({__name:"VPNavBarSearch",setup(o){const e=Ht(()=>Mt(()=>import("./VPLocalSearchBox.Dtbezcl8.js"),__vite__mapDeps([0,1]))),t=()=>null,{theme:n}=V(),a=H(!1),i=H(!1);te(()=>{});function l(){a.value||(a.value=!0,setTimeout(d,16))}function d(){const k=new Event("keydown");k.key="k",k.metaKey=!0,window.dispatchEvent(k),setTimeout(()=>{document.querySelector(".DocSearch-Modal")||d()},16)}function m(k){const S=k.target,E=S.tagName;return S.isContentEditable||E==="INPUT"||E==="SELECT"||E==="TEXTAREA"}const y=H(!1);Ce("k",k=>{(k.ctrlKey||k.metaKey)&&(k.preventDefault(),y.value=!0)}),Ce("/",k=>{m(k)||(k.preventDefault(),y.value=!0)});const I="local";return(k,S)=>{var E;return s(),u("div",Ds,[r(I)==="local"?(s(),u(B,{key:0},[y.value?(s(),b(r(e),{key:0,onClose:S[0]||(S[0]=N=>y.value=!1)})):h("",!0),v("div",js,[g(Ze,{onClick:S[1]||(S[1]=N=>y.value=!0)})])],64)):r(I)==="algolia"?(s(),u(B,{key:1},[a.value?(s(),b(r(t),{key:0,algolia:((E=r(n).search)==null?void 0:E.options)??r(n).algolia,onVnodeBeforeMount:S[2]||(S[2]=N=>i.value=!0)},null,8,["algolia"])):h("",!0),i.value?h("",!0):(s(),u("div",Us,[g(Ze,{onClick:l})]))],64)):h("",!0)])}}}),qs=_({__name:"VPNavBarSocialLinks",setup(o){const{theme:e}=V();return(t,n)=>r(e).socialLinks?(s(),b(Re,{key:0,class:"VPNavBarSocialLinks",links:r(e).socialLinks},null,8,["links"])):h("",!0)}}),Ws=$(qs,[["__scopeId","data-v-d6e28fe5"]]),Rs=["href","rel","target"],Ks=["innerHTML"],Js={key:2},Ys=_({__name:"VPNavBarTitle",setup(o){const{site:e,theme:t}=V(),{hasSidebar:n}=oe(),{currentLang:a}=me(),i=L(()=>{var m;return typeof t.value.logoLink=="string"?t.value.logoLink:(m=t.value.logoLink)==null?void 0:m.link}),l=L(()=>{var m;return typeof t.value.logoLink=="string"||(m=t.value.logoLink)==null?void 0:m.rel}),d=L(()=>{var m;return typeof t.value.logoLink=="string"||(m=t.value.logoLink)==null?void 0:m.target});return(m,y)=>(s(),u("div",{class:M(["VPNavBarTitle",{"has-sidebar":r(n)}])},[v("a",{class:"title",href:i.value??r(je)(r(a).link),rel:l.value,target:d.value},[c(m.$slots,"nav-bar-title-before",{},void 0,!0),r(t).logo?(s(),b(ke,{key:0,class:"logo",image:r(t).logo},null,8,["image"])):h("",!0),r(t).siteTitle?(s(),u("span",{key:1,innerHTML:r(t).siteTitle},null,8,Ks)):r(t).siteTitle===void 0?(s(),u("span",Js,A(r(e).title),1)):h("",!0),c(m.$slots,"nav-bar-title-after",{},void 0,!0)],8,Rs)],2))}}),Xs=$(Ys,[["__scopeId","data-v-211643ab"]]),Zs={class:"items"},Qs={class:"title"},xs=_({__name:"VPNavBarTranslations",setup(o){const{theme:e}=V(),{localeLinks:t,currentLang:n}=me({correspondingLink:!0});return(a,i)=>r(t).length&&r(n).label?(s(),b(We,{key:0,class:"VPNavBarTranslations",icon:"vpi-languages",label:r(e).langMenuLabel||"Change language"},{default:p(()=>[v("div",Zs,[v("p",Qs,A(r(n).label),1),(s(!0),u(B,null,W(r(t),l=>(s(),b(Se,{key:l.link,item:l},null,8,["item"]))),128))])]),_:1},8,["label"])):h("",!0)}}),er=$(xs,[["__scopeId","data-v-9d8c2f62"]]),tr=o=>(G("data-v-511c2cc9"),o=o(),q(),o),or={class:"wrapper"},nr={class:"container"},ar={class:"title"},sr={class:"content"},rr={class:"content-body"},ir=tr(()=>v("div",{class:"divider"},[v("div",{class:"divider-line"})],-1)),lr=_({__name:"VPNavBar",props:{isScreenOpen:{type:Boolean}},emits:["toggle-screen"],setup(o){const e=o,{y:t}=tt(),{hasSidebar:n}=oe(),{frontmatter:a}=V(),i=H({});return Fe(()=>{i.value={"has-sidebar":n.value,home:a.value.layout==="home",top:t.value===0,"screen-open":e.isScreenOpen}}),(l,d)=>(s(),u("div",{class:M(["VPNavBar",i.value])},[v("div",or,[v("div",nr,[v("div",ar,[g(Xs,null,{"nav-bar-title-before":p(()=>[c(l.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":p(()=>[c(l.$slots,"nav-bar-title-after",{},void 0,!0)]),_:3})]),v("div",sr,[v("div",rr,[c(l.$slots,"nav-bar-content-before",{},void 0,!0),g(Gs,{class:"search"}),g(Hs,{class:"menu"}),g(er,{class:"translations"}),g(za,{class:"appearance"}),g(Ws,{class:"social-links"}),g(gs,{class:"extra"}),c(l.$slots,"nav-bar-content-after",{},void 0,!0),g(Ps,{class:"hamburger",active:l.isScreenOpen,onClick:d[0]||(d[0]=m=>l.$emit("toggle-screen"))},null,8,["active"])])])])]),ir],2))}}),cr=$(lr,[["__scopeId","data-v-511c2cc9"]]),ur={key:0,class:"VPNavScreenAppearance"},dr={class:"text"},vr=_({__name:"VPNavScreenAppearance",setup(o){const{site:e,theme:t}=V();return(n,a)=>r(e).appearance&&r(e).appearance!=="force-dark"&&r(e).appearance!=="force-auto"?(s(),u("div",ur,[v("p",dr,A(r(t).darkModeSwitchLabel||"Appearance"),1),g(Ge)])):h("",!0)}}),pr=$(vr,[["__scopeId","data-v-15ad096a"]]),mr=["innerHTML"],fr=_({__name:"VPNavScreenMenuLink",props:{item:{}},setup(o){const e=Le("close-screen");return(t,n)=>(s(),b(x,{class:"VPNavScreenMenuLink",href:t.item.link,target:t.item.target,rel:t.item.rel,"no-icon":t.item.noIcon,onClick:r(e)},{default:p(()=>[v("span",{innerHTML:t.item.text},null,8,mr)]),_:1},8,["href","target","rel","no-icon","onClick"]))}}),hr=$(fr,[["__scopeId","data-v-4fb78c30"]]),_r=["innerHTML"],gr=_({__name:"VPNavScreenMenuGroupLink",props:{item:{}},setup(o){const e=Le("close-screen");return(t,n)=>(s(),b(x,{class:"VPNavScreenMenuGroupLink",href:t.item.link,target:t.item.target,rel:t.item.rel,"no-icon":t.item.noIcon,onClick:r(e)},{default:p(()=>[v("span",{innerHTML:t.item.text},null,8,_r)]),_:1},8,["href","target","rel","no-icon","onClick"]))}}),dt=$(gr,[["__scopeId","data-v-64059e46"]]),br={class:"VPNavScreenMenuGroupSection"},kr={key:0,class:"title"},$r=_({__name:"VPNavScreenMenuGroupSection",props:{text:{},items:{}},setup(o){return(e,t)=>(s(),u("div",br,[e.text?(s(),u("p",kr,A(e.text),1)):h("",!0),(s(!0),u(B,null,W(e.items,n=>(s(),b(dt,{key:n.text,item:n},null,8,["item"]))),128))]))}}),yr=$($r,[["__scopeId","data-v-52a35d42"]]),Lr=o=>(G("data-v-1e2bb94d"),o=o(),q(),o),Pr=["aria-controls","aria-expanded"],Sr=["innerHTML"],Vr=Lr(()=>v("span",{class:"vpi-plus button-icon"},null,-1)),wr=["id"],Tr={key:0,class:"item"},Ir={key:1,class:"item"},Nr={key:2,class:"group"},Er=_({__name:"VPNavScreenMenuGroup",props:{text:{},items:{}},setup(o){const e=o,t=H(!1),n=L(()=>`NavScreenGroup-${e.text.replace(" ","-").toLowerCase()}`);function a(){t.value=!t.value}return(i,l)=>(s(),u("div",{class:M(["VPNavScreenMenuGroup",{open:t.value}])},[v("button",{class:"button","aria-controls":n.value,"aria-expanded":t.value,onClick:a},[v("span",{class:"button-text",innerHTML:i.text},null,8,Sr),Vr],8,Pr),v("div",{id:n.value,class:"items"},[(s(!0),u(B,null,W(i.items,d=>(s(),u(B,{key:JSON.stringify(d)},["link"in d?(s(),u("div",Tr,[g(dt,{item:d},null,8,["item"])])):"component"in d?(s(),u("div",Ir,[(s(),b(Q(d.component),se({ref_for:!0},d.props,{"screen-menu":""}),null,16))])):(s(),u("div",Nr,[g(yr,{text:d.text,items:d.items},null,8,["text","items"])]))],64))),128))],8,wr)],2))}}),Cr=$(Er,[["__scopeId","data-v-1e2bb94d"]]),Hr={key:0,class:"VPNavScreenMenu"},Mr=_({__name:"VPNavScreenMenu",setup(o){const{theme:e}=V();return(t,n)=>r(e).nav?(s(),u("nav",Hr,[(s(!0),u(B,null,W(r(e).nav,a=>(s(),u(B,{key:JSON.stringify(a)},["link"in a?(s(),b(hr,{key:0,item:a},null,8,["item"])):"component"in a?(s(),b(Q(a.component),se({key:1,ref_for:!0},a.props,{"screen-menu":""}),null,16)):(s(),b(Cr,{key:2,text:a.text||"",items:a.items},null,8,["text","items"]))],64))),128))])):h("",!0)}}),zr=_({__name:"VPNavScreenSocialLinks",setup(o){const{theme:e}=V();return(t,n)=>r(e).socialLinks?(s(),b(Re,{key:0,class:"VPNavScreenSocialLinks",links:r(e).socialLinks},null,8,["links"])):h("",!0)}}),vt=o=>(G("data-v-da51982f"),o=o(),q(),o),Ar=vt(()=>v("span",{class:"vpi-languages icon lang"},null,-1)),Br=vt(()=>v("span",{class:"vpi-chevron-down icon chevron"},null,-1)),Or={class:"list"},Fr=_({__name:"VPNavScreenTranslations",setup(o){const{localeLinks:e,currentLang:t}=me({correspondingLink:!0}),n=H(!1);function a(){n.value=!n.value}return(i,l)=>r(e).length&&r(t).label?(s(),u("div",{key:0,class:M(["VPNavScreenTranslations",{open:n.value}])},[v("button",{class:"title",onClick:a},[Ar,de(" "+A(r(t).label)+" ",1),Br]),v("ul",Or,[(s(!0),u(B,null,W(r(e),d=>(s(),u("li",{key:d.link,class:"item"},[g(x,{class:"link",href:d.link},{default:p(()=>[de(A(d.text),1)]),_:2},1032,["href"])]))),128))])],2)):h("",!0)}}),Dr=$(Fr,[["__scopeId","data-v-da51982f"]]),jr={class:"container"},Ur=_({__name:"VPNavScreen",props:{open:{type:Boolean}},setup(o){const e=H(null),t=ot(Pe?document.body:null);return(n,a)=>(s(),b(Ae,{name:"fade",onEnter:a[0]||(a[0]=i=>t.value=!0),onAfterLeave:a[1]||(a[1]=i=>t.value=!1)},{default:p(()=>[n.open?(s(),u("div",{key:0,class:"VPNavScreen",ref_key:"screen",ref:e,id:"VPNavScreen"},[v("div",jr,[c(n.$slots,"nav-screen-content-before",{},void 0,!0),g(Mr,{class:"menu"}),g(Dr,{class:"translations"}),g(pr,{class:"appearance"}),g(zr,{class:"social-links"}),c(n.$slots,"nav-screen-content-after",{},void 0,!0)])],512)):h("",!0)]),_:3}))}}),Gr=$(Ur,[["__scopeId","data-v-9cc6cbea"]]),qr={key:0,class:"VPNav"},Wr=_({__name:"VPNav",setup(o){const{isScreenOpen:e,closeScreen:t,toggleScreen:n}=La(),{frontmatter:a}=V(),i=L(()=>a.value.navbar!==!1);return nt("close-screen",t),$e(()=>{Pe&&document.documentElement.classList.toggle("hide-nav",!i.value)}),(l,d)=>i.value?(s(),u("header",qr,[g(cr,{"is-screen-open":r(e),onToggleScreen:r(n)},{"nav-bar-title-before":p(()=>[c(l.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":p(()=>[c(l.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":p(()=>[c(l.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":p(()=>[c(l.$slots,"nav-bar-content-after",{},void 0,!0)]),_:3},8,["is-screen-open","onToggleScreen"]),g(Gr,{open:r(e)},{"nav-screen-content-before":p(()=>[c(l.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":p(()=>[c(l.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3},8,["open"])])):h("",!0)}}),Rr=$(Wr,[["__scopeId","data-v-1f7b0f5c"]]),pt=o=>(G("data-v-6092ddf2"),o=o(),q(),o),Kr=["role","tabindex"],Jr=pt(()=>v("div",{class:"indicator"},null,-1)),Yr=pt(()=>v("span",{class:"vpi-chevron-right caret-icon"},null,-1)),Xr=[Yr],Zr={key:1,class:"items"},Qr=_({__name:"VPSidebarItem",props:{item:{},depth:{}},setup(o){const e=o,{collapsed:t,collapsible:n,isLink:a,isActiveLink:i,hasActiveLink:l,hasChildren:d,toggle:m}=vo(L(()=>e.item)),y=L(()=>d.value?"section":"div"),I=L(()=>a.value?"a":"div"),k=L(()=>d.value?e.depth+2===7?"p":`h${e.depth+2}`:"p"),S=L(()=>a.value?void 0:"button"),E=L(()=>[[`level-${e.depth}`],{collapsible:n.value},{collapsed:t.value},{"is-link":a.value},{"is-active":i.value},{"has-active":l.value}]);function N(C){"key"in C&&C.key!=="Enter"||!e.item.link&&m()}function F(){e.item.link&&m()}return(C,Y)=>{const X=le("VPSidebarItem",!0);return s(),b(Q(y.value),{class:M(["VPSidebarItem",E.value])},{default:p(()=>[C.item.text?(s(),u("div",se({key:0,class:"item",role:S.value},zt(C.item.items?{click:N,keydown:N}:{},!0),{tabindex:C.item.items&&0}),[Jr,C.item.link?(s(),b(x,{key:0,tag:I.value,class:"link",href:C.item.link,rel:C.item.rel,target:C.item.target},{default:p(()=>[(s(),b(Q(k.value),{class:"text",innerHTML:C.item.text},null,8,["innerHTML"]))]),_:1},8,["tag","href","rel","target"])):(s(),b(Q(k.value),{key:1,class:"text",innerHTML:C.item.text},null,8,["innerHTML"])),C.item.collapsed!=null&&C.item.items&&C.item.items.length?(s(),u("div",{key:2,class:"caret",role:"button","aria-label":"toggle section",onClick:F,onKeydown:At(F,["enter"]),tabindex:"0"},Xr,32)):h("",!0)],16,Kr)):h("",!0),C.item.items&&C.item.items.length?(s(),u("div",Zr,[C.depth<5?(s(!0),u(B,{key:0},W(C.item.items,D=>(s(),b(X,{key:D.text,item:D,depth:C.depth+1},null,8,["item","depth"]))),128)):h("",!0)])):h("",!0)]),_:1},8,["class"])}}}),xr=$(Qr,[["__scopeId","data-v-6092ddf2"]]),ei=_({__name:"VPSidebarGroup",props:{items:{}},setup(o){const e=H(!0);let t=null;return te(()=>{t=setTimeout(()=>{t=null,e.value=!1},300)}),Bt(()=>{t!=null&&(clearTimeout(t),t=null)}),(n,a)=>(s(!0),u(B,null,W(n.items,i=>(s(),u("div",{key:i.text,class:M(["group",{"no-transition":e.value}])},[g(xr,{item:i,depth:0},null,8,["item"])],2))),128))}}),ti=$(ei,[["__scopeId","data-v-7eb7a422"]]),mt=o=>(G("data-v-130e406e"),o=o(),q(),o),oi=mt(()=>v("div",{class:"curtain"},null,-1)),ni={class:"nav",id:"VPSidebarNav","aria-labelledby":"sidebar-aria-label",tabindex:"-1"},ai=mt(()=>v("span",{class:"visually-hidden",id:"sidebar-aria-label"}," Sidebar Navigation ",-1)),si=_({__name:"VPSidebar",props:{open:{type:Boolean}},setup(o){const{sidebarGroups:e,hasSidebar:t}=oe(),n=o,a=H(null),i=ot(Pe?document.body:null);ee([n,a],()=>{var d;n.open?(i.value=!0,(d=a.value)==null||d.focus()):i.value=!1},{immediate:!0,flush:"post"});const l=H(0);return ee(e,()=>{l.value+=1},{deep:!0}),(d,m)=>r(t)?(s(),u("aside",{key:0,class:M(["VPSidebar",{open:d.open}]),ref_key:"navEl",ref:a,onClick:m[0]||(m[0]=Ot(()=>{},["stop"]))},[oi,v("nav",ni,[ai,c(d.$slots,"sidebar-nav-before",{},void 0,!0),(s(),b(ti,{items:r(e),key:l.value},null,8,["items"])),c(d.$slots,"sidebar-nav-after",{},void 0,!0)])],2)):h("",!0)}}),ri=$(si,[["__scopeId","data-v-130e406e"]]),ii=_({__name:"VPSkipLink",setup(o){const{theme:e}=V(),t=pe(),n=H();ee(()=>t.path,()=>n.value.focus());function a({target:i}){const l=document.getElementById(decodeURIComponent(i.hash).slice(1));if(l){const d=()=>{l.removeAttribute("tabindex"),l.removeEventListener("blur",d)};l.setAttribute("tabindex","-1"),l.addEventListener("blur",d),l.focus(),window.scrollTo(0,0)}}return(i,l)=>(s(),u(B,null,[v("span",{ref_key:"backToTop",ref:n,tabindex:"-1"},null,512),v("a",{href:"#VPContent",class:"VPSkipLink visually-hidden",onClick:a},A(r(e).skipToContentLabel||"Skip to content"),1)],64))}}),li=$(ii,[["__scopeId","data-v-5d3e946a"]]),ci=_({__name:"Layout",setup(o){const{isOpen:e,open:t,close:n}=oe(),a=pe();ee(()=>a.path,n),uo(e,n);const{frontmatter:i}=V(),l=Ft(),d=L(()=>!!l["home-hero-image"]);return nt("hero-image-slot-exists",d),(m,y)=>{const I=le("Content");return r(i).layout!==!1?(s(),u("div",{key:0,class:M(["Layout",r(i).pageClass])},[c(m.$slots,"layout-top",{},void 0,!0),g(li),g(Yt,{class:"backdrop",show:r(e),onClick:r(n)},null,8,["show","onClick"]),g(Rr,null,{"nav-bar-title-before":p(()=>[c(m.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":p(()=>[c(m.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":p(()=>[c(m.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":p(()=>[c(m.$slots,"nav-bar-content-after",{},void 0,!0)]),"nav-screen-content-before":p(()=>[c(m.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":p(()=>[c(m.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3}),g(ya,{open:r(e),onOpenMenu:r(t)},null,8,["open","onOpenMenu"]),g(ri,{open:r(e)},{"sidebar-nav-before":p(()=>[c(m.$slots,"sidebar-nav-before",{},void 0,!0)]),"sidebar-nav-after":p(()=>[c(m.$slots,"sidebar-nav-after",{},void 0,!0)]),_:3},8,["open"]),g(oa,null,{"page-top":p(()=>[c(m.$slots,"page-top",{},void 0,!0)]),"page-bottom":p(()=>[c(m.$slots,"page-bottom",{},void 0,!0)]),"not-found":p(()=>[c(m.$slots,"not-found",{},void 0,!0)]),"home-hero-before":p(()=>[c(m.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":p(()=>[c(m.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":p(()=>[c(m.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":p(()=>[c(m.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":p(()=>[c(m.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":p(()=>[c(m.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":p(()=>[c(m.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":p(()=>[c(m.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":p(()=>[c(m.$slots,"home-features-after",{},void 0,!0)]),"doc-footer-before":p(()=>[c(m.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":p(()=>[c(m.$slots,"doc-before",{},void 0,!0)]),"doc-after":p(()=>[c(m.$slots,"doc-after",{},void 0,!0)]),"doc-top":p(()=>[c(m.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":p(()=>[c(m.$slots,"doc-bottom",{},void 0,!0)]),"aside-top":p(()=>[c(m.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":p(()=>[c(m.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":p(()=>[c(m.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":p(()=>[c(m.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":p(()=>[c(m.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":p(()=>[c(m.$slots,"aside-ads-after",{},void 0,!0)]),_:3}),g(ia),c(m.$slots,"layout-bottom",{},void 0,!0)],2)):(s(),b(I,{key:1}))}}}),ui=$(ci,[["__scopeId","data-v-fbfa64bf"]]),di={Layout:ui},vi={class:"ad"},pi=["src","onClick"],mi={__name:"layout",setup(o){const{Layout:e}=di,t=Dt({list:[],toLink(n){n.link?window.open(n.link):window.open(`https://cool-js.com/ad/${n.id}`)},get(){fetch("https://service.cool-js.com/api/app/info/ad/list",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({channel:1})}).then(n=>n.json()).then(n=>{this.list=n.data})}});return te(()=>{t.get()}),(n,a)=>(s(),b(r(e),null,{"sidebar-nav-before":p(()=>[v("div",vi,[(s(!0),u(B,null,W(t.list,i=>(s(),u("img",{key:i,src:i.pic,onClick:l=>t.toLink(i)},null,8,pi))),128))])]),_:1}))}},fi=$(mi,[["__scopeId","data-v-96d1ba1f"]]),_i={Layout:fi,setup(){const o=pe(),e=()=>{new qt("[data-zoomable]",{background:"var(--vp-c-bg)"})};te(()=>{e()}),ee(()=>o.path,()=>De(()=>e()))}};export{_i as R,Ms as c,V as u}; diff --git a/.vitepress/dist/assets/index.md.Dsd7aigo.js b/.vitepress/dist/assets/index.md.rtwKissJ.js similarity index 99% rename from .vitepress/dist/assets/index.md.Dsd7aigo.js rename to .vitepress/dist/assets/index.md.rtwKissJ.js index bac7ded..387e19f 100644 --- a/.vitepress/dist/assets/index.md.Dsd7aigo.js +++ b/.vitepress/dist/assets/index.md.rtwKissJ.js @@ -1 +1 @@ -import{_ as l,a as t,o as i}from"./chunks/framework.BjhQB2K5.js";const n=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"Cool Admin(Java版)","text":"一个很酷的后台管理系统开发框架","tagline":"开源免费、Ai编码、流程编排、扩展插件、模块化","actions":[{"theme":"brand","text":"快速开始","link":"/src/guide/quick.md"},{"theme":"alt","text":"源码下载","link":"/src/introduce/src"}],"image":{"src":"/show/admin.png","alt":"cool-admin"}},"features":[{"title":"Ai编码+流程编排","icon":"","details":"框架结合Ai大模型微调训练,让Ai更懂框架,只需少量文字描述即可零代码实现部分功能。流程编排Ai开发必备神器,只需拖动配置,即可实现Ai开发的核心功能。"},{"title":"快速开发","icon":"","details":"通过Ai自动化编码,简单功能实现零代码开发,复杂的功能也只需少量代码配置即可。大大提高软件研发速度,快速迭代,快速试错降低成本,提高市场竞争力。"},{"title":"扩展插件","icon":"","details":"支持插件扩展,通过插件扩展功能,实现功能快速迭代。如支付、文件上传、短信等功能可以通过安装插件的方式动态继承,不需要或者需要更换,卸载重装即可,配置不用写在代码里,代码简洁清晰。"}]},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":1720593505000}'),a={name:"index.md"};function c(h,e,d,p,s,v){return i(),t("div")}const m=l(a,[["render",c]]);export{n as __pageData,m as default}; +import{_ as l,a as t,o as i}from"./chunks/framework.BKXlU_Nx.js";const n=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"Cool Admin(Java版)","text":"一个很酷的后台管理系统开发框架","tagline":"开源免费、Ai编码、流程编排、扩展插件、模块化","actions":[{"theme":"brand","text":"快速开始","link":"/src/guide/quick.md"},{"theme":"alt","text":"源码下载","link":"/src/introduce/src"}],"image":{"src":"/show/admin.png","alt":"cool-admin"}},"features":[{"title":"Ai编码+流程编排","icon":"","details":"框架结合Ai大模型微调训练,让Ai更懂框架,只需少量文字描述即可零代码实现部分功能。流程编排Ai开发必备神器,只需拖动配置,即可实现Ai开发的核心功能。"},{"title":"快速开发","icon":"","details":"通过Ai自动化编码,简单功能实现零代码开发,复杂的功能也只需少量代码配置即可。大大提高软件研发速度,快速迭代,快速试错降低成本,提高市场竞争力。"},{"title":"扩展插件","icon":"","details":"支持插件扩展,通过插件扩展功能,实现功能快速迭代。如支付、文件上传、短信等功能可以通过安装插件的方式动态继承,不需要或者需要更换,卸载重装即可,配置不用写在代码里,代码简洁清晰。"}]},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":1720593505000}'),a={name:"index.md"};function c(h,e,d,p,s,v){return i(),t("div")}const m=l(a,[["render",c]]);export{n as __pageData,m as default}; diff --git a/.vitepress/dist/assets/index.md.Dsd7aigo.lean.js b/.vitepress/dist/assets/index.md.rtwKissJ.lean.js similarity index 99% rename from .vitepress/dist/assets/index.md.Dsd7aigo.lean.js rename to .vitepress/dist/assets/index.md.rtwKissJ.lean.js index bac7ded..387e19f 100644 --- a/.vitepress/dist/assets/index.md.Dsd7aigo.lean.js +++ b/.vitepress/dist/assets/index.md.rtwKissJ.lean.js @@ -1 +1 @@ -import{_ as l,a as t,o as i}from"./chunks/framework.BjhQB2K5.js";const n=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"Cool Admin(Java版)","text":"一个很酷的后台管理系统开发框架","tagline":"开源免费、Ai编码、流程编排、扩展插件、模块化","actions":[{"theme":"brand","text":"快速开始","link":"/src/guide/quick.md"},{"theme":"alt","text":"源码下载","link":"/src/introduce/src"}],"image":{"src":"/show/admin.png","alt":"cool-admin"}},"features":[{"title":"Ai编码+流程编排","icon":"","details":"框架结合Ai大模型微调训练,让Ai更懂框架,只需少量文字描述即可零代码实现部分功能。流程编排Ai开发必备神器,只需拖动配置,即可实现Ai开发的核心功能。"},{"title":"快速开发","icon":"","details":"通过Ai自动化编码,简单功能实现零代码开发,复杂的功能也只需少量代码配置即可。大大提高软件研发速度,快速迭代,快速试错降低成本,提高市场竞争力。"},{"title":"扩展插件","icon":"","details":"支持插件扩展,通过插件扩展功能,实现功能快速迭代。如支付、文件上传、短信等功能可以通过安装插件的方式动态继承,不需要或者需要更换,卸载重装即可,配置不用写在代码里,代码简洁清晰。"}]},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":1720593505000}'),a={name:"index.md"};function c(h,e,d,p,s,v){return i(),t("div")}const m=l(a,[["render",c]]);export{n as __pageData,m as default}; +import{_ as l,a as t,o as i}from"./chunks/framework.BKXlU_Nx.js";const n=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"Cool Admin(Java版)","text":"一个很酷的后台管理系统开发框架","tagline":"开源免费、Ai编码、流程编排、扩展插件、模块化","actions":[{"theme":"brand","text":"快速开始","link":"/src/guide/quick.md"},{"theme":"alt","text":"源码下载","link":"/src/introduce/src"}],"image":{"src":"/show/admin.png","alt":"cool-admin"}},"features":[{"title":"Ai编码+流程编排","icon":"","details":"框架结合Ai大模型微调训练,让Ai更懂框架,只需少量文字描述即可零代码实现部分功能。流程编排Ai开发必备神器,只需拖动配置,即可实现Ai开发的核心功能。"},{"title":"快速开发","icon":"","details":"通过Ai自动化编码,简单功能实现零代码开发,复杂的功能也只需少量代码配置即可。大大提高软件研发速度,快速迭代,快速试错降低成本,提高市场竞争力。"},{"title":"扩展插件","icon":"","details":"支持插件扩展,通过插件扩展功能,实现功能快速迭代。如支付、文件上传、短信等功能可以通过安装插件的方式动态继承,不需要或者需要更换,卸载重装即可,配置不用写在代码里,代码简洁清晰。"}]},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":1720593505000}'),a={name:"index.md"};function c(h,e,d,p,s,v){return i(),t("div")}const m=l(a,[["render",c]]);export{n as __pageData,m as default}; diff --git a/.vitepress/dist/assets/src_about_index.md.-unb0L2u.js b/.vitepress/dist/assets/src_about_index.md.-unb0L2u.js deleted file mode 100644 index 1b8bcc5..0000000 --- a/.vitepress/dist/assets/src_about_index.md.-unb0L2u.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,a as e,o as t,aj as r}from"./chunks/framework.BjhQB2K5.js";const o="/show/wechat.png",i="/show/douyin.png",s="/show/mp.png",x=JSON.parse('{"title":"交流合作","description":"","frontmatter":{},"headers":[],"relativePath":"src/about/index.md","filePath":"src/about/index.md","lastUpdated":1720593505000}'),n={name:"src/about/index.md"},c=r('

交流合作 ​

如果我们的项目对你有用,欢迎加入我们大家庭一起讨论,共创一些美好的事情。

微信 ​

扫一扫加入微信开发交流群

抖音 ​

主要是做一些技术教程、技术分享、框架更新、插件分享等内容。你可以在这边了解到一些关于我们框架的最新动态,还可以了解到一些前沿的技术,特别是跟 Ai 相关的,有兴趣的可以关注我们。

B 站 ​

COOL 团队哔哩哔哩官方账户

公众号 ​

COOL 的一些最新资讯、技术分享、框架更新、插件分享等

',13),h=[c];function l(p,d,_,m,u,b){return t(),e("div",null,h)}const q=a(n,[["render",l]]);export{x as __pageData,q as default}; diff --git a/.vitepress/dist/assets/src_about_index.md.-unb0L2u.lean.js b/.vitepress/dist/assets/src_about_index.md.-unb0L2u.lean.js deleted file mode 100644 index b6a6e9c..0000000 --- a/.vitepress/dist/assets/src_about_index.md.-unb0L2u.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,a as e,o as t,aj as r}from"./chunks/framework.BjhQB2K5.js";const o="/show/wechat.png",i="/show/douyin.png",s="/show/mp.png",x=JSON.parse('{"title":"交流合作","description":"","frontmatter":{},"headers":[],"relativePath":"src/about/index.md","filePath":"src/about/index.md","lastUpdated":1720593505000}'),n={name:"src/about/index.md"},c=r("",13),h=[c];function l(p,d,_,m,u,b){return t(),e("div",null,h)}const q=a(n,[["render",l]]);export{x as __pageData,q as default}; diff --git a/.vitepress/dist/assets/src_about_index.md.C_NFm4P1.js b/.vitepress/dist/assets/src_about_index.md.C_NFm4P1.js new file mode 100644 index 0000000..5d13c68 --- /dev/null +++ b/.vitepress/dist/assets/src_about_index.md.C_NFm4P1.js @@ -0,0 +1 @@ +import{_ as e,a as t,o as r,ah as o}from"./chunks/framework.BKXlU_Nx.js";const i="/show/wechat.png",s="/show/douyin.png",n="/show/mp.png",b=JSON.parse('{"title":"交流合作","description":"","frontmatter":{},"headers":[],"relativePath":"src/about/index.md","filePath":"src/about/index.md","lastUpdated":1720593505000}'),l={name:"src/about/index.md"};function p(c,a,h,d,_,m){return r(),t("div",null,a[0]||(a[0]=[o('

交流合作 ​

如果我们的项目对你有用,欢迎加入我们大家庭一起讨论,共创一些美好的事情。

微信 ​

扫一扫加入微信开发交流群

抖音 ​

主要是做一些技术教程、技术分享、框架更新、插件分享等内容。你可以在这边了解到一些关于我们框架的最新动态,还可以了解到一些前沿的技术,特别是跟 Ai 相关的,有兴趣的可以关注我们。

B 站 ​

COOL 团队哔哩哔哩官方账户

公众号 ​

COOL 的一些最新资讯、技术分享、框架更新、插件分享等

',13)]))}const f=e(l,[["render",p]]);export{b as __pageData,f as default}; diff --git a/.vitepress/dist/assets/src_about_index.md.C_NFm4P1.lean.js b/.vitepress/dist/assets/src_about_index.md.C_NFm4P1.lean.js new file mode 100644 index 0000000..5444f6d --- /dev/null +++ b/.vitepress/dist/assets/src_about_index.md.C_NFm4P1.lean.js @@ -0,0 +1 @@ +import{_ as e,a as t,o as r,ah as o}from"./chunks/framework.BKXlU_Nx.js";const i="/show/wechat.png",s="/show/douyin.png",n="/show/mp.png",b=JSON.parse('{"title":"交流合作","description":"","frontmatter":{},"headers":[],"relativePath":"src/about/index.md","filePath":"src/about/index.md","lastUpdated":1720593505000}'),l={name:"src/about/index.md"};function p(c,a,h,d,_,m){return r(),t("div",null,a[0]||(a[0]=[o("",13)]))}const f=e(l,[["render",p]]);export{b as __pageData,f as default}; diff --git a/.vitepress/dist/assets/src_guide_ai.md.Cpqw5Ts-.js b/.vitepress/dist/assets/src_guide_ai.md.Cpqw5Ts-.js new file mode 100644 index 0000000..6b884a7 --- /dev/null +++ b/.vitepress/dist/assets/src_guide_ai.md.Cpqw5Ts-.js @@ -0,0 +1 @@ +import{_ as e}from"./chunks/code.VH4xl6Z5.js";import{_ as r,a as t,o as i,ah as o}from"./chunks/framework.BKXlU_Nx.js";const h=JSON.parse('{"title":"Ai 编码","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/ai.md","filePath":"src/guide/ai.md","lastUpdated":1721207284000}'),s={name:"src/guide/ai.md"};function p(_,a,l,n,d,c){return i(),t("div",null,a[0]||(a[0]=[o('

Ai 编码 ​

通过微调大模型学习框架特有写法,实现简单功能从 Api 接口到前端页面的一键生成

B 站视频教程

在线演示

',5)]))}const u=r(s,[["render",p]]);export{h as __pageData,u as default}; diff --git a/.vitepress/dist/assets/src_guide_ai.md.Cpqw5Ts-.lean.js b/.vitepress/dist/assets/src_guide_ai.md.Cpqw5Ts-.lean.js new file mode 100644 index 0000000..094528a --- /dev/null +++ b/.vitepress/dist/assets/src_guide_ai.md.Cpqw5Ts-.lean.js @@ -0,0 +1 @@ +import{_ as e}from"./chunks/code.VH4xl6Z5.js";import{_ as r,a as t,o as i,ah as o}from"./chunks/framework.BKXlU_Nx.js";const h=JSON.parse('{"title":"Ai 编码","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/ai.md","filePath":"src/guide/ai.md","lastUpdated":1721207284000}'),s={name:"src/guide/ai.md"};function p(_,a,l,n,d,c){return i(),t("div",null,a[0]||(a[0]=[o("",5)]))}const u=r(s,[["render",p]]);export{h as __pageData,u as default}; diff --git a/.vitepress/dist/assets/src_guide_ai.md.aIl2n3N7.js b/.vitepress/dist/assets/src_guide_ai.md.aIl2n3N7.js deleted file mode 100644 index b90a389..0000000 --- a/.vitepress/dist/assets/src_guide_ai.md.aIl2n3N7.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a}from"./chunks/code.VH4xl6Z5.js";import{_ as e,a as t,o as r,aj as i}from"./chunks/framework.BjhQB2K5.js";const g=JSON.parse('{"title":"Ai 编码","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/ai.md","filePath":"src/guide/ai.md","lastUpdated":1721207284000}'),o={name:"src/guide/ai.md"},s=i('

Ai 编码 ​

通过微调大模型学习框架特有写法,实现简单功能从 Api 接口到前端页面的一键生成

B 站视频教程

在线演示

',5),_=[s];function c(n,p,d,l,m,h){return r(),t("div",null,_)}const b=e(o,[["render",c]]);export{g as __pageData,b as default}; diff --git a/.vitepress/dist/assets/src_guide_ai.md.aIl2n3N7.lean.js b/.vitepress/dist/assets/src_guide_ai.md.aIl2n3N7.lean.js deleted file mode 100644 index 5591980..0000000 --- a/.vitepress/dist/assets/src_guide_ai.md.aIl2n3N7.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a}from"./chunks/code.VH4xl6Z5.js";import{_ as e,a as t,o as r,aj as i}from"./chunks/framework.BjhQB2K5.js";const g=JSON.parse('{"title":"Ai 编码","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/ai.md","filePath":"src/guide/ai.md","lastUpdated":1721207284000}'),o={name:"src/guide/ai.md"},s=i("",5),_=[s];function c(n,p,d,l,m,h){return r(),t("div",null,_)}const b=e(o,[["render",c]]);export{g as __pageData,b as default}; diff --git a/.vitepress/dist/assets/src_guide_cache.md.DYexoE7d.js b/.vitepress/dist/assets/src_guide_cache.md.CngBGKWx.js similarity index 91% rename from .vitepress/dist/assets/src_guide_cache.md.DYexoE7d.js rename to .vitepress/dist/assets/src_guide_cache.md.CngBGKWx.js index c9e91ea..c91a523 100644 --- a/.vitepress/dist/assets/src_guide_cache.md.DYexoE7d.js +++ b/.vitepress/dist/assets/src_guide_cache.md.CngBGKWx.js @@ -1,4 +1,4 @@ -import{_ as s,a as i,o as a,aj as n}from"./chunks/framework.BjhQB2K5.js";const y=JSON.parse('{"title":"缓存","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/cache.md","filePath":"src/guide/cache.md","lastUpdated":1724685357000}'),h={name:"src/guide/cache.md"},l=n(`

缓存 ​

为了不过多依赖环境,框架自带基于 springCache 默认实现了两种缓存

  • caffeine 无需额外安装软件,由 Ben Manes 开发的一个 Java 缓存库,旨在提供高性能、高效的缓存解决方案。
  • redis 需安装 redis,提供了一种高效且可靠的解决方案,能够显著提升应用程序的性能和响应速度。
yaml
spring:
+import{_ as i,a,o as n,ah as h}from"./chunks/framework.BKXlU_Nx.js";const g=JSON.parse('{"title":"缓存","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/cache.md","filePath":"src/guide/cache.md","lastUpdated":1724685357000}'),l={name:"src/guide/cache.md"};function k(t,s,p,e,E,r){return n(),a("div",null,s[0]||(s[0]=[h(`

缓存 ​

为了不过多依赖环境,框架自带基于 springCache 默认实现了两种缓存

  • caffeine 无需额外安装软件,由 Ben Manes 开发的一个 Java 缓存库,旨在提供高性能、高效的缓存解决方案。
  • redis 需安装 redis,提供了一种高效且可靠的解决方案,能够显著提升应用程序的性能和响应速度。
yaml
spring:
   # caffeine 缓存
   cache:
     type: caffeine
@@ -46,4 +46,4 @@ import{_ as s,a as i,o as a,aj as n}from"./chunks/framework.BjhQB2K5.js";const y
             String result = (String) invoke;
             return JSONUtil.parseObj(result).get("result");
         });
-}
`,12),k=[l];function t(p,e,E,r,d,g){return a(),i("div",null,k)}const o=s(h,[["render",t]]);export{y as __pageData,o as default}; +}
`,12)]))}const c=i(l,[["render",k]]);export{g as __pageData,c as default}; diff --git a/.vitepress/dist/assets/src_guide_cache.md.CngBGKWx.lean.js b/.vitepress/dist/assets/src_guide_cache.md.CngBGKWx.lean.js new file mode 100644 index 0000000..681e452 --- /dev/null +++ b/.vitepress/dist/assets/src_guide_cache.md.CngBGKWx.lean.js @@ -0,0 +1 @@ +import{_ as i,a,o as n,ah as h}from"./chunks/framework.BKXlU_Nx.js";const g=JSON.parse('{"title":"缓存","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/cache.md","filePath":"src/guide/cache.md","lastUpdated":1724685357000}'),l={name:"src/guide/cache.md"};function k(t,s,p,e,E,r){return n(),a("div",null,s[0]||(s[0]=[h("",12)]))}const c=i(l,[["render",k]]);export{g as __pageData,c as default}; diff --git a/.vitepress/dist/assets/src_guide_cache.md.DYexoE7d.lean.js b/.vitepress/dist/assets/src_guide_cache.md.DYexoE7d.lean.js deleted file mode 100644 index 65b6118..0000000 --- a/.vitepress/dist/assets/src_guide_cache.md.DYexoE7d.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,a as i,o as a,aj as n}from"./chunks/framework.BjhQB2K5.js";const y=JSON.parse('{"title":"缓存","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/cache.md","filePath":"src/guide/cache.md","lastUpdated":1724685357000}'),h={name:"src/guide/cache.md"},l=n("",12),k=[l];function t(p,e,E,r,d,g){return a(),i("div",null,k)}const o=s(h,[["render",t]]);export{y as __pageData,o as default}; diff --git a/.vitepress/dist/assets/src_guide_controller.md.ChJ_NED0.js b/.vitepress/dist/assets/src_guide_controller.md.Bnr5Inb1.js similarity index 96% rename from .vitepress/dist/assets/src_guide_controller.md.ChJ_NED0.js rename to .vitepress/dist/assets/src_guide_controller.md.Bnr5Inb1.js index b324f95..f05e90a 100644 --- a/.vitepress/dist/assets/src_guide_controller.md.ChJ_NED0.js +++ b/.vitepress/dist/assets/src_guide_controller.md.Bnr5Inb1.js @@ -1,4 +1,4 @@ -import{_ as s,a as i,o as a,aj as n}from"./chunks/framework.BjhQB2K5.js";const F=JSON.parse('{"title":"控制器","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/controller.md","filePath":"src/guide/controller.md","lastUpdated":1725802894000}'),h={name:"src/guide/controller.md"},k=n(`

控制器 ​

所有的 controller 都继承自 BaseController,该父类已经实现了以下六个基础方法:add、delete、update、page、list、info,可以大大简化代码,使得 controller 更加简洁。

示例 ​

java
@Tag(name = "测试CURD", description = "测试CURD")
+import{_ as i,a,o as n,ah as h}from"./chunks/framework.BKXlU_Nx.js";const g=JSON.parse('{"title":"控制器","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/controller.md","filePath":"src/guide/controller.md","lastUpdated":1725802894000}'),k={name:"src/guide/controller.md"};function t(l,s,p,e,E,r){return n(),a("div",null,s[0]||(s[0]=[h(`

控制器 ​

所有的 controller 都继承自 BaseController,该父类已经实现了以下六个基础方法:add、delete、update、page、list、info,可以大大简化代码,使得 controller 更加简洁。

示例 ​

java
@Tag(name = "测试CURD", description = "测试CURD")
 @CoolRestController(value = "/cool", api = {"add", "delete", "update", "page", "list", "info"})
 public class AdminDemoInfoController extends BaseController<DemoService, DemoEntity> {
     @Override
@@ -117,4 +117,4 @@ import{_ as s,a as i,o as a,aj as n}from"./chunks/framework.BjhQB2K5.js";const F
         info = info.mutate().paths(path).build().combine(info);
         return info;
     }
-}
`,36),t=[k];function l(p,e,E,r,d,g){return a(),i("div",null,t)}const o=s(h,[["render",l]]);export{F as __pageData,o as default}; +}
`,36)]))}const y=i(k,[["render",t]]);export{g as __pageData,y as default}; diff --git a/.vitepress/dist/assets/src_guide_controller.md.Bnr5Inb1.lean.js b/.vitepress/dist/assets/src_guide_controller.md.Bnr5Inb1.lean.js new file mode 100644 index 0000000..3557fab --- /dev/null +++ b/.vitepress/dist/assets/src_guide_controller.md.Bnr5Inb1.lean.js @@ -0,0 +1 @@ +import{_ as i,a,o as n,ah as h}from"./chunks/framework.BKXlU_Nx.js";const g=JSON.parse('{"title":"控制器","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/controller.md","filePath":"src/guide/controller.md","lastUpdated":1725802894000}'),k={name:"src/guide/controller.md"};function t(l,s,p,e,E,r){return n(),a("div",null,s[0]||(s[0]=[h("",36)]))}const y=i(k,[["render",t]]);export{g as __pageData,y as default}; diff --git a/.vitepress/dist/assets/src_guide_controller.md.ChJ_NED0.lean.js b/.vitepress/dist/assets/src_guide_controller.md.ChJ_NED0.lean.js deleted file mode 100644 index 12f6b31..0000000 --- a/.vitepress/dist/assets/src_guide_controller.md.ChJ_NED0.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,a as i,o as a,aj as n}from"./chunks/framework.BjhQB2K5.js";const F=JSON.parse('{"title":"控制器","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/controller.md","filePath":"src/guide/controller.md","lastUpdated":1725802894000}'),h={name:"src/guide/controller.md"},k=n("",36),t=[k];function l(p,e,E,r,d,g){return a(),i("div",null,t)}const o=s(h,[["render",l]]);export{F as __pageData,o as default}; diff --git a/.vitepress/dist/assets/src_guide_db.md.CH-r16iF.js b/.vitepress/dist/assets/src_guide_db.md.CH-r16iF.js deleted file mode 100644 index 19de8c6..0000000 --- a/.vitepress/dist/assets/src_guide_db.md.CH-r16iF.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as t,a as d,o as r,aj as e}from"./chunks/framework.BjhQB2K5.js";const m=JSON.parse('{"title":"数据库","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/db.md","filePath":"src/guide/db.md","lastUpdated":1721036629000}'),a={name:"src/guide/db.md"},s=e('

数据库 ​

Cool Admin 集成了比 Mybatis-Plus 更加强大的,Mybatis-Flex,详细用法请查看 Mybatis-Flex 官网文档

主要特点;

  • 更轻量:除了 MyBatis 本身,再无任何第三方依赖,因此会带来更高的自主性、把控性和稳定性。在任何一个系统中,依赖越多,稳定性越差。

  • 更灵活:提供了非常灵活的 QueryWrapper,支持关联查询、多表查询、多主键、逻辑删除、乐观锁更新、数据填充、数据脱敏等等。

  • 高性能:通过独特的架构,没有任何 MyBatis 拦截器、在 SQL 执行的过程中,没有任何的 SQL Parse,因此会带来指数级的性能增长。

功能对比 ​

功能或特点MyBatis-FlexMyBatis-PlusFluent-MyBatis
对 entity 的基本增删改查✅✅✅
分页查询✅✅✅
分页查询之总量缓存✅✅❌
分页查询无 SQL 解析设计(更轻量,及更高性能)✅❌✅
多表查询: from 多张表✅❌❌
多表查询: left join、inner join 等等✅❌✅
多表查询: union,union all✅❌✅
单主键配置✅✅✅
多种 id 生成策略✅✅✅
支持多主键、复合主键✅❌❌
字段的 typeHandler 配置✅✅✅
除了 MyBatis,无其他第三方依赖(更轻量)✅❌❌
QueryWrapper 是否支持在微服务项目下进行 RPC 传输✅❌未知
逻辑删除✅✅✅
乐观锁✅✅✅
SQL 审计✅❌❌
数据填充✅✅✅
数据脱敏✅✔️ (收费)❌
字段权限✅✔️ (收费)❌
字段加密✅✔️ (收费)❌
字典回写✅✔️ (收费)❌
Db + Row✅❌❌
Entity 监听✅❌❌
多数据源支持✅借助其他框架或收费❌
多数据源是否支持 Spring 的事务管理,比如 @Transactional 和 TransactionTemplate 等✅❌❌
多数据源是否支持 "非 Spring" 项目✅❌❌
多租户✅✅❌
动态表名✅✅❌
动态 Schema✅❌❌

注意

以上内容来自第三方相关产品的官方文档或第三方平台,若有错误,欢迎纠正。

支持数据库 ​

MyBatis-Flex 支持的数据库类型,如下表格所示,我们还可以通过自定义方言的方式,持续添加更多的数据库支持。

数据库描述
mysqlMySQL 数据库
mariadbMariaDB 数据库
oracleOracle11g 及以下数据库
oracle12cOracle12c 及以上数据库
db2DB2 数据库
H2H2 数据库
hsqlHSQL 数据库
sqliteSQLite 数据库
postgresqlPostgreSQL 数据库
sqlserver2005SQLServer2005 数据库
sqlserverSQLServer 数据库
dm达梦数据库
xugu虚谷数据库
kingbasees人大金仓数据库
phoenixPhoenix HBase 数据库
gaussGauss 数据库
clickhouseClickHouse 数据库
gbase南大通用(华库)数据库
gbase-8s南大通用数据库 GBase 8s
oscar神通数据库
sybaseSybase ASE 数据库
OceanBaseOceanBase 数据库
FirebirdFirebird 数据库
derbyDerby 数据库
highgo瀚高数据库
cubridCUBRID 数据库
goldilocksGOLDILOCKS 数据库
csiidbCSIIDB 数据库
hanaSAP_HANA 数据库
impalaImpala 数据库
verticaVertica 数据库
xcloud行云数据库
redshift亚马逊 redshift 数据库
openGauss华为 openGauss 数据库
TDengineTDengine 数据库
informixInformix 数据库
greenplumGreenplum 数据库
uxdb优炫数据库
DorisDoris 数据库
Hive SQLHive 数据库
lealoneLealone 数据库
sinodb星瑞格数据库

注意

虽然 Mybatis-flex 支持很多数据库,但是 Cool Admin 是具体的业务框架,无法做到全部支持,那样工作量太大了。但是它为我们提供了改造的可能,理论上你只需修改一些不兼容的代码就可以正常运行了。

除了 Mysql,我们正在适配:PostgreSQL、Sqlite

自动建表 ​

根据 Java 实体,自动映射成数据库的表结构。

用过 JPA 的都知道,JPA 有一项重要的能力就是表结构自动维护,这让我们可以可以专注于业务逻辑和实体,而不需要关心数据库的表、列的配置,尤其是开发过程中频繁的新增表及变更表结构,节省了大量手动工作。

框架集成了Auto Table,可以自动创建表,并且支持表字段的修改。

注意

切勿在生产环境开启自动建表功能,因为这可能会造成数据丢失。

',16),o=[s];function i(l,n,c,p,h,b){return r(),d("div",null,o)}const g=t(a,[["render",i]]);export{m as __pageData,g as default}; diff --git a/.vitepress/dist/assets/src_guide_db.md.CH-r16iF.lean.js b/.vitepress/dist/assets/src_guide_db.md.CH-r16iF.lean.js deleted file mode 100644 index a620b5a..0000000 --- a/.vitepress/dist/assets/src_guide_db.md.CH-r16iF.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as t,a as d,o as r,aj as e}from"./chunks/framework.BjhQB2K5.js";const m=JSON.parse('{"title":"数据库","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/db.md","filePath":"src/guide/db.md","lastUpdated":1721036629000}'),a={name:"src/guide/db.md"},s=e("",16),o=[s];function i(l,n,c,p,h,b){return r(),d("div",null,o)}const g=t(a,[["render",i]]);export{m as __pageData,g as default}; diff --git a/.vitepress/dist/assets/src_guide_db.md.Dcqu3WUK.js b/.vitepress/dist/assets/src_guide_db.md.Dcqu3WUK.js new file mode 100644 index 0000000..803c889 --- /dev/null +++ b/.vitepress/dist/assets/src_guide_db.md.Dcqu3WUK.js @@ -0,0 +1 @@ +import{_ as d,a as r,o as e,ah as a}from"./chunks/framework.BKXlU_Nx.js";const h=JSON.parse('{"title":"数据库","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/db.md","filePath":"src/guide/db.md","lastUpdated":1721036629000}'),s={name:"src/guide/db.md"};function o(i,t,l,n,c,p){return e(),r("div",null,t[0]||(t[0]=[a('

数据库 ​

Cool Admin 集成了比 Mybatis-Plus 更加强大的,Mybatis-Flex,详细用法请查看 Mybatis-Flex 官网文档

主要特点;

  • 更轻量:除了 MyBatis 本身,再无任何第三方依赖,因此会带来更高的自主性、把控性和稳定性。在任何一个系统中,依赖越多,稳定性越差。

  • 更灵活:提供了非常灵活的 QueryWrapper,支持关联查询、多表查询、多主键、逻辑删除、乐观锁更新、数据填充、数据脱敏等等。

  • 高性能:通过独特的架构,没有任何 MyBatis 拦截器、在 SQL 执行的过程中,没有任何的 SQL Parse,因此会带来指数级的性能增长。

功能对比 ​

功能或特点MyBatis-FlexMyBatis-PlusFluent-MyBatis
对 entity 的基本增删改查✅✅✅
分页查询✅✅✅
分页查询之总量缓存✅✅❌
分页查询无 SQL 解析设计(更轻量,及更高性能)✅❌✅
多表查询: from 多张表✅❌❌
多表查询: left join、inner join 等等✅❌✅
多表查询: union,union all✅❌✅
单主键配置✅✅✅
多种 id 生成策略✅✅✅
支持多主键、复合主键✅❌❌
字段的 typeHandler 配置✅✅✅
除了 MyBatis,无其他第三方依赖(更轻量)✅❌❌
QueryWrapper 是否支持在微服务项目下进行 RPC 传输✅❌未知
逻辑删除✅✅✅
乐观锁✅✅✅
SQL 审计✅❌❌
数据填充✅✅✅
数据脱敏✅✔️ (收费)❌
字段权限✅✔️ (收费)❌
字段加密✅✔️ (收费)❌
字典回写✅✔️ (收费)❌
Db + Row✅❌❌
Entity 监听✅❌❌
多数据源支持✅借助其他框架或收费❌
多数据源是否支持 Spring 的事务管理,比如 @Transactional 和 TransactionTemplate 等✅❌❌
多数据源是否支持 "非 Spring" 项目✅❌❌
多租户✅✅❌
动态表名✅✅❌
动态 Schema✅❌❌

注意

以上内容来自第三方相关产品的官方文档或第三方平台,若有错误,欢迎纠正。

支持数据库 ​

MyBatis-Flex 支持的数据库类型,如下表格所示,我们还可以通过自定义方言的方式,持续添加更多的数据库支持。

数据库描述
mysqlMySQL 数据库
mariadbMariaDB 数据库
oracleOracle11g 及以下数据库
oracle12cOracle12c 及以上数据库
db2DB2 数据库
H2H2 数据库
hsqlHSQL 数据库
sqliteSQLite 数据库
postgresqlPostgreSQL 数据库
sqlserver2005SQLServer2005 数据库
sqlserverSQLServer 数据库
dm达梦数据库
xugu虚谷数据库
kingbasees人大金仓数据库
phoenixPhoenix HBase 数据库
gaussGauss 数据库
clickhouseClickHouse 数据库
gbase南大通用(华库)数据库
gbase-8s南大通用数据库 GBase 8s
oscar神通数据库
sybaseSybase ASE 数据库
OceanBaseOceanBase 数据库
FirebirdFirebird 数据库
derbyDerby 数据库
highgo瀚高数据库
cubridCUBRID 数据库
goldilocksGOLDILOCKS 数据库
csiidbCSIIDB 数据库
hanaSAP_HANA 数据库
impalaImpala 数据库
verticaVertica 数据库
xcloud行云数据库
redshift亚马逊 redshift 数据库
openGauss华为 openGauss 数据库
TDengineTDengine 数据库
informixInformix 数据库
greenplumGreenplum 数据库
uxdb优炫数据库
DorisDoris 数据库
Hive SQLHive 数据库
lealoneLealone 数据库
sinodb星瑞格数据库

注意

虽然 Mybatis-flex 支持很多数据库,但是 Cool Admin 是具体的业务框架,无法做到全部支持,那样工作量太大了。但是它为我们提供了改造的可能,理论上你只需修改一些不兼容的代码就可以正常运行了。

除了 Mysql,我们正在适配:PostgreSQL、Sqlite

自动建表 ​

根据 Java 实体,自动映射成数据库的表结构。

用过 JPA 的都知道,JPA 有一项重要的能力就是表结构自动维护,这让我们可以可以专注于业务逻辑和实体,而不需要关心数据库的表、列的配置,尤其是开发过程中频繁的新增表及变更表结构,节省了大量手动工作。

框架集成了Auto Table,可以自动创建表,并且支持表字段的修改。

注意

切勿在生产环境开启自动建表功能,因为这可能会造成数据丢失。

',16)]))}const u=d(s,[["render",o]]);export{h as __pageData,u as default}; diff --git a/.vitepress/dist/assets/src_guide_db.md.Dcqu3WUK.lean.js b/.vitepress/dist/assets/src_guide_db.md.Dcqu3WUK.lean.js new file mode 100644 index 0000000..3864ae8 --- /dev/null +++ b/.vitepress/dist/assets/src_guide_db.md.Dcqu3WUK.lean.js @@ -0,0 +1 @@ +import{_ as d,a as r,o as e,ah as a}from"./chunks/framework.BKXlU_Nx.js";const h=JSON.parse('{"title":"数据库","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/db.md","filePath":"src/guide/db.md","lastUpdated":1721036629000}'),s={name:"src/guide/db.md"};function o(i,t,l,n,c,p){return e(),r("div",null,t[0]||(t[0]=[a("",16)]))}const u=d(s,[["render",o]]);export{h as __pageData,u as default}; diff --git a/.vitepress/dist/assets/src_guide_deploy.md.CVc1dXEU.js b/.vitepress/dist/assets/src_guide_deploy.md.C0fiYODu.js similarity index 84% rename from .vitepress/dist/assets/src_guide_deploy.md.CVc1dXEU.js rename to .vitepress/dist/assets/src_guide_deploy.md.C0fiYODu.js index 6361cf4..522bc59 100644 --- a/.vitepress/dist/assets/src_guide_deploy.md.CVc1dXEU.js +++ b/.vitepress/dist/assets/src_guide_deploy.md.C0fiYODu.js @@ -1,4 +1,4 @@ -import{_ as s,a as i,o as a,aj as n}from"./chunks/framework.BjhQB2K5.js";const o=JSON.parse('{"title":"项目部署","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/deploy.md","filePath":"src/guide/deploy.md","lastUpdated":1721207284000}'),l={name:"src/guide/deploy.md"},h=n(`

项目部署 ​

🔥 低价云服务器推荐

注意

以下教程以 Nodejs 版本为例,Java 版本的也可以参考

普通方式 ​

本部署教程以 node 版本+宝塔为例,其他部署方式也可以参考这个流程。

cool-admin 部署视频教程

1、部署流程(以宝塔为例): ​

  1. 拉取前后端代码;
  2. 本地配置完数据库运行,等待数据库初始化完成;
  3. 打包前后端代码,打包之前注意配置生产环境的数据库配置config/config.prod.ts,查看 midway 官方多环境配置文档;
  4. 服务器环境准备,安装宝塔、mysql、nodejs、nginx、pnpm 等;
  5. 上传前后端代码到服务器;
  6. 安装依赖,编译打包后端服务,启动服务;
  7. 配置 nginx 反向代理;
  8. 访问域名,如果一切正常,恭喜你,部署成功!

注意

  • 线上的数据库是需要本地传上去的,安全考虑生产环境不会自动初始化数据库;
  • 前端访问后端的接口地址默认是前端根地址+/api,所以需要配置 nginx 反向代理/api 到后端服务;

2、推荐使用 pnpm 安装依赖 ​

pnpm 官网

安装

bash
npm install -g pnpm

配置淘宝镜像

bash
pnpm config set registry https://registry.npmmirror.com

3、PM2 运行后端服务 ​

shell
// 命令行安装 pm2
+import{_ as i,a,o as n,ah as l}from"./chunks/framework.BKXlU_Nx.js";const F=JSON.parse('{"title":"项目部署","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/deploy.md","filePath":"src/guide/deploy.md","lastUpdated":1721207284000}'),p={name:"src/guide/deploy.md"};function h(t,s,k,e,r,d){return n(),a("div",null,s[0]||(s[0]=[l(`

项目部署 ​

🔥 低价云服务器推荐

注意

以下教程以 Nodejs 版本为例,Java 版本的也可以参考

普通方式 ​

本部署教程以 node 版本+宝塔为例,其他部署方式也可以参考这个流程。

cool-admin 部署视频教程

1、部署流程(以宝塔为例): ​

  1. 拉取前后端代码;
  2. 本地配置完数据库运行,等待数据库初始化完成;
  3. 打包前后端代码,打包之前注意配置生产环境的数据库配置config/config.prod.ts,查看 midway 官方多环境配置文档;
  4. 服务器环境准备,安装宝塔、mysql、nodejs、nginx、pnpm 等;
  5. 上传前后端代码到服务器;
  6. 安装依赖,编译打包后端服务,启动服务;
  7. 配置 nginx 反向代理;
  8. 访问域名,如果一切正常,恭喜你,部署成功!

注意

  • 线上的数据库是需要本地传上去的,安全考虑生产环境不会自动初始化数据库;
  • 前端访问后端的接口地址默认是前端根地址+/api,所以需要配置 nginx 反向代理/api 到后端服务;

2、推荐使用 pnpm 安装依赖 ​

pnpm 官网

安装

bash
npm install -g pnpm

配置淘宝镜像

bash
pnpm config set registry https://registry.npmmirror.com

3、PM2 运行后端服务 ​

shell
// 命令行安装 pm2
 npm install pm2 -g

常用命令

shell
// 启动一个服务
 pm2 start
 // 列出当前的服务
@@ -90,4 +90,4 @@ import{_ as s,a as i,o as a,aj as n}from"./chunks/framework.BjhQB2K5.js";const o
 docker run --network cool -p 8001:8001 --name midway cool-admin-midway:1.0
 
 // 运行后端
-docker run --network cool -p 80:80 --name vue cool-admin-vue:1.0

注意事项 ​

docker 部署,建议将缓存换成 redis,文件上传换成云存储,如:oss,防止操作不当导致的数据丢失。

`,37),p=[h];function t(k,e,r,d,E,F){return a(),i("div",null,p)}const c=s(l,[["render",t]]);export{o as __pageData,c as default}; +docker run --network cool -p 80:80 --name vue cool-admin-vue:1.0

注意事项 ​

docker 部署,建议将缓存换成 redis,文件上传换成云存储,如:oss,防止操作不当导致的数据丢失。

`,37)]))}const g=i(p,[["render",h]]);export{F as __pageData,g as default}; diff --git a/.vitepress/dist/assets/src_guide_deploy.md.C0fiYODu.lean.js b/.vitepress/dist/assets/src_guide_deploy.md.C0fiYODu.lean.js new file mode 100644 index 0000000..26cff02 --- /dev/null +++ b/.vitepress/dist/assets/src_guide_deploy.md.C0fiYODu.lean.js @@ -0,0 +1 @@ +import{_ as i,a,o as n,ah as l}from"./chunks/framework.BKXlU_Nx.js";const F=JSON.parse('{"title":"项目部署","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/deploy.md","filePath":"src/guide/deploy.md","lastUpdated":1721207284000}'),p={name:"src/guide/deploy.md"};function h(t,s,k,e,r,d){return n(),a("div",null,s[0]||(s[0]=[l("",37)]))}const g=i(p,[["render",h]]);export{F as __pageData,g as default}; diff --git a/.vitepress/dist/assets/src_guide_deploy.md.CVc1dXEU.lean.js b/.vitepress/dist/assets/src_guide_deploy.md.CVc1dXEU.lean.js deleted file mode 100644 index 7e144c8..0000000 --- a/.vitepress/dist/assets/src_guide_deploy.md.CVc1dXEU.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,a as i,o as a,aj as n}from"./chunks/framework.BjhQB2K5.js";const o=JSON.parse('{"title":"项目部署","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/deploy.md","filePath":"src/guide/deploy.md","lastUpdated":1721207284000}'),l={name:"src/guide/deploy.md"},h=n("",37),p=[h];function t(k,e,r,d,E,F){return a(),i("div",null,p)}const c=s(l,[["render",t]]);export{o as __pageData,c as default}; diff --git a/.vitepress/dist/assets/src_guide_dev.md.DM1UjwvK.js b/.vitepress/dist/assets/src_guide_dev.md.Cdra16SF.js similarity index 90% rename from .vitepress/dist/assets/src_guide_dev.md.DM1UjwvK.js rename to .vitepress/dist/assets/src_guide_dev.md.Cdra16SF.js index a4efa0d..84ea00e 100644 --- a/.vitepress/dist/assets/src_guide_dev.md.DM1UjwvK.js +++ b/.vitepress/dist/assets/src_guide_dev.md.Cdra16SF.js @@ -1,4 +1,4 @@ -import{_ as s}from"./chunks/code.VH4xl6Z5.js";import{_ as i,a,o as n,aj as e}from"./chunks/framework.BjhQB2K5.js";const l="/guide/gen-vue.png",u=JSON.parse('{"title":"开发方式","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/dev.md","filePath":"src/guide/dev.md","lastUpdated":1721036629000}'),t={name:"src/guide/dev.md"},p=e('

开发方式 ​

Cool Admin 推荐两种快速开发方式,可以大大节省开发时间,降低开发成本,提高开发效率。

Ai 全自动 ​

零代码开发(非低代码),通过微调大模型学习框架特有写法,实现简单功能从 Api 接口到前端页面的一键生成

开发过程只需点一点,调一调,不用写一行代码

B 站视频教程

半自动 ​

只需三步,创建实体类生成表,生成后端代码,生成前端代码

  • 编写实体类,重启生成表;
  • 运行代码生成器,生成 Service、Controller 等

文件:src/test/java/com/cool/CoolAdminJavaApplicationTests.java

java
public class CoolCodeGeneratorTest {
+import{_ as i}from"./chunks/code.VH4xl6Z5.js";import{_ as a,a as n,o as e,ah as l}from"./chunks/framework.BKXlU_Nx.js";const t="/guide/gen-vue.png",y=JSON.parse('{"title":"开发方式","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/dev.md","filePath":"src/guide/dev.md","lastUpdated":1721036629000}'),p={name:"src/guide/dev.md"};function h(k,s,r,d,E,o){return e(),n("div",null,s[0]||(s[0]=[l('

开发方式 ​

Cool Admin 推荐两种快速开发方式,可以大大节省开发时间,降低开发成本,提高开发效率。

Ai 全自动 ​

零代码开发(非低代码),通过微调大模型学习框架特有写法,实现简单功能从 Api 接口到前端页面的一键生成

开发过程只需点一点,调一调,不用写一行代码

B 站视频教程

半自动 ​

只需三步,创建实体类生成表,生成后端代码,生成前端代码

  • 编写实体类,重启生成表;
  • 运行代码生成器,生成 Service、Controller 等

文件:src/test/java/com/cool/CoolAdminJavaApplicationTests.java

java
public class CoolCodeGeneratorTest {
     public static void main(String[] args) {
         CodeGenerator codeGenerator = new CodeGenerator();
         codeGenerator.init();
@@ -13,4 +13,4 @@ import{_ as s}from"./chunks/code.VH4xl6Z5.js";import{_ as i,a,o as n,aj as e}fro
         codeGenerator.mapper(codeModel);
         codeGenerator.service(codeModel);
     }
-}
  • 自动生成前端页面,通过管理后台菜单管理的快速创建即可生成

Ui 组件会根据字段智能选择

',15),h=[p];function k(r,d,E,o,c,g){return n(),a("div",null,h)}const _=i(t,[["render",k]]);export{u as __pageData,_ as default}; +}
  • 自动生成前端页面,通过管理后台菜单管理的快速创建即可生成

Ui 组件会根据字段智能选择

',15)]))}const F=a(p,[["render",h]]);export{y as __pageData,F as default}; diff --git a/.vitepress/dist/assets/src_guide_dev.md.Cdra16SF.lean.js b/.vitepress/dist/assets/src_guide_dev.md.Cdra16SF.lean.js new file mode 100644 index 0000000..eea6ee7 --- /dev/null +++ b/.vitepress/dist/assets/src_guide_dev.md.Cdra16SF.lean.js @@ -0,0 +1 @@ +import{_ as i}from"./chunks/code.VH4xl6Z5.js";import{_ as a,a as n,o as e,ah as l}from"./chunks/framework.BKXlU_Nx.js";const t="/guide/gen-vue.png",y=JSON.parse('{"title":"开发方式","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/dev.md","filePath":"src/guide/dev.md","lastUpdated":1721036629000}'),p={name:"src/guide/dev.md"};function h(k,s,r,d,E,o){return e(),n("div",null,s[0]||(s[0]=[l("",15)]))}const F=a(p,[["render",h]]);export{y as __pageData,F as default}; diff --git a/.vitepress/dist/assets/src_guide_dev.md.DM1UjwvK.lean.js b/.vitepress/dist/assets/src_guide_dev.md.DM1UjwvK.lean.js deleted file mode 100644 index 28e3797..0000000 --- a/.vitepress/dist/assets/src_guide_dev.md.DM1UjwvK.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s}from"./chunks/code.VH4xl6Z5.js";import{_ as i,a,o as n,aj as e}from"./chunks/framework.BjhQB2K5.js";const l="/guide/gen-vue.png",u=JSON.parse('{"title":"开发方式","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/dev.md","filePath":"src/guide/dev.md","lastUpdated":1721036629000}'),t={name:"src/guide/dev.md"},p=e("",15),h=[p];function k(r,d,E,o,c,g){return n(),a("div",null,h)}const _=i(t,[["render",k]]);export{u as __pageData,_ as default}; diff --git a/.vitepress/dist/assets/src_guide_dir.md.Bywk12Mo.lean.js b/.vitepress/dist/assets/src_guide_dir.md.Bywk12Mo.lean.js deleted file mode 100644 index 7b304d2..0000000 --- a/.vitepress/dist/assets/src_guide_dir.md.Bywk12Mo.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,a,o as n,aj as p}from"./chunks/framework.BjhQB2K5.js";const h=JSON.parse('{"title":"目录结构","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/dir.md","filePath":"src/guide/dir.md","lastUpdated":1721036629000}'),e={name:"src/guide/dir.md"},l=p("",5),i=[l];function c(t,o,r,d,u,_){return n(),a("div",null,i)}const b=s(e,[["render",c]]);export{h as __pageData,b as default}; diff --git a/.vitepress/dist/assets/src_guide_dir.md.Bywk12Mo.js b/.vitepress/dist/assets/src_guide_dir.md.XwivTI0b.js similarity index 85% rename from .vitepress/dist/assets/src_guide_dir.md.Bywk12Mo.js rename to .vitepress/dist/assets/src_guide_dir.md.XwivTI0b.js index 768ebbe..dc6b607 100644 --- a/.vitepress/dist/assets/src_guide_dir.md.Bywk12Mo.js +++ b/.vitepress/dist/assets/src_guide_dir.md.XwivTI0b.js @@ -1,4 +1,4 @@ -import{_ as s,a,o as n,aj as p}from"./chunks/framework.BjhQB2K5.js";const h=JSON.parse('{"title":"目录结构","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/dir.md","filePath":"src/guide/dir.md","lastUpdated":1721036629000}'),e={name:"src/guide/dir.md"},l=p(`

目录结构 ​

项目按照模块化的方式组织,每个模块都有其特有的功能,清晰明了便于管理。

结构 ​

.
+import{_ as a,a as n,o as p,ah as e}from"./chunks/framework.BKXlU_Nx.js";const m=JSON.parse('{"title":"目录结构","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/dir.md","filePath":"src/guide/dir.md","lastUpdated":1721036629000}'),l={name:"src/guide/dir.md"};function i(c,s,t,o,r,d){return p(),n("div",null,s[0]||(s[0]=[e(`

目录结构 ​

项目按照模块化的方式组织,每个模块都有其特有的功能,清晰明了便于管理。

结构 ​

.
 main
 ├─ java
 │  ├─ com.cool
@@ -22,4 +22,4 @@ import{_ as s,a,o as n,aj as p}from"./chunks/framework.BjhQB2K5.js";const h=JSON
    ├─ cool
    │  └─ data
    │     └─ db         初始化数据json文件
-   └─ mapper           mapper xml 文件

提示

  • core 为核心模块,包括一些核心的组件工具
  • modules 为业务模块,业务代码放在这边,在新增功能模块时,按上面的包结构新增即可

    比如你有一个订单管理的模块,在 modules 新增一个 order 包,在 order 包下创建 controller、entity、mapper、service 等包

`,5),i=[l];function c(t,o,r,d,u,_){return n(),a("div",null,i)}const b=s(e,[["render",c]]);export{h as __pageData,b as default}; + └─ mapper mapper xml 文件

提示

  • core 为核心模块,包括一些核心的组件工具
  • modules 为业务模块,业务代码放在这边,在新增功能模块时,按上面的包结构新增即可

    比如你有一个订单管理的模块,在 modules 新增一个 order 包,在 order 包下创建 controller、entity、mapper、service 等包

`,5)]))}const _=a(l,[["render",i]]);export{m as __pageData,_ as default}; diff --git a/.vitepress/dist/assets/src_guide_dir.md.XwivTI0b.lean.js b/.vitepress/dist/assets/src_guide_dir.md.XwivTI0b.lean.js new file mode 100644 index 0000000..536d358 --- /dev/null +++ b/.vitepress/dist/assets/src_guide_dir.md.XwivTI0b.lean.js @@ -0,0 +1 @@ +import{_ as a,a as n,o as p,ah as e}from"./chunks/framework.BKXlU_Nx.js";const m=JSON.parse('{"title":"目录结构","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/dir.md","filePath":"src/guide/dir.md","lastUpdated":1721036629000}'),l={name:"src/guide/dir.md"};function i(c,s,t,o,r,d){return p(),n("div",null,s[0]||(s[0]=[e("",5)]))}const _=a(l,[["render",i]]);export{m as __pageData,_ as default}; diff --git a/.vitepress/dist/assets/src_guide_exception.md.1HCd76m1.lean.js b/.vitepress/dist/assets/src_guide_exception.md.1HCd76m1.lean.js deleted file mode 100644 index c7c6293..0000000 --- a/.vitepress/dist/assets/src_guide_exception.md.1HCd76m1.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,a as i,o as a,aj as n}from"./chunks/framework.BjhQB2K5.js";const F=JSON.parse('{"title":"统一异常处理","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/exception.md","filePath":"src/guide/exception.md","lastUpdated":1721036629000}'),h={name:"src/guide/exception.md"},k=n("",9),t=[k];function l(p,e,E,r,d,g){return a(),i("div",null,t)}const c=s(h,[["render",l]]);export{F as __pageData,c as default}; diff --git a/.vitepress/dist/assets/src_guide_exception.md.1HCd76m1.js b/.vitepress/dist/assets/src_guide_exception.md.CQgM0zu7.js similarity index 93% rename from .vitepress/dist/assets/src_guide_exception.md.1HCd76m1.js rename to .vitepress/dist/assets/src_guide_exception.md.CQgM0zu7.js index f9610ba..ad1ac9d 100644 --- a/.vitepress/dist/assets/src_guide_exception.md.1HCd76m1.js +++ b/.vitepress/dist/assets/src_guide_exception.md.CQgM0zu7.js @@ -1,4 +1,4 @@ -import{_ as s,a as i,o as a,aj as n}from"./chunks/framework.BjhQB2K5.js";const F=JSON.parse('{"title":"统一异常处理","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/exception.md","filePath":"src/guide/exception.md","lastUpdated":1721036629000}'),h={name:"src/guide/exception.md"},k=n(`

统一异常处理 ​

提供了简化的业务异常抛出工具

  • CoolPreconditions.check(check != null, "用户名已存在");

异常统一捕获 ​

java
@RestControllerAdvice
+import{_ as i,a,o as n,ah as h}from"./chunks/framework.BKXlU_Nx.js";const g=JSON.parse('{"title":"统一异常处理","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/exception.md","filePath":"src/guide/exception.md","lastUpdated":1721036629000}'),k={name:"src/guide/exception.md"};function t(l,s,p,e,E,r){return n(),a("div",null,s[0]||(s[0]=[h(`

统一异常处理 ​

提供了简化的业务异常抛出工具

  • CoolPreconditions.check(check != null, "用户名已存在");

异常统一捕获 ​

java
@RestControllerAdvice
 @Slf4j
 public class CoolExceptionHandler {
 
@@ -56,4 +56,4 @@ import{_ as s,a as i,o as a,aj as n}from"./chunks/framework.BjhQB2K5.js";const F
     entity.setPassword(MD5.create().digestHex(entity.getPassword()));
     super.add(requestParams, entity);
     return entity.getId();
-}
`,9),t=[k];function l(p,e,E,r,d,g){return a(),i("div",null,t)}const c=s(h,[["render",l]]);export{F as __pageData,c as default}; +}
`,9)]))}const y=i(k,[["render",t]]);export{g as __pageData,y as default}; diff --git a/.vitepress/dist/assets/src_guide_exception.md.CQgM0zu7.lean.js b/.vitepress/dist/assets/src_guide_exception.md.CQgM0zu7.lean.js new file mode 100644 index 0000000..75459b2 --- /dev/null +++ b/.vitepress/dist/assets/src_guide_exception.md.CQgM0zu7.lean.js @@ -0,0 +1 @@ +import{_ as i,a,o as n,ah as h}from"./chunks/framework.BKXlU_Nx.js";const g=JSON.parse('{"title":"统一异常处理","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/exception.md","filePath":"src/guide/exception.md","lastUpdated":1721036629000}'),k={name:"src/guide/exception.md"};function t(l,s,p,e,E,r){return n(),a("div",null,s[0]||(s[0]=[h("",9)]))}const y=i(k,[["render",t]]);export{g as __pageData,y as default}; diff --git a/.vitepress/dist/assets/src_guide_flow.md.DMDsOCkF.js b/.vitepress/dist/assets/src_guide_flow.md.DMDsOCkF.js deleted file mode 100644 index 056a923..0000000 --- a/.vitepress/dist/assets/src_guide_flow.md.DMDsOCkF.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e}from"./chunks/flow.YLaN3zCE.js";import{_ as a,a as t,o as r,aj as o}from"./chunks/framework.BjhQB2K5.js";const u=JSON.parse('{"title":"Ai 流程编排","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/flow.md","filePath":"src/guide/flow.md","lastUpdated":1722911664000}'),i={name:"src/guide/flow.md"},s=o('

Ai 流程编排 ​

视频演示

点击前往插件市场下载安装

开发 Ai 应用必备!!!

随着 Ai 的火热,很多应用希望接入 Ai 的能力,但是每次都是用代码手搓,容易把我们累死,而是也非常不灵活。

于是我们面向开发者和软件开发公司,做了一个 Ai 流程编排功能,结合知识库,通过拖动配置,很容易就能完成一个 Ai 的核心流程。

因此如果你需要开发 Ai 相关应用,这个可能会给你带来巨大的帮助。

流程编排

',8),_=[s];function p(l,c,n,d,m,f){return r(),t("div",null,_)}const g=a(i,[["render",p]]);export{u as __pageData,g as default}; diff --git a/.vitepress/dist/assets/src_guide_flow.md.DMDsOCkF.lean.js b/.vitepress/dist/assets/src_guide_flow.md.DMDsOCkF.lean.js deleted file mode 100644 index 54ab812..0000000 --- a/.vitepress/dist/assets/src_guide_flow.md.DMDsOCkF.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e}from"./chunks/flow.YLaN3zCE.js";import{_ as a,a as t,o as r,aj as o}from"./chunks/framework.BjhQB2K5.js";const u=JSON.parse('{"title":"Ai 流程编排","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/flow.md","filePath":"src/guide/flow.md","lastUpdated":1722911664000}'),i={name:"src/guide/flow.md"},s=o("",8),_=[s];function p(l,c,n,d,m,f){return r(),t("div",null,_)}const g=a(i,[["render",p]]);export{u as __pageData,g as default}; diff --git a/.vitepress/dist/assets/src_guide_flow.md.d_l3AjDo.js b/.vitepress/dist/assets/src_guide_flow.md.d_l3AjDo.js new file mode 100644 index 0000000..4913c0e --- /dev/null +++ b/.vitepress/dist/assets/src_guide_flow.md.d_l3AjDo.js @@ -0,0 +1 @@ +import{_ as a}from"./chunks/flow.YLaN3zCE.js";import{_ as t,a as r,o as i,ah as o}from"./chunks/framework.BKXlU_Nx.js";const h=JSON.parse('{"title":"Ai 流程编排","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/flow.md","filePath":"src/guide/flow.md","lastUpdated":1722911664000}'),p={name:"src/guide/flow.md"};function s(l,e,_,n,c,d){return i(),r("div",null,e[0]||(e[0]=[o('

Ai 流程编排 ​

视频演示

点击前往插件市场下载安装

开发 Ai 应用必备!!!

随着 Ai 的火热,很多应用希望接入 Ai 的能力,但是每次都是用代码手搓,容易把我们累死,而是也非常不灵活。

于是我们面向开发者和软件开发公司,做了一个 Ai 流程编排功能,结合知识库,通过拖动配置,很容易就能完成一个 Ai 的核心流程。

因此如果你需要开发 Ai 相关应用,这个可能会给你带来巨大的帮助。

流程编排

',8)]))}const A=t(p,[["render",s]]);export{h as __pageData,A as default}; diff --git a/.vitepress/dist/assets/src_guide_flow.md.d_l3AjDo.lean.js b/.vitepress/dist/assets/src_guide_flow.md.d_l3AjDo.lean.js new file mode 100644 index 0000000..8a140e8 --- /dev/null +++ b/.vitepress/dist/assets/src_guide_flow.md.d_l3AjDo.lean.js @@ -0,0 +1 @@ +import{_ as a}from"./chunks/flow.YLaN3zCE.js";import{_ as t,a as r,o as i,ah as o}from"./chunks/framework.BKXlU_Nx.js";const h=JSON.parse('{"title":"Ai 流程编排","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/flow.md","filePath":"src/guide/flow.md","lastUpdated":1722911664000}'),p={name:"src/guide/flow.md"};function s(l,e,_,n,c,d){return i(),r("div",null,e[0]||(e[0]=[o("",8)]))}const A=t(p,[["render",s]]);export{h as __pageData,A as default}; diff --git a/.vitepress/dist/assets/src_guide_i18n.md.D4ikqxxm.js b/.vitepress/dist/assets/src_guide_i18n.md.D4ikqxxm.js deleted file mode 100644 index 3b35a70..0000000 --- a/.vitepress/dist/assets/src_guide_i18n.md.D4ikqxxm.js +++ /dev/null @@ -1,4 +0,0 @@ -import{_ as i,a as l,o as a,aj as e}from"./chunks/framework.BjhQB2K5.js";const _=JSON.parse('{"title":"国际化多语言(v8.0新增)","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/i18n.md","filePath":"src/guide/i18n.md","lastUpdated":1744512308000}'),s={name:"src/guide/i18n.md"},t=e(`

国际化多语言(v8.0新增) ​

i18n(Internationalization 的缩写,首末字符 i 和 n 之间有 18 个字母)是软件国际化的标准缩写。它是指让软件支持多种语言和地区的功能,使得同一个软件可以面向不同语言地区的用户,显示相应的语言界面。

随着互联网的发展,越来越多的企业开始走向国际化,多语言的支持已经成为了一个必备的功能。Cool Admin 也对此做了支持。

实现 ​

多语言是需要前后端共同支持的,前端请前往前端文档查看

与其它实现方案不同的是,Cool Admin前后端的多语言都是基于大模型翻译的(比传统机翻更加准确),无需手动配置,只要开启就能自动翻译,而且不需要改变任何原有代码。

以前该怎么写还是怎么写!!!

使用 ​

1、引入插件 在官网下载并安装国际化多语言插件

安装后,框架就会自动扫描并翻译成对应的语言。

当你在控制台看到这样的输出,则代表成功

console
// 翻译中
-/ i18n translate...
-// 翻译成功
-✅国际化 翻译 成功!!!

2、实现原理 只要开启并配置了国际化,在开发环境下重启,框架就会自动扫描菜单、字典、异常消息(CoolPreconditions.check...),并调用大模型对其进行翻译

翻译完成之后会默认在路径assets/i18n下生成对应种类的语言文件,如果这个文件存在

则该种类的国际化将不会进行翻译,也就是后续你有新增相关的内容,要让其再次翻译,得对应地删除相应的文件。

3、语言配置对照表

  • 简体中文(zh-cn)
  • 美国英语(en)
  • 阿塞拜疆语(az)
  • 德语(de)
  • 葡萄牙语(pt)
  • 西班牙语(es)
  • 丹麦语(da)
  • 法语(fr)
  • 挪威语(nb-NO)
  • 繁体中文(zh-tw)
  • 意大利语(it)
  • 韩语(ko)
  • 日语(ja)
  • 荷兰语(nl)
  • 越南语(vi)
  • 俄语(ru)
  • 土耳其语(tr)
  • 巴西葡萄牙语(pt-br)
  • 波斯语(fa)
  • 泰语(th)
  • 印度尼西亚语(id)
  • 保加利亚语(bg)
  • 普什图语(pa)
  • 波兰语(pl)
  • 芬兰语(fi)
  • 瑞典语(sv)
  • 希腊语(el)
  • 斯洛伐克语(sk)
  • 加泰罗尼亚语(ca)
  • 捷克语(cs)
  • 乌克兰语(uk)
  • 土库曼语(tk)
  • 泰米尔语(ta)
  • 拉脱维亚语(lv)
  • 南非荷兰语(af)
  • 爱沙尼亚语(et)
  • 斯洛文尼亚语(sl)
  • 阿拉伯语(ar)
  • 希伯来语(he)
  • 立陶宛语(lt)
  • 蒙古语(mn)
  • 哈萨克语(kk)
  • 匈牙利语(hu)
  • 罗马尼亚语(ro)
  • 库尔德语(ku)
  • 库尔德语 (ckb)
  • 维吾尔语 (ug-cn)
  • 高棉语 (km)
  • 塞尔维亚语 (sr)
  • 巴斯克语 (eu)
  • 吉尔吉斯语 (ky)
  • 亚美尼亚语 (hy-am)
  • 克罗地亚语(hr)
  • 世界语 (eo)
  • 孟加拉语 (bn)
  • 马来语 (ms)
`,17),n=[t];function r(p,o,c,h,d,k){return a(),l("div",null,n)}const m=i(s,[["render",r]]);export{_ as __pageData,m as default}; diff --git a/.vitepress/dist/assets/src_guide_i18n.md.D4ikqxxm.lean.js b/.vitepress/dist/assets/src_guide_i18n.md.D4ikqxxm.lean.js deleted file mode 100644 index c115966..0000000 --- a/.vitepress/dist/assets/src_guide_i18n.md.D4ikqxxm.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,a as l,o as a,aj as e}from"./chunks/framework.BjhQB2K5.js";const _=JSON.parse('{"title":"国际化多语言(v8.0新增)","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/i18n.md","filePath":"src/guide/i18n.md","lastUpdated":1744512308000}'),s={name:"src/guide/i18n.md"},t=e("",17),n=[t];function r(p,o,c,h,d,k){return a(),l("div",null,n)}const m=i(s,[["render",r]]);export{_ as __pageData,m as default}; diff --git a/.vitepress/dist/assets/src_guide_i18n.md.DKQqA29O.js b/.vitepress/dist/assets/src_guide_i18n.md.DKQqA29O.js new file mode 100644 index 0000000..8ea7b7e --- /dev/null +++ b/.vitepress/dist/assets/src_guide_i18n.md.DKQqA29O.js @@ -0,0 +1,4 @@ +import{_ as l,a,o as e,ah as s}from"./chunks/framework.BKXlU_Nx.js";const k=JSON.parse('{"title":"国际化多语言(v8.0新增)","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/i18n.md","filePath":"src/guide/i18n.md","lastUpdated":1744545259000}'),n={name:"src/guide/i18n.md"};function t(r,i,p,o,h,c){return e(),a("div",null,i[0]||(i[0]=[s(`

国际化多语言(v8.0新增) ​

i18n(Internationalization 的缩写,首末字符 i 和 n 之间有 18 个字母)是软件国际化的标准缩写。它是指让软件支持多种语言和地区的功能,使得同一个软件可以面向不同语言地区的用户,显示相应的语言界面。

随着互联网的发展,越来越多的企业开始走向国际化,多语言的支持已经成为了一个必备的功能。Cool Admin 也对此做了支持。

实现 ​

多语言是需要前后端共同支持的,前端请前往前端文档查看

与其它实现方案不同的是,Cool Admin前后端的多语言都是基于大模型翻译的(比传统机翻更加准确),无需手动配置,只要开启就能自动翻译,而且不需要改变任何原有代码。

以前该怎么写还是怎么写!!!

使用 ​

1、引入插件 在官网下载并安装国际化多语言插件

安装后,框架就会自动扫描并翻译成对应的语言。

当你在控制台看到这样的输出,则代表成功

console
// 翻译中
+/ i18n translate...
+// 翻译成功
+✅国际化 翻译 成功!!!

2、实现原理 只要开启并配置了国际化,在开发环境下重启,框架就会自动扫描菜单、字典、异常消息(CoolPreconditions.check...),并调用大模型对其进行翻译

翻译完成之后会默认在路径assets/i18n下生成对应种类的语言文件,如果这个文件存在

则该种类的国际化将不会进行翻译,也就是后续你有新增相关的内容,要让其再次翻译,得对应地删除相应的文件。

3、语言配置对照表

  • 简体中文(zh-cn)
  • 美国英语(en)
  • 阿塞拜疆语(az)
  • 德语(de)
  • 葡萄牙语(pt)
  • 西班牙语(es)
  • 丹麦语(da)
  • 法语(fr)
  • 挪威语(nb-NO)
  • 繁体中文(zh-tw)
  • 意大利语(it)
  • 韩语(ko)
  • 日语(ja)
  • 荷兰语(nl)
  • 越南语(vi)
  • 俄语(ru)
  • 土耳其语(tr)
  • 巴西葡萄牙语(pt-br)
  • 波斯语(fa)
  • 泰语(th)
  • 印度尼西亚语(id)
  • 保加利亚语(bg)
  • 普什图语(pa)
  • 波兰语(pl)
  • 芬兰语(fi)
  • 瑞典语(sv)
  • 希腊语(el)
  • 斯洛伐克语(sk)
  • 加泰罗尼亚语(ca)
  • 捷克语(cs)
  • 乌克兰语(uk)
  • 土库曼语(tk)
  • 泰米尔语(ta)
  • 拉脱维亚语(lv)
  • 南非荷兰语(af)
  • 爱沙尼亚语(et)
  • 斯洛文尼亚语(sl)
  • 阿拉伯语(ar)
  • 希伯来语(he)
  • 立陶宛语(lt)
  • 蒙古语(mn)
  • 哈萨克语(kk)
  • 匈牙利语(hu)
  • 罗马尼亚语(ro)
  • 库尔德语(ku)
  • 库尔德语 (ckb)
  • 维吾尔语 (ug-cn)
  • 高棉语 (km)
  • 塞尔维亚语 (sr)
  • 巴斯克语 (eu)
  • 吉尔吉斯语 (ky)
  • 亚美尼亚语 (hy-am)
  • 克罗地亚语(hr)
  • 世界语 (eo)
  • 孟加拉语 (bn)
  • 马来语 (ms)
`,17)]))}const u=l(n,[["render",t]]);export{k as __pageData,u as default}; diff --git a/.vitepress/dist/assets/src_guide_i18n.md.DKQqA29O.lean.js b/.vitepress/dist/assets/src_guide_i18n.md.DKQqA29O.lean.js new file mode 100644 index 0000000..b37476c --- /dev/null +++ b/.vitepress/dist/assets/src_guide_i18n.md.DKQqA29O.lean.js @@ -0,0 +1 @@ +import{_ as l,a,o as e,ah as s}from"./chunks/framework.BKXlU_Nx.js";const k=JSON.parse('{"title":"国际化多语言(v8.0新增)","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/i18n.md","filePath":"src/guide/i18n.md","lastUpdated":1744545259000}'),n={name:"src/guide/i18n.md"};function t(r,i,p,o,h,c){return e(),a("div",null,i[0]||(i[0]=[s("",17)]))}const u=l(n,[["render",t]]);export{k as __pageData,u as default}; diff --git a/.vitepress/dist/assets/src_guide_initData.md.BhdPvNop.lean.js b/.vitepress/dist/assets/src_guide_initData.md.BhdPvNop.lean.js deleted file mode 100644 index bff8e46..0000000 --- a/.vitepress/dist/assets/src_guide_initData.md.BhdPvNop.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,a as i,o as a,aj as n}from"./chunks/framework.BjhQB2K5.js";const g=JSON.parse('{"title":"数据初始化","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/initData.md","filePath":"src/guide/initData.md","lastUpdated":1721812009000}'),p={name:"src/guide/initData.md"},l=n("",10),t=[l];function h(k,e,E,d,r,o){return a(),i("div",null,t)}const y=s(p,[["render",h]]);export{g as __pageData,y as default}; diff --git a/.vitepress/dist/assets/src_guide_initData.md.BhdPvNop.js b/.vitepress/dist/assets/src_guide_initData.md.CPwPPPgb.js similarity index 83% rename from .vitepress/dist/assets/src_guide_initData.md.BhdPvNop.js rename to .vitepress/dist/assets/src_guide_initData.md.CPwPPPgb.js index c609081..c58e595 100644 --- a/.vitepress/dist/assets/src_guide_initData.md.BhdPvNop.js +++ b/.vitepress/dist/assets/src_guide_initData.md.CPwPPPgb.js @@ -1,4 +1,4 @@ -import{_ as s,a as i,o as a,aj as n}from"./chunks/framework.BjhQB2K5.js";const g=JSON.parse('{"title":"数据初始化","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/initData.md","filePath":"src/guide/initData.md","lastUpdated":1721812009000}'),p={name:"src/guide/initData.md"},l=n(`

数据初始化 ​

有些功能模块上线时,需要初始化一些数据

可以在 resources 下的 cool/data/db 目录创建 demo.json 文件

json 格式如下,demo 为表的名称,里面是个数组,数组里可以包含多个对象,每个对象中的 key 为表的字段,value 为对应的值

规范:实体需以 Entity 结尾

json
{
+import{_ as i,a,o as n,ah as p}from"./chunks/framework.BKXlU_Nx.js";const o=JSON.parse('{"title":"数据初始化","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/initData.md","filePath":"src/guide/initData.md","lastUpdated":1721812009000}'),l={name:"src/guide/initData.md"};function t(h,s,k,e,E,d){return n(),a("div",null,s[0]||(s[0]=[p(`

数据初始化 ​

有些功能模块上线时,需要初始化一些数据

可以在 resources 下的 cool/data/db 目录创建 demo.json 文件

json 格式如下,demo 为表的名称,里面是个数组,数组里可以包含多个对象,每个对象中的 key 为表的字段,value 为对应的值

规范:实体需以 Entity 结尾

json
{
   "demo": [
     {
       "keyName": "rich",
@@ -30,4 +30,4 @@ import{_ as s,a as i,o as a,aj as n}from"./chunks/framework.BjhQB2K5.js";const g
         log.info("数据初始化完成!");
     }
     //......
-}

注意:如果同一张表历史已经有初始化过数据,在某个版本需要新增数据的话,要新增一个.json 文件;
比如 demoV2.json, 如果在原文件直接修改将不生效,加载成功后文件名称将被当作唯一键标识,不会重复初始化。

`,10),t=[l];function h(k,e,E,d,r,o){return a(),i("div",null,t)}const y=s(p,[["render",h]]);export{g as __pageData,y as default}; +}

注意:如果同一张表历史已经有初始化过数据,在某个版本需要新增数据的话,要新增一个.json 文件;
比如 demoV2.json, 如果在原文件直接修改将不生效,加载成功后文件名称将被当作唯一键标识,不会重复初始化。

`,10)]))}const c=i(l,[["render",t]]);export{o as __pageData,c as default}; diff --git a/.vitepress/dist/assets/src_guide_initData.md.CPwPPPgb.lean.js b/.vitepress/dist/assets/src_guide_initData.md.CPwPPPgb.lean.js new file mode 100644 index 0000000..0b072e0 --- /dev/null +++ b/.vitepress/dist/assets/src_guide_initData.md.CPwPPPgb.lean.js @@ -0,0 +1 @@ +import{_ as i,a,o as n,ah as p}from"./chunks/framework.BKXlU_Nx.js";const o=JSON.parse('{"title":"数据初始化","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/initData.md","filePath":"src/guide/initData.md","lastUpdated":1721812009000}'),l={name:"src/guide/initData.md"};function t(h,s,k,e,E,d){return n(),a("div",null,s[0]||(s[0]=[p("",10)]))}const c=i(l,[["render",t]]);export{o as __pageData,c as default}; diff --git a/.vitepress/dist/assets/src_guide_lock.md.B34nqu5N.js b/.vitepress/dist/assets/src_guide_lock.md.B34nqu5N.js new file mode 100644 index 0000000..ae85015 --- /dev/null +++ b/.vitepress/dist/assets/src_guide_lock.md.B34nqu5N.js @@ -0,0 +1,11 @@ +import{_ as s,a as n,o as e,ah as p}from"./chunks/framework.BKXlU_Nx.js";const _=JSON.parse('{"title":"锁","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/lock.md","filePath":"src/guide/lock.md","lastUpdated":1724694022000}'),l={name:"src/guide/lock.md"};function t(o,a,i,c,r,d){return e(),n("div",null,a[0]||(a[0]=[p(`

锁 ​

简单锁的使用

如果项目中启用了redis,锁是基于redis 实现,否则使用 ReentrantLock

// 注入锁
+private final CoolLock coolLock;
+
+String key = "lockKey";
+// 尝试获取锁
+if (coolLock.tryLock(key, Duration.ofMillis(noRepeatSubmit.expireTime()))) {
+    // TODO 获取锁后的逻辑
+    
+    // 释放锁
+    coolLock.unlock(key);
+}
`,4)]))}const u=s(l,[["render",t]]);export{_ as __pageData,u as default}; diff --git a/.vitepress/dist/assets/src_guide_lock.md.B34nqu5N.lean.js b/.vitepress/dist/assets/src_guide_lock.md.B34nqu5N.lean.js new file mode 100644 index 0000000..5e6f527 --- /dev/null +++ b/.vitepress/dist/assets/src_guide_lock.md.B34nqu5N.lean.js @@ -0,0 +1 @@ +import{_ as s,a as n,o as e,ah as p}from"./chunks/framework.BKXlU_Nx.js";const _=JSON.parse('{"title":"锁","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/lock.md","filePath":"src/guide/lock.md","lastUpdated":1724694022000}'),l={name:"src/guide/lock.md"};function t(o,a,i,c,r,d){return e(),n("div",null,a[0]||(a[0]=[p("",4)]))}const u=s(l,[["render",t]]);export{_ as __pageData,u as default}; diff --git a/.vitepress/dist/assets/src_guide_lock.md.C8JTDlsP.js b/.vitepress/dist/assets/src_guide_lock.md.C8JTDlsP.js deleted file mode 100644 index 350dd71..0000000 --- a/.vitepress/dist/assets/src_guide_lock.md.C8JTDlsP.js +++ /dev/null @@ -1,11 +0,0 @@ -import{_ as a,a as s,o as n,aj as e}from"./chunks/framework.BjhQB2K5.js";const h=JSON.parse('{"title":"锁","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/lock.md","filePath":"src/guide/lock.md","lastUpdated":1724694022000}'),p={name:"src/guide/lock.md"},t=e(`

锁 ​

简单锁的使用

如果项目中启用了redis,锁是基于redis 实现,否则使用 ReentrantLock

// 注入锁
-private final CoolLock coolLock;
-
-String key = "lockKey";
-// 尝试获取锁
-if (coolLock.tryLock(key, Duration.ofMillis(noRepeatSubmit.expireTime()))) {
-    // TODO 获取锁后的逻辑
-    
-    // 释放锁
-    coolLock.unlock(key);
-}
`,4),o=[t];function c(l,i,r,d,_,k){return n(),s("div",null,o)}const m=a(p,[["render",c]]);export{h as __pageData,m as default}; diff --git a/.vitepress/dist/assets/src_guide_lock.md.C8JTDlsP.lean.js b/.vitepress/dist/assets/src_guide_lock.md.C8JTDlsP.lean.js deleted file mode 100644 index 560da19..0000000 --- a/.vitepress/dist/assets/src_guide_lock.md.C8JTDlsP.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,a as s,o as n,aj as e}from"./chunks/framework.BjhQB2K5.js";const h=JSON.parse('{"title":"锁","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/lock.md","filePath":"src/guide/lock.md","lastUpdated":1724694022000}'),p={name:"src/guide/lock.md"},t=e("",4),o=[t];function c(l,i,r,d,_,k){return n(),s("div",null,o)}const m=a(p,[["render",c]]);export{h as __pageData,m as default}; diff --git a/.vitepress/dist/assets/src_guide_noRepeatSubmit.md.CvFjLc1r.lean.js b/.vitepress/dist/assets/src_guide_noRepeatSubmit.md.CvFjLc1r.lean.js deleted file mode 100644 index c8ca9fd..0000000 --- a/.vitepress/dist/assets/src_guide_noRepeatSubmit.md.CvFjLc1r.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,a as i,o as a,aj as n}from"./chunks/framework.BjhQB2K5.js";const o=JSON.parse('{"title":"防重复提交","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/noRepeatSubmit.md","filePath":"src/guide/noRepeatSubmit.md","lastUpdated":1724694022000}'),t={name:"src/guide/noRepeatSubmit.md"},h=n("",5),k=[h];function p(l,e,E,r,d,g){return a(),i("div",null,k)}const c=s(t,[["render",p]]);export{o as __pageData,c as default}; diff --git a/.vitepress/dist/assets/src_guide_noRepeatSubmit.md.CvFjLc1r.js b/.vitepress/dist/assets/src_guide_noRepeatSubmit.md.DIyr__Bf.js similarity index 89% rename from .vitepress/dist/assets/src_guide_noRepeatSubmit.md.CvFjLc1r.js rename to .vitepress/dist/assets/src_guide_noRepeatSubmit.md.DIyr__Bf.js index e8caaf0..75466e5 100644 --- a/.vitepress/dist/assets/src_guide_noRepeatSubmit.md.CvFjLc1r.js +++ b/.vitepress/dist/assets/src_guide_noRepeatSubmit.md.DIyr__Bf.js @@ -1,4 +1,4 @@ -import{_ as s,a as i,o as a,aj as n}from"./chunks/framework.BjhQB2K5.js";const o=JSON.parse('{"title":"防重复提交","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/noRepeatSubmit.md","filePath":"src/guide/noRepeatSubmit.md","lastUpdated":1724694022000}'),t={name:"src/guide/noRepeatSubmit.md"},h=n(`

防重复提交 ​

基于用户维度的防重复提交,该接口需要登录鉴权

java
@Aspect
+import{_ as i,a,o as n,ah as t}from"./chunks/framework.BKXlU_Nx.js";const g=JSON.parse('{"title":"防重复提交","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/noRepeatSubmit.md","filePath":"src/guide/noRepeatSubmit.md","lastUpdated":1724694022000}'),h={name:"src/guide/noRepeatSubmit.md"};function k(p,s,l,e,E,r){return n(),a("div",null,s[0]||(s[0]=[t(`

防重复提交 ​

基于用户维度的防重复提交,该接口需要登录鉴权

java
@Aspect
 @Component
 @RequiredArgsConstructor
 public class NoRepeatSubmitAspect {
@@ -25,4 +25,4 @@ import{_ as s,a as i,o as a,aj as n}from"./chunks/framework.BjhQB2K5.js";const o
     public R receive(@RequestAttribute() JSONObject requestParams) {
         Long couponId = requestParams.get("couponId", Long.class);
         return R.ok(marketCouponInfoService.receive(couponId, CoolSecurityUtil.getCurrentUserId()));
-    }
`,5),k=[h];function p(l,e,E,r,d,g){return a(),i("div",null,k)}const c=s(t,[["render",p]]);export{o as __pageData,c as default}; + }
`,5)]))}const y=i(h,[["render",k]]);export{g as __pageData,y as default}; diff --git a/.vitepress/dist/assets/src_guide_noRepeatSubmit.md.DIyr__Bf.lean.js b/.vitepress/dist/assets/src_guide_noRepeatSubmit.md.DIyr__Bf.lean.js new file mode 100644 index 0000000..07cf0c3 --- /dev/null +++ b/.vitepress/dist/assets/src_guide_noRepeatSubmit.md.DIyr__Bf.lean.js @@ -0,0 +1 @@ +import{_ as i,a,o as n,ah as t}from"./chunks/framework.BKXlU_Nx.js";const g=JSON.parse('{"title":"防重复提交","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/noRepeatSubmit.md","filePath":"src/guide/noRepeatSubmit.md","lastUpdated":1724694022000}'),h={name:"src/guide/noRepeatSubmit.md"};function k(p,s,l,e,E,r){return n(),a("div",null,s[0]||(s[0]=[t("",5)]))}const y=i(h,[["render",k]]);export{g as __pageData,y as default}; diff --git a/.vitepress/dist/assets/src_guide_plugin.md.DSQp6REO.js b/.vitepress/dist/assets/src_guide_plugin.md.CyRIknxk.js similarity index 96% rename from .vitepress/dist/assets/src_guide_plugin.md.DSQp6REO.js rename to .vitepress/dist/assets/src_guide_plugin.md.CyRIknxk.js index 66e3d7a..58e3953 100644 --- a/.vitepress/dist/assets/src_guide_plugin.md.DSQp6REO.js +++ b/.vitepress/dist/assets/src_guide_plugin.md.CyRIknxk.js @@ -1,4 +1,4 @@ -import{_ as s,a as i,o as a,aj as n}from"./chunks/framework.BjhQB2K5.js";const l="/guide/plugin-install.gif",c=JSON.parse('{"title":"扩展插件","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/plugin.md","filePath":"src/guide/plugin.md","lastUpdated":1721271330000}'),p={name:"src/guide/plugin.md"},t=n('

扩展插件 ​

为了丰富系统功能,我们提供了插件系统,可以通过插件的方式来扩展系统功能。

而不用一味地堆功能,导致系统臃肿。你可以自己开发插件,也可以使用别人开发的插件。

点击前往插件市场

使用插件 ​

1、安装 ​

首先下载插件包,然后在系统中安装插件包。插件包可以通过官网下载插件。

打开后台管理系统,点击左侧菜单扩展管理/插件管理,点击+按钮,选择插件包进行安装。

2、调用 ​

安装插件之后,就可以在代码中调用插件的方法了。

java
package com.cool.core.base.controller;
+import{_ as i,a,o as n,ah as l}from"./chunks/framework.BKXlU_Nx.js";const p="/guide/plugin-install.gif",o=JSON.parse('{"title":"扩展插件","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/plugin.md","filePath":"src/guide/plugin.md","lastUpdated":1721271330000}'),t={name:"src/guide/plugin.md"};function h(k,s,e,E,r,g){return n(),a("div",null,s[0]||(s[0]=[l('

扩展插件 ​

为了丰富系统功能,我们提供了插件系统,可以通过插件的方式来扩展系统功能。

而不用一味地堆功能,导致系统臃肿。你可以自己开发插件,也可以使用别人开发的插件。

点击前往插件市场

使用插件 ​

1、安装 ​

首先下载插件包,然后在系统中安装插件包。插件包可以通过官网下载插件。

打开后台管理系统,点击左侧菜单扩展管理/插件管理,点击+按钮,选择插件包进行安装。

2、调用 ​

安装插件之后,就可以在代码中调用插件的方法了。

java
package com.cool.core.base.controller;
 
 import cn.hutool.core.util.ObjUtil;
 import com.cool.core.util.CoolPluginInvokers;
@@ -234,4 +234,4 @@ import{_ as s,a as i,o as a,aj as n}from"./chunks/framework.BjhQB2K5.js";const l
 [INFO] Excluding cn.hutool:hutool-json:jar:5.8.26 from the shaded jar.

打包 ​

打包命令

mvn clean package

打包结果, 在 target 目录下 .cool 后缀的文件,就是我们的插件包

target/cool-admin-java-plugin-1.0-SNAPSHOT.cool

其中对应的包名称 可在 pom.xml 中的 properties 里指定

xml
<properties>
     <cool.plugin.name>my_cool_plugin</cool.plugin.name>
 </properties>

最终打出的包为: my_cool_plugin.cool

安装插件 ​

在后台插件管理页面,安装插件将打包好的.cool 文件上传。

实现原理 ​

  • 动态加载 Jar 包

    实现动态加载的技术方案
    在 SpringBoot 中实现动态加载 Jar 包: URLClassLoader 是 Java 标准库中提供的一个类加载器,它可以加载指定的 URL 资源,包括本地文件系统、远程服务器和 JAR 文件等。
    通过 URLClassLoader,我们可以在运行时动态地加载外部的 Jar 包或类。

  • 优势:

    1、灵活性高:可以动态指定 Jar 包的位置和版本。
    2、可控性强:可以通过代码控制加载、卸载和替换 Jar 包。

实现方法:

java
URL jarUrl = new URL("jar:file:" + new File(jarFilePath).getAbsolutePath() + "!/");
-DynamicJarClassLoader dynamicJarClassLoader = new DynamicJarClassLoader(new URL[]{jarUrl}, Thread.currentThread().getContextClassLoader());

动态加载 Jar 包具有以下几个显著的优势:

  • 1、灵活性: 动态加载允许应用程序在运行时根据需求加载、卸载和替换 Jar 包或其内部的类和资源,提供了极大的灵活性。
  • 2、可维护性: 通过动态加载,可以将应用程序的核心逻辑和配置分离,使得代码更加清晰、模块化,提高了代码的可维护性。
  • 3、热更新: 动态加载使得应用程序能够在不停机的情况下进行热更新,大大提高了系统的可用性和稳定性。
  • 4、扩展性: 通过动态加载,可以轻松地添加新的功能模块或服务,实现应用程序的快速扩展和升级。
`,64),h=[t];function k(e,E,r,g,d,o){return a(),i("div",null,h)}const u=s(p,[["render",k]]);export{c as __pageData,u as default}; +DynamicJarClassLoader dynamicJarClassLoader = new DynamicJarClassLoader(new URL[]{jarUrl}, Thread.currentThread().getContextClassLoader());

动态加载 Jar 包具有以下几个显著的优势:

  • 1、灵活性: 动态加载允许应用程序在运行时根据需求加载、卸载和替换 Jar 包或其内部的类和资源,提供了极大的灵活性。
  • 2、可维护性: 通过动态加载,可以将应用程序的核心逻辑和配置分离,使得代码更加清晰、模块化,提高了代码的可维护性。
  • 3、热更新: 动态加载使得应用程序能够在不停机的情况下进行热更新,大大提高了系统的可用性和稳定性。
  • 4、扩展性: 通过动态加载,可以轻松地添加新的功能模块或服务,实现应用程序的快速扩展和升级。
`,64)]))}const y=i(t,[["render",h]]);export{o as __pageData,y as default}; diff --git a/.vitepress/dist/assets/src_guide_plugin.md.CyRIknxk.lean.js b/.vitepress/dist/assets/src_guide_plugin.md.CyRIknxk.lean.js new file mode 100644 index 0000000..a6846f3 --- /dev/null +++ b/.vitepress/dist/assets/src_guide_plugin.md.CyRIknxk.lean.js @@ -0,0 +1 @@ +import{_ as i,a,o as n,ah as l}from"./chunks/framework.BKXlU_Nx.js";const p="/guide/plugin-install.gif",o=JSON.parse('{"title":"扩展插件","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/plugin.md","filePath":"src/guide/plugin.md","lastUpdated":1721271330000}'),t={name:"src/guide/plugin.md"};function h(k,s,e,E,r,g){return n(),a("div",null,s[0]||(s[0]=[l("",64)]))}const y=i(t,[["render",h]]);export{o as __pageData,y as default}; diff --git a/.vitepress/dist/assets/src_guide_plugin.md.DSQp6REO.lean.js b/.vitepress/dist/assets/src_guide_plugin.md.DSQp6REO.lean.js deleted file mode 100644 index 4692aad..0000000 --- a/.vitepress/dist/assets/src_guide_plugin.md.DSQp6REO.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,a as i,o as a,aj as n}from"./chunks/framework.BjhQB2K5.js";const l="/guide/plugin-install.gif",c=JSON.parse('{"title":"扩展插件","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/plugin.md","filePath":"src/guide/plugin.md","lastUpdated":1721271330000}'),p={name:"src/guide/plugin.md"},t=n("",64),h=[t];function k(e,E,r,g,d,o){return a(),i("div",null,h)}const u=s(p,[["render",k]]);export{c as __pageData,u as default}; diff --git a/.vitepress/dist/assets/src_guide_quick.md.g_DIbvkh.js b/.vitepress/dist/assets/src_guide_quick.md.DotkVVeu.js similarity index 66% rename from .vitepress/dist/assets/src_guide_quick.md.g_DIbvkh.js rename to .vitepress/dist/assets/src_guide_quick.md.DotkVVeu.js index 82dd82c..b1a9b6d 100644 --- a/.vitepress/dist/assets/src_guide_quick.md.g_DIbvkh.js +++ b/.vitepress/dist/assets/src_guide_quick.md.DotkVVeu.js @@ -1,4 +1,4 @@ -import{_ as a}from"./chunks/admin.CyLBVO1a.js";import{_ as s,a as i,o as e,aj as n}from"./chunks/framework.BjhQB2K5.js";const l="/guide/run.png",E=JSON.parse('{"title":"快速开始","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/quick.md","filePath":"src/guide/quick.md","lastUpdated":1721271330000}'),t={name:"src/guide/quick.md"},p=n(`

快速开始 ​

开始使用 Cool-Admin!!!

环境准备 ​

  • Java Jdk >= 17 (注意:选择 GraalVM)
  • Mysql >= 5.7 (推荐 8.0)
  • Maven >= 3.6 (推荐 3.9)

运行系统 ​

1、拉取源码 ​

项目是前后端分离的,需要分别拉取前后端代码到本地,源码仓库

2、配置数据库 ​

后端修改数据库配置,配置文件位于src/resources/application-local.yml

以 Mysql 为例,其他数据库适配中...

Mysql(>=5.7版本),建议 8.0,首次启动会自动初始化并导入数据

yaml
# mysql,驱动已经内置,无需安装
+import{_ as s}from"./chunks/admin.CyLBVO1a.js";import{_ as i,a as e,o as n,ah as l}from"./chunks/framework.BKXlU_Nx.js";const t="/guide/run.png",m=JSON.parse('{"title":"快速开始","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/quick.md","filePath":"src/guide/quick.md","lastUpdated":1721271330000}'),p={name:"src/guide/quick.md"};function r(h,a,o,c,d,k){return n(),e("div",null,a[0]||(a[0]=[l(`

快速开始 ​

开始使用 Cool-Admin!!!

环境准备 ​

  • Java Jdk >= 17 (注意:选择 GraalVM)
  • Mysql >= 5.7 (推荐 8.0)
  • Maven >= 3.6 (推荐 3.9)

运行系统 ​

1、拉取源码 ​

项目是前后端分离的,需要分别拉取前后端代码到本地,源码仓库

2、配置数据库 ​

后端修改数据库配置,配置文件位于src/resources/application-local.yml

以 Mysql 为例,其他数据库适配中...

Mysql(>=5.7版本),建议 8.0,首次启动会自动初始化并导入数据

yaml
# mysql,驱动已经内置,无需安装
 spring:
   datasource:
     url: jdbc:mysql://127.0.0.1:3306/cool?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2b8
@@ -7,7 +7,7 @@ import{_ as a}from"./chunks/admin.CyLBVO1a.js";import{_ as s,a as i,o as e,aj as
     driver-class-name: com.mysql.cj.jdbc.Driver

3、启动后端服务 ​

启动文件:src/main/java/com/cool/CoolApplication.java,控制台打印出下面信息,说明后端服务启动成功

2024-07-15T14:38:45.382+08:00  INFO 31908 --- [cool-admin-java] [           main] c.c.c.plugin.service.CoolPluginService   : 没有可初始化的插件
 2024-07-15T14:38:45.383+08:00  INFO 31908 --- [cool-admin-java] [           main] com.cool.core.eps.EpsEvent               : 构建eps信息
 2024-07-15T14:38:45.941+08:00  INFO 31908 --- [cool-admin-java] [         task-1] o.springdoc.api.AbstractOpenApiResource  : Init duration for springdoc-openapi is: 556 ms
-2024-07-15T14:38:46.101+08:00  INFO 31908 --- [cool-admin-java] [pool-3-thread-1] com.cool.core.eps.CoolEps                : 初始化eps完成,服务启动成功,端口:8001

访问:http://127.0.0.1:8001,你将会看到后端的欢迎页面

4、启动前端服务 ​

点击前往前端项目详细文档

在项目根目录下(跟 package.json 同级)执行命令:

shell
# 安装依赖
+2024-07-15T14:38:46.101+08:00  INFO 31908 --- [cool-admin-java] [pool-3-thread-1] com.cool.core.eps.CoolEps                : 初始化eps完成,服务启动成功,端口:8001

访问:http://127.0.0.1:8001,你将会看到后端的欢迎页面

4、启动前端服务 ​

点击前往前端项目详细文档

在项目根目录下(跟 package.json 同级)执行命令:

shell
# 安装依赖
 npm install
 # 启动
-npm run dev

访问http://127.0.0.1:9000/ 默认账户密码

账户:admin
密码:123456

',24),r=[p];function h(o,c,d,k,g,u){return e(),i("div",null,r)}const b=s(t,[["render",h]]);export{E as __pageData,b as default}; +npm run dev

访问http://127.0.0.1:9000/ 默认账户密码

账户:admin
密码:123456

',24)]))}const E=i(p,[["render",r]]);export{m as __pageData,E as default}; diff --git a/.vitepress/dist/assets/src_guide_quick.md.DotkVVeu.lean.js b/.vitepress/dist/assets/src_guide_quick.md.DotkVVeu.lean.js new file mode 100644 index 0000000..c1feb73 --- /dev/null +++ b/.vitepress/dist/assets/src_guide_quick.md.DotkVVeu.lean.js @@ -0,0 +1 @@ +import{_ as s}from"./chunks/admin.CyLBVO1a.js";import{_ as i,a as e,o as n,ah as l}from"./chunks/framework.BKXlU_Nx.js";const t="/guide/run.png",m=JSON.parse('{"title":"快速开始","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/quick.md","filePath":"src/guide/quick.md","lastUpdated":1721271330000}'),p={name:"src/guide/quick.md"};function r(h,a,o,c,d,k){return n(),e("div",null,a[0]||(a[0]=[l("",24)]))}const E=i(p,[["render",r]]);export{m as __pageData,E as default}; diff --git a/.vitepress/dist/assets/src_guide_quick.md.g_DIbvkh.lean.js b/.vitepress/dist/assets/src_guide_quick.md.g_DIbvkh.lean.js deleted file mode 100644 index 401d7f2..0000000 --- a/.vitepress/dist/assets/src_guide_quick.md.g_DIbvkh.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a}from"./chunks/admin.CyLBVO1a.js";import{_ as s,a as i,o as e,aj as n}from"./chunks/framework.BjhQB2K5.js";const l="/guide/run.png",E=JSON.parse('{"title":"快速开始","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/quick.md","filePath":"src/guide/quick.md","lastUpdated":1721271330000}'),t={name:"src/guide/quick.md"},p=n("",24),r=[p];function h(o,c,d,k,g,u){return e(),i("div",null,r)}const b=s(t,[["render",h]]);export{E as __pageData,b as default}; diff --git a/.vitepress/dist/assets/src_guide_recordLog.md.B0w4IZH7.lean.js b/.vitepress/dist/assets/src_guide_recordLog.md.B0w4IZH7.lean.js deleted file mode 100644 index f3e59f8..0000000 --- a/.vitepress/dist/assets/src_guide_recordLog.md.B0w4IZH7.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,a as i,o as a,aj as n}from"./chunks/framework.BjhQB2K5.js";const g=JSON.parse('{"title":"请求日志记录","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/recordLog.md","filePath":"src/guide/recordLog.md","lastUpdated":1722705865000}'),e={name:"src/guide/recordLog.md"},p=n("",6),t=[p];function l(h,k,r,d,E,c){return a(),i("div",null,t)}const y=s(e,[["render",l]]);export{g as __pageData,y as default}; diff --git a/.vitepress/dist/assets/src_guide_recordLog.md.B0w4IZH7.js b/.vitepress/dist/assets/src_guide_recordLog.md.Ct7SggAu.js similarity index 74% rename from .vitepress/dist/assets/src_guide_recordLog.md.B0w4IZH7.js rename to .vitepress/dist/assets/src_guide_recordLog.md.Ct7SggAu.js index 6f2e6e9..d3cb83d 100644 --- a/.vitepress/dist/assets/src_guide_recordLog.md.B0w4IZH7.js +++ b/.vitepress/dist/assets/src_guide_recordLog.md.Ct7SggAu.js @@ -1,4 +1,4 @@ -import{_ as s,a as i,o as a,aj as n}from"./chunks/framework.BjhQB2K5.js";const g=JSON.parse('{"title":"请求日志记录","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/recordLog.md","filePath":"src/guide/recordLog.md","lastUpdated":1722705865000}'),e={name:"src/guide/recordLog.md"},p=n(`

请求日志记录 ​

记录接口请求日志入库

java
public class BaseLogFilter implements Filter {
+import{_ as i,a,o as n,ah as e}from"./chunks/framework.BKXlU_Nx.js";const c=JSON.parse('{"title":"请求日志记录","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/recordLog.md","filePath":"src/guide/recordLog.md","lastUpdated":1722705865000}'),p={name:"src/guide/recordLog.md"};function t(l,s,h,k,r,d){return n(),a("div",null,s[0]||(s[0]=[e(`

请求日志记录 ​

记录接口请求日志入库

java
public class BaseLogFilter implements Filter {
     @Resource
     private BaseSysLogService baseSysLogService;
 
@@ -19,4 +19,4 @@ import{_ as s,a as i,o as a,aj as n}from"./chunks/framework.BjhQB2K5.js";const g
     - /app/**
     - /css/*
     - /js/*
-    - /favicon.ico
`,6),t=[p];function l(h,k,r,d,E,c){return a(),i("div",null,t)}const y=s(e,[["render",l]]);export{g as __pageData,y as default}; + - /favicon.ico
`,6)]))}const g=i(p,[["render",t]]);export{c as __pageData,g as default}; diff --git a/.vitepress/dist/assets/src_guide_recordLog.md.Ct7SggAu.lean.js b/.vitepress/dist/assets/src_guide_recordLog.md.Ct7SggAu.lean.js new file mode 100644 index 0000000..eed1805 --- /dev/null +++ b/.vitepress/dist/assets/src_guide_recordLog.md.Ct7SggAu.lean.js @@ -0,0 +1 @@ +import{_ as i,a,o as n,ah as e}from"./chunks/framework.BKXlU_Nx.js";const c=JSON.parse('{"title":"请求日志记录","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/recordLog.md","filePath":"src/guide/recordLog.md","lastUpdated":1722705865000}'),p={name:"src/guide/recordLog.md"};function t(l,s,h,k,r,d){return n(),a("div",null,s[0]||(s[0]=[e("",6)]))}const g=i(p,[["render",t]]);export{c as __pageData,g as default}; diff --git a/.vitepress/dist/assets/src_guide_security.md.BFmZQZP9.js b/.vitepress/dist/assets/src_guide_security.md.B2rQeGT7.js similarity index 98% rename from .vitepress/dist/assets/src_guide_security.md.BFmZQZP9.js rename to .vitepress/dist/assets/src_guide_security.md.B2rQeGT7.js index 155df27..7e8efdf 100644 --- a/.vitepress/dist/assets/src_guide_security.md.BFmZQZP9.js +++ b/.vitepress/dist/assets/src_guide_security.md.B2rQeGT7.js @@ -1,4 +1,4 @@ -import{_ as s,a as i,o as a,aj as n}from"./chunks/framework.BjhQB2K5.js";const c=JSON.parse('{"title":"权限校验","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/security.md","filePath":"src/guide/security.md","lastUpdated":1736439326000}'),h={name:"src/guide/security.md"},l=n(`

权限校验 ​

采用 spring-security 与 jwt 作为框架安全与权限校验。

配置 ​

yaml
cool:
+import{_ as i,a,o as n,ah as h}from"./chunks/framework.BKXlU_Nx.js";const g=JSON.parse('{"title":"权限校验","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/security.md","filePath":"src/guide/security.md","lastUpdated":1736439326000}'),l={name:"src/guide/security.md"};function t(k,s,p,e,E,r){return n(),a("div",null,s[0]||(s[0]=[h(`

权限校验 ​

采用 spring-security 与 jwt 作为框架安全与权限校验。

配置 ​

yaml
cool:
   # token 相关配置
   token:
     # 过期时间 单位:秒 半小时
@@ -232,4 +232,4 @@ import{_ as s,a as i,o as a,aj as n}from"./chunks/framework.BjhQB2K5.js";const c
     - /css/*
     - /js/*
     - /druid/**
-    - /admin/base/open/**
`,39),t=[l];function k(p,e,E,r,d,g){return a(),i("div",null,t)}const F=s(h,[["render",k]]);export{c as __pageData,F as default}; + - /admin/base/open/**
`,39)]))}const y=i(l,[["render",t]]);export{g as __pageData,y as default}; diff --git a/.vitepress/dist/assets/src_guide_security.md.B2rQeGT7.lean.js b/.vitepress/dist/assets/src_guide_security.md.B2rQeGT7.lean.js new file mode 100644 index 0000000..3515af3 --- /dev/null +++ b/.vitepress/dist/assets/src_guide_security.md.B2rQeGT7.lean.js @@ -0,0 +1 @@ +import{_ as i,a,o as n,ah as h}from"./chunks/framework.BKXlU_Nx.js";const g=JSON.parse('{"title":"权限校验","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/security.md","filePath":"src/guide/security.md","lastUpdated":1736439326000}'),l={name:"src/guide/security.md"};function t(k,s,p,e,E,r){return n(),a("div",null,s[0]||(s[0]=[h("",39)]))}const y=i(l,[["render",t]]);export{g as __pageData,y as default}; diff --git a/.vitepress/dist/assets/src_guide_security.md.BFmZQZP9.lean.js b/.vitepress/dist/assets/src_guide_security.md.BFmZQZP9.lean.js deleted file mode 100644 index 2966644..0000000 --- a/.vitepress/dist/assets/src_guide_security.md.BFmZQZP9.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,a as i,o as a,aj as n}from"./chunks/framework.BjhQB2K5.js";const c=JSON.parse('{"title":"权限校验","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/security.md","filePath":"src/guide/security.md","lastUpdated":1736439326000}'),h={name:"src/guide/security.md"},l=n("",39),t=[l];function k(p,e,E,r,d,g){return a(),i("div",null,t)}const F=s(h,[["render",k]]);export{c as __pageData,F as default}; diff --git a/.vitepress/dist/assets/src_guide_service.md.CokY9neI.js b/.vitepress/dist/assets/src_guide_service.md.BSPrcE3u.js similarity index 72% rename from .vitepress/dist/assets/src_guide_service.md.CokY9neI.js rename to .vitepress/dist/assets/src_guide_service.md.BSPrcE3u.js index bbf6540..c0de167 100644 --- a/.vitepress/dist/assets/src_guide_service.md.CokY9neI.js +++ b/.vitepress/dist/assets/src_guide_service.md.BSPrcE3u.js @@ -1,4 +1,4 @@ -import{_ as s,a as i,o as a,aj as n}from"./chunks/framework.BjhQB2K5.js";const g=JSON.parse('{"title":"服务","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/service.md","filePath":"src/guide/service.md","lastUpdated":1721036629000}'),e={name:"src/guide/service.md"},l=n(`

服务 ​

处理业务逻辑的代码应该被封装在服务中。

Crud ​

BaseService中集成了常用的 CRUD 操作,可以参考BaseService的实现。

修改前后 ​

可以重写modifyBefore和modifyAfter方法,在修改数据之前或之后做一些处理

  • 修改之前
java
/**
+import{_ as i,a,o as n,ah as e}from"./chunks/framework.BKXlU_Nx.js";const o=JSON.parse('{"title":"服务","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/service.md","filePath":"src/guide/service.md","lastUpdated":1721036629000}'),l={name:"src/guide/service.md"};function p(t,s,h,k,r,d){return n(),a("div",null,s[0]||(s[0]=[e(`

服务 ​

处理业务逻辑的代码应该被封装在服务中。

Crud ​

BaseService中集成了常用的 CRUD 操作,可以参考BaseService的实现。

修改前后 ​

可以重写modifyBefore和modifyAfter方法,在修改数据之前或之后做一些处理

  • 修改之前
java
/**
  * 修改之前
  *
  * @param requestParams 请求参数
@@ -17,4 +17,4 @@ import{_ as s,a as i,o as a,aj as n}from"./chunks/framework.BjhQB2K5.js";const g
  */
 @Override
 public void modifyAfter(JSONObject requestParams, T t, ModifyEnum type) {
-}
`,10),p=[l];function t(h,k,r,d,c,o){return a(),i("div",null,p)}const y=s(e,[["render",t]]);export{g as __pageData,y as default}; +}
`,10)]))}const A=i(l,[["render",p]]);export{o as __pageData,A as default}; diff --git a/.vitepress/dist/assets/src_guide_service.md.BSPrcE3u.lean.js b/.vitepress/dist/assets/src_guide_service.md.BSPrcE3u.lean.js new file mode 100644 index 0000000..06f2282 --- /dev/null +++ b/.vitepress/dist/assets/src_guide_service.md.BSPrcE3u.lean.js @@ -0,0 +1 @@ +import{_ as i,a,o as n,ah as e}from"./chunks/framework.BKXlU_Nx.js";const o=JSON.parse('{"title":"服务","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/service.md","filePath":"src/guide/service.md","lastUpdated":1721036629000}'),l={name:"src/guide/service.md"};function p(t,s,h,k,r,d){return n(),a("div",null,s[0]||(s[0]=[e("",10)]))}const A=i(l,[["render",p]]);export{o as __pageData,A as default}; diff --git a/.vitepress/dist/assets/src_guide_service.md.CokY9neI.lean.js b/.vitepress/dist/assets/src_guide_service.md.CokY9neI.lean.js deleted file mode 100644 index b2734b4..0000000 --- a/.vitepress/dist/assets/src_guide_service.md.CokY9neI.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,a as i,o as a,aj as n}from"./chunks/framework.BjhQB2K5.js";const g=JSON.parse('{"title":"服务","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/service.md","filePath":"src/guide/service.md","lastUpdated":1721036629000}'),e={name:"src/guide/service.md"},l=n("",10),p=[l];function t(h,k,r,d,c,o){return a(),i("div",null,p)}const y=s(e,[["render",t]]);export{g as __pageData,y as default}; diff --git a/.vitepress/dist/assets/src_guide_swagger.md.CCfA6TBH.js b/.vitepress/dist/assets/src_guide_swagger.md.B2QMWjN_.js similarity index 67% rename from .vitepress/dist/assets/src_guide_swagger.md.CCfA6TBH.js rename to .vitepress/dist/assets/src_guide_swagger.md.B2QMWjN_.js index 4076b6e..6c6aea5 100644 --- a/.vitepress/dist/assets/src_guide_swagger.md.CCfA6TBH.js +++ b/.vitepress/dist/assets/src_guide_swagger.md.B2QMWjN_.js @@ -1,8 +1,8 @@ -import{_ as s,a as i,o as a,aj as t}from"./chunks/framework.BjhQB2K5.js";const y=JSON.parse('{"title":"swagger 文档","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/swagger.md","filePath":"src/guide/swagger.md","lastUpdated":1720593505000}'),h={name:"src/guide/swagger.md"},n=t(`

swagger 文档 ​

默认集成springdoc,作为文档。

java
@Tag(name = "测试CURD", description = "测试CURD")
+import{_ as i,a,o as t,ah as h}from"./chunks/framework.BKXlU_Nx.js";const g=JSON.parse('{"title":"swagger 文档","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/swagger.md","filePath":"src/guide/swagger.md","lastUpdated":1720593505000}'),n={name:"src/guide/swagger.md"};function k(e,s,l,p,r,E){return t(),a("div",null,s[0]||(s[0]=[h(`

swagger 文档 ​

默认集成springdoc,作为文档。

java
@Tag(name = "测试CURD", description = "测试CURD")
 @CoolRestController(value = "/cool", api = {"add", "delete", "update", "page", "list", "info"})
 public class AdminDemoInfoController extends BaseController<DemoService, DemoEntity> {
     @Override
     protected void init(HttpServletRequest request, JSONObject requestParams) {
         // 可以在这边实现一下列表数据排序规则,查询条件过滤,返回哪些字段等
     }
-}

系统启动完成访问:http://127.0.0.1:8001/swagger-ui/index.html#/

`,4),e=[n];function k(l,p,r,E,d,g){return a(),i("div",null,e)}const F=s(h,[["render",k]]);export{y as __pageData,F as default}; +}

系统启动完成访问:http://127.0.0.1:8001/swagger-ui/index.html#/

`,4)]))}const o=i(n,[["render",k]]);export{g as __pageData,o as default}; diff --git a/.vitepress/dist/assets/src_guide_swagger.md.B2QMWjN_.lean.js b/.vitepress/dist/assets/src_guide_swagger.md.B2QMWjN_.lean.js new file mode 100644 index 0000000..35c1a7a --- /dev/null +++ b/.vitepress/dist/assets/src_guide_swagger.md.B2QMWjN_.lean.js @@ -0,0 +1 @@ +import{_ as i,a,o as t,ah as h}from"./chunks/framework.BKXlU_Nx.js";const g=JSON.parse('{"title":"swagger 文档","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/swagger.md","filePath":"src/guide/swagger.md","lastUpdated":1720593505000}'),n={name:"src/guide/swagger.md"};function k(e,s,l,p,r,E){return t(),a("div",null,s[0]||(s[0]=[h("",4)]))}const o=i(n,[["render",k]]);export{g as __pageData,o as default}; diff --git a/.vitepress/dist/assets/src_guide_swagger.md.CCfA6TBH.lean.js b/.vitepress/dist/assets/src_guide_swagger.md.CCfA6TBH.lean.js deleted file mode 100644 index 7a6ff25..0000000 --- a/.vitepress/dist/assets/src_guide_swagger.md.CCfA6TBH.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,a as i,o as a,aj as t}from"./chunks/framework.BjhQB2K5.js";const y=JSON.parse('{"title":"swagger 文档","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/swagger.md","filePath":"src/guide/swagger.md","lastUpdated":1720593505000}'),h={name:"src/guide/swagger.md"},n=t("",4),e=[n];function k(l,p,r,E,d,g){return a(),i("div",null,e)}const F=s(h,[["render",k]]);export{y as __pageData,F as default}; diff --git a/.vitepress/dist/assets/src_guide_tenant.md.A1tSE7xk.js b/.vitepress/dist/assets/src_guide_tenant.md.A1tSE7xk.js new file mode 100644 index 0000000..8c5e160 --- /dev/null +++ b/.vitepress/dist/assets/src_guide_tenant.md.A1tSE7xk.js @@ -0,0 +1,5 @@ +import{_ as e,a as t,o as i,ah as s}from"./chunks/framework.BKXlU_Nx.js";const k=JSON.parse('{"title":"多租户(v8.0新增)","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/tenant.md","filePath":"src/guide/tenant.md","lastUpdated":1744512083000}'),n={name:"src/guide/tenant.md"};function l(r,a,h,o,p,d){return i(),t("div",null,a[0]||(a[0]=[s(`

多租户(v8.0新增) ​

多租户(Multi-tenancy)是一种软件架构模式,允许单个应用实例服务多个租户(客户组织)。每个租户的数据是相互隔离的,但共享同一个应用程序代码和基础设施。

主要特点 ​

  • 数据隔离: 确保不同租户之间的数据严格分离,互不可见
  • 资源共享: 多个租户共享同一套应用程序代码和基础设施
  • 独立配置: 每个租户可以有自己的个性化配置和定制化需求
  • 成本优化: 通过资源共享降低运营和维护成本

实现 ​

1、数据隔离 ​

多租户的数据隔离有许多种方案,但最为常见的是以列进行隔离的方式。Cool Admin 通过在TenantEntity中加入指定的列(租户ID tenantId)对数据进行隔离。

如果登录的用户token信息有携带tenantId,则框架会自动注入tenantId。

使用 ​

1、开启多租户 ​

框架默认关闭多租户,需要手动开启 enable修改为 true

yaml
# Cool相关配置
+cool:
+  multi-tenant:
+    # 是否开启多租户,默认关闭
+    enable: false

关于tenantId的使用请参考 mybatis-flex

2、继承对象调整 ​

对于需要租户隔离的表,需要对应的表实体继承对象进行调整 BaseEntity -> TenantEntity

`,15)]))}const u=e(n,[["render",l]]);export{k as __pageData,u as default}; diff --git a/.vitepress/dist/assets/src_guide_tenant.md.A1tSE7xk.lean.js b/.vitepress/dist/assets/src_guide_tenant.md.A1tSE7xk.lean.js new file mode 100644 index 0000000..c7b7835 --- /dev/null +++ b/.vitepress/dist/assets/src_guide_tenant.md.A1tSE7xk.lean.js @@ -0,0 +1 @@ +import{_ as e,a as t,o as i,ah as s}from"./chunks/framework.BKXlU_Nx.js";const k=JSON.parse('{"title":"多租户(v8.0新增)","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/tenant.md","filePath":"src/guide/tenant.md","lastUpdated":1744512083000}'),n={name:"src/guide/tenant.md"};function l(r,a,h,o,p,d){return i(),t("div",null,a[0]||(a[0]=[s("",15)]))}const u=e(n,[["render",l]]);export{k as __pageData,u as default}; diff --git a/.vitepress/dist/assets/src_guide_tenant.md.CP_z92JB.js b/.vitepress/dist/assets/src_guide_tenant.md.CP_z92JB.js deleted file mode 100644 index 5b87426..0000000 --- a/.vitepress/dist/assets/src_guide_tenant.md.CP_z92JB.js +++ /dev/null @@ -1,5 +0,0 @@ -import{_ as a,a as e,o as t,aj as i}from"./chunks/framework.BjhQB2K5.js";const u=JSON.parse('{"title":"多租户(v8.0新增)","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/tenant.md","filePath":"src/guide/tenant.md","lastUpdated":1744512083000}'),s={name:"src/guide/tenant.md"},n=i(`

多租户(v8.0新增) ​

多租户(Multi-tenancy)是一种软件架构模式,允许单个应用实例服务多个租户(客户组织)。每个租户的数据是相互隔离的,但共享同一个应用程序代码和基础设施。

主要特点 ​

  • 数据隔离: 确保不同租户之间的数据严格分离,互不可见
  • 资源共享: 多个租户共享同一套应用程序代码和基础设施
  • 独立配置: 每个租户可以有自己的个性化配置和定制化需求
  • 成本优化: 通过资源共享降低运营和维护成本

实现 ​

1、数据隔离 ​

多租户的数据隔离有许多种方案,但最为常见的是以列进行隔离的方式。Cool Admin 通过在TenantEntity中加入指定的列(租户ID tenantId)对数据进行隔离。

如果登录的用户token信息有携带tenantId,则框架会自动注入tenantId。

使用 ​

1、开启多租户 ​

框架默认关闭多租户,需要手动开启 enable修改为 true

yaml
# Cool相关配置
-cool:
-  multi-tenant:
-    # 是否开启多租户,默认关闭
-    enable: false

关于tenantId的使用请参考 mybatis-flex

2、继承对象调整 ​

对于需要租户隔离的表,需要对应的表实体继承对象进行调整 BaseEntity -> TenantEntity

`,15),l=[n];function h(r,o,d,p,c,k){return t(),e("div",null,l)}const m=a(s,[["render",h]]);export{u as __pageData,m as default}; diff --git a/.vitepress/dist/assets/src_guide_tenant.md.CP_z92JB.lean.js b/.vitepress/dist/assets/src_guide_tenant.md.CP_z92JB.lean.js deleted file mode 100644 index 4454c1a..0000000 --- a/.vitepress/dist/assets/src_guide_tenant.md.CP_z92JB.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,a as e,o as t,aj as i}from"./chunks/framework.BjhQB2K5.js";const u=JSON.parse('{"title":"多租户(v8.0新增)","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/tenant.md","filePath":"src/guide/tenant.md","lastUpdated":1744512083000}'),s={name:"src/guide/tenant.md"},n=i("",15),l=[n];function h(r,o,d,p,c,k){return t(),e("div",null,l)}const m=a(s,[["render",h]]);export{u as __pageData,m as default}; diff --git a/.vitepress/dist/assets/src_guide_uniqueIDGen.md.BNiKKfQz.js b/.vitepress/dist/assets/src_guide_uniqueIDGen.md.2lkhYWAH.js similarity index 83% rename from .vitepress/dist/assets/src_guide_uniqueIDGen.md.BNiKKfQz.js rename to .vitepress/dist/assets/src_guide_uniqueIDGen.md.2lkhYWAH.js index 762ce90..fc30463 100644 --- a/.vitepress/dist/assets/src_guide_uniqueIDGen.md.BNiKKfQz.js +++ b/.vitepress/dist/assets/src_guide_uniqueIDGen.md.2lkhYWAH.js @@ -1,4 +1,4 @@ -import{_ as s,a as i,o as a,aj as n}from"./chunks/framework.BjhQB2K5.js";const o=JSON.parse('{"title":"唯一id","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/uniqueIDGen.md","filePath":"src/guide/uniqueIDGen.md","lastUpdated":1725802894000}'),t={name:"src/guide/uniqueIDGen.md"},h=n(`

唯一id ​

基于表来完成分布式ID生成

原理参考美团点评分布式ID

java
@Table(value = "leaf_alloc", comment = "唯一id分配")
+import{_ as i,a,o as n,ah as t}from"./chunks/framework.BKXlU_Nx.js";const g=JSON.parse('{"title":"唯一id","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/uniqueIDGen.md","filePath":"src/guide/uniqueIDGen.md","lastUpdated":1725802894000}'),h={name:"src/guide/uniqueIDGen.md"};function l(p,s,k,e,d,E){return n(),a("div",null,s[0]||(s[0]=[t(`

唯一id ​

基于表来完成分布式ID生成

原理参考美团点评分布式ID

java
@Table(value = "leaf_alloc", comment = "唯一id分配")
 public class LeafAllocEntity  extends BaseEntity<LeafAllocEntity> {
 
     @UniIndex
@@ -27,4 +27,4 @@ import{_ as s,a as i,o as a,aj as n}from"./chunks/framework.BjhQB2K5.js";const o
 leaf:
   segment:
     # 默认禁用,如需启用调整为 true
-    enable: false
`,10),l=[h];function p(k,e,d,E,r,g){return a(),i("div",null,l)}const c=s(t,[["render",p]]);export{o as __pageData,c as default}; + enable: false
`,10)]))}const y=i(h,[["render",l]]);export{g as __pageData,y as default}; diff --git a/.vitepress/dist/assets/src_guide_uniqueIDGen.md.2lkhYWAH.lean.js b/.vitepress/dist/assets/src_guide_uniqueIDGen.md.2lkhYWAH.lean.js new file mode 100644 index 0000000..cbf92db --- /dev/null +++ b/.vitepress/dist/assets/src_guide_uniqueIDGen.md.2lkhYWAH.lean.js @@ -0,0 +1 @@ +import{_ as i,a,o as n,ah as t}from"./chunks/framework.BKXlU_Nx.js";const g=JSON.parse('{"title":"唯一id","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/uniqueIDGen.md","filePath":"src/guide/uniqueIDGen.md","lastUpdated":1725802894000}'),h={name:"src/guide/uniqueIDGen.md"};function l(p,s,k,e,d,E){return n(),a("div",null,s[0]||(s[0]=[t("",10)]))}const y=i(h,[["render",l]]);export{g as __pageData,y as default}; diff --git a/.vitepress/dist/assets/src_guide_uniqueIDGen.md.BNiKKfQz.lean.js b/.vitepress/dist/assets/src_guide_uniqueIDGen.md.BNiKKfQz.lean.js deleted file mode 100644 index 831a99a..0000000 --- a/.vitepress/dist/assets/src_guide_uniqueIDGen.md.BNiKKfQz.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,a as i,o as a,aj as n}from"./chunks/framework.BjhQB2K5.js";const o=JSON.parse('{"title":"唯一id","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/uniqueIDGen.md","filePath":"src/guide/uniqueIDGen.md","lastUpdated":1725802894000}'),t={name:"src/guide/uniqueIDGen.md"},h=n("",10),l=[h];function p(k,e,d,E,r,g){return a(),i("div",null,l)}const c=s(t,[["render",p]]);export{o as __pageData,c as default}; diff --git a/.vitepress/dist/assets/src_guide_upload.md.D-dQqFKU.js b/.vitepress/dist/assets/src_guide_upload.md.90xW7PAK.js similarity index 86% rename from .vitepress/dist/assets/src_guide_upload.md.D-dQqFKU.js rename to .vitepress/dist/assets/src_guide_upload.md.90xW7PAK.js index 768c640..f11a870 100644 --- a/.vitepress/dist/assets/src_guide_upload.md.D-dQqFKU.js +++ b/.vitepress/dist/assets/src_guide_upload.md.90xW7PAK.js @@ -1,4 +1,4 @@ -import{_ as s,a as i,o as a,aj as n}from"./chunks/framework.BjhQB2K5.js";const o=JSON.parse('{"title":"文件上传","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/upload.md","filePath":"src/guide/upload.md","lastUpdated":1738945691000}'),l={name:"src/guide/upload.md"},h=n(`

文件上传 ​

框架自带两种文件上传方式本地上传与云存储,与前端紧密结合,

前端会根据后端返回的上传模式进行本地上传或者云存储签名直传(不经过服务器,直接上传到对应的云存储)

  • 本地上传
  • 云存储,如阿里云、腾讯云、七牛云等

TIP

安装云存储插件,如 Oss,系统的文件上传就会自动替换成云存储上传的方式,云存储上传服务端值提供签名供前端直传到对应的云存储

使用 ​

application.yml

yaml
spring:
+import{_ as i,a,o as n,ah as l}from"./chunks/framework.BKXlU_Nx.js";const g=JSON.parse('{"title":"文件上传","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/upload.md","filePath":"src/guide/upload.md","lastUpdated":1738945691000}'),p={name:"src/guide/upload.md"};function h(k,s,t,e,E,r){return n(),a("div",null,s[0]||(s[0]=[l(`

文件上传 ​

框架自带两种文件上传方式本地上传与云存储,与前端紧密结合,

前端会根据后端返回的上传模式进行本地上传或者云存储签名直传(不经过服务器,直接上传到对应的云存储)

  • 本地上传
  • 云存储,如阿里云、腾讯云、七牛云等

TIP

安装云存储插件,如 Oss,系统的文件上传就会自动替换成云存储上传的方式,云存储上传服务端值提供签名供前端直传到对应的云存储

使用 ​

application.yml

yaml
spring:
   # Web设置
   web:
     resources:
@@ -34,4 +34,4 @@ import{_ as s,a as i,o as a,aj as n}from"./chunks/framework.BjhQB2K5.js";const o
     public R uploadMode() {
         return R.ok(fileUploadStrategyFactory.getMode());
     }
-}
`,11),p=[h];function k(t,e,E,r,d,g){return a(),i("div",null,p)}const F=s(l,[["render",k]]);export{o as __pageData,F as default}; +}
`,11)]))}const y=i(p,[["render",h]]);export{g as __pageData,y as default}; diff --git a/.vitepress/dist/assets/src_guide_upload.md.90xW7PAK.lean.js b/.vitepress/dist/assets/src_guide_upload.md.90xW7PAK.lean.js new file mode 100644 index 0000000..47a4b7a --- /dev/null +++ b/.vitepress/dist/assets/src_guide_upload.md.90xW7PAK.lean.js @@ -0,0 +1 @@ +import{_ as i,a,o as n,ah as l}from"./chunks/framework.BKXlU_Nx.js";const g=JSON.parse('{"title":"文件上传","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/upload.md","filePath":"src/guide/upload.md","lastUpdated":1738945691000}'),p={name:"src/guide/upload.md"};function h(k,s,t,e,E,r){return n(),a("div",null,s[0]||(s[0]=[l("",11)]))}const y=i(p,[["render",h]]);export{g as __pageData,y as default}; diff --git a/.vitepress/dist/assets/src_guide_upload.md.D-dQqFKU.lean.js b/.vitepress/dist/assets/src_guide_upload.md.D-dQqFKU.lean.js deleted file mode 100644 index 819510a..0000000 --- a/.vitepress/dist/assets/src_guide_upload.md.D-dQqFKU.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,a as i,o as a,aj as n}from"./chunks/framework.BjhQB2K5.js";const o=JSON.parse('{"title":"文件上传","description":"","frontmatter":{},"headers":[],"relativePath":"src/guide/upload.md","filePath":"src/guide/upload.md","lastUpdated":1738945691000}'),l={name:"src/guide/upload.md"},h=n("",11),p=[h];function k(t,e,E,r,d,g){return a(),i("div",null,p)}const F=s(l,[["render",k]]);export{o as __pageData,F as default}; diff --git a/.vitepress/dist/assets/src_introduce_index.md.BaUz4Xtw.js b/.vitepress/dist/assets/src_introduce_index.md.BaUz4Xtw.js deleted file mode 100644 index e560fb1..0000000 --- a/.vitepress/dist/assets/src_introduce_index.md.BaUz4Xtw.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a}from"./chunks/admin.CyLBVO1a.js";import{_ as i}from"./chunks/flow.YLaN3zCE.js";import{_ as l,a as e,o as t,aj as o}from"./chunks/framework.BjhQB2K5.js";const q=JSON.parse('{"title":"简介","description":"","frontmatter":{},"headers":[],"relativePath":"src/introduce/index.md","filePath":"src/introduce/index.md","lastUpdated":1721036629000}'),r={name:"src/introduce/index.md"},n=o('

简介 ​

技术选型 ​

按照简单、常用的技术进行选择,减少技术栈的复杂度。

一、环境要求 ​

  • Java Jdk >= 17 选择 graalvm
  • Mysql >= 5.7
  • Maven >= 3.6

二、后端框架 ​

  • Spring Boot 3.x
  • Mybatis Flex
  • Auto Table
  • Hutool

三、前端框架 ​

  • Vue3
  • Typescript
  • Element-UI

为什么选择 Cool Admin? ​

随着技术不断地发展,特别是最近 Ai 相关的技术发展,以往的框架已经越来越不能满足现代化的开发需求。

Cool Admin 做为后来者有后发优势,主要特点:

  • Ai 编码,从页面到后端代码,部分功能实现零代码;
  • Ai 流程编排,专门为 Ai 开发设计的,Ai 开发几乎不用写代码,只需拖一拖即可;
  • 扩展插件,可插拔,如支付、短信这类功能的插件可以通过后台动态安装卸载,灵活又不臃肿;
  • 代码简洁,不像一般代码生成器生成一堆冗余代码,Cool 只需极少编码即可实现大部分需求;
  • ......

内置功能 ​

  • 用户管理:呈现公司组织部门树形结构,用户是系统操作者,该功能主要完成系统用户配置。
  • 菜单管理:配置系统菜单,操作权限标识等。
  • 角色管理:角色菜单权限分配、设置角色按机构进行数据范围权限划分。
  • 参数管理:对系统动态配置常用参数。
  • 字典管理:对系统中经常使用的一些较为固定的数据进行维护。
  • 请求日志:接口的请求入参日志,便于问题排查。
  • 操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询。
  • 定时任务:在线(添加、修改、删除)任务调度包含执行结果日志。
  • 文件管理:支持静态资源文件上传云端进行云管理。
  • 数据回收站:数据有 n 天的保留,支持回滚操作。
  • 前后端插件:支持动态安装、卸载插件,实现功能可插拔。
',18),d=[n];function s(c,h,m,u,_,p){return t(),e("div",null,d)}const A=l(r,[["render",s]]);export{q as __pageData,A as default}; diff --git a/.vitepress/dist/assets/src_introduce_index.md.BaUz4Xtw.lean.js b/.vitepress/dist/assets/src_introduce_index.md.BaUz4Xtw.lean.js deleted file mode 100644 index 90e57d1..0000000 --- a/.vitepress/dist/assets/src_introduce_index.md.BaUz4Xtw.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a}from"./chunks/admin.CyLBVO1a.js";import{_ as i}from"./chunks/flow.YLaN3zCE.js";import{_ as l,a as e,o as t,aj as o}from"./chunks/framework.BjhQB2K5.js";const q=JSON.parse('{"title":"简介","description":"","frontmatter":{},"headers":[],"relativePath":"src/introduce/index.md","filePath":"src/introduce/index.md","lastUpdated":1721036629000}'),r={name:"src/introduce/index.md"},n=o("",18),d=[n];function s(c,h,m,u,_,p){return t(),e("div",null,d)}const A=l(r,[["render",s]]);export{q as __pageData,A as default}; diff --git a/.vitepress/dist/assets/src_introduce_index.md.DIqLm5J3.js b/.vitepress/dist/assets/src_introduce_index.md.DIqLm5J3.js new file mode 100644 index 0000000..14805ba --- /dev/null +++ b/.vitepress/dist/assets/src_introduce_index.md.DIqLm5J3.js @@ -0,0 +1 @@ +import{_ as i}from"./chunks/admin.CyLBVO1a.js";import{_ as l}from"./chunks/flow.YLaN3zCE.js";import{_ as e,a as t,o,ah as r}from"./chunks/framework.BKXlU_Nx.js";const f=JSON.parse('{"title":"简介","description":"","frontmatter":{},"headers":[],"relativePath":"src/introduce/index.md","filePath":"src/introduce/index.md","lastUpdated":1721036629000}'),n={name:"src/introduce/index.md"};function d(s,a,c,h,m,u){return o(),t("div",null,a[0]||(a[0]=[r('

简介 ​

技术选型 ​

按照简单、常用的技术进行选择,减少技术栈的复杂度。

一、环境要求 ​

  • Java Jdk >= 17 选择 graalvm
  • Mysql >= 5.7
  • Maven >= 3.6

二、后端框架 ​

  • Spring Boot 3.x
  • Mybatis Flex
  • Auto Table
  • Hutool

三、前端框架 ​

  • Vue3
  • Typescript
  • Element-UI

为什么选择 Cool Admin? ​

随着技术不断地发展,特别是最近 Ai 相关的技术发展,以往的框架已经越来越不能满足现代化的开发需求。

Cool Admin 做为后来者有后发优势,主要特点:

  • Ai 编码,从页面到后端代码,部分功能实现零代码;
  • Ai 流程编排,专门为 Ai 开发设计的,Ai 开发几乎不用写代码,只需拖一拖即可;
  • 扩展插件,可插拔,如支付、短信这类功能的插件可以通过后台动态安装卸载,灵活又不臃肿;
  • 代码简洁,不像一般代码生成器生成一堆冗余代码,Cool 只需极少编码即可实现大部分需求;
  • ......

内置功能 ​

  • 用户管理:呈现公司组织部门树形结构,用户是系统操作者,该功能主要完成系统用户配置。
  • 菜单管理:配置系统菜单,操作权限标识等。
  • 角色管理:角色菜单权限分配、设置角色按机构进行数据范围权限划分。
  • 参数管理:对系统动态配置常用参数。
  • 字典管理:对系统中经常使用的一些较为固定的数据进行维护。
  • 请求日志:接口的请求入参日志,便于问题排查。
  • 操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询。
  • 定时任务:在线(添加、修改、删除)任务调度包含执行结果日志。
  • 文件管理:支持静态资源文件上传云端进行云管理。
  • 数据回收站:数据有 n 天的保留,支持回滚操作。
  • 前后端插件:支持动态安装、卸载插件,实现功能可插拔。
',18)]))}const x=e(n,[["render",d]]);export{f as __pageData,x as default}; diff --git a/.vitepress/dist/assets/src_introduce_index.md.DIqLm5J3.lean.js b/.vitepress/dist/assets/src_introduce_index.md.DIqLm5J3.lean.js new file mode 100644 index 0000000..603011c --- /dev/null +++ b/.vitepress/dist/assets/src_introduce_index.md.DIqLm5J3.lean.js @@ -0,0 +1 @@ +import{_ as i}from"./chunks/admin.CyLBVO1a.js";import{_ as l}from"./chunks/flow.YLaN3zCE.js";import{_ as e,a as t,o,ah as r}from"./chunks/framework.BKXlU_Nx.js";const f=JSON.parse('{"title":"简介","description":"","frontmatter":{},"headers":[],"relativePath":"src/introduce/index.md","filePath":"src/introduce/index.md","lastUpdated":1721036629000}'),n={name:"src/introduce/index.md"};function d(s,a,c,h,m,u){return o(),t("div",null,a[0]||(a[0]=[r("",18)]))}const x=e(n,[["render",d]]);export{f as __pageData,x as default}; diff --git a/.vitepress/dist/assets/src_introduce_show.md.Ck0DuCIX.js b/.vitepress/dist/assets/src_introduce_show.md.Ck0DuCIX.js deleted file mode 100644 index e84aff6..0000000 --- a/.vitepress/dist/assets/src_introduce_show.md.Ck0DuCIX.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e}from"./chunks/admin.CyLBVO1a.js";import{_ as t,a,o,aj as r}from"./chunks/framework.BjhQB2K5.js";const w=JSON.parse('{"title":"演示","description":"","frontmatter":{},"headers":[],"relativePath":"src/introduce/show.md","filePath":"src/introduce/show.md","lastUpdated":1720593505000}'),s={name:"src/introduce/show.md"},c=r('

演示 ​

功能几乎跟nodejs 版本一致

https://show.cool-admin.com

账户:admin 密码:123456

',5),n=[c];function _(i,d,p,h,l,m){return o(),a("div",null,n)}const T=t(s,[["render",_]]);export{w as __pageData,T as default}; diff --git a/.vitepress/dist/assets/src_introduce_show.md.Ck0DuCIX.lean.js b/.vitepress/dist/assets/src_introduce_show.md.Ck0DuCIX.lean.js deleted file mode 100644 index 73efb8f..0000000 --- a/.vitepress/dist/assets/src_introduce_show.md.Ck0DuCIX.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e}from"./chunks/admin.CyLBVO1a.js";import{_ as t,a,o,aj as r}from"./chunks/framework.BjhQB2K5.js";const w=JSON.parse('{"title":"演示","description":"","frontmatter":{},"headers":[],"relativePath":"src/introduce/show.md","filePath":"src/introduce/show.md","lastUpdated":1720593505000}'),s={name:"src/introduce/show.md"},c=r("",5),n=[c];function _(i,d,p,h,l,m){return o(),a("div",null,n)}const T=t(s,[["render",_]]);export{w as __pageData,T as default}; diff --git a/.vitepress/dist/assets/src_introduce_show.md.Dy5qurfj.js b/.vitepress/dist/assets/src_introduce_show.md.Dy5qurfj.js new file mode 100644 index 0000000..3d62619 --- /dev/null +++ b/.vitepress/dist/assets/src_introduce_show.md.Dy5qurfj.js @@ -0,0 +1 @@ +import{_ as t}from"./chunks/admin.CyLBVO1a.js";import{_ as a,a as r,o,ah as s}from"./chunks/framework.BKXlU_Nx.js";const f=JSON.parse('{"title":"演示","description":"","frontmatter":{},"headers":[],"relativePath":"src/introduce/show.md","filePath":"src/introduce/show.md","lastUpdated":1720593505000}'),n={name:"src/introduce/show.md"};function c(_,e,p,i,d,l){return o(),r("div",null,e[0]||(e[0]=[s('

演示 ​

功能几乎跟nodejs 版本一致

https://show.cool-admin.com

账户:admin 密码:123456

',5)]))}const u=a(n,[["render",c]]);export{f as __pageData,u as default}; diff --git a/.vitepress/dist/assets/src_introduce_show.md.Dy5qurfj.lean.js b/.vitepress/dist/assets/src_introduce_show.md.Dy5qurfj.lean.js new file mode 100644 index 0000000..d6f430b --- /dev/null +++ b/.vitepress/dist/assets/src_introduce_show.md.Dy5qurfj.lean.js @@ -0,0 +1 @@ +import{_ as t}from"./chunks/admin.CyLBVO1a.js";import{_ as a,a as r,o,ah as s}from"./chunks/framework.BKXlU_Nx.js";const f=JSON.parse('{"title":"演示","description":"","frontmatter":{},"headers":[],"relativePath":"src/introduce/show.md","filePath":"src/introduce/show.md","lastUpdated":1720593505000}'),n={name:"src/introduce/show.md"};function c(_,e,p,i,d,l){return o(),r("div",null,e[0]||(e[0]=[s("",5)]))}const u=a(n,[["render",c]]);export{f as __pageData,u as default}; diff --git a/.vitepress/dist/assets/src_introduce_src.md.BO7rlY2n.js b/.vitepress/dist/assets/src_introduce_src.md.BO7rlY2n.js new file mode 100644 index 0000000..303ea3a --- /dev/null +++ b/.vitepress/dist/assets/src_introduce_src.md.BO7rlY2n.js @@ -0,0 +1 @@ +import{_ as o,a as e,o as t,ah as r}from"./chunks/framework.BKXlU_Nx.js";const h=JSON.parse('{"title":"源码","description":"","frontmatter":{},"headers":[],"relativePath":"src/introduce/src.md","filePath":"src/introduce/src.md","lastUpdated":1722935307000}'),c={name:"src/introduce/src.md"};function l(i,a,n,m,p,s){return t(),e("div",null,a[0]||(a[0]=[r('

源码 ​

项目是开源免费、可商用、无需授权的,为了使项目能够持续,不要吝啬你们免费的Star哦!!!你的Star是我们最大的动力!!!

后端(点个 Star 哦) ​

https://github.com/cool-team-official/cool-admin-java

或

https://gitee.com/cool-team-official/cool-admin-java

或

https://gitcode.com/cool_team/cool-admin-java

前端(点个 Star 哦) ​

点击前往前端项目详细文档

https://github.com/cool-team-official/cool-admin-vue

或

https://gitee.com/cool-team-official/cool-admin-vue

或

https://gitcode.com/cool_team/cool-admin-vue

文档 (Star 哦) ​

如果文档有缺失,欢迎提交pr,您的贡献可能会给其他人来带巨大的帮助。

https://github.com/cool-team-official/cool-admin-java-docs

或

https://gitee.com/cool-team-official/cool-admin-java-docs

',20)]))}const f=o(c,[["render",l]]);export{h as __pageData,f as default}; diff --git a/.vitepress/dist/assets/src_introduce_src.md.BO7rlY2n.lean.js b/.vitepress/dist/assets/src_introduce_src.md.BO7rlY2n.lean.js new file mode 100644 index 0000000..4ba2fef --- /dev/null +++ b/.vitepress/dist/assets/src_introduce_src.md.BO7rlY2n.lean.js @@ -0,0 +1 @@ +import{_ as o,a as e,o as t,ah as r}from"./chunks/framework.BKXlU_Nx.js";const h=JSON.parse('{"title":"源码","description":"","frontmatter":{},"headers":[],"relativePath":"src/introduce/src.md","filePath":"src/introduce/src.md","lastUpdated":1722935307000}'),c={name:"src/introduce/src.md"};function l(i,a,n,m,p,s){return t(),e("div",null,a[0]||(a[0]=[r("",20)]))}const f=o(c,[["render",l]]);export{h as __pageData,f as default}; diff --git a/.vitepress/dist/assets/src_introduce_src.md.UlNmfnNt.js b/.vitepress/dist/assets/src_introduce_src.md.UlNmfnNt.js deleted file mode 100644 index 6013f2b..0000000 --- a/.vitepress/dist/assets/src_introduce_src.md.UlNmfnNt.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,a as o,o as e,aj as t}from"./chunks/framework.BjhQB2K5.js";const _=JSON.parse('{"title":"源码","description":"","frontmatter":{},"headers":[],"relativePath":"src/introduce/src.md","filePath":"src/introduce/src.md","lastUpdated":1722935307000}'),r={name:"src/introduce/src.md"},c=t('

源码 ​

项目是开源免费、可商用、无需授权的,为了使项目能够持续,不要吝啬你们免费的Star哦!!!你的Star是我们最大的动力!!!

后端(点个 Star 哦) ​

https://github.com/cool-team-official/cool-admin-java

或

https://gitee.com/cool-team-official/cool-admin-java

或

https://gitcode.com/cool_team/cool-admin-java

前端(点个 Star 哦) ​

点击前往前端项目详细文档

https://github.com/cool-team-official/cool-admin-vue

或

https://gitee.com/cool-team-official/cool-admin-vue

或

https://gitcode.com/cool_team/cool-admin-vue

文档 (Star 哦) ​

如果文档有缺失,欢迎提交pr,您的贡献可能会给其他人来带巨大的帮助。

https://github.com/cool-team-official/cool-admin-java-docs

或

https://gitee.com/cool-team-official/cool-admin-java-docs

',20),i=[c];function l(n,s,m,p,d,h){return e(),o("div",null,i)}const u=a(r,[["render",l]]);export{_ as __pageData,u as default}; diff --git a/.vitepress/dist/assets/src_introduce_src.md.UlNmfnNt.lean.js b/.vitepress/dist/assets/src_introduce_src.md.UlNmfnNt.lean.js deleted file mode 100644 index a4669b8..0000000 --- a/.vitepress/dist/assets/src_introduce_src.md.UlNmfnNt.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,a as o,o as e,aj as t}from"./chunks/framework.BjhQB2K5.js";const _=JSON.parse('{"title":"源码","description":"","frontmatter":{},"headers":[],"relativePath":"src/introduce/src.md","filePath":"src/introduce/src.md","lastUpdated":1722935307000}'),r={name:"src/introduce/src.md"},c=t("",20),i=[c];function l(n,s,m,p,d,h){return e(),o("div",null,i)}const u=a(r,[["render",l]]);export{_ as __pageData,u as default}; diff --git a/.vitepress/dist/assets/src_question_common.md.BqW7OjdF.js b/.vitepress/dist/assets/src_question_common.md.BqW7OjdF.js new file mode 100644 index 0000000..c4c4e95 --- /dev/null +++ b/.vitepress/dist/assets/src_question_common.md.BqW7OjdF.js @@ -0,0 +1 @@ +import{_ as t,a,o,ah as l}from"./chunks/framework.BKXlU_Nx.js";const _=JSON.parse('{"title":"常见问题","description":"","frontmatter":{},"headers":[],"relativePath":"src/question/common.md","filePath":"src/question/common.md","lastUpdated":1721036629000}'),i={name:"src/question/common.md"};function r(c,e,n,s,d,m){return o(),a("div",null,e[0]||(e[0]=[l('

常见问题 ​

项目中常见的问题

1、找不到类似xxxTableDef文件 ​

框架用到了Mybatis Flex 的 APT 功能,在项目编译的时候会自动生成这些文件。

你可以这样做:

  • Build 你的项目;
  • 执行 maven 的mvn compile命令;
  • 配置完数据库直接启动;
  • 【推荐】开启 idea 的Build project automatically自动编译功能(Settings -> Build, Execution, Deployment -> Compiler -> Build Project Automatically);

这些方式都可以解决这个问题。

',7)]))}const u=t(i,[["render",r]]);export{_ as __pageData,u as default}; diff --git a/.vitepress/dist/assets/src_question_common.md.BqW7OjdF.lean.js b/.vitepress/dist/assets/src_question_common.md.BqW7OjdF.lean.js new file mode 100644 index 0000000..aae3c04 --- /dev/null +++ b/.vitepress/dist/assets/src_question_common.md.BqW7OjdF.lean.js @@ -0,0 +1 @@ +import{_ as t,a,o,ah as l}from"./chunks/framework.BKXlU_Nx.js";const _=JSON.parse('{"title":"常见问题","description":"","frontmatter":{},"headers":[],"relativePath":"src/question/common.md","filePath":"src/question/common.md","lastUpdated":1721036629000}'),i={name:"src/question/common.md"};function r(c,e,n,s,d,m){return o(),a("div",null,e[0]||(e[0]=[l("",7)]))}const u=t(i,[["render",r]]);export{_ as __pageData,u as default}; diff --git a/.vitepress/dist/assets/src_question_common.md.Caojqqth.js b/.vitepress/dist/assets/src_question_common.md.Caojqqth.js deleted file mode 100644 index f8d2157..0000000 --- a/.vitepress/dist/assets/src_question_common.md.Caojqqth.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,a as t,o as a,aj as o}from"./chunks/framework.BjhQB2K5.js";const u=JSON.parse('{"title":"常见问题","description":"","frontmatter":{},"headers":[],"relativePath":"src/question/common.md","filePath":"src/question/common.md","lastUpdated":1721036629000}'),l={name:"src/question/common.md"},i=o('

常见问题 ​

项目中常见的问题

1、找不到类似xxxTableDef文件 ​

框架用到了Mybatis Flex 的 APT 功能,在项目编译的时候会自动生成这些文件。

你可以这样做:

  • Build 你的项目;
  • 执行 maven 的mvn compile命令;
  • 配置完数据库直接启动;
  • 【推荐】开启 idea 的Build project automatically自动编译功能(Settings -> Build, Execution, Deployment -> Compiler -> Build Project Automatically);

这些方式都可以解决这个问题。

',7),r=[i];function c(n,s,d,_,m,p){return a(),t("div",null,r)}const x=e(l,[["render",c]]);export{u as __pageData,x as default}; diff --git a/.vitepress/dist/assets/src_question_common.md.Caojqqth.lean.js b/.vitepress/dist/assets/src_question_common.md.Caojqqth.lean.js deleted file mode 100644 index 36501d8..0000000 --- a/.vitepress/dist/assets/src_question_common.md.Caojqqth.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,a as t,o as a,aj as o}from"./chunks/framework.BjhQB2K5.js";const u=JSON.parse('{"title":"常见问题","description":"","frontmatter":{},"headers":[],"relativePath":"src/question/common.md","filePath":"src/question/common.md","lastUpdated":1721036629000}'),l={name:"src/question/common.md"},i=o("",7),r=[i];function c(n,s,d,_,m,p){return a(),t("div",null,r)}const x=e(l,[["render",c]]);export{u as __pageData,x as default}; diff --git a/.vitepress/dist/assets/src_todo_plan.md.CISv3gFT.js b/.vitepress/dist/assets/src_todo_plan.md.CISv3gFT.js new file mode 100644 index 0000000..1757dfb --- /dev/null +++ b/.vitepress/dist/assets/src_todo_plan.md.CISv3gFT.js @@ -0,0 +1 @@ +import{_ as t,a as e,o as l,ah as o}from"./chunks/framework.BKXlU_Nx.js";const h=JSON.parse('{"title":"计划","description":"","frontmatter":{},"headers":[],"relativePath":"src/todo/plan.md","filePath":"src/todo/plan.md","lastUpdated":1721037096000}'),r={name:"src/todo/plan.md"};function i(n,a,s,d,_,c){return l(),e("div",null,a[0]||(a[0]=[o('

计划 ​

以下是我们的一些计划,如果你有更好的建议,欢迎联系我们。

完善插件 ​

  • Ai 流程编排插件
  • 文件上传插件
  • 短信插件
  • 支付插件
  • 微信 SDK 插件
',4)]))}const m=t(r,[["render",i]]);export{h as __pageData,m as default}; diff --git a/.vitepress/dist/assets/src_todo_plan.md.CISv3gFT.lean.js b/.vitepress/dist/assets/src_todo_plan.md.CISv3gFT.lean.js new file mode 100644 index 0000000..7150862 --- /dev/null +++ b/.vitepress/dist/assets/src_todo_plan.md.CISv3gFT.lean.js @@ -0,0 +1 @@ +import{_ as t,a as e,o as l,ah as o}from"./chunks/framework.BKXlU_Nx.js";const h=JSON.parse('{"title":"计划","description":"","frontmatter":{},"headers":[],"relativePath":"src/todo/plan.md","filePath":"src/todo/plan.md","lastUpdated":1721037096000}'),r={name:"src/todo/plan.md"};function i(n,a,s,d,_,c){return l(),e("div",null,a[0]||(a[0]=[o("",4)]))}const m=t(r,[["render",i]]);export{h as __pageData,m as default}; diff --git a/.vitepress/dist/assets/src_todo_plan.md.pGnBM6_r.js b/.vitepress/dist/assets/src_todo_plan.md.pGnBM6_r.js deleted file mode 100644 index a39f975..0000000 --- a/.vitepress/dist/assets/src_todo_plan.md.pGnBM6_r.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,a as t,o as e,aj as o}from"./chunks/framework.BjhQB2K5.js";const u=JSON.parse('{"title":"计划","description":"","frontmatter":{},"headers":[],"relativePath":"src/todo/plan.md","filePath":"src/todo/plan.md","lastUpdated":1721037096000}'),l={name:"src/todo/plan.md"},i=o('

计划 ​

以下是我们的一些计划,如果你有更好的建议,欢迎联系我们。

完善插件 ​

  • Ai 流程编排插件
  • 文件上传插件
  • 短信插件
  • 支付插件
  • 微信 SDK 插件
',4),r=[i];function s(n,_,c,d,p,h){return e(),t("div",null,r)}const f=a(l,[["render",s]]);export{u as __pageData,f as default}; diff --git a/.vitepress/dist/assets/src_todo_plan.md.pGnBM6_r.lean.js b/.vitepress/dist/assets/src_todo_plan.md.pGnBM6_r.lean.js deleted file mode 100644 index 6ac6c52..0000000 --- a/.vitepress/dist/assets/src_todo_plan.md.pGnBM6_r.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,a as t,o as e,aj as o}from"./chunks/framework.BjhQB2K5.js";const u=JSON.parse('{"title":"计划","description":"","frontmatter":{},"headers":[],"relativePath":"src/todo/plan.md","filePath":"src/todo/plan.md","lastUpdated":1721037096000}'),l={name:"src/todo/plan.md"},i=o("",4),r=[i];function s(n,_,c,d,p,h){return e(),t("div",null,r)}const f=a(l,[["render",s]]);export{u as __pageData,f as default}; diff --git a/.vitepress/dist/assets/src_todo_update.md.C-VVOl5_.js b/.vitepress/dist/assets/src_todo_update.md.C-VVOl5_.js new file mode 100644 index 0000000..4900b5d --- /dev/null +++ b/.vitepress/dist/assets/src_todo_update.md.C-VVOl5_.js @@ -0,0 +1 @@ +import{_ as e,a as l,o as i,ah as t}from"./chunks/framework.BKXlU_Nx.js";const p=JSON.parse('{"title":"更新","description":"","frontmatter":{},"headers":[],"relativePath":"src/todo/update.md","filePath":"src/todo/update.md","lastUpdated":1744512083000}'),r={name:"src/todo/update.md"};function o(h,a,n,d,s,c){return i(),l("div",null,a[0]||(a[0]=[t('

更新 ​

因为有你们的支持,cool-admin 会持续不断地更新,如果方便请点下 Star,这将会给我们带来更多的动力!!!

v8.0.0(2025-04-13) ​

  • 新增: 支持多租户,全局动态注入查询条件详情
  • 新增: 支持多语言,基于大模型自动翻译,无需更改原有代码详情
  • 优化: 响应类型封装优化 by @ximu-tao
  • 升级: 升级autotable和mybatis-flex版本,涉及包结构变更 com.tangzc.autotable -> org.dromara.autotable
  • 升级: AI 自动编码(基于DeepSeek R1)

v7.1.3(2024-08-25) ​

  • 新增: list和page支持关联查询,支持自定义返回结果类型,并可以在init方法中初始化返回字段类型及数据组装函数定义(参考:控制器)
  • 新增: 分布式ID生成组件(参考:分布式ID)
  • 新增: 锁工具(参考:锁工具)
  • 新增: 防重提交注解(参考:防重提交)
  • 调整: 缓存数据模板(参考:缓存)
  • 调整: 优化eps解析规则 (参考:解析规则)
  • 调整: 优化角色修改循环单个处理为批量处理,并异步进行刷新用户权限
  • 调整: 图形验证码获取区分app和admin
  • 修复: 初始化数据,指定id插入不生效问题
  • 修复: 后台人员查询列表字段关联错误

v7.1.2(2024-08-04) ​

  • 新增: 支持postgresql
  • 新增: 忽略记录请求日志url配置
  • 新增: app端手机密码登录和手机验证码登录
  • 调整: 鉴权调整兼容app端
  • 调整: 优化插件过大加载慢问题,移除插件jar文件落库
  • 修复: refreshToken可以当token使用问题

v7.1.1(2024-07-15) ​

  • 新增 Ai 自动编码功能,简单功能零代码实现;
  • 新增后台扩展插件,如文件上传、支付、短信等功能可以通过安装插件的方式添加;

v7.1.0(2024-06-27) ​

  • 升级到 Springboot3.x;
  • 升级所有相关依赖到最新;
  • 跟进Nodejs 版相关功能;
  • 优化若干问题;
',12)]))}const m=e(r,[["render",o]]);export{p as __pageData,m as default}; diff --git a/.vitepress/dist/assets/src_todo_update.md.C-VVOl5_.lean.js b/.vitepress/dist/assets/src_todo_update.md.C-VVOl5_.lean.js new file mode 100644 index 0000000..5bd6b32 --- /dev/null +++ b/.vitepress/dist/assets/src_todo_update.md.C-VVOl5_.lean.js @@ -0,0 +1 @@ +import{_ as e,a as l,o as i,ah as t}from"./chunks/framework.BKXlU_Nx.js";const p=JSON.parse('{"title":"更新","description":"","frontmatter":{},"headers":[],"relativePath":"src/todo/update.md","filePath":"src/todo/update.md","lastUpdated":1744512083000}'),r={name:"src/todo/update.md"};function o(h,a,n,d,s,c){return i(),l("div",null,a[0]||(a[0]=[t("",12)]))}const m=e(r,[["render",o]]);export{p as __pageData,m as default}; diff --git a/.vitepress/dist/assets/src_todo_update.md.DUbMUQW8.js b/.vitepress/dist/assets/src_todo_update.md.DUbMUQW8.js deleted file mode 100644 index 8934e1b..0000000 --- a/.vitepress/dist/assets/src_todo_update.md.DUbMUQW8.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,a as e,o as l,aj as i}from"./chunks/framework.BjhQB2K5.js";const _=JSON.parse('{"title":"更新","description":"","frontmatter":{},"headers":[],"relativePath":"src/todo/update.md","filePath":"src/todo/update.md","lastUpdated":1744512083000}'),t={name:"src/todo/update.md"},r=i('

更新 ​

因为有你们的支持,cool-admin 会持续不断地更新,如果方便请点下 Star,这将会给我们带来更多的动力!!!

v8.0.0(2025-04-13) ​

  • 新增: 支持多租户,全局动态注入查询条件详情
  • 新增: 支持多语言,基于大模型自动翻译,无需更改原有代码详情
  • 优化: 响应类型封装优化 by @ximu-tao
  • 升级: 升级autotable和mybatis-flex版本,涉及包结构变更 com.tangzc.autotable -> org.dromara.autotable
  • 升级: AI 自动编码(基于DeepSeek R1)

v7.1.3(2024-08-25) ​

  • 新增: list和page支持关联查询,支持自定义返回结果类型,并可以在init方法中初始化返回字段类型及数据组装函数定义(参考:控制器)
  • 新增: 分布式ID生成组件(参考:分布式ID)
  • 新增: 锁工具(参考:锁工具)
  • 新增: 防重提交注解(参考:防重提交)
  • 调整: 缓存数据模板(参考:缓存)
  • 调整: 优化eps解析规则 (参考:解析规则)
  • 调整: 优化角色修改循环单个处理为批量处理,并异步进行刷新用户权限
  • 调整: 图形验证码获取区分app和admin
  • 修复: 初始化数据,指定id插入不生效问题
  • 修复: 后台人员查询列表字段关联错误

v7.1.2(2024-08-04) ​

  • 新增: 支持postgresql
  • 新增: 忽略记录请求日志url配置
  • 新增: app端手机密码登录和手机验证码登录
  • 调整: 鉴权调整兼容app端
  • 调整: 优化插件过大加载慢问题,移除插件jar文件落库
  • 修复: refreshToken可以当token使用问题

v7.1.1(2024-07-15) ​

  • 新增 Ai 自动编码功能,简单功能零代码实现;
  • 新增后台扩展插件,如文件上传、支付、短信等功能可以通过安装插件的方式添加;

v7.1.0(2024-06-27) ​

  • 升级到 Springboot3.x;
  • 升级所有相关依赖到最新;
  • 跟进Nodejs 版相关功能;
  • 优化若干问题;
',12),o=[r];function h(s,c,n,d,u,p){return l(),e("div",null,o)}const f=a(t,[["render",h]]);export{_ as __pageData,f as default}; diff --git a/.vitepress/dist/assets/src_todo_update.md.DUbMUQW8.lean.js b/.vitepress/dist/assets/src_todo_update.md.DUbMUQW8.lean.js deleted file mode 100644 index dcef672..0000000 --- a/.vitepress/dist/assets/src_todo_update.md.DUbMUQW8.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,a as e,o as l,aj as i}from"./chunks/framework.BjhQB2K5.js";const _=JSON.parse('{"title":"更新","description":"","frontmatter":{},"headers":[],"relativePath":"src/todo/update.md","filePath":"src/todo/update.md","lastUpdated":1744512083000}'),t={name:"src/todo/update.md"},r=i("",12),o=[r];function h(s,c,n,d,u,p){return l(),e("div",null,o)}const f=a(t,[["render",h]]);export{_ as __pageData,f as default}; diff --git a/.vitepress/dist/hashmap.json b/.vitepress/dist/hashmap.json index 0c1a3f0..eeb1c42 100644 --- a/.vitepress/dist/hashmap.json +++ b/.vitepress/dist/hashmap.json @@ -1 +1 @@ -{"index.md":"Dsd7aigo","readme.md":"Rd2D_BZq","src_about_index.md":"-unb0L2u","src_guide_ai.md":"aIl2n3N7","src_guide_cache.md":"DYexoE7d","src_guide_controller.md":"ChJ_NED0","src_guide_db.md":"CH-r16iF","src_guide_deploy.md":"CVc1dXEU","src_guide_dev.md":"DM1UjwvK","src_guide_dir.md":"Bywk12Mo","src_guide_exception.md":"1HCd76m1","src_guide_flow.md":"DMDsOCkF","src_guide_i18n.md":"D4ikqxxm","src_guide_initdata.md":"BhdPvNop","src_guide_lock.md":"C8JTDlsP","src_guide_norepeatsubmit.md":"CvFjLc1r","src_guide_plugin.md":"DSQp6REO","src_guide_quick.md":"g_DIbvkh","src_guide_recordlog.md":"B0w4IZH7","src_guide_security.md":"BFmZQZP9","src_guide_service.md":"CokY9neI","src_guide_swagger.md":"CCfA6TBH","src_guide_tenant.md":"CP_z92JB","src_guide_uniqueidgen.md":"BNiKKfQz","src_guide_upload.md":"D-dQqFKU","src_introduce_index.md":"BaUz4Xtw","src_introduce_show.md":"Ck0DuCIX","src_introduce_src.md":"UlNmfnNt","src_question_common.md":"Caojqqth","src_todo_plan.md":"pGnBM6_r","src_todo_update.md":"DUbMUQW8"} +{"index.md":"rtwKissJ","readme.md":"B6Ga_CkE","src_about_index.md":"C_NFm4P1","src_guide_ai.md":"Cpqw5Ts-","src_guide_cache.md":"CngBGKWx","src_guide_controller.md":"Bnr5Inb1","src_guide_db.md":"Dcqu3WUK","src_guide_deploy.md":"C0fiYODu","src_guide_dev.md":"Cdra16SF","src_guide_dir.md":"XwivTI0b","src_guide_exception.md":"CQgM0zu7","src_guide_flow.md":"d_l3AjDo","src_guide_i18n.md":"DKQqA29O","src_guide_initdata.md":"CPwPPPgb","src_guide_lock.md":"B34nqu5N","src_guide_norepeatsubmit.md":"DIyr__Bf","src_guide_plugin.md":"CyRIknxk","src_guide_quick.md":"DotkVVeu","src_guide_recordlog.md":"Ct7SggAu","src_guide_security.md":"B2rQeGT7","src_guide_service.md":"BSPrcE3u","src_guide_swagger.md":"B2QMWjN_","src_guide_tenant.md":"A1tSE7xk","src_guide_uniqueidgen.md":"2lkhYWAH","src_guide_upload.md":"90xW7PAK","src_introduce_index.md":"DIqLm5J3","src_introduce_show.md":"Dy5qurfj","src_introduce_src.md":"BO7rlY2n","src_question_common.md":"BqW7OjdF","src_todo_plan.md":"CISv3gFT","src_todo_update.md":"C-VVOl5_"} diff --git a/.vitepress/dist/index.html b/.vitepress/dist/index.html index 9aa6cfd..02060fc 100644 --- a/.vitepress/dist/index.html +++ b/.vitepress/dist/index.html @@ -9,17 +9,17 @@ - + - - - + + + -
Skip to content

Cool Admin(Java版)一个很酷的后台管理系统开发框架

开源免费、Ai编码、流程编排、扩展插件、模块化

cool-admin
- +
Skip to content

Cool Admin(Java版)一个很酷的后台管理系统开发框架

开源免费、Ai编码、流程编排、扩展插件、模块化

cool-admin
+ \ No newline at end of file diff --git a/.vitepress/dist/src/about/index.html b/.vitepress/dist/src/about/index.html index f5c5928..12dafc7 100644 --- a/.vitepress/dist/src/about/index.html +++ b/.vitepress/dist/src/about/index.html @@ -9,17 +9,17 @@ - + - - - + + + -
Skip to content

交流合作 ​

如果我们的项目对你有用,欢迎加入我们大家庭一起讨论,共创一些美好的事情。

微信 ​

扫一扫加入微信开发交流群

抖音 ​

主要是做一些技术教程、技术分享、框架更新、插件分享等内容。你可以在这边了解到一些关于我们框架的最新动态,还可以了解到一些前沿的技术,特别是跟 Ai 相关的,有兴趣的可以关注我们。

B 站 ​

COOL 团队哔哩哔哩官方账户

公众号 ​

COOL 的一些最新资讯、技术分享、框架更新、插件分享等

- +
Skip to content

交流合作 ​

如果我们的项目对你有用,欢迎加入我们大家庭一起讨论,共创一些美好的事情。

微信 ​

扫一扫加入微信开发交流群

抖音 ​

主要是做一些技术教程、技术分享、框架更新、插件分享等内容。你可以在这边了解到一些关于我们框架的最新动态,还可以了解到一些前沿的技术,特别是跟 Ai 相关的,有兴趣的可以关注我们。

B 站 ​

COOL 团队哔哩哔哩官方账户

公众号 ​

COOL 的一些最新资讯、技术分享、框架更新、插件分享等

+ \ No newline at end of file diff --git a/.vitepress/dist/src/guide/ai.html b/.vitepress/dist/src/guide/ai.html index ee3d9b3..5f73e74 100644 --- a/.vitepress/dist/src/guide/ai.html +++ b/.vitepress/dist/src/guide/ai.html @@ -9,18 +9,18 @@ - + - - + + - + - - + + \ No newline at end of file diff --git a/.vitepress/dist/src/guide/cache.html b/.vitepress/dist/src/guide/cache.html index 1d725a8..eaac07e 100644 --- a/.vitepress/dist/src/guide/cache.html +++ b/.vitepress/dist/src/guide/cache.html @@ -9,16 +9,16 @@ - + - - - + + + -
Skip to content

缓存 ​

为了不过多依赖环境,框架自带基于 springCache 默认实现了两种缓存

  • caffeine 无需额外安装软件,由 Ben Manes 开发的一个 Java 缓存库,旨在提供高性能、高效的缓存解决方案。
  • redis 需安装 redis,提供了一种高效且可靠的解决方案,能够显著提升应用程序的性能和响应速度。
yaml
spring:
+    
Skip to content

缓存 ​

为了不过多依赖环境,框架自带基于 springCache 默认实现了两种缓存

  • caffeine 无需额外安装软件,由 Ben Manes 开发的一个 Java 缓存库,旨在提供高性能、高效的缓存解决方案。
  • redis 需安装 redis,提供了一种高效且可靠的解决方案,能够显著提升应用程序的性能和响应速度。
yaml
spring:
   # caffeine 缓存
   cache:
     type: caffeine
@@ -67,7 +67,7 @@
             return JSONUtil.parseObj(result).get("result");
         });
 }
- + \ No newline at end of file diff --git a/.vitepress/dist/src/guide/controller.html b/.vitepress/dist/src/guide/controller.html index 5e0395c..b28006e 100644 --- a/.vitepress/dist/src/guide/controller.html +++ b/.vitepress/dist/src/guide/controller.html @@ -9,16 +9,16 @@ - + - - - + + + -
Skip to content

控制器 ​

所有的 controller 都继承自 BaseController,该父类已经实现了以下六个基础方法:add、delete、update、page、list、info,可以大大简化代码,使得 controller 更加简洁。

示例 ​

java
@Tag(name = "测试CURD", description = "测试CURD")
+    
Skip to content

控制器 ​

所有的 controller 都继承自 BaseController,该父类已经实现了以下六个基础方法:add、delete、update、page、list、info,可以大大简化代码,使得 controller 更加简洁。

示例 ​

java
@Tag(name = "测试CURD", description = "测试CURD")
 @CoolRestController(value = "/cool", api = {"add", "delete", "update", "page", "list", "info"})
 public class AdminDemoInfoController extends BaseController<DemoService, DemoEntity> {
     @Override
@@ -138,7 +138,7 @@
         return info;
     }
 }
- + \ No newline at end of file diff --git a/.vitepress/dist/src/guide/db.html b/.vitepress/dist/src/guide/db.html index 098819c..fa4681c 100644 --- a/.vitepress/dist/src/guide/db.html +++ b/.vitepress/dist/src/guide/db.html @@ -9,17 +9,17 @@ - + - - - + + + -
Skip to content

数据库 ​

Cool Admin 集成了比 Mybatis-Plus 更加强大的,Mybatis-Flex,详细用法请查看 Mybatis-Flex 官网文档

主要特点;

  • 更轻量:除了 MyBatis 本身,再无任何第三方依赖,因此会带来更高的自主性、把控性和稳定性。在任何一个系统中,依赖越多,稳定性越差。

  • 更灵活:提供了非常灵活的 QueryWrapper,支持关联查询、多表查询、多主键、逻辑删除、乐观锁更新、数据填充、数据脱敏等等。

  • 高性能:通过独特的架构,没有任何 MyBatis 拦截器、在 SQL 执行的过程中,没有任何的 SQL Parse,因此会带来指数级的性能增长。

功能对比 ​

功能或特点MyBatis-FlexMyBatis-PlusFluent-MyBatis
对 entity 的基本增删改查✅✅✅
分页查询✅✅✅
分页查询之总量缓存✅✅❌
分页查询无 SQL 解析设计(更轻量,及更高性能)✅❌✅
多表查询: from 多张表✅❌❌
多表查询: left join、inner join 等等✅❌✅
多表查询: union,union all✅❌✅
单主键配置✅✅✅
多种 id 生成策略✅✅✅
支持多主键、复合主键✅❌❌
字段的 typeHandler 配置✅✅✅
除了 MyBatis,无其他第三方依赖(更轻量)✅❌❌
QueryWrapper 是否支持在微服务项目下进行 RPC 传输✅❌未知
逻辑删除✅✅✅
乐观锁✅✅✅
SQL 审计✅❌❌
数据填充✅✅✅
数据脱敏✅✔️ (收费)❌
字段权限✅✔️ (收费)❌
字段加密✅✔️ (收费)❌
字典回写✅✔️ (收费)❌
Db + Row✅❌❌
Entity 监听✅❌❌
多数据源支持✅借助其他框架或收费❌
多数据源是否支持 Spring 的事务管理,比如 @Transactional 和 TransactionTemplate 等✅❌❌
多数据源是否支持 "非 Spring" 项目✅❌❌
多租户✅✅❌
动态表名✅✅❌
动态 Schema✅❌❌

注意

以上内容来自第三方相关产品的官方文档或第三方平台,若有错误,欢迎纠正。

支持数据库 ​

MyBatis-Flex 支持的数据库类型,如下表格所示,我们还可以通过自定义方言的方式,持续添加更多的数据库支持。

数据库描述
mysqlMySQL 数据库
mariadbMariaDB 数据库
oracleOracle11g 及以下数据库
oracle12cOracle12c 及以上数据库
db2DB2 数据库
H2H2 数据库
hsqlHSQL 数据库
sqliteSQLite 数据库
postgresqlPostgreSQL 数据库
sqlserver2005SQLServer2005 数据库
sqlserverSQLServer 数据库
dm达梦数据库
xugu虚谷数据库
kingbasees人大金仓数据库
phoenixPhoenix HBase 数据库
gaussGauss 数据库
clickhouseClickHouse 数据库
gbase南大通用(华库)数据库
gbase-8s南大通用数据库 GBase 8s
oscar神通数据库
sybaseSybase ASE 数据库
OceanBaseOceanBase 数据库
FirebirdFirebird 数据库
derbyDerby 数据库
highgo瀚高数据库
cubridCUBRID 数据库
goldilocksGOLDILOCKS 数据库
csiidbCSIIDB 数据库
hanaSAP_HANA 数据库
impalaImpala 数据库
verticaVertica 数据库
xcloud行云数据库
redshift亚马逊 redshift 数据库
openGauss华为 openGauss 数据库
TDengineTDengine 数据库
informixInformix 数据库
greenplumGreenplum 数据库
uxdb优炫数据库
DorisDoris 数据库
Hive SQLHive 数据库
lealoneLealone 数据库
sinodb星瑞格数据库

注意

虽然 Mybatis-flex 支持很多数据库,但是 Cool Admin 是具体的业务框架,无法做到全部支持,那样工作量太大了。但是它为我们提供了改造的可能,理论上你只需修改一些不兼容的代码就可以正常运行了。

除了 Mysql,我们正在适配:PostgreSQL、Sqlite

自动建表 ​

根据 Java 实体,自动映射成数据库的表结构。

用过 JPA 的都知道,JPA 有一项重要的能力就是表结构自动维护,这让我们可以可以专注于业务逻辑和实体,而不需要关心数据库的表、列的配置,尤其是开发过程中频繁的新增表及变更表结构,节省了大量手动工作。

框架集成了Auto Table,可以自动创建表,并且支持表字段的修改。

注意

切勿在生产环境开启自动建表功能,因为这可能会造成数据丢失。

- +
Skip to content

数据库 ​

Cool Admin 集成了比 Mybatis-Plus 更加强大的,Mybatis-Flex,详细用法请查看 Mybatis-Flex 官网文档

主要特点;

  • 更轻量:除了 MyBatis 本身,再无任何第三方依赖,因此会带来更高的自主性、把控性和稳定性。在任何一个系统中,依赖越多,稳定性越差。

  • 更灵活:提供了非常灵活的 QueryWrapper,支持关联查询、多表查询、多主键、逻辑删除、乐观锁更新、数据填充、数据脱敏等等。

  • 高性能:通过独特的架构,没有任何 MyBatis 拦截器、在 SQL 执行的过程中,没有任何的 SQL Parse,因此会带来指数级的性能增长。

功能对比 ​

功能或特点MyBatis-FlexMyBatis-PlusFluent-MyBatis
对 entity 的基本增删改查✅✅✅
分页查询✅✅✅
分页查询之总量缓存✅✅❌
分页查询无 SQL 解析设计(更轻量,及更高性能)✅❌✅
多表查询: from 多张表✅❌❌
多表查询: left join、inner join 等等✅❌✅
多表查询: union,union all✅❌✅
单主键配置✅✅✅
多种 id 生成策略✅✅✅
支持多主键、复合主键✅❌❌
字段的 typeHandler 配置✅✅✅
除了 MyBatis,无其他第三方依赖(更轻量)✅❌❌
QueryWrapper 是否支持在微服务项目下进行 RPC 传输✅❌未知
逻辑删除✅✅✅
乐观锁✅✅✅
SQL 审计✅❌❌
数据填充✅✅✅
数据脱敏✅✔️ (收费)❌
字段权限✅✔️ (收费)❌
字段加密✅✔️ (收费)❌
字典回写✅✔️ (收费)❌
Db + Row✅❌❌
Entity 监听✅❌❌
多数据源支持✅借助其他框架或收费❌
多数据源是否支持 Spring 的事务管理,比如 @Transactional 和 TransactionTemplate 等✅❌❌
多数据源是否支持 "非 Spring" 项目✅❌❌
多租户✅✅❌
动态表名✅✅❌
动态 Schema✅❌❌

注意

以上内容来自第三方相关产品的官方文档或第三方平台,若有错误,欢迎纠正。

支持数据库 ​

MyBatis-Flex 支持的数据库类型,如下表格所示,我们还可以通过自定义方言的方式,持续添加更多的数据库支持。

数据库描述
mysqlMySQL 数据库
mariadbMariaDB 数据库
oracleOracle11g 及以下数据库
oracle12cOracle12c 及以上数据库
db2DB2 数据库
H2H2 数据库
hsqlHSQL 数据库
sqliteSQLite 数据库
postgresqlPostgreSQL 数据库
sqlserver2005SQLServer2005 数据库
sqlserverSQLServer 数据库
dm达梦数据库
xugu虚谷数据库
kingbasees人大金仓数据库
phoenixPhoenix HBase 数据库
gaussGauss 数据库
clickhouseClickHouse 数据库
gbase南大通用(华库)数据库
gbase-8s南大通用数据库 GBase 8s
oscar神通数据库
sybaseSybase ASE 数据库
OceanBaseOceanBase 数据库
FirebirdFirebird 数据库
derbyDerby 数据库
highgo瀚高数据库
cubridCUBRID 数据库
goldilocksGOLDILOCKS 数据库
csiidbCSIIDB 数据库
hanaSAP_HANA 数据库
impalaImpala 数据库
verticaVertica 数据库
xcloud行云数据库
redshift亚马逊 redshift 数据库
openGauss华为 openGauss 数据库
TDengineTDengine 数据库
informixInformix 数据库
greenplumGreenplum 数据库
uxdb优炫数据库
DorisDoris 数据库
Hive SQLHive 数据库
lealoneLealone 数据库
sinodb星瑞格数据库

注意

虽然 Mybatis-flex 支持很多数据库,但是 Cool Admin 是具体的业务框架,无法做到全部支持,那样工作量太大了。但是它为我们提供了改造的可能,理论上你只需修改一些不兼容的代码就可以正常运行了。

除了 Mysql,我们正在适配:PostgreSQL、Sqlite

自动建表 ​

根据 Java 实体,自动映射成数据库的表结构。

用过 JPA 的都知道,JPA 有一项重要的能力就是表结构自动维护,这让我们可以可以专注于业务逻辑和实体,而不需要关心数据库的表、列的配置,尤其是开发过程中频繁的新增表及变更表结构,节省了大量手动工作。

框架集成了Auto Table,可以自动创建表,并且支持表字段的修改。

注意

切勿在生产环境开启自动建表功能,因为这可能会造成数据丢失。

+ \ No newline at end of file diff --git a/.vitepress/dist/src/guide/deploy.html b/.vitepress/dist/src/guide/deploy.html index 0ff57cd..785880e 100644 --- a/.vitepress/dist/src/guide/deploy.html +++ b/.vitepress/dist/src/guide/deploy.html @@ -9,16 +9,16 @@ - + - - - + + + -
Skip to content

项目部署 ​

🔥 低价云服务器推荐

注意

以下教程以 Nodejs 版本为例,Java 版本的也可以参考

普通方式 ​

本部署教程以 node 版本+宝塔为例,其他部署方式也可以参考这个流程。

cool-admin 部署视频教程

1、部署流程(以宝塔为例): ​

  1. 拉取前后端代码;
  2. 本地配置完数据库运行,等待数据库初始化完成;
  3. 打包前后端代码,打包之前注意配置生产环境的数据库配置config/config.prod.ts,查看 midway 官方多环境配置文档;
  4. 服务器环境准备,安装宝塔、mysql、nodejs、nginx、pnpm 等;
  5. 上传前后端代码到服务器;
  6. 安装依赖,编译打包后端服务,启动服务;
  7. 配置 nginx 反向代理;
  8. 访问域名,如果一切正常,恭喜你,部署成功!

注意

  • 线上的数据库是需要本地传上去的,安全考虑生产环境不会自动初始化数据库;
  • 前端访问后端的接口地址默认是前端根地址+/api,所以需要配置 nginx 反向代理/api 到后端服务;

2、推荐使用 pnpm 安装依赖 ​

pnpm 官网

安装

bash
npm install -g pnpm

配置淘宝镜像

bash
pnpm config set registry https://registry.npmmirror.com

3、PM2 运行后端服务 ​

shell
// 命令行安装 pm2
+    
Skip to content

项目部署 ​

🔥 低价云服务器推荐

注意

以下教程以 Nodejs 版本为例,Java 版本的也可以参考

普通方式 ​

本部署教程以 node 版本+宝塔为例,其他部署方式也可以参考这个流程。

cool-admin 部署视频教程

1、部署流程(以宝塔为例): ​

  1. 拉取前后端代码;
  2. 本地配置完数据库运行,等待数据库初始化完成;
  3. 打包前后端代码,打包之前注意配置生产环境的数据库配置config/config.prod.ts,查看 midway 官方多环境配置文档;
  4. 服务器环境准备,安装宝塔、mysql、nodejs、nginx、pnpm 等;
  5. 上传前后端代码到服务器;
  6. 安装依赖,编译打包后端服务,启动服务;
  7. 配置 nginx 反向代理;
  8. 访问域名,如果一切正常,恭喜你,部署成功!

注意

  • 线上的数据库是需要本地传上去的,安全考虑生产环境不会自动初始化数据库;
  • 前端访问后端的接口地址默认是前端根地址+/api,所以需要配置 nginx 反向代理/api 到后端服务;

2、推荐使用 pnpm 安装依赖 ​

pnpm 官网

安装

bash
npm install -g pnpm

配置淘宝镜像

bash
pnpm config set registry https://registry.npmmirror.com

3、PM2 运行后端服务 ​

shell
// 命令行安装 pm2
 npm install pm2 -g

常用命令

shell
// 启动一个服务
 pm2 start
 // 列出当前的服务
@@ -111,7 +111,7 @@
 
 // 运行后端
 docker run --network cool -p 80:80 --name vue cool-admin-vue:1.0

注意事项 ​

docker 部署,建议将缓存换成 redis,文件上传换成云存储,如:oss,防止操作不当导致的数据丢失。

- + \ No newline at end of file diff --git a/.vitepress/dist/src/guide/dev.html b/.vitepress/dist/src/guide/dev.html index 837f009..ec9b8d3 100644 --- a/.vitepress/dist/src/guide/dev.html +++ b/.vitepress/dist/src/guide/dev.html @@ -9,17 +9,17 @@ - + - - + + - + -
Skip to content

开发方式 ​

Cool Admin 推荐两种快速开发方式,可以大大节省开发时间,降低开发成本,提高开发效率。

Ai 全自动 ​

零代码开发(非低代码),通过微调大模型学习框架特有写法,实现简单功能从 Api 接口到前端页面的一键生成

开发过程只需点一点,调一调,不用写一行代码

B 站视频教程

半自动 ​

只需三步,创建实体类生成表,生成后端代码,生成前端代码

  • 编写实体类,重启生成表;
  • 运行代码生成器,生成 Service、Controller 等

文件:src/test/java/com/cool/CoolAdminJavaApplicationTests.java

java
public class CoolCodeGeneratorTest {
+    
Skip to content

开发方式 ​

Cool Admin 推荐两种快速开发方式,可以大大节省开发时间,降低开发成本,提高开发效率。

Ai 全自动 ​

零代码开发(非低代码),通过微调大模型学习框架特有写法,实现简单功能从 Api 接口到前端页面的一键生成

开发过程只需点一点,调一调,不用写一行代码

B 站视频教程

半自动 ​

只需三步,创建实体类生成表,生成后端代码,生成前端代码

  • 编写实体类,重启生成表;
  • 运行代码生成器,生成 Service、Controller 等

文件:src/test/java/com/cool/CoolAdminJavaApplicationTests.java

java
public class CoolCodeGeneratorTest {
     public static void main(String[] args) {
         CodeGenerator codeGenerator = new CodeGenerator();
         codeGenerator.init();
@@ -35,7 +35,7 @@
         codeGenerator.service(codeModel);
     }
 }
  • 自动生成前端页面,通过管理后台菜单管理的快速创建即可生成

Ui 组件会根据字段智能选择

- + \ No newline at end of file diff --git a/.vitepress/dist/src/guide/dir.html b/.vitepress/dist/src/guide/dir.html index 7af1eaa..3cc0ac1 100644 --- a/.vitepress/dist/src/guide/dir.html +++ b/.vitepress/dist/src/guide/dir.html @@ -9,16 +9,16 @@ - + - - - + + + -
Skip to content

目录结构 ​

项目按照模块化的方式组织,每个模块都有其特有的功能,清晰明了便于管理。

结构 ​

.
+    
Skip to content

目录结构 ​

项目按照模块化的方式组织,每个模块都有其特有的功能,清晰明了便于管理。

结构 ​

.
 main
 ├─ java
 │  ├─ com.cool
@@ -43,7 +43,7 @@
    │  └─ data
    │     └─ db         初始化数据json文件
    └─ mapper           mapper xml 文件

提示

  • core 为核心模块,包括一些核心的组件工具
  • modules 为业务模块,业务代码放在这边,在新增功能模块时,按上面的包结构新增即可

    比如你有一个订单管理的模块,在 modules 新增一个 order 包,在 order 包下创建 controller、entity、mapper、service 等包

- + \ No newline at end of file diff --git a/.vitepress/dist/src/guide/exception.html b/.vitepress/dist/src/guide/exception.html index d66d9bd..b0c6d7b 100644 --- a/.vitepress/dist/src/guide/exception.html +++ b/.vitepress/dist/src/guide/exception.html @@ -9,16 +9,16 @@ - + - - - + + + -
Skip to content

统一异常处理 ​

提供了简化的业务异常抛出工具

  • CoolPreconditions.check(check != null, "用户名已存在");

异常统一捕获 ​

java
@RestControllerAdvice
+    
-    
+    
     
   
 
\ No newline at end of file
diff --git a/.vitepress/dist/src/guide/flow.html b/.vitepress/dist/src/guide/flow.html
index 9be0ce9..046d9a7 100644
--- a/.vitepress/dist/src/guide/flow.html
+++ b/.vitepress/dist/src/guide/flow.html
@@ -9,18 +9,18 @@
     
     
     
-    
+    
     
-    
-    
+    
+    
     
-    
+    
     
     
   
   
-    
Skip to content

Ai 流程编排 ​

视频演示

点击前往插件市场下载安装

开发 Ai 应用必备!!!

随着 Ai 的火热,很多应用希望接入 Ai 的能力,但是每次都是用代码手搓,容易把我们累死,而是也非常不灵活。

于是我们面向开发者和软件开发公司,做了一个 Ai 流程编排功能,结合知识库,通过拖动配置,很容易就能完成一个 Ai 的核心流程。

因此如果你需要开发 Ai 相关应用,这个可能会给你带来巨大的帮助。

流程编排

- +
Skip to content

Ai 流程编排 ​

视频演示

点击前往插件市场下载安装

开发 Ai 应用必备!!!

随着 Ai 的火热,很多应用希望接入 Ai 的能力,但是每次都是用代码手搓,容易把我们累死,而是也非常不灵活。

于是我们面向开发者和软件开发公司,做了一个 Ai 流程编排功能,结合知识库,通过拖动配置,很容易就能完成一个 Ai 的核心流程。

因此如果你需要开发 Ai 相关应用,这个可能会给你带来巨大的帮助。

流程编排

+ \ No newline at end of file diff --git a/.vitepress/dist/src/guide/i18n.html b/.vitepress/dist/src/guide/i18n.html index 38d8d85..24fc011 100644 --- a/.vitepress/dist/src/guide/i18n.html +++ b/.vitepress/dist/src/guide/i18n.html @@ -9,20 +9,20 @@ - + - - - + + + -
Skip to content

国际化多语言(v8.0新增) ​

i18n(Internationalization 的缩写,首末字符 i 和 n 之间有 18 个字母)是软件国际化的标准缩写。它是指让软件支持多种语言和地区的功能,使得同一个软件可以面向不同语言地区的用户,显示相应的语言界面。

随着互联网的发展,越来越多的企业开始走向国际化,多语言的支持已经成为了一个必备的功能。Cool Admin 也对此做了支持。

实现 ​

多语言是需要前后端共同支持的,前端请前往前端文档查看

与其它实现方案不同的是,Cool Admin前后端的多语言都是基于大模型翻译的(比传统机翻更加准确),无需手动配置,只要开启就能自动翻译,而且不需要改变任何原有代码。

以前该怎么写还是怎么写!!!

使用 ​

1、引入插件 在官网下载并安装国际化多语言插件

安装后,框架就会自动扫描并翻译成对应的语言。

当你在控制台看到这样的输出,则代表成功

console
// 翻译中
+    
Skip to content

国际化多语言(v8.0新增) ​

i18n(Internationalization 的缩写,首末字符 i 和 n 之间有 18 个字母)是软件国际化的标准缩写。它是指让软件支持多种语言和地区的功能,使得同一个软件可以面向不同语言地区的用户,显示相应的语言界面。

随着互联网的发展,越来越多的企业开始走向国际化,多语言的支持已经成为了一个必备的功能。Cool Admin 也对此做了支持。

实现 ​

多语言是需要前后端共同支持的,前端请前往前端文档查看

与其它实现方案不同的是,Cool Admin前后端的多语言都是基于大模型翻译的(比传统机翻更加准确),无需手动配置,只要开启就能自动翻译,而且不需要改变任何原有代码。

以前该怎么写还是怎么写!!!

使用 ​

1、引入插件 在官网下载并安装国际化多语言插件

安装后,框架就会自动扫描并翻译成对应的语言。

当你在控制台看到这样的输出,则代表成功

console
// 翻译中
 / i18n translate...
 // 翻译成功
-✅国际化 翻译 成功!!!

2、实现原理 只要开启并配置了国际化,在开发环境下重启,框架就会自动扫描菜单、字典、异常消息(CoolPreconditions.check...),并调用大模型对其进行翻译

翻译完成之后会默认在路径assets/i18n下生成对应种类的语言文件,如果这个文件存在

则该种类的国际化将不会进行翻译,也就是后续你有新增相关的内容,要让其再次翻译,得对应地删除相应的文件。

3、语言配置对照表

  • 简体中文(zh-cn)
  • 美国英语(en)
  • 阿塞拜疆语(az)
  • 德语(de)
  • 葡萄牙语(pt)
  • 西班牙语(es)
  • 丹麦语(da)
  • 法语(fr)
  • 挪威语(nb-NO)
  • 繁体中文(zh-tw)
  • 意大利语(it)
  • 韩语(ko)
  • 日语(ja)
  • 荷兰语(nl)
  • 越南语(vi)
  • 俄语(ru)
  • 土耳其语(tr)
  • 巴西葡萄牙语(pt-br)
  • 波斯语(fa)
  • 泰语(th)
  • 印度尼西亚语(id)
  • 保加利亚语(bg)
  • 普什图语(pa)
  • 波兰语(pl)
  • 芬兰语(fi)
  • 瑞典语(sv)
  • 希腊语(el)
  • 斯洛伐克语(sk)
  • 加泰罗尼亚语(ca)
  • 捷克语(cs)
  • 乌克兰语(uk)
  • 土库曼语(tk)
  • 泰米尔语(ta)
  • 拉脱维亚语(lv)
  • 南非荷兰语(af)
  • 爱沙尼亚语(et)
  • 斯洛文尼亚语(sl)
  • 阿拉伯语(ar)
  • 希伯来语(he)
  • 立陶宛语(lt)
  • 蒙古语(mn)
  • 哈萨克语(kk)
  • 匈牙利语(hu)
  • 罗马尼亚语(ro)
  • 库尔德语(ku)
  • 库尔德语 (ckb)
  • 维吾尔语 (ug-cn)
  • 高棉语 (km)
  • 塞尔维亚语 (sr)
  • 巴斯克语 (eu)
  • 吉尔吉斯语 (ky)
  • 亚美尼亚语 (hy-am)
  • 克罗地亚语(hr)
  • 世界语 (eo)
  • 孟加拉语 (bn)
  • 马来语 (ms)
- +✅国际化 翻译 成功!!!

2、实现原理 只要开启并配置了国际化,在开发环境下重启,框架就会自动扫描菜单、字典、异常消息(CoolPreconditions.check...),并调用大模型对其进行翻译

翻译完成之后会默认在路径assets/i18n下生成对应种类的语言文件,如果这个文件存在

则该种类的国际化将不会进行翻译,也就是后续你有新增相关的内容,要让其再次翻译,得对应地删除相应的文件。

3、语言配置对照表

  • 简体中文(zh-cn)
  • 美国英语(en)
  • 阿塞拜疆语(az)
  • 德语(de)
  • 葡萄牙语(pt)
  • 西班牙语(es)
  • 丹麦语(da)
  • 法语(fr)
  • 挪威语(nb-NO)
  • 繁体中文(zh-tw)
  • 意大利语(it)
  • 韩语(ko)
  • 日语(ja)
  • 荷兰语(nl)
  • 越南语(vi)
  • 俄语(ru)
  • 土耳其语(tr)
  • 巴西葡萄牙语(pt-br)
  • 波斯语(fa)
  • 泰语(th)
  • 印度尼西亚语(id)
  • 保加利亚语(bg)
  • 普什图语(pa)
  • 波兰语(pl)
  • 芬兰语(fi)
  • 瑞典语(sv)
  • 希腊语(el)
  • 斯洛伐克语(sk)
  • 加泰罗尼亚语(ca)
  • 捷克语(cs)
  • 乌克兰语(uk)
  • 土库曼语(tk)
  • 泰米尔语(ta)
  • 拉脱维亚语(lv)
  • 南非荷兰语(af)
  • 爱沙尼亚语(et)
  • 斯洛文尼亚语(sl)
  • 阿拉伯语(ar)
  • 希伯来语(he)
  • 立陶宛语(lt)
  • 蒙古语(mn)
  • 哈萨克语(kk)
  • 匈牙利语(hu)
  • 罗马尼亚语(ro)
  • 库尔德语(ku)
  • 库尔德语 (ckb)
  • 维吾尔语 (ug-cn)
  • 高棉语 (km)
  • 塞尔维亚语 (sr)
  • 巴斯克语 (eu)
  • 吉尔吉斯语 (ky)
  • 亚美尼亚语 (hy-am)
  • 克罗地亚语(hr)
  • 世界语 (eo)
  • 孟加拉语 (bn)
  • 马来语 (ms)
+ \ No newline at end of file diff --git a/.vitepress/dist/src/guide/initData.html b/.vitepress/dist/src/guide/initData.html index ea9ad2d..ff2168d 100644 --- a/.vitepress/dist/src/guide/initData.html +++ b/.vitepress/dist/src/guide/initData.html @@ -9,16 +9,16 @@ - + - - - + + + -
Skip to content

数据初始化 ​

有些功能模块上线时,需要初始化一些数据

可以在 resources 下的 cool/data/db 目录创建 demo.json 文件

json 格式如下,demo 为表的名称,里面是个数组,数组里可以包含多个对象,每个对象中的 key 为表的字段,value 为对应的值

规范:实体需以 Entity 结尾

json
{
+    
Skip to content

数据初始化 ​

有些功能模块上线时,需要初始化一些数据

可以在 resources 下的 cool/data/db 目录创建 demo.json 文件

json 格式如下,demo 为表的名称,里面是个数组,数组里可以包含多个对象,每个对象中的 key 为表的字段,value 为对应的值

规范:实体需以 Entity 结尾

json
{
   "demo": [
     {
       "keyName": "rich",
@@ -51,7 +51,7 @@
     }
     //......
 }

注意:如果同一张表历史已经有初始化过数据,在某个版本需要新增数据的话,要新增一个.json 文件;
比如 demoV2.json, 如果在原文件直接修改将不生效,加载成功后文件名称将被当作唯一键标识,不会重复初始化。

- + \ No newline at end of file diff --git a/.vitepress/dist/src/guide/lock.html b/.vitepress/dist/src/guide/lock.html index bc933f6..b2fb59b 100644 --- a/.vitepress/dist/src/guide/lock.html +++ b/.vitepress/dist/src/guide/lock.html @@ -9,16 +9,16 @@ - + - - - + + + -
Skip to content

锁 ​

简单锁的使用

如果项目中启用了redis,锁是基于redis 实现,否则使用 ReentrantLock

// 注入锁
+    
-    
+    
     
   
 
\ No newline at end of file
diff --git a/.vitepress/dist/src/guide/noRepeatSubmit.html b/.vitepress/dist/src/guide/noRepeatSubmit.html
index 8e275ae..f7841d2 100644
--- a/.vitepress/dist/src/guide/noRepeatSubmit.html
+++ b/.vitepress/dist/src/guide/noRepeatSubmit.html
@@ -9,16 +9,16 @@
     
     
     
-    
+    
     
-    
-    
-    
+    
+    
+    
     
     
   
   
-    
Skip to content

防重复提交 ​

基于用户维度的防重复提交,该接口需要登录鉴权

java
@Aspect
+    
Skip to content

防重复提交 ​

基于用户维度的防重复提交,该接口需要登录鉴权

java
@Aspect
 @Component
 @RequiredArgsConstructor
 public class NoRepeatSubmitAspect {
@@ -46,7 +46,7 @@
         Long couponId = requestParams.get("couponId", Long.class);
         return R.ok(marketCouponInfoService.receive(couponId, CoolSecurityUtil.getCurrentUserId()));
     }
- + \ No newline at end of file diff --git a/.vitepress/dist/src/guide/plugin.html b/.vitepress/dist/src/guide/plugin.html index d0c7d64..7bd4b4b 100644 --- a/.vitepress/dist/src/guide/plugin.html +++ b/.vitepress/dist/src/guide/plugin.html @@ -9,16 +9,16 @@ - + - - - + + + -
Skip to content

扩展插件 ​

为了丰富系统功能,我们提供了插件系统,可以通过插件的方式来扩展系统功能。

而不用一味地堆功能,导致系统臃肿。你可以自己开发插件,也可以使用别人开发的插件。

点击前往插件市场

使用插件 ​

1、安装 ​

首先下载插件包,然后在系统中安装插件包。插件包可以通过官网下载插件。

打开后台管理系统,点击左侧菜单扩展管理/插件管理,点击+按钮,选择插件包进行安装。

2、调用 ​

安装插件之后,就可以在代码中调用插件的方法了。

java
package com.cool.core.base.controller;
+    
Skip to content

扩展插件 ​

为了丰富系统功能,我们提供了插件系统,可以通过插件的方式来扩展系统功能。

而不用一味地堆功能,导致系统臃肿。你可以自己开发插件,也可以使用别人开发的插件。

点击前往插件市场

使用插件 ​

1、安装 ​

首先下载插件包,然后在系统中安装插件包。插件包可以通过官网下载插件。

打开后台管理系统,点击左侧菜单扩展管理/插件管理,点击+按钮,选择插件包进行安装。

2、调用 ​

安装插件之后,就可以在代码中调用插件的方法了。

java
package com.cool.core.base.controller;
 
 import cn.hutool.core.util.ObjUtil;
 import com.cool.core.util.CoolPluginInvokers;
@@ -255,7 +255,7 @@
     <cool.plugin.name>my_cool_plugin</cool.plugin.name>
 </properties>

最终打出的包为: my_cool_plugin.cool

安装插件 ​

在后台插件管理页面,安装插件将打包好的.cool 文件上传。

实现原理 ​

  • 动态加载 Jar 包

    实现动态加载的技术方案
    在 SpringBoot 中实现动态加载 Jar 包: URLClassLoader 是 Java 标准库中提供的一个类加载器,它可以加载指定的 URL 资源,包括本地文件系统、远程服务器和 JAR 文件等。
    通过 URLClassLoader,我们可以在运行时动态地加载外部的 Jar 包或类。

  • 优势:

    1、灵活性高:可以动态指定 Jar 包的位置和版本。
    2、可控性强:可以通过代码控制加载、卸载和替换 Jar 包。

实现方法:

java
URL jarUrl = new URL("jar:file:" + new File(jarFilePath).getAbsolutePath() + "!/");
 DynamicJarClassLoader dynamicJarClassLoader = new DynamicJarClassLoader(new URL[]{jarUrl}, Thread.currentThread().getContextClassLoader());

动态加载 Jar 包具有以下几个显著的优势:

  • 1、灵活性: 动态加载允许应用程序在运行时根据需求加载、卸载和替换 Jar 包或其内部的类和资源,提供了极大的灵活性。
  • 2、可维护性: 通过动态加载,可以将应用程序的核心逻辑和配置分离,使得代码更加清晰、模块化,提高了代码的可维护性。
  • 3、热更新: 动态加载使得应用程序能够在不停机的情况下进行热更新,大大提高了系统的可用性和稳定性。
  • 4、扩展性: 通过动态加载,可以轻松地添加新的功能模块或服务,实现应用程序的快速扩展和升级。
- + \ No newline at end of file diff --git a/.vitepress/dist/src/guide/quick.html b/.vitepress/dist/src/guide/quick.html index 8277a62..a5cc648 100644 --- a/.vitepress/dist/src/guide/quick.html +++ b/.vitepress/dist/src/guide/quick.html @@ -9,17 +9,17 @@ - + - - + + - + -
Skip to content

快速开始 ​

开始使用 Cool-Admin!!!

环境准备 ​

  • Java Jdk >= 17 (注意:选择 GraalVM)
  • Mysql >= 5.7 (推荐 8.0)
  • Maven >= 3.6 (推荐 3.9)

运行系统 ​

1、拉取源码 ​

项目是前后端分离的,需要分别拉取前后端代码到本地,源码仓库

2、配置数据库 ​

后端修改数据库配置,配置文件位于src/resources/application-local.yml

以 Mysql 为例,其他数据库适配中...

Mysql(>=5.7版本),建议 8.0,首次启动会自动初始化并导入数据

yaml
# mysql,驱动已经内置,无需安装
+    
Skip to content

快速开始 ​

开始使用 Cool-Admin!!!

环境准备 ​

  • Java Jdk >= 17 (注意:选择 GraalVM)
  • Mysql >= 5.7 (推荐 8.0)
  • Maven >= 3.6 (推荐 3.9)

运行系统 ​

1、拉取源码 ​

项目是前后端分离的,需要分别拉取前后端代码到本地,源码仓库

2、配置数据库 ​

后端修改数据库配置,配置文件位于src/resources/application-local.yml

以 Mysql 为例,其他数据库适配中...

Mysql(>=5.7版本),建议 8.0,首次启动会自动初始化并导入数据

yaml
# mysql,驱动已经内置,无需安装
 spring:
   datasource:
     url: jdbc:mysql://127.0.0.1:3306/cool?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2b8
@@ -32,7 +32,7 @@
 npm install
 # 启动
 npm run dev

访问http://127.0.0.1:9000/ 默认账户密码

账户:admin
密码:123456

- + \ No newline at end of file diff --git a/.vitepress/dist/src/guide/recordLog.html b/.vitepress/dist/src/guide/recordLog.html index 2bec809..95292b4 100644 --- a/.vitepress/dist/src/guide/recordLog.html +++ b/.vitepress/dist/src/guide/recordLog.html @@ -9,16 +9,16 @@ - + - - - + + + -
Skip to content

请求日志记录 ​

记录接口请求日志入库

java
public class BaseLogFilter implements Filter {
+    
-    
+    
     
   
 
\ No newline at end of file
diff --git a/.vitepress/dist/src/guide/security.html b/.vitepress/dist/src/guide/security.html
index e34f959..4a7db4a 100644
--- a/.vitepress/dist/src/guide/security.html
+++ b/.vitepress/dist/src/guide/security.html
@@ -9,16 +9,16 @@
     
     
     
-    
+    
     
-    
-    
-    
+    
+    
+    
     
     
   
   
-    
Skip to content

权限校验 ​

采用 spring-security 与 jwt 作为框架安全与权限校验。

配置 ​

yaml
cool:
+    
-    
+    
     
   
 
\ No newline at end of file
diff --git a/.vitepress/dist/src/guide/service.html b/.vitepress/dist/src/guide/service.html
index 8e68746..4c642f1 100644
--- a/.vitepress/dist/src/guide/service.html
+++ b/.vitepress/dist/src/guide/service.html
@@ -9,16 +9,16 @@
     
     
     
-    
+    
     
-    
-    
-    
+    
+    
+    
     
     
   
   
-    
Skip to content

服务 ​

处理业务逻辑的代码应该被封装在服务中。

Crud ​

BaseService中集成了常用的 CRUD 操作,可以参考BaseService的实现。

修改前后 ​

可以重写modifyBefore和modifyAfter方法,在修改数据之前或之后做一些处理

  • 修改之前
java
/**
+    
Skip to content

服务 ​

处理业务逻辑的代码应该被封装在服务中。

Crud ​

BaseService中集成了常用的 CRUD 操作,可以参考BaseService的实现。

修改前后 ​

可以重写modifyBefore和modifyAfter方法,在修改数据之前或之后做一些处理

  • 修改之前
java
/**
  * 修改之前
  *
  * @param requestParams 请求参数
@@ -38,7 +38,7 @@
 @Override
 public void modifyAfter(JSONObject requestParams, T t, ModifyEnum type) {
 }
- + \ No newline at end of file diff --git a/.vitepress/dist/src/guide/swagger.html b/.vitepress/dist/src/guide/swagger.html index 31a7b01..8d0af67 100644 --- a/.vitepress/dist/src/guide/swagger.html +++ b/.vitepress/dist/src/guide/swagger.html @@ -9,16 +9,16 @@ - + - - - + + + -
Skip to content

swagger 文档 ​

默认集成springdoc,作为文档。

java
@Tag(name = "测试CURD", description = "测试CURD")
+    
Skip to content

swagger 文档 ​

默认集成springdoc,作为文档。

java
@Tag(name = "测试CURD", description = "测试CURD")
 @CoolRestController(value = "/cool", api = {"add", "delete", "update", "page", "list", "info"})
 public class AdminDemoInfoController extends BaseController<DemoService, DemoEntity> {
     @Override
@@ -26,7 +26,7 @@
         // 可以在这边实现一下列表数据排序规则,查询条件过滤,返回哪些字段等
     }
 }

系统启动完成访问:http://127.0.0.1:8001/swagger-ui/index.html#/

- + \ No newline at end of file diff --git a/.vitepress/dist/src/guide/tenant.html b/.vitepress/dist/src/guide/tenant.html index e21b0c7..a1dce31 100644 --- a/.vitepress/dist/src/guide/tenant.html +++ b/.vitepress/dist/src/guide/tenant.html @@ -9,21 +9,21 @@ - + - - - + + + -
Skip to content

多租户(v8.0新增) ​

多租户(Multi-tenancy)是一种软件架构模式,允许单个应用实例服务多个租户(客户组织)。每个租户的数据是相互隔离的,但共享同一个应用程序代码和基础设施。

主要特点 ​

  • 数据隔离: 确保不同租户之间的数据严格分离,互不可见
  • 资源共享: 多个租户共享同一套应用程序代码和基础设施
  • 独立配置: 每个租户可以有自己的个性化配置和定制化需求
  • 成本优化: 通过资源共享降低运营和维护成本

实现 ​

1、数据隔离 ​

多租户的数据隔离有许多种方案,但最为常见的是以列进行隔离的方式。Cool Admin 通过在TenantEntity中加入指定的列(租户ID tenantId)对数据进行隔离。

如果登录的用户token信息有携带tenantId,则框架会自动注入tenantId。

使用 ​

1、开启多租户 ​

框架默认关闭多租户,需要手动开启 enable修改为 true

yaml
# Cool相关配置
+    
Skip to content

多租户(v8.0新增) ​

多租户(Multi-tenancy)是一种软件架构模式,允许单个应用实例服务多个租户(客户组织)。每个租户的数据是相互隔离的,但共享同一个应用程序代码和基础设施。

主要特点 ​

  • 数据隔离: 确保不同租户之间的数据严格分离,互不可见
  • 资源共享: 多个租户共享同一套应用程序代码和基础设施
  • 独立配置: 每个租户可以有自己的个性化配置和定制化需求
  • 成本优化: 通过资源共享降低运营和维护成本

实现 ​

1、数据隔离 ​

多租户的数据隔离有许多种方案,但最为常见的是以列进行隔离的方式。Cool Admin 通过在TenantEntity中加入指定的列(租户ID tenantId)对数据进行隔离。

如果登录的用户token信息有携带tenantId,则框架会自动注入tenantId。

使用 ​

1、开启多租户 ​

框架默认关闭多租户,需要手动开启 enable修改为 true

yaml
# Cool相关配置
 cool:
   multi-tenant:
     # 是否开启多租户,默认关闭
     enable: false

关于tenantId的使用请参考 mybatis-flex

2、继承对象调整 ​

对于需要租户隔离的表,需要对应的表实体继承对象进行调整 BaseEntity -> TenantEntity

- + \ No newline at end of file diff --git a/.vitepress/dist/src/guide/uniqueIDGen.html b/.vitepress/dist/src/guide/uniqueIDGen.html index da267e0..91588a8 100644 --- a/.vitepress/dist/src/guide/uniqueIDGen.html +++ b/.vitepress/dist/src/guide/uniqueIDGen.html @@ -9,16 +9,16 @@ - + - - - + + + -
Skip to content

唯一id ​

基于表来完成分布式ID生成

原理参考美团点评分布式ID

java
@Table(value = "leaf_alloc", comment = "唯一id分配")
+    
-    
+    
     
   
 
\ No newline at end of file
diff --git a/.vitepress/dist/src/guide/upload.html b/.vitepress/dist/src/guide/upload.html
index bf1252d..ca4b17b 100644
--- a/.vitepress/dist/src/guide/upload.html
+++ b/.vitepress/dist/src/guide/upload.html
@@ -9,16 +9,16 @@
     
     
     
-    
+    
     
-    
-    
-    
+    
+    
+    
     
     
   
   
-    
Skip to content

文件上传 ​

框架自带两种文件上传方式本地上传与云存储,与前端紧密结合,

前端会根据后端返回的上传模式进行本地上传或者云存储签名直传(不经过服务器,直接上传到对应的云存储)

  • 本地上传
  • 云存储,如阿里云、腾讯云、七牛云等

TIP

安装云存储插件,如 Oss,系统的文件上传就会自动替换成云存储上传的方式,云存储上传服务端值提供签名供前端直传到对应的云存储

使用 ​

application.yml

yaml
spring:
+    
Skip to content

文件上传 ​

框架自带两种文件上传方式本地上传与云存储,与前端紧密结合,

前端会根据后端返回的上传模式进行本地上传或者云存储签名直传(不经过服务器,直接上传到对应的云存储)

  • 本地上传
  • 云存储,如阿里云、腾讯云、七牛云等

TIP

安装云存储插件,如 Oss,系统的文件上传就会自动替换成云存储上传的方式,云存储上传服务端值提供签名供前端直传到对应的云存储

使用 ​

application.yml

yaml
spring:
   # Web设置
   web:
     resources:
@@ -55,7 +55,7 @@
         return R.ok(fileUploadStrategyFactory.getMode());
     }
 }
- + \ No newline at end of file diff --git a/.vitepress/dist/src/introduce/index.html b/.vitepress/dist/src/introduce/index.html index 9962c05..40bd147 100644 --- a/.vitepress/dist/src/introduce/index.html +++ b/.vitepress/dist/src/introduce/index.html @@ -9,19 +9,19 @@ - + - - + + - + -
Skip to content

简介 ​

技术选型 ​

按照简单、常用的技术进行选择,减少技术栈的复杂度。

一、环境要求 ​

  • Java Jdk >= 17 选择 graalvm
  • Mysql >= 5.7
  • Maven >= 3.6

二、后端框架 ​

  • Spring Boot 3.x
  • Mybatis Flex
  • Auto Table
  • Hutool

三、前端框架 ​

  • Vue3
  • Typescript
  • Element-UI

为什么选择 Cool Admin? ​

随着技术不断地发展,特别是最近 Ai 相关的技术发展,以往的框架已经越来越不能满足现代化的开发需求。

Cool Admin 做为后来者有后发优势,主要特点:

  • Ai 编码,从页面到后端代码,部分功能实现零代码;
  • Ai 流程编排,专门为 Ai 开发设计的,Ai 开发几乎不用写代码,只需拖一拖即可;
  • 扩展插件,可插拔,如支付、短信这类功能的插件可以通过后台动态安装卸载,灵活又不臃肿;
  • 代码简洁,不像一般代码生成器生成一堆冗余代码,Cool 只需极少编码即可实现大部分需求;
  • ......

内置功能 ​

  • 用户管理:呈现公司组织部门树形结构,用户是系统操作者,该功能主要完成系统用户配置。
  • 菜单管理:配置系统菜单,操作权限标识等。
  • 角色管理:角色菜单权限分配、设置角色按机构进行数据范围权限划分。
  • 参数管理:对系统动态配置常用参数。
  • 字典管理:对系统中经常使用的一些较为固定的数据进行维护。
  • 请求日志:接口的请求入参日志,便于问题排查。
  • 操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询。
  • 定时任务:在线(添加、修改、删除)任务调度包含执行结果日志。
  • 文件管理:支持静态资源文件上传云端进行云管理。
  • 数据回收站:数据有 n 天的保留,支持回滚操作。
  • 前后端插件:支持动态安装、卸载插件,实现功能可插拔。
- +
Skip to content

简介 ​

技术选型 ​

按照简单、常用的技术进行选择,减少技术栈的复杂度。

一、环境要求 ​

  • Java Jdk >= 17 选择 graalvm
  • Mysql >= 5.7
  • Maven >= 3.6

二、后端框架 ​

  • Spring Boot 3.x
  • Mybatis Flex
  • Auto Table
  • Hutool

三、前端框架 ​

  • Vue3
  • Typescript
  • Element-UI

为什么选择 Cool Admin? ​

随着技术不断地发展,特别是最近 Ai 相关的技术发展,以往的框架已经越来越不能满足现代化的开发需求。

Cool Admin 做为后来者有后发优势,主要特点:

  • Ai 编码,从页面到后端代码,部分功能实现零代码;
  • Ai 流程编排,专门为 Ai 开发设计的,Ai 开发几乎不用写代码,只需拖一拖即可;
  • 扩展插件,可插拔,如支付、短信这类功能的插件可以通过后台动态安装卸载,灵活又不臃肿;
  • 代码简洁,不像一般代码生成器生成一堆冗余代码,Cool 只需极少编码即可实现大部分需求;
  • ......

内置功能 ​

  • 用户管理:呈现公司组织部门树形结构,用户是系统操作者,该功能主要完成系统用户配置。
  • 菜单管理:配置系统菜单,操作权限标识等。
  • 角色管理:角色菜单权限分配、设置角色按机构进行数据范围权限划分。
  • 参数管理:对系统动态配置常用参数。
  • 字典管理:对系统中经常使用的一些较为固定的数据进行维护。
  • 请求日志:接口的请求入参日志,便于问题排查。
  • 操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询。
  • 定时任务:在线(添加、修改、删除)任务调度包含执行结果日志。
  • 文件管理:支持静态资源文件上传云端进行云管理。
  • 数据回收站:数据有 n 天的保留,支持回滚操作。
  • 前后端插件:支持动态安装、卸载插件,实现功能可插拔。
+ \ No newline at end of file diff --git a/.vitepress/dist/src/introduce/show.html b/.vitepress/dist/src/introduce/show.html index 2054995..74d9d4c 100644 --- a/.vitepress/dist/src/introduce/show.html +++ b/.vitepress/dist/src/introduce/show.html @@ -9,18 +9,18 @@ - + - - + + - + - - + + \ No newline at end of file diff --git a/.vitepress/dist/src/introduce/src.html b/.vitepress/dist/src/introduce/src.html index c0204ce..be1542a 100644 --- a/.vitepress/dist/src/introduce/src.html +++ b/.vitepress/dist/src/introduce/src.html @@ -9,17 +9,17 @@ - + - - - + + + -
Skip to content

源码 ​

项目是开源免费、可商用、无需授权的,为了使项目能够持续,不要吝啬你们免费的Star哦!!!你的Star是我们最大的动力!!!

后端(点个 Star 哦) ​

https://github.com/cool-team-official/cool-admin-java

或

https://gitee.com/cool-team-official/cool-admin-java

或

https://gitcode.com/cool_team/cool-admin-java

前端(点个 Star 哦) ​

点击前往前端项目详细文档

https://github.com/cool-team-official/cool-admin-vue

或

https://gitee.com/cool-team-official/cool-admin-vue

或

https://gitcode.com/cool_team/cool-admin-vue

文档 (Star 哦) ​

如果文档有缺失,欢迎提交pr,您的贡献可能会给其他人来带巨大的帮助。

https://github.com/cool-team-official/cool-admin-java-docs

或

https://gitee.com/cool-team-official/cool-admin-java-docs

- +
Skip to content

源码 ​

项目是开源免费、可商用、无需授权的,为了使项目能够持续,不要吝啬你们免费的Star哦!!!你的Star是我们最大的动力!!!

后端(点个 Star 哦) ​

https://github.com/cool-team-official/cool-admin-java

或

https://gitee.com/cool-team-official/cool-admin-java

或

https://gitcode.com/cool_team/cool-admin-java

前端(点个 Star 哦) ​

点击前往前端项目详细文档

https://github.com/cool-team-official/cool-admin-vue

或

https://gitee.com/cool-team-official/cool-admin-vue

或

https://gitcode.com/cool_team/cool-admin-vue

文档 (Star 哦) ​

如果文档有缺失,欢迎提交pr,您的贡献可能会给其他人来带巨大的帮助。

https://github.com/cool-team-official/cool-admin-java-docs

或

https://gitee.com/cool-team-official/cool-admin-java-docs

+ \ No newline at end of file diff --git a/.vitepress/dist/src/question/common.html b/.vitepress/dist/src/question/common.html index 66a4880..7152279 100644 --- a/.vitepress/dist/src/question/common.html +++ b/.vitepress/dist/src/question/common.html @@ -9,17 +9,17 @@ - + - - - + + + -
Skip to content

常见问题 ​

项目中常见的问题

1、找不到类似xxxTableDef文件 ​

框架用到了Mybatis Flex 的 APT 功能,在项目编译的时候会自动生成这些文件。

你可以这样做:

  • Build 你的项目;
  • 执行 maven 的mvn compile命令;
  • 配置完数据库直接启动;
  • 【推荐】开启 idea 的Build project automatically自动编译功能(Settings -> Build, Execution, Deployment -> Compiler -> Build Project Automatically);

这些方式都可以解决这个问题。

- +
Skip to content

常见问题 ​

项目中常见的问题

1、找不到类似xxxTableDef文件 ​

框架用到了Mybatis Flex 的 APT 功能,在项目编译的时候会自动生成这些文件。

你可以这样做:

  • Build 你的项目;
  • 执行 maven 的mvn compile命令;
  • 配置完数据库直接启动;
  • 【推荐】开启 idea 的Build project automatically自动编译功能(Settings -> Build, Execution, Deployment -> Compiler -> Build Project Automatically);

这些方式都可以解决这个问题。

+ \ No newline at end of file diff --git a/.vitepress/dist/src/todo/plan.html b/.vitepress/dist/src/todo/plan.html index e1507e3..40950ba 100644 --- a/.vitepress/dist/src/todo/plan.html +++ b/.vitepress/dist/src/todo/plan.html @@ -9,17 +9,17 @@ - + - - - + + + - - + + \ No newline at end of file diff --git a/.vitepress/dist/src/todo/update.html b/.vitepress/dist/src/todo/update.html index 7df5fd6..8b976da 100644 --- a/.vitepress/dist/src/todo/update.html +++ b/.vitepress/dist/src/todo/update.html @@ -9,17 +9,17 @@ - + - - - + + + -
Skip to content

更新 ​

因为有你们的支持,cool-admin 会持续不断地更新,如果方便请点下 Star,这将会给我们带来更多的动力!!!

v8.0.0(2025-04-13) ​

  • 新增: 支持多租户,全局动态注入查询条件详情
  • 新增: 支持多语言,基于大模型自动翻译,无需更改原有代码详情
  • 优化: 响应类型封装优化 by @ximu-tao
  • 升级: 升级autotable和mybatis-flex版本,涉及包结构变更 com.tangzc.autotable -> org.dromara.autotable
  • 升级: AI 自动编码(基于DeepSeek R1)

v7.1.3(2024-08-25) ​

  • 新增: list和page支持关联查询,支持自定义返回结果类型,并可以在init方法中初始化返回字段类型及数据组装函数定义(参考:控制器)
  • 新增: 分布式ID生成组件(参考:分布式ID)
  • 新增: 锁工具(参考:锁工具)
  • 新增: 防重提交注解(参考:防重提交)
  • 调整: 缓存数据模板(参考:缓存)
  • 调整: 优化eps解析规则 (参考:解析规则)
  • 调整: 优化角色修改循环单个处理为批量处理,并异步进行刷新用户权限
  • 调整: 图形验证码获取区分app和admin
  • 修复: 初始化数据,指定id插入不生效问题
  • 修复: 后台人员查询列表字段关联错误

v7.1.2(2024-08-04) ​

  • 新增: 支持postgresql
  • 新增: 忽略记录请求日志url配置
  • 新增: app端手机密码登录和手机验证码登录
  • 调整: 鉴权调整兼容app端
  • 调整: 优化插件过大加载慢问题,移除插件jar文件落库
  • 修复: refreshToken可以当token使用问题

v7.1.1(2024-07-15) ​

  • 新增 Ai 自动编码功能,简单功能零代码实现;
  • 新增后台扩展插件,如文件上传、支付、短信等功能可以通过安装插件的方式添加;

v7.1.0(2024-06-27) ​

  • 升级到 Springboot3.x;
  • 升级所有相关依赖到最新;
  • 跟进Nodejs 版相关功能;
  • 优化若干问题;
- +
Skip to content

更新 ​

因为有你们的支持,cool-admin 会持续不断地更新,如果方便请点下 Star,这将会给我们带来更多的动力!!!

v8.0.0(2025-04-13) ​

  • 新增: 支持多租户,全局动态注入查询条件详情
  • 新增: 支持多语言,基于大模型自动翻译,无需更改原有代码详情
  • 优化: 响应类型封装优化 by @ximu-tao
  • 升级: 升级autotable和mybatis-flex版本,涉及包结构变更 com.tangzc.autotable -> org.dromara.autotable
  • 升级: AI 自动编码(基于DeepSeek R1)

v7.1.3(2024-08-25) ​

  • 新增: list和page支持关联查询,支持自定义返回结果类型,并可以在init方法中初始化返回字段类型及数据组装函数定义(参考:控制器)
  • 新增: 分布式ID生成组件(参考:分布式ID)
  • 新增: 锁工具(参考:锁工具)
  • 新增: 防重提交注解(参考:防重提交)
  • 调整: 缓存数据模板(参考:缓存)
  • 调整: 优化eps解析规则 (参考:解析规则)
  • 调整: 优化角色修改循环单个处理为批量处理,并异步进行刷新用户权限
  • 调整: 图形验证码获取区分app和admin
  • 修复: 初始化数据,指定id插入不生效问题
  • 修复: 后台人员查询列表字段关联错误

v7.1.2(2024-08-04) ​

  • 新增: 支持postgresql
  • 新增: 忽略记录请求日志url配置
  • 新增: app端手机密码登录和手机验证码登录
  • 调整: 鉴权调整兼容app端
  • 调整: 优化插件过大加载慢问题,移除插件jar文件落库
  • 修复: refreshToken可以当token使用问题

v7.1.1(2024-07-15) ​

  • 新增 Ai 自动编码功能,简单功能零代码实现;
  • 新增后台扩展插件,如文件上传、支付、短信等功能可以通过安装插件的方式添加;

v7.1.0(2024-06-27) ​

  • 升级到 Springboot3.x;
  • 升级所有相关依赖到最新;
  • 跟进Nodejs 版相关功能;
  • 优化若干问题;
+ \ No newline at end of file