all-search 全搜 | 补充深色模式

2025-4-7 添加深色模式支持

// ==UserScript==
// @name         all-search 全搜 | 补充深色模式
// @namespace    leftyzzk
// @version      lz.1.6.0
// @author       endday, leftyzzk
// @description  2025-4-7 添加深色模式支持
// @license      GPL-3.0-only
// @homepage     https://github.com/all-search/all-search
// @homepageURL  https://github.com/all-search/all-search
// @match        *://*/*
// @require      https://registry.npmmirror.com/vue/3.4.15/files/dist/vue.global.prod.js
// @require      https://registry.npmmirror.com/@popperjs/core/2.11.8/files/dist/umd/popper-lite.min.js
// @grant        GM_deleteValue
// @grant        GM_getValue
// @grant        GM_setValue
// @run-at       document-idle
// @noframes
// ==/UserScript==

// ...existing code...
(e => { if (typeof window.GM_addStyle == "function") { window.GM_addStyle(e); return } const a = document.querySelector("#as-style-common"); if (a) a.styleSheet.cssText += e; else { const o = document.createElement("style"); o.classList.add("as-style"), o.id = "as-style-common", o.textContent = e, document.head.append(o) } })('@charset "UTF-8";@media screen and (max-width: 750px){.as-title-horizontal{display:none}}.as-title-horizontal{min-width:90px;margin:0 10px}.as-title-vertical{width:100%}.as-title{text-decoration:none!important;padding:0;margin:0;color:var(--as-primary-color)}.as-title-inner{padding:0;font-size:17px;height:30px;line-height:30px;font-weight:600;color:var(--as-primary-color);margin:0 auto;text-align:center;cursor:pointer}:root{--as-text-color-secondary:#909399;--as-primary-color:#1890ff;--as-bg-color:#ffffff;--as-primary-text-color:#606266;--as-secondary-background-color:#f5f7fa;--as-border-color:#e8e8e8;--as-hover-background-color:#ecf5ff}[data-theme=dark]{--as-text-color-secondary:#909399;--as-primary-color:#409eff;--as-bg-color:#1a1a1a;--as-primary-text-color:#e5eaf3;--as-secondary-background-color:#2c2c2c;--as-border-color:#4c4c4c;--as-hover-background-color:#363636;--as-dialog-mask-color:rgba(0,0,0,0.7)}[data-theme=dark] .as-dialog__mask{background-color:var(--as-dialog-mask-color)}[data-theme=dark] .as-side-bar{background:var(--as-bg-color)}[data-theme=dark] .as-img-icon img.error{background:var(--as-secondary-background-color)}[data-theme=dark] .as-popover-content{box-shadow:0 0 12px rgba(0,0,0,0.4)}[data-theme=dark] .as-hover-btn{background:var(--as-bg-color)}[data-theme=dark] .cate-container{background:var(--as-bg-color)}[data-theme=dark] .cate-list .cate-item:hover{background-color:var(--as-hover-background-color)}[data-theme=dark] .as-side-bar{background:var(--as-bg-color) radial-gradient(#2c2c2c 75%,#1a1a1a 100%) no-repeat fixed}[data-theme=dark] .as-side-bar>section{background:rgba(26,26,26,.67)}[data-theme=dark] .as-container{background-color:var(--as-bg-color)}[data-theme=dark] .as-horizontal{border-bottom-color:var(--as-border-color)}[data-theme=dark] .as-vertical{border-right-color:var(--as-border-color)}.as-scrollbar{--as-scrollbar-opacity:.3;--as-scrollbar-background-color:var(--as-text-color-secondary);--as-scrollbar-hover-opacity:.5;--as-scrollbar-hover-background-color:var(--as-text-color-secondary);overflow:hidden;position:relative;height:100%}.as-scrollbar__wrap{overflow:auto;height:100%}.as-scrollbar__wrap--hidden-default{scrollbar-width:none}.as-scrollbar__wrap--hidden-default::-webkit-scrollbar{display:none}.as-scrollbar__thumb{position:relative;display:block;width:0;height:0;cursor:pointer;border-radius:inherit;background-color:var(--as-scrollbar-background-color,var(--as-text-color-secondary));transition:var(--as-transition-duration) background-color;opacity:var(--as-scrollbar-opacity,.3)}.as-scrollbar__thumb:hover{background-color:var(--as-scrollbar-hover-background-color,var(--as-text-color-secondary));opacity:var(--as-scrollbar-hover-opacity,.5)}.as-scrollbar__bar{position:absolute;right:2px;bottom:2px;z-index:1;border-radius:4px}.as-scrollbar__bar.is-vertical{width:6px;top:2px}.as-scrollbar__bar.is-vertical>div{width:100%}.as-scrollbar__bar.is-horizontal{height:6px;left:2px}.as-scrollbar__bar.is-horizontal>div{height:100%}.as-scrollbar-fade-enter-active{transition:opacity .34s ease-out}.as-scrollbar-fade-leave-active{transition:opacity .12s ease-out}.as-scrollbar-fade-enter-from,.as-scrollbar-fade-leave-active{opacity:0}.as-popover-content{--background-color:var(--as-bg-color);--border-color:var(--as-border-color);display:none;pointer-events:none;opacity:0;z-index:99999;position:relative}.as-popover-content .arrow,.as-popover-content .arrow:before{width:0;height:0;border-style:solid}.as-popover-content .arrow:before{content:"";position:absolute}.as-popover-content[data-show=true]{opacity:1;pointer-events:initial}.as-popover-content[data-initialized=true]{display:block}.slide-fade-enter-active{transition:all .3s ease-out}.slide-fade-leave-active{transition:all .8s cubic-bezier(1,.5,.8,1)}.slide-fade-enter-from,.slide-fade-leave-to{transform:translate(20px);opacity:0}.as-icon{font-size:20px;width:1em;height:1em;vertical-align:-.15em;fill:currentColor;overflow:hidden;margin:.25px 4px 0 0;display:inline-block}.as-img-icon{border:none;position:relative;font-size:0}.as-img-icon img{width:100%;height:100%;border:none;vertical-align:top}.as-img-icon img.error{display:inline-block;transform:scale(1);content:"";color:transparent}.as-img-icon img.error:before{content:"";position:absolute;left:0;top:0;width:100%;height:100%;background:var(--as-secondary-background-color) no-repeat center/50% 50%}.as-img-icon img.error:after{content:attr(alt);position:absolute;left:0;bottom:0;width:100%;line-height:2;background-color:rgba(0,0,0,.5);color:var(--as-primary-text-color);font-size:12px;text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.as-menu-item.horizontal{position:relative;padding:0 16px}.as-menu-item.horizontal:after{content:"";transform:scaleX(0);opacity:0;transition:transform .15s cubic-bezier(.645,.045,.355,1),opacity .15s cubic-bezier(.645,.045,.355,1);position:absolute;right:0;left:0;bottom:0;border-bottom:2px solid var(--as-primary-color)}.as-menu-item.horizontal:hover:after{transform:scaleX(1);opacity:1}@media screen and (max-width:750px){.as-menu-item.horizontal{padding:0 10px}}.as-menu-item.vertical{margin:5px 0;position:relative}.as-menu-item.vertical:after{content:"";transform:scaleY(0);opacity:0;transition:transform .15s cubic-bezier(.645,.045,.355,1),opacity .15s cubic-bezier(.645,.045,.355,1);position:absolute;top:0;bottom:0;right:0;border-right:2.5px solid var(--as-primary-color)}.as-menu-item.vertical:hover:after{transform:scaleY(1);opacity:1}.as-menu-item.vertical .as-menu-item-title{margin-right:6px}.as-menu-item.no-underline{text-decoration:none}.as-menu-item:visited{color:var(--as-primary-text-color)}a.as-menu-item{height:30px;line-height:30px;list-style:none;position:relative;color:var(--as-primary-text-color);transition:color .3s cubic-bezier(.645,.045,.355,1),border-color .3s cubic-bezier(.645,.045,.355,1),background .3s cubic-bezier(.645,.045,.355,1);box-sizing:border-box;margin:0;white-space:nowrap;cursor:pointer;font-size:14px;display:flex;align-items:center;justify-content:center}a.as-menu-item:hover{border-color:var(--as-primary-color)}a.as-menu-item:hover .as-menu-item-icon,a.as-menu-item:hover .as-menu-item-title{color:var(--as-primary-color)}.as-menu-item-icon{color:var(--as-primary-text-color)}.as-url-icon{width:16px;height:16px;margin-right:10px}.as-subMenu-container{background:var(--as-bg-color);border:1px solid var(--as-border-color);box-shadow:0 0 12px rgba(0,0,0,.12);border-radius:4px}.as-subMenu{list-style:none;padding:0;min-width:90px;box-sizing:border-box;margin:4px 0}.as-subMenu li{overflow:hidden;box-sizing:border-box}.as-subMenu li a{display:flex;align-items:center;height:34px;padding:0 16px;text-decoration:none}.as-subMenu li:hover{background-color:var(--as-hover-background-color);color:var(--as-primary-color)}.as-subMenu .as-subMenu-text{flex:1;font-size:14px;text-overflow:ellipsis;color:var(--as-primary-text-color);white-space:nowrap;margin:0;line-height:34px;font-weight:400;text-align:left}.as-menu-container{flex:1;display:flex}.as-menu{padding:0;margin:0;white-space:nowrap;border:0;box-shadow:none;background-color:var(--as-bg-color);display:flex}.as-horizontal .as-menu{flex-direction:row}.as-vertical .as-menu{flex-direction:column}.as-vertical .as-scrollbar__wrap{height:auto}.as-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:999991;height:100%;background-color:rgba(0,0,0,.3);overflow:auto}label.as-radio{color:var(--as-primary-text-color);font-weight:500;line-height:1;position:relative;cursor:pointer;display:inline-block;white-space:nowrap;outline:none;font-size:14px;-webkit-user-select:none;-moz-user-select:none;user-select:none}label.as-radio+label.as-radio{margin-left:14px}label.as-radio input{position:absolute;opacity:0;visibility:hidden}label.as-radio .as-radio-icon{display:inline-block;position:relative;width:12px;height:12px;background:var(--as-bg-color);border:1px solid var(--as-border-color);border-radius:50%;vertical-align:-2px}label.as-radio input:checked+.as-radio-icon:after{position:absolute;content:"";width:6px;height:6px;background-color:var(--as-bg-color);border-radius:50%;top:3px;left:3px}label.as-radio input:checked+.as-radio-icon{background:var(--as-primary-color);border:1px solid var(--as-primary-color)}label.as-radio input:disabled+.as-radio-icon{background-color:var(--as-secondary-background-color);border:solid 1px var(--as-border-color)}label.as-radio input:disabled:checked+.as-radio-icon:after{background-color:var(--as-text-color-secondary)}label.as-radio.as-radio-animate .as-radio-icon{transition:background-color ease-out .3s}label.as-radio .as-radio-label{margin-left:6px;font-size:14px}.as-label{vertical-align:middle;float:left;font-size:14px;color:var(--as-primary-text-color);line-height:40px;padding:0 12px 0 0;box-sizing:border-box}.as-content{line-height:40px;position:relative;font-size:14px}.as-button{display:inline-block;line-height:1;white-space:nowrap;cursor:pointer;background:var(--as-bg-color);border:1px solid var(--as-border-color);color:var(--as-primary-text-color);text-align:center;box-sizing:border-box;outline:none;margin:0;transition:.1s;font-weight:500;-webkit-user-select:none;-moz-user-select:none;user-select:none;padding:12px 20px;font-size:14px;border-radius:4px}.as-button.as-button__text{border-color:transparent;color:var(--as-primary-color);background:transparent;padding-left:0;padding-right:0}.as-button.as-button__primary{color:var(--as-bg-color);background-color:var(--as-primary-color);border-color:var(--as-primary-color)}.as-color-set .as-color-label{line-height:1;position:relative;cursor:pointer;display:inline-block;white-space:nowrap;outline:none;vertical-align:middle}.as-color-set .input-color{width:30px;height:30px;padding:4px;border:1px solid var(--as-border-color);border-radius:4px;background-color:var(--as-secondary-background-color);box-sizing:border-box}.as-color-set .input-color::-webkit-color-swatch{border:0}.as-color-set .input-color::-webkit-color-swatch-wrapper{padding:0}.as-color-set .reset-btn{margin-left:20px}.as-setting{position:relative}.as-setting.horizontal{box-shadow:-4px 0 10px rgba(0,0,0,.12);display:flex}.as-setting-btn{line-height:30px;padding:0 14px;position:relative;margin:0;white-space:nowrap;cursor:pointer;font-size:14px;color:var(--as-primary-text-color);text-align:center}.as-setting-btn:hover{color:var(--as-primary-color);background-color:var(--as-hover-background-color)}.as-side-bar{width:20vw;min-width:300px;right:0;height:100%;top:0;bottom:0;position:absolute;box-sizing:border-box;background:var(--as-bg-color);display:flex;flex-direction:column;box-shadow:0 8px 10px -5px rgba(0,0,0,.2),0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12);overflow:hidden}.as-side-bar>header{font-size:16px;align-items:center;color:var(--as-primary-text-color);display:flex;padding:32px 24px}.as-side-bar>section{padding:10px 24px;margin:0 12px;height:100%;flex:1;border-radius:4px;border:1px solid var(--as-border-color);background:rgba(255,255,255,.67)}.as-side-bar>footer{padding:10px 24px 30px}.as-side-bar>footer .link{font-size:14px;text-decoration:none}.as-side-bar>footer .link:visited{color:var(--as-primary-text-color)}.as-side-bar>footer .link+.link{margin-left:20px}.overlay-enter-active,.overlay-leave-active{transition:opacity .3s}.overlay-enter-from,.overlay-leave-to{opacity:0}.overlay-enter-active .as-side-bar{animation:rtl-drawer-animation .3s linear reverse}.overlay-leave-active .as-side-bar{animation:rtl-drawer-animation .3s linear}@keyframes rtl-drawer-animation{0%{transform:translate(0)}to{transform:translate(100%)}}.as-hover-btn[data-v-7c1bb101]{position:fixed;z-index:99999;font-weight:600;font-size:17px;color:var(--as-primary-color);background:var(--as-bg-color);box-shadow:0 1px 4px rgba(0,0,0,.12);border:1px var(--as-border-color) solid;opacity:.6;cursor:pointer}.as-hover-btn-horizontal[data-v-7c1bb101]{top:0;left:50%;transform:translateY(0) translate(-50%);padding:0 16px;height:28px;line-height:28px}.as-hover-btn-vertical[data-v-7c1bb101]{left:0;top:50%;transform:translateY(-200%) translate(0) rotate(90deg);transform-origin:0 100%;padding:0 16px;height:28px;line-height:28px}.hover-btn.as-hide[data-v-7c1bb101]{transition:transform .2s;transform:translateY(-100%) translate(-50%)}.bar-container[data-v-7c91e3b8]{display:flex;padding:2px;max-width:300px;position:absolute;z-index:99999;background-color:var(--as-bg-color);color:var(--as-text-color-secondary);box-shadow:0 0 0 1px rgba(0,0,0,.05),0 2px 3px rgba(0,0,0,.1);border-radius:2px;cursor:pointer;white-space:nowrap}.tool-bar-item[data-v-7c91e3b8]{margin:0;padding:2px;width:20px;height:20px;border:1px solid var(--as-bg-color);cursor:pointer;box-sizing:content-box}.tool-bar-item[data-v-7c91e3b8]:hover{border-color:var(--as-border-color)}.as-more-icon[data-v-7c91e3b8]{display:block;font-size:20px}.as-dialog{position:fixed;top:0;right:0;bottom:0;left:0;margin:0;z-index:99999}.as-dialog__mask{position:fixed;left:0;top:0;width:100%;height:100%;background:rgba(0,0,0,.5);-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px)}.as-dialog-container{position:relative;background:var(--as-bg-color);border-radius:10px;box-shadow:0 1px 3px rgba(0,0,0,.3);box-sizing:border-box;min-width:50%;max-width:80%;z-index:99;margin:40vh auto 50px;transform:translateY(-40%);overflow:hidden;-webkit-backdrop-filter:saturate(3) blur(20px);backdrop-filter:saturate(3) blur(20px)}.as-dialog__header{position:relative}.as-dialog__body{color:var(--as-primary-text-color);font-size:14px;word-break:break-all}.as-dialog__footer{padding:10px 20px 20px;text-align:right;box-sizing:border-box}.as-dialog__close{display:inline-block;position:absolute;top:16px;right:24px;padding:0;background:transparent;cursor:pointer;font-size:16px;color:var(--as-text-color-secondary)}.as-dialog__close:before{content:"✖"}.se-header{padding:15px 20px;box-shadow:0 1px 6px var(--as-border-color);background:var(--as-bg-color)}.se-input-box{border:1px solid var(--as-border-color);background-color:var(--as-bg-color);overflow:hidden;display:flex;border-radius:6px;height:40px;align-items:center;transition:.2s;color:var(--as-primary-text-color)}.se-input-box:hover{border-color:var(--as-border-color);box-shadow:0 1px 6px rgba(32,33,36,.28)}.se-input-box:active{border-color:var(--as-border-color)}.se-input-box .se-input{color:var(--as-primary-text-color);background-color:transparent;font-size:16px;height:100%;width:100%;line-height:20px;margin:0 20px;outline:none;border:none}.se-scrollbar-container{height:50vh;padding:0 20px 20px;background:var(--as-bg-color) no-repeat fixed}.se-container{margin-top:10px;display:flex;border-radius:6px;flex-wrap:wrap}.cate-container{flex:0 0 150px;margin:0 10px 10px 0;border:1px solid var(--as-border-color);background:var(--as-bg-color);padding:6px}.cate-name{padding:0 10px;height:36px;line-height:36px;font-size:16px;display:flex;align-items:center}.cate-list{list-style:none;min-width:110px;box-sizing:border-box;padding:0}.cate-list .cate-item{box-sizing:border-box;padding:0 10px}.cate-list .cate-item .as-subMenu-text{margin:0}.cate-list .cate-item a{display:flex;align-items:center;height:34px;text-decoration:none;color:var(--as-primary-text-color)}.cate-list .cate-item:hover{background-color:var(--as-hover-background-color);color:var(--as-primary-color)}#all-search .row,.all-search-config .row{display:flex}#all-search .column,.all-search-config .column{display:flex;flex-direction:column}#all-search .col,.all-search-config .col{flex:1}#all-search .row.items-center,#all-search .column.items-center,.all-search-config .row.items-center,.all-search-config .column.items-center{align-items:center}#all-search .row.items-end,#all-search .column.items-end,.all-search-config .row.items-end,.all-search-config .column.items-end{align-items:flex-end}#all-search .row.items-stretch,#all-search .column.items-stretch,.all-search-config .row.items-stretch,.all-search-config .column.items-stretch{align-items:stretch}#all-search .row.justify-center,#all-search .column.justify-center,.all-search-config .row.justify-center,.all-search-config .column.justify-center{justify-content:center}#all-search .row.justify-end,#all-search .column.justify-end,.all-search-config .row.justify-end,.all-search-config .column.justify-end{justify-content:flex-end}#all-search .row.justify-between,#all-search .column.justify-between,.all-search-config .row.justify-between,.all-search-config .column.justify-between{justify-content:space-between}#all-search .row.flex-wrap,.all-search-config .row.flex-wrap{flex-wrap:wrap}#all-search .row.content-center,.all-search-config .row.content-center{align-content:center}#all-search .row.content-end,.all-search-config .row.content-end{align-content:end}#all-search p,.all-search-config p{margin:0}.body-horizontal{height:30px;width:100%}.body-horizontal+body [data-as-margin-top]{margin-top:30px!important}.body-horizontal+body [data-as-transform]{transform:translateY(30px)}.body-horizontal+body [data-as-border-top]{border-top:transparent 30px solid;box-sizing:content-box}.body-horizontal+body [data-as-has-set]{transition-duration:0s}.body-vertical{height:100%;width:90px;position:fixed;z-index:999999}.body-vertical+body{margin-left:90px!important}body,#all-search{--as-horizontal-height:$height;--as-primary-color:#1890ff;--as-bg-color:#ffffff;--as-primary-text-color:#606266;--as-secondary-background-color:#f5f7fa;--as-border-color:#e8e8e8;--as-hover-background-color:#ecf5ff}[data-theme=dark] body,[data-theme=dark] #all-search{--as-secondary-background-color:#f5f7fa;--as-border-color:#383838;--as-hover-background-color:#212933}#all-search{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji"}.as-horizontal{height:30px;width:100%;top:0;border-bottom:1px var(--as-border-color) solid;flex-direction:row;transition:transform .1s}.as-horizontal.as-hide{transform:translateY(-100%)}.as-horizontal.as-show{transform:translateY(0)}.as-vertical{height:100%;width:90px;top:0;left:0;border-right:1px var(--as-border-color) solid;flex-direction:column;transition:transform .1s}.as-vertical.as-hide{transform:translate(-100%)}.as-vertical.as-show{transform:translate(0)}.as-container{opacity:1!important;position:fixed;display:flex;background-color:var(--as-bg-color);z-index:999990}');

