// ==UserScript== // @name 神速Down·批量启航(支持文件夹多文件下载) // @namespace greasyfork // @version 1.0.0 // @author 神速Down // @description 不限制速度百度网盘解析脚本支持文件夹多文件下载,无视黑号,拥有IDM/Aria2/Motrix三种方式任意体验极速下载!支持Microsoft Edge、Google Chrome、Firefox等浏览器 面向所有网友免费交流学习使用... // @license MIT // @icon data:image/png;base64,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 // @homepage https://home.halopan.com // @match https://pan.baidu.com/disk/main* // @match https://pan.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.7.9/files/dist/axios.min.js // @require https://registry.npmmirror.com/mitt/3.0.1/files/dist/mitt.umd.js // @connect localhost // @connect ssv2.halopan.com // @connect gitee.com // @grant GM.setValue // @grant GM_addStyle // @grant GM_deleteValues // @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";.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}.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-btn-container{order:8;margin-left:20px}.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}: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}.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-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;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-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}.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}.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-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)}: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}}: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}}.sswp-script .file-name[data-v-1c5dd94c]{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sswp-script .html-str[data-v-1c5dd94c] strong{line-height:normal;vertical-align:baseline}.sswp-script .html-str[data-v-1c5dd94c] a{color:var(--el-color-primary)!important;line-height:normal;vertical-align:baseline;font-weight:700}.sswp-script .about[data-v-1c5dd94c]{text-align:center}.sswp-script .about h1[data-v-1c5dd94c]{font-size:18px;font-weight:700}.sswp-script .about .container[data-v-1c5dd94c]{padding:10px}.sswp-script .about .container .desc[data-v-1c5dd94c]{margin-bottom:10px;text-align:left}.sswp-script .progress-content[data-v-1c5dd94c]{width:200px}.sswp-script .file[data-v-1c5dd94c]{display:flex;align-items:center}.sswp-script .file .type-img[data-v-1c5dd94c]{height:30px}.sswp-script .file .type-img img[data-v-1c5dd94c]{height:100%}.sswp-script .log[data-v-1c5dd94c]{margin-top:10px}.sswp-script[data-v-1c5dd94c] .el-dialog .el-dialog__header{font-weight:700;padding-bottom:16px}.sswp-script[data-v-1c5dd94c] .el-dialog .el-dialog__title{color:var(--el-color-primary)}.sswp-script[data-v-1c5dd94c] .el-dialog .el-dialog__headerbtn{font-weight:700;top:16px;right:16px}.sswp-script[data-v-1c5dd94c] .el-tabs{border-radius:8px;overflow:hidden}.sswp-script[data-v-1c5dd94c] .el-tabs .el-tabs__item.is-active{font-weight:700} '); (function (vue, mitt, axios) { '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-Chg8gl3k.js"(exports, module) { 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 : undefined; 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 : undefined; function baseGetTag(value) { if (value == null) { return value === undefined ? 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 : undefined, symbolToString = symbolProto$2 ? symbolProto$2.toString : undefined; 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 ? undefined : object[key]; } function getNative(object, key) { var value = getValue$1(object, key); return baseIsNative(value) ? value : undefined; } 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 = undefined; 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(undefined, 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 === undefined && !(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 = undefined; if (newValue === undefined) { 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 === undefined ? 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] : undefined, guard = length > 2 ? sources[2] : undefined; customizer = assigner.length > 3 && typeof customizer == "function" ? (length--, customizer) : undefined; if (guard && isIterateeCall(sources[0], sources[1], guard)) { customizer = length < 3 ? undefined : 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 : undefined; var nativeIsBuffer = Buffer$1 ? Buffer$1.isBuffer : undefined; 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 ? undefined : result; } return hasOwnProperty$5.call(data, key) ? data[key] : undefined; } var objectProto$5 = Object.prototype; var hasOwnProperty$4 = objectProto$5.hasOwnProperty; function hashHas(key) { var data = this.__data__; return nativeCreate ? data[key] !== undefined : 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 === undefined ? 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 ? undefined : 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 : undefined; } function get(object, path, defaultValue) { var result = object == null ? undefined : baseGet(object, path); return result === undefined ? 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 : undefined; 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, undefined, 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 : undefined, allocUnsafe = Buffer2 ? Buffer2.allocUnsafe : undefined; 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 : undefined, 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 Uint8Array2 = root.Uint8Array; function cloneArrayBuffer(arrayBuffer) { var result = new arrayBuffer.constructor(arrayBuffer.byteLength); new Uint8Array2(result).set(new Uint8Array2(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 : undefined, symbolValueOf$1 = symbolProto$1 ? symbolProto$1.valueOf : undefined; 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 !== undefined) { 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 ? undefined : 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() : undefined; 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 !== undefined) { 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 : undefined, symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; 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 Uint8Array2(object), new Uint8Array2(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 === undefined ? 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 === undefined && !(key in object)) { return false; } } else { var stack = new Stack(); var result; if (!(result === undefined ? 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 !== undefined || 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 === undefined && objValue === srcValue ? hasIn(object, path) : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG); }; } function baseProperty(key) { return function(object) { return object == null ? undefined : 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 = undefined; 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 === undefined || 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 = undefined; if (trailing && lastArgs) { return invokeFunc(time); } lastArgs = lastThis = undefined; return result; } function cancel() { if (timerId !== undefined) { clearTimeout(timerId); } lastInvokeTime = 0; lastArgs = lastCallTime = lastThis = timerId = undefined; } function flush() { return timerId === undefined ? result : trailingEdge(now()); } function debounced() { var time = now(), isInvoking = shouldInvoke(time); lastArgs = arguments; lastThis = this; lastCallTime = time; if (isInvoking) { if (timerId === undefined) { return leadingEdge(lastCallTime); } if (maxing) { clearTimeout(timerId); timerId = setTimeout(timerExpired, wait); return invokeFunc(lastCallTime); } } if (timerId === undefined) { timerId = setTimeout(timerExpired, wait); } return result; } debounced.cancel = cancel; debounced.flush = flush; return debounced; } function assignMergeValue(object, key, value) { if (value !== undefined && !eq(object[key], value) || value === undefined && !(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) : undefined; var isCommon = newValue === undefined; 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) : undefined; if (newValue === undefined) { 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 === undefined; } 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 = undefined; if (newValue === undefined) { 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 === undefined; 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 = undefined) != 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 ? undefined : window.navigator) == null ? undefined : _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 !== undefined && 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 ? undefined : plain.$el) != null ? _a2 : plain; } const defaultWindow = isClient ? window : undefined; const defaultDocument = isClient ? window.document : undefined; 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 ? undefined : _a2.tagName) === "IFRAME" && !(el == null ? undefined : 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 = undefined; } }; 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) 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, undefined) : undefined); 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 ? undefined : 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; } : undefined; 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: undefined, 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 = undefined) { const config = vue.getCurrentInstance() ? vue.inject(configProviderContextKey, globalConfig) : globalConfig; if (key) { return vue.computed(() => { var _a2, _b; return (_b = (_a2 = config.value) == null ? undefined : _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 ? undefined : _a2.namespace) || defaultNamespace; })); const locale = useLocale(vue.computed(() => { var _a2; return (_a2 = config.value) == null ? undefined : _a2.locale; })); const zIndex2 = useZIndex(vue.computed(() => { var _a2; return ((_a2 = config.value) == null ? undefined : _a2.zIndex) || defaultInitialZIndex; })); const size = vue.computed(() => { var _a2; return vue.unref(sizeFallback) || ((_a2 = config.value) == null ? undefined : _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() : undefined; const provideFn = (_a2 = undefined) != null ? _a2 : inSetup ? vue.provide : undefined; if (!provideFn) { return; } const context = vue.computed(() => { const cfg = vue.unref(config); if (!(oldConfig == null ? undefined : 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] !== undefined ? b2[key] : a2[key]; } return obj; }; const UPDATE_MODEL_EVENT = "update:modelValue"; 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 !== undefined) 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 ? undefined : _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$C = /* @__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) ? undefined : 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$C, [["__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$B = /* @__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 && 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.openBlock(), vue.createBlock(vue.resolveDynamicComponent(vue.unref(iconComponent)))) ]), _: 1 }, 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$B, [["__file", "alert.vue"]]); const ElAlert = withInstall(Alert); const isFirefox = () => isClient && /firefox/i.test(window.navigator.userAgent); let hiddenTextarea = undefined; const HIDDEN_STYLE = ` height:0 !important; visibility:hidden !important; ${isFirefox() ? "" : "overflow:hidden !important;"} position:absolute !important; z-index:-1000 !important; top:0 !important; right:0 !important; `; 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)}`).join(";"); 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); hiddenTextarea.setAttribute("style", `${contextStyle};${HIDDEN_STYLE}`); 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 ? undefined : _a2.removeChild(hiddenTextarea); hiddenTextarea = undefined; 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: undefined }, 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: undefined }, 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 ? undefined : 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 ? undefined : _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, undefined); const formItem = vue.inject(formItemContextKey, undefined); 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 = undefined; const isLabeledByFormItem = vue.computed(() => { var _a2; return !!(!(props.label || props.ariaLabel) && formItemContext && formItemContext.inputIds && ((_a2 = formItemContext.inputIds) == null ? undefined : _a2.length) <= 1); }); vue.onMounted(() => { idUnwatch = vue.watch([vue.toRef(props, "id"), disableIdGeneration], ([id, disableIdGeneration2]) => { const newId = id != null ? id : !disableIdGeneration2 ? useId().value : undefined; if (newId !== inputId.value) { if (formItemContext == null ? undefined : formItemContext.removeInputId) { inputId.value && formItemContext.removeInputId(inputId.value); if (!(disableIdManagement == null ? undefined : disableIdManagement.value) && !disableIdGeneration2 && newId) { formItemContext.addInputId(newId); } } inputId.value = newId; } }, { immediate: true }); }); vue.onUnmounted(() => { idUnwatch && idUnwatch(); if (formItemContext == null ? undefined : 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 ? undefined : vm.proxy) == null ? undefined : _a2.$props) == null ? undefined : _b[name]; }); }; const useFormSize = (fallback, ignore = {}) => { const emptyRef = vue.ref(undefined); const size = ignore.prop ? emptyRef : useProp("size"); const globalConfig2 = ignore.global ? emptyRef : useGlobalSize(); const form = ignore.form ? { size: undefined } : vue.inject(formContextKey, undefined); const formItem = ignore.formItem ? { size: undefined } : vue.inject(formItemContextKey, undefined); return vue.computed(() => size.value || vue.unref(fallback) || (formItem == null ? undefined : formItem.size) || (form == null ? undefined : form.size) || globalConfig2.value || ""); }; const useFormDisabled = (fallback) => { const disabled = useProp("disabled"); const form = vue.inject(formContextKey, undefined); return vue.computed(() => disabled.value || vue.unref(fallback) || (form == null ? undefined : 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 ? undefined : afterFocus(); }; const handleBlur = (event) => { var _a2; const cancelBlur = isFunction$1(beforeBlur) ? beforeBlur(event) : false; if (cancelBlur || event.relatedTarget && ((_a2 = wrapperRef.value) == null ? undefined : _a2.contains(event.relatedTarget))) return; isFocused.value = false; emit("blur", event); afterBlur == null ? undefined : afterBlur(); }; const handleClick = () => { var _a2, _b; if (((_a2 = wrapperRef.value) == null ? undefined : _a2.contains(document.activeElement)) && wrapperRef.value !== document.activeElement) return; (_b = target.value) == null ? undefined : _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 ? undefined : emit("compositionstart", event); isComposing.value = true; }; const handleCompositionUpdate = (event) => { var _a2; emit == null ? undefined : emit("compositionupdate", event); const text = (_a2 = event.target) == null ? undefined : _a2.value; const lastCharacter = text[text.length - 1] || ""; isComposing.value = !isKorean(lastCharacter); }; const handleCompositionEnd = (event) => { emit == null ? undefined : 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 == undefined) 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 == undefined || selectionInfo == undefined) return; const { value } = input.value; const { beforeTxt, afterTxt, selectionStart } = selectionInfo; if (beforeTxt == undefined || afterTxt == undefined || selectionStart == undefined) 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 __default__$p = vue.defineComponent({ name: "ElInput", inheritAttrs: false }); const _sfc_main$A = /* @__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 ? undefined : elFormItem.validate) == null ? undefined : _a2.call(elFormItem, "blur").catch((err) => debugWarn()); } } }); const needStatusIcon = vue.computed(() => { var _a2; return (_a2 = elForm == null ? undefined : elForm.statusIcon) != null ? _a2 : false; }); const validateState = vue.computed(() => (elFormItem == null ? undefined : 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 : undefined; const maxRows = isObject$1(autosize) ? autosize.maxRows : undefined; 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 ? undefined : _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) { value = props.parser ? props.parser(value) : value; } if (isComposing.value) return; if (value === nativeInputValue.value) { setNativeInputValue(); return; } emit(UPDATE_MODEL_EVENT, value); emit("input", value); await vue.nextTick(); setNativeInputValue(); setCursor(); }; const handleChange = (event) => { emit("change", event.target.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 ? undefined : _a2.focus(); }; const blur = () => { var _a2; return (_a2 = _ref.value) == null ? undefined : _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 ? undefined : _a2.select(); }; const clear = () => { emit(UPDATE_MODEL_EVENT, ""); emit("change", ""); emit("clear"); emit("input", ""); }; vue.watch(() => props.modelValue, () => { var _a2; vue.nextTick(() => resizeTextarea()); if (props.validateEvent) { (_a2 = elFormItem == null ? undefined : elFormItem.validate) == null ? undefined : _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$A, [["__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$z = /* @__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 ? undefined : _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$z, [["__file", "thumb.vue"]]); const barProps = buildProps({ always: { type: Boolean, default: true }, minSize: { type: Number, required: true } }); const _sfc_main$y = /* @__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 ? undefined : 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$y, [["__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: undefined }, 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$x = /* @__PURE__ */ vue.defineComponent({ ...__default__$o, props: scrollbarProps, emits: scrollbarEmits, setup(__props, { expose, emit }) { const props = __props; const ns = useNamespace("scrollbar"); let stopResizeObserver = undefined; let stopResizeListener = undefined; 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 ? undefined : _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 ? undefined : _a2.update(); }; vue.watch(() => props.noresize, (noresize) => { if (noresize) { stopResizeObserver == null ? undefined : stopResizeObserver(); stopResizeListener == null ? undefined : 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 ? undefined : _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$x, [["__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$w = /* @__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$w, [["__file", "popper.vue"]]); const popperArrowProps = buildProps({ arrowOffset: { type: Number, default: 5 } }); const __default__$m = vue.defineComponent({ name: "ElPopperArrow", inheritAttrs: false }); const _sfc_main$v = /* @__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, undefined); vue.watch(() => props.arrowOffset, (val) => { arrowOffset.value = val; }); vue.onBeforeUnmount(() => { arrowRef.value = undefined; }); 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$v, [["__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 ? undefined : forwardRefInjection.setForwardRef) != null ? _a2 : NOOP); return () => { var _a22; const defaultSlot = (_a22 = slots.default) == null ? undefined : _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$u = /* @__PURE__ */ vue.defineComponent({ ...__default__$l, props: popperTriggerProps, setup(__props, { expose }) { const props = __props; const { role, triggerRef } = vue.inject(POPPER_INJECTION_KEY, undefined); useForwardRef(triggerRef); const ariaControls = vue.computed(() => { return ariaHaspopup.value ? props.id : undefined; }); const ariaDescribedby = vue.computed(() => { if (role && role.value === "tooltip") { return props.open && props.id ? props.id : undefined; } return undefined; }); const ariaHaspopup = vue.computed(() => { if (role && role.value !== "tooltip") { return role.value; } return undefined; }); const ariaExpanded = vue.computed(() => { return ariaHaspopup.value ? `${props.open}` : undefined; }); let virtualTriggerAriaStopWatch = undefined; 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 ? undefined : virtualTriggerAriaStopWatch(); virtualTriggerAriaStopWatch = undefined; 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 ? undefined : prevEl.removeEventListener) == null ? undefined : _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 ? undefined : virtualTriggerAriaStopWatch(); virtualTriggerAriaStopWatch = undefined; 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 = undefined; } }); 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$u, [["__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 ? undefined : _a2.resume) == null ? undefined : _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", pageUp: "PageUp", pageDown: "PageDown", home: "Home", end: "End" }; 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$t = 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 = undefined; } }); 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$t, [["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 === undefined && (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, $ = p2 / 2 - g / 2, d2 = m2[l2], b2 = y - v2[u2] - m2[h2], w2 = y / 2 - v2[u2] / 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 === undefined ? "[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 === undefined ? 0 : v2, h2 = a2.y, p2 = h2 === undefined ? 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"), $ = 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) { $ = 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[$] = 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[$] = x2 ? l2 + "px" : "", e.transform = "", e)); } function Nt(t) { var e = t.state, n = t.options, r = n.gpuAcceleration, o2 = r === undefined ? true : r, i = n.adaptive, a2 = i === undefined ? true : i, s2 = n.roundOffsets, f2 = s2 === undefined ? 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 === undefined ? true : o2, a2 = r.resize, s2 = a2 === undefined ? 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 ? undefined : 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 === undefined && (e = []); var r = dt(t), o2 = r === ((n = t.ownerDocument) == null ? undefined : 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 === undefined && (e = {}); var n = e, r = n.placement, o2 = r === undefined ? t.placement : r, i = n.boundary, a2 = i === undefined ? Xe : i, s2 = n.rootBoundary, f2 = s2 === undefined ? je : s2, c2 = n.elementContext, u2 = c2 === undefined ? K : c2, m2 = n.altBoundary, v2 = m2 === undefined ? false : m2, l2 = n.padding, h2 = l2 === undefined ? 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], $ = Gt(Q(y) ? y : y.contextElement || I$1(t.elements.popper), a2, f2), d2 = ee(t.elements.reference), b2 = mt({ reference: d2, element: x2, strategy: "absolute", placement: o2 }), w2 = Te(Object.assign({}, x2, b2)), O2 = u2 === K ? w2 : d2, j = { top: $.top - O2.top + p2.top, bottom: O2.bottom - $.bottom + p2.bottom, left: $.left - O2.left + p2.left, right: O2.right - $.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 === undefined && (e = {}); var n = e, r = n.placement, o2 = n.boundary, i = n.rootBoundary, a2 = n.padding, s2 = n.flipVariations, f2 = n.allowedAutoPlacements, c2 = f2 === undefined ? 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 === undefined ? true : o2, a2 = n.altAxis, s2 = a2 === undefined ? true : a2, f2 = n.fallbackPlacements, c2 = n.padding, u2 = n.boundary, m2 = n.rootBoundary, v2 = n.altBoundary, l2 = n.flipVariations, h2 = l2 === undefined ? true : l2, p2 = n.allowedAutoPlacements, g = e.options.placement, x2 = q(g), y = x2 === g, $ = f2 || (y || !h2 ? [be(g)] : Kt(g)), d2 = [g].concat($).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 === undefined && (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 === undefined ? [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, strategy: "absolute", 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 === undefined ? true : o2, a2 = n.altAxis, s2 = a2 === undefined ? false : a2, f2 = n.boundary, c2 = n.rootBoundary, u2 = n.altBoundary, m2 = n.padding, v2 = n.tether, l2 = v2 === undefined ? true : v2, h2 = n.tetherOffset, p2 = h2 === undefined ? 0 : h2, g = ne(e, { boundary: f2, rootBoundary: c2, padding: m2, altBoundary: u2 }), x2 = q(e.placement), y = te(e.placement), $ = !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 = $ ? O2[M2] / 2 - ue - Y2 - de - k.mainAxis : xe - Y2 - de - k.mainAxis, Dt = $ ? -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 ? undefined : 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 ? undefined : 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 === undefined && (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 = undefined, 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 === undefined && (t = {}); var e = t, n = e.defaultModifiers, r = n === undefined ? [] : n, o2 = e.defaultOptions, i = o2 === undefined ? Ot : o2; return function(a2, s2, f2) { f2 === undefined && (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 $ = c2.orderedModifiers[y], d2 = $.fn, b2 = $.options, w2 = b2 === undefined ? {} : b2, O2 = $.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 === undefined ? {} : x2, $ = p2.effect; if (typeof $ == "function") { var d2 = $({ 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: undefined }, 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 ? undefined : _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 ? undefined : 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 = undefined; }; 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 ? undefined : _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 ? undefined : _a2.update(); }, forceUpdate: () => { var _a2; return (_a2 = vue.unref(instanceRef)) == null ? undefined : _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, undefined); 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 ? undefined : _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" : undefined); 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$s = /* @__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, undefined); 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 = undefined; 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 ? undefined : triggerTargetAriaStopWatch(); triggerTargetAriaStopWatch = undefined; 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 ? undefined : triggerTargetAriaStopWatch(); triggerTargetAriaStopWatch = undefined; }); 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$s, [["__file", "content.vue"]]); const ElPopper = withInstall(Popper); const TOOLTIP_INJECTION_KEY = Symbol("elTooltip"); function useTimeout() { let timeoutHandle; const registerTimeout = (fn2, delay) => { cancelTimeout(); timeoutHandle = window.setTimeout(fn2, delay); }; 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 !== undefined) { 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 ? undefined : theirsHandler(event); if (checkForDefaultPrevented === false || !shouldPrevent) { return oursHandler == null ? undefined : oursHandler(event); } }; return handleEvent; }; const __default__$j = vue.defineComponent({ name: "ElTooltipTrigger" }); const _sfc_main$r = /* @__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, undefined); 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$r, [["__file", "trigger.vue"]]); const teleportProps = buildProps({ to: { type: definePropType([String, Object]), required: true }, disabled: Boolean }); const _sfc_main$q = /* @__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$q, [["__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$p = /* @__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, undefined); const transitionClass = vue.computed(() => { return props.transition || `${ns.namespace.value}-fade-in-linear`; }); const persistentRef = vue.computed(() => { return props.persistent; }); vue.onBeforeUnmount(() => { stopHandle == null ? undefined : 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 ? undefined : _a2.updatePopper) == null ? undefined : _b.call(_a2); onBeforeShow == null ? undefined : onBeforeShow(); }; const onBeforeLeave = () => { onBeforeHide == null ? undefined : onBeforeHide(); }; const onAfterShow = () => { onShow(); stopHandle = onClickOutside(vue.computed(() => { var _a2; return (_a2 = contentRef.value) == null ? undefined : _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 ? undefined : _a2.popperContentRef; const activeElement = (event == null ? undefined : event.relatedTarget) || document.activeElement; return popperContent == null ? undefined : popperContent.contains(activeElement); }; vue.watch(() => vue.unref(open), (val) => { if (!val) { stopHandle == null ? undefined : stopHandle(); } else { ariaHidden.value = false; } }, { flush: "post" }); vue.watch(() => props.content, () => { var _a2, _b; (_b = (_a2 = contentRef.value) == null ? undefined : _a2.updatePopper) == null ? undefined : _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$p, [["__file", "content.vue"]]); const __default__$h = vue.defineComponent({ name: "ElTooltip" }); const _sfc_main$o = /* @__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 ? undefined : _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 ? undefined : _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$o, [["__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$n = /* @__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 ? undefined : _a2[0]) != null ? _b : 0)), marginTop: addUnit((_d = (_c = props.offset) == null ? undefined : _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$n, [["__file", "badge.vue"]]); const ElBadge = withInstall(Badge); const buttonGroupContextKey = Symbol("buttonGroupContextKey"); const useDeprecated = ({ from, replacement, scope, version, 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, undefined); const globalConfig2 = useGlobalConfig("button"); const { form } = useFormItem(); const _size = useFormSize(vue.computed(() => buttonGroupContext == null ? undefined : buttonGroupContext.size)); const _disabled = useFormDisabled(); const _ref = vue.ref(); const slots = vue.useSlots(); const _type = vue.computed(() => props.type || (buttonGroupContext == null ? undefined : buttonGroupContext.type) || ""); const autoInsertSpace = vue.computed(() => { var _a2, _b, _c; return (_c = (_b = props.autoInsertSpace) != null ? _b : (_a2 = globalConfig2.value) == null ? undefined : _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 ? undefined : _a2.call(slots); if (autoInsertSpace.value && (defaultSlot == null ? undefined : defaultSlot.length) === 1) { const slot = defaultSlot[0]; if ((slot == null ? undefined : 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 ? undefined : 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: undefined }, 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 === undefined) { color = ""; } if (opts === undefined) { 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 !== undefined ? _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 === undefined) { allow3Char = false; } return rgbToHex(this.r, this.g, this.b, allow3Char); }; TinyColor2.prototype.toHexString = function(allow3Char) { if (allow3Char === undefined) { allow3Char = false; } return "#" + this.toHex(allow3Char); }; TinyColor2.prototype.toHex8 = function(allow4Char) { if (allow4Char === undefined) { allow4Char = false; } return rgbaToHex(this.r, this.g, this.b, this.a, allow4Char); }; TinyColor2.prototype.toHex8String = function(allow4Char) { if (allow4Char === undefined) { allow4Char = false; } return "#" + this.toHex8(allow4Char); }; TinyColor2.prototype.toHexShortString = function(allowShortChar) { if (allowShortChar === undefined) { 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 !== undefined ? 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 === undefined) { 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 === undefined) { 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 === undefined) { 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 === undefined) { amount = 10; } return this.mix("white", amount); }; TinyColor2.prototype.shade = function(amount) { if (amount === undefined) { amount = 10; } return this.mix("black", amount); }; TinyColor2.prototype.desaturate = function(amount) { if (amount === undefined) { 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 === undefined) { 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 === undefined) { 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 === undefined) { results = 6; } if (slices === undefined) { 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 === undefined) { 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$m = /* @__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$m, [["__file", "button.vue"]]); const buttonGroupProps = { size: buttonProps.size, type: buttonProps.type }; const __default__$e = vue.defineComponent({ name: "ElButtonGroup" }); const _sfc_main$l = /* @__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$l, [["__file", "button-group.vue"]]); const ElButton = withInstall(Button, { ButtonGroup }); const ElButtonGroup = withNoopInstall(ButtonGroup); 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 ? undefined : _a2.subTree)) { result.push(child, ...flattedChildren(child.component.subTree)); } else if (vue.isVNode(child) && isArray$1(child.children)) { result.push(...flattedChildren(child.children)); } 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 ? undefined : _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: undefined }, label: { type: [String, Boolean, Number, Object], default: undefined }, value: { type: [String, Boolean, Number, Object], default: undefined }, indeterminate: Boolean, disabled: Boolean, checked: Boolean, name: { type: String, default: undefined }, trueValue: { type: [String, Number], default: undefined }, falseValue: { type: [String, Number], default: undefined }, trueLabel: { type: [String, Number], default: undefined }, falseLabel: { type: [String, Number], default: undefined }, id: { type: String, default: undefined }, 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, undefined); const isLimitDisabled = vue.computed(() => { var _a2, _b; const max = (_a2 = checkboxGroup == null ? undefined : checkboxGroup.max) == null ? undefined : _a2.value; const min = (_b = checkboxGroup == null ? undefined : checkboxGroup.min) == null ? undefined : _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 ? undefined : checkboxGroup.disabled.value) || isLimitDisabled.value)); return { isDisabled, isLimitDisabled }; }; const useCheckboxEvent = (props, { model, isLimitExceeded, hasOwnLabel, isDisabled, isLabeledByFormItem }) => { const checkboxGroup = vue.inject(checkboxGroupContextKey, undefined); 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", getLabeledValue(checked), e); } function handleChange(e) { if (isLimitExceeded.value) return; const target = e.target; emit("change", 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 ? undefined : checkboxGroup.validateEvent) || props.validateEvent); vue.watch(() => props.modelValue, () => { if (validateEvent.value) { formItem == null ? undefined : 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, undefined); 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 ? undefined : checkboxGroup.modelValue) == null ? undefined : _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 ? undefined : checkboxGroup.max) == null ? undefined : _a2.value) !== undefined && val.length > (checkboxGroup == null ? undefined : checkboxGroup.max.value) && val.length > model.value.length; isLimitExceeded.value === false && ((_b = checkboxGroup == null ? undefined : checkboxGroup.changeEvent) == null ? undefined : _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, undefined); 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 !== undefined) { return value === props.trueValue || value === props.trueLabel; } else { return !!value; } }); const checkboxButtonSize = useFormSize(vue.computed(() => { var _a2; return (_a2 = checkboxGroup == null ? undefined : checkboxGroup.size) == null ? undefined : _a2.value; }), { prop: true }); const checkboxSize = useFormSize(vue.computed(() => { var _a2; return (_a2 = checkboxGroup == null ? undefined : checkboxGroup.size) == null ? undefined : _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$k = /* @__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$k, [["__file", "checkbox.vue"]]); const __default__$c = vue.defineComponent({ name: "ElCheckboxButton" }); const _sfc_main$j = /* @__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, undefined); const ns = useNamespace("checkbox"); const activeStyle = vue.computed(() => { var _a2, _b, _c, _d; const fillValue = (_b = (_a2 = checkboxGroup == null ? undefined : checkboxGroup.fill) == null ? undefined : _a2.value) != null ? _b : ""; return { backgroundColor: fillValue, borderColor: fillValue, color: (_d = (_c = checkboxGroup == null ? undefined : checkboxGroup.textColor) == null ? undefined : _c.value) != null ? _d : "", boxShadow: fillValue ? `-1px 0 0 0 ${fillValue}` : undefined }; }); 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) : undefined) }, [ 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$j, [["__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$i = /* @__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", 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 ? undefined : 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" : undefined, "aria-labelledby": vue.unref(isLabeledByFormItem) ? (_a2 = vue.unref(formItem)) == null ? undefined : _a2.labelId : undefined }, { default: vue.withCtx(() => [ vue.renderSlot(_ctx.$slots, "default") ]), _: 3 }, 8, ["id", "class", "aria-label", "aria-labelledby"]); }; } }); var CheckboxGroup = /* @__PURE__ */ _export_sfc$1(_sfc_main$i, [["__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 = undefined; } }); } 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 ? undefined : 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 ? undefined : 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 ? undefined : 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 ? undefined : 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 ? undefined : 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$h = /* @__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$h, [["__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 = undefined; let closeTimer = undefined; 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 ? undefined : closeTimer(); openTimer == null ? undefined : openTimer(); if (props.openDelay && props.openDelay > 0) { ({ stop: openTimer } = useTimeoutFn(() => doOpen(), props.openDelay)); } else { doOpen(); } } function close() { openTimer == null ? undefined : openTimer(); closeTimer == null ? undefined : 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 ? undefined : _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$g = /* @__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 ? undefined : _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 || undefined, "aria-labelledby": !_ctx.title ? vue.unref(titleId) : undefined, "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") ]) } : undefined ]), 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$g, [["__file", "dialog.vue"]]); const ElDialog = withInstall(Dialog); const __default__$8 = vue.defineComponent({ name: "ImgEmpty" }); const _sfc_main$f = /* @__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", { id: "Illustrations", stroke: "none", "stroke-width": "1", fill: "none", "fill-rule": "evenodd" }, [ vue.createElementVNode("g", { id: "B-type", transform: "translate(-1268.000000, -535.000000)" }, [ vue.createElementVNode("g", { id: "Group-2", transform: "translate(1268.000000, 535.000000)" }, [ vue.createElementVNode("path", { id: "Oval-Copy-2", 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", { id: "Rectangle-Copy-14", 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", { id: "Group-Copy", 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", { id: "Rectangle-Copy-10", 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", { id: "Rectangle-Copy-11", 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", { id: "Rectangle-Copy-12", 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", { id: "Rectangle-Copy-13", 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", { id: "Rectangle-Copy-15", fill: `url(#linearGradient-2-${vue.unref(id)})`, x: "13", y: "45", width: "40", height: "36" }, null, 8, ["fill"]), vue.createElementVNode("g", { id: "Rectangle-Copy-17", transform: "translate(53.000000, 45.000000)" }, [ vue.createElementVNode("use", { id: "Mask", 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", { id: "Rectangle-Copy", 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", { id: "Rectangle-Copy-18", 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$f, [["__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$e = /* @__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$e, [["__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$d = /* @__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(undefined, 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 ? undefined : 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 ? undefined : _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$d, [["__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() : undefined; _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 === undefined || 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 !== undefined); } function getValue(value, path) { var v2 = value; for (var i = 0; i < path.length; i++) { if (v2 == undefined) { 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 regex = "(?:" + protocol + "|www\\.)" + auth + "(?:localhost|" + ipv4 + "|" + ipv6 + "|" + host + domain + tld + ")" + port + path; urlReg = new RegExp("(?:^" + regex + "$)", "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 === undefined) { 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 !== undefined) { 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 = undefined; } if (isEmptyValue(value) && !rule.required) { return callback(); } rules.required(rule, value, source, errors, options); if (value !== undefined) { 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 !== undefined) { 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 !== undefined) { 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 !== undefined) { 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 === undefined || value === null) && !rule.required) { return callback(); } rules.required(rule, value, source, errors, options, "array"); if (value !== undefined && 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 !== undefined) { 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 !== undefined) { 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 === undefined) { o2 = {}; } if (oc === undefined) { 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 === undefined) { e = []; } var errorList = Array.isArray(e) ? e : [e]; if (!options.suppressWarning && errorList.length) { Schema2.warning("async-validator:", errorList); } if (errorList.length && rule.message !== undefined) { 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 !== undefined) { 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 ? undefined : 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 === undefined && 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)] || undefined; }; 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: undefined }, 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, undefined); 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 ? undefined : _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 ? undefined : 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 ? undefined : formContext.registerLabelWidth(val, oldVal); } }); useResizeObserver(vue.computed(() => { var _a2, _b; return (_b = (_a2 = el.value) == null ? undefined : _a2.firstElementChild) != null ? _b : null; }), updateLabelWidthFn); return () => { var _a2, _b; if (!slots) return null; const { isAutoWidth } = props; if (isAutoWidth) { const autoLabelWidth = formContext == null ? undefined : formContext.autoLabelWidth; const hasLabel = formItemContext == null ? undefined : 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 ? undefined : _a2.call(slots)]); } else { return vue.createVNode(vue.Fragment, { "ref": el }, [(_b = slots.default) == null ? undefined : _b.call(slots)]); } }; } }); const __default__$5 = vue.defineComponent({ name: "ElFormItem" }); const _sfc_main$c = /* @__PURE__ */ vue.defineComponent({ ...__default__$5, props: formItemProps, setup(__props, { expose }) { const props = __props; const slots = vue.useSlots(); const formContext = vue.inject(formContextKey, undefined); const parentFormItemContext = vue.inject(formItemContextKey, undefined); const _size = useFormSize(undefined, { 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 = undefined; let isResettingField = false; const labelPosition = vue.computed(() => props.labelPosition || (formContext == null ? undefined : formContext.labelPosition)); const labelStyle = vue.computed(() => { if (labelPosition.value === "top") { return {}; } const labelWidth = addUnit(props.labelWidth || (formContext == null ? undefined : formContext.labelWidth) || ""); if (labelWidth) return { width: labelWidth }; return {}; }); const contentStyle = vue.computed(() => { if (labelPosition.value === "top" || (formContext == null ? undefined : formContext.inline)) { return {}; } if (!props.label && !props.labelWidth && isNested) { return {}; } const labelWidth = addUnit(props.labelWidth || (formContext == null ? undefined : 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 ? undefined : formContext.hideRequiredAsterisk), (formContext == null ? undefined : formContext.requireAsteriskPosition) === "right" ? "asterisk-right" : "asterisk-left", { [ns.m("feedback")]: formContext == null ? undefined : formContext.statusIcon, [ns.m(`label-${labelPosition.value}`)]: labelPosition.value } ]); const _inlineMessage = vue.computed(() => isBoolean(props.inlineMessage) ? props.inlineMessage : (formContext == null ? undefined : 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] : undefined); }); const isGroup = vue.computed(() => { return !labelFor.value && hasLabel.value; }); const isNested = !!parentFormItemContext; const fieldValue = vue.computed(() => { const model = formContext == null ? undefined : 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 ? undefined : formContext.rules; if (formRules && props.prop) { const _rules = getProp(formRules, props.prop).value; if (_rules) { rules2.push(...castArray(_rules)); } } if (required !== undefined) { 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 ? undefined : formContext.showMessage) != null ? _a2 : true); }); const currentLabel = vue.computed(() => `${props.label || ""}${(formContext == null ? undefined : 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 ? undefined : errors[0]) == null ? undefined : _a2.message) != null ? _b : `${props.prop} is required` : ""; formContext == null ? undefined : formContext.emit("validate", props.prop, false, validateMessage.value); }; const onValidationSucceeded = () => { setValidationState("success"); formContext == null ? undefined : 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 ? undefined : callback(false); return false; } const rules2 = getFilteredRule(trigger); if (rules2.length === 0) { callback == null ? undefined : callback(true); return true; } setValidationState("validating"); return doValidate(rules2).then(() => { callback == null ? undefined : callback(true); return true; }).catch((err) => { const { fields } = err; callback == null ? undefined : callback(false, fields); return hasCallback ? false : Promise.reject(fields); }); }; const clearValidate = () => { setValidationState(""); validateMessage.value = ""; isResettingField = false; }; const resetField = async () => { const model = formContext == null ? undefined : 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 ? undefined : formContext.addField(context); initialValue = clone(fieldValue.value); } }); vue.onBeforeUnmount(() => { formContext == null ? undefined : 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" : undefined, "aria-labelledby": vue.unref(isGroup) ? vue.unref(labelId) : undefined }, [ vue.createVNode(vue.unref(FormLabelWrap), { "is-auto-width": vue.unref(labelStyle).width === "auto", "update-all": ((_a2 = vue.unref(formContext)) == null ? undefined : _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$c, [["__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$b = /* @__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 ? undefined : _ctx.href, target: _ctx.disabled || !_ctx.href ? undefined : _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$b, [["__file", "link.vue"]]); const ElLink = withInstall(Link); const isValidComponentSize = (val) => ["", ...componentSizes].includes(val); const getCell = function(event) { var _a2; return (_a2 = event.target) == null ? undefined : _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 ? undefined : 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 ? undefined : 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 ? undefined : tableTreeProps.checkStrictly) && (tableTreeProps == null ? undefined : tableTreeProps.children) && isArray$1(row[tableTreeProps.children])) { row[tableTreeProps.children].forEach((item) => { toggleRowStatus(statusArr, item, newVal != null ? newVal : !included, tableTreeProps, selectable, _rowIndex + 1); _rowIndex += getChildrenCount(item) + 1; }); } 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, content) => { return { content, ...props, popperOptions: { strategy: "fixed", ...props.popperOptions } }; }; let removePopper = null; function createTablePopper(props, popperContent, trigger, table) { if ((removePopper == null ? undefined : removePopper.trigger) === trigger) { merge(removePopper.vm.component.props, getTableOverflowTooltipProps(props, popperContent)); return; } removePopper == null ? undefined : removePopper(); const parentNode = table == null ? undefined : table.refs.tableWrapper; const ns = parentNode == null ? undefined : parentNode.dataset.prefix; const vm = vue.createVNode(ElTooltip, { virtualTriggering: true, virtualRef: trigger, appendTo: parentNode, placement: "top", transition: "none", offset: 0, hideAfter: 0, ...getTableOverflowTooltipProps(props, popperContent) }); vm.appContext = { ...table.appContext, ...table }; const container = document.createElement("div"); vue.render(vm, container); vm.component.exposed.onOpen(); const scrollContainer = parentNode == null ? undefined : parentNode.querySelector(`.${ns}-scrollbar__wrap`); removePopper = () => { vue.render(null, container); scrollContainer == null ? undefined : scrollContainer.removeEventListener("scroll", removePopper); removePopper = null; }; removePopper.trigger = trigger; removePopper.vm = vm; scrollContainer == null ? undefined : 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 ? undefined : _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 ? undefined : oldValue.expanded)); } } else { const included = ifExpandAll || expandRowKeys.value && expandRowKeys.value.includes(key); return !!((oldValue == null ? undefined : 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 ? undefined : _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 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); } 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 (lazy.value && data && "loaded" in data && !data.loaded) { loadData(row, id, data); } else { toggleTreeExpansion(row, undefined); } }; 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 ? undefined : _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) : undefined; }); vue.watch(data, () => { var _a22; if (instance.state) { scheduleLayout(false); const needUpdateFixed = instance.props.tableLayout === "auto"; if (needUpdateFixed) { (_a22 = instance.refs.tableHeaderRef) == null ? undefined : _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 ? undefined : _a22.forEach((childColumn) => { childColumn.fixed = column.fixed; updateChildFixed(childColumn); }); }; let selectionInitialFixed = undefined; const updateColumns = () => { _columns.value.forEach((column) => { updateChildFixed(column); }); fixedColumns.value = _columns.value.filter((column) => column.fixed === true || column.fixed === "left"); rightFixedColumns.value = _columns.value.filter((column) => column.fixed === "right"); if (isUndefined(selectionInitialFixed) && _columns.value[0] && _columns.value[0].type === "selection") { selectionInitialFixed = Boolean(_columns.value[0].fixed); } if (fixedColumns.value.length > 0 && _columns.value[0] && _columns.value[0].type === "selection") { if (!_columns.value[0].fixed) { _columns.value[0].fixed = true; fixedColumns.value.unshift(_columns.value[0]); } else { const hasNotSelectionColumns = fixedColumns.value.some((column) => column.type !== "selection"); if (!hasNotSelectionColumns) { _columns.value[0].fixed = selectionInitialFixed; if (!selectionInitialFixed) fixedColumns.value.shift(); } else { selectionInitialFixed = undefined; } } } const notFixedColumns = _columns.value.filter((column) => !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 ? undefined : instance.store) == null ? undefined : _a22.states) == null ? undefined : _b.childrenColumnName.value, checkStrictly: (_d = (_c = instance == null ? undefined : instance.store) == null ? undefined : _c.states) == null ? undefined : _d.checkStrictly.value }; const changed = toggleRowStatus(selection.value, row, selected, treeProps, ignoreSelectable ? undefined : selectable.value); 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 ? undefined : instance.store) == null ? undefined : _a22.states) == null ? undefined : _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 ? undefined : _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 ? undefined : _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 ? undefined : _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 = undefined) => { 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 ? undefined : _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 ? undefined : _a2.call(item); if ((_b = item.children) == null ? undefined : _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 ? undefined : _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 ? undefined : _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 ? undefined : 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 ? undefined : _a2.onColumnsChange(this); break; case "scrollable": (_b = observer.state) == null ? undefined : _b.onScrollableChange(this); break; default: throw new Error(`Table Layout don't have event ${event}.`); } }); } } const { CheckboxGroup: ElCheckboxGroup } = ElCheckbox; const _sfc_main$a = 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 ? undefined : 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 ? undefined : _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 ? undefined : _a2.popperRef) == null ? undefined : _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$a, [["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 ? undefined : _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 ? undefined : _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 ? undefined : _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 ? undefined : parent.emit("header-click", column, event); }; const handleHeaderContextMenu = (event, column) => { parent == null ? undefined : 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 ? undefined : 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 ? undefined : 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 ? undefined : 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 ? undefined : 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 ? undefined : _a2.lastElementChild) === target; const allowDarg = props.allowDragLastColumn || !isLastTh; if (rect.width > 12 && rect.right - event.pageX < 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 ? undefined : _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 ? undefined : 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 ? undefined : parent.props.headerRowStyle; if (isFunction$1(headerRowStyle)) { return headerRowStyle.call(null, { rowIndex }); } return headerRowStyle; }; const getHeaderRowClass = (rowIndex) => { const classes = []; const headerRowClassName = parent == null ? undefined : 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 ? undefined : 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 ? undefined : 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, undefined); }); 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 ? undefined : 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 ? undefined : 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 ? undefined : 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 ? undefined : table.vnode.el) == null ? undefined : _a2.dataset.prefix; if (cell) { column = getColumnByCell({ columns: props.store.states.columns.value }, cell, namespace); if (column) { table == null ? undefined : table.emit(`cell-${name}`, row, column, cell, event); } } table == null ? undefined : 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 ? undefined : 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 ? undefined : table.vnode.el) == null ? undefined : _a2.dataset.prefix; if (cell) { const 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 ? undefined : 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, cell, table); } else if (((_b = removePopper) == null ? undefined : _b.trigger) === cell) { (_c = removePopper) == null ? undefined : _c(); } }; const handleCellMouseLeave = (event) => { const cell = getCell(event); if (!cell) return; if (cell.rowSpan > 1) { toggleRowClassByCell(cell.rowSpan, event, removeClass); } const oldHoverState = parent == null ? undefined : parent.hoverState; parent == null ? undefined : parent.emit("cell-mouse-leave", oldHoverState == null ? undefined : oldHoverState.row, oldHoverState == null ? undefined : oldHoverState.column, oldHoverState == null ? undefined : 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 ? undefined : 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 ? undefined : 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 ? undefined : 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 ? undefined : 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 ? undefined : 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 ? undefined : props.fixed, props.store, undefined, offset); const classes = [column.id, column.align, column.className, ...fixedClasses]; const cellClassName = parent == null ? undefined : 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 ? undefined : 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$9 = /* @__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$9, [["__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, undefined, expanded); const renderExpanded = parent.renderExpanded; if (expanded) { if (!renderExpanded) { console.error("[Element Error]renderExpanded is required."); return tr; } return [ [ tr, vue.h("tr", { key: `expanded-row__${tr.key}` }, [ vue.h("td", { colspan: columns.length, class: `${ns.e("cell")} ${ns.e("expanded-cell")}` }, [renderExpanded({ row, $index, store, expanded })]) ]) ] ]; } else { return [[tr]]; } } 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, undefined); } }; 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 ? undefined : instance.vnode.el; const rows = Array.from((el == null ? undefined : el.children) || []).filter((e) => e == null ? undefined : e.classList.contains(`${ns.e("row")}`)); let rowNum = newVal; const childNodes = (_a2 = rows[rowNum]) == null ? undefined : _a2.childNodes; if (childNodes == null ? undefined : childNodes.length) { let control = 0; const indexes = Array.from(childNodes).reduce((acc, item, index) => { var _a22, _b; if (((_a22 = childNodes[index]) == null ? undefined : _a22.colSpan) > 1) { control = (_b = childNodes[index]) == null ? undefined : _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 ? undefined : _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 ? undefined : _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 ? undefined : 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 { getCellClasses, getCellStyles, columns } = useStyle$1(props); const ns = useNamespace("table"); return { ns, 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(); 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 ? undefined : _a2.scrollBarRef) == null ? undefined : _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 ? undefined : _a2.$el; if (props.showHeader && (tableHeader == null ? undefined : tableHeader.offsetHeight) !== oldHeaderHeight) { shouldUpdateLayout = true; } tableScrollHeight.value = ((_b = table.refs.tableWrapper) == null ? undefined : _b.scrollHeight) || 0; headerScrollHeight.value = (tableHeader == null ? undefined : tableHeader.scrollHeight) || 0; footerScrollHeight.value = ((_c = table.refs.footerWrapper) == null ? undefined : _c.offsetHeight) || 0; appendScrollHeight.value = ((_d = table.refs.appendWrapper) == null ? undefined : _d.offsetHeight) || 0; bodyScrollHeight.value = tableScrollHeight.value - headerScrollHeight.value - footerScrollHeight.value - appendScrollHeight.value; if (shouldUpdateLayout) { resizeState.value = { width, height, headerHeight: props.showHeader && (tableHeader == null ? undefined : 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 ? undefined : _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], appendFilterPanelTo: String, scrollbarTabindex: { type: [Number, String], default: undefined }, allowDragLastColumn: { type: Boolean, default: true } }; 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: undefined }; 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, canUseWorkers: typeof Worker < "u", canUseEventListeners: c && !!(window.addEventListener || window.attachEvent), canUseViewport: c && !!window.screen, isInWorker: !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$8 = 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$8, [["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 ? undefined : value.toString) == null ? undefined : _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 icon = arrow_right_default; if (treeNode.loading) { icon = 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(icon)] }) ]; } })); } 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" ]; 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 = undefined; } 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 ? undefined : item.type) == null ? undefined : _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: undefined }, 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 = isUndefined(props.showOverflowTooltip) ? parent.props.showOverflowTooltip : props.showOverflowTooltip; const defaults = { ...cellStarts[type], id: columnId.value, type, property: props.prop || props.property, align: realAlign, headerAlign: realHeaderAlign, showOverflowTooltip, 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 ? undefined : _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$7 = /* @__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 ? undefined : _a2.refs) == null ? undefined : _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 ? undefined : _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$7, [["__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 ? undefined : _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 ? undefined : _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", undefined, "add"); emit("tabAdd"); }; vue.watch(() => props.modelValue, (modelValue) => setCurrentName(modelValue)); vue.watch(currentName, async () => { var _a22; await vue.nextTick(); (_a22 = nav$.value) == null ? undefined : _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$6 = /* @__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$6, [["__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 ? undefined : _a2.parentNode) == null ? undefined : _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 ? undefined : _a2.call(options); } function handleAfterLeave() { if (!afterLeaveFlag.value) return; const target = data.parent; afterLeaveFlag.value = false; target.vLoadingAddClassList = undefined; 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]) : undefined; 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 = undefined; const Loading = function(options = {}) { if (!isClient) return undefined; const resolved = resolveOptions(options); if (resolved.fullscreen && fullscreenInstance) { return fullscreenInstance; } const instance = createLoadingComponent({ ...resolved, closed: () => { var _a2; (_a2 = resolved.closed) == null ? undefined : _a2.call(resolved); if (resolved.fullscreen) fullscreenInstance = undefined; } }); 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] : undefined; const resolveExpression = (key) => { const data = isString$1(key) && (vm == null ? undefined : 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 ? undefined : 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 ? undefined : instance.instance.close(); } } }, unmounted(el) { var _a2; (_a2 = el[INSTANCE_KEY]) == null ? undefined : _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: undefined, id: "", message: "", onClose: undefined, showClose: false, type: "info", plain: false, offset: 16, zIndex: 0, grouping: false, repeatNum: 1, appendTo: isClient ? document.body : undefined }); 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$5 = /* @__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 = undefined; 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 ? undefined : 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$5, [["__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 ? undefined : 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: () => undefined }; const normalized = normalizeOptions(options); if (normalized.grouping && instances.length) { const instance2 = instances.find(({ vnode: vm }) => { var _a2; return ((_a2 = vm.props) == null ? undefined : _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: () => undefined }; } 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$4 = 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: "", inputPattern: null, inputPlaceholder: "", inputType: "text", inputValue: null, inputValidator: null, inputErrorMessage: "", message: null, modalFade: true, modalClass: "", showCancelButton: false, showConfirmButton: true, type: "", title: undefined, 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(() => state.icon || TypeComponentsMap[state.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 !== null) { 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 ? undefined : _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 ? undefined : _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 = () => { const inputRefs = inputRef.value.$refs; return inputRefs.input || 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_close = vue.resolveComponent("close"); 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 : undefined, 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 !== undefined ? (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.createVNode(_component_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 : undefined }, { 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 : undefined, 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$4, [["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)) { 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_SERVE_URL = "https://ssv2.halopan.com"; const APP_STORAGE_SETTING_KEY = "STORAGE_SETTING"; const APP_STORAGE_SCORE_KEY = "STOREAGE_SCORE"; const APP_STORAGE_HISTORY_KEY = "STORAGE_HISTORY"; const APP_STORAGE_LOGININFO_KEY = "STORAGE_LOGININFO"; const APP_STORAGE_API_TOKEN_KEY = "STORAGE_API_TOKEN"; const APP_STORAGE_SERVE_URL_KEY = "STORAGE_APP_SERVE_URL"; const EventBus = mitt(); const _hoisted_1$2 = { class: "mr-16" }; const _sfc_main$3 = /* @__PURE__ */ vue.defineComponent({ __name: "DownloadButton", setup(__props) { function handleClick() { EventBus.emit("openParseDialog"); } return (_ctx, _cache) => { const _component_el_button = ElButton; return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$2, [ vue.createVNode(_component_el_button, { type: "primary", onClick: handleClick, round: "" }, { default: vue.withCtx(() => [ vue.createTextVNode(" 🀄 " + vue.toDisplayString(vue.unref(APP_NAME)), 1) ]), _: 1 }) ]); }; } }); var _GM = /* @__PURE__ */ (() => typeof GM != "undefined" ? GM : undefined)(); var _GM_deleteValues = /* @__PURE__ */ (() => typeof GM_deleteValues != "undefined" ? GM_deleteValues : undefined)(); var _GM_getValue = /* @__PURE__ */ (() => typeof GM_getValue != "undefined" ? GM_getValue : undefined)(); var _GM_info = /* @__PURE__ */ (() => typeof GM_info != "undefined" ? GM_info : undefined)(); var _GM_setValue = /* @__PURE__ */ (() => typeof GM_setValue != "undefined" ? GM_setValue : undefined)(); var _GM_xmlhttpRequest = /* @__PURE__ */ (() => typeof GM_xmlhttpRequest != "undefined" ? GM_xmlhttpRequest : undefined)(); var _unsafeWindow = /* @__PURE__ */ (() => typeof unsafeWindow != "undefined" ? unsafeWindow : undefined)(); 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 = {}) { const apiToken = _GM_getValue(APP_STORAGE_API_TOKEN_KEY, ""); return new Promise((resolve, reject) => { _GM_xmlhttpRequest({ method, url, headers: { ...headers, "Content-Type": "application/json", "api-token": apiToken }, data: data ? JSON.stringify(data) : null, onload: function(response) { resolve(JSON.parse(response.responseText)); }, onerror: function(error) { console.log(error); reject( new Error(`Request error: ${error.statusText || "Network Error"}`) ); } }); }); } 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) { console.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 ""; } 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( "https://pan.baidu.com/share/set", {}, { params } ); return res.data; } async function reqList(shorturl, password, user) { const url = APP_SERVE_URL + "/api/file_parse/list"; const res = await request("POST", url, { surl: shorturl, pwd: password, user, dir: "/" }); return res; } async function reqLink(data) { const url = APP_SERVE_URL + "/api/file_parse/link"; const res = await request("POST", url, data); return res; } async function getCode() { const url = APP_SERVE_URL + "/api/parse/get_vcode"; const res = await request("POST", url); return res; } async function reqAllFid(path) { const res = await axios.post( "https://pan.baidu.com/rest/2.0/xpan/multimedia?method=listall&recursion=1", {}, { params: { path } } ); return res.data; } async function reqRemoteAppConfig() { const res = await request( "GET", "https://gitee.com/mrl54989/ssdown-x/raw/master/ssdownx" ); return res; } async function reqLogin(data) { const url = APP_SERVE_URL + "/api/auth/login"; const res = await request("POST", url, data); return res; } async function reqSignin() { const url = APP_SERVE_URL + "/api/user/signin"; const res = await request("GET", url); return res; } async function reqRecharge(card_code) { const url = APP_SERVE_URL + "/api/user/recharge"; const res = await request("POST", url, { card_code }); return res; } async function reqCreateFile(bdStoken, path) { const url = `https://pan.baidu.com/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 reqAria2Version = async () => { var _a2; ElMessage.info("测试中,请稍等……"); const setting = _GM_getValue(APP_STORAGE_SETTING_KEY); const token = setting == null ? undefined : setting.rpcToken; const url = setting == null ? undefined : setting.rpcUrl; console.log("setting", 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("aria2连接失败,请检查秘钥是否正确"); } else { ElMessage.success("aria2连接成功"); } } catch (error) { ElMessage.error("连接失败,请检查地址、秘钥是否正确或服务是否启动"); } }; const reqAria2Download = async (list) => { var _a2, _b; const setting = _GM_getValue(APP_STORAGE_SETTING_KEY); const token = setting == null ? undefined : setting.rpcToken; const url = setting == null ? undefined : setting.rpcUrl; const rpcLocation = setting == null ? undefined : setting.rpcLocation; const urlList = list.map((item) => { const res = { methodName: "aria2.addUri", params: [ `token:${token}`, [item.url], { "max-connection-per-server": "16", split: "16", dir: rpcLocation + item.dir, out: item.filename, "user-agent": item.ua } ] }; return res; }); console.log("下载列表", urlList); try { const res = await request("POST", url, { id: APP_NAME, // jsonrpc: '2.0', method: "system.multicall", params: [urlList] }); console.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("文件已添加到下载列表"); } } catch (error) { ElMessage.error("连接失败,请检查远程下载配置是否正确"); } }; const _hoisted_1$1 = { class: "dialog-title" }; const _hoisted_2$1 = { class: "dialog-title__main" }; const _sfc_main$2 = /* @__PURE__ */ vue.defineComponent({ __name: "HomeDialogTitle", props: { recommend: {} }, setup(__props) { return (_ctx, _cache) => { var _a2; const _component_el_link = ElLink; return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$1, [ vue.createElementVNode("span", _hoisted_2$1, vue.toDisplayString(vue.unref(APP_NAME)), 1), vue.createVNode(_component_el_link, { class: "dialog-title__sub", href: (_a2 = _ctx.recommend) == null ? undefined : _a2.url, type: "primary", target: "_blank" }, { default: vue.withCtx(() => { var _a3; return [ vue.createTextVNode(vue.toDisplayString((_a3 = _ctx.recommend) == null ? undefined : _a3.label), 1) ]; }), _: 1 }, 8, ["href"]) ]); }; } }); const _hoisted_1 = { class: "sswp-script" }; const _hoisted_2 = ["innerHTML"]; const _hoisted_3 = { key: 0 }; const _hoisted_4 = { class: "file" }; const _hoisted_5 = { class: "type-img" }; const _hoisted_6 = ["src"]; const _hoisted_7 = { class: "file-name" }; const _hoisted_8 = { key: 1 }; const _hoisted_9 = { class: "flex space-between top-10" }; const _hoisted_10 = { class: "log" }; const _hoisted_11 = { class: "file-name" }; const _hoisted_12 = { class: "about" }; const _hoisted_13 = { class: "container" }; const _hoisted_14 = { class: "desc" }; const _sfc_main$1 = /* @__PURE__ */ vue.defineComponent({ __name: "ParseDialog", setup(__props) { const dialogVisible = vue.ref(false); const dialogLoadingEl = vue.ref(null); const isLoading = vue.ref(false); const form = vue.reactive({ rpcUrl: "", rpcToken: "", rpcLocation: "" }); const state = vue.reactive({ bdstoken: "", username: "", score: 0, downloadLinks: [], history: [], appconfig: undefined, isHome: true }); vue.watch( [() => form], () => { _GM_setValue(APP_STORAGE_SETTING_KEY, form); }, { deep: true } ); vue.watch([() => state.score], () => { _GM_setValue(APP_STORAGE_SCORE_KEY, state.score); }); const selectList = vue.ref(); async function checkUpdate() { if (!state.appconfig) return; const { version, forceUpdate, updateUrl } = state.appconfig; if (version != _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) { console.log(error); } } } } function toShop() { var _a2; window.open((_a2 = state.appconfig) == null ? undefined : _a2.shopUrl); } async function recharge() { 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); console.log("--充值结果", chargeRes); if (chargeRes.code == 200) { ElMessage.success("充值成功"); state.score = chargeRes.data.score; done(); } else { ElMessage.error(chargeRes.message); } } else { done(); } } }); } async function signin() { ElMessage.info("签到中,请稍等"); const res = await reqSignin(); console.log("签到结果", res); if (res.code == 200) { state.score = res.data.score; ElMessage.success("签到成功"); } else if (res.code == "-1000102") { await initLogin(true); signin(); } else { ElMessage.error(res.message); } } async function handleOpen() { await checkUpdate(); state.downloadLinks = []; dialogVisible.value = true; const selectedEl = document.querySelector(".nd-new-main-list"); const list = selectedEl.__vue__.selectedList; selectList.value = list; console.log("--选中的文件", list); } async function getDownloadUrl() { console.log("开始解析"); const loading = ElLoading.service({ target: dialogLoadingEl.value, text: "解析中……" }); try { if (!state.bdstoken) { ElMessage.error("参数bdstoken获取失败,请刷新页面"); throw Error("获取bdstoken失败"); } isLoading.value = true; loading.setText("正在创建分享链接……"); const { shorturl, password, url } = await bdShareFile(); loading.setText("正在获取解析参数……"); const listRes = await getParamsForLink(shorturl, password); const { randsk, uk, shareid } = listRes.data; const { fsIds, fileList } = await getFsIds(); console.log("--获取到的全部文件信息", fsIds, fileList); const linkParams = { randsk, uk, shareid, url, surl: shorturl, dir: "/", pwd: password, fs_ids: fsIds, user: state.username }; loading.setText("解析中,请稍等……"); const linkRes = await getLink(linkParams); console.log("--解析结果", linkRes); const { data, score } = linkRes; state.score = score; ElMessage.success("解析成功"); state.downloadLinks = data.map((item) => { const path = fileList.find((f2) => f2.fs_id == item.fs_id).path; item.dir = getDirectoryPath(path); return item; }); console.log("--最终的下载链接", state.downloadLinks); state.history.unshift({ date: Date.now(), data }); const history = state.history.slice(0, 5); state.history = history; _GM.setValue(APP_STORAGE_HISTORY_KEY, history); } catch (error) { console.log("出错了", error); ElMessage.error(error.message); } loading.close(); isLoading.value = false; } async function bdShareFile(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 { console.log("--分享", res); return { url, shorturl, password }; } } async function getParamsForLink(shorturl, password) { const username = state.username; console.log("--list函数参数", shorturl, password, username); let listRes = await reqList(shorturl, password, username); console.log("--获取list结果", listRes); if (listRes.code == 200) { return listRes; } else if (listRes.code == "-1000102") { await initLogin(true); return await getParamsForLink(shorturl, password); } else { ElMessageBox({ title: "提示", message: listRes.message, dangerouslyUseHTMLString: true, confirmButtonText: "我知道了", showCancelButton: false, center: true }); throw Error("获取下载list参数失败"); } } async function getLink(linkParams) { console.log("获取link的参数", linkParams); const linkRes = await reqLink(linkParams); console.log("--提取到的结果", linkRes); if (linkRes.code == 200) { return linkRes; } else if (linkRes.code == 10050 || linkRes.code == 10033) { const codeRes = await getVCode(linkRes.message); return await getLink({ ...linkParams, ...codeRes }); } else { ElMessageBox({ title: "提示", message: linkRes.message, dangerouslyUseHTMLString: true, confirmButtonText: "我知道了", showCancelButton: false, center: true }); throw Error("获取下载链接失败"); } } async function getVCode(message2) { const vcodeRes = await getCode(); 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: message2 }), 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); console.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); } } console.log("即将消耗", totalNeedPoint); if (totalNeedPoint >= state.score) { ElMessage.error(`积分不足,解析所选文件需要${totalNeedPoint}积分`); throw Error("积分不足"); } } catch (error) { throw Error("获取文件列表出错"); } console.log("--获取到的全部文件ids", fsIds); return { fsIds, fileList }; } async function download(link) { console.log("推送至aria2下载"); await reqAria2Version(); await reqAria2Download(link || state.downloadLinks); } async function copyUrl(link) { const urls = (link || state.downloadLinks).map((item) => { return item.url; }).join("\n"); console.log(urls); await copyToClipboard(urls); ElMessage.success("复制成功:下载链接"); } async function copyUA(link) { var _a2; const linkInfo = link || state.downloadLinks; if (linkInfo[0]) { await copyToClipboard((_a2 = linkInfo[0]) == null ? undefined : _a2.ua); ElMessage.success("复制成功:UA"); } } function openHomePage() { const homePage = _GM_info.script.homepage; if (homePage == null ? undefined : homePage.length) { window.open(homePage); } else { ElMessage.warning("脚本主页正在开发中……"); } } function updateScript() { if (state.appconfig) { if (state.appconfig.version == _GM_info.script.version) { ElMessage.success("已是最新版本"); } else { window.open(state.appconfig.updateUrl); } } else { ElMessage.error("检查更新出错"); } } function getLogItemTitle(data) { if (!data) return ""; return data.map((item) => { return item.filename; }).join(","); } vue.onMounted(() => { console.log("挂载了"); initState(); EventBus.on("openParseDialog", handleOpen); }); async function initState() { var _a2; const setting = _GM_getValue(APP_STORAGE_SETTING_KEY, { password: "", rpcUrl: "http:/localhost:6800/jsonrpc", rpcToken: "", rpcLocation: "D:\\SSDOWN批量下载" }); console.log("远程下载设置", setting); Object.assign(form, setting); const score = _GM_getValue(APP_STORAGE_SCORE_KEY); state.score = score || 0; const history = _GM_getValue(APP_STORAGE_HISTORY_KEY) || []; state.history = history; const remoteAppConfig = await reqRemoteAppConfig(); state.isHome = !_unsafeWindow.location.pathname.startsWith("/s/"); console.log("isHome", state.isHome); state.appconfig = remoteAppConfig; console.log(_unsafeWindow.locals.userInfo); const { bdstoken, username } = (_a2 = _unsafeWindow == null ? undefined : _unsafeWindow.locals) == null ? undefined : _a2.userInfo; state.bdstoken = bdstoken; state.username = username; console.log("初始化登录"); initLogin(); } async function initLogin(needReLoginShare = false) { let loginShareInfo = _GM_getValue(APP_STORAGE_LOGININFO_KEY); const storageServeUrl = _GM_getValue(APP_STORAGE_SERVE_URL_KEY); console.log("loginShareInfo", loginShareInfo); if (needReLoginShare || !loginShareInfo || // 用户切换账号也重新登录下 loginShareInfo.username != state.username) { const bdstoken = state.bdstoken; const fileName = "ss-" + Math.floor(Math.random() * 100); const res = await reqCreateFile(bdstoken, fileName); console.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: state.username }; _GM_setValue(APP_STORAGE_LOGININFO_KEY, loginShareInfo); } else if (storageServeUrl != APP_SERVE_URL) { _GM_setValue(APP_STORAGE_SERVE_URL_KEY, APP_SERVE_URL); } else if (Date.now() - loginShareInfo.shareTime <= 5616e5) { return; } const loginRes = await reqLogin({ surl: loginShareInfo.shorturl, pwd: loginShareInfo.password, dir: "/" }); console.log("--登录结果", loginRes); if (loginRes.code == 200) { state.score = loginRes.data.score; _GM_setValue(APP_STORAGE_API_TOKEN_KEY, loginRes.data["api-token"]); } else { ElMessage.error(APP_NAME + `:登录失败(${loginRes.message})`); } } function reset() { _GM_deleteValues([ APP_STORAGE_HISTORY_KEY, APP_STORAGE_LOGININFO_KEY, APP_STORAGE_SETTING_KEY, APP_STORAGE_API_TOKEN_KEY, APP_STORAGE_SCORE_KEY ]); ElMessage.success("重置成功,3秒后将刷新页面"); setTimeout(() => { window.location.reload(); }, 3e3); } 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_input = ElInput; const _component_el_form_item = ElFormItem; const _component_el_form = ElForm; const _component_el_tabs = ElTabs; const _component_el_dialog = ElDialog; return vue.openBlock(), vue.createElementBlock("div", _hoisted_1, [ vue.unref(state).isHome ? (vue.openBlock(), vue.createBlock(_component_el_dialog, { key: 0, modelValue: vue.unref(dialogVisible), "onUpdate:modelValue": _cache[7] || (_cache[7] = ($event) => vue.isRef(dialogVisible) ? dialogVisible.value = $event : null), "append-to-body": false, width: "65%" }, { header: vue.withCtx(() => { var _a2, _b; return [ vue.createVNode(_sfc_main$2, { recommend: (_b = (_a2 = vue.unref(state)) == null ? undefined : _a2.appconfig) == null ? undefined : _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 [ vue.createVNode(_component_el_alert, { title: "🔊 提示", type: "info" }, { default: vue.withCtx(() => { var _a3; return [ vue.createElementVNode("div", { innerHTML: (_a3 = vue.unref(state).appconfig) == null ? undefined : _a3.ad, class: "html-str" }, null, 8, _hoisted_2) ]; }), _: 1 }), ((_a2 = vue.unref(selectList)) == null ? undefined : _a2.length) ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_3, [ 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_4, [ vue.createElementVNode("div", _hoisted_5, [ vue.createElementVNode("img", { src: scope.row.categoryImage, alt: "" }, null, 8, _hoisted_6) ]), vue.createElementVNode("div", _hoisted_7, 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_8, [ vue.createVNode(_component_el_empty, { description: "\n 请到自己网盘首页选择需要解析的文件或文件夹\n " }) ])), vue.createElementVNode("div", _hoisted_9, [ vue.createElementVNode("div", null, [ vue.createVNode(_component_el_button_group, null, { default: vue.withCtx(() => [ vue.createVNode(_component_el_button, null, { default: vue.withCtx(() => [ vue.createTextVNode("💰 积分:" + vue.toDisplayString(vue.unref(state).score), 1) ]), _: 1 }), vue.createVNode(_component_el_button, { onClick: signin }, { default: vue.withCtx(() => _cache[9] || (_cache[9] = [ vue.createTextVNode("🧲 签到 ") ])), _: 1 }), vue.createVNode(_component_el_button, { onClick: recharge }, { default: vue.withCtx(() => _cache[10] || (_cache[10] = [ vue.createTextVNode("🔑 充值") ])), _: 1 }), vue.createVNode(_component_el_button, { onClick: toShop }, { default: vue.withCtx(() => _cache[11] || (_cache[11] = [ vue.createTextVNode("🎁 积分商城") ])), _: 1 }) ]), _: 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: ((_b = vue.unref(selectList)) == null ? undefined : _b.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) => download()) }, { default: vue.withCtx(() => _cache[14] || (_cache[14] = [ vue.createTextVNode(" 推送到Aria2(Motrix) ") ])), _: 1 }), vue.createVNode(_component_el_button, { onClick: _cache[2] || (_cache[2] = ($event) => copyUrl()) }, { default: vue.withCtx(() => _cache[15] || (_cache[15] = [ vue.createTextVNode(" 复制下载链接 ") ])), _: 1 }), vue.createVNode(_component_el_button, { onClick: _cache[3] || (_cache[3] = ($event) => copyUA()) }, { default: vue.withCtx(() => _cache[16] || (_cache[16] = [ vue.createTextVNode("复制UA") ])), _: 1 }) ], 64)) ]) ]) ]; }), _: 1 }), vue.createVNode(_component_el_tab_pane, { label: "💿 解析记录", lazy: "" }, { default: vue.withCtx(() => [ vue.createElementVNode("div", _hoisted_10, [ _cache[20] || (_cache[20] = vue.createElementVNode("div", { class: "sub-title" }, "最近5次解析记录:", -1)), vue.unref(state).history.length > 0 ? (vue.openBlock(), vue.createBlock(_component_el_table, { key: 0, data: vue.unref(state).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_11, vue.toDisplayString(getLogItemTitle((_a2 = scope.row) == null ? undefined : _a2.data)), 1) ]; }), _: 1 }), vue.createVNode(_component_el_table_column, { label: "解析时间" }, { default: vue.withCtx((scope) => { var _a2; return [ vue.createTextVNode(vue.toDisplayString(new Date((_a2 = scope.row) == null ? undefined : _a2.date).toLocaleString()), 1) ]; }), _: 1 }), vue.createVNode(_component_el_table_column, { label: "操作" }, { default: vue.withCtx((scope) => [ vue.createVNode(_component_el_button_group, { size: "small" }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_button, { type: "success", onClick: ($event) => download(scope.row.data) }, { default: vue.withCtx(() => _cache[17] || (_cache[17] = [ vue.createTextVNode(" 推送到Aria2 ") ])), _: 2 }, 1032, ["onClick"]), vue.createVNode(_component_el_button, { onClick: ($event) => copyUrl(scope.row.data) }, { default: vue.withCtx(() => _cache[18] || (_cache[18] = [ vue.createTextVNode(" 复制下载链接 ") ])), _: 2 }, 1032, ["onClick"]), vue.createVNode(_component_el_button, { onClick: ($event) => copyUA(scope.row.data) }, { default: vue.withCtx(() => _cache[19] || (_cache[19] = [ vue.createTextVNode(" 复制UA ") ])), _: 2 }, 1032, ["onClick"]) ]), _: 2 }, 1024) ]), _: 1 }) ]), _: 1 }, 8, ["data"])) : (vue.openBlock(), vue.createBlock(_component_el_empty, { key: 1, description: "暂无数据" })) ]) ]), _: 1 }), vue.createVNode(_component_el_tab_pane, { label: "🔑设置", lazy: "" }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_form, { model: vue.unref(form), "label-width": "auto" }, { default: vue.withCtx(() => [ _cache[22] || (_cache[22] = vue.createElementVNode("div", { class: "sub-title" }, "aria2(motrix)远程下载", -1)), vue.createVNode(_component_el_form_item, { label: "下载地址" }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_input, { modelValue: vue.unref(form).rpcUrl, "onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => vue.unref(form).rpcUrl = $event) }, { append: vue.withCtx(() => [ vue.createVNode(_component_el_button, { onClick: vue.unref(reqAria2Version) }, { default: vue.withCtx(() => _cache[21] || (_cache[21] = [ vue.createTextVNode("测试连接") ])), _: 1 }, 8, ["onClick"]) ]), _: 1 }, 8, ["modelValue"]) ]), _: 1 }), vue.createVNode(_component_el_form_item, { label: "秘钥" }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_input, { modelValue: vue.unref(form).rpcToken, "onUpdate:modelValue": _cache[5] || (_cache[5] = ($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).rpcLocation, "onUpdate:modelValue": _cache[6] || (_cache[6] = ($event) => vue.unref(form).rpcLocation = $event) }, null, 8, ["modelValue"]) ]), _: 1 }) ]), _: 1 }, 8, ["model"]) ]), _: 1 }), vue.createVNode(_component_el_tab_pane, { label: "📢 关于", lazy: "" }, { default: vue.withCtx(() => [ vue.createElementVNode("div", _hoisted_12, [ vue.createElementVNode("h1", null, vue.toDisplayString(vue.unref(_GM_info).script.name), 1), vue.createElementVNode("div", _hoisted_13, [ vue.createElementVNode("p", _hoisted_14, vue.toDisplayString(vue.unref(_GM_info).script.description), 1), vue.createElementVNode("p", null, "当前版本:v" + vue.toDisplayString(vue.unref(_GM_info).script.version), 1), vue.createElementVNode("p", null, " 上次更新时间:" + vue.toDisplayString(new Date(vue.unref(_GM_info).script.lastModified).toLocaleString()), 1) ]), vue.createVNode(_component_el_button_group, null, { default: vue.withCtx(() => [ vue.createVNode(_component_el_button, { type: "primary", onClick: openHomePage }, { default: vue.withCtx(() => _cache[23] || (_cache[23] = [ vue.createTextVNode(" 👓 脚本主页 ") ])), _: 1 }), vue.createVNode(_component_el_button, { onClick: updateScript }, { default: vue.withCtx(() => _cache[24] || (_cache[24] = [ vue.createTextVNode("📡 检查更新") ])), _: 1 }), vue.createVNode(_component_el_button, { onClick: reset }, { default: vue.withCtx(() => _cache[25] || (_cache[25] = [ vue.createTextVNode("🔨 重置脚本") ])), _: 1 }) ]), _: 1 }) ]) ]), _: 1 }) ]), _: 1 }) ], 512) ]), _: 1 }, 8, ["modelValue"])) : (vue.openBlock(), vue.createBlock(_component_el_dialog, { key: 1, 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 _export_sfc = (sfc, props) => { const target = sfc.__vccOpts || sfc; for (const [key, val] of props) { target[key] = val; } return target; }; const ParseDialog = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-1c5dd94c"]]); const _sfc_main = /* @__PURE__ */ vue.defineComponent({ __name: "Root", setup(__props) { console.log("脚本加载"); vue.onMounted(() => { console.log("root 挂载"); addBtnToUI(); }); function addBtnToUI() { let baiduHeader = document.querySelector(".wp-s-header__right"); if (baiduHeader) { const btnContainer = document.createElement("div"); btnContainer.className = "sswp-btn-container"; vue.createApp(_sfc_main$3).mount(btnContainer); baiduHeader == null ? undefined : baiduHeader.insertAdjacentElement("afterbegin", btnContainer); } else { baiduHeader = document.querySelector('[node-type="header-link"]'); const btnContainer = document.createElement("span"); btnContainer.className = "cMEMEF"; vue.createApp(_sfc_main$3).mount(btnContainer); baiduHeader == null ? undefined : baiduHeader.appendChild(btnContainer); } } return (_ctx, _cache) => { return vue.openBlock(), vue.createBlock(ParseDialog); }; } }); vue.createApp(_sfc_main).mount( (() => { const app = document.createElement("div"); document.body.append(app); return app; })() ); } }); require_main_001(); })(Vue, mitt, axios);