// ==UserScript== // @name 神速Down·百度网盘不限制下载夸克网盘直连-批量启航(支持整个文件夹下载) // @namespace greasyfork // @version 1.4.1 // @author 神速Down // @description 不限制速度百度网盘解析夸克网盘直连脚本支持文件夹多文件下载,无视黑号,拥有IDM/Aria2/Motrix三种方式任意体验极速下载!支持Microsoft Edge、Google Chrome、Firefox等浏览器 面向所有网友免费交流学习使用... // @license MIT // @icon data:image/png;base64,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 // @homepage https://ssv2.gongxianghao.vip // @match https://pan.baidu.com/disk/main* // @match https://pan.baidu.com/s/* // @match https://pan.quark.cn/list* // @match https://yun.baidu.com/disk/main* // @match https://yun.baidu.com/s/* // @require https://registry.npmmirror.com/vue/3.5.13/files/dist/vue.global.prod.js // @require https://registry.npmmirror.com/axios/1.8.4/files/dist/axios.min.js // @require https://registry.npmmirror.com/mitt/3.0.1/files/dist/mitt.umd.js // @require https://registry.npmmirror.com/crypto-js/3.3.0/files/crypto-js.js // @antifeature ads // @antifeature membership // @antifeature tracking // @connect localhost // @connect quark.cn // @connect assco.cn // @grant GM.setValue // @grant GM_addStyle // @grant GM_deleteValue // @grant GM_getValue // @grant GM_info // @grant GM_setValue // @grant GM_xmlhttpRequest // @grant unsafeWindow // @run-at document-end // ==/UserScript== (e=>{if(typeof GM_addStyle=="function"){GM_addStyle(e);return}const l=document.createElement("style");l.textContent=e,document.head.append(l)})(' @charset "UTF-8";:root{--el-color-white: #ffffff;--el-color-black: #000000;--el-color-primary-rgb: 13, 169, 181;--el-color-success-rgb: 103, 194, 58;--el-color-warning-rgb: 230, 162, 60;--el-color-danger-rgb: 245, 108, 108;--el-color-error-rgb: 245, 108, 108;--el-color-info-rgb: 144, 147, 153;--el-font-size-extra-large: 20px;--el-font-size-large: 18px;--el-font-size-medium: 16px;--el-font-size-base: 14px;--el-font-size-small: 13px;--el-font-size-extra-small: 12px;--el-font-family: "Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "\u5FAE\u8F6F\u96C5\u9ED1", Arial, sans-serif;--el-font-weight-primary: 500;--el-font-line-height-primary: 24px;--el-index-normal: 1;--el-index-top: 1000;--el-index-popper: 2000;--el-border-radius-base: 4px;--el-border-radius-small: 2px;--el-border-radius-round: 20px;--el-border-radius-circle: 100%;--el-transition-duration: .3s;--el-transition-duration-fast: .2s;--el-transition-function-ease-in-out-bezier: cubic-bezier(.645, .045, .355, 1);--el-transition-function-fast-bezier: cubic-bezier(.23, 1, .32, 1);--el-transition-all: all var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier);--el-transition-fade: opacity var(--el-transition-duration) var(--el-transition-function-fast-bezier);--el-transition-md-fade: transform var(--el-transition-duration) var(--el-transition-function-fast-bezier), opacity var(--el-transition-duration) var(--el-transition-function-fast-bezier);--el-transition-fade-linear: opacity var(--el-transition-duration-fast) linear;--el-transition-border: border-color var(--el-transition-duration-fast) var(--el-transition-function-ease-in-out-bezier);--el-transition-box-shadow: box-shadow var(--el-transition-duration-fast) var(--el-transition-function-ease-in-out-bezier);--el-transition-color: color var(--el-transition-duration-fast) var(--el-transition-function-ease-in-out-bezier);--el-component-size-large: 40px;--el-component-size: 32px;--el-component-size-small: 24px}:root{color-scheme:light;--el-color-primary: #0da9b5;--el-color-primary-light-3: rgb(85.6, 194.8, 203.2);--el-color-primary-light-5: #86d4da;--el-color-primary-light-7: rgb(182.4, 229.2, 232.8);--el-color-primary-light-8: rgb(206.6, 237.8, 240.2);--el-color-primary-light-9: rgb(230.8, 246.4, 247.6);--el-color-primary-dark-2: rgb(10.4, 135.2, 144.8);--el-color-success: #67c23a;--el-color-success-light-3: rgb(148.6, 212.3, 117.1);--el-color-success-light-5: rgb(179, 224.5, 156.5);--el-color-success-light-7: rgb(209.4, 236.7, 195.9);--el-color-success-light-8: rgb(224.6, 242.8, 215.6);--el-color-success-light-9: rgb(239.8, 248.9, 235.3);--el-color-success-dark-2: rgb(82.4, 155.2, 46.4);--el-color-warning: #e6a23c;--el-color-warning-light-3: rgb(237.5, 189.9, 118.5);--el-color-warning-light-5: rgb(242.5, 208.5, 157.5);--el-color-warning-light-7: rgb(247.5, 227.1, 196.5);--el-color-warning-light-8: rgb(250, 236.4, 216);--el-color-warning-light-9: rgb(252.5, 245.7, 235.5);--el-color-warning-dark-2: rgb(184, 129.6, 48);--el-color-danger: #f56c6c;--el-color-danger-light-3: rgb(248, 152.1, 152.1);--el-color-danger-light-5: rgb(250, 181.5, 181.5);--el-color-danger-light-7: rgb(252, 210.9, 210.9);--el-color-danger-light-8: rgb(253, 225.6, 225.6);--el-color-danger-light-9: rgb(254, 240.3, 240.3);--el-color-danger-dark-2: rgb(196, 86.4, 86.4);--el-color-error: #f56c6c;--el-color-error-light-3: rgb(248, 152.1, 152.1);--el-color-error-light-5: rgb(250, 181.5, 181.5);--el-color-error-light-7: rgb(252, 210.9, 210.9);--el-color-error-light-8: rgb(253, 225.6, 225.6);--el-color-error-light-9: rgb(254, 240.3, 240.3);--el-color-error-dark-2: rgb(196, 86.4, 86.4);--el-color-info: #909399;--el-color-info-light-3: rgb(177.3, 179.4, 183.6);--el-color-info-light-5: rgb(199.5, 201, 204);--el-color-info-light-7: rgb(221.7, 222.6, 224.4);--el-color-info-light-8: rgb(232.8, 233.4, 234.6);--el-color-info-light-9: rgb(243.9, 244.2, 244.8);--el-color-info-dark-2: rgb(115.2, 117.6, 122.4);--el-bg-color: #ffffff;--el-bg-color-page: #f2f3f5;--el-bg-color-overlay: #ffffff;--el-text-color-primary: #303133;--el-text-color-regular: #606266;--el-text-color-secondary: #909399;--el-text-color-placeholder: #a8abb2;--el-text-color-disabled: #c0c4cc;--el-border-color: #dcdfe6;--el-border-color-light: #e4e7ed;--el-border-color-lighter: #ebeef5;--el-border-color-extra-light: #f2f6fc;--el-border-color-dark: #d4d7de;--el-border-color-darker: #cdd0d6;--el-fill-color: #f0f2f5;--el-fill-color-light: #f5f7fa;--el-fill-color-lighter: #fafafa;--el-fill-color-extra-light: #fafcff;--el-fill-color-dark: #ebedf0;--el-fill-color-darker: #e6e8eb;--el-fill-color-blank: #ffffff;--el-box-shadow: 0px 12px 32px 4px rgba(0, 0, 0, .04), 0px 8px 20px rgba(0, 0, 0, .08);--el-box-shadow-light: 0px 0px 12px rgba(0, 0, 0, .12);--el-box-shadow-lighter: 0px 0px 6px rgba(0, 0, 0, .12);--el-box-shadow-dark: 0px 16px 48px 16px rgba(0, 0, 0, .08), 0px 12px 32px rgba(0, 0, 0, .12), 0px 8px 16px -8px rgba(0, 0, 0, .16);--el-disabled-bg-color: var(--el-fill-color-light);--el-disabled-text-color: var(--el-text-color-placeholder);--el-disabled-border-color: var(--el-border-color-light);--el-overlay-color: rgba(0, 0, 0, .8);--el-overlay-color-light: rgba(0, 0, 0, .7);--el-overlay-color-lighter: rgba(0, 0, 0, .5);--el-mask-color: rgba(255, 255, 255, .9);--el-mask-color-extra-light: rgba(255, 255, 255, .3);--el-border-width: 1px;--el-border-style: solid;--el-border-color-hover: var(--el-text-color-disabled);--el-border: var(--el-border-width) var(--el-border-style) var(--el-border-color);--el-svg-monochrome-grey: var(--el-border-color)}.fade-in-linear-enter-active,.fade-in-linear-leave-active{transition:var(--el-transition-fade-linear)}.fade-in-linear-enter-from,.fade-in-linear-leave-to{opacity:0}.el-fade-in-linear-enter-active,.el-fade-in-linear-leave-active{transition:var(--el-transition-fade-linear)}.el-fade-in-linear-enter-from,.el-fade-in-linear-leave-to{opacity:0}.el-fade-in-enter-active,.el-fade-in-leave-active{transition:all var(--el-transition-duration) cubic-bezier(.55,0,.1,1)}.el-fade-in-enter-from,.el-fade-in-leave-active{opacity:0}.el-zoom-in-center-enter-active,.el-zoom-in-center-leave-active{transition:all var(--el-transition-duration) cubic-bezier(.55,0,.1,1)}.el-zoom-in-center-enter-from,.el-zoom-in-center-leave-active{opacity:0;transform:scaleX(0)}.el-zoom-in-top-enter-active,.el-zoom-in-top-leave-active{opacity:1;transform:scaleY(1);transition:var(--el-transition-md-fade);transform-origin:center top}.el-zoom-in-top-enter-active[data-popper-placement^=top],.el-zoom-in-top-leave-active[data-popper-placement^=top]{transform-origin:center bottom}.el-zoom-in-top-enter-from,.el-zoom-in-top-leave-active{opacity:0;transform:scaleY(0)}.el-zoom-in-bottom-enter-active,.el-zoom-in-bottom-leave-active{opacity:1;transform:scaleY(1);transition:var(--el-transition-md-fade);transform-origin:center bottom}.el-zoom-in-bottom-enter-from,.el-zoom-in-bottom-leave-active{opacity:0;transform:scaleY(0)}.el-zoom-in-left-enter-active,.el-zoom-in-left-leave-active{opacity:1;transform:scale(1);transition:var(--el-transition-md-fade);transform-origin:top left}.el-zoom-in-left-enter-from,.el-zoom-in-left-leave-active{opacity:0;transform:scale(.45)}.collapse-transition{transition:var(--el-transition-duration) height ease-in-out,var(--el-transition-duration) padding-top ease-in-out,var(--el-transition-duration) padding-bottom ease-in-out}.el-collapse-transition-leave-active,.el-collapse-transition-enter-active{transition:var(--el-transition-duration) max-height ease-in-out,var(--el-transition-duration) padding-top ease-in-out,var(--el-transition-duration) padding-bottom ease-in-out}.horizontal-collapse-transition{transition:var(--el-transition-duration) width ease-in-out,var(--el-transition-duration) padding-left ease-in-out,var(--el-transition-duration) padding-right ease-in-out}.el-list-enter-active,.el-list-leave-active{transition:all 1s}.el-list-enter-from,.el-list-leave-to{opacity:0;transform:translateY(-30px)}.el-list-leave-active{position:absolute!important}.el-opacity-transition{transition:opacity var(--el-transition-duration) cubic-bezier(.55,0,.1,1)}.el-icon-loading{animation:rotating 2s linear infinite}.el-icon--right{margin-left:5px}.el-icon--left{margin-right:5px}@keyframes rotating{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.el-icon{--color: inherit;height:1em;width:1em;line-height:1em;display:inline-flex;justify-content:center;align-items:center;position:relative;fill:currentColor;color:var(--color);font-size:inherit}.el-icon.is-loading{animation:rotating 2s linear infinite}.el-icon svg{height:1em;width:1em}:root{--el-loading-spinner-size: 42px;--el-loading-fullscreen-spinner-size: 50px}.el-loading-parent--relative{position:relative!important}.el-loading-parent--hidden{overflow:hidden!important}.el-loading-mask{position:absolute;z-index:2000;background-color:var(--el-mask-color);margin:0;top:0;right:0;bottom:0;left:0;transition:opacity var(--el-transition-duration)}.el-loading-mask.is-fullscreen{position:fixed}.el-loading-mask.is-fullscreen .el-loading-spinner{margin-top:calc((0px - var(--el-loading-fullscreen-spinner-size)) / 2)}.el-loading-mask.is-fullscreen .el-loading-spinner .circular{height:var(--el-loading-fullscreen-spinner-size);width:var(--el-loading-fullscreen-spinner-size)}.el-loading-spinner{top:50%;margin-top:calc((0px - var(--el-loading-spinner-size)) / 2);width:100%;text-align:center;position:absolute}.el-loading-spinner .el-loading-text{color:var(--el-color-primary);margin:3px 0;font-size:14px}.el-loading-spinner .circular{display:inline;height:var(--el-loading-spinner-size);width:var(--el-loading-spinner-size);animation:loading-rotate 2s linear infinite}.el-loading-spinner .path{animation:loading-dash 1.5s ease-in-out infinite;stroke-dasharray:90,150;stroke-dashoffset:0;stroke-width:2;stroke:var(--el-color-primary);stroke-linecap:round}.el-loading-spinner i{color:var(--el-color-primary)}.el-loading-fade-enter-from,.el-loading-fade-leave-to{opacity:0}@keyframes loading-rotate{to{transform:rotate(360deg)}}@keyframes loading-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-40px}to{stroke-dasharray:90,150;stroke-dashoffset:-120px}}.el-dialog{--el-dialog-width: 50%;--el-dialog-margin-top: 5vh;--el-dialog-bg-color: var(--el-bg-color);--el-dialog-box-shadow: var(--el-box-shadow);--el-dialog-title-font-size: var(--el-font-size-large);--el-dialog-content-font-size: 14px;--el-dialog-font-line-height: var(--el-font-line-height-primary);--el-dialog-padding-primary: 32px;--el-dialog-border-radius: 16px;position:relative;margin:var(--el-dialog-margin-top, 15vh) auto 50px;background:var(--el-dialog-bg-color);border-radius:var(--el-dialog-border-radius);box-shadow:var(--el-dialog-box-shadow);box-sizing:border-box;padding:var(--el-dialog-padding-primary);width:var(--el-dialog-width, 50%);overflow-wrap:break-word}.el-dialog:focus{outline:none!important}.el-dialog.is-align-center{margin:auto}.el-dialog.is-fullscreen{--el-dialog-width: 100%;--el-dialog-margin-top: 0;margin-bottom:0;height:100%;overflow:auto;border-radius:0}.el-dialog__wrapper{position:fixed;top:0;right:0;bottom:0;left:0;overflow:auto;margin:0}.el-dialog.is-draggable .el-dialog__header{cursor:move;-webkit-user-select:none;user-select:none}.el-dialog__header{padding-bottom:var(--el-dialog-padding-primary)}.el-dialog__header.show-close{padding-right:calc(var(--el-dialog-padding-primary) + var(--el-message-close-size, 16px))}.el-dialog__headerbtn{position:absolute;top:0;right:0;padding:0;width:48px;height:48px;background:transparent;border:none;outline:none;cursor:pointer;font-size:var(--el-message-close-size, 16px)}.el-dialog__headerbtn .el-dialog__close{color:var(--el-color-info);font-size:inherit}.el-dialog__headerbtn:focus .el-dialog__close,.el-dialog__headerbtn:hover .el-dialog__close{color:var(--el-color-primary)}.el-dialog__title{line-height:var(--el-dialog-font-line-height);font-size:var(--el-dialog-title-font-size);color:var(--el-text-color-primary)}.el-dialog__body{color:var(--el-text-color-regular);font-size:var(--el-dialog-content-font-size)}.el-dialog__footer{padding-top:var(--el-dialog-padding-primary);text-align:right;box-sizing:border-box}.el-dialog--center{text-align:center}.el-dialog--center .el-dialog__body{text-align:initial}.el-dialog--center .el-dialog__footer{text-align:inherit}.el-overlay-dialog{position:fixed;top:0;right:0;bottom:0;left:0;overflow:auto}.dialog-fade-enter-active{animation:modal-fade-in var(--el-transition-duration)}.dialog-fade-enter-active .el-overlay-dialog{animation:dialog-fade-in var(--el-transition-duration)}.dialog-fade-leave-active{animation:modal-fade-out var(--el-transition-duration)}.dialog-fade-leave-active .el-overlay-dialog{animation:dialog-fade-out var(--el-transition-duration)}@keyframes dialog-fade-in{0%{transform:translate3d(0,-20px,0);opacity:0}to{transform:translateZ(0);opacity:1}}@keyframes dialog-fade-out{0%{transform:translateZ(0);opacity:1}to{transform:translate3d(0,-20px,0);opacity:0}}@keyframes modal-fade-in{0%{opacity:0}to{opacity:1}}@keyframes modal-fade-out{0%{opacity:1}to{opacity:0}}.el-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:2000;height:100%;background-color:var(--el-overlay-color-lighter);overflow:auto}.el-overlay .el-overlay-root{height:0}.el-tabs{--el-tabs-header-height: 40px;display:flex}.el-tabs__header{padding:0;position:relative;margin:0 0 15px;display:flex;align-items:center;justify-content:space-between}.el-tabs__header-vertical{flex-direction:column}.el-tabs__active-bar{position:absolute;bottom:0;left:0;height:2px;background-color:var(--el-color-primary);z-index:1;transition:width var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier),transform var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier);list-style:none}.el-tabs__new-tab{display:flex;align-items:center;justify-content:center;flex-shrink:0;border:1px solid var(--el-border-color);height:20px;width:20px;line-height:20px;margin:10px 0 10px 10px;border-radius:3px;text-align:center;font-size:12px;color:var(--el-text-color-primary);cursor:pointer;transition:all .15s}.el-tabs__new-tab .is-icon-plus{height:inherit;width:inherit;transform:scale(.8)}.el-tabs__new-tab .is-icon-plus svg{vertical-align:middle}.el-tabs__new-tab:hover{color:var(--el-color-primary)}.el-tabs__new-tab-vertical{margin-left:0}.el-tabs__nav-wrap{overflow:hidden;margin-bottom:-1px;position:relative;flex:1 auto}.el-tabs__nav-wrap:after{content:"";position:absolute;left:0;bottom:0;width:100%;height:2px;background-color:var(--el-border-color-light);z-index:var(--el-index-normal)}.el-tabs__nav-wrap.is-scrollable{padding:0 20px;box-sizing:border-box}.el-tabs__nav-scroll{overflow:hidden}.el-tabs__nav-next,.el-tabs__nav-prev{position:absolute;cursor:pointer;line-height:44px;font-size:12px;color:var(--el-text-color-secondary);width:20px;text-align:center}.el-tabs__nav-next{right:0}.el-tabs__nav-prev{left:0}.el-tabs__nav{display:flex;white-space:nowrap;position:relative;transition:transform var(--el-transition-duration);float:left;z-index:calc(var(--el-index-normal) + 1)}.el-tabs__nav.is-stretch{min-width:100%;display:flex}.el-tabs__nav.is-stretch>*{flex:1;text-align:center}.el-tabs__item{padding:0 20px;height:var(--el-tabs-header-height);box-sizing:border-box;display:flex;align-items:center;justify-content:center;list-style:none;font-size:var(--el-font-size-base);font-weight:500;color:var(--el-text-color-primary);position:relative}.el-tabs__item:focus,.el-tabs__item:focus:active{outline:none}.el-tabs__item:focus-visible{box-shadow:0 0 2px 2px var(--el-color-primary) inset;border-radius:3px}.el-tabs__item .is-icon-close{border-radius:50%;text-align:center;transition:all var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier);margin-left:5px}.el-tabs__item .is-icon-close:before{transform:scale(.9);display:inline-block}.el-tabs__item .is-icon-close:hover{background-color:var(--el-text-color-placeholder);color:#fff}.el-tabs__item.is-active{color:var(--el-color-primary)}.el-tabs__item:hover{color:var(--el-color-primary);cursor:pointer}.el-tabs__item.is-disabled{color:var(--el-disabled-text-color);cursor:not-allowed}.el-tabs__content{overflow:hidden;position:relative;flex-grow:1}.el-tabs--top>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom>.el-tabs__header .el-tabs__item:nth-child(2){padding-left:0}.el-tabs--top>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom>.el-tabs__header .el-tabs__item:last-child{padding-right:0}.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2){padding-left:20px}.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:last-child{padding-right:20px}.el-tabs--card>.el-tabs__header{border-bottom:1px solid var(--el-border-color-light);height:var(--el-tabs-header-height)}.el-tabs--card>.el-tabs__header .el-tabs__nav-wrap:after{content:none}.el-tabs--card>.el-tabs__header .el-tabs__nav{border:1px solid var(--el-border-color-light);border-bottom:none;border-radius:4px 4px 0 0;box-sizing:border-box}.el-tabs--card>.el-tabs__header .el-tabs__active-bar{display:none}.el-tabs--card>.el-tabs__header .el-tabs__item .is-icon-close{position:relative;font-size:12px;width:0;height:14px;overflow:hidden;right:-2px;transform-origin:100% 50%}.el-tabs--card>.el-tabs__header .el-tabs__item{border-bottom:1px solid transparent;border-left:1px solid var(--el-border-color-light);transition:color var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier),padding var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier)}.el-tabs--card>.el-tabs__header .el-tabs__item:first-child{border-left:none}.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover{padding-left:13px;padding-right:13px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover .is-icon-close{width:14px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active{border-bottom-color:var(--el-bg-color)}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable{padding-left:20px;padding-right:20px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable .is-icon-close{width:14px}.el-tabs--border-card{background:var(--el-bg-color-overlay);border:1px solid var(--el-border-color)}.el-tabs--border-card>.el-tabs__content{padding:15px}.el-tabs--border-card>.el-tabs__header{background-color:var(--el-fill-color-light);border-bottom:1px solid var(--el-border-color-light);margin:0}.el-tabs--border-card>.el-tabs__header .el-tabs__nav-wrap:after{content:none}.el-tabs--border-card>.el-tabs__header .el-tabs__item{transition:all var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier);border:1px solid transparent;margin-top:-1px;color:var(--el-text-color-secondary)}.el-tabs--border-card>.el-tabs__header .el-tabs__item:first-child{margin-left:-1px}.el-tabs--border-card>.el-tabs__header .el-tabs__item+.el-tabs__item{margin-left:-1px}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active{color:var(--el-color-primary);background-color:var(--el-bg-color-overlay);border-right-color:var(--el-border-color);border-left-color:var(--el-border-color)}.el-tabs--border-card>.el-tabs__header .el-tabs__item:not(.is-disabled):hover{color:var(--el-color-primary)}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-disabled{color:var(--el-disabled-text-color)}.el-tabs--border-card>.el-tabs__header .is-scrollable .el-tabs__item:first-child{margin-left:0}.el-tabs--bottom{flex-direction:column}.el-tabs--bottom .el-tabs__header.is-bottom{margin-bottom:0;margin-top:10px}.el-tabs--bottom.el-tabs--border-card .el-tabs__header.is-bottom{border-bottom:0;border-top:1px solid var(--el-border-color)}.el-tabs--bottom.el-tabs--border-card .el-tabs__nav-wrap.is-bottom{margin-top:-1px;margin-bottom:0}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom:not(.is-active){border:1px solid transparent}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom{margin:0 -1px -1px}.el-tabs--left,.el-tabs--right{overflow:hidden}.el-tabs--left .el-tabs__header.is-left,.el-tabs--left .el-tabs__header.is-right,.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--left .el-tabs__nav-scroll,.el-tabs--right .el-tabs__header.is-left,.el-tabs--right .el-tabs__header.is-right,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__nav-scroll{height:100%}.el-tabs--left .el-tabs__active-bar.is-left,.el-tabs--left .el-tabs__active-bar.is-right,.el-tabs--right .el-tabs__active-bar.is-left,.el-tabs--right .el-tabs__active-bar.is-right{top:0;bottom:auto;width:2px;height:auto}.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{margin-bottom:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next{height:30px;line-height:30px;width:100%;text-align:center;cursor:pointer}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i{transform:rotate(90deg)}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{left:auto;top:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next{right:auto;bottom:0}.el-tabs--left .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--left .el-tabs__nav-wrap.is-right.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-right.is-scrollable{padding:30px 0}.el-tabs--left .el-tabs__nav-wrap.is-left:after,.el-tabs--left .el-tabs__nav-wrap.is-right:after,.el-tabs--right .el-tabs__nav-wrap.is-left:after,.el-tabs--right .el-tabs__nav-wrap.is-right:after{height:100%;width:2px;bottom:auto;top:0}.el-tabs--left .el-tabs__nav.is-left,.el-tabs--left .el-tabs__nav.is-right,.el-tabs--right .el-tabs__nav.is-left,.el-tabs--right .el-tabs__nav.is-right{flex-direction:column}.el-tabs--left .el-tabs__item.is-left,.el-tabs--right .el-tabs__item.is-left{justify-content:flex-end}.el-tabs--left .el-tabs__item.is-right,.el-tabs--right .el-tabs__item.is-right{justify-content:flex-start}.el-tabs--left{flex-direction:row-reverse}.el-tabs--left .el-tabs__header.is-left{margin-bottom:0;margin-right:10px}.el-tabs--left .el-tabs__nav-wrap.is-left{margin-right:-1px}.el-tabs--left .el-tabs__nav-wrap.is-left:after{left:auto;right:0}.el-tabs--left .el-tabs__active-bar.is-left{right:0;left:auto}.el-tabs--left .el-tabs__item.is-left{text-align:right}.el-tabs--left.el-tabs--card .el-tabs__active-bar.is-left{display:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left{border-left:none;border-right:1px solid var(--el-border-color-light);border-bottom:none;border-top:1px solid var(--el-border-color-light);text-align:left}.el-tabs--left.el-tabs--card .el-tabs__item.is-left:first-child{border-right:1px solid var(--el-border-color-light);border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active{border:1px solid var(--el-border-color-light);border-right-color:#fff;border-left:none;border-bottom:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:first-child{border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:last-child{border-bottom:none}.el-tabs--left.el-tabs--card .el-tabs__nav{border-radius:4px 0 0 4px;border-bottom:1px solid var(--el-border-color-light);border-right:none}.el-tabs--left.el-tabs--card .el-tabs__new-tab{float:none}.el-tabs--left.el-tabs--border-card .el-tabs__header.is-left{border-right:1px solid var(--el-border-color)}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left{border:1px solid transparent;margin:-1px 0 -1px -1px}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left.is-active{border-color:transparent;border-top-color:#d1dbe5;border-bottom-color:#d1dbe5}.el-tabs--right .el-tabs__header.is-right{margin-bottom:0;margin-left:10px}.el-tabs--right .el-tabs__nav-wrap.is-right{margin-left:-1px}.el-tabs--right .el-tabs__nav-wrap.is-right:after{left:0;right:auto}.el-tabs--right .el-tabs__active-bar.is-right{left:0}.el-tabs--right.el-tabs--card .el-tabs__active-bar.is-right{display:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right{border-bottom:none;border-top:1px solid var(--el-border-color-light)}.el-tabs--right.el-tabs--card .el-tabs__item.is-right:first-child{border-left:1px solid var(--el-border-color-light);border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active{border:1px solid var(--el-border-color-light);border-left-color:#fff;border-right:none;border-bottom:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:first-child{border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:last-child{border-bottom:none}.el-tabs--right.el-tabs--card .el-tabs__nav{border-radius:0 4px 4px 0;border-bottom:1px solid var(--el-border-color-light);border-left:none}.el-tabs--right.el-tabs--border-card .el-tabs__header.is-right{border-left:1px solid var(--el-border-color)}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right{border:1px solid transparent;margin:-1px -1px -1px 0}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right.is-active{border-color:transparent;border-top-color:#d1dbe5;border-bottom-color:#d1dbe5}.el-tabs--top{flex-direction:column-reverse}.slideInRight-transition,.slideInLeft-transition{display:inline-block}.slideInRight-enter{animation:slideInRight-enter var(--el-transition-duration)}.slideInRight-leave{position:absolute;left:0;right:0;animation:slideInRight-leave var(--el-transition-duration)}.slideInLeft-enter{animation:slideInLeft-enter var(--el-transition-duration)}.slideInLeft-leave{position:absolute;left:0;right:0;animation:slideInLeft-leave var(--el-transition-duration)}@keyframes slideInRight-enter{0%{opacity:0;transform-origin:0 0;transform:translate(100%)}to{opacity:1;transform-origin:0 0;transform:translate(0)}}@keyframes slideInRight-leave{0%{transform-origin:0 0;transform:translate(0);opacity:1}to{transform-origin:0 0;transform:translate(100%);opacity:0}}@keyframes slideInLeft-enter{0%{opacity:0;transform-origin:0 0;transform:translate(-100%)}to{opacity:1;transform-origin:0 0;transform:translate(0)}}@keyframes slideInLeft-leave{0%{transform-origin:0 0;transform:translate(0);opacity:1}to{transform-origin:0 0;transform:translate(-100%);opacity:0}}.el-button-group{display:inline-block;vertical-align:middle}.el-button-group:before,.el-button-group:after{display:table;content:""}.el-button-group:after{clear:both}.el-button-group>.el-button{float:left;position:relative}.el-button-group>.el-button+.el-button{margin-left:0}.el-button-group>.el-button:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.el-button-group>.el-button:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.el-button-group>.el-button:first-child:last-child{border-top-right-radius:var(--el-border-radius-base);border-bottom-right-radius:var(--el-border-radius-base);border-top-left-radius:var(--el-border-radius-base);border-bottom-left-radius:var(--el-border-radius-base)}.el-button-group>.el-button:first-child:last-child.is-round{border-radius:var(--el-border-radius-round)}.el-button-group>.el-button:first-child:last-child.is-circle{border-radius:50%}.el-button-group>.el-button:not(:first-child):not(:last-child){border-radius:0}.el-button-group>.el-button:not(:last-child){margin-right:-1px}.el-button-group>.el-button:hover,.el-button-group>.el-button:focus,.el-button-group>.el-button:active{z-index:1}.el-button-group>.el-button.is-active{z-index:1}.el-button-group>.el-dropdown>.el-button{border-top-left-radius:0;border-bottom-left-radius:0;border-left-color:var(--el-button-divide-border-color)}.el-button-group .el-button--primary:first-child{border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--primary:last-child{border-left-color:var(--el-button-divide-border-color)}.el-button-group .el-button--primary:not(:first-child):not(:last-child){border-left-color:var(--el-button-divide-border-color);border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--success:first-child{border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--success:last-child{border-left-color:var(--el-button-divide-border-color)}.el-button-group .el-button--success:not(:first-child):not(:last-child){border-left-color:var(--el-button-divide-border-color);border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--warning:first-child{border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--warning:last-child{border-left-color:var(--el-button-divide-border-color)}.el-button-group .el-button--warning:not(:first-child):not(:last-child){border-left-color:var(--el-button-divide-border-color);border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--danger:first-child{border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--danger:last-child{border-left-color:var(--el-button-divide-border-color)}.el-button-group .el-button--danger:not(:first-child):not(:last-child){border-left-color:var(--el-button-divide-border-color);border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--info:first-child{border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--info:last-child{border-left-color:var(--el-button-divide-border-color)}.el-button-group .el-button--info:not(:first-child):not(:last-child){border-left-color:var(--el-button-divide-border-color);border-right-color:var(--el-button-divide-border-color)}.el-button{--el-button-font-weight: var(--el-font-weight-primary);--el-button-border-color: var(--el-border-color);--el-button-bg-color: var(--el-fill-color-blank);--el-button-text-color: var(--el-text-color-regular);--el-button-disabled-text-color: var(--el-disabled-text-color);--el-button-disabled-bg-color: var(--el-fill-color-blank);--el-button-disabled-border-color: var(--el-border-color-light);--el-button-divide-border-color: rgba(255, 255, 255, .5);--el-button-hover-text-color: var(--el-color-primary);--el-button-hover-bg-color: var(--el-color-primary-light-9);--el-button-hover-border-color: var(--el-color-primary-light-7);--el-button-active-text-color: var(--el-button-hover-text-color);--el-button-active-border-color: var(--el-color-primary);--el-button-active-bg-color: var(--el-button-hover-bg-color);--el-button-outline-color: var(--el-color-primary-light-5);--el-button-hover-link-text-color: var(--el-text-color-secondary);--el-button-active-color: var(--el-text-color-primary)}.el-button{display:inline-flex;justify-content:center;align-items:center;line-height:1;height:32px;white-space:nowrap;cursor:pointer;color:var(--el-button-text-color);text-align:center;box-sizing:border-box;outline:none;transition:.1s;font-weight:var(--el-button-font-weight);-webkit-user-select:none;user-select:none;vertical-align:middle;-webkit-appearance:none;background-color:var(--el-button-bg-color);border:var(--el-border);border-color:var(--el-button-border-color)}.el-button:hover{color:var(--el-button-hover-text-color);border-color:var(--el-button-hover-border-color);background-color:var(--el-button-hover-bg-color);outline:none}.el-button:active{color:var(--el-button-active-text-color);border-color:var(--el-button-active-border-color);background-color:var(--el-button-active-bg-color);outline:none}.el-button:focus-visible{outline:2px solid var(--el-button-outline-color);outline-offset:1px;transition:outline-offset 0s,outline 0s}.el-button>span{display:inline-flex;align-items:center}.el-button+.el-button{margin-left:12px}.el-button{padding:8px 15px;font-size:var(--el-font-size-base);border-radius:var(--el-border-radius-base)}.el-button.is-round{padding:8px 15px}.el-button::-moz-focus-inner{border:0}.el-button [class*=el-icon]+span{margin-left:6px}.el-button [class*=el-icon] svg{vertical-align:bottom}.el-button.is-plain{--el-button-hover-text-color: var(--el-color-primary);--el-button-hover-bg-color: var(--el-fill-color-blank);--el-button-hover-border-color: var(--el-color-primary)}.el-button.is-active{color:var(--el-button-active-text-color);border-color:var(--el-button-active-border-color);background-color:var(--el-button-active-bg-color);outline:none}.el-button.is-disabled,.el-button.is-disabled:hover{color:var(--el-button-disabled-text-color);cursor:not-allowed;background-image:none;background-color:var(--el-button-disabled-bg-color);border-color:var(--el-button-disabled-border-color)}.el-button.is-loading{position:relative;pointer-events:none}.el-button.is-loading:before{z-index:1;pointer-events:none;content:"";position:absolute;left:-1px;top:-1px;right:-1px;bottom:-1px;border-radius:inherit;background-color:var(--el-mask-color-extra-light)}.el-button.is-round{border-radius:var(--el-border-radius-round)}.el-button.is-circle{width:32px;border-radius:50%;padding:8px}.el-button.is-text{color:var(--el-button-text-color);border:0 solid transparent;background-color:transparent}.el-button.is-text.is-disabled{color:var(--el-button-disabled-text-color);background-color:transparent!important}.el-button.is-text:not(.is-disabled):hover{background-color:var(--el-fill-color-light)}.el-button.is-text:not(.is-disabled):focus-visible{outline:2px solid var(--el-button-outline-color);outline-offset:1px;transition:outline-offset 0s,outline 0s}.el-button.is-text:not(.is-disabled):active{background-color:var(--el-fill-color)}.el-button.is-text:not(.is-disabled).is-has-bg{background-color:var(--el-fill-color-light)}.el-button.is-text:not(.is-disabled).is-has-bg:hover{background-color:var(--el-fill-color)}.el-button.is-text:not(.is-disabled).is-has-bg:active{background-color:var(--el-fill-color-dark)}.el-button__text--expand{letter-spacing:.3em;margin-right:-.3em}.el-button.is-link{border-color:transparent;color:var(--el-button-text-color);background:transparent;padding:2px;height:auto}.el-button.is-link:hover{color:var(--el-button-hover-link-text-color)}.el-button.is-link.is-disabled{color:var(--el-button-disabled-text-color);background-color:transparent!important;border-color:transparent!important}.el-button.is-link:not(.is-disabled):hover{border-color:transparent;background-color:transparent}.el-button.is-link:not(.is-disabled):active{color:var(--el-button-active-color);border-color:transparent;background-color:transparent}.el-button--text{border-color:transparent;background:transparent;color:var(--el-color-primary);padding-left:0;padding-right:0}.el-button--text.is-disabled{color:var(--el-button-disabled-text-color);background-color:transparent!important;border-color:transparent!important}.el-button--text:not(.is-disabled):hover{color:var(--el-color-primary-light-3);border-color:transparent;background-color:transparent}.el-button--text:not(.is-disabled):active{color:var(--el-color-primary-dark-2);border-color:transparent;background-color:transparent}.el-button__link--expand{letter-spacing:.3em;margin-right:-.3em}.el-button--primary{--el-button-text-color: var(--el-color-white);--el-button-bg-color: var(--el-color-primary);--el-button-border-color: var(--el-color-primary);--el-button-outline-color: var(--el-color-primary-light-5);--el-button-active-color: var(--el-color-primary-dark-2);--el-button-hover-text-color: var(--el-color-white);--el-button-hover-link-text-color: var(--el-color-primary-light-5);--el-button-hover-bg-color: var(--el-color-primary-light-3);--el-button-hover-border-color: var(--el-color-primary-light-3);--el-button-active-bg-color: var(--el-color-primary-dark-2);--el-button-active-border-color: var(--el-color-primary-dark-2);--el-button-disabled-text-color: var(--el-color-white);--el-button-disabled-bg-color: var(--el-color-primary-light-5);--el-button-disabled-border-color: var(--el-color-primary-light-5)}.el-button--primary.is-plain,.el-button--primary.is-text,.el-button--primary.is-link{--el-button-text-color: var(--el-color-primary);--el-button-bg-color: var(--el-color-primary-light-9);--el-button-border-color: var(--el-color-primary-light-5);--el-button-hover-text-color: var(--el-color-white);--el-button-hover-bg-color: var(--el-color-primary);--el-button-hover-border-color: var(--el-color-primary);--el-button-active-text-color: var(--el-color-white)}.el-button--primary.is-plain.is-disabled,.el-button--primary.is-plain.is-disabled:hover,.el-button--primary.is-plain.is-disabled:focus,.el-button--primary.is-plain.is-disabled:active,.el-button--primary.is-text.is-disabled,.el-button--primary.is-text.is-disabled:hover,.el-button--primary.is-text.is-disabled:focus,.el-button--primary.is-text.is-disabled:active,.el-button--primary.is-link.is-disabled,.el-button--primary.is-link.is-disabled:hover,.el-button--primary.is-link.is-disabled:focus,.el-button--primary.is-link.is-disabled:active{color:var(--el-color-primary-light-5);background-color:var(--el-color-primary-light-9);border-color:var(--el-color-primary-light-8)}.el-button--success{--el-button-text-color: var(--el-color-white);--el-button-bg-color: var(--el-color-success);--el-button-border-color: var(--el-color-success);--el-button-outline-color: var(--el-color-success-light-5);--el-button-active-color: var(--el-color-success-dark-2);--el-button-hover-text-color: var(--el-color-white);--el-button-hover-link-text-color: var(--el-color-success-light-5);--el-button-hover-bg-color: var(--el-color-success-light-3);--el-button-hover-border-color: var(--el-color-success-light-3);--el-button-active-bg-color: var(--el-color-success-dark-2);--el-button-active-border-color: var(--el-color-success-dark-2);--el-button-disabled-text-color: var(--el-color-white);--el-button-disabled-bg-color: var(--el-color-success-light-5);--el-button-disabled-border-color: var(--el-color-success-light-5)}.el-button--success.is-plain,.el-button--success.is-text,.el-button--success.is-link{--el-button-text-color: var(--el-color-success);--el-button-bg-color: var(--el-color-success-light-9);--el-button-border-color: var(--el-color-success-light-5);--el-button-hover-text-color: var(--el-color-white);--el-button-hover-bg-color: var(--el-color-success);--el-button-hover-border-color: var(--el-color-success);--el-button-active-text-color: var(--el-color-white)}.el-button--success.is-plain.is-disabled,.el-button--success.is-plain.is-disabled:hover,.el-button--success.is-plain.is-disabled:focus,.el-button--success.is-plain.is-disabled:active,.el-button--success.is-text.is-disabled,.el-button--success.is-text.is-disabled:hover,.el-button--success.is-text.is-disabled:focus,.el-button--success.is-text.is-disabled:active,.el-button--success.is-link.is-disabled,.el-button--success.is-link.is-disabled:hover,.el-button--success.is-link.is-disabled:focus,.el-button--success.is-link.is-disabled:active{color:var(--el-color-success-light-5);background-color:var(--el-color-success-light-9);border-color:var(--el-color-success-light-8)}.el-button--warning{--el-button-text-color: var(--el-color-white);--el-button-bg-color: var(--el-color-warning);--el-button-border-color: var(--el-color-warning);--el-button-outline-color: var(--el-color-warning-light-5);--el-button-active-color: var(--el-color-warning-dark-2);--el-button-hover-text-color: var(--el-color-white);--el-button-hover-link-text-color: var(--el-color-warning-light-5);--el-button-hover-bg-color: var(--el-color-warning-light-3);--el-button-hover-border-color: var(--el-color-warning-light-3);--el-button-active-bg-color: var(--el-color-warning-dark-2);--el-button-active-border-color: var(--el-color-warning-dark-2);--el-button-disabled-text-color: var(--el-color-white);--el-button-disabled-bg-color: var(--el-color-warning-light-5);--el-button-disabled-border-color: var(--el-color-warning-light-5)}.el-button--warning.is-plain,.el-button--warning.is-text,.el-button--warning.is-link{--el-button-text-color: var(--el-color-warning);--el-button-bg-color: var(--el-color-warning-light-9);--el-button-border-color: var(--el-color-warning-light-5);--el-button-hover-text-color: var(--el-color-white);--el-button-hover-bg-color: var(--el-color-warning);--el-button-hover-border-color: var(--el-color-warning);--el-button-active-text-color: var(--el-color-white)}.el-button--warning.is-plain.is-disabled,.el-button--warning.is-plain.is-disabled:hover,.el-button--warning.is-plain.is-disabled:focus,.el-button--warning.is-plain.is-disabled:active,.el-button--warning.is-text.is-disabled,.el-button--warning.is-text.is-disabled:hover,.el-button--warning.is-text.is-disabled:focus,.el-button--warning.is-text.is-disabled:active,.el-button--warning.is-link.is-disabled,.el-button--warning.is-link.is-disabled:hover,.el-button--warning.is-link.is-disabled:focus,.el-button--warning.is-link.is-disabled:active{color:var(--el-color-warning-light-5);background-color:var(--el-color-warning-light-9);border-color:var(--el-color-warning-light-8)}.el-button--danger{--el-button-text-color: var(--el-color-white);--el-button-bg-color: var(--el-color-danger);--el-button-border-color: var(--el-color-danger);--el-button-outline-color: var(--el-color-danger-light-5);--el-button-active-color: var(--el-color-danger-dark-2);--el-button-hover-text-color: var(--el-color-white);--el-button-hover-link-text-color: var(--el-color-danger-light-5);--el-button-hover-bg-color: var(--el-color-danger-light-3);--el-button-hover-border-color: var(--el-color-danger-light-3);--el-button-active-bg-color: var(--el-color-danger-dark-2);--el-button-active-border-color: var(--el-color-danger-dark-2);--el-button-disabled-text-color: var(--el-color-white);--el-button-disabled-bg-color: var(--el-color-danger-light-5);--el-button-disabled-border-color: var(--el-color-danger-light-5)}.el-button--danger.is-plain,.el-button--danger.is-text,.el-button--danger.is-link{--el-button-text-color: var(--el-color-danger);--el-button-bg-color: var(--el-color-danger-light-9);--el-button-border-color: var(--el-color-danger-light-5);--el-button-hover-text-color: var(--el-color-white);--el-button-hover-bg-color: var(--el-color-danger);--el-button-hover-border-color: var(--el-color-danger);--el-button-active-text-color: var(--el-color-white)}.el-button--danger.is-plain.is-disabled,.el-button--danger.is-plain.is-disabled:hover,.el-button--danger.is-plain.is-disabled:focus,.el-button--danger.is-plain.is-disabled:active,.el-button--danger.is-text.is-disabled,.el-button--danger.is-text.is-disabled:hover,.el-button--danger.is-text.is-disabled:focus,.el-button--danger.is-text.is-disabled:active,.el-button--danger.is-link.is-disabled,.el-button--danger.is-link.is-disabled:hover,.el-button--danger.is-link.is-disabled:focus,.el-button--danger.is-link.is-disabled:active{color:var(--el-color-danger-light-5);background-color:var(--el-color-danger-light-9);border-color:var(--el-color-danger-light-8)}.el-button--info{--el-button-text-color: var(--el-color-white);--el-button-bg-color: var(--el-color-info);--el-button-border-color: var(--el-color-info);--el-button-outline-color: var(--el-color-info-light-5);--el-button-active-color: var(--el-color-info-dark-2);--el-button-hover-text-color: var(--el-color-white);--el-button-hover-link-text-color: var(--el-color-info-light-5);--el-button-hover-bg-color: var(--el-color-info-light-3);--el-button-hover-border-color: var(--el-color-info-light-3);--el-button-active-bg-color: var(--el-color-info-dark-2);--el-button-active-border-color: var(--el-color-info-dark-2);--el-button-disabled-text-color: var(--el-color-white);--el-button-disabled-bg-color: var(--el-color-info-light-5);--el-button-disabled-border-color: var(--el-color-info-light-5)}.el-button--info.is-plain,.el-button--info.is-text,.el-button--info.is-link{--el-button-text-color: var(--el-color-info);--el-button-bg-color: var(--el-color-info-light-9);--el-button-border-color: var(--el-color-info-light-5);--el-button-hover-text-color: var(--el-color-white);--el-button-hover-bg-color: var(--el-color-info);--el-button-hover-border-color: var(--el-color-info);--el-button-active-text-color: var(--el-color-white)}.el-button--info.is-plain.is-disabled,.el-button--info.is-plain.is-disabled:hover,.el-button--info.is-plain.is-disabled:focus,.el-button--info.is-plain.is-disabled:active,.el-button--info.is-text.is-disabled,.el-button--info.is-text.is-disabled:hover,.el-button--info.is-text.is-disabled:focus,.el-button--info.is-text.is-disabled:active,.el-button--info.is-link.is-disabled,.el-button--info.is-link.is-disabled:hover,.el-button--info.is-link.is-disabled:focus,.el-button--info.is-link.is-disabled:active{color:var(--el-color-info-light-5);background-color:var(--el-color-info-light-9);border-color:var(--el-color-info-light-8)}.el-button--large{--el-button-size: 40px;height:var(--el-button-size)}.el-button--large [class*=el-icon]+span{margin-left:8px}.el-button--large{padding:12px 19px;font-size:var(--el-font-size-base);border-radius:var(--el-border-radius-base)}.el-button--large.is-round{padding:12px 19px}.el-button--large.is-circle{width:var(--el-button-size);padding:12px}.el-button--small{--el-button-size: 24px;height:var(--el-button-size)}.el-button--small [class*=el-icon]+span{margin-left:4px}.el-button--small{padding:5px 11px;font-size:12px;border-radius:calc(var(--el-border-radius-base) - 1px)}.el-button--small.is-round{padding:5px 11px}.el-button--small.is-circle{width:var(--el-button-size);padding:5px}.el-empty{--el-empty-padding: 40px 0;--el-empty-image-width: 160px;--el-empty-description-margin-top: 20px;--el-empty-bottom-margin-top: 20px;--el-empty-fill-color-0: var(--el-color-white);--el-empty-fill-color-1: #fcfcfd;--el-empty-fill-color-2: #f8f9fb;--el-empty-fill-color-3: #f7f8fc;--el-empty-fill-color-4: #eeeff3;--el-empty-fill-color-5: #edeef2;--el-empty-fill-color-6: #e9ebef;--el-empty-fill-color-7: #e5e7e9;--el-empty-fill-color-8: #e0e3e9;--el-empty-fill-color-9: #d5d7de;display:flex;justify-content:center;align-items:center;flex-direction:column;text-align:center;box-sizing:border-box;padding:var(--el-empty-padding)}.el-empty__image{width:var(--el-empty-image-width)}.el-empty__image img{-webkit-user-select:none;user-select:none;width:100%;height:100%;vertical-align:top;object-fit:contain}.el-empty__image svg{color:var(--el-svg-monochrome-grey);fill:currentColor;width:100%;height:100%;vertical-align:top}.el-empty__description{margin-top:var(--el-empty-description-margin-top)}.el-empty__description p{margin:0;font-size:var(--el-font-size-base);color:var(--el-text-color-secondary)}.el-empty__bottom{margin-top:var(--el-empty-bottom-margin-top)}.el-table{--el-table-border-color: var(--el-border-color-lighter);--el-table-border: 1px solid var(--el-table-border-color);--el-table-text-color: var(--el-text-color-regular);--el-table-header-text-color: var(--el-text-color-secondary);--el-table-row-hover-bg-color: var(--el-fill-color-light);--el-table-current-row-bg-color: var(--el-color-primary-light-9);--el-table-header-bg-color: var(--el-bg-color);--el-table-fixed-box-shadow: var(--el-box-shadow-light);--el-table-bg-color: var(--el-fill-color-blank);--el-table-tr-bg-color: var(--el-bg-color);--el-table-expanded-cell-bg-color: var(--el-fill-color-blank);--el-table-fixed-left-column: inset 10px 0 10px -10px rgba(0, 0, 0, .15);--el-table-fixed-right-column: inset -10px 0 10px -10px rgba(0, 0, 0, .15);--el-table-index: var(--el-index-normal)}.el-table{position:relative;overflow:hidden;box-sizing:border-box;height:fit-content;width:100%;max-width:100%;background-color:var(--el-table-bg-color);font-size:var(--el-font-size-base);color:var(--el-table-text-color)}.el-table__inner-wrapper{position:relative;display:flex;flex-direction:column;height:100%}.el-table__inner-wrapper:before{left:0;bottom:0;height:1px}.el-table tbody:focus-visible{outline:none}.el-table.has-footer.el-table--scrollable-y tr:last-child td.el-table__cell,.el-table.has-footer.el-table--fluid-height tr:last-child td.el-table__cell{border-bottom-color:transparent}.el-table__empty-block{position:sticky;left:0;min-height:60px;text-align:center;width:100%;display:flex;justify-content:center;align-items:center}.el-table__empty-text{line-height:60px;width:50%;color:var(--el-text-color-secondary)}.el-table__expand-column .cell{padding:0;text-align:center;-webkit-user-select:none;user-select:none}.el-table__expand-icon{position:relative;cursor:pointer;color:var(--el-text-color-regular);font-size:12px;transition:transform var(--el-transition-duration-fast) ease-in-out;height:20px}.el-table__expand-icon--expanded{transform:rotate(90deg)}.el-table__expand-icon>.el-icon{font-size:12px}.el-table__expanded-cell{background-color:var(--el-table-expanded-cell-bg-color)}.el-table__expanded-cell[class*=cell]{padding:20px 50px}.el-table__expanded-cell:hover{background-color:transparent!important}.el-table__placeholder{display:inline-block;width:20px}.el-table__append-wrapper{overflow:hidden}.el-table--fit{border-right:0;border-bottom:0}.el-table--fit .el-table__cell.gutter{border-right-width:1px}.el-table--fit .el-table__inner-wrapper:before{width:100%}.el-table thead{color:var(--el-table-header-text-color)}.el-table thead th{font-weight:600}.el-table thead.is-group th.el-table__cell{background:var(--el-fill-color-light)}.el-table .el-table__cell{padding:8px 0;min-width:0;box-sizing:border-box;text-overflow:ellipsis;vertical-align:middle;position:relative;text-align:left;z-index:var(--el-table-index)}.el-table .el-table__cell.is-center{text-align:center}.el-table .el-table__cell.is-right{text-align:right}.el-table .el-table__cell.gutter{width:15px;border-right-width:0;border-bottom-width:0;padding:0}.el-table .el-table__cell.is-hidden>*{visibility:hidden}.el-table .cell{box-sizing:border-box;overflow:hidden;text-overflow:ellipsis;white-space:normal;overflow-wrap:break-word;line-height:23px;padding:0 12px}.el-table .cell.el-tooltip{white-space:nowrap;min-width:50px}.el-table--large{font-size:var(--el-font-size-base)}.el-table--large .el-table__cell{padding:12px 0}.el-table--large .cell{padding:0 16px}.el-table--default{font-size:var(--el-font-size-base)}.el-table--default .el-table__cell{padding:8px 0}.el-table--default .cell{padding:0 12px}.el-table--small{font-size:var(--el-font-size-extra-small)}.el-table--small .el-table__cell{padding:4px 0}.el-table--small .cell{padding:0 8px}.el-table tr{background-color:var(--el-table-tr-bg-color)}.el-table tr input[type=checkbox]{margin:0}.el-table th.el-table__cell.is-leaf,.el-table td.el-table__cell{border-bottom:var(--el-table-border)}.el-table th.el-table__cell.is-sortable{cursor:pointer}.el-table th.el-table__cell{background-color:var(--el-table-header-bg-color)}.el-table th.el-table__cell>.cell.highlight{color:var(--el-color-primary)}.el-table th.el-table__cell.required>div:before{display:inline-block;content:"";width:8px;height:8px;border-radius:50%;background:#ff4d51;margin-right:5px;vertical-align:middle}.el-table td.el-table__cell div{box-sizing:border-box}.el-table td.el-table__cell.gutter{width:0}.el-table--border:after,.el-table--border:before,.el-table--border .el-table__inner-wrapper:after,.el-table__inner-wrapper:before{content:"";position:absolute;background-color:var(--el-table-border-color);z-index:calc(var(--el-table-index) + 2)}.el-table--border .el-table__inner-wrapper:after{left:0;top:0;width:100%;height:1px;z-index:calc(var(--el-table-index) + 2)}.el-table--border:before{top:-1px;left:0;width:1px;height:100%}.el-table--border:after{top:-1px;right:0;width:1px;height:100%}.el-table--border .el-table__inner-wrapper{border-right:none;border-bottom:none}.el-table--border .el-table__footer-wrapper{position:relative;flex-shrink:0}.el-table--border .el-table__cell{border-right:var(--el-table-border)}.el-table--border th.el-table__cell.gutter:last-of-type{border-bottom:var(--el-table-border);border-bottom-width:1px}.el-table--border th.el-table__cell{border-bottom:var(--el-table-border)}.el-table--hidden{visibility:hidden}.el-table__header-wrapper,.el-table__body-wrapper,.el-table__footer-wrapper{width:100%}.el-table__header-wrapper tr td.el-table-fixed-column--left,.el-table__header-wrapper tr td.el-table-fixed-column--right,.el-table__header-wrapper tr th.el-table-fixed-column--left,.el-table__header-wrapper tr th.el-table-fixed-column--right,.el-table__body-wrapper tr td.el-table-fixed-column--left,.el-table__body-wrapper tr td.el-table-fixed-column--right,.el-table__body-wrapper tr th.el-table-fixed-column--left,.el-table__body-wrapper tr th.el-table-fixed-column--right,.el-table__footer-wrapper tr td.el-table-fixed-column--left,.el-table__footer-wrapper tr td.el-table-fixed-column--right,.el-table__footer-wrapper tr th.el-table-fixed-column--left,.el-table__footer-wrapper tr th.el-table-fixed-column--right{position:sticky!important;background:inherit;z-index:calc(var(--el-table-index) + 1)}.el-table__header-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--right.is-last-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--right.is-first-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--right.is-last-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--right.is-first-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--right.is-last-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--right.is-first-column:before{content:"";position:absolute;top:0;width:10px;bottom:-1px;overflow-x:hidden;overflow-y:hidden;box-shadow:none;touch-action:none;pointer-events:none}.el-table__header-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--right.is-first-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--right.is-first-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--right.is-first-column:before{left:-10px}.el-table__header-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--right.is-last-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--right.is-last-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--right.is-last-column:before{right:-10px;box-shadow:none}.el-table__header-wrapper tr td.el-table__fixed-right-patch,.el-table__header-wrapper tr th.el-table__fixed-right-patch,.el-table__body-wrapper tr td.el-table__fixed-right-patch,.el-table__body-wrapper tr th.el-table__fixed-right-patch,.el-table__footer-wrapper tr td.el-table__fixed-right-patch,.el-table__footer-wrapper tr th.el-table__fixed-right-patch{position:sticky!important;z-index:calc(var(--el-table-index) + 1);background:#fff;right:0}.el-table__header-wrapper{flex-shrink:0}.el-table__header-wrapper tr th.el-table-fixed-column--left,.el-table__header-wrapper tr th.el-table-fixed-column--right{background-color:var(--el-table-header-bg-color)}.el-table__header,.el-table__body,.el-table__footer{table-layout:fixed;border-collapse:separate}.el-table__header-wrapper{overflow:hidden}.el-table__header-wrapper tbody td.el-table__cell{background-color:var(--el-table-row-hover-bg-color);color:var(--el-table-text-color)}.el-table__footer-wrapper{overflow:hidden;flex-shrink:0}.el-table__footer-wrapper tfoot td.el-table__cell{background-color:var(--el-table-row-hover-bg-color);color:var(--el-table-text-color)}.el-table__header-wrapper .el-table-column--selection>.cell,.el-table__body-wrapper .el-table-column--selection>.cell{display:inline-flex;align-items:center;height:23px}.el-table__header-wrapper .el-table-column--selection .el-checkbox,.el-table__body-wrapper .el-table-column--selection .el-checkbox{height:unset}.el-table.is-scrolling-left .el-table-fixed-column--right.is-first-column:before{box-shadow:var(--el-table-fixed-right-column)}.el-table.is-scrolling-left.el-table--border .el-table-fixed-column--left.is-last-column.el-table__cell{border-right:var(--el-table-border)}.el-table.is-scrolling-left th.el-table-fixed-column--left{background-color:var(--el-table-header-bg-color)}.el-table.is-scrolling-right .el-table-fixed-column--left.is-last-column:before{box-shadow:var(--el-table-fixed-left-column)}.el-table.is-scrolling-right .el-table-fixed-column--left.is-last-column.el-table__cell{border-right:none}.el-table.is-scrolling-right th.el-table-fixed-column--right{background-color:var(--el-table-header-bg-color)}.el-table.is-scrolling-middle .el-table-fixed-column--left.is-last-column.el-table__cell{border-right:none}.el-table.is-scrolling-middle .el-table-fixed-column--right.is-first-column:before{box-shadow:var(--el-table-fixed-right-column)}.el-table.is-scrolling-middle .el-table-fixed-column--left.is-last-column:before{box-shadow:var(--el-table-fixed-left-column)}.el-table.is-scrolling-none .el-table-fixed-column--left.is-first-column:before,.el-table.is-scrolling-none .el-table-fixed-column--left.is-last-column:before,.el-table.is-scrolling-none .el-table-fixed-column--right.is-first-column:before,.el-table.is-scrolling-none .el-table-fixed-column--right.is-last-column:before{box-shadow:none}.el-table.is-scrolling-none th.el-table-fixed-column--left,.el-table.is-scrolling-none th.el-table-fixed-column--right{background-color:var(--el-table-header-bg-color)}.el-table__body-wrapper{overflow:hidden;position:relative;flex:1}.el-table__body-wrapper .el-scrollbar__bar{z-index:calc(var(--el-table-index) + 2)}.el-table .caret-wrapper{display:inline-flex;flex-direction:column;align-items:center;height:14px;width:24px;vertical-align:middle;cursor:pointer;overflow:initial;position:relative}.el-table .sort-caret{width:0;height:0;border:solid 5px transparent;position:absolute;left:7px}.el-table .sort-caret.ascending{border-bottom-color:var(--el-text-color-placeholder);top:-5px}.el-table .sort-caret.descending{border-top-color:var(--el-text-color-placeholder);bottom:-3px}.el-table .ascending .sort-caret.ascending{border-bottom-color:var(--el-color-primary)}.el-table .descending .sort-caret.descending{border-top-color:var(--el-color-primary)}.el-table .hidden-columns{visibility:hidden;position:absolute;z-index:-1}.el-table--striped .el-table__body tr.el-table__row--striped td.el-table__cell{background:var(--el-fill-color-lighter)}.el-table--striped .el-table__body tr.el-table__row--striped.current-row td.el-table__cell{background-color:var(--el-table-current-row-bg-color)}.el-table__body tr.hover-row>td.el-table__cell,.el-table__body tr.hover-row.current-row>td.el-table__cell,.el-table__body tr.hover-row.el-table__row--striped>td.el-table__cell,.el-table__body tr.hover-row.el-table__row--striped.current-row>td.el-table__cell{background-color:var(--el-table-row-hover-bg-color)}.el-table__body tr>td.hover-cell{background-color:var(--el-table-row-hover-bg-color)}.el-table__body tr.current-row>td.el-table__cell{background-color:var(--el-table-current-row-bg-color)}.el-table.el-table--scrollable-y .el-table__body-header{position:sticky;top:0;z-index:calc(var(--el-table-index) + 2)}.el-table.el-table--scrollable-y .el-table__body-footer{position:sticky;bottom:0;z-index:calc(var(--el-table-index) + 2)}.el-table__column-resize-proxy{position:absolute;left:200px;top:0;bottom:0;width:0;border-left:var(--el-table-border);z-index:calc(var(--el-table-index) + 9)}.el-table__column-filter-trigger{display:inline-block;cursor:pointer}.el-table__column-filter-trigger i{color:var(--el-color-info);font-size:14px;vertical-align:middle}.el-table__border-left-patch{top:0;left:0;width:1px;height:100%;z-index:calc(var(--el-table-index) + 2);position:absolute;background-color:var(--el-table-border-color)}.el-table__border-bottom-patch{left:0;height:1px;z-index:calc(var(--el-table-index) + 2);position:absolute;background-color:var(--el-table-border-color)}.el-table__border-right-patch{top:0;height:100%;width:1px;z-index:calc(var(--el-table-index) + 2);position:absolute;background-color:var(--el-table-border-color)}.el-table--enable-row-transition .el-table__body td.el-table__cell{transition:background-color .25s ease}.el-table--enable-row-hover .el-table__body tr:hover>td.el-table__cell{background-color:var(--el-table-row-hover-bg-color)}.el-table [class*=el-table__row--level] .el-table__expand-icon{display:inline-block;width:12px;line-height:12px;height:12px;text-align:center;margin-right:8px}.el-table .el-table.el-table--border .el-table__cell{border-right:var(--el-table-border)}.el-table:not(.el-table--border) .el-table__cell{border-right:none}.el-table:not(.el-table--border)>.el-table__inner-wrapper:after{content:none}.el-checkbox{--el-checkbox-font-size: 14px;--el-checkbox-font-weight: var(--el-font-weight-primary);--el-checkbox-text-color: var(--el-text-color-regular);--el-checkbox-input-height: 14px;--el-checkbox-input-width: 14px;--el-checkbox-border-radius: var(--el-border-radius-small);--el-checkbox-bg-color: var(--el-fill-color-blank);--el-checkbox-input-border: var(--el-border);--el-checkbox-disabled-border-color: var(--el-border-color);--el-checkbox-disabled-input-fill: var(--el-fill-color-light);--el-checkbox-disabled-icon-color: var(--el-text-color-placeholder);--el-checkbox-disabled-checked-input-fill: var(--el-border-color-extra-light);--el-checkbox-disabled-checked-input-border-color: var(--el-border-color);--el-checkbox-disabled-checked-icon-color: var(--el-text-color-placeholder);--el-checkbox-checked-text-color: var(--el-color-primary);--el-checkbox-checked-input-border-color: var(--el-color-primary);--el-checkbox-checked-bg-color: var(--el-color-primary);--el-checkbox-checked-icon-color: var(--el-color-white);--el-checkbox-input-border-color-hover: var(--el-color-primary)}.el-checkbox{color:var(--el-checkbox-text-color);font-weight:var(--el-checkbox-font-weight);font-size:var(--el-font-size-base);position:relative;cursor:pointer;display:inline-flex;align-items:center;white-space:nowrap;-webkit-user-select:none;user-select:none;margin-right:30px;height:var(--el-checkbox-height, 32px)}.el-checkbox.is-disabled{cursor:not-allowed}.el-checkbox.is-bordered{padding:0 15px 0 9px;border-radius:var(--el-border-radius-base);border:var(--el-border);box-sizing:border-box}.el-checkbox.is-bordered.is-checked{border-color:var(--el-color-primary)}.el-checkbox.is-bordered.is-disabled{border-color:var(--el-border-color-lighter)}.el-checkbox.is-bordered.el-checkbox--large{padding:0 19px 0 11px;border-radius:var(--el-border-radius-base)}.el-checkbox.is-bordered.el-checkbox--large .el-checkbox__label{font-size:var(--el-font-size-base)}.el-checkbox.is-bordered.el-checkbox--large .el-checkbox__inner{height:14px;width:14px}.el-checkbox.is-bordered.el-checkbox--small{padding:0 11px 0 7px;border-radius:calc(var(--el-border-radius-base) - 1px)}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label{font-size:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner:after{height:6px;width:2px}.el-checkbox input:focus-visible+.el-checkbox__inner{outline:2px solid var(--el-checkbox-input-border-color-hover);outline-offset:1px;border-radius:var(--el-checkbox-border-radius)}.el-checkbox__input{white-space:nowrap;cursor:pointer;outline:none;display:inline-flex;position:relative}.el-checkbox__input.is-disabled .el-checkbox__inner{background-color:var(--el-checkbox-disabled-input-fill);border-color:var(--el-checkbox-disabled-border-color);cursor:not-allowed}.el-checkbox__input.is-disabled .el-checkbox__inner:after{cursor:not-allowed;border-color:var(--el-checkbox-disabled-icon-color)}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner{background-color:var(--el-checkbox-disabled-checked-input-fill);border-color:var(--el-checkbox-disabled-checked-input-border-color)}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner:after{border-color:var(--el-checkbox-disabled-checked-icon-color)}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner{background-color:var(--el-checkbox-disabled-checked-input-fill);border-color:var(--el-checkbox-disabled-checked-input-border-color)}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner:before{background-color:var(--el-checkbox-disabled-checked-icon-color);border-color:var(--el-checkbox-disabled-checked-icon-color)}.el-checkbox__input.is-disabled+span.el-checkbox__label{color:var(--el-disabled-text-color);cursor:not-allowed}.el-checkbox__input.is-checked .el-checkbox__inner{background-color:var(--el-checkbox-checked-bg-color);border-color:var(--el-checkbox-checked-input-border-color)}.el-checkbox__input.is-checked .el-checkbox__inner:after{transform:rotate(45deg) scaleY(1);border-color:var(--el-checkbox-checked-icon-color)}.el-checkbox__input.is-checked+.el-checkbox__label{color:var(--el-checkbox-checked-text-color)}.el-checkbox__input.is-focus:not(.is-checked) .el-checkbox__original:not(:focus-visible){border-color:var(--el-checkbox-input-border-color-hover)}.el-checkbox__input.is-indeterminate .el-checkbox__inner{background-color:var(--el-checkbox-checked-bg-color);border-color:var(--el-checkbox-checked-input-border-color)}.el-checkbox__input.is-indeterminate .el-checkbox__inner:before{content:"";position:absolute;display:block;background-color:var(--el-checkbox-checked-icon-color);height:2px;transform:scale(.5);left:0;right:0;top:5px}.el-checkbox__input.is-indeterminate .el-checkbox__inner:after{display:none}.el-checkbox__inner{display:inline-block;position:relative;border:var(--el-checkbox-input-border);border-radius:var(--el-checkbox-border-radius);box-sizing:border-box;width:var(--el-checkbox-input-width);height:var(--el-checkbox-input-height);background-color:var(--el-checkbox-bg-color);z-index:var(--el-index-normal);transition:border-color .25s cubic-bezier(.71,-.46,.29,1.46),background-color .25s cubic-bezier(.71,-.46,.29,1.46),outline .25s cubic-bezier(.71,-.46,.29,1.46)}.el-checkbox__inner:hover{border-color:var(--el-checkbox-input-border-color-hover)}.el-checkbox__inner:after{box-sizing:content-box;content:"";border:1px solid transparent;border-left:0;border-top:0;height:7px;left:4px;position:absolute;top:1px;transform:rotate(45deg) scaleY(0);width:3px;transition:transform .15s ease-in .05s;transform-origin:center}.el-checkbox__original{opacity:0;outline:none;position:absolute;margin:0;width:0;height:0;z-index:-1}.el-checkbox__label{display:inline-block;padding-left:8px;line-height:1;font-size:var(--el-checkbox-font-size)}.el-checkbox.el-checkbox--large{height:40px}.el-checkbox.el-checkbox--large .el-checkbox__label{font-size:14px}.el-checkbox.el-checkbox--large .el-checkbox__inner{width:14px;height:14px}.el-checkbox.el-checkbox--small{height:24px}.el-checkbox.el-checkbox--small .el-checkbox__label{font-size:12px}.el-checkbox.el-checkbox--small .el-checkbox__inner{width:12px;height:12px}.el-checkbox.el-checkbox--small .el-checkbox__input.is-indeterminate .el-checkbox__inner:before{top:4px}.el-checkbox.el-checkbox--small .el-checkbox__inner:after{width:2px;height:6px}.el-checkbox:last-of-type{margin-right:0}.el-popper{--el-popper-border-radius: var(--el-popover-border-radius, 4px)}.el-popper{position:absolute;border-radius:var(--el-popper-border-radius);padding:5px 11px;z-index:2000;font-size:12px;line-height:20px;min-width:10px;overflow-wrap:break-word;visibility:visible}.el-popper.is-dark{color:var(--el-bg-color);background:var(--el-text-color-primary);border:1px solid var(--el-text-color-primary)}.el-popper.is-dark>.el-popper__arrow:before{border:1px solid var(--el-text-color-primary);background:var(--el-text-color-primary);right:0}.el-popper.is-light{background:var(--el-bg-color-overlay);border:1px solid var(--el-border-color-light)}.el-popper.is-light>.el-popper__arrow:before{border:1px solid var(--el-border-color-light);background:var(--el-bg-color-overlay);right:0}.el-popper.is-pure{padding:0}.el-popper__arrow{position:absolute;width:10px;height:10px;z-index:-1}.el-popper__arrow:before{position:absolute;width:10px;height:10px;z-index:-1;content:" ";transform:rotate(45deg);background:var(--el-text-color-primary);box-sizing:border-box}.el-popper[data-popper-placement^=top]>.el-popper__arrow{bottom:-5px}.el-popper[data-popper-placement^=top]>.el-popper__arrow:before{border-bottom-right-radius:2px}.el-popper[data-popper-placement^=bottom]>.el-popper__arrow{top:-5px}.el-popper[data-popper-placement^=bottom]>.el-popper__arrow:before{border-top-left-radius:2px}.el-popper[data-popper-placement^=left]>.el-popper__arrow{right:-5px}.el-popper[data-popper-placement^=left]>.el-popper__arrow:before{border-top-right-radius:2px}.el-popper[data-popper-placement^=right]>.el-popper__arrow{left:-5px}.el-popper[data-popper-placement^=right]>.el-popper__arrow:before{border-bottom-left-radius:2px}.el-popper[data-popper-placement^=top]>.el-popper__arrow:before{border-top-color:transparent!important;border-left-color:transparent!important}.el-popper[data-popper-placement^=bottom]>.el-popper__arrow:before{border-bottom-color:transparent!important;border-right-color:transparent!important}.el-popper[data-popper-placement^=left]>.el-popper__arrow:before{border-left-color:transparent!important;border-bottom-color:transparent!important}.el-popper[data-popper-placement^=right]>.el-popper__arrow:before{border-right-color:transparent!important;border-top-color:transparent!important}.el-scrollbar{--el-scrollbar-opacity: .3;--el-scrollbar-bg-color: var(--el-text-color-secondary);--el-scrollbar-hover-opacity: .5;--el-scrollbar-hover-bg-color: var(--el-text-color-secondary)}.el-scrollbar{overflow:hidden;position:relative;height:100%}.el-scrollbar__wrap{overflow:auto;height:100%}.el-scrollbar__wrap--hidden-default{scrollbar-width:none}.el-scrollbar__wrap--hidden-default::-webkit-scrollbar{display:none}.el-scrollbar__thumb{position:relative;display:block;width:0;height:0;cursor:pointer;border-radius:inherit;background-color:var(--el-scrollbar-bg-color, var(--el-text-color-secondary));transition:var(--el-transition-duration) background-color;opacity:var(--el-scrollbar-opacity, .3)}.el-scrollbar__thumb:hover{background-color:var(--el-scrollbar-hover-bg-color, var(--el-text-color-secondary));opacity:var(--el-scrollbar-hover-opacity, .5)}.el-scrollbar__bar{position:absolute;right:2px;bottom:2px;z-index:1;border-radius:4px}.el-scrollbar__bar.is-vertical{width:6px;top:2px}.el-scrollbar__bar.is-vertical>div{width:100%}.el-scrollbar__bar.is-horizontal{height:6px;left:2px}.el-scrollbar__bar.is-horizontal>div{height:100%}.el-scrollbar-fade-enter-active{transition:opacity .34s ease-out}.el-scrollbar-fade-leave-active{transition:opacity .12s ease-out}.el-scrollbar-fade-enter-from,.el-scrollbar-fade-leave-active{opacity:0}.el-table-column--selection .cell{padding-left:14px;padding-right:14px}.el-table-filter{border:solid 1px var(--el-border-color-lighter);border-radius:2px;background-color:#fff;box-shadow:var(--el-box-shadow-light);box-sizing:border-box}.el-table-filter__list{padding:5px 0;margin:0;list-style:none;min-width:100px}.el-table-filter__list-item{line-height:36px;padding:0 10px;cursor:pointer;font-size:var(--el-font-size-base)}.el-table-filter__list-item:hover{background-color:var(--el-color-primary-light-9);color:var(--el-color-primary)}.el-table-filter__list-item.is-active{background-color:var(--el-color-primary);color:#fff}.el-table-filter__content{min-width:100px}.el-table-filter__bottom{border-top:1px solid var(--el-border-color-lighter);padding:8px}.el-table-filter__bottom button{background:transparent;border:none;color:var(--el-text-color-regular);cursor:pointer;font-size:var(--el-font-size-small);padding:0 3px}.el-table-filter__bottom button:hover{color:var(--el-color-primary)}.el-table-filter__bottom button:focus{outline:none}.el-table-filter__bottom button.is-disabled{color:var(--el-disabled-text-color);cursor:not-allowed}.el-table-filter__wrap{max-height:280px}.el-table-filter__checkbox-group{padding:10px}.el-table-filter__checkbox-group label.el-checkbox{display:flex;align-items:center;margin-right:5px;margin-bottom:12px;margin-left:5px;height:unset}.el-table-filter__checkbox-group .el-checkbox:last-child{margin-bottom:0}.el-tag{--el-tag-font-size: 12px;--el-tag-border-radius: 4px;--el-tag-border-radius-rounded: 9999px}.el-tag{background-color:var(--el-tag-bg-color);border-color:var(--el-tag-border-color);color:var(--el-tag-text-color);display:inline-flex;justify-content:center;align-items:center;vertical-align:middle;height:24px;padding:0 9px;font-size:var(--el-tag-font-size);line-height:1;border-width:1px;border-style:solid;border-radius:var(--el-tag-border-radius);box-sizing:border-box;white-space:nowrap;--el-icon-size: 14px;--el-tag-bg-color: var(--el-color-primary-light-9);--el-tag-border-color: var(--el-color-primary-light-8);--el-tag-hover-color: var(--el-color-primary)}.el-tag.el-tag--primary{--el-tag-bg-color: var(--el-color-primary-light-9);--el-tag-border-color: var(--el-color-primary-light-8);--el-tag-hover-color: var(--el-color-primary)}.el-tag.el-tag--success{--el-tag-bg-color: var(--el-color-success-light-9);--el-tag-border-color: var(--el-color-success-light-8);--el-tag-hover-color: var(--el-color-success)}.el-tag.el-tag--warning{--el-tag-bg-color: var(--el-color-warning-light-9);--el-tag-border-color: var(--el-color-warning-light-8);--el-tag-hover-color: var(--el-color-warning)}.el-tag.el-tag--danger{--el-tag-bg-color: var(--el-color-danger-light-9);--el-tag-border-color: var(--el-color-danger-light-8);--el-tag-hover-color: var(--el-color-danger)}.el-tag.el-tag--error{--el-tag-bg-color: var(--el-color-error-light-9);--el-tag-border-color: var(--el-color-error-light-8);--el-tag-hover-color: var(--el-color-error)}.el-tag.el-tag--info{--el-tag-bg-color: var(--el-color-info-light-9);--el-tag-border-color: var(--el-color-info-light-8);--el-tag-hover-color: var(--el-color-info)}.el-tag.is-hit{border-color:var(--el-color-primary)}.el-tag.is-round{border-radius:var(--el-tag-border-radius-rounded)}.el-tag .el-tag__close{flex-shrink:0;color:var(--el-tag-text-color)}.el-tag .el-tag__close:hover{color:var(--el-color-white);background-color:var(--el-tag-hover-color)}.el-tag.el-tag--primary{--el-tag-text-color: var(--el-color-primary)}.el-tag.el-tag--success{--el-tag-text-color: var(--el-color-success)}.el-tag.el-tag--warning{--el-tag-text-color: var(--el-color-warning)}.el-tag.el-tag--danger{--el-tag-text-color: var(--el-color-danger)}.el-tag.el-tag--error{--el-tag-text-color: var(--el-color-error)}.el-tag.el-tag--info{--el-tag-text-color: var(--el-color-info)}.el-tag .el-icon{border-radius:50%;cursor:pointer;font-size:calc(var(--el-icon-size) - 2px);height:var(--el-icon-size);width:var(--el-icon-size)}.el-tag .el-tag__close{margin-left:6px}.el-tag--dark{--el-tag-text-color: var(--el-color-white);--el-tag-bg-color: var(--el-color-primary);--el-tag-border-color: var(--el-color-primary);--el-tag-hover-color: var(--el-color-primary-light-3)}.el-tag--dark.el-tag--primary{--el-tag-bg-color: var(--el-color-primary);--el-tag-border-color: var(--el-color-primary);--el-tag-hover-color: var(--el-color-primary-light-3)}.el-tag--dark.el-tag--success{--el-tag-bg-color: var(--el-color-success);--el-tag-border-color: var(--el-color-success);--el-tag-hover-color: var(--el-color-success-light-3)}.el-tag--dark.el-tag--warning{--el-tag-bg-color: var(--el-color-warning);--el-tag-border-color: var(--el-color-warning);--el-tag-hover-color: var(--el-color-warning-light-3)}.el-tag--dark.el-tag--danger{--el-tag-bg-color: var(--el-color-danger);--el-tag-border-color: var(--el-color-danger);--el-tag-hover-color: var(--el-color-danger-light-3)}.el-tag--dark.el-tag--error{--el-tag-bg-color: var(--el-color-error);--el-tag-border-color: var(--el-color-error);--el-tag-hover-color: var(--el-color-error-light-3)}.el-tag--dark.el-tag--info{--el-tag-bg-color: var(--el-color-info);--el-tag-border-color: var(--el-color-info);--el-tag-hover-color: var(--el-color-info-light-3)}.el-tag--dark.el-tag--primary,.el-tag--dark.el-tag--success,.el-tag--dark.el-tag--warning,.el-tag--dark.el-tag--danger,.el-tag--dark.el-tag--error,.el-tag--dark.el-tag--info{--el-tag-text-color: var(--el-color-white)}.el-tag--plain,.el-tag--plain.el-tag--primary{--el-tag-bg-color: var(--el-fill-color-blank);--el-tag-border-color: var(--el-color-primary-light-5);--el-tag-hover-color: var(--el-color-primary)}.el-tag--plain.el-tag--success{--el-tag-bg-color: var(--el-fill-color-blank);--el-tag-border-color: var(--el-color-success-light-5);--el-tag-hover-color: var(--el-color-success)}.el-tag--plain.el-tag--warning{--el-tag-bg-color: var(--el-fill-color-blank);--el-tag-border-color: var(--el-color-warning-light-5);--el-tag-hover-color: var(--el-color-warning)}.el-tag--plain.el-tag--danger{--el-tag-bg-color: var(--el-fill-color-blank);--el-tag-border-color: var(--el-color-danger-light-5);--el-tag-hover-color: var(--el-color-danger)}.el-tag--plain.el-tag--error{--el-tag-bg-color: var(--el-fill-color-blank);--el-tag-border-color: var(--el-color-error-light-5);--el-tag-hover-color: var(--el-color-error)}.el-tag--plain.el-tag--info{--el-tag-bg-color: var(--el-fill-color-blank);--el-tag-border-color: var(--el-color-info-light-5);--el-tag-hover-color: var(--el-color-info)}.el-tag.is-closable{padding-right:5px}.el-tag--large{padding:0 11px;height:32px;--el-icon-size: 16px}.el-tag--large .el-tag__close{margin-left:8px}.el-tag--large.is-closable{padding-right:7px}.el-tag--small{padding:0 7px;height:20px;--el-icon-size: 12px}.el-tag--small .el-tag__close{margin-left:4px}.el-tag--small.is-closable{padding-right:3px}.el-tag--small .el-icon-close{transform:scale(.8)}.el-tag.el-tag--primary.is-hit{border-color:var(--el-color-primary)}.el-tag.el-tag--success.is-hit{border-color:var(--el-color-success)}.el-tag.el-tag--warning.is-hit{border-color:var(--el-color-warning)}.el-tag.el-tag--danger.is-hit{border-color:var(--el-color-danger)}.el-tag.el-tag--error.is-hit{border-color:var(--el-color-error)}.el-tag.el-tag--info.is-hit{border-color:var(--el-color-info)}.el-alert{--el-alert-padding: 8px 16px;--el-alert-border-radius-base: var(--el-border-radius-base);--el-alert-title-font-size: 14px;--el-alert-title-with-description-font-size: 16px;--el-alert-description-font-size: 14px;--el-alert-close-font-size: 16px;--el-alert-close-customed-font-size: 14px;--el-alert-icon-size: 16px;--el-alert-icon-large-size: 28px;width:100%;padding:var(--el-alert-padding);margin:0;box-sizing:border-box;border-radius:var(--el-alert-border-radius-base);position:relative;background-color:var(--el-color-white);overflow:hidden;opacity:1;display:flex;align-items:center;transition:opacity var(--el-transition-duration-fast)}.el-alert.is-light .el-alert__close-btn{color:var(--el-text-color-placeholder)}.el-alert.is-dark .el-alert__close-btn,.el-alert.is-dark .el-alert__description{color:var(--el-color-white)}.el-alert.is-center{justify-content:center}.el-alert--success{--el-alert-bg-color: var(--el-color-success-light-9)}.el-alert--success.is-light{background-color:var(--el-alert-bg-color);color:var(--el-color-success)}.el-alert--success.is-light .el-alert__description{color:var(--el-color-success)}.el-alert--success.is-dark{background-color:var(--el-color-success);color:var(--el-color-white)}.el-alert--info{--el-alert-bg-color: var(--el-color-info-light-9)}.el-alert--info.is-light{background-color:var(--el-alert-bg-color);color:var(--el-color-info)}.el-alert--info.is-light .el-alert__description{color:var(--el-color-info)}.el-alert--info.is-dark{background-color:var(--el-color-info);color:var(--el-color-white)}.el-alert--warning{--el-alert-bg-color: var(--el-color-warning-light-9)}.el-alert--warning.is-light{background-color:var(--el-alert-bg-color);color:var(--el-color-warning)}.el-alert--warning.is-light .el-alert__description{color:var(--el-color-warning)}.el-alert--warning.is-dark{background-color:var(--el-color-warning);color:var(--el-color-white)}.el-alert--error{--el-alert-bg-color: var(--el-color-error-light-9)}.el-alert--error.is-light{background-color:var(--el-alert-bg-color);color:var(--el-color-error)}.el-alert--error.is-light .el-alert__description{color:var(--el-color-error)}.el-alert--error.is-dark{background-color:var(--el-color-error);color:var(--el-color-white)}.el-alert__content{display:flex;flex-direction:column;gap:4px}.el-alert .el-alert__icon{font-size:var(--el-alert-icon-size);width:var(--el-alert-icon-size);margin-right:8px}.el-alert .el-alert__icon.is-big{font-size:var(--el-alert-icon-large-size);width:var(--el-alert-icon-large-size);margin-right:12px}.el-alert__title{font-size:var(--el-alert-title-font-size);line-height:24px}.el-alert__title.with-description{font-size:var(--el-alert-title-with-description-font-size)}.el-alert .el-alert__description{font-size:var(--el-alert-description-font-size);margin:0}.el-alert .el-alert__close-btn{font-size:var(--el-alert-close-font-size);opacity:1;position:absolute;top:12px;right:16px;cursor:pointer}.el-alert .el-alert__close-btn.is-customed{font-style:normal;font-size:var(--el-alert-close-customed-font-size);line-height:24px;top:8px}.el-alert-fade-enter-from,.el-alert-fade-leave-active{opacity:0}.el-badge{--el-badge-bg-color: var(--el-color-danger);--el-badge-radius: 10px;--el-badge-font-size: 12px;--el-badge-padding: 6px;--el-badge-size: 18px;position:relative;vertical-align:middle;display:inline-block;width:fit-content}.el-badge__content{background-color:var(--el-badge-bg-color);border-radius:var(--el-badge-radius);color:var(--el-color-white);display:inline-flex;justify-content:center;align-items:center;font-size:var(--el-badge-font-size);height:var(--el-badge-size);padding:0 var(--el-badge-padding);white-space:nowrap;border:1px solid var(--el-bg-color)}.el-badge__content.is-fixed{position:absolute;top:0;right:calc(1px + var(--el-badge-size) / 2);transform:translateY(-50%) translate(100%);z-index:var(--el-index-normal)}.el-badge__content.is-fixed.is-dot{right:5px}.el-badge__content.is-dot{height:8px;width:8px;padding:0;right:0;border-radius:50%}.el-badge__content.is-hide-zero{display:none}.el-badge__content--primary{background-color:var(--el-color-primary)}.el-badge__content--success{background-color:var(--el-color-success)}.el-badge__content--warning{background-color:var(--el-color-warning)}.el-badge__content--info{background-color:var(--el-color-info)}.el-badge__content--danger{background-color:var(--el-color-danger)}.el-message{--el-message-bg-color: var(--el-color-info-light-9);--el-message-border-color: var(--el-border-color-lighter);--el-message-padding: 11px 15px;--el-message-close-size: 16px;--el-message-close-icon-color: var(--el-text-color-placeholder);--el-message-close-hover-color: var(--el-text-color-secondary)}.el-message{width:fit-content;max-width:calc(100% - 32px);box-sizing:border-box;border-radius:var(--el-border-radius-base);border-width:var(--el-border-width);border-style:var(--el-border-style);border-color:var(--el-message-border-color);position:fixed;left:50%;top:20px;transform:translate(-50%);background-color:var(--el-message-bg-color);transition:opacity var(--el-transition-duration),transform .4s,top .4s;padding:var(--el-message-padding);display:flex;align-items:center;gap:8px}.el-message.is-center{justify-content:center}.el-message.is-plain{background-color:var(--el-bg-color-overlay);border-color:var(--el-bg-color-overlay);box-shadow:var(--el-box-shadow-light)}.el-message p{margin:0}.el-message--success{--el-message-bg-color: var(--el-color-success-light-9);--el-message-border-color: var(--el-color-success-light-8);--el-message-text-color: var(--el-color-success)}.el-message--success .el-message__content{color:var(--el-message-text-color);overflow-wrap:break-word}.el-message .el-message-icon--success{color:var(--el-message-text-color)}.el-message--info{--el-message-bg-color: var(--el-color-info-light-9);--el-message-border-color: var(--el-color-info-light-8);--el-message-text-color: var(--el-color-info)}.el-message--info .el-message__content{color:var(--el-message-text-color);overflow-wrap:break-word}.el-message .el-message-icon--info{color:var(--el-message-text-color)}.el-message--warning{--el-message-bg-color: var(--el-color-warning-light-9);--el-message-border-color: var(--el-color-warning-light-8);--el-message-text-color: var(--el-color-warning)}.el-message--warning .el-message__content{color:var(--el-message-text-color);overflow-wrap:break-word}.el-message .el-message-icon--warning{color:var(--el-message-text-color)}.el-message--error{--el-message-bg-color: var(--el-color-error-light-9);--el-message-border-color: var(--el-color-error-light-8);--el-message-text-color: var(--el-color-error)}.el-message--error .el-message__content{color:var(--el-message-text-color);overflow-wrap:break-word}.el-message .el-message-icon--error{color:var(--el-message-text-color)}.el-message .el-message__badge{position:absolute;top:-8px;right:-8px}.el-message__content{padding:0;font-size:14px;line-height:1}.el-message__content:focus{outline-width:0}.el-message .el-message__closeBtn{cursor:pointer;color:var(--el-message-close-icon-color);font-size:var(--el-message-close-size)}.el-message .el-message__closeBtn:focus{outline-width:0}.el-message .el-message__closeBtn:hover{color:var(--el-message-close-hover-color)}.el-message-fade-enter-from,.el-message-fade-leave-to{opacity:0;transform:translate(-50%,-100%)}.el-link{--el-link-font-size: var(--el-font-size-base);--el-link-font-weight: var(--el-font-weight-primary);--el-link-text-color: var(--el-text-color-regular);--el-link-hover-text-color: var(--el-color-primary);--el-link-disabled-text-color: var(--el-text-color-placeholder)}.el-link{display:inline-flex;flex-direction:row;align-items:center;justify-content:center;vertical-align:middle;position:relative;text-decoration:none;outline:none;cursor:pointer;padding:0;font-size:var(--el-link-font-size);font-weight:var(--el-link-font-weight);color:var(--el-link-text-color)}.el-link:hover{color:var(--el-link-hover-text-color)}.el-link.is-underline:hover:after{content:"";position:absolute;left:0;right:0;height:0;bottom:0;border-bottom:1px solid var(--el-link-hover-text-color)}.el-link.is-disabled{color:var(--el-link-disabled-text-color);cursor:not-allowed}.el-link [class*=el-icon-]+span{margin-left:5px}.el-link.el-link--default:after{border-color:var(--el-link-hover-text-color)}.el-link__inner{display:inline-flex;justify-content:center;align-items:center}.el-link.el-link--primary{--el-link-text-color: var(--el-color-primary);--el-link-hover-text-color: var(--el-color-primary-light-3);--el-link-disabled-text-color: var(--el-color-primary-light-5)}.el-link.el-link--primary:after{border-color:var(--el-link-text-color)}.el-link.el-link--primary.is-underline:hover:after{border-color:var(--el-link-text-color)}.el-link.el-link--success{--el-link-text-color: var(--el-color-success);--el-link-hover-text-color: var(--el-color-success-light-3);--el-link-disabled-text-color: var(--el-color-success-light-5)}.el-link.el-link--success:after{border-color:var(--el-link-text-color)}.el-link.el-link--success.is-underline:hover:after{border-color:var(--el-link-text-color)}.el-link.el-link--warning{--el-link-text-color: var(--el-color-warning);--el-link-hover-text-color: var(--el-color-warning-light-3);--el-link-disabled-text-color: var(--el-color-warning-light-5)}.el-link.el-link--warning:after{border-color:var(--el-link-text-color)}.el-link.el-link--warning.is-underline:hover:after{border-color:var(--el-link-text-color)}.el-link.el-link--danger{--el-link-text-color: var(--el-color-danger);--el-link-hover-text-color: var(--el-color-danger-light-3);--el-link-disabled-text-color: var(--el-color-danger-light-5)}.el-link.el-link--danger:after{border-color:var(--el-link-text-color)}.el-link.el-link--danger.is-underline:hover:after{border-color:var(--el-link-text-color)}.el-link.el-link--error{--el-link-text-color: var(--el-color-error);--el-link-hover-text-color: var(--el-color-error-light-3);--el-link-disabled-text-color: var(--el-color-error-light-5)}.el-link.el-link--error:after{border-color:var(--el-link-text-color)}.el-link.el-link--error.is-underline:hover:after{border-color:var(--el-link-text-color)}.el-link.el-link--info{--el-link-text-color: var(--el-color-info);--el-link-hover-text-color: var(--el-color-info-light-3);--el-link-disabled-text-color: var(--el-color-info-light-5)}.el-link.el-link--info:after{border-color:var(--el-link-text-color)}.el-link.el-link--info.is-underline:hover:after{border-color:var(--el-link-text-color)}.dialog-title[data-v-be77ab91]{justify-content:space-between}:root{--el-popup-modal-bg-color: var(--el-color-black);--el-popup-modal-opacity: .5}.v-modal-enter{animation:v-modal-in var(--el-transition-duration-fast) ease}.v-modal-leave{animation:v-modal-out var(--el-transition-duration-fast) ease forwards}@keyframes v-modal-in{0%{opacity:0}}@keyframes v-modal-out{to{opacity:0}}.v-modal{position:fixed;left:0;top:0;width:100%;height:100%;opacity:var(--el-popup-modal-opacity);background:var(--el-popup-modal-bg-color)}.el-popup-parent--hidden{overflow:hidden}.el-message-box{--el-messagebox-title-color: var(--el-text-color-primary);--el-messagebox-width: 420px;--el-messagebox-border-radius: 4px;--el-messagebox-box-shadow: var(--el-box-shadow);--el-messagebox-font-size: var(--el-font-size-large);--el-messagebox-content-font-size: var(--el-font-size-base);--el-messagebox-content-color: var(--el-text-color-regular);--el-messagebox-error-font-size: 12px;--el-messagebox-padding-primary: 12px;--el-messagebox-font-line-height: var(--el-font-line-height-primary)}.el-message-box{display:inline-block;position:relative;max-width:var(--el-messagebox-width);width:100%;padding:var(--el-messagebox-padding-primary);vertical-align:middle;background-color:var(--el-bg-color);border-radius:var(--el-messagebox-border-radius);font-size:var(--el-messagebox-font-size);box-shadow:var(--el-messagebox-box-shadow);text-align:left;overflow:hidden;backface-visibility:hidden;box-sizing:border-box;overflow-wrap:break-word}.el-message-box:focus{outline:none!important}.el-overlay.is-message-box .el-overlay-message-box{text-align:center;position:fixed;top:0;right:0;bottom:0;left:0;padding:16px;overflow:auto}.el-overlay.is-message-box .el-overlay-message-box:after{content:"";display:inline-block;height:100%;width:0;vertical-align:middle}.el-message-box.is-draggable .el-message-box__header{cursor:move;-webkit-user-select:none;user-select:none}.el-message-box__header{padding-bottom:var(--el-messagebox-padding-primary)}.el-message-box__header.show-close{padding-right:calc(var(--el-messagebox-padding-primary) + var(--el-message-close-size, 16px))}.el-message-box__title{font-size:var(--el-messagebox-font-size);line-height:var(--el-messagebox-font-line-height);color:var(--el-messagebox-title-color)}.el-message-box__headerbtn{position:absolute;top:0;right:0;padding:0;width:40px;height:40px;border:none;outline:none;background:transparent;font-size:var(--el-message-close-size, 16px);cursor:pointer}.el-message-box__headerbtn .el-message-box__close{color:var(--el-color-info);font-size:inherit}.el-message-box__headerbtn:focus .el-message-box__close,.el-message-box__headerbtn:hover .el-message-box__close{color:var(--el-color-primary)}.el-message-box__content{color:var(--el-messagebox-content-color);font-size:var(--el-messagebox-content-font-size)}.el-message-box__container{display:flex;align-items:center;gap:12px}.el-message-box__input{padding-top:12px}.el-message-box__input div.invalid>input{border-color:var(--el-color-error)}.el-message-box__input div.invalid>input:focus{border-color:var(--el-color-error)}.el-message-box__status{font-size:24px}.el-message-box__status.el-message-box-icon--success{--el-messagebox-color: var(--el-color-success);color:var(--el-messagebox-color)}.el-message-box__status.el-message-box-icon--info{--el-messagebox-color: var(--el-color-info);color:var(--el-messagebox-color)}.el-message-box__status.el-message-box-icon--warning{--el-messagebox-color: var(--el-color-warning);color:var(--el-messagebox-color)}.el-message-box__status.el-message-box-icon--error{--el-messagebox-color: var(--el-color-error);color:var(--el-messagebox-color)}.el-message-box__message{margin:0}.el-message-box__message p{margin:0;line-height:var(--el-messagebox-font-line-height)}.el-message-box__errormsg{color:var(--el-color-error);font-size:var(--el-messagebox-error-font-size);line-height:var(--el-messagebox-font-line-height)}.el-message-box__btns{display:flex;flex-wrap:wrap;justify-content:flex-end;align-items:center;padding-top:var(--el-messagebox-padding-primary)}.el-message-box--center .el-message-box__title{display:flex;align-items:center;justify-content:center;gap:6px}.el-message-box--center .el-message-box__status{font-size:inherit}.el-message-box--center .el-message-box__btns,.el-message-box--center .el-message-box__container{justify-content:center}.fade-in-linear-enter-active .el-overlay-message-box{animation:msgbox-fade-in var(--el-transition-duration)}.fade-in-linear-leave-active .el-overlay-message-box{animation:msgbox-fade-in var(--el-transition-duration) reverse}@keyframes msgbox-fade-in{0%{transform:translate3d(0,-20px,0);opacity:0}to{transform:translateZ(0);opacity:1}}.el-textarea{--el-input-text-color: var(--el-text-color-regular);--el-input-border: var(--el-border);--el-input-hover-border: var(--el-border-color-hover);--el-input-focus-border: var(--el-color-primary);--el-input-transparent-border: 0 0 0 1px transparent inset;--el-input-border-color: var(--el-border-color);--el-input-border-radius: var(--el-border-radius-base);--el-input-bg-color: var(--el-fill-color-blank);--el-input-icon-color: var(--el-text-color-placeholder);--el-input-placeholder-color: var(--el-text-color-placeholder);--el-input-hover-border-color: var(--el-border-color-hover);--el-input-clear-hover-color: var(--el-text-color-secondary);--el-input-focus-border-color: var(--el-color-primary);--el-input-width: 100%}.el-textarea{position:relative;display:inline-block;width:100%;vertical-align:bottom;font-size:var(--el-font-size-base)}.el-textarea__inner{position:relative;display:block;resize:vertical;padding:5px 11px;line-height:1.5;box-sizing:border-box;width:100%;font-size:inherit;font-family:inherit;color:var(--el-input-text-color, var(--el-text-color-regular));background-color:var(--el-input-bg-color, var(--el-fill-color-blank));background-image:none;-webkit-appearance:none;box-shadow:0 0 0 1px var(--el-input-border-color, var(--el-border-color)) inset;border-radius:var(--el-input-border-radius, var(--el-border-radius-base));transition:var(--el-transition-box-shadow);border:none}.el-textarea__inner::placeholder{color:var(--el-input-placeholder-color, var(--el-text-color-placeholder))}.el-textarea__inner:hover{box-shadow:0 0 0 1px var(--el-input-hover-border-color) inset}.el-textarea__inner:focus{outline:none;box-shadow:0 0 0 1px var(--el-input-focus-border-color) inset}.el-textarea .el-input__count{color:var(--el-color-info);background:var(--el-fill-color-blank);position:absolute;font-size:12px;line-height:14px;bottom:5px;right:10px}.el-textarea.is-disabled .el-textarea__inner{box-shadow:0 0 0 1px var(--el-disabled-border-color) inset;background-color:var(--el-disabled-bg-color);color:var(--el-disabled-text-color);cursor:not-allowed}.el-textarea.is-disabled .el-textarea__inner::placeholder{color:var(--el-text-color-placeholder)}.el-textarea.is-exceed .el-textarea__inner{box-shadow:0 0 0 1px var(--el-color-danger) inset}.el-textarea.is-exceed .el-input__count{color:var(--el-color-danger)}.el-input{--el-input-text-color: var(--el-text-color-regular);--el-input-border: var(--el-border);--el-input-hover-border: var(--el-border-color-hover);--el-input-focus-border: var(--el-color-primary);--el-input-transparent-border: 0 0 0 1px transparent inset;--el-input-border-color: var(--el-border-color);--el-input-border-radius: var(--el-border-radius-base);--el-input-bg-color: var(--el-fill-color-blank);--el-input-icon-color: var(--el-text-color-placeholder);--el-input-placeholder-color: var(--el-text-color-placeholder);--el-input-hover-border-color: var(--el-border-color-hover);--el-input-clear-hover-color: var(--el-text-color-secondary);--el-input-focus-border-color: var(--el-color-primary);--el-input-width: 100%}.el-input{--el-input-height: var(--el-component-size);position:relative;font-size:var(--el-font-size-base);display:inline-flex;width:var(--el-input-width);line-height:var(--el-input-height);box-sizing:border-box;vertical-align:middle}.el-input::-webkit-scrollbar{z-index:11;width:6px}.el-input::-webkit-scrollbar:horizontal{height:6px}.el-input::-webkit-scrollbar-thumb{border-radius:5px;width:6px;background:var(--el-text-color-disabled)}.el-input::-webkit-scrollbar-corner{background:var(--el-fill-color-blank)}.el-input::-webkit-scrollbar-track{background:var(--el-fill-color-blank)}.el-input::-webkit-scrollbar-track-piece{background:var(--el-fill-color-blank);width:6px}.el-input .el-input__clear,.el-input .el-input__password{color:var(--el-input-icon-color);font-size:14px;cursor:pointer}.el-input .el-input__clear:hover,.el-input .el-input__password:hover{color:var(--el-input-clear-hover-color)}.el-input .el-input__count{height:100%;display:inline-flex;align-items:center;color:var(--el-color-info);font-size:12px}.el-input .el-input__count .el-input__count-inner{background:var(--el-fill-color-blank);line-height:initial;display:inline-block;padding-left:8px}.el-input__wrapper{display:inline-flex;flex-grow:1;align-items:center;justify-content:center;padding:1px 11px;background-color:var(--el-input-bg-color, var(--el-fill-color-blank));background-image:none;border-radius:var(--el-input-border-radius, var(--el-border-radius-base));cursor:text;transition:var(--el-transition-box-shadow);transform:translateZ(0);box-shadow:0 0 0 1px var(--el-input-border-color, var(--el-border-color)) inset}.el-input__wrapper:hover{box-shadow:0 0 0 1px var(--el-input-hover-border-color) inset}.el-input__wrapper.is-focus{box-shadow:0 0 0 1px var(--el-input-focus-border-color) inset}.el-input{--el-input-inner-height: calc(var(--el-input-height, 32px) - 2px)}.el-input__inner{width:100%;flex-grow:1;-webkit-appearance:none;color:var(--el-input-text-color, var(--el-text-color-regular));font-size:inherit;height:var(--el-input-inner-height);line-height:var(--el-input-inner-height);padding:0;outline:none;border:none;background:none;box-sizing:border-box}.el-input__inner:focus{outline:none}.el-input__inner::placeholder{color:var(--el-input-placeholder-color, var(--el-text-color-placeholder))}.el-input__inner[type=password]::-ms-reveal{display:none}.el-input__inner[type=number]{line-height:1}.el-input__prefix{display:inline-flex;white-space:nowrap;flex-shrink:0;flex-wrap:nowrap;height:100%;line-height:var(--el-input-inner-height);text-align:center;color:var(--el-input-icon-color, var(--el-text-color-placeholder));transition:all var(--el-transition-duration);pointer-events:none}.el-input__prefix-inner{pointer-events:all;display:inline-flex;align-items:center;justify-content:center}.el-input__prefix-inner>:last-child{margin-right:8px}.el-input__prefix-inner>:first-child,.el-input__prefix-inner>:first-child.el-input__icon{margin-left:0}.el-input__suffix{display:inline-flex;white-space:nowrap;flex-shrink:0;flex-wrap:nowrap;height:100%;line-height:var(--el-input-inner-height);text-align:center;color:var(--el-input-icon-color, var(--el-text-color-placeholder));transition:all var(--el-transition-duration);pointer-events:none}.el-input__suffix-inner{pointer-events:all;display:inline-flex;align-items:center;justify-content:center}.el-input__suffix-inner>:first-child{margin-left:8px}.el-input .el-input__icon{height:inherit;line-height:inherit;display:flex;justify-content:center;align-items:center;transition:all var(--el-transition-duration);margin-left:8px}.el-input__validateIcon{pointer-events:none}.el-input.is-active .el-input__wrapper{box-shadow:0 0 0 1px var(--el-input-focus-color, ) inset}.el-input.is-disabled{cursor:not-allowed}.el-input.is-disabled .el-input__wrapper{background-color:var(--el-disabled-bg-color);cursor:not-allowed;pointer-events:none;box-shadow:0 0 0 1px var(--el-disabled-border-color) inset}.el-input.is-disabled .el-input__inner{color:var(--el-disabled-text-color);-webkit-text-fill-color:var(--el-disabled-text-color);cursor:not-allowed}.el-input.is-disabled .el-input__inner::placeholder{color:var(--el-text-color-placeholder)}.el-input.is-disabled .el-input__icon{cursor:not-allowed}.el-input.is-exceed .el-input__wrapper{box-shadow:0 0 0 1px var(--el-color-danger) inset}.el-input.is-exceed .el-input__suffix .el-input__count{color:var(--el-color-danger)}.el-input--large{--el-input-height: var(--el-component-size-large);font-size:14px}.el-input--large .el-input__wrapper{padding:1px 15px}.el-input--large{--el-input-inner-height: calc(var(--el-input-height, 40px) - 2px)}.el-input--small{--el-input-height: var(--el-component-size-small);font-size:12px}.el-input--small .el-input__wrapper{padding:1px 7px}.el-input--small{--el-input-inner-height: calc(var(--el-input-height, 24px) - 2px)}.el-input-group{display:inline-flex;width:100%;align-items:stretch}.el-input-group__append,.el-input-group__prepend{background-color:var(--el-fill-color-light);color:var(--el-color-info);position:relative;display:inline-flex;align-items:center;justify-content:center;min-height:100%;border-radius:var(--el-input-border-radius);padding:0 20px;white-space:nowrap}.el-input-group__append:focus,.el-input-group__prepend:focus{outline:none}.el-input-group__append .el-select,.el-input-group__append .el-button,.el-input-group__prepend .el-select,.el-input-group__prepend .el-button{display:inline-block;margin:0 -20px}.el-input-group__append button.el-button,.el-input-group__append button.el-button:hover,.el-input-group__append div.el-select .el-select__wrapper,.el-input-group__append div.el-select:hover .el-select__wrapper,.el-input-group__prepend button.el-button,.el-input-group__prepend button.el-button:hover,.el-input-group__prepend div.el-select .el-select__wrapper,.el-input-group__prepend div.el-select:hover .el-select__wrapper{border-color:transparent;background-color:transparent;color:inherit}.el-input-group__append .el-button,.el-input-group__append .el-input,.el-input-group__prepend .el-button,.el-input-group__prepend .el-input{font-size:inherit}.el-input-group__prepend{border-right:0;border-top-right-radius:0;border-bottom-right-radius:0;box-shadow:1px 0 0 0 var(--el-input-border-color) inset,0 1px 0 0 var(--el-input-border-color) inset,0 -1px 0 0 var(--el-input-border-color) inset}.el-input-group__append{border-left:0;border-top-left-radius:0;border-bottom-left-radius:0;box-shadow:0 1px 0 0 var(--el-input-border-color) inset,0 -1px 0 0 var(--el-input-border-color) inset,-1px 0 0 0 var(--el-input-border-color) inset}.el-input-group--prepend>.el-input__wrapper{border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--prepend .el-input-group__prepend .el-select .el-select__wrapper{border-top-right-radius:0;border-bottom-right-radius:0;box-shadow:1px 0 0 0 var(--el-input-border-color) inset,0 1px 0 0 var(--el-input-border-color) inset,0 -1px 0 0 var(--el-input-border-color) inset}.el-input-group--append>.el-input__wrapper{border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group--append .el-input-group__append .el-select .el-select__wrapper{border-top-left-radius:0;border-bottom-left-radius:0;box-shadow:0 1px 0 0 var(--el-input-border-color) inset,0 -1px 0 0 var(--el-input-border-color) inset,-1px 0 0 0 var(--el-input-border-color) inset}.el-input-hidden{display:none!important}.about[data-v-fdf89f38]{text-align:center}.about h1[data-v-fdf89f38]{font-size:18px;font-weight:700}.about .about-container[data-v-fdf89f38]{padding:10px}.about .about-container .desc[data-v-fdf89f38]{margin-bottom:10px}.el-form{--el-form-label-font-size: var(--el-font-size-base);--el-form-inline-content-width: 220px}.el-form--inline .el-form-item{display:inline-flex;vertical-align:middle;margin-right:32px}.el-form--inline.el-form--label-top{display:flex;flex-wrap:wrap}.el-form--inline.el-form--label-top .el-form-item{display:block}.el-form-item{display:flex;--font-size: 14px;margin-bottom:18px}.el-form-item .el-form-item{margin-bottom:0}.el-form-item .el-input__validateIcon{display:none}.el-form-item--large{--font-size: 14px;--el-form-label-font-size: var(--font-size);margin-bottom:22px}.el-form-item--large .el-form-item__label{height:40px;line-height:40px}.el-form-item--large .el-form-item__content{line-height:40px}.el-form-item--large .el-form-item__error{padding-top:4px}.el-form-item--default{--font-size: 14px;--el-form-label-font-size: var(--font-size);margin-bottom:18px}.el-form-item--default .el-form-item__label{height:32px;line-height:32px}.el-form-item--default .el-form-item__content{line-height:32px}.el-form-item--default .el-form-item__error{padding-top:2px}.el-form-item--small{--font-size: 12px;--el-form-label-font-size: var(--font-size);margin-bottom:18px}.el-form-item--small .el-form-item__label{height:24px;line-height:24px}.el-form-item--small .el-form-item__content{line-height:24px}.el-form-item--small .el-form-item__error{padding-top:2px}.el-form-item--label-left .el-form-item__label{justify-content:flex-start}.el-form-item--label-top{display:block}.el-form-item--label-top .el-form-item__label{display:inline-block;vertical-align:middle;height:auto;text-align:left;margin-bottom:8px;line-height:22px}.el-form-item__label-wrap{display:flex}.el-form-item__label{display:inline-flex;justify-content:flex-end;align-items:flex-start;flex:0 0 auto;font-size:var(--el-form-label-font-size);color:var(--el-text-color-regular);height:32px;line-height:32px;padding:0 12px 0 0;box-sizing:border-box}.el-form-item__content{display:flex;flex-wrap:wrap;align-items:center;flex:1;line-height:32px;position:relative;font-size:var(--font-size);min-width:0}.el-form-item__content .el-input-group{vertical-align:top}.el-form-item__error{color:var(--el-color-danger);font-size:12px;line-height:1;padding-top:2px;position:absolute;top:100%;left:0}.el-form-item__error--inline{position:relative;top:auto;left:auto;display:inline-block;margin-left:10px}.el-form-item.is-required:not(.is-no-asterisk).asterisk-left>.el-form-item__label:before,.el-form-item.is-required:not(.is-no-asterisk).asterisk-left>.el-form-item__label-wrap>.el-form-item__label:before{content:"*";color:var(--el-color-danger);margin-right:4px}.el-form-item.is-required:not(.is-no-asterisk).asterisk-right>.el-form-item__label:after,.el-form-item.is-required:not(.is-no-asterisk).asterisk-right>.el-form-item__label-wrap>.el-form-item__label:after{content:"*";color:var(--el-color-danger);margin-left:4px}.el-form-item.is-error .el-input__wrapper,.el-form-item.is-error .el-input__wrapper:hover,.el-form-item.is-error .el-input__wrapper:focus,.el-form-item.is-error .el-input__wrapper.is-focus,.el-form-item.is-error .el-textarea__inner,.el-form-item.is-error .el-textarea__inner:hover,.el-form-item.is-error .el-textarea__inner:focus,.el-form-item.is-error .el-textarea__inner.is-focus,.el-form-item.is-error .el-select__wrapper,.el-form-item.is-error .el-select__wrapper:hover,.el-form-item.is-error .el-select__wrapper:focus,.el-form-item.is-error .el-select__wrapper.is-focus,.el-form-item.is-error .el-input-tag__wrapper,.el-form-item.is-error .el-input-tag__wrapper:hover,.el-form-item.is-error .el-input-tag__wrapper:focus,.el-form-item.is-error .el-input-tag__wrapper.is-focus{box-shadow:0 0 0 1px var(--el-color-danger) inset}.el-form-item.is-error .el-input-group__append .el-input__wrapper,.el-form-item.is-error .el-input-group__prepend .el-input__wrapper{box-shadow:0 0 0 1px transparent inset}.el-form-item.is-error .el-input-group__append .el-input__validateIcon,.el-form-item.is-error .el-input-group__prepend .el-input__validateIcon{display:none}.el-form-item.is-error .el-input__validateIcon{color:var(--el-color-danger)}.el-form-item--feedback .el-input__validateIcon{display:inline-flex}.history[data-v-31131a4a]{margin-top:10px}.signin-message-box .el-message-box__container{justify-content:center}.sswp-script .file[data-v-6dad2ab3]{display:flex;align-items:center}.sswp-script .file .type-img[data-v-6dad2ab3]{height:30px}.sswp-script .file .type-img img[data-v-6dad2ab3]{height:100%}.sswp-script .html-str[data-v-6dad2ab3] strong{line-height:normal;vertical-align:baseline}.sswp-script .html-str[data-v-6dad2ab3] a{color:var(--el-color-primary)!important;line-height:normal;vertical-align:baseline;font-weight:700}.sswp-script[data-v-6dad2ab3] .el-dialog .el-dialog__header{font-weight:700;padding-bottom:16px}.sswp-script[data-v-6dad2ab3] .el-dialog .el-dialog__title{color:var(--el-color-primary)}.sswp-script[data-v-6dad2ab3] .el-dialog .el-dialog__headerbtn{font-weight:700;top:16px;right:16px}.sswp-script[data-v-6dad2ab3] .el-tabs{border-radius:8px;overflow:hidden}.sswp-script[data-v-6dad2ab3] .el-tabs .el-tabs__item.is-active{font-weight:700}.btn-center-a{margin:0 auto}.sswp-script .file[data-v-b2eabf45]{display:flex;align-items:center}.sswp-script .file .type-img img[data-v-b2eabf45]{width:30px;height:30px;border-radius:4px;overflow:hidden;object-fit:cover}.sswp-script .html-str[data-v-b2eabf45] strong{line-height:normal;vertical-align:baseline}.sswp-script .html-str[data-v-b2eabf45] a{color:var(--el-color-primary)!important;line-height:normal;vertical-align:baseline;font-weight:700}.sswp-script[data-v-b2eabf45] .el-dialog .el-dialog__header{font-weight:700;padding-bottom:16px}.sswp-script[data-v-b2eabf45] .el-dialog .el-dialog__title{color:var(--el-color-primary)}.sswp-script[data-v-b2eabf45] .el-dialog .el-dialog__headerbtn{font-weight:700;top:16px;right:16px}.sswp-script[data-v-b2eabf45] .el-tabs{border-radius:8px;overflow:hidden}.sswp-script[data-v-b2eabf45] .el-tabs .el-tabs__item.is-active,.btn span[data-v-fb9fbf30]{font-weight:700}.flex{display:flex}.item-center{align-items:center}.space-between{justify-content:space-between}.flex-1{flex-grow:1}.flex-end{display:flex;justify-content:flex-end}.top-10{margin-top:10px}.mr-16{margin-right:16px}.dialog-title{display:flex;align-items:center}.dialog-title__main{color:var(--el-color-primary);font-weight:700;font-size:18px}.dialog-title__sub{margin-left:20px}.sub-title{font-weight:700;font-size:16px;position:relative;margin-top:10px;margin-bottom:16px;text-align:center}.sub-title:after{content:"";bottom:-8px;left:0;right:0;display:inline-block;position:absolute;border-bottom:1px solid rgba(28,31,35,.0784313725)}.sswp-baidu-btn-container{order:8;margin:0 16px}.sswp-quark-btn-container{margin:0 16px}.ss-script .file-name{margin-left:6px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.html-str strong{line-height:normal;vertical-align:baseline}.html-str a{color:var(--el-color-primary)!important;line-height:normal;vertical-align:baseline!important;font-weight:700} '); (function (vue, axios, CryptoJs, mitt) { 'use strict'; var __getOwnPropNames = Object.getOwnPropertyNames; var __commonJS = (cb, mod) => function __require() { return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; }; var require_main_001 = __commonJS({ "main-DZhFmDTI.js"(exports, module) { var _GM = /* @__PURE__ */ (() => typeof GM != "undefined" ? GM : void 0)(); 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_info = /* @__PURE__ */ (() => typeof GM_info != "undefined" ? GM_info : void 0)(); var _GM_setValue = /* @__PURE__ */ (() => typeof GM_setValue != "undefined" ? GM_setValue : void 0)(); var _GM_xmlhttpRequest = /* @__PURE__ */ (() => typeof GM_xmlhttpRequest != "undefined" ? GM_xmlhttpRequest : void 0)(); var _unsafeWindow = /* @__PURE__ */ (() => typeof unsafeWindow != "undefined" ? unsafeWindow : void 0)(); const configProviderContextKey = Symbol(); const defaultNamespace = "el"; const statePrefix = "is-"; const _bem = (namespace, block, blockSuffix, element, modifier) => { let cls = `${namespace}-${block}`; if (blockSuffix) { cls += `-${blockSuffix}`; } if (element) { cls += `__${element}`; } if (modifier) { cls += `--${modifier}`; } return cls; }; const namespaceContextKey = Symbol("namespaceContextKey"); const useGetDerivedNamespace = (namespaceOverrides) => { const derivedNamespace = namespaceOverrides || (vue.getCurrentInstance() ? vue.inject(namespaceContextKey, vue.ref(defaultNamespace)) : vue.ref(defaultNamespace)); const namespace = vue.computed(() => { return vue.unref(derivedNamespace) || defaultNamespace; }); return namespace; }; const useNamespace = (block, namespaceOverrides) => { const namespace = useGetDerivedNamespace(namespaceOverrides); const b2 = (blockSuffix = "") => _bem(namespace.value, block, blockSuffix, "", ""); const e = (element) => element ? _bem(namespace.value, block, "", element, "") : ""; const m2 = (modifier) => modifier ? _bem(namespace.value, block, "", "", modifier) : ""; const be2 = (blockSuffix, element) => blockSuffix && element ? _bem(namespace.value, block, blockSuffix, element, "") : ""; const em = (element, modifier) => element && modifier ? _bem(namespace.value, block, "", element, modifier) : ""; const bm = (blockSuffix, modifier) => blockSuffix && modifier ? _bem(namespace.value, block, blockSuffix, "", modifier) : ""; const bem = (blockSuffix, element, modifier) => blockSuffix && element && modifier ? _bem(namespace.value, block, blockSuffix, element, modifier) : ""; const is = (name, ...args) => { const state = args.length >= 1 ? args[0] : true; return name && state ? `${statePrefix}${name}` : ""; }; const cssVar = (object) => { const styles = {}; for (const key in object) { if (object[key]) { styles[`--${namespace.value}-${key}`] = object[key]; } } return styles; }; const cssVarBlock = (object) => { const styles = {}; for (const key in object) { if (object[key]) { styles[`--${namespace.value}-${block}-${key}`] = object[key]; } } return styles; }; const cssVarName = (name) => `--${namespace.value}-${name}`; const cssVarBlockName = (name) => `--${namespace.value}-${block}-${name}`; return { namespace, b: b2, e, m: m2, be: be2, em, bm, bem, is, cssVar, cssVarName, cssVarBlock, cssVarBlockName }; }; /** * @vue/shared v3.5.13 * (c) 2018-present Yuxi (Evan) You and Vue contributors * @license MIT **/ const NOOP = () => { }; const hasOwnProperty$d = Object.prototype.hasOwnProperty; const hasOwn = (val, key) => hasOwnProperty$d.call(val, key); const isArray$1 = Array.isArray; const isFunction$1 = (val) => typeof val === "function"; const isString$1 = (val) => typeof val === "string"; const isObject$1 = (val) => val !== null && typeof val === "object"; const cacheStringFunction = (fn2) => { const cache = /* @__PURE__ */ Object.create(null); return (str) => { const hit = cache[str]; return hit || (cache[str] = fn2(str)); }; }; const camelizeRE = /-(\w)/g; const camelize = cacheStringFunction( (str) => { return str.replace(camelizeRE, (_2, c2) => c2 ? c2.toUpperCase() : ""); } ); const hyphenateRE = /\B([A-Z])/g; const hyphenate = cacheStringFunction( (str) => str.replace(hyphenateRE, "-$1").toLowerCase() ); const capitalize$1 = cacheStringFunction((str) => { return str.charAt(0).toUpperCase() + str.slice(1); }); var freeGlobal = typeof global == "object" && global && global.Object === Object && global; var freeSelf = typeof self == "object" && self && self.Object === Object && self; var root = freeGlobal || freeSelf || Function("return this")(); var Symbol$1 = root.Symbol; var objectProto$f = Object.prototype; var hasOwnProperty$c = objectProto$f.hasOwnProperty; var nativeObjectToString$1 = objectProto$f.toString; var symToStringTag$1 = Symbol$1 ? Symbol$1.toStringTag : void 0; function getRawTag(value) { var isOwn = hasOwnProperty$c.call(value, symToStringTag$1), tag = value[symToStringTag$1]; try { value[symToStringTag$1] = void 0; var unmasked = true; } catch (e) { } var result = nativeObjectToString$1.call(value); if (unmasked) { if (isOwn) { value[symToStringTag$1] = tag; } else { delete value[symToStringTag$1]; } } return result; } var objectProto$e = Object.prototype; var nativeObjectToString = objectProto$e.toString; function objectToString(value) { return nativeObjectToString.call(value); } var nullTag = "[object Null]", undefinedTag = "[object Undefined]"; var symToStringTag = Symbol$1 ? Symbol$1.toStringTag : void 0; function baseGetTag(value) { if (value == null) { return value === void 0 ? undefinedTag : nullTag; } return symToStringTag && symToStringTag in Object(value) ? getRawTag(value) : objectToString(value); } function isObjectLike(value) { return value != null && typeof value == "object"; } var symbolTag$3 = "[object Symbol]"; function isSymbol(value) { return typeof value == "symbol" || isObjectLike(value) && baseGetTag(value) == symbolTag$3; } function arrayMap(array, iteratee) { var index = -1, length = array == null ? 0 : array.length, result = Array(length); while (++index < length) { result[index] = iteratee(array[index], index, array); } return result; } var isArray = Array.isArray; var symbolProto$2 = Symbol$1 ? Symbol$1.prototype : void 0, symbolToString = symbolProto$2 ? symbolProto$2.toString : void 0; function baseToString(value) { if (typeof value == "string") { return value; } if (isArray(value)) { return arrayMap(value, baseToString) + ""; } if (isSymbol(value)) { return symbolToString ? symbolToString.call(value) : ""; } var result = value + ""; return result == "0" && 1 / value == -Infinity ? "-0" : result; } var reWhitespace = /\s/; function trimmedEndIndex(string2) { var index = string2.length; while (index-- && reWhitespace.test(string2.charAt(index))) { } return index; } var reTrimStart = /^\s+/; function baseTrim(string2) { return string2 ? string2.slice(0, trimmedEndIndex(string2) + 1).replace(reTrimStart, "") : string2; } function isObject(value) { var type = typeof value; return value != null && (type == "object" || type == "function"); } var NAN = 0 / 0; var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; var reIsBinary = /^0b[01]+$/i; var reIsOctal = /^0o[0-7]+$/i; var freeParseInt = parseInt; function toNumber(value) { if (typeof value == "number") { return value; } if (isSymbol(value)) { return NAN; } if (isObject(value)) { var other = typeof value.valueOf == "function" ? value.valueOf() : value; value = isObject(other) ? other + "" : other; } if (typeof value != "string") { return value === 0 ? value : +value; } value = baseTrim(value); var isBinary = reIsBinary.test(value); return isBinary || reIsOctal.test(value) ? freeParseInt(value.slice(2), isBinary ? 2 : 8) : reIsBadHex.test(value) ? NAN : +value; } function identity$1(value) { return value; } var asyncTag = "[object AsyncFunction]", funcTag$2 = "[object Function]", genTag$1 = "[object GeneratorFunction]", proxyTag = "[object Proxy]"; function isFunction(value) { if (!isObject(value)) { return false; } var tag = baseGetTag(value); return tag == funcTag$2 || tag == genTag$1 || tag == asyncTag || tag == proxyTag; } var coreJsData = root["__core-js_shared__"]; var maskSrcKey = function() { var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ""); return uid ? "Symbol(src)_1." + uid : ""; }(); function isMasked(func) { return !!maskSrcKey && maskSrcKey in func; } var funcProto$2 = Function.prototype; var funcToString$2 = funcProto$2.toString; function toSource(func) { if (func != null) { try { return funcToString$2.call(func); } catch (e) { } try { return func + ""; } catch (e) { } } return ""; } var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; var reIsHostCtor = /^\[object .+?Constructor\]$/; var funcProto$1 = Function.prototype, objectProto$d = Object.prototype; var funcToString$1 = funcProto$1.toString; var hasOwnProperty$b = objectProto$d.hasOwnProperty; var reIsNative = RegExp( "^" + funcToString$1.call(hasOwnProperty$b).replace(reRegExpChar, "\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + "$" ); function baseIsNative(value) { if (!isObject(value) || isMasked(value)) { return false; } var pattern = isFunction(value) ? reIsNative : reIsHostCtor; return pattern.test(toSource(value)); } function getValue$1(object, key) { return object == null ? void 0 : object[key]; } function getNative(object, key) { var value = getValue$1(object, key); return baseIsNative(value) ? value : void 0; } var WeakMap = getNative(root, "WeakMap"); var objectCreate = Object.create; var baseCreate = /* @__PURE__ */ function() { function object() { } return function(proto) { if (!isObject(proto)) { return {}; } if (objectCreate) { return objectCreate(proto); } object.prototype = proto; var result = new object(); object.prototype = void 0; return result; }; }(); function apply(func, thisArg, args) { switch (args.length) { case 0: return func.call(thisArg); case 1: return func.call(thisArg, args[0]); case 2: return func.call(thisArg, args[0], args[1]); case 3: return func.call(thisArg, args[0], args[1], args[2]); } return func.apply(thisArg, args); } function copyArray(source, array) { var index = -1, length = source.length; array || (array = Array(length)); while (++index < length) { array[index] = source[index]; } return array; } var HOT_COUNT = 800, HOT_SPAN = 16; var nativeNow = Date.now; function shortOut(func) { var count = 0, lastCalled = 0; return function() { var stamp = nativeNow(), remaining = HOT_SPAN - (stamp - lastCalled); lastCalled = stamp; if (remaining > 0) { if (++count >= HOT_COUNT) { return arguments[0]; } } else { count = 0; } return func.apply(void 0, arguments); }; } function constant(value) { return function() { return value; }; } var defineProperty = function() { try { var func = getNative(Object, "defineProperty"); func({}, "", {}); return func; } catch (e) { } }(); var baseSetToString = !defineProperty ? identity$1 : function(func, string2) { return defineProperty(func, "toString", { "configurable": true, "enumerable": false, "value": constant(string2), "writable": true }); }; var setToString = shortOut(baseSetToString); function arrayEach(array, iteratee) { var index = -1, length = array == null ? 0 : array.length; while (++index < length) { if (iteratee(array[index], index, array) === false) { break; } } return array; } var MAX_SAFE_INTEGER$1 = 9007199254740991; var reIsUint = /^(?:0|[1-9]\d*)$/; function isIndex(value, length) { var type = typeof value; length = length == null ? MAX_SAFE_INTEGER$1 : length; return !!length && (type == "number" || type != "symbol" && reIsUint.test(value)) && (value > -1 && value % 1 == 0 && value < length); } function baseAssignValue(object, key, value) { if (key == "__proto__" && defineProperty) { defineProperty(object, key, { "configurable": true, "enumerable": true, "value": value, "writable": true }); } else { object[key] = value; } } function eq(value, other) { return value === other || value !== value && other !== other; } var objectProto$c = Object.prototype; var hasOwnProperty$a = objectProto$c.hasOwnProperty; function assignValue(object, key, value) { var objValue = object[key]; if (!(hasOwnProperty$a.call(object, key) && eq(objValue, value)) || value === void 0 && !(key in object)) { baseAssignValue(object, key, value); } } function copyObject(source, props, object, customizer) { var isNew = !object; object || (object = {}); var index = -1, length = props.length; while (++index < length) { var key = props[index]; var newValue = void 0; if (newValue === void 0) { newValue = source[key]; } if (isNew) { baseAssignValue(object, key, newValue); } else { assignValue(object, key, newValue); } } return object; } var nativeMax$1 = Math.max; function overRest(func, start, transform) { start = nativeMax$1(start === void 0 ? func.length - 1 : start, 0); return function() { var args = arguments, index = -1, length = nativeMax$1(args.length - start, 0), array = Array(length); while (++index < length) { array[index] = args[start + index]; } index = -1; var otherArgs = Array(start + 1); while (++index < start) { otherArgs[index] = args[index]; } otherArgs[start] = transform(array); return apply(func, this, otherArgs); }; } function baseRest(func, start) { return setToString(overRest(func, start, identity$1), func + ""); } var MAX_SAFE_INTEGER = 9007199254740991; function isLength(value) { return typeof value == "number" && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; } function isArrayLike(value) { return value != null && isLength(value.length) && !isFunction(value); } function isIterateeCall(value, index, object) { if (!isObject(object)) { return false; } var type = typeof index; if (type == "number" ? isArrayLike(object) && isIndex(index, object.length) : type == "string" && index in object) { return eq(object[index], value); } return false; } function createAssigner(assigner) { return baseRest(function(object, sources) { var index = -1, length = sources.length, customizer = length > 1 ? sources[length - 1] : void 0, guard = length > 2 ? sources[2] : void 0; customizer = assigner.length > 3 && typeof customizer == "function" ? (length--, customizer) : void 0; if (guard && isIterateeCall(sources[0], sources[1], guard)) { customizer = length < 3 ? void 0 : customizer; length = 1; } object = Object(object); while (++index < length) { var source = sources[index]; if (source) { assigner(object, source, index, customizer); } } return object; }); } var objectProto$b = Object.prototype; function isPrototype(value) { var Ctor = value && value.constructor, proto = typeof Ctor == "function" && Ctor.prototype || objectProto$b; return value === proto; } function baseTimes(n, iteratee) { var index = -1, result = Array(n); while (++index < n) { result[index] = iteratee(index); } return result; } var argsTag$3 = "[object Arguments]"; function baseIsArguments(value) { return isObjectLike(value) && baseGetTag(value) == argsTag$3; } var objectProto$a = Object.prototype; var hasOwnProperty$9 = objectProto$a.hasOwnProperty; var propertyIsEnumerable$1 = objectProto$a.propertyIsEnumerable; var isArguments = baseIsArguments(/* @__PURE__ */ function() { return arguments; }()) ? baseIsArguments : function(value) { return isObjectLike(value) && hasOwnProperty$9.call(value, "callee") && !propertyIsEnumerable$1.call(value, "callee"); }; function stubFalse() { return false; } var freeExports$2 = typeof exports == "object" && exports && !exports.nodeType && exports; var freeModule$2 = freeExports$2 && typeof module == "object" && module && !module.nodeType && module; var moduleExports$2 = freeModule$2 && freeModule$2.exports === freeExports$2; var Buffer$1 = moduleExports$2 ? root.Buffer : void 0; var nativeIsBuffer = Buffer$1 ? Buffer$1.isBuffer : void 0; var isBuffer = nativeIsBuffer || stubFalse; var argsTag$2 = "[object Arguments]", arrayTag$2 = "[object Array]", boolTag$3 = "[object Boolean]", dateTag$3 = "[object Date]", errorTag$2 = "[object Error]", funcTag$1 = "[object Function]", mapTag$5 = "[object Map]", numberTag$3 = "[object Number]", objectTag$4 = "[object Object]", regexpTag$3 = "[object RegExp]", setTag$5 = "[object Set]", stringTag$3 = "[object String]", weakMapTag$2 = "[object WeakMap]"; var arrayBufferTag$3 = "[object ArrayBuffer]", dataViewTag$4 = "[object DataView]", float32Tag$2 = "[object Float32Array]", float64Tag$2 = "[object Float64Array]", int8Tag$2 = "[object Int8Array]", int16Tag$2 = "[object Int16Array]", int32Tag$2 = "[object Int32Array]", uint8Tag$2 = "[object Uint8Array]", uint8ClampedTag$2 = "[object Uint8ClampedArray]", uint16Tag$2 = "[object Uint16Array]", uint32Tag$2 = "[object Uint32Array]"; var typedArrayTags = {}; typedArrayTags[float32Tag$2] = typedArrayTags[float64Tag$2] = typedArrayTags[int8Tag$2] = typedArrayTags[int16Tag$2] = typedArrayTags[int32Tag$2] = typedArrayTags[uint8Tag$2] = typedArrayTags[uint8ClampedTag$2] = typedArrayTags[uint16Tag$2] = typedArrayTags[uint32Tag$2] = true; typedArrayTags[argsTag$2] = typedArrayTags[arrayTag$2] = typedArrayTags[arrayBufferTag$3] = typedArrayTags[boolTag$3] = typedArrayTags[dataViewTag$4] = typedArrayTags[dateTag$3] = typedArrayTags[errorTag$2] = typedArrayTags[funcTag$1] = typedArrayTags[mapTag$5] = typedArrayTags[numberTag$3] = typedArrayTags[objectTag$4] = typedArrayTags[regexpTag$3] = typedArrayTags[setTag$5] = typedArrayTags[stringTag$3] = typedArrayTags[weakMapTag$2] = false; function baseIsTypedArray(value) { return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; } function baseUnary(func) { return function(value) { return func(value); }; } var freeExports$1 = typeof exports == "object" && exports && !exports.nodeType && exports; var freeModule$1 = freeExports$1 && typeof module == "object" && module && !module.nodeType && module; var moduleExports$1 = freeModule$1 && freeModule$1.exports === freeExports$1; var freeProcess = moduleExports$1 && freeGlobal.process; var nodeUtil = function() { try { var types2 = freeModule$1 && freeModule$1.require && freeModule$1.require("util").types; if (types2) { return types2; } return freeProcess && freeProcess.binding && freeProcess.binding("util"); } catch (e) { } }(); var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; var objectProto$9 = Object.prototype; var hasOwnProperty$8 = objectProto$9.hasOwnProperty; function arrayLikeKeys(value, inherited) { var isArr = isArray(value), isArg = !isArr && isArguments(value), isBuff = !isArr && !isArg && isBuffer(value), isType = !isArr && !isArg && !isBuff && isTypedArray(value), skipIndexes = isArr || isArg || isBuff || isType, result = skipIndexes ? baseTimes(value.length, String) : [], length = result.length; for (var key in value) { if ((inherited || hasOwnProperty$8.call(value, key)) && !(skipIndexes && // Safari 9 has enumerable `arguments.length` in strict mode. (key == "length" || // Node.js 0.10 has enumerable non-index properties on buffers. isBuff && (key == "offset" || key == "parent") || // PhantomJS 2 has enumerable non-index properties on typed arrays. isType && (key == "buffer" || key == "byteLength" || key == "byteOffset") || // Skip index properties. isIndex(key, length)))) { result.push(key); } } return result; } function overArg(func, transform) { return function(arg) { return func(transform(arg)); }; } var nativeKeys = overArg(Object.keys, Object); var objectProto$8 = Object.prototype; var hasOwnProperty$7 = objectProto$8.hasOwnProperty; function baseKeys(object) { if (!isPrototype(object)) { return nativeKeys(object); } var result = []; for (var key in Object(object)) { if (hasOwnProperty$7.call(object, key) && key != "constructor") { result.push(key); } } return result; } function keys(object) { return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); } function nativeKeysIn(object) { var result = []; if (object != null) { for (var key in Object(object)) { result.push(key); } } return result; } var objectProto$7 = Object.prototype; var hasOwnProperty$6 = objectProto$7.hasOwnProperty; function baseKeysIn(object) { if (!isObject(object)) { return nativeKeysIn(object); } var isProto = isPrototype(object), result = []; for (var key in object) { if (!(key == "constructor" && (isProto || !hasOwnProperty$6.call(object, key)))) { result.push(key); } } return result; } function keysIn(object) { return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); } var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, reIsPlainProp = /^\w*$/; function isKey(value, object) { if (isArray(value)) { return false; } var type = typeof value; if (type == "number" || type == "symbol" || type == "boolean" || value == null || isSymbol(value)) { return true; } return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || object != null && value in Object(object); } var nativeCreate = getNative(Object, "create"); function hashClear() { this.__data__ = nativeCreate ? nativeCreate(null) : {}; this.size = 0; } function hashDelete(key) { var result = this.has(key) && delete this.__data__[key]; this.size -= result ? 1 : 0; return result; } var HASH_UNDEFINED$2 = "__lodash_hash_undefined__"; var objectProto$6 = Object.prototype; var hasOwnProperty$5 = objectProto$6.hasOwnProperty; function hashGet(key) { var data = this.__data__; if (nativeCreate) { var result = data[key]; return result === HASH_UNDEFINED$2 ? void 0 : result; } return hasOwnProperty$5.call(data, key) ? data[key] : void 0; } var objectProto$5 = Object.prototype; var hasOwnProperty$4 = objectProto$5.hasOwnProperty; function hashHas(key) { var data = this.__data__; return nativeCreate ? data[key] !== void 0 : hasOwnProperty$4.call(data, key); } var HASH_UNDEFINED$1 = "__lodash_hash_undefined__"; function hashSet(key, value) { var data = this.__data__; this.size += this.has(key) ? 0 : 1; data[key] = nativeCreate && value === void 0 ? HASH_UNDEFINED$1 : value; return this; } function Hash(entries) { var index = -1, length = entries == null ? 0 : entries.length; this.clear(); while (++index < length) { var entry = entries[index]; this.set(entry[0], entry[1]); } } Hash.prototype.clear = hashClear; Hash.prototype["delete"] = hashDelete; Hash.prototype.get = hashGet; Hash.prototype.has = hashHas; Hash.prototype.set = hashSet; function listCacheClear() { this.__data__ = []; this.size = 0; } function assocIndexOf(array, key) { var length = array.length; while (length--) { if (eq(array[length][0], key)) { return length; } } return -1; } var arrayProto = Array.prototype; var splice = arrayProto.splice; function listCacheDelete(key) { var data = this.__data__, index = assocIndexOf(data, key); if (index < 0) { return false; } var lastIndex = data.length - 1; if (index == lastIndex) { data.pop(); } else { splice.call(data, index, 1); } --this.size; return true; } function listCacheGet(key) { var data = this.__data__, index = assocIndexOf(data, key); return index < 0 ? void 0 : data[index][1]; } function listCacheHas(key) { return assocIndexOf(this.__data__, key) > -1; } function listCacheSet(key, value) { var data = this.__data__, index = assocIndexOf(data, key); if (index < 0) { ++this.size; data.push([key, value]); } else { data[index][1] = value; } return this; } function ListCache(entries) { var index = -1, length = entries == null ? 0 : entries.length; this.clear(); while (++index < length) { var entry = entries[index]; this.set(entry[0], entry[1]); } } ListCache.prototype.clear = listCacheClear; ListCache.prototype["delete"] = listCacheDelete; ListCache.prototype.get = listCacheGet; ListCache.prototype.has = listCacheHas; ListCache.prototype.set = listCacheSet; var Map$1 = getNative(root, "Map"); function mapCacheClear() { this.size = 0; this.__data__ = { "hash": new Hash(), "map": new (Map$1 || ListCache)(), "string": new Hash() }; } function isKeyable(value) { var type = typeof value; return type == "string" || type == "number" || type == "symbol" || type == "boolean" ? value !== "__proto__" : value === null; } function getMapData(map2, key) { var data = map2.__data__; return isKeyable(key) ? data[typeof key == "string" ? "string" : "hash"] : data.map; } function mapCacheDelete(key) { var result = getMapData(this, key)["delete"](key); this.size -= result ? 1 : 0; return result; } function mapCacheGet(key) { return getMapData(this, key).get(key); } function mapCacheHas(key) { return getMapData(this, key).has(key); } function mapCacheSet(key, value) { var data = getMapData(this, key), size = data.size; data.set(key, value); this.size += data.size == size ? 0 : 1; return this; } function MapCache(entries) { var index = -1, length = entries == null ? 0 : entries.length; this.clear(); while (++index < length) { var entry = entries[index]; this.set(entry[0], entry[1]); } } MapCache.prototype.clear = mapCacheClear; MapCache.prototype["delete"] = mapCacheDelete; MapCache.prototype.get = mapCacheGet; MapCache.prototype.has = mapCacheHas; MapCache.prototype.set = mapCacheSet; var FUNC_ERROR_TEXT$1 = "Expected a function"; function memoize(func, resolver) { if (typeof func != "function" || resolver != null && typeof resolver != "function") { throw new TypeError(FUNC_ERROR_TEXT$1); } var memoized = function() { var args = arguments, key = resolver ? resolver.apply(this, args) : args[0], cache = memoized.cache; if (cache.has(key)) { return cache.get(key); } var result = func.apply(this, args); memoized.cache = cache.set(key, result) || cache; return result; }; memoized.cache = new (memoize.Cache || MapCache)(); return memoized; } memoize.Cache = MapCache; var MAX_MEMOIZE_SIZE = 500; function memoizeCapped(func) { var result = memoize(func, function(key) { if (cache.size === MAX_MEMOIZE_SIZE) { cache.clear(); } return key; }); var cache = result.cache; return result; } var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; var reEscapeChar = /\\(\\)?/g; var stringToPath = memoizeCapped(function(string2) { var result = []; if (string2.charCodeAt(0) === 46) { result.push(""); } string2.replace(rePropName, function(match, number, quote, subString) { result.push(quote ? subString.replace(reEscapeChar, "$1") : number || match); }); return result; }); function toString(value) { return value == null ? "" : baseToString(value); } function castPath(value, object) { if (isArray(value)) { return value; } return isKey(value, object) ? [value] : stringToPath(toString(value)); } function toKey(value) { if (typeof value == "string" || isSymbol(value)) { return value; } var result = value + ""; return result == "0" && 1 / value == -Infinity ? "-0" : result; } function baseGet(object, path) { path = castPath(path, object); var index = 0, length = path.length; while (object != null && index < length) { object = object[toKey(path[index++])]; } return index && index == length ? object : void 0; } function get(object, path, defaultValue) { var result = object == null ? void 0 : baseGet(object, path); return result === void 0 ? defaultValue : result; } function arrayPush(array, values) { var index = -1, length = values.length, offset = array.length; while (++index < length) { array[offset + index] = values[index]; } return array; } var spreadableSymbol = Symbol$1 ? Symbol$1.isConcatSpreadable : void 0; function isFlattenable(value) { return isArray(value) || isArguments(value) || !!(spreadableSymbol && value && value[spreadableSymbol]); } function baseFlatten(array, depth, predicate, isStrict, result) { var index = -1, length = array.length; predicate || (predicate = isFlattenable); result || (result = []); while (++index < length) { var value = array[index]; if (predicate(value)) { { arrayPush(result, value); } } else { result[result.length] = value; } } return result; } function flatten(array) { var length = array == null ? 0 : array.length; return length ? baseFlatten(array) : []; } function flatRest(func) { return setToString(overRest(func, void 0, flatten), func + ""); } var getPrototype = overArg(Object.getPrototypeOf, Object); var objectTag$3 = "[object Object]"; var funcProto = Function.prototype, objectProto$4 = Object.prototype; var funcToString = funcProto.toString; var hasOwnProperty$3 = objectProto$4.hasOwnProperty; var objectCtorString = funcToString.call(Object); function isPlainObject(value) { if (!isObjectLike(value) || baseGetTag(value) != objectTag$3) { return false; } var proto = getPrototype(value); if (proto === null) { return true; } var Ctor = hasOwnProperty$3.call(proto, "constructor") && proto.constructor; return typeof Ctor == "function" && Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString; } function castArray() { if (!arguments.length) { return []; } var value = arguments[0]; return isArray(value) ? value : [value]; } function stackClear() { this.__data__ = new ListCache(); this.size = 0; } function stackDelete(key) { var data = this.__data__, result = data["delete"](key); this.size = data.size; return result; } function stackGet(key) { return this.__data__.get(key); } function stackHas(key) { return this.__data__.has(key); } var LARGE_ARRAY_SIZE = 200; function stackSet(key, value) { var data = this.__data__; if (data instanceof ListCache) { var pairs = data.__data__; if (!Map$1 || pairs.length < LARGE_ARRAY_SIZE - 1) { pairs.push([key, value]); this.size = ++data.size; return this; } data = this.__data__ = new MapCache(pairs); } data.set(key, value); this.size = data.size; return this; } function Stack(entries) { var data = this.__data__ = new ListCache(entries); this.size = data.size; } Stack.prototype.clear = stackClear; Stack.prototype["delete"] = stackDelete; Stack.prototype.get = stackGet; Stack.prototype.has = stackHas; Stack.prototype.set = stackSet; function baseAssign(object, source) { return object && copyObject(source, keys(source), object); } function baseAssignIn(object, source) { return object && copyObject(source, keysIn(source), object); } var freeExports = typeof exports == "object" && exports && !exports.nodeType && exports; var freeModule = freeExports && typeof module == "object" && module && !module.nodeType && module; var moduleExports = freeModule && freeModule.exports === freeExports; var Buffer2 = moduleExports ? root.Buffer : void 0, allocUnsafe = Buffer2 ? Buffer2.allocUnsafe : void 0; function cloneBuffer(buffer, isDeep) { if (isDeep) { return buffer.slice(); } var length = buffer.length, result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length); buffer.copy(result); return result; } function arrayFilter(array, predicate) { var index = -1, length = array == null ? 0 : array.length, resIndex = 0, result = []; while (++index < length) { var value = array[index]; if (predicate(value, index, array)) { result[resIndex++] = value; } } return result; } function stubArray() { return []; } var objectProto$3 = Object.prototype; var propertyIsEnumerable = objectProto$3.propertyIsEnumerable; var nativeGetSymbols$1 = Object.getOwnPropertySymbols; var getSymbols = !nativeGetSymbols$1 ? stubArray : function(object) { if (object == null) { return []; } object = Object(object); return arrayFilter(nativeGetSymbols$1(object), function(symbol) { return propertyIsEnumerable.call(object, symbol); }); }; function copySymbols(source, object) { return copyObject(source, getSymbols(source), object); } var nativeGetSymbols = Object.getOwnPropertySymbols; var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) { var result = []; while (object) { arrayPush(result, getSymbols(object)); object = getPrototype(object); } return result; }; function copySymbolsIn(source, object) { return copyObject(source, getSymbolsIn(source), object); } function baseGetAllKeys(object, keysFunc, symbolsFunc) { var result = keysFunc(object); return isArray(object) ? result : arrayPush(result, symbolsFunc(object)); } function getAllKeys(object) { return baseGetAllKeys(object, keys, getSymbols); } var DataView = getNative(root, "DataView"); var Promise$1 = getNative(root, "Promise"); var Set$1 = getNative(root, "Set"); var mapTag$4 = "[object Map]", objectTag$2 = "[object Object]", promiseTag = "[object Promise]", setTag$4 = "[object Set]", weakMapTag$1 = "[object WeakMap]"; var dataViewTag$3 = "[object DataView]"; var dataViewCtorString = toSource(DataView), mapCtorString = toSource(Map$1), promiseCtorString = toSource(Promise$1), setCtorString = toSource(Set$1), weakMapCtorString = toSource(WeakMap); var getTag = baseGetTag; if (DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag$3 || Map$1 && getTag(new Map$1()) != mapTag$4 || Promise$1 && getTag(Promise$1.resolve()) != promiseTag || Set$1 && getTag(new Set$1()) != setTag$4 || WeakMap && getTag(new WeakMap()) != weakMapTag$1) { getTag = function(value) { var result = baseGetTag(value), Ctor = result == objectTag$2 ? value.constructor : void 0, ctorString = Ctor ? toSource(Ctor) : ""; if (ctorString) { switch (ctorString) { case dataViewCtorString: return dataViewTag$3; case mapCtorString: return mapTag$4; case promiseCtorString: return promiseTag; case setCtorString: return setTag$4; case weakMapCtorString: return weakMapTag$1; } } return result; }; } var objectProto$2 = Object.prototype; var hasOwnProperty$2 = objectProto$2.hasOwnProperty; function initCloneArray(array) { var length = array.length, result = new array.constructor(length); if (length && typeof array[0] == "string" && hasOwnProperty$2.call(array, "index")) { result.index = array.index; result.input = array.input; } return result; } var Uint8Array$1 = root.Uint8Array; function cloneArrayBuffer(arrayBuffer) { var result = new arrayBuffer.constructor(arrayBuffer.byteLength); new Uint8Array$1(result).set(new Uint8Array$1(arrayBuffer)); return result; } function cloneDataView(dataView, isDeep) { var buffer = dataView.buffer; return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); } var reFlags = /\w*$/; function cloneRegExp(regexp) { var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); result.lastIndex = regexp.lastIndex; return result; } var symbolProto$1 = Symbol$1 ? Symbol$1.prototype : void 0, symbolValueOf$1 = symbolProto$1 ? symbolProto$1.valueOf : void 0; function cloneSymbol(symbol) { return symbolValueOf$1 ? Object(symbolValueOf$1.call(symbol)) : {}; } function cloneTypedArray(typedArray, isDeep) { var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer; return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); } var boolTag$2 = "[object Boolean]", dateTag$2 = "[object Date]", mapTag$3 = "[object Map]", numberTag$2 = "[object Number]", regexpTag$2 = "[object RegExp]", setTag$3 = "[object Set]", stringTag$2 = "[object String]", symbolTag$2 = "[object Symbol]"; var arrayBufferTag$2 = "[object ArrayBuffer]", dataViewTag$2 = "[object DataView]", float32Tag$1 = "[object Float32Array]", float64Tag$1 = "[object Float64Array]", int8Tag$1 = "[object Int8Array]", int16Tag$1 = "[object Int16Array]", int32Tag$1 = "[object Int32Array]", uint8Tag$1 = "[object Uint8Array]", uint8ClampedTag$1 = "[object Uint8ClampedArray]", uint16Tag$1 = "[object Uint16Array]", uint32Tag$1 = "[object Uint32Array]"; function initCloneByTag(object, tag, isDeep) { var Ctor = object.constructor; switch (tag) { case arrayBufferTag$2: return cloneArrayBuffer(object); case boolTag$2: case dateTag$2: return new Ctor(+object); case dataViewTag$2: return cloneDataView(object); case float32Tag$1: case float64Tag$1: case int8Tag$1: case int16Tag$1: case int32Tag$1: case uint8Tag$1: case uint8ClampedTag$1: case uint16Tag$1: case uint32Tag$1: return cloneTypedArray(object, isDeep); case mapTag$3: return new Ctor(); case numberTag$2: case stringTag$2: return new Ctor(object); case regexpTag$2: return cloneRegExp(object); case setTag$3: return new Ctor(); case symbolTag$2: return cloneSymbol(object); } } function initCloneObject(object) { return typeof object.constructor == "function" && !isPrototype(object) ? baseCreate(getPrototype(object)) : {}; } var mapTag$2 = "[object Map]"; function baseIsMap(value) { return isObjectLike(value) && getTag(value) == mapTag$2; } var nodeIsMap = nodeUtil && nodeUtil.isMap; var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap; var setTag$2 = "[object Set]"; function baseIsSet(value) { return isObjectLike(value) && getTag(value) == setTag$2; } var nodeIsSet = nodeUtil && nodeUtil.isSet; var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet; var CLONE_DEEP_FLAG = 1, CLONE_FLAT_FLAG = 2; var argsTag$1 = "[object Arguments]", arrayTag$1 = "[object Array]", boolTag$1 = "[object Boolean]", dateTag$1 = "[object Date]", errorTag$1 = "[object Error]", funcTag = "[object Function]", genTag = "[object GeneratorFunction]", mapTag$1 = "[object Map]", numberTag$1 = "[object Number]", objectTag$1 = "[object Object]", regexpTag$1 = "[object RegExp]", setTag$1 = "[object Set]", stringTag$1 = "[object String]", symbolTag$1 = "[object Symbol]", weakMapTag = "[object WeakMap]"; var arrayBufferTag$1 = "[object ArrayBuffer]", dataViewTag$1 = "[object DataView]", float32Tag = "[object Float32Array]", float64Tag = "[object Float64Array]", int8Tag = "[object Int8Array]", int16Tag = "[object Int16Array]", int32Tag = "[object Int32Array]", uint8Tag = "[object Uint8Array]", uint8ClampedTag = "[object Uint8ClampedArray]", uint16Tag = "[object Uint16Array]", uint32Tag = "[object Uint32Array]"; var cloneableTags = {}; cloneableTags[argsTag$1] = cloneableTags[arrayTag$1] = cloneableTags[arrayBufferTag$1] = cloneableTags[dataViewTag$1] = cloneableTags[boolTag$1] = cloneableTags[dateTag$1] = cloneableTags[float32Tag] = cloneableTags[float64Tag] = cloneableTags[int8Tag] = cloneableTags[int16Tag] = cloneableTags[int32Tag] = cloneableTags[mapTag$1] = cloneableTags[numberTag$1] = cloneableTags[objectTag$1] = cloneableTags[regexpTag$1] = cloneableTags[setTag$1] = cloneableTags[stringTag$1] = cloneableTags[symbolTag$1] = cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true; cloneableTags[errorTag$1] = cloneableTags[funcTag] = cloneableTags[weakMapTag] = false; function baseClone(value, bitmask, customizer, key, object, stack) { var result, isDeep = bitmask & CLONE_DEEP_FLAG, isFlat = bitmask & CLONE_FLAT_FLAG; if (result !== void 0) { return result; } if (!isObject(value)) { return value; } var isArr = isArray(value); if (isArr) { result = initCloneArray(value); { return copyArray(value, result); } } else { var tag = getTag(value), isFunc = tag == funcTag || tag == genTag; if (isBuffer(value)) { return cloneBuffer(value, isDeep); } if (tag == objectTag$1 || tag == argsTag$1 || isFunc && !object) { result = isFunc ? {} : initCloneObject(value); { return isFlat ? copySymbolsIn(value, baseAssignIn(result, value)) : copySymbols(value, baseAssign(result, value)); } } else { if (!cloneableTags[tag]) { return object ? value : {}; } result = initCloneByTag(value, tag, isDeep); } } stack || (stack = new Stack()); var stacked = stack.get(value); if (stacked) { return stacked; } stack.set(value, result); if (isSet(value)) { value.forEach(function(subValue) { result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); }); } else if (isMap(value)) { value.forEach(function(subValue, key2) { result.set(key2, baseClone(subValue, bitmask, customizer, key2, value, stack)); }); } var keysFunc = getAllKeys; var props = isArr ? void 0 : keysFunc(value); arrayEach(props || value, function(subValue, key2) { if (props) { key2 = subValue; subValue = value[key2]; } assignValue(result, key2, baseClone(subValue, bitmask, customizer, key2, value, stack)); }); return result; } var CLONE_SYMBOLS_FLAG = 4; function clone(value) { return baseClone(value, CLONE_SYMBOLS_FLAG); } var HASH_UNDEFINED = "__lodash_hash_undefined__"; function setCacheAdd(value) { this.__data__.set(value, HASH_UNDEFINED); return this; } function setCacheHas(value) { return this.__data__.has(value); } function SetCache(values) { var index = -1, length = values == null ? 0 : values.length; this.__data__ = new MapCache(); while (++index < length) { this.add(values[index]); } } SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; SetCache.prototype.has = setCacheHas; function arraySome(array, predicate) { var index = -1, length = array == null ? 0 : array.length; while (++index < length) { if (predicate(array[index], index, array)) { return true; } } return false; } function cacheHas(cache, key) { return cache.has(key); } var COMPARE_PARTIAL_FLAG$5 = 1, COMPARE_UNORDERED_FLAG$3 = 2; function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { var isPartial = bitmask & COMPARE_PARTIAL_FLAG$5, arrLength = array.length, othLength = other.length; if (arrLength != othLength && !(isPartial && othLength > arrLength)) { return false; } var arrStacked = stack.get(array); var othStacked = stack.get(other); if (arrStacked && othStacked) { return arrStacked == other && othStacked == array; } var index = -1, result = true, seen = bitmask & COMPARE_UNORDERED_FLAG$3 ? new SetCache() : void 0; stack.set(array, other); stack.set(other, array); while (++index < arrLength) { var arrValue = array[index], othValue = other[index]; if (customizer) { var compared = isPartial ? customizer(othValue, arrValue, index, other, array, stack) : customizer(arrValue, othValue, index, array, other, stack); } if (compared !== void 0) { if (compared) { continue; } result = false; break; } if (seen) { if (!arraySome(other, function(othValue2, othIndex) { if (!cacheHas(seen, othIndex) && (arrValue === othValue2 || equalFunc(arrValue, othValue2, bitmask, customizer, stack))) { return seen.push(othIndex); } })) { result = false; break; } } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { result = false; break; } } stack["delete"](array); stack["delete"](other); return result; } function mapToArray(map2) { var index = -1, result = Array(map2.size); map2.forEach(function(value, key) { result[++index] = [key, value]; }); return result; } function setToArray(set2) { var index = -1, result = Array(set2.size); set2.forEach(function(value) { result[++index] = value; }); return result; } var COMPARE_PARTIAL_FLAG$4 = 1, COMPARE_UNORDERED_FLAG$2 = 2; var boolTag = "[object Boolean]", dateTag = "[object Date]", errorTag = "[object Error]", mapTag = "[object Map]", numberTag = "[object Number]", regexpTag = "[object RegExp]", setTag = "[object Set]", stringTag = "[object String]", symbolTag = "[object Symbol]"; var arrayBufferTag = "[object ArrayBuffer]", dataViewTag = "[object DataView]"; var symbolProto = Symbol$1 ? Symbol$1.prototype : void 0, symbolValueOf = symbolProto ? symbolProto.valueOf : void 0; function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { switch (tag) { case dataViewTag: if (object.byteLength != other.byteLength || object.byteOffset != other.byteOffset) { return false; } object = object.buffer; other = other.buffer; case arrayBufferTag: if (object.byteLength != other.byteLength || !equalFunc(new Uint8Array$1(object), new Uint8Array$1(other))) { return false; } return true; case boolTag: case dateTag: case numberTag: return eq(+object, +other); case errorTag: return object.name == other.name && object.message == other.message; case regexpTag: case stringTag: return object == other + ""; case mapTag: var convert = mapToArray; case setTag: var isPartial = bitmask & COMPARE_PARTIAL_FLAG$4; convert || (convert = setToArray); if (object.size != other.size && !isPartial) { return false; } var stacked = stack.get(object); if (stacked) { return stacked == other; } bitmask |= COMPARE_UNORDERED_FLAG$2; stack.set(object, other); var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); stack["delete"](object); return result; case symbolTag: if (symbolValueOf) { return symbolValueOf.call(object) == symbolValueOf.call(other); } } return false; } var COMPARE_PARTIAL_FLAG$3 = 1; var objectProto$1 = Object.prototype; var hasOwnProperty$1 = objectProto$1.hasOwnProperty; function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { var isPartial = bitmask & COMPARE_PARTIAL_FLAG$3, objProps = getAllKeys(object), objLength = objProps.length, othProps = getAllKeys(other), othLength = othProps.length; if (objLength != othLength && !isPartial) { return false; } var index = objLength; while (index--) { var key = objProps[index]; if (!(isPartial ? key in other : hasOwnProperty$1.call(other, key))) { return false; } } var objStacked = stack.get(object); var othStacked = stack.get(other); if (objStacked && othStacked) { return objStacked == other && othStacked == object; } var result = true; stack.set(object, other); stack.set(other, object); var skipCtor = isPartial; while (++index < objLength) { key = objProps[index]; var objValue = object[key], othValue = other[key]; if (customizer) { var compared = isPartial ? customizer(othValue, objValue, key, other, object, stack) : customizer(objValue, othValue, key, object, other, stack); } if (!(compared === void 0 ? objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack) : compared)) { result = false; break; } skipCtor || (skipCtor = key == "constructor"); } if (result && !skipCtor) { var objCtor = object.constructor, othCtor = other.constructor; if (objCtor != othCtor && ("constructor" in object && "constructor" in other) && !(typeof objCtor == "function" && objCtor instanceof objCtor && typeof othCtor == "function" && othCtor instanceof othCtor)) { result = false; } } stack["delete"](object); stack["delete"](other); return result; } var COMPARE_PARTIAL_FLAG$2 = 1; var argsTag = "[object Arguments]", arrayTag = "[object Array]", objectTag = "[object Object]"; var objectProto = Object.prototype; var hasOwnProperty = objectProto.hasOwnProperty; function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { var objIsArr = isArray(object), othIsArr = isArray(other), objTag = objIsArr ? arrayTag : getTag(object), othTag = othIsArr ? arrayTag : getTag(other); objTag = objTag == argsTag ? objectTag : objTag; othTag = othTag == argsTag ? objectTag : othTag; var objIsObj = objTag == objectTag, othIsObj = othTag == objectTag, isSameTag = objTag == othTag; if (isSameTag && isBuffer(object)) { if (!isBuffer(other)) { return false; } objIsArr = true; objIsObj = false; } if (isSameTag && !objIsObj) { stack || (stack = new Stack()); return objIsArr || isTypedArray(object) ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); } if (!(bitmask & COMPARE_PARTIAL_FLAG$2)) { var objIsWrapped = objIsObj && hasOwnProperty.call(object, "__wrapped__"), othIsWrapped = othIsObj && hasOwnProperty.call(other, "__wrapped__"); if (objIsWrapped || othIsWrapped) { var objUnwrapped = objIsWrapped ? object.value() : object, othUnwrapped = othIsWrapped ? other.value() : other; stack || (stack = new Stack()); return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); } } if (!isSameTag) { return false; } stack || (stack = new Stack()); return equalObjects(object, other, bitmask, customizer, equalFunc, stack); } function baseIsEqual(value, other, bitmask, customizer, stack) { if (value === other) { return true; } if (value == null || other == null || !isObjectLike(value) && !isObjectLike(other)) { return value !== value && other !== other; } return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); } var COMPARE_PARTIAL_FLAG$1 = 1, COMPARE_UNORDERED_FLAG$1 = 2; function baseIsMatch(object, source, matchData, customizer) { var index = matchData.length, length = index; if (object == null) { return !length; } object = Object(object); while (index--) { var data = matchData[index]; if (data[2] ? data[1] !== object[data[0]] : !(data[0] in object)) { return false; } } while (++index < length) { data = matchData[index]; var key = data[0], objValue = object[key], srcValue = data[1]; if (data[2]) { if (objValue === void 0 && !(key in object)) { return false; } } else { var stack = new Stack(); var result; if (!(result === void 0 ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG$1 | COMPARE_UNORDERED_FLAG$1, customizer, stack) : result)) { return false; } } } return true; } function isStrictComparable(value) { return value === value && !isObject(value); } function getMatchData(object) { var result = keys(object), length = result.length; while (length--) { var key = result[length], value = object[key]; result[length] = [key, value, isStrictComparable(value)]; } return result; } function matchesStrictComparable(key, srcValue) { return function(object) { if (object == null) { return false; } return object[key] === srcValue && (srcValue !== void 0 || key in Object(object)); }; } function baseMatches(source) { var matchData = getMatchData(source); if (matchData.length == 1 && matchData[0][2]) { return matchesStrictComparable(matchData[0][0], matchData[0][1]); } return function(object) { return object === source || baseIsMatch(object, source, matchData); }; } function baseHasIn(object, key) { return object != null && key in Object(object); } function hasPath(object, path, hasFunc) { path = castPath(path, object); var index = -1, length = path.length, result = false; while (++index < length) { var key = toKey(path[index]); if (!(result = object != null && hasFunc(object, key))) { break; } object = object[key]; } if (result || ++index != length) { return result; } length = object == null ? 0 : object.length; return !!length && isLength(length) && isIndex(key, length) && (isArray(object) || isArguments(object)); } function hasIn(object, path) { return object != null && hasPath(object, path, baseHasIn); } var COMPARE_PARTIAL_FLAG = 1, COMPARE_UNORDERED_FLAG = 2; function baseMatchesProperty(path, srcValue) { if (isKey(path) && isStrictComparable(srcValue)) { return matchesStrictComparable(toKey(path), srcValue); } return function(object) { var objValue = get(object, path); return objValue === void 0 && objValue === srcValue ? hasIn(object, path) : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG); }; } function baseProperty(key) { return function(object) { return object == null ? void 0 : object[key]; }; } function basePropertyDeep(path) { return function(object) { return baseGet(object, path); }; } function property(path) { return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path); } function baseIteratee(value) { if (typeof value == "function") { return value; } if (value == null) { return identity$1; } if (typeof value == "object") { return isArray(value) ? baseMatchesProperty(value[0], value[1]) : baseMatches(value); } return property(value); } function createBaseFor(fromRight) { return function(object, iteratee, keysFunc) { var index = -1, iterable = Object(object), props = keysFunc(object), length = props.length; while (length--) { var key = props[++index]; if (iteratee(iterable[key], key, iterable) === false) { break; } } return object; }; } var baseFor = createBaseFor(); function baseForOwn(object, iteratee) { return object && baseFor(object, iteratee, keys); } function createBaseEach(eachFunc, fromRight) { return function(collection, iteratee) { if (collection == null) { return collection; } if (!isArrayLike(collection)) { return eachFunc(collection, iteratee); } var length = collection.length, index = -1, iterable = Object(collection); while (++index < length) { if (iteratee(iterable[index], index, iterable) === false) { break; } } return collection; }; } var baseEach = createBaseEach(baseForOwn); var now = function() { return root.Date.now(); }; var FUNC_ERROR_TEXT = "Expected a function"; var nativeMax = Math.max, nativeMin = Math.min; function debounce(func, wait, options) { var lastArgs, lastThis, maxWait, result, timerId, lastCallTime, lastInvokeTime = 0, leading = false, maxing = false, trailing = true; if (typeof func != "function") { throw new TypeError(FUNC_ERROR_TEXT); } wait = toNumber(wait) || 0; if (isObject(options)) { leading = !!options.leading; maxing = "maxWait" in options; maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait; trailing = "trailing" in options ? !!options.trailing : trailing; } function invokeFunc(time) { var args = lastArgs, thisArg = lastThis; lastArgs = lastThis = void 0; lastInvokeTime = time; result = func.apply(thisArg, args); return result; } function leadingEdge(time) { lastInvokeTime = time; timerId = setTimeout(timerExpired, wait); return leading ? invokeFunc(time) : result; } function remainingWait(time) { var timeSinceLastCall = time - lastCallTime, timeSinceLastInvoke = time - lastInvokeTime, timeWaiting = wait - timeSinceLastCall; return maxing ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) : timeWaiting; } function shouldInvoke(time) { var timeSinceLastCall = time - lastCallTime, timeSinceLastInvoke = time - lastInvokeTime; return lastCallTime === void 0 || timeSinceLastCall >= wait || timeSinceLastCall < 0 || maxing && timeSinceLastInvoke >= maxWait; } function timerExpired() { var time = now(); if (shouldInvoke(time)) { return trailingEdge(time); } timerId = setTimeout(timerExpired, remainingWait(time)); } function trailingEdge(time) { timerId = void 0; if (trailing && lastArgs) { return invokeFunc(time); } lastArgs = lastThis = void 0; return result; } function cancel() { if (timerId !== void 0) { clearTimeout(timerId); } lastInvokeTime = 0; lastArgs = lastCallTime = lastThis = timerId = void 0; } function flush() { return timerId === void 0 ? result : trailingEdge(now()); } function debounced() { var time = now(), isInvoking = shouldInvoke(time); lastArgs = arguments; lastThis = this; lastCallTime = time; if (isInvoking) { if (timerId === void 0) { return leadingEdge(lastCallTime); } if (maxing) { clearTimeout(timerId); timerId = setTimeout(timerExpired, wait); return invokeFunc(lastCallTime); } } if (timerId === void 0) { timerId = setTimeout(timerExpired, wait); } return result; } debounced.cancel = cancel; debounced.flush = flush; return debounced; } function assignMergeValue(object, key, value) { if (value !== void 0 && !eq(object[key], value) || value === void 0 && !(key in object)) { baseAssignValue(object, key, value); } } function isArrayLikeObject(value) { return isObjectLike(value) && isArrayLike(value); } function safeGet(object, key) { if (key === "constructor" && typeof object[key] === "function") { return; } if (key == "__proto__") { return; } return object[key]; } function toPlainObject(value) { return copyObject(value, keysIn(value)); } function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) { var objValue = safeGet(object, key), srcValue = safeGet(source, key), stacked = stack.get(srcValue); if (stacked) { assignMergeValue(object, key, stacked); return; } var newValue = customizer ? customizer(objValue, srcValue, key + "", object, source, stack) : void 0; var isCommon = newValue === void 0; if (isCommon) { var isArr = isArray(srcValue), isBuff = !isArr && isBuffer(srcValue), isTyped = !isArr && !isBuff && isTypedArray(srcValue); newValue = srcValue; if (isArr || isBuff || isTyped) { if (isArray(objValue)) { newValue = objValue; } else if (isArrayLikeObject(objValue)) { newValue = copyArray(objValue); } else if (isBuff) { isCommon = false; newValue = cloneBuffer(srcValue, true); } else if (isTyped) { isCommon = false; newValue = cloneTypedArray(srcValue, true); } else { newValue = []; } } else if (isPlainObject(srcValue) || isArguments(srcValue)) { newValue = objValue; if (isArguments(objValue)) { newValue = toPlainObject(objValue); } else if (!isObject(objValue) || isFunction(objValue)) { newValue = initCloneObject(srcValue); } } else { isCommon = false; } } if (isCommon) { stack.set(srcValue, newValue); mergeFunc(newValue, srcValue, srcIndex, customizer, stack); stack["delete"](srcValue); } assignMergeValue(object, key, newValue); } function baseMerge(object, source, srcIndex, customizer, stack) { if (object === source) { return; } baseFor(source, function(srcValue, key) { stack || (stack = new Stack()); if (isObject(srcValue)) { baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack); } else { var newValue = customizer ? customizer(safeGet(object, key), srcValue, key + "", object, source, stack) : void 0; if (newValue === void 0) { newValue = srcValue; } assignMergeValue(object, key, newValue); } }, keysIn); } function baseMap(collection, iteratee) { var index = -1, result = isArrayLike(collection) ? Array(collection.length) : []; baseEach(collection, function(value, key, collection2) { result[++index] = iteratee(value, key, collection2); }); return result; } function map(collection, iteratee) { var func = isArray(collection) ? arrayMap : baseMap; return func(collection, baseIteratee(iteratee)); } function flatMap(collection, iteratee) { return baseFlatten(map(collection, iteratee)); } function fromPairs(pairs) { var index = -1, length = pairs == null ? 0 : pairs.length, result = {}; while (++index < length) { var pair = pairs[index]; result[pair[0]] = pair[1]; } return result; } function isEqual(value, other) { return baseIsEqual(value, other); } function isNil(value) { return value == null; } function isNull(value) { return value === null; } function isUndefined$1(value) { return value === void 0; } var merge = createAssigner(function(object, source, srcIndex) { baseMerge(object, source, srcIndex); }); function baseSet(object, path, value, customizer) { if (!isObject(object)) { return object; } path = castPath(path, object); var index = -1, length = path.length, lastIndex = length - 1, nested = object; while (nested != null && ++index < length) { var key = toKey(path[index]), newValue = value; if (key === "__proto__" || key === "constructor" || key === "prototype") { return object; } if (index != lastIndex) { var objValue = nested[key]; newValue = void 0; if (newValue === void 0) { newValue = isObject(objValue) ? objValue : isIndex(path[index + 1]) ? [] : {}; } } assignValue(nested, key, newValue); nested = nested[key]; } return object; } function basePickBy(object, paths, predicate) { var index = -1, length = paths.length, result = {}; while (++index < length) { var path = paths[index], value = baseGet(object, path); if (predicate(value, path)) { baseSet(result, castPath(path, object), value); } } return result; } function basePick(object, paths) { return basePickBy(object, paths, function(value, path) { return hasIn(object, path); }); } var pick = flatRest(function(object, paths) { return object == null ? {} : basePick(object, paths); }); function set(object, path, value) { return object == null ? object : baseSet(object, path, value); } const isUndefined = (val) => val === void 0; const isBoolean = (val) => typeof val === "boolean"; const isNumber = (val) => typeof val === "number"; const isElement = (e) => { if (typeof Element === "undefined") return false; return e instanceof Element; }; const isPropAbsent = (prop) => isNil(prop); const isStringNumber = (val) => { if (!isString$1(val)) { return false; } return !Number.isNaN(Number(val)); }; var __defProp$9 = Object.defineProperty; var __defProps$6 = Object.defineProperties; var __getOwnPropDescs$6 = Object.getOwnPropertyDescriptors; var __getOwnPropSymbols$b = Object.getOwnPropertySymbols; var __hasOwnProp$b = Object.prototype.hasOwnProperty; var __propIsEnum$b = Object.prototype.propertyIsEnumerable; var __defNormalProp$9 = (obj, key, value) => key in obj ? __defProp$9(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; var __spreadValues$9 = (a2, b2) => { for (var prop in b2 || (b2 = {})) if (__hasOwnProp$b.call(b2, prop)) __defNormalProp$9(a2, prop, b2[prop]); if (__getOwnPropSymbols$b) for (var prop of __getOwnPropSymbols$b(b2)) { if (__propIsEnum$b.call(b2, prop)) __defNormalProp$9(a2, prop, b2[prop]); } return a2; }; var __spreadProps$6 = (a2, b2) => __defProps$6(a2, __getOwnPropDescs$6(b2)); function computedEager(fn2, options) { var _a2; const result = vue.shallowRef(); vue.watchEffect(() => { result.value = fn2(); }, __spreadProps$6(__spreadValues$9({}, options), { flush: (_a2 = void 0) != null ? _a2 : "sync" })); return vue.readonly(result); } var _a; const isClient = typeof window !== "undefined"; const isString = (val) => typeof val === "string"; const noop = () => { }; const isIOS = isClient && ((_a = window == null ? void 0 : window.navigator) == null ? void 0 : _a.userAgent) && /iP(ad|hone|od)/.test(window.navigator.userAgent); function resolveUnref(r) { return typeof r === "function" ? r() : vue.unref(r); } function createFilterWrapper(filter, fn2) { function wrapper(...args) { return new Promise((resolve, reject) => { Promise.resolve(filter(() => fn2.apply(this, args), { fn: fn2, thisArg: this, args })).then(resolve).catch(reject); }); } return wrapper; } function debounceFilter(ms, options = {}) { let timer; let maxTimer; let lastRejector = noop; const _clearTimeout = (timer2) => { clearTimeout(timer2); lastRejector(); lastRejector = noop; }; const filter = (invoke) => { const duration = resolveUnref(ms); const maxDuration = resolveUnref(options.maxWait); if (timer) _clearTimeout(timer); if (duration <= 0 || maxDuration !== void 0 && maxDuration <= 0) { if (maxTimer) { _clearTimeout(maxTimer); maxTimer = null; } return Promise.resolve(invoke()); } return new Promise((resolve, reject) => { lastRejector = options.rejectOnCancel ? reject : resolve; if (maxDuration && !maxTimer) { maxTimer = setTimeout(() => { if (timer) _clearTimeout(timer); maxTimer = null; resolve(invoke()); }, maxDuration); } timer = setTimeout(() => { if (maxTimer) _clearTimeout(maxTimer); maxTimer = null; resolve(invoke()); }, duration); }); }; return filter; } function identity(arg) { return arg; } function tryOnScopeDispose(fn2) { if (vue.getCurrentScope()) { vue.onScopeDispose(fn2); return true; } return false; } function useDebounceFn(fn2, ms = 200, options = {}) { return createFilterWrapper(debounceFilter(ms, options), fn2); } function refDebounced(value, ms = 200, options = {}) { const debounced = vue.ref(value.value); const updater = useDebounceFn(() => { debounced.value = value.value; }, ms, options); vue.watch(value, () => updater()); return debounced; } function tryOnMounted(fn2, sync = true) { if (vue.getCurrentInstance()) vue.onMounted(fn2); else if (sync) fn2(); else vue.nextTick(fn2); } function useTimeoutFn(cb, interval, options = {}) { const { immediate = true } = options; const isPending = vue.ref(false); let timer = null; function clear() { if (timer) { clearTimeout(timer); timer = null; } } function stop() { isPending.value = false; clear(); } function start(...args) { clear(); isPending.value = true; timer = setTimeout(() => { isPending.value = false; timer = null; cb(...args); }, resolveUnref(interval)); } if (immediate) { isPending.value = true; if (isClient) start(); } tryOnScopeDispose(stop); return { isPending: vue.readonly(isPending), start, stop }; } function unrefElement(elRef) { var _a2; const plain = resolveUnref(elRef); return (_a2 = plain == null ? void 0 : plain.$el) != null ? _a2 : plain; } const defaultWindow = isClient ? window : void 0; const defaultDocument = isClient ? window.document : void 0; function useEventListener(...args) { let target; let events; let listeners; let options; if (isString(args[0]) || Array.isArray(args[0])) { [events, listeners, options] = args; target = defaultWindow; } else { [target, events, listeners, options] = args; } if (!target) return noop; if (!Array.isArray(events)) events = [events]; if (!Array.isArray(listeners)) listeners = [listeners]; const cleanups = []; const cleanup = () => { cleanups.forEach((fn2) => fn2()); cleanups.length = 0; }; const register = (el, event, listener, options2) => { el.addEventListener(event, listener, options2); return () => el.removeEventListener(event, listener, options2); }; const stopWatch = vue.watch(() => [unrefElement(target), resolveUnref(options)], ([el, options2]) => { cleanup(); if (!el) return; cleanups.push(...events.flatMap((event) => { return listeners.map((listener) => register(el, event, listener, options2)); })); }, { immediate: true, flush: "post" }); const stop = () => { stopWatch(); cleanup(); }; tryOnScopeDispose(stop); return stop; } let _iOSWorkaround = false; function onClickOutside(target, handler, options = {}) { const { window: window2 = defaultWindow, ignore = [], capture = true, detectIframe = false } = options; if (!window2) return; if (isIOS && !_iOSWorkaround) { _iOSWorkaround = true; Array.from(window2.document.body.children).forEach((el) => el.addEventListener("click", noop)); } let shouldListen = true; const shouldIgnore = (event) => { return ignore.some((target2) => { if (typeof target2 === "string") { return Array.from(window2.document.querySelectorAll(target2)).some((el) => el === event.target || event.composedPath().includes(el)); } else { const el = unrefElement(target2); return el && (event.target === el || event.composedPath().includes(el)); } }); }; const listener = (event) => { const el = unrefElement(target); if (!el || el === event.target || event.composedPath().includes(el)) return; if (event.detail === 0) shouldListen = !shouldIgnore(event); if (!shouldListen) { shouldListen = true; return; } handler(event); }; const cleanup = [ useEventListener(window2, "click", listener, { passive: true, capture }), useEventListener(window2, "pointerdown", (e) => { const el = unrefElement(target); if (el) shouldListen = !e.composedPath().includes(el) && !shouldIgnore(e); }, { passive: true }), detectIframe && useEventListener(window2, "blur", (event) => { var _a2; const el = unrefElement(target); if (((_a2 = window2.document.activeElement) == null ? void 0 : _a2.tagName) === "IFRAME" && !(el == null ? void 0 : el.contains(window2.document.activeElement))) handler(event); }) ].filter(Boolean); const stop = () => cleanup.forEach((fn2) => fn2()); return stop; } function useSupported(callback, sync = false) { const isSupported = vue.ref(); const update = () => isSupported.value = Boolean(callback()); update(); tryOnMounted(update, sync); return isSupported; } const _global = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {}; const globalKey = "__vueuse_ssr_handlers__"; _global[globalKey] = _global[globalKey] || {}; function useDocumentVisibility({ document: document2 = defaultDocument } = {}) { if (!document2) return vue.ref("visible"); const visibility = vue.ref(document2.visibilityState); useEventListener(document2, "visibilitychange", () => { visibility.value = document2.visibilityState; }); return visibility; } var __getOwnPropSymbols$g = Object.getOwnPropertySymbols; var __hasOwnProp$g = Object.prototype.hasOwnProperty; var __propIsEnum$g = Object.prototype.propertyIsEnumerable; var __objRest$2 = (source, exclude) => { var target = {}; for (var prop in source) if (__hasOwnProp$g.call(source, prop) && exclude.indexOf(prop) < 0) target[prop] = source[prop]; if (source != null && __getOwnPropSymbols$g) for (var prop of __getOwnPropSymbols$g(source)) { if (exclude.indexOf(prop) < 0 && __propIsEnum$g.call(source, prop)) target[prop] = source[prop]; } return target; }; function useResizeObserver(target, callback, options = {}) { const _a2 = options, { window: window2 = defaultWindow } = _a2, observerOptions = __objRest$2(_a2, ["window"]); let observer; const isSupported = useSupported(() => window2 && "ResizeObserver" in window2); const cleanup = () => { if (observer) { observer.disconnect(); observer = void 0; } }; const stopWatch = vue.watch(() => unrefElement(target), (el) => { cleanup(); if (isSupported.value && window2 && el) { observer = new ResizeObserver(callback); observer.observe(el, observerOptions); } }, { immediate: true, flush: "post" }); const stop = () => { cleanup(); stopWatch(); }; tryOnScopeDispose(stop); return { isSupported, stop }; } var SwipeDirection; (function(SwipeDirection2) { SwipeDirection2["UP"] = "UP"; SwipeDirection2["RIGHT"] = "RIGHT"; SwipeDirection2["DOWN"] = "DOWN"; SwipeDirection2["LEFT"] = "LEFT"; SwipeDirection2["NONE"] = "NONE"; })(SwipeDirection || (SwipeDirection = {})); var __defProp = Object.defineProperty; var __getOwnPropSymbols = Object.getOwnPropertySymbols; var __hasOwnProp = Object.prototype.hasOwnProperty; var __propIsEnum = Object.prototype.propertyIsEnumerable; var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; var __spreadValues = (a2, b2) => { for (var prop in b2 || (b2 = {})) if (__hasOwnProp.call(b2, prop)) __defNormalProp(a2, prop, b2[prop]); if (__getOwnPropSymbols) for (var prop of __getOwnPropSymbols(b2)) { if (__propIsEnum.call(b2, prop)) __defNormalProp(a2, prop, b2[prop]); } return a2; }; const _TransitionPresets = { easeInSine: [0.12, 0, 0.39, 0], easeOutSine: [0.61, 1, 0.88, 1], easeInOutSine: [0.37, 0, 0.63, 1], easeInQuad: [0.11, 0, 0.5, 0], easeOutQuad: [0.5, 1, 0.89, 1], easeInOutQuad: [0.45, 0, 0.55, 1], easeInCubic: [0.32, 0, 0.67, 0], easeOutCubic: [0.33, 1, 0.68, 1], easeInOutCubic: [0.65, 0, 0.35, 1], easeInQuart: [0.5, 0, 0.75, 0], easeOutQuart: [0.25, 1, 0.5, 1], easeInOutQuart: [0.76, 0, 0.24, 1], easeInQuint: [0.64, 0, 0.78, 0], easeOutQuint: [0.22, 1, 0.36, 1], easeInOutQuint: [0.83, 0, 0.17, 1], easeInExpo: [0.7, 0, 0.84, 0], easeOutExpo: [0.16, 1, 0.3, 1], easeInOutExpo: [0.87, 0, 0.13, 1], easeInCirc: [0.55, 0, 1, 0.45], easeOutCirc: [0, 0.55, 0.45, 1], easeInOutCirc: [0.85, 0, 0.15, 1], easeInBack: [0.36, 0, 0.66, -0.56], easeOutBack: [0.34, 1.56, 0.64, 1], easeInOutBack: [0.68, -0.6, 0.32, 1.6] }; __spreadValues({ linear: identity }, _TransitionPresets); function useWindowFocus({ window: window2 = defaultWindow } = {}) { if (!window2) return vue.ref(false); const focused = vue.ref(window2.document.hasFocus()); useEventListener(window2, "blur", () => { focused.value = false; }); useEventListener(window2, "focus", () => { focused.value = true; }); return focused; } class ElementPlusError extends Error { constructor(m2) { super(m2); this.name = "ElementPlusError"; } } function throwError(scope, m2) { throw new ElementPlusError(`[${scope}] ${m2}`); } function debugWarn(scope, message2) { } const initial = { current: 0 }; const zIndex = vue.ref(0); const defaultInitialZIndex = 2e3; const ZINDEX_INJECTION_KEY = Symbol("elZIndexContextKey"); const zIndexContextKey = Symbol("zIndexContextKey"); const useZIndex = (zIndexOverrides) => { const increasingInjection = vue.getCurrentInstance() ? vue.inject(ZINDEX_INJECTION_KEY, initial) : initial; const zIndexInjection = zIndexOverrides || (vue.getCurrentInstance() ? vue.inject(zIndexContextKey, void 0) : void 0); const initialZIndex = vue.computed(() => { const zIndexFromInjection = vue.unref(zIndexInjection); return isNumber(zIndexFromInjection) ? zIndexFromInjection : defaultInitialZIndex; }); const currentZIndex = vue.computed(() => initialZIndex.value + zIndex.value); const nextZIndex = () => { increasingInjection.current++; zIndex.value = increasingInjection.current; return currentZIndex.value; }; if (!isClient && !vue.inject(ZINDEX_INJECTION_KEY)) ; return { initialZIndex, currentZIndex, nextZIndex }; }; var English = { name: "en", el: { breadcrumb: { label: "Breadcrumb" }, colorpicker: { confirm: "OK", clear: "Clear", defaultLabel: "color picker", description: "current color is {color}. press enter to select a new color.", alphaLabel: "pick alpha value" }, datepicker: { now: "Now", today: "Today", cancel: "Cancel", clear: "Clear", confirm: "OK", dateTablePrompt: "Use the arrow keys and enter to select the day of the month", monthTablePrompt: "Use the arrow keys and enter to select the month", yearTablePrompt: "Use the arrow keys and enter to select the year", selectedDate: "Selected date", selectDate: "Select date", selectTime: "Select time", startDate: "Start Date", startTime: "Start Time", endDate: "End Date", endTime: "End Time", prevYear: "Previous Year", nextYear: "Next Year", prevMonth: "Previous Month", nextMonth: "Next Month", year: "", month1: "January", month2: "February", month3: "March", month4: "April", month5: "May", month6: "June", month7: "July", month8: "August", month9: "September", month10: "October", month11: "November", month12: "December", week: "week", weeks: { sun: "Sun", mon: "Mon", tue: "Tue", wed: "Wed", thu: "Thu", fri: "Fri", sat: "Sat" }, weeksFull: { sun: "Sunday", mon: "Monday", tue: "Tuesday", wed: "Wednesday", thu: "Thursday", fri: "Friday", sat: "Saturday" }, months: { jan: "Jan", feb: "Feb", mar: "Mar", apr: "Apr", may: "May", jun: "Jun", jul: "Jul", aug: "Aug", sep: "Sep", oct: "Oct", nov: "Nov", dec: "Dec" } }, inputNumber: { decrease: "decrease number", increase: "increase number" }, select: { loading: "Loading", noMatch: "No matching data", noData: "No data", placeholder: "Select" }, mention: { loading: "Loading" }, dropdown: { toggleDropdown: "Toggle Dropdown" }, cascader: { noMatch: "No matching data", loading: "Loading", placeholder: "Select", noData: "No data" }, pagination: { goto: "Go to", pagesize: "/page", total: "Total {total}", pageClassifier: "", page: "Page", prev: "Go to previous page", next: "Go to next page", currentPage: "page {pager}", prevPages: "Previous {pager} pages", nextPages: "Next {pager} pages", deprecationWarning: "Deprecated usages detected, please refer to the el-pagination documentation for more details" }, dialog: { close: "Close this dialog" }, drawer: { close: "Close this dialog" }, messagebox: { title: "Message", confirm: "OK", cancel: "Cancel", error: "Illegal input", close: "Close this dialog" }, upload: { deleteTip: "press delete to remove", delete: "Delete", preview: "Preview", continue: "Continue" }, slider: { defaultLabel: "slider between {min} and {max}", defaultRangeStartLabel: "pick start value", defaultRangeEndLabel: "pick end value" }, table: { emptyText: "No Data", confirmFilter: "Confirm", resetFilter: "Reset", clearFilter: "All", sumText: "Sum" }, tour: { next: "Next", previous: "Previous", finish: "Finish" }, tree: { emptyText: "No Data" }, transfer: { noMatch: "No matching data", noData: "No data", titles: ["List 1", "List 2"], filterPlaceholder: "Enter keyword", noCheckedFormat: "{total} items", hasCheckedFormat: "{checked}/{total} checked" }, image: { error: "FAILED" }, pageHeader: { title: "Back" }, popconfirm: { confirmButtonText: "Yes", cancelButtonText: "No" }, carousel: { leftArrow: "Carousel arrow left", rightArrow: "Carousel arrow right", indicator: "Carousel switch to index {index}" } } }; const buildTranslator = (locale) => (path, option) => translate(path, option, vue.unref(locale)); const translate = (path, option, locale) => get(locale, path, path).replace(/\{(\w+)\}/g, (_2, key) => { var _a2; return `${(_a2 = option == null ? void 0 : option[key]) != null ? _a2 : `{${key}}`}`; }); const buildLocaleContext = (locale) => { const lang = vue.computed(() => vue.unref(locale).name); const localeRef = vue.isRef(locale) ? locale : vue.ref(locale); return { lang, locale: localeRef, t: buildTranslator(locale) }; }; const localeContextKey = Symbol("localeContextKey"); const useLocale = (localeOverrides) => { const locale = localeOverrides || vue.inject(localeContextKey, vue.ref()); return buildLocaleContext(vue.computed(() => locale.value || English)); }; const epPropKey = "__epPropKey"; const definePropType = (val) => val; const isEpProp = (val) => isObject$1(val) && !!val[epPropKey]; const buildProp = (prop, key) => { if (!isObject$1(prop) || isEpProp(prop)) return prop; const { values, required, default: defaultValue, type, validator } = prop; const _validator = values || validator ? (val) => { let valid = false; let allowedValues = []; if (values) { allowedValues = Array.from(values); if (hasOwn(prop, "default")) { allowedValues.push(defaultValue); } valid || (valid = allowedValues.includes(val)); } if (validator) valid || (valid = validator(val)); if (!valid && allowedValues.length > 0) { const allowValuesText = [...new Set(allowedValues)].map((value) => JSON.stringify(value)).join(", "); vue.warn(`Invalid prop: validation failed${key ? ` for prop "${key}"` : ""}. Expected one of [${allowValuesText}], got value ${JSON.stringify(val)}.`); } return valid; } : void 0; const epProp = { type, required: !!required, validator: _validator, [epPropKey]: true }; if (hasOwn(prop, "default")) epProp.default = defaultValue; return epProp; }; const buildProps = (props) => fromPairs(Object.entries(props).map(([key, option]) => [ key, buildProp(option, key) ])); const componentSizes = ["", "default", "small", "large"]; const useSizeProp = buildProp({ type: String, values: componentSizes, required: false }); const SIZE_INJECTION_KEY = Symbol("size"); const useGlobalSize = () => { const injectedSize = vue.inject(SIZE_INJECTION_KEY, {}); return vue.computed(() => { return vue.unref(injectedSize.size) || ""; }); }; const emptyValuesContextKey = Symbol("emptyValuesContextKey"); const useEmptyValuesProps = buildProps({ emptyValues: Array, valueOnClear: { type: [String, Number, Boolean, Function], default: void 0, validator: (val) => isFunction$1(val) ? !val() : !val } }); const keysOf = (arr) => Object.keys(arr); const getProp = (obj, path, defaultValue) => { return { get value() { return get(obj, path, defaultValue); }, set value(val) { set(obj, path, val); } }; }; const globalConfig = vue.ref(); function useGlobalConfig(key, defaultValue = void 0) { const config = vue.getCurrentInstance() ? vue.inject(configProviderContextKey, globalConfig) : globalConfig; if (key) { return vue.computed(() => { var _a2, _b; return (_b = (_a2 = config.value) == null ? void 0 : _a2[key]) != null ? _b : defaultValue; }); } else { return config; } } function useGlobalComponentSettings(block, sizeFallback) { const config = useGlobalConfig(); const ns = useNamespace(block, vue.computed(() => { var _a2; return ((_a2 = config.value) == null ? void 0 : _a2.namespace) || defaultNamespace; })); const locale = useLocale(vue.computed(() => { var _a2; return (_a2 = config.value) == null ? void 0 : _a2.locale; })); const zIndex2 = useZIndex(vue.computed(() => { var _a2; return ((_a2 = config.value) == null ? void 0 : _a2.zIndex) || defaultInitialZIndex; })); const size = vue.computed(() => { var _a2; return vue.unref(sizeFallback) || ((_a2 = config.value) == null ? void 0 : _a2.size) || ""; }); provideGlobalConfig(vue.computed(() => vue.unref(config) || {})); return { ns, locale, zIndex: zIndex2, size }; } const provideGlobalConfig = (config, app, global2 = false) => { var _a2; const inSetup = !!vue.getCurrentInstance(); const oldConfig = inSetup ? useGlobalConfig() : void 0; const provideFn = (_a2 = void 0) != null ? _a2 : inSetup ? vue.provide : void 0; if (!provideFn) { return; } const context = vue.computed(() => { const cfg = vue.unref(config); if (!(oldConfig == null ? void 0 : oldConfig.value)) return cfg; return mergeConfig(oldConfig.value, cfg); }); provideFn(configProviderContextKey, context); provideFn(localeContextKey, vue.computed(() => context.value.locale)); provideFn(namespaceContextKey, vue.computed(() => context.value.namespace)); provideFn(zIndexContextKey, vue.computed(() => context.value.zIndex)); provideFn(SIZE_INJECTION_KEY, { size: vue.computed(() => context.value.size || "") }); provideFn(emptyValuesContextKey, vue.computed(() => ({ emptyValues: context.value.emptyValues, valueOnClear: context.value.valueOnClear }))); if (global2 || !globalConfig.value) { globalConfig.value = context.value; } return context; }; const mergeConfig = (a2, b2) => { const keys2 = [.../* @__PURE__ */ new Set([...keysOf(a2), ...keysOf(b2)])]; const obj = {}; for (const key of keys2) { obj[key] = b2[key] !== void 0 ? b2[key] : a2[key]; } return obj; }; const UPDATE_MODEL_EVENT = "update:modelValue"; const CHANGE_EVENT = "change"; const INPUT_EVENT = "input"; var _export_sfc$1 = (sfc, props) => { const target = sfc.__vccOpts || sfc; for (const [key, val] of props) { target[key] = val; } return target; }; const rAF = (fn2) => isClient ? window.requestAnimationFrame(fn2) : setTimeout(fn2, 16); const classNameToArray = (cls = "") => cls.split(" ").filter((item) => !!item.trim()); const hasClass = (el, cls) => { if (!el || !cls) return false; if (cls.includes(" ")) throw new Error("className should not contain space."); return el.classList.contains(cls); }; const addClass = (el, cls) => { if (!el || !cls.trim()) return; el.classList.add(...classNameToArray(cls)); }; const removeClass = (el, cls) => { if (!el || !cls.trim()) return; el.classList.remove(...classNameToArray(cls)); }; const getStyle = (element, styleName) => { var _a2; if (!isClient || !element || !styleName) return ""; let key = camelize(styleName); if (key === "float") key = "cssFloat"; try { const style = element.style[key]; if (style) return style; const computed2 = (_a2 = document.defaultView) == null ? void 0 : _a2.getComputedStyle(element, ""); return computed2 ? computed2[key] : ""; } catch (e) { return element.style[key]; } }; function addUnit(value, defaultUnit = "px") { if (!value) return ""; if (isNumber(value) || isStringNumber(value)) { return `${value}${defaultUnit}`; } else if (isString$1(value)) { return value; } } let scrollBarWidth; const getScrollBarWidth = (namespace) => { var _a2; if (!isClient) return 0; if (scrollBarWidth !== void 0) return scrollBarWidth; const outer = document.createElement("div"); outer.className = `${namespace}-scrollbar__wrap`; outer.style.visibility = "hidden"; outer.style.width = "100px"; outer.style.position = "absolute"; outer.style.top = "-9999px"; document.body.appendChild(outer); const widthNoScroll = outer.offsetWidth; outer.style.overflow = "scroll"; const inner = document.createElement("div"); inner.style.width = "100%"; outer.appendChild(inner); const widthWithScroll = inner.offsetWidth; (_a2 = outer.parentNode) == null ? void 0 : _a2.removeChild(outer); scrollBarWidth = widthNoScroll - widthWithScroll; return scrollBarWidth; }; const withInstall = (main, extra) => { main.install = (app) => { for (const comp of [main, ...Object.values(extra != null ? extra : {})]) { app.component(comp.name, comp); } }; if (extra) { for (const [key, comp] of Object.entries(extra)) { main[key] = comp; } } return main; }; const withInstallFunction = (fn2, name) => { fn2.install = (app) => { fn2._context = app._context; app.config.globalProperties[name] = fn2; }; return fn2; }; const withNoopInstall = (component) => { component.install = NOOP; return component; }; const iconProps = buildProps({ size: { type: definePropType([Number, String]) }, color: { type: String } }); const __default__$r = vue.defineComponent({ name: "ElIcon", inheritAttrs: false }); const _sfc_main$J = /* @__PURE__ */ vue.defineComponent({ ...__default__$r, props: iconProps, setup(__props) { const props = __props; const ns = useNamespace("icon"); const style = vue.computed(() => { const { size, color } = props; if (!size && !color) return {}; return { fontSize: isUndefined(size) ? void 0 : addUnit(size), "--color": color }; }); return (_ctx, _cache) => { return vue.openBlock(), vue.createElementBlock("i", vue.mergeProps({ class: vue.unref(ns).b(), style: vue.unref(style) }, _ctx.$attrs), [ vue.renderSlot(_ctx.$slots, "default") ], 16); }; } }); var Icon = /* @__PURE__ */ _export_sfc$1(_sfc_main$J, [["__file", "icon.vue"]]); const ElIcon = withInstall(Icon); /*! Element Plus Icons Vue v2.3.1 */ var arrow_down_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ vue.defineComponent({ name: "ArrowDown", __name: "arrow-down", setup(__props) { return (_ctx, _cache) => (vue.openBlock(), vue.createElementBlock("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 1024 1024" }, [ vue.createElementVNode("path", { fill: "currentColor", d: "M831.872 340.864 512 652.672 192.128 340.864a30.592 30.592 0 0 0-42.752 0 29.12 29.12 0 0 0 0 41.6L489.664 714.24a32 32 0 0 0 44.672 0l340.288-331.712a29.12 29.12 0 0 0 0-41.728 30.592 30.592 0 0 0-42.752 0z" }) ])); } }); var arrow_down_default = arrow_down_vue_vue_type_script_setup_true_lang_default; var arrow_left_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ vue.defineComponent({ name: "ArrowLeft", __name: "arrow-left", setup(__props) { return (_ctx, _cache) => (vue.openBlock(), vue.createElementBlock("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 1024 1024" }, [ vue.createElementVNode("path", { fill: "currentColor", d: "M609.408 149.376 277.76 489.6a32 32 0 0 0 0 44.672l331.648 340.352a29.12 29.12 0 0 0 41.728 0 30.592 30.592 0 0 0 0-42.752L339.264 511.936l311.872-319.872a30.592 30.592 0 0 0 0-42.688 29.12 29.12 0 0 0-41.728 0z" }) ])); } }); var arrow_left_default = arrow_left_vue_vue_type_script_setup_true_lang_default; var arrow_right_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ vue.defineComponent({ name: "ArrowRight", __name: "arrow-right", setup(__props) { return (_ctx, _cache) => (vue.openBlock(), vue.createElementBlock("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 1024 1024" }, [ vue.createElementVNode("path", { fill: "currentColor", d: "M340.864 149.312a30.592 30.592 0 0 0 0 42.752L652.736 512 340.864 831.872a30.592 30.592 0 0 0 0 42.752 29.12 29.12 0 0 0 41.728 0L714.24 534.336a32 32 0 0 0 0-44.672L382.592 149.376a29.12 29.12 0 0 0-41.728 0z" }) ])); } }); var arrow_right_default = arrow_right_vue_vue_type_script_setup_true_lang_default; var arrow_up_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ vue.defineComponent({ name: "ArrowUp", __name: "arrow-up", setup(__props) { return (_ctx, _cache) => (vue.openBlock(), vue.createElementBlock("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 1024 1024" }, [ vue.createElementVNode("path", { fill: "currentColor", d: "m488.832 344.32-339.84 356.672a32 32 0 0 0 0 44.16l.384.384a29.44 29.44 0 0 0 42.688 0l320-335.872 319.872 335.872a29.44 29.44 0 0 0 42.688 0l.384-.384a32 32 0 0 0 0-44.16L535.168 344.32a32 32 0 0 0-46.336 0" }) ])); } }); var arrow_up_default = arrow_up_vue_vue_type_script_setup_true_lang_default; var circle_check_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ vue.defineComponent({ name: "CircleCheck", __name: "circle-check", setup(__props) { return (_ctx, _cache) => (vue.openBlock(), vue.createElementBlock("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 1024 1024" }, [ vue.createElementVNode("path", { fill: "currentColor", d: "M512 896a384 384 0 1 0 0-768 384 384 0 0 0 0 768m0 64a448 448 0 1 1 0-896 448 448 0 0 1 0 896" }), vue.createElementVNode("path", { fill: "currentColor", d: "M745.344 361.344a32 32 0 0 1 45.312 45.312l-288 288a32 32 0 0 1-45.312 0l-160-160a32 32 0 1 1 45.312-45.312L480 626.752l265.344-265.408z" }) ])); } }); var circle_check_default = circle_check_vue_vue_type_script_setup_true_lang_default; var circle_close_filled_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ vue.defineComponent({ name: "CircleCloseFilled", __name: "circle-close-filled", setup(__props) { return (_ctx, _cache) => (vue.openBlock(), vue.createElementBlock("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 1024 1024" }, [ vue.createElementVNode("path", { fill: "currentColor", d: "M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m0 393.664L407.936 353.6a38.4 38.4 0 1 0-54.336 54.336L457.664 512 353.6 616.064a38.4 38.4 0 1 0 54.336 54.336L512 566.336 616.064 670.4a38.4 38.4 0 1 0 54.336-54.336L566.336 512 670.4 407.936a38.4 38.4 0 1 0-54.336-54.336z" }) ])); } }); var circle_close_filled_default = circle_close_filled_vue_vue_type_script_setup_true_lang_default; var circle_close_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ vue.defineComponent({ name: "CircleClose", __name: "circle-close", setup(__props) { return (_ctx, _cache) => (vue.openBlock(), vue.createElementBlock("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 1024 1024" }, [ vue.createElementVNode("path", { fill: "currentColor", d: "m466.752 512-90.496-90.496a32 32 0 0 1 45.248-45.248L512 466.752l90.496-90.496a32 32 0 1 1 45.248 45.248L557.248 512l90.496 90.496a32 32 0 1 1-45.248 45.248L512 557.248l-90.496 90.496a32 32 0 0 1-45.248-45.248z" }), vue.createElementVNode("path", { fill: "currentColor", d: "M512 896a384 384 0 1 0 0-768 384 384 0 0 0 0 768m0 64a448 448 0 1 1 0-896 448 448 0 0 1 0 896" }) ])); } }); var circle_close_default = circle_close_vue_vue_type_script_setup_true_lang_default; var close_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ vue.defineComponent({ name: "Close", __name: "close", setup(__props) { return (_ctx, _cache) => (vue.openBlock(), vue.createElementBlock("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 1024 1024" }, [ vue.createElementVNode("path", { fill: "currentColor", d: "M764.288 214.592 512 466.88 259.712 214.592a31.936 31.936 0 0 0-45.12 45.12L466.752 512 214.528 764.224a31.936 31.936 0 1 0 45.12 45.184L512 557.184l252.288 252.288a31.936 31.936 0 0 0 45.12-45.12L557.12 512.064l252.288-252.352a31.936 31.936 0 1 0-45.12-45.184z" }) ])); } }); var close_default = close_vue_vue_type_script_setup_true_lang_default; var hide_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ vue.defineComponent({ name: "Hide", __name: "hide", setup(__props) { return (_ctx, _cache) => (vue.openBlock(), vue.createElementBlock("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 1024 1024" }, [ vue.createElementVNode("path", { fill: "currentColor", d: "M876.8 156.8c0-9.6-3.2-16-9.6-22.4-6.4-6.4-12.8-9.6-22.4-9.6-9.6 0-16 3.2-22.4 9.6L736 220.8c-64-32-137.6-51.2-224-60.8-160 16-288 73.6-377.6 176C44.8 438.4 0 496 0 512s48 73.6 134.4 176c22.4 25.6 44.8 48 73.6 67.2l-86.4 89.6c-6.4 6.4-9.6 12.8-9.6 22.4 0 9.6 3.2 16 9.6 22.4 6.4 6.4 12.8 9.6 22.4 9.6 9.6 0 16-3.2 22.4-9.6l704-710.4c3.2-6.4 6.4-12.8 6.4-22.4Zm-646.4 528c-76.8-70.4-128-128-153.6-172.8 28.8-48 80-105.6 153.6-172.8C304 272 400 230.4 512 224c64 3.2 124.8 19.2 176 44.8l-54.4 54.4C598.4 300.8 560 288 512 288c-64 0-115.2 22.4-160 64s-64 96-64 160c0 48 12.8 89.6 35.2 124.8L256 707.2c-9.6-6.4-19.2-16-25.6-22.4Zm140.8-96c-12.8-22.4-19.2-48-19.2-76.8 0-44.8 16-83.2 48-112 32-28.8 67.2-48 112-48 28.8 0 54.4 6.4 73.6 19.2zM889.599 336c-12.8-16-28.8-28.8-41.6-41.6l-48 48c73.6 67.2 124.8 124.8 150.4 169.6-28.8 48-80 105.6-153.6 172.8-73.6 67.2-172.8 108.8-284.8 115.2-51.2-3.2-99.2-12.8-140.8-28.8l-48 48c57.6 22.4 118.4 38.4 188.8 44.8 160-16 288-73.6 377.6-176C979.199 585.6 1024 528 1024 512s-48.001-73.6-134.401-176Z" }), vue.createElementVNode("path", { fill: "currentColor", d: "M511.998 672c-12.8 0-25.6-3.2-38.4-6.4l-51.2 51.2c28.8 12.8 57.6 19.2 89.6 19.2 64 0 115.2-22.4 160-64 41.6-41.6 64-96 64-160 0-32-6.4-64-19.2-89.6l-51.2 51.2c3.2 12.8 6.4 25.6 6.4 38.4 0 44.8-16 83.2-48 112-32 28.8-67.2 48-112 48Z" }) ])); } }); var hide_default = hide_vue_vue_type_script_setup_true_lang_default; var info_filled_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ vue.defineComponent({ name: "InfoFilled", __name: "info-filled", setup(__props) { return (_ctx, _cache) => (vue.openBlock(), vue.createElementBlock("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 1024 1024" }, [ vue.createElementVNode("path", { fill: "currentColor", d: "M512 64a448 448 0 1 1 0 896.064A448 448 0 0 1 512 64m67.2 275.072c33.28 0 60.288-23.104 60.288-57.344s-27.072-57.344-60.288-57.344c-33.28 0-60.16 23.104-60.16 57.344s26.88 57.344 60.16 57.344M590.912 699.2c0-6.848 2.368-24.64 1.024-34.752l-52.608 60.544c-10.88 11.456-24.512 19.392-30.912 17.28a12.992 12.992 0 0 1-8.256-14.72l87.68-276.992c7.168-35.136-12.544-67.2-54.336-71.296-44.096 0-108.992 44.736-148.48 101.504 0 6.784-1.28 23.68.064 33.792l52.544-60.608c10.88-11.328 23.552-19.328 29.952-17.152a12.8 12.8 0 0 1 7.808 16.128L388.48 728.576c-10.048 32.256 8.96 63.872 55.04 71.04 67.84 0 107.904-43.648 147.456-100.416z" }) ])); } }); var info_filled_default = info_filled_vue_vue_type_script_setup_true_lang_default; var loading_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ vue.defineComponent({ name: "Loading", __name: "loading", setup(__props) { return (_ctx, _cache) => (vue.openBlock(), vue.createElementBlock("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 1024 1024" }, [ vue.createElementVNode("path", { fill: "currentColor", d: "M512 64a32 32 0 0 1 32 32v192a32 32 0 0 1-64 0V96a32 32 0 0 1 32-32m0 640a32 32 0 0 1 32 32v192a32 32 0 1 1-64 0V736a32 32 0 0 1 32-32m448-192a32 32 0 0 1-32 32H736a32 32 0 1 1 0-64h192a32 32 0 0 1 32 32m-640 0a32 32 0 0 1-32 32H96a32 32 0 0 1 0-64h192a32 32 0 0 1 32 32M195.2 195.2a32 32 0 0 1 45.248 0L376.32 331.008a32 32 0 0 1-45.248 45.248L195.2 240.448a32 32 0 0 1 0-45.248zm452.544 452.544a32 32 0 0 1 45.248 0L828.8 783.552a32 32 0 0 1-45.248 45.248L647.744 692.992a32 32 0 0 1 0-45.248zM828.8 195.264a32 32 0 0 1 0 45.184L692.992 376.32a32 32 0 0 1-45.248-45.248l135.808-135.808a32 32 0 0 1 45.248 0m-452.544 452.48a32 32 0 0 1 0 45.248L240.448 828.8a32 32 0 0 1-45.248-45.248l135.808-135.808a32 32 0 0 1 45.248 0z" }) ])); } }); var loading_default = loading_vue_vue_type_script_setup_true_lang_default; var plus_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ vue.defineComponent({ name: "Plus", __name: "plus", setup(__props) { return (_ctx, _cache) => (vue.openBlock(), vue.createElementBlock("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 1024 1024" }, [ vue.createElementVNode("path", { fill: "currentColor", d: "M480 480V128a32 32 0 0 1 64 0v352h352a32 32 0 1 1 0 64H544v352a32 32 0 1 1-64 0V544H128a32 32 0 0 1 0-64z" }) ])); } }); var plus_default = plus_vue_vue_type_script_setup_true_lang_default; var success_filled_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ vue.defineComponent({ name: "SuccessFilled", __name: "success-filled", setup(__props) { return (_ctx, _cache) => (vue.openBlock(), vue.createElementBlock("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 1024 1024" }, [ vue.createElementVNode("path", { fill: "currentColor", d: "M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m-55.808 536.384-99.52-99.584a38.4 38.4 0 1 0-54.336 54.336l126.72 126.72a38.272 38.272 0 0 0 54.336 0l262.4-262.464a38.4 38.4 0 1 0-54.272-54.336z" }) ])); } }); var success_filled_default = success_filled_vue_vue_type_script_setup_true_lang_default; var view_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ vue.defineComponent({ name: "View", __name: "view", setup(__props) { return (_ctx, _cache) => (vue.openBlock(), vue.createElementBlock("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 1024 1024" }, [ vue.createElementVNode("path", { fill: "currentColor", d: "M512 160c320 0 512 352 512 352S832 864 512 864 0 512 0 512s192-352 512-352m0 64c-225.28 0-384.128 208.064-436.8 288 52.608 79.872 211.456 288 436.8 288 225.28 0 384.128-208.064 436.8-288-52.608-79.872-211.456-288-436.8-288zm0 64a224 224 0 1 1 0 448 224 224 0 0 1 0-448m0 64a160.192 160.192 0 0 0-160 160c0 88.192 71.744 160 160 160s160-71.808 160-160-71.744-160-160-160" }) ])); } }); var view_default = view_vue_vue_type_script_setup_true_lang_default; var warning_filled_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ vue.defineComponent({ name: "WarningFilled", __name: "warning-filled", setup(__props) { return (_ctx, _cache) => (vue.openBlock(), vue.createElementBlock("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 1024 1024" }, [ vue.createElementVNode("path", { fill: "currentColor", d: "M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m0 192a58.432 58.432 0 0 0-58.24 63.744l23.36 256.384a35.072 35.072 0 0 0 69.76 0l23.296-256.384A58.432 58.432 0 0 0 512 256m0 512a51.2 51.2 0 1 0 0-102.4 51.2 51.2 0 0 0 0 102.4" }) ])); } }); var warning_filled_default = warning_filled_vue_vue_type_script_setup_true_lang_default; const iconPropType = definePropType([ String, Object, Function ]); const CloseComponents = { Close: close_default }; const TypeComponents = { Close: close_default, SuccessFilled: success_filled_default, InfoFilled: info_filled_default, WarningFilled: warning_filled_default, CircleCloseFilled: circle_close_filled_default }; const TypeComponentsMap = { success: success_filled_default, warning: warning_filled_default, error: circle_close_filled_default, info: info_filled_default }; const ValidateComponentsMap = { validating: loading_default, success: circle_check_default, error: circle_close_default }; const alertEffects = ["light", "dark"]; const alertProps = buildProps({ title: { type: String, default: "" }, description: { type: String, default: "" }, type: { type: String, values: keysOf(TypeComponentsMap), default: "info" }, closable: { type: Boolean, default: true }, closeText: { type: String, default: "" }, showIcon: Boolean, center: Boolean, effect: { type: String, values: alertEffects, default: "light" } }); const alertEmits = { close: (evt) => evt instanceof MouseEvent }; const __default__$q = vue.defineComponent({ name: "ElAlert" }); const _sfc_main$I = /* @__PURE__ */ vue.defineComponent({ ...__default__$q, props: alertProps, emits: alertEmits, setup(__props, { emit }) { const props = __props; const { Close } = TypeComponents; const slots = vue.useSlots(); const ns = useNamespace("alert"); const visible = vue.ref(true); const iconComponent = vue.computed(() => TypeComponentsMap[props.type]); const hasDesc = vue.computed(() => !!(props.description || slots.default)); const close = (evt) => { visible.value = false; emit("close", evt); }; return (_ctx, _cache) => { return vue.openBlock(), vue.createBlock(vue.Transition, { name: vue.unref(ns).b("fade"), persisted: "" }, { default: vue.withCtx(() => [ vue.withDirectives(vue.createElementVNode("div", { class: vue.normalizeClass([vue.unref(ns).b(), vue.unref(ns).m(_ctx.type), vue.unref(ns).is("center", _ctx.center), vue.unref(ns).is(_ctx.effect)]), role: "alert" }, [ _ctx.showIcon && (_ctx.$slots.icon || vue.unref(iconComponent)) ? (vue.openBlock(), vue.createBlock(vue.unref(ElIcon), { key: 0, class: vue.normalizeClass([vue.unref(ns).e("icon"), { [vue.unref(ns).is("big")]: vue.unref(hasDesc) }]) }, { default: vue.withCtx(() => [ vue.renderSlot(_ctx.$slots, "icon", {}, () => [ (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(vue.unref(iconComponent)))) ]) ]), _: 3 }, 8, ["class"])) : vue.createCommentVNode("v-if", true), vue.createElementVNode("div", { class: vue.normalizeClass(vue.unref(ns).e("content")) }, [ _ctx.title || _ctx.$slots.title ? (vue.openBlock(), vue.createElementBlock("span", { key: 0, class: vue.normalizeClass([vue.unref(ns).e("title"), { "with-description": vue.unref(hasDesc) }]) }, [ vue.renderSlot(_ctx.$slots, "title", {}, () => [ vue.createTextVNode(vue.toDisplayString(_ctx.title), 1) ]) ], 2)) : vue.createCommentVNode("v-if", true), vue.unref(hasDesc) ? (vue.openBlock(), vue.createElementBlock("p", { key: 1, class: vue.normalizeClass(vue.unref(ns).e("description")) }, [ vue.renderSlot(_ctx.$slots, "default", {}, () => [ vue.createTextVNode(vue.toDisplayString(_ctx.description), 1) ]) ], 2)) : vue.createCommentVNode("v-if", true), _ctx.closable ? (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 2 }, [ _ctx.closeText ? (vue.openBlock(), vue.createElementBlock("div", { key: 0, class: vue.normalizeClass([vue.unref(ns).e("close-btn"), vue.unref(ns).is("customed")]), onClick: close }, vue.toDisplayString(_ctx.closeText), 3)) : (vue.openBlock(), vue.createBlock(vue.unref(ElIcon), { key: 1, class: vue.normalizeClass(vue.unref(ns).e("close-btn")), onClick: close }, { default: vue.withCtx(() => [ vue.createVNode(vue.unref(Close)) ]), _: 1 }, 8, ["class"])) ], 64)) : vue.createCommentVNode("v-if", true) ], 2) ], 2), [ [vue.vShow, visible.value] ]) ]), _: 3 }, 8, ["name"]); }; } }); var Alert = /* @__PURE__ */ _export_sfc$1(_sfc_main$I, [["__file", "alert.vue"]]); const ElAlert = withInstall(Alert); const isFirefox = () => isClient && /firefox/i.test(window.navigator.userAgent); let hiddenTextarea = void 0; const HIDDEN_STYLE = { height: "0", visibility: "hidden", overflow: isFirefox() ? "" : "hidden", position: "absolute", "z-index": "-1000", top: "0", right: "0" }; const CONTEXT_STYLE = [ "letter-spacing", "line-height", "padding-top", "padding-bottom", "font-family", "font-weight", "font-size", "text-rendering", "text-transform", "width", "text-indent", "padding-left", "padding-right", "border-width", "box-sizing" ]; function calculateNodeStyling(targetElement) { const style = window.getComputedStyle(targetElement); const boxSizing = style.getPropertyValue("box-sizing"); const paddingSize = Number.parseFloat(style.getPropertyValue("padding-bottom")) + Number.parseFloat(style.getPropertyValue("padding-top")); const borderSize = Number.parseFloat(style.getPropertyValue("border-bottom-width")) + Number.parseFloat(style.getPropertyValue("border-top-width")); const contextStyle = CONTEXT_STYLE.map((name) => [ name, style.getPropertyValue(name) ]); return { contextStyle, paddingSize, borderSize, boxSizing }; } function calcTextareaHeight(targetElement, minRows = 1, maxRows) { var _a2; if (!hiddenTextarea) { hiddenTextarea = document.createElement("textarea"); document.body.appendChild(hiddenTextarea); } const { paddingSize, borderSize, boxSizing, contextStyle } = calculateNodeStyling(targetElement); contextStyle.forEach(([key, value]) => hiddenTextarea == null ? void 0 : hiddenTextarea.style.setProperty(key, value)); Object.entries(HIDDEN_STYLE).forEach(([key, value]) => hiddenTextarea == null ? void 0 : hiddenTextarea.style.setProperty(key, value, "important")); hiddenTextarea.value = targetElement.value || targetElement.placeholder || ""; let height = hiddenTextarea.scrollHeight; const result = {}; if (boxSizing === "border-box") { height = height + borderSize; } else if (boxSizing === "content-box") { height = height - paddingSize; } hiddenTextarea.value = ""; const singleRowHeight = hiddenTextarea.scrollHeight - paddingSize; if (isNumber(minRows)) { let minHeight = singleRowHeight * minRows; if (boxSizing === "border-box") { minHeight = minHeight + paddingSize + borderSize; } height = Math.max(minHeight, height); result.minHeight = `${minHeight}px`; } if (isNumber(maxRows)) { let maxHeight = singleRowHeight * maxRows; if (boxSizing === "border-box") { maxHeight = maxHeight + paddingSize + borderSize; } height = Math.min(maxHeight, height); } result.height = `${height}px`; (_a2 = hiddenTextarea.parentNode) == null ? void 0 : _a2.removeChild(hiddenTextarea); hiddenTextarea = void 0; return result; } const mutable = (val) => val; const ariaProps = buildProps({ ariaLabel: String, ariaOrientation: { type: String, values: ["horizontal", "vertical", "undefined"] }, ariaControls: String }); const useAriaProps = (arias) => { return pick(ariaProps, arias); }; const inputProps = buildProps({ id: { type: String, default: void 0 }, size: useSizeProp, disabled: Boolean, modelValue: { type: definePropType([ String, Number, Object ]), default: "" }, maxlength: { type: [String, Number] }, minlength: { type: [String, Number] }, type: { type: String, default: "text" }, resize: { type: String, values: ["none", "both", "horizontal", "vertical"] }, autosize: { type: definePropType([Boolean, Object]), default: false }, autocomplete: { type: String, default: "off" }, formatter: { type: Function }, parser: { type: Function }, placeholder: { type: String }, form: { type: String }, readonly: Boolean, clearable: Boolean, showPassword: Boolean, showWordLimit: Boolean, suffixIcon: { type: iconPropType }, prefixIcon: { type: iconPropType }, containerRole: { type: String, default: void 0 }, tabindex: { type: [String, Number], default: 0 }, validateEvent: { type: Boolean, default: true }, inputStyle: { type: definePropType([Object, Array, String]), default: () => mutable({}) }, autofocus: Boolean, rows: { type: Number, default: 2 }, ...useAriaProps(["ariaLabel"]) }); const inputEmits = { [UPDATE_MODEL_EVENT]: (value) => isString$1(value), input: (value) => isString$1(value), change: (value) => isString$1(value), focus: (evt) => evt instanceof FocusEvent, blur: (evt) => evt instanceof FocusEvent, clear: () => true, mouseleave: (evt) => evt instanceof MouseEvent, mouseenter: (evt) => evt instanceof MouseEvent, keydown: (evt) => evt instanceof Event, compositionstart: (evt) => evt instanceof CompositionEvent, compositionupdate: (evt) => evt instanceof CompositionEvent, compositionend: (evt) => evt instanceof CompositionEvent }; const DEFAULT_EXCLUDE_KEYS = ["class", "style"]; const LISTENER_PREFIX = /^on[A-Z]/; const useAttrs = (params = {}) => { const { excludeListeners = false, excludeKeys } = params; const allExcludeKeys = vue.computed(() => { return ((excludeKeys == null ? void 0 : excludeKeys.value) || []).concat(DEFAULT_EXCLUDE_KEYS); }); const instance = vue.getCurrentInstance(); if (!instance) { return vue.computed(() => ({})); } return vue.computed(() => { var _a2; return fromPairs(Object.entries((_a2 = instance.proxy) == null ? void 0 : _a2.$attrs).filter(([key]) => !allExcludeKeys.value.includes(key) && !(excludeListeners && LISTENER_PREFIX.test(key)))); }); }; const formContextKey = Symbol("formContextKey"); const formItemContextKey = Symbol("formItemContextKey"); const defaultIdInjection = { prefix: Math.floor(Math.random() * 1e4), current: 0 }; const ID_INJECTION_KEY = Symbol("elIdInjection"); const useIdInjection = () => { return vue.getCurrentInstance() ? vue.inject(ID_INJECTION_KEY, defaultIdInjection) : defaultIdInjection; }; const useId = (deterministicId) => { const idInjection = useIdInjection(); const namespace = useGetDerivedNamespace(); const idRef = computedEager(() => vue.unref(deterministicId) || `${namespace.value}-id-${idInjection.prefix}-${idInjection.current++}`); return idRef; }; const useFormItem = () => { const form = vue.inject(formContextKey, void 0); const formItem = vue.inject(formItemContextKey, void 0); return { form, formItem }; }; const useFormItemInputId = (props, { formItemContext, disableIdGeneration, disableIdManagement }) => { if (!disableIdGeneration) { disableIdGeneration = vue.ref(false); } if (!disableIdManagement) { disableIdManagement = vue.ref(false); } const inputId = vue.ref(); let idUnwatch = void 0; const isLabeledByFormItem = vue.computed(() => { var _a2; return !!(!(props.label || props.ariaLabel) && formItemContext && formItemContext.inputIds && ((_a2 = formItemContext.inputIds) == null ? void 0 : _a2.length) <= 1); }); vue.onMounted(() => { idUnwatch = vue.watch([vue.toRef(props, "id"), disableIdGeneration], ([id, disableIdGeneration2]) => { const newId = id != null ? id : !disableIdGeneration2 ? useId().value : void 0; if (newId !== inputId.value) { if (formItemContext == null ? void 0 : formItemContext.removeInputId) { inputId.value && formItemContext.removeInputId(inputId.value); if (!(disableIdManagement == null ? void 0 : disableIdManagement.value) && !disableIdGeneration2 && newId) { formItemContext.addInputId(newId); } } inputId.value = newId; } }, { immediate: true }); }); vue.onUnmounted(() => { idUnwatch && idUnwatch(); if (formItemContext == null ? void 0 : formItemContext.removeInputId) { inputId.value && formItemContext.removeInputId(inputId.value); } }); return { isLabeledByFormItem, inputId }; }; const useProp = (name) => { const vm = vue.getCurrentInstance(); return vue.computed(() => { var _a2, _b; return (_b = (_a2 = vm == null ? void 0 : vm.proxy) == null ? void 0 : _a2.$props) == null ? void 0 : _b[name]; }); }; const useFormSize = (fallback, ignore = {}) => { const emptyRef = vue.ref(void 0); const size = ignore.prop ? emptyRef : useProp("size"); const globalConfig2 = ignore.global ? emptyRef : useGlobalSize(); const form = ignore.form ? { size: void 0 } : vue.inject(formContextKey, void 0); const formItem = ignore.formItem ? { size: void 0 } : vue.inject(formItemContextKey, void 0); return vue.computed(() => size.value || vue.unref(fallback) || (formItem == null ? void 0 : formItem.size) || (form == null ? void 0 : form.size) || globalConfig2.value || ""); }; const useFormDisabled = (fallback) => { const disabled = useProp("disabled"); const form = vue.inject(formContextKey, void 0); return vue.computed(() => disabled.value || vue.unref(fallback) || (form == null ? void 0 : form.disabled) || false); }; function useFocusController(target, { beforeFocus, afterFocus, beforeBlur, afterBlur } = {}) { const instance = vue.getCurrentInstance(); const { emit } = instance; const wrapperRef = vue.shallowRef(); const isFocused = vue.ref(false); const handleFocus = (event) => { const cancelFocus = isFunction$1(beforeFocus) ? beforeFocus(event) : false; if (cancelFocus || isFocused.value) return; isFocused.value = true; emit("focus", event); afterFocus == null ? void 0 : afterFocus(); }; const handleBlur = (event) => { var _a2; const cancelBlur = isFunction$1(beforeBlur) ? beforeBlur(event) : false; if (cancelBlur || event.relatedTarget && ((_a2 = wrapperRef.value) == null ? void 0 : _a2.contains(event.relatedTarget))) return; isFocused.value = false; emit("blur", event); afterBlur == null ? void 0 : afterBlur(); }; const handleClick = () => { var _a2, _b; if (((_a2 = wrapperRef.value) == null ? void 0 : _a2.contains(document.activeElement)) && wrapperRef.value !== document.activeElement) return; (_b = target.value) == null ? void 0 : _b.focus(); }; vue.watch(wrapperRef, (el) => { if (el) { el.setAttribute("tabindex", "-1"); } }); useEventListener(wrapperRef, "focus", handleFocus, true); useEventListener(wrapperRef, "blur", handleBlur, true); useEventListener(wrapperRef, "click", handleClick, true); return { isFocused, wrapperRef, handleFocus, handleBlur }; } const isKorean = (text) => /([\uAC00-\uD7AF\u3130-\u318F])+/gi.test(text); function useComposition({ afterComposition, emit }) { const isComposing = vue.ref(false); const handleCompositionStart = (event) => { emit == null ? void 0 : emit("compositionstart", event); isComposing.value = true; }; const handleCompositionUpdate = (event) => { var _a2; emit == null ? void 0 : emit("compositionupdate", event); const text = (_a2 = event.target) == null ? void 0 : _a2.value; const lastCharacter = text[text.length - 1] || ""; isComposing.value = !isKorean(lastCharacter); }; const handleCompositionEnd = (event) => { emit == null ? void 0 : emit("compositionend", event); if (isComposing.value) { isComposing.value = false; vue.nextTick(() => afterComposition(event)); } }; const handleComposition = (event) => { event.type === "compositionend" ? handleCompositionEnd(event) : handleCompositionUpdate(event); }; return { isComposing, handleComposition, handleCompositionStart, handleCompositionUpdate, handleCompositionEnd }; } function useCursor(input) { let selectionInfo; function recordCursor() { if (input.value == void 0) return; const { selectionStart, selectionEnd, value } = input.value; if (selectionStart == null || selectionEnd == null) return; const beforeTxt = value.slice(0, Math.max(0, selectionStart)); const afterTxt = value.slice(Math.max(0, selectionEnd)); selectionInfo = { selectionStart, selectionEnd, value, beforeTxt, afterTxt }; } function setCursor() { if (input.value == void 0 || selectionInfo == void 0) return; const { value } = input.value; const { beforeTxt, afterTxt, selectionStart } = selectionInfo; if (beforeTxt == void 0 || afterTxt == void 0 || selectionStart == void 0) return; let startPos = value.length; if (value.endsWith(afterTxt)) { startPos = value.length - afterTxt.length; } else if (value.startsWith(beforeTxt)) { startPos = beforeTxt.length; } else { const beforeLastChar = beforeTxt[selectionStart - 1]; const newIndex = value.indexOf(beforeLastChar, selectionStart - 1); if (newIndex !== -1) { startPos = newIndex + 1; } } input.value.setSelectionRange(startPos, startPos); } return [recordCursor, setCursor]; } const COMPONENT_NAME$7 = "ElInput"; const __default__$p = vue.defineComponent({ name: COMPONENT_NAME$7, inheritAttrs: false }); const _sfc_main$H = /* @__PURE__ */ vue.defineComponent({ ...__default__$p, props: inputProps, emits: inputEmits, setup(__props, { expose, emit }) { const props = __props; const rawAttrs = vue.useAttrs(); const attrs = useAttrs(); const slots = vue.useSlots(); const containerKls = vue.computed(() => [ props.type === "textarea" ? nsTextarea.b() : nsInput.b(), nsInput.m(inputSize.value), nsInput.is("disabled", inputDisabled.value), nsInput.is("exceed", inputExceed.value), { [nsInput.b("group")]: slots.prepend || slots.append, [nsInput.m("prefix")]: slots.prefix || props.prefixIcon, [nsInput.m("suffix")]: slots.suffix || props.suffixIcon || props.clearable || props.showPassword, [nsInput.bm("suffix", "password-clear")]: showClear.value && showPwdVisible.value, [nsInput.b("hidden")]: props.type === "hidden" }, rawAttrs.class ]); const wrapperKls = vue.computed(() => [ nsInput.e("wrapper"), nsInput.is("focus", isFocused.value) ]); const { form: elForm, formItem: elFormItem } = useFormItem(); const { inputId } = useFormItemInputId(props, { formItemContext: elFormItem }); const inputSize = useFormSize(); const inputDisabled = useFormDisabled(); const nsInput = useNamespace("input"); const nsTextarea = useNamespace("textarea"); const input = vue.shallowRef(); const textarea = vue.shallowRef(); const hovering = vue.ref(false); const passwordVisible = vue.ref(false); const countStyle = vue.ref(); const textareaCalcStyle = vue.shallowRef(props.inputStyle); const _ref = vue.computed(() => input.value || textarea.value); const { wrapperRef, isFocused, handleFocus, handleBlur } = useFocusController(_ref, { beforeFocus() { return inputDisabled.value; }, afterBlur() { var _a2; if (props.validateEvent) { (_a2 = elFormItem == null ? void 0 : elFormItem.validate) == null ? void 0 : _a2.call(elFormItem, "blur").catch((err) => debugWarn()); } } }); const needStatusIcon = vue.computed(() => { var _a2; return (_a2 = elForm == null ? void 0 : elForm.statusIcon) != null ? _a2 : false; }); const validateState = vue.computed(() => (elFormItem == null ? void 0 : elFormItem.validateState) || ""); const validateIcon = vue.computed(() => validateState.value && ValidateComponentsMap[validateState.value]); const passwordIcon = vue.computed(() => passwordVisible.value ? view_default : hide_default); const containerStyle = vue.computed(() => [ rawAttrs.style ]); const textareaStyle = vue.computed(() => [ props.inputStyle, textareaCalcStyle.value, { resize: props.resize } ]); const nativeInputValue = vue.computed(() => isNil(props.modelValue) ? "" : String(props.modelValue)); const showClear = vue.computed(() => props.clearable && !inputDisabled.value && !props.readonly && !!nativeInputValue.value && (isFocused.value || hovering.value)); const showPwdVisible = vue.computed(() => props.showPassword && !inputDisabled.value && !!nativeInputValue.value && (!!nativeInputValue.value || isFocused.value)); const isWordLimitVisible = vue.computed(() => props.showWordLimit && !!props.maxlength && (props.type === "text" || props.type === "textarea") && !inputDisabled.value && !props.readonly && !props.showPassword); const textLength = vue.computed(() => nativeInputValue.value.length); const inputExceed = vue.computed(() => !!isWordLimitVisible.value && textLength.value > Number(props.maxlength)); const suffixVisible = vue.computed(() => !!slots.suffix || !!props.suffixIcon || showClear.value || props.showPassword || isWordLimitVisible.value || !!validateState.value && needStatusIcon.value); const [recordCursor, setCursor] = useCursor(input); useResizeObserver(textarea, (entries) => { onceInitSizeTextarea(); if (!isWordLimitVisible.value || props.resize !== "both") return; const entry = entries[0]; const { width } = entry.contentRect; countStyle.value = { right: `calc(100% - ${width + 15 + 6}px)` }; }); const resizeTextarea = () => { const { type, autosize } = props; if (!isClient || type !== "textarea" || !textarea.value) return; if (autosize) { const minRows = isObject$1(autosize) ? autosize.minRows : void 0; const maxRows = isObject$1(autosize) ? autosize.maxRows : void 0; const textareaStyle2 = calcTextareaHeight(textarea.value, minRows, maxRows); textareaCalcStyle.value = { overflowY: "hidden", ...textareaStyle2 }; vue.nextTick(() => { textarea.value.offsetHeight; textareaCalcStyle.value = textareaStyle2; }); } else { textareaCalcStyle.value = { minHeight: calcTextareaHeight(textarea.value).minHeight }; } }; const createOnceInitResize = (resizeTextarea2) => { let isInit = false; return () => { var _a2; if (isInit || !props.autosize) return; const isElHidden = ((_a2 = textarea.value) == null ? void 0 : _a2.offsetParent) === null; if (!isElHidden) { resizeTextarea2(); isInit = true; } }; }; const onceInitSizeTextarea = createOnceInitResize(resizeTextarea); const setNativeInputValue = () => { const input2 = _ref.value; const formatterValue = props.formatter ? props.formatter(nativeInputValue.value) : nativeInputValue.value; if (!input2 || input2.value === formatterValue) return; input2.value = formatterValue; }; const handleInput = async (event) => { recordCursor(); let { value } = event.target; if (props.formatter && props.parser) { value = props.parser(value); } if (isComposing.value) return; if (value === nativeInputValue.value) { setNativeInputValue(); return; } emit(UPDATE_MODEL_EVENT, value); emit(INPUT_EVENT, value); await vue.nextTick(); setNativeInputValue(); setCursor(); }; const handleChange = (event) => { let { value } = event.target; if (props.formatter && props.parser) { value = props.parser(value); } emit(CHANGE_EVENT, value); }; const { isComposing, handleCompositionStart, handleCompositionUpdate, handleCompositionEnd } = useComposition({ emit, afterComposition: handleInput }); const handlePasswordVisible = () => { recordCursor(); passwordVisible.value = !passwordVisible.value; setTimeout(setCursor); }; const focus = () => { var _a2; return (_a2 = _ref.value) == null ? void 0 : _a2.focus(); }; const blur = () => { var _a2; return (_a2 = _ref.value) == null ? void 0 : _a2.blur(); }; const handleMouseLeave = (evt) => { hovering.value = false; emit("mouseleave", evt); }; const handleMouseEnter = (evt) => { hovering.value = true; emit("mouseenter", evt); }; const handleKeydown = (evt) => { emit("keydown", evt); }; const select = () => { var _a2; (_a2 = _ref.value) == null ? void 0 : _a2.select(); }; const clear = () => { emit(UPDATE_MODEL_EVENT, ""); emit(CHANGE_EVENT, ""); emit("clear"); emit(INPUT_EVENT, ""); }; vue.watch(() => props.modelValue, () => { var _a2; vue.nextTick(() => resizeTextarea()); if (props.validateEvent) { (_a2 = elFormItem == null ? void 0 : elFormItem.validate) == null ? void 0 : _a2.call(elFormItem, "change").catch((err) => debugWarn()); } }); vue.watch(nativeInputValue, () => setNativeInputValue()); vue.watch(() => props.type, async () => { await vue.nextTick(); setNativeInputValue(); resizeTextarea(); }); vue.onMounted(() => { if (!props.formatter && props.parser) ; setNativeInputValue(); vue.nextTick(resizeTextarea); }); expose({ input, textarea, ref: _ref, textareaStyle, autosize: vue.toRef(props, "autosize"), isComposing, focus, blur, select, clear, resizeTextarea }); return (_ctx, _cache) => { return vue.openBlock(), vue.createElementBlock("div", { class: vue.normalizeClass([ vue.unref(containerKls), { [vue.unref(nsInput).bm("group", "append")]: _ctx.$slots.append, [vue.unref(nsInput).bm("group", "prepend")]: _ctx.$slots.prepend } ]), style: vue.normalizeStyle(vue.unref(containerStyle)), onMouseenter: handleMouseEnter, onMouseleave: handleMouseLeave }, [ vue.createCommentVNode(" input "), _ctx.type !== "textarea" ? (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 0 }, [ vue.createCommentVNode(" prepend slot "), _ctx.$slots.prepend ? (vue.openBlock(), vue.createElementBlock("div", { key: 0, class: vue.normalizeClass(vue.unref(nsInput).be("group", "prepend")) }, [ vue.renderSlot(_ctx.$slots, "prepend") ], 2)) : vue.createCommentVNode("v-if", true), vue.createElementVNode("div", { ref_key: "wrapperRef", ref: wrapperRef, class: vue.normalizeClass(vue.unref(wrapperKls)) }, [ vue.createCommentVNode(" prefix slot "), _ctx.$slots.prefix || _ctx.prefixIcon ? (vue.openBlock(), vue.createElementBlock("span", { key: 0, class: vue.normalizeClass(vue.unref(nsInput).e("prefix")) }, [ vue.createElementVNode("span", { class: vue.normalizeClass(vue.unref(nsInput).e("prefix-inner")) }, [ vue.renderSlot(_ctx.$slots, "prefix"), _ctx.prefixIcon ? (vue.openBlock(), vue.createBlock(vue.unref(ElIcon), { key: 0, class: vue.normalizeClass(vue.unref(nsInput).e("icon")) }, { default: vue.withCtx(() => [ (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.prefixIcon))) ]), _: 1 }, 8, ["class"])) : vue.createCommentVNode("v-if", true) ], 2) ], 2)) : vue.createCommentVNode("v-if", true), vue.createElementVNode("input", vue.mergeProps({ id: vue.unref(inputId), ref_key: "input", ref: input, class: vue.unref(nsInput).e("inner") }, vue.unref(attrs), { minlength: _ctx.minlength, maxlength: _ctx.maxlength, type: _ctx.showPassword ? passwordVisible.value ? "text" : "password" : _ctx.type, disabled: vue.unref(inputDisabled), readonly: _ctx.readonly, autocomplete: _ctx.autocomplete, tabindex: _ctx.tabindex, "aria-label": _ctx.ariaLabel, placeholder: _ctx.placeholder, style: _ctx.inputStyle, form: _ctx.form, autofocus: _ctx.autofocus, role: _ctx.containerRole, onCompositionstart: vue.unref(handleCompositionStart), onCompositionupdate: vue.unref(handleCompositionUpdate), onCompositionend: vue.unref(handleCompositionEnd), onInput: handleInput, onChange: handleChange, onKeydown: handleKeydown }), null, 16, ["id", "minlength", "maxlength", "type", "disabled", "readonly", "autocomplete", "tabindex", "aria-label", "placeholder", "form", "autofocus", "role", "onCompositionstart", "onCompositionupdate", "onCompositionend"]), vue.createCommentVNode(" suffix slot "), vue.unref(suffixVisible) ? (vue.openBlock(), vue.createElementBlock("span", { key: 1, class: vue.normalizeClass(vue.unref(nsInput).e("suffix")) }, [ vue.createElementVNode("span", { class: vue.normalizeClass(vue.unref(nsInput).e("suffix-inner")) }, [ !vue.unref(showClear) || !vue.unref(showPwdVisible) || !vue.unref(isWordLimitVisible) ? (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 0 }, [ vue.renderSlot(_ctx.$slots, "suffix"), _ctx.suffixIcon ? (vue.openBlock(), vue.createBlock(vue.unref(ElIcon), { key: 0, class: vue.normalizeClass(vue.unref(nsInput).e("icon")) }, { default: vue.withCtx(() => [ (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.suffixIcon))) ]), _: 1 }, 8, ["class"])) : vue.createCommentVNode("v-if", true) ], 64)) : vue.createCommentVNode("v-if", true), vue.unref(showClear) ? (vue.openBlock(), vue.createBlock(vue.unref(ElIcon), { key: 1, class: vue.normalizeClass([vue.unref(nsInput).e("icon"), vue.unref(nsInput).e("clear")]), onMousedown: vue.withModifiers(vue.unref(NOOP), ["prevent"]), onClick: clear }, { default: vue.withCtx(() => [ vue.createVNode(vue.unref(circle_close_default)) ]), _: 1 }, 8, ["class", "onMousedown"])) : vue.createCommentVNode("v-if", true), vue.unref(showPwdVisible) ? (vue.openBlock(), vue.createBlock(vue.unref(ElIcon), { key: 2, class: vue.normalizeClass([vue.unref(nsInput).e("icon"), vue.unref(nsInput).e("password")]), onClick: handlePasswordVisible }, { default: vue.withCtx(() => [ (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(vue.unref(passwordIcon)))) ]), _: 1 }, 8, ["class"])) : vue.createCommentVNode("v-if", true), vue.unref(isWordLimitVisible) ? (vue.openBlock(), vue.createElementBlock("span", { key: 3, class: vue.normalizeClass(vue.unref(nsInput).e("count")) }, [ vue.createElementVNode("span", { class: vue.normalizeClass(vue.unref(nsInput).e("count-inner")) }, vue.toDisplayString(vue.unref(textLength)) + " / " + vue.toDisplayString(_ctx.maxlength), 3) ], 2)) : vue.createCommentVNode("v-if", true), vue.unref(validateState) && vue.unref(validateIcon) && vue.unref(needStatusIcon) ? (vue.openBlock(), vue.createBlock(vue.unref(ElIcon), { key: 4, class: vue.normalizeClass([ vue.unref(nsInput).e("icon"), vue.unref(nsInput).e("validateIcon"), vue.unref(nsInput).is("loading", vue.unref(validateState) === "validating") ]) }, { default: vue.withCtx(() => [ (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(vue.unref(validateIcon)))) ]), _: 1 }, 8, ["class"])) : vue.createCommentVNode("v-if", true) ], 2) ], 2)) : vue.createCommentVNode("v-if", true) ], 2), vue.createCommentVNode(" append slot "), _ctx.$slots.append ? (vue.openBlock(), vue.createElementBlock("div", { key: 1, class: vue.normalizeClass(vue.unref(nsInput).be("group", "append")) }, [ vue.renderSlot(_ctx.$slots, "append") ], 2)) : vue.createCommentVNode("v-if", true) ], 64)) : (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 1 }, [ vue.createCommentVNode(" textarea "), vue.createElementVNode("textarea", vue.mergeProps({ id: vue.unref(inputId), ref_key: "textarea", ref: textarea, class: [vue.unref(nsTextarea).e("inner"), vue.unref(nsInput).is("focus", vue.unref(isFocused))] }, vue.unref(attrs), { minlength: _ctx.minlength, maxlength: _ctx.maxlength, tabindex: _ctx.tabindex, disabled: vue.unref(inputDisabled), readonly: _ctx.readonly, autocomplete: _ctx.autocomplete, style: vue.unref(textareaStyle), "aria-label": _ctx.ariaLabel, placeholder: _ctx.placeholder, form: _ctx.form, autofocus: _ctx.autofocus, rows: _ctx.rows, role: _ctx.containerRole, onCompositionstart: vue.unref(handleCompositionStart), onCompositionupdate: vue.unref(handleCompositionUpdate), onCompositionend: vue.unref(handleCompositionEnd), onInput: handleInput, onFocus: vue.unref(handleFocus), onBlur: vue.unref(handleBlur), onChange: handleChange, onKeydown: handleKeydown }), null, 16, ["id", "minlength", "maxlength", "tabindex", "disabled", "readonly", "autocomplete", "aria-label", "placeholder", "form", "autofocus", "rows", "role", "onCompositionstart", "onCompositionupdate", "onCompositionend", "onFocus", "onBlur"]), vue.unref(isWordLimitVisible) ? (vue.openBlock(), vue.createElementBlock("span", { key: 0, style: vue.normalizeStyle(countStyle.value), class: vue.normalizeClass(vue.unref(nsInput).e("count")) }, vue.toDisplayString(vue.unref(textLength)) + " / " + vue.toDisplayString(_ctx.maxlength), 7)) : vue.createCommentVNode("v-if", true) ], 64)) ], 38); }; } }); var Input = /* @__PURE__ */ _export_sfc$1(_sfc_main$H, [["__file", "input.vue"]]); const ElInput = withInstall(Input); const GAP = 4; 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 }) => ({ [bar.size]: size, transform: `translate${bar.axis}(${move}%)` }); const scrollbarContextKey = Symbol("scrollbarContextKey"); const thumbProps = buildProps({ vertical: Boolean, size: String, move: Number, ratio: { type: Number, required: true }, always: Boolean }); const COMPONENT_NAME$6 = "Thumb"; const _sfc_main$G = /* @__PURE__ */ vue.defineComponent({ __name: "thumb", props: thumbProps, setup(__props) { const props = __props; const scrollbar = vue.inject(scrollbarContextKey); const ns = useNamespace("scrollbar"); if (!scrollbar) throwError(COMPONENT_NAME$6, "can not inject scrollbar context"); const instance = vue.ref(); const thumb = vue.ref(); const thumbState = vue.ref({}); const visible = vue.ref(false); let cursorDown = false; let cursorLeave = false; let originalOnSelectStart = isClient ? document.onselectstart : null; const bar = vue.computed(() => BAR_MAP[props.vertical ? "vertical" : "horizontal"]); const thumbStyle = vue.computed(() => renderThumbStyle({ size: props.size, move: props.move, bar: bar.value })); const offsetRatio = vue.computed(() => instance.value[bar.value.offset] ** 2 / scrollbar.wrapElement[bar.value.scrollSize] / props.ratio / thumb.value[bar.value.offset]); const clickThumbHandler = (e) => { var _a2; e.stopPropagation(); if (e.ctrlKey || [1, 2].includes(e.button)) return; (_a2 = window.getSelection()) == null ? void 0 : _a2.removeAllRanges(); startDrag(e); const el = e.currentTarget; if (!el) return; thumbState.value[bar.value.axis] = el[bar.value.offset] - (e[bar.value.client] - el.getBoundingClientRect()[bar.value.direction]); }; const clickTrackHandler = (e) => { if (!thumb.value || !instance.value || !scrollbar.wrapElement) return; const offset = Math.abs(e.target.getBoundingClientRect()[bar.value.direction] - e[bar.value.client]); const thumbHalf = thumb.value[bar.value.offset] / 2; const thumbPositionPercentage = (offset - thumbHalf) * 100 * offsetRatio.value / instance.value[bar.value.offset]; scrollbar.wrapElement[bar.value.scroll] = thumbPositionPercentage * scrollbar.wrapElement[bar.value.scrollSize] / 100; }; const startDrag = (e) => { e.stopImmediatePropagation(); cursorDown = true; document.addEventListener("mousemove", mouseMoveDocumentHandler); document.addEventListener("mouseup", mouseUpDocumentHandler); originalOnSelectStart = document.onselectstart; document.onselectstart = () => false; }; const mouseMoveDocumentHandler = (e) => { if (!instance.value || !thumb.value) return; if (cursorDown === false) return; const prevPage = thumbState.value[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]; scrollbar.wrapElement[bar.value.scroll] = thumbPositionPercentage * scrollbar.wrapElement[bar.value.scrollSize] / 100; }; const mouseUpDocumentHandler = () => { cursorDown = false; thumbState.value[bar.value.axis] = 0; document.removeEventListener("mousemove", mouseMoveDocumentHandler); document.removeEventListener("mouseup", mouseUpDocumentHandler); restoreOnselectstart(); if (cursorLeave) visible.value = false; }; const mouseMoveScrollbarHandler = () => { cursorLeave = false; visible.value = !!props.size; }; const mouseLeaveScrollbarHandler = () => { cursorLeave = true; visible.value = cursorDown; }; vue.onBeforeUnmount(() => { restoreOnselectstart(); document.removeEventListener("mouseup", mouseUpDocumentHandler); }); const restoreOnselectstart = () => { if (document.onselectstart !== originalOnSelectStart) document.onselectstart = originalOnSelectStart; }; useEventListener(vue.toRef(scrollbar, "scrollbarElement"), "mousemove", mouseMoveScrollbarHandler); useEventListener(vue.toRef(scrollbar, "scrollbarElement"), "mouseleave", mouseLeaveScrollbarHandler); return (_ctx, _cache) => { return vue.openBlock(), vue.createBlock(vue.Transition, { name: vue.unref(ns).b("fade"), persisted: "" }, { default: vue.withCtx(() => [ vue.withDirectives(vue.createElementVNode("div", { ref_key: "instance", ref: instance, class: vue.normalizeClass([vue.unref(ns).e("bar"), vue.unref(ns).is(vue.unref(bar).key)]), onMousedown: clickTrackHandler }, [ vue.createElementVNode("div", { ref_key: "thumb", ref: thumb, class: vue.normalizeClass(vue.unref(ns).e("thumb")), style: vue.normalizeStyle(vue.unref(thumbStyle)), onMousedown: clickThumbHandler }, null, 38) ], 34), [ [vue.vShow, _ctx.always || visible.value] ]) ]), _: 1 }, 8, ["name"]); }; } }); var Thumb = /* @__PURE__ */ _export_sfc$1(_sfc_main$G, [["__file", "thumb.vue"]]); const barProps = buildProps({ always: { type: Boolean, default: true }, minSize: { type: Number, required: true } }); const _sfc_main$F = /* @__PURE__ */ vue.defineComponent({ __name: "bar", props: barProps, setup(__props, { expose }) { const props = __props; const scrollbar = vue.inject(scrollbarContextKey); const moveX = vue.ref(0); const moveY = vue.ref(0); const sizeWidth = vue.ref(""); const sizeHeight = vue.ref(""); const ratioY = vue.ref(1); const ratioX = vue.ref(1); const handleScroll = (wrap) => { if (wrap) { const offsetHeight = wrap.offsetHeight - GAP; const offsetWidth = wrap.offsetWidth - GAP; moveY.value = wrap.scrollTop * 100 / offsetHeight * ratioY.value; moveX.value = wrap.scrollLeft * 100 / offsetWidth * ratioX.value; } }; const update = () => { const wrap = scrollbar == null ? void 0 : scrollbar.wrapElement; if (!wrap) return; const offsetHeight = wrap.offsetHeight - GAP; const offsetWidth = wrap.offsetWidth - GAP; const originalHeight = offsetHeight ** 2 / wrap.scrollHeight; const originalWidth = offsetWidth ** 2 / wrap.scrollWidth; const height = Math.max(originalHeight, props.minSize); const width = Math.max(originalWidth, props.minSize); ratioY.value = originalHeight / (offsetHeight - originalHeight) / (height / (offsetHeight - height)); ratioX.value = originalWidth / (offsetWidth - originalWidth) / (width / (offsetWidth - width)); sizeHeight.value = height + GAP < offsetHeight ? `${height}px` : ""; sizeWidth.value = width + GAP < offsetWidth ? `${width}px` : ""; }; expose({ handleScroll, update }); return (_ctx, _cache) => { return vue.openBlock(), vue.createElementBlock(vue.Fragment, null, [ vue.createVNode(Thumb, { move: moveX.value, ratio: ratioX.value, size: sizeWidth.value, always: _ctx.always }, null, 8, ["move", "ratio", "size", "always"]), vue.createVNode(Thumb, { move: moveY.value, ratio: ratioY.value, size: sizeHeight.value, vertical: "", always: _ctx.always }, null, 8, ["move", "ratio", "size", "always"]) ], 64); }; } }); var Bar = /* @__PURE__ */ _export_sfc$1(_sfc_main$F, [["__file", "bar.vue"]]); const scrollbarProps = buildProps({ height: { type: [String, Number], default: "" }, maxHeight: { type: [String, Number], default: "" }, native: { type: Boolean, default: false }, wrapStyle: { type: definePropType([String, Object, Array]), default: "" }, wrapClass: { type: [String, Array], default: "" }, viewClass: { type: [String, Array], default: "" }, viewStyle: { type: [String, Array, Object], default: "" }, noresize: Boolean, tag: { type: String, default: "div" }, always: Boolean, minSize: { type: Number, default: 20 }, tabindex: { type: [String, Number], default: void 0 }, id: String, role: String, ...useAriaProps(["ariaLabel", "ariaOrientation"]) }); const scrollbarEmits = { scroll: ({ scrollTop, scrollLeft }) => [scrollTop, scrollLeft].every(isNumber) }; const COMPONENT_NAME$5 = "ElScrollbar"; const __default__$o = vue.defineComponent({ name: COMPONENT_NAME$5 }); const _sfc_main$E = /* @__PURE__ */ vue.defineComponent({ ...__default__$o, props: scrollbarProps, emits: scrollbarEmits, setup(__props, { expose, emit }) { const props = __props; const ns = useNamespace("scrollbar"); let stopResizeObserver = void 0; let stopResizeListener = void 0; let wrapScrollTop = 0; let wrapScrollLeft = 0; const scrollbarRef = vue.ref(); const wrapRef = vue.ref(); const resizeRef = vue.ref(); const barRef = vue.ref(); const wrapStyle = vue.computed(() => { const style = {}; if (props.height) style.height = addUnit(props.height); if (props.maxHeight) style.maxHeight = addUnit(props.maxHeight); return [props.wrapStyle, style]; }); const wrapKls = vue.computed(() => { return [ props.wrapClass, ns.e("wrap"), { [ns.em("wrap", "hidden-default")]: !props.native } ]; }); const resizeKls = vue.computed(() => { return [ns.e("view"), props.viewClass]; }); const handleScroll = () => { var _a2; if (wrapRef.value) { (_a2 = barRef.value) == null ? void 0 : _a2.handleScroll(wrapRef.value); wrapScrollTop = wrapRef.value.scrollTop; wrapScrollLeft = wrapRef.value.scrollLeft; emit("scroll", { scrollTop: wrapRef.value.scrollTop, scrollLeft: wrapRef.value.scrollLeft }); } }; function scrollTo(arg1, arg2) { if (isObject$1(arg1)) { wrapRef.value.scrollTo(arg1); } else if (isNumber(arg1) && isNumber(arg2)) { wrapRef.value.scrollTo(arg1, arg2); } } const setScrollTop = (value) => { if (!isNumber(value)) { return; } wrapRef.value.scrollTop = value; }; const setScrollLeft = (value) => { if (!isNumber(value)) { return; } wrapRef.value.scrollLeft = value; }; const update = () => { var _a2; (_a2 = barRef.value) == null ? void 0 : _a2.update(); }; vue.watch(() => props.noresize, (noresize) => { if (noresize) { stopResizeObserver == null ? void 0 : stopResizeObserver(); stopResizeListener == null ? void 0 : stopResizeListener(); } else { ({ stop: stopResizeObserver } = useResizeObserver(resizeRef, update)); stopResizeListener = useEventListener("resize", update); } }, { immediate: true }); vue.watch(() => [props.maxHeight, props.height], () => { if (!props.native) vue.nextTick(() => { var _a2; update(); if (wrapRef.value) { (_a2 = barRef.value) == null ? void 0 : _a2.handleScroll(wrapRef.value); } }); }); vue.provide(scrollbarContextKey, vue.reactive({ scrollbarElement: scrollbarRef, wrapElement: wrapRef })); vue.onActivated(() => { if (wrapRef.value) { wrapRef.value.scrollTop = wrapScrollTop; wrapRef.value.scrollLeft = wrapScrollLeft; } }); vue.onMounted(() => { if (!props.native) vue.nextTick(() => { update(); }); }); vue.onUpdated(() => update()); expose({ wrapRef, update, scrollTo, setScrollTop, setScrollLeft, handleScroll }); return (_ctx, _cache) => { return vue.openBlock(), vue.createElementBlock("div", { ref_key: "scrollbarRef", ref: scrollbarRef, class: vue.normalizeClass(vue.unref(ns).b()) }, [ vue.createElementVNode("div", { ref_key: "wrapRef", ref: wrapRef, class: vue.normalizeClass(vue.unref(wrapKls)), style: vue.normalizeStyle(vue.unref(wrapStyle)), tabindex: _ctx.tabindex, onScroll: handleScroll }, [ (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.tag), { id: _ctx.id, ref_key: "resizeRef", ref: resizeRef, class: vue.normalizeClass(vue.unref(resizeKls)), style: vue.normalizeStyle(_ctx.viewStyle), role: _ctx.role, "aria-label": _ctx.ariaLabel, "aria-orientation": _ctx.ariaOrientation }, { default: vue.withCtx(() => [ vue.renderSlot(_ctx.$slots, "default") ]), _: 3 }, 8, ["id", "class", "style", "role", "aria-label", "aria-orientation"])) ], 46, ["tabindex"]), !_ctx.native ? (vue.openBlock(), vue.createBlock(Bar, { key: 0, ref_key: "barRef", ref: barRef, always: _ctx.always, "min-size": _ctx.minSize }, null, 8, ["always", "min-size"])) : vue.createCommentVNode("v-if", true) ], 2); }; } }); var Scrollbar = /* @__PURE__ */ _export_sfc$1(_sfc_main$E, [["__file", "scrollbar.vue"]]); const ElScrollbar = withInstall(Scrollbar); const POPPER_INJECTION_KEY = Symbol("popper"); const POPPER_CONTENT_INJECTION_KEY = Symbol("popperContent"); const roleTypes = [ "dialog", "grid", "group", "listbox", "menu", "navigation", "tooltip", "tree" ]; const popperProps = buildProps({ role: { type: String, values: roleTypes, default: "tooltip" } }); const __default__$n = vue.defineComponent({ name: "ElPopper", inheritAttrs: false }); const _sfc_main$D = /* @__PURE__ */ vue.defineComponent({ ...__default__$n, props: popperProps, setup(__props, { expose }) { const props = __props; const triggerRef = vue.ref(); const popperInstanceRef = vue.ref(); const contentRef = vue.ref(); const referenceRef = vue.ref(); const role = vue.computed(() => props.role); const popperProvides = { triggerRef, popperInstanceRef, contentRef, referenceRef, role }; expose(popperProvides); vue.provide(POPPER_INJECTION_KEY, popperProvides); return (_ctx, _cache) => { return vue.renderSlot(_ctx.$slots, "default"); }; } }); var Popper = /* @__PURE__ */ _export_sfc$1(_sfc_main$D, [["__file", "popper.vue"]]); const popperArrowProps = buildProps({ arrowOffset: { type: Number, default: 5 } }); const __default__$m = vue.defineComponent({ name: "ElPopperArrow", inheritAttrs: false }); const _sfc_main$C = /* @__PURE__ */ vue.defineComponent({ ...__default__$m, props: popperArrowProps, setup(__props, { expose }) { const props = __props; const ns = useNamespace("popper"); const { arrowOffset, arrowRef, arrowStyle } = vue.inject(POPPER_CONTENT_INJECTION_KEY, void 0); vue.watch(() => props.arrowOffset, (val) => { arrowOffset.value = val; }); vue.onBeforeUnmount(() => { arrowRef.value = void 0; }); expose({ arrowRef }); return (_ctx, _cache) => { return vue.openBlock(), vue.createElementBlock("span", { ref_key: "arrowRef", ref: arrowRef, class: vue.normalizeClass(vue.unref(ns).e("arrow")), style: vue.normalizeStyle(vue.unref(arrowStyle)), "data-popper-arrow": "" }, null, 6); }; } }); var ElPopperArrow = /* @__PURE__ */ _export_sfc$1(_sfc_main$C, [["__file", "arrow.vue"]]); const popperTriggerProps = buildProps({ virtualRef: { type: definePropType(Object) }, virtualTriggering: Boolean, onMouseenter: { type: definePropType(Function) }, onMouseleave: { type: definePropType(Function) }, onClick: { type: definePropType(Function) }, onKeydown: { type: definePropType(Function) }, onFocus: { type: definePropType(Function) }, onBlur: { type: definePropType(Function) }, onContextmenu: { type: definePropType(Function) }, id: String, open: Boolean }); const FORWARD_REF_INJECTION_KEY = Symbol("elForwardRef"); const useForwardRef = (forwardRef) => { const setForwardRef = (el) => { forwardRef.value = el; }; vue.provide(FORWARD_REF_INJECTION_KEY, { setForwardRef }); }; const useForwardRefDirective = (setForwardRef) => { return { mounted(el) { setForwardRef(el); }, updated(el) { setForwardRef(el); }, unmounted() { setForwardRef(null); } }; }; const FOCUSABLE_ELEMENT_SELECTORS = `a[href],button:not([disabled]),button:not([hidden]),:not([tabindex="-1"]),input:not([disabled]),input:not([type="hidden"]),select:not([disabled]),textarea:not([disabled])`; const isVisible = (element) => { const computed2 = getComputedStyle(element); return computed2.position === "fixed" ? false : element.offsetParent !== null; }; const obtainAllFocusableElements$1 = (element) => { return Array.from(element.querySelectorAll(FOCUSABLE_ELEMENT_SELECTORS)).filter((item) => isFocusable(item) && isVisible(item)); }; const isFocusable = (element) => { if (element.tabIndex > 0 || element.tabIndex === 0 && element.getAttribute("tabIndex") !== null) { return true; } if (element.tabIndex < 0 || element.hasAttribute("disabled") || element.getAttribute("aria-disabled") === "true") { return false; } switch (element.nodeName) { case "A": { return !!element.href && element.rel !== "ignore"; } case "INPUT": { return !(element.type === "hidden" || element.type === "file"); } case "BUTTON": case "SELECT": case "TEXTAREA": { return true; } default: { return false; } } }; const NAME = "ElOnlyChild"; const OnlyChild = vue.defineComponent({ name: NAME, setup(_2, { slots, attrs }) { var _a2; const forwardRefInjection = vue.inject(FORWARD_REF_INJECTION_KEY); const forwardRefDirective = useForwardRefDirective((_a2 = forwardRefInjection == null ? void 0 : forwardRefInjection.setForwardRef) != null ? _a2 : NOOP); return () => { var _a22; const defaultSlot = (_a22 = slots.default) == null ? void 0 : _a22.call(slots, attrs); if (!defaultSlot) return null; if (defaultSlot.length > 1) { return null; } const firstLegitNode = findFirstLegitChild(defaultSlot); if (!firstLegitNode) { return null; } return vue.withDirectives(vue.cloneVNode(firstLegitNode, attrs), [[forwardRefDirective]]); }; } }); function findFirstLegitChild(node) { if (!node) return null; const children = node; for (const child of children) { if (isObject$1(child)) { switch (child.type) { case vue.Comment: continue; case vue.Text: case "svg": return wrapTextContent(child); case vue.Fragment: return findFirstLegitChild(child.children); default: return child; } } return wrapTextContent(child); } return null; } function wrapTextContent(s2) { const ns = useNamespace("only-child"); return vue.createVNode("span", { "class": ns.e("content") }, [s2]); } const __default__$l = vue.defineComponent({ name: "ElPopperTrigger", inheritAttrs: false }); const _sfc_main$B = /* @__PURE__ */ vue.defineComponent({ ...__default__$l, props: popperTriggerProps, setup(__props, { expose }) { const props = __props; const { role, triggerRef } = vue.inject(POPPER_INJECTION_KEY, void 0); useForwardRef(triggerRef); const ariaControls = vue.computed(() => { return ariaHaspopup.value ? props.id : void 0; }); const ariaDescribedby = vue.computed(() => { if (role && role.value === "tooltip") { return props.open && props.id ? props.id : void 0; } return void 0; }); const ariaHaspopup = vue.computed(() => { if (role && role.value !== "tooltip") { return role.value; } return void 0; }); const ariaExpanded = vue.computed(() => { return ariaHaspopup.value ? `${props.open}` : void 0; }); let virtualTriggerAriaStopWatch = void 0; const TRIGGER_ELE_EVENTS = [ "onMouseenter", "onMouseleave", "onClick", "onKeydown", "onFocus", "onBlur", "onContextmenu" ]; vue.onMounted(() => { vue.watch(() => props.virtualRef, (virtualEl) => { if (virtualEl) { triggerRef.value = unrefElement(virtualEl); } }, { immediate: true }); vue.watch(triggerRef, (el, prevEl) => { virtualTriggerAriaStopWatch == null ? void 0 : virtualTriggerAriaStopWatch(); virtualTriggerAriaStopWatch = void 0; if (isElement(el)) { TRIGGER_ELE_EVENTS.forEach((eventName) => { var _a2; const handler = props[eventName]; if (handler) { el.addEventListener(eventName.slice(2).toLowerCase(), handler); (_a2 = prevEl == null ? void 0 : prevEl.removeEventListener) == null ? void 0 : _a2.call(prevEl, eventName.slice(2).toLowerCase(), handler); } }); if (isFocusable(el)) { virtualTriggerAriaStopWatch = vue.watch([ariaControls, ariaDescribedby, ariaHaspopup, ariaExpanded], (watches) => { [ "aria-controls", "aria-describedby", "aria-haspopup", "aria-expanded" ].forEach((key, idx) => { isNil(watches[idx]) ? el.removeAttribute(key) : el.setAttribute(key, watches[idx]); }); }, { immediate: true }); } } if (isElement(prevEl) && isFocusable(prevEl)) { [ "aria-controls", "aria-describedby", "aria-haspopup", "aria-expanded" ].forEach((key) => prevEl.removeAttribute(key)); } }, { immediate: true }); }); vue.onBeforeUnmount(() => { virtualTriggerAriaStopWatch == null ? void 0 : virtualTriggerAriaStopWatch(); virtualTriggerAriaStopWatch = void 0; if (triggerRef.value && isElement(triggerRef.value)) { const el = triggerRef.value; TRIGGER_ELE_EVENTS.forEach((eventName) => { const handler = props[eventName]; if (handler) { el.removeEventListener(eventName.slice(2).toLowerCase(), handler); } }); triggerRef.value = void 0; } }); expose({ triggerRef }); return (_ctx, _cache) => { return !_ctx.virtualTriggering ? (vue.openBlock(), vue.createBlock(vue.unref(OnlyChild), vue.mergeProps({ key: 0 }, _ctx.$attrs, { "aria-controls": vue.unref(ariaControls), "aria-describedby": vue.unref(ariaDescribedby), "aria-expanded": vue.unref(ariaExpanded), "aria-haspopup": vue.unref(ariaHaspopup) }), { default: vue.withCtx(() => [ vue.renderSlot(_ctx.$slots, "default") ]), _: 3 }, 16, ["aria-controls", "aria-describedby", "aria-expanded", "aria-haspopup"])) : vue.createCommentVNode("v-if", true); }; } }); var ElPopperTrigger = /* @__PURE__ */ _export_sfc$1(_sfc_main$B, [["__file", "trigger.vue"]]); const FOCUS_AFTER_TRAPPED = "focus-trap.focus-after-trapped"; const FOCUS_AFTER_RELEASED = "focus-trap.focus-after-released"; const FOCUSOUT_PREVENTED = "focus-trap.focusout-prevented"; const FOCUS_AFTER_TRAPPED_OPTS = { cancelable: true, bubbles: false }; const FOCUSOUT_PREVENTED_OPTS = { cancelable: true, bubbles: false }; const ON_TRAP_FOCUS_EVT = "focusAfterTrapped"; const ON_RELEASE_FOCUS_EVT = "focusAfterReleased"; const FOCUS_TRAP_INJECTION_KEY = Symbol("elFocusTrap"); const focusReason = vue.ref(); const lastUserFocusTimestamp = vue.ref(0); const lastAutomatedFocusTimestamp = vue.ref(0); let focusReasonUserCount = 0; const obtainAllFocusableElements = (element) => { const nodes = []; const walker = document.createTreeWalker(element, NodeFilter.SHOW_ELEMENT, { acceptNode: (node) => { const isHiddenInput = node.tagName === "INPUT" && node.type === "hidden"; if (node.disabled || node.hidden || isHiddenInput) return NodeFilter.FILTER_SKIP; return node.tabIndex >= 0 || node === document.activeElement ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP; } }); while (walker.nextNode()) nodes.push(walker.currentNode); return nodes; }; const getVisibleElement = (elements, container) => { for (const element of elements) { if (!isHidden(element, container)) return element; } }; const isHidden = (element, container) => { if (getComputedStyle(element).visibility === "hidden") return true; while (element) { if (container && element === container) return false; if (getComputedStyle(element).display === "none") return true; element = element.parentElement; } return false; }; const getEdges = (container) => { const focusable = obtainAllFocusableElements(container); const first = getVisibleElement(focusable, container); const last = getVisibleElement(focusable.reverse(), container); return [first, last]; }; const isSelectable = (element) => { return element instanceof HTMLInputElement && "select" in element; }; const tryFocus = (element, shouldSelect) => { if (element && element.focus) { const prevFocusedElement = document.activeElement; let cleanup = false; if (isElement(element) && !isFocusable(element) && !element.getAttribute("tabindex")) { element.setAttribute("tabindex", "-1"); cleanup = true; } element.focus({ preventScroll: true }); lastAutomatedFocusTimestamp.value = window.performance.now(); if (element !== prevFocusedElement && isSelectable(element) && shouldSelect) { element.select(); } if (isElement(element) && cleanup) { element.removeAttribute("tabindex"); } } }; function removeFromStack(list, item) { const copy = [...list]; const idx = list.indexOf(item); if (idx !== -1) { copy.splice(idx, 1); } return copy; } const createFocusableStack = () => { let stack = []; const push = (layer) => { const currentLayer = stack[0]; if (currentLayer && layer !== currentLayer) { currentLayer.pause(); } stack = removeFromStack(stack, layer); stack.unshift(layer); }; const remove = (layer) => { var _a2, _b; stack = removeFromStack(stack, layer); (_b = (_a2 = stack[0]) == null ? void 0 : _a2.resume) == null ? void 0 : _b.call(_a2); }; return { push, remove }; }; const focusFirstDescendant = (elements, shouldSelect = false) => { const prevFocusedElement = document.activeElement; for (const element of elements) { tryFocus(element, shouldSelect); if (document.activeElement !== prevFocusedElement) return; } }; const focusableStack = createFocusableStack(); const isFocusCausedByUserEvent = () => { return lastUserFocusTimestamp.value > lastAutomatedFocusTimestamp.value; }; const notifyFocusReasonPointer = () => { focusReason.value = "pointer"; lastUserFocusTimestamp.value = window.performance.now(); }; const notifyFocusReasonKeydown = () => { focusReason.value = "keyboard"; lastUserFocusTimestamp.value = window.performance.now(); }; const useFocusReason = () => { vue.onMounted(() => { if (focusReasonUserCount === 0) { document.addEventListener("mousedown", notifyFocusReasonPointer); document.addEventListener("touchstart", notifyFocusReasonPointer); document.addEventListener("keydown", notifyFocusReasonKeydown); } focusReasonUserCount++; }); vue.onBeforeUnmount(() => { focusReasonUserCount--; if (focusReasonUserCount <= 0) { document.removeEventListener("mousedown", notifyFocusReasonPointer); document.removeEventListener("touchstart", notifyFocusReasonPointer); document.removeEventListener("keydown", notifyFocusReasonKeydown); } }); return { focusReason, lastUserFocusTimestamp, lastAutomatedFocusTimestamp }; }; const createFocusOutPreventedEvent = (detail) => { return new CustomEvent(FOCUSOUT_PREVENTED, { ...FOCUSOUT_PREVENTED_OPTS, detail }); }; const EVENT_CODE = { tab: "Tab", enter: "Enter", space: "Space", left: "ArrowLeft", up: "ArrowUp", right: "ArrowRight", down: "ArrowDown", esc: "Escape", delete: "Delete", backspace: "Backspace", numpadEnter: "NumpadEnter" }; let registeredEscapeHandlers = []; const cachedHandler = (event) => { if (event.code === EVENT_CODE.esc) { registeredEscapeHandlers.forEach((registeredHandler) => registeredHandler(event)); } }; const useEscapeKeydown = (handler) => { vue.onMounted(() => { if (registeredEscapeHandlers.length === 0) { document.addEventListener("keydown", cachedHandler); } if (isClient) registeredEscapeHandlers.push(handler); }); vue.onBeforeUnmount(() => { registeredEscapeHandlers = registeredEscapeHandlers.filter((registeredHandler) => registeredHandler !== handler); if (registeredEscapeHandlers.length === 0) { if (isClient) document.removeEventListener("keydown", cachedHandler); } }); }; const _sfc_main$A = vue.defineComponent({ name: "ElFocusTrap", inheritAttrs: false, props: { loop: Boolean, trapped: Boolean, focusTrapEl: Object, focusStartEl: { type: [Object, String], default: "first" } }, emits: [ ON_TRAP_FOCUS_EVT, ON_RELEASE_FOCUS_EVT, "focusin", "focusout", "focusout-prevented", "release-requested" ], setup(props, { emit }) { const forwardRef = vue.ref(); let lastFocusBeforeTrapped; let lastFocusAfterTrapped; const { focusReason: focusReason2 } = useFocusReason(); useEscapeKeydown((event) => { if (props.trapped && !focusLayer.paused) { emit("release-requested", event); } }); const focusLayer = { paused: false, pause() { this.paused = true; }, resume() { this.paused = false; } }; const onKeydown = (e) => { if (!props.loop && !props.trapped) return; if (focusLayer.paused) return; const { code, altKey, ctrlKey, metaKey, currentTarget, shiftKey } = e; const { loop } = props; const isTabbing = code === EVENT_CODE.tab && !altKey && !ctrlKey && !metaKey; const currentFocusingEl = document.activeElement; if (isTabbing && currentFocusingEl) { const container = currentTarget; const [first, last] = getEdges(container); const isTabbable = first && last; if (!isTabbable) { if (currentFocusingEl === container) { const focusoutPreventedEvent = createFocusOutPreventedEvent({ focusReason: focusReason2.value }); emit("focusout-prevented", focusoutPreventedEvent); if (!focusoutPreventedEvent.defaultPrevented) { e.preventDefault(); } } } else { if (!shiftKey && currentFocusingEl === last) { const focusoutPreventedEvent = createFocusOutPreventedEvent({ focusReason: focusReason2.value }); emit("focusout-prevented", focusoutPreventedEvent); if (!focusoutPreventedEvent.defaultPrevented) { e.preventDefault(); if (loop) tryFocus(first, true); } } else if (shiftKey && [first, container].includes(currentFocusingEl)) { const focusoutPreventedEvent = createFocusOutPreventedEvent({ focusReason: focusReason2.value }); emit("focusout-prevented", focusoutPreventedEvent); if (!focusoutPreventedEvent.defaultPrevented) { e.preventDefault(); if (loop) tryFocus(last, true); } } } } }; vue.provide(FOCUS_TRAP_INJECTION_KEY, { focusTrapRef: forwardRef, onKeydown }); vue.watch(() => props.focusTrapEl, (focusTrapEl) => { if (focusTrapEl) { forwardRef.value = focusTrapEl; } }, { immediate: true }); vue.watch([forwardRef], ([forwardRef2], [oldForwardRef]) => { if (forwardRef2) { forwardRef2.addEventListener("keydown", onKeydown); forwardRef2.addEventListener("focusin", onFocusIn); forwardRef2.addEventListener("focusout", onFocusOut); } if (oldForwardRef) { oldForwardRef.removeEventListener("keydown", onKeydown); oldForwardRef.removeEventListener("focusin", onFocusIn); oldForwardRef.removeEventListener("focusout", onFocusOut); } }); const trapOnFocus = (e) => { emit(ON_TRAP_FOCUS_EVT, e); }; const releaseOnFocus = (e) => emit(ON_RELEASE_FOCUS_EVT, e); const onFocusIn = (e) => { const trapContainer = vue.unref(forwardRef); if (!trapContainer) return; const target = e.target; const relatedTarget = e.relatedTarget; const isFocusedInTrap = target && trapContainer.contains(target); if (!props.trapped) { const isPrevFocusedInTrap = relatedTarget && trapContainer.contains(relatedTarget); if (!isPrevFocusedInTrap) { lastFocusBeforeTrapped = relatedTarget; } } if (isFocusedInTrap) emit("focusin", e); if (focusLayer.paused) return; if (props.trapped) { if (isFocusedInTrap) { lastFocusAfterTrapped = target; } else { tryFocus(lastFocusAfterTrapped, true); } } }; const onFocusOut = (e) => { const trapContainer = vue.unref(forwardRef); if (focusLayer.paused || !trapContainer) return; if (props.trapped) { const relatedTarget = e.relatedTarget; if (!isNil(relatedTarget) && !trapContainer.contains(relatedTarget)) { setTimeout(() => { if (!focusLayer.paused && props.trapped) { const focusoutPreventedEvent = createFocusOutPreventedEvent({ focusReason: focusReason2.value }); emit("focusout-prevented", focusoutPreventedEvent); if (!focusoutPreventedEvent.defaultPrevented) { tryFocus(lastFocusAfterTrapped, true); } } }, 0); } } else { const target = e.target; const isFocusedInTrap = target && trapContainer.contains(target); if (!isFocusedInTrap) emit("focusout", e); } }; async function startTrap() { await vue.nextTick(); const trapContainer = vue.unref(forwardRef); if (trapContainer) { focusableStack.push(focusLayer); const prevFocusedElement = trapContainer.contains(document.activeElement) ? lastFocusBeforeTrapped : document.activeElement; lastFocusBeforeTrapped = prevFocusedElement; const isPrevFocusContained = trapContainer.contains(prevFocusedElement); if (!isPrevFocusContained) { const focusEvent = new Event(FOCUS_AFTER_TRAPPED, FOCUS_AFTER_TRAPPED_OPTS); trapContainer.addEventListener(FOCUS_AFTER_TRAPPED, trapOnFocus); trapContainer.dispatchEvent(focusEvent); if (!focusEvent.defaultPrevented) { vue.nextTick(() => { let focusStartEl = props.focusStartEl; if (!isString$1(focusStartEl)) { tryFocus(focusStartEl); if (document.activeElement !== focusStartEl) { focusStartEl = "first"; } } if (focusStartEl === "first") { focusFirstDescendant(obtainAllFocusableElements(trapContainer), true); } if (document.activeElement === prevFocusedElement || focusStartEl === "container") { tryFocus(trapContainer); } }); } } } } function stopTrap() { const trapContainer = vue.unref(forwardRef); if (trapContainer) { trapContainer.removeEventListener(FOCUS_AFTER_TRAPPED, trapOnFocus); const releasedEvent = new CustomEvent(FOCUS_AFTER_RELEASED, { ...FOCUS_AFTER_TRAPPED_OPTS, detail: { focusReason: focusReason2.value } }); trapContainer.addEventListener(FOCUS_AFTER_RELEASED, releaseOnFocus); trapContainer.dispatchEvent(releasedEvent); if (!releasedEvent.defaultPrevented && (focusReason2.value == "keyboard" || !isFocusCausedByUserEvent() || trapContainer.contains(document.activeElement))) { tryFocus(lastFocusBeforeTrapped != null ? lastFocusBeforeTrapped : document.body); } trapContainer.removeEventListener(FOCUS_AFTER_RELEASED, releaseOnFocus); focusableStack.remove(focusLayer); } } vue.onMounted(() => { if (props.trapped) { startTrap(); } vue.watch(() => props.trapped, (trapped) => { if (trapped) { startTrap(); } else { stopTrap(); } }); }); vue.onBeforeUnmount(() => { if (props.trapped) { stopTrap(); } if (forwardRef.value) { forwardRef.value.removeEventListener("keydown", onKeydown); forwardRef.value.removeEventListener("focusin", onFocusIn); forwardRef.value.removeEventListener("focusout", onFocusOut); forwardRef.value = void 0; } }); return { onKeydown }; } }); function _sfc_render$3(_ctx, _cache, $props, $setup, $data, $options) { return vue.renderSlot(_ctx.$slots, "default", { handleKeydown: _ctx.onKeydown }); } var ElFocusTrap = /* @__PURE__ */ _export_sfc$1(_sfc_main$A, [["render", _sfc_render$3], ["__file", "focus-trap.vue"]]); var E$1 = "top", R = "bottom", W = "right", P$1 = "left", me = "auto", G = [E$1, R, W, P$1], U$1 = "start", J = "end", Xe = "clippingParents", je = "viewport", K = "popper", Ye = "reference", De = G.reduce(function(t, e) { return t.concat([e + "-" + U$1, e + "-" + J]); }, []), Ee = [].concat(G, [me]).reduce(function(t, e) { return t.concat([e, e + "-" + U$1, e + "-" + J]); }, []), Ge = "beforeRead", Je = "read", Ke = "afterRead", Qe = "beforeMain", Ze = "main", et = "afterMain", tt = "beforeWrite", nt = "write", rt = "afterWrite", ot = [Ge, Je, Ke, Qe, Ze, et, tt, nt, rt]; function C(t) { return t ? (t.nodeName || "").toLowerCase() : null; } function H(t) { if (t == null) return window; if (t.toString() !== "[object Window]") { var e = t.ownerDocument; return e && e.defaultView || window; } return t; } function Q(t) { var e = H(t).Element; return t instanceof e || t instanceof Element; } function B(t) { var e = H(t).HTMLElement; return t instanceof e || t instanceof HTMLElement; } function Pe(t) { if (typeof ShadowRoot == "undefined") return false; var e = H(t).ShadowRoot; return t instanceof e || t instanceof ShadowRoot; } function Mt(t) { var e = t.state; Object.keys(e.elements).forEach(function(n) { var r = e.styles[n] || {}, o2 = e.attributes[n] || {}, i = e.elements[n]; !B(i) || !C(i) || (Object.assign(i.style, r), Object.keys(o2).forEach(function(a2) { var s2 = o2[a2]; s2 === false ? i.removeAttribute(a2) : i.setAttribute(a2, s2 === true ? "" : s2); })); }); } function Rt(t) { var e = t.state, n = { popper: { position: e.options.strategy, left: "0", top: "0", margin: "0" }, arrow: { position: "absolute" }, reference: {} }; return Object.assign(e.elements.popper.style, n.popper), e.styles = n, e.elements.arrow && Object.assign(e.elements.arrow.style, n.arrow), function() { Object.keys(e.elements).forEach(function(r) { var o2 = e.elements[r], i = e.attributes[r] || {}, a2 = Object.keys(e.styles.hasOwnProperty(r) ? e.styles[r] : n[r]), s2 = a2.reduce(function(f2, c2) { return f2[c2] = "", f2; }, {}); !B(o2) || !C(o2) || (Object.assign(o2.style, s2), Object.keys(i).forEach(function(f2) { o2.removeAttribute(f2); })); }); }; } var Ae = { name: "applyStyles", enabled: true, phase: "write", fn: Mt, effect: Rt, requires: ["computeStyles"] }; function q(t) { return t.split("-")[0]; } var X$1 = Math.max, ve = Math.min, Z = Math.round; function ee(t, e) { e === void 0 && (e = false); var n = t.getBoundingClientRect(), r = 1, o2 = 1; if (B(t) && e) { var i = t.offsetHeight, a2 = t.offsetWidth; a2 > 0 && (r = Z(n.width) / a2 || 1), i > 0 && (o2 = Z(n.height) / i || 1); } return { width: n.width / r, height: n.height / o2, top: n.top / o2, right: n.right / r, bottom: n.bottom / o2, left: n.left / r, x: n.left / r, y: n.top / o2 }; } function ke(t) { var e = ee(t), n = t.offsetWidth, r = t.offsetHeight; return Math.abs(e.width - n) <= 1 && (n = e.width), Math.abs(e.height - r) <= 1 && (r = e.height), { x: t.offsetLeft, y: t.offsetTop, width: n, height: r }; } function it(t, e) { var n = e.getRootNode && e.getRootNode(); if (t.contains(e)) return true; if (n && Pe(n)) { var r = e; do { if (r && t.isSameNode(r)) return true; r = r.parentNode || r.host; } while (r); } return false; } function N$1(t) { return H(t).getComputedStyle(t); } function Wt(t) { return ["table", "td", "th"].indexOf(C(t)) >= 0; } function I$1(t) { return ((Q(t) ? t.ownerDocument : t.document) || window.document).documentElement; } function ge(t) { return C(t) === "html" ? t : t.assignedSlot || t.parentNode || (Pe(t) ? t.host : null) || I$1(t); } function at(t) { return !B(t) || N$1(t).position === "fixed" ? null : t.offsetParent; } function Bt(t) { var e = navigator.userAgent.toLowerCase().indexOf("firefox") !== -1, n = navigator.userAgent.indexOf("Trident") !== -1; if (n && B(t)) { var r = N$1(t); if (r.position === "fixed") return null; } var o2 = ge(t); for (Pe(o2) && (o2 = o2.host); B(o2) && ["html", "body"].indexOf(C(o2)) < 0; ) { var i = N$1(o2); if (i.transform !== "none" || i.perspective !== "none" || i.contain === "paint" || ["transform", "perspective"].indexOf(i.willChange) !== -1 || e && i.willChange === "filter" || e && i.filter && i.filter !== "none") return o2; o2 = o2.parentNode; } return null; } function se(t) { for (var e = H(t), n = at(t); n && Wt(n) && N$1(n).position === "static"; ) n = at(n); return n && (C(n) === "html" || C(n) === "body" && N$1(n).position === "static") ? e : n || Bt(t) || e; } function Le(t) { return ["top", "bottom"].indexOf(t) >= 0 ? "x" : "y"; } function fe(t, e, n) { return X$1(t, ve(e, n)); } function St(t, e, n) { var r = fe(t, e, n); return r > n ? n : r; } function st() { return { top: 0, right: 0, bottom: 0, left: 0 }; } function ft(t) { return Object.assign({}, st(), t); } function ct(t, e) { return e.reduce(function(n, r) { return n[r] = t, n; }, {}); } var Tt = function(t, e) { return t = typeof t == "function" ? t(Object.assign({}, e.rects, { placement: e.placement })) : t, ft(typeof t != "number" ? t : ct(t, G)); }; function Ht(t) { var e, n = t.state, r = t.name, o2 = t.options, i = n.elements.arrow, a2 = n.modifiersData.popperOffsets, s2 = q(n.placement), f2 = Le(s2), c2 = [P$1, W].indexOf(s2) >= 0, u2 = c2 ? "height" : "width"; if (!(!i || !a2)) { var m2 = Tt(o2.padding, n), v2 = ke(i), l2 = f2 === "y" ? E$1 : P$1, h2 = f2 === "y" ? R : W, p2 = n.rects.reference[u2] + n.rects.reference[f2] - a2[f2] - n.rects.popper[u2], g = a2[f2] - n.rects.reference[f2], x2 = se(i), y = x2 ? f2 === "y" ? x2.clientHeight || 0 : x2.clientWidth || 0 : 0, $2 = p2 / 2 - g / 2, d2 = m2[l2], b2 = y - v2[u2] - m2[h2], w2 = y / 2 - v2[u2] / 2 + $2, O2 = fe(d2, w2, b2), j = f2; n.modifiersData[r] = (e = {}, e[j] = O2, e.centerOffset = O2 - w2, e); } } function Ct(t) { var e = t.state, n = t.options, r = n.element, o2 = r === void 0 ? "[data-popper-arrow]" : r; o2 != null && (typeof o2 == "string" && (o2 = e.elements.popper.querySelector(o2), !o2) || !it(e.elements.popper, o2) || (e.elements.arrow = o2)); } var pt = { name: "arrow", enabled: true, phase: "main", fn: Ht, effect: Ct, requires: ["popperOffsets"], requiresIfExists: ["preventOverflow"] }; function te(t) { return t.split("-")[1]; } var qt = { top: "auto", right: "auto", bottom: "auto", left: "auto" }; function Vt(t) { var e = t.x, n = t.y, r = window, o2 = r.devicePixelRatio || 1; return { x: Z(e * o2) / o2 || 0, y: Z(n * o2) / o2 || 0 }; } function ut(t) { var e, n = t.popper, r = t.popperRect, o2 = t.placement, i = t.variation, a2 = t.offsets, s2 = t.position, f2 = t.gpuAcceleration, c2 = t.adaptive, u2 = t.roundOffsets, m2 = t.isFixed, v2 = a2.x, l2 = v2 === void 0 ? 0 : v2, h2 = a2.y, p2 = h2 === void 0 ? 0 : h2, g = typeof u2 == "function" ? u2({ x: l2, y: p2 }) : { x: l2, y: p2 }; l2 = g.x, p2 = g.y; var x2 = a2.hasOwnProperty("x"), y = a2.hasOwnProperty("y"), $2 = P$1, d2 = E$1, b2 = window; if (c2) { var w2 = se(n), O2 = "clientHeight", j = "clientWidth"; if (w2 === H(n) && (w2 = I$1(n), N$1(w2).position !== "static" && s2 === "absolute" && (O2 = "scrollHeight", j = "scrollWidth")), w2 = w2, o2 === E$1 || (o2 === P$1 || o2 === W) && i === J) { d2 = R; var A2 = m2 && w2 === b2 && b2.visualViewport ? b2.visualViewport.height : w2[O2]; p2 -= A2 - r.height, p2 *= f2 ? 1 : -1; } if (o2 === P$1 || (o2 === E$1 || o2 === R) && i === J) { $2 = W; var k = m2 && w2 === b2 && b2.visualViewport ? b2.visualViewport.width : w2[j]; l2 -= k - r.width, l2 *= f2 ? 1 : -1; } } var D2 = Object.assign({ position: s2 }, c2 && qt), S2 = u2 === true ? Vt({ x: l2, y: p2 }) : { x: l2, y: p2 }; if (l2 = S2.x, p2 = S2.y, f2) { var L; return Object.assign({}, D2, (L = {}, L[d2] = y ? "0" : "", L[$2] = x2 ? "0" : "", L.transform = (b2.devicePixelRatio || 1) <= 1 ? "translate(" + l2 + "px, " + p2 + "px)" : "translate3d(" + l2 + "px, " + p2 + "px, 0)", L)); } return Object.assign({}, D2, (e = {}, e[d2] = y ? p2 + "px" : "", e[$2] = x2 ? l2 + "px" : "", e.transform = "", e)); } function Nt(t) { var e = t.state, n = t.options, r = n.gpuAcceleration, o2 = r === void 0 ? true : r, i = n.adaptive, a2 = i === void 0 ? true : i, s2 = n.roundOffsets, f2 = s2 === void 0 ? true : s2, c2 = { placement: q(e.placement), variation: te(e.placement), popper: e.elements.popper, popperRect: e.rects.popper, gpuAcceleration: o2, isFixed: e.options.strategy === "fixed" }; e.modifiersData.popperOffsets != null && (e.styles.popper = Object.assign({}, e.styles.popper, ut(Object.assign({}, c2, { offsets: e.modifiersData.popperOffsets, position: e.options.strategy, adaptive: a2, roundOffsets: f2 })))), e.modifiersData.arrow != null && (e.styles.arrow = Object.assign({}, e.styles.arrow, ut(Object.assign({}, c2, { offsets: e.modifiersData.arrow, position: "absolute", adaptive: false, roundOffsets: f2 })))), e.attributes.popper = Object.assign({}, e.attributes.popper, { "data-popper-placement": e.placement }); } var Me = { name: "computeStyles", enabled: true, phase: "beforeWrite", fn: Nt, data: {} }, ye = { passive: true }; function It(t) { var e = t.state, n = t.instance, r = t.options, o2 = r.scroll, i = o2 === void 0 ? true : o2, a2 = r.resize, s2 = a2 === void 0 ? true : a2, f2 = H(e.elements.popper), c2 = [].concat(e.scrollParents.reference, e.scrollParents.popper); return i && c2.forEach(function(u2) { u2.addEventListener("scroll", n.update, ye); }), s2 && f2.addEventListener("resize", n.update, ye), function() { i && c2.forEach(function(u2) { u2.removeEventListener("scroll", n.update, ye); }), s2 && f2.removeEventListener("resize", n.update, ye); }; } var Re = { name: "eventListeners", enabled: true, phase: "write", fn: function() { }, effect: It, data: {} }, _t = { left: "right", right: "left", bottom: "top", top: "bottom" }; function be(t) { return t.replace(/left|right|bottom|top/g, function(e) { return _t[e]; }); } var zt = { start: "end", end: "start" }; function lt(t) { return t.replace(/start|end/g, function(e) { return zt[e]; }); } function We(t) { var e = H(t), n = e.pageXOffset, r = e.pageYOffset; return { scrollLeft: n, scrollTop: r }; } function Be(t) { return ee(I$1(t)).left + We(t).scrollLeft; } function Ft(t) { var e = H(t), n = I$1(t), r = e.visualViewport, o2 = n.clientWidth, i = n.clientHeight, a2 = 0, s2 = 0; return r && (o2 = r.width, i = r.height, /^((?!chrome|android).)*safari/i.test(navigator.userAgent) || (a2 = r.offsetLeft, s2 = r.offsetTop)), { width: o2, height: i, x: a2 + Be(t), y: s2 }; } function Ut(t) { var e, n = I$1(t), r = We(t), o2 = (e = t.ownerDocument) == null ? void 0 : e.body, i = X$1(n.scrollWidth, n.clientWidth, o2 ? o2.scrollWidth : 0, o2 ? o2.clientWidth : 0), a2 = X$1(n.scrollHeight, n.clientHeight, o2 ? o2.scrollHeight : 0, o2 ? o2.clientHeight : 0), s2 = -r.scrollLeft + Be(t), f2 = -r.scrollTop; return N$1(o2 || n).direction === "rtl" && (s2 += X$1(n.clientWidth, o2 ? o2.clientWidth : 0) - i), { width: i, height: a2, x: s2, y: f2 }; } function Se(t) { var e = N$1(t), n = e.overflow, r = e.overflowX, o2 = e.overflowY; return /auto|scroll|overlay|hidden/.test(n + o2 + r); } function dt(t) { return ["html", "body", "#document"].indexOf(C(t)) >= 0 ? t.ownerDocument.body : B(t) && Se(t) ? t : dt(ge(t)); } function ce(t, e) { var n; e === void 0 && (e = []); var r = dt(t), o2 = r === ((n = t.ownerDocument) == null ? void 0 : n.body), i = H(r), a2 = o2 ? [i].concat(i.visualViewport || [], Se(r) ? r : []) : r, s2 = e.concat(a2); return o2 ? s2 : s2.concat(ce(ge(a2))); } function Te(t) { return Object.assign({}, t, { left: t.x, top: t.y, right: t.x + t.width, bottom: t.y + t.height }); } function Xt(t) { var e = ee(t); return e.top = e.top + t.clientTop, e.left = e.left + t.clientLeft, e.bottom = e.top + t.clientHeight, e.right = e.left + t.clientWidth, e.width = t.clientWidth, e.height = t.clientHeight, e.x = e.left, e.y = e.top, e; } function ht(t, e) { return e === je ? Te(Ft(t)) : Q(e) ? Xt(e) : Te(Ut(I$1(t))); } function Yt(t) { var e = ce(ge(t)), n = ["absolute", "fixed"].indexOf(N$1(t).position) >= 0, r = n && B(t) ? se(t) : t; return Q(r) ? e.filter(function(o2) { return Q(o2) && it(o2, r) && C(o2) !== "body"; }) : []; } function Gt(t, e, n) { var r = e === "clippingParents" ? Yt(t) : [].concat(e), o2 = [].concat(r, [n]), i = o2[0], a2 = o2.reduce(function(s2, f2) { var c2 = ht(t, f2); return s2.top = X$1(c2.top, s2.top), s2.right = ve(c2.right, s2.right), s2.bottom = ve(c2.bottom, s2.bottom), s2.left = X$1(c2.left, s2.left), s2; }, ht(t, i)); return a2.width = a2.right - a2.left, a2.height = a2.bottom - a2.top, a2.x = a2.left, a2.y = a2.top, a2; } function mt(t) { var e = t.reference, n = t.element, r = t.placement, o2 = r ? q(r) : null, i = r ? te(r) : null, a2 = e.x + e.width / 2 - n.width / 2, s2 = e.y + e.height / 2 - n.height / 2, f2; switch (o2) { case E$1: f2 = { x: a2, y: e.y - n.height }; break; case R: f2 = { x: a2, y: e.y + e.height }; break; case W: f2 = { x: e.x + e.width, y: s2 }; break; case P$1: f2 = { x: e.x - n.width, y: s2 }; break; default: f2 = { x: e.x, y: e.y }; } var c2 = o2 ? Le(o2) : null; if (c2 != null) { var u2 = c2 === "y" ? "height" : "width"; switch (i) { case U$1: f2[c2] = f2[c2] - (e[u2] / 2 - n[u2] / 2); break; case J: f2[c2] = f2[c2] + (e[u2] / 2 - n[u2] / 2); break; } } return f2; } function ne(t, e) { e === void 0 && (e = {}); var n = e, r = n.placement, o2 = r === void 0 ? t.placement : r, i = n.boundary, a2 = i === void 0 ? Xe : i, s2 = n.rootBoundary, f2 = s2 === void 0 ? je : s2, c2 = n.elementContext, u2 = c2 === void 0 ? K : c2, m2 = n.altBoundary, v2 = m2 === void 0 ? false : m2, l2 = n.padding, h2 = l2 === void 0 ? 0 : l2, p2 = ft(typeof h2 != "number" ? h2 : ct(h2, G)), g = u2 === K ? Ye : K, x2 = t.rects.popper, y = t.elements[v2 ? g : u2], $2 = Gt(Q(y) ? y : y.contextElement || I$1(t.elements.popper), a2, f2), d2 = ee(t.elements.reference), b2 = mt({ reference: d2, element: x2, placement: o2 }), w2 = Te(Object.assign({}, x2, b2)), O2 = u2 === K ? w2 : d2, j = { top: $2.top - O2.top + p2.top, bottom: O2.bottom - $2.bottom + p2.bottom, left: $2.left - O2.left + p2.left, right: O2.right - $2.right + p2.right }, A2 = t.modifiersData.offset; if (u2 === K && A2) { var k = A2[o2]; Object.keys(j).forEach(function(D2) { var S2 = [W, R].indexOf(D2) >= 0 ? 1 : -1, L = [E$1, R].indexOf(D2) >= 0 ? "y" : "x"; j[D2] += k[L] * S2; }); } return j; } function Jt(t, e) { e === void 0 && (e = {}); var n = e, r = n.placement, o2 = n.boundary, i = n.rootBoundary, a2 = n.padding, s2 = n.flipVariations, f2 = n.allowedAutoPlacements, c2 = f2 === void 0 ? Ee : f2, u2 = te(r), m2 = u2 ? s2 ? De : De.filter(function(h2) { return te(h2) === u2; }) : G, v2 = m2.filter(function(h2) { return c2.indexOf(h2) >= 0; }); v2.length === 0 && (v2 = m2); var l2 = v2.reduce(function(h2, p2) { return h2[p2] = ne(t, { placement: p2, boundary: o2, rootBoundary: i, padding: a2 })[q(p2)], h2; }, {}); return Object.keys(l2).sort(function(h2, p2) { return l2[h2] - l2[p2]; }); } function Kt(t) { if (q(t) === me) return []; var e = be(t); return [lt(t), e, lt(e)]; } function Qt(t) { var e = t.state, n = t.options, r = t.name; if (!e.modifiersData[r]._skip) { for (var o2 = n.mainAxis, i = o2 === void 0 ? true : o2, a2 = n.altAxis, s2 = a2 === void 0 ? true : a2, f2 = n.fallbackPlacements, c2 = n.padding, u2 = n.boundary, m2 = n.rootBoundary, v2 = n.altBoundary, l2 = n.flipVariations, h2 = l2 === void 0 ? true : l2, p2 = n.allowedAutoPlacements, g = e.options.placement, x2 = q(g), y = x2 === g, $2 = f2 || (y || !h2 ? [be(g)] : Kt(g)), d2 = [g].concat($2).reduce(function(z, V) { return z.concat(q(V) === me ? Jt(e, { placement: V, boundary: u2, rootBoundary: m2, padding: c2, flipVariations: h2, allowedAutoPlacements: p2 }) : V); }, []), b2 = e.rects.reference, w2 = e.rects.popper, O2 = /* @__PURE__ */ new Map(), j = true, A2 = d2[0], k = 0; k < d2.length; k++) { var D2 = d2[k], S2 = q(D2), L = te(D2) === U$1, re = [E$1, R].indexOf(S2) >= 0, oe = re ? "width" : "height", M2 = ne(e, { placement: D2, boundary: u2, rootBoundary: m2, altBoundary: v2, padding: c2 }), T2 = re ? L ? W : P$1 : L ? R : E$1; b2[oe] > w2[oe] && (T2 = be(T2)); var pe = be(T2), _2 = []; if (i && _2.push(M2[S2] <= 0), s2 && _2.push(M2[T2] <= 0, M2[pe] <= 0), _2.every(function(z) { return z; })) { A2 = D2, j = false; break; } O2.set(D2, _2); } if (j) for (var ue = h2 ? 3 : 1, xe = function(z) { var V = d2.find(function(de) { var ae = O2.get(de); if (ae) return ae.slice(0, z).every(function(Y2) { return Y2; }); }); if (V) return A2 = V, "break"; }, ie = ue; ie > 0; ie--) { var le = xe(ie); if (le === "break") break; } e.placement !== A2 && (e.modifiersData[r]._skip = true, e.placement = A2, e.reset = true); } } var vt = { name: "flip", enabled: true, phase: "main", fn: Qt, requiresIfExists: ["offset"], data: { _skip: false } }; function gt(t, e, n) { return n === void 0 && (n = { x: 0, y: 0 }), { top: t.top - e.height - n.y, right: t.right - e.width + n.x, bottom: t.bottom - e.height + n.y, left: t.left - e.width - n.x }; } function yt(t) { return [E$1, W, R, P$1].some(function(e) { return t[e] >= 0; }); } function Zt(t) { var e = t.state, n = t.name, r = e.rects.reference, o2 = e.rects.popper, i = e.modifiersData.preventOverflow, a2 = ne(e, { elementContext: "reference" }), s2 = ne(e, { altBoundary: true }), f2 = gt(a2, r), c2 = gt(s2, o2, i), u2 = yt(f2), m2 = yt(c2); e.modifiersData[n] = { referenceClippingOffsets: f2, popperEscapeOffsets: c2, isReferenceHidden: u2, hasPopperEscaped: m2 }, e.attributes.popper = Object.assign({}, e.attributes.popper, { "data-popper-reference-hidden": u2, "data-popper-escaped": m2 }); } var bt = { name: "hide", enabled: true, phase: "main", requiresIfExists: ["preventOverflow"], fn: Zt }; function en(t, e, n) { var r = q(t), o2 = [P$1, E$1].indexOf(r) >= 0 ? -1 : 1, i = typeof n == "function" ? n(Object.assign({}, e, { placement: t })) : n, a2 = i[0], s2 = i[1]; return a2 = a2 || 0, s2 = (s2 || 0) * o2, [P$1, W].indexOf(r) >= 0 ? { x: s2, y: a2 } : { x: a2, y: s2 }; } function tn(t) { var e = t.state, n = t.options, r = t.name, o2 = n.offset, i = o2 === void 0 ? [0, 0] : o2, a2 = Ee.reduce(function(u2, m2) { return u2[m2] = en(m2, e.rects, i), u2; }, {}), s2 = a2[e.placement], f2 = s2.x, c2 = s2.y; e.modifiersData.popperOffsets != null && (e.modifiersData.popperOffsets.x += f2, e.modifiersData.popperOffsets.y += c2), e.modifiersData[r] = a2; } var wt = { name: "offset", enabled: true, phase: "main", requires: ["popperOffsets"], fn: tn }; function nn(t) { var e = t.state, n = t.name; e.modifiersData[n] = mt({ reference: e.rects.reference, element: e.rects.popper, placement: e.placement }); } var He = { name: "popperOffsets", enabled: true, phase: "read", fn: nn, data: {} }; function rn(t) { return t === "x" ? "y" : "x"; } function on(t) { var e = t.state, n = t.options, r = t.name, o2 = n.mainAxis, i = o2 === void 0 ? true : o2, a2 = n.altAxis, s2 = a2 === void 0 ? false : a2, f2 = n.boundary, c2 = n.rootBoundary, u2 = n.altBoundary, m2 = n.padding, v2 = n.tether, l2 = v2 === void 0 ? true : v2, h2 = n.tetherOffset, p2 = h2 === void 0 ? 0 : h2, g = ne(e, { boundary: f2, rootBoundary: c2, padding: m2, altBoundary: u2 }), x2 = q(e.placement), y = te(e.placement), $2 = !y, d2 = Le(x2), b2 = rn(d2), w2 = e.modifiersData.popperOffsets, O2 = e.rects.reference, j = e.rects.popper, A2 = typeof p2 == "function" ? p2(Object.assign({}, e.rects, { placement: e.placement })) : p2, k = typeof A2 == "number" ? { mainAxis: A2, altAxis: A2 } : Object.assign({ mainAxis: 0, altAxis: 0 }, A2), D2 = e.modifiersData.offset ? e.modifiersData.offset[e.placement] : null, S2 = { x: 0, y: 0 }; if (w2) { if (i) { var L, re = d2 === "y" ? E$1 : P$1, oe = d2 === "y" ? R : W, M2 = d2 === "y" ? "height" : "width", T2 = w2[d2], pe = T2 + g[re], _2 = T2 - g[oe], ue = l2 ? -j[M2] / 2 : 0, xe = y === U$1 ? O2[M2] : j[M2], ie = y === U$1 ? -j[M2] : -O2[M2], le = e.elements.arrow, z = l2 && le ? ke(le) : { width: 0, height: 0 }, V = e.modifiersData["arrow#persistent"] ? e.modifiersData["arrow#persistent"].padding : st(), de = V[re], ae = V[oe], Y2 = fe(0, O2[M2], z[M2]), jt = $2 ? O2[M2] / 2 - ue - Y2 - de - k.mainAxis : xe - Y2 - de - k.mainAxis, Dt = $2 ? -O2[M2] / 2 + ue + Y2 + ae + k.mainAxis : ie + Y2 + ae + k.mainAxis, Oe = e.elements.arrow && se(e.elements.arrow), Et = Oe ? d2 === "y" ? Oe.clientTop || 0 : Oe.clientLeft || 0 : 0, Ce = (L = D2 == null ? void 0 : D2[d2]) != null ? L : 0, Pt = T2 + jt - Ce - Et, At = T2 + Dt - Ce, qe = fe(l2 ? ve(pe, Pt) : pe, T2, l2 ? X$1(_2, At) : _2); w2[d2] = qe, S2[d2] = qe - T2; } if (s2) { var Ve, kt = d2 === "x" ? E$1 : P$1, Lt = d2 === "x" ? R : W, F2 = w2[b2], he = b2 === "y" ? "height" : "width", Ne = F2 + g[kt], Ie = F2 - g[Lt], $e = [E$1, P$1].indexOf(x2) !== -1, _e = (Ve = D2 == null ? void 0 : D2[b2]) != null ? Ve : 0, ze = $e ? Ne : F2 - O2[he] - j[he] - _e + k.altAxis, Fe = $e ? F2 + O2[he] + j[he] - _e - k.altAxis : Ie, Ue = l2 && $e ? St(ze, F2, Fe) : fe(l2 ? ze : Ne, F2, l2 ? Fe : Ie); w2[b2] = Ue, S2[b2] = Ue - F2; } e.modifiersData[r] = S2; } } var xt = { name: "preventOverflow", enabled: true, phase: "main", fn: on, requiresIfExists: ["offset"] }; function an(t) { return { scrollLeft: t.scrollLeft, scrollTop: t.scrollTop }; } function sn(t) { return t === H(t) || !B(t) ? We(t) : an(t); } function fn(t) { var e = t.getBoundingClientRect(), n = Z(e.width) / t.offsetWidth || 1, r = Z(e.height) / t.offsetHeight || 1; return n !== 1 || r !== 1; } function cn(t, e, n) { n === void 0 && (n = false); var r = B(e), o2 = B(e) && fn(e), i = I$1(e), a2 = ee(t, o2), s2 = { scrollLeft: 0, scrollTop: 0 }, f2 = { x: 0, y: 0 }; return (r || !r && !n) && ((C(e) !== "body" || Se(i)) && (s2 = sn(e)), B(e) ? (f2 = ee(e, true), f2.x += e.clientLeft, f2.y += e.clientTop) : i && (f2.x = Be(i))), { x: a2.left + s2.scrollLeft - f2.x, y: a2.top + s2.scrollTop - f2.y, width: a2.width, height: a2.height }; } function pn(t) { var e = /* @__PURE__ */ new Map(), n = /* @__PURE__ */ new Set(), r = []; t.forEach(function(i) { e.set(i.name, i); }); function o2(i) { n.add(i.name); var a2 = [].concat(i.requires || [], i.requiresIfExists || []); a2.forEach(function(s2) { if (!n.has(s2)) { var f2 = e.get(s2); f2 && o2(f2); } }), r.push(i); } return t.forEach(function(i) { n.has(i.name) || o2(i); }), r; } function un(t) { var e = pn(t); return ot.reduce(function(n, r) { return n.concat(e.filter(function(o2) { return o2.phase === r; })); }, []); } function ln(t) { var e; return function() { return e || (e = new Promise(function(n) { Promise.resolve().then(function() { e = void 0, n(t()); }); })), e; }; } function dn(t) { var e = t.reduce(function(n, r) { var o2 = n[r.name]; return n[r.name] = o2 ? Object.assign({}, o2, r, { options: Object.assign({}, o2.options, r.options), data: Object.assign({}, o2.data, r.data) }) : r, n; }, {}); return Object.keys(e).map(function(n) { return e[n]; }); } var Ot = { placement: "bottom", modifiers: [], strategy: "absolute" }; function $t() { for (var t = arguments.length, e = new Array(t), n = 0; n < t; n++) e[n] = arguments[n]; return !e.some(function(r) { return !(r && typeof r.getBoundingClientRect == "function"); }); } function we(t) { t === void 0 && (t = {}); var e = t, n = e.defaultModifiers, r = n === void 0 ? [] : n, o2 = e.defaultOptions, i = o2 === void 0 ? Ot : o2; return function(a2, s2, f2) { f2 === void 0 && (f2 = i); var c2 = { placement: "bottom", orderedModifiers: [], options: Object.assign({}, Ot, i), modifiersData: {}, elements: { reference: a2, popper: s2 }, attributes: {}, styles: {} }, u2 = [], m2 = false, v2 = { state: c2, setOptions: function(p2) { var g = typeof p2 == "function" ? p2(c2.options) : p2; h2(), c2.options = Object.assign({}, i, c2.options, g), c2.scrollParents = { reference: Q(a2) ? ce(a2) : a2.contextElement ? ce(a2.contextElement) : [], popper: ce(s2) }; var x2 = un(dn([].concat(r, c2.options.modifiers))); return c2.orderedModifiers = x2.filter(function(y) { return y.enabled; }), l2(), v2.update(); }, forceUpdate: function() { if (!m2) { var p2 = c2.elements, g = p2.reference, x2 = p2.popper; if ($t(g, x2)) { c2.rects = { reference: cn(g, se(x2), c2.options.strategy === "fixed"), popper: ke(x2) }, c2.reset = false, c2.placement = c2.options.placement, c2.orderedModifiers.forEach(function(j) { return c2.modifiersData[j.name] = Object.assign({}, j.data); }); for (var y = 0; y < c2.orderedModifiers.length; y++) { if (c2.reset === true) { c2.reset = false, y = -1; continue; } var $2 = c2.orderedModifiers[y], d2 = $2.fn, b2 = $2.options, w2 = b2 === void 0 ? {} : b2, O2 = $2.name; typeof d2 == "function" && (c2 = d2({ state: c2, options: w2, name: O2, instance: v2 }) || c2); } } } }, update: ln(function() { return new Promise(function(p2) { v2.forceUpdate(), p2(c2); }); }), destroy: function() { h2(), m2 = true; } }; if (!$t(a2, s2)) return v2; v2.setOptions(f2).then(function(p2) { !m2 && f2.onFirstUpdate && f2.onFirstUpdate(p2); }); function l2() { c2.orderedModifiers.forEach(function(p2) { var g = p2.name, x2 = p2.options, y = x2 === void 0 ? {} : x2, $2 = p2.effect; if (typeof $2 == "function") { var d2 = $2({ state: c2, name: g, instance: v2, options: y }), b2 = function() { }; u2.push(d2 || b2); } }); } function h2() { u2.forEach(function(p2) { return p2(); }), u2 = []; } return v2; }; } we(); var mn = [Re, He, Me, Ae]; we({ defaultModifiers: mn }); var gn = [Re, He, Me, Ae, wt, vt, xt, pt, bt], yn = we({ defaultModifiers: gn }); const POSITIONING_STRATEGIES = ["fixed", "absolute"]; const popperCoreConfigProps = buildProps({ boundariesPadding: { type: Number, default: 0 }, fallbackPlacements: { type: definePropType(Array), default: void 0 }, gpuAcceleration: { type: Boolean, default: true }, offset: { type: Number, default: 12 }, placement: { type: String, values: Ee, default: "bottom" }, popperOptions: { type: definePropType(Object), default: () => ({}) }, strategy: { type: String, values: POSITIONING_STRATEGIES, default: "absolute" } }); const popperContentProps = buildProps({ ...popperCoreConfigProps, id: String, style: { type: definePropType([String, Array, Object]) }, className: { type: definePropType([String, Array, Object]) }, effect: { type: definePropType(String), default: "dark" }, visible: Boolean, enterable: { type: Boolean, default: true }, pure: Boolean, focusOnShow: { type: Boolean, default: false }, trapping: { type: Boolean, default: false }, popperClass: { type: definePropType([String, Array, Object]) }, popperStyle: { type: definePropType([String, Array, Object]) }, referenceEl: { type: definePropType(Object) }, triggerTargetEl: { type: definePropType(Object) }, stopPopperMouseEvent: { type: Boolean, default: true }, virtualTriggering: Boolean, zIndex: Number, ...useAriaProps(["ariaLabel"]) }); const popperContentEmits = { mouseenter: (evt) => evt instanceof MouseEvent, mouseleave: (evt) => evt instanceof MouseEvent, focus: () => true, blur: () => true, close: () => true }; const usePopperContentFocusTrap = (props, emit) => { const trapped = vue.ref(false); const focusStartRef = vue.ref(); const onFocusAfterTrapped = () => { emit("focus"); }; const onFocusAfterReleased = (event) => { var _a2; if (((_a2 = event.detail) == null ? void 0 : _a2.focusReason) !== "pointer") { focusStartRef.value = "first"; emit("blur"); } }; const onFocusInTrap = (event) => { if (props.visible && !trapped.value) { if (event.target) { focusStartRef.value = event.target; } trapped.value = true; } }; const onFocusoutPrevented = (event) => { if (!props.trapping) { if (event.detail.focusReason === "pointer") { event.preventDefault(); } trapped.value = false; } }; const onReleaseRequested = () => { trapped.value = false; emit("close"); }; return { focusStartRef, trapped, onFocusAfterReleased, onFocusAfterTrapped, onFocusInTrap, onFocusoutPrevented, onReleaseRequested }; }; const buildPopperOptions = (props, modifiers = []) => { const { placement, strategy, popperOptions } = props; const options = { placement, strategy, ...popperOptions, modifiers: [...genModifiers(props), ...modifiers] }; deriveExtraModifiers(options, popperOptions == null ? void 0 : popperOptions.modifiers); return options; }; const unwrapMeasurableEl = ($el) => { if (!isClient) return; return unrefElement($el); }; function genModifiers(options) { const { offset, gpuAcceleration, fallbackPlacements } = options; return [ { name: "offset", options: { offset: [0, offset != null ? offset : 12] } }, { name: "preventOverflow", options: { padding: { top: 2, bottom: 2, left: 5, right: 5 } } }, { name: "flip", options: { padding: 5, fallbackPlacements } }, { name: "computeStyles", options: { gpuAcceleration } } ]; } function deriveExtraModifiers(options, modifiers) { if (modifiers) { options.modifiers = [...options.modifiers, ...modifiers != null ? modifiers : []]; } } const usePopper = (referenceElementRef, popperElementRef, opts = {}) => { const stateUpdater = { name: "updateState", enabled: true, phase: "write", fn: ({ state }) => { const derivedState = deriveState(state); Object.assign(states.value, derivedState); }, requires: ["computeStyles"] }; const options = vue.computed(() => { const { onFirstUpdate, placement, strategy, modifiers } = vue.unref(opts); return { onFirstUpdate, placement: placement || "bottom", strategy: strategy || "absolute", modifiers: [ ...modifiers || [], stateUpdater, { name: "applyStyles", enabled: false } ] }; }); const instanceRef = vue.shallowRef(); const states = vue.ref({ styles: { popper: { position: vue.unref(options).strategy, left: "0", top: "0" }, arrow: { position: "absolute" } }, attributes: {} }); const destroy = () => { if (!instanceRef.value) return; instanceRef.value.destroy(); instanceRef.value = void 0; }; vue.watch(options, (newOptions) => { const instance = vue.unref(instanceRef); if (instance) { instance.setOptions(newOptions); } }, { deep: true }); vue.watch([referenceElementRef, popperElementRef], ([referenceElement, popperElement]) => { destroy(); if (!referenceElement || !popperElement) return; instanceRef.value = yn(referenceElement, popperElement, vue.unref(options)); }); vue.onBeforeUnmount(() => { destroy(); }); return { state: vue.computed(() => { var _a2; return { ...((_a2 = vue.unref(instanceRef)) == null ? void 0 : _a2.state) || {} }; }), styles: vue.computed(() => vue.unref(states).styles), attributes: vue.computed(() => vue.unref(states).attributes), update: () => { var _a2; return (_a2 = vue.unref(instanceRef)) == null ? void 0 : _a2.update(); }, forceUpdate: () => { var _a2; return (_a2 = vue.unref(instanceRef)) == null ? void 0 : _a2.forceUpdate(); }, instanceRef: vue.computed(() => vue.unref(instanceRef)) }; }; function deriveState(state) { const elements = Object.keys(state.elements); const styles = fromPairs(elements.map((element) => [element, state.styles[element] || {}])); const attributes = fromPairs(elements.map((element) => [element, state.attributes[element]])); return { styles, attributes }; } const DEFAULT_ARROW_OFFSET = 0; const usePopperContent = (props) => { const { popperInstanceRef, contentRef, triggerRef, role } = vue.inject(POPPER_INJECTION_KEY, void 0); const arrowRef = vue.ref(); const arrowOffset = vue.ref(); const eventListenerModifier = vue.computed(() => { return { name: "eventListeners", enabled: !!props.visible }; }); const arrowModifier = vue.computed(() => { var _a2; const arrowEl = vue.unref(arrowRef); const offset = (_a2 = vue.unref(arrowOffset)) != null ? _a2 : DEFAULT_ARROW_OFFSET; return { name: "arrow", enabled: !isUndefined$1(arrowEl), options: { element: arrowEl, padding: offset } }; }); const options = vue.computed(() => { return { onFirstUpdate: () => { update(); }, ...buildPopperOptions(props, [ vue.unref(arrowModifier), vue.unref(eventListenerModifier) ]) }; }); const computedReference = vue.computed(() => unwrapMeasurableEl(props.referenceEl) || vue.unref(triggerRef)); const { attributes, state, styles, update, forceUpdate, instanceRef } = usePopper(computedReference, contentRef, options); vue.watch(instanceRef, (instance) => popperInstanceRef.value = instance); vue.onMounted(() => { vue.watch(() => { var _a2; return (_a2 = vue.unref(computedReference)) == null ? void 0 : _a2.getBoundingClientRect(); }, () => { update(); }); }); return { attributes, arrowRef, contentRef, instanceRef, state, styles, role, forceUpdate, update }; }; const usePopperContentDOM = (props, { attributes, styles, role }) => { const { nextZIndex } = useZIndex(); const ns = useNamespace("popper"); const contentAttrs = vue.computed(() => vue.unref(attributes).popper); const contentZIndex = vue.ref(isNumber(props.zIndex) ? props.zIndex : nextZIndex()); const contentClass = vue.computed(() => [ ns.b(), ns.is("pure", props.pure), ns.is(props.effect), props.popperClass ]); const contentStyle = vue.computed(() => { return [ { zIndex: vue.unref(contentZIndex) }, vue.unref(styles).popper, props.popperStyle || {} ]; }); const ariaModal = vue.computed(() => role.value === "dialog" ? "false" : void 0); const arrowStyle = vue.computed(() => vue.unref(styles).arrow || {}); const updateZIndex = () => { contentZIndex.value = isNumber(props.zIndex) ? props.zIndex : nextZIndex(); }; return { ariaModal, arrowStyle, contentAttrs, contentClass, contentStyle, contentZIndex, updateZIndex }; }; const __default__$k = vue.defineComponent({ name: "ElPopperContent" }); const _sfc_main$z = /* @__PURE__ */ vue.defineComponent({ ...__default__$k, props: popperContentProps, emits: popperContentEmits, setup(__props, { expose, emit }) { const props = __props; const { focusStartRef, trapped, onFocusAfterReleased, onFocusAfterTrapped, onFocusInTrap, onFocusoutPrevented, onReleaseRequested } = usePopperContentFocusTrap(props, emit); const { attributes, arrowRef, contentRef, styles, instanceRef, role, update } = usePopperContent(props); const { ariaModal, arrowStyle, contentAttrs, contentClass, contentStyle, updateZIndex } = usePopperContentDOM(props, { styles, attributes, role }); const formItemContext = vue.inject(formItemContextKey, void 0); const arrowOffset = vue.ref(); vue.provide(POPPER_CONTENT_INJECTION_KEY, { arrowStyle, arrowRef, arrowOffset }); if (formItemContext) { vue.provide(formItemContextKey, { ...formItemContext, addInputId: NOOP, removeInputId: NOOP }); } let triggerTargetAriaStopWatch = void 0; const updatePopper = (shouldUpdateZIndex = true) => { update(); shouldUpdateZIndex && updateZIndex(); }; const togglePopperAlive = () => { updatePopper(false); if (props.visible && props.focusOnShow) { trapped.value = true; } else if (props.visible === false) { trapped.value = false; } }; vue.onMounted(() => { vue.watch(() => props.triggerTargetEl, (triggerTargetEl, prevTriggerTargetEl) => { triggerTargetAriaStopWatch == null ? void 0 : triggerTargetAriaStopWatch(); triggerTargetAriaStopWatch = void 0; const el = vue.unref(triggerTargetEl || contentRef.value); const prevEl = vue.unref(prevTriggerTargetEl || contentRef.value); if (isElement(el)) { triggerTargetAriaStopWatch = vue.watch([role, () => props.ariaLabel, ariaModal, () => props.id], (watches) => { ["role", "aria-label", "aria-modal", "id"].forEach((key, idx) => { isNil(watches[idx]) ? el.removeAttribute(key) : el.setAttribute(key, watches[idx]); }); }, { immediate: true }); } if (prevEl !== el && isElement(prevEl)) { ["role", "aria-label", "aria-modal", "id"].forEach((key) => { prevEl.removeAttribute(key); }); } }, { immediate: true }); vue.watch(() => props.visible, togglePopperAlive, { immediate: true }); }); vue.onBeforeUnmount(() => { triggerTargetAriaStopWatch == null ? void 0 : triggerTargetAriaStopWatch(); triggerTargetAriaStopWatch = void 0; }); expose({ popperContentRef: contentRef, popperInstanceRef: instanceRef, updatePopper, contentStyle }); return (_ctx, _cache) => { return vue.openBlock(), vue.createElementBlock("div", vue.mergeProps({ ref_key: "contentRef", ref: contentRef }, vue.unref(contentAttrs), { style: vue.unref(contentStyle), class: vue.unref(contentClass), tabindex: "-1", onMouseenter: (e) => _ctx.$emit("mouseenter", e), onMouseleave: (e) => _ctx.$emit("mouseleave", e) }), [ vue.createVNode(vue.unref(ElFocusTrap), { trapped: vue.unref(trapped), "trap-on-focus-in": true, "focus-trap-el": vue.unref(contentRef), "focus-start-el": vue.unref(focusStartRef), onFocusAfterTrapped: vue.unref(onFocusAfterTrapped), onFocusAfterReleased: vue.unref(onFocusAfterReleased), onFocusin: vue.unref(onFocusInTrap), onFocusoutPrevented: vue.unref(onFocusoutPrevented), onReleaseRequested: vue.unref(onReleaseRequested) }, { default: vue.withCtx(() => [ vue.renderSlot(_ctx.$slots, "default") ]), _: 3 }, 8, ["trapped", "focus-trap-el", "focus-start-el", "onFocusAfterTrapped", "onFocusAfterReleased", "onFocusin", "onFocusoutPrevented", "onReleaseRequested"]) ], 16, ["onMouseenter", "onMouseleave"]); }; } }); var ElPopperContent = /* @__PURE__ */ _export_sfc$1(_sfc_main$z, [["__file", "content.vue"]]); const ElPopper = withInstall(Popper); const TOOLTIP_INJECTION_KEY = Symbol("elTooltip"); function useTimeout() { let timeoutHandle; const registerTimeout = (fn2, delay2) => { cancelTimeout(); timeoutHandle = window.setTimeout(fn2, delay2); }; const cancelTimeout = () => window.clearTimeout(timeoutHandle); tryOnScopeDispose(() => cancelTimeout()); return { registerTimeout, cancelTimeout }; } const useDelayedToggleProps = buildProps({ showAfter: { type: Number, default: 0 }, hideAfter: { type: Number, default: 200 }, autoClose: { type: Number, default: 0 } }); const useDelayedToggle = ({ showAfter, hideAfter, autoClose, open, close }) => { const { registerTimeout } = useTimeout(); const { registerTimeout: registerTimeoutForAutoClose, cancelTimeout: cancelTimeoutForAutoClose } = useTimeout(); const onOpen = (event) => { registerTimeout(() => { open(event); const _autoClose = vue.unref(autoClose); if (isNumber(_autoClose) && _autoClose > 0) { registerTimeoutForAutoClose(() => { close(event); }, _autoClose); } }, vue.unref(showAfter)); }; const onClose = (event) => { cancelTimeoutForAutoClose(); registerTimeout(() => { close(event); }, vue.unref(hideAfter)); }; return { onOpen, onClose }; }; const useTooltipContentProps = buildProps({ ...useDelayedToggleProps, ...popperContentProps, appendTo: { type: definePropType([String, Object]) }, content: { type: String, default: "" }, rawContent: Boolean, persistent: Boolean, visible: { type: definePropType(Boolean), default: null }, transition: String, teleported: { type: Boolean, default: true }, disabled: Boolean, ...useAriaProps(["ariaLabel"]) }); const useTooltipTriggerProps = buildProps({ ...popperTriggerProps, disabled: Boolean, trigger: { type: definePropType([String, Array]), default: "hover" }, triggerKeys: { type: definePropType(Array), default: () => [EVENT_CODE.enter, EVENT_CODE.numpadEnter, EVENT_CODE.space] } }); const _prop = buildProp({ type: definePropType(Boolean), default: null }); const _event = buildProp({ type: definePropType(Function) }); const createModelToggleComposable = (name) => { const updateEventKey = `update:${name}`; const updateEventKeyRaw = `onUpdate:${name}`; const useModelToggleEmits2 = [updateEventKey]; const useModelToggleProps2 = { [name]: _prop, [updateEventKeyRaw]: _event }; const useModelToggle2 = ({ indicator, toggleReason, shouldHideWhenRouteChanges, shouldProceed, onShow, onHide }) => { const instance = vue.getCurrentInstance(); const { emit } = instance; const props = instance.props; const hasUpdateHandler = vue.computed(() => isFunction$1(props[updateEventKeyRaw])); const isModelBindingAbsent = vue.computed(() => props[name] === null); const doShow = (event) => { if (indicator.value === true) { return; } indicator.value = true; if (toggleReason) { toggleReason.value = event; } if (isFunction$1(onShow)) { onShow(event); } }; const doHide = (event) => { if (indicator.value === false) { return; } indicator.value = false; if (toggleReason) { toggleReason.value = event; } if (isFunction$1(onHide)) { onHide(event); } }; const show = (event) => { if (props.disabled === true || isFunction$1(shouldProceed) && !shouldProceed()) return; const shouldEmit = hasUpdateHandler.value && isClient; if (shouldEmit) { emit(updateEventKey, true); } if (isModelBindingAbsent.value || !shouldEmit) { doShow(event); } }; const hide = (event) => { if (props.disabled === true || !isClient) return; const shouldEmit = hasUpdateHandler.value && isClient; if (shouldEmit) { emit(updateEventKey, false); } if (isModelBindingAbsent.value || !shouldEmit) { doHide(event); } }; const onChange = (val) => { if (!isBoolean(val)) return; if (props.disabled && val) { if (hasUpdateHandler.value) { emit(updateEventKey, false); } } else if (indicator.value !== val) { if (val) { doShow(); } else { doHide(); } } }; const toggle = () => { if (indicator.value) { hide(); } else { show(); } }; vue.watch(() => props[name], onChange); if (shouldHideWhenRouteChanges && instance.appContext.config.globalProperties.$route !== void 0) { vue.watch(() => ({ ...instance.proxy.$route }), () => { if (shouldHideWhenRouteChanges.value && indicator.value) { hide(); } }); } vue.onMounted(() => { onChange(props[name]); }); return { hide, show, toggle, hasUpdateHandler }; }; return { useModelToggle: useModelToggle2, useModelToggleProps: useModelToggleProps2, useModelToggleEmits: useModelToggleEmits2 }; }; const { useModelToggleProps: useTooltipModelToggleProps, useModelToggleEmits: useTooltipModelToggleEmits, useModelToggle: useTooltipModelToggle } = createModelToggleComposable("visible"); const useTooltipProps = buildProps({ ...popperProps, ...useTooltipModelToggleProps, ...useTooltipContentProps, ...useTooltipTriggerProps, ...popperArrowProps, showArrow: { type: Boolean, default: true } }); const tooltipEmits = [ ...useTooltipModelToggleEmits, "before-show", "before-hide", "show", "hide", "open", "close" ]; const isTriggerType = (trigger, type) => { if (isArray$1(trigger)) { return trigger.includes(type); } return trigger === type; }; const whenTrigger = (trigger, type, handler) => { return (e) => { isTriggerType(vue.unref(trigger), type) && handler(e); }; }; const composeEventHandlers = (theirsHandler, oursHandler, { checkForDefaultPrevented = true } = {}) => { const handleEvent = (event) => { const shouldPrevent = theirsHandler == null ? void 0 : theirsHandler(event); if (checkForDefaultPrevented === false || !shouldPrevent) { return oursHandler == null ? void 0 : oursHandler(event); } }; return handleEvent; }; const __default__$j = vue.defineComponent({ name: "ElTooltipTrigger" }); const _sfc_main$y = /* @__PURE__ */ vue.defineComponent({ ...__default__$j, props: useTooltipTriggerProps, setup(__props, { expose }) { const props = __props; const ns = useNamespace("tooltip"); const { controlled, id, open, onOpen, onClose, onToggle } = vue.inject(TOOLTIP_INJECTION_KEY, void 0); const triggerRef = vue.ref(null); const stopWhenControlledOrDisabled = () => { if (vue.unref(controlled) || props.disabled) { return true; } }; const trigger = vue.toRef(props, "trigger"); const onMouseenter = composeEventHandlers(stopWhenControlledOrDisabled, whenTrigger(trigger, "hover", onOpen)); const onMouseleave = composeEventHandlers(stopWhenControlledOrDisabled, whenTrigger(trigger, "hover", onClose)); const onClick = composeEventHandlers(stopWhenControlledOrDisabled, whenTrigger(trigger, "click", (e) => { if (e.button === 0) { onToggle(e); } })); const onFocus = composeEventHandlers(stopWhenControlledOrDisabled, whenTrigger(trigger, "focus", onOpen)); const onBlur = composeEventHandlers(stopWhenControlledOrDisabled, whenTrigger(trigger, "focus", onClose)); const onContextMenu = composeEventHandlers(stopWhenControlledOrDisabled, whenTrigger(trigger, "contextmenu", (e) => { e.preventDefault(); onToggle(e); })); const onKeydown = composeEventHandlers(stopWhenControlledOrDisabled, (e) => { const { code } = e; if (props.triggerKeys.includes(code)) { e.preventDefault(); onToggle(e); } }); expose({ triggerRef }); return (_ctx, _cache) => { return vue.openBlock(), vue.createBlock(vue.unref(ElPopperTrigger), { id: vue.unref(id), "virtual-ref": _ctx.virtualRef, open: vue.unref(open), "virtual-triggering": _ctx.virtualTriggering, class: vue.normalizeClass(vue.unref(ns).e("trigger")), onBlur: vue.unref(onBlur), onClick: vue.unref(onClick), onContextmenu: vue.unref(onContextMenu), onFocus: vue.unref(onFocus), onMouseenter: vue.unref(onMouseenter), onMouseleave: vue.unref(onMouseleave), onKeydown: vue.unref(onKeydown) }, { default: vue.withCtx(() => [ vue.renderSlot(_ctx.$slots, "default") ]), _: 3 }, 8, ["id", "virtual-ref", "open", "virtual-triggering", "class", "onBlur", "onClick", "onContextmenu", "onFocus", "onMouseenter", "onMouseleave", "onKeydown"]); }; } }); var ElTooltipTrigger = /* @__PURE__ */ _export_sfc$1(_sfc_main$y, [["__file", "trigger.vue"]]); const teleportProps = buildProps({ to: { type: definePropType([String, Object]), required: true }, disabled: Boolean }); const _sfc_main$x = /* @__PURE__ */ vue.defineComponent({ __name: "teleport", props: teleportProps, setup(__props) { return (_ctx, _cache) => { return _ctx.disabled ? vue.renderSlot(_ctx.$slots, "default", { key: 0 }) : (vue.openBlock(), vue.createBlock(vue.Teleport, { key: 1, to: _ctx.to }, [ vue.renderSlot(_ctx.$slots, "default") ], 8, ["to"])); }; } }); var Teleport = /* @__PURE__ */ _export_sfc$1(_sfc_main$x, [["__file", "teleport.vue"]]); const ElTeleport = withInstall(Teleport); const usePopperContainerId = () => { const namespace = useGetDerivedNamespace(); const idInjection = useIdInjection(); const id = vue.computed(() => { return `${namespace.value}-popper-container-${idInjection.prefix}`; }); const selector = vue.computed(() => `#${id.value}`); return { id, selector }; }; const createContainer = (id) => { const container = document.createElement("div"); container.id = id; document.body.appendChild(container); return container; }; const usePopperContainer = () => { const { id, selector } = usePopperContainerId(); vue.onBeforeMount(() => { if (!isClient) return; if (!document.body.querySelector(selector.value)) { createContainer(id.value); } }); return { id, selector }; }; const __default__$i = vue.defineComponent({ name: "ElTooltipContent", inheritAttrs: false }); const _sfc_main$w = /* @__PURE__ */ vue.defineComponent({ ...__default__$i, props: useTooltipContentProps, setup(__props, { expose }) { const props = __props; const { selector } = usePopperContainerId(); const ns = useNamespace("tooltip"); const contentRef = vue.ref(); let stopHandle; const { controlled, id, open, trigger, onClose, onOpen, onShow, onHide, onBeforeShow, onBeforeHide } = vue.inject(TOOLTIP_INJECTION_KEY, void 0); const transitionClass = vue.computed(() => { return props.transition || `${ns.namespace.value}-fade-in-linear`; }); const persistentRef = vue.computed(() => { return props.persistent; }); vue.onBeforeUnmount(() => { stopHandle == null ? void 0 : stopHandle(); }); const shouldRender = vue.computed(() => { return vue.unref(persistentRef) ? true : vue.unref(open); }); const shouldShow = vue.computed(() => { return props.disabled ? false : vue.unref(open); }); const appendTo = vue.computed(() => { return props.appendTo || selector.value; }); const contentStyle = vue.computed(() => { var _a2; return (_a2 = props.style) != null ? _a2 : {}; }); const ariaHidden = vue.ref(true); const onTransitionLeave = () => { onHide(); isFocusInsideContent() && tryFocus(document.body); ariaHidden.value = true; }; const stopWhenControlled = () => { if (vue.unref(controlled)) return true; }; const onContentEnter = composeEventHandlers(stopWhenControlled, () => { if (props.enterable && vue.unref(trigger) === "hover") { onOpen(); } }); const onContentLeave = composeEventHandlers(stopWhenControlled, () => { if (vue.unref(trigger) === "hover") { onClose(); } }); const onBeforeEnter = () => { var _a2, _b; (_b = (_a2 = contentRef.value) == null ? void 0 : _a2.updatePopper) == null ? void 0 : _b.call(_a2); onBeforeShow == null ? void 0 : onBeforeShow(); }; const onBeforeLeave = () => { onBeforeHide == null ? void 0 : onBeforeHide(); }; const onAfterShow = () => { onShow(); stopHandle = onClickOutside(vue.computed(() => { var _a2; return (_a2 = contentRef.value) == null ? void 0 : _a2.popperContentRef; }), () => { if (vue.unref(controlled)) return; const $trigger = vue.unref(trigger); if ($trigger !== "hover") { onClose(); } }); }; const onBlur = () => { if (!props.virtualTriggering) { onClose(); } }; const isFocusInsideContent = (event) => { var _a2; const popperContent = (_a2 = contentRef.value) == null ? void 0 : _a2.popperContentRef; const activeElement = (event == null ? void 0 : event.relatedTarget) || document.activeElement; return popperContent == null ? void 0 : popperContent.contains(activeElement); }; vue.watch(() => vue.unref(open), (val) => { if (!val) { stopHandle == null ? void 0 : stopHandle(); } else { ariaHidden.value = false; } }, { flush: "post" }); vue.watch(() => props.content, () => { var _a2, _b; (_b = (_a2 = contentRef.value) == null ? void 0 : _a2.updatePopper) == null ? void 0 : _b.call(_a2); }); expose({ contentRef, isFocusInsideContent }); return (_ctx, _cache) => { return vue.openBlock(), vue.createBlock(vue.unref(ElTeleport), { disabled: !_ctx.teleported, to: vue.unref(appendTo) }, { default: vue.withCtx(() => [ vue.createVNode(vue.Transition, { name: vue.unref(transitionClass), onAfterLeave: onTransitionLeave, onBeforeEnter, onAfterEnter: onAfterShow, onBeforeLeave }, { default: vue.withCtx(() => [ vue.unref(shouldRender) ? vue.withDirectives((vue.openBlock(), vue.createBlock(vue.unref(ElPopperContent), vue.mergeProps({ key: 0, id: vue.unref(id), ref_key: "contentRef", ref: contentRef }, _ctx.$attrs, { "aria-label": _ctx.ariaLabel, "aria-hidden": ariaHidden.value, "boundaries-padding": _ctx.boundariesPadding, "fallback-placements": _ctx.fallbackPlacements, "gpu-acceleration": _ctx.gpuAcceleration, offset: _ctx.offset, placement: _ctx.placement, "popper-options": _ctx.popperOptions, strategy: _ctx.strategy, effect: _ctx.effect, enterable: _ctx.enterable, pure: _ctx.pure, "popper-class": _ctx.popperClass, "popper-style": [_ctx.popperStyle, vue.unref(contentStyle)], "reference-el": _ctx.referenceEl, "trigger-target-el": _ctx.triggerTargetEl, visible: vue.unref(shouldShow), "z-index": _ctx.zIndex, onMouseenter: vue.unref(onContentEnter), onMouseleave: vue.unref(onContentLeave), onBlur, onClose: vue.unref(onClose) }), { default: vue.withCtx(() => [ vue.renderSlot(_ctx.$slots, "default") ]), _: 3 }, 16, ["id", "aria-label", "aria-hidden", "boundaries-padding", "fallback-placements", "gpu-acceleration", "offset", "placement", "popper-options", "strategy", "effect", "enterable", "pure", "popper-class", "popper-style", "reference-el", "trigger-target-el", "visible", "z-index", "onMouseenter", "onMouseleave", "onClose"])), [ [vue.vShow, vue.unref(shouldShow)] ]) : vue.createCommentVNode("v-if", true) ]), _: 3 }, 8, ["name"]) ]), _: 3 }, 8, ["disabled", "to"]); }; } }); var ElTooltipContent = /* @__PURE__ */ _export_sfc$1(_sfc_main$w, [["__file", "content.vue"]]); const __default__$h = vue.defineComponent({ name: "ElTooltip" }); const _sfc_main$v = /* @__PURE__ */ vue.defineComponent({ ...__default__$h, props: useTooltipProps, emits: tooltipEmits, setup(__props, { expose, emit }) { const props = __props; usePopperContainer(); const id = useId(); const popperRef = vue.ref(); const contentRef = vue.ref(); const updatePopper = () => { var _a2; const popperComponent = vue.unref(popperRef); if (popperComponent) { (_a2 = popperComponent.popperInstanceRef) == null ? void 0 : _a2.update(); } }; const open = vue.ref(false); const toggleReason = vue.ref(); const { show, hide, hasUpdateHandler } = useTooltipModelToggle({ indicator: open, toggleReason }); const { onOpen, onClose } = useDelayedToggle({ showAfter: vue.toRef(props, "showAfter"), hideAfter: vue.toRef(props, "hideAfter"), autoClose: vue.toRef(props, "autoClose"), open: show, close: hide }); const controlled = vue.computed(() => isBoolean(props.visible) && !hasUpdateHandler.value); vue.provide(TOOLTIP_INJECTION_KEY, { controlled, id, open: vue.readonly(open), trigger: vue.toRef(props, "trigger"), onOpen: (event) => { onOpen(event); }, onClose: (event) => { onClose(event); }, onToggle: (event) => { if (vue.unref(open)) { onClose(event); } else { onOpen(event); } }, onShow: () => { emit("show", toggleReason.value); }, onHide: () => { emit("hide", toggleReason.value); }, onBeforeShow: () => { emit("before-show", toggleReason.value); }, onBeforeHide: () => { emit("before-hide", toggleReason.value); }, updatePopper }); vue.watch(() => props.disabled, (disabled) => { if (disabled && open.value) { open.value = false; } }); const isFocusInsideContent = (event) => { var _a2; return (_a2 = contentRef.value) == null ? void 0 : _a2.isFocusInsideContent(event); }; vue.onDeactivated(() => open.value && hide()); expose({ popperRef, contentRef, isFocusInsideContent, updatePopper, onOpen, onClose, hide }); return (_ctx, _cache) => { return vue.openBlock(), vue.createBlock(vue.unref(ElPopper), { ref_key: "popperRef", ref: popperRef, role: _ctx.role }, { default: vue.withCtx(() => [ vue.createVNode(ElTooltipTrigger, { disabled: _ctx.disabled, trigger: _ctx.trigger, "trigger-keys": _ctx.triggerKeys, "virtual-ref": _ctx.virtualRef, "virtual-triggering": _ctx.virtualTriggering }, { default: vue.withCtx(() => [ _ctx.$slots.default ? vue.renderSlot(_ctx.$slots, "default", { key: 0 }) : vue.createCommentVNode("v-if", true) ]), _: 3 }, 8, ["disabled", "trigger", "trigger-keys", "virtual-ref", "virtual-triggering"]), vue.createVNode(ElTooltipContent, { ref_key: "contentRef", ref: contentRef, "aria-label": _ctx.ariaLabel, "boundaries-padding": _ctx.boundariesPadding, content: _ctx.content, disabled: _ctx.disabled, effect: _ctx.effect, enterable: _ctx.enterable, "fallback-placements": _ctx.fallbackPlacements, "hide-after": _ctx.hideAfter, "gpu-acceleration": _ctx.gpuAcceleration, offset: _ctx.offset, persistent: _ctx.persistent, "popper-class": _ctx.popperClass, "popper-style": _ctx.popperStyle, placement: _ctx.placement, "popper-options": _ctx.popperOptions, pure: _ctx.pure, "raw-content": _ctx.rawContent, "reference-el": _ctx.referenceEl, "trigger-target-el": _ctx.triggerTargetEl, "show-after": _ctx.showAfter, strategy: _ctx.strategy, teleported: _ctx.teleported, transition: _ctx.transition, "virtual-triggering": _ctx.virtualTriggering, "z-index": _ctx.zIndex, "append-to": _ctx.appendTo }, { default: vue.withCtx(() => [ vue.renderSlot(_ctx.$slots, "content", {}, () => [ _ctx.rawContent ? (vue.openBlock(), vue.createElementBlock("span", { key: 0, innerHTML: _ctx.content }, null, 8, ["innerHTML"])) : (vue.openBlock(), vue.createElementBlock("span", { key: 1 }, vue.toDisplayString(_ctx.content), 1)) ]), _ctx.showArrow ? (vue.openBlock(), vue.createBlock(vue.unref(ElPopperArrow), { key: 0, "arrow-offset": _ctx.arrowOffset }, null, 8, ["arrow-offset"])) : vue.createCommentVNode("v-if", true) ]), _: 3 }, 8, ["aria-label", "boundaries-padding", "content", "disabled", "effect", "enterable", "fallback-placements", "hide-after", "gpu-acceleration", "offset", "persistent", "popper-class", "popper-style", "placement", "popper-options", "pure", "raw-content", "reference-el", "trigger-target-el", "show-after", "strategy", "teleported", "transition", "virtual-triggering", "z-index", "append-to"]) ]), _: 3 }, 8, ["role"]); }; } }); var Tooltip = /* @__PURE__ */ _export_sfc$1(_sfc_main$v, [["__file", "tooltip.vue"]]); const ElTooltip = withInstall(Tooltip); const badgeProps = buildProps({ value: { type: [String, Number], default: "" }, max: { type: Number, default: 99 }, isDot: Boolean, hidden: Boolean, type: { type: String, values: ["primary", "success", "warning", "info", "danger"], default: "danger" }, showZero: { type: Boolean, default: true }, color: String, badgeStyle: { type: definePropType([String, Object, Array]) }, offset: { type: definePropType(Array), default: [0, 0] }, badgeClass: { type: String } }); const __default__$g = vue.defineComponent({ name: "ElBadge" }); const _sfc_main$u = /* @__PURE__ */ vue.defineComponent({ ...__default__$g, props: badgeProps, setup(__props, { expose }) { const props = __props; const ns = useNamespace("badge"); const content = vue.computed(() => { if (props.isDot) return ""; if (isNumber(props.value) && isNumber(props.max)) { return props.max < props.value ? `${props.max}+` : `${props.value}`; } return `${props.value}`; }); const style = vue.computed(() => { var _a2, _b, _c, _d, _e; return [ { backgroundColor: props.color, marginRight: addUnit(-((_b = (_a2 = props.offset) == null ? void 0 : _a2[0]) != null ? _b : 0)), marginTop: addUnit((_d = (_c = props.offset) == null ? void 0 : _c[1]) != null ? _d : 0) }, (_e = props.badgeStyle) != null ? _e : {} ]; }); expose({ content }); return (_ctx, _cache) => { return vue.openBlock(), vue.createElementBlock("div", { class: vue.normalizeClass(vue.unref(ns).b()) }, [ vue.renderSlot(_ctx.$slots, "default"), vue.createVNode(vue.Transition, { name: `${vue.unref(ns).namespace.value}-zoom-in-center`, persisted: "" }, { default: vue.withCtx(() => [ vue.withDirectives(vue.createElementVNode("sup", { class: vue.normalizeClass([ vue.unref(ns).e("content"), vue.unref(ns).em("content", _ctx.type), vue.unref(ns).is("fixed", !!_ctx.$slots.default), vue.unref(ns).is("dot", _ctx.isDot), vue.unref(ns).is("hide-zero", !_ctx.showZero && props.value === 0), _ctx.badgeClass ]), style: vue.normalizeStyle(vue.unref(style)) }, [ vue.renderSlot(_ctx.$slots, "content", { value: vue.unref(content) }, () => [ vue.createTextVNode(vue.toDisplayString(vue.unref(content)), 1) ]) ], 6), [ [vue.vShow, !_ctx.hidden && (vue.unref(content) || _ctx.isDot || _ctx.$slots.content)] ]) ]), _: 3 }, 8, ["name"]) ], 2); }; } }); var Badge = /* @__PURE__ */ _export_sfc$1(_sfc_main$u, [["__file", "badge.vue"]]); const ElBadge = withInstall(Badge); const buttonGroupContextKey = Symbol("buttonGroupContextKey"); const useDeprecated = ({ from, replacement, scope, version: version2, ref: ref2, type = "API" }, condition) => { vue.watch(() => vue.unref(condition), (val) => { }, { immediate: true }); }; const useButton = (props, emit) => { useDeprecated({ from: "type.text", replacement: "link", version: "3.0.0", scope: "props", ref: "https://element-plus.org/en-US/component/button.html#button-attributes" }, vue.computed(() => props.type === "text")); const buttonGroupContext = vue.inject(buttonGroupContextKey, void 0); const globalConfig2 = useGlobalConfig("button"); const { form } = useFormItem(); const _size = useFormSize(vue.computed(() => buttonGroupContext == null ? void 0 : buttonGroupContext.size)); const _disabled = useFormDisabled(); const _ref = vue.ref(); const slots = vue.useSlots(); const _type = vue.computed(() => props.type || (buttonGroupContext == null ? void 0 : buttonGroupContext.type) || ""); const autoInsertSpace = vue.computed(() => { var _a2, _b, _c; return (_c = (_b = props.autoInsertSpace) != null ? _b : (_a2 = globalConfig2.value) == null ? void 0 : _a2.autoInsertSpace) != null ? _c : false; }); const _props = vue.computed(() => { if (props.tag === "button") { return { ariaDisabled: _disabled.value || props.loading, disabled: _disabled.value || props.loading, autofocus: props.autofocus, type: props.nativeType }; } return {}; }); const shouldAddSpace = vue.computed(() => { var _a2; const defaultSlot = (_a2 = slots.default) == null ? void 0 : _a2.call(slots); if (autoInsertSpace.value && (defaultSlot == null ? void 0 : defaultSlot.length) === 1) { const slot = defaultSlot[0]; if ((slot == null ? void 0 : slot.type) === vue.Text) { const text = slot.children; return new RegExp("^\\p{Unified_Ideograph}{2}$", "u").test(text.trim()); } } return false; }); const handleClick = (evt) => { if (_disabled.value || props.loading) { evt.stopPropagation(); return; } if (props.nativeType === "reset") { form == null ? void 0 : form.resetFields(); } emit("click", evt); }; return { _disabled, _size, _type, _ref, _props, shouldAddSpace, handleClick }; }; const buttonTypes = [ "default", "primary", "success", "warning", "info", "danger", "text", "" ]; const buttonNativeTypes = ["button", "submit", "reset"]; const buttonProps = buildProps({ size: useSizeProp, disabled: Boolean, type: { type: String, values: buttonTypes, default: "" }, icon: { type: iconPropType }, nativeType: { type: String, values: buttonNativeTypes, default: "button" }, loading: Boolean, loadingIcon: { type: iconPropType, default: () => loading_default }, plain: Boolean, text: Boolean, link: Boolean, bg: Boolean, autofocus: Boolean, round: Boolean, circle: Boolean, color: String, dark: Boolean, autoInsertSpace: { type: Boolean, default: void 0 }, tag: { type: definePropType([String, Object]), default: "button" } }); const buttonEmits = { click: (evt) => evt instanceof MouseEvent }; function bound01(n, max) { if (isOnePointZero(n)) { n = "100%"; } var isPercent = isPercentage(n); n = max === 360 ? n : Math.min(max, Math.max(0, parseFloat(n))); if (isPercent) { n = parseInt(String(n * max), 10) / 100; } if (Math.abs(n - max) < 1e-6) { return 1; } if (max === 360) { n = (n < 0 ? n % max + max : n % max) / parseFloat(String(max)); } else { n = n % max / parseFloat(String(max)); } return n; } function clamp01(val) { return Math.min(1, Math.max(0, val)); } function isOnePointZero(n) { return typeof n === "string" && n.indexOf(".") !== -1 && parseFloat(n) === 1; } function isPercentage(n) { return typeof n === "string" && n.indexOf("%") !== -1; } function boundAlpha(a2) { a2 = parseFloat(a2); if (isNaN(a2) || a2 < 0 || a2 > 1) { a2 = 1; } return a2; } function convertToPercentage(n) { if (n <= 1) { return "".concat(Number(n) * 100, "%"); } return n; } function pad2(c2) { return c2.length === 1 ? "0" + c2 : String(c2); } function rgbToRgb(r, g, b2) { return { r: bound01(r, 255) * 255, g: bound01(g, 255) * 255, b: bound01(b2, 255) * 255 }; } function rgbToHsl(r, g, b2) { r = bound01(r, 255); g = bound01(g, 255); b2 = bound01(b2, 255); var max = Math.max(r, g, b2); var min = Math.min(r, g, b2); var h2 = 0; var s2 = 0; var l2 = (max + min) / 2; if (max === min) { s2 = 0; h2 = 0; } else { var d2 = max - min; s2 = l2 > 0.5 ? d2 / (2 - max - min) : d2 / (max + min); switch (max) { case r: h2 = (g - b2) / d2 + (g < b2 ? 6 : 0); break; case g: h2 = (b2 - r) / d2 + 2; break; case b2: h2 = (r - g) / d2 + 4; break; } h2 /= 6; } return { h: h2, s: s2, l: l2 }; } function hue2rgb(p2, q2, t) { if (t < 0) { t += 1; } if (t > 1) { t -= 1; } if (t < 1 / 6) { return p2 + (q2 - p2) * (6 * t); } if (t < 1 / 2) { return q2; } if (t < 2 / 3) { return p2 + (q2 - p2) * (2 / 3 - t) * 6; } return p2; } function hslToRgb(h2, s2, l2) { var r; var g; var b2; h2 = bound01(h2, 360); s2 = bound01(s2, 100); l2 = bound01(l2, 100); if (s2 === 0) { g = l2; b2 = l2; r = l2; } else { var q2 = l2 < 0.5 ? l2 * (1 + s2) : l2 + s2 - l2 * s2; var p2 = 2 * l2 - q2; r = hue2rgb(p2, q2, h2 + 1 / 3); g = hue2rgb(p2, q2, h2); b2 = hue2rgb(p2, q2, h2 - 1 / 3); } return { r: r * 255, g: g * 255, b: b2 * 255 }; } function rgbToHsv(r, g, b2) { r = bound01(r, 255); g = bound01(g, 255); b2 = bound01(b2, 255); var max = Math.max(r, g, b2); var min = Math.min(r, g, b2); var h2 = 0; var v2 = max; var d2 = max - min; var s2 = max === 0 ? 0 : d2 / max; if (max === min) { h2 = 0; } else { switch (max) { case r: h2 = (g - b2) / d2 + (g < b2 ? 6 : 0); break; case g: h2 = (b2 - r) / d2 + 2; break; case b2: h2 = (r - g) / d2 + 4; break; } h2 /= 6; } return { h: h2, s: s2, v: v2 }; } function hsvToRgb(h2, s2, v2) { h2 = bound01(h2, 360) * 6; s2 = bound01(s2, 100); v2 = bound01(v2, 100); var i = Math.floor(h2); var f2 = h2 - i; var p2 = v2 * (1 - s2); var q2 = v2 * (1 - f2 * s2); var t = v2 * (1 - (1 - f2) * s2); var mod = i % 6; var r = [v2, q2, p2, p2, t, v2][mod]; var g = [t, v2, v2, q2, p2, p2][mod]; var b2 = [p2, p2, t, v2, v2, q2][mod]; return { r: r * 255, g: g * 255, b: b2 * 255 }; } function rgbToHex(r, g, b2, allow3Char) { var hex = [ pad2(Math.round(r).toString(16)), pad2(Math.round(g).toString(16)), pad2(Math.round(b2).toString(16)) ]; if (allow3Char && hex[0].startsWith(hex[0].charAt(1)) && hex[1].startsWith(hex[1].charAt(1)) && hex[2].startsWith(hex[2].charAt(1))) { return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0); } return hex.join(""); } function rgbaToHex(r, g, b2, a2, allow4Char) { var hex = [ pad2(Math.round(r).toString(16)), pad2(Math.round(g).toString(16)), pad2(Math.round(b2).toString(16)), pad2(convertDecimalToHex(a2)) ]; if (allow4Char && hex[0].startsWith(hex[0].charAt(1)) && hex[1].startsWith(hex[1].charAt(1)) && hex[2].startsWith(hex[2].charAt(1)) && hex[3].startsWith(hex[3].charAt(1))) { return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0) + hex[3].charAt(0); } return hex.join(""); } function convertDecimalToHex(d2) { return Math.round(parseFloat(d2) * 255).toString(16); } function convertHexToDecimal(h2) { return parseIntFromHex(h2) / 255; } function parseIntFromHex(val) { return parseInt(val, 16); } function numberInputToObject(color) { return { r: color >> 16, g: (color & 65280) >> 8, b: color & 255 }; } var names = { aliceblue: "#f0f8ff", antiquewhite: "#faebd7", aqua: "#00ffff", aquamarine: "#7fffd4", azure: "#f0ffff", beige: "#f5f5dc", bisque: "#ffe4c4", black: "#000000", blanchedalmond: "#ffebcd", blue: "#0000ff", blueviolet: "#8a2be2", brown: "#a52a2a", burlywood: "#deb887", cadetblue: "#5f9ea0", chartreuse: "#7fff00", chocolate: "#d2691e", coral: "#ff7f50", cornflowerblue: "#6495ed", cornsilk: "#fff8dc", crimson: "#dc143c", cyan: "#00ffff", darkblue: "#00008b", darkcyan: "#008b8b", darkgoldenrod: "#b8860b", darkgray: "#a9a9a9", darkgreen: "#006400", darkgrey: "#a9a9a9", darkkhaki: "#bdb76b", darkmagenta: "#8b008b", darkolivegreen: "#556b2f", darkorange: "#ff8c00", darkorchid: "#9932cc", darkred: "#8b0000", darksalmon: "#e9967a", darkseagreen: "#8fbc8f", darkslateblue: "#483d8b", darkslategray: "#2f4f4f", darkslategrey: "#2f4f4f", darkturquoise: "#00ced1", darkviolet: "#9400d3", deeppink: "#ff1493", deepskyblue: "#00bfff", dimgray: "#696969", dimgrey: "#696969", dodgerblue: "#1e90ff", firebrick: "#b22222", floralwhite: "#fffaf0", forestgreen: "#228b22", fuchsia: "#ff00ff", gainsboro: "#dcdcdc", ghostwhite: "#f8f8ff", goldenrod: "#daa520", gold: "#ffd700", gray: "#808080", green: "#008000", greenyellow: "#adff2f", grey: "#808080", honeydew: "#f0fff0", hotpink: "#ff69b4", indianred: "#cd5c5c", indigo: "#4b0082", ivory: "#fffff0", khaki: "#f0e68c", lavenderblush: "#fff0f5", lavender: "#e6e6fa", lawngreen: "#7cfc00", lemonchiffon: "#fffacd", lightblue: "#add8e6", lightcoral: "#f08080", lightcyan: "#e0ffff", lightgoldenrodyellow: "#fafad2", lightgray: "#d3d3d3", lightgreen: "#90ee90", lightgrey: "#d3d3d3", lightpink: "#ffb6c1", lightsalmon: "#ffa07a", lightseagreen: "#20b2aa", lightskyblue: "#87cefa", lightslategray: "#778899", lightslategrey: "#778899", lightsteelblue: "#b0c4de", lightyellow: "#ffffe0", lime: "#00ff00", limegreen: "#32cd32", linen: "#faf0e6", magenta: "#ff00ff", maroon: "#800000", mediumaquamarine: "#66cdaa", mediumblue: "#0000cd", mediumorchid: "#ba55d3", mediumpurple: "#9370db", mediumseagreen: "#3cb371", mediumslateblue: "#7b68ee", mediumspringgreen: "#00fa9a", mediumturquoise: "#48d1cc", mediumvioletred: "#c71585", midnightblue: "#191970", mintcream: "#f5fffa", mistyrose: "#ffe4e1", moccasin: "#ffe4b5", navajowhite: "#ffdead", navy: "#000080", oldlace: "#fdf5e6", olive: "#808000", olivedrab: "#6b8e23", orange: "#ffa500", orangered: "#ff4500", orchid: "#da70d6", palegoldenrod: "#eee8aa", palegreen: "#98fb98", paleturquoise: "#afeeee", palevioletred: "#db7093", papayawhip: "#ffefd5", peachpuff: "#ffdab9", peru: "#cd853f", pink: "#ffc0cb", plum: "#dda0dd", powderblue: "#b0e0e6", purple: "#800080", rebeccapurple: "#663399", red: "#ff0000", rosybrown: "#bc8f8f", royalblue: "#4169e1", saddlebrown: "#8b4513", salmon: "#fa8072", sandybrown: "#f4a460", seagreen: "#2e8b57", seashell: "#fff5ee", sienna: "#a0522d", silver: "#c0c0c0", skyblue: "#87ceeb", slateblue: "#6a5acd", slategray: "#708090", slategrey: "#708090", snow: "#fffafa", springgreen: "#00ff7f", steelblue: "#4682b4", tan: "#d2b48c", teal: "#008080", thistle: "#d8bfd8", tomato: "#ff6347", turquoise: "#40e0d0", violet: "#ee82ee", wheat: "#f5deb3", white: "#ffffff", whitesmoke: "#f5f5f5", yellow: "#ffff00", yellowgreen: "#9acd32" }; function inputToRGB(color) { var rgb = { r: 0, g: 0, b: 0 }; var a2 = 1; var s2 = null; var v2 = null; var l2 = null; var ok = false; var format2 = false; if (typeof color === "string") { color = stringInputToObject(color); } if (typeof color === "object") { if (isValidCSSUnit(color.r) && isValidCSSUnit(color.g) && isValidCSSUnit(color.b)) { rgb = rgbToRgb(color.r, color.g, color.b); ok = true; format2 = String(color.r).substr(-1) === "%" ? "prgb" : "rgb"; } else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.v)) { s2 = convertToPercentage(color.s); v2 = convertToPercentage(color.v); rgb = hsvToRgb(color.h, s2, v2); ok = true; format2 = "hsv"; } else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.l)) { s2 = convertToPercentage(color.s); l2 = convertToPercentage(color.l); rgb = hslToRgb(color.h, s2, l2); ok = true; format2 = "hsl"; } if (Object.prototype.hasOwnProperty.call(color, "a")) { a2 = color.a; } } a2 = boundAlpha(a2); return { ok, format: color.format || format2, r: Math.min(255, Math.max(rgb.r, 0)), g: Math.min(255, Math.max(rgb.g, 0)), b: Math.min(255, Math.max(rgb.b, 0)), a: a2 }; } var CSS_INTEGER = "[-\\+]?\\d+%?"; var CSS_NUMBER = "[-\\+]?\\d*\\.\\d+%?"; var CSS_UNIT = "(?:".concat(CSS_NUMBER, ")|(?:").concat(CSS_INTEGER, ")"); var PERMISSIVE_MATCH3 = "[\\s|\\(]+(".concat(CSS_UNIT, ")[,|\\s]+(").concat(CSS_UNIT, ")[,|\\s]+(").concat(CSS_UNIT, ")\\s*\\)?"); var PERMISSIVE_MATCH4 = "[\\s|\\(]+(".concat(CSS_UNIT, ")[,|\\s]+(").concat(CSS_UNIT, ")[,|\\s]+(").concat(CSS_UNIT, ")[,|\\s]+(").concat(CSS_UNIT, ")\\s*\\)?"); var matchers = { CSS_UNIT: new RegExp(CSS_UNIT), rgb: new RegExp("rgb" + PERMISSIVE_MATCH3), rgba: new RegExp("rgba" + PERMISSIVE_MATCH4), hsl: new RegExp("hsl" + PERMISSIVE_MATCH3), hsla: new RegExp("hsla" + PERMISSIVE_MATCH4), hsv: new RegExp("hsv" + PERMISSIVE_MATCH3), hsva: new RegExp("hsva" + PERMISSIVE_MATCH4), hex3: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/, hex6: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/, hex4: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/, hex8: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/ }; function stringInputToObject(color) { color = color.trim().toLowerCase(); if (color.length === 0) { return false; } var named = false; if (names[color]) { color = names[color]; named = true; } else if (color === "transparent") { return { r: 0, g: 0, b: 0, a: 0, format: "name" }; } var match = matchers.rgb.exec(color); if (match) { return { r: match[1], g: match[2], b: match[3] }; } match = matchers.rgba.exec(color); if (match) { return { r: match[1], g: match[2], b: match[3], a: match[4] }; } match = matchers.hsl.exec(color); if (match) { return { h: match[1], s: match[2], l: match[3] }; } match = matchers.hsla.exec(color); if (match) { return { h: match[1], s: match[2], l: match[3], a: match[4] }; } match = matchers.hsv.exec(color); if (match) { return { h: match[1], s: match[2], v: match[3] }; } match = matchers.hsva.exec(color); if (match) { return { h: match[1], s: match[2], v: match[3], a: match[4] }; } match = matchers.hex8.exec(color); if (match) { return { r: parseIntFromHex(match[1]), g: parseIntFromHex(match[2]), b: parseIntFromHex(match[3]), a: convertHexToDecimal(match[4]), format: named ? "name" : "hex8" }; } match = matchers.hex6.exec(color); if (match) { return { r: parseIntFromHex(match[1]), g: parseIntFromHex(match[2]), b: parseIntFromHex(match[3]), format: named ? "name" : "hex" }; } match = matchers.hex4.exec(color); if (match) { return { r: parseIntFromHex(match[1] + match[1]), g: parseIntFromHex(match[2] + match[2]), b: parseIntFromHex(match[3] + match[3]), a: convertHexToDecimal(match[4] + match[4]), format: named ? "name" : "hex8" }; } match = matchers.hex3.exec(color); if (match) { return { r: parseIntFromHex(match[1] + match[1]), g: parseIntFromHex(match[2] + match[2]), b: parseIntFromHex(match[3] + match[3]), format: named ? "name" : "hex" }; } return false; } function isValidCSSUnit(color) { return Boolean(matchers.CSS_UNIT.exec(String(color))); } var TinyColor = ( /** @class */ function() { function TinyColor2(color, opts) { if (color === void 0) { color = ""; } if (opts === void 0) { opts = {}; } var _a2; if (color instanceof TinyColor2) { return color; } if (typeof color === "number") { color = numberInputToObject(color); } this.originalInput = color; var rgb = inputToRGB(color); this.originalInput = color; this.r = rgb.r; this.g = rgb.g; this.b = rgb.b; this.a = rgb.a; this.roundA = Math.round(100 * this.a) / 100; this.format = (_a2 = opts.format) !== null && _a2 !== void 0 ? _a2 : rgb.format; this.gradientType = opts.gradientType; if (this.r < 1) { this.r = Math.round(this.r); } if (this.g < 1) { this.g = Math.round(this.g); } if (this.b < 1) { this.b = Math.round(this.b); } this.isValid = rgb.ok; } TinyColor2.prototype.isDark = function() { return this.getBrightness() < 128; }; TinyColor2.prototype.isLight = function() { return !this.isDark(); }; TinyColor2.prototype.getBrightness = function() { var rgb = this.toRgb(); return (rgb.r * 299 + rgb.g * 587 + rgb.b * 114) / 1e3; }; TinyColor2.prototype.getLuminance = function() { var rgb = this.toRgb(); var R2; var G2; var B2; var RsRGB = rgb.r / 255; var GsRGB = rgb.g / 255; var BsRGB = rgb.b / 255; if (RsRGB <= 0.03928) { R2 = RsRGB / 12.92; } else { R2 = Math.pow((RsRGB + 0.055) / 1.055, 2.4); } if (GsRGB <= 0.03928) { G2 = GsRGB / 12.92; } else { G2 = Math.pow((GsRGB + 0.055) / 1.055, 2.4); } if (BsRGB <= 0.03928) { B2 = BsRGB / 12.92; } else { B2 = Math.pow((BsRGB + 0.055) / 1.055, 2.4); } return 0.2126 * R2 + 0.7152 * G2 + 0.0722 * B2; }; TinyColor2.prototype.getAlpha = function() { return this.a; }; TinyColor2.prototype.setAlpha = function(alpha) { this.a = boundAlpha(alpha); this.roundA = Math.round(100 * this.a) / 100; return this; }; TinyColor2.prototype.isMonochrome = function() { var s2 = this.toHsl().s; return s2 === 0; }; TinyColor2.prototype.toHsv = function() { var hsv = rgbToHsv(this.r, this.g, this.b); return { h: hsv.h * 360, s: hsv.s, v: hsv.v, a: this.a }; }; TinyColor2.prototype.toHsvString = function() { var hsv = rgbToHsv(this.r, this.g, this.b); var h2 = Math.round(hsv.h * 360); var s2 = Math.round(hsv.s * 100); var v2 = Math.round(hsv.v * 100); return this.a === 1 ? "hsv(".concat(h2, ", ").concat(s2, "%, ").concat(v2, "%)") : "hsva(".concat(h2, ", ").concat(s2, "%, ").concat(v2, "%, ").concat(this.roundA, ")"); }; TinyColor2.prototype.toHsl = function() { var hsl = rgbToHsl(this.r, this.g, this.b); return { h: hsl.h * 360, s: hsl.s, l: hsl.l, a: this.a }; }; TinyColor2.prototype.toHslString = function() { var hsl = rgbToHsl(this.r, this.g, this.b); var h2 = Math.round(hsl.h * 360); var s2 = Math.round(hsl.s * 100); var l2 = Math.round(hsl.l * 100); return this.a === 1 ? "hsl(".concat(h2, ", ").concat(s2, "%, ").concat(l2, "%)") : "hsla(".concat(h2, ", ").concat(s2, "%, ").concat(l2, "%, ").concat(this.roundA, ")"); }; TinyColor2.prototype.toHex = function(allow3Char) { if (allow3Char === void 0) { allow3Char = false; } return rgbToHex(this.r, this.g, this.b, allow3Char); }; TinyColor2.prototype.toHexString = function(allow3Char) { if (allow3Char === void 0) { allow3Char = false; } return "#" + this.toHex(allow3Char); }; TinyColor2.prototype.toHex8 = function(allow4Char) { if (allow4Char === void 0) { allow4Char = false; } return rgbaToHex(this.r, this.g, this.b, this.a, allow4Char); }; TinyColor2.prototype.toHex8String = function(allow4Char) { if (allow4Char === void 0) { allow4Char = false; } return "#" + this.toHex8(allow4Char); }; TinyColor2.prototype.toHexShortString = function(allowShortChar) { if (allowShortChar === void 0) { allowShortChar = false; } return this.a === 1 ? this.toHexString(allowShortChar) : this.toHex8String(allowShortChar); }; TinyColor2.prototype.toRgb = function() { return { r: Math.round(this.r), g: Math.round(this.g), b: Math.round(this.b), a: this.a }; }; TinyColor2.prototype.toRgbString = function() { var r = Math.round(this.r); var g = Math.round(this.g); var b2 = Math.round(this.b); return this.a === 1 ? "rgb(".concat(r, ", ").concat(g, ", ").concat(b2, ")") : "rgba(".concat(r, ", ").concat(g, ", ").concat(b2, ", ").concat(this.roundA, ")"); }; TinyColor2.prototype.toPercentageRgb = function() { var fmt = function(x2) { return "".concat(Math.round(bound01(x2, 255) * 100), "%"); }; return { r: fmt(this.r), g: fmt(this.g), b: fmt(this.b), a: this.a }; }; TinyColor2.prototype.toPercentageRgbString = function() { var rnd = function(x2) { return Math.round(bound01(x2, 255) * 100); }; return this.a === 1 ? "rgb(".concat(rnd(this.r), "%, ").concat(rnd(this.g), "%, ").concat(rnd(this.b), "%)") : "rgba(".concat(rnd(this.r), "%, ").concat(rnd(this.g), "%, ").concat(rnd(this.b), "%, ").concat(this.roundA, ")"); }; TinyColor2.prototype.toName = function() { if (this.a === 0) { return "transparent"; } if (this.a < 1) { return false; } var hex = "#" + rgbToHex(this.r, this.g, this.b, false); for (var _i = 0, _a2 = Object.entries(names); _i < _a2.length; _i++) { var _b = _a2[_i], key = _b[0], value = _b[1]; if (hex === value) { return key; } } return false; }; TinyColor2.prototype.toString = function(format2) { var formatSet = Boolean(format2); format2 = format2 !== null && format2 !== void 0 ? format2 : this.format; var formattedString = false; var hasAlpha = this.a < 1 && this.a >= 0; var needsAlphaFormat = !formatSet && hasAlpha && (format2.startsWith("hex") || format2 === "name"); if (needsAlphaFormat) { if (format2 === "name" && this.a === 0) { return this.toName(); } return this.toRgbString(); } if (format2 === "rgb") { formattedString = this.toRgbString(); } if (format2 === "prgb") { formattedString = this.toPercentageRgbString(); } if (format2 === "hex" || format2 === "hex6") { formattedString = this.toHexString(); } if (format2 === "hex3") { formattedString = this.toHexString(true); } if (format2 === "hex4") { formattedString = this.toHex8String(true); } if (format2 === "hex8") { formattedString = this.toHex8String(); } if (format2 === "name") { formattedString = this.toName(); } if (format2 === "hsl") { formattedString = this.toHslString(); } if (format2 === "hsv") { formattedString = this.toHsvString(); } return formattedString || this.toHexString(); }; TinyColor2.prototype.toNumber = function() { return (Math.round(this.r) << 16) + (Math.round(this.g) << 8) + Math.round(this.b); }; TinyColor2.prototype.clone = function() { return new TinyColor2(this.toString()); }; TinyColor2.prototype.lighten = function(amount) { if (amount === void 0) { amount = 10; } var hsl = this.toHsl(); hsl.l += amount / 100; hsl.l = clamp01(hsl.l); return new TinyColor2(hsl); }; TinyColor2.prototype.brighten = function(amount) { if (amount === void 0) { amount = 10; } var rgb = this.toRgb(); rgb.r = Math.max(0, Math.min(255, rgb.r - Math.round(255 * -(amount / 100)))); rgb.g = Math.max(0, Math.min(255, rgb.g - Math.round(255 * -(amount / 100)))); rgb.b = Math.max(0, Math.min(255, rgb.b - Math.round(255 * -(amount / 100)))); return new TinyColor2(rgb); }; TinyColor2.prototype.darken = function(amount) { if (amount === void 0) { amount = 10; } var hsl = this.toHsl(); hsl.l -= amount / 100; hsl.l = clamp01(hsl.l); return new TinyColor2(hsl); }; TinyColor2.prototype.tint = function(amount) { if (amount === void 0) { amount = 10; } return this.mix("white", amount); }; TinyColor2.prototype.shade = function(amount) { if (amount === void 0) { amount = 10; } return this.mix("black", amount); }; TinyColor2.prototype.desaturate = function(amount) { if (amount === void 0) { amount = 10; } var hsl = this.toHsl(); hsl.s -= amount / 100; hsl.s = clamp01(hsl.s); return new TinyColor2(hsl); }; TinyColor2.prototype.saturate = function(amount) { if (amount === void 0) { amount = 10; } var hsl = this.toHsl(); hsl.s += amount / 100; hsl.s = clamp01(hsl.s); return new TinyColor2(hsl); }; TinyColor2.prototype.greyscale = function() { return this.desaturate(100); }; TinyColor2.prototype.spin = function(amount) { var hsl = this.toHsl(); var hue = (hsl.h + amount) % 360; hsl.h = hue < 0 ? 360 + hue : hue; return new TinyColor2(hsl); }; TinyColor2.prototype.mix = function(color, amount) { if (amount === void 0) { amount = 50; } var rgb1 = this.toRgb(); var rgb2 = new TinyColor2(color).toRgb(); var p2 = amount / 100; var rgba = { r: (rgb2.r - rgb1.r) * p2 + rgb1.r, g: (rgb2.g - rgb1.g) * p2 + rgb1.g, b: (rgb2.b - rgb1.b) * p2 + rgb1.b, a: (rgb2.a - rgb1.a) * p2 + rgb1.a }; return new TinyColor2(rgba); }; TinyColor2.prototype.analogous = function(results, slices) { if (results === void 0) { results = 6; } if (slices === void 0) { slices = 30; } var hsl = this.toHsl(); var part = 360 / slices; var ret = [this]; for (hsl.h = (hsl.h - (part * results >> 1) + 720) % 360; --results; ) { hsl.h = (hsl.h + part) % 360; ret.push(new TinyColor2(hsl)); } return ret; }; TinyColor2.prototype.complement = function() { var hsl = this.toHsl(); hsl.h = (hsl.h + 180) % 360; return new TinyColor2(hsl); }; TinyColor2.prototype.monochromatic = function(results) { if (results === void 0) { results = 6; } var hsv = this.toHsv(); var h2 = hsv.h; var s2 = hsv.s; var v2 = hsv.v; var res = []; var modification = 1 / results; while (results--) { res.push(new TinyColor2({ h: h2, s: s2, v: v2 })); v2 = (v2 + modification) % 1; } return res; }; TinyColor2.prototype.splitcomplement = function() { var hsl = this.toHsl(); var h2 = hsl.h; return [ this, new TinyColor2({ h: (h2 + 72) % 360, s: hsl.s, l: hsl.l }), new TinyColor2({ h: (h2 + 216) % 360, s: hsl.s, l: hsl.l }) ]; }; TinyColor2.prototype.onBackground = function(background) { var fg = this.toRgb(); var bg = new TinyColor2(background).toRgb(); var alpha = fg.a + bg.a * (1 - fg.a); return new TinyColor2({ r: (fg.r * fg.a + bg.r * bg.a * (1 - fg.a)) / alpha, g: (fg.g * fg.a + bg.g * bg.a * (1 - fg.a)) / alpha, b: (fg.b * fg.a + bg.b * bg.a * (1 - fg.a)) / alpha, a: alpha }); }; TinyColor2.prototype.triad = function() { return this.polyad(3); }; TinyColor2.prototype.tetrad = function() { return this.polyad(4); }; TinyColor2.prototype.polyad = function(n) { var hsl = this.toHsl(); var h2 = hsl.h; var result = [this]; var increment = 360 / n; for (var i = 1; i < n; i++) { result.push(new TinyColor2({ h: (h2 + i * increment) % 360, s: hsl.s, l: hsl.l })); } return result; }; TinyColor2.prototype.equals = function(color) { return this.toRgbString() === new TinyColor2(color).toRgbString(); }; return TinyColor2; }() ); function darken(color, amount = 20) { return color.mix("#141414", amount).toString(); } function useButtonCustomStyle(props) { const _disabled = useFormDisabled(); const ns = useNamespace("button"); return vue.computed(() => { let styles = {}; let buttonColor = props.color; if (buttonColor) { const match = buttonColor.match(/var\((.*?)\)/); if (match) { buttonColor = window.getComputedStyle(window.document.documentElement).getPropertyValue(match[1]); } const color = new TinyColor(buttonColor); const activeBgColor = props.dark ? color.tint(20).toString() : darken(color, 20); if (props.plain) { styles = ns.cssVarBlock({ "bg-color": props.dark ? darken(color, 90) : color.tint(90).toString(), "text-color": buttonColor, "border-color": props.dark ? darken(color, 50) : color.tint(50).toString(), "hover-text-color": `var(${ns.cssVarName("color-white")})`, "hover-bg-color": buttonColor, "hover-border-color": buttonColor, "active-bg-color": activeBgColor, "active-text-color": `var(${ns.cssVarName("color-white")})`, "active-border-color": activeBgColor }); if (_disabled.value) { styles[ns.cssVarBlockName("disabled-bg-color")] = props.dark ? darken(color, 90) : color.tint(90).toString(); styles[ns.cssVarBlockName("disabled-text-color")] = props.dark ? darken(color, 50) : color.tint(50).toString(); styles[ns.cssVarBlockName("disabled-border-color")] = props.dark ? darken(color, 80) : color.tint(80).toString(); } } else { const hoverBgColor = props.dark ? darken(color, 30) : color.tint(30).toString(); const textColor = color.isDark() ? `var(${ns.cssVarName("color-white")})` : `var(${ns.cssVarName("color-black")})`; styles = ns.cssVarBlock({ "bg-color": buttonColor, "text-color": textColor, "border-color": buttonColor, "hover-bg-color": hoverBgColor, "hover-text-color": textColor, "hover-border-color": hoverBgColor, "active-bg-color": activeBgColor, "active-border-color": activeBgColor }); if (_disabled.value) { const disabledButtonColor = props.dark ? darken(color, 50) : color.tint(50).toString(); styles[ns.cssVarBlockName("disabled-bg-color")] = disabledButtonColor; styles[ns.cssVarBlockName("disabled-text-color")] = props.dark ? "rgba(255, 255, 255, 0.5)" : `var(${ns.cssVarName("color-white")})`; styles[ns.cssVarBlockName("disabled-border-color")] = disabledButtonColor; } } } return styles; }); } const __default__$f = vue.defineComponent({ name: "ElButton" }); const _sfc_main$t = /* @__PURE__ */ vue.defineComponent({ ...__default__$f, props: buttonProps, emits: buttonEmits, setup(__props, { expose, emit }) { const props = __props; const buttonStyle = useButtonCustomStyle(props); const ns = useNamespace("button"); const { _ref, _size, _type, _disabled, _props, shouldAddSpace, handleClick } = useButton(props, emit); const buttonKls = vue.computed(() => [ ns.b(), ns.m(_type.value), ns.m(_size.value), ns.is("disabled", _disabled.value), ns.is("loading", props.loading), ns.is("plain", props.plain), ns.is("round", props.round), ns.is("circle", props.circle), ns.is("text", props.text), ns.is("link", props.link), ns.is("has-bg", props.bg) ]); expose({ ref: _ref, size: _size, type: _type, disabled: _disabled, shouldAddSpace }); return (_ctx, _cache) => { return vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.tag), vue.mergeProps({ ref_key: "_ref", ref: _ref }, vue.unref(_props), { class: vue.unref(buttonKls), style: vue.unref(buttonStyle), onClick: vue.unref(handleClick) }), { default: vue.withCtx(() => [ _ctx.loading ? (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 0 }, [ _ctx.$slots.loading ? vue.renderSlot(_ctx.$slots, "loading", { key: 0 }) : (vue.openBlock(), vue.createBlock(vue.unref(ElIcon), { key: 1, class: vue.normalizeClass(vue.unref(ns).is("loading")) }, { default: vue.withCtx(() => [ (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.loadingIcon))) ]), _: 1 }, 8, ["class"])) ], 64)) : _ctx.icon || _ctx.$slots.icon ? (vue.openBlock(), vue.createBlock(vue.unref(ElIcon), { key: 1 }, { default: vue.withCtx(() => [ _ctx.icon ? (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.icon), { key: 0 })) : vue.renderSlot(_ctx.$slots, "icon", { key: 1 }) ]), _: 3 })) : vue.createCommentVNode("v-if", true), _ctx.$slots.default ? (vue.openBlock(), vue.createElementBlock("span", { key: 2, class: vue.normalizeClass({ [vue.unref(ns).em("text", "expand")]: vue.unref(shouldAddSpace) }) }, [ vue.renderSlot(_ctx.$slots, "default") ], 2)) : vue.createCommentVNode("v-if", true) ]), _: 3 }, 16, ["class", "style", "onClick"]); }; } }); var Button = /* @__PURE__ */ _export_sfc$1(_sfc_main$t, [["__file", "button.vue"]]); const buttonGroupProps = { size: buttonProps.size, type: buttonProps.type }; const __default__$e = vue.defineComponent({ name: "ElButtonGroup" }); const _sfc_main$s = /* @__PURE__ */ vue.defineComponent({ ...__default__$e, props: buttonGroupProps, setup(__props) { const props = __props; vue.provide(buttonGroupContextKey, vue.reactive({ size: vue.toRef(props, "size"), type: vue.toRef(props, "type") })); const ns = useNamespace("button"); return (_ctx, _cache) => { return vue.openBlock(), vue.createElementBlock("div", { class: vue.normalizeClass(vue.unref(ns).b("group")) }, [ vue.renderSlot(_ctx.$slots, "default") ], 2); }; } }); var ButtonGroup = /* @__PURE__ */ _export_sfc$1(_sfc_main$s, [["__file", "button-group.vue"]]); const ElButton = withInstall(Button, { ButtonGroup }); const ElButtonGroup = withNoopInstall(ButtonGroup); function getDefaultExportFromCjs(x2) { return x2 && x2.__esModule && Object.prototype.hasOwnProperty.call(x2, "default") ? x2["default"] : x2; } var PatchFlags = /* @__PURE__ */ ((PatchFlags2) => { PatchFlags2[PatchFlags2["TEXT"] = 1] = "TEXT"; PatchFlags2[PatchFlags2["CLASS"] = 2] = "CLASS"; PatchFlags2[PatchFlags2["STYLE"] = 4] = "STYLE"; PatchFlags2[PatchFlags2["PROPS"] = 8] = "PROPS"; PatchFlags2[PatchFlags2["FULL_PROPS"] = 16] = "FULL_PROPS"; PatchFlags2[PatchFlags2["HYDRATE_EVENTS"] = 32] = "HYDRATE_EVENTS"; PatchFlags2[PatchFlags2["STABLE_FRAGMENT"] = 64] = "STABLE_FRAGMENT"; PatchFlags2[PatchFlags2["KEYED_FRAGMENT"] = 128] = "KEYED_FRAGMENT"; PatchFlags2[PatchFlags2["UNKEYED_FRAGMENT"] = 256] = "UNKEYED_FRAGMENT"; PatchFlags2[PatchFlags2["NEED_PATCH"] = 512] = "NEED_PATCH"; PatchFlags2[PatchFlags2["DYNAMIC_SLOTS"] = 1024] = "DYNAMIC_SLOTS"; PatchFlags2[PatchFlags2["HOISTED"] = -1] = "HOISTED"; PatchFlags2[PatchFlags2["BAIL"] = -2] = "BAIL"; return PatchFlags2; })(PatchFlags || {}); const flattedChildren = (children) => { const vNodes = isArray$1(children) ? children : [children]; const result = []; vNodes.forEach((child) => { var _a2; if (isArray$1(child)) { result.push(...flattedChildren(child)); } else if (vue.isVNode(child) && ((_a2 = child.component) == null ? void 0 : _a2.subTree)) { result.push(child, ...flattedChildren(child.component.subTree)); } else if (vue.isVNode(child) && isArray$1(child.children)) { result.push(...flattedChildren(child.children)); } else if (vue.isVNode(child) && child.shapeFlag === 2) { result.push(...flattedChildren(child.type())); } else { result.push(child); } }); return result; }; const getOrderedChildren = (vm, childComponentName, children) => { const nodes = flattedChildren(vm.subTree).filter((n) => { var _a2; return vue.isVNode(n) && ((_a2 = n.type) == null ? void 0 : _a2.name) === childComponentName && !!n.component; }); const uids = nodes.map((n) => n.component.uid); return uids.map((uid) => children[uid]).filter((p2) => !!p2); }; const useOrderedChildren = (vm, childComponentName) => { const children = {}; const orderedChildren = vue.shallowRef([]); const addChild = (child) => { children[child.uid] = child; orderedChildren.value = getOrderedChildren(vm, childComponentName, children); }; const removeChild = (uid) => { delete children[uid]; orderedChildren.value = orderedChildren.value.filter((children2) => children2.uid !== uid); }; return { children: orderedChildren, addChild, removeChild }; }; const checkboxProps = { modelValue: { type: [Number, String, Boolean], default: void 0 }, label: { type: [String, Boolean, Number, Object], default: void 0 }, value: { type: [String, Boolean, Number, Object], default: void 0 }, indeterminate: Boolean, disabled: Boolean, checked: Boolean, name: { type: String, default: void 0 }, trueValue: { type: [String, Number], default: void 0 }, falseValue: { type: [String, Number], default: void 0 }, trueLabel: { type: [String, Number], default: void 0 }, falseLabel: { type: [String, Number], default: void 0 }, id: { type: String, default: void 0 }, border: Boolean, size: useSizeProp, tabindex: [String, Number], validateEvent: { type: Boolean, default: true }, ...useAriaProps(["ariaControls"]) }; const checkboxEmits = { [UPDATE_MODEL_EVENT]: (val) => isString$1(val) || isNumber(val) || isBoolean(val), change: (val) => isString$1(val) || isNumber(val) || isBoolean(val) }; const checkboxGroupContextKey = Symbol("checkboxGroupContextKey"); const useCheckboxDisabled = ({ model, isChecked }) => { const checkboxGroup = vue.inject(checkboxGroupContextKey, void 0); const isLimitDisabled = vue.computed(() => { var _a2, _b; const max = (_a2 = checkboxGroup == null ? void 0 : checkboxGroup.max) == null ? void 0 : _a2.value; const min = (_b = checkboxGroup == null ? void 0 : checkboxGroup.min) == null ? void 0 : _b.value; return !isUndefined(max) && model.value.length >= max && !isChecked.value || !isUndefined(min) && model.value.length <= min && isChecked.value; }); const isDisabled = useFormDisabled(vue.computed(() => (checkboxGroup == null ? void 0 : checkboxGroup.disabled.value) || isLimitDisabled.value)); return { isDisabled, isLimitDisabled }; }; const useCheckboxEvent = (props, { model, isLimitExceeded, hasOwnLabel, isDisabled, isLabeledByFormItem }) => { const checkboxGroup = vue.inject(checkboxGroupContextKey, void 0); const { formItem } = useFormItem(); const { emit } = vue.getCurrentInstance(); function getLabeledValue(value) { var _a2, _b, _c, _d; return [true, props.trueValue, props.trueLabel].includes(value) ? (_b = (_a2 = props.trueValue) != null ? _a2 : props.trueLabel) != null ? _b : true : (_d = (_c = props.falseValue) != null ? _c : props.falseLabel) != null ? _d : false; } function emitChangeEvent(checked, e) { emit(CHANGE_EVENT, getLabeledValue(checked), e); } function handleChange(e) { if (isLimitExceeded.value) return; const target = e.target; emit(CHANGE_EVENT, getLabeledValue(target.checked), e); } async function onClickRoot(e) { if (isLimitExceeded.value) return; if (!hasOwnLabel.value && !isDisabled.value && isLabeledByFormItem.value) { const eventTargets = e.composedPath(); const hasLabel = eventTargets.some((item) => item.tagName === "LABEL"); if (!hasLabel) { model.value = getLabeledValue([false, props.falseValue, props.falseLabel].includes(model.value)); await vue.nextTick(); emitChangeEvent(model.value, e); } } } const validateEvent = vue.computed(() => (checkboxGroup == null ? void 0 : checkboxGroup.validateEvent) || props.validateEvent); vue.watch(() => props.modelValue, () => { if (validateEvent.value) { formItem == null ? void 0 : formItem.validate("change").catch((err) => debugWarn()); } }); return { handleChange, onClickRoot }; }; const useCheckboxModel = (props) => { const selfModel = vue.ref(false); const { emit } = vue.getCurrentInstance(); const checkboxGroup = vue.inject(checkboxGroupContextKey, void 0); const isGroup = vue.computed(() => isUndefined(checkboxGroup) === false); const isLimitExceeded = vue.ref(false); const model = vue.computed({ get() { var _a2, _b; return isGroup.value ? (_a2 = checkboxGroup == null ? void 0 : checkboxGroup.modelValue) == null ? void 0 : _a2.value : (_b = props.modelValue) != null ? _b : selfModel.value; }, set(val) { var _a2, _b; if (isGroup.value && isArray$1(val)) { isLimitExceeded.value = ((_a2 = checkboxGroup == null ? void 0 : checkboxGroup.max) == null ? void 0 : _a2.value) !== void 0 && val.length > (checkboxGroup == null ? void 0 : checkboxGroup.max.value) && val.length > model.value.length; isLimitExceeded.value === false && ((_b = checkboxGroup == null ? void 0 : checkboxGroup.changeEvent) == null ? void 0 : _b.call(checkboxGroup, val)); } else { emit(UPDATE_MODEL_EVENT, val); selfModel.value = val; } } }); return { model, isGroup, isLimitExceeded }; }; const useCheckboxStatus = (props, slots, { model }) => { const checkboxGroup = vue.inject(checkboxGroupContextKey, void 0); const isFocused = vue.ref(false); const actualValue = vue.computed(() => { if (!isPropAbsent(props.value)) { return props.value; } return props.label; }); const isChecked = vue.computed(() => { const value = model.value; if (isBoolean(value)) { return value; } else if (isArray$1(value)) { if (isObject$1(actualValue.value)) { return value.map(vue.toRaw).some((o2) => isEqual(o2, actualValue.value)); } else { return value.map(vue.toRaw).includes(actualValue.value); } } else if (value !== null && value !== void 0) { return value === props.trueValue || value === props.trueLabel; } else { return !!value; } }); const checkboxButtonSize = useFormSize(vue.computed(() => { var _a2; return (_a2 = checkboxGroup == null ? void 0 : checkboxGroup.size) == null ? void 0 : _a2.value; }), { prop: true }); const checkboxSize = useFormSize(vue.computed(() => { var _a2; return (_a2 = checkboxGroup == null ? void 0 : checkboxGroup.size) == null ? void 0 : _a2.value; })); const hasOwnLabel = vue.computed(() => { return !!slots.default || !isPropAbsent(actualValue.value); }); return { checkboxButtonSize, isChecked, isFocused, checkboxSize, hasOwnLabel, actualValue }; }; const useCheckbox = (props, slots) => { const { formItem: elFormItem } = useFormItem(); const { model, isGroup, isLimitExceeded } = useCheckboxModel(props); const { isFocused, isChecked, checkboxButtonSize, checkboxSize, hasOwnLabel, actualValue } = useCheckboxStatus(props, slots, { model }); const { isDisabled } = useCheckboxDisabled({ model, isChecked }); const { inputId, isLabeledByFormItem } = useFormItemInputId(props, { formItemContext: elFormItem, disableIdGeneration: hasOwnLabel, disableIdManagement: isGroup }); const { handleChange, onClickRoot } = useCheckboxEvent(props, { model, isLimitExceeded, hasOwnLabel, isDisabled, isLabeledByFormItem }); const setStoreValue = () => { function addToStore() { var _a2, _b; if (isArray$1(model.value) && !model.value.includes(actualValue.value)) { model.value.push(actualValue.value); } else { model.value = (_b = (_a2 = props.trueValue) != null ? _a2 : props.trueLabel) != null ? _b : true; } } props.checked && addToStore(); }; setStoreValue(); useDeprecated({ from: "label act as value", replacement: "value", version: "3.0.0", scope: "el-checkbox", ref: "https://element-plus.org/en-US/component/checkbox.html" }, vue.computed(() => isGroup.value && isPropAbsent(props.value))); useDeprecated({ from: "true-label", replacement: "true-value", version: "3.0.0", scope: "el-checkbox", ref: "https://element-plus.org/en-US/component/checkbox.html" }, vue.computed(() => !!props.trueLabel)); useDeprecated({ from: "false-label", replacement: "false-value", version: "3.0.0", scope: "el-checkbox", ref: "https://element-plus.org/en-US/component/checkbox.html" }, vue.computed(() => !!props.falseLabel)); return { inputId, isLabeledByFormItem, isChecked, isDisabled, isFocused, checkboxButtonSize, checkboxSize, hasOwnLabel, model, actualValue, handleChange, onClickRoot }; }; const __default__$d = vue.defineComponent({ name: "ElCheckbox" }); const _sfc_main$r = /* @__PURE__ */ vue.defineComponent({ ...__default__$d, props: checkboxProps, emits: checkboxEmits, setup(__props) { const props = __props; const slots = vue.useSlots(); const { inputId, isLabeledByFormItem, isChecked, isDisabled, isFocused, checkboxSize, hasOwnLabel, model, actualValue, handleChange, onClickRoot } = useCheckbox(props, slots); const ns = useNamespace("checkbox"); const compKls = vue.computed(() => { return [ ns.b(), ns.m(checkboxSize.value), ns.is("disabled", isDisabled.value), ns.is("bordered", props.border), ns.is("checked", isChecked.value) ]; }); const spanKls = vue.computed(() => { return [ ns.e("input"), ns.is("disabled", isDisabled.value), ns.is("checked", isChecked.value), ns.is("indeterminate", props.indeterminate), ns.is("focus", isFocused.value) ]; }); return (_ctx, _cache) => { return vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(!vue.unref(hasOwnLabel) && vue.unref(isLabeledByFormItem) ? "span" : "label"), { class: vue.normalizeClass(vue.unref(compKls)), "aria-controls": _ctx.indeterminate ? _ctx.ariaControls : null, onClick: vue.unref(onClickRoot) }, { default: vue.withCtx(() => { var _a2, _b, _c, _d; return [ vue.createElementVNode("span", { class: vue.normalizeClass(vue.unref(spanKls)) }, [ _ctx.trueValue || _ctx.falseValue || _ctx.trueLabel || _ctx.falseLabel ? vue.withDirectives((vue.openBlock(), vue.createElementBlock("input", { key: 0, id: vue.unref(inputId), "onUpdate:modelValue": ($event) => vue.isRef(model) ? model.value = $event : null, class: vue.normalizeClass(vue.unref(ns).e("original")), type: "checkbox", indeterminate: _ctx.indeterminate, name: _ctx.name, tabindex: _ctx.tabindex, disabled: vue.unref(isDisabled), "true-value": (_b = (_a2 = _ctx.trueValue) != null ? _a2 : _ctx.trueLabel) != null ? _b : true, "false-value": (_d = (_c = _ctx.falseValue) != null ? _c : _ctx.falseLabel) != null ? _d : false, onChange: vue.unref(handleChange), onFocus: ($event) => isFocused.value = true, onBlur: ($event) => isFocused.value = false, onClick: vue.withModifiers(() => { }, ["stop"]) }, null, 42, ["id", "onUpdate:modelValue", "indeterminate", "name", "tabindex", "disabled", "true-value", "false-value", "onChange", "onFocus", "onBlur", "onClick"])), [ [vue.vModelCheckbox, vue.unref(model)] ]) : vue.withDirectives((vue.openBlock(), vue.createElementBlock("input", { key: 1, id: vue.unref(inputId), "onUpdate:modelValue": ($event) => vue.isRef(model) ? model.value = $event : null, class: vue.normalizeClass(vue.unref(ns).e("original")), type: "checkbox", indeterminate: _ctx.indeterminate, disabled: vue.unref(isDisabled), value: vue.unref(actualValue), name: _ctx.name, tabindex: _ctx.tabindex, onChange: vue.unref(handleChange), onFocus: ($event) => isFocused.value = true, onBlur: ($event) => isFocused.value = false, onClick: vue.withModifiers(() => { }, ["stop"]) }, null, 42, ["id", "onUpdate:modelValue", "indeterminate", "disabled", "value", "name", "tabindex", "onChange", "onFocus", "onBlur", "onClick"])), [ [vue.vModelCheckbox, vue.unref(model)] ]), vue.createElementVNode("span", { class: vue.normalizeClass(vue.unref(ns).e("inner")) }, null, 2) ], 2), vue.unref(hasOwnLabel) ? (vue.openBlock(), vue.createElementBlock("span", { key: 0, class: vue.normalizeClass(vue.unref(ns).e("label")) }, [ vue.renderSlot(_ctx.$slots, "default"), !_ctx.$slots.default ? (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 0 }, [ vue.createTextVNode(vue.toDisplayString(_ctx.label), 1) ], 64)) : vue.createCommentVNode("v-if", true) ], 2)) : vue.createCommentVNode("v-if", true) ]; }), _: 3 }, 8, ["class", "aria-controls", "onClick"]); }; } }); var Checkbox = /* @__PURE__ */ _export_sfc$1(_sfc_main$r, [["__file", "checkbox.vue"]]); const __default__$c = vue.defineComponent({ name: "ElCheckboxButton" }); const _sfc_main$q = /* @__PURE__ */ vue.defineComponent({ ...__default__$c, props: checkboxProps, emits: checkboxEmits, setup(__props) { const props = __props; const slots = vue.useSlots(); const { isFocused, isChecked, isDisabled, checkboxButtonSize, model, actualValue, handleChange } = useCheckbox(props, slots); const checkboxGroup = vue.inject(checkboxGroupContextKey, void 0); const ns = useNamespace("checkbox"); const activeStyle = vue.computed(() => { var _a2, _b, _c, _d; const fillValue = (_b = (_a2 = checkboxGroup == null ? void 0 : checkboxGroup.fill) == null ? void 0 : _a2.value) != null ? _b : ""; return { backgroundColor: fillValue, borderColor: fillValue, color: (_d = (_c = checkboxGroup == null ? void 0 : checkboxGroup.textColor) == null ? void 0 : _c.value) != null ? _d : "", boxShadow: fillValue ? `-1px 0 0 0 ${fillValue}` : void 0 }; }); const labelKls = vue.computed(() => { return [ ns.b("button"), ns.bm("button", checkboxButtonSize.value), ns.is("disabled", isDisabled.value), ns.is("checked", isChecked.value), ns.is("focus", isFocused.value) ]; }); return (_ctx, _cache) => { var _a2, _b, _c, _d; return vue.openBlock(), vue.createElementBlock("label", { class: vue.normalizeClass(vue.unref(labelKls)) }, [ _ctx.trueValue || _ctx.falseValue || _ctx.trueLabel || _ctx.falseLabel ? vue.withDirectives((vue.openBlock(), vue.createElementBlock("input", { key: 0, "onUpdate:modelValue": ($event) => vue.isRef(model) ? model.value = $event : null, class: vue.normalizeClass(vue.unref(ns).be("button", "original")), type: "checkbox", name: _ctx.name, tabindex: _ctx.tabindex, disabled: vue.unref(isDisabled), "true-value": (_b = (_a2 = _ctx.trueValue) != null ? _a2 : _ctx.trueLabel) != null ? _b : true, "false-value": (_d = (_c = _ctx.falseValue) != null ? _c : _ctx.falseLabel) != null ? _d : false, onChange: vue.unref(handleChange), onFocus: ($event) => isFocused.value = true, onBlur: ($event) => isFocused.value = false, onClick: vue.withModifiers(() => { }, ["stop"]) }, null, 42, ["onUpdate:modelValue", "name", "tabindex", "disabled", "true-value", "false-value", "onChange", "onFocus", "onBlur", "onClick"])), [ [vue.vModelCheckbox, vue.unref(model)] ]) : vue.withDirectives((vue.openBlock(), vue.createElementBlock("input", { key: 1, "onUpdate:modelValue": ($event) => vue.isRef(model) ? model.value = $event : null, class: vue.normalizeClass(vue.unref(ns).be("button", "original")), type: "checkbox", name: _ctx.name, tabindex: _ctx.tabindex, disabled: vue.unref(isDisabled), value: vue.unref(actualValue), onChange: vue.unref(handleChange), onFocus: ($event) => isFocused.value = true, onBlur: ($event) => isFocused.value = false, onClick: vue.withModifiers(() => { }, ["stop"]) }, null, 42, ["onUpdate:modelValue", "name", "tabindex", "disabled", "value", "onChange", "onFocus", "onBlur", "onClick"])), [ [vue.vModelCheckbox, vue.unref(model)] ]), _ctx.$slots.default || _ctx.label ? (vue.openBlock(), vue.createElementBlock("span", { key: 2, class: vue.normalizeClass(vue.unref(ns).be("button", "inner")), style: vue.normalizeStyle(vue.unref(isChecked) ? vue.unref(activeStyle) : void 0) }, [ vue.renderSlot(_ctx.$slots, "default", {}, () => [ vue.createTextVNode(vue.toDisplayString(_ctx.label), 1) ]) ], 6)) : vue.createCommentVNode("v-if", true) ], 2); }; } }); var CheckboxButton = /* @__PURE__ */ _export_sfc$1(_sfc_main$q, [["__file", "checkbox-button.vue"]]); const checkboxGroupProps = buildProps({ modelValue: { type: definePropType(Array), default: () => [] }, disabled: Boolean, min: Number, max: Number, size: useSizeProp, fill: String, textColor: String, tag: { type: String, default: "div" }, validateEvent: { type: Boolean, default: true }, ...useAriaProps(["ariaLabel"]) }); const checkboxGroupEmits = { [UPDATE_MODEL_EVENT]: (val) => isArray$1(val), change: (val) => isArray$1(val) }; const __default__$b = vue.defineComponent({ name: "ElCheckboxGroup" }); const _sfc_main$p = /* @__PURE__ */ vue.defineComponent({ ...__default__$b, props: checkboxGroupProps, emits: checkboxGroupEmits, setup(__props, { emit }) { const props = __props; const ns = useNamespace("checkbox"); const { formItem } = useFormItem(); const { inputId: groupId, isLabeledByFormItem } = useFormItemInputId(props, { formItemContext: formItem }); const changeEvent = async (value) => { emit(UPDATE_MODEL_EVENT, value); await vue.nextTick(); emit(CHANGE_EVENT, value); }; const modelValue = vue.computed({ get() { return props.modelValue; }, set(val) { changeEvent(val); } }); vue.provide(checkboxGroupContextKey, { ...pick(vue.toRefs(props), [ "size", "min", "max", "disabled", "validateEvent", "fill", "textColor" ]), modelValue, changeEvent }); vue.watch(() => props.modelValue, () => { if (props.validateEvent) { formItem == null ? void 0 : formItem.validate("change").catch((err) => debugWarn()); } }); return (_ctx, _cache) => { var _a2; return vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.tag), { id: vue.unref(groupId), class: vue.normalizeClass(vue.unref(ns).b("group")), role: "group", "aria-label": !vue.unref(isLabeledByFormItem) ? _ctx.ariaLabel || "checkbox-group" : void 0, "aria-labelledby": vue.unref(isLabeledByFormItem) ? (_a2 = vue.unref(formItem)) == null ? void 0 : _a2.labelId : void 0 }, { default: vue.withCtx(() => [ vue.renderSlot(_ctx.$slots, "default") ]), _: 3 }, 8, ["id", "class", "aria-label", "aria-labelledby"]); }; } }); var CheckboxGroup = /* @__PURE__ */ _export_sfc$1(_sfc_main$p, [["__file", "checkbox-group.vue"]]); const ElCheckbox = withInstall(Checkbox, { CheckboxButton, CheckboxGroup }); withNoopInstall(CheckboxButton); withNoopInstall(CheckboxGroup); const capitalize = (str) => capitalize$1(str); const nodeList = /* @__PURE__ */ new Map(); if (isClient) { let startClick; document.addEventListener("mousedown", (e) => startClick = e); document.addEventListener("mouseup", (e) => { if (startClick) { for (const handlers of nodeList.values()) { for (const { documentHandler } of handlers) { documentHandler(e, startClick); } } startClick = void 0; } }); } function createDocumentHandler(el, binding) { let excludes = []; if (isArray$1(binding.arg)) { excludes = binding.arg; } else if (isElement(binding.arg)) { excludes.push(binding.arg); } return function(mouseup, mousedown) { const popperRef = binding.instance.popperRef; const mouseUpTarget = mouseup.target; const mouseDownTarget = mousedown == null ? void 0 : mousedown.target; const isBound = !binding || !binding.instance; const isTargetExists = !mouseUpTarget || !mouseDownTarget; const isContainedByEl = el.contains(mouseUpTarget) || el.contains(mouseDownTarget); const isSelf = el === mouseUpTarget; const isTargetExcluded = excludes.length && excludes.some((item) => item == null ? void 0 : item.contains(mouseUpTarget)) || excludes.length && excludes.includes(mouseDownTarget); const isContainedByPopper = popperRef && (popperRef.contains(mouseUpTarget) || popperRef.contains(mouseDownTarget)); if (isBound || isTargetExists || isContainedByEl || isSelf || isTargetExcluded || isContainedByPopper) { return; } binding.value(mouseup, mousedown); }; } const ClickOutside = { beforeMount(el, binding) { if (!nodeList.has(el)) { nodeList.set(el, []); } nodeList.get(el).push({ documentHandler: createDocumentHandler(el, binding), bindingFn: binding.value }); }, updated(el, binding) { if (!nodeList.has(el)) { nodeList.set(el, []); } const handlers = nodeList.get(el); const oldHandlerIndex = handlers.findIndex((item) => item.bindingFn === binding.oldValue); const newHandler = { documentHandler: createDocumentHandler(el, binding), bindingFn: binding.value }; if (oldHandlerIndex >= 0) { handlers.splice(oldHandlerIndex, 1, newHandler); } else { handlers.push(newHandler); } }, unmounted(el) { nodeList.delete(el); } }; const configProviderProps = buildProps({ a11y: { type: Boolean, default: true }, locale: { type: definePropType(Object) }, size: useSizeProp, button: { type: definePropType(Object) }, experimentalFeatures: { type: definePropType(Object) }, keyboardNavigation: { type: Boolean, default: true }, message: { type: definePropType(Object) }, zIndex: Number, namespace: { type: String, default: "el" }, ...useEmptyValuesProps }); const messageConfig = {}; vue.defineComponent({ name: "ElConfigProvider", props: configProviderProps, setup(props, { slots }) { vue.watch(() => props.message, (val) => { Object.assign(messageConfig, val != null ? val : {}); }, { immediate: true, deep: true }); const config = provideGlobalConfig(props); return () => vue.renderSlot(slots, "default", { config: config == null ? void 0 : config.value }); } }); const useSameTarget = (handleClick) => { if (!handleClick) { return { onClick: NOOP, onMousedown: NOOP, onMouseup: NOOP }; } let mousedownTarget = false; let mouseupTarget = false; const onClick = (e) => { if (mousedownTarget && mouseupTarget) { handleClick(e); } mousedownTarget = mouseupTarget = false; }; const onMousedown = (e) => { mousedownTarget = e.target === e.currentTarget; }; const onMouseup = (e) => { mouseupTarget = e.target === e.currentTarget; }; return { onClick, onMousedown, onMouseup }; }; const overlayProps = buildProps({ mask: { type: Boolean, default: true }, customMaskEvent: Boolean, overlayClass: { type: definePropType([ String, Array, Object ]) }, zIndex: { type: definePropType([String, Number]) } }); const overlayEmits = { click: (evt) => evt instanceof MouseEvent }; const BLOCK = "overlay"; var Overlay = vue.defineComponent({ name: "ElOverlay", props: overlayProps, emits: overlayEmits, setup(props, { slots, emit }) { const ns = useNamespace(BLOCK); const onMaskClick = (e) => { emit("click", e); }; const { onClick, onMousedown, onMouseup } = useSameTarget(props.customMaskEvent ? void 0 : onMaskClick); return () => { return props.mask ? vue.createVNode("div", { class: [ns.b(), props.overlayClass], style: { zIndex: props.zIndex }, onClick, onMousedown, onMouseup }, [vue.renderSlot(slots, "default")], PatchFlags.STYLE | PatchFlags.CLASS | PatchFlags.PROPS, ["onClick", "onMouseup", "onMousedown"]) : vue.h("div", { class: props.overlayClass, style: { zIndex: props.zIndex, position: "fixed", top: "0px", right: "0px", bottom: "0px", left: "0px" } }, [vue.renderSlot(slots, "default")]); }; } }); const ElOverlay = Overlay; const dialogInjectionKey = Symbol("dialogInjectionKey"); const dialogContentProps = buildProps({ center: Boolean, alignCenter: Boolean, closeIcon: { type: iconPropType }, draggable: Boolean, overflow: Boolean, fullscreen: Boolean, headerClass: String, bodyClass: String, footerClass: String, showClose: { type: Boolean, default: true }, title: { type: String, default: "" }, ariaLevel: { type: String, default: "2" } }); const dialogContentEmits = { close: () => true }; const useDraggable = (targetRef, dragRef, draggable, overflow) => { let transform = { offsetX: 0, offsetY: 0 }; const onMousedown = (e) => { const downX = e.clientX; const downY = e.clientY; const { offsetX, offsetY } = transform; const targetRect = targetRef.value.getBoundingClientRect(); const targetLeft = targetRect.left; const targetTop = targetRect.top; const targetWidth = targetRect.width; const targetHeight = targetRect.height; const clientWidth = document.documentElement.clientWidth; const clientHeight = document.documentElement.clientHeight; const minLeft = -targetLeft + offsetX; const minTop = -targetTop + offsetY; const maxLeft = clientWidth - targetLeft - targetWidth + offsetX; const maxTop = clientHeight - targetTop - targetHeight + offsetY; const onMousemove = (e2) => { let moveX = offsetX + e2.clientX - downX; let moveY = offsetY + e2.clientY - downY; if (!(overflow == null ? void 0 : overflow.value)) { moveX = Math.min(Math.max(moveX, minLeft), maxLeft); moveY = Math.min(Math.max(moveY, minTop), maxTop); } transform = { offsetX: moveX, offsetY: moveY }; if (targetRef.value) { targetRef.value.style.transform = `translate(${addUnit(moveX)}, ${addUnit(moveY)})`; } }; const onMouseup = () => { document.removeEventListener("mousemove", onMousemove); document.removeEventListener("mouseup", onMouseup); }; document.addEventListener("mousemove", onMousemove); document.addEventListener("mouseup", onMouseup); }; const onDraggable = () => { if (dragRef.value && targetRef.value) { dragRef.value.addEventListener("mousedown", onMousedown); } }; const offDraggable = () => { if (dragRef.value && targetRef.value) { dragRef.value.removeEventListener("mousedown", onMousedown); } }; const resetPosition = () => { transform = { offsetX: 0, offsetY: 0 }; if (targetRef.value) { targetRef.value.style.transform = "none"; } }; vue.onMounted(() => { vue.watchEffect(() => { if (draggable.value) { onDraggable(); } else { offDraggable(); } }); }); vue.onBeforeUnmount(() => { offDraggable(); }); return { resetPosition }; }; const composeRefs = (...refs) => { return (el) => { refs.forEach((ref2) => { if (isFunction$1(ref2)) { ref2(el); } else { ref2.value = el; } }); }; }; const __default__$a = vue.defineComponent({ name: "ElDialogContent" }); const _sfc_main$o = /* @__PURE__ */ vue.defineComponent({ ...__default__$a, props: dialogContentProps, emits: dialogContentEmits, setup(__props, { expose }) { const props = __props; const { t } = useLocale(); const { Close } = CloseComponents; const { dialogRef, headerRef, bodyId, ns, style } = vue.inject(dialogInjectionKey); const { focusTrapRef } = vue.inject(FOCUS_TRAP_INJECTION_KEY); const dialogKls = vue.computed(() => [ ns.b(), ns.is("fullscreen", props.fullscreen), ns.is("draggable", props.draggable), ns.is("align-center", props.alignCenter), { [ns.m("center")]: props.center } ]); const composedDialogRef = composeRefs(focusTrapRef, dialogRef); const draggable = vue.computed(() => props.draggable); const overflow = vue.computed(() => props.overflow); const { resetPosition } = useDraggable(dialogRef, headerRef, draggable, overflow); expose({ resetPosition }); return (_ctx, _cache) => { return vue.openBlock(), vue.createElementBlock("div", { ref: vue.unref(composedDialogRef), class: vue.normalizeClass(vue.unref(dialogKls)), style: vue.normalizeStyle(vue.unref(style)), tabindex: "-1" }, [ vue.createElementVNode("header", { ref_key: "headerRef", ref: headerRef, class: vue.normalizeClass([vue.unref(ns).e("header"), _ctx.headerClass, { "show-close": _ctx.showClose }]) }, [ vue.renderSlot(_ctx.$slots, "header", {}, () => [ vue.createElementVNode("span", { role: "heading", "aria-level": _ctx.ariaLevel, class: vue.normalizeClass(vue.unref(ns).e("title")) }, vue.toDisplayString(_ctx.title), 11, ["aria-level"]) ]), _ctx.showClose ? (vue.openBlock(), vue.createElementBlock("button", { key: 0, "aria-label": vue.unref(t)("el.dialog.close"), class: vue.normalizeClass(vue.unref(ns).e("headerbtn")), type: "button", onClick: ($event) => _ctx.$emit("close") }, [ vue.createVNode(vue.unref(ElIcon), { class: vue.normalizeClass(vue.unref(ns).e("close")) }, { default: vue.withCtx(() => [ (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.closeIcon || vue.unref(Close)))) ]), _: 1 }, 8, ["class"]) ], 10, ["aria-label", "onClick"])) : vue.createCommentVNode("v-if", true) ], 2), vue.createElementVNode("div", { id: vue.unref(bodyId), class: vue.normalizeClass([vue.unref(ns).e("body"), _ctx.bodyClass]) }, [ vue.renderSlot(_ctx.$slots, "default") ], 10, ["id"]), _ctx.$slots.footer ? (vue.openBlock(), vue.createElementBlock("footer", { key: 0, class: vue.normalizeClass([vue.unref(ns).e("footer"), _ctx.footerClass]) }, [ vue.renderSlot(_ctx.$slots, "footer") ], 2)) : vue.createCommentVNode("v-if", true) ], 6); }; } }); var ElDialogContent = /* @__PURE__ */ _export_sfc$1(_sfc_main$o, [["__file", "dialog-content.vue"]]); const dialogProps = buildProps({ ...dialogContentProps, appendToBody: Boolean, appendTo: { type: definePropType([String, Object]), default: "body" }, beforeClose: { type: definePropType(Function) }, destroyOnClose: Boolean, closeOnClickModal: { type: Boolean, default: true }, closeOnPressEscape: { type: Boolean, default: true }, lockScroll: { type: Boolean, default: true }, modal: { type: Boolean, default: true }, openDelay: { type: Number, default: 0 }, closeDelay: { type: Number, default: 0 }, top: { type: String }, modelValue: Boolean, modalClass: String, headerClass: String, bodyClass: String, footerClass: String, width: { type: [String, Number] }, zIndex: { type: Number }, trapFocus: Boolean, headerAriaLevel: { type: String, default: "2" } }); const dialogEmits = { open: () => true, opened: () => true, close: () => true, closed: () => true, [UPDATE_MODEL_EVENT]: (value) => isBoolean(value), openAutoFocus: () => true, closeAutoFocus: () => true }; const useLockscreen = (trigger, options = {}) => { if (!vue.isRef(trigger)) { throwError("[useLockscreen]", "You need to pass a ref param to this function"); } const ns = options.ns || useNamespace("popup"); const hiddenCls = vue.computed(() => ns.bm("parent", "hidden")); if (!isClient || hasClass(document.body, hiddenCls.value)) { return; } let scrollBarWidth2 = 0; let withoutHiddenClass = false; let bodyWidth = "0"; const cleanup = () => { setTimeout(() => { if (typeof document === "undefined") return; if (withoutHiddenClass && document) { document.body.style.width = bodyWidth; removeClass(document.body, hiddenCls.value); } }, 200); }; vue.watch(trigger, (val) => { if (!val) { cleanup(); return; } withoutHiddenClass = !hasClass(document.body, hiddenCls.value); if (withoutHiddenClass) { bodyWidth = document.body.style.width; addClass(document.body, hiddenCls.value); } scrollBarWidth2 = getScrollBarWidth(ns.namespace.value); const bodyHasOverflow = document.documentElement.clientHeight < document.body.scrollHeight; const bodyOverflowY = getStyle(document.body, "overflowY"); if (scrollBarWidth2 > 0 && (bodyHasOverflow || bodyOverflowY === "scroll") && withoutHiddenClass) { document.body.style.width = `calc(100% - ${scrollBarWidth2}px)`; } }); vue.onScopeDispose(() => cleanup()); }; const useDialog = (props, targetRef) => { var _a2; const instance = vue.getCurrentInstance(); const emit = instance.emit; const { nextZIndex } = useZIndex(); let lastPosition = ""; const titleId = useId(); const bodyId = useId(); const visible = vue.ref(false); const closed = vue.ref(false); const rendered = vue.ref(false); const zIndex2 = vue.ref((_a2 = props.zIndex) != null ? _a2 : nextZIndex()); let openTimer = void 0; let closeTimer = void 0; const namespace = useGlobalConfig("namespace", defaultNamespace); const style = vue.computed(() => { const style2 = {}; const varPrefix = `--${namespace.value}-dialog`; if (!props.fullscreen) { if (props.top) { style2[`${varPrefix}-margin-top`] = props.top; } if (props.width) { style2[`${varPrefix}-width`] = addUnit(props.width); } } return style2; }); const overlayDialogStyle = vue.computed(() => { if (props.alignCenter) { return { display: "flex" }; } return {}; }); function afterEnter() { emit("opened"); } function afterLeave() { emit("closed"); emit(UPDATE_MODEL_EVENT, false); if (props.destroyOnClose) { rendered.value = false; } } function beforeLeave() { emit("close"); } function open() { closeTimer == null ? void 0 : closeTimer(); openTimer == null ? void 0 : openTimer(); if (props.openDelay && props.openDelay > 0) { ({ stop: openTimer } = useTimeoutFn(() => doOpen(), props.openDelay)); } else { doOpen(); } } function close() { openTimer == null ? void 0 : openTimer(); closeTimer == null ? void 0 : closeTimer(); if (props.closeDelay && props.closeDelay > 0) { ({ stop: closeTimer } = useTimeoutFn(() => doClose(), props.closeDelay)); } else { doClose(); } } function handleClose() { function hide(shouldCancel) { if (shouldCancel) return; closed.value = true; visible.value = false; } if (props.beforeClose) { props.beforeClose(hide); } else { close(); } } function onModalClick() { if (props.closeOnClickModal) { handleClose(); } } function doOpen() { if (!isClient) return; visible.value = true; } function doClose() { visible.value = false; } function onOpenAutoFocus() { emit("openAutoFocus"); } function onCloseAutoFocus() { emit("closeAutoFocus"); } function onFocusoutPrevented(event) { var _a22; if (((_a22 = event.detail) == null ? void 0 : _a22.focusReason) === "pointer") { event.preventDefault(); } } if (props.lockScroll) { useLockscreen(visible); } function onCloseRequested() { if (props.closeOnPressEscape) { handleClose(); } } vue.watch(() => props.modelValue, (val) => { if (val) { closed.value = false; open(); rendered.value = true; zIndex2.value = isUndefined$1(props.zIndex) ? nextZIndex() : zIndex2.value++; vue.nextTick(() => { emit("open"); if (targetRef.value) { targetRef.value.parentElement.scrollTop = 0; targetRef.value.parentElement.scrollLeft = 0; targetRef.value.scrollTop = 0; } }); } else { if (visible.value) { close(); } } }); vue.watch(() => props.fullscreen, (val) => { if (!targetRef.value) return; if (val) { lastPosition = targetRef.value.style.transform; targetRef.value.style.transform = ""; } else { targetRef.value.style.transform = lastPosition; } }); vue.onMounted(() => { if (props.modelValue) { visible.value = true; rendered.value = true; open(); } }); return { afterEnter, afterLeave, beforeLeave, handleClose, onModalClick, close, doClose, onOpenAutoFocus, onCloseAutoFocus, onCloseRequested, onFocusoutPrevented, titleId, bodyId, closed, style, overlayDialogStyle, rendered, visible, zIndex: zIndex2 }; }; const __default__$9 = vue.defineComponent({ name: "ElDialog", inheritAttrs: false }); const _sfc_main$n = /* @__PURE__ */ vue.defineComponent({ ...__default__$9, props: dialogProps, emits: dialogEmits, setup(__props, { expose }) { const props = __props; const slots = vue.useSlots(); useDeprecated({ scope: "el-dialog", from: "the title slot", replacement: "the header slot", version: "3.0.0", ref: "https://element-plus.org/en-US/component/dialog.html#slots" }, vue.computed(() => !!slots.title)); const ns = useNamespace("dialog"); const dialogRef = vue.ref(); const headerRef = vue.ref(); const dialogContentRef = vue.ref(); const { visible, titleId, bodyId, style, overlayDialogStyle, rendered, zIndex: zIndex2, afterEnter, afterLeave, beforeLeave, handleClose, onModalClick, onOpenAutoFocus, onCloseAutoFocus, onCloseRequested, onFocusoutPrevented } = useDialog(props, dialogRef); vue.provide(dialogInjectionKey, { dialogRef, headerRef, bodyId, ns, rendered, style }); const overlayEvent = useSameTarget(onModalClick); const draggable = vue.computed(() => props.draggable && !props.fullscreen); const resetPosition = () => { var _a2; (_a2 = dialogContentRef.value) == null ? void 0 : _a2.resetPosition(); }; expose({ visible, dialogContentRef, resetPosition }); return (_ctx, _cache) => { return vue.openBlock(), vue.createBlock(vue.unref(ElTeleport), { to: _ctx.appendTo, disabled: _ctx.appendTo !== "body" ? false : !_ctx.appendToBody }, { default: vue.withCtx(() => [ vue.createVNode(vue.Transition, { name: "dialog-fade", onAfterEnter: vue.unref(afterEnter), onAfterLeave: vue.unref(afterLeave), onBeforeLeave: vue.unref(beforeLeave), persisted: "" }, { default: vue.withCtx(() => [ vue.withDirectives(vue.createVNode(vue.unref(ElOverlay), { "custom-mask-event": "", mask: _ctx.modal, "overlay-class": _ctx.modalClass, "z-index": vue.unref(zIndex2) }, { default: vue.withCtx(() => [ vue.createElementVNode("div", { role: "dialog", "aria-modal": "true", "aria-label": _ctx.title || void 0, "aria-labelledby": !_ctx.title ? vue.unref(titleId) : void 0, "aria-describedby": vue.unref(bodyId), class: vue.normalizeClass(`${vue.unref(ns).namespace.value}-overlay-dialog`), style: vue.normalizeStyle(vue.unref(overlayDialogStyle)), onClick: vue.unref(overlayEvent).onClick, onMousedown: vue.unref(overlayEvent).onMousedown, onMouseup: vue.unref(overlayEvent).onMouseup }, [ vue.createVNode(vue.unref(ElFocusTrap), { loop: "", trapped: vue.unref(visible), "focus-start-el": "container", onFocusAfterTrapped: vue.unref(onOpenAutoFocus), onFocusAfterReleased: vue.unref(onCloseAutoFocus), onFocusoutPrevented: vue.unref(onFocusoutPrevented), onReleaseRequested: vue.unref(onCloseRequested) }, { default: vue.withCtx(() => [ vue.unref(rendered) ? (vue.openBlock(), vue.createBlock(ElDialogContent, vue.mergeProps({ key: 0, ref_key: "dialogContentRef", ref: dialogContentRef }, _ctx.$attrs, { center: _ctx.center, "align-center": _ctx.alignCenter, "close-icon": _ctx.closeIcon, draggable: vue.unref(draggable), overflow: _ctx.overflow, fullscreen: _ctx.fullscreen, "header-class": _ctx.headerClass, "body-class": _ctx.bodyClass, "footer-class": _ctx.footerClass, "show-close": _ctx.showClose, title: _ctx.title, "aria-level": _ctx.headerAriaLevel, onClose: vue.unref(handleClose) }), vue.createSlots({ header: vue.withCtx(() => [ !_ctx.$slots.title ? vue.renderSlot(_ctx.$slots, "header", { key: 0, close: vue.unref(handleClose), titleId: vue.unref(titleId), titleClass: vue.unref(ns).e("title") }) : vue.renderSlot(_ctx.$slots, "title", { key: 1 }) ]), default: vue.withCtx(() => [ vue.renderSlot(_ctx.$slots, "default") ]), _: 2 }, [ _ctx.$slots.footer ? { name: "footer", fn: vue.withCtx(() => [ vue.renderSlot(_ctx.$slots, "footer") ]) } : void 0 ]), 1040, ["center", "align-center", "close-icon", "draggable", "overflow", "fullscreen", "header-class", "body-class", "footer-class", "show-close", "title", "aria-level", "onClose"])) : vue.createCommentVNode("v-if", true) ]), _: 3 }, 8, ["trapped", "onFocusAfterTrapped", "onFocusAfterReleased", "onFocusoutPrevented", "onReleaseRequested"]) ], 46, ["aria-label", "aria-labelledby", "aria-describedby", "onClick", "onMousedown", "onMouseup"]) ]), _: 3 }, 8, ["mask", "overlay-class", "z-index"]), [ [vue.vShow, vue.unref(visible)] ]) ]), _: 3 }, 8, ["onAfterEnter", "onAfterLeave", "onBeforeLeave"]) ]), _: 3 }, 8, ["to", "disabled"]); }; } }); var Dialog = /* @__PURE__ */ _export_sfc$1(_sfc_main$n, [["__file", "dialog.vue"]]); const ElDialog = withInstall(Dialog); const __default__$8 = vue.defineComponent({ name: "ImgEmpty" }); const _sfc_main$m = /* @__PURE__ */ vue.defineComponent({ ...__default__$8, setup(__props) { const ns = useNamespace("empty"); const id = useId(); return (_ctx, _cache) => { return vue.openBlock(), vue.createElementBlock("svg", { viewBox: "0 0 79 86", version: "1.1", xmlns: "http://www.w3.org/2000/svg", "xmlns:xlink": "http://www.w3.org/1999/xlink" }, [ vue.createElementVNode("defs", null, [ vue.createElementVNode("linearGradient", { id: `linearGradient-1-${vue.unref(id)}`, x1: "38.8503086%", y1: "0%", x2: "61.1496914%", y2: "100%" }, [ vue.createElementVNode("stop", { "stop-color": `var(${vue.unref(ns).cssVarBlockName("fill-color-1")})`, offset: "0%" }, null, 8, ["stop-color"]), vue.createElementVNode("stop", { "stop-color": `var(${vue.unref(ns).cssVarBlockName("fill-color-4")})`, offset: "100%" }, null, 8, ["stop-color"]) ], 8, ["id"]), vue.createElementVNode("linearGradient", { id: `linearGradient-2-${vue.unref(id)}`, x1: "0%", y1: "9.5%", x2: "100%", y2: "90.5%" }, [ vue.createElementVNode("stop", { "stop-color": `var(${vue.unref(ns).cssVarBlockName("fill-color-1")})`, offset: "0%" }, null, 8, ["stop-color"]), vue.createElementVNode("stop", { "stop-color": `var(${vue.unref(ns).cssVarBlockName("fill-color-6")})`, offset: "100%" }, null, 8, ["stop-color"]) ], 8, ["id"]), vue.createElementVNode("rect", { id: `path-3-${vue.unref(id)}`, x: "0", y: "0", width: "17", height: "36" }, null, 8, ["id"]) ]), vue.createElementVNode("g", { stroke: "none", "stroke-width": "1", fill: "none", "fill-rule": "evenodd" }, [ vue.createElementVNode("g", { transform: "translate(-1268.000000, -535.000000)" }, [ vue.createElementVNode("g", { transform: "translate(1268.000000, 535.000000)" }, [ vue.createElementVNode("path", { d: "M39.5,86 C61.3152476,86 79,83.9106622 79,81.3333333 C79,78.7560045 57.3152476,78 35.5,78 C13.6847524,78 0,78.7560045 0,81.3333333 C0,83.9106622 17.6847524,86 39.5,86 Z", fill: `var(${vue.unref(ns).cssVarBlockName("fill-color-3")})` }, null, 8, ["fill"]), vue.createElementVNode("polygon", { fill: `var(${vue.unref(ns).cssVarBlockName("fill-color-7")})`, transform: "translate(27.500000, 51.500000) scale(1, -1) translate(-27.500000, -51.500000) ", points: "13 58 53 58 42 45 2 45" }, null, 8, ["fill"]), vue.createElementVNode("g", { transform: "translate(34.500000, 31.500000) scale(-1, 1) rotate(-25.000000) translate(-34.500000, -31.500000) translate(7.000000, 10.000000)" }, [ vue.createElementVNode("polygon", { fill: `var(${vue.unref(ns).cssVarBlockName("fill-color-7")})`, transform: "translate(11.500000, 5.000000) scale(1, -1) translate(-11.500000, -5.000000) ", points: "2.84078316e-14 3 18 3 23 7 5 7" }, null, 8, ["fill"]), vue.createElementVNode("polygon", { fill: `var(${vue.unref(ns).cssVarBlockName("fill-color-5")})`, points: "-3.69149156e-15 7 38 7 38 43 -3.69149156e-15 43" }, null, 8, ["fill"]), vue.createElementVNode("rect", { fill: `url(#linearGradient-1-${vue.unref(id)})`, transform: "translate(46.500000, 25.000000) scale(-1, 1) translate(-46.500000, -25.000000) ", x: "38", y: "7", width: "17", height: "36" }, null, 8, ["fill"]), vue.createElementVNode("polygon", { fill: `var(${vue.unref(ns).cssVarBlockName("fill-color-2")})`, transform: "translate(39.500000, 3.500000) scale(-1, 1) translate(-39.500000, -3.500000) ", points: "24 7 41 7 55 -3.63806207e-12 38 -3.63806207e-12" }, null, 8, ["fill"]) ]), vue.createElementVNode("rect", { fill: `url(#linearGradient-2-${vue.unref(id)})`, x: "13", y: "45", width: "40", height: "36" }, null, 8, ["fill"]), vue.createElementVNode("g", { transform: "translate(53.000000, 45.000000)" }, [ vue.createElementVNode("use", { fill: `var(${vue.unref(ns).cssVarBlockName("fill-color-8")})`, transform: "translate(8.500000, 18.000000) scale(-1, 1) translate(-8.500000, -18.000000) ", "xlink:href": `#path-3-${vue.unref(id)}` }, null, 8, ["fill", "xlink:href"]), vue.createElementVNode("polygon", { fill: `var(${vue.unref(ns).cssVarBlockName("fill-color-9")})`, mask: `url(#mask-4-${vue.unref(id)})`, transform: "translate(12.000000, 9.000000) scale(-1, 1) translate(-12.000000, -9.000000) ", points: "7 0 24 0 20 18 7 16.5" }, null, 8, ["fill", "mask"]) ]), vue.createElementVNode("polygon", { fill: `var(${vue.unref(ns).cssVarBlockName("fill-color-2")})`, transform: "translate(66.000000, 51.500000) scale(-1, 1) translate(-66.000000, -51.500000) ", points: "62 45 79 45 70 58 53 58" }, null, 8, ["fill"]) ]) ]) ]) ]); }; } }); var ImgEmpty = /* @__PURE__ */ _export_sfc$1(_sfc_main$m, [["__file", "img-empty.vue"]]); const emptyProps = buildProps({ image: { type: String, default: "" }, imageSize: Number, description: { type: String, default: "" } }); const __default__$7 = vue.defineComponent({ name: "ElEmpty" }); const _sfc_main$l = /* @__PURE__ */ vue.defineComponent({ ...__default__$7, props: emptyProps, setup(__props) { const props = __props; const { t } = useLocale(); const ns = useNamespace("empty"); const emptyDescription = vue.computed(() => props.description || t("el.table.emptyText")); const imageStyle = vue.computed(() => ({ width: addUnit(props.imageSize) })); return (_ctx, _cache) => { return vue.openBlock(), vue.createElementBlock("div", { class: vue.normalizeClass(vue.unref(ns).b()) }, [ vue.createElementVNode("div", { class: vue.normalizeClass(vue.unref(ns).e("image")), style: vue.normalizeStyle(vue.unref(imageStyle)) }, [ _ctx.image ? (vue.openBlock(), vue.createElementBlock("img", { key: 0, src: _ctx.image, ondragstart: "return false" }, null, 8, ["src"])) : vue.renderSlot(_ctx.$slots, "image", { key: 1 }, () => [ vue.createVNode(ImgEmpty) ]) ], 6), vue.createElementVNode("div", { class: vue.normalizeClass(vue.unref(ns).e("description")) }, [ _ctx.$slots.description ? vue.renderSlot(_ctx.$slots, "description", { key: 0 }) : (vue.openBlock(), vue.createElementBlock("p", { key: 1 }, vue.toDisplayString(vue.unref(emptyDescription)), 1)) ], 2), _ctx.$slots.default ? (vue.openBlock(), vue.createElementBlock("div", { key: 0, class: vue.normalizeClass(vue.unref(ns).e("bottom")) }, [ vue.renderSlot(_ctx.$slots, "default") ], 2)) : vue.createCommentVNode("v-if", true) ], 2); }; } }); var Empty = /* @__PURE__ */ _export_sfc$1(_sfc_main$l, [["__file", "empty.vue"]]); const ElEmpty = withInstall(Empty); const formMetaProps = buildProps({ size: { type: String, values: componentSizes }, disabled: Boolean }); const formProps = buildProps({ ...formMetaProps, model: Object, rules: { type: definePropType(Object) }, labelPosition: { type: String, values: ["left", "right", "top"], default: "right" }, requireAsteriskPosition: { type: String, values: ["left", "right"], default: "left" }, labelWidth: { type: [String, Number], default: "" }, labelSuffix: { type: String, default: "" }, inline: Boolean, inlineMessage: Boolean, statusIcon: Boolean, showMessage: { type: Boolean, default: true }, validateOnRuleChange: { type: Boolean, default: true }, hideRequiredAsterisk: Boolean, scrollToError: Boolean, scrollIntoViewOptions: { type: [Object, Boolean] } }); const formEmits = { validate: (prop, isValid, message2) => (isArray$1(prop) || isString$1(prop)) && isBoolean(isValid) && isString$1(message2) }; function useFormLabelWidth() { const potentialLabelWidthArr = vue.ref([]); const autoLabelWidth = vue.computed(() => { if (!potentialLabelWidthArr.value.length) return "0"; const max = Math.max(...potentialLabelWidthArr.value); return max ? `${max}px` : ""; }); function getLabelWidthIndex(width) { const index = potentialLabelWidthArr.value.indexOf(width); if (index === -1 && autoLabelWidth.value === "0") ; return index; } function registerLabelWidth(val, oldVal) { if (val && oldVal) { const index = getLabelWidthIndex(oldVal); potentialLabelWidthArr.value.splice(index, 1, val); } else if (val) { potentialLabelWidthArr.value.push(val); } } function deregisterLabelWidth(val) { const index = getLabelWidthIndex(val); if (index > -1) { potentialLabelWidthArr.value.splice(index, 1); } } return { autoLabelWidth, registerLabelWidth, deregisterLabelWidth }; } const filterFields = (fields, props) => { const normalized = castArray(props); return normalized.length > 0 ? fields.filter((field) => field.prop && normalized.includes(field.prop)) : fields; }; const COMPONENT_NAME$4 = "ElForm"; const __default__$6 = vue.defineComponent({ name: COMPONENT_NAME$4 }); const _sfc_main$k = /* @__PURE__ */ vue.defineComponent({ ...__default__$6, props: formProps, emits: formEmits, setup(__props, { expose, emit }) { const props = __props; const fields = []; const formSize = useFormSize(); const ns = useNamespace("form"); const formClasses = vue.computed(() => { const { labelPosition, inline } = props; return [ ns.b(), ns.m(formSize.value || "default"), { [ns.m(`label-${labelPosition}`)]: labelPosition, [ns.m("inline")]: inline } ]; }); const getField = (prop) => { return fields.find((field) => field.prop === prop); }; const addField = (field) => { fields.push(field); }; const removeField = (field) => { if (field.prop) { fields.splice(fields.indexOf(field), 1); } }; const resetFields = (properties = []) => { if (!props.model) { return; } filterFields(fields, properties).forEach((field) => field.resetField()); }; const clearValidate = (props2 = []) => { filterFields(fields, props2).forEach((field) => field.clearValidate()); }; const isValidatable = vue.computed(() => { const hasModel = !!props.model; return hasModel; }); const obtainValidateFields = (props2) => { if (fields.length === 0) return []; const filteredFields = filterFields(fields, props2); if (!filteredFields.length) { return []; } return filteredFields; }; const validate = async (callback) => validateField(void 0, callback); const doValidateField = async (props2 = []) => { if (!isValidatable.value) return false; const fields2 = obtainValidateFields(props2); if (fields2.length === 0) return true; let validationErrors = {}; for (const field of fields2) { try { await field.validate(""); if (field.validateState === "error") field.resetField(); } catch (fields3) { validationErrors = { ...validationErrors, ...fields3 }; } } if (Object.keys(validationErrors).length === 0) return true; return Promise.reject(validationErrors); }; const validateField = async (modelProps = [], callback) => { const shouldThrow = !isFunction$1(callback); try { const result = await doValidateField(modelProps); if (result === true) { await (callback == null ? void 0 : callback(result)); } return result; } catch (e) { if (e instanceof Error) throw e; const invalidFields = e; if (props.scrollToError) { scrollToField(Object.keys(invalidFields)[0]); } await (callback == null ? void 0 : callback(false, invalidFields)); return shouldThrow && Promise.reject(invalidFields); } }; const scrollToField = (prop) => { var _a2; const field = filterFields(fields, prop)[0]; if (field) { (_a2 = field.$el) == null ? void 0 : _a2.scrollIntoView(props.scrollIntoViewOptions); } }; vue.watch(() => props.rules, () => { if (props.validateOnRuleChange) { validate().catch((err) => debugWarn()); } }, { deep: true, flush: "post" }); vue.provide(formContextKey, vue.reactive({ ...vue.toRefs(props), emit, resetFields, clearValidate, validateField, getField, addField, removeField, ...useFormLabelWidth() })); expose({ validate, validateField, resetFields, clearValidate, scrollToField, fields }); return (_ctx, _cache) => { return vue.openBlock(), vue.createElementBlock("form", { class: vue.normalizeClass(vue.unref(formClasses)) }, [ vue.renderSlot(_ctx.$slots, "default") ], 2); }; } }); var Form = /* @__PURE__ */ _export_sfc$1(_sfc_main$k, [["__file", "form.vue"]]); function _extends() { _extends = Object.assign ? Object.assign.bind() : function(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); } function _getPrototypeOf(o2) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf2(o22) { return o22.__proto__ || Object.getPrototypeOf(o22); }; return _getPrototypeOf(o2); } function _setPrototypeOf(o2, p2) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf2(o22, p22) { o22.__proto__ = p22; return o22; }; return _setPrototypeOf(o2, p2); } function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() { })); return true; } catch (e) { return false; } } function _construct(Parent, args, Class) { if (_isNativeReflectConstruct()) { _construct = Reflect.construct.bind(); } else { _construct = function _construct2(Parent2, args2, Class2) { var a2 = [null]; a2.push.apply(a2, args2); var Constructor = Function.bind.apply(Parent2, a2); var instance = new Constructor(); if (Class2) _setPrototypeOf(instance, Class2.prototype); return instance; }; } return _construct.apply(null, arguments); } function _isNativeFunction(fn2) { return Function.toString.call(fn2).indexOf("[native code]") !== -1; } function _wrapNativeSuper(Class) { var _cache = typeof Map === "function" ? /* @__PURE__ */ new Map() : void 0; _wrapNativeSuper = function _wrapNativeSuper2(Class2) { if (Class2 === null || !_isNativeFunction(Class2)) return Class2; if (typeof Class2 !== "function") { throw new TypeError("Super expression must either be null or a function"); } if (typeof _cache !== "undefined") { if (_cache.has(Class2)) return _cache.get(Class2); _cache.set(Class2, Wrapper); } function Wrapper() { return _construct(Class2, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class2.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class2); }; return _wrapNativeSuper(Class); } var formatRegExp = /%[sdj%]/g; var warning = function warning2() { }; function convertFieldsError(errors) { if (!errors || !errors.length) return null; var fields = {}; errors.forEach(function(error) { var field = error.field; fields[field] = fields[field] || []; fields[field].push(error); }); return fields; } function format(template) { for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { args[_key - 1] = arguments[_key]; } var i = 0; var len = args.length; if (typeof template === "function") { return template.apply(null, args); } if (typeof template === "string") { var str = template.replace(formatRegExp, function(x2) { if (x2 === "%%") { return "%"; } if (i >= len) { return x2; } switch (x2) { case "%s": return String(args[i++]); case "%d": return Number(args[i++]); case "%j": try { return JSON.stringify(args[i++]); } catch (_2) { return "[Circular]"; } break; default: return x2; } }); return str; } return template; } function isNativeStringType(type4) { return type4 === "string" || type4 === "url" || type4 === "hex" || type4 === "email" || type4 === "date" || type4 === "pattern"; } function isEmptyValue(value, type4) { if (value === void 0 || value === null) { return true; } if (type4 === "array" && Array.isArray(value) && !value.length) { return true; } if (isNativeStringType(type4) && typeof value === "string" && !value) { return true; } return false; } function asyncParallelArray(arr, func, callback) { var results = []; var total = 0; var arrLength = arr.length; function count(errors) { results.push.apply(results, errors || []); total++; if (total === arrLength) { callback(results); } } arr.forEach(function(a2) { func(a2, count); }); } function asyncSerialArray(arr, func, callback) { var index = 0; var arrLength = arr.length; function next(errors) { if (errors && errors.length) { callback(errors); return; } var original = index; index = index + 1; if (original < arrLength) { func(arr[original], next); } else { callback([]); } } next([]); } function flattenObjArr(objArr) { var ret = []; Object.keys(objArr).forEach(function(k) { ret.push.apply(ret, objArr[k] || []); }); return ret; } var AsyncValidationError = /* @__PURE__ */ function(_Error) { _inheritsLoose(AsyncValidationError2, _Error); function AsyncValidationError2(errors, fields) { var _this; _this = _Error.call(this, "Async Validation Error") || this; _this.errors = errors; _this.fields = fields; return _this; } return AsyncValidationError2; }(/* @__PURE__ */ _wrapNativeSuper(Error)); function asyncMap(objArr, option, func, callback, source) { if (option.first) { var _pending = new Promise(function(resolve, reject) { var next = function next2(errors) { callback(errors); return errors.length ? reject(new AsyncValidationError(errors, convertFieldsError(errors))) : resolve(source); }; var flattenArr = flattenObjArr(objArr); asyncSerialArray(flattenArr, func, next); }); _pending["catch"](function(e) { return e; }); return _pending; } var firstFields = option.firstFields === true ? Object.keys(objArr) : option.firstFields || []; var objArrKeys = Object.keys(objArr); var objArrLength = objArrKeys.length; var total = 0; var results = []; var pending = new Promise(function(resolve, reject) { var next = function next2(errors) { results.push.apply(results, errors); total++; if (total === objArrLength) { callback(results); return results.length ? reject(new AsyncValidationError(results, convertFieldsError(results))) : resolve(source); } }; if (!objArrKeys.length) { callback(results); resolve(source); } objArrKeys.forEach(function(key) { var arr = objArr[key]; if (firstFields.indexOf(key) !== -1) { asyncSerialArray(arr, func, next); } else { asyncParallelArray(arr, func, next); } }); }); pending["catch"](function(e) { return e; }); return pending; } function isErrorObj(obj) { return !!(obj && obj.message !== void 0); } function getValue(value, path) { var v2 = value; for (var i = 0; i < path.length; i++) { if (v2 == void 0) { return v2; } v2 = v2[path[i]]; } return v2; } function complementError(rule, source) { return function(oe) { var fieldValue; if (rule.fullFields) { fieldValue = getValue(source, rule.fullFields); } else { fieldValue = source[oe.field || rule.fullField]; } if (isErrorObj(oe)) { oe.field = oe.field || rule.fullField; oe.fieldValue = fieldValue; return oe; } return { message: typeof oe === "function" ? oe() : oe, fieldValue, field: oe.field || rule.fullField }; }; } function deepMerge(target, source) { if (source) { for (var s2 in source) { if (source.hasOwnProperty(s2)) { var value = source[s2]; if (typeof value === "object" && typeof target[s2] === "object") { target[s2] = _extends({}, target[s2], value); } else { target[s2] = value; } } } } return target; } var required$1 = function required(rule, value, source, errors, options, type4) { if (rule.required && (!source.hasOwnProperty(rule.field) || isEmptyValue(value, type4 || rule.type))) { errors.push(format(options.messages.required, rule.fullField)); } }; var whitespace = function whitespace2(rule, value, source, errors, options) { if (/^\s+$/.test(value) || value === "") { errors.push(format(options.messages.whitespace, rule.fullField)); } }; var urlReg; var getUrlRegex = function() { if (urlReg) { return urlReg; } var word = "[a-fA-F\\d:]"; var b2 = function b22(options) { return options && options.includeBoundaries ? "(?:(?<=\\s|^)(?=" + word + ")|(?<=" + word + ")(?=\\s|$))" : ""; }; var v4 = "(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}"; var v6seg = "[a-fA-F\\d]{1,4}"; var v6 = ("\n(?:\n(?:" + v6seg + ":){7}(?:" + v6seg + "|:)| // 1:2:3:4:5:6:7:: 1:2:3:4:5:6:7:8\n(?:" + v6seg + ":){6}(?:" + v4 + "|:" + v6seg + "|:)| // 1:2:3:4:5:6:: 1:2:3:4:5:6::8 1:2:3:4:5:6::8 1:2:3:4:5:6::1.2.3.4\n(?:" + v6seg + ":){5}(?::" + v4 + "|(?::" + v6seg + "){1,2}|:)| // 1:2:3:4:5:: 1:2:3:4:5::7:8 1:2:3:4:5::8 1:2:3:4:5::7:1.2.3.4\n(?:" + v6seg + ":){4}(?:(?::" + v6seg + "){0,1}:" + v4 + "|(?::" + v6seg + "){1,3}|:)| // 1:2:3:4:: 1:2:3:4::6:7:8 1:2:3:4::8 1:2:3:4::6:7:1.2.3.4\n(?:" + v6seg + ":){3}(?:(?::" + v6seg + "){0,2}:" + v4 + "|(?::" + v6seg + "){1,4}|:)| // 1:2:3:: 1:2:3::5:6:7:8 1:2:3::8 1:2:3::5:6:7:1.2.3.4\n(?:" + v6seg + ":){2}(?:(?::" + v6seg + "){0,3}:" + v4 + "|(?::" + v6seg + "){1,5}|:)| // 1:2:: 1:2::4:5:6:7:8 1:2::8 1:2::4:5:6:7:1.2.3.4\n(?:" + v6seg + ":){1}(?:(?::" + v6seg + "){0,4}:" + v4 + "|(?::" + v6seg + "){1,6}|:)| // 1:: 1::3:4:5:6:7:8 1::8 1::3:4:5:6:7:1.2.3.4\n(?::(?:(?::" + v6seg + "){0,5}:" + v4 + "|(?::" + v6seg + "){1,7}|:)) // ::2:3:4:5:6:7:8 ::2:3:4:5:6:7:8 ::8 ::1.2.3.4\n)(?:%[0-9a-zA-Z]{1,})? // %eth0 %1\n").replace(/\s*\/\/.*$/gm, "").replace(/\n/g, "").trim(); var v46Exact = new RegExp("(?:^" + v4 + "$)|(?:^" + v6 + "$)"); var v4exact = new RegExp("^" + v4 + "$"); var v6exact = new RegExp("^" + v6 + "$"); var ip = function ip2(options) { return options && options.exact ? v46Exact : new RegExp("(?:" + b2(options) + v4 + b2(options) + ")|(?:" + b2(options) + v6 + b2(options) + ")", "g"); }; ip.v4 = function(options) { return options && options.exact ? v4exact : new RegExp("" + b2(options) + v4 + b2(options), "g"); }; ip.v6 = function(options) { return options && options.exact ? v6exact : new RegExp("" + b2(options) + v6 + b2(options), "g"); }; var protocol = "(?:(?:[a-z]+:)?//)"; var auth = "(?:\\S+(?::\\S*)?@)?"; var ipv4 = ip.v4().source; var ipv6 = ip.v6().source; var host = "(?:(?:[a-z\\u00a1-\\uffff0-9][-_]*)*[a-z\\u00a1-\\uffff0-9]+)"; var domain = "(?:\\.(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)*"; var tld = "(?:\\.(?:[a-z\\u00a1-\\uffff]{2,}))"; var port = "(?::\\d{2,5})?"; var path = '(?:[/?#][^\\s"]*)?'; var regex2 = "(?:" + protocol + "|www\\.)" + auth + "(?:localhost|" + ipv4 + "|" + ipv6 + "|" + host + domain + tld + ")" + port + path; urlReg = new RegExp("(?:^" + regex2 + "$)", "i"); return urlReg; }; var pattern$2 = { // http://emailregex.com/ email: /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+\.)+[a-zA-Z\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]{2,}))$/, // url: new RegExp( // '^(?!mailto:)(?:(?:http|https|ftp)://|//)(?:\\S+(?::\\S*)?@)?(?:(?:(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[0-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]+-*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]+-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))|localhost)(?::\\d{2,5})?(?:(/|\\?|#)[^\\s]*)?$', // 'i', // ), hex: /^#?([a-f0-9]{6}|[a-f0-9]{3})$/i }; var types = { integer: function integer(value) { return types.number(value) && parseInt(value, 10) === value; }, "float": function float(value) { return types.number(value) && !types.integer(value); }, array: function array(value) { return Array.isArray(value); }, regexp: function regexp(value) { if (value instanceof RegExp) { return true; } try { return !!new RegExp(value); } catch (e) { return false; } }, date: function date(value) { return typeof value.getTime === "function" && typeof value.getMonth === "function" && typeof value.getYear === "function" && !isNaN(value.getTime()); }, number: function number(value) { if (isNaN(value)) { return false; } return typeof value === "number"; }, object: function object(value) { return typeof value === "object" && !types.array(value); }, method: function method(value) { return typeof value === "function"; }, email: function email(value) { return typeof value === "string" && value.length <= 320 && !!value.match(pattern$2.email); }, url: function url(value) { return typeof value === "string" && value.length <= 2048 && !!value.match(getUrlRegex()); }, hex: function hex(value) { return typeof value === "string" && !!value.match(pattern$2.hex); } }; var type$1 = function type(rule, value, source, errors, options) { if (rule.required && value === void 0) { required$1(rule, value, source, errors, options); return; } var custom = ["integer", "float", "array", "regexp", "object", "method", "email", "number", "date", "url", "hex"]; var ruleType = rule.type; if (custom.indexOf(ruleType) > -1) { if (!types[ruleType](value)) { errors.push(format(options.messages.types[ruleType], rule.fullField, rule.type)); } } else if (ruleType && typeof value !== rule.type) { errors.push(format(options.messages.types[ruleType], rule.fullField, rule.type)); } }; var range = function range2(rule, value, source, errors, options) { var len = typeof rule.len === "number"; var min = typeof rule.min === "number"; var max = typeof rule.max === "number"; var spRegexp = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g; var val = value; var key = null; var num = typeof value === "number"; var str = typeof value === "string"; var arr = Array.isArray(value); if (num) { key = "number"; } else if (str) { key = "string"; } else if (arr) { key = "array"; } if (!key) { return false; } if (arr) { val = value.length; } if (str) { val = value.replace(spRegexp, "_").length; } if (len) { if (val !== rule.len) { errors.push(format(options.messages[key].len, rule.fullField, rule.len)); } } else if (min && !max && val < rule.min) { errors.push(format(options.messages[key].min, rule.fullField, rule.min)); } else if (max && !min && val > rule.max) { errors.push(format(options.messages[key].max, rule.fullField, rule.max)); } else if (min && max && (val < rule.min || val > rule.max)) { errors.push(format(options.messages[key].range, rule.fullField, rule.min, rule.max)); } }; var ENUM$1 = "enum"; var enumerable$1 = function enumerable(rule, value, source, errors, options) { rule[ENUM$1] = Array.isArray(rule[ENUM$1]) ? rule[ENUM$1] : []; if (rule[ENUM$1].indexOf(value) === -1) { errors.push(format(options.messages[ENUM$1], rule.fullField, rule[ENUM$1].join(", "))); } }; var pattern$1 = function pattern(rule, value, source, errors, options) { if (rule.pattern) { if (rule.pattern instanceof RegExp) { rule.pattern.lastIndex = 0; if (!rule.pattern.test(value)) { errors.push(format(options.messages.pattern.mismatch, rule.fullField, value, rule.pattern)); } } else if (typeof rule.pattern === "string") { var _pattern = new RegExp(rule.pattern); if (!_pattern.test(value)) { errors.push(format(options.messages.pattern.mismatch, rule.fullField, value, rule.pattern)); } } } }; var rules = { required: required$1, whitespace, type: type$1, range, "enum": enumerable$1, pattern: pattern$1 }; var string = function string2(rule, value, callback, source, options) { var errors = []; var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field); if (validate) { if (isEmptyValue(value, "string") && !rule.required) { return callback(); } rules.required(rule, value, source, errors, options, "string"); if (!isEmptyValue(value, "string")) { rules.type(rule, value, source, errors, options); rules.range(rule, value, source, errors, options); rules.pattern(rule, value, source, errors, options); if (rule.whitespace === true) { rules.whitespace(rule, value, source, errors, options); } } } callback(errors); }; var method2 = function method3(rule, value, callback, source, options) { var errors = []; var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field); if (validate) { if (isEmptyValue(value) && !rule.required) { return callback(); } rules.required(rule, value, source, errors, options); if (value !== void 0) { rules.type(rule, value, source, errors, options); } } callback(errors); }; var number2 = function number3(rule, value, callback, source, options) { var errors = []; var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field); if (validate) { if (value === "") { value = void 0; } if (isEmptyValue(value) && !rule.required) { return callback(); } rules.required(rule, value, source, errors, options); if (value !== void 0) { rules.type(rule, value, source, errors, options); rules.range(rule, value, source, errors, options); } } callback(errors); }; var _boolean = function _boolean2(rule, value, callback, source, options) { var errors = []; var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field); if (validate) { if (isEmptyValue(value) && !rule.required) { return callback(); } rules.required(rule, value, source, errors, options); if (value !== void 0) { rules.type(rule, value, source, errors, options); } } callback(errors); }; var regexp2 = function regexp3(rule, value, callback, source, options) { var errors = []; var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field); if (validate) { if (isEmptyValue(value) && !rule.required) { return callback(); } rules.required(rule, value, source, errors, options); if (!isEmptyValue(value)) { rules.type(rule, value, source, errors, options); } } callback(errors); }; var integer2 = function integer3(rule, value, callback, source, options) { var errors = []; var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field); if (validate) { if (isEmptyValue(value) && !rule.required) { return callback(); } rules.required(rule, value, source, errors, options); if (value !== void 0) { rules.type(rule, value, source, errors, options); rules.range(rule, value, source, errors, options); } } callback(errors); }; var floatFn = function floatFn2(rule, value, callback, source, options) { var errors = []; var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field); if (validate) { if (isEmptyValue(value) && !rule.required) { return callback(); } rules.required(rule, value, source, errors, options); if (value !== void 0) { rules.type(rule, value, source, errors, options); rules.range(rule, value, source, errors, options); } } callback(errors); }; var array2 = function array3(rule, value, callback, source, options) { var errors = []; var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field); if (validate) { if ((value === void 0 || value === null) && !rule.required) { return callback(); } rules.required(rule, value, source, errors, options, "array"); if (value !== void 0 && value !== null) { rules.type(rule, value, source, errors, options); rules.range(rule, value, source, errors, options); } } callback(errors); }; var object2 = function object3(rule, value, callback, source, options) { var errors = []; var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field); if (validate) { if (isEmptyValue(value) && !rule.required) { return callback(); } rules.required(rule, value, source, errors, options); if (value !== void 0) { rules.type(rule, value, source, errors, options); } } callback(errors); }; var ENUM = "enum"; var enumerable2 = function enumerable3(rule, value, callback, source, options) { var errors = []; var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field); if (validate) { if (isEmptyValue(value) && !rule.required) { return callback(); } rules.required(rule, value, source, errors, options); if (value !== void 0) { rules[ENUM](rule, value, source, errors, options); } } callback(errors); }; var pattern2 = function pattern3(rule, value, callback, source, options) { var errors = []; var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field); if (validate) { if (isEmptyValue(value, "string") && !rule.required) { return callback(); } rules.required(rule, value, source, errors, options); if (!isEmptyValue(value, "string")) { rules.pattern(rule, value, source, errors, options); } } callback(errors); }; var date2 = function date3(rule, value, callback, source, options) { var errors = []; var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field); if (validate) { if (isEmptyValue(value, "date") && !rule.required) { return callback(); } rules.required(rule, value, source, errors, options); if (!isEmptyValue(value, "date")) { var dateObject; if (value instanceof Date) { dateObject = value; } else { dateObject = new Date(value); } rules.type(rule, dateObject, source, errors, options); if (dateObject) { rules.range(rule, dateObject.getTime(), source, errors, options); } } } callback(errors); }; var required2 = function required3(rule, value, callback, source, options) { var errors = []; var type4 = Array.isArray(value) ? "array" : typeof value; rules.required(rule, value, source, errors, options, type4); callback(errors); }; var type2 = function type3(rule, value, callback, source, options) { var ruleType = rule.type; var errors = []; var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field); if (validate) { if (isEmptyValue(value, ruleType) && !rule.required) { return callback(); } rules.required(rule, value, source, errors, options, ruleType); if (!isEmptyValue(value, ruleType)) { rules.type(rule, value, source, errors, options); } } callback(errors); }; var any = function any2(rule, value, callback, source, options) { var errors = []; var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field); if (validate) { if (isEmptyValue(value) && !rule.required) { return callback(); } rules.required(rule, value, source, errors, options); } callback(errors); }; var validators = { string, method: method2, number: number2, "boolean": _boolean, regexp: regexp2, integer: integer2, "float": floatFn, array: array2, object: object2, "enum": enumerable2, pattern: pattern2, date: date2, url: type2, hex: type2, email: type2, required: required2, any }; function newMessages() { return { "default": "Validation error on field %s", required: "%s is required", "enum": "%s must be one of %s", whitespace: "%s cannot be empty", date: { format: "%s date %s is invalid for format %s", parse: "%s date could not be parsed, %s is invalid ", invalid: "%s date %s is invalid" }, types: { string: "%s is not a %s", method: "%s is not a %s (function)", array: "%s is not an %s", object: "%s is not an %s", number: "%s is not a %s", date: "%s is not a %s", "boolean": "%s is not a %s", integer: "%s is not an %s", "float": "%s is not a %s", regexp: "%s is not a valid %s", email: "%s is not a valid %s", url: "%s is not a valid %s", hex: "%s is not a valid %s" }, string: { len: "%s must be exactly %s characters", min: "%s must be at least %s characters", max: "%s cannot be longer than %s characters", range: "%s must be between %s and %s characters" }, number: { len: "%s must equal %s", min: "%s cannot be less than %s", max: "%s cannot be greater than %s", range: "%s must be between %s and %s" }, array: { len: "%s must be exactly %s in length", min: "%s cannot be less than %s in length", max: "%s cannot be greater than %s in length", range: "%s must be between %s and %s in length" }, pattern: { mismatch: "%s value %s does not match pattern %s" }, clone: function clone2() { var cloned = JSON.parse(JSON.stringify(this)); cloned.clone = this.clone; return cloned; } }; } var messages = newMessages(); var Schema = /* @__PURE__ */ function() { function Schema2(descriptor) { this.rules = null; this._messages = messages; this.define(descriptor); } var _proto = Schema2.prototype; _proto.define = function define(rules2) { var _this = this; if (!rules2) { throw new Error("Cannot configure a schema with no rules"); } if (typeof rules2 !== "object" || Array.isArray(rules2)) { throw new Error("Rules must be an object"); } this.rules = {}; Object.keys(rules2).forEach(function(name) { var item = rules2[name]; _this.rules[name] = Array.isArray(item) ? item : [item]; }); }; _proto.messages = function messages2(_messages) { if (_messages) { this._messages = deepMerge(newMessages(), _messages); } return this._messages; }; _proto.validate = function validate(source_, o2, oc) { var _this2 = this; if (o2 === void 0) { o2 = {}; } if (oc === void 0) { oc = function oc2() { }; } var source = source_; var options = o2; var callback = oc; if (typeof options === "function") { callback = options; options = {}; } if (!this.rules || Object.keys(this.rules).length === 0) { if (callback) { callback(null, source); } return Promise.resolve(source); } function complete(results) { var errors = []; var fields = {}; function add(e) { if (Array.isArray(e)) { var _errors; errors = (_errors = errors).concat.apply(_errors, e); } else { errors.push(e); } } for (var i = 0; i < results.length; i++) { add(results[i]); } if (!errors.length) { callback(null, source); } else { fields = convertFieldsError(errors); callback(errors, fields); } } if (options.messages) { var messages$1 = this.messages(); if (messages$1 === messages) { messages$1 = newMessages(); } deepMerge(messages$1, options.messages); options.messages = messages$1; } else { options.messages = this.messages(); } var series = {}; var keys2 = options.keys || Object.keys(this.rules); keys2.forEach(function(z) { var arr = _this2.rules[z]; var value = source[z]; arr.forEach(function(r) { var rule = r; if (typeof rule.transform === "function") { if (source === source_) { source = _extends({}, source); } value = source[z] = rule.transform(value); } if (typeof rule === "function") { rule = { validator: rule }; } else { rule = _extends({}, rule); } rule.validator = _this2.getValidationMethod(rule); if (!rule.validator) { return; } rule.field = z; rule.fullField = rule.fullField || z; rule.type = _this2.getType(rule); series[z] = series[z] || []; series[z].push({ rule, value, source, field: z }); }); }); var errorFields = {}; return asyncMap(series, options, function(data, doIt) { var rule = data.rule; var deep = (rule.type === "object" || rule.type === "array") && (typeof rule.fields === "object" || typeof rule.defaultField === "object"); deep = deep && (rule.required || !rule.required && data.value); rule.field = data.field; function addFullField(key, schema) { return _extends({}, schema, { fullField: rule.fullField + "." + key, fullFields: rule.fullFields ? [].concat(rule.fullFields, [key]) : [key] }); } function cb(e) { if (e === void 0) { e = []; } var errorList = Array.isArray(e) ? e : [e]; if (!options.suppressWarning && errorList.length) { Schema2.warning("async-validator:", errorList); } if (errorList.length && rule.message !== void 0) { errorList = [].concat(rule.message); } var filledErrors = errorList.map(complementError(rule, source)); if (options.first && filledErrors.length) { errorFields[rule.field] = 1; return doIt(filledErrors); } if (!deep) { doIt(filledErrors); } else { if (rule.required && !data.value) { if (rule.message !== void 0) { filledErrors = [].concat(rule.message).map(complementError(rule, source)); } else if (options.error) { filledErrors = [options.error(rule, format(options.messages.required, rule.field))]; } return doIt(filledErrors); } var fieldsSchema = {}; if (rule.defaultField) { Object.keys(data.value).map(function(key) { fieldsSchema[key] = rule.defaultField; }); } fieldsSchema = _extends({}, fieldsSchema, data.rule.fields); var paredFieldsSchema = {}; Object.keys(fieldsSchema).forEach(function(field) { var fieldSchema = fieldsSchema[field]; var fieldSchemaList = Array.isArray(fieldSchema) ? fieldSchema : [fieldSchema]; paredFieldsSchema[field] = fieldSchemaList.map(addFullField.bind(null, field)); }); var schema = new Schema2(paredFieldsSchema); schema.messages(options.messages); if (data.rule.options) { data.rule.options.messages = options.messages; data.rule.options.error = options.error; } schema.validate(data.value, data.rule.options || options, function(errs) { var finalErrors = []; if (filledErrors && filledErrors.length) { finalErrors.push.apply(finalErrors, filledErrors); } if (errs && errs.length) { finalErrors.push.apply(finalErrors, errs); } doIt(finalErrors.length ? finalErrors : null); }); } } var res; if (rule.asyncValidator) { res = rule.asyncValidator(rule, data.value, cb, data.source, options); } else if (rule.validator) { try { res = rule.validator(rule, data.value, cb, data.source, options); } catch (error) { console.error == null ? void 0 : console.error(error); if (!options.suppressValidatorError) { setTimeout(function() { throw error; }, 0); } cb(error.message); } if (res === true) { cb(); } else if (res === false) { cb(typeof rule.message === "function" ? rule.message(rule.fullField || rule.field) : rule.message || (rule.fullField || rule.field) + " fails"); } else if (res instanceof Array) { cb(res); } else if (res instanceof Error) { cb(res.message); } } if (res && res.then) { res.then(function() { return cb(); }, function(e) { return cb(e); }); } }, function(results) { complete(results); }, source); }; _proto.getType = function getType(rule) { if (rule.type === void 0 && rule.pattern instanceof RegExp) { rule.type = "pattern"; } if (typeof rule.validator !== "function" && rule.type && !validators.hasOwnProperty(rule.type)) { throw new Error(format("Unknown rule type %s", rule.type)); } return rule.type || "string"; }; _proto.getValidationMethod = function getValidationMethod(rule) { if (typeof rule.validator === "function") { return rule.validator; } var keys2 = Object.keys(rule); var messageIndex = keys2.indexOf("message"); if (messageIndex !== -1) { keys2.splice(messageIndex, 1); } if (keys2.length === 1 && keys2[0] === "required") { return validators.required; } return validators[this.getType(rule)] || void 0; }; return Schema2; }(); Schema.register = function register(type4, validator) { if (typeof validator !== "function") { throw new Error("Cannot register a validator by type, validator is not a function"); } validators[type4] = validator; }; Schema.warning = warning; Schema.messages = messages; Schema.validators = validators; const formItemValidateStates = [ "", "error", "validating", "success" ]; const formItemProps = buildProps({ label: String, labelWidth: { type: [String, Number], default: "" }, labelPosition: { type: String, values: ["left", "right", "top", ""], default: "" }, prop: { type: definePropType([String, Array]) }, required: { type: Boolean, default: void 0 }, rules: { type: definePropType([Object, Array]) }, error: String, validateStatus: { type: String, values: formItemValidateStates }, for: String, inlineMessage: { type: [String, Boolean], default: "" }, showMessage: { type: Boolean, default: true }, size: { type: String, values: componentSizes } }); const COMPONENT_NAME$3 = "ElLabelWrap"; var FormLabelWrap = vue.defineComponent({ name: COMPONENT_NAME$3, props: { isAutoWidth: Boolean, updateAll: Boolean }, setup(props, { slots }) { const formContext = vue.inject(formContextKey, void 0); const formItemContext = vue.inject(formItemContextKey); if (!formItemContext) throwError(COMPONENT_NAME$3, "usage: "); const ns = useNamespace("form"); const el = vue.ref(); const computedWidth = vue.ref(0); const getLabelWidth = () => { var _a2; if ((_a2 = el.value) == null ? void 0 : _a2.firstElementChild) { const width = window.getComputedStyle(el.value.firstElementChild).width; return Math.ceil(Number.parseFloat(width)); } else { return 0; } }; const updateLabelWidth = (action = "update") => { vue.nextTick(() => { if (slots.default && props.isAutoWidth) { if (action === "update") { computedWidth.value = getLabelWidth(); } else if (action === "remove") { formContext == null ? void 0 : formContext.deregisterLabelWidth(computedWidth.value); } } }); }; const updateLabelWidthFn = () => updateLabelWidth("update"); vue.onMounted(() => { updateLabelWidthFn(); }); vue.onBeforeUnmount(() => { updateLabelWidth("remove"); }); vue.onUpdated(() => updateLabelWidthFn()); vue.watch(computedWidth, (val, oldVal) => { if (props.updateAll) { formContext == null ? void 0 : formContext.registerLabelWidth(val, oldVal); } }); useResizeObserver(vue.computed(() => { var _a2, _b; return (_b = (_a2 = el.value) == null ? void 0 : _a2.firstElementChild) != null ? _b : null; }), updateLabelWidthFn); return () => { var _a2, _b; if (!slots) return null; const { isAutoWidth } = props; if (isAutoWidth) { const autoLabelWidth = formContext == null ? void 0 : formContext.autoLabelWidth; const hasLabel = formItemContext == null ? void 0 : formItemContext.hasLabel; const style = {}; if (hasLabel && autoLabelWidth && autoLabelWidth !== "auto") { const marginWidth = Math.max(0, Number.parseInt(autoLabelWidth, 10) - computedWidth.value); const labelPosition = formItemContext.labelPosition || formContext.labelPosition; const marginPosition = labelPosition === "left" ? "marginRight" : "marginLeft"; if (marginWidth) { style[marginPosition] = `${marginWidth}px`; } } return vue.createVNode("div", { "ref": el, "class": [ns.be("item", "label-wrap")], "style": style }, [(_a2 = slots.default) == null ? void 0 : _a2.call(slots)]); } else { return vue.createVNode(vue.Fragment, { "ref": el }, [(_b = slots.default) == null ? void 0 : _b.call(slots)]); } }; } }); const __default__$5 = vue.defineComponent({ name: "ElFormItem" }); const _sfc_main$j = /* @__PURE__ */ vue.defineComponent({ ...__default__$5, props: formItemProps, setup(__props, { expose }) { const props = __props; const slots = vue.useSlots(); const formContext = vue.inject(formContextKey, void 0); const parentFormItemContext = vue.inject(formItemContextKey, void 0); const _size = useFormSize(void 0, { formItem: false }); const ns = useNamespace("form-item"); const labelId = useId().value; const inputIds = vue.ref([]); const validateState = vue.ref(""); const validateStateDebounced = refDebounced(validateState, 100); const validateMessage = vue.ref(""); const formItemRef = vue.ref(); let initialValue = void 0; let isResettingField = false; const labelPosition = vue.computed(() => props.labelPosition || (formContext == null ? void 0 : formContext.labelPosition)); const labelStyle = vue.computed(() => { if (labelPosition.value === "top") { return {}; } const labelWidth = addUnit(props.labelWidth || (formContext == null ? void 0 : formContext.labelWidth) || ""); if (labelWidth) return { width: labelWidth }; return {}; }); const contentStyle = vue.computed(() => { if (labelPosition.value === "top" || (formContext == null ? void 0 : formContext.inline)) { return {}; } if (!props.label && !props.labelWidth && isNested) { return {}; } const labelWidth = addUnit(props.labelWidth || (formContext == null ? void 0 : formContext.labelWidth) || ""); if (!props.label && !slots.label) { return { marginLeft: labelWidth }; } return {}; }); const formItemClasses = vue.computed(() => [ ns.b(), ns.m(_size.value), ns.is("error", validateState.value === "error"), ns.is("validating", validateState.value === "validating"), ns.is("success", validateState.value === "success"), ns.is("required", isRequired.value || props.required), ns.is("no-asterisk", formContext == null ? void 0 : formContext.hideRequiredAsterisk), (formContext == null ? void 0 : formContext.requireAsteriskPosition) === "right" ? "asterisk-right" : "asterisk-left", { [ns.m("feedback")]: formContext == null ? void 0 : formContext.statusIcon, [ns.m(`label-${labelPosition.value}`)]: labelPosition.value } ]); const _inlineMessage = vue.computed(() => isBoolean(props.inlineMessage) ? props.inlineMessage : (formContext == null ? void 0 : formContext.inlineMessage) || false); const validateClasses = vue.computed(() => [ ns.e("error"), { [ns.em("error", "inline")]: _inlineMessage.value } ]); const propString = vue.computed(() => { if (!props.prop) return ""; return isString$1(props.prop) ? props.prop : props.prop.join("."); }); const hasLabel = vue.computed(() => { return !!(props.label || slots.label); }); const labelFor = vue.computed(() => { return props.for || (inputIds.value.length === 1 ? inputIds.value[0] : void 0); }); const isGroup = vue.computed(() => { return !labelFor.value && hasLabel.value; }); const isNested = !!parentFormItemContext; const fieldValue = vue.computed(() => { const model = formContext == null ? void 0 : formContext.model; if (!model || !props.prop) { return; } return getProp(model, props.prop).value; }); const normalizedRules = vue.computed(() => { const { required } = props; const rules2 = []; if (props.rules) { rules2.push(...castArray(props.rules)); } const formRules = formContext == null ? void 0 : formContext.rules; if (formRules && props.prop) { const _rules = getProp(formRules, props.prop).value; if (_rules) { rules2.push(...castArray(_rules)); } } if (required !== void 0) { const requiredRules = rules2.map((rule, i) => [rule, i]).filter(([rule]) => Object.keys(rule).includes("required")); if (requiredRules.length > 0) { for (const [rule, i] of requiredRules) { if (rule.required === required) continue; rules2[i] = { ...rule, required }; } } else { rules2.push({ required }); } } return rules2; }); const validateEnabled = vue.computed(() => normalizedRules.value.length > 0); const getFilteredRule = (trigger) => { const rules2 = normalizedRules.value; return rules2.filter((rule) => { if (!rule.trigger || !trigger) return true; if (isArray$1(rule.trigger)) { return rule.trigger.includes(trigger); } else { return rule.trigger === trigger; } }).map(({ trigger: trigger2, ...rule }) => rule); }; const isRequired = vue.computed(() => normalizedRules.value.some((rule) => rule.required)); const shouldShowError = vue.computed(() => { var _a2; return validateStateDebounced.value === "error" && props.showMessage && ((_a2 = formContext == null ? void 0 : formContext.showMessage) != null ? _a2 : true); }); const currentLabel = vue.computed(() => `${props.label || ""}${(formContext == null ? void 0 : formContext.labelSuffix) || ""}`); const setValidationState = (state) => { validateState.value = state; }; const onValidationFailed = (error) => { var _a2, _b; const { errors, fields } = error; if (!errors || !fields) { console.error(error); } setValidationState("error"); validateMessage.value = errors ? (_b = (_a2 = errors == null ? void 0 : errors[0]) == null ? void 0 : _a2.message) != null ? _b : `${props.prop} is required` : ""; formContext == null ? void 0 : formContext.emit("validate", props.prop, false, validateMessage.value); }; const onValidationSucceeded = () => { setValidationState("success"); formContext == null ? void 0 : formContext.emit("validate", props.prop, true, ""); }; const doValidate = async (rules2) => { const modelName = propString.value; const validator = new Schema({ [modelName]: rules2 }); return validator.validate({ [modelName]: fieldValue.value }, { firstFields: true }).then(() => { onValidationSucceeded(); return true; }).catch((err) => { onValidationFailed(err); return Promise.reject(err); }); }; const validate = async (trigger, callback) => { if (isResettingField || !props.prop) { return false; } const hasCallback = isFunction$1(callback); if (!validateEnabled.value) { callback == null ? void 0 : callback(false); return false; } const rules2 = getFilteredRule(trigger); if (rules2.length === 0) { callback == null ? void 0 : callback(true); return true; } setValidationState("validating"); return doValidate(rules2).then(() => { callback == null ? void 0 : callback(true); return true; }).catch((err) => { const { fields } = err; callback == null ? void 0 : callback(false, fields); return hasCallback ? false : Promise.reject(fields); }); }; const clearValidate = () => { setValidationState(""); validateMessage.value = ""; isResettingField = false; }; const resetField = async () => { const model = formContext == null ? void 0 : formContext.model; if (!model || !props.prop) return; const computedValue = getProp(model, props.prop); isResettingField = true; computedValue.value = clone(initialValue); await vue.nextTick(); clearValidate(); isResettingField = false; }; const addInputId = (id) => { if (!inputIds.value.includes(id)) { inputIds.value.push(id); } }; const removeInputId = (id) => { inputIds.value = inputIds.value.filter((listId) => listId !== id); }; vue.watch(() => props.error, (val) => { validateMessage.value = val || ""; setValidationState(val ? "error" : ""); }, { immediate: true }); vue.watch(() => props.validateStatus, (val) => setValidationState(val || "")); const context = vue.reactive({ ...vue.toRefs(props), $el: formItemRef, size: _size, validateState, labelId, inputIds, isGroup, hasLabel, fieldValue, addInputId, removeInputId, resetField, clearValidate, validate }); vue.provide(formItemContextKey, context); vue.onMounted(() => { if (props.prop) { formContext == null ? void 0 : formContext.addField(context); initialValue = clone(fieldValue.value); } }); vue.onBeforeUnmount(() => { formContext == null ? void 0 : formContext.removeField(context); }); expose({ size: _size, validateMessage, validateState, validate, clearValidate, resetField }); return (_ctx, _cache) => { var _a2; return vue.openBlock(), vue.createElementBlock("div", { ref_key: "formItemRef", ref: formItemRef, class: vue.normalizeClass(vue.unref(formItemClasses)), role: vue.unref(isGroup) ? "group" : void 0, "aria-labelledby": vue.unref(isGroup) ? vue.unref(labelId) : void 0 }, [ vue.createVNode(vue.unref(FormLabelWrap), { "is-auto-width": vue.unref(labelStyle).width === "auto", "update-all": ((_a2 = vue.unref(formContext)) == null ? void 0 : _a2.labelWidth) === "auto" }, { default: vue.withCtx(() => [ vue.unref(hasLabel) ? (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(vue.unref(labelFor) ? "label" : "div"), { key: 0, id: vue.unref(labelId), for: vue.unref(labelFor), class: vue.normalizeClass(vue.unref(ns).e("label")), style: vue.normalizeStyle(vue.unref(labelStyle)) }, { default: vue.withCtx(() => [ vue.renderSlot(_ctx.$slots, "label", { label: vue.unref(currentLabel) }, () => [ vue.createTextVNode(vue.toDisplayString(vue.unref(currentLabel)), 1) ]) ]), _: 3 }, 8, ["id", "for", "class", "style"])) : vue.createCommentVNode("v-if", true) ]), _: 3 }, 8, ["is-auto-width", "update-all"]), vue.createElementVNode("div", { class: vue.normalizeClass(vue.unref(ns).e("content")), style: vue.normalizeStyle(vue.unref(contentStyle)) }, [ vue.renderSlot(_ctx.$slots, "default"), vue.createVNode(vue.TransitionGroup, { name: `${vue.unref(ns).namespace.value}-zoom-in-top` }, { default: vue.withCtx(() => [ vue.unref(shouldShowError) ? vue.renderSlot(_ctx.$slots, "error", { key: 0, error: validateMessage.value }, () => [ vue.createElementVNode("div", { class: vue.normalizeClass(vue.unref(validateClasses)) }, vue.toDisplayString(validateMessage.value), 3) ]) : vue.createCommentVNode("v-if", true) ]), _: 3 }, 8, ["name"]) ], 6) ], 10, ["role", "aria-labelledby"]); }; } }); var FormItem = /* @__PURE__ */ _export_sfc$1(_sfc_main$j, [["__file", "form-item.vue"]]); const ElForm = withInstall(Form, { FormItem }); const ElFormItem = withNoopInstall(FormItem); const linkProps = buildProps({ type: { type: String, values: ["primary", "success", "warning", "info", "danger", "default"], default: "default" }, underline: { type: Boolean, default: true }, disabled: Boolean, href: { type: String, default: "" }, target: { type: String, default: "_self" }, icon: { type: iconPropType } }); const linkEmits = { click: (evt) => evt instanceof MouseEvent }; const __default__$4 = vue.defineComponent({ name: "ElLink" }); const _sfc_main$i = /* @__PURE__ */ vue.defineComponent({ ...__default__$4, props: linkProps, emits: linkEmits, setup(__props, { emit }) { const props = __props; const ns = useNamespace("link"); const linkKls = vue.computed(() => [ ns.b(), ns.m(props.type), ns.is("disabled", props.disabled), ns.is("underline", props.underline && !props.disabled) ]); function handleClick(event) { if (!props.disabled) emit("click", event); } return (_ctx, _cache) => { return vue.openBlock(), vue.createElementBlock("a", { class: vue.normalizeClass(vue.unref(linkKls)), href: _ctx.disabled || !_ctx.href ? void 0 : _ctx.href, target: _ctx.disabled || !_ctx.href ? void 0 : _ctx.target, onClick: handleClick }, [ _ctx.icon ? (vue.openBlock(), vue.createBlock(vue.unref(ElIcon), { key: 0 }, { default: vue.withCtx(() => [ (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.icon))) ]), _: 1 })) : vue.createCommentVNode("v-if", true), _ctx.$slots.default ? (vue.openBlock(), vue.createElementBlock("span", { key: 1, class: vue.normalizeClass(vue.unref(ns).e("inner")) }, [ vue.renderSlot(_ctx.$slots, "default") ], 2)) : vue.createCommentVNode("v-if", true), _ctx.$slots.icon ? vue.renderSlot(_ctx.$slots, "icon", { key: 2 }) : vue.createCommentVNode("v-if", true) ], 10, ["href", "target"]); }; } }); var Link = /* @__PURE__ */ _export_sfc$1(_sfc_main$i, [["__file", "link.vue"]]); const ElLink = withInstall(Link); const isValidComponentSize = (val) => ["", ...componentSizes].includes(val); const getCell = function(event) { var _a2; return (_a2 = event.target) == null ? void 0 : _a2.closest("td"); }; const orderBy = function(array, sortKey, reverse, sortMethod, sortBy) { if (!sortKey && !sortMethod && (!sortBy || isArray$1(sortBy) && !sortBy.length)) { return array; } if (isString$1(reverse)) { reverse = reverse === "descending" ? -1 : 1; } else { reverse = reverse && reverse < 0 ? -1 : 1; } const getKey = sortMethod ? null : function(value, index) { if (sortBy) { if (!isArray$1(sortBy)) { sortBy = [sortBy]; } return sortBy.map((by) => { if (isString$1(by)) { return get(value, by); } else { return by(value, index, array); } }); } if (sortKey !== "$key") { if (isObject$1(value) && "$value" in value) value = value.$value; } return [isObject$1(value) ? get(value, sortKey) : value]; }; const compare = function(a2, b2) { if (sortMethod) { return sortMethod(a2.value, b2.value); } for (let i = 0, len = a2.key.length; i < len; i++) { if (a2.key[i] < b2.key[i]) { return -1; } if (a2.key[i] > b2.key[i]) { return 1; } } return 0; }; return array.map((value, index) => { return { value, index, key: getKey ? getKey(value, index) : null }; }).sort((a2, b2) => { let order = compare(a2, b2); if (!order) { order = a2.index - b2.index; } return order * +reverse; }).map((item) => item.value); }; const getColumnById = function(table, columnId) { let column = null; table.columns.forEach((item) => { if (item.id === columnId) { column = item; } }); return column; }; const getColumnByKey = function(table, columnKey) { let column = null; for (let i = 0; i < table.columns.length; i++) { const item = table.columns[i]; if (item.columnKey === columnKey) { column = item; break; } } if (!column) throwError("ElTable", `No column matching with column-key: ${columnKey}`); return column; }; const getColumnByCell = function(table, cell, namespace) { const matches = (cell.className || "").match(new RegExp(`${namespace}-table_[^\\s]+`, "gm")); if (matches) { return getColumnById(table, matches[0]); } return null; }; const getRowIdentity = (row, rowKey) => { if (!row) throw new Error("Row is required when get row identity"); if (isString$1(rowKey)) { if (!rowKey.includes(".")) { return `${row[rowKey]}`; } const key = rowKey.split("."); let current = row; for (const element of key) { current = current[element]; } return `${current}`; } else if (isFunction$1(rowKey)) { return rowKey.call(null, row); } }; const getKeysMap = function(array, rowKey) { const arrayMap2 = {}; (array || []).forEach((row, index) => { arrayMap2[getRowIdentity(row, rowKey)] = { row, index }; }); return arrayMap2; }; function mergeOptions(defaults, config) { const options = {}; let key; for (key in defaults) { options[key] = defaults[key]; } for (key in config) { if (hasOwn(config, key)) { const value = config[key]; if (!isUndefined(value)) { options[key] = value; } } } return options; } function parseWidth(width) { if (width === "") return width; if (!isUndefined(width)) { width = Number.parseInt(width, 10); if (Number.isNaN(width)) { width = ""; } } return width; } function parseMinWidth(minWidth) { if (minWidth === "") return minWidth; if (!isUndefined(minWidth)) { minWidth = parseWidth(minWidth); if (Number.isNaN(minWidth)) { minWidth = 80; } } return minWidth; } function parseHeight(height) { if (isNumber(height)) { return height; } if (isString$1(height)) { if (/^\d+(?:px)?$/.test(height)) { return Number.parseInt(height, 10); } else { return height; } } return null; } function compose(...funcs) { if (funcs.length === 0) { return (arg) => arg; } if (funcs.length === 1) { return funcs[0]; } return funcs.reduce((a2, b2) => (...args) => a2(b2(...args))); } function toggleRowStatus(statusArr, row, newVal, tableTreeProps, selectable, rowIndex) { let _rowIndex = rowIndex != null ? rowIndex : 0; let changed = false; const index = statusArr.indexOf(row); const included = index !== -1; const isRowSelectable = selectable == null ? void 0 : selectable.call(null, row, _rowIndex); const toggleStatus = (type) => { if (type === "add") { statusArr.push(row); } else { statusArr.splice(index, 1); } changed = true; }; const getChildrenCount = (row2) => { let count = 0; const children = (tableTreeProps == null ? void 0 : tableTreeProps.children) && row2[tableTreeProps.children]; if (children && isArray$1(children)) { count += children.length; children.forEach((item) => { count += getChildrenCount(item); }); } return count; }; if (!selectable || isRowSelectable) { if (isBoolean(newVal)) { if (newVal && !included) { toggleStatus("add"); } else if (!newVal && included) { toggleStatus("remove"); } } else { included ? toggleStatus("remove") : toggleStatus("add"); } } if (!(tableTreeProps == null ? void 0 : tableTreeProps.checkStrictly) && (tableTreeProps == null ? void 0 : tableTreeProps.children) && isArray$1(row[tableTreeProps.children])) { row[tableTreeProps.children].forEach((item) => { const childChanged = toggleRowStatus(statusArr, item, newVal != null ? newVal : !included, tableTreeProps, selectable, _rowIndex + 1); _rowIndex += getChildrenCount(item) + 1; if (childChanged) { changed = childChanged; } }); } return changed; } function walkTreeNode(root2, cb, childrenKey = "children", lazyKey = "hasChildren") { const isNil2 = (array) => !(isArray$1(array) && array.length); function _walker(parent, children, level) { cb(parent, children, level); children.forEach((item) => { if (item[lazyKey]) { cb(item, null, level + 1); return; } const children2 = item[childrenKey]; if (!isNil2(children2)) { _walker(item, children2, level + 1); } }); } root2.forEach((item) => { if (item[lazyKey]) { cb(item, null, 0); return; } const children = item[childrenKey]; if (!isNil2(children)) { _walker(item, children, 0); } }); } const getTableOverflowTooltipProps = (props, innerText, row, column) => { const popperOptions = { strategy: "fixed", ...props.popperOptions }; const tooltipFormatterContent = isFunction$1(column.tooltipFormatter) ? column.tooltipFormatter({ row, column, cellValue: getProp(row, column.property).value }) : void 0; if (vue.isVNode(tooltipFormatterContent)) { return { slotContent: tooltipFormatterContent, content: null, ...props, popperOptions }; } return { slotContent: null, content: tooltipFormatterContent != null ? tooltipFormatterContent : innerText, ...props, popperOptions }; }; let removePopper = null; function createTablePopper(props, popperContent, row, column, trigger, table) { const tableOverflowTooltipProps = getTableOverflowTooltipProps(props, popperContent, row, column); const mergedProps = { ...tableOverflowTooltipProps, slotContent: void 0 }; if ((removePopper == null ? void 0 : removePopper.trigger) === trigger) { const comp = removePopper.vm.component; merge(comp.props, mergedProps); if (tableOverflowTooltipProps.slotContent) { comp.slots.content = () => [tableOverflowTooltipProps.slotContent]; } return; } removePopper == null ? void 0 : removePopper(); const parentNode = table == null ? void 0 : table.refs.tableWrapper; const ns = parentNode == null ? void 0 : parentNode.dataset.prefix; const vm = vue.createVNode(ElTooltip, { virtualTriggering: true, virtualRef: trigger, appendTo: parentNode, placement: "top", transition: "none", offset: 0, hideAfter: 0, ...mergedProps }, tableOverflowTooltipProps.slotContent ? { content: () => tableOverflowTooltipProps.slotContent } : void 0); vm.appContext = { ...table.appContext, ...table }; const container = document.createElement("div"); vue.render(vm, container); vm.component.exposed.onOpen(); const scrollContainer = parentNode == null ? void 0 : parentNode.querySelector(`.${ns}-scrollbar__wrap`); removePopper = () => { vue.render(null, container); scrollContainer == null ? void 0 : scrollContainer.removeEventListener("scroll", removePopper); removePopper = null; }; removePopper.trigger = trigger; removePopper.vm = vm; scrollContainer == null ? void 0 : scrollContainer.addEventListener("scroll", removePopper); } function getCurrentColumns(column) { if (column.children) { return flatMap(column.children, getCurrentColumns); } else { return [column]; } } function getColSpan(colSpan, column) { return colSpan + column.colSpan; } const isFixedColumn = (index, fixed, store, realColumns) => { let start = 0; let after = index; const columns = store.states.columns.value; if (realColumns) { const curColumns = getCurrentColumns(realColumns[index]); const preColumns = columns.slice(0, columns.indexOf(curColumns[0])); start = preColumns.reduce(getColSpan, 0); after = start + curColumns.reduce(getColSpan, 0) - 1; } else { start = index; } let fixedLayout; switch (fixed) { case "left": if (after < store.states.fixedLeafColumnsLength.value) { fixedLayout = "left"; } break; case "right": if (start >= columns.length - store.states.rightFixedLeafColumnsLength.value) { fixedLayout = "right"; } break; default: if (after < store.states.fixedLeafColumnsLength.value) { fixedLayout = "left"; } else if (start >= columns.length - store.states.rightFixedLeafColumnsLength.value) { fixedLayout = "right"; } } return fixedLayout ? { direction: fixedLayout, start, after } : {}; }; const getFixedColumnsClass = (namespace, index, fixed, store, realColumns, offset = 0) => { const classes = []; const { direction, start, after } = isFixedColumn(index, fixed, store, realColumns); if (direction) { const isLeft = direction === "left"; classes.push(`${namespace}-fixed-column--${direction}`); if (isLeft && after + offset === store.states.fixedLeafColumnsLength.value - 1) { classes.push("is-last-column"); } else if (!isLeft && start - offset === store.states.columns.value.length - store.states.rightFixedLeafColumnsLength.value) { classes.push("is-first-column"); } } return classes; }; function getOffset(offset, column) { return offset + (isNull(column.realWidth) || Number.isNaN(column.realWidth) ? Number(column.width) : column.realWidth); } const getFixedColumnOffset = (index, fixed, store, realColumns) => { const { direction, start = 0, after = 0 } = isFixedColumn(index, fixed, store, realColumns); if (!direction) { return; } const styles = {}; const isLeft = direction === "left"; const columns = store.states.columns.value; if (isLeft) { styles.left = columns.slice(0, start).reduce(getOffset, 0); } else { styles.right = columns.slice(after + 1).reverse().reduce(getOffset, 0); } return styles; }; const ensurePosition = (style, key) => { if (!style) return; if (!Number.isNaN(style[key])) { style[key] = `${style[key]}px`; } }; function useExpand(watcherData) { const instance = vue.getCurrentInstance(); const defaultExpandAll = vue.ref(false); const expandRows = vue.ref([]); const updateExpandRows = () => { const data = watcherData.data.value || []; const rowKey = watcherData.rowKey.value; if (defaultExpandAll.value) { expandRows.value = data.slice(); } else if (rowKey) { const expandRowsMap = getKeysMap(expandRows.value, rowKey); expandRows.value = data.reduce((prev, row) => { const rowId = getRowIdentity(row, rowKey); const rowInfo = expandRowsMap[rowId]; if (rowInfo) { prev.push(row); } return prev; }, []); } else { expandRows.value = []; } }; const toggleRowExpansion = (row, expanded) => { const changed = toggleRowStatus(expandRows.value, row, expanded); if (changed) { instance.emit("expand-change", row, expandRows.value.slice()); } }; const setExpandRowKeys = (rowKeys) => { instance.store.assertRowKey(); const data = watcherData.data.value || []; const rowKey = watcherData.rowKey.value; const keysMap = getKeysMap(data, rowKey); expandRows.value = rowKeys.reduce((prev, cur) => { const info = keysMap[cur]; if (info) { prev.push(info.row); } return prev; }, []); }; const isRowExpanded = (row) => { const rowKey = watcherData.rowKey.value; if (rowKey) { const expandMap = getKeysMap(expandRows.value, rowKey); return !!expandMap[getRowIdentity(row, rowKey)]; } return expandRows.value.includes(row); }; return { updateExpandRows, toggleRowExpansion, setExpandRowKeys, isRowExpanded, states: { expandRows, defaultExpandAll } }; } function useCurrent(watcherData) { const instance = vue.getCurrentInstance(); const _currentRowKey = vue.ref(null); const currentRow = vue.ref(null); const setCurrentRowKey = (key) => { instance.store.assertRowKey(); _currentRowKey.value = key; setCurrentRowByKey(key); }; const restoreCurrentRowKey = () => { _currentRowKey.value = null; }; const setCurrentRowByKey = (key) => { const { data, rowKey } = watcherData; let _currentRow = null; if (rowKey.value) { _currentRow = (vue.unref(data) || []).find((item) => getRowIdentity(item, rowKey.value) === key); } currentRow.value = _currentRow; instance.emit("current-change", currentRow.value, null); }; const updateCurrentRow = (_currentRow) => { const oldCurrentRow = currentRow.value; if (_currentRow && _currentRow !== oldCurrentRow) { currentRow.value = _currentRow; instance.emit("current-change", currentRow.value, oldCurrentRow); return; } if (!_currentRow && oldCurrentRow) { currentRow.value = null; instance.emit("current-change", null, oldCurrentRow); } }; const updateCurrentRowData = () => { const rowKey = watcherData.rowKey.value; const data = watcherData.data.value || []; const oldCurrentRow = currentRow.value; if (!data.includes(oldCurrentRow) && oldCurrentRow) { if (rowKey) { const currentRowKey = getRowIdentity(oldCurrentRow, rowKey); setCurrentRowByKey(currentRowKey); } else { currentRow.value = null; } if (isNull(currentRow.value)) { instance.emit("current-change", null, oldCurrentRow); } } else if (_currentRowKey.value) { setCurrentRowByKey(_currentRowKey.value); restoreCurrentRowKey(); } }; return { setCurrentRowKey, restoreCurrentRowKey, setCurrentRowByKey, updateCurrentRow, updateCurrentRowData, states: { _currentRowKey, currentRow } }; } function useTree(watcherData) { const expandRowKeys = vue.ref([]); const treeData = vue.ref({}); const indent = vue.ref(16); const lazy = vue.ref(false); const lazyTreeNodeMap = vue.ref({}); const lazyColumnIdentifier = vue.ref("hasChildren"); const childrenColumnName = vue.ref("children"); const checkStrictly = vue.ref(false); const instance = vue.getCurrentInstance(); const normalizedData = vue.computed(() => { if (!watcherData.rowKey.value) return {}; const data = watcherData.data.value || []; return normalize(data); }); const normalizedLazyNode = vue.computed(() => { const rowKey = watcherData.rowKey.value; const keys2 = Object.keys(lazyTreeNodeMap.value); const res = {}; if (!keys2.length) return res; keys2.forEach((key) => { if (lazyTreeNodeMap.value[key].length) { const item = { children: [] }; lazyTreeNodeMap.value[key].forEach((row) => { const currentRowKey = getRowIdentity(row, rowKey); item.children.push(currentRowKey); if (row[lazyColumnIdentifier.value] && !res[currentRowKey]) { res[currentRowKey] = { children: [] }; } }); res[key] = item; } }); return res; }); const normalize = (data) => { const rowKey = watcherData.rowKey.value; const res = {}; walkTreeNode(data, (parent, children, level) => { const parentId = getRowIdentity(parent, rowKey); if (isArray$1(children)) { res[parentId] = { children: children.map((row) => getRowIdentity(row, rowKey)), level }; } else if (lazy.value) { res[parentId] = { children: [], lazy: true, level }; } }, childrenColumnName.value, lazyColumnIdentifier.value); return res; }; const updateTreeData = (ifChangeExpandRowKeys = false, ifExpandAll = ((_a2) => (_a2 = instance.store) == null ? void 0 : _a2.states.defaultExpandAll.value)()) => { var _a2; const nested = normalizedData.value; const normalizedLazyNode_ = normalizedLazyNode.value; const keys2 = Object.keys(nested); const newTreeData = {}; if (keys2.length) { const oldTreeData = vue.unref(treeData); const rootLazyRowKeys = []; const getExpanded = (oldValue, key) => { if (ifChangeExpandRowKeys) { if (expandRowKeys.value) { return ifExpandAll || expandRowKeys.value.includes(key); } else { return !!(ifExpandAll || (oldValue == null ? void 0 : oldValue.expanded)); } } else { const included = ifExpandAll || expandRowKeys.value && expandRowKeys.value.includes(key); return !!((oldValue == null ? void 0 : oldValue.expanded) || included); } }; keys2.forEach((key) => { const oldValue = oldTreeData[key]; const newValue = { ...nested[key] }; newValue.expanded = getExpanded(oldValue, key); if (newValue.lazy) { const { loaded = false, loading = false } = oldValue || {}; newValue.loaded = !!loaded; newValue.loading = !!loading; rootLazyRowKeys.push(key); } newTreeData[key] = newValue; }); const lazyKeys = Object.keys(normalizedLazyNode_); if (lazy.value && lazyKeys.length && rootLazyRowKeys.length) { lazyKeys.forEach((key) => { const oldValue = oldTreeData[key]; const lazyNodeChildren = normalizedLazyNode_[key].children; if (rootLazyRowKeys.includes(key)) { if (newTreeData[key].children.length !== 0) { throw new Error("[ElTable]children must be an empty array."); } newTreeData[key].children = lazyNodeChildren; } else { const { loaded = false, loading = false } = oldValue || {}; newTreeData[key] = { lazy: true, loaded: !!loaded, loading: !!loading, expanded: getExpanded(oldValue, key), children: lazyNodeChildren, level: "" }; } }); } } treeData.value = newTreeData; (_a2 = instance.store) == null ? void 0 : _a2.updateTableScrollY(); }; vue.watch(() => expandRowKeys.value, () => { updateTreeData(true); }); vue.watch(() => normalizedData.value, () => { updateTreeData(); }); vue.watch(() => normalizedLazyNode.value, () => { updateTreeData(); }); const updateTreeExpandKeys = (value) => { expandRowKeys.value = value; updateTreeData(); }; const isUseLazy = (data) => { return lazy.value && data && "loaded" in data && !data.loaded; }; const toggleTreeExpansion = (row, expanded) => { instance.store.assertRowKey(); const rowKey = watcherData.rowKey.value; const id = getRowIdentity(row, rowKey); const data = id && treeData.value[id]; if (id && data && "expanded" in data) { const oldExpanded = data.expanded; expanded = isUndefined(expanded) ? !data.expanded : expanded; treeData.value[id].expanded = expanded; if (oldExpanded !== expanded) { instance.emit("expand-change", row, expanded); } isUseLazy(data) && loadData(row, id, data); instance.store.updateTableScrollY(); } }; const loadOrToggle = (row) => { instance.store.assertRowKey(); const rowKey = watcherData.rowKey.value; const id = getRowIdentity(row, rowKey); const data = treeData.value[id]; if (isUseLazy(data)) { loadData(row, id, data); } else { toggleTreeExpansion(row, void 0); } }; const loadData = (row, key, treeNode) => { const { load } = instance.props; if (load && !treeData.value[key].loaded) { treeData.value[key].loading = true; load(row, treeNode, (data) => { if (!isArray$1(data)) { throw new TypeError("[ElTable] data must be an array"); } treeData.value[key].loading = false; treeData.value[key].loaded = true; treeData.value[key].expanded = true; if (data.length) { lazyTreeNodeMap.value[key] = data; } instance.emit("expand-change", row, true); }); } }; const updateKeyChildren = (key, data) => { const { lazy: lazy2, rowKey } = instance.props; if (!lazy2) return; if (!rowKey) throw new Error("[Table] rowKey is required in updateKeyChild"); if (lazyTreeNodeMap.value[key]) { lazyTreeNodeMap.value[key] = data; } }; return { loadData, loadOrToggle, toggleTreeExpansion, updateTreeExpandKeys, updateTreeData, updateKeyChildren, normalize, states: { expandRowKeys, treeData, indent, lazy, lazyTreeNodeMap, lazyColumnIdentifier, childrenColumnName, checkStrictly } }; } const sortData = (data, states) => { const sortingColumn = states.sortingColumn; if (!sortingColumn || isString$1(sortingColumn.sortable)) { return data; } return orderBy(data, states.sortProp, states.sortOrder, sortingColumn.sortMethod, sortingColumn.sortBy); }; const doFlattenColumns = (columns) => { const result = []; columns.forEach((column) => { if (column.children && column.children.length > 0) { result.push.apply(result, doFlattenColumns(column.children)); } else { result.push(column); } }); return result; }; function useWatcher$1() { var _a2; const instance = vue.getCurrentInstance(); const { size: tableSize } = vue.toRefs((_a2 = instance.proxy) == null ? void 0 : _a2.$props); const rowKey = vue.ref(null); const data = vue.ref([]); const _data = vue.ref([]); const isComplex = vue.ref(false); const _columns = vue.ref([]); const originColumns = vue.ref([]); const columns = vue.ref([]); const fixedColumns = vue.ref([]); const rightFixedColumns = vue.ref([]); const leafColumns = vue.ref([]); const fixedLeafColumns = vue.ref([]); const rightFixedLeafColumns = vue.ref([]); const updateOrderFns = []; const leafColumnsLength = vue.ref(0); const fixedLeafColumnsLength = vue.ref(0); const rightFixedLeafColumnsLength = vue.ref(0); const isAllSelected = vue.ref(false); const selection = vue.ref([]); const reserveSelection = vue.ref(false); const selectOnIndeterminate = vue.ref(false); const selectable = vue.ref(null); const filters = vue.ref({}); const filteredData = vue.ref(null); const sortingColumn = vue.ref(null); const sortProp = vue.ref(null); const sortOrder = vue.ref(null); const hoverRow = vue.ref(null); const selectedMap = vue.computed(() => { return rowKey.value ? getKeysMap(selection.value, rowKey.value) : void 0; }); vue.watch(data, () => { var _a22; if (instance.state) { scheduleLayout(false); const needUpdateFixed = instance.props.tableLayout === "auto"; if (needUpdateFixed) { (_a22 = instance.refs.tableHeaderRef) == null ? void 0 : _a22.updateFixedColumnStyle(); } } }, { deep: true }); const assertRowKey = () => { if (!rowKey.value) throw new Error("[ElTable] prop row-key is required"); }; const updateChildFixed = (column) => { var _a22; (_a22 = column.children) == null ? void 0 : _a22.forEach((childColumn) => { childColumn.fixed = column.fixed; updateChildFixed(childColumn); }); }; const updateColumns = () => { var _a22, _b; _columns.value.forEach((column) => { updateChildFixed(column); }); fixedColumns.value = _columns.value.filter((column) => column.type !== "selection" && [true, "left"].includes(column.fixed)); let selectColFixLeft; if (((_b = (_a22 = _columns.value) == null ? void 0 : _a22[0]) == null ? void 0 : _b.type) === "selection") { const selectColumn = _columns.value[0]; selectColFixLeft = [true, "left"].includes(selectColumn.fixed) || fixedColumns.value.length && selectColumn.fixed !== "right"; if (selectColFixLeft) { fixedColumns.value.unshift(selectColumn); } } rightFixedColumns.value = _columns.value.filter((column) => column.fixed === "right"); const notFixedColumns = _columns.value.filter((column) => (selectColFixLeft ? column.type !== "selection" : true) && !column.fixed); originColumns.value = [].concat(fixedColumns.value).concat(notFixedColumns).concat(rightFixedColumns.value); const leafColumns2 = doFlattenColumns(notFixedColumns); const fixedLeafColumns2 = doFlattenColumns(fixedColumns.value); const rightFixedLeafColumns2 = doFlattenColumns(rightFixedColumns.value); leafColumnsLength.value = leafColumns2.length; fixedLeafColumnsLength.value = fixedLeafColumns2.length; rightFixedLeafColumnsLength.value = rightFixedLeafColumns2.length; columns.value = [].concat(fixedLeafColumns2).concat(leafColumns2).concat(rightFixedLeafColumns2); isComplex.value = fixedColumns.value.length > 0 || rightFixedColumns.value.length > 0; }; const scheduleLayout = (needUpdateColumns, immediate = false) => { if (needUpdateColumns) { updateColumns(); } if (immediate) { instance.state.doLayout(); } else { instance.state.debouncedUpdateLayout(); } }; const isSelected = (row) => { if (selectedMap.value) { return !!selectedMap.value[getRowIdentity(row, rowKey.value)]; } else { return selection.value.includes(row); } }; const clearSelection = () => { isAllSelected.value = false; const oldSelection = selection.value; selection.value = []; if (oldSelection.length) { instance.emit("selection-change", []); } }; const cleanSelection = () => { let deleted; if (rowKey.value) { deleted = []; const dataMap = getKeysMap(data.value, rowKey.value); for (const key in selectedMap.value) { if (hasOwn(selectedMap.value, key) && !dataMap[key]) { deleted.push(selectedMap.value[key].row); } } } else { deleted = selection.value.filter((item) => !data.value.includes(item)); } if (deleted.length) { const newSelection = selection.value.filter((item) => !deleted.includes(item)); selection.value = newSelection; instance.emit("selection-change", newSelection.slice()); } }; const getSelectionRows = () => { return (selection.value || []).slice(); }; const toggleRowSelection = (row, selected, emitChange = true, ignoreSelectable = false) => { var _a22, _b, _c, _d; const treeProps = { children: (_b = (_a22 = instance == null ? void 0 : instance.store) == null ? void 0 : _a22.states) == null ? void 0 : _b.childrenColumnName.value, checkStrictly: (_d = (_c = instance == null ? void 0 : instance.store) == null ? void 0 : _c.states) == null ? void 0 : _d.checkStrictly.value }; const changed = toggleRowStatus(selection.value, row, selected, treeProps, ignoreSelectable ? void 0 : selectable.value, data.value.indexOf(row)); if (changed) { const newSelection = (selection.value || []).slice(); if (emitChange) { instance.emit("select", newSelection, row); } instance.emit("selection-change", newSelection); } }; const _toggleAllSelection = () => { var _a22, _b; const value = selectOnIndeterminate.value ? !isAllSelected.value : !(isAllSelected.value || selection.value.length); isAllSelected.value = value; let selectionChanged = false; let childrenCount = 0; const rowKey2 = (_b = (_a22 = instance == null ? void 0 : instance.store) == null ? void 0 : _a22.states) == null ? void 0 : _b.rowKey.value; const { childrenColumnName } = instance.store.states; const treeProps = { children: childrenColumnName.value, checkStrictly: false }; data.value.forEach((row, index) => { const rowIndex = index + childrenCount; if (toggleRowStatus(selection.value, row, value, treeProps, selectable.value, rowIndex)) { selectionChanged = true; } childrenCount += getChildrenCount(getRowIdentity(row, rowKey2)); }); if (selectionChanged) { instance.emit("selection-change", selection.value ? selection.value.slice() : []); } instance.emit("select-all", (selection.value || []).slice()); }; const updateSelectionByRowKey = () => { data.value.forEach((row) => { const rowId = getRowIdentity(row, rowKey.value); const rowInfo = selectedMap.value[rowId]; if (rowInfo) { selection.value[rowInfo.index] = row; } }); }; const updateAllSelected = () => { var _a22; if (((_a22 = data.value) == null ? void 0 : _a22.length) === 0) { isAllSelected.value = false; return; } const { childrenColumnName } = instance.store.states; let rowIndex = 0; let selectedCount = 0; const checkSelectedStatus = (data2) => { var _a3; for (const row of data2) { const isRowSelectable = selectable.value && selectable.value.call(null, row, rowIndex); if (!isSelected(row)) { if (!selectable.value || isRowSelectable) { return false; } } else { selectedCount++; } rowIndex++; if (((_a3 = row[childrenColumnName.value]) == null ? void 0 : _a3.length) && !checkSelectedStatus(row[childrenColumnName.value])) { return false; } } return true; }; const isAllSelected_ = checkSelectedStatus(data.value || []); isAllSelected.value = selectedCount === 0 ? false : isAllSelected_; }; const getChildrenCount = (rowKey2) => { var _a22; if (!instance || !instance.store) return 0; const { treeData } = instance.store.states; let count = 0; const children = (_a22 = treeData.value[rowKey2]) == null ? void 0 : _a22.children; if (children) { count += children.length; children.forEach((childKey) => { count += getChildrenCount(childKey); }); } return count; }; const updateFilters = (columns2, values) => { if (!isArray$1(columns2)) { columns2 = [columns2]; } const filters_ = {}; columns2.forEach((col) => { filters.value[col.id] = values; filters_[col.columnKey || col.id] = values; }); return filters_; }; const updateSort = (column, prop, order) => { if (sortingColumn.value && sortingColumn.value !== column) { sortingColumn.value.order = null; } sortingColumn.value = column; sortProp.value = prop; sortOrder.value = order; }; const execFilter = () => { let sourceData = vue.unref(_data); Object.keys(filters.value).forEach((columnId) => { const values = filters.value[columnId]; if (!values || values.length === 0) return; const column = getColumnById({ columns: columns.value }, columnId); if (column && column.filterMethod) { sourceData = sourceData.filter((row) => { return values.some((value) => column.filterMethod.call(null, value, row, column)); }); } }); filteredData.value = sourceData; }; const execSort = () => { data.value = sortData(filteredData.value, { sortingColumn: sortingColumn.value, sortProp: sortProp.value, sortOrder: sortOrder.value }); }; const execQuery = (ignore = void 0) => { if (!(ignore && ignore.filter)) { execFilter(); } execSort(); }; const clearFilter = (columnKeys) => { const { tableHeaderRef } = instance.refs; if (!tableHeaderRef) return; const panels = Object.assign({}, tableHeaderRef.filterPanels); const keys2 = Object.keys(panels); if (!keys2.length) return; if (isString$1(columnKeys)) { columnKeys = [columnKeys]; } if (isArray$1(columnKeys)) { const columns_ = columnKeys.map((key) => getColumnByKey({ columns: columns.value }, key)); keys2.forEach((key) => { const column = columns_.find((col) => col.id === key); if (column) { column.filteredValue = []; } }); instance.store.commit("filterChange", { column: columns_, values: [], silent: true, multi: true }); } else { keys2.forEach((key) => { const column = columns.value.find((col) => col.id === key); if (column) { column.filteredValue = []; } }); filters.value = {}; instance.store.commit("filterChange", { column: {}, values: [], silent: true }); } }; const clearSort = () => { if (!sortingColumn.value) return; updateSort(null, null, null); instance.store.commit("changeSortCondition", { silent: true }); }; const { setExpandRowKeys, toggleRowExpansion, updateExpandRows, states: expandStates, isRowExpanded } = useExpand({ data, rowKey }); const { updateTreeExpandKeys, toggleTreeExpansion, updateTreeData, updateKeyChildren, loadOrToggle, states: treeStates } = useTree({ data, rowKey }); const { updateCurrentRowData, updateCurrentRow, setCurrentRowKey, states: currentData } = useCurrent({ data, rowKey }); const setExpandRowKeysAdapter = (val) => { setExpandRowKeys(val); updateTreeExpandKeys(val); }; const toggleRowExpansionAdapter = (row, expanded) => { const hasExpandColumn = columns.value.some(({ type }) => type === "expand"); if (hasExpandColumn) { toggleRowExpansion(row, expanded); } else { toggleTreeExpansion(row, expanded); } }; return { assertRowKey, updateColumns, scheduleLayout, isSelected, clearSelection, cleanSelection, getSelectionRows, toggleRowSelection, _toggleAllSelection, toggleAllSelection: null, updateSelectionByRowKey, updateAllSelected, updateFilters, updateCurrentRow, updateSort, execFilter, execSort, execQuery, clearFilter, clearSort, toggleRowExpansion, setExpandRowKeysAdapter, setCurrentRowKey, toggleRowExpansionAdapter, isRowExpanded, updateExpandRows, updateCurrentRowData, loadOrToggle, updateTreeData, updateKeyChildren, states: { tableSize, rowKey, data, _data, isComplex, _columns, originColumns, columns, fixedColumns, rightFixedColumns, leafColumns, fixedLeafColumns, rightFixedLeafColumns, updateOrderFns, leafColumnsLength, fixedLeafColumnsLength, rightFixedLeafColumnsLength, isAllSelected, selection, reserveSelection, selectOnIndeterminate, selectable, filters, filteredData, sortingColumn, sortProp, sortOrder, hoverRow, ...expandStates, ...treeStates, ...currentData } }; } function replaceColumn(array, column) { return array.map((item) => { var _a2; if (item.id === column.id) { return column; } else if ((_a2 = item.children) == null ? void 0 : _a2.length) { item.children = replaceColumn(item.children, column); } return item; }); } function sortColumn(array) { array.forEach((item) => { var _a2, _b; item.no = (_a2 = item.getColumnIndex) == null ? void 0 : _a2.call(item); if ((_b = item.children) == null ? void 0 : _b.length) { sortColumn(item.children); } }); array.sort((cur, pre) => cur.no - pre.no); } function useStore() { const instance = vue.getCurrentInstance(); const watcher = useWatcher$1(); const ns = useNamespace("table"); const mutations = { setData(states, data) { const dataInstanceChanged = vue.unref(states._data) !== data; states.data.value = data; states._data.value = data; instance.store.execQuery(); instance.store.updateCurrentRowData(); instance.store.updateExpandRows(); instance.store.updateTreeData(instance.store.states.defaultExpandAll.value); if (vue.unref(states.reserveSelection)) { instance.store.assertRowKey(); instance.store.updateSelectionByRowKey(); } else { if (dataInstanceChanged) { instance.store.clearSelection(); } else { instance.store.cleanSelection(); } } instance.store.updateAllSelected(); if (instance.$ready) { instance.store.scheduleLayout(); } }, insertColumn(states, column, parent, updateColumnOrder) { const array = vue.unref(states._columns); let newColumns = []; if (!parent) { array.push(column); newColumns = array; } else { if (parent && !parent.children) { parent.children = []; } parent.children.push(column); newColumns = replaceColumn(array, parent); } sortColumn(newColumns); states._columns.value = newColumns; states.updateOrderFns.push(updateColumnOrder); if (column.type === "selection") { states.selectable.value = column.selectable; states.reserveSelection.value = column.reserveSelection; } if (instance.$ready) { instance.store.updateColumns(); instance.store.scheduleLayout(); } }, updateColumnOrder(states, column) { var _a2; const newColumnIndex = (_a2 = column.getColumnIndex) == null ? void 0 : _a2.call(column); if (newColumnIndex === column.no) return; sortColumn(states._columns.value); if (instance.$ready) { instance.store.updateColumns(); } }, removeColumn(states, column, parent, updateColumnOrder) { const array = vue.unref(states._columns) || []; if (parent) { parent.children.splice(parent.children.findIndex((item) => item.id === column.id), 1); vue.nextTick(() => { var _a2; if (((_a2 = parent.children) == null ? void 0 : _a2.length) === 0) { delete parent.children; } }); states._columns.value = replaceColumn(array, parent); } else { const index = array.indexOf(column); if (index > -1) { array.splice(index, 1); states._columns.value = array; } } const updateFnIndex = states.updateOrderFns.indexOf(updateColumnOrder); updateFnIndex > -1 && states.updateOrderFns.splice(updateFnIndex, 1); if (instance.$ready) { instance.store.updateColumns(); instance.store.scheduleLayout(); } }, sort(states, options) { const { prop, order, init } = options; if (prop) { const column = vue.unref(states.columns).find((column2) => column2.property === prop); if (column) { column.order = order; instance.store.updateSort(column, prop, order); instance.store.commit("changeSortCondition", { init }); } } }, changeSortCondition(states, options) { const { sortingColumn, sortProp, sortOrder } = states; const columnValue = vue.unref(sortingColumn), propValue = vue.unref(sortProp), orderValue = vue.unref(sortOrder); if (isNull(orderValue)) { states.sortingColumn.value = null; states.sortProp.value = null; } const ignore = { filter: true }; instance.store.execQuery(ignore); if (!options || !(options.silent || options.init)) { instance.emit("sort-change", { column: columnValue, prop: propValue, order: orderValue }); } instance.store.updateTableScrollY(); }, filterChange(_states, options) { const { column, values, silent } = options; const newFilters = instance.store.updateFilters(column, values); instance.store.execQuery(); if (!silent) { instance.emit("filter-change", newFilters); } instance.store.updateTableScrollY(); }, toggleAllSelection() { instance.store.toggleAllSelection(); }, rowSelectedChanged(_states, row) { instance.store.toggleRowSelection(row); instance.store.updateAllSelected(); }, setHoverRow(states, row) { states.hoverRow.value = row; }, setCurrentRow(_states, row) { instance.store.updateCurrentRow(row); } }; const commit = function(name, ...args) { const mutations2 = instance.store.mutations; if (mutations2[name]) { mutations2[name].apply(instance, [instance.store.states].concat(args)); } else { throw new Error(`Action not found: ${name}`); } }; const updateTableScrollY = function() { vue.nextTick(() => instance.layout.updateScrollY.apply(instance.layout)); }; return { ns, ...watcher, mutations, commit, updateTableScrollY }; } const InitialStateMap = { rowKey: "rowKey", defaultExpandAll: "defaultExpandAll", selectOnIndeterminate: "selectOnIndeterminate", indent: "indent", lazy: "lazy", data: "data", ["treeProps.hasChildren"]: { key: "lazyColumnIdentifier", default: "hasChildren" }, ["treeProps.children"]: { key: "childrenColumnName", default: "children" }, ["treeProps.checkStrictly"]: { key: "checkStrictly", default: false } }; function createStore(table, props) { if (!table) { throw new Error("Table is required."); } const store = useStore(); store.toggleAllSelection = debounce(store._toggleAllSelection, 10); Object.keys(InitialStateMap).forEach((key) => { handleValue(getArrKeysValue(props, key), key, store); }); proxyTableProps(store, props); return store; } function proxyTableProps(store, props) { Object.keys(InitialStateMap).forEach((key) => { vue.watch(() => getArrKeysValue(props, key), (value) => { handleValue(value, key, store); }); }); } function handleValue(value, propsKey, store) { let newVal = value; let storeKey = InitialStateMap[propsKey]; if (isObject$1(InitialStateMap[propsKey])) { storeKey = storeKey.key; newVal = newVal || InitialStateMap[propsKey].default; } store.states[storeKey].value = newVal; } function getArrKeysValue(props, keys2) { if (keys2.includes(".")) { const keyList = keys2.split("."); let value = props; keyList.forEach((key) => { value = value[key]; }); return value; } else { return props[keys2]; } } class TableLayout { constructor(options) { this.observers = []; this.table = null; this.store = null; this.columns = []; this.fit = true; this.showHeader = true; this.height = vue.ref(null); this.scrollX = vue.ref(false); this.scrollY = vue.ref(false); this.bodyWidth = vue.ref(null); this.fixedWidth = vue.ref(null); this.rightFixedWidth = vue.ref(null); this.gutterWidth = 0; for (const name in options) { if (hasOwn(options, name)) { if (vue.isRef(this[name])) { this[name].value = options[name]; } else { this[name] = options[name]; } } } if (!this.table) { throw new Error("Table is required for Table Layout"); } if (!this.store) { throw new Error("Store is required for Table Layout"); } } updateScrollY() { const height = this.height.value; if (isNull(height)) return false; const scrollBarRef = this.table.refs.scrollBarRef; if (this.table.vnode.el && (scrollBarRef == null ? void 0 : scrollBarRef.wrapRef)) { let scrollY = true; const prevScrollY = this.scrollY.value; scrollY = scrollBarRef.wrapRef.scrollHeight > scrollBarRef.wrapRef.clientHeight; this.scrollY.value = scrollY; return prevScrollY !== scrollY; } return false; } setHeight(value, prop = "height") { if (!isClient) return; const el = this.table.vnode.el; value = parseHeight(value); this.height.value = Number(value); if (!el && (value || value === 0)) return vue.nextTick(() => this.setHeight(value, prop)); if (isNumber(value)) { el.style[prop] = `${value}px`; this.updateElsHeight(); } else if (isString$1(value)) { el.style[prop] = value; this.updateElsHeight(); } } setMaxHeight(value) { this.setHeight(value, "max-height"); } getFlattenColumns() { const flattenColumns = []; const columns = this.table.store.states.columns.value; columns.forEach((column) => { if (column.isColumnGroup) { flattenColumns.push.apply(flattenColumns, column.columns); } else { flattenColumns.push(column); } }); return flattenColumns; } updateElsHeight() { this.updateScrollY(); this.notifyObservers("scrollable"); } headerDisplayNone(elm) { if (!elm) return true; let headerChild = elm; while (headerChild.tagName !== "DIV") { if (getComputedStyle(headerChild).display === "none") { return true; } headerChild = headerChild.parentElement; } return false; } updateColumnsWidth() { if (!isClient) return; const fit = this.fit; const bodyWidth = this.table.vnode.el.clientWidth; let bodyMinWidth = 0; const flattenColumns = this.getFlattenColumns(); const flexColumns = flattenColumns.filter((column) => !isNumber(column.width)); flattenColumns.forEach((column) => { if (isNumber(column.width) && column.realWidth) column.realWidth = null; }); if (flexColumns.length > 0 && fit) { flattenColumns.forEach((column) => { bodyMinWidth += Number(column.width || column.minWidth || 80); }); if (bodyMinWidth <= bodyWidth) { this.scrollX.value = false; const totalFlexWidth = bodyWidth - bodyMinWidth; if (flexColumns.length === 1) { flexColumns[0].realWidth = Number(flexColumns[0].minWidth || 80) + totalFlexWidth; } else { const allColumnsWidth = flexColumns.reduce((prev, column) => prev + Number(column.minWidth || 80), 0); const flexWidthPerPixel = totalFlexWidth / allColumnsWidth; let noneFirstWidth = 0; flexColumns.forEach((column, index) => { if (index === 0) return; const flexWidth = Math.floor(Number(column.minWidth || 80) * flexWidthPerPixel); noneFirstWidth += flexWidth; column.realWidth = Number(column.minWidth || 80) + flexWidth; }); flexColumns[0].realWidth = Number(flexColumns[0].minWidth || 80) + totalFlexWidth - noneFirstWidth; } } else { this.scrollX.value = true; flexColumns.forEach((column) => { column.realWidth = Number(column.minWidth); }); } this.bodyWidth.value = Math.max(bodyMinWidth, bodyWidth); this.table.state.resizeState.value.width = this.bodyWidth.value; } else { flattenColumns.forEach((column) => { if (!column.width && !column.minWidth) { column.realWidth = 80; } else { column.realWidth = Number(column.width || column.minWidth); } bodyMinWidth += column.realWidth; }); this.scrollX.value = bodyMinWidth > bodyWidth; this.bodyWidth.value = bodyMinWidth; } const fixedColumns = this.store.states.fixedColumns.value; if (fixedColumns.length > 0) { let fixedWidth = 0; fixedColumns.forEach((column) => { fixedWidth += Number(column.realWidth || column.width); }); this.fixedWidth.value = fixedWidth; } const rightFixedColumns = this.store.states.rightFixedColumns.value; if (rightFixedColumns.length > 0) { let rightFixedWidth = 0; rightFixedColumns.forEach((column) => { rightFixedWidth += Number(column.realWidth || column.width); }); this.rightFixedWidth.value = rightFixedWidth; } this.notifyObservers("columns"); } addObserver(observer) { this.observers.push(observer); } removeObserver(observer) { const index = this.observers.indexOf(observer); if (index !== -1) { this.observers.splice(index, 1); } } notifyObservers(event) { const observers = this.observers; observers.forEach((observer) => { var _a2, _b; switch (event) { case "columns": (_a2 = observer.state) == null ? void 0 : _a2.onColumnsChange(this); break; case "scrollable": (_b = observer.state) == null ? void 0 : _b.onScrollableChange(this); break; default: throw new Error(`Table Layout don't have event ${event}.`); } }); } } const { CheckboxGroup: ElCheckboxGroup } = ElCheckbox; const _sfc_main$h = vue.defineComponent({ name: "ElTableFilterPanel", components: { ElCheckbox, ElCheckboxGroup, ElScrollbar, ElTooltip, ElIcon, ArrowDown: arrow_down_default, ArrowUp: arrow_up_default }, directives: { ClickOutside }, props: { placement: { type: String, default: "bottom-start" }, store: { type: Object }, column: { type: Object }, upDataColumn: { type: Function }, appendTo: { type: String } }, setup(props) { const instance = vue.getCurrentInstance(); const { t } = useLocale(); const ns = useNamespace("table-filter"); const parent = instance == null ? void 0 : instance.parent; if (!parent.filterPanels.value[props.column.id]) { parent.filterPanels.value[props.column.id] = instance; } const tooltipVisible = vue.ref(false); const tooltip = vue.ref(null); const filters = vue.computed(() => { return props.column && props.column.filters; }); const filterClassName = vue.computed(() => { if (props.column.filterClassName) { return `${ns.b()} ${props.column.filterClassName}`; } return ns.b(); }); const filterValue = vue.computed({ get: () => { var _a2; return (((_a2 = props.column) == null ? void 0 : _a2.filteredValue) || [])[0]; }, set: (value) => { if (filteredValue.value) { if (!isPropAbsent(value)) { filteredValue.value.splice(0, 1, value); } else { filteredValue.value.splice(0, 1); } } } }); const filteredValue = vue.computed({ get() { if (props.column) { return props.column.filteredValue || []; } return []; }, set(value) { if (props.column) { props.upDataColumn("filteredValue", value); } } }); const multiple = vue.computed(() => { if (props.column) { return props.column.filterMultiple; } return true; }); const isActive = (filter) => { return filter.value === filterValue.value; }; const hidden = () => { tooltipVisible.value = false; }; const showFilterPanel = (e) => { e.stopPropagation(); tooltipVisible.value = !tooltipVisible.value; }; const hideFilterPanel = () => { tooltipVisible.value = false; }; const handleConfirm = () => { confirmFilter(filteredValue.value); hidden(); }; const handleReset = () => { filteredValue.value = []; confirmFilter(filteredValue.value); hidden(); }; const handleSelect = (_filterValue) => { filterValue.value = _filterValue; if (!isPropAbsent(_filterValue)) { confirmFilter(filteredValue.value); } else { confirmFilter([]); } hidden(); }; const confirmFilter = (filteredValue2) => { props.store.commit("filterChange", { column: props.column, values: filteredValue2 }); props.store.updateAllSelected(); }; vue.watch(tooltipVisible, (value) => { if (props.column) { props.upDataColumn("filterOpened", value); } }, { immediate: true }); const popperPaneRef = vue.computed(() => { var _a2, _b; return (_b = (_a2 = tooltip.value) == null ? void 0 : _a2.popperRef) == null ? void 0 : _b.contentRef; }); return { tooltipVisible, multiple, filterClassName, filteredValue, filterValue, filters, handleConfirm, handleReset, handleSelect, isPropAbsent, isActive, t, ns, showFilterPanel, hideFilterPanel, popperPaneRef, tooltip }; } }); function _sfc_render$2(_ctx, _cache, $props, $setup, $data, $options) { const _component_el_checkbox = vue.resolveComponent("el-checkbox"); const _component_el_checkbox_group = vue.resolveComponent("el-checkbox-group"); const _component_el_scrollbar = vue.resolveComponent("el-scrollbar"); const _component_arrow_up = vue.resolveComponent("arrow-up"); const _component_arrow_down = vue.resolveComponent("arrow-down"); const _component_el_icon = vue.resolveComponent("el-icon"); const _component_el_tooltip = vue.resolveComponent("el-tooltip"); const _directive_click_outside = vue.resolveDirective("click-outside"); return vue.openBlock(), vue.createBlock(_component_el_tooltip, { ref: "tooltip", visible: _ctx.tooltipVisible, offset: 0, placement: _ctx.placement, "show-arrow": false, "stop-popper-mouse-event": false, teleported: "", effect: "light", pure: "", "popper-class": _ctx.filterClassName, persistent: "", "append-to": _ctx.appendTo }, { content: vue.withCtx(() => [ _ctx.multiple ? (vue.openBlock(), vue.createElementBlock("div", { key: 0 }, [ vue.createElementVNode("div", { class: vue.normalizeClass(_ctx.ns.e("content")) }, [ vue.createVNode(_component_el_scrollbar, { "wrap-class": _ctx.ns.e("wrap") }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_checkbox_group, { modelValue: _ctx.filteredValue, "onUpdate:modelValue": ($event) => _ctx.filteredValue = $event, class: vue.normalizeClass(_ctx.ns.e("checkbox-group")) }, { default: vue.withCtx(() => [ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.filters, (filter) => { return vue.openBlock(), vue.createBlock(_component_el_checkbox, { key: filter.value, value: filter.value }, { default: vue.withCtx(() => [ vue.createTextVNode(vue.toDisplayString(filter.text), 1) ]), _: 2 }, 1032, ["value"]); }), 128)) ]), _: 1 }, 8, ["modelValue", "onUpdate:modelValue", "class"]) ]), _: 1 }, 8, ["wrap-class"]) ], 2), vue.createElementVNode("div", { class: vue.normalizeClass(_ctx.ns.e("bottom")) }, [ vue.createElementVNode("button", { class: vue.normalizeClass({ [_ctx.ns.is("disabled")]: _ctx.filteredValue.length === 0 }), disabled: _ctx.filteredValue.length === 0, type: "button", onClick: _ctx.handleConfirm }, vue.toDisplayString(_ctx.t("el.table.confirmFilter")), 11, ["disabled", "onClick"]), vue.createElementVNode("button", { type: "button", onClick: _ctx.handleReset }, vue.toDisplayString(_ctx.t("el.table.resetFilter")), 9, ["onClick"]) ], 2) ])) : (vue.openBlock(), vue.createElementBlock("ul", { key: 1, class: vue.normalizeClass(_ctx.ns.e("list")) }, [ vue.createElementVNode("li", { class: vue.normalizeClass([ _ctx.ns.e("list-item"), { [_ctx.ns.is("active")]: _ctx.isPropAbsent(_ctx.filterValue) } ]), onClick: ($event) => _ctx.handleSelect(null) }, vue.toDisplayString(_ctx.t("el.table.clearFilter")), 11, ["onClick"]), (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.filters, (filter) => { return vue.openBlock(), vue.createElementBlock("li", { key: filter.value, class: vue.normalizeClass([_ctx.ns.e("list-item"), _ctx.ns.is("active", _ctx.isActive(filter))]), label: filter.value, onClick: ($event) => _ctx.handleSelect(filter.value) }, vue.toDisplayString(filter.text), 11, ["label", "onClick"]); }), 128)) ], 2)) ]), default: vue.withCtx(() => [ vue.withDirectives((vue.openBlock(), vue.createElementBlock("span", { class: vue.normalizeClass([ `${_ctx.ns.namespace.value}-table__column-filter-trigger`, `${_ctx.ns.namespace.value}-none-outline` ]), onClick: _ctx.showFilterPanel }, [ vue.createVNode(_component_el_icon, null, { default: vue.withCtx(() => [ vue.renderSlot(_ctx.$slots, "filter-icon", {}, () => [ _ctx.column.filterOpened ? (vue.openBlock(), vue.createBlock(_component_arrow_up, { key: 0 })) : (vue.openBlock(), vue.createBlock(_component_arrow_down, { key: 1 })) ]) ]), _: 3 }) ], 10, ["onClick"])), [ [_directive_click_outside, _ctx.hideFilterPanel, _ctx.popperPaneRef] ]) ]), _: 3 }, 8, ["visible", "placement", "popper-class", "append-to"]); } var FilterPanel = /* @__PURE__ */ _export_sfc$1(_sfc_main$h, [["render", _sfc_render$2], ["__file", "filter-panel.vue"]]); function useLayoutObserver(root2) { const instance = vue.getCurrentInstance(); vue.onBeforeMount(() => { tableLayout.value.addObserver(instance); }); vue.onMounted(() => { onColumnsChange(tableLayout.value); onScrollableChange(tableLayout.value); }); vue.onUpdated(() => { onColumnsChange(tableLayout.value); onScrollableChange(tableLayout.value); }); vue.onUnmounted(() => { tableLayout.value.removeObserver(instance); }); const tableLayout = vue.computed(() => { const layout = root2.layout; if (!layout) { throw new Error("Can not find table layout."); } return layout; }); const onColumnsChange = (layout) => { var _a2; const cols = ((_a2 = root2.vnode.el) == null ? void 0 : _a2.querySelectorAll("colgroup > col")) || []; if (!cols.length) return; const flattenColumns = layout.getFlattenColumns(); const columnsMap = {}; flattenColumns.forEach((column) => { columnsMap[column.id] = column; }); for (let i = 0, j = cols.length; i < j; i++) { const col = cols[i]; const name = col.getAttribute("name"); const column = columnsMap[name]; if (column) { col.setAttribute("width", column.realWidth || column.width); } } }; const onScrollableChange = (layout) => { var _a2, _b; const cols = ((_a2 = root2.vnode.el) == null ? void 0 : _a2.querySelectorAll("colgroup > col[name=gutter]")) || []; for (let i = 0, j = cols.length; i < j; i++) { const col = cols[i]; col.setAttribute("width", layout.scrollY.value ? layout.gutterWidth : "0"); } const ths = ((_b = root2.vnode.el) == null ? void 0 : _b.querySelectorAll("th.gutter")) || []; for (let i = 0, j = ths.length; i < j; i++) { const th = ths[i]; th.style.width = layout.scrollY.value ? `${layout.gutterWidth}px` : "0"; th.style.display = layout.scrollY.value ? "" : "none"; } }; return { tableLayout: tableLayout.value, onColumnsChange, onScrollableChange }; } const TABLE_INJECTION_KEY = Symbol("ElTable"); function useEvent(props, emit) { const instance = vue.getCurrentInstance(); const parent = vue.inject(TABLE_INJECTION_KEY); const handleFilterClick = (event) => { event.stopPropagation(); return; }; const handleHeaderClick = (event, column) => { if (!column.filters && column.sortable) { handleSortClick(event, column, false); } else if (column.filterable && !column.sortable) { handleFilterClick(event); } parent == null ? void 0 : parent.emit("header-click", column, event); }; const handleHeaderContextMenu = (event, column) => { parent == null ? void 0 : parent.emit("header-contextmenu", column, event); }; const draggingColumn = vue.ref(null); const dragging = vue.ref(false); const dragState = vue.ref({}); const handleMouseDown = (event, column) => { if (!isClient) return; if (column.children && column.children.length > 0) return; if (draggingColumn.value && props.border) { dragging.value = true; const table = parent; emit("set-drag-visible", true); const tableEl = table == null ? void 0 : table.vnode.el; const tableLeft = tableEl.getBoundingClientRect().left; const columnEl = instance.vnode.el.querySelector(`th.${column.id}`); const columnRect = columnEl.getBoundingClientRect(); const minLeft = columnRect.left - tableLeft + 30; addClass(columnEl, "noclick"); dragState.value = { startMouseLeft: event.clientX, startLeft: columnRect.right - tableLeft, startColumnLeft: columnRect.left - tableLeft, tableLeft }; const resizeProxy = table == null ? void 0 : table.refs.resizeProxy; resizeProxy.style.left = `${dragState.value.startLeft}px`; document.onselectstart = function() { return false; }; document.ondragstart = function() { return false; }; const handleMouseMove2 = (event2) => { const deltaLeft = event2.clientX - dragState.value.startMouseLeft; const proxyLeft = dragState.value.startLeft + deltaLeft; resizeProxy.style.left = `${Math.max(minLeft, proxyLeft)}px`; }; const handleMouseUp = () => { if (dragging.value) { const { startColumnLeft, startLeft } = dragState.value; const finalLeft = Number.parseInt(resizeProxy.style.left, 10); const columnWidth = finalLeft - startColumnLeft; column.width = column.realWidth = columnWidth; table == null ? void 0 : table.emit("header-dragend", column.width, startLeft - startColumnLeft, column, event); requestAnimationFrame(() => { props.store.scheduleLayout(false, true); }); document.body.style.cursor = ""; dragging.value = false; draggingColumn.value = null; dragState.value = {}; emit("set-drag-visible", false); } document.removeEventListener("mousemove", handleMouseMove2); document.removeEventListener("mouseup", handleMouseUp); document.onselectstart = null; document.ondragstart = null; setTimeout(() => { removeClass(columnEl, "noclick"); }, 0); }; document.addEventListener("mousemove", handleMouseMove2); document.addEventListener("mouseup", handleMouseUp); } }; const handleMouseMove = (event, column) => { var _a2; if (column.children && column.children.length > 0) return; const el = event.target; if (!isElement(el)) { return; } const target = el == null ? void 0 : el.closest("th"); if (!column || !column.resizable || !target) return; if (!dragging.value && props.border) { const rect = target.getBoundingClientRect(); const bodyStyle = document.body.style; const isLastTh = ((_a2 = target.parentNode) == null ? void 0 : _a2.lastElementChild) === target; const allowDarg = props.allowDragLastColumn || !isLastTh; if (rect.width > 12 && rect.right - event.clientX < 8 && allowDarg) { bodyStyle.cursor = "col-resize"; if (hasClass(target, "is-sortable")) { target.style.cursor = "col-resize"; } draggingColumn.value = column; } else if (!dragging.value) { bodyStyle.cursor = ""; if (hasClass(target, "is-sortable")) { target.style.cursor = "pointer"; } draggingColumn.value = null; } } }; const handleMouseOut = () => { if (!isClient) return; document.body.style.cursor = ""; }; const toggleOrder = ({ order, sortOrders }) => { if (order === "") return sortOrders[0]; const index = sortOrders.indexOf(order || null); return sortOrders[index > sortOrders.length - 2 ? 0 : index + 1]; }; const handleSortClick = (event, column, givenOrder) => { var _a2; event.stopPropagation(); const order = column.order === givenOrder ? null : givenOrder || toggleOrder(column); const target = (_a2 = event.target) == null ? void 0 : _a2.closest("th"); if (target) { if (hasClass(target, "noclick")) { removeClass(target, "noclick"); return; } } if (!column.sortable) return; const clickTarget = event.currentTarget; if (["ascending", "descending"].some((str) => hasClass(clickTarget, str) && !column.sortOrders.includes(str))) { return; } const states = props.store.states; let sortProp = states.sortProp.value; let sortOrder; const sortingColumn = states.sortingColumn.value; if (sortingColumn !== column || sortingColumn === column && isNull(sortingColumn.order)) { if (sortingColumn) { sortingColumn.order = null; } states.sortingColumn.value = column; sortProp = column.property; } if (!order) { sortOrder = column.order = null; } else { sortOrder = column.order = order; } states.sortProp.value = sortProp; states.sortOrder.value = sortOrder; parent == null ? void 0 : parent.store.commit("changeSortCondition"); }; return { handleHeaderClick, handleHeaderContextMenu, handleMouseDown, handleMouseMove, handleMouseOut, handleSortClick, handleFilterClick }; } function useStyle$2(props) { const parent = vue.inject(TABLE_INJECTION_KEY); const ns = useNamespace("table"); const getHeaderRowStyle = (rowIndex) => { const headerRowStyle = parent == null ? void 0 : parent.props.headerRowStyle; if (isFunction$1(headerRowStyle)) { return headerRowStyle.call(null, { rowIndex }); } return headerRowStyle; }; const getHeaderRowClass = (rowIndex) => { const classes = []; const headerRowClassName = parent == null ? void 0 : parent.props.headerRowClassName; if (isString$1(headerRowClassName)) { classes.push(headerRowClassName); } else if (isFunction$1(headerRowClassName)) { classes.push(headerRowClassName.call(null, { rowIndex })); } return classes.join(" "); }; const getHeaderCellStyle = (rowIndex, columnIndex, row, column) => { var _a2; let headerCellStyles = (_a2 = parent == null ? void 0 : parent.props.headerCellStyle) != null ? _a2 : {}; if (isFunction$1(headerCellStyles)) { headerCellStyles = headerCellStyles.call(null, { rowIndex, columnIndex, row, column }); } const fixedStyle = getFixedColumnOffset(columnIndex, column.fixed, props.store, row); ensurePosition(fixedStyle, "left"); ensurePosition(fixedStyle, "right"); return Object.assign({}, headerCellStyles, fixedStyle); }; const getHeaderCellClass = (rowIndex, columnIndex, row, column) => { const fixedClasses = getFixedColumnsClass(ns.b(), columnIndex, column.fixed, props.store, row); const classes = [ column.id, column.order, column.headerAlign, column.className, column.labelClassName, ...fixedClasses ]; if (!column.children) { classes.push("is-leaf"); } if (column.sortable) { classes.push("is-sortable"); } const headerCellClassName = parent == null ? void 0 : parent.props.headerCellClassName; if (isString$1(headerCellClassName)) { classes.push(headerCellClassName); } else if (isFunction$1(headerCellClassName)) { classes.push(headerCellClassName.call(null, { rowIndex, columnIndex, row, column })); } classes.push(ns.e("cell")); return classes.filter((className) => Boolean(className)).join(" "); }; return { getHeaderRowStyle, getHeaderRowClass, getHeaderCellStyle, getHeaderCellClass }; } const getAllColumns = (columns) => { const result = []; columns.forEach((column) => { if (column.children) { result.push(column); result.push.apply(result, getAllColumns(column.children)); } else { result.push(column); } }); return result; }; const convertToRows = (originColumns) => { let maxLevel = 1; const traverse = (column, parent) => { if (parent) { column.level = parent.level + 1; if (maxLevel < column.level) { maxLevel = column.level; } } if (column.children) { let colSpan = 0; column.children.forEach((subColumn) => { traverse(subColumn, column); colSpan += subColumn.colSpan; }); column.colSpan = colSpan; } else { column.colSpan = 1; } }; originColumns.forEach((column) => { column.level = 1; traverse(column, void 0); }); const rows = []; for (let i = 0; i < maxLevel; i++) { rows.push([]); } const allColumns = getAllColumns(originColumns); allColumns.forEach((column) => { if (!column.children) { column.rowSpan = maxLevel - column.level + 1; } else { column.rowSpan = 1; column.children.forEach((col) => col.isSubColumn = true); } rows[column.level - 1].push(column); }); return rows; }; function useUtils$1(props) { const parent = vue.inject(TABLE_INJECTION_KEY); const columnRows = vue.computed(() => { return convertToRows(props.store.states.originColumns.value); }); const isGroup = vue.computed(() => { const result = columnRows.value.length > 1; if (result && parent) { parent.state.isGroup.value = true; } return result; }); const toggleAllSelection = (event) => { event.stopPropagation(); parent == null ? void 0 : parent.store.commit("toggleAllSelection"); }; return { isGroup, toggleAllSelection, columnRows }; } var TableHeader = vue.defineComponent({ name: "ElTableHeader", components: { ElCheckbox }, props: { fixed: { type: String, default: "" }, store: { required: true, type: Object }, border: Boolean, defaultSort: { type: Object, default: () => { return { prop: "", order: "" }; } }, appendFilterPanelTo: { type: String }, allowDragLastColumn: { type: Boolean } }, setup(props, { emit }) { const instance = vue.getCurrentInstance(); const parent = vue.inject(TABLE_INJECTION_KEY); const ns = useNamespace("table"); const filterPanels = vue.ref({}); const { onColumnsChange, onScrollableChange } = useLayoutObserver(parent); const isTableLayoutAuto = (parent == null ? void 0 : parent.props.tableLayout) === "auto"; const saveIndexSelection = vue.reactive(/* @__PURE__ */ new Map()); const theadRef = vue.ref(); const updateFixedColumnStyle = () => { setTimeout(() => { if (saveIndexSelection.size > 0) { saveIndexSelection.forEach((column, key) => { const el = theadRef.value.querySelector(`.${key.replace(/\s/g, ".")}`); if (el) { const width = el.getBoundingClientRect().width; column.width = width; } }); saveIndexSelection.clear(); } }); }; vue.watch(saveIndexSelection, updateFixedColumnStyle); vue.onMounted(async () => { await vue.nextTick(); await vue.nextTick(); const { prop, order } = props.defaultSort; parent == null ? void 0 : parent.store.commit("sort", { prop, order, init: true }); updateFixedColumnStyle(); }); const { handleHeaderClick, handleHeaderContextMenu, handleMouseDown, handleMouseMove, handleMouseOut, handleSortClick, handleFilterClick } = useEvent(props, emit); const { getHeaderRowStyle, getHeaderRowClass, getHeaderCellStyle, getHeaderCellClass } = useStyle$2(props); const { isGroup, toggleAllSelection, columnRows } = useUtils$1(props); instance.state = { onColumnsChange, onScrollableChange }; instance.filterPanels = filterPanels; return { ns, filterPanels, onColumnsChange, onScrollableChange, columnRows, getHeaderRowClass, getHeaderRowStyle, getHeaderCellClass, getHeaderCellStyle, handleHeaderClick, handleHeaderContextMenu, handleMouseDown, handleMouseMove, handleMouseOut, handleSortClick, handleFilterClick, isGroup, toggleAllSelection, saveIndexSelection, isTableLayoutAuto, theadRef, updateFixedColumnStyle }; }, render() { const { ns, isGroup, columnRows, getHeaderCellStyle, getHeaderCellClass, getHeaderRowClass, getHeaderRowStyle, handleHeaderClick, handleHeaderContextMenu, handleMouseDown, handleMouseMove, handleSortClick, handleMouseOut, store, $parent, saveIndexSelection, isTableLayoutAuto } = this; let rowSpan = 1; return vue.h("thead", { ref: "theadRef", class: { [ns.is("group")]: isGroup } }, columnRows.map((subColumns, rowIndex) => vue.h("tr", { class: getHeaderRowClass(rowIndex), key: rowIndex, style: getHeaderRowStyle(rowIndex) }, subColumns.map((column, cellIndex) => { if (column.rowSpan > rowSpan) { rowSpan = column.rowSpan; } const _class = getHeaderCellClass(rowIndex, cellIndex, subColumns, column); if (isTableLayoutAuto && column.fixed) { saveIndexSelection.set(_class, column); } return vue.h("th", { class: _class, colspan: column.colSpan, key: `${column.id}-thead`, rowspan: column.rowSpan, style: getHeaderCellStyle(rowIndex, cellIndex, subColumns, column), onClick: ($event) => { if ($event.currentTarget.classList.contains("noclick")) { return; } handleHeaderClick($event, column); }, onContextmenu: ($event) => handleHeaderContextMenu($event, column), onMousedown: ($event) => handleMouseDown($event, column), onMousemove: ($event) => handleMouseMove($event, column), onMouseout: handleMouseOut }, [ vue.h("div", { class: [ "cell", column.filteredValue && column.filteredValue.length > 0 ? "highlight" : "" ] }, [ column.renderHeader ? column.renderHeader({ column, $index: cellIndex, store, _self: $parent }) : column.label, column.sortable && vue.h("span", { onClick: ($event) => handleSortClick($event, column), class: "caret-wrapper" }, [ vue.h("i", { onClick: ($event) => handleSortClick($event, column, "ascending"), class: "sort-caret ascending" }), vue.h("i", { onClick: ($event) => handleSortClick($event, column, "descending"), class: "sort-caret descending" }) ]), column.filterable && vue.h(FilterPanel, { store, placement: column.filterPlacement || "bottom-start", appendTo: $parent.appendFilterPanelTo, column, upDataColumn: (key, value) => { column[key] = value; } }, { "filter-icon": () => column.renderFilterIcon ? column.renderFilterIcon({ filterOpened: column.filterOpened }) : null }) ]) ]); })))); } }); function isGreaterThan(a2, b2, epsilon = 0.03) { return a2 - b2 > epsilon; } function useEvents(props) { const parent = vue.inject(TABLE_INJECTION_KEY); const tooltipContent = vue.ref(""); const tooltipTrigger = vue.ref(vue.h("div")); const handleEvent = (event, row, name) => { var _a2; const table = parent; const cell = getCell(event); let column; const namespace = (_a2 = table == null ? void 0 : table.vnode.el) == null ? void 0 : _a2.dataset.prefix; if (cell) { column = getColumnByCell({ columns: props.store.states.columns.value }, cell, namespace); if (column) { table == null ? void 0 : table.emit(`cell-${name}`, row, column, cell, event); } } table == null ? void 0 : table.emit(`row-${name}`, row, column, event); }; const handleDoubleClick = (event, row) => { handleEvent(event, row, "dblclick"); }; const handleClick = (event, row) => { props.store.commit("setCurrentRow", row); handleEvent(event, row, "click"); }; const handleContextMenu = (event, row) => { handleEvent(event, row, "contextmenu"); }; const handleMouseEnter = debounce((index) => { props.store.commit("setHoverRow", index); }, 30); const handleMouseLeave = debounce(() => { props.store.commit("setHoverRow", null); }, 30); const getPadding = (el) => { const style = window.getComputedStyle(el, null); const paddingLeft = Number.parseInt(style.paddingLeft, 10) || 0; const paddingRight = Number.parseInt(style.paddingRight, 10) || 0; const paddingTop = Number.parseInt(style.paddingTop, 10) || 0; const paddingBottom = Number.parseInt(style.paddingBottom, 10) || 0; return { left: paddingLeft, right: paddingRight, top: paddingTop, bottom: paddingBottom }; }; const toggleRowClassByCell = (rowSpan, event, toggle) => { let node = event.target.parentNode; while (rowSpan > 1) { node = node == null ? void 0 : node.nextSibling; if (!node || node.nodeName !== "TR") break; toggle(node, "hover-row hover-fixed-row"); rowSpan--; } }; const handleCellMouseEnter = (event, row, tooltipOptions) => { var _a2, _b, _c; const table = parent; const cell = getCell(event); const namespace = (_a2 = table == null ? void 0 : table.vnode.el) == null ? void 0 : _a2.dataset.prefix; let column; if (cell) { column = getColumnByCell({ columns: props.store.states.columns.value }, cell, namespace); if (cell.rowSpan > 1) { toggleRowClassByCell(cell.rowSpan, event, addClass); } const hoverState = table.hoverState = { cell, column, row }; table == null ? void 0 : table.emit("cell-mouse-enter", hoverState.row, hoverState.column, hoverState.cell, event); } if (!tooltipOptions) { return; } const cellChild = event.target.querySelector(".cell"); if (!(hasClass(cellChild, `${namespace}-tooltip`) && cellChild.childNodes.length)) { return; } const range2 = document.createRange(); range2.setStart(cellChild, 0); range2.setEnd(cellChild, cellChild.childNodes.length); const { width: rangeWidth, height: rangeHeight } = range2.getBoundingClientRect(); const { width: cellChildWidth, height: cellChildHeight } = cellChild.getBoundingClientRect(); const { top, left, right, bottom } = getPadding(cellChild); const horizontalPadding = left + right; const verticalPadding = top + bottom; if (isGreaterThan(rangeWidth + horizontalPadding, cellChildWidth) || isGreaterThan(rangeHeight + verticalPadding, cellChildHeight) || isGreaterThan(cellChild.scrollWidth, cellChildWidth)) { createTablePopper(tooltipOptions, cell.innerText || cell.textContent, row, column, cell, table); } else if (((_b = removePopper) == null ? void 0 : _b.trigger) === cell) { (_c = removePopper) == null ? void 0 : _c(); } }; const handleCellMouseLeave = (event) => { const cell = getCell(event); if (!cell) return; if (cell.rowSpan > 1) { toggleRowClassByCell(cell.rowSpan, event, removeClass); } const oldHoverState = parent == null ? void 0 : parent.hoverState; parent == null ? void 0 : parent.emit("cell-mouse-leave", oldHoverState == null ? void 0 : oldHoverState.row, oldHoverState == null ? void 0 : oldHoverState.column, oldHoverState == null ? void 0 : oldHoverState.cell, event); }; return { handleDoubleClick, handleClick, handleContextMenu, handleMouseEnter, handleMouseLeave, handleCellMouseEnter, handleCellMouseLeave, tooltipContent, tooltipTrigger }; } function useStyles(props) { const parent = vue.inject(TABLE_INJECTION_KEY); const ns = useNamespace("table"); const getRowStyle = (row, rowIndex) => { const rowStyle = parent == null ? void 0 : parent.props.rowStyle; if (isFunction$1(rowStyle)) { return rowStyle.call(null, { row, rowIndex }); } return rowStyle || null; }; const getRowClass = (row, rowIndex) => { const classes = [ns.e("row")]; if ((parent == null ? void 0 : parent.props.highlightCurrentRow) && row === props.store.states.currentRow.value) { classes.push("current-row"); } if (props.stripe && rowIndex % 2 === 1) { classes.push(ns.em("row", "striped")); } const rowClassName = parent == null ? void 0 : parent.props.rowClassName; if (isString$1(rowClassName)) { classes.push(rowClassName); } else if (isFunction$1(rowClassName)) { classes.push(rowClassName.call(null, { row, rowIndex })); } return classes; }; const getCellStyle = (rowIndex, columnIndex, row, column) => { const cellStyle = parent == null ? void 0 : parent.props.cellStyle; let cellStyles = cellStyle != null ? cellStyle : {}; if (isFunction$1(cellStyle)) { cellStyles = cellStyle.call(null, { rowIndex, columnIndex, row, column }); } const fixedStyle = getFixedColumnOffset(columnIndex, props == null ? void 0 : props.fixed, props.store); ensurePosition(fixedStyle, "left"); ensurePosition(fixedStyle, "right"); return Object.assign({}, cellStyles, fixedStyle); }; const getCellClass = (rowIndex, columnIndex, row, column, offset) => { const fixedClasses = getFixedColumnsClass(ns.b(), columnIndex, props == null ? void 0 : props.fixed, props.store, void 0, offset); const classes = [column.id, column.align, column.className, ...fixedClasses]; const cellClassName = parent == null ? void 0 : parent.props.cellClassName; if (isString$1(cellClassName)) { classes.push(cellClassName); } else if (isFunction$1(cellClassName)) { classes.push(cellClassName.call(null, { rowIndex, columnIndex, row, column })); } classes.push(ns.e("cell")); return classes.filter((className) => Boolean(className)).join(" "); }; const getSpan = (row, column, rowIndex, columnIndex) => { let rowspan = 1; let colspan = 1; const fn2 = parent == null ? void 0 : parent.props.spanMethod; if (isFunction$1(fn2)) { const result = fn2({ row, column, rowIndex, columnIndex }); if (isArray$1(result)) { rowspan = result[0]; colspan = result[1]; } else if (isObject$1(result)) { rowspan = result.rowspan; colspan = result.colspan; } } return { rowspan, colspan }; }; const getColspanRealWidth = (columns, colspan, index) => { if (colspan < 1) { return columns[index].realWidth; } const widthArr = columns.map(({ realWidth, width }) => realWidth || width).slice(index, index + colspan); return Number(widthArr.reduce((acc, width) => Number(acc) + Number(width), -1)); }; return { getRowStyle, getRowClass, getCellStyle, getCellClass, getSpan, getColspanRealWidth }; } const __default__$3 = vue.defineComponent({ name: "TableTdWrapper" }); const _sfc_main$g = /* @__PURE__ */ vue.defineComponent({ ...__default__$3, props: { colspan: { type: Number, default: 1 }, rowspan: { type: Number, default: 1 } }, setup(__props) { return (_ctx, _cache) => { return vue.openBlock(), vue.createElementBlock("td", { colspan: __props.colspan, rowspan: __props.rowspan }, [ vue.renderSlot(_ctx.$slots, "default") ], 8, ["colspan", "rowspan"]); }; } }); var TdWrapper = /* @__PURE__ */ _export_sfc$1(_sfc_main$g, [["__file", "td-wrapper.vue"]]); function useRender$1(props) { const parent = vue.inject(TABLE_INJECTION_KEY); const ns = useNamespace("table"); const { handleDoubleClick, handleClick, handleContextMenu, handleMouseEnter, handleMouseLeave, handleCellMouseEnter, handleCellMouseLeave, tooltipContent, tooltipTrigger } = useEvents(props); const { getRowStyle, getRowClass, getCellStyle, getCellClass, getSpan, getColspanRealWidth } = useStyles(props); const firstDefaultColumnIndex = vue.computed(() => { return props.store.states.columns.value.findIndex(({ type }) => type === "default"); }); const getKeyOfRow = (row, index) => { const rowKey = parent.props.rowKey; if (rowKey) { return getRowIdentity(row, rowKey); } return index; }; const rowRender = (row, $index, treeRowData, expanded = false) => { const { tooltipEffect, tooltipOptions, store } = props; const { indent, columns } = store.states; const rowClasses = getRowClass(row, $index); let display = true; if (treeRowData) { rowClasses.push(ns.em("row", `level-${treeRowData.level}`)); display = treeRowData.display; } const displayStyle = display ? null : { display: "none" }; return vue.h("tr", { style: [displayStyle, getRowStyle(row, $index)], class: rowClasses, key: getKeyOfRow(row, $index), onDblclick: ($event) => handleDoubleClick($event, row), onClick: ($event) => handleClick($event, row), onContextmenu: ($event) => handleContextMenu($event, row), onMouseenter: () => handleMouseEnter($index), onMouseleave: handleMouseLeave }, columns.value.map((column, cellIndex) => { const { rowspan, colspan } = getSpan(row, column, $index, cellIndex); if (!rowspan || !colspan) { return null; } const columnData = Object.assign({}, column); columnData.realWidth = getColspanRealWidth(columns.value, colspan, cellIndex); const data = { store: props.store, _self: props.context || parent, column: columnData, row, $index, cellIndex, expanded }; if (cellIndex === firstDefaultColumnIndex.value && treeRowData) { data.treeNode = { indent: treeRowData.level * indent.value, level: treeRowData.level }; if (isBoolean(treeRowData.expanded)) { data.treeNode.expanded = treeRowData.expanded; if ("loading" in treeRowData) { data.treeNode.loading = treeRowData.loading; } if ("noLazyChildren" in treeRowData) { data.treeNode.noLazyChildren = treeRowData.noLazyChildren; } } } const baseKey = `${getKeyOfRow(row, $index)},${cellIndex}`; const patchKey = columnData.columnKey || columnData.rawColumnKey || ""; const mergedTooltipOptions = column.showOverflowTooltip && merge({ effect: tooltipEffect }, tooltipOptions, column.showOverflowTooltip); return vue.h(TdWrapper, { style: getCellStyle($index, cellIndex, row, column), class: getCellClass($index, cellIndex, row, column, colspan - 1), key: `${patchKey}${baseKey}`, rowspan, colspan, onMouseenter: ($event) => handleCellMouseEnter($event, row, mergedTooltipOptions), onMouseleave: handleCellMouseLeave }, { default: () => cellChildren(cellIndex, column, data) }); })); }; const cellChildren = (cellIndex, column, data) => { return column.renderCell(data); }; const wrappedRowRender = (row, $index) => { const store = props.store; const { isRowExpanded, assertRowKey } = store; const { treeData, lazyTreeNodeMap, childrenColumnName, rowKey } = store.states; const columns = store.states.columns.value; const hasExpandColumn = columns.some(({ type }) => type === "expand"); if (hasExpandColumn) { const expanded = isRowExpanded(row); const tr = rowRender(row, $index, void 0, expanded); const renderExpanded = parent.renderExpanded; if (!renderExpanded) { console.error("[Element Error]renderExpanded is required."); return tr; } const rows = [[tr]]; if (parent.props.preserveExpandedContent || expanded) { rows[0].push(vue.h("tr", { key: `expanded-row__${tr.key}`, style: { display: expanded ? "" : "none" } }, [ vue.h("td", { colspan: columns.length, class: `${ns.e("cell")} ${ns.e("expanded-cell")}` }, [renderExpanded({ row, $index, store, expanded })]) ])); } return rows; } else if (Object.keys(treeData.value).length) { assertRowKey(); const key = getRowIdentity(row, rowKey.value); let cur = treeData.value[key]; let treeRowData = null; if (cur) { treeRowData = { expanded: cur.expanded, level: cur.level, display: true }; if (isBoolean(cur.lazy)) { if (isBoolean(cur.loaded) && cur.loaded) { treeRowData.noLazyChildren = !(cur.children && cur.children.length); } treeRowData.loading = cur.loading; } } const tmp = [rowRender(row, $index, treeRowData)]; if (cur) { let i = 0; const traverse = (children, parent2) => { if (!(children && children.length && parent2)) return; children.forEach((node) => { const innerTreeRowData = { display: parent2.display && parent2.expanded, level: parent2.level + 1, expanded: false, noLazyChildren: false, loading: false }; const childKey = getRowIdentity(node, rowKey.value); if (isPropAbsent(childKey)) { throw new Error("For nested data item, row-key is required."); } cur = { ...treeData.value[childKey] }; if (cur) { innerTreeRowData.expanded = cur.expanded; cur.level = cur.level || innerTreeRowData.level; cur.display = !!(cur.expanded && innerTreeRowData.display); if (isBoolean(cur.lazy)) { if (isBoolean(cur.loaded) && cur.loaded) { innerTreeRowData.noLazyChildren = !(cur.children && cur.children.length); } innerTreeRowData.loading = cur.loading; } } i++; tmp.push(rowRender(node, $index + i, innerTreeRowData)); if (cur) { const nodes2 = lazyTreeNodeMap.value[childKey] || node[childrenColumnName.value]; traverse(nodes2, cur); } }); }; cur.display = true; const nodes = lazyTreeNodeMap.value[key] || row[childrenColumnName.value]; traverse(nodes, cur); } return tmp; } else { return rowRender(row, $index, void 0); } }; return { wrappedRowRender, tooltipContent, tooltipTrigger }; } const defaultProps$2 = { store: { required: true, type: Object }, stripe: Boolean, tooltipEffect: String, tooltipOptions: { type: Object }, context: { default: () => ({}), type: Object }, rowClassName: [String, Function], rowStyle: [Object, Function], fixed: { type: String, default: "" }, highlight: Boolean }; var TableBody = vue.defineComponent({ name: "ElTableBody", props: defaultProps$2, setup(props) { const instance = vue.getCurrentInstance(); const parent = vue.inject(TABLE_INJECTION_KEY); const ns = useNamespace("table"); const { wrappedRowRender, tooltipContent, tooltipTrigger } = useRender$1(props); const { onColumnsChange, onScrollableChange } = useLayoutObserver(parent); const hoveredCellList = []; vue.watch(props.store.states.hoverRow, (newVal, oldVal) => { var _a2; const el = instance == null ? void 0 : instance.vnode.el; const rows = Array.from((el == null ? void 0 : el.children) || []).filter((e) => e == null ? void 0 : e.classList.contains(`${ns.e("row")}`)); let rowNum = newVal; const childNodes = (_a2 = rows[rowNum]) == null ? void 0 : _a2.childNodes; if (childNodes == null ? void 0 : childNodes.length) { let control = 0; const indexes = Array.from(childNodes).reduce((acc, item, index) => { var _a22, _b; if (((_a22 = childNodes[index]) == null ? void 0 : _a22.colSpan) > 1) { control = (_b = childNodes[index]) == null ? void 0 : _b.colSpan; } if (item.nodeName !== "TD" && control === 0) { acc.push(index); } control > 0 && control--; return acc; }, []); indexes.forEach((rowIndex) => { var _a22; rowNum = newVal; while (rowNum > 0) { const preChildNodes = (_a22 = rows[rowNum - 1]) == null ? void 0 : _a22.childNodes; if (preChildNodes[rowIndex] && preChildNodes[rowIndex].nodeName === "TD" && preChildNodes[rowIndex].rowSpan > 1) { addClass(preChildNodes[rowIndex], "hover-cell"); hoveredCellList.push(preChildNodes[rowIndex]); break; } rowNum--; } }); } else { hoveredCellList.forEach((item) => removeClass(item, "hover-cell")); hoveredCellList.length = 0; } if (!props.store.states.isComplex.value || !isClient) return; rAF(() => { const oldRow = rows[oldVal]; const newRow = rows[newVal]; if (oldRow && !oldRow.classList.contains("hover-fixed-row")) { removeClass(oldRow, "hover-row"); } if (newRow) { addClass(newRow, "hover-row"); } }); }); vue.onUnmounted(() => { var _a2; (_a2 = removePopper) == null ? void 0 : _a2(); }); return { ns, onColumnsChange, onScrollableChange, wrappedRowRender, tooltipContent, tooltipTrigger }; }, render() { const { wrappedRowRender, store } = this; const data = store.states.data.value || []; return vue.h("tbody", { tabIndex: -1 }, [ data.reduce((acc, row) => { return acc.concat(wrappedRowRender(row, acc.length)); }, []) ]); } }); function useMapState() { const table = vue.inject(TABLE_INJECTION_KEY); const store = table == null ? void 0 : table.store; const leftFixedLeafCount = vue.computed(() => { return store.states.fixedLeafColumnsLength.value; }); const rightFixedLeafCount = vue.computed(() => { return store.states.rightFixedColumns.value.length; }); const columnsCount = vue.computed(() => { return store.states.columns.value.length; }); const leftFixedCount = vue.computed(() => { return store.states.fixedColumns.value.length; }); const rightFixedCount = vue.computed(() => { return store.states.rightFixedColumns.value.length; }); return { leftFixedLeafCount, rightFixedLeafCount, columnsCount, leftFixedCount, rightFixedCount, columns: store.states.columns }; } function useStyle$1(props) { const { columns } = useMapState(); const ns = useNamespace("table"); const getCellClasses = (columns2, cellIndex) => { const column = columns2[cellIndex]; const classes = [ ns.e("cell"), column.id, column.align, column.labelClassName, ...getFixedColumnsClass(ns.b(), cellIndex, column.fixed, props.store) ]; if (column.className) { classes.push(column.className); } if (!column.children) { classes.push(ns.is("leaf")); } return classes; }; const getCellStyles = (column, cellIndex) => { const fixedStyle = getFixedColumnOffset(cellIndex, column.fixed, props.store); ensurePosition(fixedStyle, "left"); ensurePosition(fixedStyle, "right"); return fixedStyle; }; return { getCellClasses, getCellStyles, columns }; } var TableFooter = vue.defineComponent({ name: "ElTableFooter", props: { fixed: { type: String, default: "" }, store: { required: true, type: Object }, summaryMethod: Function, sumText: String, border: Boolean, defaultSort: { type: Object, default: () => { return { prop: "", order: "" }; } } }, setup(props) { const parent = vue.inject(TABLE_INJECTION_KEY); const ns = useNamespace("table"); const { getCellClasses, getCellStyles, columns } = useStyle$1(props); const { onScrollableChange, onColumnsChange } = useLayoutObserver(parent); return { ns, onScrollableChange, onColumnsChange, getCellClasses, getCellStyles, columns }; }, render() { const { columns, getCellStyles, getCellClasses, summaryMethod, sumText } = this; const data = this.store.states.data.value; let sums = []; if (summaryMethod) { sums = summaryMethod({ columns, data }); } else { columns.forEach((column, index) => { if (index === 0) { sums[index] = sumText; return; } const values = data.map((item) => Number(item[column.property])); const precisions = []; let notNumber = true; values.forEach((value) => { if (!Number.isNaN(+value)) { notNumber = false; const decimal = `${value}`.split(".")[1]; precisions.push(decimal ? decimal.length : 0); } }); const precision = Math.max.apply(null, precisions); if (!notNumber) { sums[index] = values.reduce((prev, curr) => { const value = Number(curr); if (!Number.isNaN(+value)) { return Number.parseFloat((prev + curr).toFixed(Math.min(precision, 20))); } else { return prev; } }, 0); } else { sums[index] = ""; } }); } return vue.h(vue.h("tfoot", [ vue.h("tr", {}, [ ...columns.map((column, cellIndex) => vue.h("td", { key: cellIndex, colspan: column.colSpan, rowspan: column.rowSpan, class: getCellClasses(columns, cellIndex), style: getCellStyles(column, cellIndex) }, [ vue.h("div", { class: ["cell", column.labelClassName] }, [sums[cellIndex]]) ])) ]) ])); } }); function useUtils(store) { const setCurrentRow = (row) => { store.commit("setCurrentRow", row); }; const getSelectionRows = () => { return store.getSelectionRows(); }; const toggleRowSelection = (row, selected, ignoreSelectable = true) => { store.toggleRowSelection(row, selected, false, ignoreSelectable); store.updateAllSelected(); }; const clearSelection = () => { store.clearSelection(); }; const clearFilter = (columnKeys) => { store.clearFilter(columnKeys); }; const toggleAllSelection = () => { store.commit("toggleAllSelection"); }; const toggleRowExpansion = (row, expanded) => { store.toggleRowExpansionAdapter(row, expanded); }; const clearSort = () => { store.clearSort(); }; const sort = (prop, order) => { store.commit("sort", { prop, order }); }; const updateKeyChildren = (key, data) => { store.updateKeyChildren(key, data); }; return { setCurrentRow, getSelectionRows, toggleRowSelection, clearSelection, clearFilter, toggleAllSelection, toggleRowExpansion, clearSort, sort, updateKeyChildren }; } function useStyle(props, layout, store, table) { const isHidden2 = vue.ref(false); const renderExpanded = vue.ref(null); const resizeProxyVisible = vue.ref(false); const setDragVisible = (visible) => { resizeProxyVisible.value = visible; }; const resizeState = vue.ref({ width: null, height: null, headerHeight: null }); const isGroup = vue.ref(false); const scrollbarViewStyle = { display: "inline-block", verticalAlign: "middle" }; const tableWidth = vue.ref(); const tableScrollHeight = vue.ref(0); const bodyScrollHeight = vue.ref(0); const headerScrollHeight = vue.ref(0); const footerScrollHeight = vue.ref(0); const appendScrollHeight = vue.ref(0); vue.watchEffect(() => { layout.setHeight(props.height); }); vue.watchEffect(() => { layout.setMaxHeight(props.maxHeight); }); vue.watch(() => [props.currentRowKey, store.states.rowKey], ([currentRowKey, rowKey]) => { if (!vue.unref(rowKey) || !vue.unref(currentRowKey)) return; store.setCurrentRowKey(`${currentRowKey}`); }, { immediate: true }); vue.watch(() => props.data, (data) => { table.store.commit("setData", data); }, { immediate: true, deep: true }); vue.watchEffect(() => { if (props.expandRowKeys) { store.setExpandRowKeysAdapter(props.expandRowKeys); } }); const handleMouseLeave = () => { table.store.commit("setHoverRow", null); if (table.hoverState) table.hoverState = null; }; const handleHeaderFooterMousewheel = (event, data) => { const { pixelX, pixelY } = data; if (Math.abs(pixelX) >= Math.abs(pixelY)) { table.refs.bodyWrapper.scrollLeft += data.pixelX / 5; } }; const shouldUpdateHeight = vue.computed(() => { return props.height || props.maxHeight || store.states.fixedColumns.value.length > 0 || store.states.rightFixedColumns.value.length > 0; }); const tableBodyStyles = vue.computed(() => { return { width: layout.bodyWidth.value ? `${layout.bodyWidth.value}px` : "" }; }); const doLayout = () => { if (shouldUpdateHeight.value) { layout.updateElsHeight(); } layout.updateColumnsWidth(); if (typeof window === "undefined") return; requestAnimationFrame(syncPosition); }; vue.onMounted(async () => { await vue.nextTick(); store.updateColumns(); bindEvents(); requestAnimationFrame(doLayout); const el = table.vnode.el; const tableHeader = table.refs.headerWrapper; if (props.flexible && el && el.parentElement) { el.parentElement.style.minWidth = "0"; } resizeState.value = { width: tableWidth.value = el.offsetWidth, height: el.offsetHeight, headerHeight: props.showHeader && tableHeader ? tableHeader.offsetHeight : null }; store.states.columns.value.forEach((column) => { if (column.filteredValue && column.filteredValue.length) { table.store.commit("filterChange", { column, values: column.filteredValue, silent: true }); } }); table.$ready = true; }); const setScrollClassByEl = (el, className) => { if (!el) return; const classList = Array.from(el.classList).filter((item) => !item.startsWith("is-scrolling-")); classList.push(layout.scrollX.value ? className : "is-scrolling-none"); el.className = classList.join(" "); }; const setScrollClass = (className) => { const { tableWrapper } = table.refs; setScrollClassByEl(tableWrapper, className); }; const hasScrollClass = (className) => { const { tableWrapper } = table.refs; return !!(tableWrapper && tableWrapper.classList.contains(className)); }; const syncPosition = function() { if (!table.refs.scrollBarRef) return; if (!layout.scrollX.value) { const scrollingNoneClass = "is-scrolling-none"; if (!hasScrollClass(scrollingNoneClass)) { setScrollClass(scrollingNoneClass); } return; } const scrollContainer = table.refs.scrollBarRef.wrapRef; if (!scrollContainer) return; const { scrollLeft, offsetWidth, scrollWidth } = scrollContainer; const { headerWrapper, footerWrapper } = table.refs; if (headerWrapper) headerWrapper.scrollLeft = scrollLeft; if (footerWrapper) footerWrapper.scrollLeft = scrollLeft; const maxScrollLeftPosition = scrollWidth - offsetWidth - 1; if (scrollLeft >= maxScrollLeftPosition) { setScrollClass("is-scrolling-right"); } else if (scrollLeft === 0) { setScrollClass("is-scrolling-left"); } else { setScrollClass("is-scrolling-middle"); } }; const bindEvents = () => { if (!table.refs.scrollBarRef) return; if (table.refs.scrollBarRef.wrapRef) { useEventListener(table.refs.scrollBarRef.wrapRef, "scroll", syncPosition, { passive: true }); } if (props.fit) { useResizeObserver(table.vnode.el, resizeListener); } else { useEventListener(window, "resize", resizeListener); } useResizeObserver(table.refs.bodyWrapper, () => { var _a2, _b; resizeListener(); (_b = (_a2 = table.refs) == null ? void 0 : _a2.scrollBarRef) == null ? void 0 : _b.update(); }); }; const resizeListener = () => { var _a2, _b, _c, _d; const el = table.vnode.el; if (!table.$ready || !el) return; let shouldUpdateLayout = false; const { width: oldWidth, height: oldHeight, headerHeight: oldHeaderHeight } = resizeState.value; const width = tableWidth.value = el.offsetWidth; if (oldWidth !== width) { shouldUpdateLayout = true; } const height = el.offsetHeight; if ((props.height || shouldUpdateHeight.value) && oldHeight !== height) { shouldUpdateLayout = true; } const tableHeader = props.tableLayout === "fixed" ? table.refs.headerWrapper : (_a2 = table.refs.tableHeaderRef) == null ? void 0 : _a2.$el; if (props.showHeader && (tableHeader == null ? void 0 : tableHeader.offsetHeight) !== oldHeaderHeight) { shouldUpdateLayout = true; } tableScrollHeight.value = ((_b = table.refs.tableWrapper) == null ? void 0 : _b.scrollHeight) || 0; headerScrollHeight.value = (tableHeader == null ? void 0 : tableHeader.scrollHeight) || 0; footerScrollHeight.value = ((_c = table.refs.footerWrapper) == null ? void 0 : _c.offsetHeight) || 0; appendScrollHeight.value = ((_d = table.refs.appendWrapper) == null ? void 0 : _d.offsetHeight) || 0; bodyScrollHeight.value = tableScrollHeight.value - headerScrollHeight.value - footerScrollHeight.value - appendScrollHeight.value; if (shouldUpdateLayout) { resizeState.value = { width, height, headerHeight: props.showHeader && (tableHeader == null ? void 0 : tableHeader.offsetHeight) || 0 }; doLayout(); } }; const tableSize = useFormSize(); const bodyWidth = vue.computed(() => { const { bodyWidth: bodyWidth_, scrollY, gutterWidth } = layout; return bodyWidth_.value ? `${bodyWidth_.value - (scrollY.value ? gutterWidth : 0)}px` : ""; }); const tableLayout = vue.computed(() => { if (props.maxHeight) return "fixed"; return props.tableLayout; }); const emptyBlockStyle = vue.computed(() => { if (props.data && props.data.length) return null; let height = "100%"; if (props.height && bodyScrollHeight.value) { height = `${bodyScrollHeight.value}px`; } const width = tableWidth.value; return { width: width ? `${width}px` : "", height }; }); const scrollbarStyle = vue.computed(() => { if (props.height) { return { height: "100%" }; } if (props.maxHeight) { if (!Number.isNaN(Number(props.maxHeight))) { return { maxHeight: `${props.maxHeight - headerScrollHeight.value - footerScrollHeight.value}px` }; } else { return { maxHeight: `calc(${props.maxHeight} - ${headerScrollHeight.value + footerScrollHeight.value}px)` }; } } return {}; }); const handleFixedMousewheel = (event, data) => { const bodyWrapper = table.refs.bodyWrapper; if (Math.abs(data.spinY) > 0) { const currentScrollTop = bodyWrapper.scrollTop; if (data.pixelY < 0 && currentScrollTop !== 0) { event.preventDefault(); } if (data.pixelY > 0 && bodyWrapper.scrollHeight - bodyWrapper.clientHeight > currentScrollTop) { event.preventDefault(); } bodyWrapper.scrollTop += Math.ceil(data.pixelY / 5); } else { bodyWrapper.scrollLeft += Math.ceil(data.pixelX / 5); } }; return { isHidden: isHidden2, renderExpanded, setDragVisible, isGroup, handleMouseLeave, handleHeaderFooterMousewheel, tableSize, emptyBlockStyle, handleFixedMousewheel, resizeProxyVisible, bodyWidth, resizeState, doLayout, tableBodyStyles, tableLayout, scrollbarViewStyle, scrollbarStyle }; } function useKeyRender(table) { const observer = vue.ref(); const initWatchDom = () => { const el = table.vnode.el; const columnsWrapper = el.querySelector(".hidden-columns"); const config = { childList: true, subtree: true }; const updateOrderFns = table.store.states.updateOrderFns; observer.value = new MutationObserver(() => { updateOrderFns.forEach((fn2) => fn2()); }); observer.value.observe(columnsWrapper, config); }; vue.onMounted(() => { initWatchDom(); }); vue.onUnmounted(() => { var _a2; (_a2 = observer.value) == null ? void 0 : _a2.disconnect(); }); } var defaultProps$1 = { data: { type: Array, default: () => [] }, size: useSizeProp, width: [String, Number], height: [String, Number], maxHeight: [String, Number], fit: { type: Boolean, default: true }, stripe: Boolean, border: Boolean, rowKey: [String, Function], showHeader: { type: Boolean, default: true }, showSummary: Boolean, sumText: String, summaryMethod: Function, rowClassName: [String, Function], rowStyle: [Object, Function], cellClassName: [String, Function], cellStyle: [Object, Function], headerRowClassName: [String, Function], headerRowStyle: [Object, Function], headerCellClassName: [String, Function], headerCellStyle: [Object, Function], highlightCurrentRow: Boolean, currentRowKey: [String, Number], emptyText: String, expandRowKeys: Array, defaultExpandAll: Boolean, defaultSort: Object, tooltipEffect: String, tooltipOptions: Object, spanMethod: Function, selectOnIndeterminate: { type: Boolean, default: true }, indent: { type: Number, default: 16 }, treeProps: { type: Object, default: () => { return { hasChildren: "hasChildren", children: "children", checkStrictly: false }; } }, lazy: Boolean, load: Function, style: { type: Object, default: () => ({}) }, className: { type: String, default: "" }, tableLayout: { type: String, default: "fixed" }, scrollbarAlwaysOn: Boolean, flexible: Boolean, showOverflowTooltip: [Boolean, Object], tooltipFormatter: Function, appendFilterPanelTo: String, scrollbarTabindex: { type: [Number, String], default: void 0 }, allowDragLastColumn: { type: Boolean, default: true }, preserveExpandedContent: { type: Boolean, default: false } }; function hColgroup(props) { const isAuto = props.tableLayout === "auto"; let columns = props.columns || []; if (isAuto) { if (columns.every(({ width }) => isUndefined(width))) { columns = []; } } const getPropsData = (column) => { const propsData = { key: `${props.tableLayout}_${column.id}`, style: {}, name: void 0 }; if (isAuto) { propsData.style = { width: `${column.width}px` }; } else { propsData.name = column.id; } return propsData; }; return vue.h("colgroup", {}, columns.map((column) => vue.h("col", getPropsData(column)))); } hColgroup.props = ["columns", "tableLayout"]; const useScrollbar = () => { const scrollBarRef = vue.ref(); const scrollTo = (options, yCoord) => { const scrollbar = scrollBarRef.value; if (scrollbar) { scrollbar.scrollTo(options, yCoord); } }; const setScrollPosition = (position, offset) => { const scrollbar = scrollBarRef.value; if (scrollbar && isNumber(offset) && ["Top", "Left"].includes(position)) { scrollbar[`setScroll${position}`](offset); } }; const setScrollTop = (top) => setScrollPosition("Top", top); const setScrollLeft = (left) => setScrollPosition("Left", left); return { scrollBarRef, scrollTo, setScrollTop, setScrollLeft }; }; var v = false, o, f, s, u, d, N, l, p, m, w, D, x, E, M, F; function a() { if (!v) { v = true; var e = navigator.userAgent, n = /(?:MSIE.(\d+\.\d+))|(?:(?:Firefox|GranParadiso|Iceweasel).(\d+\.\d+))|(?:Opera(?:.+Version.|.)(\d+\.\d+))|(?:AppleWebKit.(\d+(?:\.\d+)?))|(?:Trident\/\d+\.\d+.*rv:(\d+\.\d+))/.exec(e), i = /(Mac OS X)|(Windows)|(Linux)/.exec(e); if (x = /\b(iPhone|iP[ao]d)/.exec(e), E = /\b(iP[ao]d)/.exec(e), w = /Android/i.exec(e), M = /FBAN\/\w+;/i.exec(e), F = /Mobile/i.exec(e), D = !!/Win64/.exec(e), n) { o = n[1] ? parseFloat(n[1]) : n[5] ? parseFloat(n[5]) : NaN, o && document && document.documentMode && (o = document.documentMode); var r = /(?:Trident\/(\d+.\d+))/.exec(e); N = r ? parseFloat(r[1]) + 4 : o, f = n[2] ? parseFloat(n[2]) : NaN, s = n[3] ? parseFloat(n[3]) : NaN, u = n[4] ? parseFloat(n[4]) : NaN, u ? (n = /(?:Chrome\/(\d+\.\d+))/.exec(e), d = n && n[1] ? parseFloat(n[1]) : NaN) : d = NaN; } else o = f = s = d = u = NaN; if (i) { if (i[1]) { var t = /(?:Mac OS X (\d+(?:[._]\d+)?))/.exec(e); l = t ? parseFloat(t[1].replace("_", ".")) : true; } else l = false; p = !!i[2], m = !!i[3]; } else l = p = m = false; } } var _ = { ie: function() { return a() || o; }, ieCompatibilityMode: function() { return a() || N > o; }, ie64: function() { return _.ie() && D; }, firefox: function() { return a() || f; }, opera: function() { return a() || s; }, webkit: function() { return a() || u; }, safari: function() { return _.webkit(); }, chrome: function() { return a() || d; }, windows: function() { return a() || p; }, osx: function() { return a() || l; }, linux: function() { return a() || m; }, iphone: function() { return a() || x; }, mobile: function() { return a() || x || E || w || F; }, nativeApp: function() { return a() || M; }, android: function() { return a() || w; }, ipad: function() { return a() || E; } }, A = _; var c = !!(typeof window < "u" && window.document && window.document.createElement), U = { canUseDOM: c }, h = U; var X; h.canUseDOM && (X = document.implementation && document.implementation.hasFeature && document.implementation.hasFeature("", "") !== true); function S(e, n) { if (!h.canUseDOM || n && !("addEventListener" in document)) return false; var i = "on" + e, r = i in document; if (!r) { var t = document.createElement("div"); t.setAttribute(i, "return;"), r = typeof t[i] == "function"; } return !r && X && e === "wheel" && (r = document.implementation.hasFeature("Events.wheel", "3.0")), r; } var b = S; var O = 10, I = 40, P = 800; function T(e) { var n = 0, i = 0, r = 0, t = 0; return "detail" in e && (i = e.detail), "wheelDelta" in e && (i = -e.wheelDelta / 120), "wheelDeltaY" in e && (i = -e.wheelDeltaY / 120), "wheelDeltaX" in e && (n = -e.wheelDeltaX / 120), "axis" in e && e.axis === e.HORIZONTAL_AXIS && (n = i, i = 0), r = n * O, t = i * O, "deltaY" in e && (t = e.deltaY), "deltaX" in e && (r = e.deltaX), (r || t) && e.deltaMode && (e.deltaMode == 1 ? (r *= I, t *= I) : (r *= P, t *= P)), r && !n && (n = r < 1 ? -1 : 1), t && !i && (i = t < 1 ? -1 : 1), { spinX: n, spinY: i, pixelX: r, pixelY: t }; } T.getEventType = function() { return A.firefox() ? "DOMMouseScroll" : b("wheel") ? "wheel" : "mousewheel"; }; var Y = T; /** * Checks if an event is supported in the current execution environment. * * NOTE: This will not work correctly for non-generic events such as `change`, * `reset`, `load`, `error`, and `select`. * * Borrows from Modernizr. * * @param {string} eventNameSuffix Event name, e.g. "click". * @param {?boolean} capture Check if the capture phase is supported. * @return {boolean} True if the event is supported. * @internal * @license Modernizr 3.0.0pre (Custom Build) | MIT */ const mousewheel = function(element, callback) { if (element && element.addEventListener) { const fn2 = function(event) { const normalized = Y(event); callback && Reflect.apply(callback, this, [event, normalized]); }; element.addEventListener("wheel", fn2, { passive: true }); } }; const Mousewheel = { beforeMount(el, binding) { mousewheel(el, binding.value); } }; let tableIdSeed = 1; const _sfc_main$f = vue.defineComponent({ name: "ElTable", directives: { Mousewheel }, components: { TableHeader, TableBody, TableFooter, ElScrollbar, hColgroup }, props: defaultProps$1, emits: [ "select", "select-all", "selection-change", "cell-mouse-enter", "cell-mouse-leave", "cell-contextmenu", "cell-click", "cell-dblclick", "row-click", "row-contextmenu", "row-dblclick", "header-click", "header-contextmenu", "sort-change", "filter-change", "current-change", "header-dragend", "expand-change", "scroll" ], setup(props) { const { t } = useLocale(); const ns = useNamespace("table"); const table = vue.getCurrentInstance(); vue.provide(TABLE_INJECTION_KEY, table); const store = createStore(table, props); table.store = store; const layout = new TableLayout({ store: table.store, table, fit: props.fit, showHeader: props.showHeader }); table.layout = layout; const isEmpty = vue.computed(() => (store.states.data.value || []).length === 0); const { setCurrentRow, getSelectionRows, toggleRowSelection, clearSelection, clearFilter, toggleAllSelection, toggleRowExpansion, clearSort, sort, updateKeyChildren } = useUtils(store); const { isHidden: isHidden2, renderExpanded, setDragVisible, isGroup, handleMouseLeave, handleHeaderFooterMousewheel, tableSize, emptyBlockStyle, handleFixedMousewheel, resizeProxyVisible, bodyWidth, resizeState, doLayout, tableBodyStyles, tableLayout, scrollbarViewStyle, scrollbarStyle } = useStyle(props, layout, store, table); const { scrollBarRef, scrollTo, setScrollLeft, setScrollTop } = useScrollbar(); const debouncedUpdateLayout = debounce(doLayout, 50); const tableId = `${ns.namespace.value}-table_${tableIdSeed++}`; table.tableId = tableId; table.state = { isGroup, resizeState, doLayout, debouncedUpdateLayout }; const computedSumText = vue.computed(() => { var _a2; return (_a2 = props.sumText) != null ? _a2 : t("el.table.sumText"); }); const computedEmptyText = vue.computed(() => { var _a2; return (_a2 = props.emptyText) != null ? _a2 : t("el.table.emptyText"); }); const columns = vue.computed(() => { return convertToRows(store.states.originColumns.value)[0]; }); useKeyRender(table); vue.onBeforeUnmount(() => { debouncedUpdateLayout.cancel(); }); return { ns, layout, store, columns, handleHeaderFooterMousewheel, handleMouseLeave, tableId, tableSize, isHidden: isHidden2, isEmpty, renderExpanded, resizeProxyVisible, resizeState, isGroup, bodyWidth, tableBodyStyles, emptyBlockStyle, debouncedUpdateLayout, handleFixedMousewheel, setCurrentRow, getSelectionRows, toggleRowSelection, clearSelection, clearFilter, toggleAllSelection, toggleRowExpansion, clearSort, doLayout, sort, updateKeyChildren, t, setDragVisible, context: table, computedSumText, computedEmptyText, tableLayout, scrollbarViewStyle, scrollbarStyle, scrollBarRef, scrollTo, setScrollLeft, setScrollTop, allowDragLastColumn: props.allowDragLastColumn }; } }); function _sfc_render$1(_ctx, _cache, $props, $setup, $data, $options) { const _component_hColgroup = vue.resolveComponent("hColgroup"); const _component_table_header = vue.resolveComponent("table-header"); const _component_table_body = vue.resolveComponent("table-body"); const _component_table_footer = vue.resolveComponent("table-footer"); const _component_el_scrollbar = vue.resolveComponent("el-scrollbar"); const _directive_mousewheel = vue.resolveDirective("mousewheel"); return vue.openBlock(), vue.createElementBlock("div", { ref: "tableWrapper", class: vue.normalizeClass([ { [_ctx.ns.m("fit")]: _ctx.fit, [_ctx.ns.m("striped")]: _ctx.stripe, [_ctx.ns.m("border")]: _ctx.border || _ctx.isGroup, [_ctx.ns.m("hidden")]: _ctx.isHidden, [_ctx.ns.m("group")]: _ctx.isGroup, [_ctx.ns.m("fluid-height")]: _ctx.maxHeight, [_ctx.ns.m("scrollable-x")]: _ctx.layout.scrollX.value, [_ctx.ns.m("scrollable-y")]: _ctx.layout.scrollY.value, [_ctx.ns.m("enable-row-hover")]: !_ctx.store.states.isComplex.value, [_ctx.ns.m("enable-row-transition")]: (_ctx.store.states.data.value || []).length !== 0 && (_ctx.store.states.data.value || []).length < 100, "has-footer": _ctx.showSummary }, _ctx.ns.m(_ctx.tableSize), _ctx.className, _ctx.ns.b(), _ctx.ns.m(`layout-${_ctx.tableLayout}`) ]), style: vue.normalizeStyle(_ctx.style), "data-prefix": _ctx.ns.namespace.value, onMouseleave: _ctx.handleMouseLeave }, [ vue.createElementVNode("div", { class: vue.normalizeClass(_ctx.ns.e("inner-wrapper")) }, [ vue.createElementVNode("div", { ref: "hiddenColumns", class: "hidden-columns" }, [ vue.renderSlot(_ctx.$slots, "default") ], 512), _ctx.showHeader && _ctx.tableLayout === "fixed" ? vue.withDirectives((vue.openBlock(), vue.createElementBlock("div", { key: 0, ref: "headerWrapper", class: vue.normalizeClass(_ctx.ns.e("header-wrapper")) }, [ vue.createElementVNode("table", { ref: "tableHeader", class: vue.normalizeClass(_ctx.ns.e("header")), style: vue.normalizeStyle(_ctx.tableBodyStyles), border: "0", cellpadding: "0", cellspacing: "0" }, [ vue.createVNode(_component_hColgroup, { columns: _ctx.store.states.columns.value, "table-layout": _ctx.tableLayout }, null, 8, ["columns", "table-layout"]), vue.createVNode(_component_table_header, { ref: "tableHeaderRef", border: _ctx.border, "default-sort": _ctx.defaultSort, store: _ctx.store, "append-filter-panel-to": _ctx.appendFilterPanelTo, "allow-drag-last-column": _ctx.allowDragLastColumn, onSetDragVisible: _ctx.setDragVisible }, null, 8, ["border", "default-sort", "store", "append-filter-panel-to", "allow-drag-last-column", "onSetDragVisible"]) ], 6) ], 2)), [ [_directive_mousewheel, _ctx.handleHeaderFooterMousewheel] ]) : vue.createCommentVNode("v-if", true), vue.createElementVNode("div", { ref: "bodyWrapper", class: vue.normalizeClass(_ctx.ns.e("body-wrapper")) }, [ vue.createVNode(_component_el_scrollbar, { ref: "scrollBarRef", "view-style": _ctx.scrollbarViewStyle, "wrap-style": _ctx.scrollbarStyle, always: _ctx.scrollbarAlwaysOn, tabindex: _ctx.scrollbarTabindex, onScroll: ($event) => _ctx.$emit("scroll", $event) }, { default: vue.withCtx(() => [ vue.createElementVNode("table", { ref: "tableBody", class: vue.normalizeClass(_ctx.ns.e("body")), cellspacing: "0", cellpadding: "0", border: "0", style: vue.normalizeStyle({ width: _ctx.bodyWidth, tableLayout: _ctx.tableLayout }) }, [ vue.createVNode(_component_hColgroup, { columns: _ctx.store.states.columns.value, "table-layout": _ctx.tableLayout }, null, 8, ["columns", "table-layout"]), _ctx.showHeader && _ctx.tableLayout === "auto" ? (vue.openBlock(), vue.createBlock(_component_table_header, { key: 0, ref: "tableHeaderRef", class: vue.normalizeClass(_ctx.ns.e("body-header")), border: _ctx.border, "default-sort": _ctx.defaultSort, store: _ctx.store, "append-filter-panel-to": _ctx.appendFilterPanelTo, onSetDragVisible: _ctx.setDragVisible }, null, 8, ["class", "border", "default-sort", "store", "append-filter-panel-to", "onSetDragVisible"])) : vue.createCommentVNode("v-if", true), vue.createVNode(_component_table_body, { context: _ctx.context, highlight: _ctx.highlightCurrentRow, "row-class-name": _ctx.rowClassName, "tooltip-effect": _ctx.tooltipEffect, "tooltip-options": _ctx.tooltipOptions, "row-style": _ctx.rowStyle, store: _ctx.store, stripe: _ctx.stripe }, null, 8, ["context", "highlight", "row-class-name", "tooltip-effect", "tooltip-options", "row-style", "store", "stripe"]), _ctx.showSummary && _ctx.tableLayout === "auto" ? (vue.openBlock(), vue.createBlock(_component_table_footer, { key: 1, class: vue.normalizeClass(_ctx.ns.e("body-footer")), border: _ctx.border, "default-sort": _ctx.defaultSort, store: _ctx.store, "sum-text": _ctx.computedSumText, "summary-method": _ctx.summaryMethod }, null, 8, ["class", "border", "default-sort", "store", "sum-text", "summary-method"])) : vue.createCommentVNode("v-if", true) ], 6), _ctx.isEmpty ? (vue.openBlock(), vue.createElementBlock("div", { key: 0, ref: "emptyBlock", style: vue.normalizeStyle(_ctx.emptyBlockStyle), class: vue.normalizeClass(_ctx.ns.e("empty-block")) }, [ vue.createElementVNode("span", { class: vue.normalizeClass(_ctx.ns.e("empty-text")) }, [ vue.renderSlot(_ctx.$slots, "empty", {}, () => [ vue.createTextVNode(vue.toDisplayString(_ctx.computedEmptyText), 1) ]) ], 2) ], 6)) : vue.createCommentVNode("v-if", true), _ctx.$slots.append ? (vue.openBlock(), vue.createElementBlock("div", { key: 1, ref: "appendWrapper", class: vue.normalizeClass(_ctx.ns.e("append-wrapper")) }, [ vue.renderSlot(_ctx.$slots, "append") ], 2)) : vue.createCommentVNode("v-if", true) ]), _: 3 }, 8, ["view-style", "wrap-style", "always", "tabindex", "onScroll"]) ], 2), _ctx.showSummary && _ctx.tableLayout === "fixed" ? vue.withDirectives((vue.openBlock(), vue.createElementBlock("div", { key: 1, ref: "footerWrapper", class: vue.normalizeClass(_ctx.ns.e("footer-wrapper")) }, [ vue.createElementVNode("table", { class: vue.normalizeClass(_ctx.ns.e("footer")), cellspacing: "0", cellpadding: "0", border: "0", style: vue.normalizeStyle(_ctx.tableBodyStyles) }, [ vue.createVNode(_component_hColgroup, { columns: _ctx.store.states.columns.value, "table-layout": _ctx.tableLayout }, null, 8, ["columns", "table-layout"]), vue.createVNode(_component_table_footer, { border: _ctx.border, "default-sort": _ctx.defaultSort, store: _ctx.store, "sum-text": _ctx.computedSumText, "summary-method": _ctx.summaryMethod }, null, 8, ["border", "default-sort", "store", "sum-text", "summary-method"]) ], 6) ], 2)), [ [vue.vShow, !_ctx.isEmpty], [_directive_mousewheel, _ctx.handleHeaderFooterMousewheel] ]) : vue.createCommentVNode("v-if", true), _ctx.border || _ctx.isGroup ? (vue.openBlock(), vue.createElementBlock("div", { key: 2, class: vue.normalizeClass(_ctx.ns.e("border-left-patch")) }, null, 2)) : vue.createCommentVNode("v-if", true) ], 2), vue.withDirectives(vue.createElementVNode("div", { ref: "resizeProxy", class: vue.normalizeClass(_ctx.ns.e("column-resize-proxy")) }, null, 2), [ [vue.vShow, _ctx.resizeProxyVisible] ]) ], 46, ["data-prefix", "onMouseleave"]); } var Table = /* @__PURE__ */ _export_sfc$1(_sfc_main$f, [["render", _sfc_render$1], ["__file", "table.vue"]]); const defaultClassNames = { selection: "table-column--selection", expand: "table__expand-column" }; const cellStarts = { default: { order: "" }, selection: { width: 48, minWidth: 48, realWidth: 48, order: "" }, expand: { width: 48, minWidth: 48, realWidth: 48, order: "" }, index: { width: 48, minWidth: 48, realWidth: 48, order: "" } }; const getDefaultClassName = (type) => { return defaultClassNames[type] || ""; }; const cellForced = { selection: { renderHeader({ store, column }) { function isDisabled() { return store.states.data.value && store.states.data.value.length === 0; } return vue.h(ElCheckbox, { disabled: isDisabled(), size: store.states.tableSize.value, indeterminate: store.states.selection.value.length > 0 && !store.states.isAllSelected.value, "onUpdate:modelValue": store.toggleAllSelection, modelValue: store.states.isAllSelected.value, ariaLabel: column.label }); }, renderCell({ row, column, store, $index }) { return vue.h(ElCheckbox, { disabled: column.selectable ? !column.selectable.call(null, row, $index) : false, size: store.states.tableSize.value, onChange: () => { store.commit("rowSelectedChanged", row); }, onClick: (event) => event.stopPropagation(), modelValue: store.isSelected(row), ariaLabel: column.label }); }, sortable: false, resizable: false }, index: { renderHeader({ column }) { return column.label || "#"; }, renderCell({ column, $index }) { let i = $index + 1; const index = column.index; if (isNumber(index)) { i = $index + index; } else if (isFunction$1(index)) { i = index($index); } return vue.h("div", {}, [i]); }, sortable: false }, expand: { renderHeader({ column }) { return column.label || ""; }, renderCell({ row, store, expanded }) { const { ns } = store; const classes = [ns.e("expand-icon")]; if (expanded) { classes.push(ns.em("expand-icon", "expanded")); } const callback = function(e) { e.stopPropagation(); store.toggleRowExpansion(row); }; return vue.h("div", { class: classes, onClick: callback }, { default: () => { return [ vue.h(ElIcon, null, { default: () => { return [vue.h(arrow_right_default)]; } }) ]; } }); }, sortable: false, resizable: false } }; function defaultRenderCell({ row, column, $index }) { var _a2; const property2 = column.property; const value = property2 && getProp(row, property2).value; if (column && column.formatter) { return column.formatter(row, column, value, $index); } return ((_a2 = value == null ? void 0 : value.toString) == null ? void 0 : _a2.call(value)) || ""; } function treeCellPrefix({ row, treeNode, store }, createPlaceholder = false) { const { ns } = store; if (!treeNode) { if (createPlaceholder) { return [ vue.h("span", { class: ns.e("placeholder") }) ]; } return null; } const ele = []; const callback = function(e) { e.stopPropagation(); if (treeNode.loading) { return; } store.loadOrToggle(row); }; if (treeNode.indent) { ele.push(vue.h("span", { class: ns.e("indent"), style: { "padding-left": `${treeNode.indent}px` } })); } if (isBoolean(treeNode.expanded) && !treeNode.noLazyChildren) { const expandClasses = [ ns.e("expand-icon"), treeNode.expanded ? ns.em("expand-icon", "expanded") : "" ]; let icon2 = arrow_right_default; if (treeNode.loading) { icon2 = loading_default; } ele.push(vue.h("div", { class: expandClasses, onClick: callback }, { default: () => { return [ vue.h(ElIcon, { class: { [ns.is("loading")]: treeNode.loading } }, { default: () => [vue.h(icon2)] }) ]; } })); } else { ele.push(vue.h("span", { class: ns.e("placeholder") })); } return ele; } function getAllAliases(props, aliases) { return props.reduce((prev, cur) => { prev[cur] = cur; return prev; }, aliases); } function useWatcher(owner, props_) { const instance = vue.getCurrentInstance(); const registerComplexWatchers = () => { const props = ["fixed"]; const aliases = { realWidth: "width", realMinWidth: "minWidth" }; const allAliases = getAllAliases(props, aliases); Object.keys(allAliases).forEach((key) => { const columnKey = aliases[key]; if (hasOwn(props_, columnKey)) { vue.watch(() => props_[columnKey], (newVal) => { let value = newVal; if (columnKey === "width" && key === "realWidth") { value = parseWidth(newVal); } if (columnKey === "minWidth" && key === "realMinWidth") { value = parseMinWidth(newVal); } instance.columnConfig.value[columnKey] = value; instance.columnConfig.value[key] = value; const updateColumns = columnKey === "fixed"; owner.value.store.scheduleLayout(updateColumns); }); } }); }; const registerNormalWatchers = () => { const props = [ "label", "filters", "filterMultiple", "filteredValue", "sortable", "index", "formatter", "className", "labelClassName", "filterClassName", "showOverflowTooltip", "tooltipFormatter" ]; const aliases = { property: "prop", align: "realAlign", headerAlign: "realHeaderAlign" }; const allAliases = getAllAliases(props, aliases); Object.keys(allAliases).forEach((key) => { const columnKey = aliases[key]; if (hasOwn(props_, columnKey)) { vue.watch(() => props_[columnKey], (newVal) => { instance.columnConfig.value[key] = newVal; }); } }); }; return { registerComplexWatchers, registerNormalWatchers }; } function useRender(props, slots, owner) { const instance = vue.getCurrentInstance(); const columnId = vue.ref(""); const isSubColumn = vue.ref(false); const realAlign = vue.ref(); const realHeaderAlign = vue.ref(); const ns = useNamespace("table"); vue.watchEffect(() => { realAlign.value = props.align ? `is-${props.align}` : null; realAlign.value; }); vue.watchEffect(() => { realHeaderAlign.value = props.headerAlign ? `is-${props.headerAlign}` : realAlign.value; realHeaderAlign.value; }); const columnOrTableParent = vue.computed(() => { let parent = instance.vnode.vParent || instance.parent; while (parent && !parent.tableId && !parent.columnId) { parent = parent.vnode.vParent || parent.parent; } return parent; }); const hasTreeColumn = vue.computed(() => { const { store } = instance.parent; if (!store) return false; const { treeData } = store.states; const treeDataValue = treeData.value; return treeDataValue && Object.keys(treeDataValue).length > 0; }); const realWidth = vue.ref(parseWidth(props.width)); const realMinWidth = vue.ref(parseMinWidth(props.minWidth)); const setColumnWidth = (column) => { if (realWidth.value) column.width = realWidth.value; if (realMinWidth.value) { column.minWidth = realMinWidth.value; } if (!realWidth.value && realMinWidth.value) { column.width = void 0; } if (!column.minWidth) { column.minWidth = 80; } column.realWidth = Number(isUndefined(column.width) ? column.minWidth : column.width); return column; }; const setColumnForcedProps = (column) => { const type = column.type; const source = cellForced[type] || {}; Object.keys(source).forEach((prop) => { const value = source[prop]; if (prop !== "className" && !isUndefined(value)) { column[prop] = value; } }); const className = getDefaultClassName(type); if (className) { const forceClass = `${vue.unref(ns.namespace)}-${className}`; column.className = column.className ? `${column.className} ${forceClass}` : forceClass; } return column; }; const checkSubColumn = (children) => { if (isArray$1(children)) { children.forEach((child) => check(child)); } else { check(children); } function check(item) { var _a2; if (((_a2 = item == null ? void 0 : item.type) == null ? void 0 : _a2.name) === "ElTableColumn") { item.vParent = instance; } } }; const setColumnRenders = (column) => { if (props.renderHeader) ; else if (column.type !== "selection") { column.renderHeader = (scope) => { instance.columnConfig.value["label"]; return vue.renderSlot(slots, "header", scope, () => [column.label]); }; } if (slots["filter-icon"]) { column.renderFilterIcon = (scope) => { return vue.renderSlot(slots, "filter-icon", scope); }; } let originRenderCell = column.renderCell; if (column.type === "expand") { column.renderCell = (data) => vue.h("div", { class: "cell" }, [originRenderCell(data)]); owner.value.renderExpanded = (data) => { return slots.default ? slots.default(data) : slots.default; }; } else { originRenderCell = originRenderCell || defaultRenderCell; column.renderCell = (data) => { let children = null; if (slots.default) { const vnodes = slots.default(data); children = vnodes.some((v2) => v2.type !== vue.Comment) ? vnodes : originRenderCell(data); } else { children = originRenderCell(data); } const { columns } = owner.value.store.states; const firstUserColumnIndex = columns.value.findIndex((item) => item.type === "default"); const shouldCreatePlaceholder = hasTreeColumn.value && data.cellIndex === firstUserColumnIndex; const prefix = treeCellPrefix(data, shouldCreatePlaceholder); const props2 = { class: "cell", style: {} }; if (column.showOverflowTooltip) { props2.class = `${props2.class} ${vue.unref(ns.namespace)}-tooltip`; props2.style = { width: `${(data.column.realWidth || Number(data.column.width)) - 1}px` }; } checkSubColumn(children); return vue.h("div", props2, [prefix, children]); }; } return column; }; const getPropsData = (...propsKey) => { return propsKey.reduce((prev, cur) => { if (isArray$1(cur)) { cur.forEach((key) => { prev[key] = props[key]; }); } return prev; }, {}); }; const getColumnElIndex = (children, child) => { return Array.prototype.indexOf.call(children, child); }; const updateColumnOrder = () => { owner.value.store.commit("updateColumnOrder", instance.columnConfig.value); }; return { columnId, realAlign, isSubColumn, realHeaderAlign, columnOrTableParent, setColumnWidth, setColumnForcedProps, setColumnRenders, getPropsData, getColumnElIndex, updateColumnOrder }; } var defaultProps = { type: { type: String, default: "default" }, label: String, className: String, labelClassName: String, property: String, prop: String, width: { type: [String, Number], default: "" }, minWidth: { type: [String, Number], default: "" }, renderHeader: Function, sortable: { type: [Boolean, String], default: false }, sortMethod: Function, sortBy: [String, Function, Array], resizable: { type: Boolean, default: true }, columnKey: String, align: String, headerAlign: String, showOverflowTooltip: { type: [Boolean, Object], default: void 0 }, tooltipFormatter: Function, fixed: [Boolean, String], formatter: Function, selectable: Function, reserveSelection: Boolean, filterMethod: Function, filteredValue: Array, filters: Array, filterPlacement: String, filterMultiple: { type: Boolean, default: true }, filterClassName: String, index: [Number, Function], sortOrders: { type: Array, default: () => { return ["ascending", "descending", null]; }, validator: (val) => { return val.every((order) => ["ascending", "descending", null].includes(order)); } } }; let columnIdSeed = 1; var ElTableColumn$1 = vue.defineComponent({ name: "ElTableColumn", components: { ElCheckbox }, props: defaultProps, setup(props, { slots }) { const instance = vue.getCurrentInstance(); const columnConfig = vue.ref({}); const owner = vue.computed(() => { let parent2 = instance.parent; while (parent2 && !parent2.tableId) { parent2 = parent2.parent; } return parent2; }); const { registerNormalWatchers, registerComplexWatchers } = useWatcher(owner, props); const { columnId, isSubColumn, realHeaderAlign, columnOrTableParent, setColumnWidth, setColumnForcedProps, setColumnRenders, getPropsData, getColumnElIndex, realAlign, updateColumnOrder } = useRender(props, slots, owner); const parent = columnOrTableParent.value; columnId.value = `${parent.tableId || parent.columnId}_column_${columnIdSeed++}`; vue.onBeforeMount(() => { isSubColumn.value = owner.value !== parent; const type = props.type || "default"; const sortable = props.sortable === "" ? true : props.sortable; const showOverflowTooltip = type === "selection" ? false : isUndefined(props.showOverflowTooltip) ? parent.props.showOverflowTooltip : props.showOverflowTooltip; const tooltipFormatter = isUndefined(props.tooltipFormatter) ? parent.props.tooltipFormatter : props.tooltipFormatter; const defaults = { ...cellStarts[type], id: columnId.value, type, property: props.prop || props.property, align: realAlign, headerAlign: realHeaderAlign, showOverflowTooltip, tooltipFormatter, filterable: props.filters || props.filterMethod, filteredValue: [], filterPlacement: "", filterClassName: "", isColumnGroup: false, isSubColumn: false, filterOpened: false, sortable, index: props.index, rawColumnKey: instance.vnode.key }; const basicProps = [ "columnKey", "label", "className", "labelClassName", "type", "renderHeader", "formatter", "fixed", "resizable" ]; const sortProps = ["sortMethod", "sortBy", "sortOrders"]; const selectProps = ["selectable", "reserveSelection"]; const filterProps = [ "filterMethod", "filters", "filterMultiple", "filterOpened", "filteredValue", "filterPlacement", "filterClassName" ]; let column = getPropsData(basicProps, sortProps, selectProps, filterProps); column = mergeOptions(defaults, column); const chains = compose(setColumnRenders, setColumnWidth, setColumnForcedProps); column = chains(column); columnConfig.value = column; registerNormalWatchers(); registerComplexWatchers(); }); vue.onMounted(() => { var _a2; const parent2 = columnOrTableParent.value; const children = isSubColumn.value ? parent2.vnode.el.children : (_a2 = parent2.refs.hiddenColumns) == null ? void 0 : _a2.children; const getColumnIndex = () => getColumnElIndex(children || [], instance.vnode.el); columnConfig.value.getColumnIndex = getColumnIndex; const columnIndex = getColumnIndex(); columnIndex > -1 && owner.value.store.commit("insertColumn", columnConfig.value, isSubColumn.value ? parent2.columnConfig.value : null, updateColumnOrder); }); vue.onBeforeUnmount(() => { const getColumnIndex = columnConfig.value.getColumnIndex; const columnIndex = getColumnIndex ? getColumnIndex() : -1; columnIndex > -1 && owner.value.store.commit("removeColumn", columnConfig.value, isSubColumn.value ? parent.columnConfig.value : null, updateColumnOrder); }); instance.columnId = columnId.value; instance.columnConfig = columnConfig; return; }, render() { var _a2, _b, _c; try { const renderDefault = (_b = (_a2 = this.$slots).default) == null ? void 0 : _b.call(_a2, { row: {}, column: {}, $index: -1 }); const children = []; if (isArray$1(renderDefault)) { for (const childNode of renderDefault) { if (((_c = childNode.type) == null ? void 0 : _c.name) === "ElTableColumn" || childNode.shapeFlag & 2) { children.push(childNode); } else if (childNode.type === vue.Fragment && isArray$1(childNode.children)) { childNode.children.forEach((vnode2) => { if ((vnode2 == null ? void 0 : vnode2.patchFlag) !== 1024 && !isString$1(vnode2 == null ? void 0 : vnode2.children)) { children.push(vnode2); } }); } } } const vnode = vue.h("div", children); return vnode; } catch (e) { return vue.h("div", []); } } }); const ElTable = withInstall(Table, { TableColumn: ElTableColumn$1 }); const ElTableColumn = withNoopInstall(ElTableColumn$1); const tabsRootContextKey = Symbol("tabsRootContextKey"); const tabBarProps = buildProps({ tabs: { type: definePropType(Array), default: () => mutable([]) } }); const COMPONENT_NAME$2 = "ElTabBar"; const __default__$2 = vue.defineComponent({ name: COMPONENT_NAME$2 }); const _sfc_main$e = /* @__PURE__ */ vue.defineComponent({ ...__default__$2, props: tabBarProps, setup(__props, { expose }) { const props = __props; const instance = vue.getCurrentInstance(); const rootTabs = vue.inject(tabsRootContextKey); if (!rootTabs) throwError(COMPONENT_NAME$2, ""); const ns = useNamespace("tabs"); const barRef = vue.ref(); const barStyle = vue.ref(); const getBarStyle = () => { let offset = 0; let tabSize = 0; const sizeName = ["top", "bottom"].includes(rootTabs.props.tabPosition) ? "width" : "height"; const sizeDir = sizeName === "width" ? "x" : "y"; const position = sizeDir === "x" ? "left" : "top"; props.tabs.every((tab) => { var _a2, _b; const $el = (_b = (_a2 = instance.parent) == null ? void 0 : _a2.refs) == null ? void 0 : _b[`tab-${tab.uid}`]; if (!$el) return false; if (!tab.active) { return true; } offset = $el[`offset${capitalize(position)}`]; tabSize = $el[`client${capitalize(sizeName)}`]; const tabStyles = window.getComputedStyle($el); if (sizeName === "width") { tabSize -= Number.parseFloat(tabStyles.paddingLeft) + Number.parseFloat(tabStyles.paddingRight); offset += Number.parseFloat(tabStyles.paddingLeft); } return false; }); return { [sizeName]: `${tabSize}px`, transform: `translate${capitalize(sizeDir)}(${offset}px)` }; }; const update = () => barStyle.value = getBarStyle(); const saveObserver = []; const observerTabs = () => { var _a2; saveObserver.forEach((observer) => observer.stop()); saveObserver.length = 0; const list = (_a2 = instance.parent) == null ? void 0 : _a2.refs; if (!list) return; for (const key in list) { if (key.startsWith("tab-")) { const _el = list[key]; if (_el) { saveObserver.push(useResizeObserver(_el, update)); } } } }; vue.watch(() => props.tabs, async () => { await vue.nextTick(); update(); observerTabs(); }, { immediate: true }); const barObserever = useResizeObserver(barRef, () => update()); vue.onBeforeUnmount(() => { saveObserver.forEach((observer) => observer.stop()); saveObserver.length = 0; barObserever.stop(); }); expose({ ref: barRef, update }); return (_ctx, _cache) => { return vue.openBlock(), vue.createElementBlock("div", { ref_key: "barRef", ref: barRef, class: vue.normalizeClass([vue.unref(ns).e("active-bar"), vue.unref(ns).is(vue.unref(rootTabs).props.tabPosition)]), style: vue.normalizeStyle(barStyle.value) }, null, 6); }; } }); var TabBar = /* @__PURE__ */ _export_sfc$1(_sfc_main$e, [["__file", "tab-bar.vue"]]); const tabNavProps = buildProps({ panes: { type: definePropType(Array), default: () => mutable([]) }, currentName: { type: [String, Number], default: "" }, editable: Boolean, type: { type: String, values: ["card", "border-card", ""], default: "" }, stretch: Boolean }); const tabNavEmits = { tabClick: (tab, tabName, ev) => ev instanceof Event, tabRemove: (tab, ev) => ev instanceof Event }; const COMPONENT_NAME$1 = "ElTabNav"; const TabNav = vue.defineComponent({ name: COMPONENT_NAME$1, props: tabNavProps, emits: tabNavEmits, setup(props, { expose, emit }) { const rootTabs = vue.inject(tabsRootContextKey); if (!rootTabs) throwError(COMPONENT_NAME$1, ``); const ns = useNamespace("tabs"); const visibility = useDocumentVisibility(); const focused = useWindowFocus(); const navScroll$ = vue.ref(); const nav$ = vue.ref(); const el$ = vue.ref(); const tabBarRef = vue.ref(); const scrollable = vue.ref(false); const navOffset = vue.ref(0); const isFocus = vue.ref(false); const focusable = vue.ref(true); const sizeName = vue.computed(() => ["top", "bottom"].includes(rootTabs.props.tabPosition) ? "width" : "height"); const navStyle = vue.computed(() => { const dir = sizeName.value === "width" ? "X" : "Y"; return { transform: `translate${dir}(-${navOffset.value}px)` }; }); const scrollPrev = () => { if (!navScroll$.value) return; const containerSize = navScroll$.value[`offset${capitalize(sizeName.value)}`]; const currentOffset = navOffset.value; if (!currentOffset) return; const newOffset = currentOffset > containerSize ? currentOffset - containerSize : 0; navOffset.value = newOffset; }; const scrollNext = () => { if (!navScroll$.value || !nav$.value) return; const navSize = nav$.value[`offset${capitalize(sizeName.value)}`]; const containerSize = navScroll$.value[`offset${capitalize(sizeName.value)}`]; const currentOffset = navOffset.value; if (navSize - currentOffset <= containerSize) return; const newOffset = navSize - currentOffset > containerSize * 2 ? currentOffset + containerSize : navSize - containerSize; navOffset.value = newOffset; }; const scrollToActiveTab = async () => { const nav = nav$.value; if (!scrollable.value || !el$.value || !navScroll$.value || !nav) return; await vue.nextTick(); const activeTab = el$.value.querySelector(".is-active"); if (!activeTab) return; const navScroll = navScroll$.value; const isHorizontal = ["top", "bottom"].includes(rootTabs.props.tabPosition); const activeTabBounding = activeTab.getBoundingClientRect(); const navScrollBounding = navScroll.getBoundingClientRect(); const maxOffset = isHorizontal ? nav.offsetWidth - navScrollBounding.width : nav.offsetHeight - navScrollBounding.height; const currentOffset = navOffset.value; let newOffset = currentOffset; if (isHorizontal) { if (activeTabBounding.left < navScrollBounding.left) { newOffset = currentOffset - (navScrollBounding.left - activeTabBounding.left); } if (activeTabBounding.right > navScrollBounding.right) { newOffset = currentOffset + activeTabBounding.right - navScrollBounding.right; } } else { if (activeTabBounding.top < navScrollBounding.top) { newOffset = currentOffset - (navScrollBounding.top - activeTabBounding.top); } if (activeTabBounding.bottom > navScrollBounding.bottom) { newOffset = currentOffset + (activeTabBounding.bottom - navScrollBounding.bottom); } } newOffset = Math.max(newOffset, 0); navOffset.value = Math.min(newOffset, maxOffset); }; const update = () => { var _a2; if (!nav$.value || !navScroll$.value) return; props.stretch && ((_a2 = tabBarRef.value) == null ? void 0 : _a2.update()); const navSize = nav$.value[`offset${capitalize(sizeName.value)}`]; const containerSize = navScroll$.value[`offset${capitalize(sizeName.value)}`]; const currentOffset = navOffset.value; if (containerSize < navSize) { scrollable.value = scrollable.value || {}; scrollable.value.prev = currentOffset; scrollable.value.next = currentOffset + containerSize < navSize; if (navSize - currentOffset < containerSize) { navOffset.value = navSize - containerSize; } } else { scrollable.value = false; if (currentOffset > 0) { navOffset.value = 0; } } }; const changeTab = (event) => { let step = 0; switch (event.code) { case EVENT_CODE.left: case EVENT_CODE.up: step = -1; break; case EVENT_CODE.right: case EVENT_CODE.down: step = 1; break; default: return; } const tabList = Array.from(event.currentTarget.querySelectorAll("[role=tab]:not(.is-disabled)")); const currentIndex = tabList.indexOf(event.target); let nextIndex = currentIndex + step; if (nextIndex < 0) { nextIndex = tabList.length - 1; } else if (nextIndex >= tabList.length) { nextIndex = 0; } tabList[nextIndex].focus({ preventScroll: true }); tabList[nextIndex].click(); setFocus(); }; const setFocus = () => { if (focusable.value) isFocus.value = true; }; const removeFocus = () => isFocus.value = false; vue.watch(visibility, (visibility2) => { if (visibility2 === "hidden") { focusable.value = false; } else if (visibility2 === "visible") { setTimeout(() => focusable.value = true, 50); } }); vue.watch(focused, (focused2) => { if (focused2) { setTimeout(() => focusable.value = true, 50); } else { focusable.value = false; } }); useResizeObserver(el$, update); vue.onMounted(() => setTimeout(() => scrollToActiveTab(), 0)); vue.onUpdated(() => update()); expose({ scrollToActiveTab, removeFocus }); return () => { const scrollBtn = scrollable.value ? [vue.createVNode("span", { "class": [ns.e("nav-prev"), ns.is("disabled", !scrollable.value.prev)], "onClick": scrollPrev }, [vue.createVNode(ElIcon, null, { default: () => [vue.createVNode(arrow_left_default, null, null)] })]), vue.createVNode("span", { "class": [ns.e("nav-next"), ns.is("disabled", !scrollable.value.next)], "onClick": scrollNext }, [vue.createVNode(ElIcon, null, { default: () => [vue.createVNode(arrow_right_default, null, null)] })])] : null; const tabs = props.panes.map((pane, index) => { var _a2, _b, _c, _d; const uid = pane.uid; const disabled = pane.props.disabled; const tabName = (_b = (_a2 = pane.props.name) != null ? _a2 : pane.index) != null ? _b : `${index}`; const closable = !disabled && (pane.isClosable || props.editable); pane.index = `${index}`; const btnClose = closable ? vue.createVNode(ElIcon, { "class": "is-icon-close", "onClick": (ev) => emit("tabRemove", pane, ev) }, { default: () => [vue.createVNode(close_default, null, null)] }) : null; const tabLabelContent = ((_d = (_c = pane.slots).label) == null ? void 0 : _d.call(_c)) || pane.props.label; const tabindex = !disabled && pane.active ? 0 : -1; return vue.createVNode("div", { "ref": `tab-${uid}`, "class": [ns.e("item"), ns.is(rootTabs.props.tabPosition), ns.is("active", pane.active), ns.is("disabled", disabled), ns.is("closable", closable), ns.is("focus", isFocus.value)], "id": `tab-${tabName}`, "key": `tab-${uid}`, "aria-controls": `pane-${tabName}`, "role": "tab", "aria-selected": pane.active, "tabindex": tabindex, "onFocus": () => setFocus(), "onBlur": () => removeFocus(), "onClick": (ev) => { removeFocus(); emit("tabClick", pane, tabName, ev); }, "onKeydown": (ev) => { if (closable && (ev.code === EVENT_CODE.delete || ev.code === EVENT_CODE.backspace)) { emit("tabRemove", pane, ev); } } }, [...[tabLabelContent, btnClose]]); }); return vue.createVNode("div", { "ref": el$, "class": [ns.e("nav-wrap"), ns.is("scrollable", !!scrollable.value), ns.is(rootTabs.props.tabPosition)] }, [scrollBtn, vue.createVNode("div", { "class": ns.e("nav-scroll"), "ref": navScroll$ }, [vue.createVNode("div", { "class": [ns.e("nav"), ns.is(rootTabs.props.tabPosition), ns.is("stretch", props.stretch && ["top", "bottom"].includes(rootTabs.props.tabPosition))], "ref": nav$, "style": navStyle.value, "role": "tablist", "onKeydown": changeTab }, [...[!props.type ? vue.createVNode(TabBar, { "ref": tabBarRef, "tabs": [...props.panes] }, null) : null, tabs]])])]); }; } }); const tabsProps = buildProps({ type: { type: String, values: ["card", "border-card", ""], default: "" }, closable: Boolean, addable: Boolean, modelValue: { type: [String, Number] }, editable: Boolean, tabPosition: { type: String, values: ["top", "right", "bottom", "left"], default: "top" }, beforeLeave: { type: definePropType(Function), default: () => true }, stretch: Boolean }); const isPaneName = (value) => isString$1(value) || isNumber(value); const tabsEmits = { [UPDATE_MODEL_EVENT]: (name) => isPaneName(name), tabClick: (pane, ev) => ev instanceof Event, tabChange: (name) => isPaneName(name), edit: (paneName, action) => ["remove", "add"].includes(action), tabRemove: (name) => isPaneName(name), tabAdd: () => true }; const Tabs = vue.defineComponent({ name: "ElTabs", props: tabsProps, emits: tabsEmits, setup(props, { emit, slots, expose }) { var _a2; const ns = useNamespace("tabs"); const isVertical = vue.computed(() => ["left", "right"].includes(props.tabPosition)); const { children: panes, addChild: sortPane, removeChild: unregisterPane } = useOrderedChildren(vue.getCurrentInstance(), "ElTabPane"); const nav$ = vue.ref(); const currentName = vue.ref((_a2 = props.modelValue) != null ? _a2 : "0"); const setCurrentName = async (value, trigger = false) => { var _a22, _b; if (currentName.value === value || isUndefined(value)) return; try { let canLeave; if (props.beforeLeave) { const result = props.beforeLeave(value, currentName.value); canLeave = result instanceof Promise ? await result : result; } else { canLeave = true; } if (canLeave !== false) { currentName.value = value; if (trigger) { emit(UPDATE_MODEL_EVENT, value); emit("tabChange", value); } (_b = (_a22 = nav$.value) == null ? void 0 : _a22.removeFocus) == null ? void 0 : _b.call(_a22); } } catch (e) { } }; const handleTabClick = (tab, tabName, event) => { if (tab.props.disabled) return; setCurrentName(tabName, true); emit("tabClick", tab, event); }; const handleTabRemove = (pane, ev) => { if (pane.props.disabled || isUndefined(pane.props.name)) return; ev.stopPropagation(); emit("edit", pane.props.name, "remove"); emit("tabRemove", pane.props.name); }; const handleTabAdd = () => { emit("edit", void 0, "add"); emit("tabAdd"); }; vue.watch(() => props.modelValue, (modelValue) => setCurrentName(modelValue)); vue.watch(currentName, async () => { var _a22; await vue.nextTick(); (_a22 = nav$.value) == null ? void 0 : _a22.scrollToActiveTab(); }); vue.provide(tabsRootContextKey, { props, currentName, registerPane: (pane) => { panes.value.push(pane); }, sortPane, unregisterPane }); expose({ currentName }); const TabNavRenderer = ({ render: render2 }) => { return render2(); }; return () => { const addSlot = slots["add-icon"]; const newButton = props.editable || props.addable ? vue.createVNode("div", { "class": [ns.e("new-tab"), isVertical.value && ns.e("new-tab-vertical")], "tabindex": "0", "onClick": handleTabAdd, "onKeydown": (ev) => { if ([EVENT_CODE.enter, EVENT_CODE.numpadEnter].includes(ev.code)) handleTabAdd(); } }, [addSlot ? vue.renderSlot(slots, "add-icon") : vue.createVNode(ElIcon, { "class": ns.is("icon-plus") }, { default: () => [vue.createVNode(plus_default, null, null)] })]) : null; const header = vue.createVNode("div", { "class": [ns.e("header"), isVertical.value && ns.e("header-vertical"), ns.is(props.tabPosition)] }, [vue.createVNode(TabNavRenderer, { "render": () => { const hasLabelSlot = panes.value.some((pane) => pane.slots.label); return vue.createVNode(TabNav, { ref: nav$, currentName: currentName.value, editable: props.editable, type: props.type, panes: panes.value, stretch: props.stretch, onTabClick: handleTabClick, onTabRemove: handleTabRemove }, { $stable: !hasLabelSlot }); } }, null), newButton]); const panels = vue.createVNode("div", { "class": ns.e("content") }, [vue.renderSlot(slots, "default")]); return vue.createVNode("div", { "class": [ns.b(), ns.m(props.tabPosition), { [ns.m("card")]: props.type === "card", [ns.m("border-card")]: props.type === "border-card" }] }, [panels, header]); }; } }); var Tabs$1 = Tabs; const tabPaneProps = buildProps({ label: { type: String, default: "" }, name: { type: [String, Number] }, closable: Boolean, disabled: Boolean, lazy: Boolean }); const COMPONENT_NAME = "ElTabPane"; const __default__$1 = vue.defineComponent({ name: COMPONENT_NAME }); const _sfc_main$d = /* @__PURE__ */ vue.defineComponent({ ...__default__$1, props: tabPaneProps, setup(__props) { const props = __props; const instance = vue.getCurrentInstance(); const slots = vue.useSlots(); const tabsRoot = vue.inject(tabsRootContextKey); if (!tabsRoot) throwError(COMPONENT_NAME, "usage: "); const ns = useNamespace("tab-pane"); const index = vue.ref(); const isClosable = vue.computed(() => props.closable || tabsRoot.props.closable); const active = computedEager(() => { var _a2; return tabsRoot.currentName.value === ((_a2 = props.name) != null ? _a2 : index.value); }); const loaded = vue.ref(active.value); const paneName = vue.computed(() => { var _a2; return (_a2 = props.name) != null ? _a2 : index.value; }); const shouldBeRender = computedEager(() => !props.lazy || loaded.value || active.value); vue.watch(active, (val) => { if (val) loaded.value = true; }); const pane = vue.reactive({ uid: instance.uid, slots, props, paneName, active, index, isClosable }); tabsRoot.registerPane(pane); vue.onMounted(() => { tabsRoot.sortPane(pane); }); vue.onUnmounted(() => { tabsRoot.unregisterPane(pane.uid); }); return (_ctx, _cache) => { return vue.unref(shouldBeRender) ? vue.withDirectives((vue.openBlock(), vue.createElementBlock("div", { key: 0, id: `pane-${vue.unref(paneName)}`, class: vue.normalizeClass(vue.unref(ns).b()), role: "tabpanel", "aria-hidden": !vue.unref(active), "aria-labelledby": `tab-${vue.unref(paneName)}` }, [ vue.renderSlot(_ctx.$slots, "default") ], 10, ["id", "aria-hidden", "aria-labelledby"])), [ [vue.vShow, vue.unref(active)] ]) : vue.createCommentVNode("v-if", true); }; } }); var TabPane = /* @__PURE__ */ _export_sfc$1(_sfc_main$d, [["__file", "tab-pane.vue"]]); const ElTabs = withInstall(Tabs$1, { TabPane }); const ElTabPane = withNoopInstall(TabPane); function createLoadingComponent(options) { let afterLeaveTimer; const afterLeaveFlag = vue.ref(false); const data = vue.reactive({ ...options, originalPosition: "", originalOverflow: "", visible: false }); function setText(text) { data.text = text; } function destroySelf() { const target = data.parent; const ns = vm.ns; if (!target.vLoadingAddClassList) { let loadingNumber = target.getAttribute("loading-number"); loadingNumber = Number.parseInt(loadingNumber) - 1; if (!loadingNumber) { removeClass(target, ns.bm("parent", "relative")); target.removeAttribute("loading-number"); } else { target.setAttribute("loading-number", loadingNumber.toString()); } removeClass(target, ns.bm("parent", "hidden")); } removeElLoadingChild(); loadingInstance.unmount(); } function removeElLoadingChild() { var _a2, _b; (_b = (_a2 = vm.$el) == null ? void 0 : _a2.parentNode) == null ? void 0 : _b.removeChild(vm.$el); } function close() { var _a2; if (options.beforeClose && !options.beforeClose()) return; afterLeaveFlag.value = true; clearTimeout(afterLeaveTimer); afterLeaveTimer = setTimeout(handleAfterLeave, 400); data.visible = false; (_a2 = options.closed) == null ? void 0 : _a2.call(options); } function handleAfterLeave() { if (!afterLeaveFlag.value) return; const target = data.parent; afterLeaveFlag.value = false; target.vLoadingAddClassList = void 0; destroySelf(); } const elLoadingComponent = vue.defineComponent({ name: "ElLoading", setup(_2, { expose }) { const { ns, zIndex: zIndex2 } = useGlobalComponentSettings("loading"); expose({ ns, zIndex: zIndex2 }); return () => { const svg = data.spinner || data.svg; const spinner = vue.h("svg", { class: "circular", viewBox: data.svgViewBox ? data.svgViewBox : "0 0 50 50", ...svg ? { innerHTML: svg } : {} }, [ vue.h("circle", { class: "path", cx: "25", cy: "25", r: "20", fill: "none" }) ]); const spinnerText = data.text ? vue.h("p", { class: ns.b("text") }, [data.text]) : void 0; return vue.h(vue.Transition, { name: ns.b("fade"), onAfterLeave: handleAfterLeave }, { default: vue.withCtx(() => [ vue.withDirectives(vue.createVNode("div", { style: { backgroundColor: data.background || "" }, class: [ ns.b("mask"), data.customClass, data.fullscreen ? "is-fullscreen" : "" ] }, [ vue.h("div", { class: ns.b("spinner") }, [spinner, spinnerText]) ]), [[vue.vShow, data.visible]]) ]) }); }; } }); const loadingInstance = vue.createApp(elLoadingComponent); const vm = loadingInstance.mount(document.createElement("div")); return { ...vue.toRefs(data), setText, removeElLoadingChild, close, handleAfterLeave, vm, get $el() { return vm.$el; } }; } let fullscreenInstance = void 0; const Loading = function(options = {}) { if (!isClient) return void 0; const resolved = resolveOptions(options); if (resolved.fullscreen && fullscreenInstance) { return fullscreenInstance; } const instance = createLoadingComponent({ ...resolved, closed: () => { var _a2; (_a2 = resolved.closed) == null ? void 0 : _a2.call(resolved); if (resolved.fullscreen) fullscreenInstance = void 0; } }); addStyle(resolved, resolved.parent, instance); addClassList(resolved, resolved.parent, instance); resolved.parent.vLoadingAddClassList = () => addClassList(resolved, resolved.parent, instance); let loadingNumber = resolved.parent.getAttribute("loading-number"); if (!loadingNumber) { loadingNumber = "1"; } else { loadingNumber = `${Number.parseInt(loadingNumber) + 1}`; } resolved.parent.setAttribute("loading-number", loadingNumber); resolved.parent.appendChild(instance.$el); vue.nextTick(() => instance.visible.value = resolved.visible); if (resolved.fullscreen) { fullscreenInstance = instance; } return instance; }; const resolveOptions = (options) => { var _a2, _b, _c, _d; let target; if (isString$1(options.target)) { target = (_a2 = document.querySelector(options.target)) != null ? _a2 : document.body; } else { target = options.target || document.body; } return { parent: target === document.body || options.body ? document.body : target, background: options.background || "", svg: options.svg || "", svgViewBox: options.svgViewBox || "", spinner: options.spinner || false, text: options.text || "", fullscreen: target === document.body && ((_b = options.fullscreen) != null ? _b : true), lock: (_c = options.lock) != null ? _c : false, customClass: options.customClass || "", visible: (_d = options.visible) != null ? _d : true, beforeClose: options.beforeClose, closed: options.closed, target }; }; const addStyle = async (options, parent, instance) => { const { nextZIndex } = instance.vm.zIndex || instance.vm._.exposed.zIndex; const maskStyle = {}; if (options.fullscreen) { instance.originalPosition.value = getStyle(document.body, "position"); instance.originalOverflow.value = getStyle(document.body, "overflow"); maskStyle.zIndex = nextZIndex(); } else if (options.parent === document.body) { instance.originalPosition.value = getStyle(document.body, "position"); await vue.nextTick(); for (const property2 of ["top", "left"]) { const scroll = property2 === "top" ? "scrollTop" : "scrollLeft"; maskStyle[property2] = `${options.target.getBoundingClientRect()[property2] + document.body[scroll] + document.documentElement[scroll] - Number.parseInt(getStyle(document.body, `margin-${property2}`), 10)}px`; } for (const property2 of ["height", "width"]) { maskStyle[property2] = `${options.target.getBoundingClientRect()[property2]}px`; } } else { instance.originalPosition.value = getStyle(parent, "position"); } for (const [key, value] of Object.entries(maskStyle)) { instance.$el.style[key] = value; } }; const addClassList = (options, parent, instance) => { const ns = instance.vm.ns || instance.vm._.exposed.ns; if (!["absolute", "fixed", "sticky"].includes(instance.originalPosition.value)) { addClass(parent, ns.bm("parent", "relative")); } else { removeClass(parent, ns.bm("parent", "relative")); } if (options.fullscreen && options.lock) { addClass(parent, ns.bm("parent", "hidden")); } else { removeClass(parent, ns.bm("parent", "hidden")); } }; const INSTANCE_KEY = Symbol("ElLoading"); const createInstance = (el, binding) => { var _a2, _b, _c, _d; const vm = binding.instance; const getBindingProp = (key) => isObject$1(binding.value) ? binding.value[key] : void 0; const resolveExpression = (key) => { const data = isString$1(key) && (vm == null ? void 0 : vm[key]) || key; if (data) return vue.ref(data); else return data; }; const getProp2 = (name) => resolveExpression(getBindingProp(name) || el.getAttribute(`element-loading-${hyphenate(name)}`)); const fullscreen = (_a2 = getBindingProp("fullscreen")) != null ? _a2 : binding.modifiers.fullscreen; const options = { text: getProp2("text"), svg: getProp2("svg"), svgViewBox: getProp2("svgViewBox"), spinner: getProp2("spinner"), background: getProp2("background"), customClass: getProp2("customClass"), fullscreen, target: (_b = getBindingProp("target")) != null ? _b : fullscreen ? void 0 : el, body: (_c = getBindingProp("body")) != null ? _c : binding.modifiers.body, lock: (_d = getBindingProp("lock")) != null ? _d : binding.modifiers.lock }; el[INSTANCE_KEY] = { options, instance: Loading(options) }; }; const updateOptions = (newOptions, originalOptions) => { for (const key of Object.keys(originalOptions)) { if (vue.isRef(originalOptions[key])) originalOptions[key].value = newOptions[key]; } }; const vLoading = { mounted(el, binding) { if (binding.value) { createInstance(el, binding); } }, updated(el, binding) { const instance = el[INSTANCE_KEY]; if (binding.oldValue !== binding.value) { if (binding.value && !binding.oldValue) { createInstance(el, binding); } else if (binding.value && binding.oldValue) { if (isObject$1(binding.value)) updateOptions(binding.value, instance.options); } else { instance == null ? void 0 : instance.instance.close(); } } }, unmounted(el) { var _a2; (_a2 = el[INSTANCE_KEY]) == null ? void 0 : _a2.instance.close(); el[INSTANCE_KEY] = null; } }; const ElLoading = { install(app) { app.directive("loading", vLoading); app.config.globalProperties.$loading = Loading; }, directive: vLoading, service: Loading }; const messageTypes = ["success", "info", "warning", "error"]; const messageDefaults = mutable({ customClass: "", center: false, dangerouslyUseHTMLString: false, duration: 3e3, icon: void 0, id: "", message: "", onClose: void 0, showClose: false, type: "info", plain: false, offset: 16, zIndex: 0, grouping: false, repeatNum: 1, appendTo: isClient ? document.body : void 0 }); const messageProps = buildProps({ customClass: { type: String, default: messageDefaults.customClass }, center: { type: Boolean, default: messageDefaults.center }, dangerouslyUseHTMLString: { type: Boolean, default: messageDefaults.dangerouslyUseHTMLString }, duration: { type: Number, default: messageDefaults.duration }, icon: { type: iconPropType, default: messageDefaults.icon }, id: { type: String, default: messageDefaults.id }, message: { type: definePropType([ String, Object, Function ]), default: messageDefaults.message }, onClose: { type: definePropType(Function), default: messageDefaults.onClose }, showClose: { type: Boolean, default: messageDefaults.showClose }, type: { type: String, values: messageTypes, default: messageDefaults.type }, plain: { type: Boolean, default: messageDefaults.plain }, offset: { type: Number, default: messageDefaults.offset }, zIndex: { type: Number, default: messageDefaults.zIndex }, grouping: { type: Boolean, default: messageDefaults.grouping }, repeatNum: { type: Number, default: messageDefaults.repeatNum } }); const messageEmits = { destroy: () => true }; const instances = vue.shallowReactive([]); const getInstance = (id) => { const idx = instances.findIndex((instance) => instance.id === id); const current = instances[idx]; let prev; if (idx > 0) { prev = instances[idx - 1]; } return { current, prev }; }; const getLastOffset = (id) => { const { prev } = getInstance(id); if (!prev) return 0; return prev.vm.exposed.bottom.value; }; const getOffsetOrSpace = (id, offset) => { const idx = instances.findIndex((instance) => instance.id === id); return idx > 0 ? 16 : offset; }; const __default__ = vue.defineComponent({ name: "ElMessage" }); const _sfc_main$c = /* @__PURE__ */ vue.defineComponent({ ...__default__, props: messageProps, emits: messageEmits, setup(__props, { expose }) { const props = __props; const { Close } = TypeComponents; const { ns, zIndex: zIndex2 } = useGlobalComponentSettings("message"); const { currentZIndex, nextZIndex } = zIndex2; const messageRef = vue.ref(); const visible = vue.ref(false); const height = vue.ref(0); let stopTimer = void 0; const badgeType = vue.computed(() => props.type ? props.type === "error" ? "danger" : props.type : "info"); const typeClass = vue.computed(() => { const type = props.type; return { [ns.bm("icon", type)]: type && TypeComponentsMap[type] }; }); const iconComponent = vue.computed(() => props.icon || TypeComponentsMap[props.type] || ""); const lastOffset = vue.computed(() => getLastOffset(props.id)); const offset = vue.computed(() => getOffsetOrSpace(props.id, props.offset) + lastOffset.value); const bottom = vue.computed(() => height.value + offset.value); const customStyle = vue.computed(() => ({ top: `${offset.value}px`, zIndex: currentZIndex.value })); function startTimer() { if (props.duration === 0) return; ({ stop: stopTimer } = useTimeoutFn(() => { close(); }, props.duration)); } function clearTimer() { stopTimer == null ? void 0 : stopTimer(); } function close() { visible.value = false; } function keydown({ code }) { if (code === EVENT_CODE.esc) { close(); } } vue.onMounted(() => { startTimer(); nextZIndex(); visible.value = true; }); vue.watch(() => props.repeatNum, () => { clearTimer(); startTimer(); }); useEventListener(document, "keydown", keydown); useResizeObserver(messageRef, () => { height.value = messageRef.value.getBoundingClientRect().height; }); expose({ visible, bottom, close }); return (_ctx, _cache) => { return vue.openBlock(), vue.createBlock(vue.Transition, { name: vue.unref(ns).b("fade"), onBeforeLeave: _ctx.onClose, onAfterLeave: ($event) => _ctx.$emit("destroy"), persisted: "" }, { default: vue.withCtx(() => [ vue.withDirectives(vue.createElementVNode("div", { id: _ctx.id, ref_key: "messageRef", ref: messageRef, class: vue.normalizeClass([ vue.unref(ns).b(), { [vue.unref(ns).m(_ctx.type)]: _ctx.type }, vue.unref(ns).is("center", _ctx.center), vue.unref(ns).is("closable", _ctx.showClose), vue.unref(ns).is("plain", _ctx.plain), _ctx.customClass ]), style: vue.normalizeStyle(vue.unref(customStyle)), role: "alert", onMouseenter: clearTimer, onMouseleave: startTimer }, [ _ctx.repeatNum > 1 ? (vue.openBlock(), vue.createBlock(vue.unref(ElBadge), { key: 0, value: _ctx.repeatNum, type: vue.unref(badgeType), class: vue.normalizeClass(vue.unref(ns).e("badge")) }, null, 8, ["value", "type", "class"])) : vue.createCommentVNode("v-if", true), vue.unref(iconComponent) ? (vue.openBlock(), vue.createBlock(vue.unref(ElIcon), { key: 1, class: vue.normalizeClass([vue.unref(ns).e("icon"), vue.unref(typeClass)]) }, { default: vue.withCtx(() => [ (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(vue.unref(iconComponent)))) ]), _: 1 }, 8, ["class"])) : vue.createCommentVNode("v-if", true), vue.renderSlot(_ctx.$slots, "default", {}, () => [ !_ctx.dangerouslyUseHTMLString ? (vue.openBlock(), vue.createElementBlock("p", { key: 0, class: vue.normalizeClass(vue.unref(ns).e("content")) }, vue.toDisplayString(_ctx.message), 3)) : (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 1 }, [ vue.createCommentVNode(" Caution here, message could've been compromised, never use user's input as message "), vue.createElementVNode("p", { class: vue.normalizeClass(vue.unref(ns).e("content")), innerHTML: _ctx.message }, null, 10, ["innerHTML"]) ], 2112)) ]), _ctx.showClose ? (vue.openBlock(), vue.createBlock(vue.unref(ElIcon), { key: 2, class: vue.normalizeClass(vue.unref(ns).e("closeBtn")), onClick: vue.withModifiers(close, ["stop"]) }, { default: vue.withCtx(() => [ vue.createVNode(vue.unref(Close)) ]), _: 1 }, 8, ["class", "onClick"])) : vue.createCommentVNode("v-if", true) ], 46, ["id"]), [ [vue.vShow, visible.value] ]) ]), _: 3 }, 8, ["name", "onBeforeLeave", "onAfterLeave"]); }; } }); var MessageConstructor = /* @__PURE__ */ _export_sfc$1(_sfc_main$c, [["__file", "message.vue"]]); let seed = 1; const normalizeOptions = (params) => { const options = !params || isString$1(params) || vue.isVNode(params) || isFunction$1(params) ? { message: params } : params; const normalized = { ...messageDefaults, ...options }; if (!normalized.appendTo) { normalized.appendTo = document.body; } else if (isString$1(normalized.appendTo)) { let appendTo = document.querySelector(normalized.appendTo); if (!isElement(appendTo)) { appendTo = document.body; } normalized.appendTo = appendTo; } if (isBoolean(messageConfig.grouping) && !normalized.grouping) { normalized.grouping = messageConfig.grouping; } if (isNumber(messageConfig.duration) && normalized.duration === 3e3) { normalized.duration = messageConfig.duration; } if (isNumber(messageConfig.offset) && normalized.offset === 16) { normalized.offset = messageConfig.offset; } if (isBoolean(messageConfig.showClose) && !normalized.showClose) { normalized.showClose = messageConfig.showClose; } return normalized; }; const closeMessage = (instance) => { const idx = instances.indexOf(instance); if (idx === -1) return; instances.splice(idx, 1); const { handler } = instance; handler.close(); }; const createMessage = ({ appendTo, ...options }, context) => { const id = `message_${seed++}`; const userOnClose = options.onClose; const container = document.createElement("div"); const props = { ...options, id, onClose: () => { userOnClose == null ? void 0 : userOnClose(); closeMessage(instance); }, onDestroy: () => { vue.render(null, container); } }; const vnode = vue.createVNode(MessageConstructor, props, isFunction$1(props.message) || vue.isVNode(props.message) ? { default: isFunction$1(props.message) ? props.message : () => props.message } : null); vnode.appContext = context || message._context; vue.render(vnode, container); appendTo.appendChild(container.firstElementChild); const vm = vnode.component; const handler = { close: () => { vm.exposed.visible.value = false; } }; const instance = { id, vnode, vm, handler, props: vnode.component.props }; return instance; }; const message = (options = {}, context) => { if (!isClient) return { close: () => void 0 }; const normalized = normalizeOptions(options); if (normalized.grouping && instances.length) { const instance2 = instances.find(({ vnode: vm }) => { var _a2; return ((_a2 = vm.props) == null ? void 0 : _a2.message) === normalized.message; }); if (instance2) { instance2.props.repeatNum += 1; instance2.props.type = normalized.type; return instance2.handler; } } if (isNumber(messageConfig.max) && instances.length >= messageConfig.max) { return { close: () => void 0 }; } const instance = createMessage(normalized, context); instances.push(instance); return instance.handler; }; messageTypes.forEach((type) => { message[type] = (options = {}, appContext) => { const normalized = normalizeOptions(options); return message({ ...normalized, type }, appContext); }; }); function closeAll(type) { for (const instance of instances) { if (!type || type === instance.props.type) { instance.handler.close(); } } } message.closeAll = closeAll; message._context = null; const ElMessage = withInstallFunction(message, "$message"); const FOCUSABLE_CHILDREN = "_trap-focus-children"; const FOCUS_STACK = []; const FOCUS_HANDLER = (e) => { if (FOCUS_STACK.length === 0) return; const focusableElement = FOCUS_STACK[FOCUS_STACK.length - 1][FOCUSABLE_CHILDREN]; if (focusableElement.length > 0 && e.code === EVENT_CODE.tab) { if (focusableElement.length === 1) { e.preventDefault(); if (document.activeElement !== focusableElement[0]) { focusableElement[0].focus(); } return; } const goingBackward = e.shiftKey; const isFirst = e.target === focusableElement[0]; const isLast = e.target === focusableElement[focusableElement.length - 1]; if (isFirst && goingBackward) { e.preventDefault(); focusableElement[focusableElement.length - 1].focus(); } if (isLast && !goingBackward) { e.preventDefault(); focusableElement[0].focus(); } } }; const TrapFocus = { beforeMount(el) { el[FOCUSABLE_CHILDREN] = obtainAllFocusableElements$1(el); FOCUS_STACK.push(el); if (FOCUS_STACK.length <= 1) { document.addEventListener("keydown", FOCUS_HANDLER); } }, updated(el) { vue.nextTick(() => { el[FOCUSABLE_CHILDREN] = obtainAllFocusableElements$1(el); }); }, unmounted() { FOCUS_STACK.shift(); if (FOCUS_STACK.length === 0) { document.removeEventListener("keydown", FOCUS_HANDLER); } } }; const _sfc_main$b = vue.defineComponent({ name: "ElMessageBox", directives: { TrapFocus }, components: { ElButton, ElFocusTrap, ElInput, ElOverlay, ElIcon, ...TypeComponents }, inheritAttrs: false, props: { buttonSize: { type: String, validator: isValidComponentSize }, modal: { type: Boolean, default: true }, lockScroll: { type: Boolean, default: true }, showClose: { type: Boolean, default: true }, closeOnClickModal: { type: Boolean, default: true }, closeOnPressEscape: { type: Boolean, default: true }, closeOnHashChange: { type: Boolean, default: true }, center: Boolean, draggable: Boolean, overflow: Boolean, roundButton: { default: false, type: Boolean }, container: { type: String, default: "body" }, boxType: { type: String, default: "" } }, emits: ["vanish", "action"], setup(props, { emit }) { const { locale, zIndex: zIndex2, ns, size: btnSize } = useGlobalComponentSettings("message-box", vue.computed(() => props.buttonSize)); const { t } = locale; const { nextZIndex } = zIndex2; const visible = vue.ref(false); const state = vue.reactive({ autofocus: true, beforeClose: null, callback: null, cancelButtonText: "", cancelButtonClass: "", confirmButtonText: "", confirmButtonClass: "", customClass: "", customStyle: {}, dangerouslyUseHTMLString: false, distinguishCancelAndClose: false, icon: "", closeIcon: "", inputPattern: null, inputPlaceholder: "", inputType: "text", inputValue: "", inputValidator: void 0, inputErrorMessage: "", message: "", modalFade: true, modalClass: "", showCancelButton: false, showConfirmButton: true, type: "", title: void 0, showInput: false, action: "", confirmButtonLoading: false, cancelButtonLoading: false, confirmButtonLoadingIcon: vue.markRaw(loading_default), cancelButtonLoadingIcon: vue.markRaw(loading_default), confirmButtonDisabled: false, editorErrorMessage: "", validateError: false, zIndex: nextZIndex() }); const typeClass = vue.computed(() => { const type = state.type; return { [ns.bm("icon", type)]: type && TypeComponentsMap[type] }; }); const contentId = useId(); const inputId = useId(); const iconComponent = vue.computed(() => { const type = state.type; return state.icon || type && TypeComponentsMap[type] || ""; }); const hasMessage = vue.computed(() => !!state.message); const rootRef = vue.ref(); const headerRef = vue.ref(); const focusStartRef = vue.ref(); const inputRef = vue.ref(); const confirmRef = vue.ref(); const confirmButtonClasses = vue.computed(() => state.confirmButtonClass); vue.watch(() => state.inputValue, async (val) => { await vue.nextTick(); if (props.boxType === "prompt" && val) { validate(); } }, { immediate: true }); vue.watch(() => visible.value, (val) => { var _a2, _b; if (val) { if (props.boxType !== "prompt") { if (state.autofocus) { focusStartRef.value = (_b = (_a2 = confirmRef.value) == null ? void 0 : _a2.$el) != null ? _b : rootRef.value; } else { focusStartRef.value = rootRef.value; } } state.zIndex = nextZIndex(); } if (props.boxType !== "prompt") return; if (val) { vue.nextTick().then(() => { var _a22; if (inputRef.value && inputRef.value.$el) { if (state.autofocus) { focusStartRef.value = (_a22 = getInputElement()) != null ? _a22 : rootRef.value; } else { focusStartRef.value = rootRef.value; } } }); } else { state.editorErrorMessage = ""; state.validateError = false; } }); const draggable = vue.computed(() => props.draggable); const overflow = vue.computed(() => props.overflow); useDraggable(rootRef, headerRef, draggable, overflow); vue.onMounted(async () => { await vue.nextTick(); if (props.closeOnHashChange) { window.addEventListener("hashchange", doClose); } }); vue.onBeforeUnmount(() => { if (props.closeOnHashChange) { window.removeEventListener("hashchange", doClose); } }); function doClose() { if (!visible.value) return; visible.value = false; vue.nextTick(() => { if (state.action) emit("action", state.action); }); } const handleWrapperClick = () => { if (props.closeOnClickModal) { handleAction(state.distinguishCancelAndClose ? "close" : "cancel"); } }; const overlayEvent = useSameTarget(handleWrapperClick); const handleInputEnter = (e) => { if (state.inputType !== "textarea") { e.preventDefault(); return handleAction("confirm"); } }; const handleAction = (action) => { var _a2; if (props.boxType === "prompt" && action === "confirm" && !validate()) { return; } state.action = action; if (state.beforeClose) { (_a2 = state.beforeClose) == null ? void 0 : _a2.call(state, action, state, doClose); } else { doClose(); } }; const validate = () => { if (props.boxType === "prompt") { const inputPattern = state.inputPattern; if (inputPattern && !inputPattern.test(state.inputValue || "")) { state.editorErrorMessage = state.inputErrorMessage || t("el.messagebox.error"); state.validateError = true; return false; } const inputValidator = state.inputValidator; if (isFunction$1(inputValidator)) { const validateResult = inputValidator(state.inputValue); if (validateResult === false) { state.editorErrorMessage = state.inputErrorMessage || t("el.messagebox.error"); state.validateError = true; return false; } if (isString$1(validateResult)) { state.editorErrorMessage = validateResult; state.validateError = true; return false; } } } state.editorErrorMessage = ""; state.validateError = false; return true; }; const getInputElement = () => { var _a2, _b; const inputRefs = (_a2 = inputRef.value) == null ? void 0 : _a2.$refs; return (_b = inputRefs == null ? void 0 : inputRefs.input) != null ? _b : inputRefs == null ? void 0 : inputRefs.textarea; }; const handleClose = () => { handleAction("close"); }; const onCloseRequested = () => { if (props.closeOnPressEscape) { handleClose(); } }; if (props.lockScroll) { useLockscreen(visible); } return { ...vue.toRefs(state), ns, overlayEvent, visible, hasMessage, typeClass, contentId, inputId, btnSize, iconComponent, confirmButtonClasses, rootRef, focusStartRef, headerRef, inputRef, confirmRef, doClose, handleClose, onCloseRequested, handleWrapperClick, handleInputEnter, handleAction, t }; } }); function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) { const _component_el_icon = vue.resolveComponent("el-icon"); const _component_el_input = vue.resolveComponent("el-input"); const _component_el_button = vue.resolveComponent("el-button"); const _component_el_focus_trap = vue.resolveComponent("el-focus-trap"); const _component_el_overlay = vue.resolveComponent("el-overlay"); return vue.openBlock(), vue.createBlock(vue.Transition, { name: "fade-in-linear", onAfterLeave: ($event) => _ctx.$emit("vanish"), persisted: "" }, { default: vue.withCtx(() => [ vue.withDirectives(vue.createVNode(_component_el_overlay, { "z-index": _ctx.zIndex, "overlay-class": [_ctx.ns.is("message-box"), _ctx.modalClass], mask: _ctx.modal }, { default: vue.withCtx(() => [ vue.createElementVNode("div", { role: "dialog", "aria-label": _ctx.title, "aria-modal": "true", "aria-describedby": !_ctx.showInput ? _ctx.contentId : void 0, class: vue.normalizeClass(`${_ctx.ns.namespace.value}-overlay-message-box`), onClick: _ctx.overlayEvent.onClick, onMousedown: _ctx.overlayEvent.onMousedown, onMouseup: _ctx.overlayEvent.onMouseup }, [ vue.createVNode(_component_el_focus_trap, { loop: "", trapped: _ctx.visible, "focus-trap-el": _ctx.rootRef, "focus-start-el": _ctx.focusStartRef, onReleaseRequested: _ctx.onCloseRequested }, { default: vue.withCtx(() => [ vue.createElementVNode("div", { ref: "rootRef", class: vue.normalizeClass([ _ctx.ns.b(), _ctx.customClass, _ctx.ns.is("draggable", _ctx.draggable), { [_ctx.ns.m("center")]: _ctx.center } ]), style: vue.normalizeStyle(_ctx.customStyle), tabindex: "-1", onClick: vue.withModifiers(() => { }, ["stop"]) }, [ _ctx.title !== null && _ctx.title !== void 0 ? (vue.openBlock(), vue.createElementBlock("div", { key: 0, ref: "headerRef", class: vue.normalizeClass([_ctx.ns.e("header"), { "show-close": _ctx.showClose }]) }, [ vue.createElementVNode("div", { class: vue.normalizeClass(_ctx.ns.e("title")) }, [ _ctx.iconComponent && _ctx.center ? (vue.openBlock(), vue.createBlock(_component_el_icon, { key: 0, class: vue.normalizeClass([_ctx.ns.e("status"), _ctx.typeClass]) }, { default: vue.withCtx(() => [ (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.iconComponent))) ]), _: 1 }, 8, ["class"])) : vue.createCommentVNode("v-if", true), vue.createElementVNode("span", null, vue.toDisplayString(_ctx.title), 1) ], 2), _ctx.showClose ? (vue.openBlock(), vue.createElementBlock("button", { key: 0, type: "button", class: vue.normalizeClass(_ctx.ns.e("headerbtn")), "aria-label": _ctx.t("el.messagebox.close"), onClick: ($event) => _ctx.handleAction(_ctx.distinguishCancelAndClose ? "close" : "cancel"), onKeydown: vue.withKeys(vue.withModifiers(($event) => _ctx.handleAction(_ctx.distinguishCancelAndClose ? "close" : "cancel"), ["prevent"]), ["enter"]) }, [ vue.createVNode(_component_el_icon, { class: vue.normalizeClass(_ctx.ns.e("close")) }, { default: vue.withCtx(() => [ (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.closeIcon || "close"))) ]), _: 1 }, 8, ["class"]) ], 42, ["aria-label", "onClick", "onKeydown"])) : vue.createCommentVNode("v-if", true) ], 2)) : vue.createCommentVNode("v-if", true), vue.createElementVNode("div", { id: _ctx.contentId, class: vue.normalizeClass(_ctx.ns.e("content")) }, [ vue.createElementVNode("div", { class: vue.normalizeClass(_ctx.ns.e("container")) }, [ _ctx.iconComponent && !_ctx.center && _ctx.hasMessage ? (vue.openBlock(), vue.createBlock(_component_el_icon, { key: 0, class: vue.normalizeClass([_ctx.ns.e("status"), _ctx.typeClass]) }, { default: vue.withCtx(() => [ (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.iconComponent))) ]), _: 1 }, 8, ["class"])) : vue.createCommentVNode("v-if", true), _ctx.hasMessage ? (vue.openBlock(), vue.createElementBlock("div", { key: 1, class: vue.normalizeClass(_ctx.ns.e("message")) }, [ vue.renderSlot(_ctx.$slots, "default", {}, () => [ !_ctx.dangerouslyUseHTMLString ? (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.showInput ? "label" : "p"), { key: 0, for: _ctx.showInput ? _ctx.inputId : void 0 }, { default: vue.withCtx(() => [ vue.createTextVNode(vue.toDisplayString(!_ctx.dangerouslyUseHTMLString ? _ctx.message : ""), 1) ]), _: 1 }, 8, ["for"])) : (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.showInput ? "label" : "p"), { key: 1, for: _ctx.showInput ? _ctx.inputId : void 0, innerHTML: _ctx.message }, null, 8, ["for", "innerHTML"])) ]) ], 2)) : vue.createCommentVNode("v-if", true) ], 2), vue.withDirectives(vue.createElementVNode("div", { class: vue.normalizeClass(_ctx.ns.e("input")) }, [ vue.createVNode(_component_el_input, { id: _ctx.inputId, ref: "inputRef", modelValue: _ctx.inputValue, "onUpdate:modelValue": ($event) => _ctx.inputValue = $event, type: _ctx.inputType, placeholder: _ctx.inputPlaceholder, "aria-invalid": _ctx.validateError, class: vue.normalizeClass({ invalid: _ctx.validateError }), onKeydown: vue.withKeys(_ctx.handleInputEnter, ["enter"]) }, null, 8, ["id", "modelValue", "onUpdate:modelValue", "type", "placeholder", "aria-invalid", "class", "onKeydown"]), vue.createElementVNode("div", { class: vue.normalizeClass(_ctx.ns.e("errormsg")), style: vue.normalizeStyle({ visibility: !!_ctx.editorErrorMessage ? "visible" : "hidden" }) }, vue.toDisplayString(_ctx.editorErrorMessage), 7) ], 2), [ [vue.vShow, _ctx.showInput] ]) ], 10, ["id"]), vue.createElementVNode("div", { class: vue.normalizeClass(_ctx.ns.e("btns")) }, [ _ctx.showCancelButton ? (vue.openBlock(), vue.createBlock(_component_el_button, { key: 0, loading: _ctx.cancelButtonLoading, "loading-icon": _ctx.cancelButtonLoadingIcon, class: vue.normalizeClass([_ctx.cancelButtonClass]), round: _ctx.roundButton, size: _ctx.btnSize, onClick: ($event) => _ctx.handleAction("cancel"), onKeydown: vue.withKeys(vue.withModifiers(($event) => _ctx.handleAction("cancel"), ["prevent"]), ["enter"]) }, { default: vue.withCtx(() => [ vue.createTextVNode(vue.toDisplayString(_ctx.cancelButtonText || _ctx.t("el.messagebox.cancel")), 1) ]), _: 1 }, 8, ["loading", "loading-icon", "class", "round", "size", "onClick", "onKeydown"])) : vue.createCommentVNode("v-if", true), vue.withDirectives(vue.createVNode(_component_el_button, { ref: "confirmRef", type: "primary", loading: _ctx.confirmButtonLoading, "loading-icon": _ctx.confirmButtonLoadingIcon, class: vue.normalizeClass([_ctx.confirmButtonClasses]), round: _ctx.roundButton, disabled: _ctx.confirmButtonDisabled, size: _ctx.btnSize, onClick: ($event) => _ctx.handleAction("confirm"), onKeydown: vue.withKeys(vue.withModifiers(($event) => _ctx.handleAction("confirm"), ["prevent"]), ["enter"]) }, { default: vue.withCtx(() => [ vue.createTextVNode(vue.toDisplayString(_ctx.confirmButtonText || _ctx.t("el.messagebox.confirm")), 1) ]), _: 1 }, 8, ["loading", "loading-icon", "class", "round", "disabled", "size", "onClick", "onKeydown"]), [ [vue.vShow, _ctx.showConfirmButton] ]) ], 2) ], 14, ["onClick"]) ]), _: 3 }, 8, ["trapped", "focus-trap-el", "focus-start-el", "onReleaseRequested"]) ], 42, ["aria-label", "aria-describedby", "onClick", "onMousedown", "onMouseup"]) ]), _: 3 }, 8, ["z-index", "overlay-class", "mask"]), [ [vue.vShow, _ctx.visible] ]) ]), _: 3 }, 8, ["onAfterLeave"]); } var MessageBoxConstructor = /* @__PURE__ */ _export_sfc$1(_sfc_main$b, [["render", _sfc_render], ["__file", "index.vue"]]); const messageInstance = /* @__PURE__ */ new Map(); const getAppendToElement = (props) => { let appendTo = document.body; if (props.appendTo) { if (isString$1(props.appendTo)) { appendTo = document.querySelector(props.appendTo); } if (isElement(props.appendTo)) { appendTo = props.appendTo; } if (!isElement(appendTo)) { appendTo = document.body; } } return appendTo; }; const initInstance = (props, container, appContext = null) => { const vnode = vue.createVNode(MessageBoxConstructor, props, isFunction$1(props.message) || vue.isVNode(props.message) ? { default: isFunction$1(props.message) ? props.message : () => props.message } : null); vnode.appContext = appContext; vue.render(vnode, container); getAppendToElement(props).appendChild(container.firstElementChild); return vnode.component; }; const genContainer = () => { return document.createElement("div"); }; const showMessage = (options, appContext) => { const container = genContainer(); options.onVanish = () => { vue.render(null, container); messageInstance.delete(vm); }; options.onAction = (action) => { const currentMsg = messageInstance.get(vm); let resolve; if (options.showInput) { resolve = { value: vm.inputValue, action }; } else { resolve = action; } if (options.callback) { options.callback(resolve, instance.proxy); } else { if (action === "cancel" || action === "close") { if (options.distinguishCancelAndClose && action !== "cancel") { currentMsg.reject("close"); } else { currentMsg.reject("cancel"); } } else { currentMsg.resolve(resolve); } } }; const instance = initInstance(options, container, appContext); const vm = instance.proxy; for (const prop in options) { if (hasOwn(options, prop) && !hasOwn(vm.$props, prop)) { if (prop === "closeIcon" && isObject$1(options[prop])) { vm[prop] = vue.markRaw(options[prop]); } else { vm[prop] = options[prop]; } } } vm.visible = true; return vm; }; function MessageBox(options, appContext = null) { if (!isClient) return Promise.reject(); let callback; if (isString$1(options) || vue.isVNode(options)) { options = { message: options }; } else { callback = options.callback; } return new Promise((resolve, reject) => { const vm = showMessage(options, appContext != null ? appContext : MessageBox._context); messageInstance.set(vm, { options, callback, resolve, reject }); }); } const MESSAGE_BOX_VARIANTS = ["alert", "confirm", "prompt"]; const MESSAGE_BOX_DEFAULT_OPTS = { alert: { closeOnPressEscape: false, closeOnClickModal: false }, confirm: { showCancelButton: true }, prompt: { showCancelButton: true, showInput: true } }; MESSAGE_BOX_VARIANTS.forEach((boxType) => { MessageBox[boxType] = messageBoxFactory(boxType); }); function messageBoxFactory(boxType) { return (message2, title, options, appContext) => { let titleOrOpts = ""; if (isObject$1(title)) { options = title; titleOrOpts = ""; } else if (isUndefined(title)) { titleOrOpts = ""; } else { titleOrOpts = title; } return MessageBox(Object.assign({ title: titleOrOpts, message: message2, type: "", ...MESSAGE_BOX_DEFAULT_OPTS[boxType] }, options, { boxType }), appContext); }; } MessageBox.close = () => { messageInstance.forEach((_2, vm) => { vm.doClose(); }); messageInstance.clear(); }; MessageBox._context = null; const _MessageBox = MessageBox; _MessageBox.install = (app) => { _MessageBox._context = app._context; app.config.globalProperties.$msgbox = _MessageBox; app.config.globalProperties.$messageBox = _MessageBox; app.config.globalProperties.$alert = _MessageBox.alert; app.config.globalProperties.$confirm = _MessageBox.confirm; app.config.globalProperties.$prompt = _MessageBox.prompt; }; const ElMessageBox = _MessageBox; const APP_NAME = "神速Down"; const APP_BAIDU_SERVE_URL = "https://oa.assco.cn"; const APP_BAIDU_STORAGE_SCORE_KEY = "STOREAGE_SCORE"; const APP_BAIDU_STORAGE_HISTORY_KEY = "STORAGE_BAIDU_HISTORY"; const APP_QUARK_STORAGE_HISTORY_KEY = "STORAGE_QUARK_HISTORY"; const APP_BAIDU_STORAGE_LOGININFO_KEY = "STORAGE_LOGININFO"; const APP_BAIDU_STORAGE_API_TOKEN_KEY = "STORAGE_API_TOKEN"; const APP_BAIDU_STORAGE_SERVE_URL_KEY = "STORAGE_APP_BAIDU_SERVE_URL"; const APP_BAIDU_STORAGE_USERINFO_UK_KEY = "STORAGE_USERINFO_UK"; const APP_ARIA2_DEFAULT_RPCURL = "http:/localhost:16800/jsonrpc"; const APP_ARIA2_DEFAULT_RPC_WINDOWS_SAVE_LOCATION = "D://神速批量下载"; const APP_STORAGE_SETTING_KEY = "STORAGE_SETTING"; const APP_XHR_LOG = "APP_XHR_LOG"; const consola = { log: (...args) => logMessage("info", ...args), warn: (...args) => logMessage("warn", ...args), error: (...args) => logMessage("error", ...args) }; function logMessage(type, ...args) { const styles = { info: "background: #00aaff; color: #fff; font-weight: bold; padding: 2px 12px; border-radius: 4px; font-family: 'Arial', sans-serif;", warn: "background: #ffaa00; color: #fff; font-weight: bold; padding: 2px 12px; border-radius: 4px; font-family: 'Arial', sans-serif;", error: "background: #ff4444; color: #fff; font-weight: bold; padding: 2px 12px; border-radius: 4px; font-family: 'Arial', sans-serif;" }; const labels = { info: " INFO ", warn: " WARN ", error: " ERROR " }; const timestamp = (/* @__PURE__ */ new Date()).toLocaleString().replace("T", " ").split(".")[0]; const logFn = type === "error" ? console.error : type === "warn" ? console.warn : console.log; logFn(`%c${labels[type]}%c ${APP_NAME} ${timestamp}`, styles[type], "color: gray; font-size: 12px; font-family: 'Arial', sans-serif;", ...args); } async function initLogin(needReLoginShare = false) { var _a2, _b, _c, _d, _e; let loginShareInfo = _GM_getValue(APP_BAIDU_STORAGE_LOGININFO_KEY); const storageServeUrl = _GM_getValue(APP_BAIDU_STORAGE_SERVE_URL_KEY); consola.log("登录过的用户信息", loginShareInfo); const fileName = "ss-" + Math.floor(Math.random() * 100); if (needReLoginShare || !loginShareInfo || // 用户切换账号也重新登录下 loginShareInfo.username != ((_a2 = _unsafeWindow == null ? void 0 : _unsafeWindow.locals) == null ? void 0 : _a2.userInfo.username)) { const bdstoken = (_c = (_b = _unsafeWindow == null ? void 0 : _unsafeWindow.locals) == null ? void 0 : _b.userInfo) == null ? void 0 : _c.bdstoken; const res = await reqCreateFile(bdstoken, fileName); consola.log("创建文件夹", res); if (res.errno != 0) { ElMessage.error(APP_NAME + ":初始化登录失败"); return; } const fsId = res.fs_id; const { shorturl, password } = await bdShareFile([fsId], true); loginShareInfo = { shorturl, password, shareTime: Date.now(), username: (_d = _unsafeWindow == null ? void 0 : _unsafeWindow.locals) == null ? void 0 : _d.userInfo.username }; _GM_setValue(APP_BAIDU_STORAGE_LOGININFO_KEY, loginShareInfo); } else if (storageServeUrl != APP_BAIDU_SERVE_URL) { _GM_setValue(APP_BAIDU_STORAGE_SERVE_URL_KEY, APP_BAIDU_SERVE_URL); } else if (Date.now() - loginShareInfo.shareTime <= 5616e5) { return; } const loginRes = await reqLogin({ surl: loginShareInfo.shorturl, pwd: loginShareInfo.password, dir: "/", sign: CryptoJs.SHA256(JSON.stringify({ surl: loginShareInfo.shorturl, pwd: loginShareInfo.password, dir: "/", pass: "hrgeoihgo" })).toString() }); consola.log("登录结果", loginRes); if (loginRes.code == 200) { _GM_setValue(APP_BAIDU_STORAGE_API_TOKEN_KEY, loginRes.data["api-token"]); } else { ElMessage.error(APP_NAME + `:登录失败(${loginRes.message})`); } $.ajax({ url: `/api/filemanager?async=2&onnest=fail&opera=delete&bdstoken=${_unsafeWindow.locals.userInfo.bdstoken}&newVerify=1&clienttype=0&app_id=250528&web=1&dp-logid=56654800169120390096`, type: "POST", data: { filelist: JSON.stringify([`/${fileName}`]) } }); return ((_e = loginRes == null ? void 0 : loginRes.data) == null ? void 0 : _e.score) ?? 0; } async function bdShareFile(ids, isForever = false) { var _a2; const selectedIds = ids; if (selectedIds.length == 0) { ElMessage.error("请先选择要下载的文件"); throw Error("还未选择文件"); } const password = generateRandomCode(); const res = await reqShare((_a2 = _unsafeWindow == null ? void 0 : _unsafeWindow.locals) == null ? void 0 : _a2.userInfo.bdstoken, password, selectedIds.join(","), isForever); const url = res.link; const shorturl = url ? url.substring(url.lastIndexOf("/") + 1) : null; if (!shorturl || res.show_msg) { ElMessage.error(res.show_msg || "获取分享链接失败"); throw Error("获取分享链接出错"); } else { consola.log("--分享", res); return { url, shorturl, password }; } } function generateRandomCode() { const characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; let result = ""; const charactersLength = characters.length; for (let i = 0; i < 4; i++) { const randomIndex = Math.floor(Math.random() * charactersLength); result += characters.charAt(randomIndex); } return result; } function request(method, url, data, headers = {}, params = {}, maxRetries = 5) { const apiToken = _GM_getValue(APP_BAIDU_STORAGE_API_TOKEN_KEY, ""); if (window.location.host.includes("baidu")) headers["api-token"] = apiToken; const queryParams = new URLSearchParams(params).toString(); const fullUrl = url + "?" + queryParams; let retries = maxRetries; return new Promise((resolve, reject) => { async function sendRequest() { _GM_xmlhttpRequest({ method, url: fullUrl, headers: { ...headers, "Content-Type": "application/json" }, data: data ? JSON.stringify(data) : null, onload: async (response) => { var _a2; if (_GM_getValue(APP_XHR_LOG)) consola.log("xhr", response); if (!response.responseText || response.responseText === "") { if (retries > 0) { retries--; consola.warn("响应为空,10 秒后重试..."); return setTimeout(sendRequest, 10 * 1e3); } else { return reject(new Error("请求超时:无响应内容")); } } const contentType = response.responseHeaders.split("\n").find((line) => line.toLowerCase().startsWith("content-type:")); if (contentType && contentType.includes("application/json")) { try { const result = JSON.parse(response.responseText); consola.log("result", result); if ((result == null ? void 0 : result.message) === "token异常") { consola.warn("检测到 token 异常,尝试重新登录..."); await initLogin(true); const apiToken2 = _GM_getValue(APP_BAIDU_STORAGE_API_TOKEN_KEY, ""); if (window.location.host.includes("baidu")) headers["api-token"] = apiToken2; return sendRequest(); } if ((_a2 = result == null ? void 0 : result.message) == null ? void 0 : _a2.includes("处理中")) { setTimeout(() => { sendRequest(); }, 10 * 1e3); } else { resolve(result); } } catch (error) { reject(new Error("Failed to parse response JSON")); } } else { return resolve(response.responseText); } }, onerror: (error) => { consola.log(error); if (retries > 0) { retries--; consola.warn(`请求错误,重试中... (${maxRetries - retries}/${maxRetries})`); setTimeout(sendRequest, 1e3); } else { try { reject(JSON.parse(error.responseText)); } catch (_2) { } reject(error); } } }); } sendRequest(); }); } async function copyToClipboard(text) { try { if (navigator.clipboard && navigator.clipboard.writeText) { await navigator.clipboard.writeText(text); } else { const textarea = document.createElement("textarea"); textarea.value = text; textarea.style.position = "fixed"; textarea.style.opacity = "0"; document.body.appendChild(textarea); textarea.select(); document.execCommand("copy"); document.body.removeChild(textarea); } return true; } catch (error) { consola.error("Failed to copy text:", error); return false; } } function calculatePoints(dataSizeBytes) { if (dataSizeBytes < 0) { return 0; } const dataSizeGB = dataSizeBytes / (1024 * 1024 * 1024); const points = Math.ceil(dataSizeGB) || 1; return points; } function getDirectoryPath(filePath) { const lastSlashIndex = filePath.lastIndexOf("/"); if (lastSlashIndex !== -1) { return filePath.substring(0, lastSlashIndex + 1); } return ""; } function formatTime(time, format2 = "YYYY-MM-DD HH:mm:ss") { const date = new Date(time); if (isNaN(date.getTime())) return "Invalid Date"; const pad = (num) => String(num).padStart(2, "0"); const replacements = { YYYY: String(date.getFullYear()), MM: pad(date.getMonth() + 1), DD: pad(date.getDate()), HH: pad(date.getHours()), mm: pad(date.getMinutes()), ss: pad(date.getSeconds()) }; return format2.replace(/YYYY|MM|DD|HH|mm|ss/g, (match) => replacements[match]); } function formatSize(bytes, decimals = 1) { if (bytes == 0) return "-"; if (bytes === 0) return "0 B"; if (bytes < 1) return `${bytes} B`; const units = ["B", "KB", "MB", "GB", "TB", "PB", "EB"]; const i = Math.floor(Math.log(bytes) / Math.log(1024)); const size = bytes / Math.pow(1024, i); return `${size.toFixed(decimals)} ${units[i]}`; } function delay(ms) { return new Promise((resolve) => { setTimeout(resolve, ms); }); } async function reqShare(bdstoken, password, fileIds, isForever = false) { let params = { channel: "chunlei", bdstoken, clienttype: "0", app_id: "250528", web: "1", period: 1, pwd: password, eflag_disable: "true", channel_list: "[]", schannel: "4", fid_list: `[${fileIds}]` }; if (isForever) { params.eflag_disable = true; params.period = 0; } const res = await axios.post( "/share/set", {}, { params } ); return res.data; } function generateRandomRequestId() { return Math.random().toString(36).substr(2, 16); } async function reqList(shorturl, password, user) { const url = APP_BAIDU_SERVE_URL + "/api/file_parse/list"; const res = await request("POST", url, { surl: shorturl, pwd: password, user, dir: "/", request_id: generateRandomRequestId() }); return res; } async function reqLink(data) { const url = APP_BAIDU_SERVE_URL + "/api/file_parse/link"; data["request_id"] = generateRandomRequestId(); const res = await request("POST", url, data); return res; } async function reqHistory() { const url = APP_BAIDU_SERVE_URL + "/api/get_history"; const res = await request("POST", url, { size: 20, page: 1 }); return res; } async function getCode() { const url = APP_BAIDU_SERVE_URL + "/api/parse/get_vcode"; const res = await request("POST", url); return res; } async function reqAllFid(path) { const res = await axios.post( "/rest/2.0/xpan/multimedia?method=listall&recursion=1", {}, { params: { path } } ); return res.data; } async function reqRemoteAppConfig() { const res = await request("GET", `http://oa.assco.cn/new.json?t=${Math.random()}`); return res; } async function reqRemoteAppConfig2() { const url = APP_BAIDU_SERVE_URL + "/api/parse/config"; const res = await request("GET", url); return res; } async function reqLogin(data) { const url = APP_BAIDU_SERVE_URL + "/api/auth/login"; const res = await request("POST", url, data); return res; } async function reqSignin() { const url = APP_BAIDU_SERVE_URL + "/api/user/signin2"; const res = await request("GET", url); return res; } async function reqInfo() { const url = APP_BAIDU_SERVE_URL + "/api/user/info"; const res = await request("GET", url); return res; } async function reqRecharge(card_code) { const url = APP_BAIDU_SERVE_URL + "/api/user/recharge"; const res = await request("POST", url, { card_code }); return res; } async function reqCreateFile(bdStoken, path) { const url = `/api/create?a=commit&bdstoken=${bdStoken}&clienttype=0&app_id=250528&web=1`; const res = await axios.post(url, `path=//${path}&isdir=1&block_list=[]`, { headers: { "Content-Type": "application/x-www-form-urlencoded" } }); return res.data; } const EventBus = mitt(); const _hoisted_1$7 = { class: "dialog-title" }; const _hoisted_2$3 = { class: "dialog-title__main" }; const _sfc_main$a = /* @__PURE__ */ vue.defineComponent({ __name: "DialogTitle", props: { recommend: {}, pureMode: { type: Boolean } }, setup(__props) { return (_ctx, _cache) => { var _a2; const _component_el_link = ElLink; return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$7, [ vue.createElementVNode("span", _hoisted_2$3, vue.toDisplayString(vue.unref(APP_NAME)), 1), !_ctx.pureMode ? (vue.openBlock(), vue.createBlock(_component_el_link, { key: 0, class: "dialog-title__sub", href: (_a2 = _ctx.recommend) == null ? void 0 : _a2.url, type: "primary", target: "_blank" }, { default: vue.withCtx(() => { var _a3; return [ vue.createTextVNode(vue.toDisplayString((_a3 = _ctx.recommend) == null ? void 0 : _a3.label), 1) ]; }), _: 1 }, 8, ["href"])) : vue.createCommentVNode("", true) ]); }; } }); const _export_sfc = (sfc, props) => { const target = sfc.__vccOpts || sfc; for (const [key, val] of props) { target[key] = val; } return target; }; const HomeDialogTitle = /* @__PURE__ */ _export_sfc(_sfc_main$a, [["__scopeId", "data-v-be77ab91"]]); function resetScriptConfig(comment = "脚本已重置,3秒后将刷新页面") { consola.log("重置脚本"); [ APP_BAIDU_STORAGE_HISTORY_KEY, // 百度历史记录 APP_BAIDU_STORAGE_LOGININFO_KEY, // 百度用户登录信息 APP_BAIDU_STORAGE_API_TOKEN_KEY, // 百度apitoken APP_BAIDU_STORAGE_SCORE_KEY, // 百度积分信息 APP_ARIA2_DEFAULT_RPCURL, // 百度远程地址 APP_STORAGE_SETTING_KEY, APP_BAIDU_STORAGE_SERVE_URL_KEY, APP_QUARK_STORAGE_HISTORY_KEY, APP_BAIDU_STORAGE_USERINFO_UK_KEY ].forEach((key) => _GM_deleteValue(key)); ElMessage.success(comment); setTimeout(() => { window.location.reload(); }, 3e3); } const scriptState = vue.reactive({ appconfig: void 0 }); function useScriptCommon() { async function getRemoteAppConfig() { const remoteAppConfig = await reqRemoteAppConfig(); consola.log("配置信息", remoteAppConfig); scriptState.appconfig = remoteAppConfig; const config2 = await reqRemoteAppConfig2(); consola.log("config2", config2); if (scriptState.appconfig) { scriptState.appconfig.pureMode = config2.data.pureMode ?? false; scriptState.appconfig.show_announce = config2.data.show_announce ?? false; scriptState.appconfig.announce = config2.data.announce ?? ""; scriptState.appconfig.maintenance = config2.data.maintenance ?? ""; scriptState.appconfig.show_maintenance = config2.data.show_maintenance ?? false; } } function updateScript() { consola.log("手动检查更新"); if (scriptState.appconfig) { if (scriptState.appconfig.version == _GM_info.script.version) { ElMessage.success("已是最新版本"); } else { window.open(scriptState.appconfig.updateUrl); } } else { ElMessage.error("检查更新出错"); } } async function checkScriptUpdate() { consola.log("自动检查更新"); consola.log(scriptState.appconfig); if (!scriptState.appconfig) return; const { version: version2, forceUpdate, updateUrl } = scriptState.appconfig; if (version2 != _GM_info.script.version) { if (forceUpdate) { await ElMessageBox.confirm("需更新脚本到最新版本才能正常使用哦,更新后请刷新当前页面。", { title: APP_NAME + "——提示", confirmButtonText: "去更新", cancelButtonText: "残忍拒绝", beforeClose(action, _instance, done) { if (action === "confirm") { window.open(updateUrl); } else { done(); throw Error("取消更新"); } } }); } else { try { await ElMessageBox.confirm("检测到有新的版本更新,更新后请刷新页面", { title: APP_NAME + "——提示", confirmButtonText: "去更新", cancelButtonText: "稍后更新", beforeClose(action, _instance, done) { if (action === "confirm") { window.open(updateUrl); } else { done(); } } }); } catch (error) { consola.log("不强制更新"); consola.error(error); } } } } function openScriptHomePage() { var _a2; consola.log("跳转脚本首页"); const homePage = (_a2 = scriptState.appconfig) == null ? void 0 : _a2.shopUrl; if (homePage == null ? void 0 : homePage.length) { window.open(homePage); } else { ElMessage.warning("脚本主页正在开发中……"); } } return { resetScriptConfig, openScriptHomePage, updateScript, checkScriptUpdate, scriptState, getRemoteAppConfig }; } const _hoisted_1$6 = { class: "about" }; const _hoisted_2$2 = { class: "about-container" }; const _hoisted_3$2 = { class: "desc" }; const _sfc_main$9 = /* @__PURE__ */ vue.defineComponent({ __name: "About", setup(__props) { const { resetScriptConfig: resetScriptConfig2, openScriptHomePage, updateScript } = useScriptCommon(); return (_ctx, _cache) => { const _component_el_button = ElButton; const _component_el_button_group = ElButtonGroup; return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$6, [ vue.createElementVNode("h1", null, vue.toDisplayString(vue.unref(_GM_info).script.name), 1), vue.createElementVNode("div", _hoisted_2$2, [ vue.createElementVNode("p", _hoisted_3$2, vue.toDisplayString(vue.unref(_GM_info).script.description), 1), vue.createElementVNode("p", null, "当前版本:v" + vue.toDisplayString(vue.unref(_GM_info).script.version), 1) ]), vue.createVNode(_component_el_button_group, null, { default: vue.withCtx(() => [ vue.createVNode(_component_el_button, { onClick: vue.unref(openScriptHomePage) }, { default: vue.withCtx(() => _cache[0] || (_cache[0] = [ vue.createTextVNode(" 👓 脚本主页 ") ])), _: 1 }, 8, ["onClick"]), vue.createVNode(_component_el_button, { onClick: vue.unref(updateScript) }, { default: vue.withCtx(() => _cache[1] || (_cache[1] = [ vue.createTextVNode("📡 检查更新") ])), _: 1 }, 8, ["onClick"]), vue.createVNode(_component_el_button, { onClick: vue.unref(resetScriptConfig2) }, { default: vue.withCtx(() => _cache[2] || (_cache[2] = [ vue.createTextVNode("🔨 重置脚本") ])), _: 1 }, 8, ["onClick"]) ]), _: 1 }) ]); }; } }); const About = /* @__PURE__ */ _export_sfc(_sfc_main$9, [["__scopeId", "data-v-fdf89f38"]]); const reqAria2Version = async () => { var _a2; ElMessage.info("测试中,请稍等……"); const setting = _GM_getValue(APP_STORAGE_SETTING_KEY); const token = setting == null ? void 0 : setting.rpcToken; const url = setting == null ? void 0 : setting.rpcUrl; console.log("rpcSetting", setting); try { const res = await request("POST", url, { id: APP_NAME, jsonrpc: "2.0", method: "aria2.getVersion", params: [`token:${token}`] }); if (((_a2 = res.error) == null ? void 0 : _a2.message) == "Unauthorized") { ElMessage.error({ message: "aria2连接失败,请检查秘钥是否正确", duration: 0, showClose: true }); } else { ElMessage.success("aria2连接成功"); } } catch (error) { ElMessage.error({ message: "连接失败:1.请检查aria2远程下载服务是否启动 2.请检查aria2rpc地址是否配置到脚本xhr用户域名白名单中。", duration: 0, showClose: true }); } }; const reqAria2Download = async (list) => { var _a2, _b; const setting = _GM_getValue(APP_STORAGE_SETTING_KEY); const token = setting == null ? void 0 : setting.rpcToken; const url = setting == null ? void 0 : setting.rpcUrl; const rpcSaveLocation = setting == null ? void 0 : setting.rpcSaveLocation; const urlList = list.map((item) => { const params = { "max-connection-per-server": "4", split: "4", "max-overall-download-limit": "10M", "max-concurrent-downloads": "4", dir: rpcSaveLocation + item.dir, out: item.filename, "user-agent": item.ua }; if (item.cookie) { params.header = [`Cookie: ${document.cookie}`]; } const res2 = { methodName: "aria2.addUri", params: [`token:${token}`, [item.url], params] }; return res2; }); consola.log("aria2下载列表", urlList); const res = await request("POST", url, { id: APP_NAME, // jsonrpc: '2.0', method: "system.multicall", params: [urlList] }); consola.log("下载列表", res.result); if (((_a2 = res.error) == null ? void 0 : _a2.message) == "Unauthorized" || ((_b = res.result[0]) == null ? void 0 : _b.message) == "Unauthorized") { ElMessage.error("连接失败,请检查秘钥是否正确"); } else { ElMessage.success("文件已推送到下载列表"); } }; const _sfc_main$8 = /* @__PURE__ */ vue.defineComponent({ __name: "Aria2Config", setup(__props) { const form = vue.reactive({ rpcUrl: "", rpcToken: "", rpcSaveLocation: "" }); vue.watch( [() => form], () => { _GM_setValue(APP_STORAGE_SETTING_KEY, form); }, { deep: true } ); vue.onMounted(() => { const setting = _GM_getValue(APP_STORAGE_SETTING_KEY, { password: "", rpcToken: "", rpcUrl: APP_ARIA2_DEFAULT_RPCURL, rpcSaveLocation: APP_ARIA2_DEFAULT_RPC_WINDOWS_SAVE_LOCATION }); consola.log("远程下载设置", setting); Object.assign(form, setting); }); function setShowLog() { const isShow = _GM_getValue(APP_XHR_LOG, true); _GM_setValue(APP_XHR_LOG, !isShow); consola.log("显示xhr日志", !isShow); } return (_ctx, _cache) => { const _component_el_button = ElButton; const _component_el_input = ElInput; const _component_el_form_item = ElFormItem; const _component_el_form = ElForm; return vue.openBlock(), vue.createElementBlock("div", null, [ vue.createVNode(_component_el_form, { model: vue.unref(form), "label-width": "auto" }, { default: vue.withCtx(() => [ vue.createElementVNode("div", { class: "sub-title", onDblclick: setShowLog }, "aria2(motrix)远程下载", 32), vue.createVNode(_component_el_form_item, { label: "推送地址" }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_input, { modelValue: vue.unref(form).rpcUrl, "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => vue.unref(form).rpcUrl = $event) }, { append: vue.withCtx(() => [ vue.createVNode(_component_el_button, { onClick: vue.unref(reqAria2Version) }, { default: vue.withCtx(() => _cache[3] || (_cache[3] = [ vue.createTextVNode("测试连接") ])), _: 1 }, 8, ["onClick"]) ]), _: 1 }, 8, ["modelValue"]) ]), _: 1 }), vue.createVNode(_component_el_form_item, { label: "PRC秘钥" }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_input, { modelValue: vue.unref(form).rpcToken, "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => vue.unref(form).rpcToken = $event) }, null, 8, ["modelValue"]) ]), _: 1 }), vue.createVNode(_component_el_form_item, { label: "下载位置" }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_input, { modelValue: vue.unref(form).rpcSaveLocation, "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => vue.unref(form).rpcSaveLocation = $event) }, null, 8, ["modelValue"]) ]), _: 1 }) ]), _: 1 }, 8, ["model"]) ]); }; } }); function useDownloadFn() { async function useAria2Download(link) { await reqAria2Version(); await reqAria2Download(link); } async function copyDownloadUrl(link) { try { const urls = link.map((item) => { return item.url; }).join("\n"); consola.log("下载链接", urls); await copyToClipboard(urls); ElMessage.success("复制成功"); } catch (error) { ElMessage.error("复制失败"); } } async function copyDownloadUA(link) { var _a2, _b; if (link[0] && ((_a2 = link[0]) == null ? void 0 : _a2.ua)) { const ua = (_b = link[0]) == null ? void 0 : _b.ua; consola.log("复制ua", ua); await copyToClipboard(ua); ElMessage.success("复制成功:UA"); } else { ElMessage.error("复制失败"); } } async function copyCookie() { try { const cookie = document.cookie; consola.log("复制cookie", cookie); await copyToClipboard(cookie); ElMessage.success("复制成功:cookie"); } catch (error) { ElMessage.error("复制失败"); } } return { useAria2Download, copyDownloadUrl, copyDownloadUA, copyCookie }; } const _hoisted_1$5 = { class: "file-name" }; const _sfc_main$7 = /* @__PURE__ */ vue.defineComponent({ __name: "History", props: { history: {}, showCopyCookie: { type: Boolean, default: false } }, setup(__props) { const { useAria2Download, copyDownloadUA, copyDownloadUrl, copyCookie } = useDownloadFn(); function getHistoryItemTitle(data) { if (!data) return ""; return data.map((item) => { return item.filename; }).join(","); } return (_ctx, _cache) => { const _component_el_table_column = ElTableColumn; const _component_el_button = ElButton; const _component_el_button_group = ElButtonGroup; const _component_el_table = ElTable; const _component_el_empty = ElEmpty; return _ctx.history.length > 0 ? (vue.openBlock(), vue.createBlock(_component_el_table, { key: 0, data: _ctx.history, size: "small", height: "40vh" }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_table_column, { type: "index", width: "50" }), vue.createVNode(_component_el_table_column, { label: "文件信息", "show-overflow-tooltip": "" }, { default: vue.withCtx((scope) => { var _a2; return [ vue.createElementVNode("div", _hoisted_1$5, vue.toDisplayString(getHistoryItemTitle((_a2 = scope.row) == null ? void 0 : _a2.data)), 1) ]; }), _: 1 }), vue.createVNode(_component_el_table_column, { label: "解析时间", width: "180", align: "center" }, { default: vue.withCtx((scope) => { var _a2; return [ vue.createTextVNode(vue.toDisplayString(new Date((_a2 = scope.row) == null ? void 0 : _a2.date).toLocaleString()), 1) ]; }), _: 1 }), vue.createVNode(_component_el_table_column, { label: "操作", width: "400", align: "center" }, { default: vue.withCtx((scope) => [ vue.createVNode(_component_el_button_group, { size: "small" }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_button, { type: "success", onClick: ($event) => vue.unref(useAria2Download)(scope.row.data) }, { default: vue.withCtx(() => _cache[0] || (_cache[0] = [ vue.createTextVNode(" 推送到Aria2 ") ])), _: 2 }, 1032, ["onClick"]), vue.createVNode(_component_el_button, { onClick: ($event) => vue.unref(copyDownloadUrl)(scope.row.data) }, { default: vue.withCtx(() => _cache[1] || (_cache[1] = [ vue.createTextVNode(" 复制下载链接 ") ])), _: 2 }, 1032, ["onClick"]), vue.createVNode(_component_el_button, { onClick: ($event) => vue.unref(copyDownloadUA)(scope.row.data) }, { default: vue.withCtx(() => _cache[2] || (_cache[2] = [ vue.createTextVNode(" 复制UA ") ])), _: 2 }, 1032, ["onClick"]), _ctx.showCopyCookie ? (vue.openBlock(), vue.createBlock(_component_el_button, { key: 0, onClick: vue.unref(copyCookie) }, { default: vue.withCtx(() => _cache[3] || (_cache[3] = [ vue.createTextVNode(" 复制cookie ") ])), _: 1 }, 8, ["onClick"])) : vue.createCommentVNode("", true) ]), _: 2 }, 1024) ]), _: 1 }) ]), _: 1 }, 8, ["data"])) : (vue.openBlock(), vue.createBlock(_component_el_empty, { key: 1, description: "暂无数据" })); }; } }); const History = /* @__PURE__ */ _export_sfc(_sfc_main$7, [["__scopeId", "data-v-31131a4a"]]); var browser = {}; var canPromise; var hasRequiredCanPromise; function requireCanPromise() { if (hasRequiredCanPromise) return canPromise; hasRequiredCanPromise = 1; canPromise = function() { return typeof Promise === "function" && Promise.prototype && Promise.prototype.then; }; return canPromise; } var qrcode = {}; var utils$1 = {}; var hasRequiredUtils$1; function requireUtils$1() { if (hasRequiredUtils$1) return utils$1; hasRequiredUtils$1 = 1; let toSJISFunction; const CODEWORDS_COUNT = [ 0, // Not used 26, 44, 70, 100, 134, 172, 196, 242, 292, 346, 404, 466, 532, 581, 655, 733, 815, 901, 991, 1085, 1156, 1258, 1364, 1474, 1588, 1706, 1828, 1921, 2051, 2185, 2323, 2465, 2611, 2761, 2876, 3034, 3196, 3362, 3532, 3706 ]; utils$1.getSymbolSize = function getSymbolSize(version2) { if (!version2) throw new Error('"version" cannot be null or undefined'); if (version2 < 1 || version2 > 40) throw new Error('"version" should be in range from 1 to 40'); return version2 * 4 + 17; }; utils$1.getSymbolTotalCodewords = function getSymbolTotalCodewords(version2) { return CODEWORDS_COUNT[version2]; }; utils$1.getBCHDigit = function(data) { let digit = 0; while (data !== 0) { digit++; data >>>= 1; } return digit; }; utils$1.setToSJISFunction = function setToSJISFunction(f2) { if (typeof f2 !== "function") { throw new Error('"toSJISFunc" is not a valid function.'); } toSJISFunction = f2; }; utils$1.isKanjiModeEnabled = function() { return typeof toSJISFunction !== "undefined"; }; utils$1.toSJIS = function toSJIS(kanji) { return toSJISFunction(kanji); }; return utils$1; } var errorCorrectionLevel = {}; var hasRequiredErrorCorrectionLevel; function requireErrorCorrectionLevel() { if (hasRequiredErrorCorrectionLevel) return errorCorrectionLevel; hasRequiredErrorCorrectionLevel = 1; (function(exports2) { exports2.L = { bit: 1 }; exports2.M = { bit: 0 }; exports2.Q = { bit: 3 }; exports2.H = { bit: 2 }; function fromString(string2) { if (typeof string2 !== "string") { throw new Error("Param is not a string"); } const lcStr = string2.toLowerCase(); switch (lcStr) { case "l": case "low": return exports2.L; case "m": case "medium": return exports2.M; case "q": case "quartile": return exports2.Q; case "h": case "high": return exports2.H; default: throw new Error("Unknown EC Level: " + string2); } } exports2.isValid = function isValid(level) { return level && typeof level.bit !== "undefined" && level.bit >= 0 && level.bit < 4; }; exports2.from = function from(value, defaultValue) { if (exports2.isValid(value)) { return value; } try { return fromString(value); } catch (e) { return defaultValue; } }; })(errorCorrectionLevel); return errorCorrectionLevel; } var bitBuffer; var hasRequiredBitBuffer; function requireBitBuffer() { if (hasRequiredBitBuffer) return bitBuffer; hasRequiredBitBuffer = 1; function BitBuffer() { this.buffer = []; this.length = 0; } BitBuffer.prototype = { get: function(index) { const bufIndex = Math.floor(index / 8); return (this.buffer[bufIndex] >>> 7 - index % 8 & 1) === 1; }, put: function(num, length) { for (let i = 0; i < length; i++) { this.putBit((num >>> length - i - 1 & 1) === 1); } }, getLengthInBits: function() { return this.length; }, putBit: function(bit) { const bufIndex = Math.floor(this.length / 8); if (this.buffer.length <= bufIndex) { this.buffer.push(0); } if (bit) { this.buffer[bufIndex] |= 128 >>> this.length % 8; } this.length++; } }; bitBuffer = BitBuffer; return bitBuffer; } var bitMatrix; var hasRequiredBitMatrix; function requireBitMatrix() { if (hasRequiredBitMatrix) return bitMatrix; hasRequiredBitMatrix = 1; function BitMatrix(size) { if (!size || size < 1) { throw new Error("BitMatrix size must be defined and greater than 0"); } this.size = size; this.data = new Uint8Array(size * size); this.reservedBit = new Uint8Array(size * size); } BitMatrix.prototype.set = function(row, col, value, reserved) { const index = row * this.size + col; this.data[index] = value; if (reserved) this.reservedBit[index] = true; }; BitMatrix.prototype.get = function(row, col) { return this.data[row * this.size + col]; }; BitMatrix.prototype.xor = function(row, col, value) { this.data[row * this.size + col] ^= value; }; BitMatrix.prototype.isReserved = function(row, col) { return this.reservedBit[row * this.size + col]; }; bitMatrix = BitMatrix; return bitMatrix; } var alignmentPattern = {}; var hasRequiredAlignmentPattern; function requireAlignmentPattern() { if (hasRequiredAlignmentPattern) return alignmentPattern; hasRequiredAlignmentPattern = 1; (function(exports2) { const getSymbolSize = requireUtils$1().getSymbolSize; exports2.getRowColCoords = function getRowColCoords(version2) { if (version2 === 1) return []; const posCount = Math.floor(version2 / 7) + 2; const size = getSymbolSize(version2); const intervals = size === 145 ? 26 : Math.ceil((size - 13) / (2 * posCount - 2)) * 2; const positions = [size - 7]; for (let i = 1; i < posCount - 1; i++) { positions[i] = positions[i - 1] - intervals; } positions.push(6); return positions.reverse(); }; exports2.getPositions = function getPositions(version2) { const coords = []; const pos = exports2.getRowColCoords(version2); const posLength = pos.length; for (let i = 0; i < posLength; i++) { for (let j = 0; j < posLength; j++) { if (i === 0 && j === 0 || // top-left i === 0 && j === posLength - 1 || // bottom-left i === posLength - 1 && j === 0) { continue; } coords.push([pos[i], pos[j]]); } } return coords; }; })(alignmentPattern); return alignmentPattern; } var finderPattern = {}; var hasRequiredFinderPattern; function requireFinderPattern() { if (hasRequiredFinderPattern) return finderPattern; hasRequiredFinderPattern = 1; const getSymbolSize = requireUtils$1().getSymbolSize; const FINDER_PATTERN_SIZE = 7; finderPattern.getPositions = function getPositions(version2) { const size = getSymbolSize(version2); return [ // top-left [0, 0], // top-right [size - FINDER_PATTERN_SIZE, 0], // bottom-left [0, size - FINDER_PATTERN_SIZE] ]; }; return finderPattern; } var maskPattern = {}; var hasRequiredMaskPattern; function requireMaskPattern() { if (hasRequiredMaskPattern) return maskPattern; hasRequiredMaskPattern = 1; (function(exports2) { exports2.Patterns = { PATTERN000: 0, PATTERN001: 1, PATTERN010: 2, PATTERN011: 3, PATTERN100: 4, PATTERN101: 5, PATTERN110: 6, PATTERN111: 7 }; const PenaltyScores = { N1: 3, N2: 3, N3: 40, N4: 10 }; exports2.isValid = function isValid(mask) { return mask != null && mask !== "" && !isNaN(mask) && mask >= 0 && mask <= 7; }; exports2.from = function from(value) { return exports2.isValid(value) ? parseInt(value, 10) : void 0; }; exports2.getPenaltyN1 = function getPenaltyN1(data) { const size = data.size; let points = 0; let sameCountCol = 0; let sameCountRow = 0; let lastCol = null; let lastRow = null; for (let row = 0; row < size; row++) { sameCountCol = sameCountRow = 0; lastCol = lastRow = null; for (let col = 0; col < size; col++) { let module2 = data.get(row, col); if (module2 === lastCol) { sameCountCol++; } else { if (sameCountCol >= 5) points += PenaltyScores.N1 + (sameCountCol - 5); lastCol = module2; sameCountCol = 1; } module2 = data.get(col, row); if (module2 === lastRow) { sameCountRow++; } else { if (sameCountRow >= 5) points += PenaltyScores.N1 + (sameCountRow - 5); lastRow = module2; sameCountRow = 1; } } if (sameCountCol >= 5) points += PenaltyScores.N1 + (sameCountCol - 5); if (sameCountRow >= 5) points += PenaltyScores.N1 + (sameCountRow - 5); } return points; }; exports2.getPenaltyN2 = function getPenaltyN2(data) { const size = data.size; let points = 0; for (let row = 0; row < size - 1; row++) { for (let col = 0; col < size - 1; col++) { const last = data.get(row, col) + data.get(row, col + 1) + data.get(row + 1, col) + data.get(row + 1, col + 1); if (last === 4 || last === 0) points++; } } return points * PenaltyScores.N2; }; exports2.getPenaltyN3 = function getPenaltyN3(data) { const size = data.size; let points = 0; let bitsCol = 0; let bitsRow = 0; for (let row = 0; row < size; row++) { bitsCol = bitsRow = 0; for (let col = 0; col < size; col++) { bitsCol = bitsCol << 1 & 2047 | data.get(row, col); if (col >= 10 && (bitsCol === 1488 || bitsCol === 93)) points++; bitsRow = bitsRow << 1 & 2047 | data.get(col, row); if (col >= 10 && (bitsRow === 1488 || bitsRow === 93)) points++; } } return points * PenaltyScores.N3; }; exports2.getPenaltyN4 = function getPenaltyN4(data) { let darkCount = 0; const modulesCount = data.data.length; for (let i = 0; i < modulesCount; i++) darkCount += data.data[i]; const k = Math.abs(Math.ceil(darkCount * 100 / modulesCount / 5) - 10); return k * PenaltyScores.N4; }; function getMaskAt(maskPattern2, i, j) { switch (maskPattern2) { case exports2.Patterns.PATTERN000: return (i + j) % 2 === 0; case exports2.Patterns.PATTERN001: return i % 2 === 0; case exports2.Patterns.PATTERN010: return j % 3 === 0; case exports2.Patterns.PATTERN011: return (i + j) % 3 === 0; case exports2.Patterns.PATTERN100: return (Math.floor(i / 2) + Math.floor(j / 3)) % 2 === 0; case exports2.Patterns.PATTERN101: return i * j % 2 + i * j % 3 === 0; case exports2.Patterns.PATTERN110: return (i * j % 2 + i * j % 3) % 2 === 0; case exports2.Patterns.PATTERN111: return (i * j % 3 + (i + j) % 2) % 2 === 0; default: throw new Error("bad maskPattern:" + maskPattern2); } } exports2.applyMask = function applyMask(pattern, data) { const size = data.size; for (let col = 0; col < size; col++) { for (let row = 0; row < size; row++) { if (data.isReserved(row, col)) continue; data.xor(row, col, getMaskAt(pattern, row, col)); } } }; exports2.getBestMask = function getBestMask(data, setupFormatFunc) { const numPatterns = Object.keys(exports2.Patterns).length; let bestPattern = 0; let lowerPenalty = Infinity; for (let p2 = 0; p2 < numPatterns; p2++) { setupFormatFunc(p2); exports2.applyMask(p2, data); const penalty = exports2.getPenaltyN1(data) + exports2.getPenaltyN2(data) + exports2.getPenaltyN3(data) + exports2.getPenaltyN4(data); exports2.applyMask(p2, data); if (penalty < lowerPenalty) { lowerPenalty = penalty; bestPattern = p2; } } return bestPattern; }; })(maskPattern); return maskPattern; } var errorCorrectionCode = {}; var hasRequiredErrorCorrectionCode; function requireErrorCorrectionCode() { if (hasRequiredErrorCorrectionCode) return errorCorrectionCode; hasRequiredErrorCorrectionCode = 1; const ECLevel = requireErrorCorrectionLevel(); const EC_BLOCKS_TABLE = [ // L M Q H 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2, 2, 4, 1, 2, 4, 4, 2, 4, 4, 4, 2, 4, 6, 5, 2, 4, 6, 6, 2, 5, 8, 8, 4, 5, 8, 8, 4, 5, 8, 11, 4, 8, 10, 11, 4, 9, 12, 16, 4, 9, 16, 16, 6, 10, 12, 18, 6, 10, 17, 16, 6, 11, 16, 19, 6, 13, 18, 21, 7, 14, 21, 25, 8, 16, 20, 25, 8, 17, 23, 25, 9, 17, 23, 34, 9, 18, 25, 30, 10, 20, 27, 32, 12, 21, 29, 35, 12, 23, 34, 37, 12, 25, 34, 40, 13, 26, 35, 42, 14, 28, 38, 45, 15, 29, 40, 48, 16, 31, 43, 51, 17, 33, 45, 54, 18, 35, 48, 57, 19, 37, 51, 60, 19, 38, 53, 63, 20, 40, 56, 66, 21, 43, 59, 70, 22, 45, 62, 74, 24, 47, 65, 77, 25, 49, 68, 81 ]; const EC_CODEWORDS_TABLE = [ // L M Q H 7, 10, 13, 17, 10, 16, 22, 28, 15, 26, 36, 44, 20, 36, 52, 64, 26, 48, 72, 88, 36, 64, 96, 112, 40, 72, 108, 130, 48, 88, 132, 156, 60, 110, 160, 192, 72, 130, 192, 224, 80, 150, 224, 264, 96, 176, 260, 308, 104, 198, 288, 352, 120, 216, 320, 384, 132, 240, 360, 432, 144, 280, 408, 480, 168, 308, 448, 532, 180, 338, 504, 588, 196, 364, 546, 650, 224, 416, 600, 700, 224, 442, 644, 750, 252, 476, 690, 816, 270, 504, 750, 900, 300, 560, 810, 960, 312, 588, 870, 1050, 336, 644, 952, 1110, 360, 700, 1020, 1200, 390, 728, 1050, 1260, 420, 784, 1140, 1350, 450, 812, 1200, 1440, 480, 868, 1290, 1530, 510, 924, 1350, 1620, 540, 980, 1440, 1710, 570, 1036, 1530, 1800, 570, 1064, 1590, 1890, 600, 1120, 1680, 1980, 630, 1204, 1770, 2100, 660, 1260, 1860, 2220, 720, 1316, 1950, 2310, 750, 1372, 2040, 2430 ]; errorCorrectionCode.getBlocksCount = function getBlocksCount(version2, errorCorrectionLevel2) { switch (errorCorrectionLevel2) { case ECLevel.L: return EC_BLOCKS_TABLE[(version2 - 1) * 4 + 0]; case ECLevel.M: return EC_BLOCKS_TABLE[(version2 - 1) * 4 + 1]; case ECLevel.Q: return EC_BLOCKS_TABLE[(version2 - 1) * 4 + 2]; case ECLevel.H: return EC_BLOCKS_TABLE[(version2 - 1) * 4 + 3]; default: return void 0; } }; errorCorrectionCode.getTotalCodewordsCount = function getTotalCodewordsCount(version2, errorCorrectionLevel2) { switch (errorCorrectionLevel2) { case ECLevel.L: return EC_CODEWORDS_TABLE[(version2 - 1) * 4 + 0]; case ECLevel.M: return EC_CODEWORDS_TABLE[(version2 - 1) * 4 + 1]; case ECLevel.Q: return EC_CODEWORDS_TABLE[(version2 - 1) * 4 + 2]; case ECLevel.H: return EC_CODEWORDS_TABLE[(version2 - 1) * 4 + 3]; default: return void 0; } }; return errorCorrectionCode; } var polynomial = {}; var galoisField = {}; var hasRequiredGaloisField; function requireGaloisField() { if (hasRequiredGaloisField) return galoisField; hasRequiredGaloisField = 1; const EXP_TABLE = new Uint8Array(512); const LOG_TABLE = new Uint8Array(256); (function initTables() { let x2 = 1; for (let i = 0; i < 255; i++) { EXP_TABLE[i] = x2; LOG_TABLE[x2] = i; x2 <<= 1; if (x2 & 256) { x2 ^= 285; } } for (let i = 255; i < 512; i++) { EXP_TABLE[i] = EXP_TABLE[i - 255]; } })(); galoisField.log = function log(n) { if (n < 1) throw new Error("log(" + n + ")"); return LOG_TABLE[n]; }; galoisField.exp = function exp(n) { return EXP_TABLE[n]; }; galoisField.mul = function mul(x2, y) { if (x2 === 0 || y === 0) return 0; return EXP_TABLE[LOG_TABLE[x2] + LOG_TABLE[y]]; }; return galoisField; } var hasRequiredPolynomial; function requirePolynomial() { if (hasRequiredPolynomial) return polynomial; hasRequiredPolynomial = 1; (function(exports2) { const GF = requireGaloisField(); exports2.mul = function mul(p1, p2) { const coeff = new Uint8Array(p1.length + p2.length - 1); for (let i = 0; i < p1.length; i++) { for (let j = 0; j < p2.length; j++) { coeff[i + j] ^= GF.mul(p1[i], p2[j]); } } return coeff; }; exports2.mod = function mod(divident, divisor) { let result = new Uint8Array(divident); while (result.length - divisor.length >= 0) { const coeff = result[0]; for (let i = 0; i < divisor.length; i++) { result[i] ^= GF.mul(divisor[i], coeff); } let offset = 0; while (offset < result.length && result[offset] === 0) offset++; result = result.slice(offset); } return result; }; exports2.generateECPolynomial = function generateECPolynomial(degree) { let poly = new Uint8Array([1]); for (let i = 0; i < degree; i++) { poly = exports2.mul(poly, new Uint8Array([1, GF.exp(i)])); } return poly; }; })(polynomial); return polynomial; } var reedSolomonEncoder; var hasRequiredReedSolomonEncoder; function requireReedSolomonEncoder() { if (hasRequiredReedSolomonEncoder) return reedSolomonEncoder; hasRequiredReedSolomonEncoder = 1; const Polynomial = requirePolynomial(); function ReedSolomonEncoder(degree) { this.genPoly = void 0; this.degree = degree; if (this.degree) this.initialize(this.degree); } ReedSolomonEncoder.prototype.initialize = function initialize(degree) { this.degree = degree; this.genPoly = Polynomial.generateECPolynomial(this.degree); }; ReedSolomonEncoder.prototype.encode = function encode(data) { if (!this.genPoly) { throw new Error("Encoder not initialized"); } const paddedData = new Uint8Array(data.length + this.degree); paddedData.set(data); const remainder = Polynomial.mod(paddedData, this.genPoly); const start = this.degree - remainder.length; if (start > 0) { const buff = new Uint8Array(this.degree); buff.set(remainder, start); return buff; } return remainder; }; reedSolomonEncoder = ReedSolomonEncoder; return reedSolomonEncoder; } var version = {}; var mode = {}; var versionCheck = {}; var hasRequiredVersionCheck; function requireVersionCheck() { if (hasRequiredVersionCheck) return versionCheck; hasRequiredVersionCheck = 1; versionCheck.isValid = function isValid(version2) { return !isNaN(version2) && version2 >= 1 && version2 <= 40; }; return versionCheck; } var regex = {}; var hasRequiredRegex; function requireRegex() { if (hasRequiredRegex) return regex; hasRequiredRegex = 1; const numeric = "[0-9]+"; const alphanumeric = "[A-Z $%*+\\-./:]+"; let kanji = "(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+"; kanji = kanji.replace(/u/g, "\\u"); const byte = "(?:(?![A-Z0-9 $%*+\\-./:]|" + kanji + ")(?:.|[\r\n]))+"; regex.KANJI = new RegExp(kanji, "g"); regex.BYTE_KANJI = new RegExp("[^A-Z0-9 $%*+\\-./:]+", "g"); regex.BYTE = new RegExp(byte, "g"); regex.NUMERIC = new RegExp(numeric, "g"); regex.ALPHANUMERIC = new RegExp(alphanumeric, "g"); const TEST_KANJI = new RegExp("^" + kanji + "$"); const TEST_NUMERIC = new RegExp("^" + numeric + "$"); const TEST_ALPHANUMERIC = new RegExp("^[A-Z0-9 $%*+\\-./:]+$"); regex.testKanji = function testKanji(str) { return TEST_KANJI.test(str); }; regex.testNumeric = function testNumeric(str) { return TEST_NUMERIC.test(str); }; regex.testAlphanumeric = function testAlphanumeric(str) { return TEST_ALPHANUMERIC.test(str); }; return regex; } var hasRequiredMode; function requireMode() { if (hasRequiredMode) return mode; hasRequiredMode = 1; (function(exports2) { const VersionCheck = requireVersionCheck(); const Regex = requireRegex(); exports2.NUMERIC = { id: "Numeric", bit: 1 << 0, ccBits: [10, 12, 14] }; exports2.ALPHANUMERIC = { id: "Alphanumeric", bit: 1 << 1, ccBits: [9, 11, 13] }; exports2.BYTE = { id: "Byte", bit: 1 << 2, ccBits: [8, 16, 16] }; exports2.KANJI = { id: "Kanji", bit: 1 << 3, ccBits: [8, 10, 12] }; exports2.MIXED = { bit: -1 }; exports2.getCharCountIndicator = function getCharCountIndicator(mode2, version2) { if (!mode2.ccBits) throw new Error("Invalid mode: " + mode2); if (!VersionCheck.isValid(version2)) { throw new Error("Invalid version: " + version2); } if (version2 >= 1 && version2 < 10) return mode2.ccBits[0]; else if (version2 < 27) return mode2.ccBits[1]; return mode2.ccBits[2]; }; exports2.getBestModeForData = function getBestModeForData(dataStr) { if (Regex.testNumeric(dataStr)) return exports2.NUMERIC; else if (Regex.testAlphanumeric(dataStr)) return exports2.ALPHANUMERIC; else if (Regex.testKanji(dataStr)) return exports2.KANJI; else return exports2.BYTE; }; exports2.toString = function toString2(mode2) { if (mode2 && mode2.id) return mode2.id; throw new Error("Invalid mode"); }; exports2.isValid = function isValid(mode2) { return mode2 && mode2.bit && mode2.ccBits; }; function fromString(string2) { if (typeof string2 !== "string") { throw new Error("Param is not a string"); } const lcStr = string2.toLowerCase(); switch (lcStr) { case "numeric": return exports2.NUMERIC; case "alphanumeric": return exports2.ALPHANUMERIC; case "kanji": return exports2.KANJI; case "byte": return exports2.BYTE; default: throw new Error("Unknown mode: " + string2); } } exports2.from = function from(value, defaultValue) { if (exports2.isValid(value)) { return value; } try { return fromString(value); } catch (e) { return defaultValue; } }; })(mode); return mode; } var hasRequiredVersion; function requireVersion() { if (hasRequiredVersion) return version; hasRequiredVersion = 1; (function(exports2) { const Utils = requireUtils$1(); const ECCode = requireErrorCorrectionCode(); const ECLevel = requireErrorCorrectionLevel(); const Mode = requireMode(); const VersionCheck = requireVersionCheck(); const G18 = 1 << 12 | 1 << 11 | 1 << 10 | 1 << 9 | 1 << 8 | 1 << 5 | 1 << 2 | 1 << 0; const G18_BCH = Utils.getBCHDigit(G18); function getBestVersionForDataLength(mode2, length, errorCorrectionLevel2) { for (let currentVersion = 1; currentVersion <= 40; currentVersion++) { if (length <= exports2.getCapacity(currentVersion, errorCorrectionLevel2, mode2)) { return currentVersion; } } return void 0; } function getReservedBitsCount(mode2, version2) { return Mode.getCharCountIndicator(mode2, version2) + 4; } function getTotalBitsFromDataArray(segments2, version2) { let totalBits = 0; segments2.forEach(function(data) { const reservedBits = getReservedBitsCount(data.mode, version2); totalBits += reservedBits + data.getBitsLength(); }); return totalBits; } function getBestVersionForMixedData(segments2, errorCorrectionLevel2) { for (let currentVersion = 1; currentVersion <= 40; currentVersion++) { const length = getTotalBitsFromDataArray(segments2, currentVersion); if (length <= exports2.getCapacity(currentVersion, errorCorrectionLevel2, Mode.MIXED)) { return currentVersion; } } return void 0; } exports2.from = function from(value, defaultValue) { if (VersionCheck.isValid(value)) { return parseInt(value, 10); } return defaultValue; }; exports2.getCapacity = function getCapacity(version2, errorCorrectionLevel2, mode2) { if (!VersionCheck.isValid(version2)) { throw new Error("Invalid QR Code version"); } if (typeof mode2 === "undefined") mode2 = Mode.BYTE; const totalCodewords = Utils.getSymbolTotalCodewords(version2); const ecTotalCodewords = ECCode.getTotalCodewordsCount(version2, errorCorrectionLevel2); const dataTotalCodewordsBits = (totalCodewords - ecTotalCodewords) * 8; if (mode2 === Mode.MIXED) return dataTotalCodewordsBits; const usableBits = dataTotalCodewordsBits - getReservedBitsCount(mode2, version2); switch (mode2) { case Mode.NUMERIC: return Math.floor(usableBits / 10 * 3); case Mode.ALPHANUMERIC: return Math.floor(usableBits / 11 * 2); case Mode.KANJI: return Math.floor(usableBits / 13); case Mode.BYTE: default: return Math.floor(usableBits / 8); } }; exports2.getBestVersionForData = function getBestVersionForData(data, errorCorrectionLevel2) { let seg; const ecl = ECLevel.from(errorCorrectionLevel2, ECLevel.M); if (Array.isArray(data)) { if (data.length > 1) { return getBestVersionForMixedData(data, ecl); } if (data.length === 0) { return 1; } seg = data[0]; } else { seg = data; } return getBestVersionForDataLength(seg.mode, seg.getLength(), ecl); }; exports2.getEncodedBits = function getEncodedBits(version2) { if (!VersionCheck.isValid(version2) || version2 < 7) { throw new Error("Invalid QR Code version"); } let d2 = version2 << 12; while (Utils.getBCHDigit(d2) - G18_BCH >= 0) { d2 ^= G18 << Utils.getBCHDigit(d2) - G18_BCH; } return version2 << 12 | d2; }; })(version); return version; } var formatInfo = {}; var hasRequiredFormatInfo; function requireFormatInfo() { if (hasRequiredFormatInfo) return formatInfo; hasRequiredFormatInfo = 1; const Utils = requireUtils$1(); const G15 = 1 << 10 | 1 << 8 | 1 << 5 | 1 << 4 | 1 << 2 | 1 << 1 | 1 << 0; const G15_MASK = 1 << 14 | 1 << 12 | 1 << 10 | 1 << 4 | 1 << 1; const G15_BCH = Utils.getBCHDigit(G15); formatInfo.getEncodedBits = function getEncodedBits(errorCorrectionLevel2, mask) { const data = errorCorrectionLevel2.bit << 3 | mask; let d2 = data << 10; while (Utils.getBCHDigit(d2) - G15_BCH >= 0) { d2 ^= G15 << Utils.getBCHDigit(d2) - G15_BCH; } return (data << 10 | d2) ^ G15_MASK; }; return formatInfo; } var segments = {}; var numericData; var hasRequiredNumericData; function requireNumericData() { if (hasRequiredNumericData) return numericData; hasRequiredNumericData = 1; const Mode = requireMode(); function NumericData(data) { this.mode = Mode.NUMERIC; this.data = data.toString(); } NumericData.getBitsLength = function getBitsLength(length) { return 10 * Math.floor(length / 3) + (length % 3 ? length % 3 * 3 + 1 : 0); }; NumericData.prototype.getLength = function getLength() { return this.data.length; }; NumericData.prototype.getBitsLength = function getBitsLength() { return NumericData.getBitsLength(this.data.length); }; NumericData.prototype.write = function write(bitBuffer2) { let i, group, value; for (i = 0; i + 3 <= this.data.length; i += 3) { group = this.data.substr(i, 3); value = parseInt(group, 10); bitBuffer2.put(value, 10); } const remainingNum = this.data.length - i; if (remainingNum > 0) { group = this.data.substr(i); value = parseInt(group, 10); bitBuffer2.put(value, remainingNum * 3 + 1); } }; numericData = NumericData; return numericData; } var alphanumericData; var hasRequiredAlphanumericData; function requireAlphanumericData() { if (hasRequiredAlphanumericData) return alphanumericData; hasRequiredAlphanumericData = 1; const Mode = requireMode(); const ALPHA_NUM_CHARS = [ "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", " ", "$", "%", "*", "+", "-", ".", "/", ":" ]; function AlphanumericData(data) { this.mode = Mode.ALPHANUMERIC; this.data = data; } AlphanumericData.getBitsLength = function getBitsLength(length) { return 11 * Math.floor(length / 2) + 6 * (length % 2); }; AlphanumericData.prototype.getLength = function getLength() { return this.data.length; }; AlphanumericData.prototype.getBitsLength = function getBitsLength() { return AlphanumericData.getBitsLength(this.data.length); }; AlphanumericData.prototype.write = function write(bitBuffer2) { let i; for (i = 0; i + 2 <= this.data.length; i += 2) { let value = ALPHA_NUM_CHARS.indexOf(this.data[i]) * 45; value += ALPHA_NUM_CHARS.indexOf(this.data[i + 1]); bitBuffer2.put(value, 11); } if (this.data.length % 2) { bitBuffer2.put(ALPHA_NUM_CHARS.indexOf(this.data[i]), 6); } }; alphanumericData = AlphanumericData; return alphanumericData; } var byteData; var hasRequiredByteData; function requireByteData() { if (hasRequiredByteData) return byteData; hasRequiredByteData = 1; const Mode = requireMode(); function ByteData(data) { this.mode = Mode.BYTE; if (typeof data === "string") { this.data = new TextEncoder().encode(data); } else { this.data = new Uint8Array(data); } } ByteData.getBitsLength = function getBitsLength(length) { return length * 8; }; ByteData.prototype.getLength = function getLength() { return this.data.length; }; ByteData.prototype.getBitsLength = function getBitsLength() { return ByteData.getBitsLength(this.data.length); }; ByteData.prototype.write = function(bitBuffer2) { for (let i = 0, l2 = this.data.length; i < l2; i++) { bitBuffer2.put(this.data[i], 8); } }; byteData = ByteData; return byteData; } var kanjiData; var hasRequiredKanjiData; function requireKanjiData() { if (hasRequiredKanjiData) return kanjiData; hasRequiredKanjiData = 1; const Mode = requireMode(); const Utils = requireUtils$1(); function KanjiData(data) { this.mode = Mode.KANJI; this.data = data; } KanjiData.getBitsLength = function getBitsLength(length) { return length * 13; }; KanjiData.prototype.getLength = function getLength() { return this.data.length; }; KanjiData.prototype.getBitsLength = function getBitsLength() { return KanjiData.getBitsLength(this.data.length); }; KanjiData.prototype.write = function(bitBuffer2) { let i; for (i = 0; i < this.data.length; i++) { let value = Utils.toSJIS(this.data[i]); if (value >= 33088 && value <= 40956) { value -= 33088; } else if (value >= 57408 && value <= 60351) { value -= 49472; } else { throw new Error( "Invalid SJIS character: " + this.data[i] + "\nMake sure your charset is UTF-8" ); } value = (value >>> 8 & 255) * 192 + (value & 255); bitBuffer2.put(value, 13); } }; kanjiData = KanjiData; return kanjiData; } var dijkstra = { exports: {} }; var hasRequiredDijkstra; function requireDijkstra() { if (hasRequiredDijkstra) return dijkstra.exports; hasRequiredDijkstra = 1; (function(module2) { var dijkstra2 = { single_source_shortest_paths: function(graph, s2, d2) { var predecessors = {}; var costs = {}; costs[s2] = 0; var open = dijkstra2.PriorityQueue.make(); open.push(s2, 0); var closest, u2, v2, cost_of_s_to_u, adjacent_nodes, cost_of_e, cost_of_s_to_u_plus_cost_of_e, cost_of_s_to_v, first_visit; while (!open.empty()) { closest = open.pop(); u2 = closest.value; cost_of_s_to_u = closest.cost; adjacent_nodes = graph[u2] || {}; for (v2 in adjacent_nodes) { if (adjacent_nodes.hasOwnProperty(v2)) { cost_of_e = adjacent_nodes[v2]; cost_of_s_to_u_plus_cost_of_e = cost_of_s_to_u + cost_of_e; cost_of_s_to_v = costs[v2]; first_visit = typeof costs[v2] === "undefined"; if (first_visit || cost_of_s_to_v > cost_of_s_to_u_plus_cost_of_e) { costs[v2] = cost_of_s_to_u_plus_cost_of_e; open.push(v2, cost_of_s_to_u_plus_cost_of_e); predecessors[v2] = u2; } } } } if (typeof d2 !== "undefined" && typeof costs[d2] === "undefined") { var msg = ["Could not find a path from ", s2, " to ", d2, "."].join(""); throw new Error(msg); } return predecessors; }, extract_shortest_path_from_predecessor_list: function(predecessors, d2) { var nodes = []; var u2 = d2; while (u2) { nodes.push(u2); predecessors[u2]; u2 = predecessors[u2]; } nodes.reverse(); return nodes; }, find_path: function(graph, s2, d2) { var predecessors = dijkstra2.single_source_shortest_paths(graph, s2, d2); return dijkstra2.extract_shortest_path_from_predecessor_list( predecessors, d2 ); }, /** * A very naive priority queue implementation. */ PriorityQueue: { make: function(opts) { var T2 = dijkstra2.PriorityQueue, t = {}, key; opts = opts || {}; for (key in T2) { if (T2.hasOwnProperty(key)) { t[key] = T2[key]; } } t.queue = []; t.sorter = opts.sorter || T2.default_sorter; return t; }, default_sorter: function(a2, b2) { return a2.cost - b2.cost; }, /** * Add a new item to the queue and ensure the highest priority element * is at the front of the queue. */ push: function(value, cost) { var item = { value, cost }; this.queue.push(item); this.queue.sort(this.sorter); }, /** * Return the highest priority element in the queue. */ pop: function() { return this.queue.shift(); }, empty: function() { return this.queue.length === 0; } } }; { module2.exports = dijkstra2; } })(dijkstra); return dijkstra.exports; } var hasRequiredSegments; function requireSegments() { if (hasRequiredSegments) return segments; hasRequiredSegments = 1; (function(exports2) { const Mode = requireMode(); const NumericData = requireNumericData(); const AlphanumericData = requireAlphanumericData(); const ByteData = requireByteData(); const KanjiData = requireKanjiData(); const Regex = requireRegex(); const Utils = requireUtils$1(); const dijkstra2 = requireDijkstra(); function getStringByteLength(str) { return unescape(encodeURIComponent(str)).length; } function getSegments(regex2, mode2, str) { const segments2 = []; let result; while ((result = regex2.exec(str)) !== null) { segments2.push({ data: result[0], index: result.index, mode: mode2, length: result[0].length }); } return segments2; } function getSegmentsFromString(dataStr) { const numSegs = getSegments(Regex.NUMERIC, Mode.NUMERIC, dataStr); const alphaNumSegs = getSegments(Regex.ALPHANUMERIC, Mode.ALPHANUMERIC, dataStr); let byteSegs; let kanjiSegs; if (Utils.isKanjiModeEnabled()) { byteSegs = getSegments(Regex.BYTE, Mode.BYTE, dataStr); kanjiSegs = getSegments(Regex.KANJI, Mode.KANJI, dataStr); } else { byteSegs = getSegments(Regex.BYTE_KANJI, Mode.BYTE, dataStr); kanjiSegs = []; } const segs = numSegs.concat(alphaNumSegs, byteSegs, kanjiSegs); return segs.sort(function(s1, s2) { return s1.index - s2.index; }).map(function(obj) { return { data: obj.data, mode: obj.mode, length: obj.length }; }); } function getSegmentBitsLength(length, mode2) { switch (mode2) { case Mode.NUMERIC: return NumericData.getBitsLength(length); case Mode.ALPHANUMERIC: return AlphanumericData.getBitsLength(length); case Mode.KANJI: return KanjiData.getBitsLength(length); case Mode.BYTE: return ByteData.getBitsLength(length); } } function mergeSegments(segs) { return segs.reduce(function(acc, curr) { const prevSeg = acc.length - 1 >= 0 ? acc[acc.length - 1] : null; if (prevSeg && prevSeg.mode === curr.mode) { acc[acc.length - 1].data += curr.data; return acc; } acc.push(curr); return acc; }, []); } function buildNodes(segs) { const nodes = []; for (let i = 0; i < segs.length; i++) { const seg = segs[i]; switch (seg.mode) { case Mode.NUMERIC: nodes.push([ seg, { data: seg.data, mode: Mode.ALPHANUMERIC, length: seg.length }, { data: seg.data, mode: Mode.BYTE, length: seg.length } ]); break; case Mode.ALPHANUMERIC: nodes.push([ seg, { data: seg.data, mode: Mode.BYTE, length: seg.length } ]); break; case Mode.KANJI: nodes.push([ seg, { data: seg.data, mode: Mode.BYTE, length: getStringByteLength(seg.data) } ]); break; case Mode.BYTE: nodes.push([ { data: seg.data, mode: Mode.BYTE, length: getStringByteLength(seg.data) } ]); } } return nodes; } function buildGraph(nodes, version2) { const table = {}; const graph = { start: {} }; let prevNodeIds = ["start"]; for (let i = 0; i < nodes.length; i++) { const nodeGroup = nodes[i]; const currentNodeIds = []; for (let j = 0; j < nodeGroup.length; j++) { const node = nodeGroup[j]; const key = "" + i + j; currentNodeIds.push(key); table[key] = { node, lastCount: 0 }; graph[key] = {}; for (let n = 0; n < prevNodeIds.length; n++) { const prevNodeId = prevNodeIds[n]; if (table[prevNodeId] && table[prevNodeId].node.mode === node.mode) { graph[prevNodeId][key] = getSegmentBitsLength(table[prevNodeId].lastCount + node.length, node.mode) - getSegmentBitsLength(table[prevNodeId].lastCount, node.mode); table[prevNodeId].lastCount += node.length; } else { if (table[prevNodeId]) table[prevNodeId].lastCount = node.length; graph[prevNodeId][key] = getSegmentBitsLength(node.length, node.mode) + 4 + Mode.getCharCountIndicator(node.mode, version2); } } } prevNodeIds = currentNodeIds; } for (let n = 0; n < prevNodeIds.length; n++) { graph[prevNodeIds[n]].end = 0; } return { map: graph, table }; } function buildSingleSegment(data, modesHint) { let mode2; const bestMode = Mode.getBestModeForData(data); mode2 = Mode.from(modesHint, bestMode); if (mode2 !== Mode.BYTE && mode2.bit < bestMode.bit) { throw new Error('"' + data + '" cannot be encoded with mode ' + Mode.toString(mode2) + ".\n Suggested mode is: " + Mode.toString(bestMode)); } if (mode2 === Mode.KANJI && !Utils.isKanjiModeEnabled()) { mode2 = Mode.BYTE; } switch (mode2) { case Mode.NUMERIC: return new NumericData(data); case Mode.ALPHANUMERIC: return new AlphanumericData(data); case Mode.KANJI: return new KanjiData(data); case Mode.BYTE: return new ByteData(data); } } exports2.fromArray = function fromArray(array) { return array.reduce(function(acc, seg) { if (typeof seg === "string") { acc.push(buildSingleSegment(seg, null)); } else if (seg.data) { acc.push(buildSingleSegment(seg.data, seg.mode)); } return acc; }, []); }; exports2.fromString = function fromString(data, version2) { const segs = getSegmentsFromString(data, Utils.isKanjiModeEnabled()); const nodes = buildNodes(segs); const graph = buildGraph(nodes, version2); const path = dijkstra2.find_path(graph.map, "start", "end"); const optimizedSegs = []; for (let i = 1; i < path.length - 1; i++) { optimizedSegs.push(graph.table[path[i]].node); } return exports2.fromArray(mergeSegments(optimizedSegs)); }; exports2.rawSplit = function rawSplit(data) { return exports2.fromArray( getSegmentsFromString(data, Utils.isKanjiModeEnabled()) ); }; })(segments); return segments; } var hasRequiredQrcode; function requireQrcode() { if (hasRequiredQrcode) return qrcode; hasRequiredQrcode = 1; const Utils = requireUtils$1(); const ECLevel = requireErrorCorrectionLevel(); const BitBuffer = requireBitBuffer(); const BitMatrix = requireBitMatrix(); const AlignmentPattern = requireAlignmentPattern(); const FinderPattern = requireFinderPattern(); const MaskPattern = requireMaskPattern(); const ECCode = requireErrorCorrectionCode(); const ReedSolomonEncoder = requireReedSolomonEncoder(); const Version = requireVersion(); const FormatInfo = requireFormatInfo(); const Mode = requireMode(); const Segments = requireSegments(); function setupFinderPattern(matrix, version2) { const size = matrix.size; const pos = FinderPattern.getPositions(version2); for (let i = 0; i < pos.length; i++) { const row = pos[i][0]; const col = pos[i][1]; for (let r = -1; r <= 7; r++) { if (row + r <= -1 || size <= row + r) continue; for (let c2 = -1; c2 <= 7; c2++) { if (col + c2 <= -1 || size <= col + c2) continue; if (r >= 0 && r <= 6 && (c2 === 0 || c2 === 6) || c2 >= 0 && c2 <= 6 && (r === 0 || r === 6) || r >= 2 && r <= 4 && c2 >= 2 && c2 <= 4) { matrix.set(row + r, col + c2, true, true); } else { matrix.set(row + r, col + c2, false, true); } } } } } function setupTimingPattern(matrix) { const size = matrix.size; for (let r = 8; r < size - 8; r++) { const value = r % 2 === 0; matrix.set(r, 6, value, true); matrix.set(6, r, value, true); } } function setupAlignmentPattern(matrix, version2) { const pos = AlignmentPattern.getPositions(version2); for (let i = 0; i < pos.length; i++) { const row = pos[i][0]; const col = pos[i][1]; for (let r = -2; r <= 2; r++) { for (let c2 = -2; c2 <= 2; c2++) { if (r === -2 || r === 2 || c2 === -2 || c2 === 2 || r === 0 && c2 === 0) { matrix.set(row + r, col + c2, true, true); } else { matrix.set(row + r, col + c2, false, true); } } } } } function setupVersionInfo(matrix, version2) { const size = matrix.size; const bits = Version.getEncodedBits(version2); let row, col, mod; for (let i = 0; i < 18; i++) { row = Math.floor(i / 3); col = i % 3 + size - 8 - 3; mod = (bits >> i & 1) === 1; matrix.set(row, col, mod, true); matrix.set(col, row, mod, true); } } function setupFormatInfo(matrix, errorCorrectionLevel2, maskPattern2) { const size = matrix.size; const bits = FormatInfo.getEncodedBits(errorCorrectionLevel2, maskPattern2); let i, mod; for (i = 0; i < 15; i++) { mod = (bits >> i & 1) === 1; if (i < 6) { matrix.set(i, 8, mod, true); } else if (i < 8) { matrix.set(i + 1, 8, mod, true); } else { matrix.set(size - 15 + i, 8, mod, true); } if (i < 8) { matrix.set(8, size - i - 1, mod, true); } else if (i < 9) { matrix.set(8, 15 - i - 1 + 1, mod, true); } else { matrix.set(8, 15 - i - 1, mod, true); } } matrix.set(size - 8, 8, 1, true); } function setupData(matrix, data) { const size = matrix.size; let inc = -1; let row = size - 1; let bitIndex = 7; let byteIndex = 0; for (let col = size - 1; col > 0; col -= 2) { if (col === 6) col--; while (true) { for (let c2 = 0; c2 < 2; c2++) { if (!matrix.isReserved(row, col - c2)) { let dark = false; if (byteIndex < data.length) { dark = (data[byteIndex] >>> bitIndex & 1) === 1; } matrix.set(row, col - c2, dark); bitIndex--; if (bitIndex === -1) { byteIndex++; bitIndex = 7; } } } row += inc; if (row < 0 || size <= row) { row -= inc; inc = -inc; break; } } } } function createData(version2, errorCorrectionLevel2, segments2) { const buffer = new BitBuffer(); segments2.forEach(function(data) { buffer.put(data.mode.bit, 4); buffer.put(data.getLength(), Mode.getCharCountIndicator(data.mode, version2)); data.write(buffer); }); const totalCodewords = Utils.getSymbolTotalCodewords(version2); const ecTotalCodewords = ECCode.getTotalCodewordsCount(version2, errorCorrectionLevel2); const dataTotalCodewordsBits = (totalCodewords - ecTotalCodewords) * 8; if (buffer.getLengthInBits() + 4 <= dataTotalCodewordsBits) { buffer.put(0, 4); } while (buffer.getLengthInBits() % 8 !== 0) { buffer.putBit(0); } const remainingByte = (dataTotalCodewordsBits - buffer.getLengthInBits()) / 8; for (let i = 0; i < remainingByte; i++) { buffer.put(i % 2 ? 17 : 236, 8); } return createCodewords(buffer, version2, errorCorrectionLevel2); } function createCodewords(bitBuffer2, version2, errorCorrectionLevel2) { const totalCodewords = Utils.getSymbolTotalCodewords(version2); const ecTotalCodewords = ECCode.getTotalCodewordsCount(version2, errorCorrectionLevel2); const dataTotalCodewords = totalCodewords - ecTotalCodewords; const ecTotalBlocks = ECCode.getBlocksCount(version2, errorCorrectionLevel2); const blocksInGroup2 = totalCodewords % ecTotalBlocks; const blocksInGroup1 = ecTotalBlocks - blocksInGroup2; const totalCodewordsInGroup1 = Math.floor(totalCodewords / ecTotalBlocks); const dataCodewordsInGroup1 = Math.floor(dataTotalCodewords / ecTotalBlocks); const dataCodewordsInGroup2 = dataCodewordsInGroup1 + 1; const ecCount = totalCodewordsInGroup1 - dataCodewordsInGroup1; const rs = new ReedSolomonEncoder(ecCount); let offset = 0; const dcData = new Array(ecTotalBlocks); const ecData = new Array(ecTotalBlocks); let maxDataSize = 0; const buffer = new Uint8Array(bitBuffer2.buffer); for (let b2 = 0; b2 < ecTotalBlocks; b2++) { const dataSize = b2 < blocksInGroup1 ? dataCodewordsInGroup1 : dataCodewordsInGroup2; dcData[b2] = buffer.slice(offset, offset + dataSize); ecData[b2] = rs.encode(dcData[b2]); offset += dataSize; maxDataSize = Math.max(maxDataSize, dataSize); } const data = new Uint8Array(totalCodewords); let index = 0; let i, r; for (i = 0; i < maxDataSize; i++) { for (r = 0; r < ecTotalBlocks; r++) { if (i < dcData[r].length) { data[index++] = dcData[r][i]; } } } for (i = 0; i < ecCount; i++) { for (r = 0; r < ecTotalBlocks; r++) { data[index++] = ecData[r][i]; } } return data; } function createSymbol(data, version2, errorCorrectionLevel2, maskPattern2) { let segments2; if (Array.isArray(data)) { segments2 = Segments.fromArray(data); } else if (typeof data === "string") { let estimatedVersion = version2; if (!estimatedVersion) { const rawSegments = Segments.rawSplit(data); estimatedVersion = Version.getBestVersionForData(rawSegments, errorCorrectionLevel2); } segments2 = Segments.fromString(data, estimatedVersion || 40); } else { throw new Error("Invalid data"); } const bestVersion = Version.getBestVersionForData(segments2, errorCorrectionLevel2); if (!bestVersion) { throw new Error("The amount of data is too big to be stored in a QR Code"); } if (!version2) { version2 = bestVersion; } else if (version2 < bestVersion) { throw new Error( "\nThe chosen QR Code version cannot contain this amount of data.\nMinimum version required to store current data is: " + bestVersion + ".\n" ); } const dataBits = createData(version2, errorCorrectionLevel2, segments2); const moduleCount = Utils.getSymbolSize(version2); const modules = new BitMatrix(moduleCount); setupFinderPattern(modules, version2); setupTimingPattern(modules); setupAlignmentPattern(modules, version2); setupFormatInfo(modules, errorCorrectionLevel2, 0); if (version2 >= 7) { setupVersionInfo(modules, version2); } setupData(modules, dataBits); if (isNaN(maskPattern2)) { maskPattern2 = MaskPattern.getBestMask( modules, setupFormatInfo.bind(null, modules, errorCorrectionLevel2) ); } MaskPattern.applyMask(maskPattern2, modules); setupFormatInfo(modules, errorCorrectionLevel2, maskPattern2); return { modules, version: version2, errorCorrectionLevel: errorCorrectionLevel2, maskPattern: maskPattern2, segments: segments2 }; } qrcode.create = function create(data, options) { if (typeof data === "undefined" || data === "") { throw new Error("No input text"); } let errorCorrectionLevel2 = ECLevel.M; let version2; let mask; if (typeof options !== "undefined") { errorCorrectionLevel2 = ECLevel.from(options.errorCorrectionLevel, ECLevel.M); version2 = Version.from(options.version); mask = MaskPattern.from(options.maskPattern); if (options.toSJISFunc) { Utils.setToSJISFunction(options.toSJISFunc); } } return createSymbol(data, version2, errorCorrectionLevel2, mask); }; return qrcode; } var canvas = {}; var utils = {}; var hasRequiredUtils; function requireUtils() { if (hasRequiredUtils) return utils; hasRequiredUtils = 1; (function(exports2) { function hex2rgba(hex) { if (typeof hex === "number") { hex = hex.toString(); } if (typeof hex !== "string") { throw new Error("Color should be defined as hex string"); } let hexCode = hex.slice().replace("#", "").split(""); if (hexCode.length < 3 || hexCode.length === 5 || hexCode.length > 8) { throw new Error("Invalid hex color: " + hex); } if (hexCode.length === 3 || hexCode.length === 4) { hexCode = Array.prototype.concat.apply([], hexCode.map(function(c2) { return [c2, c2]; })); } if (hexCode.length === 6) hexCode.push("F", "F"); const hexValue = parseInt(hexCode.join(""), 16); return { r: hexValue >> 24 & 255, g: hexValue >> 16 & 255, b: hexValue >> 8 & 255, a: hexValue & 255, hex: "#" + hexCode.slice(0, 6).join("") }; } exports2.getOptions = function getOptions(options) { if (!options) options = {}; if (!options.color) options.color = {}; const margin = typeof options.margin === "undefined" || options.margin === null || options.margin < 0 ? 4 : options.margin; const width = options.width && options.width >= 21 ? options.width : void 0; const scale = options.scale || 4; return { width, scale: width ? 4 : scale, margin, color: { dark: hex2rgba(options.color.dark || "#000000ff"), light: hex2rgba(options.color.light || "#ffffffff") }, type: options.type, rendererOpts: options.rendererOpts || {} }; }; exports2.getScale = function getScale(qrSize, opts) { return opts.width && opts.width >= qrSize + opts.margin * 2 ? opts.width / (qrSize + opts.margin * 2) : opts.scale; }; exports2.getImageWidth = function getImageWidth(qrSize, opts) { const scale = exports2.getScale(qrSize, opts); return Math.floor((qrSize + opts.margin * 2) * scale); }; exports2.qrToImageData = function qrToImageData(imgData, qr, opts) { const size = qr.modules.size; const data = qr.modules.data; const scale = exports2.getScale(size, opts); const symbolSize = Math.floor((size + opts.margin * 2) * scale); const scaledMargin = opts.margin * scale; const palette = [opts.color.light, opts.color.dark]; for (let i = 0; i < symbolSize; i++) { for (let j = 0; j < symbolSize; j++) { let posDst = (i * symbolSize + j) * 4; let pxColor = opts.color.light; if (i >= scaledMargin && j >= scaledMargin && i < symbolSize - scaledMargin && j < symbolSize - scaledMargin) { const iSrc = Math.floor((i - scaledMargin) / scale); const jSrc = Math.floor((j - scaledMargin) / scale); pxColor = palette[data[iSrc * size + jSrc] ? 1 : 0]; } imgData[posDst++] = pxColor.r; imgData[posDst++] = pxColor.g; imgData[posDst++] = pxColor.b; imgData[posDst] = pxColor.a; } } }; })(utils); return utils; } var hasRequiredCanvas; function requireCanvas() { if (hasRequiredCanvas) return canvas; hasRequiredCanvas = 1; (function(exports2) { const Utils = requireUtils(); function clearCanvas(ctx, canvas2, size) { ctx.clearRect(0, 0, canvas2.width, canvas2.height); if (!canvas2.style) canvas2.style = {}; canvas2.height = size; canvas2.width = size; canvas2.style.height = size + "px"; canvas2.style.width = size + "px"; } function getCanvasElement() { try { return document.createElement("canvas"); } catch (e) { throw new Error("You need to specify a canvas element"); } } exports2.render = function render2(qrData, canvas2, options) { let opts = options; let canvasEl = canvas2; if (typeof opts === "undefined" && (!canvas2 || !canvas2.getContext)) { opts = canvas2; canvas2 = void 0; } if (!canvas2) { canvasEl = getCanvasElement(); } opts = Utils.getOptions(opts); const size = Utils.getImageWidth(qrData.modules.size, opts); const ctx = canvasEl.getContext("2d"); const image = ctx.createImageData(size, size); Utils.qrToImageData(image.data, qrData, opts); clearCanvas(ctx, canvasEl, size); ctx.putImageData(image, 0, 0); return canvasEl; }; exports2.renderToDataURL = function renderToDataURL(qrData, canvas2, options) { let opts = options; if (typeof opts === "undefined" && (!canvas2 || !canvas2.getContext)) { opts = canvas2; canvas2 = void 0; } if (!opts) opts = {}; const canvasEl = exports2.render(qrData, canvas2, opts); const type = opts.type || "image/png"; const rendererOpts = opts.rendererOpts || {}; return canvasEl.toDataURL(type, rendererOpts.quality); }; })(canvas); return canvas; } var svgTag = {}; var hasRequiredSvgTag; function requireSvgTag() { if (hasRequiredSvgTag) return svgTag; hasRequiredSvgTag = 1; const Utils = requireUtils(); function getColorAttrib(color, attrib) { const alpha = color.a / 255; const str = attrib + '="' + color.hex + '"'; return alpha < 1 ? str + " " + attrib + '-opacity="' + alpha.toFixed(2).slice(1) + '"' : str; } function svgCmd(cmd, x2, y) { let str = cmd + x2; if (typeof y !== "undefined") str += " " + y; return str; } function qrToPath(data, size, margin) { let path = ""; let moveBy = 0; let newRow = false; let lineLength = 0; for (let i = 0; i < data.length; i++) { const col = Math.floor(i % size); const row = Math.floor(i / size); if (!col && !newRow) newRow = true; if (data[i]) { lineLength++; if (!(i > 0 && col > 0 && data[i - 1])) { path += newRow ? svgCmd("M", col + margin, 0.5 + row + margin) : svgCmd("m", moveBy, 0); moveBy = 0; newRow = false; } if (!(col + 1 < size && data[i + 1])) { path += svgCmd("h", lineLength); lineLength = 0; } } else { moveBy++; } } return path; } svgTag.render = function render2(qrData, options, cb) { const opts = Utils.getOptions(options); const size = qrData.modules.size; const data = qrData.modules.data; const qrcodesize = size + opts.margin * 2; const bg = !opts.color.light.a ? "" : "'; const path = "'; const viewBox = 'viewBox="0 0 ' + qrcodesize + " " + qrcodesize + '"'; const width = !opts.width ? "" : 'width="' + opts.width + '" height="' + opts.width + '" '; const svgTag2 = '' + bg + path + "\n"; if (typeof cb === "function") { cb(null, svgTag2); } return svgTag2; }; return svgTag; } var hasRequiredBrowser; function requireBrowser() { if (hasRequiredBrowser) return browser; hasRequiredBrowser = 1; const canPromise2 = requireCanPromise(); const QRCode2 = requireQrcode(); const CanvasRenderer = requireCanvas(); const SvgRenderer = requireSvgTag(); function renderCanvas(renderFunc, canvas2, text, opts, cb) { const args = [].slice.call(arguments, 1); const argsNum = args.length; const isLastArgCb = typeof args[argsNum - 1] === "function"; if (!isLastArgCb && !canPromise2()) { throw new Error("Callback required as last argument"); } if (isLastArgCb) { if (argsNum < 2) { throw new Error("Too few arguments provided"); } if (argsNum === 2) { cb = text; text = canvas2; canvas2 = opts = void 0; } else if (argsNum === 3) { if (canvas2.getContext && typeof cb === "undefined") { cb = opts; opts = void 0; } else { cb = opts; opts = text; text = canvas2; canvas2 = void 0; } } } else { if (argsNum < 1) { throw new Error("Too few arguments provided"); } if (argsNum === 1) { text = canvas2; canvas2 = opts = void 0; } else if (argsNum === 2 && !canvas2.getContext) { opts = text; text = canvas2; canvas2 = void 0; } return new Promise(function(resolve, reject) { try { const data = QRCode2.create(text, opts); resolve(renderFunc(data, canvas2, opts)); } catch (e) { reject(e); } }); } try { const data = QRCode2.create(text, opts); cb(null, renderFunc(data, canvas2, opts)); } catch (e) { cb(e); } } browser.create = QRCode2.create; browser.toCanvas = renderCanvas.bind(null, CanvasRenderer.render); browser.toDataURL = renderCanvas.bind(null, CanvasRenderer.renderToDataURL); browser.toString = renderCanvas.bind(null, function(data, _2, opts) { return SvgRenderer.render(data, opts); }); return browser; } var browserExports = requireBrowser(); const QRCode = /* @__PURE__ */ getDefaultExportFromCjs(browserExports); const _hoisted_1$4 = { class: "sswp-script" }; const _hoisted_2$1 = { key: 0 }; const _hoisted_3$1 = ["innerHTML"]; const _hoisted_4$1 = { key: 1 }; const _hoisted_5$1 = { class: "file" }; const _hoisted_6$1 = { class: "type-img" }; const _hoisted_7$1 = ["src"]; const _hoisted_8$1 = { class: "file-name" }; const _hoisted_9$1 = { key: 2 }; const _hoisted_10 = { class: "flex space-between top-10" }; const _hoisted_11 = { class: "log" }; const _hoisted_12 = { key: 1 }; const maxChunkSize = 30 * 1024 * 1024 * 1024; const maxChunkItems = 10; const _sfc_main$6 = /* @__PURE__ */ vue.defineComponent({ __name: "Home", setup(__props) { function formatTimestamp(timestamp) { const date = new Date(timestamp); const Y2 = date.getFullYear(); const M2 = String(date.getMonth() + 1).padStart(2, "0"); const D2 = String(date.getDate()).padStart(2, "0"); const h2 = String(date.getHours()).padStart(2, "0"); const m2 = String(date.getMinutes()).padStart(2, "0"); const s2 = String(date.getSeconds()).padStart(2, "0"); return `${Y2}-${M2}-${D2} ${h2}:${m2}:${s2}`; } const dialogVisible = vue.ref(false); const dialogLoadingEl = vue.ref(null); const isLoading = vue.ref(false); const state = vue.reactive({ bdstoken: "", username: "", score: 0, downloadLinks: [], history: [], isHome: true }); const info = vue.ref({ limit: 0, score: 0, score_limit_time: 0, username: "" }); vue.watch([() => info.value.score], () => { _GM_setValue(APP_BAIDU_STORAGE_SCORE_KEY, info.value.score); }); const selectList = vue.ref(); const { scriptState: scriptState2, resetScriptConfig: resetScriptConfig2 } = useScriptCommon(); const { useAria2Download, copyDownloadUA, copyDownloadUrl } = useDownloadFn(); function goToShop() { var _a2; window.open((_a2 = scriptState2.appconfig) == null ? void 0 : _a2.shopUrl); } async function recharge() { consola.log("积分商城"); ElMessageBox.prompt("请输入卡密", { confirmButtonText: "充值", cancelButtonText: "取消", title: "积分充值", // 监听确认按钮点击事件 beforeClose: async (action, instance, done) => { if (action === "confirm") { const inputValue = instance.inputValue; if (!inputValue) { ElMessage.warning("请输入卡密"); return; } ElMessage.info("充值中,请稍等"); const chargeRes = await reqRecharge(inputValue); consola.log("充值结果", chargeRes); if (chargeRes.code == 200) { ElMessage.success("充值成功"); info.value.score = chargeRes.data.score; initLogin$1(); done(); } else { ElMessage.error(chargeRes.message); } } else { done(); } } }); } async function signin() { var _a2, _b, _c, _d, _e, _f, _g, _h, _i; await consola.log("签到"); ElMessage.info("签到中,请稍等"); const res = await reqSignin(); consola.log("签到结果", res); if (res.code == 200) { info.value.score = res.data.score; ElMessageBox.alert( vue.h("div", { style: "width:100%;" }, [ vue.h("p", { innerHTML: ((_a2 = res == null ? void 0 : res.data) == null ? void 0 : _a2.message) ?? "当前签到积分最高为200超过不增加
", style: "color: var(--el-color-danger);font-weight: 700;text-align: center;" }), vue.h("div", { style: "display: flex;align-items: center;justify-content: center;" }, [vue.h("img", { src: (_c = (_b = scriptState2.appconfig) == null ? void 0 : _b.recommend) == null ? void 0 : _c.wechat, style: "width: 260px;height: 260px;" })]), vue.h("p", { innerHTML: (_e = (_d = scriptState2.appconfig) == null ? void 0 : _d.recommend) == null ? void 0 : _e.wctips, style: "text-align: center;" }) ]), "签到成功", { customClass: "signin-message-box", confirmButtonText: "我知道了" } ); } else if (res.code == "-1000102") { await initLogin$1(true); signin(); } else if (res.code == 10077) { const qrcodeDataUrl = res.data.url.includes("data:image") ? res.data.url : await QRCode.toDataURL(res.data.url, { width: 260 }); await ElMessageBox.alert( vue.h("div", { style: "width:100%;" }, [ vue.h("p", { innerHTML: res.message, style: "color: var(--el-color-danger);font-weight: 700;text-align: center;" }), vue.h("div", { style: "display: flex;align-items: center;justify-content: center;" }, [vue.h("img", { src: qrcodeDataUrl, style: "width: 260px;height: 260px;" })]) ]), "签到失败", { customClass: "signin-message-box", confirmButtonText: "我知道了" } ); initLogin$1(); } else { await ElMessageBox.alert( vue.h("div", { style: "width:100%;" }, [ vue.h("p", { innerHTML: res.message, style: "color: var(--el-color-danger);font-weight: 700;text-align: center;" }), vue.h("div", { style: "display: flex;align-items: center;justify-content: center;" }, [vue.h("img", { src: (_g = (_f = scriptState2.appconfig) == null ? void 0 : _f.recommend) == null ? void 0 : _g.wechat, style: "width: 260px;height: 260px;" })]), vue.h("p", { innerHTML: (_i = (_h = scriptState2.appconfig) == null ? void 0 : _h.recommend) == null ? void 0 : _i.wctips, style: "text-align: center;" }) ]), "签到失败", { customClass: "signin-message-box", confirmButtonText: "我知道了" } ); initLogin$1(); } } const showHistoryDialog = vue.ref(false); const historyData = vue.ref([]); async function showScoreHistory() { showHistoryDialog.value = true; const history = await reqHistory(); if (history.code !== 200) { ElMessage.error("获取积分历史失败"); return; } historyData.value = history.data.data; } const loading = vue.ref(false); async function handleOpen() { var _a2, _b, _c, _d, _e, _f; if (!(localStorage.readed2 ?? false)) { await ElMessageBox.prompt( `

⚠️

欢迎使用本项目!请阅读并同意以下声明:

本项目不会存储您的共享链接与提取密码,仅用于获取文件列表。(如不放心,您可以使用后取消或修改提取密码)

仅用于个人研究学习使用,请勿违法用处,否则后果自负!(请勿解析黄色文件,以及其他违法文件,一旦发现禁用IP地址+禁用授权密钥公布使用者QQ)

代码中存在部分混淆代码,用于获取用户的唯一识别码,不放心可随时卸载本脚本。

`, { confirmButtonText: "我同意", cancelButtonText: "不同意", title: "首次使用声明", dangerouslyUseHTMLString: true, inputPlaceholder: "请输入“我同意”", // 监听确认按钮点击事件 beforeClose: async (action, instance, done) => { if (action === "confirm") { const inputValue = instance.inputValue; if (!inputValue) { ElMessage.warning("请输入我同意"); return; } localStorage.readed2 = true; done(); } else { done(); throw new Error("不同意"); } } } ); } consola.log("打开弹窗"); if ((_a2 = scriptState2.appconfig) == null ? void 0 : _a2.forceUpdate) { if (scriptState2.appconfig.version !== _GM_info.script.version) { await ElMessageBox.confirm("需更新脚本到最新版本才能正常使用哦,更新后请刷新当前页面。", { title: APP_NAME + "——提示", confirmButtonText: "去更新", cancelButtonText: "残忍拒绝", beforeClose(action, _instance, done) { var _a3; if (action === "confirm") { window.open((_a3 = scriptState2.appconfig) == null ? void 0 : _a3.updateUrl); } else { done(); throw Error("取消更新"); } } }); return; } } const maintenance = ((_b = scriptState2.appconfig) == null ? void 0 : _b.maintenance) ?? ""; const show_maintenance = ((_c = scriptState2.appconfig) == null ? void 0 : _c.show_maintenance) ?? false; if (show_maintenance) { await ElMessageBox.alert(vue.h("div", { style: "width:100%;", innerHTML: maintenance }), "脚本维护中", { customClass: "signin-message-box", confirmButtonText: "我知道了", showCancelButton: false }); return; } const storageAnnounce = localStorage.getItem("announce"); const announce = ((_d = scriptState2.appconfig) == null ? void 0 : _d.announce) ?? ""; const show_announce = ((_e = scriptState2.appconfig) == null ? void 0 : _e.show_announce) ?? false; if (show_announce) { if (storageAnnounce !== announce) { ElMessageBox.alert(vue.h("div", { style: "width:100%;", innerHTML: announce }), "公告", { customClass: "signin-message-box", confirmButtonText: "我知道了", showCancelButton: true, cancelButtonText: "不再提示", beforeClose(action, _instance, done) { consola.log(action); if (action !== "confirm") { localStorage.setItem("announce", announce); } done(); } }); } } state.downloadLinks = []; dialogVisible.value = true; const selectedEl = document.querySelector(".nd-new-main-list"); const list = (_f = selectedEl == null ? void 0 : selectedEl.__vue__) == null ? void 0 : _f.selectedList; selectList.value = list || []; consola.log("选中的文件", list); loading.value = true; try { await initLogin$1(); } catch (error) { } loading.value = false; if (isFirst.value) { if (info.value.score <= 0) { ElMessageBox.alert("第一次使用请先签到一次哦!
就在左下角", "提示", { dangerouslyUseHTMLString: true }); } isFirst.value = false; } } function chunkBySize(arr, maxSize, maxItems) { const result = []; let currentChunk = []; let currentSize = 0; for (const item of arr) { if (currentChunk.length >= maxItems || currentSize + item.size > maxSize) { result.push(currentChunk); currentChunk = []; currentSize = 0; } currentChunk.push(item); currentSize += item.size; } if (currentChunk.length > 0) { result.push(currentChunk); } return result.filter((item) => item.length > 0); } async function getSelectFiles() { const selectedIds = selectList.value; if (selectedIds && selectedIds.length == 0) { ElMessage.error("请先选择要下载的文件"); throw Error("还未选择文件"); } return await collectAllFiles(selectList.value); } async function collectAllFiles(files) { const allFiles = []; async function recurse(file) { const files2 = await fetchAllInFolder(file.path); for (const file2 of files2) { if (file2.isdir == 1) { await recurse(file2); } else { allFiles.push(file2); } } } for (const file of files) { if (file.isdir == 1) { await recurse(file); } else { allFiles.push(file); } } return allFiles; } async function fetchFolderPage(dir, page = 1) { try { const res = await fetch(`https://pan.baidu.com/api/list?clienttype=0&app_id=250528&web=1&order=time&desc=1&num=100&dir=${encodeURIComponent(dir)}&page=${page}`); const json = await res.json(); if (json.errno !== 0) { console.error(`❌ 错误获取目录 ${dir}:`, res, json); return []; } return json.list || []; } catch (err) { console.error(`⚠️ 网络错误: ${dir} page ${page}:`, err); return []; } } async function fetchAllInFolder(dir) { let allItems = []; let page = 1; let hasMore = true; while (hasMore) { const items = await fetchFolderPage(dir, page); if (items.length === 0) break; allItems.push(...items); hasMore = items.length === 100; page++; } return allItems; } async function getDownloadUrl() { var _a2, _b, _c, _d; consola.log("开始解析"); const loading2 = ElLoading.service({ target: dialogLoadingEl.value, text: "解析中……" }); try { if (!state.bdstoken) { ElMessage.error("参数bdstoken获取失败,请刷新页面"); throw Error("获取bdstoken失败"); } isLoading.value = true; loading2.setText("正在获取文件列表……"); const files = await getSelectFiles(); loading2.setText("正在创建分享链接……"); const { shorturl, password, url } = await bdShareFile2(files.map((f2) => f2.fs_id)); loading2.setText("正在获取解析参数……"); let timeout = setInterval(() => { var _a3, _b2, _c2; if (!((_a3 = scriptState2.appconfig) == null ? void 0 : _a3.tips)) return; loading2.setText(`${(_c2 = scriptState2.appconfig) == null ? void 0 : _c2.tips[Math.floor(Math.random() * ((_b2 = scriptState2.appconfig) == null ? void 0 : _b2.tips.length))]}`); }, 5e3); const listRes = await getParamsForLink(shorturl, password); clearInterval(timeout); const { randsk, uk, shareid } = listRes.data; const res = await getFsIds(); if (res === 0) return; const { fsIds, fileList } = res; consola.log("--获取到的全部文件信息", fsIds, fileList); const newFileList = chunkBySize(fileList, maxChunkSize, maxChunkItems); consola.log("--分割后的文件列表", newFileList); const result = []; for (let index = 0; index < newFileList.length; index++) { loading2.setText(`正在解析第${index + 1}块,共${newFileList.length}块,请耐心等待……`); const item = newFileList[index]; const linkParams = { randsk, uk, shareid, url, surl: shorturl, dir: "/", pwd: password, fs_ids: item.map((f2) => f2.fs_id), user: state.username }; const linkRes = await getLink(linkParams); consola.log("--解析结果", linkRes); const { data } = linkRes; const list = data.map((item2) => { const path = files.find((f2) => f2.fs_id == item2.fs_id).path; item2.dir = getDirectoryPath(path); return item2; }).map((item2) => ({ filename: item2.filename, ua: item2.ua, dir: item2.dir, url: item2.url })); result.push(...list); } ElMessageBox({ title: "解析成功", message: ((_a2 = scriptState2.appconfig) == null ? void 0 : _a2.pureMode) ? "解析成功" : (_b = scriptState2.appconfig) == null ? void 0 : _b.ad2, dangerouslyUseHTMLString: true, confirmButtonText: "我知道了", showCancelButton: false }); state.downloadLinks = result; consola.log("--最终的下载链接", state.downloadLinks); state.history.unshift({ date: Date.now(), data: result }); const history = state.history.slice(0, 5); state.history = history; _GM.setValue(APP_BAIDU_STORAGE_HISTORY_KEY, history); await initLogin$1(); } catch (error) { consola.log("出错了", error); ElMessageBox({ title: "解析失败", message: error.message + (((_c = scriptState2.appconfig) == null ? void 0 : _c.pureMode) ? "" : (_d = scriptState2.appconfig) == null ? void 0 : _d.ad2), dangerouslyUseHTMLString: true, confirmButtonText: "我知道了", showCancelButton: false }); } loading2.close(); isLoading.value = false; } async function bdShareFile2(ids, isForever = false) { const selectedIds = ids || selectList.value.map((file) => file.fs_id); if (selectedIds.length == 0) { ElMessage.error("请先选择要下载的文件"); throw Error("还未选择文件"); } const password = generateRandomCode(); const res = await reqShare(state.bdstoken, password, selectedIds.join(","), isForever); const url = res.link; const shorturl = url ? url.substring(url.lastIndexOf("/") + 1) : null; if (!shorturl || res.show_msg) { ElMessage.error(res.show_msg || "获取分享链接失败"); throw Error("获取分享链接出错"); } else { consola.log("--分享", res); return { url, shorturl, password }; } } async function getParamsForLink(shorturl, password) { const username = state.username; consola.log("--list函数参数", shorturl, password, username); let listRes = await reqList(shorturl, password, username); consola.log("--获取list结果", listRes); if (listRes.code == 200) { return listRes; } else if (listRes.code == "-1000102") { await initLogin$1(true); return await getParamsForLink(shorturl, password); } else { throw Error(listRes.message); } } async function getLink(linkParams) { consola.log("获取link的参数", linkParams); const linkRes = await reqLink(linkParams); consola.log("--提取到的结果", linkRes); if (linkRes.code == 200) { return linkRes; } else if (linkRes.code == 10050 || linkRes.code == 10033) { if (linkRes.message.includes("验证码")) { const codeRes = await getVCode(linkRes.message); return await getLink({ ...linkParams, ...codeRes }); } else { return await getLink(linkParams); } } else if (linkRes.code == 10013) { return await getLink(linkParams); } else { throw Error(linkRes.message); } } async function getVCode(message2) { const vcodeRes = await getCode(); consola.log("--解析出错", message2); try { const refreshSrc = () => `${vcodeRes.data.img}&t=${Date.now()}`; let src = refreshSrc(); const res = await ElMessageBox.prompt( vue.h("div", null, [ vue.h("div", { innerHTML: "请输入验证码" }), vue.h("img", { src, onClick: (e) => { const target = e.target; target.src = refreshSrc(); } }) ]), "请输入验证码", { confirmButtonText: "确定", cancelButtonText: "取消" } ); return { vcode_input: res.value, vcode_str: vcodeRes.data.vcode }; } catch (error) { throw Error("取消输入验证码"); } } async function getFsIds() { var _a2; let totalNeedPoint = 0; let fsIds = []; const fileList = []; try { const list = selectList.value; for (let index = 0; index < list.length; index++) { const item = list[index]; if (item.isdir) { const res = await reqAllFid(item.path); consola.log("获取到的全部文件数据", item.path, res); if ((_a2 = res.list) == null ? void 0 : _a2.length) { res.list.forEach((f2) => { if (!f2.isdir) { fsIds.push(f2.fs_id); fileList.push(f2); totalNeedPoint += calculatePoints(f2.size); } }); } } else { fileList.push(item); fsIds.push(item.fs_id); totalNeedPoint += calculatePoints(item.size); } } consola.log("即将消耗", totalNeedPoint); if (info.value.limit === 0) { if (totalNeedPoint >= info.value.score) { ElMessage.error(`积分不足,解析所选文件需要${totalNeedPoint}积分`); return 0; throw Error("积分不足"); } } } catch (error) { throw Error("获取文件列表出错"); } consola.log("--获取到的全部文件ids", fsIds); return { fsIds, fileList }; } function setUk() { let uk2 = _GM_getValue(APP_BAIDU_STORAGE_USERINFO_UK_KEY); if (!uk2) { _GM_setValue(APP_BAIDU_STORAGE_USERINFO_UK_KEY, _unsafeWindow.locals.userInfo.uk); uk2 = _unsafeWindow.locals.userInfo.uk; } if (uk2 != _unsafeWindow.locals.userInfo.uk) { consola.log("检测到账号变更"); resetScriptConfig2("检测到账号变更,3秒后会刷新页面"); } } vue.onMounted(() => { consola.log("百度网盘解析脚本挂载"); EventBus.on("openBaiduDownloadPage", handleOpen); initState(); setUk(); setInterval(() => { initLogin$1(); setUk(); }, 60 * 1e3); }); const isFirst = vue.ref(false); async function initState() { var _a2; const score = _GM_getValue(APP_BAIDU_STORAGE_SCORE_KEY); if (!score) isFirst.value = true; info.value.score = score || 0; const history = _GM_getValue(APP_BAIDU_STORAGE_HISTORY_KEY) || []; state.history = history; state.isHome = !_unsafeWindow.location.pathname.startsWith("/s/"); consola.log("是否是首页", state.isHome); consola.log("用户信息", _unsafeWindow.locals.userInfo); const { bdstoken, username } = (_a2 = _unsafeWindow == null ? void 0 : _unsafeWindow.locals) == null ? void 0 : _a2.userInfo; state.bdstoken = bdstoken; state.username = username; consola.log("开始初始化登录"); initLogin$1(); } async function initLogin$1(bool = false) { const score = await initLogin(bool); if (typeof score === "number") info.value.score = score; const res = await reqInfo(); if (res.code === 200) { info.value = res.data; } consola.log("initLogin", res); } const activeTab = vue.ref("home"); const leaveHandle = (newName) => { if (newName === "uk") { copyToClipboard(_unsafeWindow.locals.userInfo.uk); ElMessage.success("复制UK成功"); return false; } if (newName === "limit") return false; return true; }; return (_ctx, _cache) => { const _component_el_alert = ElAlert; const _component_el_table_column = ElTableColumn; const _component_el_table = ElTable; const _component_el_empty = ElEmpty; const _component_el_button = ElButton; const _component_el_button_group = ElButtonGroup; const _component_el_tab_pane = ElTabPane; const _component_el_tabs = ElTabs; const _component_el_dialog = ElDialog; const _directive_loading = vLoading; return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$4, [ vue.unref(state).isHome ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$1, [ vue.createVNode(_component_el_dialog, { modelValue: vue.unref(dialogVisible), "onUpdate:modelValue": _cache[5] || (_cache[5] = ($event) => vue.isRef(dialogVisible) ? dialogVisible.value = $event : null), "append-to-body": false, width: "65%" }, { header: vue.withCtx(() => { var _a2, _b, _c; return [ vue.createVNode(HomeDialogTitle, { recommend: (_b = (_a2 = vue.unref(scriptState2)) == null ? void 0 : _a2.appconfig) == null ? void 0 : _b.recommend, pureMode: ((_c = vue.unref(scriptState2).appconfig) == null ? void 0 : _c.pureMode) ?? false }, null, 8, ["recommend", "pureMode"]) ]; }), default: vue.withCtx(() => [ vue.createElementVNode("div", { ref_key: "dialogLoadingEl", ref: dialogLoadingEl }, [ vue.withDirectives((vue.openBlock(), vue.createBlock(_component_el_tabs, { type: "border-card", "before-leave": leaveHandle, modelValue: vue.unref(activeTab), "onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => vue.isRef(activeTab) ? activeTab.value = $event : null), "element-loading-text": "获取必要参数中,请稍候..." }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_tab_pane, { label: "💡 首页", name: "home", lazy: "" }, { default: vue.withCtx(() => { var _a2, _b, _c; return [ !((_a2 = vue.unref(scriptState2).appconfig) == null ? void 0 : _a2.pureMode) ? (vue.openBlock(), vue.createBlock(_component_el_alert, { key: 0, title: "🔊 提示", type: "info" }, { default: vue.withCtx(() => { var _a3; return [ vue.createElementVNode("div", { innerHTML: (_a3 = vue.unref(scriptState2).appconfig) == null ? void 0 : _a3.ad, class: "html-str" }, null, 8, _hoisted_3$1) ]; }), _: 1 })) : vue.createCommentVNode("", true), ((_b = vue.unref(selectList)) == null ? void 0 : _b.length) ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_4$1, [ vue.createVNode(_component_el_table, { data: vue.unref(selectList), size: "small", height: "40vh" }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_table_column, { type: "index", width: "50" }), vue.createVNode(_component_el_table_column, { label: "文件", "show-overflow-tooltip": "" }, { default: vue.withCtx((scope) => [ vue.createElementVNode("div", _hoisted_5$1, [ vue.createElementVNode("div", _hoisted_6$1, [ vue.createElementVNode("img", { src: scope.row.categoryImage, alt: "" }, null, 8, _hoisted_7$1) ]), vue.createElementVNode("div", _hoisted_8$1, vue.toDisplayString(scope.row.formatName), 1) ]) ]), _: 1 }), vue.createVNode(_component_el_table_column, { prop: "formatSize", label: "大小" }), vue.createVNode(_component_el_table_column, { prop: "formatTime", label: "修改时间" }) ]), _: 1 }, 8, ["data"]) ])) : (vue.openBlock(), vue.createElementBlock("div", _hoisted_9$1, [ vue.createVNode(_component_el_empty, { description: "\r\n 请到网盘首页选择需要解析的文件或文件夹\r\n " }) ])), vue.createElementVNode("div", _hoisted_10, [ vue.createElementVNode("div", null, [ vue.createVNode(_component_el_button_group, null, { default: vue.withCtx(() => { var _a3, _b2; return [ vue.createVNode(_component_el_button, { onClick: showScoreHistory }, { default: vue.withCtx(() => [ vue.createTextVNode("💰积分:" + vue.toDisplayString(vue.unref(info).score) + vue.toDisplayString(vue.unref(info).limit ? `(无限制)` : ""), 1) ]), _: 1 }), vue.createVNode(_component_el_button, { onClick: signin }, { default: vue.withCtx(() => _cache[9] || (_cache[9] = [ vue.createTextVNode("🧲 签到 ") ])), _: 1 }), !((_a3 = vue.unref(scriptState2).appconfig) == null ? void 0 : _a3.pureMode) ? (vue.openBlock(), vue.createBlock(_component_el_button, { key: 0, onClick: recharge }, { default: vue.withCtx(() => _cache[10] || (_cache[10] = [ vue.createTextVNode("🔑 充值") ])), _: 1 })) : vue.createCommentVNode("", true), !((_b2 = vue.unref(scriptState2).appconfig) == null ? void 0 : _b2.pureMode) ? (vue.openBlock(), vue.createBlock(_component_el_button, { key: 1, onClick: goToShop }, { default: vue.withCtx(() => _cache[11] || (_cache[11] = [ vue.createTextVNode("🎁 积分商城") ])), _: 1 })) : vue.createCommentVNode("", true) ]; }), _: 1 }) ]), vue.createElementVNode("div", null, [ vue.createVNode(_component_el_button, { onClick: _cache[0] || (_cache[0] = ($event) => dialogVisible.value = false) }, { default: vue.withCtx(() => _cache[12] || (_cache[12] = [ vue.createTextVNode("关闭") ])), _: 1 }), vue.unref(state).downloadLinks.length == 0 ? (vue.openBlock(), vue.createBlock(_component_el_button, { key: 0, type: "primary", onClick: getDownloadUrl, disabled: ((_c = vue.unref(selectList)) == null ? void 0 : _c.length) == 0, loading: vue.unref(isLoading) }, { default: vue.withCtx(() => _cache[13] || (_cache[13] = [ vue.createTextVNode(" 开始解析 ") ])), _: 1 }, 8, ["disabled", "loading"])) : (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 1 }, [ vue.createVNode(_component_el_button, { type: "success", onClick: _cache[1] || (_cache[1] = ($event) => vue.unref(useAria2Download)(vue.unref(state).downloadLinks)) }, { default: vue.withCtx(() => _cache[14] || (_cache[14] = [ vue.createTextVNode(" 推送到Aria2(Motrix) ") ])), _: 1 }), vue.createVNode(_component_el_button, { onClick: _cache[2] || (_cache[2] = ($event) => vue.unref(copyDownloadUrl)(vue.unref(state).downloadLinks)) }, { default: vue.withCtx(() => _cache[15] || (_cache[15] = [ vue.createTextVNode(" 复制下载链接 ") ])), _: 1 }), vue.createVNode(_component_el_button, { onClick: _cache[3] || (_cache[3] = ($event) => vue.unref(copyDownloadUA)(vue.unref(state).downloadLinks)) }, { default: vue.withCtx(() => _cache[16] || (_cache[16] = [ vue.createTextVNode("复制UA") ])), _: 1 }) ], 64)) ]) ]) ]; }), _: 1 }), vue.createVNode(_component_el_tab_pane, { label: "💿 解析记录", name: "record", lazy: "" }, { default: vue.withCtx(() => [ vue.createElementVNode("div", _hoisted_11, [ _cache[17] || (_cache[17] = vue.createElementVNode("div", { class: "sub-title" }, "最近5次解析记录:", -1)), vue.createVNode(History, { history: vue.unref(state).history }, null, 8, ["history"]) ]) ]), _: 1 }), vue.createVNode(_component_el_tab_pane, { label: "⚒️ 设置", name: "setting" }, { default: vue.withCtx(() => [ vue.createVNode(_sfc_main$8) ]), _: 1 }), vue.createVNode(_component_el_tab_pane, { label: "📖 关于", lazy: "", name: "about" }, { default: vue.withCtx(() => [ vue.createVNode(About) ]), _: 1 }), vue.createVNode(_component_el_tab_pane, { label: `UK: ${vue.unref(_unsafeWindow).locals.userInfo.uk}`, name: "uk" }, null, 8, ["label"]), vue.unref(info).limit ? (vue.openBlock(), vue.createBlock(_component_el_tab_pane, { key: 0, label: `无限制积分到期时间: ${formatTimestamp(vue.unref(info).score_limit_time * 1e3)}`, name: "limit" }, null, 8, ["label"])) : vue.createCommentVNode("", true) ]), _: 1 }, 8, ["modelValue"])), [ [_directive_loading, vue.unref(loading)] ]) ], 512) ]), _: 1 }, 8, ["modelValue"]), vue.createVNode(_component_el_dialog, { modelValue: vue.unref(showHistoryDialog), "onUpdate:modelValue": _cache[7] || (_cache[7] = ($event) => vue.isRef(showHistoryDialog) ? showHistoryDialog.value = $event : null), title: "积分记录", width: "50%", style: { "margin-top": "150px" } }, { footer: vue.withCtx(() => [ _cache[19] || (_cache[19] = vue.createElementVNode("span", { style: { "float": "left" } }, "仅显示最近20条记录", -1)), vue.createVNode(_component_el_button, { onClick: _cache[6] || (_cache[6] = ($event) => showHistoryDialog.value = false) }, { default: vue.withCtx(() => _cache[18] || (_cache[18] = [ vue.createTextVNode("关闭") ])), _: 1 }) ]), default: vue.withCtx(() => [ vue.createVNode(_component_el_table, { data: vue.unref(historyData), style: { "width": "100%", "max-height": "400px", "overflow-y": "auto" } }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_table_column, { prop: "score", label: "积分变化" }, { default: vue.withCtx((scope) => [ vue.createElementVNode("span", null, vue.toDisplayString(scope.row.score > 0 ? "+" : "-") + vue.toDisplayString(Math.abs(scope.row.score)), 1) ]), _: 1 }), vue.createVNode(_component_el_table_column, { prop: "reason", label: "变化原因" }), vue.createVNode(_component_el_table_column, { prop: "created_at", label: "变化时间" }, { default: vue.withCtx((scope) => [ vue.createElementVNode("span", null, vue.toDisplayString(formatTimestamp(scope.row.created_at)), 1) ]), _: 1 }) ]), _: 1 }, 8, ["data"]) ]), _: 1 }, 8, ["modelValue"]) ])) : (vue.openBlock(), vue.createElementBlock("div", _hoisted_12, [ vue.createVNode(_component_el_dialog, { modelValue: vue.unref(dialogVisible), "onUpdate:modelValue": _cache[8] || (_cache[8] = ($event) => vue.isRef(dialogVisible) ? dialogVisible.value = $event : null), "append-to-body": false, title: vue.unref(APP_NAME) }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_empty, { description: "转存到自己的百度网盘可以享受极速下载哦" }) ]), _: 1 }, 8, ["modelValue", "title"]) ])) ]); }; } }); const Home$1 = /* @__PURE__ */ _export_sfc(_sfc_main$6, [["__scopeId", "data-v-6dad2ab3"]]); const _hoisted_1$3 = { class: "mr-16" }; const _sfc_main$5 = /* @__PURE__ */ vue.defineComponent({ __name: "TriggerButton", setup(__props) { function handleClick() { EventBus.emit("openBaiduDownloadPage"); } function handleClick2() { ElMessageBox.alert( `

⚠️

当该项目无法正常运行/或无法打开脚本可通过下方地址更新:

官网:sswpdd.xyz/doc/doc.html

GitHub:https://github.com/AFANOOO/sspan

防失联群组:TG群组

`, { confirmButtonText: "我知道了", confirmButtonClass: "btn-center-a", dangerouslyUseHTMLString: true } ); } return (_ctx, _cache) => { const _component_el_button = ElButton; return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$3, [ vue.createVNode(_component_el_button, { type: "primary", onClick: handleClick, round: "" }, { default: vue.withCtx(() => [ vue.createTextVNode(" 🀄 " + vue.toDisplayString(vue.unref(APP_NAME)), 1) ]), _: 1 }), vue.createVNode(_component_el_button, { type: "primary", onClick: handleClick2, round: "" }, { default: vue.withCtx(() => [ vue.createTextVNode(" 🀄 " + vue.toDisplayString(vue.unref(APP_NAME)) + " Home ", 1) ]), _: 1 }) ]); }; } }); const _sfc_main$4 = /* @__PURE__ */ vue.defineComponent({ __name: "Index", setup(__props) { vue.onMounted(() => { addDownLoadBtnToUI(); }); function addDownLoadBtnToUI() { let baiduHeader = document.querySelector(".wp-s-header__right"); if (baiduHeader) { const btnContainer = document.createElement("div"); btnContainer.className = "sswp-baidu-btn-container"; vue.createApp(_sfc_main$5).mount(btnContainer); baiduHeader == null ? void 0 : baiduHeader.insertAdjacentElement("afterbegin", btnContainer); } else { baiduHeader = document.querySelector('[node-type="header-link"]'); const btnContainer = document.createElement("span"); btnContainer.className = "cMEMEF"; vue.createApp(_sfc_main$5).mount(btnContainer); baiduHeader == null ? void 0 : baiduHeader.appendChild(btnContainer); } } return (_ctx, _cache) => { return vue.openBlock(), vue.createBlock(Home$1); }; } }); function findReact(dom, traverseUp = 0) { var _a2; const key = Object.keys(dom).find((key2) => { return key2.startsWith("__reactFiber$") || key2.startsWith("__reactInternalInstance$"); }); if (!key) return null; const domFiber = dom[key]; if (!domFiber) return null; if (domFiber._currentElement) { let compFiber2 = domFiber._currentElement._owner; for (let i = 0; i < traverseUp; i++) { if (!((_a2 = compFiber2 == null ? void 0 : compFiber2._currentElement) == null ? void 0 : _a2._owner)) return null; compFiber2 = compFiber2._currentElement._owner; } return (compFiber2 == null ? void 0 : compFiber2._instance) ?? null; } const getCompFiber = (fiber) => { let parentFiber = fiber.return; while (parentFiber && typeof parentFiber.type === "string") { parentFiber = parentFiber.return; } return parentFiber; }; let compFiber = getCompFiber(domFiber); for (let i = 0; i < traverseUp; i++) { if (!compFiber) return null; compFiber = getCompFiber(compFiber); } return (compFiber == null ? void 0 : compFiber.stateNode) || compFiber || null; } function flattenPathAndIds(input) { const segments2 = input.trim().slice(0, -1).split(";"); const result = []; segments2.forEach((segment) => { const [path, ids] = segment.split(":").map((s2) => s2.trim()); ids.split(",").forEach((id) => { result.push({ path, id: id.trim() }); }); }); return result; } const icon = { folder: "//image.quark.cn/s/uae/g/3o/broccoli/resource/202501/2a0a0590-c8f4-11ef-98f3-674d066e29a6.png", doc: "//image.quark.cn/s/uae/g/3o/broccoli/resource/202501/71725b30-c8f4-11ef-98f3-674d066e29a6.png", pdf: "//image.quark.cn/s/uae/g/3o/broccoli/resource/202501/b6132c60-c8f4-11ef-98f3-674d066e29a6.png", ppt: "//image.quark.cn/s/uae/g/3o/broccoli/resource/202501/cd05a790-c8f4-11ef-98f3-674d066e29a6.png", zip: "//image.quark.cn/s/uae/g/3o/broccoli/resource/202501/e4210780-c8f4-11ef-98f3-674d066e29a6.png", others: "//image.quark.cn/s/uae/g/3o/broccoli/resource/202501/07193550-c8f5-11ef-98f3-674d066e29a6.png", xls: "//image.quark.cn/s/uae/g/3o/broccoli/resource/202501/19e25220-c8f5-11ef-98f3-674d066e29a6.png", video: "//image.quark.cn/s/uae/g/3o/broccoli/resource/202501/3b5f78b0-c8f5-11ef-98f3-674d066e29a6.png", torrent: "//image.quark.cn/s/uae/g/3o/broccoli/resource/202501/56a98e30-c8f5-11ef-98f3-674d066e29a6.png", image: "//image.quark.cn/s/uae/g/3o/broccoli/resource/202501/6edacaf0-c8f5-11ef-98f3-674d066e29a6.png", music: "//image.quark.cn/s/uae/g/3o/broccoli/resource/202501/835e41f0-c8f5-11ef-98f3-674d066e29a6.png", app: "//image.quark.cn/s/uae/g/3o/broccoli/resource/202501/959b4b60-c8f5-11ef-98f3-674d066e29a6.png", bt: "//image.quark.cn/s/uae/g/3o/broccoli/resource/202501/56a98e30-c8f5-11ef-98f3-674d066e29a6.png", program: "//image.quark.cn/s/uae/g/3o/broccoli/resource/202501/e0a66a40-c8f5-11ef-98f3-674d066e29a6.png", invoice: "//image.quark.cn/s/uae/g/3o/broccoli/resource/202501/f7967470-c8f5-11ef-98f3-674d066e29a6.png", engineering: "//image.quark.cn/s/uae/g/3o/broccoli/resource/202501/0a4e0510-c8f6-11ef-98f3-674d066e29a6.png", note: "//image.quark.cn/s/uae/g/3o/broccoli/resource/202501/b0facaf0-c974-11ef-98f3-674d066e29a6.png", html: "//image.quark.cn/s/uae/g/3o/broccoli/resource/202501/cc9e7220-c974-11ef-98f3-674d066e29a6.png", ebook: "//image.quark.cn/s/uae/g/3o/broccoli/resource/202501/e08beab0-c974-11ef-98f3-674d066e29a6.png", other_doc: "//image.quark.cn/s/uae/g/3o/broccoli/resource/202501/f7a9e2b0-c974-11ef-98f3-674d066e29a6.png", aicourse: "//image.quark.cn/s/uae/g/3o/broccoli/resource/202501/0b69e2a0-c975-11ef-98f3-674d066e29a6.png", ainote: "//image.quark.cn/s/uae/g/3o/broccoli/resource/202501/1d73ce20-c975-11ef-98f3-674d066e29a6.png" }; const fileCategoryMap = { video: [ "3gp", "avi", "flv", "mkv", "mov", "m2ts", "mp4", "mpeg", "mpg", "rm", "webm", "wmv", "rmvb", "m3u8", "asf", "vob", "f4v", "mk3d", "mj2", "h264", "3g2", "m2t", "ts", "mts", "m3u", "m2v" ], image: ["bmp", "gif", "heic", "jpeg", "jpg", "png", "webp", "tiff", "svg", "psd"], ebook: ["epub", "chm", "mobi", "azw3", "pdg", "ebk2", "txt"], doc: ["doc", "docx", "docm", "dot", "dotx", "dotm", "wps", "wpt", "rtf"], xls: ["xls", "xlsx", "xlsm", "xlsb", "xlt", "xltx", "xltm", "et", "ett", "csv"], ppt: ["ppt", "pptx", "pptm", "pot", "potm", "potx", "pps", "ppsm", "ppsx", "dps", "dpt"], pdf: ["pdf"], html: ["htm", "html", "url"], engineering: ["cad", "obj", "cdr", "shp", "cgr", "dxf", "prt", "dwg", "dwt", "dws"], program: [ "py", "java", "c", "cpp", "asm", "asp", "bat", "cmd", "log", "bas", "php", "js", "json", "xml", "h", "css", "map", "m", "ini", "cs", "cfg", "def", "hpp", "lua", "mlx", "yml", "cc", "sh" ], note: ["xmind", "caj", "note", "goodnote", "tex", "md", "markdown", "mdown"], invoice: ["ofd"], other_doc: ["lrc", "prg", "res"], music: [ "aac", "amr", "ape", "flac", "mp3", "ogg", "wav", "wma", "aiff", "mp2", "m4a", "mka", "m2a", "mpa", "ac3", "aea", "act", "latm", "eac3", "evo", "apl", "aif", "aifc", "dts", "aacp" ], torrent: ["torrent"], zip: ["zip", "rar", "7z", "gz", "tgz", "tar", "bz2", "jar", "iso", "uue", "cab", "pak", "xz"], app: ["apk", "exe", "dmg"] }; const getFileExtension = (fileName) => { var _a2; const parts = fileName.split("."); return parts.length > 1 ? (_a2 = parts.pop()) == null ? void 0 : _a2.toLowerCase() : void 0; }; function getFileIcon(file) { if (file.file_type === 0) { return icon.folder; } else if (file.category === 1) { return file.thumbnail || icon.video; } else if (file.category === 3) { return file.thumbnail; } else if (file.category === 9) { return icon.aicourse; } else if (file.category === 10) { return icon.ainote; } else { const extension = getFileExtension(file.file_name); if (extension) { for (const [category, extensions] of Object.entries(fileCategoryMap)) { if (extensions.includes(extension)) { return icon[category]; } } } return icon.others; } } async function reqGenerateDownloadTask(fids) { const res = await request( "POST", "https://drive-pc.quark.cn/1/clouddrive/download/list", { include_fids: fids }, { referer: "https://pan.quark.cn/", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) quark-cloud-drive/3.18.0 Chrome/112.0.5615.165 Electron/24.1.3.8 Safari/537.36 Channel/pckk_other_ch" }, { pr: "ucpro", fr: "pc", sys: "win32", ve: "3.18.0" } ); return res; } async function reqDownloadFIdUrl(taskId, retryIndex = 0) { const res = await request( "GET", "https://drive-pc.quark.cn/1/clouddrive/download/list", null, { "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) quark-cloud-drive/3.18.0 Chrome/112.0.5615.165 Electron/24.1.3.8 Safari/537.36 Channel/pckk_other_ch", referer: "https://pan.quark.cn/" }, { pr: "ucpro", fr: "pc", sys: "win32", task_id: taskId, retry_index: retryIndex, // 从0开始 ve: "3.18.0" } ); return res; } async function reqDownloadFIds(taskId) { const res = await request( "GET", "https://drive-pc.quark.cn/1/clouddrive/download/list/export", null, { "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) quark-cloud-drive/3.18.0 Chrome/112.0.5615.165 Electron/24.1.3.8 Safari/537.36 Channel/pckk_other_ch", referer: "https://pan.quark.cn/", cookie: document.cookie }, { pr: "ucpro", fr: "pc", sys: "win32", task_id: taskId, ve: "3.18.0" } ); return res; } async function reqDownloadUrls(fids) { const res = await request( "POST", "https://drive-pc.quark.cn/1/clouddrive/file/download", { fids }, { referer: "https://pan.quark.cn/", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) quark-cloud-drive/3.18.0 Chrome/112.0.5615.165 Electron/24.1.3.8 Safari/537.36 Channel/pckk_other_ch", cookie: document.cookie }, { pr: "ucpro", fr: "pc", sys: "win32", ve: "3.18.0" } ); return res; } const _hoisted_1$2 = { class: "sswp-script" }; const _hoisted_2 = { key: 0 }; const _hoisted_3 = { class: "file" }; const _hoisted_4 = { class: "type-img" }; const _hoisted_5 = ["src"]; const _hoisted_6 = { class: "file-name" }; const _hoisted_7 = { key: 1 }; const _hoisted_8 = { class: "flex flex-end top-10" }; const _hoisted_9 = { class: "history" }; const _sfc_main$3 = /* @__PURE__ */ vue.defineComponent({ __name: "Home", setup(__props) { const dialogVisible = vue.ref(false); const dialogLoadingEl = vue.ref(null); const isLoading = vue.ref(false); const state = vue.reactive({ downloadLinks: [], history: [], isHome: true }); const selectList = vue.ref(); const { scriptState: scriptState2 } = useScriptCommon(); const { useAria2Download } = useDownloadFn(); async function handleOpen() { consola.log("打开弹窗"); state.downloadLinks = []; dialogVisible.value = true; const list = []; let reactDom = document.querySelector(".file-list"); let reactObj = findReact(reactDom); let props = reactObj.props; if (props) { let fileList = props.list; let selectedKeys = props.selectedRowKeys || []; fileList.forEach((val) => { if (selectedKeys.includes(val.fid)) { list.push(val); } }); } list.forEach((item) => { item.icon = getFileIcon(item); }); selectList.value = list; consola.log("选中的文件", list); } async function getDownloadUrl() { var _a2; consola.log("开始解析"); const loading = ElLoading.service({ target: dialogLoadingEl.value, text: "解析中……" }); try { loading.setText("创建下载任务……"); const fid = (_a2 = selectList.value) == null ? void 0 : _a2.map((item) => item.fid); const downloadTaskRes = await reqGenerateDownloadTask(fid); consola.log("创建下载任务", downloadTaskRes); const taskId = downloadTaskRes.data.task_id; loading.setText("获取文件列表地址……"); const downloadFidUrlRes = await getFidsUrl(taskId); consola.log("获取文件列表列地址结果", downloadFidUrlRes); loading.setText("获取文件id……"); const fidsStr = await reqDownloadFIds(taskId); consola.log("获取文件列表列地址结果", fidsStr); const files = flattenPathAndIds(fidsStr); consola.log("处理后的文件", files); loading.setText("获取下载地址……"); const downlodwLinkRes = await reqDownloadUrls(files.map((item) => item.id)); consola.log("全部下载地址", downlodwLinkRes); ElMessage.success("解析成功"); const list = downlodwLinkRes.data.map((item) => { var _a3; const path = (_a3 = files.find((file) => file.id == item.fid)) == null ? void 0 : _a3.path; item.path = path; return item; }).map((item) => { return { dir: item.path, filename: item.file_name, url: item.download_url, ua: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) quark-cloud-drive/3.18.0 Chrome/112.0.5615.165 Electron/24.1.3.8 Safari/537.36 Channel/pckk_other_ch", cookie: true }; }); state.downloadLinks = list; consola.log("--最终的下载链接", state.downloadLinks); state.history.unshift({ date: Date.now(), data: list }); const history = state.history.slice(0, 5); state.history = history; _GM.setValue(APP_QUARK_STORAGE_HISTORY_KEY, history); } catch (error) { consola.log("出错了", error); ElMessage.error(error.message); } loading.close(); isLoading.value = false; } async function getFidsUrl(taskId, retryIndex = 0) { await delay(500); const downloadFidUrlRes = await reqDownloadFIdUrl(taskId); consola.log("获取文件列表地址结果" + retryIndex, downloadFidUrlRes); if (downloadFidUrlRes.data.status == 2) { return downloadFidUrlRes; } else { return await getFidsUrl(taskId, retryIndex + 1); } } vue.onMounted(() => { consola.log("夸克解析脚本挂载"); EventBus.on("openQuarkDownloadPage", handleOpen); initState(); }); async function initState() { const history = _GM_getValue(APP_QUARK_STORAGE_HISTORY_KEY) || []; state.history = history; } async function sleep(ms) { return new Promise((resolve) => setTimeout(resolve, ms)); } async function downloadDirect(links) { links.forEach(async (link) => { let iframe = document.createElement("iframe"); iframe.style.display = "none"; iframe.src = link.url; document.body.appendChild(iframe); setTimeout(() => document.body.removeChild(iframe), 5e3); await sleep(1e3); }); } return (_ctx, _cache) => { const _component_el_table_column = ElTableColumn; const _component_el_table = ElTable; const _component_el_empty = ElEmpty; const _component_el_button = ElButton; const _component_el_tab_pane = ElTabPane; const _component_el_tabs = ElTabs; const _component_el_dialog = ElDialog; return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$2, [ vue.createVNode(_component_el_dialog, { modelValue: vue.unref(dialogVisible), "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => vue.isRef(dialogVisible) ? dialogVisible.value = $event : null), "append-to-body": false }, { header: vue.withCtx(() => { var _a2, _b; return [ vue.createVNode(HomeDialogTitle, { recommend: (_b = (_a2 = vue.unref(scriptState2)) == null ? void 0 : _a2.appconfig) == null ? void 0 : _b.recommend }, null, 8, ["recommend"]) ]; }), default: vue.withCtx(() => [ vue.createElementVNode("div", { ref_key: "dialogLoadingEl", ref: dialogLoadingEl }, [ vue.createVNode(_component_el_tabs, { type: "border-card" }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_tab_pane, { label: "💡 首页", lazy: "" }, { default: vue.withCtx(() => { var _a2, _b; return [ ((_a2 = vue.unref(selectList)) == null ? void 0 : _a2.length) ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2, [ vue.createVNode(_component_el_table, { data: vue.unref(selectList), size: "small", height: "40vh" }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_table_column, { type: "index", width: "50" }), vue.createVNode(_component_el_table_column, { label: "文件", "show-overflow-tooltip": "" }, { default: vue.withCtx((scope) => [ vue.createElementVNode("div", _hoisted_3, [ vue.createElementVNode("div", _hoisted_4, [ vue.createElementVNode("img", { src: scope.row.icon, alt: "" }, null, 8, _hoisted_5) ]), vue.createElementVNode("div", _hoisted_6, vue.toDisplayString(scope.row.file_name), 1) ]) ]), _: 1 }), vue.createVNode(_component_el_table_column, { label: "大小" }, { default: vue.withCtx((scope) => [ vue.createTextVNode(vue.toDisplayString(vue.unref(formatSize)(scope.row.size)), 1) ]), _: 1 }), vue.createVNode(_component_el_table_column, { label: "修改时间" }, { default: vue.withCtx((scope) => [ vue.createTextVNode(vue.toDisplayString(vue.unref(formatTime)(scope.row.updated_at)), 1) ]), _: 1 }) ]), _: 1 }, 8, ["data"]) ])) : (vue.openBlock(), vue.createElementBlock("div", _hoisted_7, [ vue.createVNode(_component_el_empty, { description: "\r\n 请到网盘首页选择需要解析的文件或文件夹\r\n " }) ])), vue.createElementVNode("div", _hoisted_8, [ vue.createElementVNode("div", null, [ vue.createVNode(_component_el_button, { onClick: _cache[0] || (_cache[0] = ($event) => dialogVisible.value = false) }, { default: vue.withCtx(() => _cache[4] || (_cache[4] = [ vue.createTextVNode("关闭") ])), _: 1 }), vue.unref(state).downloadLinks.length == 0 ? (vue.openBlock(), vue.createBlock(_component_el_button, { key: 0, type: "primary", onClick: getDownloadUrl, disabled: ((_b = vue.unref(selectList)) == null ? void 0 : _b.length) == 0, loading: vue.unref(isLoading) }, { default: vue.withCtx(() => _cache[5] || (_cache[5] = [ vue.createTextVNode(" 开始解析 ") ])), _: 1 }, 8, ["disabled", "loading"])) : (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 1 }, [ vue.createVNode(_component_el_button, { type: "success", onClick: _cache[1] || (_cache[1] = ($event) => vue.unref(useAria2Download)(vue.unref(state).downloadLinks)) }, { default: vue.withCtx(() => _cache[6] || (_cache[6] = [ vue.createTextVNode(" 推送到Aria2(Motrix) ") ])), _: 1 }), vue.createVNode(_component_el_button, { type: "success", onClick: _cache[2] || (_cache[2] = ($event) => downloadDirect(vue.unref(state).downloadLinks)) }, { default: vue.withCtx(() => _cache[7] || (_cache[7] = [ vue.createTextVNode("浏览器下载") ])), _: 1 }) ], 64)) ]) ]) ]; }), _: 1 }), vue.createVNode(_component_el_tab_pane, { label: "💿 解析记录", lazy: "" }, { default: vue.withCtx(() => [ vue.createElementVNode("div", _hoisted_9, [ _cache[8] || (_cache[8] = vue.createElementVNode("div", { class: "sub-title" }, "最近5次解析记录:", -1)), vue.createVNode(History, { history: vue.unref(state).history, showCopyCookie: "" }, null, 8, ["history"]) ]) ]), _: 1 }), vue.createVNode(_component_el_tab_pane, { label: "⚒️ 设置" }, { default: vue.withCtx(() => [ vue.createVNode(_sfc_main$8) ]), _: 1 }), vue.createVNode(_component_el_tab_pane, { label: "📖 关于", lazy: "" }, { default: vue.withCtx(() => [ vue.createVNode(About) ]), _: 1 }) ]), _: 1 }) ], 512) ]), _: 1 }, 8, ["modelValue"]) ]); }; } }); const Home = /* @__PURE__ */ _export_sfc(_sfc_main$3, [["__scopeId", "data-v-b2eabf45"]]); const _hoisted_1$1 = { class: "btn" }; const _sfc_main$2 = /* @__PURE__ */ vue.defineComponent({ __name: "TriggerButton", setup(__props) { function handleClick() { EventBus.emit("openQuarkDownloadPage"); } return (_ctx, _cache) => { const _component_el_button = ElButton; return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$1, [ vue.createVNode(_component_el_button, { type: "primary", onClick: handleClick, style: { "height": "34px" } }, { default: vue.withCtx(() => [ vue.createElementVNode("span", null, "🀄 " + vue.toDisplayString(vue.unref(APP_NAME)), 1) ]), _: 1 }) ]); }; } }); const DownloadButton = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["__scopeId", "data-v-fb9fbf30"]]); const _sfc_main$1 = /* @__PURE__ */ vue.defineComponent({ __name: "Index", setup(__props) { vue.onMounted(() => { consola.log("初始化按钮"); addDownLoadBtnToUI(); window.addEventListener("popstate", async () => { const currentPath = window.location.pathname; consola.log("Path 变化:", currentPath); await delay(500); addDownLoadBtnToUI(); }); }); function addDownLoadBtnToUI() { let searchBtn = document.querySelector(".file-search-box"); if (searchBtn) { const btnContainer = document.createElement("div"); btnContainer.className = "sswp-quark-btn-container"; vue.createApp(DownloadButton).mount(btnContainer); searchBtn == null ? void 0 : searchBtn.insertAdjacentElement("beforebegin", btnContainer); } } return (_ctx, _cache) => { return vue.openBlock(), vue.createBlock(Home); }; } }); const _hoisted_1 = { class: "ss-script" }; const _sfc_main = /* @__PURE__ */ vue.defineComponent({ __name: "Root", setup(__props) { const currentComponent = vue.shallowRef(null); const NETDISK_TYPE = { BAIDUYUN: "yun.baidu.com", BAIDU: "pan.baidu.com", QUARK: "quark.cn" }; const COMPONENT_MAP = { [NETDISK_TYPE.BAIDU]: _sfc_main$4, [NETDISK_TYPE.BAIDUYUN]: _sfc_main$4, [NETDISK_TYPE.QUARK]: _sfc_main$1 }; function setCurrentComponent() { const hostname = window.location.hostname; for (const [type, component] of Object.entries(COMPONENT_MAP)) { if (hostname.includes(type)) { currentComponent.value = component; consola.log("当前页面", type); return; } } consola.warn("当前访问的不是支持的网盘"); } const { checkScriptUpdate, getRemoteAppConfig } = useScriptCommon(); vue.onMounted(async () => { consola.log("脚本初始化加载"); consola.log("脚本信息", _GM_info); getRemoteAppConfig(); setInterval(() => { getRemoteAppConfig(); }, 1e3 * 60 * 5); checkScriptUpdate(); setCurrentComponent(); }); return (_ctx, _cache) => { return vue.openBlock(), vue.createElementBlock("div", _hoisted_1, [ (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(vue.unref(currentComponent)))) ]); }; } }); _unsafeWindow.hotFix1 = true; vue.createApp(_sfc_main).mount( (() => { const app = document.createElement("div"); document.body.append(app); return app; })() ); } }); require_main_001(); })(Vue, axios, CryptoJS, mitt);