Greasy Fork

来自缓存

Greasy Fork is available in English.

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

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

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==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: "http://greasyfork.icu/zh-CN/scripts?q=%s&utf8=✓",
            icon: "http://greasyfork.icu/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);