// ...existing code...


(function (vue, core) {
    'use strict';

    var _GM_deleteValue = /* @__PURE__ */ (() => typeof GM_deleteValue != "undefined" ? GM_deleteValue : void 0)();
    var _GM_getValue = /* @__PURE__ */ (() => typeof GM_getValue != "undefined" ? GM_getValue : void 0)();
    var _GM_setValue = /* @__PURE__ */ (() => typeof GM_setValue != "undefined" ? GM_setValue : void 0)();
    const name = "all-search";
    const version$1 = "1.5.9";
    const keywords = [
        "tamperMonkey",
        "user-script",
        "tool",
        "web",
        "javascript",
        "vue3"
    ];
    const description = "A top fixed menu that allows you to jump between various search engines, build based on Vue, and use rollup.";
    const author = "endday";
    const homepage = "https://github.com/all-search/all-search";
    const license = "GPL-3.0-only";
    const repository = {
        type: "git",
        url: "[email protected]:all-search/all-search.git"
    };
    const files = [
        "dist",
        "lib"
    ];
    const unpkg = "dist/index.user.js";
    const jsdelivr = "dist/index.user.js";
    const packageManager = "[email protected]";
    const scripts = {
        lint: "vue-cli-service lint",
        prepare: "husky install",
        "dev:script": "vite --mode script",
        "build:script": "vite build --mode script",
        "dev:site": "vite dev --mode site",
        "build:site": "vite build --mode site"
    };
    const dependencies = {
        "@element-plus/icons-vue": "^2.0.4",
        "@popperjs/core": "^2.9.2",
        "core-js": "^3.9.1",
        "element-plus": "^2.2.22",
        jsoneditor: "^9.9.0",
        "resize-observer-polyfill": "^1.5.1",
        vue: "^3.3.4",
        "vue-draggable-next": "^2.0.1",
        "vue-router": "^4.0.5"
    };
    const devDependencies = {
        "@babel/eslint-parser": "^7.19.1",
        "@commitlint/cli": "^17.1.2",
        "@commitlint/config-conventional": "^17.1.0",
        "@vitejs/plugin-vue": "^4.3.4",
        "@vue/compiler-sfc": "^3.0.7",
        autoprefixer: "^10.4.7",
        "babel-plugin-import": "^1.13.3",
        "cross-env": "^7.0.3",
        eslint: "^7.32.0",
        "eslint-plugin-vue": "^7.7.0",
        husky: "^8.0.1",
        "lint-staged": "^13.1.0",
        minimist: "^1.2.7",
        postcss: "^8.4.13",
        "rollup-plugin-external-globals": "^0.6.1",
        sass: "^1.32.8",
        "sass-loader": "^10.1.1",
        vite: "^4.4.9",
        "vite-plugin-crx-mv3": "^0.1.5",
        "vite-plugin-monkey": "^3.5.0"
    };
    const pkg = {
        name,
        version: version$1,
        keywords,
        description,
        author,
        homepage,
        license,
        repository,
        files,
        unpkg,
        jsdelivr,
        packageManager,
        scripts,
        dependencies,
        devDependencies
    };
    const version = pkg.version;

    function getQueryString(name2, url) {
        url = url || window.location.href;
        const r = new RegExp("(\\?|#|&)" + name2 + "=([^&#]*)(&|#|$)");
        const m = url.match(r);
        return decodeURIComponent(!m ? "" : m[2]);
    }
    function checkBody() {
        let time = 0;
        return new Promise((resolve, reject) => {
            if (document && document.body) {
                resolve();
            } else {
                const id = setInterval(function () {
                    time += 1;
                    if (document && document.body) {
                        clearInterval(id);
                        resolve();
                    }
                    if (time === 50) {
                        clearInterval(id);
                        reject(new Error("timeOut"));
                    }
                }, 200);
                if (["complete", "loaded", "interactive"].includes(document.readyState)) {
                    if (document && document.body) {
                        clearInterval(id);
                        resolve();
                    }
                } else {
                    document.addEventListener("DOMContentLoaded", function () {
                        if (document && document.body) {
                            clearInterval(id);
                            resolve();
                        }
                    });
                }
            }
        });
    }
    function getName(name2) {
        if (name2) {
            return `__allSearch__${name2}`;
        }
        return null;
    }
    function isJson(str) {
        if (typeof str !== "string") {
            return false;
        }
        const char = str.charAt(0);
        if (char !== "[" && char !== "{") {
            return false;
        }
        try {
            return typeof JSON.parse(str) === "object";
        } catch (e) {
            return false;
        }
    }
    function parseJson(val) {
        if (isJson(val)) {
            try {
                return JSON.parse(val);
            } catch (e) {
                return val;
            }
        }
        return val;
    }
    function RAFInterval(callback, period, runNow) {
        const needCount = period / 1e3 * 60;
        let times = 0;
        if (runNow === true) {
            const shouldFinish = callback();
            if (shouldFinish) {
                return;
            }
        }
        function step() {
            if (times < needCount) {
                times++;
                requestAnimationFrame(step);
            } else {
                const shouldFinish = callback() || false;
                if (!shouldFinish) {
                    times = 0;
                    requestAnimationFrame(step);
                }
            }
        }
        requestAnimationFrame(step);
    }
    function removeNode(cssSelectorOrFunction) {
        try {
            if (typeof cssSelectorOrFunction === "string") {
                let removeNodes = document.querySelectorAll(cssSelectorOrFunction);
                for (let i = 0; i < removeNodes.length; i++) {
                    removeNodes[i].remove();
                }
            } else if (typeof cssSelectorOrFunction === "function") {
                cssSelectorOrFunction();
            } else {
                console.log("未知命令:" + cssSelectorOrFunction);
            }
        } catch (e) {
            console.log(e);
        }
    }
    function addStyleContent(css, className, addToTarget, isReload = false) {
        RAFInterval(function () {
            let addTo = document.querySelector(addToTarget);
            if (typeof addToTarget === "undefined") {
                addTo = document.body || document.head || document.documentElement || document;
            }
            if (typeof addToTarget === "undefined" || typeof addToTarget !== "undefined" && document.querySelector(addToTarget) !== null) {
                if (isReload) {
                    removeNode("." + className);
                } else if (!isReload && document.querySelector("." + className) !== null) {
                    return true;
                }
                let cssNode = document.createElement("style");
                if (className) {
                    cssNode.className = className;
                }
                cssNode.setAttribute("type", "text/css");
                cssNode.innerHTML = css;
                try {
                    addTo.appendChild(cssNode);
                } catch (e) {
                    console.log(e.message);
                }
                return true;
            }
        }, 20, true);
    }
    function getAsRoot() {
        return document.getElementById("all-search");
    }
    function createAsRoot() {
        const el2 = document.createElement("div");
        el2.id = "all-search";
        return el2;
    }
    const isMobile = function () {
        return /mobile|android|webos|iphone|ipod|blackberry|iphone os|ipad/i.test(navigator.userAgent);
    };
    function delAsDataSet(item) {
        if (item.dataset) {
            delete item.dataset.asMarginTop;
            delete item.dataset.asTransform;
            delete item.dataset.asBorderTop;
        }
    }
    function getParent(el2) {
        let current = el2;
        let go = true;
        while (go && current.offsetParent) {
            if (current.offsetParent.tagName === "BODY") {
                go = false;
            } else {
                current = current.offsetParent;
            }
        }
        const style = window.getComputedStyle(current);
        if (style.position !== "fixed") {
            return null;
        }
        return current;
    }
    function getRealFixedNode(item) {
        if (!item || !isElement(item)) {
            return null;
        }
        const style = window.getComputedStyle(item);
        if (style.display === "none") {
            return null;
        } else if (style.position === "fixed") {
            return item;
        } else if (style.position === "absolute") {
            return getParent(item);
        } else {
            return null;
        }
    }
    function isElement(obj) {
        return obj && obj instanceof Element && obj.nodeType === 1 && obj.tagName !== void 0;
    }
    function changeStyle(item) {
        if (!item || !isElement(item)) {
            return;
        }
        const style = window.getComputedStyle(item);
        const styleMap = item.computedStyleMap && item.computedStyleMap();
        const top = styleMap ? styleMap.get("top").value : null;
        if (top === "auto") {
            return;
        } else if (style.top === "0px") {
            item.style.top = "0px";
        }
        if (item.dataset.asMarginTop || item.dataset.asTransform || item.dataset.asBorderTop) {
            return;
        }
        const marginTop = style.marginTop;
        const transform = style.transform;
        const transition = style.transition;
        if (marginTop === "0px" && !transition.includes("margin")) {
            item.dataset.asHasSet = "asMarginTop";
            item.dataset.asMarginTop = "1";
        } else if (transform === "none") {
            item.dataset.asHasSet = "asTransform";
            item.dataset.asTransform = "1";
        } else {
            item.dataset.asHasSet = "asBorderTop";
            item.dataset.asBorderTop = "1";
        }
    }
    function getFixedNodeList(list2, deep = false) {
        const weakSet = /* @__PURE__ */ new WeakSet();
        const newList = [];
        const nodes = list2.filter((item) => item).map((item) => {
            delAsDataSet(item);
            if (deep) {
                Array.from(item.querySelectorAll("*")).map((item2) => {
                    delAsDataSet(item2);
                    return getRealFixedNode(item2);
                }).filter((item2) => item2).forEach((item2) => {
                    if (!weakSet.has(item2)) {
                        newList.push(item2);
                        weakSet.add(item2);
                    }
                });
            }
            return getRealFixedNode(item);
        }).filter((item) => item);
        nodes.forEach((item) => {
            if (!weakSet.has(item)) {
                newList.push(item);
                weakSet.add(item);
            }
        });
        return newList;
    }
    function fixedDomPosition() {
        checkBody().then(() => {
            const nodes = Array.from(document.body.querySelectorAll("*")).filter((item) => item.tagName !== "STYLE");
            getFixedNodeList(nodes).forEach((item) => {
                changeStyle(item);
            });
        });
    }
    function mutationObserver() {
        const targetNode = document.body;
        const config = {
            attributes: true,
            childList: true,
            subtree: true,
            attributeFilter: ["style", "class"]
        };
        const callback = function (mutationsList) {
            const root = getAsRoot();
            const filterNodes = mutationsList.filter((mutation) => {
                if (["BODY", "STYLE"].includes(mutation.target.tagName) || root.contains(mutation.target)) {
                    return false;
                } else if (mutation.type === "attributes") {
                    return ["style", "class", "id"].includes(mutation.attributeName);
                } else if (mutation.type === "childList") {
                    return mutation.addedNodes.length > 0;
                }
                return false;
            }).map((mutation) => mutation.target);
            getFixedNodeList(filterNodes, true).forEach((item) => {
                changeStyle(item);
            });
        };
        const observer = new MutationObserver(callback);
        observer.observe(targetNode, config);
    }
    function initSpecialStyle() {
        fixedDomPosition();
        mutationObserver();
    }
    function withHookBefore(originalFn, hookFn) {
        return function () {
            if (hookFn.apply(this, arguments) === false) {
                return;
            }
            return originalFn.apply(this, arguments);
        };
    }
    function withHookAfter(originalFn, hookFn) {
        return function () {
            const output = originalFn.apply(this, arguments);
            hookFn.apply(this, arguments);
            return output;
        };
    }
    const addCustomStyle = (mode, currentSite, remove) => {
        removeNode(".as-custom-style");
        if (currentSite.invisible || remove) {
            return;
        }
        if (currentSite.style) {
            let styleContent = "";
            if (currentSite.style[1] && mode === "horizontal") {
                styleContent = currentSite.style[1];
            } else if (currentSite.style[2] && mode === "vertical") {
                styleContent = currentSite.style[2];
            }
            if (styleContent) {
                addStyleContent(styleContent, "as-custom-style");
            }
        }
    };
    const protectStyle = function () {
        if (Node.prototype.__as_hooks__) {
            return;
        }
        Node.prototype.removeChild = withHookBefore(Node.prototype.removeChild, (e) => {
            if (e && e.tagName === "STYLE") {
                return !(e.classList.contains("as-icon") || e.classList.contains("as-style") || e.classList.contains("elPopover") || e.classList.contains("elScrollbar"));
            }
            return true;
        });
        Node.prototype.__as_hooks__ = true;
    };
    const changeBodyStyle = function (mode, remove = true) {
        const el2 = getAsRoot();
        el2.classList.remove("body-vertical", "body-horizontal");
        if (!remove) {
            el2.classList.add(`body-${mode}`);
        }
    };
    const search = [
        {
            nameZh: "百度",
            url: "https://www.baidu.com/s?wd=%s&ie=utf-8"
        },
        {
            nameZh: "谷歌",
            url: "https://www.google.com/search?q=%s&ie=utf-8&oe=utf-8"
        },
        {
            nameZh: "必应",
            url: "https://cn.bing.com/search?q=%s"
        },
        {
            nameZh: "DDG",
            url: "https://duckduckgo.com/?q=%s"
        },
        {
            nameZh: "头条搜索",
            url: "https://so.toutiao.com/search?dvpf=pc&keyword=%s"
        },
        {
            nameZh: "360",
            url: "https://www.so.com/s?ie=utf-8&q=%s"
        },
        {
            nameZh: "搜狗",
            url: "https://www.sogou.com/web?query=%s"
        },
        {
            nameZh: "Yandex",
            url: "https://yandex.com/search/?text=%s"
        }
    ];
    const translate = [
        {
            nameZh: "百度翻译",
            url: "http://fanyi.baidu.com/#auto/zh/%s"
        },
        {
            nameZh: "火山翻译",
            url: "https://translate.volcengine.com/translate?source_language=detect&target_language=en&text=%s"
        },
        {
            nameZh: "DeepL",
            url: "https://www.deepl.com/translator#zh/en/%s",
            icon: "https://www.deepl.com/img/favicon/favicon_96.png"
        },
        {
            nameZh: "谷歌翻译",
            url: "https://translate.google.com/?q=%s"
        },
        {
            nameZh: "有道词典",
            url: "http://dict.youdao.com/search?q=%s",
            icon: "https://shared.ydstatic.com/images/favicon.ico"
        },
        {
            nameZh: "必应翻译",
            url: "http://cn.bing.com/dict/search?q=%s"
        }
    ];
    const developer = [
        {
            nameZh: "开发者搜索",
            url: "https://kaifa.baidu.com/searchPage?wd=%s&module=SEARCH"
        },
        {
            nameZh: "MDN",
            url: "https://developer.mozilla.org/zh-CN/search?q=%s"
        },
        {
            nameZh: "stackoverflow",
            url: "https://stackoverflow.com/search?q=%s"
        },
        {
            nameZh: "掘金",
            url: "https://juejin.cn/search?query=%s"
        },
        {
            nameZh: "Can I Use",
            url: "http://caniuse.com/#search=%s",
            icon: "https://caniuse.com/img/favicon-128.png"
        },
        {
            nameZh: "GitHub",
            url: "https://github.com/search?utf8=✓&q=%s"
        },
        {
            nameZh: "w3c",
            url: "http://www.runoob.com/?s=%s"
        },
        {
            nameZh: "GreasyFork",
            url: "https://greasyfork.org/zh-CN/scripts?q=%s&utf8=✓",
            icon: "https://greasyfork.org/packs/media/images/blacklogo96-b2384000fca45aa17e45eb417cbcbb59.png"
        }
    ];
    const video = [
        {
            nameZh: "bilibili",
            url: "http://search.bilibili.com/all?keyword=%s"
        },
        {
            nameZh: "腾讯视频",
            url: "https://v.qq.com/x/search/?q=%s"
        },
        {
            nameZh: "爱奇艺",
            url: "http://so.iqiyi.com/so/q_%s",
            icon: "https://www.iqiyi.com/favicon.ico"
        },
        {
            nameZh: "youtube",
            url: "https://www.youtube.com/results?search_query=%s"
        },
        {
            nameZh: "优酷",
            url: "http://www.soku.com/search_video/q_%s",
            icon: "https://img.alicdn.com/tfs/TB1WeJ9Xrj1gK0jSZFuXXcrHpXa-195-195.png"
        },
        {
            nameZh: "AcFun",
            url: "https://www.acfun.cn/search?keyword=%s"
        },
        {
            nameZh: "搜狐",
            url: "http://so.tv.sohu.com/mts?wd=%s"
        },
        {
            nameZh: "niconico",
            url: "http://www.nicovideo.jp/search/%s"
        }
    ];
    const music = [
        {
            nameZh: "网易音乐",
            url: "http://music.163.com/#/search/m/?s=%s",
            icon: "https://s1.music.126.net/style/favicon.ico"
        },
        {
            nameZh: "一听",
            url: "http://so.1ting.com/all.do?q=%s"
        },
        {
            nameZh: "QQ音乐",
            url: "https://y.qq.com/portal/search.html#page=1&searchid=1&remoteplace=txt.yqq.top&t=song&w=%s"
        },
        {
            nameZh: "百度音乐",
            url: "http://music.baidu.com/search?ie=utf-8&oe=utf-8&key=%s"
        },
        {
            nameZh: "酷我音乐",
            url: "https://kuwo.cn/search/list?key=%s"
        },
        {
            nameZh: "酷狗",
            url: "http://search.5sing.kugou.com/?keyword=%s"
        }
    ];
    const news = [
        {
            nameZh: "谷歌中文",
            url: "https://news.google.com/search?q=%s&hl=zh-CN&gl=CN&ceid=CN:zh-Hans",
            icon: "https://www.google.com/favicon.ico"
        },
        {
            nameZh: "百度新闻",
            url: "http://news.baidu.com/ns?word=%s&tn=news&from=news&cl=2&rn=20&ct=1",
            icon: "https://www.baidu.com/favicon.ico"
        },
        {
            nameZh: "网易-百度",
            url: "https://www.baidu.com/s?wd=%s%20site%3Anews.163.com"
        },
        {
            nameZh: "腾讯新闻",
            url: "https://www.sogou.com/sogou?site=news.qq.com&query=%s"
        },
        {
            nameZh: "凤凰新闻",
            url: "https://so.ifeng.com/?q=%s&c=1"
        },
        {
            nameZh: "CNN",
            url: "https://edition.cnn.com/search/?q=%s"
        },
        {
            nameZh: "BBC",
            url: "https://www.bbc.co.uk/search?q=%s"
        },
        {
            nameZh: "今日头条",
            url: "https://www.toutiao.com/search/?keyword=%s"
        }
    ];
    const social = [
        {
            nameZh: "知乎",
            url: "https://www.zhihu.com/search?q=%s&type=content"
        },
        {
            nameZh: "推特",
            url: "https://twitter.com/search/%s"
        },
        {
            nameZh: "豆瓣",
            url: "https://www.douban.com/search?source=suggest&q=%s"
        },
        {
            nameZh: "百度贴吧",
            url: "https://tieba.baidu.com/f?kw=%s&ie=utf-8"
        },
        {
            nameZh: "新浪微博",
            url: "https://s.weibo.com/weibo?q=%s"
        },
        {
            nameZh: "脸书",
            url: "https://www.facebook.com/search/results.php?q=%s"
        },
        {
            nameZh: "微信搜索",
            url: "http://weixin.sogou.com/weixin?ie=utf8&type=2&query=%s"
        }
    ];
    const knowledge = [
        {
            nameZh: "维基",
            url: "http://zh.wikipedia.org/wiki/%s"
        },
        {
            nameZh: "百度百科",
            url: "http://baike.baidu.com/search/word?pic=1&sug=1&word=%s"
        },
        {
            nameZh: "百度文库",
            url: "http://wenku.baidu.com/search?word=%s&ie=utf-8"
        },
        {
            nameZh: "豆丁文档",
            url: "http://www.docin.com/search.do?searchcat=2&searchType_banner=p&nkey=%s"
        },
        {
            nameZh: "爱问知识",
            url: "http://iask.sina.com.cn/search?searchWord=%s"
        },
        {
            nameZh: "萌娘百科",
            url: "https://zh.moegirl.org.cn/index.php?search=%s",
            icon: "https://zh.moegirl.org.cn/favicon.ico"
        },
        {
            nameZh: "果壳",
            url: "http://www.guokr.com/search/all/?wd=%s"
        },
        {
            nameZh: "Quora",
            url: "https://www.quora.com/search?q=%s"
        }
    ];
    const image = [
        {
            nameZh: "谷歌图片",
            url: "https://www.google.com/search?q=%s&tbm=isch"
        },
        {
            nameZh: "百度图片",
            url: "http://image.baidu.com/search/index?tn=baiduimage&ie=utf-8&word=%s"
        },
        {
            nameZh: "必应图片",
            url: "https://www.bing.com/images/search?q=%s"
        },
        {
            nameZh: "搜狗图片",
            url: "https://pic.sogou.com/pics?query=%s"
        },
        {
            nameZh: "pixiv",
            url: "http://www.pixiv.net/search.php?word=%s"
        },
        {
            nameZh: "flickr",
            url: "http://www.flickr.com/search/?q=%s"
        },
        {
            nameZh: "花瓣",
            url: "http://huaban.com/search/?q=%s"
        },
        {
            nameZh: "Pinterest",
            url: "https://www.pinterest.com/search/pins/?q=%s&rs=typed&term_meta"
        },
        {
            nameZh: "yandex",
            url: "https://yandex.com/images/search?text=%s"
        },
        {
            nameZh: "pixabay",
            url: "https://pixabay.com/images/search/%s/",
            icon: "https://pixabay.com/favicon-32x32.png"
        },
        {
            nameZh: "unsplash",
            url: "https://unsplash.com/s/photos/%s"
        }
    ];
    const shopping = [
        {
            nameZh: "淘宝",
            url: "http://s.taobao.com/search?q=%s",
            icon: "https://www.taobao.com/favicon.ico"
        },
        {
            nameZh: "京东",
            url: "http://search.jd.com/search?keyword=%s&enc=utf-8",
            icon: "https://www.jd.com/favicon.ico"
        },
        {
            nameZh: "苏宁",
            url: "https://search.suning.com/%s/"
        },
        {
            nameZh: "亚马逊",
            url: "http://www.amazon.cn/s/ref=nb_sb_noss?field-keywords=%s",
            icon: "https://www.amazon.cn/favicon.ico"
        },
        {
            nameZh: "天猫",
            url: "http://list.tmall.com/search_product.htm?q=%s"
        },
        {
            nameZh: "值得买",
            url: "http://search.smzdm.com/?c=home&s=%s"
        },
        {
            nameZh: "当当网",
            url: "http://search.dangdang.com/?key=%s"
        },
        {
            nameZh: "1688",
            url: "https://s.1688.com/selloffer/offer_search.htm?keywords=%s"
        }
    ];
    const disk = [
        {
            nameZh: "百度网盘",
            url: "https://pan.baidu.com/disk/main#/index?category=all&search=%s"
        },
        {
            nameZh: "大力盘",
            url: "https://www.dalipan.com/search?keyword=%s"
        },
        {
            nameZh: "大圣盘",
            url: "https://www.dashengpan.com/search?keyword=%s"
        },
        {
            nameZh: "罗马盘",
            url: "https://www.luomapan.com/search?keyword=%s"
        },
        {
            nameZh: "小白盘",
            url: "https://www.xiaobaipan.com/list-%s.html?from=1"
        },
        {
            nameZh: "56网盘",
            url: "https://www.56wangpan.com/search/kw%s"
        }
    ];
    const scholar = [
        {
            nameZh: "谷歌学术",
            url: "https://scholar.google.com/scholar?hl=zh-CN&q=%s",
            favicon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACqklEQVQ4jYWT2UtUURzHL/QH1LMP9hKVNUKFWpP7TDrjU9uEo4WPWlERUbSoueSMaTWjTBCRGV3HiCsSWrTQApVSZBtZWEZSUWZkC3PPne3OzKeHK1NKy4Hfyzl8P+d3vt/fkSRJmpWSVbU9vbxbMZXJSnqZrMx3yErqmrN/r7V+Zf76jjNz5mYXSilZldtKfGBrA5sXcg7Dpg5wX/lzNV+FlmuwsRNy6r9HJFO5v9feBlaXILNWxenT+Pgtzr/W2Oc4azwalqMgLXZ29di9JMXj/xH3P4pybjDKhvYg1qMgpZfKyko3lPk0xr9PF7/4EOfTjwQAiQRcfqpjrlMZeBVjc2eI/FaQ5jlkZWs3qKHENPH7yTg5DYKKExp6DGJxcLRprHILAJr7w5hdIC1wyMquHmNj3/kQN57rALz9Eie/SZBRo/JwLAZAtRLC4jIA7r4pQHqprBS0QkaNysLdAXbKIQAiOjh9Gml7VOS7kaSooGkGwFQqKzYvWFyCgiZBbqPg3mvjRv9ABNPeANeHdSbVBOu8GvYWA9ByMcyKmQCLS5DToFLSKlDuR/kmEox+Moyt6w2TtidAUbPgyKUwZceDWI7MAFhdRgdL9quk7ghw8bGeNPXdZJzKjiCZNSpZtSp5jQKb9zeA1SUw16ms9WqcvBlhcDTG4KsYoxO/ohXhBFWng5jrVCwuQbHnN0B2vaDiRJCJqdzvvtRZfUyQ3SA4dSuCbtjC0JsY5npBYRLg9PfaPEYK14f15NA4fRpLD6jkHxKY9ga4PWKcvRyPk9toGF7sBWmR45S/pN0Y5a6BaLLdroEoGTUqy6oNc99NGk85dCHM8oMCqzuIvQ2k2XPzLAWNX9UiD9i90D0EE8Yo8GQc/A/g2QSMfIHaPsg9DMUe4/dmbrnz8CdxKwtDTtdexQAAAABJRU5ErkJggg=="
        },
        {
            nameZh: "百度学术",
            url: "http://xueshu.baidu.com/s?wd=%s"
        },
        {
            nameZh: "知网",
            url: "https://kns.cnki.net/kns8s/defaultresult/index?kw=%s"
        },
        {
            nameZh: "JSTOR",
            url: "http://www.jstor.org/action/doAdvancedSearch?q0=%s"
        },
        {
            nameZh: "Springer",
            url: "http://rd.springer.com/search?query=%s"
        },
        {
            nameZh: "国家图书馆",
            url: "http://find.nlc.cn/search/doSearch?query=%s&secQuery=&actualQuery=%s&searchType=2&docType=%E5%85%A8%E9%83%A8&isGroup=isGroup&targetFieldLog=%E5%85%A8%E9%83%A8%E5%AD%97%E6%AE%B5&orderBy=RELATIVE"
        }
    ];
    const list$2 = [
        {
            nameZh: "搜索",
            name: "search",
            list: search
        },
        {
            nameZh: "翻译",
            name: "translate",
            list: translate
        },
        {
            nameZh: "视频",
            name: "video",
            list: video
        },
        {
            nameZh: "购物",
            name: "shopping",
            list: shopping
        },
        {
            nameZh: "音乐",
            name: "music",
            list: music
        },
        {
            nameZh: "开发",
            name: "developer",
            list: developer
        },
        {
            nameZh: "新闻",
            name: "news",
            list: news
        },
        {
            nameZh: "社交",
            name: "social",
            list: social
        },
        {
            nameZh: "百科",
            name: "knowledge",
            list: knowledge
        },
        {
            nameZh: "图片",
            name: "image",
            list: image
        },
        {
            nameZh: "网盘",
            name: "disk",
            list: disk
        },
        {
            nameZh: "学术",
            name: "scholar",
            list: scholar
        },
        {
            nameZh: "常用",
            name: "personal",
            list: []
        }
    ].map((item) => ({
        ...item,
        data: {
            visible: true
        },
        list: item.list.map((child) => ({
            ...child,
            data: {
                visible: true
            }
        }))
    }));
    vue.reactive({
        tmVersion: ""
    });
    function getStorageFn(name2) {
        const formatName = getName(name2);
        return new Promise((resolve, reject) => {
            if (!_GM_getValue) {
                return reject(Error("没有找到GM_getValue"));
            }
            const item = _GM_getValue(formatName);
            if (item === void 0) {
                return reject(`GM_getValue没有获取到key:${name2}的变量`);
            }
            return resolve(parseJson(item));
        });
    }
    function setStorageFn(name2, value2) {
        const formatName = getName(name2);
        return new Promise((resolve, reject) => {
            if (value2 === void 0) {
                reject(Error("setStorage"));
            } else if (!_GM_setValue) {
                reject(Error("没有找到GM_setValue"));
            } else {
                _GM_setValue(formatName, value2);
                resolve(value2);
            }
        });
    }
    function delStorageFn(name2) {
        const formatName = getName(name2);
        return new Promise((resolve, reject) => {
            if (!_GM_deleteValue) {
                return reject(Error("没有找到GM_deleteValue"));
            }
            _GM_deleteValue(formatName);
            return resolve(true);
        });
    }
    let getStorage = getStorageFn;
    let setStorage = setStorageFn;
    let delStorage = delStorageFn;
    const scriptLoaded = getName("script-loaded");
    const pageLoaded = getName("page-loaded");
    function initTmMethods() {
        const emit = function () {
            document.dispatchEvent(new CustomEvent(scriptLoaded, {
                detail: {
                    version,
                    getStorage: getStorageFn,
                    setStorage: setStorageFn,
                    delStorage: delStorageFn
                }
            }));
        };
        document.addEventListener(pageLoaded, emit);
        emit();
    }
    const sitesData = vue.ref([]);
    function getSites(val) {
        if (Array.isArray(val) && val.length > 0) {
            return val;
        } else {
            return list$2;
        }
    }
    function initSites(sites2, type) {
        if (type === "tm") {
            return sites2.filter((item) => Array.isArray(item.list) && item.list.length > 0 && item.data && item.data.visible).map((item) => ({
                ...item,
                show: false
            }));
        }
        return sites2;
    }
    getStorage("sites").then((val) => {
        sitesData.value = getSites(val);
    }).catch(() => {
        sitesData.value = list$2;
    });
    function resetSites() {
        if (window.confirm("确认要重置所有网址吗")) {
            delStorage("sites");
        }
    }
    function useSites(type) {
        return {
            sites: vue.computed(() => initSites(sitesData.value, type)),
            resetSites
        };
    }
    const width = 100;
    const list$1 = [
        {
            url: /\/\/www\.google\.com(.hk)?\/search/
        },
        {
            url: /\/\/www\.baidu\.com\/(s|baidu)\?/,
            style: {
                1: ".selected-search-box { transform: translateY(-30px);}"
            }
        },
        {
            url: /\/\/[^.]*\.bing\.com\/search/
        },
        {
            url: /\/\/duckduckgo\.com\/*/
        },
        {
            url: /\/\/searx\.me\/\?q/
        },
        {
            url: /\/\/www\.sogou\.com\/(?:web|s)/,
            selectors: "#upquery"
        },
        {
            url: /\/\/yandex\.com\/search/
        },
        {
            url: /\/\/google\.infinitynewtab\.com\/\?q/
        },
        {
            url: /\/\/baike\.baidu\.com\/item/
        },
        {
            url: /\/\/baike\.baidu\.com\/search/
        },
        {
            url: /\/\/wenku\.baidu\.com\/search/
        },
        {
            url: /\/\/zhidao\.baidu\.com\/search/
        },
        {
            url: /\/\/\D{2,5}\.wikipedia\.org\/wiki/
        },
        {
            url: /\/\/www\.zhihu\.com\/search\?/
        },
        {
            url: /\/\/www\.so\.com\/s/
        },
        {
            url: /\/\/so\.baike\.com\/doc/
        },
        {
            url: /\/\/www\.baike\.com\/wiki/
        },
        {
            url: /\/\/www\.docin\.com\/search\.do/
        },
        {
            url: /\/\/zhihu\.sogou\.com\/zhihu/,
            selectors: "#upquery"
        },
        {
            url: /\/\/weixin\.sogou\.com\/weixin\?/,
            style: {
                2: `.headsearch#scroll-header { left:unset; }`
            }
        },
        {
            url: /\/\/www\.quora\.com\/search\?/
        },
        {
            url: /\/\/stackoverflow\.com\/search\?/,
            style: {
                2: `.top-bar._fixed { right: ${width}px }`
            }
        },
        {
            url: /\/\/search\.bilibili\.com\/all/,
            selectors: ".search-input-el"
        },
        {
            url: /\/\/www\.acfun\.cn\/search/,
            selectors: ".search-text--standalone"
        },
        {
            url: /\/\/www\.youtube\.com\/results/,
            style: {
                2: `ytd-app {margin-left:${width}px !important;}ytd-mini-guide-renderer.ytd-app, app-drawer{left:${width}px !important;}#masthead-container.ytd-app {width: calc(100% - 100px);}`
            }
        },
        {
            url: /\/\/www\.nicovideo\.jp\/search\//
        },
        {
            url: /\/\/so\.iqiyi\.com\/so\/q/
        },
        {
            url: /\/\/v\.qq\.com\/x\/search/
        },
        {
            url: /\/\/music\.baidu\.com\/search/
        },
        {
            url: /\/\/so\.1ting\.com\/all\.do/
        },
        {
            url: /\/\/s\.music\.qq\.com/
        },
        {
            url: /\/\/music\.163\.com\/.*?#\/search/
        },
        {
            url: /\/\/image\.baidu\.com\/search/
        },
        {
            url: /\/\/\w{2,10}\.google(?:\.\D{1,3}){1,2}\/[^?]+\?.*&tbm=isch/
        },
        {
            url: /\/\/.*\.bing\.com\/images\/search/
        },
        {
            url: /\/\/www\.flickr\.com\/search\//
        },
        {
            url: /^http:\/\/www\.pixiv\.net\/search\.php/
        },
        {
            url: /\/\/huaban\.com\/search\?/
        },
        {
            url: /\/\/www\.pinterest\.com\/search\//
        },
        {
            url: /\/\/thepiratebay\.org\/search/
        },
        {
            url: /\/\/subhd\.tv\/search/
        },
        {
            url: /\/\/translate\.google(?:\.\D{1,4}){1,2}/
        },
        {
            url: /\/\/fanyi\.baidu\.com/
        },
        {
            url: /\/\/.*\.bing\.com\/dict\/search\?q=/
        },
        {
            url: /\/\/dict\.youdao\.com\/search/
        },
        {
            url: /\/\/dict\.youdao\.com\/w/
        },
        {
            url: /\/\/dict\.cn\/./
        },
        {
            url: /\/\/s\.taobao\.com\/search/
        },
        {
            url: /\/\/list\.tmall\.com\/search_product\.htm.*from=chaoshi/
        },
        {
            url: /\/\/list\.tmall\.com\/search_product\.htm/
        },
        {
            url: /\/\/search\.jd\.com\/search/
        },
        {
            url: /\/\/search\.suning\.com/
        },
        {
            url: /\/\/search\.smzdm\.com\/\?/
        },
        {
            url: /\/\/s\.weibo\.com\/weibo\?q=/
        },
        {
            url: /\/\/tieba\.baidu\.com\/f\/search/
        },
        {
            url: /\/\/(movie|music|book)\.douban\.com\/subject_search?/
        },
        {
            url: /\/\/www\.douban\.com\/search/
        },
        {
            url: /\/\/xueshu\.baidu\.com\/(?:s|baidu)/,
            style: {
                2: `#left_menu_content { left: ${width}px !important;}`
            }
        },
        {
            url: /\/\/scholar\.google(?:\.\D{1,3}){1,2}\/scholar\?/
        },
        {
            url: /\/\/github\.com\/search/
        },
        {
            url: /\/\/www\.startpage\.com\/sp\/search/
        },
        {
            url: /\/\/all-search\.github\.io/,
            invisible: true
        },
        {
            url: /\/\/endday\.gitee\.io/,
            invisible: true
        }
    ];
    const routerChange = (cb) => {
        history.pushState = withHookAfter(history.pushState, cb);
        history.replaceState = withHookAfter(history.replaceState, cb);
        window.addEventListener("popstate", cb);
        window.addEventListener("yt-navigate-finish", cb);
        window.addEventListener("hashchange", cb);
    };
    const { sites: sites$1 } = useSites("tm");
    function getMenuItem() {
        let targetItem = null;
        let urlObj = null;
        const curItem = new URL(window.location.href);
        sites$1.value.some((category) => {
            category.list.find((item) => {
                const menuItem2 = new URL(item.url);
                if (menuItem2.hostname === curItem.hostname && menuItem2.pathname === curItem.pathname) {
                    targetItem = item;
                    urlObj = menuItem2;
                    return true;
                }
                return false;
            });
        });
        if (urlObj) {
            for (const key of urlObj.searchParams.keys()) {
                if (!curItem.searchParams.has(key)) {
                    targetItem = null;
                }
            }
        }
        return targetItem;
    }
    function getSite() {
        const target = list$1.find((item) => item.url.test(window.location.href.toLowerCase()));
        const menuItem2 = getMenuItem();
        if (target) {
            return {
                url: target.url,
                invisible: !!target.invisible,
                disabled: !!target.disabled,
                style: target.style,
                selectors: target.selectors,
                query: target.query
            };
        } else if (menuItem2) {
            return {
                url: menuItem2.url,
                invisible: false,
                disabled: false,
                style: menuItem2.style,
                selectors: menuItem2.selectors,
                query: menuItem2.query
            };
        }
        return {
            url: "",
            invisible: true,
            disabled: true,
            style: {},
            selectors: null,
            query: null
        };
    }
    vue.watch(sites$1, () => {
        updateCurrentSite();
    });
    function updateCurrentSite() {
        const newSite = getSite();
        Object.keys(site).forEach((key) => {
            site[key] = newSite[key] || "";
        });
    }
    routerChange(() => {
        updateCurrentSite();
    });
    let site = vue.reactive(getSite());
    const isFullScreenRef = vue.ref(false);
    function isFullScreen() {
        return document.fullscreen || document.webkitIsFullScreen || document.mozFullScreen || document.msFullscreenElement;
    }
    function onFullScreenChange(handler) {
        const handleResize = function () {
            if (!isFullScreen()) {
                handler();
            }
        };
        document.addEventListener("fullscreenchange", handler);
        document.addEventListener("webkitfullscreenchange", handler);
        document.addEventListener("mozfullscreenchange", handler);
        document.addEventListener("MSFullscreenChange", handler);
        document.addEventListener("resize", handleResize);
        return () => {
            document.removeEventListener("fullscreenchange", handler);
            document.removeEventListener("webkitfullscreenchange", handler);
            document.removeEventListener("mozfullscreenchange", handler);
            document.removeEventListener("MSFullscreenChange", handler);
            document.removeEventListener("resize", handleResize);
        };
    }
    function useFullScreen() {
        const removeListener = onFullScreenChange(() => {
            isFullScreenRef.value = isFullScreen();
        });
        vue.onUnmounted(() => {
            removeListener();
        });
        return {
            isFullScreen: isFullScreenRef
        };
    }
    const isDef = (val) => val !== void 0 && val !== null;
    async function init(name2, defaultVal, reg2 = "") {
        try {
            const session = await getStorage(name2);
            if (reg2 && reg2.test(session)) {
                return session;
            } else if (isDef(session)) {
                return session;
            } else {
                return defaultVal;
            }
        } catch (e) {
            return defaultVal;
        }
    }
    function useConfig(params) {
        const { name: name2, initVal, defaultVal, reg: reg2 } = params;
        let val = "";
        if (isDef(initVal)) {
            val = initVal;
        } else if (isDef(defaultVal)) {
            val = defaultVal;
        }
        const valRef = vue.ref(val);
        init(name2, defaultVal, reg2).then((val2) => {
            valRef.value = val2;
        });
        return vue.computed({
            get: () => valRef.value,
            set: (val2) => {
                valRef.value = val2;
                setStorage(name2, isDef(val2) ? val2 : defaultVal);
            }
        });
    }
    const value$1 = useConfig({
        name: "mode",
        defaultVal: "horizontal",
        reg: /[vertical|horizontal]/
    });
    function useMode() {
        return {
            value: value$1
        };
    }
    function throttle$1(fn, delay = 500) {
        let canRun = true;
        return function () {
            if (!canRun)
                return;
            canRun = false;
            setTimeout(() => {
                fn.apply(this, arguments);
                canRun = true;
            }, delay);
        };
    }
    const y = vue.ref(0);
    const direction$1 = vue.ref("");
    function getDirection(newVal, oldVal, limit) {
        if (newVal < oldVal - limit) {
            return "top";
        } else if (newVal > oldVal + limit) {
            return "bottom";
        } else {
            return "mid";
        }
    }
    function useScroll(triggerLimit = 0) {
        const scrollHandler = throttle$1(function (e) {
            const eventTarget = e.target === document ? e.target.documentElement : e.target;
            const scrollTop2 = eventTarget.scrollTop;
            const distance = getDirection(scrollTop2, y.value, triggerLimit);
            vue.nextTick().then(() => {
                direction$1.value = distance;
            });
            y.value = scrollTop2;
        }, 200);
        if (window) {
            window.addEventListener("scroll", scrollHandler);
        }
        vue.onBeforeUnmount(() => {
            if (window) {
                window.removeEventListener("scroll", scrollHandler);
            }
        });
        return {
            y,
            direction: direction$1
        };
    }
    const options = vue.reactive(/* @__PURE__ */ new Map([
        ["none", "关闭"],
        ["top", "向上"],
        ["bottom", "向下"],
        ["all", "滚动"]
    ]));
    const show = useConfig({
        name: "switchShow",
        defaultVal: 1,
        initVal: 2,
        reg: /[1|2]/
    });
    const scrollHide = useConfig({
        name: "scrollHide",
        defaultVal: "none",
        reg: /[none|top|bottom|all]/
    });
    const { direction } = useScroll(100);
    vue.watch([direction, scrollHide], ([newDirection, newScrollHide]) => {
        if (show.value && newScrollHide !== "none" && (newDirection === newScrollHide || newScrollHide === "all")) {
            show.value = 2;
        }
    });
    function useSwitchShow() {
        return {
            show,
            scrollHide,
            options
        };
    }
    const _export_sfc = (sfc, props) => {
        const target = sfc.__vccOpts || sfc;
        for (const [key, val] of props) {
            target[key] = val;
        }
        return target;
    };
    const _sfc_main$j = {
        name: "logo",
        props: {
            mode: {
                type: String,
                default: "horizontal",
                validator: (val) => ["horizontal", "vertical"].indexOf(val) > -1
            }
        },
        setup() {
            return {
                isMobile: isMobile()
            };
        }
    };
    const _hoisted_1$d = /* @__PURE__ */ vue.createElementVNode("p", { class: "as-title-inner" }, " All Search ", -1);
    const _hoisted_2$9 = [
        _hoisted_1$d
    ];
    function _sfc_render$j(_ctx, _cache, $props, $setup, $data, $options) {
        return !$setup.isMobile ? (vue.openBlock(), vue.createElementBlock("a", {
            key: 0,
            class: vue.normalizeClass(["as-title", `as-title-${$props.mode}`]),
            href: "https://github.com/all-search/all-search",
            target: "_blank"
        }, _hoisted_2$9, 2)) : vue.createCommentVNode("", true);
    }
    const logo = /* @__PURE__ */ _export_sfc(_sfc_main$j, [["render", _sfc_render$j]]);
    var MapShim = function () {
        if (typeof Map !== "undefined") {
            return Map;
        }
        function getIndex(arr, key) {
            var result = -1;
            arr.some(function (entry, index2) {
                if (entry[0] === key) {
                    result = index2;
                    return true;
                }
                return false;
            });
            return result;
        }
        return (
            /** @class */
            function () {
                function class_1() {
                    this.__entries__ = [];
                }
                Object.defineProperty(class_1.prototype, "size", {
                    /**
                     * @returns {boolean}
                     */
                    get: function () {
                        return this.__entries__.length;
                    },
                    enumerable: true,
                    configurable: true
                });
                class_1.prototype.get = function (key) {
                    var index2 = getIndex(this.__entries__, key);
                    var entry = this.__entries__[index2];
                    return entry && entry[1];
                };
                class_1.prototype.set = function (key, value2) {
                    var index2 = getIndex(this.__entries__, key);
                    if (~index2) {
                        this.__entries__[index2][1] = value2;
                    } else {
                        this.__entries__.push([key, value2]);
                    }
                };
                class_1.prototype.delete = function (key) {
                    var entries = this.__entries__;
                    var index2 = getIndex(entries, key);
                    if (~index2) {
                        entries.splice(index2, 1);
                    }
                };
                class_1.prototype.has = function (key) {
                    return !!~getIndex(this.__entries__, key);
                };
                class_1.prototype.clear = function () {
                    this.__entries__.splice(0);
                };
                class_1.prototype.forEach = function (callback, ctx) {
                    if (ctx === void 0) {
                        ctx = null;
                    }
                    for (var _i = 0, _a = this.__entries__; _i < _a.length; _i++) {
                        var entry = _a[_i];
                        callback.call(ctx, entry[1], entry[0]);
                    }
                };
                return class_1;
            }()
        );
    }();
    var isBrowser = typeof window !== "undefined" && typeof document !== "undefined" && window.document === document;
    var global$1 = function () {
        if (typeof global !== "undefined" && global.Math === Math) {
            return global;
        }
        if (typeof self !== "undefined" && self.Math === Math) {
            return self;
        }
        if (typeof window !== "undefined" && window.Math === Math) {
            return window;
        }
        return Function("return this")();
    }();
    var requestAnimationFrame$1 = function () {
        if (typeof requestAnimationFrame === "function") {
            return requestAnimationFrame.bind(global$1);
        }
        return function (callback) {
            return setTimeout(function () {
                return callback(Date.now());
            }, 1e3 / 60);
        };
    }();
    var trailingTimeout = 2;
    function throttle(callback, delay) {
        var leadingCall = false, trailingCall = false, lastCallTime = 0;
        function resolvePending() {
            if (leadingCall) {
                leadingCall = false;
                callback();
            }
            if (trailingCall) {
                proxy();
            }
        }
        function timeoutCallback() {
            requestAnimationFrame$1(resolvePending);
        }
        function proxy() {
            var timeStamp = Date.now();
            if (leadingCall) {
                if (timeStamp - lastCallTime < trailingTimeout) {
                    return;
                }
                trailingCall = true;
            } else {
                leadingCall = true;
                trailingCall = false;
                setTimeout(timeoutCallback, delay);
            }
            lastCallTime = timeStamp;
        }
        return proxy;
    }
    var REFRESH_DELAY = 20;
    var transitionKeys = ["top", "right", "bottom", "left", "width", "height", "size", "weight"];
    var mutationObserverSupported = typeof MutationObserver !== "undefined";
    var ResizeObserverController = (
        /** @class */
        function () {
            function ResizeObserverController2() {
                this.connected_ = false;
                this.mutationEventsAdded_ = false;
                this.mutationsObserver_ = null;
                this.observers_ = [];
                this.onTransitionEnd_ = this.onTransitionEnd_.bind(this);
                this.refresh = throttle(this.refresh.bind(this), REFRESH_DELAY);
            }
            ResizeObserverController2.prototype.addObserver = function (observer) {
                if (!~this.observers_.indexOf(observer)) {
                    this.observers_.push(observer);
                }
                if (!this.connected_) {
                    this.connect_();
                }
            };
            ResizeObserverController2.prototype.removeObserver = function (observer) {
                var observers2 = this.observers_;
                var index2 = observers2.indexOf(observer);
                if (~index2) {
                    observers2.splice(index2, 1);
                }
                if (!observers2.length && this.connected_) {
                    this.disconnect_();
                }
            };
            ResizeObserverController2.prototype.refresh = function () {
                var changesDetected = this.updateObservers_();
                if (changesDetected) {
                    this.refresh();
                }
            };
            ResizeObserverController2.prototype.updateObservers_ = function () {
                var activeObservers = this.observers_.filter(function (observer) {
                    return observer.gatherActive(), observer.hasActive();
                });
                activeObservers.forEach(function (observer) {
                    return observer.broadcastActive();
                });
                return activeObservers.length > 0;
            };
            ResizeObserverController2.prototype.connect_ = function () {
                if (!isBrowser || this.connected_) {
                    return;
                }
                document.addEventListener("transitionend", this.onTransitionEnd_);
                window.addEventListener("resize", this.refresh);
                if (mutationObserverSupported) {
                    this.mutationsObserver_ = new MutationObserver(this.refresh);
                    this.mutationsObserver_.observe(document, {
                        attributes: true,
                        childList: true,
                        characterData: true,
                        subtree: true
                    });
                } else {
                    document.addEventListener("DOMSubtreeModified", this.refresh);
                    this.mutationEventsAdded_ = true;
                }
                this.connected_ = true;
            };
            ResizeObserverController2.prototype.disconnect_ = function () {
                if (!isBrowser || !this.connected_) {
                    return;
                }
                document.removeEventListener("transitionend", this.onTransitionEnd_);
                window.removeEventListener("resize", this.refresh);
                if (this.mutationsObserver_) {
                    this.mutationsObserver_.disconnect();
                }
                if (this.mutationEventsAdded_) {
                    document.removeEventListener("DOMSubtreeModified", this.refresh);
                }
                this.mutationsObserver_ = null;
                this.mutationEventsAdded_ = false;
                this.connected_ = false;
            };
            ResizeObserverController2.prototype.onTransitionEnd_ = function (_a) {
                var _b = _a.propertyName, propertyName = _b === void 0 ? "" : _b;
                var isReflowProperty = transitionKeys.some(function (key) {
                    return !!~propertyName.indexOf(key);
                });
                if (isReflowProperty) {
                    this.refresh();
                }
            };
            ResizeObserverController2.getInstance = function () {
                if (!this.instance_) {
                    this.instance_ = new ResizeObserverController2();
                }
                return this.instance_;
            };
            ResizeObserverController2.instance_ = null;
            return ResizeObserverController2;
        }()
    );
    var defineConfigurable = function (target, props) {
        for (var _i = 0, _a = Object.keys(props); _i < _a.length; _i++) {
            var key = _a[_i];
            Object.defineProperty(target, key, {
                value: props[key],
                enumerable: false,
                writable: false,
                configurable: true
            });
        }
        return target;
    };
    var getWindowOf = function (target) {
        var ownerGlobal = target && target.ownerDocument && target.ownerDocument.defaultView;
        return ownerGlobal || global$1;
    };
    var emptyRect = createRectInit(0, 0, 0, 0);
    function toFloat(value2) {
        return parseFloat(value2) || 0;
    }
    function getBordersSize(styles) {
        var positions = [];
        for (var _i = 1; _i < arguments.length; _i++) {
            positions[_i - 1] = arguments[_i];
        }
        return positions.reduce(function (size, position) {
            var value2 = styles["border-" + position + "-width"];
            return size + toFloat(value2);
        }, 0);
    }
    function getPaddings(styles) {
        var positions = ["top", "right", "bottom", "left"];
        var paddings = {};
        for (var _i = 0, positions_1 = positions; _i < positions_1.length; _i++) {
            var position = positions_1[_i];
            var value2 = styles["padding-" + position];
            paddings[position] = toFloat(value2);
        }
        return paddings;
    }
    function getSVGContentRect(target) {
        var bbox = target.getBBox();
        return createRectInit(0, 0, bbox.width, bbox.height);
    }
    function getHTMLElementContentRect(target) {
        var clientWidth = target.clientWidth, clientHeight = target.clientHeight;
        if (!clientWidth && !clientHeight) {
            return emptyRect;
        }
        var styles = getWindowOf(target).getComputedStyle(target);
        var paddings = getPaddings(styles);
        var horizPad = paddings.left + paddings.right;
        var vertPad = paddings.top + paddings.bottom;
        var width2 = toFloat(styles.width), height = toFloat(styles.height);
        if (styles.boxSizing === "border-box") {
            if (Math.round(width2 + horizPad) !== clientWidth) {
                width2 -= getBordersSize(styles, "left", "right") + horizPad;
            }
            if (Math.round(height + vertPad) !== clientHeight) {
                height -= getBordersSize(styles, "top", "bottom") + vertPad;
            }
        }
        if (!isDocumentElement(target)) {
            var vertScrollbar = Math.round(width2 + horizPad) - clientWidth;
            var horizScrollbar = Math.round(height + vertPad) - clientHeight;
            if (Math.abs(vertScrollbar) !== 1) {
                width2 -= vertScrollbar;
            }
            if (Math.abs(horizScrollbar) !== 1) {
                height -= horizScrollbar;
            }
        }
        return createRectInit(paddings.left, paddings.top, width2, height);
    }
    var isSVGGraphicsElement = function () {
        if (typeof SVGGraphicsElement !== "undefined") {
            return function (target) {
                return target instanceof getWindowOf(target).SVGGraphicsElement;
            };
        }
        return function (target) {
            return target instanceof getWindowOf(target).SVGElement && typeof target.getBBox === "function";
        };
    }();
    function isDocumentElement(target) {
        return target === getWindowOf(target).document.documentElement;
    }
    function getContentRect(target) {
        if (!isBrowser) {
            return emptyRect;
        }
        if (isSVGGraphicsElement(target)) {
            return getSVGContentRect(target);
        }
        return getHTMLElementContentRect(target);
    }
    function createReadOnlyRect(_a) {
        var x = _a.x, y2 = _a.y, width2 = _a.width, height = _a.height;
        var Constr = typeof DOMRectReadOnly !== "undefined" ? DOMRectReadOnly : Object;
        var rect = Object.create(Constr.prototype);
        defineConfigurable(rect, {
            x,
            y: y2,
            width: width2,
            height,
            top: y2,
            right: x + width2,
            bottom: height + y2,
            left: x
        });
        return rect;
    }
    function createRectInit(x, y2, width2, height) {
        return { x, y: y2, width: width2, height };
    }
    var ResizeObservation = (
        /** @class */
        function () {
            function ResizeObservation2(target) {
                this.broadcastWidth = 0;
                this.broadcastHeight = 0;
                this.contentRect_ = createRectInit(0, 0, 0, 0);
                this.target = target;
            }
            ResizeObservation2.prototype.isActive = function () {
                var rect = getContentRect(this.target);
                this.contentRect_ = rect;
                return rect.width !== this.broadcastWidth || rect.height !== this.broadcastHeight;
            };
            ResizeObservation2.prototype.broadcastRect = function () {
                var rect = this.contentRect_;
                this.broadcastWidth = rect.width;
                this.broadcastHeight = rect.height;
                return rect;
            };
            return ResizeObservation2;
        }()
    );
    var ResizeObserverEntry = (
        /** @class */
        function () {
            function ResizeObserverEntry2(target, rectInit) {
                var contentRect = createReadOnlyRect(rectInit);
                defineConfigurable(this, { target, contentRect });
            }
            return ResizeObserverEntry2;
        }()
    );
    var ResizeObserverSPI = (
        /** @class */
        function () {
            function ResizeObserverSPI2(callback, controller, callbackCtx) {
                this.activeObservations_ = [];
                this.observations_ = new MapShim();
                if (typeof callback !== "function") {
                    throw new TypeError("The callback provided as parameter 1 is not a function.");
                }
                this.callback_ = callback;
                this.controller_ = controller;
                this.callbackCtx_ = callbackCtx;
            }
            ResizeObserverSPI2.prototype.observe = function (target) {
                if (!arguments.length) {
                    throw new TypeError("1 argument required, but only 0 present.");
                }
                if (typeof Element === "undefined" || !(Element instanceof Object)) {
                    return;
                }
                if (!(target instanceof getWindowOf(target).Element)) {
                    throw new TypeError('parameter 1 is not of type "Element".');
                }
                var observations = this.observations_;
                if (observations.has(target)) {
                    return;
                }
                observations.set(target, new ResizeObservation(target));
                this.controller_.addObserver(this);
                this.controller_.refresh();
            };
            ResizeObserverSPI2.prototype.unobserve = function (target) {
                if (!arguments.length) {
                    throw new TypeError("1 argument required, but only 0 present.");
                }
                if (typeof Element === "undefined" || !(Element instanceof Object)) {
                    return;
                }
                if (!(target instanceof getWindowOf(target).Element)) {
                    throw new TypeError('parameter 1 is not of type "Element".');
                }
                var observations = this.observations_;
                if (!observations.has(target)) {
                    return;
                }
                observations.delete(target);
                if (!observations.size) {
                    this.controller_.removeObserver(this);
                }
            };
            ResizeObserverSPI2.prototype.disconnect = function () {
                this.clearActive();
                this.observations_.clear();
                this.controller_.removeObserver(this);
            };
            ResizeObserverSPI2.prototype.gatherActive = function () {
                var _this = this;
                this.clearActive();
                this.observations_.forEach(function (observation) {
                    if (observation.isActive()) {
                        _this.activeObservations_.push(observation);
                    }
                });
            };
            ResizeObserverSPI2.prototype.broadcastActive = function () {
                if (!this.hasActive()) {
                    return;
                }
                var ctx = this.callbackCtx_;
                var entries = this.activeObservations_.map(function (observation) {
                    return new ResizeObserverEntry(observation.target, observation.broadcastRect());
                });
                this.callback_.call(ctx, entries, ctx);
                this.clearActive();
            };
            ResizeObserverSPI2.prototype.clearActive = function () {
                this.activeObservations_.splice(0);
            };
            ResizeObserverSPI2.prototype.hasActive = function () {
                return this.activeObservations_.length > 0;
            };
            return ResizeObserverSPI2;
        }()
    );
    var observers = typeof WeakMap !== "undefined" ? /* @__PURE__ */ new WeakMap() : new MapShim();
    var ResizeObserver = (
        /** @class */
        function () {
            function ResizeObserver2(callback) {
                if (!(this instanceof ResizeObserver2)) {
                    throw new TypeError("Cannot call a class as a function.");
                }
                if (!arguments.length) {
                    throw new TypeError("1 argument required, but only 0 present.");
                }
                var controller = ResizeObserverController.getInstance();
                var observer = new ResizeObserverSPI(callback, controller, this);
                observers.set(this, observer);
            }
            return ResizeObserver2;
        }()
    );
    [
        "observe",
        "unobserve",
        "disconnect"
    ].forEach(function (method) {
        ResizeObserver.prototype[method] = function () {
            var _a;
            return (_a = observers.get(this))[method].apply(_a, arguments);
        };
    });
    var index$1 = function () {
        if (typeof global$1.ResizeObserver !== "undefined") {
            return global$1.ResizeObserver;
        }
        return ResizeObserver;
    }();
    const isArray = Array.isArray;
    const isString = (val) => typeof val === "string";
    const toObject = (arr) => {
        let obj = {};
        arr.map((item) => {
            obj[item.key] = item.value;
        });
        return obj;
    };
    const SCOPE = "MElScrollbar";
    const isNumber = (val) => {
        return typeof val === "number" && !isNaN(val);
    };
    const debugWarn = (...args) => {
        console.error(...args);
    };
    const resizeHandler = (entries) => {
        for (const entry of entries) {
            const listeners = entry.target.__resizeListeners__ || [];
            if (listeners.length) {
                listeners.forEach((fn) => {
                    fn();
                });
            }
        }
    };
    const addResizeListener = (element, fn) => {
        if (!element.__resizeListeners__) {
            element.__resizeListeners__ = [];
            element.__ro__ = new index$1(resizeHandler);
            element.__ro__.observe(element);
        }
        element.__resizeListeners__.push(fn);
    };
    const removeResizeListener = (element, fn) => {
        if (!element || !element.__resizeListeners__)
            return;
        element.__resizeListeners__.splice(element.__resizeListeners__.indexOf(fn), 1);
        if (!element.__resizeListeners__.length) {
            element.__ro__.disconnect();
        }
    };
    const addUnit = (value2) => {
        if (isString(value2)) {
            return value2;
        } else if (isNumber(value2)) {
            return value2 + "px";
        }
        debugWarn(SCOPE, "属性 value 必须是 string 或 number 类型");
        return "";
    };
    const on = (element, event, handler, useCapture = false) => {
        if (element && event && handler) {
            element.addEventListener(event, handler, useCapture);
        }
    };
    const off = (element, event, handler, useCapture = false) => {
        if (element && event && handler) {
            element.removeEventListener(event, handler, useCapture);
        }
    };
    const BAR_MAP = {
        vertical: {
            offset: "offsetHeight",
            scroll: "scrollTop",
            scrollSize: "scrollHeight",
            size: "height",
            key: "vertical",
            axis: "Y",
            client: "clientY",
            direction: "top"
        },
        horizontal: {
            offset: "offsetWidth",
            scroll: "scrollLeft",
            scrollSize: "scrollWidth",
            size: "width",
            key: "horizontal",
            axis: "X",
            client: "clientX",
            direction: "left"
        }
    };
    const renderThumbStyle = ({ move, size, bar }) => {
        const style = {};
        const translate2 = `translate${bar.axis}(${move}%)`;
        style[bar.size] = size;
        style.transform = translate2;
        style.msTransform = translate2;
        style.webkitTransform = translate2;
        return style;
    };
    const _sfc_main$i = vue.defineComponent({
        props: {
            vertical: Boolean,
            size: {
                type: String,
                default: ""
            },
            move: {
                type: Number,
                default: 0
            },
            ratio: {
                type: Number,
                default: 0
            },
            always: Boolean
        },
        setup(props) {
            const visible2 = vue.ref(false);
            const barStore = vue.reactive({});
            let cursorDown = false;
            let cursorLeave = false;
            const thumb = vue.ref(null);
            const instance = vue.ref(null);
            let onselectstartStore = null;
            const { proxy } = vue.getCurrentInstance();
            const scrollbar2 = proxy.$parent;
            const bar = vue.computed(() => {
                return BAR_MAP[props.vertical ? "vertical" : "horizontal"];
            });
            const offsetRatio = vue.computed(() => {
                return instance.value[bar.value.offset] ** 2 / scrollbar2.wrap[bar.value.scrollSize] / props.ratio / thumb.value[bar.value.offset];
            });
            const thumbStyle = vue.computed(() => {
                return renderThumbStyle({
                    size: props.size,
                    move: props.move,
                    bar: bar.value
                });
            });
            const mouseMoveDocumentHandler = (e) => {
                if (cursorDown === false)
                    return;
                const prevPage = barStore[bar.value.axis];
                if (!prevPage)
                    return;
                const offset = (instance.value.getBoundingClientRect()[bar.value.direction] - e[bar.value.client]) * -1;
                const thumbClickPosition = thumb.value[bar.value.offset] - prevPage;
                const thumbPositionPercentage = (offset - thumbClickPosition) * 100 * offsetRatio.value / instance.value[bar.value.offset];
                scrollbar2.wrap[bar.value.scroll] = thumbPositionPercentage * scrollbar2.wrap[bar.value.scrollSize] / 100;
            };
            const mouseUpDocumentHandler = () => {
                cursorDown = false;
                barStore[bar.value.axis] = 0;
                off(document, "mousemove", mouseMoveDocumentHandler);
                off(document, "mouseup", mouseUpDocumentHandler);
                document.onselectstart = onselectstartStore;
                if (cursorLeave) {
                    visible2.value = false;
                }
            };
            const startDrag = (e) => {
                e.stopImmediatePropagation();
                cursorDown = true;
                on(document, "mousemove", mouseMoveDocumentHandler);
                on(document, "mouseup", mouseUpDocumentHandler);
                onselectstartStore = document.onselectstart;
                document.onselectstart = () => false;
            };
            const clickThumbHandler = (e) => {
                e.stopPropagation();
                if (e.ctrlKey || [1, 2].includes(e.button)) {
                    return;
                }
                window.getSelection().removeAllRanges();
                startDrag(e);
                barStore[bar.value.axis] = e.currentTarget[bar.value.offset] - (e[bar.value.client] - e.currentTarget.getBoundingClientRect()[bar.value.direction]);
            };
            const clickTrackHandler = (e) => {
                const offset = Math.abs(
                    e.target.getBoundingClientRect()[bar.value.direction] - e[bar.value.client]
                );
                const thumbHalf = thumb[bar.value.offset] / 2;
                const thumbPositionPercentage = (offset - thumbHalf) * 100 * offsetRatio.value / instance[bar.value.offset];
                scrollbar2.wrap[bar.value.scroll] = thumbPositionPercentage * scrollbar2.wrap[bar.value.scrollSize] / 100;
            };
            const mouseMoveScrollbarHandler = () => {
                cursorLeave = false;
                visible2.value = !!props.size;
            };
            const mouseLeaveScrollbarHandler = () => {
                cursorLeave = true;
                visible2.value = cursorDown;
            };
            vue.onMounted(() => {
                vue.nextTick(() => {
                    on(scrollbar2.scrollbar, "mousemove", mouseMoveScrollbarHandler);
                    on(scrollbar2.scrollbar, "mouseleave", mouseLeaveScrollbarHandler);
                });
            });
            vue.onBeforeUnmount(() => {
                off(document, "mouseup", mouseUpDocumentHandler);
                off(scrollbar2.scrollbar, "mousemove", mouseMoveScrollbarHandler);
                off(scrollbar2.scrollbar, "mouseleave", mouseLeaveScrollbarHandler);
            });
            return {
                clickThumbHandler,
                clickTrackHandler,
                thumbStyle,
                bar,
                visible: visible2,
                instance,
                thumb
            };
        }
    });
    function _sfc_render$i(_ctx, _cache, $props, $setup, $data, $options) {
        return vue.openBlock(), vue.createBlock(vue.Transition, { name: "as-scrollbar-fade" }, {
            default: vue.withCtx(() => [
                vue.withDirectives(vue.createElementVNode("div", {
                    ref: "instance",
                    class: vue.normalizeClass(["as-scrollbar__bar", "is-" + _ctx.bar.key]),
                    onMousedown: _cache[1] || (_cache[1] = (...args) => _ctx.clickTrackHandler && _ctx.clickTrackHandler(...args))
                }, [
                    vue.createElementVNode("div", {
                        ref: "thumb",
                        class: "as-scrollbar__thumb",
                        style: vue.normalizeStyle(_ctx.thumbStyle),
                        onMousedown: _cache[0] || (_cache[0] = (...args) => _ctx.clickThumbHandler && _ctx.clickThumbHandler(...args))
                    }, null, 36)
                ], 34), [
                    [vue.vShow, _ctx.always || _ctx.visible]
                ])
            ]),
            _: 1
        });
    }
    const Bar = /* @__PURE__ */ _export_sfc(_sfc_main$i, [["render", _sfc_render$i]]);
    const _sfc_main$h = vue.defineComponent({
        components: { Bar },
        props: {
            height: { type: [String, Number], default: "" },
            maxHeight: {
                type: [String, Number],
                default: ""
            },
            native: { type: Boolean, default: false },
            wrapStyle: { type: [String, Array], default: "" },
            wrapClass: { type: [String, Array], default: "" },
            viewClass: { type: [String, Array], default: "" },
            viewStyle: { type: [String, Array], default: "" },
            noresize: Boolean,
            // 如果 container 尺寸不会发生变化,最好设置它可以优化性能
            tag: { type: String, default: "div" },
            always: { type: Boolean, default: false },
            minSize: { type: Number, default: 20 }
        },
        emits: ["scroll"],
        setup(props, { emit }) {
            const sizeWidth = vue.ref("0");
            const sizeHeight = vue.ref("0");
            const moveX = vue.ref(0);
            const moveY = vue.ref(0);
            const scrollbar2 = vue.ref(null);
            const wrap = vue.ref(null);
            const resize = vue.ref(null);
            const ratioY = vue.ref(1);
            const ratioX = vue.ref(1);
            const SCOPE2 = "AScrollbar";
            const GAP = 4;
            const renderWrapStyle = vue.computed(() => {
                let style = props.wrapStyle;
                if (isArray(style)) {
                    style = toObject(style);
                    style.height = addUnit(props.height);
                    style.maxHeight = addUnit(props.maxHeight);
                } else if (isString(style)) {
                    style += addUnit(props.height) ? `height: ${addUnit(props.height)};` : "";
                    style += addUnit(props.maxHeight) ? `max-height: ${addUnit(props.maxHeight)};` : "";
                }
                return style;
            });
            const update = () => {
                if (!wrap.value)
                    return;
                const offsetHeight = wrap.value.offsetHeight - GAP;
                const offsetWidth = wrap.value.offsetWidth - GAP;
                const originalHeight = offsetHeight ** 2 / wrap.value.scrollHeight;
                const originalWidth = offsetWidth ** 2 / wrap.value.scrollWidth;
                const height = Math.max(originalHeight, props.minSize);
                const width2 = Math.max(originalWidth, props.minSize);
                ratioY.value = originalHeight / (offsetHeight - originalHeight) / (height / (offsetHeight - height));
                ratioX.value = originalWidth / (offsetWidth - originalWidth) / (width2 / (offsetWidth - width2));
                sizeHeight.value = height + GAP < offsetHeight ? height + "px" : "";
                sizeWidth.value = width2 + GAP < offsetWidth ? width2 + "px" : "";
            };
            const handleScroll = () => {
                if (wrap.value) {
                    const offsetHeight = wrap.value.offsetHeight - GAP;
                    const offsetWidth = wrap.value.offsetWidth - GAP;
                    moveY.value = wrap.value.scrollTop * 100 / offsetHeight * ratioY.value;
                    moveX.value = wrap.value.scrollLeft * 100 / offsetWidth * ratioX.value;
                    emit("scroll", {
                        scrollTop: wrap.value.scrollTop,
                        scrollLeft: wrap.value.scrollLeft
                    });
                }
            };
            const setScrollTop = (value2) => {
                if (!isNumber(value2)) {
                    debugWarn(SCOPE2, "value must be a number");
                    return;
                }
                wrap.value.scrollTop = value2;
            };
            const setScrollLeft = (value2) => {
                if (!isNumber(value2)) {
                    debugWarn(SCOPE2, "value must be a number");
                    return;
                }
                wrap.value.scrollLeft = value2;
            };
            vue.onMounted(() => {
                if (!props.native) {
                    vue.nextTick(update);
                }
                if (!props.noresize) {
                    addResizeListener(resize.value, update);
                    addEventListener("resize", update);
                }
            });
            vue.onBeforeUnmount(() => {
                if (!props.noresize) {
                    removeResizeListener(resize.value, update);
                    removeEventListener("resize", this.update);
                }
            });
            vue.onUpdated(() => update());
            return {
                scrollbar: scrollbar2,
                wrap,
                resize,
                moveX,
                moveY,
                ratioX,
                ratioY,
                sizeWidth,
                sizeHeight,
                update,
                handleScroll,
                scrollTo,
                setScrollTop,
                setScrollLeft,
                renderWrapStyle
            };
        }
    });
    const _hoisted_1$c = {
        ref: "scrollbar",
        class: "as-scrollbar"
    };
    function _sfc_render$h(_ctx, _cache, $props, $setup, $data, $options) {
        const _component_bar = vue.resolveComponent("bar");
        return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$c, [
            vue.createElementVNode("div", {
                ref: "wrap",
                class: vue.normalizeClass([
                    _ctx.wrapClass,
                    "as-scrollbar__wrap",
                    _ctx.native ? "" : "as-scrollbar__wrap--hidden-default"
                ]),
                style: vue.normalizeStyle(_ctx.renderWrapStyle),
                onScroll: _cache[0] || (_cache[0] = (...args) => _ctx.handleScroll && _ctx.handleScroll(...args))
            }, [
                (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.tag), {
                    ref: "resize",
                    class: vue.normalizeClass(["as-scrollbar__view", _ctx.viewClass]),
                    style: vue.normalizeStyle(_ctx.viewStyle)
                }, {
                    default: vue.withCtx(() => [
                        vue.renderSlot(_ctx.$slots, "default")
                    ]),
                    _: 3
                }, 8, ["class", "style"]))
            ], 38),
            !_ctx.native ? (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 0 }, [
                vue.createVNode(_component_bar, {
                    move: _ctx.moveX,
                    ratio: _ctx.ratioX,
                    size: _ctx.sizeWidth,
                    always: _ctx.always
                }, null, 8, ["move", "ratio", "size", "always"]),
                vue.createVNode(_component_bar, {
                    move: _ctx.moveY,
                    ratio: _ctx.ratioY,
                    size: _ctx.sizeHeight,
                    vertical: "",
                    always: _ctx.always
                }, null, 8, ["move", "ratio", "size", "always"])
            ], 64)) : vue.createCommentVNode("", true)
        ], 512);
    }
    const scrollbar = /* @__PURE__ */ _export_sfc(_sfc_main$h, [["render", _sfc_render$h]]);
    function useTimeout() {
        let timeoutHandle;
        const registerTimeout = (fn, delay) => {
            cancelTimeout();
            timeoutHandle = window.setTimeout(fn, delay);
        };
        const cancelTimeout = () => window.clearTimeout(timeoutHandle);
        return {
            registerTimeout,
            cancelTimeout
        };
    }
    function onClickOutside(target, handler, options2) {
        const { ignore, capture = true } = options2;
        if (!window)
            return;
        const shouldListen = vue.ref(true);
        let fallback;
        const listener = (event) => {
            window.clearTimeout(fallback);
            const el2 = target;
            const composedPath = event.composedPath();
            if (!el2 || el2 === event.target || composedPath.includes(el2) || !shouldListen.value)
                return;
            if (ignore && ignore.length > 0) {
                if (ignore.some((target2) => {
                    const el3 = target2;
                    return el3 && (event.target === el3 || composedPath.includes(el3));
                }))
                    return;
            }
            handler(event);
        };
        window.addEventListener("click", listener, {
            passive: true,
            capture
        });
        window.addEventListener("pointerdown", listener, { passive: true });
        return () => {
            window.removeEventListener("click", listener);
            window.removeEventListener("pointerdown", listener);
        };
    }
    const _sfc_main$g = {
        props: {
            placement: {
                type: String,
                default: "auto"
            },
            strategy: {
                type: String,
                default: "fixed"
            },
            popperClass: {
                type: String,
                default: ""
            }
        },
        setup(props) {
            const visible2 = vue.ref(false);
            const loaded = vue.ref(false);
            const trigger = vue.ref(null);
            const popover = vue.ref(null);
            const popperInstance = vue.ref(null);
            const { registerTimeout, cancelTimeout } = useTimeout();
            function createPopover(target) {
                if (popperInstance.value) {
                    visible2.value = true;
                    return;
                }
                popperInstance.value = core.createPopper(
                    target,
                    popover.value,
                    {
                        strategy: props.strategy,
                        placement: props.placement
                    }
                );
            }
            function destroyPopover() {
                if (popperInstance.value) {
                    popperInstance.value.destroy();
                    popperInstance.value = null;
                }
            }
            let stopFn;
            function handleClickOutside(target) {
                if (!stopFn) {
                    stopFn = onClickOutside(target, hide, {
                        ignore: [
                            popover.value
                        ]
                    });
                }
            }
            vue.onUnmounted(() => {
                stopFn && stopFn();
            });
            function show2(target) {
                loaded.value = true;
                visible2.value = true;
                createPopover(target);
                cancelTimeout();
                handleClickOutside(target);
            }
            function hide() {
                registerTimeout(() => {
                    visible2.value = false;
                    destroyPopover();
                }, 50);
            }
            return {
                visible: visible2,
                loaded,
                trigger,
                popover,
                popperInstance,
                show: show2,
                hide
            };
        }
    };
    const _hoisted_1$b = ["data-show", "data-initialized"];
    function _sfc_render$g(_ctx, _cache, $props, $setup, $data, $options) {
        return vue.openBlock(), vue.createElementBlock(vue.Fragment, null, [
            vue.renderSlot(_ctx.$slots, "trigger", vue.mergeProps({ ref: "trigger" }, { show: $setup.show, hide: $setup.hide })),
            vue.createVNode(vue.Transition, { name: "slide-fade" }, {
                default: vue.withCtx(() => [
                    (vue.openBlock(), vue.createBlock(vue.Teleport, { to: "#all-search" }, [
                        vue.withDirectives(vue.createElementVNode("div", {
                            class: vue.normalizeClass([$props.popperClass, "as-popover-content"]),
                            ref: "popover",
                            "data-show": $setup.visible,
                            "data-initialized": $setup.popperInstance !== null,
                            style: { "display": "none" },
                            onMouseenter: _cache[0] || (_cache[0] = (...args) => $setup.show && $setup.show(...args)),
                            onMouseleave: _cache[1] || (_cache[1] = (...args) => $setup.hide && $setup.hide(...args))
                        }, [
                            $setup.loaded ? vue.renderSlot(_ctx.$slots, "default", { key: 0 }) : vue.createCommentVNode("", true)
                        ], 42, _hoisted_1$b), [
                            [vue.vShow, $setup.visible]
                        ])
                    ]))
                ]),
                _: 3
            })
        ], 64);
    }
    const popperComp = /* @__PURE__ */ _export_sfc(_sfc_main$g, [["render", _sfc_render$g]]);
    function findInNodeList(list2) {
        return [].find.call(list2, (item) => isValidate(item));
    }
    function isValidate(el2) {
        return isInput(el2) && isVisible(el2);
    }
    function isInput(el2) {
        if (["input", "textarea"].includes(el2.nodeName.toLowerCase())) {
            return ["text", "search", "textarea"].includes(el2.type);
        }
        return true;
    }
    function isVisible(el2) {
        const style = getComputedStyle(el2);
        return !!el2.getClientRects().length && style.visibility !== "hidden" && style.width !== 0 && style.height !== 0 && style.opacity !== 0;
    }
    function getSearchDom() {
        const el2 = document.querySelector("input[type=search],input[type=text][autocomplete=off],input[autocomplete=off]:not([type])") || document.querySelector("input[type=text][name][value],input[name][value]:not([type])");
        if (el2 && isValidate(el2)) {
            return el2;
        }
        const autofocusOrSearch = document.querySelector("input[autofocus],input[type=search]");
        if (autofocusOrSearch && isValidate(autofocusOrSearch)) {
            return autofocusOrSearch;
        }
        const idOrClassContainSearch = document.querySelectorAll("input[id*=search],input[class*=search]");
        if (idOrClassContainSearch.length) {
            const el3 = findInNodeList(idOrClassContainSearch);
            if (el3 && isValidate(el3)) {
                return el3;
            }
        }
        const placeholderContainSearch = document.querySelectorAll("input[placeholder*=search],input[placeholder*=搜索]");
        if (placeholderContainSearch.length) {
            const el3 = findInNodeList(placeholderContainSearch);
            if (el3 && isValidate(el3)) {
                return el3;
            }
        }
        const textInputTypes = ["hidden", "button", "checkbox", "color", "file", "image", "radio", "range", "reset", "submit"];
        const selector = textInputTypes.map((t) => `[type=${t}]`).join(",");
        const firstInput = document.querySelector(`input:not(${selector}), textarea`);
        if (firstInput && isValidate(firstInput)) {
            return firstInput;
        }
        const inputSearch = document.getElementsByTagName("input");
        const sameKeywordInput = [].find.call(inputSearch, (item) => {
            if (item.value && decodeURI(window.location.pathname + window.location.search).includes(item.value)) {
                return item;
            }
        });
        if (sameKeywordInput) {
            return sameKeywordInput;
        }
    }
    function getKeyword() {
        const el2 = getSearchDom();
        if (el2) {
            let val = "";
            if (["INPUT", "TEXTAREA"].includes(el2.nodeName)) {
                val = el2.value;
            } else {
                val = el2.textContent;
            }
            return encodeURIComponent(val);
        }
        console.log("没有找到搜索关键字");
    }
    const _sfc_main$f = {
        name: "icon",
        props: {
            name: {
                type: String,
                default: ""
            }
        }
    };
    const _hoisted_1$a = {
        class: "as-icon as-menu-item-icon",
        "aria-hidden": "true"
    };
    const _hoisted_2$8 = ["xlink:href"];
    function _sfc_render$f(_ctx, _cache, $props, $setup, $data, $options) {
        return vue.openBlock(), vue.createElementBlock("svg", _hoisted_1$a, [
            vue.createElementVNode("use", {
                "xlink:href": `#icon-${$props.name}`
            }, null, 8, _hoisted_2$8)
        ]);
    }
    const icon = /* @__PURE__ */ _export_sfc(_sfc_main$f, [["render", _sfc_render$f]]);
    let el$1 = document.createElement("a");
    const replaceUrl = function (val) {
        const lowerCaseVal = val.toLowerCase();
        const list2 = ["http://", "https://", "ftp://", "files://"];
        for (let i = 0; i < list2.length; i++) {
            if (lowerCaseVal.indexOf(list2[i]) === 0) {
                return val.replace(/.*\/\//, "//");
            }
        }
        return val;
    };
    function parseUrl(url) {
        let val = url;
        if (val.indexOf("//") < 0) {
            val = `//${val}`;
        } else if (val.indexOf("//") > -1) {
            val = replaceUrl(val);
        } else {
            return el$1;
        }
        el$1.href = val;
        return {
            href: el$1.href,
            // '包含完整的url'
            origin: el$1.origin,
            // '包含协议到pathname之前的内容'
            protocol: el$1.protocol,
            //  'url使用的协议,包含末尾的:'
            host: el$1.host,
            //  '完整主机名,包含:和端口'
            hostname: el$1.hostname,
            //  '主机名,不包含端口'
            port: el$1.port,
            //  '端口号'
            pathname: el$1.pathname,
            //  '服务器上访问资源的路径/开头'
            search: el$1.search,
            //  'query string,?开头'
            hash: el$1.hash
            //  '#开头的fragment identifier'
        };
    }
    const favicon$1 = useConfig({
        name: "favicon",
        defaultVal: 1,
        reg: /[1|2]/
    });
    function clearIconCache() {
        if (window.confirm("确认要清除图标的缓存吗")) {
            delStorage("iconCache").then(() => {
                console.log("清除成功");
            });
        }
    }
    function useFavicon() {
        return {
            favicon: favicon$1,
            clearIconCache
        };
    }
    let iconCache = vue.reactive({});
    getStorage("iconCache").then((iconData) => {
        iconCache = iconData;
    });
    const _sfc_main$e = {
        name: "favicon",
        props: {
            url: {
                type: String,
                default: ""
            },
            icon: {
                type: String,
                default: ""
            }
        },
        setup(props) {
            const isError = vue.ref(false);
            const { hostname, origin } = parseUrl(props.url);
            const img = vue.computed(() => {
                if (iconCache[hostname]) {
                    return iconCache[hostname];
                } else if (!isError.value) {
                    return faviconApi.value;
                } else {
                    return "";
                }
            });
            const i = vue.ref(0);
            const faviconApis = vue.ref([
                props.icon,
                `https://favicon.yandex.net/favicon/v2/${encodeURI(hostname)}?size=32`,
                `https://invisible-scarlet-centipede.faviconkit.com/${encodeURI(hostname)}`,
                `${origin}/favicon.ico`
            ]);
            const faviconApi = vue.computed(() => faviconApis.value.filter((j) => j)[i.value]);
            const { favicon: favicon2 } = useFavicon();
            function getBase64Image(image2) {
                const canvas = document.createElement("canvas");
                canvas.width = image2.width;
                canvas.height = image2.height;
                let context = canvas.getContext("2d");
                context.drawImage(image2, 0, 0, image2.width, image2.height);
                return canvas.toDataURL("image/png", 1);
            }
            function handleLoad(e) {
                if (!isError.value && !img.value.startsWith("data:image")) {
                    const base64 = getBase64Image(e.target);
                    if (base64) {
                        iconCache[hostname] = base64;
                        setStorage("iconCache", iconCache);
                    }
                }
            }
            function handleError(e) {
                const src = e.currentTarget.src;
                if (src === faviconApi.value) {
                    if (i.value === faviconApis.value.length - 1) {
                        isError.value = true;
                    }
                    i.value++;
                }
            }
            return {
                img,
                favicon: favicon2,
                handleLoad,
                handleError,
                isError
            };
        }
    };
    const _hoisted_1$9 = {
        key: 0,
        class: "as-img-icon"
    };
    const _hoisted_2$7 = ["src"];
    function _sfc_render$e(_ctx, _cache, $props, $setup, $data, $options) {
        return $setup.favicon === 1 ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$9, [
            vue.createElementVNode("img", {
                class: vue.normalizeClass({ error: $setup.isError }),
                src: $setup.img,
                crossOrigin: "",
                onError: _cache[0] || (_cache[0] = (...args) => $setup.handleError && $setup.handleError(...args)),
                onLoad: _cache[1] || (_cache[1] = (...args) => $setup.handleLoad && $setup.handleLoad(...args))
            }, null, 42, _hoisted_2$7)
        ])) : vue.createCommentVNode("", true);
    }
    const favicon = /* @__PURE__ */ _export_sfc(_sfc_main$e, [["render", _sfc_render$e]]);
    const onTap = (target, callback) => {
        let tapStartTime = 0;
        let tapEndTime = 0;
        const tapTime = 200;
        let tapStartClientX = 0;
        let tapStartClientY = 0;
        let tapEndClientX = 0;
        let tapEndClientY = 0;
        const tapLimit = 15;
        let cancelClick = false;
        let hasListener = false;
        function handleTouchStart(event) {
            tapStartTime = event.timeStamp;
            const touch = event.changedTouches[0];
            tapStartClientX = touch.clientX;
            tapStartClientY = touch.clientY;
            cancelClick = false;
        }
        function handleTouchMove(event) {
            const touch = event.changedTouches[0];
            tapEndClientX = touch.clientX;
            tapEndClientY = touch.clientY;
            if (Math.abs(tapEndClientX - tapStartClientX) > tapLimit || Math.abs(tapEndClientY - tapStartClientY) > tapLimit) {
                cancelClick = true;
            }
        }
        function handleTouchEnd(event) {
            tapEndTime = event.timeStamp;
            if (!cancelClick && tapEndTime - tapStartTime <= tapTime) {
                callback(event);
            }
        }
        vue.watch(target, (el2) => {
            if (el2 && !hasListener) {
                el2.addEventListener("touchstart", handleTouchStart);
                el2.addEventListener("touchmove", handleTouchMove);
                el2.addEventListener("touchend", handleTouchEnd);
                hasListener = true;
            }
        });
        vue.onUnmounted(() => {
            const el2 = vue.unref(target);
            if (el2) {
                el2.removeEventListener("touchstart", handleTouchStart);
                el2.removeEventListener("touchmove", handleTouchMove);
                el2.removeEventListener("touchend", handleTouchEnd);
            }
        });
    };
    const selection = vue.ref("");
    let isTap = false;
    const _sfc_main$d = {
        name: "menuItem",
        components: {
            popperComp,
            icon,
            favicon
        },
        props: {
            item: {
                type: Object
            },
            mode: {
                type: String,
                default: "horizontal"
            }
        },
        setup(props) {
            const categoryRef = vue.ref(null);
            const currentSite = site;
            const classList = vue.computed(
                () => props.mode === "horizontal" ? "horizontal" : "vertical"
            );
            const placement = vue.computed(
                () => props.mode === "horizontal" ? "bottom-start" : "right-start"
            );
            const handleMenuShow = (value2, item) => {
                item.show = value2;
            };
            const defaultKeyword = () => {
                if (selection && selection.value) {
                    return selection.value;
                }
                let keyword = getKeyword();
                const selectors = currentSite.selectors;
                const query = currentSite.query;
                if (keyword === void 0) {
                    if (selectors) {
                        const el2 = document.querySelector(selectors);
                        keyword = el2 ? el2.value : "";
                    } else if (query) {
                        query.some((name2) => {
                            const word = getQueryString(name2);
                            keyword = word;
                            return !!word;
                        });
                    }
                }
                return keyword;
            };
            const handleCateClick = (cate, newWin) => {
                if (isTap) {
                    return;
                }
                const urlItem = cate.list.filter((item) => item.data.visible).find((item) => item.url.indexOf(window.location.hostname) === -1);
                return handleClick(urlItem, newWin);
            };
            const handleClick = (item, newWin) => {
                const keyword = defaultKeyword();
                if (newWin) {
                    window.open(item.url.replace("%s", keyword));
                } else {
                    window.location.href = item.url.replace("%s", keyword);
                }
                return false;
            };
            onTap(categoryRef, () => {
                isTap = true;
            });
            return {
                placement,
                classList,
                handleMenuShow,
                handleClick,
                handleCateClick,
                categoryRef
            };
        }
    };
    const _hoisted_1$8 = ["onMouseenter", "onMouseleave"];
    const _hoisted_2$6 = ["textContent"];
    const _hoisted_3$3 = { class: "as-subMenu" };
    const _hoisted_4$2 = ["onClick", "onMouseup"];
    const _hoisted_5$1 = ["textContent"];
    function _sfc_render$d(_ctx, _cache, $props, $setup, $data, $options) {
        const _component_icon = vue.resolveComponent("icon");
        const _component_favicon = vue.resolveComponent("favicon");
        const _component_popper_comp = vue.resolveComponent("popper-comp");
        return vue.openBlock(), vue.createBlock(_component_popper_comp, {
            placement: $setup.placement,
            "popper-class": "as-subMenu-container"
        }, {
            trigger: vue.withCtx(({ show: show2, hide }) => [
                vue.createElementVNode("a", {
                    class: vue.normalizeClass(["as-menu-item no-underline", $setup.classList]),
                    ref: "categoryRef",
                    onMouseenter: ($event) => show2($event.target),
                    onMouseleave: hide,
                    href: "javascript:void 0",
                    onClick: [
                        _cache[0] || (_cache[0] = vue.withModifiers(($event) => $setup.handleCateClick($props.item, false), ["exact"])),
                        _cache[1] || (_cache[1] = vue.withModifiers(($event) => $setup.handleCateClick($props.item, true), ["ctrl", "exact"]))
                    ],
                    onMouseup: _cache[2] || (_cache[2] = vue.withModifiers(($event) => $setup.handleCateClick($props.item, true), ["middle", "exact"]))
                }, [
                    vue.createVNode(_component_icon, {
                        name: $props.item.name
                    }, null, 8, ["name"]),
                    vue.createElementVNode("span", {
                        class: "as-menu-item-title",
                        textContent: vue.toDisplayString($props.item.nameZh)
                    }, null, 8, _hoisted_2$6)
                ], 42, _hoisted_1$8)
            ]),
            default: vue.withCtx(() => [
                vue.createElementVNode("ul", _hoisted_3$3, [
                    (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList($props.item.list, (child, i) => {
                        return vue.withDirectives((vue.openBlock(), vue.createElementBlock("li", {
                            key: `${$props.item.name}_${i}`
                        }, [
                            vue.createElementVNode("a", {
                                href: "javascript:void 0",
                                onClick: [
                                    vue.withModifiers(($event) => $setup.handleClick(child), ["exact"]),
                                    vue.withModifiers(($event) => $setup.handleClick(child, true), ["ctrl", "exact"])
                                ],
                                onMouseup: vue.withModifiers(($event) => $setup.handleClick(child, true), ["middle", "exact"])
                            }, [
                                vue.createVNode(_component_favicon, {
                                    class: "as-url-icon",
                                    url: child.url,
                                    icon: child.icon
                                }, null, 8, ["url", "icon"]),
                                vue.createElementVNode("p", {
                                    class: "as-subMenu-text",
                                    textContent: vue.toDisplayString(child.nameZh)
                                }, null, 8, _hoisted_5$1)
                            ], 40, _hoisted_4$2)
                        ])), [
                            [vue.vShow, child.data.visible]
                        ]);
                    }), 128))
                ])
            ]),
            _: 1
        }, 8, ["placement"]);
    }
    const menuItem = /* @__PURE__ */ _export_sfc(_sfc_main$d, [["render", _sfc_render$d]]);
    const value = useConfig({
        name: "align",
        defaultVal: "flex-start",
        reg: /[flex\-start|center|flex\-end]/
    });
    const list = /* @__PURE__ */ new Map([
        ["flex-start", "开始"],
        ["center", "居中"],
        ["flex-end", "末尾"]
    ]);
    function useAlign() {
        return {
            list,
            value
        };
    }
    const _sfc_main$c = {
        name: "as-menu",
        components: {
            scrollbar,
            menuItem
        },
        props: {
            mode: {
                type: String,
                default: "horizontal",
                validator: (val) => ["horizontal", "vertical"].indexOf(val) > -1
            }
        },
        setup(props) {
            const { sites: sites2 } = useSites("tm");
            const { value: align } = useAlign();
            const data = vue.reactive({
                showTimeout: 50,
                hideTimeout: 200
            });
            const menuClass = vue.computed(() => ({
                "as-horizontal": props.mode === "horizontal",
                "as-vertical": props.mode === "vertical"
            }));
            return {
                sites: sites2,
                data,
                align,
                menuClass
            };
        }
    };
    const _hoisted_1$7 = { class: "as-menu" };
    function _sfc_render$c(_ctx, _cache, $props, $setup, $data, $options) {
        const _component_menu_item = vue.resolveComponent("menu-item");
        const _component_scrollbar = vue.resolveComponent("scrollbar");
        return vue.openBlock(), vue.createBlock(_component_scrollbar, {
            class: vue.normalizeClass(["as-menu-container", $setup.menuClass]),
            style: vue.normalizeStyle({ justifyContent: $setup.align }),
            noresize: ""
        }, {
            default: vue.withCtx(() => [
                vue.createElementVNode("ul", _hoisted_1$7, [
                    (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList($setup.sites, (item) => {
                        return vue.openBlock(), vue.createBlock(_component_menu_item, {
                            key: item.name,
                            item,
                            mode: $props.mode
                        }, null, 8, ["item", "mode"]);
                    }), 128))
                ])
            ]),
            _: 1
        }, 8, ["class", "style"]);
    }
    const asMenu = /* @__PURE__ */ _export_sfc(_sfc_main$c, [["render", _sfc_render$c]]);
    const reg = /^#([a-fA-F\d]{6}|[a-fA-F\d]{3})$/;
    function setCssValue(name2, value2, defaultVal) {
        const el2 = document.getElementById("all-search");
        const formatVal = reg.test(value2) ? value2 : defaultVal;
        el2.style.setProperty(`--as-${name2}`, formatVal);
    }
    const primaryColor = useConfig({
        name: "primaryColor",
        defaultVal: "#1890ff",
        reg
    });
    const bgColor = useConfig({
        name: "bgColor",
        defaultVal: "#ffffff",
        reg
    });
    const primaryTextColor = useConfig({
        name: "primaryTextColor",
        defaultVal: "#606266",
        reg
    });
    function useColor() {
        // 检测当前主题
        const isDarkMode = () => {
            return document.documentElement.getAttribute('data-theme') === 'dark';
        };

        vue.watchEffect(() => {
            // 根据当前主题选择合适的默认值
            const defaultPrimaryColor = isDarkMode() ? "#409eff" : "#1890ff";
            const defaultBgColor = isDarkMode() ? "#1a1a1a" : "#ffffff";
            const defaultTextColor = isDarkMode() ? "#e5eaf3" : "#606266";

            setCssValue("primary-color", defaultPrimaryColor, primaryColor.value);
            setCssValue("bg-color", defaultBgColor, bgColor.value);
            setCssValue("primary-text-color", defaultTextColor, primaryTextColor.value);
        });

        // 监听主题变化
        vue.onMounted(() => {
            const observer = new MutationObserver(() => {
                const defaultPrimaryColor = isDarkMode() ? "#409eff" : "#1890ff";
                const defaultBgColor = isDarkMode() ? "#1a1a1a" : "#ffffff";
                const defaultTextColor = isDarkMode() ? "#e5eaf3" : "#606266";

                setCssValue("primary-color", defaultPrimaryColor, primaryColor.value);
                setCssValue("bg-color", defaultBgColor, bgColor.value);
                setCssValue("primary-text-color", defaultTextColor, primaryTextColor.value);
            });

            observer.observe(document.documentElement, {
                attributes: true,
                attributeFilter: ['data-theme']
            });
        });
        return {
            primaryColor,
            bgColor,
            primaryTextColor
        };
    }
    const toolbar = [
        {
            nameZh: "百度",
            url: "https://www.baidu.com/s?wd=%s&ie=utf-8"
        },
        {
            nameZh: "百度翻译",
            url: "https://fanyi.baidu.com/#auto/zh/%s"
        }
    ].map((item) => ({
        ...item,
        data: {
            visible: true
        }
    }));
    const sites = vue.ref([]);
    function getList(val) {
        if (Array.isArray(val) && val.length > 0) {
            return val;
        } else {
            return toolbar;
        }
    }
    getStorage("toolbar").then((val) => {
        sites.value = getList(val);
    }).catch(() => {
        sites.value = toolbar;
    });
    function initToolBar(list2, type) {
        if (type === "tm") {
            return list2.filter((item) => item.data && item.data.visible).map((item) => ({
                nameZh: item.nameZh,
                url: item.url
            }));
        }
        return list2;
    }
    const visible = useConfig({
        name: "showToolbar",
        defaultVal: 1,
        reg: /[1|2]/
    });
    function useToolbar(type) {
        return {
            visible,
            list: vue.computed(() => initToolBar(sites.value, type))
        };
    }
    const _sfc_main$b = {
        name: "overlay",
        setup(props, { emit }) {
            let mouseDownTarget = false;
            let mouseUpTarget = false;
            const onMaskClick = (e) => {
                if (mouseDownTarget && mouseUpTarget) {
                    emit("click", e);
                }
                mouseDownTarget = mouseUpTarget = false;
            };
            const onMouseDown = (e) => {
                mouseDownTarget = e.target === e.currentTarget;
            };
            const onMouseUp = (e) => {
                mouseUpTarget = e.target === e.currentTarget;
            };
            return {
                onMouseDown,
                onMouseUp,
                onMaskClick
            };
        }
    };
    function _sfc_render$b(_ctx, _cache, $props, $setup, $data, $options) {
        return vue.openBlock(), vue.createElementBlock("div", {
            class: "as-overlay",
            onMousedown: _cache[0] || (_cache[0] = (...args) => $setup.onMouseDown && $setup.onMouseDown(...args)),
            onMouseup: _cache[1] || (_cache[1] = (...args) => $setup.onMouseUp && $setup.onMouseUp(...args)),
            onClick: _cache[2] || (_cache[2] = (...args) => $setup.onMaskClick && $setup.onMaskClick(...args))
        }, [
            vue.renderSlot(_ctx.$slots, "default")
        ], 32);
    }
    const overlay = /* @__PURE__ */ _export_sfc(_sfc_main$b, [["render", _sfc_render$b]]);
    const _sfc_main$a = {
        name: "as-radio",
        props: {
            modelValue: {
                type: [String, Number, Boolean]
            },
            label: {
                type: [String, Number, Boolean],
                default: ""
            }
        },
        setup(props, ctx) {
            const model = vue.computed({
                get() {
                    return props.modelValue;
                },
                set(value2) {
                    ctx.emit("update:modelValue", value2);
                }
            });
            return {
                model
            };
        }
    };
    const _hoisted_1$6 = { class: "as-radio as-radio-animate" };
    const _hoisted_2$5 = ["value"];
    const _hoisted_3$2 = /* @__PURE__ */ vue.createElementVNode("i", { class: "as-radio-icon" }, null, -1);
    const _hoisted_4$1 = { class: "as-radio-label" };
    function _sfc_render$a(_ctx, _cache, $props, $setup, $data, $options) {
        return vue.openBlock(), vue.createElementBlock("label", _hoisted_1$6, [
            vue.withDirectives(vue.createElementVNode("input", {
                type: "radio",
                value: $props.label,
                "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $setup.model = $event)
            }, null, 8, _hoisted_2$5), [
                [vue.vModelRadio, $setup.model]
            ]),
            _hoisted_3$2,
            vue.createElementVNode("span", _hoisted_4$1, [
                vue.renderSlot(_ctx.$slots, "default")
            ])
        ]);
    }
    const radio = /* @__PURE__ */ _export_sfc(_sfc_main$a, [["render", _sfc_render$a]]);
    const _sfc_main$9 = {
        name: "form-item",
        props: {
            labelWidth: {
                type: [String, Number],
                default: 80
            },
            label: {
                type: [String, Number],
                default: ""
            }
        },
        setup(props) {
            const labelStyle = vue.computed(() => ({
                width: `${props.labelWidth}px`
            }));
            const contentStyle = vue.computed(() => ({
                marginLeft: `${props.labelWidth}px`
            }));
            return {
                labelStyle,
                contentStyle
            };
        }
    };
    const _hoisted_1$5 = ["textContent"];
    function _sfc_render$9(_ctx, _cache, $props, $setup, $data, $options) {
        return vue.openBlock(), vue.createElementBlock("div", null, [
            vue.createElementVNode("label", {
                class: "as-label",
                style: vue.normalizeStyle($setup.labelStyle),
                textContent: vue.toDisplayString($props.label)
            }, null, 12, _hoisted_1$5),
            vue.createElementVNode("div", {
                class: "as-content",
                style: vue.normalizeStyle($setup.contentStyle)
            }, [
                vue.renderSlot(_ctx.$slots, "default")
            ], 4)
        ]);
    }
    const formItem = /* @__PURE__ */ _export_sfc(_sfc_main$9, [["render", _sfc_render$9]]);
    const _sfc_main$8 = {
        name: "xButton",
        props: {
            type: {
                type: String,
                default: "primary"
            }
        }
    };
    function _sfc_render$8(_ctx, _cache, $props, $setup, $data, $options) {
        return vue.openBlock(), vue.createElementBlock("button", {
            class: vue.normalizeClass(["as-button", `as-button__${$props.type}`])
        }, [
            vue.renderSlot(_ctx.$slots, "default")
        ], 2);
    }
    const button = /* @__PURE__ */ _export_sfc(_sfc_main$8, [["render", _sfc_render$8]]);
    const _sfc_main$7 = {
        name: "color",
        components: {
            asButton: button
        },
        props: {
            modelValue: {
                type: [String, Number]
            }
        },
        setup(props, ctx) {
            const model = vue.computed({
                get() {
                    return props.modelValue;
                },
                set(value2) {
                    ctx.emit("update:modelValue", value2);
                }
            });
            const reset = () => {
                model.value = "";
            };
            return {
                model,
                reset
            };
        }
    };
    const _hoisted_1$4 = { class: "as-color-set" };
    const _hoisted_2$4 = { class: "as-color-label" };
    function _sfc_render$7(_ctx, _cache, $props, $setup, $data, $options) {
        const _component_asButton = vue.resolveComponent("asButton");
        return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$4, [
            vue.createElementVNode("label", _hoisted_2$4, [
                vue.withDirectives(vue.createElementVNode("input", {
                    class: "input—color",
                    type: "color",
                    "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $setup.model = $event)
                }, null, 512), [
                    [vue.vModelText, $setup.model]
                ])
            ]),
            vue.createVNode(_component_asButton, {
                class: "reset-btn",
                type: "text",
                onClick: $setup.reset
            }, {
                default: vue.withCtx(() => [
                    vue.createTextVNode(" 重置 ")
                ]),
                _: 1
            }, 8, ["onClick"])
        ]);
    }
    const color = /* @__PURE__ */ _export_sfc(_sfc_main$7, [["render", _sfc_render$7]]);
    const _sfc_main$6 = {
        name: "side-bar",
        components: {
            overlay,
            asRadio: radio,
            formItem,
            color,
            asButton: button
        },
        setup() {
            const visible2 = vue.ref(false);
            const open = () => {
                visible2.value = true;
            };
            const onMaskClick = () => {
                visible2.value = false;
            };
            const { value: mode } = useMode();
            const { list: alignList, value: align } = useAlign();
            const { primaryColor: primaryColor2, primaryTextColor: primaryTextColor2 } = useColor();
            const { show: show2, options: options2, scrollHide: scrollHide2 } = useSwitchShow();
            const { favicon: favicon2, clearIconCache: clearIconCache2 } = useFavicon();
            const { visible: toolbarVisible } = useToolbar();
            const { resetSites: resetSites2 } = useSites("tm");
            const hide = () => {
                show2.value = 2;
            };
            function changeScrollHide(e) {
                if (e.target.value === "none") {
                    show2.value = 1;
                } else {
                    show2.value = 2;
                }
            }
            return {
                mode,
                visible: visible2,
                open,
                onMaskClick,
                alignList,
                align,
                favicon: favicon2,
                toolbarVisible,
                primaryColor: primaryColor2,
                primaryTextColor: primaryTextColor2,
                show: show2,
                options: options2,
                scrollHide: scrollHide2,
                clearIconCache: clearIconCache2,
                resetSites: resetSites2,
                hide,
                changeScrollHide
            };
        }
    };
    const _hoisted_1$3 = /* @__PURE__ */ vue.createElementVNode("header", { class: "header" }, " 全搜 all-search ", -1);
    const _hoisted_2$3 = /* @__PURE__ */ vue.createElementVNode("footer", null, [
    /* @__PURE__ */ vue.createElementVNode("a", {
        class: "link",
        title: "菜单设置页",
        href: "https://all-search.github.io/all-search/config/sites",
        target: "_blank"
    }, " 菜单设置 "),
    /* @__PURE__ */ vue.createElementVNode("a", {
        class: "link",
        title: "滑词工具栏设置页",
        href: "https://all-search.github.io/all-search/config/toolbar",
        target: "_blank"
    }, " 滑词工具栏设置 "),
    /* @__PURE__ */ vue.createElementVNode("a", {
        class: "link",
        title: "github",
        href: "https://github.com/all-search/all-search/issues",
        target: "_blank"
    }, " 反馈 ")
    ], -1);
    function _sfc_render$6(_ctx, _cache, $props, $setup, $data, $options) {
        const _component_as_radio = vue.resolveComponent("as-radio");
        const _component_form_item = vue.resolveComponent("form-item");
        const _component_color = vue.resolveComponent("color");
        const _component_as_button = vue.resolveComponent("as-button");
        const _component_overlay = vue.resolveComponent("overlay");
        return vue.openBlock(), vue.createElementBlock(vue.Fragment, null, [
            vue.createElementVNode("div", {
                class: vue.normalizeClass(["as-setting", $setup.mode])
            }, [
                vue.createElementVNode("div", {
                    class: "as-setting-btn",
                    onClick: _cache[0] || (_cache[0] = (...args) => $setup.hide && $setup.hide(...args))
                }, " 收起 "),
                vue.createElementVNode("div", {
                    class: "as-setting-btn",
                    onClick: _cache[1] || (_cache[1] = (...args) => $setup.open && $setup.open(...args))
                }, " 设置 ")
            ], 2),
            (vue.openBlock(), vue.createBlock(vue.Teleport, { to: "#all-search" }, [
                vue.createVNode(vue.Transition, {
                    name: "overlay",
                    appear: ""
                }, {
                    default: vue.withCtx(() => [
                        vue.withDirectives(vue.createVNode(_component_overlay, { onClick: $setup.onMaskClick }, {
                            default: vue.withCtx(() => [
                                vue.createVNode(vue.Transition, {
                                    name: "drawer",
                                    appear: ""
                                }, {
                                    default: vue.withCtx(() => [
                                        vue.withDirectives(vue.createElementVNode("div", {
                                            "aria-modal": "true",
                                            role: "dialog",
                                            class: "as-side-bar",
                                            onClick: _cache[12] || (_cache[12] = vue.withModifiers(() => {
                                            }, ["stop"]))
                                        }, [
                                            _hoisted_1$3,
                                            vue.createElementVNode("section", null, [
                                                vue.createVNode(_component_form_item, {
                                                    "label-width": "84",
                                                    label: "滑词工具栏"
                                                }, {
                                                    default: vue.withCtx(() => [
                                                        vue.createVNode(_component_as_radio, {
                                                            label: 1,
                                                            modelValue: $setup.toolbarVisible,
                                                            "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => $setup.toolbarVisible = $event)
                                                        }, {
                                                            default: vue.withCtx(() => [
                                                                vue.createTextVNode("显示 ")
                                                            ]),
                                                            _: 1
                                                        }, 8, ["modelValue"]),
                                                        vue.createVNode(_component_as_radio, {
                                                            label: 2,
                                                            modelValue: $setup.toolbarVisible,
                                                            "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => $setup.toolbarVisible = $event)
                                                        }, {
                                                            default: vue.withCtx(() => [
                                                                vue.createTextVNode("隐藏 ")
                                                            ]),
                                                            _: 1
                                                        }, 8, ["modelValue"])
                                                    ]),
                                                    _: 1
                                                }),
                                                vue.createVNode(_component_form_item, { label: "方向" }, {
                                                    default: vue.withCtx(() => [
                                                        vue.createVNode(_component_as_radio, {
                                                            label: "horizontal",
                                                            modelValue: $setup.mode,
                                                            "onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => $setup.mode = $event)
                                                        }, {
                                                            default: vue.withCtx(() => [
                                                                vue.createTextVNode("横向 ")
                                                            ]),
                                                            _: 1
                                                        }, 8, ["modelValue"]),
                                                        vue.createVNode(_component_as_radio, {
                                                            label: "vertical",
                                                            modelValue: $setup.mode,
                                                            "onUpdate:modelValue": _cache[5] || (_cache[5] = ($event) => $setup.mode = $event)
                                                        }, {
                                                            default: vue.withCtx(() => [
                                                                vue.createTextVNode("竖向 ")
                                                            ]),
                                                            _: 1
                                                        }, 8, ["modelValue"])
                                                    ]),
                                                    _: 1
                                                }),
                                                vue.createVNode(_component_form_item, { label: "对齐" }, {
                                                    default: vue.withCtx(() => [
                                                        (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList($setup.alignList, ([key, value2]) => {
                                                            return vue.openBlock(), vue.createBlock(_component_as_radio, {
                                                                key,
                                                                label: key,
                                                                modelValue: $setup.align,
                                                                "onUpdate:modelValue": _cache[6] || (_cache[6] = ($event) => $setup.align = $event)
                                                            }, {
                                                                default: vue.withCtx(() => [
                                                                    vue.createTextVNode(vue.toDisplayString(value2), 1)
                                                                ]),
                                                                _: 2
                                                            }, 1032, ["label", "modelValue"]);
                                                        }), 128))
                                                    ]),
                                                    _: 1
                                                }),
                                                vue.createVNode(_component_form_item, { label: "滚动隐藏" }, {
                                                    default: vue.withCtx(() => [
                                                        (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList($setup.options, ([key, value2]) => {
                                                            return vue.openBlock(), vue.createBlock(_component_as_radio, {
                                                                key,
                                                                label: key,
                                                                modelValue: $setup.scrollHide,
                                                                "onUpdate:modelValue": _cache[7] || (_cache[7] = ($event) => $setup.scrollHide = $event),
                                                                onChange: $setup.changeScrollHide
                                                            }, {
                                                                default: vue.withCtx(() => [
                                                                    vue.createTextVNode(vue.toDisplayString(value2), 1)
                                                                ]),
                                                                _: 2
                                                            }, 1032, ["label", "modelValue", "onChange"]);
                                                        }), 128))
                                                    ]),
                                                    _: 1
                                                }),
                                                vue.createVNode(_component_form_item, { label: "图标" }, {
                                                    default: vue.withCtx(() => [
                                                        vue.createVNode(_component_as_radio, {
                                                            label: 1,
                                                            modelValue: $setup.favicon,
                                                            "onUpdate:modelValue": _cache[8] || (_cache[8] = ($event) => $setup.favicon = $event)
                                                        }, {
                                                            default: vue.withCtx(() => [
                                                                vue.createTextVNode("显示 ")
                                                            ]),
                                                            _: 1
                                                        }, 8, ["modelValue"]),
                                                        vue.createVNode(_component_as_radio, {
                                                            label: 2,
                                                            modelValue: $setup.favicon,
                                                            "onUpdate:modelValue": _cache[9] || (_cache[9] = ($event) => $setup.favicon = $event)
                                                        }, {
                                                            default: vue.withCtx(() => [
                                                                vue.createTextVNode("隐藏 ")
                                                            ]),
                                                            _: 1
                                                        }, 8, ["modelValue"])
                                                    ]),
                                                    _: 1
                                                }),
                                                vue.createVNode(_component_form_item, { label: "主题色" }, {
                                                    default: vue.withCtx(() => [
                                                        vue.createVNode(_component_color, {
                                                            name: "primaryColor",
                                                            modelValue: $setup.primaryColor,
                                                            "onUpdate:modelValue": _cache[10] || (_cache[10] = ($event) => $setup.primaryColor = $event)
                                                        }, null, 8, ["modelValue"])
                                                    ]),
                                                    _: 1
                                                }),
                                                vue.createVNode(_component_form_item, { label: "文字色" }, {
                                                    default: vue.withCtx(() => [
                                                        vue.createVNode(_component_color, {
                                                            name: "primaryTextColor",
                                                            modelValue: $setup.primaryTextColor,
                                                            "onUpdate:modelValue": _cache[11] || (_cache[11] = ($event) => $setup.primaryTextColor = $event)
                                                        }, null, 8, ["modelValue"])
                                                    ]),
                                                    _: 1
                                                }),
                                                vue.createVNode(_component_form_item, { label: "图标缓存" }, {
                                                    default: vue.withCtx(() => [
                                                        vue.createVNode(_component_as_button, {
                                                            type: "text",
                                                            onClick: $setup.clearIconCache
                                                        }, {
                                                            default: vue.withCtx(() => [
                                                                vue.createTextVNode(" 清除 ")
                                                            ]),
                                                            _: 1
                                                        }, 8, ["onClick"])
                                                    ]),
                                                    _: 1
                                                }),
                                                vue.createVNode(_component_form_item, { label: "重置网址" }, {
                                                    default: vue.withCtx(() => [
                                                        vue.createVNode(_component_as_button, {
                                                            type: "text",
                                                            onClick: $setup.resetSites
                                                        }, {
                                                            default: vue.withCtx(() => [
                                                                vue.createTextVNode(" 重置 ")
                                                            ]),
                                                            _: 1
                                                        }, 8, ["onClick"])
                                                    ]),
                                                    _: 1
                                                })
                                            ]),
                                            _hoisted_2$3
                                        ], 512), [
                                            [vue.vShow, $setup.visible]
                                        ])
                                    ]),
                                    _: 1
                                })
                            ]),
                            _: 1
                        }, 8, ["onClick"]), [
                            [vue.vShow, $setup.visible]
                        ])
                    ]),
                    _: 1
                })
            ]))
        ], 64);
    }
    const sideBar = /* @__PURE__ */ _export_sfc(_sfc_main$6, [["render", _sfc_render$6]]);
    const _sfc_main$5 = {
        name: "hover-btn",
        setup() {
            const { show: show2 } = useSwitchShow();
            const isMobileVal = isMobile();
            const handleMouseEnter = () => {
                if (!isMobileVal) {
                    show2.value = 1;
                }
            };
            const handleClick = () => {
                if (isMobileVal) {
                    show2.value = 1;
                }
            };
            const { value: mode } = useMode();
            const className = vue.computed(() => ({
                "as-hide": show2.value === 2,
                [`as-hover-btn-${vue.toValue(mode)}`]: true
            }));
            return {
                handleMouseEnter,
                handleClick,
                className
            };
        }
    };
    function _sfc_render$5(_ctx, _cache, $props, $setup, $data, $options) {
        return vue.openBlock(), vue.createElementBlock("div", {
            class: vue.normalizeClass(["as-hover-btn", $setup.className]),
            onMouseenter: _cache[0] || (_cache[0] = (...args) => $setup.handleMouseEnter && $setup.handleMouseEnter(...args)),
            onClick: _cache[1] || (_cache[1] = (...args) => $setup.handleClick && $setup.handleClick(...args))
        }, " All Search ", 34);
    }
    const hoverBtn = /* @__PURE__ */ _export_sfc(_sfc_main$5, [["render", _sfc_render$5], ["__scopeId", "data-v-7c1bb101"]]);
    const _sfc_main$4 = {
        name: "iconfont"
    };
    const _hoisted_1$2 = { style: { "display": "none" } };
    const _hoisted_2$2 = /* @__PURE__ */ vue.createStaticVNode('<symbol id="icon-disk" viewBox="0 0 1024 1024"><path d="M722.858667 234.666667a64 64 0 0 1 56.533333 33.984L874.666667 448v256a64 64 0 0 1-64 64H213.333333a64 64 0 0 1-64-64V448l95.274667-179.349333A64 64 0 0 1 301.141333 234.666667h421.717334zM810.666667 501.333333H213.333333V704h597.333334v-202.666667zM618.666667 576v64H384v-64h234.666667z m128 0v64h-64v-64h64z m-23.808-277.333333H301.141333l-73.685333 138.666666h569.066667L722.858667 298.666667z"></path></symbol><symbol id="icon-personal" viewBox="0 0 1024 1024"><path d="M490.261333 173.44a49.066667 49.066667 0 0 1 64.064 19.178667l1.664 3.093333 87.850667 177.813333 196.352 28.501334a49.066667 49.066667 0 0 1 29.717333 81.066666l-2.538666 2.645334L725.333333 624l33.536 195.349333a49.066667 49.066667 0 0 1-68.010666 53.269334l-3.157334-1.514667L512 778.858667l-175.701333 92.266666a49.066667 49.066667 0 0 1-71.637334-48.426666l0.469334-3.328L298.666667 624.021333 156.629333 485.76a49.066667 49.066667 0 0 1 23.893334-83.114667l3.285333-0.597333 196.352-28.501333 87.850667-177.813334a49.066667 49.066667 0 0 1 22.250666-22.272z m-67.626666 258.581333l-199.658667 28.992 144.469333 140.650667-34.133333 198.741333L512 706.56l178.688 93.845333-34.133333-198.741333 144.469333-140.650667-199.658667-28.992L512 251.157333l-89.386667 180.864z"></path></symbol><symbol id="icon-shopping" viewBox="0 0 1024 1024"><path d="M330.667 768a53.333 53.333 0 1 1 0 106.667 53.333 53.333 0 0 1 0-106.667z m384 0a53.333 53.333 0 1 1 0 106.667 53.333 53.333 0 0 1 0-106.667zM94.763 160h54.741a96 96 0 0 1 92.907 71.787l1.024 4.394 13.205 62.486h0.213L299.733 504l32.491 157.333h402.219l61.653-298.666H313.813l-13.376-64h495.68a64 64 0 0 1 62.678 76.949L797.14 674.283a64 64 0 0 1-62.698 51.05H332.224a64 64 0 0 1-62.677-51.05L208.96 380.864l-0.405 0.085-27.734-131.562a32 32 0 0 0-28.309-25.238l-2.987-0.149H94.741v-64h54.742z"></path></symbol><symbol id="icon-developer" viewBox="0 0 1024 1024"><path d="M541.141333 268.864l61.717334 16.938667-132.394667 482.474666-61.717333-16.938666 132.394666-482.474667zM329.002667 298.666667l44.885333 45.610666-175.36 172.586667 175.04 167.573333-44.266667 46.229334L106.666667 517.504 329.002667 298.666667z m355.882666 0l222.336 218.837333L684.586667 730.666667l-44.266667-46.229334 175.018667-167.573333L640 344.277333 684.885333 298.666667z"></path></symbol><symbol id="icon-image" viewBox="0 0 1024 1024"><path d="M817.365333 213.333333a64 64 0 0 1 64 64v469.333334a64 64 0 0 1-64 64h-597.333333a64 64 0 0 1-64-64V277.333333a64 64 0 0 1 64-64h597.333333z m0 64h-597.333333v469.333334h597.333333V277.333333zM746.666667 371.114667v63.957333c-100.608-1.450667-163.306667 30.293333-193.493334 94.229333l-2.304 5.12-2.858666 6.357334c-44.010667 95.146667-129.088 142.464-249.322667 140.842666v-64c96.234667 1.6 157.930667-32.384 190.933333-103.04l2.538667-5.632 2.624-5.845333c41.664-89.664 127.488-133.333333 251.882667-131.989333z m-397.696-17.237334a42.666667 42.666667 0 1 1 0 85.333334 42.666667 42.666667 0 0 1 0-85.333334z"></path></symbol><symbol id="icon-social" viewBox="0 0 1024 1024"><path d="M617.216 170.666667c114.24 0 206.869333 92.608 206.869333 206.869333 0 72.533333-37.333333 136.32-93.802666 173.269333l168.746666 196.885334A64 64 0 0 1 850.432 853.333333l-101.888 0.021334c11.221333-19.413333 14.293333-42.496 8.746667-64L850.432 789.333333 634.24 537.109333l60.992-39.872a142.869333 142.869333 0 0 0-75.584-262.549333 251.264 251.264 0 0 0-55.424-57.173333A206.976 206.976 0 0 1 617.216 170.666667z m-61.162667 412.757333l140.8 164.266667A64 64 0 0 1 648.213333 853.333333H181.824a64 64 0 0 1-48.597333-105.642666l140.8-164.266667c18.026667 12.373333 37.76 22.442667 58.773333 29.781333L181.824 789.333333h466.410667l-150.997334-176.128c21.034667-7.338667 40.768-17.386667 58.816-29.781333zM415.04 170.666667c114.24 0 206.869333 92.608 206.869333 206.869333 0 114.24-92.629333 206.869333-206.869333 206.869333-114.261333 0-206.869333-92.629333-206.869333-206.869333C208.170667 263.274667 300.778667 170.666667 415.04 170.666667z m0 64a142.869333 142.869333 0 1 0 0 285.738666 142.869333 142.869333 0 0 0 0-285.738666z"></path></symbol><symbol id="icon-news" viewBox="0 0 1024 1024"><path d="M640 170.666667a64 64 0 0 1 64 64v490.666666h-64V234.666667H213.333333v554.666666h597.333334V362.666667h-64v-64h64a64 64 0 0 1 64 64v426.666666a64 64 0 0 1-64 64H213.333333a64 64 0 0 1-64-64V234.666667a64 64 0 0 1 64-64h426.666667z m-192 320v64h-170.666667v-64h170.666667z m128-128v64H277.333333v-64h298.666667z"></path></symbol><symbol id="icon-knowledge" viewBox="0 0 1024 1024"><path d="M168.106667 621.44l120.746666 57.962667 223.274667 108.138666 215.317333-104.32 128.768-61.674666a64 64 0 0 1-29.952 84.970666l-286.229333 138.624a64 64 0 0 1-55.808 0L197.994667 706.517333A64 64 0 0 1 168.106667 621.44z m687.829333-133.930667a64 64 0 0 1-29.674667 85.546667L540.010667 711.68a64 64 0 0 1-55.808 0L197.994667 573.056A64 64 0 0 1 166.826667 490.88l317.013333 149.525333 28.288 13.696 286.229333-138.624-0.149333-0.064 57.728-27.882666zM540.032 185.792l286.208 138.602667a64 64 0 0 1 0 115.2l-286.208 138.624a64 64 0 0 1-55.808 0L197.994667 439.594667a64 64 0 0 1 0-115.2L484.224 185.813333a64 64 0 0 1 55.808 0z m-27.904 57.6l-286.229333 138.602667 286.229333 138.624 286.229333-138.624-286.229333-138.602667z"></path></symbol><symbol id="icon-music" viewBox="0 0 1024 1024"><path d="M515.562667 232.91733299c159.061333 0 288 128.938667 288 288v22.250667A85.354667 85.354667 0 0 1 874.666667 627.30666699v93.994666a85.333333 85.333333 0 0 1-85.333334 85.333334h-116.138666V541.97333299h66.346666v-21.056c0-121.685333-97.002667-220.693333-217.92-223.914666l-6.058666-0.085334h-7.125334c-123.712 0-224 100.288-224 224v21.056h66.368v264.661334H234.666667a85.333333 85.333333 0 0 1-85.333334-85.333334v-93.994666a85.354667 85.354667 0 0 1 71.104-84.138667v-22.250667c0-159.061333 128.938667-288 288-288z m27.52 313.813334v256h-62.165334v-256h62.165334z m103.616 42.666666v192H584.533333v-192h62.165334z m-207.232 0v192h-62.165334v-192H439.466667z m-152.661334 16.576H234.666667a21.333333 21.333333 0 0 0-21.333334 21.333334v93.994666a21.333333 21.333333 0 0 0 21.333334 21.333334h52.138666v-136.661334z m502.528 0h-52.138666v136.661334H789.333333a21.333333 21.333333 0 0 0 21.333334-21.333334v-93.994666a21.333333 21.333333 0 0 0-21.333334-21.333334z"></path></symbol><symbol id="icon-translate" viewBox="0 0 1024 1024"><path d="M874.666667 192.00000033v64h-42.666667v426.666666c0 35.349333-30.72 64-68.565333 64h-149.354667l113.749333 128h-85.632l-113.770666-128h-11.562667l-113.749333 128h-85.610667l113.728-128h-170.666667C222.72 746.66666633 192 718.01600033 192 682.66666633V256.00000033H149.333333V192.00000033h725.333334z m-106.666667 64H256v426.666666h512V256.00000033zM405.333333 490.66666633v64h-64v-64h64z m277.333334 0v64H448v-64h234.666667z m0-106.666666v64H448v-64h234.666667z m-277.333334 0v64h-64v-64h64z"></path></symbol><symbol id="icon-video" viewBox="0 0 1024 1024"><path d="M658.069333 234.66666667a64 64 0 0 1 64 64l-0.021333 33.664 49.28-38.4A64 64 0 0 1 874.666667 344.44799967v338.368a64 64 0 0 1-103.338667 50.474667l-49.28-38.4v26.496a64 64 0 0 1-64 64H213.333333a64 64 0 0 1-64-64V298.66666667a64 64 0 0 1 64-64h444.736z m0 64H213.333333v422.698667h444.736l-0.128-157.589334L810.666667 682.79466667V344.42666667l-152.704 118.933333 0.106666-164.693333zM384 375.97866667a42.666667 42.666667 0 0 1 22.741333 6.570667l133.866667 84.330666a42.666667 42.666667 0 0 1 0.32 72l-133.866667 86.016A42.666667 42.666667 0 0 1 341.333333 588.99199967v-170.346666a42.666667 42.666667 0 0 1 42.666667-42.666667z m21.333333 81.322667v92.629333l72.789334-46.762667L405.333333 457.30133367z"></path></symbol><symbol id="icon-search" viewBox="0 0 1024 1024"><path d="M469.333 192c153.174 0 277.334 124.16 277.334 277.333 0 68.054-24.534 130.411-65.216 178.688L846.336 818.24l-48.341 49.877L630.4 695.125a276.053 276.053 0 0 1-161.067 51.542C316.16 746.667 192 622.507 192 469.333S316.16 192 469.333 192z m0 64C351.51 256 256 351.51 256 469.333s95.51 213.334 213.333 213.334 213.334-95.51 213.334-213.334S587.157 256 469.333 256z"></path></symbol><symbol id="icon-more" viewBox="0 0 1024 1024"><path d="M437.333333 224C437.333333 183.466667 471.466667 149.333333 512 149.333333s74.666667 34.133333 74.666667 74.666667S552.533333 298.666667 512 298.666667s-74.666667-34.133333-74.666667-74.666667zM439.466667 512c0-40.533333 34.133333-74.666667 74.666666-74.666667s74.666667 34.133333 74.666667 74.666667-34.133333 74.666667-74.666667 74.666667-74.666667-34.133333-74.666666-74.666667zM437.333333 800c0-40.533333 34.133333-74.666667 74.666667-74.666667s74.666667 34.133333 74.666667 74.666667S552.533333 874.666667 512 874.666667s-74.666667-34.133333-74.666667-74.666667z"></path></symbol><symbol id="icon-scholar" viewBox="0 0 1024 1024"><path d="M306.28571469 698.19428562l205.71428531 102.85714313 205.71428531-102.85714312v-194.97142875l68.57142938-32.61714282v227.58857157a68.57142844 68.57142844 0 0 1-37.89714281 61.32571406l-205.71428625 102.85714312a68.57142844 68.57142844 0 0 1-61.34857125 0l-205.71428626-102.85714312A68.57142844 68.57142844 0 0 1 237.71428531 698.19428562v-225.64571437l64.45714313 30.62857125-147.47428594-70.08a68.57142844 68.57142844 0 0 1-2.35428563-122.6971425L478.17142812 139.95428562a68.57142844 68.57142844 0 0 1 63.56571469 0l325.80571406 170.44571438A68.57142844 68.57142844 0 0 1 900.57142812 393.41714281L900.57142812 626.28571437h-68.57142843v-177.43999968l-292.6171425 139.15428562a68.57142844 68.57142844 0 0 1-58.90285688 0L306.28571469 505.14285687 306.28571469 698.19428562z m203.65714218-497.46285749L184.11428563 371.15428531l325.78285687 154.90285781 325.805715-154.90285781-325.805715-170.42285719z"></path></symbol>', 14);
    const _hoisted_16 = [
        _hoisted_2$2
    ];
    function _sfc_render$4(_ctx, _cache, $props, $setup, $data, $options) {
        return vue.openBlock(), vue.createElementBlock("svg", _hoisted_1$2, _hoisted_16);
    }
    const iconfont = /* @__PURE__ */ _export_sfc(_sfc_main$4, [["render", _sfc_render$4]]);
    function getSelection() {
        return window.getSelection().toString().trim();
    }
    function getSelectionRect() {
        const selection2 = window.getSelection();
        if (selection2.rangeCount) {
            return selection2.getRangeAt(0).getBoundingClientRect();
        }
        return null;
    }
    function scrollTop() {
        return document.documentElement.scrollTop || document.body.scrollTop;
    }
    function scrollLeft() {
        return document.documentElement.scrollLeft || document.body.scrollLeft;
    }
    const _sfc_main$3 = {
        name: "selection-bar",
        components: {
            favicon,
            icon
        },
        setup(props, ctx) {
            const {
                visible: toolbarVisible,
                list: list2
            } = useToolbar("tm");
            const visible2 = vue.ref(false);
            const toolbarEle = vue.ref(null);
            const styleObj = vue.reactive({
                top: 0,
                left: 0
            });
            const style = vue.computed(() => ({
                top: `${styleObj.top - 20}px`,
                left: `${styleObj.left}px`
            }));
            const selectionShort = vue.computed(() => {
                if (selection.value.length > 12) {
                    return `${selection.value.substr(0, 12)}...`;
                } else {
                    return selection.value;
                }
            });
            let selectStart = false;
            function changeVisible(val) {
                visible2.value = Boolean(val);
                vue.nextTick(() => {
                    if (!val) {
                        return;
                    }
                    if (!vue.unref(toolbarEle)) {
                        return;
                    }
                    const toolbarClientRect = vue.unref(toolbarEle).getBoundingClientRect();
                    const height = toolbarClientRect.bottom - toolbarClientRect.top;
                    const selectionRect = getSelectionRect();
                    if (selectionRect) {
                        const { x, right, left, top } = selectionRect;
                        styleObj.top = scrollTop() + top - height;
                        styleObj.left = scrollLeft() + x + (right - left) / 2 - toolbarClientRect.width / 2;
                    }
                });
            }
            function isToolbarContains(el2) {
                const toolbarEleValue = vue.unref(toolbarEle);
                if (toolbarEleValue) {
                    return toolbarEleValue.contains(el2);
                } else {
                    return false;
                }
            }
            window.addEventListener("mousedown", function (e) {
                const include = e.target && getAsRoot().contains(e.target);
                if (!include) {
                    changeVisible(false);
                }
            }, true);
            window.addEventListener("mouseup", function (e) {
                const include = e.target && getAsRoot().contains(e.target);
                const isToolbar = e.target && isToolbarContains(e.target);
                if (!include) {
                    selection.value = getSelection();
                    changeVisible(!!selection.value && selectStart);
                } else if (!isToolbar) {
                    selection.value = "";
                } else if (isToolbar) {
                    changeVisible(false);
                }
                selectStart = false;
            }, true);
            document.addEventListener("selectionchange", function () {
            }, true);
            document.addEventListener("selectstart", function () {
                selectStart = true;
            }, false);
            function handleClick(item, newWin) {
                const keyword = selection.value;
                if (newWin) {
                    window.open(item.url.replace("%s", keyword));
                } else {
                    window.location.href = item.url.replace("%s", keyword);
                }
            }
            function openMainDialog() {
                ctx.emit("open-dialog", selection.value);
            }
            return {
                toolbarVisible,
                list: list2,
                visible: visible2,
                toolbarEle,
                style,
                selectionShort,
                handleClick,
                openMainDialog
            };
        }
    };
    function _sfc_render$3(_ctx, _cache, $props, $setup, $data, $options) {
        const _component_favicon = vue.resolveComponent("favicon");
        const _component_icon = vue.resolveComponent("icon");
        return $setup.toolbarVisible === 1 ? vue.withDirectives((vue.openBlock(), vue.createElementBlock("div", {
            key: 0,
            class: "bar-container",
            ref: "toolbarEle",
            style: vue.normalizeStyle($setup.style)
        }, [
            (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList($setup.list, (item, i) => {
                return vue.openBlock(), vue.createBlock(_component_favicon, {
                    class: "tool-bar-item",
                    key: i,
                    url: item.url,
                    title: item.nameZh,
                    onClick: [
                        vue.withModifiers(($event) => $setup.handleClick(item, true), ["exact"]),
                        vue.withModifiers(($event) => $setup.handleClick(item, false), ["ctrl", "exact"])
                    ],
                    onMouseup: vue.withModifiers(($event) => $setup.handleClick(item, false), ["middle", "exact"])
                }, null, 8, ["url", "title", "onClick", "onMouseup"]);
            }), 128)),
            vue.createElementVNode("div", {
                class: "tool-bar-item",
                onClick: _cache[0] || (_cache[0] = (...args) => $setup.openMainDialog && $setup.openMainDialog(...args))
            }, [
                vue.createVNode(_component_icon, {
                    class: "as-more-icon",
                    name: "more"
                })
            ])
        ], 4)), [
            [vue.vShow, $setup.visible]
        ]) : vue.createCommentVNode("", true);
    }
    const selectionBar = /* @__PURE__ */ _export_sfc(_sfc_main$3, [["render", _sfc_render$3], ["__scopeId", "data-v-7c91e3b8"]]);
    const _sfc_main$2 = {
        name: "as-dialog",
        model: {
            prop: "visible",
            event: "change"
        },
        props: {
            visible: {
                type: Boolean,
                default: false
            },
            title: {
                type: String,
                default: ""
            },
            width: {
                type: String,
                default: ""
            }
        },
        setup(props, ctx) {
            const style = vue.computed(() => {
                const obj = {};
                if (props.width) {
                    obj.width = props.width;
                }
                return obj;
            });
            const localVisible = vue.computed({
                get: () => props.visible,
                set: (value2) => {
                    ctx.emit("update:visible", value2);
                }
            });
            const handleClose = () => {
                localVisible.value = false;
            };
            return {
                style,
                handleClose,
                localVisible
            };
        }
    };
    const _hoisted_1$1 = { class: "as-dialog" };
    const _hoisted_2$1 = { class: "as-dialog__header" };
    const _hoisted_3$1 = { class: "as-dialog__body" };
    function _sfc_render$2(_ctx, _cache, $props, $setup, $data, $options) {
        return vue.withDirectives((vue.openBlock(), vue.createElementBlock("div", _hoisted_1$1, [
            vue.createElementVNode("div", {
                class: "as-dialog-container",
                style: vue.normalizeStyle($setup.style)
            }, [
                vue.createElementVNode("div", _hoisted_2$1, [
                    vue.renderSlot(_ctx.$slots, "header")
                ]),
                vue.createElementVNode("div", _hoisted_3$1, [
                    vue.renderSlot(_ctx.$slots, "default")
                ])
            ], 4),
            vue.createElementVNode("div", {
                class: "as-dialog__mask",
                onClick: _cache[0] || (_cache[0] = (...args) => $setup.handleClose && $setup.handleClose(...args))
            })
        ], 512)), [
            [vue.vShow, $setup.localVisible]
        ]);
    }
    const asDialog = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["render", _sfc_render$2]]);
    const _sfc_main$1 = {
        name: "search-dialog",
        components: {
            asDialog,
            icon,
            favicon,
            scrollbar
        },
        props: {
            visible: {
                type: Boolean,
                default: false
            },
            keyword: {
                type: [String, Number],
                default: ""
            }
        },
        emits: ["update:visible"],
        setup(props, ctx) {
            const localVisible = vue.computed({
                get: () => props.visible,
                set: (value2) => {
                    ctx.emit("update:visible", value2);
                }
            });
            vue.watch(() => props.visible, (val) => {
                inputValue.value = val ? props.keyword : "";
            });
            const inputValue = vue.ref("");
            const { sites: sites2 } = useSites("tm");
            const handleClick = (item, newWin) => {
                const keyword = inputValue.value;
                if (newWin) {
                    window.open(item.url.replace("%s", keyword));
                } else {
                    window.location.href = item.url.replace("%s", keyword);
                }
            };
            return {
                localVisible,
                sites: sites2,
                inputValue,
                handleClick
            };
        }
    };
    const _hoisted_1 = { class: "se-header" };
    const _hoisted_2 = { class: "se-input-box" };
    const _hoisted_3 = { class: "se-container" };
    const _hoisted_4 = { class: "cate-name" };
    const _hoisted_5 = ["textContent"];
    const _hoisted_6 = { class: "cate-list" };
    const _hoisted_7 = ["onClick", "onMouseup"];
    const _hoisted_8 = ["textContent"];
    function _sfc_render$1(_ctx, _cache, $props, $setup, $data, $options) {
        const _component_icon = vue.resolveComponent("icon");
        const _component_favicon = vue.resolveComponent("favicon");
        const _component_scrollbar = vue.resolveComponent("scrollbar");
        const _component_as_dialog = vue.resolveComponent("as-dialog");
        return vue.openBlock(), vue.createBlock(_component_as_dialog, {
            visible: $setup.localVisible,
            "onUpdate:visible": _cache[1] || (_cache[1] = ($event) => $setup.localVisible = $event)
        }, {
            header: vue.withCtx(() => [
                vue.createElementVNode("div", _hoisted_1, [
                    vue.createElementVNode("div", _hoisted_2, [
                        $setup.localVisible ? vue.withDirectives((vue.openBlock(), vue.createElementBlock("input", {
                            key: 0,
                            autofocus: "",
                            autocomplete: "off",
                            class: "se-input",
                            placeholder: "输入并搜索",
                            type: "text",
                            "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $setup.inputValue = $event)
                        }, null, 512)), [
                            [vue.vModelText, $setup.inputValue]
                        ]) : vue.createCommentVNode("", true)
                    ])
                ])
            ]),
            default: vue.withCtx(() => [
                vue.createVNode(_component_scrollbar, {
                    class: "se-scrollbar-container",
                    noresize: ""
                }, {
                    default: vue.withCtx(() => [
                        vue.createElementVNode("div", _hoisted_3, [
                            (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList($setup.sites, (item) => {
                                return vue.openBlock(), vue.createElementBlock("div", {
                                    key: item.name,
                                    class: "cate-container"
                                }, [
                                    vue.createElementVNode("p", _hoisted_4, [
                                        vue.createVNode(_component_icon, {
                                            name: item.name
                                        }, null, 8, ["name"]),
                                        vue.createElementVNode("span", {
                                            textContent: vue.toDisplayString(item.nameZh)
                                        }, null, 8, _hoisted_5)
                                    ]),
                                    vue.createElementVNode("ul", _hoisted_6, [
                                        (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(item.list, (child, i) => {
                                            return vue.openBlock(), vue.createElementBlock("li", {
                                                key: `${item.name}_${i}`,
                                                class: "cate-item"
                                            }, [
                                                vue.createElementVNode("a", {
                                                    href: "javascript:void 0",
                                                    onClick: [
                                                        vue.withModifiers(($event) => $setup.handleClick(child), ["exact"]),
                                                        vue.withModifiers(($event) => $setup.handleClick(child, true), ["ctrl", "exact"])
                                                    ],
                                                    onMouseup: vue.withModifiers(($event) => $setup.handleClick(child, true), ["middle", "exact"])
                                                }, [
                                                    vue.createVNode(_component_favicon, {
                                                        class: "as-url-icon",
                                                        url: child.url,
                                                        icon: child.icon
                                                    }, null, 8, ["url", "icon"]),
                                                    vue.createElementVNode("p", {
                                                        class: "as-subMenu-text",
                                                        textContent: vue.toDisplayString(child.nameZh)
                                                    }, null, 8, _hoisted_8)
                                                ], 40, _hoisted_7)
                                            ]);
                                        }), 128))
                                    ])
                                ]);
                            }), 128))
                        ])
                    ]),
                    _: 1
                })
            ]),
            _: 1
        }, 8, ["visible"]);
    }
    const searchDialog = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["render", _sfc_render$1]]);
    const _sfc_main = {
        name: "all-search",
        components: {
            logo,
            asMenu,
            sideBar,
            hoverBtn,
            iconfont,
            selectionBar,
            searchDialog
        },
        setup() {
            const { isFullScreen: isFullScreen2 } = useFullScreen();
            const { value: mode } = useMode();
            const { show: show2 } = useSwitchShow();
            const { visible: toolbarVisible } = useToolbar("tm");

            //start


            // 初始化主题函数 - 只在需要时执行
            function initTheme() {
                const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;
                document.documentElement.setAttribute('data-theme', prefersDark ? 'dark' : 'light');
            }

            // 在组件挂载时初始化主题并监听系统主题变化
            vue.onMounted(() => {
                // 初始化主题
                initTheme();

                // 监听系统主题变化
                const darkModeMediaQuery = window.matchMedia('(prefers-color-scheme: dark)');

                // 使用事件监听器实时响应系统主题变化
                darkModeMediaQuery.addEventListener('change', (e) => {
                    document.documentElement.setAttribute('data-theme', e.matches ? 'dark' : 'light');
                    // 触发颜色变量更新
                    const event = new CustomEvent('theme-changed', {
                        detail: { isDark: e.matches }
                    });
                    document.dispatchEvent(event);
                });
            });


            //end

            const classList = vue.computed(() => [
                `as-${vue.toValue(mode)}`,
                vue.toValue(show2) === 1 ? "as-show" : "as-hide"
            ]);
            const visible2 = vue.computed(() => {
                return !site.invisible && !vue.unref(isFullScreen2);
            });
            vue.watchEffect(() => {
                const remove = site.invisible || site.disabled || vue.toValue(show2) === 2;
                changeBodyStyle(vue.toValue(mode), remove);
            });
            let isInit = false;
            function init2(site2) {
                if (isInit || site2.disabled) {
                    return;
                }
                protectStyle();
                initSpecialStyle();
                addCustomStyle(vue.toValue(mode), site2);
                isInit = true;
            }
            vue.watch(site, (newSite) => {
                init2(newSite);
            }, {
                immediate: true
            });
            const dialogVisible = vue.ref(false);
            const keyword = vue.ref("");
            function openDialog(text) {
                keyword.value = text;
                dialogVisible.value = true;
            }
            const { disabled } = vue.toRefs(site);
            return {
                disabled,
                mode,
                classList,
                visible: visible2,
                dialogVisible,
                openDialog,
                keyword,
                toolbarVisible
            };
        }
    };
    function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
        const _component_logo = vue.resolveComponent("logo");
        const _component_as_menu = vue.resolveComponent("as-menu");
        const _component_side_bar = vue.resolveComponent("side-bar");
        const _component_hoverBtn = vue.resolveComponent("hoverBtn");
        const _component_selection_bar = vue.resolveComponent("selection-bar");
        const _component_search_dialog = vue.resolveComponent("search-dialog");
        const _component_iconfont = vue.resolveComponent("iconfont");
        return vue.openBlock(), vue.createElementBlock(vue.Fragment, null, [
            !$setup.disabled ? (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 0 }, [
                vue.withDirectives(vue.createElementVNode("div", {
                    style: { "opacity": "0" },
                    class: vue.normalizeClass(["as-container", $setup.classList])
                }, [
                    vue.createVNode(_component_logo, { mode: $setup.mode }, null, 8, ["mode"]),
                    vue.createVNode(_component_as_menu, { mode: $setup.mode }, null, 8, ["mode"]),
                    vue.createVNode(_component_side_bar)
                ], 2), [
                    [vue.vShow, $setup.visible]
                ]),
                vue.withDirectives(vue.createVNode(_component_hoverBtn, null, null, 512), [
                    [vue.vShow, $setup.visible]
                ])
            ], 64)) : vue.createCommentVNode("", true),
            $setup.toolbarVisible === 1 ? (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 1 }, [
                vue.createVNode(_component_selection_bar, { onOpenDialog: $setup.openDialog }, null, 8, ["onOpenDialog"]),
                vue.createVNode(_component_search_dialog, {
                    keyword: $setup.keyword,
                    visible: $setup.dialogVisible,
                    "onUpdate:visible": _cache[0] || (_cache[0] = ($event) => $setup.dialogVisible = $event)
                }, null, 8, ["keyword", "visible"])
            ], 64)) : vue.createCommentVNode("", true),
            !$setup.disabled || $setup.toolbarVisible === 1 ? (vue.openBlock(), vue.createBlock(_component_iconfont, { key: 2 })) : vue.createCommentVNode("", true)
        ], 64);
    }
    const index = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render]]);
    initTmMethods();
    const el = getAsRoot();
    if (!el) {
        const app = vue.createApp(index);
        const el2 = createAsRoot();
        const mountEL = document.documentElement.insertBefore(el2, document.body);
        app.mount(mountEL);
    }

})(Vue, Popper);