在您安装前,Greasy Fork 希望您知道此脚本包含可能不受欢迎的功能,也许会帮助脚本作者获利,而不能给你带来任何收益。
你只有在付费后才能使用脚本的全部功能。Greasy Fork 未参与到支付的流程,因此无法验证您是否获得了有价值的东西,亦无法帮助您申请退款。
脚本作者的说明:
第三方接口存在付费项
全平台问答助手,一键获取整个页面的试题答案,目前支持【超星学习通、知到智慧树、国开、广开、江开、上开、芯位教育、云慕学苑、职教云、川农在线、长江雨课堂(半兼容)、安徽继续教育平台、青书学堂、睿学在线、成教云】,更多平台开发中...
目前为
// ==UserScript== // @name 爱问答助手 // @namespace aiask/askHelper // @version 1.2.0 // @author aiask // @description 全平台问答助手,一键获取整个页面的试题答案,目前支持【超星学习通、知到智慧树、国开、广开、江开、上开、芯位教育、云慕学苑、职教云、川农在线、长江雨课堂(半兼容)、安徽继续教育平台、青书学堂、睿学在线、成教云】,更多平台开发中... // @license MIT // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAAXNSR0IArs4c6QAAAHVQTFRFR3BMgICBQD8/QUVHQ0ZIRUhKX2FiQD8/Tk1NP0VJPzs7Pz8/QD4+UE9QQD8/PVlnQD8/M6vj////n5+fN5C60NDQSl9qOXWSZL/qTFNXzOr4QWl8yMjItLS02traOIOnNZzN6OfnlJeZ9/f3PYGgpdrzmdXxgSBJqQAAABB0Uk5TAP5E6vys+7/Q0RhsfPFV/OwFarYAAAEESURBVHjapdHrboMgGIBhUHBaD/sAlTE8VOt2/5c4GlBMRZOl7w8j+kQQ0FaVwbG48IDq+piMPcgkO1bD/8DXvhD4/fb9ePDuGiqa2krV7pO1AxSLYIl2ABoeTLSvYMBi4N0sphOAlVaqg1aTPggmZYYaFvNMBYGQz6G6m2vbhEBvF81MxALFTDpbQQd3ZhvBgxqiFfBEO/CJ7ZxkNPcUbWBwn5DJw4KSsJHcHPCTLLDuQxpLkiMLbAIWJs1wBRVkyAFXT7Sa+AYQjTywNfOD74DNA18I9Ifjpg7Es/3Jj5eKyIEcBgNwhk5L8XMPonMQQcfNhBfRpIfbFbiRskCX5enFyz/07TSN9vGxKwAAAABJRU5ErkJggg== // @match *://*.asklib.com/* // @match *://*.chaoxing.com/* // @match *://*.hlju.edu.cn/* // @match *://lms.ouchn.cn/* // @match *://xczxzdbf.moodle.qwbx.ouchn.cn/* // @match *://tongyi.aliyun.com/qianwen/* // @match *://chatglm.cn/* // @match *://*.zhihuishu.com/* // @match *://course.ougd.cn/* // @match *://moodle.syxy.ouchn.cn/* // @match *://moodle.qwbx.ouchn.cn/* // @match *://elearning.bjou.edu.cn/* // @match *://whkpc.hnqtyq.cn:5678/* // @match *://study.ouchn.cn/* // @match *://www.51xinwei.com/* // @match *://*.w-ling.cn/* // @match *://xuexi.jsou.cn/* // @match *://*.edu-edu.com/* // @match *://xuexi.jsou.cn/* // @match *://spoc-exam.icve.com.cn/* // @match *://*.icve.com.cn/* // @match *://zice.cnzx.info/* // @match *://any.cnzx.info:81/* // @match *://www.icourse163.org/* // @match *://*.yuketang.cn/* // @match *://*.shou.org.cn/* // @match *://main.ahjxjy.cn/* // @match *://exam.chinaedu.net/* // @match *://degree.qingshuxuetang.com/* // @match *://cce.org.uooconline.com/* // @match *://*.courshare.cn/* // @match *://*.cep.webtrn.cn/* // @match *://*.webtrn.cn/* // @match *://*.cj-edu.com/* // @require https://cdn.bootcdn.net/ajax/libs/vue/3.4.21/vue.global.prod.js // @require https://cdn.bootcdn.net/ajax/libs/vue-demi/0.14.6/index.iife.js // @require data:application/javascript,%3Bwindow.Vue%3DVue%3B // @require https://cdn.bootcdn.net/ajax/libs/element-plus/2.6.3/index.full.min.js // @require https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.min.js // @require https://cdn.bootcdn.net/ajax/libs/highlight.js/11.9.0/highlight.min.js // @require https://cdn.bootcdn.net/ajax/libs/markdown-it/13.0.1/markdown-it.min.js // @require https://cdn.bootcdn.net/ajax/libs/dompurify/3.0.11/purify.min.js // @resource ttf https://www.forestpolice.org/ttf/2.0/table.json // @resource ttf2 https://cdn.jsdmirror.com/gh/chengbianruan/staticfile/1.json // @connect 127.0.0.1 // @connect icodef.com // @connect muketool.com // @connect wk66.top // @connect 82.157.105.20 // @connect tikuhai.com // @connect zhihuishu.com // @connect yuketang.cn // @connect greasyfork.org // @grant GM_addStyle // @grant GM_deleteValue // @grant GM_getResourceText // @grant GM_getValue // @grant GM_info // @grant GM_listValues // @grant GM_setValue // @grant GM_xmlhttpRequest // @grant unsafeWindow // @run-at document-start // @antifeature payment 第三方接口存在付费项 // ==/UserScript== (a=>{if(typeof GM_addStyle=="function"){GM_addStyle(a);return}const o=document.createElement("style");o.textContent=a,document.head.append(o)})(` @charset "UTF-8";:root{--aah-color-white: #ffffff;--aah-color-black: #000000;--aah-color-primary-rgb: 64, 158, 255;--aah-color-success-rgb: 103, 194, 58;--aah-color-warning-rgb: 230, 162, 60;--aah-color-danger-rgb: 245, 108, 108;--aah-color-error-rgb: 245, 108, 108;--aah-color-info-rgb: 144, 147, 153;--aah-font-size-extra-large: 20px;--aah-font-size-large: 18px;--aah-font-size-medium: 16px;--aah-font-size-base: 14px;--aah-font-size-small: 13px;--aah-font-size-extra-small: 12px;--aah-font-family: "Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "\u5FAE\u8F6F\u96C5\u9ED1", Arial, sans-serif;--aah-font-weight-primary: 500;--aah-font-line-height-primary: 24px;--aah-index-normal: 1;--aah-index-top: 1000;--aah-index-popper: 2000;--aah-border-radius-base: 4px;--aah-border-radius-small: 2px;--aah-border-radius-round: 20px;--aah-border-radius-circle: 100%;--aah-transition-duration: .3s;--aah-transition-duration-fast: .2s;--aah-transition-function-ease-in-out-bezier: cubic-bezier(.645, .045, .355, 1);--aah-transition-function-fast-bezier: cubic-bezier(.23, 1, .32, 1);--aah-transition-all: all var(--aah-transition-duration) var(--aah-transition-function-ease-in-out-bezier);--aah-transition-fade: opacity var(--aah-transition-duration) var(--aah-transition-function-fast-bezier);--aah-transition-md-fade: transform var(--aah-transition-duration) var(--aah-transition-function-fast-bezier), opacity var(--aah-transition-duration) var(--aah-transition-function-fast-bezier);--aah-transition-fade-linear: opacity var(--aah-transition-duration-fast) linear;--aah-transition-border: border-color var(--aah-transition-duration-fast) var(--aah-transition-function-ease-in-out-bezier);--aah-transition-box-shadow: box-shadow var(--aah-transition-duration-fast) var(--aah-transition-function-ease-in-out-bezier);--aah-transition-color: color var(--aah-transition-duration-fast) var(--aah-transition-function-ease-in-out-bezier);--aah-component-size-large: 40px;--aah-component-size: 32px;--aah-component-size-small: 24px}:root{color-scheme:light;--aah-color-primary: #409eff;--aah-color-primary-light-3: #79bbff;--aah-color-primary-light-5: #a0cfff;--aah-color-primary-light-7: #c6e2ff;--aah-color-primary-light-8: #d9ecff;--aah-color-primary-light-9: #ecf5ff;--aah-color-primary-dark-2: #337ecc;--aah-color-success: #67c23a;--aah-color-success-light-3: #95d475;--aah-color-success-light-5: #b3e19d;--aah-color-success-light-7: #d1edc4;--aah-color-success-light-8: #e1f3d8;--aah-color-success-light-9: #f0f9eb;--aah-color-success-dark-2: #529b2e;--aah-color-warning: #e6a23c;--aah-color-warning-light-3: #eebe77;--aah-color-warning-light-5: #f3d19e;--aah-color-warning-light-7: #f8e3c5;--aah-color-warning-light-8: #faecd8;--aah-color-warning-light-9: #fdf6ec;--aah-color-warning-dark-2: #b88230;--aah-color-danger: #f56c6c;--aah-color-danger-light-3: #f89898;--aah-color-danger-light-5: #fab6b6;--aah-color-danger-light-7: #fcd3d3;--aah-color-danger-light-8: #fde2e2;--aah-color-danger-light-9: #fef0f0;--aah-color-danger-dark-2: #c45656;--aah-color-error: #f56c6c;--aah-color-error-light-3: #f89898;--aah-color-error-light-5: #fab6b6;--aah-color-error-light-7: #fcd3d3;--aah-color-error-light-8: #fde2e2;--aah-color-error-light-9: #fef0f0;--aah-color-error-dark-2: #c45656;--aah-color-info: #909399;--aah-color-info-light-3: #b1b3b8;--aah-color-info-light-5: #c8c9cc;--aah-color-info-light-7: #dedfe0;--aah-color-info-light-8: #e9e9eb;--aah-color-info-light-9: #f4f4f5;--aah-color-info-dark-2: #73767a;--aah-bg-color: #ffffff;--aah-bg-color-page: #f2f3f5;--aah-bg-color-overlay: #ffffff;--aah-text-color-primary: #303133;--aah-text-color-regular: #606266;--aah-text-color-secondary: #909399;--aah-text-color-placeholder: #a8abb2;--aah-text-color-disabled: #c0c4cc;--aah-border-color: #dcdfe6;--aah-border-color-light: #e4e7ed;--aah-border-color-lighter: #ebeef5;--aah-border-color-extra-light: #f2f6fc;--aah-border-color-dark: #d4d7de;--aah-border-color-darker: #cdd0d6;--aah-fill-color: #f0f2f5;--aah-fill-color-light: #f5f7fa;--aah-fill-color-lighter: #fafafa;--aah-fill-color-extra-light: #fafcff;--aah-fill-color-dark: #ebedf0;--aah-fill-color-darker: #e6e8eb;--aah-fill-color-blank: #ffffff;--aah-box-shadow: 0px 12px 32px 4px rgba(0, 0, 0, .04), 0px 8px 20px rgba(0, 0, 0, .08);--aah-box-shadow-light: 0px 0px 12px rgba(0, 0, 0, .12);--aah-box-shadow-lighter: 0px 0px 6px rgba(0, 0, 0, .12);--aah-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);--aah-disabled-bg-color: var(--aah-fill-color-light);--aah-disabled-text-color: var(--aah-text-color-placeholder);--aah-disabled-border-color: var(--aah-border-color-light);--aah-overlay-color: rgba(0, 0, 0, .8);--aah-overlay-color-light: rgba(0, 0, 0, .7);--aah-overlay-color-lighter: rgba(0, 0, 0, .5);--aah-mask-color: rgba(255, 255, 255, .9);--aah-mask-color-extra-light: rgba(255, 255, 255, .3);--aah-border-width: 1px;--aah-border-style: solid;--aah-border-color-hover: var(--aah-text-color-disabled);--aah-border: var(--aah-border-width) var(--aah-border-style) var(--aah-border-color);--aah-svg-monochrome-grey: var(--aah-border-color)}.fade-in-linear-enter-active,.fade-in-linear-leave-active{transition:var(--aah-transition-fade-linear)}.fade-in-linear-enter-from,.fade-in-linear-leave-to{opacity:0}.aah-fade-in-linear-enter-active,.aah-fade-in-linear-leave-active{transition:var(--aah-transition-fade-linear)}.aah-fade-in-linear-enter-from,.aah-fade-in-linear-leave-to{opacity:0}.aah-fade-in-enter-active,.aah-fade-in-leave-active{transition:all var(--aah-transition-duration) cubic-bezier(.55,0,.1,1)}.aah-fade-in-enter-from,.aah-fade-in-leave-active{opacity:0}.aah-zoom-in-center-enter-active,.aah-zoom-in-center-leave-active{transition:all var(--aah-transition-duration) cubic-bezier(.55,0,.1,1)}.aah-zoom-in-center-enter-from,.aah-zoom-in-center-leave-active{opacity:0;transform:scaleX(0)}.aah-zoom-in-top-enter-active,.aah-zoom-in-top-leave-active{opacity:1;transform:scaleY(1);transition:var(--aah-transition-md-fade);transform-origin:center top}.aah-zoom-in-top-enter-active[data-popper-placement^=top],.aah-zoom-in-top-leave-active[data-popper-placement^=top]{transform-origin:center bottom}.aah-zoom-in-top-enter-from,.aah-zoom-in-top-leave-active{opacity:0;transform:scaleY(0)}.aah-zoom-in-bottom-enter-active,.aah-zoom-in-bottom-leave-active{opacity:1;transform:scaleY(1);transition:var(--aah-transition-md-fade);transform-origin:center bottom}.aah-zoom-in-bottom-enter-from,.aah-zoom-in-bottom-leave-active{opacity:0;transform:scaleY(0)}.aah-zoom-in-left-enter-active,.aah-zoom-in-left-leave-active{opacity:1;transform:scale(1);transition:var(--aah-transition-md-fade);transform-origin:top left}.aah-zoom-in-left-enter-from,.aah-zoom-in-left-leave-active{opacity:0;transform:scale(.45)}.collapse-transition{transition:var(--aah-transition-duration) height ease-in-out,var(--aah-transition-duration) padding-top ease-in-out,var(--aah-transition-duration) padding-bottom ease-in-out}.aah-collapse-transition-leave-active,.aah-collapse-transition-enter-active{transition:var(--aah-transition-duration) max-height ease-in-out,var(--aah-transition-duration) padding-top ease-in-out,var(--aah-transition-duration) padding-bottom ease-in-out}.horizontal-collapse-transition{transition:var(--aah-transition-duration) width ease-in-out,var(--aah-transition-duration) padding-left ease-in-out,var(--aah-transition-duration) padding-right ease-in-out}.aah-list-enter-active,.aah-list-leave-active{transition:all 1s}.aah-list-enter-from,.aah-list-leave-to{opacity:0;transform:translateY(-30px)}.aah-list-leave-active{position:absolute!important}.aah-opacity-transition{transition:opacity var(--aah-transition-duration) cubic-bezier(.55,0,.1,1)}.aah-icon-loading{animation:rotating 2s linear infinite}.aah-icon--right{margin-left:5px}.aah-icon--left{margin-right:5px}@keyframes rotating{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.aah-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}.aah-icon.is-loading{animation:rotating 2s linear infinite}.aah-icon svg{height:1em;width:1em}.aah-dialog{--aah-dialog-width: 50%;--aah-dialog-margin-top: 15vh;--aah-dialog-bg-color: var(--aah-bg-color);--aah-dialog-box-shadow: var(--aah-box-shadow);--aah-dialog-title-font-size: var(--aah-font-size-large);--aah-dialog-content-font-size: 14px;--aah-dialog-font-line-height: var(--aah-font-line-height-primary);--aah-dialog-padding-primary: 16px;--aah-dialog-border-radius: var(--aah-border-radius-small);position:relative;margin:var(--aah-dialog-margin-top, 15vh) auto 50px;background:var(--aah-dialog-bg-color);border-radius:var(--aah-dialog-border-radius);box-shadow:var(--aah-dialog-box-shadow);box-sizing:border-box;padding:var(--aah-dialog-padding-primary);width:var(--aah-dialog-width, 50%);overflow-wrap:break-word}.aah-dialog:focus{outline:none!important}.aah-dialog.is-align-center{margin:auto}.aah-dialog.is-fullscreen{--aah-dialog-width: 100%;--aah-dialog-margin-top: 0;margin-bottom:0;height:100%;overflow:auto}.aah-dialog__wrapper{position:fixed;top:0;right:0;bottom:0;left:0;overflow:auto;margin:0}.aah-dialog.is-draggable .aah-dialog__header{cursor:move;-webkit-user-select:none;user-select:none}.aah-dialog__header{padding-bottom:var(--aah-dialog-padding-primary)}.aah-dialog__header.show-close{padding-right:calc(var(--aah-dialog-padding-primary) + var(--aah-message-close-size, 16px))}.aah-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(--aah-message-close-size, 16px)}.aah-dialog__headerbtn .aah-dialog__close{color:var(--aah-color-info);font-size:inherit}.aah-dialog__headerbtn:focus .aah-dialog__close,.aah-dialog__headerbtn:hover .aah-dialog__close{color:var(--aah-color-primary)}.aah-dialog__title{line-height:var(--aah-dialog-font-line-height);font-size:var(--aah-dialog-title-font-size);color:var(--aah-text-color-primary)}.aah-dialog__body{color:var(--aah-text-color-regular);font-size:var(--aah-dialog-content-font-size)}.aah-dialog__footer{padding-top:var(--aah-dialog-padding-primary);text-align:right;box-sizing:border-box}.aah-dialog--center{text-align:center}.aah-dialog--center .aah-dialog__body{text-align:initial}.aah-dialog--center .aah-dialog__footer{text-align:inherit}.aah-overlay-dialog{position:fixed;top:0;right:0;bottom:0;left:0;overflow:auto}.dialog-fade-enter-active{animation:modal-fade-in var(--aah-transition-duration)}.dialog-fade-enter-active .aah-overlay-dialog{animation:dialog-fade-in var(--aah-transition-duration)}.dialog-fade-leave-active{animation:modal-fade-out var(--aah-transition-duration)}.dialog-fade-leave-active .aah-overlay-dialog{animation:dialog-fade-out var(--aah-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}}.aah-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:2000;height:100%;background-color:var(--aah-overlay-color-lighter);overflow:auto}.aah-overlay .aah-overlay-root{height:0}.aah-scrollbar{--aah-scrollbar-opacity: .3;--aah-scrollbar-bg-color: var(--aah-text-color-secondary);--aah-scrollbar-hover-opacity: .5;--aah-scrollbar-hover-bg-color: var(--aah-text-color-secondary)}.aah-scrollbar{overflow:hidden;position:relative;height:100%}.aah-scrollbar__wrap{overflow:auto;height:100%}.aah-scrollbar__wrap--hidden-default{scrollbar-width:none}.aah-scrollbar__wrap--hidden-default::-webkit-scrollbar{display:none}.aah-scrollbar__thumb{position:relative;display:block;width:0;height:0;cursor:pointer;border-radius:inherit;background-color:var(--aah-scrollbar-bg-color, var(--aah-text-color-secondary));transition:var(--aah-transition-duration) background-color;opacity:var(--aah-scrollbar-opacity, .3)}.aah-scrollbar__thumb:hover{background-color:var(--aah-scrollbar-hover-bg-color, var(--aah-text-color-secondary));opacity:var(--aah-scrollbar-hover-opacity, .5)}.aah-scrollbar__bar{position:absolute;right:2px;bottom:2px;z-index:1;border-radius:4px}.aah-scrollbar__bar.is-vertical{width:6px;top:2px}.aah-scrollbar__bar.is-vertical>div{width:100%}.aah-scrollbar__bar.is-horizontal{height:6px;left:2px}.aah-scrollbar__bar.is-horizontal>div{height:100%}.aah-scrollbar-fade-enter-active{transition:opacity .34s ease-out}.aah-scrollbar-fade-leave-active{transition:opacity .12s ease-out}.aah-scrollbar-fade-enter-from,.aah-scrollbar-fade-leave-active{opacity:0}.aah-breadcrumb{font-size:14px;line-height:1}.aah-breadcrumb:before,.aah-breadcrumb:after{display:table;content:""}.aah-breadcrumb:after{clear:both}.aah-breadcrumb__separator{margin:0 9px;font-weight:700;color:var(--aah-text-color-placeholder)}.aah-breadcrumb__separator.aah-icon{margin:0 6px;font-weight:400}.aah-breadcrumb__separator.aah-icon svg{vertical-align:middle}.aah-breadcrumb__item{float:left;display:inline-flex;align-items:center}.aah-breadcrumb__inner{color:var(--aah-text-color-regular)}.aah-breadcrumb__inner.is-link,.aah-breadcrumb__inner a{font-weight:700;text-decoration:none;transition:var(--aah-transition-color);color:var(--aah-text-color-primary)}.aah-breadcrumb__inner.is-link:hover,.aah-breadcrumb__inner a:hover{color:var(--aah-color-primary);cursor:pointer}.aah-breadcrumb__item:last-child .aah-breadcrumb__inner,.aah-breadcrumb__item:last-child .aah-breadcrumb__inner:hover,.aah-breadcrumb__item:last-child .aah-breadcrumb__inner a,.aah-breadcrumb__item:last-child .aah-breadcrumb__inner a:hover{font-weight:400;color:var(--aah-text-color-regular);cursor:text}.aah-breadcrumb__item:last-child .aah-breadcrumb__separator{display:none}.aah-button{--aah-button-font-weight: var(--aah-font-weight-primary);--aah-button-border-color: var(--aah-border-color);--aah-button-bg-color: var(--aah-fill-color-blank);--aah-button-text-color: var(--aah-text-color-regular);--aah-button-disabled-text-color: var(--aah-disabled-text-color);--aah-button-disabled-bg-color: var(--aah-fill-color-blank);--aah-button-disabled-border-color: var(--aah-border-color-light);--aah-button-divide-border-color: rgba(255, 255, 255, .5);--aah-button-hover-text-color: var(--aah-color-primary);--aah-button-hover-bg-color: var(--aah-color-primary-light-9);--aah-button-hover-border-color: var(--aah-color-primary-light-7);--aah-button-active-text-color: var(--aah-button-hover-text-color);--aah-button-active-border-color: var(--aah-color-primary);--aah-button-active-bg-color: var(--aah-button-hover-bg-color);--aah-button-outline-color: var(--aah-color-primary-light-5);--aah-button-hover-link-text-color: var(--aah-color-info);--aah-button-active-color: var(--aah-text-color-primary)}.aah-button{display:inline-flex;justify-content:center;align-items:center;line-height:1;height:32px;white-space:nowrap;cursor:pointer;color:var(--aah-button-text-color);text-align:center;box-sizing:border-box;outline:none;transition:.1s;font-weight:var(--aah-button-font-weight);-webkit-user-select:none;user-select:none;vertical-align:middle;-webkit-appearance:none;background-color:var(--aah-button-bg-color);border:var(--aah-border);border-color:var(--aah-button-border-color);padding:8px 15px;font-size:var(--aah-font-size-base);border-radius:var(--aah-border-radius-base)}.aah-button:hover{color:var(--aah-button-hover-text-color);border-color:var(--aah-button-hover-border-color);background-color:var(--aah-button-hover-bg-color);outline:none}.aah-button:active{color:var(--aah-button-active-text-color);border-color:var(--aah-button-active-border-color);background-color:var(--aah-button-active-bg-color);outline:none}.aah-button:focus-visible{outline:2px solid var(--aah-button-outline-color);outline-offset:1px;transition:outline-offset 0s,outline 0s}.aah-button>span{display:inline-flex;align-items:center}.aah-button+.aah-button{margin-left:12px}.aah-button.is-round{padding:8px 15px}.aah-button::-moz-focus-inner{border:0}.aah-button [class*=aah-icon]+span{margin-left:6px}.aah-button [class*=aah-icon] svg{vertical-align:bottom}.aah-button.is-plain{--aah-button-hover-text-color: var(--aah-color-primary);--aah-button-hover-bg-color: var(--aah-fill-color-blank);--aah-button-hover-border-color: var(--aah-color-primary)}.aah-button.is-active{color:var(--aah-button-active-text-color);border-color:var(--aah-button-active-border-color);background-color:var(--aah-button-active-bg-color);outline:none}.aah-button.is-disabled,.aah-button.is-disabled:hover{color:var(--aah-button-disabled-text-color);cursor:not-allowed;background-image:none;background-color:var(--aah-button-disabled-bg-color);border-color:var(--aah-button-disabled-border-color)}.aah-button.is-loading{position:relative;pointer-events:none}.aah-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(--aah-mask-color-extra-light)}.aah-button.is-round{border-radius:var(--aah-border-radius-round)}.aah-button.is-circle{width:32px;border-radius:50%;padding:8px}.aah-button.is-text{color:var(--aah-button-text-color);border:0 solid transparent;background-color:transparent}.aah-button.is-text.is-disabled{color:var(--aah-button-disabled-text-color);background-color:transparent!important}.aah-button.is-text:not(.is-disabled):hover{background-color:var(--aah-fill-color-light)}.aah-button.is-text:not(.is-disabled):focus-visible{outline:2px solid var(--aah-button-outline-color);outline-offset:1px;transition:outline-offset 0s,outline 0s}.aah-button.is-text:not(.is-disabled):active{background-color:var(--aah-fill-color)}.aah-button.is-text:not(.is-disabled).is-has-bg{background-color:var(--aah-fill-color-light)}.aah-button.is-text:not(.is-disabled).is-has-bg:hover{background-color:var(--aah-fill-color)}.aah-button.is-text:not(.is-disabled).is-has-bg:active{background-color:var(--aah-fill-color-dark)}.aah-button__text--expand{letter-spacing:.3em;margin-right:-.3em}.aah-button.is-link{border-color:transparent;color:var(--aah-button-text-color);background:transparent;padding:2px;height:auto}.aah-button.is-link:hover{color:var(--aah-button-hover-link-text-color)}.aah-button.is-link.is-disabled{color:var(--aah-button-disabled-text-color);background-color:transparent!important;border-color:transparent!important}.aah-button.is-link:not(.is-disabled):hover{border-color:transparent;background-color:transparent}.aah-button.is-link:not(.is-disabled):active{color:var(--aah-button-active-color);border-color:transparent;background-color:transparent}.aah-button--text{border-color:transparent;background:transparent;color:var(--aah-color-primary);padding-left:0;padding-right:0}.aah-button--text.is-disabled{color:var(--aah-button-disabled-text-color);background-color:transparent!important;border-color:transparent!important}.aah-button--text:not(.is-disabled):hover{color:var(--aah-color-primary-light-3);border-color:transparent;background-color:transparent}.aah-button--text:not(.is-disabled):active{color:var(--aah-color-primary-dark-2);border-color:transparent;background-color:transparent}.aah-button__link--expand{letter-spacing:.3em;margin-right:-.3em}.aah-button--primary{--aah-button-text-color: var(--aah-color-white);--aah-button-bg-color: var(--aah-color-primary);--aah-button-border-color: var(--aah-color-primary);--aah-button-outline-color: var(--aah-color-primary-light-5);--aah-button-active-color: var(--aah-color-primary-dark-2);--aah-button-hover-text-color: var(--aah-color-white);--aah-button-hover-link-text-color: var(--aah-color-primary-light-5);--aah-button-hover-bg-color: var(--aah-color-primary-light-3);--aah-button-hover-border-color: var(--aah-color-primary-light-3);--aah-button-active-bg-color: var(--aah-color-primary-dark-2);--aah-button-active-border-color: var(--aah-color-primary-dark-2);--aah-button-disabled-text-color: var(--aah-color-white);--aah-button-disabled-bg-color: var(--aah-color-primary-light-5);--aah-button-disabled-border-color: var(--aah-color-primary-light-5)}.aah-button--primary.is-plain,.aah-button--primary.is-text,.aah-button--primary.is-link{--aah-button-text-color: var(--aah-color-primary);--aah-button-bg-color: var(--aah-color-primary-light-9);--aah-button-border-color: var(--aah-color-primary-light-5);--aah-button-hover-text-color: var(--aah-color-white);--aah-button-hover-bg-color: var(--aah-color-primary);--aah-button-hover-border-color: var(--aah-color-primary);--aah-button-active-text-color: var(--aah-color-white)}.aah-button--primary.is-plain.is-disabled,.aah-button--primary.is-plain.is-disabled:hover,.aah-button--primary.is-plain.is-disabled:focus,.aah-button--primary.is-plain.is-disabled:active,.aah-button--primary.is-text.is-disabled,.aah-button--primary.is-text.is-disabled:hover,.aah-button--primary.is-text.is-disabled:focus,.aah-button--primary.is-text.is-disabled:active,.aah-button--primary.is-link.is-disabled,.aah-button--primary.is-link.is-disabled:hover,.aah-button--primary.is-link.is-disabled:focus,.aah-button--primary.is-link.is-disabled:active{color:var(--aah-color-primary-light-5);background-color:var(--aah-color-primary-light-9);border-color:var(--aah-color-primary-light-8)}.aah-button--success{--aah-button-text-color: var(--aah-color-white);--aah-button-bg-color: var(--aah-color-success);--aah-button-border-color: var(--aah-color-success);--aah-button-outline-color: var(--aah-color-success-light-5);--aah-button-active-color: var(--aah-color-success-dark-2);--aah-button-hover-text-color: var(--aah-color-white);--aah-button-hover-link-text-color: var(--aah-color-success-light-5);--aah-button-hover-bg-color: var(--aah-color-success-light-3);--aah-button-hover-border-color: var(--aah-color-success-light-3);--aah-button-active-bg-color: var(--aah-color-success-dark-2);--aah-button-active-border-color: var(--aah-color-success-dark-2);--aah-button-disabled-text-color: var(--aah-color-white);--aah-button-disabled-bg-color: var(--aah-color-success-light-5);--aah-button-disabled-border-color: var(--aah-color-success-light-5)}.aah-button--success.is-plain,.aah-button--success.is-text,.aah-button--success.is-link{--aah-button-text-color: var(--aah-color-success);--aah-button-bg-color: var(--aah-color-success-light-9);--aah-button-border-color: var(--aah-color-success-light-5);--aah-button-hover-text-color: var(--aah-color-white);--aah-button-hover-bg-color: var(--aah-color-success);--aah-button-hover-border-color: var(--aah-color-success);--aah-button-active-text-color: var(--aah-color-white)}.aah-button--success.is-plain.is-disabled,.aah-button--success.is-plain.is-disabled:hover,.aah-button--success.is-plain.is-disabled:focus,.aah-button--success.is-plain.is-disabled:active,.aah-button--success.is-text.is-disabled,.aah-button--success.is-text.is-disabled:hover,.aah-button--success.is-text.is-disabled:focus,.aah-button--success.is-text.is-disabled:active,.aah-button--success.is-link.is-disabled,.aah-button--success.is-link.is-disabled:hover,.aah-button--success.is-link.is-disabled:focus,.aah-button--success.is-link.is-disabled:active{color:var(--aah-color-success-light-5);background-color:var(--aah-color-success-light-9);border-color:var(--aah-color-success-light-8)}.aah-button--warning{--aah-button-text-color: var(--aah-color-white);--aah-button-bg-color: var(--aah-color-warning);--aah-button-border-color: var(--aah-color-warning);--aah-button-outline-color: var(--aah-color-warning-light-5);--aah-button-active-color: var(--aah-color-warning-dark-2);--aah-button-hover-text-color: var(--aah-color-white);--aah-button-hover-link-text-color: var(--aah-color-warning-light-5);--aah-button-hover-bg-color: var(--aah-color-warning-light-3);--aah-button-hover-border-color: var(--aah-color-warning-light-3);--aah-button-active-bg-color: var(--aah-color-warning-dark-2);--aah-button-active-border-color: var(--aah-color-warning-dark-2);--aah-button-disabled-text-color: var(--aah-color-white);--aah-button-disabled-bg-color: var(--aah-color-warning-light-5);--aah-button-disabled-border-color: var(--aah-color-warning-light-5)}.aah-button--warning.is-plain,.aah-button--warning.is-text,.aah-button--warning.is-link{--aah-button-text-color: var(--aah-color-warning);--aah-button-bg-color: var(--aah-color-warning-light-9);--aah-button-border-color: var(--aah-color-warning-light-5);--aah-button-hover-text-color: var(--aah-color-white);--aah-button-hover-bg-color: var(--aah-color-warning);--aah-button-hover-border-color: var(--aah-color-warning);--aah-button-active-text-color: var(--aah-color-white)}.aah-button--warning.is-plain.is-disabled,.aah-button--warning.is-plain.is-disabled:hover,.aah-button--warning.is-plain.is-disabled:focus,.aah-button--warning.is-plain.is-disabled:active,.aah-button--warning.is-text.is-disabled,.aah-button--warning.is-text.is-disabled:hover,.aah-button--warning.is-text.is-disabled:focus,.aah-button--warning.is-text.is-disabled:active,.aah-button--warning.is-link.is-disabled,.aah-button--warning.is-link.is-disabled:hover,.aah-button--warning.is-link.is-disabled:focus,.aah-button--warning.is-link.is-disabled:active{color:var(--aah-color-warning-light-5);background-color:var(--aah-color-warning-light-9);border-color:var(--aah-color-warning-light-8)}.aah-button--danger{--aah-button-text-color: var(--aah-color-white);--aah-button-bg-color: var(--aah-color-danger);--aah-button-border-color: var(--aah-color-danger);--aah-button-outline-color: var(--aah-color-danger-light-5);--aah-button-active-color: var(--aah-color-danger-dark-2);--aah-button-hover-text-color: var(--aah-color-white);--aah-button-hover-link-text-color: var(--aah-color-danger-light-5);--aah-button-hover-bg-color: var(--aah-color-danger-light-3);--aah-button-hover-border-color: var(--aah-color-danger-light-3);--aah-button-active-bg-color: var(--aah-color-danger-dark-2);--aah-button-active-border-color: var(--aah-color-danger-dark-2);--aah-button-disabled-text-color: var(--aah-color-white);--aah-button-disabled-bg-color: var(--aah-color-danger-light-5);--aah-button-disabled-border-color: var(--aah-color-danger-light-5)}.aah-button--danger.is-plain,.aah-button--danger.is-text,.aah-button--danger.is-link{--aah-button-text-color: var(--aah-color-danger);--aah-button-bg-color: var(--aah-color-danger-light-9);--aah-button-border-color: var(--aah-color-danger-light-5);--aah-button-hover-text-color: var(--aah-color-white);--aah-button-hover-bg-color: var(--aah-color-danger);--aah-button-hover-border-color: var(--aah-color-danger);--aah-button-active-text-color: var(--aah-color-white)}.aah-button--danger.is-plain.is-disabled,.aah-button--danger.is-plain.is-disabled:hover,.aah-button--danger.is-plain.is-disabled:focus,.aah-button--danger.is-plain.is-disabled:active,.aah-button--danger.is-text.is-disabled,.aah-button--danger.is-text.is-disabled:hover,.aah-button--danger.is-text.is-disabled:focus,.aah-button--danger.is-text.is-disabled:active,.aah-button--danger.is-link.is-disabled,.aah-button--danger.is-link.is-disabled:hover,.aah-button--danger.is-link.is-disabled:focus,.aah-button--danger.is-link.is-disabled:active{color:var(--aah-color-danger-light-5);background-color:var(--aah-color-danger-light-9);border-color:var(--aah-color-danger-light-8)}.aah-button--info{--aah-button-text-color: var(--aah-color-white);--aah-button-bg-color: var(--aah-color-info);--aah-button-border-color: var(--aah-color-info);--aah-button-outline-color: var(--aah-color-info-light-5);--aah-button-active-color: var(--aah-color-info-dark-2);--aah-button-hover-text-color: var(--aah-color-white);--aah-button-hover-link-text-color: var(--aah-color-info-light-5);--aah-button-hover-bg-color: var(--aah-color-info-light-3);--aah-button-hover-border-color: var(--aah-color-info-light-3);--aah-button-active-bg-color: var(--aah-color-info-dark-2);--aah-button-active-border-color: var(--aah-color-info-dark-2);--aah-button-disabled-text-color: var(--aah-color-white);--aah-button-disabled-bg-color: var(--aah-color-info-light-5);--aah-button-disabled-border-color: var(--aah-color-info-light-5)}.aah-button--info.is-plain,.aah-button--info.is-text,.aah-button--info.is-link{--aah-button-text-color: var(--aah-color-info);--aah-button-bg-color: var(--aah-color-info-light-9);--aah-button-border-color: var(--aah-color-info-light-5);--aah-button-hover-text-color: var(--aah-color-white);--aah-button-hover-bg-color: var(--aah-color-info);--aah-button-hover-border-color: var(--aah-color-info);--aah-button-active-text-color: var(--aah-color-white)}.aah-button--info.is-plain.is-disabled,.aah-button--info.is-plain.is-disabled:hover,.aah-button--info.is-plain.is-disabled:focus,.aah-button--info.is-plain.is-disabled:active,.aah-button--info.is-text.is-disabled,.aah-button--info.is-text.is-disabled:hover,.aah-button--info.is-text.is-disabled:focus,.aah-button--info.is-text.is-disabled:active,.aah-button--info.is-link.is-disabled,.aah-button--info.is-link.is-disabled:hover,.aah-button--info.is-link.is-disabled:focus,.aah-button--info.is-link.is-disabled:active{color:var(--aah-color-info-light-5);background-color:var(--aah-color-info-light-9);border-color:var(--aah-color-info-light-8)}.aah-button--large{--aah-button-size: 40px;height:var(--aah-button-size);padding:12px 19px;font-size:var(--aah-font-size-base);border-radius:var(--aah-border-radius-base)}.aah-button--large [class*=aah-icon]+span{margin-left:8px}.aah-button--large.is-round{padding:12px 19px}.aah-button--large.is-circle{width:var(--aah-button-size);padding:12px}.aah-button--small{--aah-button-size: 24px;height:var(--aah-button-size);padding:5px 11px;font-size:12px;border-radius:calc(var(--aah-border-radius-base) - 1px)}.aah-button--small [class*=aah-icon]+span{margin-left:4px}.aah-button--small.is-round{padding:5px 11px}.aah-button--small.is-circle{width:var(--aah-button-size);padding:5px}.aah-row{display:flex;flex-wrap:wrap;position:relative;box-sizing:border-box}.aah-row.is-justify-center{justify-content:center}.aah-row.is-justify-end{justify-content:flex-end}.aah-row.is-justify-space-between{justify-content:space-between}.aah-row.is-justify-space-around{justify-content:space-around}.aah-row.is-justify-space-evenly{justify-content:space-evenly}.aah-row.is-align-top{align-items:flex-start}.aah-row.is-align-middle{align-items:center}.aah-row.is-align-bottom{align-items:flex-end}[class*=aah-col-]{box-sizing:border-box}[class*=aah-col-].is-guttered{display:block;min-height:1px}.aah-col-0,.aah-col-0.is-guttered{display:none}.aah-col-0{max-width:0%;flex:0 0 0%}.aah-col-offset-0{margin-left:0%}.aah-col-pull-0{position:relative;right:0%}.aah-col-push-0{position:relative;left:0%}.aah-col-1{max-width:4.1666666667%;flex:0 0 4.1666666667%}.aah-col-offset-1{margin-left:4.1666666667%}.aah-col-pull-1{position:relative;right:4.1666666667%}.aah-col-push-1{position:relative;left:4.1666666667%}.aah-col-2{max-width:8.3333333333%;flex:0 0 8.3333333333%}.aah-col-offset-2{margin-left:8.3333333333%}.aah-col-pull-2{position:relative;right:8.3333333333%}.aah-col-push-2{position:relative;left:8.3333333333%}.aah-col-3{max-width:12.5%;flex:0 0 12.5%}.aah-col-offset-3{margin-left:12.5%}.aah-col-pull-3{position:relative;right:12.5%}.aah-col-push-3{position:relative;left:12.5%}.aah-col-4{max-width:16.6666666667%;flex:0 0 16.6666666667%}.aah-col-offset-4{margin-left:16.6666666667%}.aah-col-pull-4{position:relative;right:16.6666666667%}.aah-col-push-4{position:relative;left:16.6666666667%}.aah-col-5{max-width:20.8333333333%;flex:0 0 20.8333333333%}.aah-col-offset-5{margin-left:20.8333333333%}.aah-col-pull-5{position:relative;right:20.8333333333%}.aah-col-push-5{position:relative;left:20.8333333333%}.aah-col-6{max-width:25%;flex:0 0 25%}.aah-col-offset-6{margin-left:25%}.aah-col-pull-6{position:relative;right:25%}.aah-col-push-6{position:relative;left:25%}.aah-col-7{max-width:29.1666666667%;flex:0 0 29.1666666667%}.aah-col-offset-7{margin-left:29.1666666667%}.aah-col-pull-7{position:relative;right:29.1666666667%}.aah-col-push-7{position:relative;left:29.1666666667%}.aah-col-8{max-width:33.3333333333%;flex:0 0 33.3333333333%}.aah-col-offset-8{margin-left:33.3333333333%}.aah-col-pull-8{position:relative;right:33.3333333333%}.aah-col-push-8{position:relative;left:33.3333333333%}.aah-col-9{max-width:37.5%;flex:0 0 37.5%}.aah-col-offset-9{margin-left:37.5%}.aah-col-pull-9{position:relative;right:37.5%}.aah-col-push-9{position:relative;left:37.5%}.aah-col-10{max-width:41.6666666667%;flex:0 0 41.6666666667%}.aah-col-offset-10{margin-left:41.6666666667%}.aah-col-pull-10{position:relative;right:41.6666666667%}.aah-col-push-10{position:relative;left:41.6666666667%}.aah-col-11{max-width:45.8333333333%;flex:0 0 45.8333333333%}.aah-col-offset-11{margin-left:45.8333333333%}.aah-col-pull-11{position:relative;right:45.8333333333%}.aah-col-push-11{position:relative;left:45.8333333333%}.aah-col-12{max-width:50%;flex:0 0 50%}.aah-col-offset-12{margin-left:50%}.aah-col-pull-12{position:relative;right:50%}.aah-col-push-12{position:relative;left:50%}.aah-col-13{max-width:54.1666666667%;flex:0 0 54.1666666667%}.aah-col-offset-13{margin-left:54.1666666667%}.aah-col-pull-13{position:relative;right:54.1666666667%}.aah-col-push-13{position:relative;left:54.1666666667%}.aah-col-14{max-width:58.3333333333%;flex:0 0 58.3333333333%}.aah-col-offset-14{margin-left:58.3333333333%}.aah-col-pull-14{position:relative;right:58.3333333333%}.aah-col-push-14{position:relative;left:58.3333333333%}.aah-col-15{max-width:62.5%;flex:0 0 62.5%}.aah-col-offset-15{margin-left:62.5%}.aah-col-pull-15{position:relative;right:62.5%}.aah-col-push-15{position:relative;left:62.5%}.aah-col-16{max-width:66.6666666667%;flex:0 0 66.6666666667%}.aah-col-offset-16{margin-left:66.6666666667%}.aah-col-pull-16{position:relative;right:66.6666666667%}.aah-col-push-16{position:relative;left:66.6666666667%}.aah-col-17{max-width:70.8333333333%;flex:0 0 70.8333333333%}.aah-col-offset-17{margin-left:70.8333333333%}.aah-col-pull-17{position:relative;right:70.8333333333%}.aah-col-push-17{position:relative;left:70.8333333333%}.aah-col-18{max-width:75%;flex:0 0 75%}.aah-col-offset-18{margin-left:75%}.aah-col-pull-18{position:relative;right:75%}.aah-col-push-18{position:relative;left:75%}.aah-col-19{max-width:79.1666666667%;flex:0 0 79.1666666667%}.aah-col-offset-19{margin-left:79.1666666667%}.aah-col-pull-19{position:relative;right:79.1666666667%}.aah-col-push-19{position:relative;left:79.1666666667%}.aah-col-20{max-width:83.3333333333%;flex:0 0 83.3333333333%}.aah-col-offset-20{margin-left:83.3333333333%}.aah-col-pull-20{position:relative;right:83.3333333333%}.aah-col-push-20{position:relative;left:83.3333333333%}.aah-col-21{max-width:87.5%;flex:0 0 87.5%}.aah-col-offset-21{margin-left:87.5%}.aah-col-pull-21{position:relative;right:87.5%}.aah-col-push-21{position:relative;left:87.5%}.aah-col-22{max-width:91.6666666667%;flex:0 0 91.6666666667%}.aah-col-offset-22{margin-left:91.6666666667%}.aah-col-pull-22{position:relative;right:91.6666666667%}.aah-col-push-22{position:relative;left:91.6666666667%}.aah-col-23{max-width:95.8333333333%;flex:0 0 95.8333333333%}.aah-col-offset-23{margin-left:95.8333333333%}.aah-col-pull-23{position:relative;right:95.8333333333%}.aah-col-push-23{position:relative;left:95.8333333333%}.aah-col-24{max-width:100%;flex:0 0 100%}.aah-col-offset-24{margin-left:100%}.aah-col-pull-24{position:relative;right:100%}.aah-col-push-24{position:relative;left:100%}@media only screen and (max-width: 767px){.aah-col-xs-0,.aah-col-xs-0.is-guttered{display:none}.aah-col-xs-0{max-width:0%;flex:0 0 0%}.aah-col-xs-offset-0{margin-left:0%}.aah-col-xs-pull-0{position:relative;right:0%}.aah-col-xs-push-0{position:relative;left:0%}.aah-col-xs-1{display:block;max-width:4.1666666667%;flex:0 0 4.1666666667%}.aah-col-xs-offset-1{margin-left:4.1666666667%}.aah-col-xs-pull-1{position:relative;right:4.1666666667%}.aah-col-xs-push-1{position:relative;left:4.1666666667%}.aah-col-xs-2{display:block;max-width:8.3333333333%;flex:0 0 8.3333333333%}.aah-col-xs-offset-2{margin-left:8.3333333333%}.aah-col-xs-pull-2{position:relative;right:8.3333333333%}.aah-col-xs-push-2{position:relative;left:8.3333333333%}.aah-col-xs-3{display:block;max-width:12.5%;flex:0 0 12.5%}.aah-col-xs-offset-3{margin-left:12.5%}.aah-col-xs-pull-3{position:relative;right:12.5%}.aah-col-xs-push-3{position:relative;left:12.5%}.aah-col-xs-4{display:block;max-width:16.6666666667%;flex:0 0 16.6666666667%}.aah-col-xs-offset-4{margin-left:16.6666666667%}.aah-col-xs-pull-4{position:relative;right:16.6666666667%}.aah-col-xs-push-4{position:relative;left:16.6666666667%}.aah-col-xs-5{display:block;max-width:20.8333333333%;flex:0 0 20.8333333333%}.aah-col-xs-offset-5{margin-left:20.8333333333%}.aah-col-xs-pull-5{position:relative;right:20.8333333333%}.aah-col-xs-push-5{position:relative;left:20.8333333333%}.aah-col-xs-6{display:block;max-width:25%;flex:0 0 25%}.aah-col-xs-offset-6{margin-left:25%}.aah-col-xs-pull-6{position:relative;right:25%}.aah-col-xs-push-6{position:relative;left:25%}.aah-col-xs-7{display:block;max-width:29.1666666667%;flex:0 0 29.1666666667%}.aah-col-xs-offset-7{margin-left:29.1666666667%}.aah-col-xs-pull-7{position:relative;right:29.1666666667%}.aah-col-xs-push-7{position:relative;left:29.1666666667%}.aah-col-xs-8{display:block;max-width:33.3333333333%;flex:0 0 33.3333333333%}.aah-col-xs-offset-8{margin-left:33.3333333333%}.aah-col-xs-pull-8{position:relative;right:33.3333333333%}.aah-col-xs-push-8{position:relative;left:33.3333333333%}.aah-col-xs-9{display:block;max-width:37.5%;flex:0 0 37.5%}.aah-col-xs-offset-9{margin-left:37.5%}.aah-col-xs-pull-9{position:relative;right:37.5%}.aah-col-xs-push-9{position:relative;left:37.5%}.aah-col-xs-10{display:block;max-width:41.6666666667%;flex:0 0 41.6666666667%}.aah-col-xs-offset-10{margin-left:41.6666666667%}.aah-col-xs-pull-10{position:relative;right:41.6666666667%}.aah-col-xs-push-10{position:relative;left:41.6666666667%}.aah-col-xs-11{display:block;max-width:45.8333333333%;flex:0 0 45.8333333333%}.aah-col-xs-offset-11{margin-left:45.8333333333%}.aah-col-xs-pull-11{position:relative;right:45.8333333333%}.aah-col-xs-push-11{position:relative;left:45.8333333333%}.aah-col-xs-12{display:block;max-width:50%;flex:0 0 50%}.aah-col-xs-offset-12{margin-left:50%}.aah-col-xs-pull-12{position:relative;right:50%}.aah-col-xs-push-12{position:relative;left:50%}.aah-col-xs-13{display:block;max-width:54.1666666667%;flex:0 0 54.1666666667%}.aah-col-xs-offset-13{margin-left:54.1666666667%}.aah-col-xs-pull-13{position:relative;right:54.1666666667%}.aah-col-xs-push-13{position:relative;left:54.1666666667%}.aah-col-xs-14{display:block;max-width:58.3333333333%;flex:0 0 58.3333333333%}.aah-col-xs-offset-14{margin-left:58.3333333333%}.aah-col-xs-pull-14{position:relative;right:58.3333333333%}.aah-col-xs-push-14{position:relative;left:58.3333333333%}.aah-col-xs-15{display:block;max-width:62.5%;flex:0 0 62.5%}.aah-col-xs-offset-15{margin-left:62.5%}.aah-col-xs-pull-15{position:relative;right:62.5%}.aah-col-xs-push-15{position:relative;left:62.5%}.aah-col-xs-16{display:block;max-width:66.6666666667%;flex:0 0 66.6666666667%}.aah-col-xs-offset-16{margin-left:66.6666666667%}.aah-col-xs-pull-16{position:relative;right:66.6666666667%}.aah-col-xs-push-16{position:relative;left:66.6666666667%}.aah-col-xs-17{display:block;max-width:70.8333333333%;flex:0 0 70.8333333333%}.aah-col-xs-offset-17{margin-left:70.8333333333%}.aah-col-xs-pull-17{position:relative;right:70.8333333333%}.aah-col-xs-push-17{position:relative;left:70.8333333333%}.aah-col-xs-18{display:block;max-width:75%;flex:0 0 75%}.aah-col-xs-offset-18{margin-left:75%}.aah-col-xs-pull-18{position:relative;right:75%}.aah-col-xs-push-18{position:relative;left:75%}.aah-col-xs-19{display:block;max-width:79.1666666667%;flex:0 0 79.1666666667%}.aah-col-xs-offset-19{margin-left:79.1666666667%}.aah-col-xs-pull-19{position:relative;right:79.1666666667%}.aah-col-xs-push-19{position:relative;left:79.1666666667%}.aah-col-xs-20{display:block;max-width:83.3333333333%;flex:0 0 83.3333333333%}.aah-col-xs-offset-20{margin-left:83.3333333333%}.aah-col-xs-pull-20{position:relative;right:83.3333333333%}.aah-col-xs-push-20{position:relative;left:83.3333333333%}.aah-col-xs-21{display:block;max-width:87.5%;flex:0 0 87.5%}.aah-col-xs-offset-21{margin-left:87.5%}.aah-col-xs-pull-21{position:relative;right:87.5%}.aah-col-xs-push-21{position:relative;left:87.5%}.aah-col-xs-22{display:block;max-width:91.6666666667%;flex:0 0 91.6666666667%}.aah-col-xs-offset-22{margin-left:91.6666666667%}.aah-col-xs-pull-22{position:relative;right:91.6666666667%}.aah-col-xs-push-22{position:relative;left:91.6666666667%}.aah-col-xs-23{display:block;max-width:95.8333333333%;flex:0 0 95.8333333333%}.aah-col-xs-offset-23{margin-left:95.8333333333%}.aah-col-xs-pull-23{position:relative;right:95.8333333333%}.aah-col-xs-push-23{position:relative;left:95.8333333333%}.aah-col-xs-24{display:block;max-width:100%;flex:0 0 100%}.aah-col-xs-offset-24{margin-left:100%}.aah-col-xs-pull-24{position:relative;right:100%}.aah-col-xs-push-24{position:relative;left:100%}}@media only screen and (min-width: 768px){.aah-col-sm-0,.aah-col-sm-0.is-guttered{display:none}.aah-col-sm-0{max-width:0%;flex:0 0 0%}.aah-col-sm-offset-0{margin-left:0%}.aah-col-sm-pull-0{position:relative;right:0%}.aah-col-sm-push-0{position:relative;left:0%}.aah-col-sm-1{display:block;max-width:4.1666666667%;flex:0 0 4.1666666667%}.aah-col-sm-offset-1{margin-left:4.1666666667%}.aah-col-sm-pull-1{position:relative;right:4.1666666667%}.aah-col-sm-push-1{position:relative;left:4.1666666667%}.aah-col-sm-2{display:block;max-width:8.3333333333%;flex:0 0 8.3333333333%}.aah-col-sm-offset-2{margin-left:8.3333333333%}.aah-col-sm-pull-2{position:relative;right:8.3333333333%}.aah-col-sm-push-2{position:relative;left:8.3333333333%}.aah-col-sm-3{display:block;max-width:12.5%;flex:0 0 12.5%}.aah-col-sm-offset-3{margin-left:12.5%}.aah-col-sm-pull-3{position:relative;right:12.5%}.aah-col-sm-push-3{position:relative;left:12.5%}.aah-col-sm-4{display:block;max-width:16.6666666667%;flex:0 0 16.6666666667%}.aah-col-sm-offset-4{margin-left:16.6666666667%}.aah-col-sm-pull-4{position:relative;right:16.6666666667%}.aah-col-sm-push-4{position:relative;left:16.6666666667%}.aah-col-sm-5{display:block;max-width:20.8333333333%;flex:0 0 20.8333333333%}.aah-col-sm-offset-5{margin-left:20.8333333333%}.aah-col-sm-pull-5{position:relative;right:20.8333333333%}.aah-col-sm-push-5{position:relative;left:20.8333333333%}.aah-col-sm-6{display:block;max-width:25%;flex:0 0 25%}.aah-col-sm-offset-6{margin-left:25%}.aah-col-sm-pull-6{position:relative;right:25%}.aah-col-sm-push-6{position:relative;left:25%}.aah-col-sm-7{display:block;max-width:29.1666666667%;flex:0 0 29.1666666667%}.aah-col-sm-offset-7{margin-left:29.1666666667%}.aah-col-sm-pull-7{position:relative;right:29.1666666667%}.aah-col-sm-push-7{position:relative;left:29.1666666667%}.aah-col-sm-8{display:block;max-width:33.3333333333%;flex:0 0 33.3333333333%}.aah-col-sm-offset-8{margin-left:33.3333333333%}.aah-col-sm-pull-8{position:relative;right:33.3333333333%}.aah-col-sm-push-8{position:relative;left:33.3333333333%}.aah-col-sm-9{display:block;max-width:37.5%;flex:0 0 37.5%}.aah-col-sm-offset-9{margin-left:37.5%}.aah-col-sm-pull-9{position:relative;right:37.5%}.aah-col-sm-push-9{position:relative;left:37.5%}.aah-col-sm-10{display:block;max-width:41.6666666667%;flex:0 0 41.6666666667%}.aah-col-sm-offset-10{margin-left:41.6666666667%}.aah-col-sm-pull-10{position:relative;right:41.6666666667%}.aah-col-sm-push-10{position:relative;left:41.6666666667%}.aah-col-sm-11{display:block;max-width:45.8333333333%;flex:0 0 45.8333333333%}.aah-col-sm-offset-11{margin-left:45.8333333333%}.aah-col-sm-pull-11{position:relative;right:45.8333333333%}.aah-col-sm-push-11{position:relative;left:45.8333333333%}.aah-col-sm-12{display:block;max-width:50%;flex:0 0 50%}.aah-col-sm-offset-12{margin-left:50%}.aah-col-sm-pull-12{position:relative;right:50%}.aah-col-sm-push-12{position:relative;left:50%}.aah-col-sm-13{display:block;max-width:54.1666666667%;flex:0 0 54.1666666667%}.aah-col-sm-offset-13{margin-left:54.1666666667%}.aah-col-sm-pull-13{position:relative;right:54.1666666667%}.aah-col-sm-push-13{position:relative;left:54.1666666667%}.aah-col-sm-14{display:block;max-width:58.3333333333%;flex:0 0 58.3333333333%}.aah-col-sm-offset-14{margin-left:58.3333333333%}.aah-col-sm-pull-14{position:relative;right:58.3333333333%}.aah-col-sm-push-14{position:relative;left:58.3333333333%}.aah-col-sm-15{display:block;max-width:62.5%;flex:0 0 62.5%}.aah-col-sm-offset-15{margin-left:62.5%}.aah-col-sm-pull-15{position:relative;right:62.5%}.aah-col-sm-push-15{position:relative;left:62.5%}.aah-col-sm-16{display:block;max-width:66.6666666667%;flex:0 0 66.6666666667%}.aah-col-sm-offset-16{margin-left:66.6666666667%}.aah-col-sm-pull-16{position:relative;right:66.6666666667%}.aah-col-sm-push-16{position:relative;left:66.6666666667%}.aah-col-sm-17{display:block;max-width:70.8333333333%;flex:0 0 70.8333333333%}.aah-col-sm-offset-17{margin-left:70.8333333333%}.aah-col-sm-pull-17{position:relative;right:70.8333333333%}.aah-col-sm-push-17{position:relative;left:70.8333333333%}.aah-col-sm-18{display:block;max-width:75%;flex:0 0 75%}.aah-col-sm-offset-18{margin-left:75%}.aah-col-sm-pull-18{position:relative;right:75%}.aah-col-sm-push-18{position:relative;left:75%}.aah-col-sm-19{display:block;max-width:79.1666666667%;flex:0 0 79.1666666667%}.aah-col-sm-offset-19{margin-left:79.1666666667%}.aah-col-sm-pull-19{position:relative;right:79.1666666667%}.aah-col-sm-push-19{position:relative;left:79.1666666667%}.aah-col-sm-20{display:block;max-width:83.3333333333%;flex:0 0 83.3333333333%}.aah-col-sm-offset-20{margin-left:83.3333333333%}.aah-col-sm-pull-20{position:relative;right:83.3333333333%}.aah-col-sm-push-20{position:relative;left:83.3333333333%}.aah-col-sm-21{display:block;max-width:87.5%;flex:0 0 87.5%}.aah-col-sm-offset-21{margin-left:87.5%}.aah-col-sm-pull-21{position:relative;right:87.5%}.aah-col-sm-push-21{position:relative;left:87.5%}.aah-col-sm-22{display:block;max-width:91.6666666667%;flex:0 0 91.6666666667%}.aah-col-sm-offset-22{margin-left:91.6666666667%}.aah-col-sm-pull-22{position:relative;right:91.6666666667%}.aah-col-sm-push-22{position:relative;left:91.6666666667%}.aah-col-sm-23{display:block;max-width:95.8333333333%;flex:0 0 95.8333333333%}.aah-col-sm-offset-23{margin-left:95.8333333333%}.aah-col-sm-pull-23{position:relative;right:95.8333333333%}.aah-col-sm-push-23{position:relative;left:95.8333333333%}.aah-col-sm-24{display:block;max-width:100%;flex:0 0 100%}.aah-col-sm-offset-24{margin-left:100%}.aah-col-sm-pull-24{position:relative;right:100%}.aah-col-sm-push-24{position:relative;left:100%}}@media only screen and (min-width: 992px){.aah-col-md-0,.aah-col-md-0.is-guttered{display:none}.aah-col-md-0{max-width:0%;flex:0 0 0%}.aah-col-md-offset-0{margin-left:0%}.aah-col-md-pull-0{position:relative;right:0%}.aah-col-md-push-0{position:relative;left:0%}.aah-col-md-1{display:block;max-width:4.1666666667%;flex:0 0 4.1666666667%}.aah-col-md-offset-1{margin-left:4.1666666667%}.aah-col-md-pull-1{position:relative;right:4.1666666667%}.aah-col-md-push-1{position:relative;left:4.1666666667%}.aah-col-md-2{display:block;max-width:8.3333333333%;flex:0 0 8.3333333333%}.aah-col-md-offset-2{margin-left:8.3333333333%}.aah-col-md-pull-2{position:relative;right:8.3333333333%}.aah-col-md-push-2{position:relative;left:8.3333333333%}.aah-col-md-3{display:block;max-width:12.5%;flex:0 0 12.5%}.aah-col-md-offset-3{margin-left:12.5%}.aah-col-md-pull-3{position:relative;right:12.5%}.aah-col-md-push-3{position:relative;left:12.5%}.aah-col-md-4{display:block;max-width:16.6666666667%;flex:0 0 16.6666666667%}.aah-col-md-offset-4{margin-left:16.6666666667%}.aah-col-md-pull-4{position:relative;right:16.6666666667%}.aah-col-md-push-4{position:relative;left:16.6666666667%}.aah-col-md-5{display:block;max-width:20.8333333333%;flex:0 0 20.8333333333%}.aah-col-md-offset-5{margin-left:20.8333333333%}.aah-col-md-pull-5{position:relative;right:20.8333333333%}.aah-col-md-push-5{position:relative;left:20.8333333333%}.aah-col-md-6{display:block;max-width:25%;flex:0 0 25%}.aah-col-md-offset-6{margin-left:25%}.aah-col-md-pull-6{position:relative;right:25%}.aah-col-md-push-6{position:relative;left:25%}.aah-col-md-7{display:block;max-width:29.1666666667%;flex:0 0 29.1666666667%}.aah-col-md-offset-7{margin-left:29.1666666667%}.aah-col-md-pull-7{position:relative;right:29.1666666667%}.aah-col-md-push-7{position:relative;left:29.1666666667%}.aah-col-md-8{display:block;max-width:33.3333333333%;flex:0 0 33.3333333333%}.aah-col-md-offset-8{margin-left:33.3333333333%}.aah-col-md-pull-8{position:relative;right:33.3333333333%}.aah-col-md-push-8{position:relative;left:33.3333333333%}.aah-col-md-9{display:block;max-width:37.5%;flex:0 0 37.5%}.aah-col-md-offset-9{margin-left:37.5%}.aah-col-md-pull-9{position:relative;right:37.5%}.aah-col-md-push-9{position:relative;left:37.5%}.aah-col-md-10{display:block;max-width:41.6666666667%;flex:0 0 41.6666666667%}.aah-col-md-offset-10{margin-left:41.6666666667%}.aah-col-md-pull-10{position:relative;right:41.6666666667%}.aah-col-md-push-10{position:relative;left:41.6666666667%}.aah-col-md-11{display:block;max-width:45.8333333333%;flex:0 0 45.8333333333%}.aah-col-md-offset-11{margin-left:45.8333333333%}.aah-col-md-pull-11{position:relative;right:45.8333333333%}.aah-col-md-push-11{position:relative;left:45.8333333333%}.aah-col-md-12{display:block;max-width:50%;flex:0 0 50%}.aah-col-md-offset-12{margin-left:50%}.aah-col-md-pull-12{position:relative;right:50%}.aah-col-md-push-12{position:relative;left:50%}.aah-col-md-13{display:block;max-width:54.1666666667%;flex:0 0 54.1666666667%}.aah-col-md-offset-13{margin-left:54.1666666667%}.aah-col-md-pull-13{position:relative;right:54.1666666667%}.aah-col-md-push-13{position:relative;left:54.1666666667%}.aah-col-md-14{display:block;max-width:58.3333333333%;flex:0 0 58.3333333333%}.aah-col-md-offset-14{margin-left:58.3333333333%}.aah-col-md-pull-14{position:relative;right:58.3333333333%}.aah-col-md-push-14{position:relative;left:58.3333333333%}.aah-col-md-15{display:block;max-width:62.5%;flex:0 0 62.5%}.aah-col-md-offset-15{margin-left:62.5%}.aah-col-md-pull-15{position:relative;right:62.5%}.aah-col-md-push-15{position:relative;left:62.5%}.aah-col-md-16{display:block;max-width:66.6666666667%;flex:0 0 66.6666666667%}.aah-col-md-offset-16{margin-left:66.6666666667%}.aah-col-md-pull-16{position:relative;right:66.6666666667%}.aah-col-md-push-16{position:relative;left:66.6666666667%}.aah-col-md-17{display:block;max-width:70.8333333333%;flex:0 0 70.8333333333%}.aah-col-md-offset-17{margin-left:70.8333333333%}.aah-col-md-pull-17{position:relative;right:70.8333333333%}.aah-col-md-push-17{position:relative;left:70.8333333333%}.aah-col-md-18{display:block;max-width:75%;flex:0 0 75%}.aah-col-md-offset-18{margin-left:75%}.aah-col-md-pull-18{position:relative;right:75%}.aah-col-md-push-18{position:relative;left:75%}.aah-col-md-19{display:block;max-width:79.1666666667%;flex:0 0 79.1666666667%}.aah-col-md-offset-19{margin-left:79.1666666667%}.aah-col-md-pull-19{position:relative;right:79.1666666667%}.aah-col-md-push-19{position:relative;left:79.1666666667%}.aah-col-md-20{display:block;max-width:83.3333333333%;flex:0 0 83.3333333333%}.aah-col-md-offset-20{margin-left:83.3333333333%}.aah-col-md-pull-20{position:relative;right:83.3333333333%}.aah-col-md-push-20{position:relative;left:83.3333333333%}.aah-col-md-21{display:block;max-width:87.5%;flex:0 0 87.5%}.aah-col-md-offset-21{margin-left:87.5%}.aah-col-md-pull-21{position:relative;right:87.5%}.aah-col-md-push-21{position:relative;left:87.5%}.aah-col-md-22{display:block;max-width:91.6666666667%;flex:0 0 91.6666666667%}.aah-col-md-offset-22{margin-left:91.6666666667%}.aah-col-md-pull-22{position:relative;right:91.6666666667%}.aah-col-md-push-22{position:relative;left:91.6666666667%}.aah-col-md-23{display:block;max-width:95.8333333333%;flex:0 0 95.8333333333%}.aah-col-md-offset-23{margin-left:95.8333333333%}.aah-col-md-pull-23{position:relative;right:95.8333333333%}.aah-col-md-push-23{position:relative;left:95.8333333333%}.aah-col-md-24{display:block;max-width:100%;flex:0 0 100%}.aah-col-md-offset-24{margin-left:100%}.aah-col-md-pull-24{position:relative;right:100%}.aah-col-md-push-24{position:relative;left:100%}}@media only screen and (min-width: 1200px){.aah-col-lg-0,.aah-col-lg-0.is-guttered{display:none}.aah-col-lg-0{max-width:0%;flex:0 0 0%}.aah-col-lg-offset-0{margin-left:0%}.aah-col-lg-pull-0{position:relative;right:0%}.aah-col-lg-push-0{position:relative;left:0%}.aah-col-lg-1{display:block;max-width:4.1666666667%;flex:0 0 4.1666666667%}.aah-col-lg-offset-1{margin-left:4.1666666667%}.aah-col-lg-pull-1{position:relative;right:4.1666666667%}.aah-col-lg-push-1{position:relative;left:4.1666666667%}.aah-col-lg-2{display:block;max-width:8.3333333333%;flex:0 0 8.3333333333%}.aah-col-lg-offset-2{margin-left:8.3333333333%}.aah-col-lg-pull-2{position:relative;right:8.3333333333%}.aah-col-lg-push-2{position:relative;left:8.3333333333%}.aah-col-lg-3{display:block;max-width:12.5%;flex:0 0 12.5%}.aah-col-lg-offset-3{margin-left:12.5%}.aah-col-lg-pull-3{position:relative;right:12.5%}.aah-col-lg-push-3{position:relative;left:12.5%}.aah-col-lg-4{display:block;max-width:16.6666666667%;flex:0 0 16.6666666667%}.aah-col-lg-offset-4{margin-left:16.6666666667%}.aah-col-lg-pull-4{position:relative;right:16.6666666667%}.aah-col-lg-push-4{position:relative;left:16.6666666667%}.aah-col-lg-5{display:block;max-width:20.8333333333%;flex:0 0 20.8333333333%}.aah-col-lg-offset-5{margin-left:20.8333333333%}.aah-col-lg-pull-5{position:relative;right:20.8333333333%}.aah-col-lg-push-5{position:relative;left:20.8333333333%}.aah-col-lg-6{display:block;max-width:25%;flex:0 0 25%}.aah-col-lg-offset-6{margin-left:25%}.aah-col-lg-pull-6{position:relative;right:25%}.aah-col-lg-push-6{position:relative;left:25%}.aah-col-lg-7{display:block;max-width:29.1666666667%;flex:0 0 29.1666666667%}.aah-col-lg-offset-7{margin-left:29.1666666667%}.aah-col-lg-pull-7{position:relative;right:29.1666666667%}.aah-col-lg-push-7{position:relative;left:29.1666666667%}.aah-col-lg-8{display:block;max-width:33.3333333333%;flex:0 0 33.3333333333%}.aah-col-lg-offset-8{margin-left:33.3333333333%}.aah-col-lg-pull-8{position:relative;right:33.3333333333%}.aah-col-lg-push-8{position:relative;left:33.3333333333%}.aah-col-lg-9{display:block;max-width:37.5%;flex:0 0 37.5%}.aah-col-lg-offset-9{margin-left:37.5%}.aah-col-lg-pull-9{position:relative;right:37.5%}.aah-col-lg-push-9{position:relative;left:37.5%}.aah-col-lg-10{display:block;max-width:41.6666666667%;flex:0 0 41.6666666667%}.aah-col-lg-offset-10{margin-left:41.6666666667%}.aah-col-lg-pull-10{position:relative;right:41.6666666667%}.aah-col-lg-push-10{position:relative;left:41.6666666667%}.aah-col-lg-11{display:block;max-width:45.8333333333%;flex:0 0 45.8333333333%}.aah-col-lg-offset-11{margin-left:45.8333333333%}.aah-col-lg-pull-11{position:relative;right:45.8333333333%}.aah-col-lg-push-11{position:relative;left:45.8333333333%}.aah-col-lg-12{display:block;max-width:50%;flex:0 0 50%}.aah-col-lg-offset-12{margin-left:50%}.aah-col-lg-pull-12{position:relative;right:50%}.aah-col-lg-push-12{position:relative;left:50%}.aah-col-lg-13{display:block;max-width:54.1666666667%;flex:0 0 54.1666666667%}.aah-col-lg-offset-13{margin-left:54.1666666667%}.aah-col-lg-pull-13{position:relative;right:54.1666666667%}.aah-col-lg-push-13{position:relative;left:54.1666666667%}.aah-col-lg-14{display:block;max-width:58.3333333333%;flex:0 0 58.3333333333%}.aah-col-lg-offset-14{margin-left:58.3333333333%}.aah-col-lg-pull-14{position:relative;right:58.3333333333%}.aah-col-lg-push-14{position:relative;left:58.3333333333%}.aah-col-lg-15{display:block;max-width:62.5%;flex:0 0 62.5%}.aah-col-lg-offset-15{margin-left:62.5%}.aah-col-lg-pull-15{position:relative;right:62.5%}.aah-col-lg-push-15{position:relative;left:62.5%}.aah-col-lg-16{display:block;max-width:66.6666666667%;flex:0 0 66.6666666667%}.aah-col-lg-offset-16{margin-left:66.6666666667%}.aah-col-lg-pull-16{position:relative;right:66.6666666667%}.aah-col-lg-push-16{position:relative;left:66.6666666667%}.aah-col-lg-17{display:block;max-width:70.8333333333%;flex:0 0 70.8333333333%}.aah-col-lg-offset-17{margin-left:70.8333333333%}.aah-col-lg-pull-17{position:relative;right:70.8333333333%}.aah-col-lg-push-17{position:relative;left:70.8333333333%}.aah-col-lg-18{display:block;max-width:75%;flex:0 0 75%}.aah-col-lg-offset-18{margin-left:75%}.aah-col-lg-pull-18{position:relative;right:75%}.aah-col-lg-push-18{position:relative;left:75%}.aah-col-lg-19{display:block;max-width:79.1666666667%;flex:0 0 79.1666666667%}.aah-col-lg-offset-19{margin-left:79.1666666667%}.aah-col-lg-pull-19{position:relative;right:79.1666666667%}.aah-col-lg-push-19{position:relative;left:79.1666666667%}.aah-col-lg-20{display:block;max-width:83.3333333333%;flex:0 0 83.3333333333%}.aah-col-lg-offset-20{margin-left:83.3333333333%}.aah-col-lg-pull-20{position:relative;right:83.3333333333%}.aah-col-lg-push-20{position:relative;left:83.3333333333%}.aah-col-lg-21{display:block;max-width:87.5%;flex:0 0 87.5%}.aah-col-lg-offset-21{margin-left:87.5%}.aah-col-lg-pull-21{position:relative;right:87.5%}.aah-col-lg-push-21{position:relative;left:87.5%}.aah-col-lg-22{display:block;max-width:91.6666666667%;flex:0 0 91.6666666667%}.aah-col-lg-offset-22{margin-left:91.6666666667%}.aah-col-lg-pull-22{position:relative;right:91.6666666667%}.aah-col-lg-push-22{position:relative;left:91.6666666667%}.aah-col-lg-23{display:block;max-width:95.8333333333%;flex:0 0 95.8333333333%}.aah-col-lg-offset-23{margin-left:95.8333333333%}.aah-col-lg-pull-23{position:relative;right:95.8333333333%}.aah-col-lg-push-23{position:relative;left:95.8333333333%}.aah-col-lg-24{display:block;max-width:100%;flex:0 0 100%}.aah-col-lg-offset-24{margin-left:100%}.aah-col-lg-pull-24{position:relative;right:100%}.aah-col-lg-push-24{position:relative;left:100%}}@media only screen and (min-width: 1920px){.aah-col-xl-0,.aah-col-xl-0.is-guttered{display:none}.aah-col-xl-0{max-width:0%;flex:0 0 0%}.aah-col-xl-offset-0{margin-left:0%}.aah-col-xl-pull-0{position:relative;right:0%}.aah-col-xl-push-0{position:relative;left:0%}.aah-col-xl-1{display:block;max-width:4.1666666667%;flex:0 0 4.1666666667%}.aah-col-xl-offset-1{margin-left:4.1666666667%}.aah-col-xl-pull-1{position:relative;right:4.1666666667%}.aah-col-xl-push-1{position:relative;left:4.1666666667%}.aah-col-xl-2{display:block;max-width:8.3333333333%;flex:0 0 8.3333333333%}.aah-col-xl-offset-2{margin-left:8.3333333333%}.aah-col-xl-pull-2{position:relative;right:8.3333333333%}.aah-col-xl-push-2{position:relative;left:8.3333333333%}.aah-col-xl-3{display:block;max-width:12.5%;flex:0 0 12.5%}.aah-col-xl-offset-3{margin-left:12.5%}.aah-col-xl-pull-3{position:relative;right:12.5%}.aah-col-xl-push-3{position:relative;left:12.5%}.aah-col-xl-4{display:block;max-width:16.6666666667%;flex:0 0 16.6666666667%}.aah-col-xl-offset-4{margin-left:16.6666666667%}.aah-col-xl-pull-4{position:relative;right:16.6666666667%}.aah-col-xl-push-4{position:relative;left:16.6666666667%}.aah-col-xl-5{display:block;max-width:20.8333333333%;flex:0 0 20.8333333333%}.aah-col-xl-offset-5{margin-left:20.8333333333%}.aah-col-xl-pull-5{position:relative;right:20.8333333333%}.aah-col-xl-push-5{position:relative;left:20.8333333333%}.aah-col-xl-6{display:block;max-width:25%;flex:0 0 25%}.aah-col-xl-offset-6{margin-left:25%}.aah-col-xl-pull-6{position:relative;right:25%}.aah-col-xl-push-6{position:relative;left:25%}.aah-col-xl-7{display:block;max-width:29.1666666667%;flex:0 0 29.1666666667%}.aah-col-xl-offset-7{margin-left:29.1666666667%}.aah-col-xl-pull-7{position:relative;right:29.1666666667%}.aah-col-xl-push-7{position:relative;left:29.1666666667%}.aah-col-xl-8{display:block;max-width:33.3333333333%;flex:0 0 33.3333333333%}.aah-col-xl-offset-8{margin-left:33.3333333333%}.aah-col-xl-pull-8{position:relative;right:33.3333333333%}.aah-col-xl-push-8{position:relative;left:33.3333333333%}.aah-col-xl-9{display:block;max-width:37.5%;flex:0 0 37.5%}.aah-col-xl-offset-9{margin-left:37.5%}.aah-col-xl-pull-9{position:relative;right:37.5%}.aah-col-xl-push-9{position:relative;left:37.5%}.aah-col-xl-10{display:block;max-width:41.6666666667%;flex:0 0 41.6666666667%}.aah-col-xl-offset-10{margin-left:41.6666666667%}.aah-col-xl-pull-10{position:relative;right:41.6666666667%}.aah-col-xl-push-10{position:relative;left:41.6666666667%}.aah-col-xl-11{display:block;max-width:45.8333333333%;flex:0 0 45.8333333333%}.aah-col-xl-offset-11{margin-left:45.8333333333%}.aah-col-xl-pull-11{position:relative;right:45.8333333333%}.aah-col-xl-push-11{position:relative;left:45.8333333333%}.aah-col-xl-12{display:block;max-width:50%;flex:0 0 50%}.aah-col-xl-offset-12{margin-left:50%}.aah-col-xl-pull-12{position:relative;right:50%}.aah-col-xl-push-12{position:relative;left:50%}.aah-col-xl-13{display:block;max-width:54.1666666667%;flex:0 0 54.1666666667%}.aah-col-xl-offset-13{margin-left:54.1666666667%}.aah-col-xl-pull-13{position:relative;right:54.1666666667%}.aah-col-xl-push-13{position:relative;left:54.1666666667%}.aah-col-xl-14{display:block;max-width:58.3333333333%;flex:0 0 58.3333333333%}.aah-col-xl-offset-14{margin-left:58.3333333333%}.aah-col-xl-pull-14{position:relative;right:58.3333333333%}.aah-col-xl-push-14{position:relative;left:58.3333333333%}.aah-col-xl-15{display:block;max-width:62.5%;flex:0 0 62.5%}.aah-col-xl-offset-15{margin-left:62.5%}.aah-col-xl-pull-15{position:relative;right:62.5%}.aah-col-xl-push-15{position:relative;left:62.5%}.aah-col-xl-16{display:block;max-width:66.6666666667%;flex:0 0 66.6666666667%}.aah-col-xl-offset-16{margin-left:66.6666666667%}.aah-col-xl-pull-16{position:relative;right:66.6666666667%}.aah-col-xl-push-16{position:relative;left:66.6666666667%}.aah-col-xl-17{display:block;max-width:70.8333333333%;flex:0 0 70.8333333333%}.aah-col-xl-offset-17{margin-left:70.8333333333%}.aah-col-xl-pull-17{position:relative;right:70.8333333333%}.aah-col-xl-push-17{position:relative;left:70.8333333333%}.aah-col-xl-18{display:block;max-width:75%;flex:0 0 75%}.aah-col-xl-offset-18{margin-left:75%}.aah-col-xl-pull-18{position:relative;right:75%}.aah-col-xl-push-18{position:relative;left:75%}.aah-col-xl-19{display:block;max-width:79.1666666667%;flex:0 0 79.1666666667%}.aah-col-xl-offset-19{margin-left:79.1666666667%}.aah-col-xl-pull-19{position:relative;right:79.1666666667%}.aah-col-xl-push-19{position:relative;left:79.1666666667%}.aah-col-xl-20{display:block;max-width:83.3333333333%;flex:0 0 83.3333333333%}.aah-col-xl-offset-20{margin-left:83.3333333333%}.aah-col-xl-pull-20{position:relative;right:83.3333333333%}.aah-col-xl-push-20{position:relative;left:83.3333333333%}.aah-col-xl-21{display:block;max-width:87.5%;flex:0 0 87.5%}.aah-col-xl-offset-21{margin-left:87.5%}.aah-col-xl-pull-21{position:relative;right:87.5%}.aah-col-xl-push-21{position:relative;left:87.5%}.aah-col-xl-22{display:block;max-width:91.6666666667%;flex:0 0 91.6666666667%}.aah-col-xl-offset-22{margin-left:91.6666666667%}.aah-col-xl-pull-22{position:relative;right:91.6666666667%}.aah-col-xl-push-22{position:relative;left:91.6666666667%}.aah-col-xl-23{display:block;max-width:95.8333333333%;flex:0 0 95.8333333333%}.aah-col-xl-offset-23{margin-left:95.8333333333%}.aah-col-xl-pull-23{position:relative;right:95.8333333333%}.aah-col-xl-push-23{position:relative;left:95.8333333333%}.aah-col-xl-24{display:block;max-width:100%;flex:0 0 100%}.aah-col-xl-offset-24{margin-left:100%}.aah-col-xl-pull-24{position:relative;right:100%}.aah-col-xl-push-24{position:relative;left:100%}}.aah-text{--aah-text-font-size: var(--aah-font-size-base);--aah-text-color: var(--aah-text-color-regular)}.aah-text{align-self:center;margin:0;padding:0;font-size:var(--aah-text-font-size);color:var(--aah-text-color);overflow-wrap:break-word}.aah-text.is-truncated{display:inline-block;max-width:100%;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.aah-text.is-line-clamp{display:-webkit-inline-box;-webkit-box-orient:vertical;overflow:hidden}.aah-text--large{--aah-text-font-size: var(--aah-font-size-medium)}.aah-text--default{--aah-text-font-size: var(--aah-font-size-base)}.aah-text--small{--aah-text-font-size: var(--aah-font-size-extra-small)}.aah-text.aah-text--primary{--aah-text-color: var(--aah-color-primary)}.aah-text.aah-text--success{--aah-text-color: var(--aah-color-success)}.aah-text.aah-text--warning{--aah-text-color: var(--aah-color-warning)}.aah-text.aah-text--danger{--aah-text-color: var(--aah-color-danger)}.aah-text.aah-text--error{--aah-text-color: var(--aah-color-error)}.aah-text.aah-text--info{--aah-text-color: var(--aah-color-info)}.aah-text>.aah-icon{vertical-align:-2px}.aah-tag{--aah-tag-font-size: 12px;--aah-tag-border-radius: 4px;--aah-tag-border-radius-rounded: 9999px}.aah-tag{--aah-tag-bg-color: var(--aah-color-primary-light-9);--aah-tag-border-color: var(--aah-color-primary-light-8);--aah-tag-hover-color: var(--aah-color-primary);background-color:var(--aah-tag-bg-color);border-color:var(--aah-tag-border-color);color:var(--aah-tag-text-color);display:inline-flex;justify-content:center;align-items:center;vertical-align:middle;height:24px;padding:0 9px;font-size:var(--aah-tag-font-size);line-height:1;border-width:1px;border-style:solid;border-radius:var(--aah-tag-border-radius);box-sizing:border-box;white-space:nowrap;--aah-icon-size: 14px}.aah-tag.aah-tag--primary{--aah-tag-bg-color: var(--aah-color-primary-light-9);--aah-tag-border-color: var(--aah-color-primary-light-8);--aah-tag-hover-color: var(--aah-color-primary)}.aah-tag.aah-tag--success{--aah-tag-bg-color: var(--aah-color-success-light-9);--aah-tag-border-color: var(--aah-color-success-light-8);--aah-tag-hover-color: var(--aah-color-success)}.aah-tag.aah-tag--warning{--aah-tag-bg-color: var(--aah-color-warning-light-9);--aah-tag-border-color: var(--aah-color-warning-light-8);--aah-tag-hover-color: var(--aah-color-warning)}.aah-tag.aah-tag--danger{--aah-tag-bg-color: var(--aah-color-danger-light-9);--aah-tag-border-color: var(--aah-color-danger-light-8);--aah-tag-hover-color: var(--aah-color-danger)}.aah-tag.aah-tag--error{--aah-tag-bg-color: var(--aah-color-error-light-9);--aah-tag-border-color: var(--aah-color-error-light-8);--aah-tag-hover-color: var(--aah-color-error)}.aah-tag.aah-tag--info{--aah-tag-bg-color: var(--aah-color-info-light-9);--aah-tag-border-color: var(--aah-color-info-light-8);--aah-tag-hover-color: var(--aah-color-info)}.aah-tag.aah-tag--primary{--aah-tag-text-color: var(--aah-color-primary)}.aah-tag.aah-tag--success{--aah-tag-text-color: var(--aah-color-success)}.aah-tag.aah-tag--warning{--aah-tag-text-color: var(--aah-color-warning)}.aah-tag.aah-tag--danger{--aah-tag-text-color: var(--aah-color-danger)}.aah-tag.aah-tag--error{--aah-tag-text-color: var(--aah-color-error)}.aah-tag.aah-tag--info{--aah-tag-text-color: var(--aah-color-info)}.aah-tag.is-hit{border-color:var(--aah-color-primary)}.aah-tag.is-round{border-radius:var(--aah-tag-border-radius-rounded)}.aah-tag .aah-tag__close{flex-shrink:0;color:var(--aah-tag-text-color)}.aah-tag .aah-tag__close:hover{color:var(--aah-color-white);background-color:var(--aah-tag-hover-color)}.aah-tag .aah-icon{border-radius:50%;cursor:pointer;font-size:calc(var(--aah-icon-size) - 2px);height:var(--aah-icon-size);width:var(--aah-icon-size)}.aah-tag .aah-tag__close{margin-left:6px}.aah-tag--dark{--aah-tag-bg-color: var(--aah-color-primary);--aah-tag-border-color: var(--aah-color-primary);--aah-tag-hover-color: var(--aah-color-primary-light-3);--aah-tag-text-color: var(--aah-color-white)}.aah-tag--dark.aah-tag--primary{--aah-tag-bg-color: var(--aah-color-primary);--aah-tag-border-color: var(--aah-color-primary);--aah-tag-hover-color: var(--aah-color-primary-light-3)}.aah-tag--dark.aah-tag--success{--aah-tag-bg-color: var(--aah-color-success);--aah-tag-border-color: var(--aah-color-success);--aah-tag-hover-color: var(--aah-color-success-light-3)}.aah-tag--dark.aah-tag--warning{--aah-tag-bg-color: var(--aah-color-warning);--aah-tag-border-color: var(--aah-color-warning);--aah-tag-hover-color: var(--aah-color-warning-light-3)}.aah-tag--dark.aah-tag--danger{--aah-tag-bg-color: var(--aah-color-danger);--aah-tag-border-color: var(--aah-color-danger);--aah-tag-hover-color: var(--aah-color-danger-light-3)}.aah-tag--dark.aah-tag--error{--aah-tag-bg-color: var(--aah-color-error);--aah-tag-border-color: var(--aah-color-error);--aah-tag-hover-color: var(--aah-color-error-light-3)}.aah-tag--dark.aah-tag--info{--aah-tag-bg-color: var(--aah-color-info);--aah-tag-border-color: var(--aah-color-info);--aah-tag-hover-color: var(--aah-color-info-light-3)}.aah-tag--dark.aah-tag--primary,.aah-tag--dark.aah-tag--success,.aah-tag--dark.aah-tag--warning,.aah-tag--dark.aah-tag--danger,.aah-tag--dark.aah-tag--error,.aah-tag--dark.aah-tag--info{--aah-tag-text-color: var(--aah-color-white)}.aah-tag--plain{--aah-tag-border-color: var(--aah-color-primary-light-5);--aah-tag-hover-color: var(--aah-color-primary);--aah-tag-bg-color: var(--aah-fill-color-blank)}.aah-tag--plain.aah-tag--primary{--aah-tag-bg-color: var(--aah-fill-color-blank);--aah-tag-border-color: var(--aah-color-primary-light-5);--aah-tag-hover-color: var(--aah-color-primary)}.aah-tag--plain.aah-tag--success{--aah-tag-bg-color: var(--aah-fill-color-blank);--aah-tag-border-color: var(--aah-color-success-light-5);--aah-tag-hover-color: var(--aah-color-success)}.aah-tag--plain.aah-tag--warning{--aah-tag-bg-color: var(--aah-fill-color-blank);--aah-tag-border-color: var(--aah-color-warning-light-5);--aah-tag-hover-color: var(--aah-color-warning)}.aah-tag--plain.aah-tag--danger{--aah-tag-bg-color: var(--aah-fill-color-blank);--aah-tag-border-color: var(--aah-color-danger-light-5);--aah-tag-hover-color: var(--aah-color-danger)}.aah-tag--plain.aah-tag--error{--aah-tag-bg-color: var(--aah-fill-color-blank);--aah-tag-border-color: var(--aah-color-error-light-5);--aah-tag-hover-color: var(--aah-color-error)}.aah-tag--plain.aah-tag--info{--aah-tag-bg-color: var(--aah-fill-color-blank);--aah-tag-border-color: var(--aah-color-info-light-5);--aah-tag-hover-color: var(--aah-color-info)}.aah-tag.is-closable{padding-right:5px}.aah-tag--large{padding:0 11px;height:32px;--aah-icon-size: 16px}.aah-tag--large .aah-tag__close{margin-left:8px}.aah-tag--large.is-closable{padding-right:7px}.aah-tag--small{padding:0 7px;height:20px;--aah-icon-size: 12px}.aah-tag--small .aah-tag__close{margin-left:4px}.aah-tag--small.is-closable{padding-right:3px}.aah-tag--small .aah-icon-close{transform:scale(.8)}.aah-tag.aah-tag--primary.is-hit{border-color:var(--aah-color-primary)}.aah-tag.aah-tag--success.is-hit{border-color:var(--aah-color-success)}.aah-tag.aah-tag--warning.is-hit{border-color:var(--aah-color-warning)}.aah-tag.aah-tag--danger.is-hit{border-color:var(--aah-color-danger)}.aah-tag.aah-tag--error.is-hit{border-color:var(--aah-color-error)}.aah-tag.aah-tag--info.is-hit{border-color:var(--aah-color-info)}.aah-divider{position:relative}.aah-divider--horizontal{display:block;height:1px;width:100%;margin:24px 0;border-top:1px var(--aah-border-color) var(--aah-border-style)}.aah-divider--vertical{display:inline-block;width:1px;height:1em;margin:0 8px;vertical-align:middle;position:relative;border-left:1px var(--aah-border-color) var(--aah-border-style)}.aah-divider__text{position:absolute;background-color:var(--aah-bg-color);padding:0 20px;font-weight:500;color:var(--aah-text-color-primary);font-size:14px}.aah-divider__text.is-left{left:20px;transform:translateY(-50%)}.aah-divider__text.is-center{left:50%;transform:translate(-50%) translateY(-50%)}.aah-divider__text.is-right{right:20px;transform:translateY(-50%)}.aah-alert{--aah-alert-padding: 8px 16px;--aah-alert-border-radius-base: var(--aah-border-radius-base);--aah-alert-title-font-size: 14px;--aah-alert-title-with-description-font-size: 16px;--aah-alert-description-font-size: 14px;--aah-alert-close-font-size: 16px;--aah-alert-close-customed-font-size: 14px;--aah-alert-icon-size: 16px;--aah-alert-icon-large-size: 28px;width:100%;padding:var(--aah-alert-padding);margin:0;box-sizing:border-box;border-radius:var(--aah-alert-border-radius-base);position:relative;background-color:var(--aah-color-white);overflow:hidden;opacity:1;display:flex;align-items:center;transition:opacity var(--aah-transition-duration-fast)}.aah-alert.is-light .aah-alert__close-btn{color:var(--aah-text-color-placeholder)}.aah-alert.is-dark .aah-alert__close-btn,.aah-alert.is-dark .aah-alert__description{color:var(--aah-color-white)}.aah-alert.is-center{justify-content:center}.aah-alert--success{--aah-alert-bg-color: var(--aah-color-success-light-9)}.aah-alert--success.is-light{background-color:var(--aah-alert-bg-color);color:var(--aah-color-success)}.aah-alert--success.is-light .aah-alert__description{color:var(--aah-color-success)}.aah-alert--success.is-dark{background-color:var(--aah-color-success);color:var(--aah-color-white)}.aah-alert--info{--aah-alert-bg-color: var(--aah-color-info-light-9)}.aah-alert--info.is-light{background-color:var(--aah-alert-bg-color);color:var(--aah-color-info)}.aah-alert--info.is-light .aah-alert__description{color:var(--aah-color-info)}.aah-alert--info.is-dark{background-color:var(--aah-color-info);color:var(--aah-color-white)}.aah-alert--warning{--aah-alert-bg-color: var(--aah-color-warning-light-9)}.aah-alert--warning.is-light{background-color:var(--aah-alert-bg-color);color:var(--aah-color-warning)}.aah-alert--warning.is-light .aah-alert__description{color:var(--aah-color-warning)}.aah-alert--warning.is-dark{background-color:var(--aah-color-warning);color:var(--aah-color-white)}.aah-alert--error{--aah-alert-bg-color: var(--aah-color-error-light-9)}.aah-alert--error.is-light{background-color:var(--aah-alert-bg-color);color:var(--aah-color-error)}.aah-alert--error.is-light .aah-alert__description{color:var(--aah-color-error)}.aah-alert--error.is-dark{background-color:var(--aah-color-error);color:var(--aah-color-white)}.aah-alert__content{display:flex;flex-direction:column;gap:4px}.aah-alert .aah-alert__icon{font-size:var(--aah-alert-icon-size);width:var(--aah-alert-icon-size);margin-right:8px}.aah-alert .aah-alert__icon.is-big{font-size:var(--aah-alert-icon-large-size);width:var(--aah-alert-icon-large-size);margin-right:12px}.aah-alert__title{font-size:var(--aah-alert-title-font-size);line-height:24px}.aah-alert__title.with-description{font-size:var(--aah-alert-title-with-description-font-size)}.aah-alert .aah-alert__description{font-size:var(--aah-alert-description-font-size);margin:0}.aah-alert .aah-alert__close-btn{font-size:var(--aah-alert-close-font-size);opacity:1;position:absolute;top:12px;right:16px;cursor:pointer}.aah-alert .aah-alert__close-btn.is-customed{font-style:normal;font-size:var(--aah-alert-close-customed-font-size);line-height:24px;top:8px}.aah-alert-fade-enter-from,.aah-alert-fade-leave-active{opacity:0}button[data-v-f6a83a85]{margin:10px}.aah_plat span[data-v-f6a83a85]{margin:5px}.aah-popper{--aah-popper-border-radius: var(--aah-popover-border-radius, 4px)}.aah-popper{position:absolute;border-radius:var(--aah-popper-border-radius);padding:5px 11px;z-index:2000;font-size:12px;line-height:20px;min-width:10px;overflow-wrap:break-word;visibility:visible}.aah-popper.is-dark{color:var(--aah-bg-color);background:var(--aah-text-color-primary);border:1px solid var(--aah-text-color-primary)}.aah-popper.is-dark .aah-popper__arrow:before{border:1px solid var(--aah-text-color-primary);background:var(--aah-text-color-primary);right:0}.aah-popper.is-light{background:var(--aah-bg-color-overlay);border:1px solid var(--aah-border-color-light)}.aah-popper.is-light .aah-popper__arrow:before{border:1px solid var(--aah-border-color-light);background:var(--aah-bg-color-overlay);right:0}.aah-popper.is-pure{padding:0}.aah-popper__arrow{position:absolute;width:10px;height:10px;z-index:-1}.aah-popper__arrow:before{position:absolute;width:10px;height:10px;z-index:-1;content:" ";transform:rotate(45deg);background:var(--aah-text-color-primary);box-sizing:border-box}.aah-popper[data-popper-placement^=top]>.aah-popper__arrow{bottom:-5px}.aah-popper[data-popper-placement^=top]>.aah-popper__arrow:before{border-bottom-right-radius:2px}.aah-popper[data-popper-placement^=bottom]>.aah-popper__arrow{top:-5px}.aah-popper[data-popper-placement^=bottom]>.aah-popper__arrow:before{border-top-left-radius:2px}.aah-popper[data-popper-placement^=left]>.aah-popper__arrow{right:-5px}.aah-popper[data-popper-placement^=left]>.aah-popper__arrow:before{border-top-right-radius:2px}.aah-popper[data-popper-placement^=right]>.aah-popper__arrow{left:-5px}.aah-popper[data-popper-placement^=right]>.aah-popper__arrow:before{border-bottom-left-radius:2px}.aah-popper[data-popper-placement^=top] .aah-popper__arrow:before{border-top-color:transparent!important;border-left-color:transparent!important}.aah-popper[data-popper-placement^=bottom] .aah-popper__arrow:before{border-bottom-color:transparent!important;border-right-color:transparent!important}.aah-popper[data-popper-placement^=left] .aah-popper__arrow:before{border-left-color:transparent!important;border-bottom-color:transparent!important}.aah-popper[data-popper-placement^=right] .aah-popper__arrow:before{border-right-color:transparent!important;border-top-color:transparent!important}.aah-checkbox-group{font-size:0;line-height:0}.aah-checkbox{--aah-checkbox-font-size: 14px;--aah-checkbox-font-weight: var(--aah-font-weight-primary);--aah-checkbox-text-color: var(--aah-text-color-regular);--aah-checkbox-input-height: 14px;--aah-checkbox-input-width: 14px;--aah-checkbox-border-radius: var(--aah-border-radius-small);--aah-checkbox-bg-color: var(--aah-fill-color-blank);--aah-checkbox-input-border: var(--aah-border);--aah-checkbox-disabled-border-color: var(--aah-border-color);--aah-checkbox-disabled-input-fill: var(--aah-fill-color-light);--aah-checkbox-disabled-icon-color: var(--aah-text-color-placeholder);--aah-checkbox-disabled-checked-input-fill: var(--aah-border-color-extra-light);--aah-checkbox-disabled-checked-input-border-color: var(--aah-border-color);--aah-checkbox-disabled-checked-icon-color: var(--aah-text-color-placeholder);--aah-checkbox-checked-text-color: var(--aah-color-primary);--aah-checkbox-checked-input-border-color: var(--aah-color-primary);--aah-checkbox-checked-bg-color: var(--aah-color-primary);--aah-checkbox-checked-icon-color: var(--aah-color-white);--aah-checkbox-input-border-color-hover: var(--aah-color-primary)}.aah-checkbox{color:var(--aah-checkbox-text-color);font-weight:var(--aah-checkbox-font-weight);font-size:var(--aah-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(--aah-checkbox-height, 32px)}.aah-checkbox.is-disabled{cursor:not-allowed}.aah-checkbox.is-bordered{padding:0 15px 0 9px;border-radius:var(--aah-border-radius-base);border:var(--aah-border);box-sizing:border-box}.aah-checkbox.is-bordered.is-checked{border-color:var(--aah-color-primary)}.aah-checkbox.is-bordered.is-disabled{border-color:var(--aah-border-color-lighter)}.aah-checkbox.is-bordered.aah-checkbox--large{padding:0 19px 0 11px;border-radius:var(--aah-border-radius-base)}.aah-checkbox.is-bordered.aah-checkbox--large .aah-checkbox__label{font-size:var(--aah-font-size-base)}.aah-checkbox.is-bordered.aah-checkbox--large .aah-checkbox__inner{height:14px;width:14px}.aah-checkbox.is-bordered.aah-checkbox--small{padding:0 11px 0 7px;border-radius:calc(var(--aah-border-radius-base) - 1px)}.aah-checkbox.is-bordered.aah-checkbox--small .aah-checkbox__label{font-size:12px}.aah-checkbox.is-bordered.aah-checkbox--small .aah-checkbox__inner{height:12px;width:12px}.aah-checkbox.is-bordered.aah-checkbox--small .aah-checkbox__inner:after{height:6px;width:2px}.aah-checkbox input:focus-visible+.aah-checkbox__inner{outline:2px solid var(--aah-checkbox-input-border-color-hover);outline-offset:1px;border-radius:var(--aah-checkbox-border-radius)}.aah-checkbox__input{white-space:nowrap;cursor:pointer;outline:none;display:inline-flex;position:relative}.aah-checkbox__input.is-disabled .aah-checkbox__inner{background-color:var(--aah-checkbox-disabled-input-fill);border-color:var(--aah-checkbox-disabled-border-color);cursor:not-allowed}.aah-checkbox__input.is-disabled .aah-checkbox__inner:after{cursor:not-allowed;border-color:var(--aah-checkbox-disabled-icon-color)}.aah-checkbox__input.is-disabled.is-checked .aah-checkbox__inner{background-color:var(--aah-checkbox-disabled-checked-input-fill);border-color:var(--aah-checkbox-disabled-checked-input-border-color)}.aah-checkbox__input.is-disabled.is-checked .aah-checkbox__inner:after{border-color:var(--aah-checkbox-disabled-checked-icon-color)}.aah-checkbox__input.is-disabled.is-indeterminate .aah-checkbox__inner{background-color:var(--aah-checkbox-disabled-checked-input-fill);border-color:var(--aah-checkbox-disabled-checked-input-border-color)}.aah-checkbox__input.is-disabled.is-indeterminate .aah-checkbox__inner:before{background-color:var(--aah-checkbox-disabled-checked-icon-color);border-color:var(--aah-checkbox-disabled-checked-icon-color)}.aah-checkbox__input.is-disabled+span.aah-checkbox__label{color:var(--aah-disabled-text-color);cursor:not-allowed}.aah-checkbox__input.is-checked .aah-checkbox__inner{background-color:var(--aah-checkbox-checked-bg-color);border-color:var(--aah-checkbox-checked-input-border-color)}.aah-checkbox__input.is-checked .aah-checkbox__inner:after{transform:rotate(45deg) scaleY(1);border-color:var(--aah-checkbox-checked-icon-color)}.aah-checkbox__input.is-checked+.aah-checkbox__label{color:var(--aah-checkbox-checked-text-color)}.aah-checkbox__input.is-focus:not(.is-checked) .aah-checkbox__original:not(:focus-visible){border-color:var(--aah-checkbox-input-border-color-hover)}.aah-checkbox__input.is-indeterminate .aah-checkbox__inner{background-color:var(--aah-checkbox-checked-bg-color);border-color:var(--aah-checkbox-checked-input-border-color)}.aah-checkbox__input.is-indeterminate .aah-checkbox__inner:before{content:"";position:absolute;display:block;background-color:var(--aah-checkbox-checked-icon-color);height:2px;transform:scale(.5);left:0;right:0;top:5px}.aah-checkbox__input.is-indeterminate .aah-checkbox__inner:after{display:none}.aah-checkbox__inner{display:inline-block;position:relative;border:var(--aah-checkbox-input-border);border-radius:var(--aah-checkbox-border-radius);box-sizing:border-box;width:var(--aah-checkbox-input-width);height:var(--aah-checkbox-input-height);background-color:var(--aah-checkbox-bg-color);z-index:var(--aah-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)}.aah-checkbox__inner:hover{border-color:var(--aah-checkbox-input-border-color-hover)}.aah-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}.aah-checkbox__original{opacity:0;outline:none;position:absolute;margin:0;width:0;height:0;z-index:-1}.aah-checkbox__label{display:inline-block;padding-left:8px;line-height:1;font-size:var(--aah-checkbox-font-size)}.aah-checkbox.aah-checkbox--large{height:40px}.aah-checkbox.aah-checkbox--large .aah-checkbox__label{font-size:14px}.aah-checkbox.aah-checkbox--large .aah-checkbox__inner{width:14px;height:14px}.aah-checkbox.aah-checkbox--small{height:24px}.aah-checkbox.aah-checkbox--small .aah-checkbox__label{font-size:12px}.aah-checkbox.aah-checkbox--small .aah-checkbox__inner{width:12px;height:12px}.aah-checkbox.aah-checkbox--small .aah-checkbox__input.is-indeterminate .aah-checkbox__inner:before{top:4px}.aah-checkbox.aah-checkbox--small .aah-checkbox__inner:after{width:2px;height:6px}.aah-checkbox:last-of-type{margin-right:0}.aah-textarea{--aah-input-text-color: var(--aah-text-color-regular);--aah-input-border: var(--aah-border);--aah-input-hover-border: var(--aah-border-color-hover);--aah-input-focus-border: var(--aah-color-primary);--aah-input-transparent-border: 0 0 0 1px transparent inset;--aah-input-border-color: var(--aah-border-color);--aah-input-border-radius: var(--aah-border-radius-base);--aah-input-bg-color: var(--aah-fill-color-blank);--aah-input-icon-color: var(--aah-text-color-placeholder);--aah-input-placeholder-color: var(--aah-text-color-placeholder);--aah-input-hover-border-color: var(--aah-border-color-hover);--aah-input-clear-hover-color: var(--aah-text-color-secondary);--aah-input-focus-border-color: var(--aah-color-primary);--aah-input-width: 100%}.aah-textarea{position:relative;display:inline-block;width:100%;vertical-align:bottom;font-size:var(--aah-font-size-base)}.aah-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(--aah-input-text-color, var(--aah-text-color-regular));background-color:var(--aah-input-bg-color, var(--aah-fill-color-blank));background-image:none;-webkit-appearance:none;box-shadow:0 0 0 1px var(--aah-input-border-color, var(--aah-border-color)) inset;border-radius:var(--aah-input-border-radius, var(--aah-border-radius-base));transition:var(--aah-transition-box-shadow);border:none}.aah-textarea__inner::placeholder{color:var(--aah-input-placeholder-color, var(--aah-text-color-placeholder))}.aah-textarea__inner:hover{box-shadow:0 0 0 1px var(--aah-input-hover-border-color) inset}.aah-textarea__inner:focus{outline:none;box-shadow:0 0 0 1px var(--aah-input-focus-border-color) inset}.aah-textarea .aah-input__count{color:var(--aah-color-info);background:var(--aah-fill-color-blank);position:absolute;font-size:12px;line-height:14px;bottom:5px;right:10px}.aah-textarea.is-disabled .aah-textarea__inner{box-shadow:0 0 0 1px var(--aah-disabled-border-color) inset;background-color:var(--aah-disabled-bg-color);color:var(--aah-disabled-text-color);cursor:not-allowed}.aah-textarea.is-disabled .aah-textarea__inner::placeholder{color:var(--aah-text-color-placeholder)}.aah-textarea.is-exceed .aah-textarea__inner{box-shadow:0 0 0 1px var(--aah-color-danger) inset}.aah-textarea.is-exceed .aah-input__count{color:var(--aah-color-danger)}.aah-input{--aah-input-text-color: var(--aah-text-color-regular);--aah-input-border: var(--aah-border);--aah-input-hover-border: var(--aah-border-color-hover);--aah-input-focus-border: var(--aah-color-primary);--aah-input-transparent-border: 0 0 0 1px transparent inset;--aah-input-border-color: var(--aah-border-color);--aah-input-border-radius: var(--aah-border-radius-base);--aah-input-bg-color: var(--aah-fill-color-blank);--aah-input-icon-color: var(--aah-text-color-placeholder);--aah-input-placeholder-color: var(--aah-text-color-placeholder);--aah-input-hover-border-color: var(--aah-border-color-hover);--aah-input-clear-hover-color: var(--aah-text-color-secondary);--aah-input-focus-border-color: var(--aah-color-primary);--aah-input-width: 100%}.aah-input{--aah-input-height: var(--aah-component-size);position:relative;font-size:var(--aah-font-size-base);display:inline-flex;width:var(--aah-input-width);line-height:var(--aah-input-height);box-sizing:border-box;vertical-align:middle}.aah-input::-webkit-scrollbar{z-index:11;width:6px}.aah-input::-webkit-scrollbar:horizontal{height:6px}.aah-input::-webkit-scrollbar-thumb{border-radius:5px;width:6px;background:var(--aah-text-color-disabled)}.aah-input::-webkit-scrollbar-corner{background:var(--aah-fill-color-blank)}.aah-input::-webkit-scrollbar-track{background:var(--aah-fill-color-blank)}.aah-input::-webkit-scrollbar-track-piece{background:var(--aah-fill-color-blank);width:6px}.aah-input .aah-input__clear,.aah-input .aah-input__password{color:var(--aah-input-icon-color);font-size:14px;cursor:pointer}.aah-input .aah-input__clear:hover,.aah-input .aah-input__password:hover{color:var(--aah-input-clear-hover-color)}.aah-input .aah-input__count{height:100%;display:inline-flex;align-items:center;color:var(--aah-color-info);font-size:12px}.aah-input .aah-input__count .aah-input__count-inner{background:var(--aah-fill-color-blank);line-height:initial;display:inline-block;padding-left:8px}.aah-input__wrapper{display:inline-flex;flex-grow:1;align-items:center;justify-content:center;padding:1px 11px;background-color:var(--aah-input-bg-color, var(--aah-fill-color-blank));background-image:none;border-radius:var(--aah-input-border-radius, var(--aah-border-radius-base));cursor:text;transition:var(--aah-transition-box-shadow);transform:translateZ(0);box-shadow:0 0 0 1px var(--aah-input-border-color, var(--aah-border-color)) inset}.aah-input__wrapper:hover{box-shadow:0 0 0 1px var(--aah-input-hover-border-color) inset}.aah-input__wrapper.is-focus{box-shadow:0 0 0 1px var(--aah-input-focus-border-color) inset}.aah-input__inner{--aah-input-inner-height: calc(var(--aah-input-height, 32px) - 2px);width:100%;flex-grow:1;-webkit-appearance:none;color:var(--aah-input-text-color, var(--aah-text-color-regular));font-size:inherit;height:var(--aah-input-inner-height);line-height:var(--aah-input-inner-height);padding:0;outline:none;border:none;background:none;box-sizing:border-box}.aah-input__inner:focus{outline:none}.aah-input__inner::placeholder{color:var(--aah-input-placeholder-color, var(--aah-text-color-placeholder))}.aah-input__inner[type=password]::-ms-reveal{display:none}.aah-input__inner[type=number]{line-height:1}.aah-input__prefix{display:inline-flex;white-space:nowrap;flex-shrink:0;flex-wrap:nowrap;height:100%;text-align:center;color:var(--aah-input-icon-color, var(--aah-text-color-placeholder));transition:all var(--aah-transition-duration);pointer-events:none}.aah-input__prefix-inner{pointer-events:all;display:inline-flex;align-items:center;justify-content:center}.aah-input__prefix-inner>:last-child{margin-right:8px}.aah-input__prefix-inner>:first-child,.aah-input__prefix-inner>:first-child.aah-input__icon{margin-left:0}.aah-input__suffix{display:inline-flex;white-space:nowrap;flex-shrink:0;flex-wrap:nowrap;height:100%;text-align:center;color:var(--aah-input-icon-color, var(--aah-text-color-placeholder));transition:all var(--aah-transition-duration);pointer-events:none}.aah-input__suffix-inner{pointer-events:all;display:inline-flex;align-items:center;justify-content:center}.aah-input__suffix-inner>:first-child{margin-left:8px}.aah-input .aah-input__icon{height:inherit;line-height:inherit;display:flex;justify-content:center;align-items:center;transition:all var(--aah-transition-duration);margin-left:8px}.aah-input__validateIcon{pointer-events:none}.aah-input.is-active .aah-input__wrapper{box-shadow:0 0 0 1px var(--aah-input-focus-color, ) inset}.aah-input.is-disabled{cursor:not-allowed}.aah-input.is-disabled .aah-input__wrapper{background-color:var(--aah-disabled-bg-color);box-shadow:0 0 0 1px var(--aah-disabled-border-color) inset}.aah-input.is-disabled .aah-input__inner{color:var(--aah-disabled-text-color);-webkit-text-fill-color:var(--aah-disabled-text-color);cursor:not-allowed}.aah-input.is-disabled .aah-input__inner::placeholder{color:var(--aah-text-color-placeholder)}.aah-input.is-disabled .aah-input__icon{cursor:not-allowed}.aah-input.is-exceed .aah-input__wrapper{box-shadow:0 0 0 1px var(--aah-color-danger) inset}.aah-input.is-exceed .aah-input__suffix .aah-input__count{color:var(--aah-color-danger)}.aah-input--large{--aah-input-height: var(--aah-component-size-large);font-size:14px}.aah-input--large .aah-input__wrapper{padding:1px 15px}.aah-input--large .aah-input__inner{--aah-input-inner-height: calc(var(--aah-input-height, 40px) - 2px)}.aah-input--small{--aah-input-height: var(--aah-component-size-small);font-size:12px}.aah-input--small .aah-input__wrapper{padding:1px 7px}.aah-input--small .aah-input__inner{--aah-input-inner-height: calc(var(--aah-input-height, 24px) - 2px)}.aah-input-group{display:inline-flex;width:100%;align-items:stretch}.aah-input-group__append,.aah-input-group__prepend{background-color:var(--aah-fill-color-light);color:var(--aah-color-info);position:relative;display:inline-flex;align-items:center;justify-content:center;min-height:100%;border-radius:var(--aah-input-border-radius);padding:0 20px;white-space:nowrap}.aah-input-group__append:focus,.aah-input-group__prepend:focus{outline:none}.aah-input-group__append .aah-select,.aah-input-group__append .aah-button,.aah-input-group__prepend .aah-select,.aah-input-group__prepend .aah-button{display:inline-block;margin:0 -20px}.aah-input-group__append button.aah-button,.aah-input-group__append button.aah-button:hover,.aah-input-group__append div.aah-select .aah-select__wrapper,.aah-input-group__append div.aah-select:hover .aah-select__wrapper,.aah-input-group__prepend button.aah-button,.aah-input-group__prepend button.aah-button:hover,.aah-input-group__prepend div.aah-select .aah-select__wrapper,.aah-input-group__prepend div.aah-select:hover .aah-select__wrapper{border-color:transparent;background-color:transparent;color:inherit}.aah-input-group__append .aah-button,.aah-input-group__append .aah-input,.aah-input-group__prepend .aah-button,.aah-input-group__prepend .aah-input{font-size:inherit}.aah-input-group__prepend{border-right:0;border-top-right-radius:0;border-bottom-right-radius:0;box-shadow:1px 0 0 0 var(--aah-input-border-color) inset,0 1px 0 0 var(--aah-input-border-color) inset,0 -1px 0 0 var(--aah-input-border-color) inset}.aah-input-group__append{border-left:0;border-top-left-radius:0;border-bottom-left-radius:0;box-shadow:0 1px 0 0 var(--aah-input-border-color) inset,0 -1px 0 0 var(--aah-input-border-color) inset,-1px 0 0 0 var(--aah-input-border-color) inset}.aah-input-group--prepend>.aah-input__wrapper{border-top-left-radius:0;border-bottom-left-radius:0}.aah-input-group--prepend .aah-input-group__prepend .aah-select .aah-select__wrapper{border-top-right-radius:0;border-bottom-right-radius:0;box-shadow:1px 0 0 0 var(--aah-input-border-color) inset,0 1px 0 0 var(--aah-input-border-color) inset,0 -1px 0 0 var(--aah-input-border-color) inset}.aah-input-group--append>.aah-input__wrapper{border-top-right-radius:0;border-bottom-right-radius:0}.aah-input-group--append .aah-input-group__append .aah-select .aah-select__wrapper{border-top-left-radius:0;border-bottom-left-radius:0;box-shadow:0 1px 0 0 var(--aah-input-border-color) inset,0 -1px 0 0 var(--aah-input-border-color) inset,-1px 0 0 0 var(--aah-input-border-color) inset}.aah-input-hidden{display:none!important}.aah-select-dropdown.is-multiple .aah-select-dropdown__item.is-selected:after{content:"";position:absolute;top:50%;right:20px;border-top:none;border-right:none;background-repeat:no-repeat;background-position:center;background-color:var(--aah-color-primary);mask:url("data:image/svg+xml;utf8,%3Csvg class='icon' width='200' height='200' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='currentColor' d='M406.656 706.944L195.84 496.256a32 32 0 10-45.248 45.248l256 256 512-512a32 32 0 00-45.248-45.248L406.592 706.944z'%3E%3C/path%3E%3C/svg%3E") no-repeat;mask-size:100% 100%;-webkit-mask:url("data:image/svg+xml;utf8,%3Csvg class='icon' width='200' height='200' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='currentColor' d='M406.656 706.944L195.84 496.256a32 32 0 10-45.248 45.248l256 256 512-512a32 32 0 00-45.248-45.248L406.592 706.944z'%3E%3C/path%3E%3C/svg%3E") no-repeat;-webkit-mask-size:100% 100%;transform:translateY(-50%);width:12px;height:12px}.aah-select-dropdown{z-index:calc(var(--aah-index-top) + 1);border-radius:var(--aah-border-radius-base);box-sizing:border-box}.aah-select-dropdown .aah-scrollbar.is-empty .aah-select-dropdown__list{padding:0}.aah-select-dropdown__loading,.aah-select-dropdown__empty{padding:10px 0;margin:0;text-align:center;color:var(--aah-text-color-secondary);font-size:var(--aah-select-font-size)}.aah-select-dropdown__wrap{max-height:274px}.aah-select-dropdown__list{list-style:none;padding:6px 0;margin:0;box-sizing:border-box}.aah-select-dropdown__list.aah-vl__window{margin:6px 0;padding:0}.aah-select-dropdown__header{padding:10px;border-bottom:1px solid var(--aah-border-color-light)}.aah-select-dropdown__footer{padding:10px;border-top:1px solid var(--aah-border-color-light)}.aah-select-dropdown__item{font-size:var(--aah-font-size-base);padding:0 32px 0 20px;position:relative;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--aah-text-color-regular);height:34px;line-height:34px;box-sizing:border-box;cursor:pointer}.aah-select-dropdown__item.is-hovering{background-color:var(--aah-fill-color-light)}.aah-select-dropdown__item.is-selected{color:var(--aah-color-primary);font-weight:700}.aah-select-dropdown__item.is-disabled{color:var(--aah-text-color-placeholder);cursor:not-allowed;background-color:unset}.aah-select-dropdown.is-multiple .aah-select-dropdown__item.is-selected:after{content:"";position:absolute;top:50%;right:20px;border-top:none;border-right:none;background-repeat:no-repeat;background-position:center;background-color:var(--aah-color-primary);mask:url("data:image/svg+xml;utf8,%3Csvg class='icon' width='200' height='200' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='currentColor' d='M406.656 706.944L195.84 496.256a32 32 0 10-45.248 45.248l256 256 512-512a32 32 0 00-45.248-45.248L406.592 706.944z'%3E%3C/path%3E%3C/svg%3E") no-repeat;mask-size:100% 100%;-webkit-mask:url("data:image/svg+xml;utf8,%3Csvg class='icon' width='200' height='200' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='currentColor' d='M406.656 706.944L195.84 496.256a32 32 0 10-45.248 45.248l256 256 512-512a32 32 0 00-45.248-45.248L406.592 706.944z'%3E%3C/path%3E%3C/svg%3E") no-repeat;-webkit-mask-size:100% 100%;transform:translateY(-50%);width:12px;height:12px}.aah-select-dropdown.is-multiple .aah-select-dropdown__item.is-disabled:after{background-color:var(--aah-text-color-placeholder)}.aah-select-group{margin:0;padding:0}.aah-select-group__wrap{position:relative;list-style:none;margin:0;padding:0}.aah-select-group__wrap:not(:last-of-type){padding-bottom:24px}.aah-select-group__wrap:not(:last-of-type):after{content:"";position:absolute;display:block;left:20px;right:20px;bottom:12px;height:1px;background:var(--aah-border-color-light)}.aah-select-group__split-dash{position:absolute;left:20px;right:20px;height:1px;background:var(--aah-border-color-light)}.aah-select-group__title{padding-left:20px;font-size:12px;color:var(--aah-color-info);line-height:30px}.aah-select-group .aah-select-dropdown__item{padding-left:20px}.aah-select{--aah-select-border-color-hover: var(--aah-border-color-hover);--aah-select-disabled-color: var(--aah-disabled-text-color);--aah-select-disabled-border: var(--aah-disabled-border-color);--aah-select-font-size: var(--aah-font-size-base);--aah-select-close-hover-color: var(--aah-text-color-secondary);--aah-select-input-color: var(--aah-text-color-placeholder);--aah-select-multiple-input-color: var(--aah-text-color-regular);--aah-select-input-focus-border-color: var(--aah-color-primary);--aah-select-input-font-size: 14px;--aah-select-width: 100%}.aah-select{display:inline-block;position:relative;vertical-align:middle;width:var(--aah-select-width)}.aah-select__wrapper{display:flex;align-items:center;position:relative;box-sizing:border-box;cursor:pointer;text-align:left;font-size:14px;padding:4px 12px;gap:6px;min-height:32px;line-height:24px;border-radius:var(--aah-border-radius-base);background-color:var(--aah-fill-color-blank);transition:var(--aah-transition-duration);box-shadow:0 0 0 1px var(--aah-border-color) inset}.aah-select__wrapper:hover{box-shadow:0 0 0 1px var(--aah-text-color) inset}.aah-select__wrapper.is-filterable{cursor:text}.aah-select__wrapper.is-focused{box-shadow:0 0 0 1px var(--aah-color-primary) inset}.aah-select__wrapper.is-hovering:not(.is-focused){box-shadow:0 0 0 1px var(--aah-border-color-hover) inset}.aah-select__wrapper.is-disabled{cursor:not-allowed;background-color:var(--aah-fill-color-light);color:var(--aah-text-color-placeholder);box-shadow:0 0 0 1px var(--aah-select-disabled-border) inset}.aah-select__wrapper.is-disabled:hover{box-shadow:0 0 0 1px var(--aah-select-disabled-border) inset}.aah-select__wrapper.is-disabled.is-focus{box-shadow:0 0 0 1px var(--aah-input-focus-border-color) inset}.aah-select__wrapper.is-disabled .aah-select__selected-item{color:var(--aah-select-disabled-color)}.aah-select__wrapper.is-disabled .aah-select__caret,.aah-select__wrapper.is-disabled .aah-tag{cursor:not-allowed}.aah-select__prefix,.aah-select__suffix{display:flex;align-items:center;flex-shrink:0;gap:6px;color:var(--aah-input-icon-color, var(--aah-text-color-placeholder))}.aah-select__caret{color:var(--aah-select-input-color);font-size:var(--aah-select-input-font-size);transition:var(--aah-transition-duration);transform:rotate(0);cursor:pointer}.aah-select__caret.is-reverse{transform:rotate(180deg)}.aah-select__selection{position:relative;display:flex;flex-wrap:wrap;align-items:center;flex:1;min-width:0;gap:6px}.aah-select__selection.is-near{margin-left:-8px}.aah-select__selection .aah-tag{cursor:pointer;border-color:transparent}.aah-select__selection .aah-tag .aah-tag__content{min-width:0}.aah-select__selected-item{display:flex;flex-wrap:wrap;-webkit-user-select:none;user-select:none}.aah-select__tags-text{display:block;line-height:normal;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.aah-select__placeholder{position:absolute;display:block;top:50%;transform:translateY(-50%);width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--aah-input-text-color, var(--aah-text-color-regular))}.aah-select__placeholder.is-transparent{-webkit-user-select:none;user-select:none;color:var(--aah-text-color-placeholder)}.aah-select__popper.aah-popper{background:var(--aah-bg-color-overlay);border:1px solid var(--aah-border-color-light);box-shadow:var(--aah-box-shadow-light)}.aah-select__popper.aah-popper .aah-popper__arrow:before{border:1px solid var(--aah-border-color-light)}.aah-select__popper.aah-popper[data-popper-placement^=top] .aah-popper__arrow:before{border-top-color:transparent;border-left-color:transparent}.aah-select__popper.aah-popper[data-popper-placement^=bottom] .aah-popper__arrow:before{border-bottom-color:transparent;border-right-color:transparent}.aah-select__popper.aah-popper[data-popper-placement^=left] .aah-popper__arrow:before{border-left-color:transparent;border-bottom-color:transparent}.aah-select__popper.aah-popper[data-popper-placement^=right] .aah-popper__arrow:before{border-right-color:transparent;border-top-color:transparent}.aah-select__input-wrapper{max-width:100%}.aah-select__input-wrapper.is-hidden{position:absolute;opacity:0}.aah-select__input{border:none;outline:none;padding:0;color:var(--aah-select-multiple-input-color);font-size:inherit;font-family:inherit;-webkit-appearance:none;-moz-appearance:none;appearance:none;height:24px;max-width:100%;background-color:transparent}.aah-select__input.is-disabled{cursor:not-allowed}.aah-select__input-calculator{position:absolute;left:0;top:0;max-width:100%;visibility:hidden;white-space:pre;overflow:hidden}.aah-select--large .aah-select__wrapper{gap:6px;padding:8px 16px;min-height:40px;line-height:24px;font-size:14px}.aah-select--large .aah-select__selection{gap:6px}.aah-select--large .aah-select__selection.is-near{margin-left:-8px}.aah-select--large .aah-select__prefix,.aah-select--large .aah-select__suffix{gap:6px}.aah-select--large .aah-select__input{height:24px}.aah-select--small .aah-select__wrapper{gap:4px;padding:2px 8px;min-height:24px;line-height:20px;font-size:12px}.aah-select--small .aah-select__selection{gap:4px}.aah-select--small .aah-select__selection.is-near{margin-left:-6px}.aah-select--small .aah-select__prefix,.aah-select--small .aah-select__suffix{gap:4px}.aah-select--small .aah-select__input{height:20px}.aah-input-number{position:relative;display:inline-flex;width:150px;line-height:30px}.aah-input-number .aah-input__wrapper{padding-left:42px;padding-right:42px}.aah-input-number .aah-input__inner{-webkit-appearance:none;-moz-appearance:textfield;text-align:center;line-height:1}.aah-input-number .aah-input__inner::-webkit-inner-spin-button,.aah-input-number .aah-input__inner::-webkit-outer-spin-button{margin:0;-webkit-appearance:none}.aah-input-number__increase,.aah-input-number__decrease{display:flex;justify-content:center;align-items:center;height:auto;position:absolute;z-index:1;top:1px;bottom:1px;width:32px;background:var(--aah-fill-color-light);color:var(--aah-text-color-regular);cursor:pointer;font-size:13px;-webkit-user-select:none;user-select:none}.aah-input-number__increase:hover,.aah-input-number__decrease:hover{color:var(--aah-color-primary)}.aah-input-number__increase:hover~.aah-input:not(.is-disabled) .aah-input__wrapper,.aah-input-number__decrease:hover~.aah-input:not(.is-disabled) .aah-input__wrapper{box-shadow:0 0 0 1px var(--aah-input-focus-border-color, var(--aah-color-primary)) inset}.aah-input-number__increase.is-disabled,.aah-input-number__decrease.is-disabled{color:var(--aah-disabled-text-color);cursor:not-allowed}.aah-input-number__increase{right:1px;border-radius:0 var(--aah-border-radius-base) var(--aah-border-radius-base) 0;border-left:var(--aah-border)}.aah-input-number__decrease{left:1px;border-radius:var(--aah-border-radius-base) 0 0 var(--aah-border-radius-base);border-right:var(--aah-border)}.aah-input-number.is-disabled .aah-input-number__increase,.aah-input-number.is-disabled .aah-input-number__decrease{border-color:var(--aah-disabled-border-color);color:var(--aah-disabled-border-color)}.aah-input-number.is-disabled .aah-input-number__increase:hover,.aah-input-number.is-disabled .aah-input-number__decrease:hover{color:var(--aah-disabled-border-color);cursor:not-allowed}.aah-input-number--large{width:180px;line-height:38px}.aah-input-number--large .aah-input-number__increase,.aah-input-number--large .aah-input-number__decrease{width:40px;font-size:14px}.aah-input-number--large .aah-input__wrapper{padding-left:47px;padding-right:47px}.aah-input-number--small{width:120px;line-height:22px}.aah-input-number--small .aah-input-number__increase,.aah-input-number--small .aah-input-number__decrease{width:24px;font-size:12px}.aah-input-number--small .aah-input__wrapper{padding-left:31px;padding-right:31px}.aah-input-number--small .aah-input-number__increase [class*=aah-icon],.aah-input-number--small .aah-input-number__decrease [class*=aah-icon]{transform:scale(.9)}.aah-input-number.is-without-controls .aah-input__wrapper{padding-left:15px;padding-right:15px}.aah-input-number.is-controls-right .aah-input__wrapper{padding-left:15px;padding-right:42px}.aah-input-number.is-controls-right .aah-input-number__increase,.aah-input-number.is-controls-right .aah-input-number__decrease{--aah-input-number-controls-height: 15px;height:var(--aah-input-number-controls-height);line-height:var(--aah-input-number-controls-height)}.aah-input-number.is-controls-right .aah-input-number__increase [class*=aah-icon],.aah-input-number.is-controls-right .aah-input-number__decrease [class*=aah-icon]{transform:scale(.8)}.aah-input-number.is-controls-right .aah-input-number__increase{bottom:auto;left:auto;border-radius:0 var(--aah-border-radius-base) 0 0;border-bottom:var(--aah-border)}.aah-input-number.is-controls-right .aah-input-number__decrease{right:1px;top:auto;left:auto;border-right:none;border-left:var(--aah-border);border-radius:0 0 var(--aah-border-radius-base) 0}.aah-input-number.is-controls-right[class*=large] [class*=increase],.aah-input-number.is-controls-right[class*=large] [class*=decrease]{--aah-input-number-controls-height: 19px}.aah-input-number.is-controls-right[class*=small] [class*=increase],.aah-input-number.is-controls-right[class*=small] [class*=decrease]{--aah-input-number-controls-height: 11px}.aah-switch{--aah-switch-on-color: var(--aah-color-primary);--aah-switch-off-color: var(--aah-border-color)}.aah-switch{display:inline-flex;align-items:center;position:relative;font-size:14px;line-height:20px;height:32px;vertical-align:middle}.aah-switch.is-disabled .aah-switch__core,.aah-switch.is-disabled .aah-switch__label{cursor:not-allowed}.aah-switch__label{transition:var(--aah-transition-duration-fast);height:20px;display:inline-block;font-size:14px;font-weight:500;cursor:pointer;vertical-align:middle;color:var(--aah-text-color-primary)}.aah-switch__label.is-active{color:var(--aah-color-primary)}.aah-switch__label--left{margin-right:10px}.aah-switch__label--right{margin-left:10px}.aah-switch__label *{line-height:1;font-size:14px;display:inline-block}.aah-switch__label .aah-icon{height:inherit}.aah-switch__label .aah-icon svg{vertical-align:middle}.aah-switch__input{position:absolute;width:0;height:0;opacity:0;margin:0}.aah-switch__input:focus-visible~.aah-switch__core{outline:2px solid var(--aah-switch-on-color);outline-offset:1px}.aah-switch__core{display:inline-flex;position:relative;align-items:center;min-width:40px;height:20px;border:1px solid var(--aah-switch-border-color, var(--aah-switch-off-color));outline:none;border-radius:10px;box-sizing:border-box;background:var(--aah-switch-off-color);cursor:pointer;transition:border-color var(--aah-transition-duration),background-color var(--aah-transition-duration)}.aah-switch__core .aah-switch__inner{width:100%;transition:all var(--aah-transition-duration);height:16px;display:flex;justify-content:center;align-items:center;overflow:hidden;padding:0 4px 0 18px}.aah-switch__core .aah-switch__inner .is-icon,.aah-switch__core .aah-switch__inner .is-text{font-size:12px;color:var(--aah-color-white);-webkit-user-select:none;user-select:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.aah-switch__core .aah-switch__action{position:absolute;left:1px;border-radius:var(--aah-border-radius-circle);transition:all var(--aah-transition-duration);width:16px;height:16px;background-color:var(--aah-color-white);display:flex;justify-content:center;align-items:center;color:var(--aah-switch-off-color)}.aah-switch.is-checked .aah-switch__core{border-color:var(--aah-switch-border-color, var(--aah-switch-on-color));background-color:var(--aah-switch-on-color)}.aah-switch.is-checked .aah-switch__core .aah-switch__action{left:calc(100% - 17px);color:var(--aah-switch-on-color)}.aah-switch.is-checked .aah-switch__core .aah-switch__inner{padding:0 18px 0 4px}.aah-switch.is-disabled{opacity:.6}.aah-switch--wide .aah-switch__label.aah-switch__label--left span{left:10px}.aah-switch--wide .aah-switch__label.aah-switch__label--right span{right:10px}.aah-switch .label-fade-enter-from,.aah-switch .label-fade-leave-active{opacity:0}.aah-switch--large{font-size:14px;line-height:24px;height:40px}.aah-switch--large .aah-switch__label{height:24px;font-size:14px}.aah-switch--large .aah-switch__label *{font-size:14px}.aah-switch--large .aah-switch__core{min-width:50px;height:24px;border-radius:12px}.aah-switch--large .aah-switch__core .aah-switch__inner{height:20px;padding:0 6px 0 22px}.aah-switch--large .aah-switch__core .aah-switch__action{width:20px;height:20px}.aah-switch--large.is-checked .aah-switch__core .aah-switch__action{left:calc(100% - 21px)}.aah-switch--large.is-checked .aah-switch__core .aah-switch__inner{padding:0 22px 0 6px}.aah-switch--small{font-size:12px;line-height:16px;height:24px}.aah-switch--small .aah-switch__label{height:16px;font-size:12px}.aah-switch--small .aah-switch__label *{font-size:12px}.aah-switch--small .aah-switch__core{min-width:30px;height:16px;border-radius:8px}.aah-switch--small .aah-switch__core .aah-switch__inner{height:12px;padding:0 2px 0 14px}.aah-switch--small .aah-switch__core .aah-switch__action{width:12px;height:12px}.aah-switch--small.is-checked .aah-switch__core .aah-switch__action{left:calc(100% - 13px)}.aah-switch--small.is-checked .aah-switch__core .aah-switch__inner{padding:0 14px 0 2px}.el-row{margin-bottom:20px}.el-row:last-child{margin-bottom:0}.el-col{border-radius:4px}.grid-content{border-radius:4px;min-height:36px}:root{--aah-loading-spinner-size: 42px;--aah-loading-fullscreen-spinner-size: 50px}.aah-loading-parent--relative{position:relative!important}.aah-loading-parent--hidden{overflow:hidden!important}.aah-loading-mask{position:absolute;z-index:2000;background-color:var(--aah-mask-color);margin:0;top:0;right:0;bottom:0;left:0;transition:opacity var(--aah-transition-duration)}.aah-loading-mask.is-fullscreen{position:fixed}.aah-loading-mask.is-fullscreen .aah-loading-spinner{margin-top:calc((0px - var(--aah-loading-fullscreen-spinner-size)) / 2)}.aah-loading-mask.is-fullscreen .aah-loading-spinner .circular{height:var(--aah-loading-fullscreen-spinner-size);width:var(--aah-loading-fullscreen-spinner-size)}.aah-loading-spinner{top:50%;margin-top:calc((0px - var(--aah-loading-spinner-size)) / 2);width:100%;text-align:center;position:absolute}.aah-loading-spinner .aah-loading-text{color:var(--aah-color-primary);margin:3px 0;font-size:14px}.aah-loading-spinner .circular{display:inline;height:var(--aah-loading-spinner-size);width:var(--aah-loading-spinner-size);animation:loading-rotate 2s linear infinite}.aah-loading-spinner .path{animation:loading-dash 1.5s ease-in-out infinite;stroke-dasharray:90,150;stroke-dashoffset:0;stroke-width:2;stroke:var(--aah-color-primary);stroke-linecap:round}.aah-loading-spinner i{color:var(--aah-color-primary)}.aah-loading-fade-enter-from,.aah-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}}.aah-empty{--aah-empty-padding: 40px 0;--aah-empty-image-width: 160px;--aah-empty-description-margin-top: 20px;--aah-empty-bottom-margin-top: 20px;--aah-empty-fill-color-0: var(--aah-color-white);--aah-empty-fill-color-1: #fcfcfd;--aah-empty-fill-color-2: #f8f9fb;--aah-empty-fill-color-3: #f7f8fc;--aah-empty-fill-color-4: #eeeff3;--aah-empty-fill-color-5: #edeef2;--aah-empty-fill-color-6: #e9ebef;--aah-empty-fill-color-7: #e5e7e9;--aah-empty-fill-color-8: #e0e3e9;--aah-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(--aah-empty-padding)}.aah-empty__image{width:var(--aah-empty-image-width)}.aah-empty__image img{-webkit-user-select:none;user-select:none;width:100%;height:100%;vertical-align:top;object-fit:contain}.aah-empty__image svg{color:var(--aah-svg-monochrome-grey);fill:currentColor;width:100%;height:100%;vertical-align:top}.aah-empty__description{margin-top:var(--aah-empty-description-margin-top)}.aah-empty__description p{margin:0;font-size:var(--aah-font-size-base);color:var(--aah-text-color-secondary)}.aah-empty__bottom{margin-top:var(--aah-empty-bottom-margin-top)}.aah-form{--aah-form-label-font-size: var(--aah-font-size-base);--aah-form-inline-content-width: 220px}.aah-form--label-left .aah-form-item__label{justify-content:flex-start}.aah-form--label-top .aah-form-item{display:block}.aah-form--label-top .aah-form-item .aah-form-item__label{display:block;height:auto;text-align:left;margin-bottom:8px;line-height:22px}.aah-form--inline .aah-form-item{display:inline-flex;vertical-align:middle;margin-right:32px}.aah-form--inline.aah-form--label-top{display:flex;flex-wrap:wrap}.aah-form--inline.aah-form--label-top .aah-form-item{display:block}.aah-form--large.aah-form--label-top .aah-form-item .aah-form-item__label{margin-bottom:12px;line-height:22px}.aah-form--default.aah-form--label-top .aah-form-item .aah-form-item__label{margin-bottom:8px;line-height:22px}.aah-form--small.aah-form--label-top .aah-form-item .aah-form-item__label{margin-bottom:4px;line-height:20px}.aah-form-item{display:flex;--font-size: 14px;margin-bottom:18px}.aah-form-item .aah-form-item{margin-bottom:0}.aah-form-item .aah-input__validateIcon{display:none}.aah-form-item--large{--font-size: 14px;--aah-form-label-font-size: var(--font-size);margin-bottom:22px}.aah-form-item--large .aah-form-item__label{height:40px;line-height:40px}.aah-form-item--large .aah-form-item__content{line-height:40px}.aah-form-item--large .aah-form-item__error{padding-top:4px}.aah-form-item--default{--font-size: 14px;--aah-form-label-font-size: var(--font-size);margin-bottom:18px}.aah-form-item--default .aah-form-item__label{height:32px;line-height:32px}.aah-form-item--default .aah-form-item__content{line-height:32px}.aah-form-item--default .aah-form-item__error{padding-top:2px}.aah-form-item--small{--font-size: 12px;--aah-form-label-font-size: var(--font-size);margin-bottom:18px}.aah-form-item--small .aah-form-item__label{height:24px;line-height:24px}.aah-form-item--small .aah-form-item__content{line-height:24px}.aah-form-item--small .aah-form-item__error{padding-top:2px}.aah-form-item__label-wrap{display:flex}.aah-form-item__label{display:inline-flex;justify-content:flex-end;align-items:flex-start;flex:0 0 auto;font-size:var(--aah-form-label-font-size);color:var(--aah-text-color-regular);height:32px;line-height:32px;padding:0 12px 0 0;box-sizing:border-box}.aah-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}.aah-form-item__content .aah-input-group{vertical-align:top}.aah-form-item__error{color:var(--aah-color-danger);font-size:12px;line-height:1;padding-top:2px;position:absolute;top:100%;left:0}.aah-form-item__error--inline{position:relative;top:auto;left:auto;display:inline-block;margin-left:10px}.aah-form-item.is-required:not(.is-no-asterisk).asterisk-left>.aah-form-item__label:before,.aah-form-item.is-required:not(.is-no-asterisk).asterisk-left>.aah-form-item__label-wrap>.aah-form-item__label:before{content:"*";color:var(--aah-color-danger);margin-right:4px}.aah-form-item.is-required:not(.is-no-asterisk).asterisk-right>.aah-form-item__label:after,.aah-form-item.is-required:not(.is-no-asterisk).asterisk-right>.aah-form-item__label-wrap>.aah-form-item__label:after{content:"*";color:var(--aah-color-danger);margin-left:4px}.aah-form-item.is-error .aah-input__wrapper,.aah-form-item.is-error .aah-input__wrapper:hover,.aah-form-item.is-error .aah-input__wrapper:focus,.aah-form-item.is-error .aah-input__wrapper.is-focus,.aah-form-item.is-error .aah-textarea__inner,.aah-form-item.is-error .aah-textarea__inner:hover,.aah-form-item.is-error .aah-textarea__inner:focus,.aah-form-item.is-error .aah-textarea__inner.is-focus,.aah-form-item.is-error .aah-select__wrapper,.aah-form-item.is-error .aah-select__wrapper:hover,.aah-form-item.is-error .aah-select__wrapper:focus,.aah-form-item.is-error .aah-select__wrapper.is-focus{box-shadow:0 0 0 1px var(--aah-color-danger) inset}.aah-form-item.is-error .aah-input-group__append .aah-input__wrapper,.aah-form-item.is-error .aah-input-group__prepend .aah-input__wrapper{box-shadow:0 0 0 1px transparent inset}.aah-form-item.is-error .aah-input__validateIcon{color:var(--aah-color-danger)}.aah-form-item--feedback .aah-input__validateIcon{display:inline-flex}.aah_btn{width:100%}.aah_title img{max-width:100%;height:auto;overflow:hidden}.aah_title{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;margin-bottom:10px}.aah_active{box-shadow:0 0 5px #0af}.aah_password input{--el-input-inner-height: calc(var(--el-input-height, 32px) - 2px);background:none;border:none;box-sizing:border-box;color:var(--el-input-text-color, var(--el-text-color-regular));flex-grow:1;font-size:inherit;height:var(--el-input-inner-height);line-height:var(--el-input-inner-height);outline:none;padding:0;width:100%;margin:auto}.el-input__inner{border:none!important;margin:auto;--el-input-inner-height: calc(var(--el-input-height, 32px) - 2px);background:none;border:none;box-sizing:border-box;color:var(--el-input-text-color, var(--el-text-color-regular));flex-grow:1;font-size:inherit;height:var(--el-input-inner-height);line-height:var(--el-input-inner-height);outline:none;padding:0;width:100%}.aah_bomHet50{padding:13px 0 13px 10px}.aah_bomHet50 span{display:inline-block;line-height:24px;padding-left:14px;color:#a8a8b3}.aah_bomHet50 span i{display:inline-block;width:10px;height:10px;border:1px solid #DBDFE9;border-radius:2px;vertical-align:middle;margin-right:4px;margin-top:-2px}.aah_bomHet50 .dq i{background-color:#ecf5ff;box-shadow:0 0 5px #0af}.aah_bomHet50 .yp i{background-color:#f0f9eb;border-color:#409eff}.aah_bomHet50 .wp i{background-color:#fef0f0;border-color:#f56c6c}.aah-table{--aah-table-border-color: var(--aah-border-color-lighter);--aah-table-border: 1px solid var(--aah-table-border-color);--aah-table-text-color: var(--aah-text-color-regular);--aah-table-header-text-color: var(--aah-text-color-secondary);--aah-table-row-hover-bg-color: var(--aah-fill-color-light);--aah-table-current-row-bg-color: var(--aah-color-primary-light-9);--aah-table-header-bg-color: var(--aah-bg-color);--aah-table-fixed-box-shadow: var(--aah-box-shadow-light);--aah-table-bg-color: var(--aah-fill-color-blank);--aah-table-tr-bg-color: var(--aah-bg-color);--aah-table-expanded-cell-bg-color: var(--aah-fill-color-blank);--aah-table-fixed-left-column: inset 10px 0 10px -10px rgba(0, 0, 0, .15);--aah-table-fixed-right-column: inset -10px 0 10px -10px rgba(0, 0, 0, .15);--aah-table-index: var(--aah-index-normal)}.aah-table{position:relative;overflow:hidden;box-sizing:border-box;height:fit-content;width:100%;max-width:100%;background-color:var(--aah-table-bg-color);font-size:14px;color:var(--aah-table-text-color)}.aah-table__inner-wrapper{position:relative;display:flex;flex-direction:column;height:100%}.aah-table__inner-wrapper:before{left:0;bottom:0;width:100%;height:1px}.aah-table tbody:focus-visible{outline:none}.aah-table.has-footer.aah-table--scrollable-y tr:last-child td.aah-table__cell,.aah-table.has-footer.aah-table--fluid-height tr:last-child td.aah-table__cell{border-bottom-color:transparent}.aah-table__empty-block{position:sticky;left:0;min-height:60px;text-align:center;width:100%;display:flex;justify-content:center;align-items:center}.aah-table__empty-text{line-height:60px;width:50%;color:var(--aah-text-color-secondary)}.aah-table__expand-column .cell{padding:0;text-align:center;-webkit-user-select:none;user-select:none}.aah-table__expand-icon{position:relative;cursor:pointer;color:var(--aah-text-color-regular);font-size:12px;transition:transform var(--aah-transition-duration-fast) ease-in-out;height:20px}.aah-table__expand-icon--expanded{transform:rotate(90deg)}.aah-table__expand-icon>.aah-icon{font-size:12px}.aah-table__expanded-cell{background-color:var(--aah-table-expanded-cell-bg-color)}.aah-table__expanded-cell[class*=cell]{padding:20px 50px}.aah-table__expanded-cell:hover{background-color:transparent!important}.aah-table__placeholder{display:inline-block;width:20px}.aah-table__append-wrapper{overflow:hidden}.aah-table--fit{border-right:0;border-bottom:0}.aah-table--fit .aah-table__cell.gutter{border-right-width:1px}.aah-table thead{color:var(--aah-table-header-text-color)}.aah-table thead th{font-weight:600}.aah-table thead.is-group th.aah-table__cell{background:var(--aah-fill-color-light)}.aah-table .aah-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(--aah-table-index)}.aah-table .aah-table__cell.is-center{text-align:center}.aah-table .aah-table__cell.is-right{text-align:right}.aah-table .aah-table__cell.gutter{width:15px;border-right-width:0;border-bottom-width:0;padding:0}.aah-table .aah-table__cell.is-hidden>*{visibility:hidden}.aah-table .cell{box-sizing:border-box;overflow:hidden;text-overflow:ellipsis;white-space:normal;overflow-wrap:break-word;line-height:23px;padding:0 12px}.aah-table .cell.aah-tooltip{white-space:nowrap;min-width:50px}.aah-table--large{font-size:var(--aah-font-size-base)}.aah-table--large .aah-table__cell{padding:12px 0}.aah-table--large .cell{padding:0 16px}.aah-table--default{font-size:14px}.aah-table--default .aah-table__cell{padding:8px 0}.aah-table--default .cell{padding:0 12px}.aah-table--small{font-size:12px}.aah-table--small .aah-table__cell{padding:4px 0}.aah-table--small .cell{padding:0 8px}.aah-table tr{background-color:var(--aah-table-tr-bg-color)}.aah-table tr input[type=checkbox]{margin:0}.aah-table th.aah-table__cell.is-leaf,.aah-table td.aah-table__cell{border-bottom:var(--aah-table-border)}.aah-table th.aah-table__cell.is-sortable{cursor:pointer}.aah-table th.aah-table__cell{-webkit-user-select:none;user-select:none;background-color:var(--aah-table-header-bg-color)}.aah-table th.aah-table__cell>.cell.highlight{color:var(--aah-color-primary)}.aah-table th.aah-table__cell.required>div:before{display:inline-block;content:"";width:8px;height:8px;border-radius:50%;background:#ff4d51;margin-right:5px;vertical-align:middle}.aah-table td.aah-table__cell div{box-sizing:border-box}.aah-table td.aah-table__cell.gutter{width:0}.aah-table--border:after,.aah-table--border:before,.aah-table--border .aah-table__inner-wrapper:after,.aah-table__inner-wrapper:before{content:"";position:absolute;background-color:var(--aah-table-border-color);z-index:calc(var(--aah-table-index) + 2)}.aah-table--border .aah-table__inner-wrapper:after{left:0;top:0;width:100%;height:1px;z-index:calc(var(--aah-table-index) + 2)}.aah-table--border:before{top:-1px;left:0;width:1px;height:100%}.aah-table--border:after{top:-1px;right:0;width:1px;height:100%}.aah-table--border .aah-table__inner-wrapper{border-right:none;border-bottom:none}.aah-table--border .aah-table__footer-wrapper{position:relative;flex-shrink:0}.aah-table--border .aah-table__cell{border-right:var(--aah-table-border)}.aah-table--border th.aah-table__cell.gutter:last-of-type{border-bottom:var(--aah-table-border);border-bottom-width:1px}.aah-table--border th.aah-table__cell{border-bottom:var(--aah-table-border)}.aah-table--hidden{visibility:hidden}.aah-table__header-wrapper,.aah-table__body-wrapper,.aah-table__footer-wrapper{width:100%}.aah-table__header-wrapper tr td.aah-table-fixed-column--left,.aah-table__header-wrapper tr td.aah-table-fixed-column--right,.aah-table__header-wrapper tr th.aah-table-fixed-column--left,.aah-table__header-wrapper tr th.aah-table-fixed-column--right,.aah-table__body-wrapper tr td.aah-table-fixed-column--left,.aah-table__body-wrapper tr td.aah-table-fixed-column--right,.aah-table__body-wrapper tr th.aah-table-fixed-column--left,.aah-table__body-wrapper tr th.aah-table-fixed-column--right,.aah-table__footer-wrapper tr td.aah-table-fixed-column--left,.aah-table__footer-wrapper tr td.aah-table-fixed-column--right,.aah-table__footer-wrapper tr th.aah-table-fixed-column--left,.aah-table__footer-wrapper tr th.aah-table-fixed-column--right{position:sticky!important;background:inherit;z-index:calc(var(--aah-table-index) + 1)}.aah-table__header-wrapper tr td.aah-table-fixed-column--left.is-last-column:before,.aah-table__header-wrapper tr td.aah-table-fixed-column--left.is-first-column:before,.aah-table__header-wrapper tr td.aah-table-fixed-column--right.is-last-column:before,.aah-table__header-wrapper tr td.aah-table-fixed-column--right.is-first-column:before,.aah-table__header-wrapper tr th.aah-table-fixed-column--left.is-last-column:before,.aah-table__header-wrapper tr th.aah-table-fixed-column--left.is-first-column:before,.aah-table__header-wrapper tr th.aah-table-fixed-column--right.is-last-column:before,.aah-table__header-wrapper tr th.aah-table-fixed-column--right.is-first-column:before,.aah-table__body-wrapper tr td.aah-table-fixed-column--left.is-last-column:before,.aah-table__body-wrapper tr td.aah-table-fixed-column--left.is-first-column:before,.aah-table__body-wrapper tr td.aah-table-fixed-column--right.is-last-column:before,.aah-table__body-wrapper tr td.aah-table-fixed-column--right.is-first-column:before,.aah-table__body-wrapper tr th.aah-table-fixed-column--left.is-last-column:before,.aah-table__body-wrapper tr th.aah-table-fixed-column--left.is-first-column:before,.aah-table__body-wrapper tr th.aah-table-fixed-column--right.is-last-column:before,.aah-table__body-wrapper tr th.aah-table-fixed-column--right.is-first-column:before,.aah-table__footer-wrapper tr td.aah-table-fixed-column--left.is-last-column:before,.aah-table__footer-wrapper tr td.aah-table-fixed-column--left.is-first-column:before,.aah-table__footer-wrapper tr td.aah-table-fixed-column--right.is-last-column:before,.aah-table__footer-wrapper tr td.aah-table-fixed-column--right.is-first-column:before,.aah-table__footer-wrapper tr th.aah-table-fixed-column--left.is-last-column:before,.aah-table__footer-wrapper tr th.aah-table-fixed-column--left.is-first-column:before,.aah-table__footer-wrapper tr th.aah-table-fixed-column--right.is-last-column:before,.aah-table__footer-wrapper tr th.aah-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}.aah-table__header-wrapper tr td.aah-table-fixed-column--left.is-first-column:before,.aah-table__header-wrapper tr td.aah-table-fixed-column--right.is-first-column:before,.aah-table__header-wrapper tr th.aah-table-fixed-column--left.is-first-column:before,.aah-table__header-wrapper tr th.aah-table-fixed-column--right.is-first-column:before,.aah-table__body-wrapper tr td.aah-table-fixed-column--left.is-first-column:before,.aah-table__body-wrapper tr td.aah-table-fixed-column--right.is-first-column:before,.aah-table__body-wrapper tr th.aah-table-fixed-column--left.is-first-column:before,.aah-table__body-wrapper tr th.aah-table-fixed-column--right.is-first-column:before,.aah-table__footer-wrapper tr td.aah-table-fixed-column--left.is-first-column:before,.aah-table__footer-wrapper tr td.aah-table-fixed-column--right.is-first-column:before,.aah-table__footer-wrapper tr th.aah-table-fixed-column--left.is-first-column:before,.aah-table__footer-wrapper tr th.aah-table-fixed-column--right.is-first-column:before{left:-10px}.aah-table__header-wrapper tr td.aah-table-fixed-column--left.is-last-column:before,.aah-table__header-wrapper tr td.aah-table-fixed-column--right.is-last-column:before,.aah-table__header-wrapper tr th.aah-table-fixed-column--left.is-last-column:before,.aah-table__header-wrapper tr th.aah-table-fixed-column--right.is-last-column:before,.aah-table__body-wrapper tr td.aah-table-fixed-column--left.is-last-column:before,.aah-table__body-wrapper tr td.aah-table-fixed-column--right.is-last-column:before,.aah-table__body-wrapper tr th.aah-table-fixed-column--left.is-last-column:before,.aah-table__body-wrapper tr th.aah-table-fixed-column--right.is-last-column:before,.aah-table__footer-wrapper tr td.aah-table-fixed-column--left.is-last-column:before,.aah-table__footer-wrapper tr td.aah-table-fixed-column--right.is-last-column:before,.aah-table__footer-wrapper tr th.aah-table-fixed-column--left.is-last-column:before,.aah-table__footer-wrapper tr th.aah-table-fixed-column--right.is-last-column:before{right:-10px;box-shadow:none}.aah-table__header-wrapper tr td.aah-table__fixed-right-patch,.aah-table__header-wrapper tr th.aah-table__fixed-right-patch,.aah-table__body-wrapper tr td.aah-table__fixed-right-patch,.aah-table__body-wrapper tr th.aah-table__fixed-right-patch,.aah-table__footer-wrapper tr td.aah-table__fixed-right-patch,.aah-table__footer-wrapper tr th.aah-table__fixed-right-patch{position:sticky!important;z-index:calc(var(--aah-table-index) + 1);background:#fff;right:0}.aah-table__header-wrapper{flex-shrink:0}.aah-table__header-wrapper tr th.aah-table-fixed-column--left,.aah-table__header-wrapper tr th.aah-table-fixed-column--right{background-color:var(--aah-table-header-bg-color)}.aah-table__header,.aah-table__body,.aah-table__footer{table-layout:fixed;border-collapse:separate}.aah-table__header-wrapper{overflow:hidden}.aah-table__header-wrapper tbody td.aah-table__cell{background-color:var(--aah-table-row-hover-bg-color);color:var(--aah-table-text-color)}.aah-table__footer-wrapper{overflow:hidden;flex-shrink:0}.aah-table__footer-wrapper tfoot td.aah-table__cell{background-color:var(--aah-table-row-hover-bg-color);color:var(--aah-table-text-color)}.aah-table__header-wrapper .aah-table-column--selection>.cell,.aah-table__body-wrapper .aah-table-column--selection>.cell{display:inline-flex;align-items:center;height:23px}.aah-table__header-wrapper .aah-table-column--selection .aah-checkbox,.aah-table__body-wrapper .aah-table-column--selection .aah-checkbox{height:unset}.aah-table.is-scrolling-left .aah-table-fixed-column--right.is-first-column:before{box-shadow:var(--aah-table-fixed-right-column)}.aah-table.is-scrolling-left.aah-table--border .aah-table-fixed-column--left.is-last-column.aah-table__cell{border-right:var(--aah-table-border)}.aah-table.is-scrolling-left th.aah-table-fixed-column--left{background-color:var(--aah-table-header-bg-color)}.aah-table.is-scrolling-right .aah-table-fixed-column--left.is-last-column:before{box-shadow:var(--aah-table-fixed-left-column)}.aah-table.is-scrolling-right .aah-table-fixed-column--left.is-last-column.aah-table__cell{border-right:none}.aah-table.is-scrolling-right th.aah-table-fixed-column--right{background-color:var(--aah-table-header-bg-color)}.aah-table.is-scrolling-middle .aah-table-fixed-column--left.is-last-column.aah-table__cell{border-right:none}.aah-table.is-scrolling-middle .aah-table-fixed-column--right.is-first-column:before{box-shadow:var(--aah-table-fixed-right-column)}.aah-table.is-scrolling-middle .aah-table-fixed-column--left.is-last-column:before{box-shadow:var(--aah-table-fixed-left-column)}.aah-table.is-scrolling-none .aah-table-fixed-column--left.is-first-column:before,.aah-table.is-scrolling-none .aah-table-fixed-column--left.is-last-column:before,.aah-table.is-scrolling-none .aah-table-fixed-column--right.is-first-column:before,.aah-table.is-scrolling-none .aah-table-fixed-column--right.is-last-column:before{box-shadow:none}.aah-table.is-scrolling-none th.aah-table-fixed-column--left,.aah-table.is-scrolling-none th.aah-table-fixed-column--right{background-color:var(--aah-table-header-bg-color)}.aah-table__body-wrapper{overflow:hidden;position:relative;flex:1}.aah-table__body-wrapper .aah-scrollbar__bar{z-index:calc(var(--aah-table-index) + 2)}.aah-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}.aah-table .sort-caret{width:0;height:0;border:solid 5px transparent;position:absolute;left:7px}.aah-table .sort-caret.ascending{border-bottom-color:var(--aah-text-color-placeholder);top:-5px}.aah-table .sort-caret.descending{border-top-color:var(--aah-text-color-placeholder);bottom:-3px}.aah-table .ascending .sort-caret.ascending{border-bottom-color:var(--aah-color-primary)}.aah-table .descending .sort-caret.descending{border-top-color:var(--aah-color-primary)}.aah-table .hidden-columns{visibility:hidden;position:absolute;z-index:-1}.aah-table--striped .aah-table__body tr.aah-table__row--striped td.aah-table__cell{background:var(--aah-fill-color-lighter)}.aah-table--striped .aah-table__body tr.aah-table__row--striped.current-row td.aah-table__cell{background-color:var(--aah-table-current-row-bg-color)}.aah-table__body tr.hover-row>td.aah-table__cell,.aah-table__body tr.hover-row.current-row>td.aah-table__cell,.aah-table__body tr.hover-row.aah-table__row--striped>td.aah-table__cell,.aah-table__body tr.hover-row.aah-table__row--striped.current-row>td.aah-table__cell{background-color:var(--aah-table-row-hover-bg-color)}.aah-table__body tr>td.hover-cell{background-color:var(--aah-table-row-hover-bg-color)}.aah-table__body tr.current-row>td.aah-table__cell{background-color:var(--aah-table-current-row-bg-color)}.aah-table.aah-table--scrollable-y .aah-table__body-header{position:sticky;top:0;z-index:calc(var(--aah-table-index) + 2)}.aah-table.aah-table--scrollable-y .aah-table__body-footer{position:sticky;bottom:0;z-index:calc(var(--aah-table-index) + 2)}.aah-table__column-resize-proxy{position:absolute;left:200px;top:0;bottom:0;width:0;border-left:var(--aah-table-border);z-index:calc(var(--aah-table-index) + 9)}.aah-table__column-filter-trigger{display:inline-block;cursor:pointer}.aah-table__column-filter-trigger i{color:var(--aah-color-info);font-size:14px;vertical-align:middle}.aah-table__border-left-patch{top:0;left:0;width:1px;height:100%;z-index:calc(var(--aah-table-index) + 2);position:absolute;background-color:var(--aah-table-border-color)}.aah-table__border-bottom-patch{left:0;height:1px;z-index:calc(var(--aah-table-index) + 2);position:absolute;background-color:var(--aah-table-border-color)}.aah-table__border-right-patch{top:0;height:100%;width:1px;z-index:calc(var(--aah-table-index) + 2);position:absolute;background-color:var(--aah-table-border-color)}.aah-table--enable-row-transition .aah-table__body td.aah-table__cell{transition:background-color .25s ease}.aah-table--enable-row-hover .aah-table__body tr:hover>td.aah-table__cell{background-color:var(--aah-table-row-hover-bg-color)}.aah-table [class*=aah-table__row--level] .aah-table__expand-icon{display:inline-block;width:12px;line-height:12px;height:12px;text-align:center;margin-right:8px}.aah-table .aah-table.aah-table--border .aah-table__cell{border-right:var(--aah-table-border)}.aah-table:not(.aah-table--border) .aah-table__cell{border-right:none}.aah-table:not(.aah-table--border)>.aah-table__inner-wrapper:after{content:none}.aah-table-column--selection .cell{padding-left:14px;padding-right:14px}.aah-table-filter{border:solid 1px var(--aah-border-color-lighter);border-radius:2px;background-color:#fff;box-shadow:var(--aah-box-shadow-light);box-sizing:border-box}.aah-table-filter__list{padding:5px 0;margin:0;list-style:none;min-width:100px}.aah-table-filter__list-item{line-height:36px;padding:0 10px;cursor:pointer;font-size:var(--aah-font-size-base)}.aah-table-filter__list-item:hover{background-color:var(--aah-color-primary-light-9);color:var(--aah-color-primary)}.aah-table-filter__list-item.is-active{background-color:var(--aah-color-primary);color:#fff}.aah-table-filter__content{min-width:100px}.aah-table-filter__bottom{border-top:1px solid var(--aah-border-color-lighter);padding:8px}.aah-table-filter__bottom button{background:transparent;border:none;color:var(--aah-text-color-regular);cursor:pointer;font-size:var(--aah-font-size-small);padding:0 3px}.aah-table-filter__bottom button:hover{color:var(--aah-color-primary)}.aah-table-filter__bottom button:focus{outline:none}.aah-table-filter__bottom button.is-disabled{color:var(--aah-disabled-text-color);cursor:not-allowed}.aah-table-filter__wrap{max-height:280px}.aah-table-filter__checkbox-group{padding:10px}.aah-table-filter__checkbox-group label.aah-checkbox{display:flex;align-items:center;margin-right:5px;margin-bottom:12px;margin-left:5px;height:unset}.aah-table-filter__checkbox-group .aah-checkbox:last-child{margin-bottom:0}.aah-popconfirm__main{display:flex;align-items:center}.aah-popconfirm__icon{margin-right:5px}.aah-popconfirm__action{text-align:right;margin-top:8px}.aah-popover{--aah-popover-bg-color: var(--aah-bg-color-overlay);--aah-popover-font-size: var(--aah-font-size-base);--aah-popover-border-color: var(--aah-border-color-lighter);--aah-popover-padding: 12px;--aah-popover-padding-large: 18px 20px;--aah-popover-title-font-size: 16px;--aah-popover-title-text-color: var(--aah-text-color-primary);--aah-popover-border-radius: 4px}.aah-popover.aah-popper{background:var(--aah-popover-bg-color);min-width:150px;border-radius:var(--aah-popover-border-radius);border:1px solid var(--aah-popover-border-color);padding:var(--aah-popover-padding);z-index:var(--aah-index-popper);color:var(--aah-text-color-regular);line-height:1.4;font-size:var(--aah-popover-font-size);box-shadow:var(--aah-box-shadow-light);overflow-wrap:break-word;box-sizing:border-box}.aah-popover.aah-popper--plain{padding:var(--aah-popover-padding-large)}.aah-popover__title{color:var(--aah-popover-title-text-color);font-size:var(--aah-popover-title-font-size);line-height:1;margin-bottom:12px}.aah-popover__reference:focus:not(.focusing),.aah-popover__reference:focus:hover{outline-width:0}.aah-popover.aah-popper.is-dark{--aah-popover-bg-color: var(--aah-text-color-primary);--aah-popover-border-color: var(--aah-text-color-primary);--aah-popover-title-text-color: var(--aah-bg-color);color:var(--aah-bg-color)}.aah-popover.aah-popper:focus:active,.aah-popover.aah-popper:focus{outline-width:0}.aah-statistic{--aah-statistic-title-font-weight: 400;--aah-statistic-title-font-size: var(--aah-font-size-extra-small);--aah-statistic-title-color: var(--aah-text-color-regular);--aah-statistic-content-font-weight: 400;--aah-statistic-content-font-size: var(--aah-font-size-extra-large);--aah-statistic-content-color: var(--aah-text-color-primary)}.aah-statistic__head{font-weight:var(--aah-statistic-title-font-weight);font-size:var(--aah-statistic-title-font-size);color:var(--aah-statistic-title-color);line-height:20px;margin-bottom:4px}.aah-statistic__content{font-weight:var(--aah-statistic-content-font-weight);font-size:var(--aah-statistic-content-font-size);color:var(--aah-statistic-content-color)}.aah-statistic__value{display:inline-block}.aah-statistic__prefix{margin-right:4px;display:inline-block}.aah-statistic__suffix{margin-left:4px;display:inline-block}#AiAskApp .aah_wrapper>div{pointer-events:none}#AiAskApp .aah_wrapper>div>div{pointer-events:none}.aah-dialog{pointer-events:auto}@media (max-width: 600px){#AiAskApp .aah-scrollbar,#AiAskApp .aah-scrollbar__wrap{max-height:50vh!important}}@media (min-width: 601px){#AiAskApp .aah-scrollbar,#AiAskApp .aah-scrollbar__wrap{max-height:700px!important}}.minimized-dialog img{pointer-events:auto;width:50px!important;z-index:999;position:fixed;bottom:0;right:0}.aah_breadcrumb{margin-bottom:20px}html.dark{color-scheme:dark;--aah-color-primary: #409eff;--aah-color-primary-light-3: #3375b9;--aah-color-primary-light-5: #2a598a;--aah-color-primary-light-7: #213d5b;--aah-color-primary-light-8: #1d3043;--aah-color-primary-light-9: #18222c;--aah-color-primary-dark-2: #66b1ff;--aah-color-success: #67c23a;--aah-color-success-light-3: #4e8e2f;--aah-color-success-light-5: #3e6b27;--aah-color-success-light-7: #2d481f;--aah-color-success-light-8: #25371c;--aah-color-success-light-9: #1c2518;--aah-color-success-dark-2: #85ce61;--aah-color-warning: #e6a23c;--aah-color-warning-light-3: #a77730;--aah-color-warning-light-5: #7d5b28;--aah-color-warning-light-7: #533f20;--aah-color-warning-light-8: #3e301c;--aah-color-warning-light-9: #292218;--aah-color-warning-dark-2: #ebb563;--aah-color-danger: #f56c6c;--aah-color-danger-light-3: #b25252;--aah-color-danger-light-5: #854040;--aah-color-danger-light-7: #582e2e;--aah-color-danger-light-8: #412626;--aah-color-danger-light-9: #2b1d1d;--aah-color-danger-dark-2: #f78989;--aah-color-error: #f56c6c;--aah-color-error-light-3: #b25252;--aah-color-error-light-5: #854040;--aah-color-error-light-7: #582e2e;--aah-color-error-light-8: #412626;--aah-color-error-light-9: #2b1d1d;--aah-color-error-dark-2: #f78989;--aah-color-info: #909399;--aah-color-info-light-3: #6b6d71;--aah-color-info-light-5: #525457;--aah-color-info-light-7: #393a3c;--aah-color-info-light-8: #2d2d2f;--aah-color-info-light-9: #202121;--aah-color-info-dark-2: #a6a9ad;--aah-box-shadow: 0px 12px 32px 4px rgba(0, 0, 0, .36), 0px 8px 20px rgba(0, 0, 0, .72);--aah-box-shadow-light: 0px 0px 12px rgba(0, 0, 0, .72);--aah-box-shadow-lighter: 0px 0px 6px rgba(0, 0, 0, .72);--aah-box-shadow-dark: 0px 16px 48px 16px rgba(0, 0, 0, .72), 0px 12px 32px #000000, 0px 8px 16px -8px #000000;--aah-bg-color-page: #0a0a0a;--aah-bg-color: #141414;--aah-bg-color-overlay: #1d1e1f;--aah-text-color-primary: #E5EAF3;--aah-text-color-regular: #CFD3DC;--aah-text-color-secondary: #A3A6AD;--aah-text-color-placeholder: #8D9095;--aah-text-color-disabled: #6C6E72;--aah-border-color-darker: #636466;--aah-border-color-dark: #58585B;--aah-border-color: #4C4D4F;--aah-border-color-light: #414243;--aah-border-color-lighter: #363637;--aah-border-color-extra-light: #2B2B2C;--aah-fill-color-darker: #424243;--aah-fill-color-dark: #39393A;--aah-fill-color: #303030;--aah-fill-color-light: #262727;--aah-fill-color-lighter: #1D1D1D;--aah-fill-color-extra-light: #191919;--aah-fill-color-blank: transparent;--aah-mask-color: rgba(0, 0, 0, .8);--aah-mask-color-extra-light: rgba(0, 0, 0, .3)}html.dark .aah-button{--aah-button-disabled-text-color: rgba(255, 255, 255, .5)}html.dark .aah-card{--aah-card-bg-color: var(--aah-bg-color-overlay)}html.dark .aah-empty{--aah-empty-fill-color-0: var(--aah-color-black);--aah-empty-fill-color-1: #4b4b52;--aah-empty-fill-color-2: #36383d;--aah-empty-fill-color-3: #1e1e20;--aah-empty-fill-color-4: #262629;--aah-empty-fill-color-5: #202124;--aah-empty-fill-color-6: #212224;--aah-empty-fill-color-7: #1b1c1f;--aah-empty-fill-color-8: #1c1d1f;--aah-empty-fill-color-9: #18181a}*,:before,:after{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 rgb(0 0 0 / 0);--un-ring-shadow:0 0 rgb(0 0 0 / 0);--un-shadow-inset: ;--un-shadow:0 0 rgb(0 0 0 / 0);--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgb(147 197 253 / .5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }::backdrop{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 rgb(0 0 0 / 0);--un-ring-shadow:0 0 rgb(0 0 0 / 0);--un-shadow-inset: ;--un-shadow:0 0 rgb(0 0 0 / 0);--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgb(147 197 253 / .5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }.fixed{position:fixed}.mx-1{margin-left:.25rem;margin-right:.25rem}.inline-block{display:inline-block}.hidden{display:none}.flex-grow{flex-grow:1}.table{display:table}.border{border-width:1px}[align~=middle]{vertical-align:middle}.outline{outline-style:solid}.aah-message{--aah-message-bg-color: var(--aah-color-info-light-9);--aah-message-border-color: var(--aah-border-color-lighter);--aah-message-padding: 11px 15px;--aah-message-close-size: 16px;--aah-message-close-icon-color: var(--aah-text-color-placeholder);--aah-message-close-hover-color: var(--aah-text-color-secondary)}.aah-message{width:fit-content;max-width:calc(100% - 32px);box-sizing:border-box;border-radius:var(--aah-border-radius-base);border-width:var(--aah-border-width);border-style:var(--aah-border-style);border-color:var(--aah-message-border-color);position:fixed;left:50%;top:20px;transform:translate(-50%);background-color:var(--aah-message-bg-color);transition:opacity var(--aah-transition-duration),transform .4s,top .4s;padding:var(--aah-message-padding);display:flex;align-items:center;gap:8px}.aah-message.is-center{justify-content:center}.aah-message.is-plain{background-color:var(--aah-bg-color-overlay);border-color:var(--aah-bg-color-overlay);box-shadow:var(--aah-box-shadow-light)}.aah-message p{margin:0}.aah-message--success{--aah-message-bg-color: var(--aah-color-success-light-9);--aah-message-border-color: var(--aah-color-success-light-8);--aah-message-text-color: var(--aah-color-success)}.aah-message--success .aah-message__content{color:var(--aah-message-text-color);overflow-wrap:break-word}.aah-message .aah-message-icon--success{color:var(--aah-message-text-color)}.aah-message--info{--aah-message-bg-color: var(--aah-color-info-light-9);--aah-message-border-color: var(--aah-color-info-light-8);--aah-message-text-color: var(--aah-color-info)}.aah-message--info .aah-message__content{color:var(--aah-message-text-color);overflow-wrap:break-word}.aah-message .aah-message-icon--info{color:var(--aah-message-text-color)}.aah-message--warning{--aah-message-bg-color: var(--aah-color-warning-light-9);--aah-message-border-color: var(--aah-color-warning-light-8);--aah-message-text-color: var(--aah-color-warning)}.aah-message--warning .aah-message__content{color:var(--aah-message-text-color);overflow-wrap:break-word}.aah-message .aah-message-icon--warning{color:var(--aah-message-text-color)}.aah-message--error{--aah-message-bg-color: var(--aah-color-error-light-9);--aah-message-border-color: var(--aah-color-error-light-8);--aah-message-text-color: var(--aah-color-error)}.aah-message--error .aah-message__content{color:var(--aah-message-text-color);overflow-wrap:break-word}.aah-message .aah-message-icon--error{color:var(--aah-message-text-color)}.aah-message .aah-message__badge{position:absolute;top:-8px;right:-8px}.aah-message__content{padding:0;font-size:14px;line-height:1}.aah-message__content:focus{outline-width:0}.aah-message .aah-message__closeBtn{cursor:pointer;color:var(--aah-message-close-icon-color);font-size:var(--aah-message-close-size)}.aah-message .aah-message__closeBtn:focus{outline-width:0}.aah-message .aah-message__closeBtn:hover{color:var(--aah-message-close-hover-color)}.aah-message-fade-enter-from,.aah-message-fade-leave-to{opacity:0;transform:translate(-50%,-100%)}:root{--aah-popup-modal-bg-color: var(--aah-color-black);--aah-popup-modal-opacity: .5}.v-modal-enter{animation:v-modal-in var(--aah-transition-duration-fast) ease}.v-modal-leave{animation:v-modal-out var(--aah-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(--aah-popup-modal-opacity);background:var(--aah-popup-modal-bg-color)}.aah-popup-parent--hidden{overflow:hidden}.aah-message-box{--aah-messagebox-title-color: var(--aah-text-color-primary);--aah-messagebox-width: 420px;--aah-messagebox-border-radius: 4px;--aah-messagebox-box-shadow: var(--aah-box-shadow);--aah-messagebox-font-size: var(--aah-font-size-large);--aah-messagebox-content-font-size: var(--aah-font-size-base);--aah-messagebox-content-color: var(--aah-text-color-regular);--aah-messagebox-error-font-size: 12px;--aah-messagebox-padding-primary: 12px;--aah-messagebox-font-line-height: var(--aah-font-line-height-primary)}.aah-message-box{display:inline-block;position:relative;max-width:var(--aah-messagebox-width);width:100%;padding:var(--aah-messagebox-padding-primary);vertical-align:middle;background-color:var(--aah-bg-color);border-radius:var(--aah-messagebox-border-radius);font-size:var(--aah-messagebox-font-size);box-shadow:var(--aah-messagebox-box-shadow);text-align:left;overflow:hidden;backface-visibility:hidden;box-sizing:border-box;overflow-wrap:break-word}.aah-message-box:focus{outline:none!important}.aah-overlay.is-message-box .aah-overlay-message-box{text-align:center;position:fixed;top:0;right:0;bottom:0;left:0;padding:16px;overflow:auto}.aah-overlay.is-message-box .aah-overlay-message-box:after{content:"";display:inline-block;height:100%;width:0;vertical-align:middle}.aah-message-box.is-draggable .aah-message-box__header{cursor:move;-webkit-user-select:none;user-select:none}.aah-message-box__header{padding-bottom:var(--aah-messagebox-padding-primary)}.aah-message-box__header.show-close{padding-right:calc(var(--aah-messagebox-padding-primary) + var(--aah-message-close-size, 16px))}.aah-message-box__title{font-size:var(--aah-messagebox-font-size);line-height:var(--aah-messagebox-font-line-height);color:var(--aah-messagebox-title-color)}.aah-message-box__headerbtn{position:absolute;top:0;right:0;padding:0;width:40px;height:40px;border:none;outline:none;background:transparent;font-size:var(--aah-message-close-size, 16px);cursor:pointer}.aah-message-box__headerbtn .aah-message-box__close{color:var(--aah-color-info);font-size:inherit}.aah-message-box__headerbtn:focus .aah-message-box__close,.aah-message-box__headerbtn:hover .aah-message-box__close{color:var(--aah-color-primary)}.aah-message-box__content{color:var(--aah-messagebox-content-color);font-size:var(--aah-messagebox-content-font-size)}.aah-message-box__container{display:flex;align-items:center;gap:12px}.aah-message-box__input{padding-top:12px}.aah-message-box__input div.invalid>input{border-color:var(--aah-color-error)}.aah-message-box__input div.invalid>input:focus{border-color:var(--aah-color-error)}.aah-message-box__status{font-size:24px}.aah-message-box__status.aah-message-box-icon--success{--aah-messagebox-color: var(--aah-color-success);color:var(--aah-messagebox-color)}.aah-message-box__status.aah-message-box-icon--info{--aah-messagebox-color: var(--aah-color-info);color:var(--aah-messagebox-color)}.aah-message-box__status.aah-message-box-icon--warning{--aah-messagebox-color: var(--aah-color-warning);color:var(--aah-messagebox-color)}.aah-message-box__status.aah-message-box-icon--error{--aah-messagebox-color: var(--aah-color-error);color:var(--aah-messagebox-color)}.aah-message-box__message{margin:0}.aah-message-box__message p{margin:0;line-height:var(--aah-messagebox-font-line-height)}.aah-message-box__errormsg{color:var(--aah-color-error);font-size:var(--aah-messagebox-error-font-size);line-height:var(--aah-messagebox-font-line-height)}.aah-message-box__btns{display:flex;flex-wrap:wrap;justify-content:flex-end;align-items:center;padding-top:var(--aah-messagebox-padding-primary)}.aah-message-box--center .aah-message-box__title{display:flex;align-items:center;justify-content:center;gap:6px}.aah-message-box--center .aah-message-box__status{font-size:inherit}.aah-message-box--center .aah-message-box__btns,.aah-message-box--center .aah-message-box__container{justify-content:center}.fade-in-linear-enter-active .aah-overlay-message-box{animation:msgbox-fade-in var(--aah-transition-duration)}.fade-in-linear-leave-active .aah-overlay-message-box{animation:msgbox-fade-in var(--aah-transition-duration) reverse}@keyframes msgbox-fade-in{0%{transform:translate3d(0,-20px,0);opacity:0}to{transform:translateZ(0);opacity:1}}.aah-notification{--aah-notification-width: 330px;--aah-notification-padding: 14px 26px 14px 13px;--aah-notification-radius: 8px;--aah-notification-shadow: var(--aah-box-shadow-light);--aah-notification-border-color: var(--aah-border-color-lighter);--aah-notification-icon-size: 24px;--aah-notification-close-font-size: var(--aah-message-close-size, 16px);--aah-notification-group-margin-left: 13px;--aah-notification-group-margin-right: 8px;--aah-notification-content-font-size: var(--aah-font-size-base);--aah-notification-content-color: var(--aah-text-color-regular);--aah-notification-title-font-size: 16px;--aah-notification-title-color: var(--aah-text-color-primary);--aah-notification-close-color: var(--aah-text-color-secondary);--aah-notification-close-hover-color: var(--aah-text-color-regular)}.aah-notification{display:flex;width:var(--aah-notification-width);padding:var(--aah-notification-padding);border-radius:var(--aah-notification-radius);box-sizing:border-box;border:1px solid var(--aah-notification-border-color);position:fixed;background-color:var(--aah-bg-color-overlay);box-shadow:var(--aah-notification-shadow);transition:opacity var(--aah-transition-duration),transform var(--aah-transition-duration),left var(--aah-transition-duration),right var(--aah-transition-duration),top .4s,bottom var(--aah-transition-duration);overflow-wrap:break-word;overflow:hidden;z-index:9999}.aah-notification.right{right:16px}.aah-notification.left{left:16px}.aah-notification__group{margin-left:var(--aah-notification-group-margin-left);margin-right:var(--aah-notification-group-margin-right)}.aah-notification__title{font-weight:700;font-size:var(--aah-notification-title-font-size);line-height:var(--aah-notification-icon-size);color:var(--aah-notification-title-color);margin:0}.aah-notification__content{font-size:var(--aah-notification-content-font-size);line-height:24px;margin:6px 0 0;color:var(--aah-notification-content-color)}.aah-notification__content p{margin:0}.aah-notification .aah-notification__icon{height:var(--aah-notification-icon-size);width:var(--aah-notification-icon-size);font-size:var(--aah-notification-icon-size)}.aah-notification .aah-notification__closeBtn{position:absolute;top:18px;right:15px;cursor:pointer;color:var(--aah-notification-close-color);font-size:var(--aah-notification-close-font-size)}.aah-notification .aah-notification__closeBtn:hover{color:var(--aah-notification-close-hover-color)}.aah-notification .aah-notification--success{--aah-notification-icon-color: var(--aah-color-success);color:var(--aah-notification-icon-color)}.aah-notification .aah-notification--info{--aah-notification-icon-color: var(--aah-color-info);color:var(--aah-notification-icon-color)}.aah-notification .aah-notification--warning{--aah-notification-icon-color: var(--aah-color-warning);color:var(--aah-notification-icon-color)}.aah-notification .aah-notification--error{--aah-notification-icon-color: var(--aah-color-error);color:var(--aah-notification-icon-color)}.aah-notification-fade-enter-from.right{right:0;transform:translate(100%)}.aah-notification-fade-enter-from.left{left:0;transform:translate(-100%)}.aah-notification-fade-leave-to{opacity:0} `); (function (vue, ElementPlus, DOMPurify, $, markdownit, hljs) { '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-DgvrpIZ2.js"(exports, module) { var _GM_deleteValue = /* @__PURE__ */ (() => typeof GM_deleteValue != "undefined" ? GM_deleteValue : void 0)(); var _GM_getResourceText = /* @__PURE__ */ (() => typeof GM_getResourceText != "undefined" ? GM_getResourceText : void 0)(); var _GM_getValue = /* @__PURE__ */ (() => typeof GM_getValue != "undefined" ? GM_getValue : void 0)(); var _GM_info = /* @__PURE__ */ (() => typeof GM_info != "undefined" ? GM_info : void 0)(); var _GM_listValues = /* @__PURE__ */ (() => typeof GM_listValues != "undefined" ? GM_listValues : void 0)(); var _GM_setValue = /* @__PURE__ */ (() => typeof GM_setValue != "undefined" ? GM_setValue : void 0)(); var _GM_xmlhttpRequest = /* @__PURE__ */ (() => typeof GM_xmlhttpRequest != "undefined" ? GM_xmlhttpRequest : void 0)(); var _unsafeWindow = /* @__PURE__ */ (() => typeof unsafeWindow != "undefined" ? unsafeWindow : void 0)(); const composeEventHandlers = (theirsHandler, oursHandler, { checkForDefaultPrevented = true } = {}) => { const handleEvent = (event2) => { const shouldPrevent = theirsHandler == null ? void 0 : theirsHandler(event2); if (checkForDefaultPrevented === false || !shouldPrevent) { return oursHandler == null ? void 0 : oursHandler(event2); } }; return handleEvent; }; var isVue2 = false; var _a; const isClient = typeof window !== "undefined"; const isString$1 = (val) => typeof val === "string"; const noop$1 = () => { }; const isIOS = isClient && ((_a = window == null ? void 0 : window.navigator) == null ? void 0 : _a.userAgent) && /iP(ad|hone|od)/.test(window.navigator.userAgent); function resolveUnref(r) { return typeof r === "function" ? r() : vue.unref(r); } function createFilterWrapper(filter, fn2) { function wrapper(...args) { return new Promise((resolve, reject) => { Promise.resolve(filter(() => fn2.apply(this, args), { fn: fn2, thisArg: this, args })).then(resolve).catch(reject); }); } return wrapper; } function debounceFilter(ms, options = {}) { let timer; let maxTimer; let lastRejector = noop$1; const _clearTimeout = (timer2) => { clearTimeout(timer2); lastRejector(); lastRejector = noop$1; }; const filter = (invoke) => { const duration = resolveUnref(ms); const maxDuration = resolveUnref(options.maxWait); if (timer) _clearTimeout(timer); if (duration <= 0 || maxDuration !== void 0 && maxDuration <= 0) { if (maxTimer) { _clearTimeout(maxTimer); maxTimer = null; } return Promise.resolve(invoke()); } return new Promise((resolve, reject) => { lastRejector = options.rejectOnCancel ? reject : resolve; if (maxDuration && !maxTimer) { maxTimer = setTimeout(() => { if (timer) _clearTimeout(timer); maxTimer = null; resolve(invoke()); }, maxDuration); } timer = setTimeout(() => { if (maxTimer) _clearTimeout(maxTimer); maxTimer = null; resolve(invoke()); }, duration); }); }; return filter; } function identity$1(arg) { return arg; } function tryOnScopeDispose(fn2) { if (vue.getCurrentScope()) { vue.onScopeDispose(fn2); return true; } return false; } function useDebounceFn(fn2, ms = 200, options = {}) { return createFilterWrapper(debounceFilter(ms, options), fn2); } function refDebounced(value, ms = 200, options = {}) { const debounced = vue.ref(value.value); const updater = useDebounceFn(() => { debounced.value = value.value; }, ms, options); vue.watch(value, () => updater()); return debounced; } function tryOnMounted(fn2, sync = true) { if (vue.getCurrentInstance()) vue.onMounted(fn2); else if (sync) fn2(); else vue.nextTick(fn2); } function useTimeoutFn(cb, interval, options = {}) { const { immediate = true } = options; const isPending = vue.ref(false); let timer = null; function clear() { if (timer) { clearTimeout(timer); timer = null; } } function stop() { isPending.value = false; clear(); } function start(...args) { clear(); isPending.value = true; timer = setTimeout(() => { isPending.value = false; timer = null; cb(...args); }, resolveUnref(interval)); } if (immediate) { isPending.value = true; if (isClient) start(); } tryOnScopeDispose(stop); return { isPending: vue.readonly(isPending), start, stop }; } function unrefElement(elRef) { var _a2; const plain = resolveUnref(elRef); return (_a2 = plain == null ? void 0 : plain.$el) != null ? _a2 : plain; } const defaultWindow = isClient ? window : void 0; function useEventListener(...args) { let target; let events; let listeners; let options; if (isString$1(args[0]) || Array.isArray(args[0])) { [events, listeners, options] = args; target = defaultWindow; } else { [target, events, listeners, options] = args; } if (!target) return noop$1; 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, event2, listener, options2) => { el.addEventListener(event2, listener, options2); return () => el.removeEventListener(event2, listener, options2); }; const stopWatch = vue.watch(() => [unrefElement(target), resolveUnref(options)], ([el, options2]) => { cleanup(); if (!el) return; cleanups.push(...events.flatMap((event2) => { return listeners.map((listener) => register(el, event2, 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$1)); } let shouldListen = true; const shouldIgnore = (event2) => { return ignore.some((target2) => { if (typeof target2 === "string") { return Array.from(window2.document.querySelectorAll(target2)).some((el) => el === event2.target || event2.composedPath().includes(el)); } else { const el = unrefElement(target2); return el && (event2.target === el || event2.composedPath().includes(el)); } }); }; const listener = (event2) => { const el = unrefElement(target); if (!el || el === event2.target || event2.composedPath().includes(el)) return; if (event2.detail === 0) shouldListen = !shouldIgnore(event2); if (!shouldListen) { shouldListen = true; return; } handler(event2); }; 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", (event2) => { var _a2; const el = unrefElement(target); if (((_a2 = window2.document.activeElement) == null ? void 0 : _a2.tagName) === "IFRAME" && !(el == null ? void 0 : el.contains(window2.document.activeElement))) handler(event2); }) ].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] || {}; var __getOwnPropSymbols$g = Object.getOwnPropertySymbols; var __hasOwnProp$g = Object.prototype.hasOwnProperty; var __propIsEnum$g = Object.prototype.propertyIsEnumerable; var __objRest$2 = (source, exclude) => { var target = {}; for (var prop in source) if (__hasOwnProp$g.call(source, prop) && exclude.indexOf(prop) < 0) target[prop] = source[prop]; if (source != null && __getOwnPropSymbols$g) for (var prop of __getOwnPropSymbols$g(source)) { if (exclude.indexOf(prop) < 0 && __propIsEnum$g.call(source, prop)) target[prop] = source[prop]; } return target; }; function useResizeObserver(target, callback, options = {}) { const _a2 = options, { window: window2 = defaultWindow } = _a2, observerOptions = __objRest$2(_a2, ["window"]); let observer; const isSupported = useSupported(() => window2 && "ResizeObserver" in window2); const cleanup = () => { if (observer) { observer.disconnect(); observer = void 0; } }; const stopWatch = vue.watch(() => unrefElement(target), (el) => { cleanup(); if (isSupported.value && window2 && el) { observer = new ResizeObserver(callback); observer.observe(el, observerOptions); } }, { immediate: true, flush: "post" }); const stop = () => { cleanup(); stopWatch(); }; tryOnScopeDispose(stop); return { isSupported, stop }; } var __getOwnPropSymbols$8 = Object.getOwnPropertySymbols; var __hasOwnProp$8 = Object.prototype.hasOwnProperty; var __propIsEnum$8 = Object.prototype.propertyIsEnumerable; var __objRest$1 = (source, exclude) => { var target = {}; for (var prop in source) if (__hasOwnProp$8.call(source, prop) && exclude.indexOf(prop) < 0) target[prop] = source[prop]; if (source != null && __getOwnPropSymbols$8) for (var prop of __getOwnPropSymbols$8(source)) { if (exclude.indexOf(prop) < 0 && __propIsEnum$8.call(source, prop)) target[prop] = source[prop]; } return target; }; function useMutationObserver(target, callback, options = {}) { const _a2 = options, { window: window2 = defaultWindow } = _a2, mutationOptions = __objRest$1(_a2, ["window"]); let observer; const isSupported = useSupported(() => window2 && "MutationObserver" in window2); const cleanup = () => { if (observer) { observer.disconnect(); observer = void 0; } }; const stopWatch = vue.watch(() => unrefElement(target), (el) => { cleanup(); if (isSupported.value && window2 && el) { observer = new MutationObserver(callback); observer.observe(el, mutationOptions); } }, { immediate: true }); 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, key2, value) => key2 in obj ? __defProp(obj, key2, { enumerable: true, configurable: true, writable: true, value }) : obj[key2] = value; var __spreadValues = (a2, b2) => { for (var prop in b2 || (b2 = {})) if (__hasOwnProp.call(b2, prop)) __defNormalProp(a2, prop, b2[prop]); if (__getOwnPropSymbols) for (var prop of __getOwnPropSymbols(b2)) { if (__propIsEnum.call(b2, prop)) __defNormalProp(a2, prop, b2[prop]); } return a2; }; const _TransitionPresets = { easeInSine: [0.12, 0, 0.39, 0], easeOutSine: [0.61, 1, 0.88, 1], easeInOutSine: [0.37, 0, 0.63, 1], easeInQuad: [0.11, 0, 0.5, 0], easeOutQuad: [0.5, 1, 0.89, 1], easeInOutQuad: [0.45, 0, 0.55, 1], easeInCubic: [0.32, 0, 0.67, 0], easeOutCubic: [0.33, 1, 0.68, 1], easeInOutCubic: [0.65, 0, 0.35, 1], easeInQuart: [0.5, 0, 0.75, 0], easeOutQuart: [0.25, 1, 0.5, 1], easeInOutQuart: [0.76, 0, 0.24, 1], easeInQuint: [0.64, 0, 0.78, 0], easeOutQuint: [0.22, 1, 0.36, 1], easeInOutQuint: [0.83, 0, 0.17, 1], easeInExpo: [0.7, 0, 0.84, 0], easeOutExpo: [0.16, 1, 0.3, 1], easeInOutExpo: [0.87, 0, 0.13, 1], easeInCirc: [0.55, 0, 1, 0.45], easeOutCirc: [0, 0.55, 0.45, 1], easeInOutCirc: [0.85, 0, 0.15, 1], easeInBack: [0.36, 0, 0.66, -0.56], easeOutBack: [0.34, 1.56, 0.64, 1], easeInOutBack: [0.68, -0.6, 0.32, 1.6] }; __spreadValues({ linear: identity$1 }, _TransitionPresets); const isFirefox = () => isClient && /firefox/i.test(window.navigator.userAgent); /** * @vue/shared v3.4.21 * (c) 2018-present Yuxi (Evan) You and Vue contributors * @license MIT **/ const NOOP = () => { }; const hasOwnProperty$d = Object.prototype.hasOwnProperty; const hasOwn = (val, key2) => hasOwnProperty$d.call(val, key2); const isArray$1 = Array.isArray; const isFunction$1 = (val) => typeof val === "function"; const isString = (val) => typeof val === "string"; const isSymbol$1 = (val) => typeof val === "symbol"; const isObject$1 = (val) => val !== null && typeof val === "object"; const isPromise = (val) => { return (isObject$1(val) || isFunction$1(val)) && isFunction$1(val.then) && isFunction$1(val.catch); }; const objectToString$1 = Object.prototype.toString; const toTypeString = (value) => objectToString$1.call(value); const toRawType = (value) => { return toTypeString(value).slice(8, -1); }; 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 hasChanged = (value, oldValue) => !Object.is(value, oldValue); var freeGlobal = typeof global == "object" && global && global.Object === Object && global; var freeSelf = typeof self == "object" && self && self.Object === Object && self; var root = freeGlobal || freeSelf || Function("return this")(); var Symbol$1 = root.Symbol; var objectProto$f = Object.prototype; var hasOwnProperty$c = objectProto$f.hasOwnProperty; var nativeObjectToString$1 = objectProto$f.toString; var symToStringTag$1 = Symbol$1 ? Symbol$1.toStringTag : void 0; function getRawTag(value) { var isOwn = hasOwnProperty$c.call(value, symToStringTag$1), tag = value[symToStringTag$1]; try { value[symToStringTag$1] = void 0; var unmasked = true; } catch (e) { } var result = nativeObjectToString$1.call(value); if (unmasked) { if (isOwn) { value[symToStringTag$1] = tag; } else { delete value[symToStringTag$1]; } } return result; } var objectProto$e = Object.prototype; var nativeObjectToString = objectProto$e.toString; function objectToString(value) { return nativeObjectToString.call(value); } var nullTag = "[object Null]", undefinedTag = "[object Undefined]"; var symToStringTag = Symbol$1 ? Symbol$1.toStringTag : void 0; function baseGetTag(value) { if (value == null) { return value === void 0 ? undefinedTag : nullTag; } return symToStringTag && symToStringTag in Object(value) ? getRawTag(value) : objectToString(value); } function isObjectLike(value) { return value != null && typeof value == "object"; } var symbolTag$3 = "[object Symbol]"; function isSymbol(value) { return typeof value == "symbol" || isObjectLike(value) && baseGetTag(value) == symbolTag$3; } function arrayMap(array, iteratee) { var index = -1, length = array == null ? 0 : array.length, result = Array(length); while (++index < length) { result[index] = iteratee(array[index], index, array); } return result; } var isArray = Array.isArray; var INFINITY$2 = 1 / 0; var symbolProto$2 = Symbol$1 ? Symbol$1.prototype : void 0, symbolToString = symbolProto$2 ? symbolProto$2.toString : void 0; function baseToString(value) { if (typeof value == "string") { return value; } if (isArray(value)) { return arrayMap(value, baseToString) + ""; } if (isSymbol(value)) { return symbolToString ? symbolToString.call(value) : ""; } var result = value + ""; return result == "0" && 1 / value == -INFINITY$2 ? "-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; } var INFINITY$1 = 1 / 0, MAX_INTEGER = 17976931348623157e292; function toFinite(value) { if (!value) { return value === 0 ? value : 0; } value = toNumber(value); if (value === INFINITY$1 || value === -INFINITY$1) { var sign = value < 0 ? -1 : 1; return sign * MAX_INTEGER; } return value === value ? value : 0; } function toInteger(value) { var result = toFinite(value), remainder = result % 1; return result === result ? remainder ? result - remainder : result : 0; } function identity(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, key2) { return object == null ? void 0 : object[key2]; } function getNative(object, key2) { var value = getValue$1(object, key2); return baseIsNative(value) ? value : void 0; } var WeakMap = getNative(root, "WeakMap"); var objectCreate = Object.create; var baseCreate = /* @__PURE__ */ function() { function object() { } return function(proto) { if (!isObject(proto)) { return {}; } if (objectCreate) { return objectCreate(proto); } object.prototype = proto; var result = new object(); object.prototype = void 0; return result; }; }(); function apply(func, thisArg, args) { switch (args.length) { case 0: return func.call(thisArg); case 1: return func.call(thisArg, args[0]); case 2: return func.call(thisArg, args[0], args[1]); case 3: return func.call(thisArg, args[0], args[1], args[2]); } return func.apply(thisArg, args); } function copyArray(source, array) { var index = -1, length = source.length; array || (array = Array(length)); while (++index < length) { array[index] = source[index]; } return array; } var HOT_COUNT = 800, HOT_SPAN = 16; var nativeNow = Date.now; function shortOut(func) { var count = 0, lastCalled = 0; return function() { var stamp = nativeNow(), remaining = HOT_SPAN - (stamp - lastCalled); lastCalled = stamp; if (remaining > 0) { if (++count >= HOT_COUNT) { return arguments[0]; } } else { count = 0; } return func.apply(void 0, arguments); }; } function constant(value) { return function() { return value; }; } var defineProperty = function() { try { var func = getNative(Object, "defineProperty"); func({}, "", {}); return func; } catch (e) { } }(); var baseSetToString = !defineProperty ? identity : function(func, string2) { return defineProperty(func, "toString", { "configurable": true, "enumerable": false, "value": constant(string2), "writable": true }); }; const baseSetToString$1 = baseSetToString; var setToString = shortOut(baseSetToString$1); 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; } function baseFindIndex(array, predicate, fromIndex, fromRight) { var length = array.length, index = fromIndex + (fromRight ? 1 : -1); while (fromRight ? index-- : ++index < length) { if (predicate(array[index], index, array)) { return index; } } return -1; } 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, key2, value) { if (key2 == "__proto__" && defineProperty) { defineProperty(object, key2, { "configurable": true, "enumerable": true, "value": value, "writable": true }); } else { object[key2] = 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, key2, value) { var objValue = object[key2]; if (!(hasOwnProperty$a.call(object, key2) && eq(objValue, value)) || value === void 0 && !(key2 in object)) { baseAssignValue(object, key2, value); } } function copyObject(source, props, object, customizer) { var isNew = !object; object || (object = {}); var index = -1, length = props.length; while (++index < length) { var key2 = props[index]; var newValue = customizer ? customizer(object[key2], source[key2], key2, object, source) : void 0; if (newValue === void 0) { newValue = source[key2]; } if (isNew) { baseAssignValue(object, key2, newValue); } else { assignValue(object, key2, newValue); } } return object; } var nativeMax$2 = Math.max; function overRest(func, start, transform) { start = nativeMax$2(start === void 0 ? func.length - 1 : start, 0); return function() { var args = arguments, index = -1, length = nativeMax$2(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), func + ""); } var MAX_SAFE_INTEGER = 9007199254740991; function isLength(value) { return typeof value == "number" && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; } function isArrayLike(value) { return value != null && isLength(value.length) && !isFunction(value); } function isIterateeCall(value, index, object) { if (!isObject(object)) { return false; } var type = typeof index; if (type == "number" ? isArrayLike(object) && isIndex(index, object.length) : type == "string" && index in object) { return eq(object[index], value); } return false; } function createAssigner(assigner) { return baseRest(function(object, sources) { var index = -1, length = sources.length, customizer = length > 1 ? sources[length - 1] : void 0, guard = length > 2 ? sources[2] : void 0; customizer = assigner.length > 3 && typeof customizer == "function" ? (length--, customizer) : void 0; if (guard && isIterateeCall(sources[0], sources[1], guard)) { customizer = length < 3 ? void 0 : customizer; length = 1; } object = Object(object); while (++index < length) { var source = sources[index]; if (source) { assigner(object, source, index, customizer); } } return object; }); } var objectProto$b = Object.prototype; function isPrototype(value) { var Ctor = value && value.constructor, proto = typeof Ctor == "function" && Ctor.prototype || objectProto$b; return value === proto; } function baseTimes(n, iteratee) { var index = -1, result = Array(n); while (++index < n) { result[index] = iteratee(index); } return result; } var argsTag$3 = "[object Arguments]"; function baseIsArguments(value) { return isObjectLike(value) && baseGetTag(value) == argsTag$3; } var objectProto$a = Object.prototype; var hasOwnProperty$9 = objectProto$a.hasOwnProperty; var propertyIsEnumerable$1 = objectProto$a.propertyIsEnumerable; var isArguments = baseIsArguments(/* @__PURE__ */ function() { return arguments; }()) ? baseIsArguments : function(value) { return isObjectLike(value) && hasOwnProperty$9.call(value, "callee") && !propertyIsEnumerable$1.call(value, "callee"); }; function stubFalse() { return false; } var freeExports$2 = typeof exports == "object" && exports && !exports.nodeType && exports; var freeModule$2 = freeExports$2 && typeof module == "object" && module && !module.nodeType && module; var moduleExports$2 = freeModule$2 && freeModule$2.exports === freeExports$2; var Buffer$1 = moduleExports$2 ? root.Buffer : void 0; var nativeIsBuffer = Buffer$1 ? Buffer$1.isBuffer : void 0; var isBuffer = nativeIsBuffer || stubFalse; var argsTag$2 = "[object Arguments]", arrayTag$2 = "[object Array]", boolTag$3 = "[object Boolean]", dateTag$3 = "[object Date]", errorTag$2 = "[object Error]", funcTag$1 = "[object Function]", mapTag$5 = "[object Map]", numberTag$3 = "[object Number]", objectTag$4 = "[object Object]", regexpTag$3 = "[object RegExp]", setTag$5 = "[object Set]", stringTag$3 = "[object String]", weakMapTag$2 = "[object WeakMap]"; var arrayBufferTag$3 = "[object ArrayBuffer]", dataViewTag$4 = "[object DataView]", float32Tag$2 = "[object Float32Array]", float64Tag$2 = "[object Float64Array]", int8Tag$2 = "[object Int8Array]", int16Tag$2 = "[object Int16Array]", int32Tag$2 = "[object Int32Array]", uint8Tag$2 = "[object Uint8Array]", uint8ClampedTag$2 = "[object Uint8ClampedArray]", uint16Tag$2 = "[object Uint16Array]", uint32Tag$2 = "[object Uint32Array]"; var typedArrayTags = {}; typedArrayTags[float32Tag$2] = typedArrayTags[float64Tag$2] = typedArrayTags[int8Tag$2] = typedArrayTags[int16Tag$2] = typedArrayTags[int32Tag$2] = typedArrayTags[uint8Tag$2] = typedArrayTags[uint8ClampedTag$2] = typedArrayTags[uint16Tag$2] = typedArrayTags[uint32Tag$2] = true; typedArrayTags[argsTag$2] = typedArrayTags[arrayTag$2] = typedArrayTags[arrayBufferTag$3] = typedArrayTags[boolTag$3] = typedArrayTags[dataViewTag$4] = typedArrayTags[dateTag$3] = typedArrayTags[errorTag$2] = typedArrayTags[funcTag$1] = typedArrayTags[mapTag$5] = typedArrayTags[numberTag$3] = typedArrayTags[objectTag$4] = typedArrayTags[regexpTag$3] = typedArrayTags[setTag$5] = typedArrayTags[stringTag$3] = typedArrayTags[weakMapTag$2] = false; function baseIsTypedArray(value) { return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; } function baseUnary(func) { return function(value) { return func(value); }; } var freeExports$1 = typeof exports == "object" && exports && !exports.nodeType && exports; var freeModule$1 = freeExports$1 && typeof module == "object" && module && !module.nodeType && module; var moduleExports$1 = freeModule$1 && freeModule$1.exports === freeExports$1; var freeProcess = moduleExports$1 && freeGlobal.process; var nodeUtil = function() { try { var types2 = freeModule$1 && freeModule$1.require && freeModule$1.require("util").types; if (types2) { return types2; } return freeProcess && freeProcess.binding && freeProcess.binding("util"); } catch (e) { } }(); var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; var objectProto$9 = Object.prototype; var hasOwnProperty$8 = objectProto$9.hasOwnProperty; function arrayLikeKeys(value, inherited) { var isArr = isArray(value), isArg = !isArr && isArguments(value), isBuff = !isArr && !isArg && isBuffer(value), isType = !isArr && !isArg && !isBuff && isTypedArray(value), skipIndexes = isArr || isArg || isBuff || isType, result = skipIndexes ? baseTimes(value.length, String) : [], length = result.length; for (var key2 in value) { if ((inherited || hasOwnProperty$8.call(value, key2)) && !(skipIndexes && // Safari 9 has enumerable `arguments.length` in strict mode. (key2 == "length" || // Node.js 0.10 has enumerable non-index properties on buffers. isBuff && (key2 == "offset" || key2 == "parent") || // PhantomJS 2 has enumerable non-index properties on typed arrays. isType && (key2 == "buffer" || key2 == "byteLength" || key2 == "byteOffset") || // Skip index properties. isIndex(key2, length)))) { result.push(key2); } } 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 key2 in Object(object)) { if (hasOwnProperty$7.call(object, key2) && key2 != "constructor") { result.push(key2); } } return result; } function keys(object) { return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); } function nativeKeysIn(object) { var result = []; if (object != null) { for (var key2 in Object(object)) { result.push(key2); } } 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 key2 in object) { if (!(key2 == "constructor" && (isProto || !hasOwnProperty$6.call(object, key2)))) { result.push(key2); } } 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(key2) { var result = this.has(key2) && delete this.__data__[key2]; 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(key2) { var data = this.__data__; if (nativeCreate) { var result = data[key2]; return result === HASH_UNDEFINED$2 ? void 0 : result; } return hasOwnProperty$5.call(data, key2) ? data[key2] : void 0; } var objectProto$5 = Object.prototype; var hasOwnProperty$4 = objectProto$5.hasOwnProperty; function hashHas(key2) { var data = this.__data__; return nativeCreate ? data[key2] !== void 0 : hasOwnProperty$4.call(data, key2); } var HASH_UNDEFINED$1 = "__lodash_hash_undefined__"; function hashSet(key2, value) { var data = this.__data__; this.size += this.has(key2) ? 0 : 1; data[key2] = nativeCreate && value === void 0 ? HASH_UNDEFINED$1 : value; return this; } function Hash(entries) { var index = -1, length = entries == null ? 0 : entries.length; this.clear(); while (++index < length) { var entry = entries[index]; this.set(entry[0], entry[1]); } } Hash.prototype.clear = hashClear; Hash.prototype["delete"] = hashDelete; Hash.prototype.get = hashGet; Hash.prototype.has = hashHas; Hash.prototype.set = hashSet; function listCacheClear() { this.__data__ = []; this.size = 0; } function assocIndexOf(array, key2) { var length = array.length; while (length--) { if (eq(array[length][0], key2)) { return length; } } return -1; } var arrayProto = Array.prototype; var splice = arrayProto.splice; function listCacheDelete(key2) { var data = this.__data__, index = assocIndexOf(data, key2); 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(key2) { var data = this.__data__, index = assocIndexOf(data, key2); return index < 0 ? void 0 : data[index][1]; } function listCacheHas(key2) { return assocIndexOf(this.__data__, key2) > -1; } function listCacheSet(key2, value) { var data = this.__data__, index = assocIndexOf(data, key2); if (index < 0) { ++this.size; data.push([key2, 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, key2) { var data = map2.__data__; return isKeyable(key2) ? data[typeof key2 == "string" ? "string" : "hash"] : data.map; } function mapCacheDelete(key2) { var result = getMapData(this, key2)["delete"](key2); this.size -= result ? 1 : 0; return result; } function mapCacheGet(key2) { return getMapData(this, key2).get(key2); } function mapCacheHas(key2) { return getMapData(this, key2).has(key2); } function mapCacheSet(key2, value) { var data = getMapData(this, key2), size = data.size; data.set(key2, 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, key2 = resolver ? resolver.apply(this, args) : args[0], cache = memoized.cache; if (cache.has(key2)) { return cache.get(key2); } var result = func.apply(this, args); memoized.cache = cache.set(key2, 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(key2) { if (cache.size === MAX_MEMOIZE_SIZE) { cache.clear(); } return key2; }); 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)); } var INFINITY = 1 / 0; function toKey(value) { if (typeof value == "string" || isSymbol(value)) { return value; } var result = value + ""; return result == "0" && 1 / value == -INFINITY ? "-0" : result; } function baseGet(object, path) { path = castPath(path, object); var index = 0, length = path.length; while (object != null && index < length) { object = object[toKey(path[index++])]; } return index && index == length ? object : void 0; } function get(object, path, defaultValue) { var result = object == null ? void 0 : baseGet(object, path); return result === void 0 ? defaultValue : result; } function arrayPush(array, values) { var index = -1, length = values.length, offset = array.length; while (++index < length) { array[offset + index] = values[index]; } return array; } var spreadableSymbol = Symbol$1 ? Symbol$1.isConcatSpreadable : void 0; function isFlattenable(value) { return isArray(value) || isArguments(value) || !!(spreadableSymbol && value && value[spreadableSymbol]); } function baseFlatten(array, depth, predicate, isStrict, result) { var index = -1, length = array.length; predicate || (predicate = isFlattenable); result || (result = []); while (++index < length) { var value = array[index]; if (depth > 0 && predicate(value)) { if (depth > 1) { baseFlatten(value, depth - 1, predicate, isStrict, result); } else { arrayPush(result, value); } } else if (!isStrict) { result[result.length] = value; } } return result; } function flatten(array) { var length = array == null ? 0 : array.length; return length ? baseFlatten(array, 1) : []; } function flatRest(func) { return setToString(overRest(func, void 0, flatten), func + ""); } var getPrototype = overArg(Object.getPrototypeOf, Object); const getPrototype$1 = getPrototype; 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$1(value) { if (!isObjectLike(value) || baseGetTag(value) != objectTag$3) { return false; } var proto = getPrototype$1(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(key2) { var data = this.__data__, result = data["delete"](key2); this.size = data.size; return result; } function stackGet(key2) { return this.__data__.get(key2); } function stackHas(key2) { return this.__data__.has(key2); } var LARGE_ARRAY_SIZE = 200; function stackSet(key2, value) { var data = this.__data__; if (data instanceof ListCache) { var pairs = data.__data__; if (!Map$1 || pairs.length < LARGE_ARRAY_SIZE - 1) { pairs.push([key2, value]); this.size = ++data.size; return this; } data = this.__data__ = new MapCache(pairs); } data.set(key2, value); this.size = data.size; return this; } function Stack(entries) { var data = this.__data__ = new ListCache(entries); this.size = data.size; } Stack.prototype.clear = stackClear; Stack.prototype["delete"] = stackDelete; Stack.prototype.get = stackGet; Stack.prototype.has = stackHas; Stack.prototype.set = stackSet; function baseAssign(object, source) { return object && copyObject(source, keys(source), object); } function baseAssignIn(object, source) { return object && copyObject(source, keysIn(source), object); } var freeExports = typeof exports == "object" && exports && !exports.nodeType && exports; var freeModule = freeExports && typeof module == "object" && module && !module.nodeType && module; var moduleExports = freeModule && freeModule.exports === freeExports; var Buffer2 = moduleExports ? root.Buffer : void 0, allocUnsafe = Buffer2 ? Buffer2.allocUnsafe : void 0; function cloneBuffer(buffer, isDeep) { if (isDeep) { return buffer.slice(); } var length = buffer.length, result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length); buffer.copy(result); return result; } function arrayFilter(array, predicate) { var index = -1, length = array == null ? 0 : array.length, resIndex = 0, result = []; while (++index < length) { var value = array[index]; if (predicate(value, index, array)) { result[resIndex++] = value; } } return result; } function stubArray() { return []; } var objectProto$3 = Object.prototype; var propertyIsEnumerable = objectProto$3.propertyIsEnumerable; var nativeGetSymbols$1 = Object.getOwnPropertySymbols; var getSymbols = !nativeGetSymbols$1 ? stubArray : function(object) { if (object == null) { return []; } object = Object(object); return arrayFilter(nativeGetSymbols$1(object), function(symbol) { return propertyIsEnumerable.call(object, symbol); }); }; function copySymbols(source, object) { return copyObject(source, getSymbols(source), object); } var nativeGetSymbols = Object.getOwnPropertySymbols; var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) { var result = []; while (object) { arrayPush(result, getSymbols(object)); object = getPrototype$1(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); } function getAllKeysIn(object) { return baseGetAllKeys(object, keysIn, getSymbolsIn); } var DataView = getNative(root, "DataView"); var Promise$1 = getNative(root, "Promise"); var Set$1 = getNative(root, "Set"); var mapTag$4 = "[object Map]", objectTag$2 = "[object Object]", promiseTag = "[object Promise]", setTag$4 = "[object Set]", weakMapTag$1 = "[object WeakMap]"; var dataViewTag$3 = "[object DataView]"; var dataViewCtorString = toSource(DataView), mapCtorString = toSource(Map$1), promiseCtorString = toSource(Promise$1), setCtorString = toSource(Set$1), weakMapCtorString = toSource(WeakMap); var getTag = baseGetTag; if (DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag$3 || Map$1 && getTag(new Map$1()) != mapTag$4 || Promise$1 && getTag(Promise$1.resolve()) != promiseTag || Set$1 && getTag(new Set$1()) != setTag$4 || WeakMap && getTag(new WeakMap()) != weakMapTag$1) { getTag = function(value) { var result = baseGetTag(value), Ctor = result == objectTag$2 ? value.constructor : void 0, ctorString = Ctor ? toSource(Ctor) : ""; if (ctorString) { switch (ctorString) { case dataViewCtorString: return dataViewTag$3; case mapCtorString: return mapTag$4; case promiseCtorString: return promiseTag; case setCtorString: return setTag$4; case weakMapCtorString: return weakMapTag$1; } } return result; }; } const getTag$1 = getTag; var objectProto$2 = Object.prototype; var hasOwnProperty$2 = objectProto$2.hasOwnProperty; function initCloneArray(array) { var length = array.length, result = new array.constructor(length); if (length && typeof array[0] == "string" && hasOwnProperty$2.call(array, "index")) { result.index = array.index; result.input = array.input; } return result; } var Uint8Array$1 = root.Uint8Array; function cloneArrayBuffer(arrayBuffer) { var result = new arrayBuffer.constructor(arrayBuffer.byteLength); new Uint8Array$1(result).set(new Uint8Array$1(arrayBuffer)); return result; } function cloneDataView(dataView, isDeep) { var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer; return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); } var reFlags = /\w*$/; function cloneRegExp(regexp) { var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); result.lastIndex = regexp.lastIndex; return result; } var symbolProto$1 = Symbol$1 ? Symbol$1.prototype : void 0, symbolValueOf$1 = symbolProto$1 ? symbolProto$1.valueOf : void 0; function cloneSymbol(symbol) { return symbolValueOf$1 ? Object(symbolValueOf$1.call(symbol)) : {}; } function cloneTypedArray(typedArray, isDeep) { var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer; return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); } var boolTag$2 = "[object Boolean]", dateTag$2 = "[object Date]", mapTag$3 = "[object Map]", numberTag$2 = "[object Number]", regexpTag$2 = "[object RegExp]", setTag$3 = "[object Set]", stringTag$2 = "[object String]", symbolTag$2 = "[object Symbol]"; var arrayBufferTag$2 = "[object ArrayBuffer]", dataViewTag$2 = "[object DataView]", float32Tag$1 = "[object Float32Array]", float64Tag$1 = "[object Float64Array]", int8Tag$1 = "[object Int8Array]", int16Tag$1 = "[object Int16Array]", int32Tag$1 = "[object Int32Array]", uint8Tag$1 = "[object Uint8Array]", uint8ClampedTag$1 = "[object Uint8ClampedArray]", uint16Tag$1 = "[object Uint16Array]", uint32Tag$1 = "[object Uint32Array]"; function initCloneByTag(object, tag, isDeep) { var Ctor = object.constructor; switch (tag) { case arrayBufferTag$2: return cloneArrayBuffer(object); case boolTag$2: case dateTag$2: return new Ctor(+object); case dataViewTag$2: return cloneDataView(object, isDeep); 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$1(object)) : {}; } var mapTag$2 = "[object Map]"; function baseIsMap(value) { return isObjectLike(value) && getTag$1(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$1(value) == setTag$2; } var nodeIsSet = nodeUtil && nodeUtil.isSet; var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet; var CLONE_DEEP_FLAG = 1, CLONE_FLAT_FLAG = 2, CLONE_SYMBOLS_FLAG$1 = 4; 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, key2, object, stack) { var result, isDeep = bitmask & CLONE_DEEP_FLAG, isFlat = bitmask & CLONE_FLAT_FLAG, isFull = bitmask & CLONE_SYMBOLS_FLAG$1; if (customizer) { result = object ? customizer(value, key2, object, stack) : customizer(value); } if (result !== void 0) { return result; } if (!isObject(value)) { return value; } var isArr = isArray(value); if (isArr) { result = initCloneArray(value); if (!isDeep) { return copyArray(value, result); } } else { var tag = getTag$1(value), isFunc = tag == funcTag || tag == genTag; if (isBuffer(value)) { return cloneBuffer(value, isDeep); } if (tag == objectTag$1 || tag == argsTag$1 || isFunc && !object) { result = isFlat || isFunc ? {} : initCloneObject(value); if (!isDeep) { 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, key3) { result.set(key3, baseClone(subValue, bitmask, customizer, key3, value, stack)); }); } var keysFunc = isFull ? isFlat ? getAllKeysIn : getAllKeys : isFlat ? keysIn : keys; var props = isArr ? void 0 : keysFunc(value); arrayEach(props || value, function(subValue, key3) { if (props) { key3 = subValue; subValue = value[key3]; } assignValue(result, key3, baseClone(subValue, bitmask, customizer, key3, 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, key2) { return cache.has(key2); } var COMPARE_PARTIAL_FLAG$5 = 1, COMPARE_UNORDERED_FLAG$3 = 2; function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { var isPartial = bitmask & COMPARE_PARTIAL_FLAG$5, arrLength = array.length, othLength = other.length; if (arrLength != othLength && !(isPartial && othLength > arrLength)) { return false; } var arrStacked = stack.get(array); var othStacked = stack.get(other); if (arrStacked && othStacked) { return arrStacked == other && othStacked == array; } var index = -1, result = true, seen = bitmask & COMPARE_UNORDERED_FLAG$3 ? new SetCache() : void 0; stack.set(array, other); stack.set(other, array); while (++index < arrLength) { var arrValue = array[index], othValue = other[index]; if (customizer) { var compared = isPartial ? customizer(othValue, arrValue, index, other, array, stack) : customizer(arrValue, othValue, index, array, other, stack); } if (compared !== void 0) { if (compared) { continue; } result = false; break; } if (seen) { if (!arraySome(other, function(othValue2, othIndex) { if (!cacheHas(seen, othIndex) && (arrValue === othValue2 || equalFunc(arrValue, othValue2, bitmask, customizer, stack))) { return seen.push(othIndex); } })) { result = false; break; } } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { result = false; break; } } stack["delete"](array); stack["delete"](other); return result; } function mapToArray(map2) { var index = -1, result = Array(map2.size); map2.forEach(function(value, key2) { result[++index] = [key2, value]; }); return result; } function setToArray(set2) { var index = -1, result = Array(set2.size); set2.forEach(function(value) { result[++index] = value; }); return result; } var COMPARE_PARTIAL_FLAG$4 = 1, COMPARE_UNORDERED_FLAG$2 = 2; var boolTag = "[object Boolean]", dateTag = "[object Date]", errorTag = "[object Error]", mapTag = "[object Map]", numberTag = "[object Number]", regexpTag = "[object RegExp]", setTag = "[object Set]", stringTag = "[object String]", symbolTag = "[object Symbol]"; var arrayBufferTag = "[object ArrayBuffer]", dataViewTag = "[object DataView]"; var symbolProto = Symbol$1 ? Symbol$1.prototype : void 0, symbolValueOf = symbolProto ? symbolProto.valueOf : void 0; function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { switch (tag) { case dataViewTag: if (object.byteLength != other.byteLength || object.byteOffset != other.byteOffset) { return false; } object = object.buffer; other = other.buffer; case arrayBufferTag: if (object.byteLength != other.byteLength || !equalFunc(new Uint8Array$1(object), new Uint8Array$1(other))) { return false; } return true; case boolTag: case dateTag: case numberTag: return eq(+object, +other); case errorTag: return object.name == other.name && object.message == other.message; case regexpTag: case stringTag: return object == other + ""; case mapTag: var convert = mapToArray; case setTag: var isPartial = bitmask & COMPARE_PARTIAL_FLAG$4; convert || (convert = setToArray); if (object.size != other.size && !isPartial) { return false; } var stacked = stack.get(object); if (stacked) { return stacked == other; } bitmask |= COMPARE_UNORDERED_FLAG$2; stack.set(object, other); var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); stack["delete"](object); return result; case symbolTag: if (symbolValueOf) { return symbolValueOf.call(object) == symbolValueOf.call(other); } } return false; } var COMPARE_PARTIAL_FLAG$3 = 1; var objectProto$1 = Object.prototype; var hasOwnProperty$1 = objectProto$1.hasOwnProperty; function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { var isPartial = bitmask & COMPARE_PARTIAL_FLAG$3, objProps = getAllKeys(object), objLength = objProps.length, othProps = getAllKeys(other), othLength = othProps.length; if (objLength != othLength && !isPartial) { return false; } var index = objLength; while (index--) { var key2 = objProps[index]; if (!(isPartial ? key2 in other : hasOwnProperty$1.call(other, key2))) { 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) { key2 = objProps[index]; var objValue = object[key2], othValue = other[key2]; if (customizer) { var compared = isPartial ? customizer(othValue, objValue, key2, other, object, stack) : customizer(objValue, othValue, key2, object, other, stack); } if (!(compared === void 0 ? objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack) : compared)) { result = false; break; } skipCtor || (skipCtor = key2 == "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$1(object), othTag = othIsArr ? arrayTag : getTag$1(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, noCustomizer = !customizer; if (object == null) { return !length; } object = Object(object); while (index--) { var data = matchData[index]; if (noCustomizer && data[2] ? data[1] !== object[data[0]] : !(data[0] in object)) { return false; } } while (++index < length) { data = matchData[index]; var key2 = data[0], objValue = object[key2], srcValue = data[1]; if (noCustomizer && data[2]) { if (objValue === void 0 && !(key2 in object)) { return false; } } else { var stack = new Stack(); if (customizer) { var result = customizer(objValue, srcValue, key2, object, source, stack); } if (!(result === void 0 ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG$1 | COMPARE_UNORDERED_FLAG$1, customizer, stack) : result)) { return false; } } } return true; } function isStrictComparable(value) { return value === value && !isObject(value); } function getMatchData(object) { var result = keys(object), length = result.length; while (length--) { var key2 = result[length], value = object[key2]; result[length] = [key2, value, isStrictComparable(value)]; } return result; } function matchesStrictComparable(key2, srcValue) { return function(object) { if (object == null) { return false; } return object[key2] === srcValue && (srcValue !== void 0 || key2 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, key2) { return object != null && key2 in Object(object); } function hasPath(object, path, hasFunc) { path = castPath(path, object); var index = -1, length = path.length, result = false; while (++index < length) { var key2 = toKey(path[index]); if (!(result = object != null && hasFunc(object, key2))) { break; } object = object[key2]; } if (result || ++index != length) { return result; } length = object == null ? 0 : object.length; return !!length && isLength(length) && isIndex(key2, length) && (isArray(object) || isArguments(object)); } function hasIn(object, path) { return object != null && hasPath(object, path, baseHasIn); } var COMPARE_PARTIAL_FLAG = 1, COMPARE_UNORDERED_FLAG = 2; function baseMatchesProperty(path, srcValue) { if (isKey(path) && isStrictComparable(srcValue)) { return matchesStrictComparable(toKey(path), srcValue); } return function(object) { var objValue = get(object, path); return objValue === void 0 && objValue === srcValue ? hasIn(object, path) : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG); }; } function baseProperty(key2) { return function(object) { return object == null ? void 0 : object[key2]; }; } 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; } 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 key2 = props[fromRight ? length : ++index]; if (iteratee(iterable[key2], key2, 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 = fromRight ? length : -1, iterable = Object(collection); while (fromRight ? index-- : ++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$1 = Math.max, nativeMin$1 = 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$1(toNumber(options.maxWait) || 0, wait) : maxWait; trailing = "trailing" in options ? !!options.trailing : trailing; } function invokeFunc(time) { var args = lastArgs, thisArg = lastThis; lastArgs = lastThis = void 0; lastInvokeTime = time; result = func.apply(thisArg, args); return result; } function leadingEdge(time) { lastInvokeTime = time; timerId = setTimeout(timerExpired, wait); return leading ? invokeFunc(time) : result; } function remainingWait(time) { var timeSinceLastCall = time - lastCallTime, timeSinceLastInvoke = time - lastInvokeTime, timeWaiting = wait - timeSinceLastCall; return maxing ? nativeMin$1(timeWaiting, maxWait - timeSinceLastInvoke) : timeWaiting; } function shouldInvoke(time) { var timeSinceLastCall = time - lastCallTime, timeSinceLastInvoke = time - lastInvokeTime; return lastCallTime === void 0 || timeSinceLastCall >= wait || timeSinceLastCall < 0 || maxing && timeSinceLastInvoke >= maxWait; } function timerExpired() { var time = now(); if (shouldInvoke(time)) { return trailingEdge(time); } timerId = setTimeout(timerExpired, remainingWait(time)); } function trailingEdge(time) { timerId = void 0; if (trailing && lastArgs) { return invokeFunc(time); } lastArgs = lastThis = void 0; return result; } function cancel() { if (timerId !== void 0) { clearTimeout(timerId); } lastInvokeTime = 0; lastArgs = lastCallTime = lastThis = timerId = void 0; } function flush() { return timerId === void 0 ? result : trailingEdge(now()); } function debounced() { var time = now(), isInvoking = shouldInvoke(time); lastArgs = arguments; lastThis = this; lastCallTime = time; if (isInvoking) { if (timerId === void 0) { return leadingEdge(lastCallTime); } if (maxing) { clearTimeout(timerId); timerId = setTimeout(timerExpired, wait); return invokeFunc(lastCallTime); } } if (timerId === void 0) { timerId = setTimeout(timerExpired, wait); } return result; } debounced.cancel = cancel; debounced.flush = flush; return debounced; } function assignMergeValue(object, key2, value) { if (value !== void 0 && !eq(object[key2], value) || value === void 0 && !(key2 in object)) { baseAssignValue(object, key2, value); } } function isArrayLikeObject(value) { return isObjectLike(value) && isArrayLike(value); } function safeGet(object, key2) { if (key2 === "constructor" && typeof object[key2] === "function") { return; } if (key2 == "__proto__") { return; } return object[key2]; } function toPlainObject(value) { return copyObject(value, keysIn(value)); } function baseMergeDeep(object, source, key2, srcIndex, mergeFunc, customizer, stack) { var objValue = safeGet(object, key2), srcValue = safeGet(source, key2), stacked = stack.get(srcValue); if (stacked) { assignMergeValue(object, key2, stacked); return; } var newValue = customizer ? customizer(objValue, srcValue, key2 + "", object, source, stack) : void 0; var isCommon = newValue === void 0; if (isCommon) { var isArr = isArray(srcValue), isBuff = !isArr && isBuffer(srcValue), isTyped = !isArr && !isBuff && isTypedArray(srcValue); newValue = srcValue; if (isArr || isBuff || isTyped) { if (isArray(objValue)) { newValue = objValue; } else if (isArrayLikeObject(objValue)) { newValue = copyArray(objValue); } else if (isBuff) { isCommon = false; newValue = cloneBuffer(srcValue, true); } else if (isTyped) { isCommon = false; newValue = cloneTypedArray(srcValue, true); } else { newValue = []; } } else if (isPlainObject$1(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, key2, newValue); } function baseMerge(object, source, srcIndex, customizer, stack) { if (object === source) { return; } baseFor(source, function(srcValue, key2) { stack || (stack = new Stack()); if (isObject(srcValue)) { baseMergeDeep(object, source, key2, srcIndex, baseMerge, customizer, stack); } else { var newValue = customizer ? customizer(safeGet(object, key2), srcValue, key2 + "", object, source, stack) : void 0; if (newValue === void 0) { newValue = srcValue; } assignMergeValue(object, key2, newValue); } }, keysIn); } var nativeMax = Math.max, nativeMin = Math.min; function findLastIndex(array, predicate, fromIndex) { var length = array == null ? 0 : array.length; if (!length) { return -1; } var index = length - 1; if (fromIndex !== void 0) { index = toInteger(fromIndex); index = fromIndex < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1); } return baseFindIndex(array, baseIteratee(predicate), index, true); } function baseMap(collection, iteratee) { var index = -1, result = isArrayLike(collection) ? Array(collection.length) : []; baseEach(collection, function(value, key2, collection2) { result[++index] = iteratee(value, key2, 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), 1); } 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 isUndefined$1(value) { return value === void 0; } var merge = createAssigner(function(object, source, srcIndex) { baseMerge(object, source, srcIndex); }); const merge$1 = merge; 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 key2 = toKey(path[index]), newValue = value; if (key2 === "__proto__" || key2 === "constructor" || key2 === "prototype") { return object; } if (index != lastIndex) { var objValue = nested[key2]; newValue = customizer ? customizer(objValue, key2, nested) : void 0; if (newValue === void 0) { newValue = isObject(objValue) ? objValue : isIndex(path[index + 1]) ? [] : {}; } } assignValue(nested, key2, newValue); nested = nested[key2]; } return object; } function basePickBy(object, paths, predicate) { var index = -1, length = paths.length, result = {}; while (++index < length) { var path = paths[index], value = baseGet(object, path); if (predicate(value, path)) { baseSet(result, castPath(path, object), value); } } return result; } function basePick(object, paths) { return basePickBy(object, paths, function(value, path) { return hasIn(object, path); }); } var pick = flatRest(function(object, paths) { return object == null ? {} : basePick(object, paths); }); function set(object, path, value) { return object == null ? object : baseSet(object, path, value); } const isUndefined = (val) => val === void 0; const isBoolean = (val) => typeof val === "boolean"; const isNumber = (val) => typeof val === "number"; const isElement = (e) => { if (typeof Element === "undefined") return false; return e instanceof Element; }; const isPropAbsent = (prop) => { return isNil(prop); }; const isStringNumber = (val) => { if (!isString(val)) { return false; } return !Number.isNaN(Number(val)); }; const rAF = (fn2) => isClient ? window.requestAnimationFrame(fn2) : setTimeout(fn2, 16); const escapeStringRegexp = (string2 = "") => string2.replace(/[|\\{}()[\]^$+*?.]/g, "\\$&").replace(/-/g, "\\x2d"); 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); } }; }; class ElementPlusError extends Error { constructor(m2) { super(m2); this.name = "ElementPlusError"; } } function throwError(scope, m2) { throw new ElementPlusError(`[${scope}] ${m2}`); } function debugWarn(scope, message) { } 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 key2 = camelize(styleName); if (key2 === "float") key2 = "cssFloat"; try { const style = element.style[key2]; if (style) return style; const computed2 = (_a2 = document.defaultView) == null ? void 0 : _a2.getComputedStyle(element, ""); return computed2 ? computed2[key2] : ""; } catch (e) { return element.style[key2]; } }; function addUnit(value, defaultUnit = "px") { if (!value) return ""; if (isNumber(value) || isStringNumber(value)) { return `${value}${defaultUnit}`; } else if (isString(value)) { return value; } } let scrollBarWidth; const getScrollBarWidth = (namespace) => { var _a2; if (!isClient) return 0; if (scrollBarWidth !== void 0) return scrollBarWidth; const outer = document.createElement("div"); outer.className = `${namespace}-scrollbar__wrap`; outer.style.visibility = "hidden"; outer.style.width = "100px"; outer.style.position = "absolute"; outer.style.top = "-9999px"; document.body.appendChild(outer); const widthNoScroll = outer.offsetWidth; outer.style.overflow = "scroll"; const inner = document.createElement("div"); inner.style.width = "100%"; outer.appendChild(inner); const widthWithScroll = inner.offsetWidth; (_a2 = outer.parentNode) == null ? void 0 : _a2.removeChild(outer); scrollBarWidth = widthNoScroll - widthWithScroll; return scrollBarWidth; }; function scrollIntoView(container, selected) { if (!isClient) return; if (!selected) { container.scrollTop = 0; return; } const offsetParents = []; let pointer = selected.offsetParent; while (pointer !== null && container !== pointer && container.contains(pointer)) { offsetParents.push(pointer); pointer = pointer.offsetParent; } const top = selected.offsetTop + offsetParents.reduce((prev, curr) => prev + curr.offsetTop, 0); const bottom = top + selected.offsetHeight; const viewRectTop = container.scrollTop; const viewRectBottom = viewRectTop + container.clientHeight; if (top < viewRectTop) { container.scrollTop = top; } else if (bottom > viewRectBottom) { container.scrollTop = bottom - container.clientHeight; } } /*! 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_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 minus_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ vue.defineComponent({ name: "Minus", __name: "minus", 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: "M128 544h768a32 32 0 1 0 0-64H128a32 32 0 0 0 0 64" }) ])); } }); var minus_default = minus_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 question_filled_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ vue.defineComponent({ name: "QuestionFilled", __name: "question-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-896m23.744 191.488c-52.096 0-92.928 14.784-123.2 44.352-30.976 29.568-45.76 70.4-45.76 122.496h80.256c0-29.568 5.632-52.8 17.6-68.992 13.376-19.712 35.2-28.864 66.176-28.864 23.936 0 42.944 6.336 56.32 19.712 12.672 13.376 19.712 31.68 19.712 54.912 0 17.6-6.336 34.496-19.008 49.984l-8.448 9.856c-45.76 40.832-73.216 70.4-82.368 89.408-9.856 19.008-14.08 42.24-14.08 68.992v9.856h80.96v-9.856c0-16.896 3.52-31.68 10.56-45.76 6.336-12.672 15.488-24.64 28.16-35.2 33.792-29.568 54.208-48.576 60.544-55.616 16.896-22.528 26.048-51.392 26.048-86.592 0-42.944-14.08-76.736-42.24-101.376-28.16-25.344-65.472-37.312-111.232-37.312zm-12.672 406.208a54.272 54.272 0 0 0-38.72 14.784 49.408 49.408 0 0 0-15.488 38.016c0 15.488 4.928 28.16 15.488 38.016A54.848 54.848 0 0 0 523.072 768c15.488 0 28.16-4.928 38.72-14.784a51.52 51.52 0 0 0 16.192-38.72 51.968 51.968 0 0 0-15.488-38.016 55.936 55.936 0 0 0-39.424-14.784z" }) ])); } }); var question_filled_default = question_filled_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 epPropKey = "__epPropKey"; const definePropType = (val) => val; const isEpProp = (val) => isObject$1(val) && !!val[epPropKey]; const buildProp = (prop, key2) => { 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${key2 ? ` for prop "${key2}"` : ""}. Expected one of [${allowValuesText}], got value ${JSON.stringify(val)}.`); } return valid; } : void 0; const epProp = { type, required: !!required, validator: _validator, [epPropKey]: true }; if (hasOwn(prop, "default")) epProp.default = defaultValue; return epProp; }; const buildProps = (props) => fromPairs(Object.entries(props).map(([key2, option]) => [ key2, buildProp(option, key2) ])); 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 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 [key2, comp] of Object.entries(extra)) { main[key2] = comp; } } return main; }; const withNoopInstall = (component) => { component.install = NOOP; return component; }; const composeRefs = (...refs) => { return (el) => { refs.forEach((ref2) => { if (isFunction$1(ref2)) { ref2(el); } else { ref2.value = el; } }); }; }; 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" }; const UPDATE_MODEL_EVENT = "update:modelValue"; const CHANGE_EVENT = "change"; const INPUT_EVENT = "input"; const componentSizes = ["", "default", "small", "large"]; const isValidComponentSize = (val) => ["", ...componentSizes].includes(val); 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 isKorean = (text) => /([\uAC00-\uD7AF\u3130-\u318F])+/gi.test(text); const mutable = (val) => val; const DEFAULT_EXCLUDE_KEYS = ["class", "style"]; const LISTENER_PREFIX = /^on[A-Z]/; const useAttrs = (params = {}) => { const { excludeListeners = false, excludeKeys } = params; const allExcludeKeys = vue.computed(() => { return ((excludeKeys == null ? void 0 : excludeKeys.value) || []).concat(DEFAULT_EXCLUDE_KEYS); }); const instance = vue.getCurrentInstance(); if (!instance) { return vue.computed(() => ({})); } return vue.computed(() => { var _a2; return fromPairs(Object.entries((_a2 = instance.proxy) == null ? void 0 : _a2.$attrs).filter(([key2]) => !allExcludeKeys.value.includes(key2) && !(excludeListeners && LISTENER_PREFIX.test(key2)))); }); }; const useDeprecated = ({ from, replacement, scope, version, ref: ref2, type = "API" }, condition) => { vue.watch(() => vue.unref(condition), (val) => { }, { immediate: true }); }; const useDraggable = (targetRef, dragRef, draggable, overflow) => { let transform = { offsetX: 0, offsetY: 0 }; const onMousedown = (e) => { const downX = e.clientX; const downY = e.clientY; const { offsetX, offsetY } = transform; const targetRect = targetRef.value.getBoundingClientRect(); const targetLeft = targetRect.left; const targetTop = targetRect.top; const targetWidth = targetRect.width; const targetHeight = targetRect.height; const clientWidth = document.documentElement.clientWidth; const clientHeight = document.documentElement.clientHeight; const minLeft = -targetLeft + offsetX; const minTop = -targetTop + offsetY; const maxLeft = clientWidth - targetLeft - targetWidth + offsetX; const maxTop = clientHeight - targetTop - targetHeight + offsetY; const onMousemove = (e2) => { let moveX = offsetX + e2.clientX - downX; let moveY = offsetY + e2.clientY - downY; if (!(overflow == null ? void 0 : overflow.value)) { moveX = Math.min(Math.max(moveX, minLeft), maxLeft); moveY = Math.min(Math.max(moveY, minTop), maxTop); } transform = { offsetX: moveX, offsetY: moveY }; if (targetRef.value) { targetRef.value.style.transform = `translate(${addUnit(moveX)}, ${addUnit(moveY)})`; } }; const onMouseup = () => { document.removeEventListener("mousemove", onMousemove); document.removeEventListener("mouseup", onMouseup); }; document.addEventListener("mousemove", onMousemove); document.addEventListener("mouseup", onMouseup); }; const onDraggable = () => { if (dragRef.value && targetRef.value) { dragRef.value.addEventListener("mousedown", onMousedown); } }; const offDraggable = () => { if (dragRef.value && targetRef.value) { dragRef.value.removeEventListener("mousedown", onMousedown); } }; vue.onMounted(() => { vue.watchEffect(() => { if (draggable.value) { onDraggable(); } else { offDraggable(); } }); }); vue.onBeforeUnmount(() => { offDraggable(); }); }; 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." }, 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" }, 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, key2) => { var _a2; return `${(_a2 = option == null ? void 0 : option[key2]) != null ? _a2 : `{${key2}}`}`; }); 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)); }; /** * @vue/reactivity v3.4.21 * (c) 2018-present Yuxi (Evan) You and Vue contributors * @license MIT **/ let activeEffectScope; function recordEffectScope(effect2, scope = activeEffectScope) { if (scope && scope.active) { scope.effects.push(effect2); } } let activeEffect; class ReactiveEffect { constructor(fn2, trigger2, scheduler, scope) { this.fn = fn2; this.trigger = trigger2; this.scheduler = scheduler; this.active = true; this.deps = []; this._dirtyLevel = 4; this._trackId = 0; this._runnings = 0; this._shouldSchedule = false; this._depsLength = 0; recordEffectScope(this, scope); } get dirty() { if (this._dirtyLevel === 2 || this._dirtyLevel === 3) { this._dirtyLevel = 1; pauseTracking(); for (let i = 0; i < this._depsLength; i++) { const dep = this.deps[i]; if (dep.computed) { triggerComputed(dep.computed); if (this._dirtyLevel >= 4) { break; } } } if (this._dirtyLevel === 1) { this._dirtyLevel = 0; } resetTracking(); } return this._dirtyLevel >= 4; } set dirty(v2) { this._dirtyLevel = v2 ? 4 : 0; } run() { this._dirtyLevel = 0; if (!this.active) { return this.fn(); } let lastShouldTrack = shouldTrack; let lastEffect = activeEffect; try { shouldTrack = true; activeEffect = this; this._runnings++; preCleanupEffect(this); return this.fn(); } finally { postCleanupEffect(this); this._runnings--; activeEffect = lastEffect; shouldTrack = lastShouldTrack; } } stop() { var _a2; if (this.active) { preCleanupEffect(this); postCleanupEffect(this); (_a2 = this.onStop) == null ? void 0 : _a2.call(this); this.active = false; } } } function triggerComputed(computed2) { return computed2.value; } function preCleanupEffect(effect2) { effect2._trackId++; effect2._depsLength = 0; } function postCleanupEffect(effect2) { if (effect2.deps.length > effect2._depsLength) { for (let i = effect2._depsLength; i < effect2.deps.length; i++) { cleanupDepEffect(effect2.deps[i], effect2); } effect2.deps.length = effect2._depsLength; } } function cleanupDepEffect(dep, effect2) { const trackId = dep.get(effect2); if (trackId !== void 0 && effect2._trackId !== trackId) { dep.delete(effect2); if (dep.size === 0) { dep.cleanup(); } } } let shouldTrack = true; let pauseScheduleStack = 0; const trackStack = []; function pauseTracking() { trackStack.push(shouldTrack); shouldTrack = false; } function resetTracking() { const last = trackStack.pop(); shouldTrack = last === void 0 ? true : last; } function pauseScheduling() { pauseScheduleStack++; } function resetScheduling() { pauseScheduleStack--; while (!pauseScheduleStack && queueEffectSchedulers.length) { queueEffectSchedulers.shift()(); } } function trackEffect(effect2, dep, debuggerEventExtraInfo) { if (dep.get(effect2) !== effect2._trackId) { dep.set(effect2, effect2._trackId); const oldDep = effect2.deps[effect2._depsLength]; if (oldDep !== dep) { if (oldDep) { cleanupDepEffect(oldDep, effect2); } effect2.deps[effect2._depsLength++] = dep; } else { effect2._depsLength++; } } } const queueEffectSchedulers = []; function triggerEffects(dep, dirtyLevel, debuggerEventExtraInfo) { pauseScheduling(); for (const effect2 of dep.keys()) { let tracking; if (effect2._dirtyLevel < dirtyLevel && (tracking != null ? tracking : tracking = dep.get(effect2) === effect2._trackId)) { effect2._shouldSchedule || (effect2._shouldSchedule = effect2._dirtyLevel === 0); effect2._dirtyLevel = dirtyLevel; } if (effect2._shouldSchedule && (tracking != null ? tracking : tracking = dep.get(effect2) === effect2._trackId)) { effect2.trigger(); if ((!effect2._runnings || effect2.allowRecurse) && effect2._dirtyLevel !== 2) { effect2._shouldSchedule = false; if (effect2.scheduler) { queueEffectSchedulers.push(effect2.scheduler); } } } } resetScheduling(); } const createDep = (cleanup, computed2) => { const dep = /* @__PURE__ */ new Map(); dep.cleanup = cleanup; dep.computed = computed2; return dep; }; new Set( /* @__PURE__ */ Object.getOwnPropertyNames(Symbol).filter((key2) => key2 !== "arguments" && key2 !== "caller").map((key2) => Symbol[key2]).filter(isSymbol$1) ); function toRaw(observed) { const raw = observed && observed["__v_raw"]; return raw ? toRaw(raw) : observed; } class ComputedRefImpl { constructor(getter, _setter, isReadonly2, isSSR) { this.getter = getter; this._setter = _setter; this.dep = void 0; this.__v_isRef = true; this["__v_isReadonly"] = false; this.effect = new ReactiveEffect( () => getter(this._value), () => triggerRefValue( this, this.effect._dirtyLevel === 2 ? 2 : 3 ) ); this.effect.computed = this; this.effect.active = this._cacheable = !isSSR; this["__v_isReadonly"] = isReadonly2; } get value() { const self2 = toRaw(this); if ((!self2._cacheable || self2.effect.dirty) && hasChanged(self2._value, self2._value = self2.effect.run())) { triggerRefValue(self2, 4); } trackRefValue(self2); if (self2.effect._dirtyLevel >= 2) { triggerRefValue(self2, 2); } return self2._value; } set value(newValue) { this._setter(newValue); } // #region polyfill _dirty for backward compatibility third party code for Vue <= 3.3.x get _dirty() { return this.effect.dirty; } set _dirty(v2) { this.effect.dirty = v2; } // #endregion } function computed(getterOrOptions, debugOptions, isSSR = false) { let getter; let setter; const onlyGetter = isFunction$1(getterOrOptions); if (onlyGetter) { getter = getterOrOptions; setter = NOOP; } else { getter = getterOrOptions.get; setter = getterOrOptions.set; } const cRef = new ComputedRefImpl(getter, setter, onlyGetter || !setter, isSSR); return cRef; } function trackRefValue(ref2) { var _a2; if (shouldTrack && activeEffect) { ref2 = toRaw(ref2); trackEffect( activeEffect, (_a2 = ref2.dep) != null ? _a2 : ref2.dep = createDep( () => ref2.dep = void 0, ref2 instanceof ComputedRefImpl ? ref2 : void 0 ) ); } } function triggerRefValue(ref2, dirtyLevel = 4, newVal) { ref2 = toRaw(ref2); const dep = ref2.dep; if (dep) { triggerEffects( dep, dirtyLevel ); } } 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 key2 in object) { if (object[key2]) { styles[`--${namespace.value}-${key2}`] = object[key2]; } } return styles; }; const cssVarBlock = (object) => { const styles = {}; for (const key2 in object) { if (object[key2]) { styles[`--${namespace.value}-${block}-${key2}`] = object[key2]; } } 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 }; }; 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 = 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(() => { removeClass(document == null ? void 0 : document.body, hiddenCls.value); if (withoutHiddenClass && document) { document.body.style.width = bodyWidth; } }, 200); }; vue.watch(trigger, (val) => { if (!val) { cleanup(); return; } withoutHiddenClass = !hasClass(document.body, hiddenCls.value); if (withoutHiddenClass) { bodyWidth = document.body.style.width; } 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)`; } addClass(document.body, hiddenCls.value); }); vue.onScopeDispose(() => cleanup()); }; 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 = (event2) => { if (indicator.value === true) { return; } indicator.value = true; if (toggleReason) { toggleReason.value = event2; } if (isFunction$1(onShow)) { onShow(event2); } }; const doHide = (event2) => { if (indicator.value === false) { return; } indicator.value = false; if (toggleReason) { toggleReason.value = event2; } if (isFunction$1(onHide)) { onHide(event2); } }; const show = (event2) => { if (props.disabled === true || isFunction$1(shouldProceed) && !shouldProceed()) return; const shouldEmit = hasUpdateHandler.value && isClient; if (shouldEmit) { emit(updateEventKey, true); } if (isModelBindingAbsent.value || !shouldEmit) { doShow(event2); } }; const hide = (event2) => { if (props.disabled === true || !isClient) return; const shouldEmit = hasUpdateHandler.value && isClient; if (shouldEmit) { emit(updateEventKey, false); } if (isModelBindingAbsent.value || !shouldEmit) { doHide(event2); } }; const onChange = (val) => { if (!isBoolean(val)) return; if (props.disabled && val) { if (hasUpdateHandler.value) { emit(updateEventKey, false); } } else if (indicator.value !== val) { if (val) { doShow(); } else { doHide(); } } }; const toggle = () => { if (indicator.value) { hide(); } else { show(); } }; vue.watch(() => props[name], onChange); if (shouldHideWhenRouteChanges && instance.appContext.config.globalProperties.$route !== void 0) { vue.watch(() => ({ ...instance.proxy.$route }), () => { if (shouldHideWhenRouteChanges.value && indicator.value) { hide(); } }); } vue.onMounted(() => { onChange(props[name]); }); return { hide, show, toggle, hasUpdateHandler }; }; return { useModelToggle: useModelToggle2, useModelToggleProps: useModelToggleProps2, useModelToggleEmits: useModelToggleEmits2 }; }; const useProp = (name) => { const vm = vue.getCurrentInstance(); return vue.computed(() => { var _a2, _b; return (_b = (_a2 = vm == null ? void 0 : vm.proxy) == null ? void 0 : _a2.$props) == null ? void 0 : _b[name]; }); }; var E$1 = "top", R = "bottom", W = "right", P$1 = "left", me = "auto", G = [E$1, R, W, P$1], U$1 = "start", J = "end", Xe = "clippingParents", je = "viewport", K = "popper", Ye = "reference", De = G.reduce(function(t, e) { return t.concat([e + "-" + U$1, e + "-" + J]); }, []), Ee = [].concat(G, [me]).reduce(function(t, e) { return t.concat([e, e + "-" + U$1, e + "-" + J]); }, []), Ge = "beforeRead", Je = "read", Ke = "afterRead", Qe = "beforeMain", Ze = "main", et = "afterMain", tt = "beforeWrite", nt = "write", rt = "afterWrite", ot = [Ge, Je, Ke, Qe, Ze, et, tt, nt, rt]; function C(t) { return t ? (t.nodeName || "").toLowerCase() : null; } function H(t) { if (t == null) return window; if (t.toString() !== "[object Window]") { var e = t.ownerDocument; return e && e.defaultView || window; } return t; } function Q(t) { var e = H(t).Element; return t instanceof e || t instanceof Element; } function B(t) { var e = H(t).HTMLElement; return t instanceof e || t instanceof HTMLElement; } function Pe(t) { if (typeof ShadowRoot == "undefined") return false; var e = H(t).ShadowRoot; return t instanceof e || t instanceof ShadowRoot; } function Mt(t) { var e = t.state; Object.keys(e.elements).forEach(function(n) { var r = e.styles[n] || {}, o2 = e.attributes[n] || {}, i = e.elements[n]; !B(i) || !C(i) || (Object.assign(i.style, r), Object.keys(o2).forEach(function(a2) { var s2 = o2[a2]; s2 === false ? i.removeAttribute(a2) : i.setAttribute(a2, s2 === true ? "" : s2); })); }); } function Rt(t) { var e = t.state, n = { popper: { position: e.options.strategy, left: "0", top: "0", margin: "0" }, arrow: { position: "absolute" }, reference: {} }; return Object.assign(e.elements.popper.style, n.popper), e.styles = n, e.elements.arrow && Object.assign(e.elements.arrow.style, n.arrow), function() { Object.keys(e.elements).forEach(function(r) { var o2 = e.elements[r], i = e.attributes[r] || {}, a2 = Object.keys(e.styles.hasOwnProperty(r) ? e.styles[r] : n[r]), s2 = a2.reduce(function(f2, c2) { return f2[c2] = "", f2; }, {}); !B(o2) || !C(o2) || (Object.assign(o2.style, s2), Object.keys(i).forEach(function(f2) { o2.removeAttribute(f2); })); }); }; } var Ae = { name: "applyStyles", enabled: true, phase: "write", fn: Mt, effect: Rt, requires: ["computeStyles"] }; function q(t) { return t.split("-")[0]; } var X$1 = Math.max, ve = Math.min, Z = Math.round; function ee(t, e) { e === void 0 && (e = false); var n = t.getBoundingClientRect(), r = 1, o2 = 1; if (B(t) && e) { var i = t.offsetHeight, a2 = t.offsetWidth; a2 > 0 && (r = Z(n.width) / a2 || 1), i > 0 && (o2 = Z(n.height) / i || 1); } return { width: n.width / r, height: n.height / o2, top: n.top / o2, right: n.right / r, bottom: n.bottom / o2, left: n.left / r, x: n.left / r, y: n.top / o2 }; } function ke(t) { var e = ee(t), n = t.offsetWidth, r = t.offsetHeight; return Math.abs(e.width - n) <= 1 && (n = e.width), Math.abs(e.height - r) <= 1 && (r = e.height), { x: t.offsetLeft, y: t.offsetTop, width: n, height: r }; } function it(t, e) { var n = e.getRootNode && e.getRootNode(); if (t.contains(e)) return true; if (n && Pe(n)) { var r = e; do { if (r && t.isSameNode(r)) return true; r = r.parentNode || r.host; } while (r); } return false; } function N$1(t) { return H(t).getComputedStyle(t); } function Wt(t) { return ["table", "td", "th"].indexOf(C(t)) >= 0; } function I$1(t) { return ((Q(t) ? t.ownerDocument : t.document) || window.document).documentElement; } function ge(t) { return C(t) === "html" ? t : t.assignedSlot || t.parentNode || (Pe(t) ? t.host : null) || I$1(t); } function at(t) { return !B(t) || N$1(t).position === "fixed" ? null : t.offsetParent; } function Bt(t) { var e = navigator.userAgent.toLowerCase().indexOf("firefox") !== -1, n = navigator.userAgent.indexOf("Trident") !== -1; if (n && B(t)) { var r = N$1(t); if (r.position === "fixed") return null; } var o2 = ge(t); for (Pe(o2) && (o2 = o2.host); B(o2) && ["html", "body"].indexOf(C(o2)) < 0; ) { var i = N$1(o2); if (i.transform !== "none" || i.perspective !== "none" || i.contain === "paint" || ["transform", "perspective"].indexOf(i.willChange) !== -1 || e && i.willChange === "filter" || e && i.filter && i.filter !== "none") return o2; o2 = o2.parentNode; } return null; } function se(t) { for (var e = H(t), n = at(t); n && Wt(n) && N$1(n).position === "static"; ) n = at(n); return n && (C(n) === "html" || C(n) === "body" && N$1(n).position === "static") ? e : n || Bt(t) || e; } function Le(t) { return ["top", "bottom"].indexOf(t) >= 0 ? "x" : "y"; } function fe(t, e, n) { return X$1(t, ve(e, n)); } function St(t, e, n) { var r = fe(t, e, n); return r > n ? n : r; } function st() { return { top: 0, right: 0, bottom: 0, left: 0 }; } function ft(t) { return Object.assign({}, st(), t); } function ct(t, e) { return e.reduce(function(n, r) { return n[r] = t, n; }, {}); } var Tt = function(t, e) { return t = typeof t == "function" ? t(Object.assign({}, e.rects, { placement: e.placement })) : t, ft(typeof t != "number" ? t : ct(t, G)); }; function Ht(t) { var e, n = t.state, r = t.name, o2 = t.options, i = n.elements.arrow, a2 = n.modifiersData.popperOffsets, s2 = q(n.placement), f2 = Le(s2), c2 = [P$1, W].indexOf(s2) >= 0, u2 = c2 ? "height" : "width"; if (!(!i || !a2)) { var m2 = Tt(o2.padding, n), v2 = ke(i), l2 = f2 === "y" ? E$1 : P$1, h2 = f2 === "y" ? R : W, p2 = n.rects.reference[u2] + n.rects.reference[f2] - a2[f2] - n.rects.popper[u2], g = a2[f2] - n.rects.reference[f2], x2 = se(i), y = x2 ? f2 === "y" ? x2.clientHeight || 0 : x2.clientWidth || 0 : 0, $2 = p2 / 2 - g / 2, d2 = m2[l2], b2 = y - v2[u2] - m2[h2], w2 = y / 2 - v2[u2] / 2 + $2, O2 = fe(d2, w2, b2), j = f2; n.modifiersData[r] = (e = {}, e[j] = O2, e.centerOffset = O2 - w2, e); } } function Ct(t) { var e = t.state, n = t.options, r = n.element, o2 = r === void 0 ? "[data-popper-arrow]" : r; o2 != null && (typeof o2 == "string" && (o2 = e.elements.popper.querySelector(o2), !o2) || !it(e.elements.popper, o2) || (e.elements.arrow = o2)); } var pt = { name: "arrow", enabled: true, phase: "main", fn: Ht, effect: Ct, requires: ["popperOffsets"], requiresIfExists: ["preventOverflow"] }; function te(t) { return t.split("-")[1]; } var qt = { top: "auto", right: "auto", bottom: "auto", left: "auto" }; function Vt(t) { var e = t.x, n = t.y, r = window, o2 = r.devicePixelRatio || 1; return { x: Z(e * o2) / o2 || 0, y: Z(n * o2) / o2 || 0 }; } function ut(t) { var e, n = t.popper, r = t.popperRect, o2 = t.placement, i = t.variation, a2 = t.offsets, s2 = t.position, f2 = t.gpuAcceleration, c2 = t.adaptive, u2 = t.roundOffsets, m2 = t.isFixed, v2 = a2.x, l2 = v2 === void 0 ? 0 : v2, h2 = a2.y, p2 = h2 === void 0 ? 0 : h2, g = typeof u2 == "function" ? u2({ x: l2, y: p2 }) : { x: l2, y: p2 }; l2 = g.x, p2 = g.y; var x2 = a2.hasOwnProperty("x"), y = a2.hasOwnProperty("y"), $2 = P$1, d2 = E$1, b2 = window; if (c2) { var w2 = se(n), O2 = "clientHeight", j = "clientWidth"; if (w2 === H(n) && (w2 = I$1(n), N$1(w2).position !== "static" && s2 === "absolute" && (O2 = "scrollHeight", j = "scrollWidth")), w2 = w2, o2 === E$1 || (o2 === P$1 || o2 === W) && i === J) { d2 = R; var A2 = m2 && w2 === b2 && b2.visualViewport ? b2.visualViewport.height : w2[O2]; p2 -= A2 - r.height, p2 *= f2 ? 1 : -1; } if (o2 === P$1 || (o2 === E$1 || o2 === R) && i === J) { $2 = W; var k = m2 && w2 === b2 && b2.visualViewport ? b2.visualViewport.width : w2[j]; l2 -= k - r.width, l2 *= f2 ? 1 : -1; } } var D2 = Object.assign({ position: s2 }, c2 && qt), S2 = u2 === true ? Vt({ x: l2, y: p2 }) : { x: l2, y: p2 }; if (l2 = S2.x, p2 = S2.y, f2) { var L; return Object.assign({}, D2, (L = {}, L[d2] = y ? "0" : "", L[$2] = x2 ? "0" : "", L.transform = (b2.devicePixelRatio || 1) <= 1 ? "translate(" + l2 + "px, " + p2 + "px)" : "translate3d(" + l2 + "px, " + p2 + "px, 0)", L)); } return Object.assign({}, D2, (e = {}, e[d2] = y ? p2 + "px" : "", e[$2] = x2 ? l2 + "px" : "", e.transform = "", e)); } function Nt(t) { var e = t.state, n = t.options, r = n.gpuAcceleration, o2 = r === void 0 ? true : r, i = n.adaptive, a2 = i === void 0 ? true : i, s2 = n.roundOffsets, f2 = s2 === void 0 ? true : s2, c2 = { placement: q(e.placement), variation: te(e.placement), popper: e.elements.popper, popperRect: e.rects.popper, gpuAcceleration: o2, isFixed: e.options.strategy === "fixed" }; e.modifiersData.popperOffsets != null && (e.styles.popper = Object.assign({}, e.styles.popper, ut(Object.assign({}, c2, { offsets: e.modifiersData.popperOffsets, position: e.options.strategy, adaptive: a2, roundOffsets: f2 })))), e.modifiersData.arrow != null && (e.styles.arrow = Object.assign({}, e.styles.arrow, ut(Object.assign({}, c2, { offsets: e.modifiersData.arrow, position: "absolute", adaptive: false, roundOffsets: f2 })))), e.attributes.popper = Object.assign({}, e.attributes.popper, { "data-popper-placement": e.placement }); } var Me = { name: "computeStyles", enabled: true, phase: "beforeWrite", fn: Nt, data: {} }, ye = { passive: true }; function It(t) { var e = t.state, n = t.instance, r = t.options, o2 = r.scroll, i = o2 === void 0 ? true : o2, a2 = r.resize, s2 = a2 === void 0 ? true : a2, f2 = H(e.elements.popper), c2 = [].concat(e.scrollParents.reference, e.scrollParents.popper); return i && c2.forEach(function(u2) { u2.addEventListener("scroll", n.update, ye); }), s2 && f2.addEventListener("resize", n.update, ye), function() { i && c2.forEach(function(u2) { u2.removeEventListener("scroll", n.update, ye); }), s2 && f2.removeEventListener("resize", n.update, ye); }; } var Re = { name: "eventListeners", enabled: true, phase: "write", fn: function() { }, effect: It, data: {} }, _t = { left: "right", right: "left", bottom: "top", top: "bottom" }; function be(t) { return t.replace(/left|right|bottom|top/g, function(e) { return _t[e]; }); } var zt = { start: "end", end: "start" }; function lt(t) { return t.replace(/start|end/g, function(e) { return zt[e]; }); } function We(t) { var e = H(t), n = e.pageXOffset, r = e.pageYOffset; return { scrollLeft: n, scrollTop: r }; } function Be(t) { return ee(I$1(t)).left + We(t).scrollLeft; } function Ft(t) { var e = H(t), n = I$1(t), r = e.visualViewport, o2 = n.clientWidth, i = n.clientHeight, a2 = 0, s2 = 0; return r && (o2 = r.width, i = r.height, /^((?!chrome|android).)*safari/i.test(navigator.userAgent) || (a2 = r.offsetLeft, s2 = r.offsetTop)), { width: o2, height: i, x: a2 + Be(t), y: s2 }; } function Ut(t) { var e, n = I$1(t), r = We(t), o2 = (e = t.ownerDocument) == null ? void 0 : e.body, i = X$1(n.scrollWidth, n.clientWidth, o2 ? o2.scrollWidth : 0, o2 ? o2.clientWidth : 0), a2 = X$1(n.scrollHeight, n.clientHeight, o2 ? o2.scrollHeight : 0, o2 ? o2.clientHeight : 0), s2 = -r.scrollLeft + Be(t), f2 = -r.scrollTop; return N$1(o2 || n).direction === "rtl" && (s2 += X$1(n.clientWidth, o2 ? o2.clientWidth : 0) - i), { width: i, height: a2, x: s2, y: f2 }; } function Se(t) { var e = N$1(t), n = e.overflow, r = e.overflowX, o2 = e.overflowY; return /auto|scroll|overlay|hidden/.test(n + o2 + r); } function dt(t) { return ["html", "body", "#document"].indexOf(C(t)) >= 0 ? t.ownerDocument.body : B(t) && Se(t) ? t : dt(ge(t)); } function ce(t, e) { var n; e === void 0 && (e = []); var r = dt(t), o2 = r === ((n = t.ownerDocument) == null ? void 0 : n.body), i = H(r), a2 = o2 ? [i].concat(i.visualViewport || [], Se(r) ? r : []) : r, s2 = e.concat(a2); return o2 ? s2 : s2.concat(ce(ge(a2))); } function Te(t) { return Object.assign({}, t, { left: t.x, top: t.y, right: t.x + t.width, bottom: t.y + t.height }); } function Xt(t) { var e = ee(t); return e.top = e.top + t.clientTop, e.left = e.left + t.clientLeft, e.bottom = e.top + t.clientHeight, e.right = e.left + t.clientWidth, e.width = t.clientWidth, e.height = t.clientHeight, e.x = e.left, e.y = e.top, e; } function ht(t, e) { return e === je ? Te(Ft(t)) : Q(e) ? Xt(e) : Te(Ut(I$1(t))); } function Yt(t) { var e = ce(ge(t)), n = ["absolute", "fixed"].indexOf(N$1(t).position) >= 0, r = n && B(t) ? se(t) : t; return Q(r) ? e.filter(function(o2) { return Q(o2) && it(o2, r) && C(o2) !== "body"; }) : []; } function Gt(t, e, n) { var r = e === "clippingParents" ? Yt(t) : [].concat(e), o2 = [].concat(r, [n]), i = o2[0], a2 = o2.reduce(function(s2, f2) { var c2 = ht(t, f2); return s2.top = X$1(c2.top, s2.top), s2.right = ve(c2.right, s2.right), s2.bottom = ve(c2.bottom, s2.bottom), s2.left = X$1(c2.left, s2.left), s2; }, ht(t, i)); return a2.width = a2.right - a2.left, a2.height = a2.bottom - a2.top, a2.x = a2.left, a2.y = a2.top, a2; } function mt(t) { var e = t.reference, n = t.element, r = t.placement, o2 = r ? q(r) : null, i = r ? te(r) : null, a2 = e.x + e.width / 2 - n.width / 2, s2 = e.y + e.height / 2 - n.height / 2, f2; switch (o2) { case E$1: f2 = { x: a2, y: e.y - n.height }; break; case R: f2 = { x: a2, y: e.y + e.height }; break; case W: f2 = { x: e.x + e.width, y: s2 }; break; case P$1: f2 = { x: e.x - n.width, y: s2 }; break; default: f2 = { x: e.x, y: e.y }; } var c2 = o2 ? Le(o2) : null; if (c2 != null) { var u2 = c2 === "y" ? "height" : "width"; switch (i) { case U$1: f2[c2] = f2[c2] - (e[u2] / 2 - n[u2] / 2); break; case J: f2[c2] = f2[c2] + (e[u2] / 2 - n[u2] / 2); break; } } return f2; } function ne(t, e) { e === void 0 && (e = {}); var n = e, r = n.placement, o2 = r === void 0 ? t.placement : r, i = n.boundary, a2 = i === void 0 ? Xe : i, s2 = n.rootBoundary, f2 = s2 === void 0 ? je : s2, c2 = n.elementContext, u2 = c2 === void 0 ? K : c2, m2 = n.altBoundary, v2 = m2 === void 0 ? false : m2, l2 = n.padding, h2 = l2 === void 0 ? 0 : l2, p2 = ft(typeof h2 != "number" ? h2 : ct(h2, G)), g = u2 === K ? Ye : K, x2 = t.rects.popper, y = t.elements[v2 ? g : u2], $2 = Gt(Q(y) ? y : y.contextElement || I$1(t.elements.popper), a2, f2), d2 = ee(t.elements.reference), b2 = mt({ reference: d2, element: x2, strategy: "absolute", placement: o2 }), w2 = Te(Object.assign({}, x2, b2)), O2 = u2 === K ? w2 : d2, j = { top: $2.top - O2.top + p2.top, bottom: O2.bottom - $2.bottom + p2.bottom, left: $2.left - O2.left + p2.left, right: O2.right - $2.right + p2.right }, A2 = t.modifiersData.offset; if (u2 === K && A2) { var k = A2[o2]; Object.keys(j).forEach(function(D2) { var S2 = [W, R].indexOf(D2) >= 0 ? 1 : -1, L = [E$1, R].indexOf(D2) >= 0 ? "y" : "x"; j[D2] += k[L] * S2; }); } return j; } function Jt(t, e) { e === void 0 && (e = {}); var n = e, r = n.placement, o2 = n.boundary, i = n.rootBoundary, a2 = n.padding, s2 = n.flipVariations, f2 = n.allowedAutoPlacements, c2 = f2 === void 0 ? Ee : f2, u2 = te(r), m2 = u2 ? s2 ? De : De.filter(function(h2) { return te(h2) === u2; }) : G, v2 = m2.filter(function(h2) { return c2.indexOf(h2) >= 0; }); v2.length === 0 && (v2 = m2); var l2 = v2.reduce(function(h2, p2) { return h2[p2] = ne(t, { placement: p2, boundary: o2, rootBoundary: i, padding: a2 })[q(p2)], h2; }, {}); return Object.keys(l2).sort(function(h2, p2) { return l2[h2] - l2[p2]; }); } function Kt(t) { if (q(t) === me) return []; var e = be(t); return [lt(t), e, lt(e)]; } function Qt(t) { var e = t.state, n = t.options, r = t.name; if (!e.modifiersData[r]._skip) { for (var o2 = n.mainAxis, i = o2 === void 0 ? true : o2, a2 = n.altAxis, s2 = a2 === void 0 ? true : a2, f2 = n.fallbackPlacements, c2 = n.padding, u2 = n.boundary, m2 = n.rootBoundary, v2 = n.altBoundary, l2 = n.flipVariations, h2 = l2 === void 0 ? true : l2, p2 = n.allowedAutoPlacements, g = e.options.placement, x2 = q(g), y = x2 === g, $2 = f2 || (y || !h2 ? [be(g)] : Kt(g)), d2 = [g].concat($2).reduce(function(z, V) { return z.concat(q(V) === me ? Jt(e, { placement: V, boundary: u2, rootBoundary: m2, padding: c2, flipVariations: h2, allowedAutoPlacements: p2 }) : V); }, []), b2 = e.rects.reference, w2 = e.rects.popper, O2 = /* @__PURE__ */ new Map(), j = true, A2 = d2[0], k = 0; k < d2.length; k++) { var D2 = d2[k], S2 = q(D2), L = te(D2) === U$1, re = [E$1, R].indexOf(S2) >= 0, oe = re ? "width" : "height", M2 = ne(e, { placement: D2, boundary: u2, rootBoundary: m2, altBoundary: v2, padding: c2 }), T2 = re ? L ? W : P$1 : L ? R : E$1; b2[oe] > w2[oe] && (T2 = be(T2)); var pe = be(T2), _2 = []; if (i && _2.push(M2[S2] <= 0), s2 && _2.push(M2[T2] <= 0, M2[pe] <= 0), _2.every(function(z) { return z; })) { A2 = D2, j = false; break; } O2.set(D2, _2); } if (j) for (var ue = h2 ? 3 : 1, xe = function(z) { var V = d2.find(function(de) { var ae = O2.get(de); if (ae) return ae.slice(0, z).every(function(Y2) { return Y2; }); }); if (V) return A2 = V, "break"; }, ie = ue; ie > 0; ie--) { var le = xe(ie); if (le === "break") break; } e.placement !== A2 && (e.modifiersData[r]._skip = true, e.placement = A2, e.reset = true); } } var vt = { name: "flip", enabled: true, phase: "main", fn: Qt, requiresIfExists: ["offset"], data: { _skip: false } }; function gt(t, e, n) { return n === void 0 && (n = { x: 0, y: 0 }), { top: t.top - e.height - n.y, right: t.right - e.width + n.x, bottom: t.bottom - e.height + n.y, left: t.left - e.width - n.x }; } function yt(t) { return [E$1, W, R, P$1].some(function(e) { return t[e] >= 0; }); } function Zt(t) { var e = t.state, n = t.name, r = e.rects.reference, o2 = e.rects.popper, i = e.modifiersData.preventOverflow, a2 = ne(e, { elementContext: "reference" }), s2 = ne(e, { altBoundary: true }), f2 = gt(a2, r), c2 = gt(s2, o2, i), u2 = yt(f2), m2 = yt(c2); e.modifiersData[n] = { referenceClippingOffsets: f2, popperEscapeOffsets: c2, isReferenceHidden: u2, hasPopperEscaped: m2 }, e.attributes.popper = Object.assign({}, e.attributes.popper, { "data-popper-reference-hidden": u2, "data-popper-escaped": m2 }); } var bt = { name: "hide", enabled: true, phase: "main", requiresIfExists: ["preventOverflow"], fn: Zt }; function en(t, e, n) { var r = q(t), o2 = [P$1, E$1].indexOf(r) >= 0 ? -1 : 1, i = typeof n == "function" ? n(Object.assign({}, e, { placement: t })) : n, a2 = i[0], s2 = i[1]; return a2 = a2 || 0, s2 = (s2 || 0) * o2, [P$1, W].indexOf(r) >= 0 ? { x: s2, y: a2 } : { x: a2, y: s2 }; } function tn(t) { var e = t.state, n = t.options, r = t.name, o2 = n.offset, i = o2 === void 0 ? [0, 0] : o2, a2 = Ee.reduce(function(u2, m2) { return u2[m2] = en(m2, e.rects, i), u2; }, {}), s2 = a2[e.placement], f2 = s2.x, c2 = s2.y; e.modifiersData.popperOffsets != null && (e.modifiersData.popperOffsets.x += f2, e.modifiersData.popperOffsets.y += c2), e.modifiersData[r] = a2; } var wt = { name: "offset", enabled: true, phase: "main", requires: ["popperOffsets"], fn: tn }; function nn(t) { var e = t.state, n = t.name; e.modifiersData[n] = mt({ reference: e.rects.reference, element: e.rects.popper, 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 === void 0 ? true : o2, a2 = n.altAxis, s2 = a2 === void 0 ? false : a2, f2 = n.boundary, c2 = n.rootBoundary, u2 = n.altBoundary, m2 = n.padding, v2 = n.tether, l2 = v2 === void 0 ? true : v2, h2 = n.tetherOffset, p2 = h2 === void 0 ? 0 : h2, g = ne(e, { boundary: f2, rootBoundary: c2, padding: m2, altBoundary: u2 }), x2 = q(e.placement), y = te(e.placement), $2 = !y, d2 = Le(x2), b2 = rn(d2), w2 = e.modifiersData.popperOffsets, O2 = e.rects.reference, j = e.rects.popper, A2 = typeof p2 == "function" ? p2(Object.assign({}, e.rects, { placement: e.placement })) : p2, k = typeof A2 == "number" ? { mainAxis: A2, altAxis: A2 } : Object.assign({ mainAxis: 0, altAxis: 0 }, A2), D2 = e.modifiersData.offset ? e.modifiersData.offset[e.placement] : null, S2 = { x: 0, y: 0 }; if (w2) { if (i) { var L, re = d2 === "y" ? E$1 : P$1, oe = d2 === "y" ? R : W, M2 = d2 === "y" ? "height" : "width", T2 = w2[d2], pe = T2 + g[re], _2 = T2 - g[oe], ue = l2 ? -j[M2] / 2 : 0, xe = y === U$1 ? O2[M2] : j[M2], ie = y === U$1 ? -j[M2] : -O2[M2], le = e.elements.arrow, z = l2 && le ? ke(le) : { width: 0, height: 0 }, V = e.modifiersData["arrow#persistent"] ? e.modifiersData["arrow#persistent"].padding : st(), de = V[re], ae = V[oe], Y2 = fe(0, O2[M2], z[M2]), jt = $2 ? O2[M2] / 2 - ue - Y2 - de - k.mainAxis : xe - Y2 - de - k.mainAxis, Dt = $2 ? -O2[M2] / 2 + ue + Y2 + ae + k.mainAxis : ie + Y2 + ae + k.mainAxis, Oe = e.elements.arrow && se(e.elements.arrow), Et = Oe ? d2 === "y" ? Oe.clientTop || 0 : Oe.clientLeft || 0 : 0, Ce = (L = D2 == null ? void 0 : D2[d2]) != null ? L : 0, Pt = T2 + jt - Ce - Et, At = T2 + Dt - Ce, qe = fe(l2 ? ve(pe, Pt) : pe, T2, l2 ? X$1(_2, At) : _2); w2[d2] = qe, S2[d2] = qe - T2; } if (s2) { var Ve, kt = d2 === "x" ? E$1 : P$1, Lt = d2 === "x" ? R : W, F2 = w2[b2], he = b2 === "y" ? "height" : "width", Ne = F2 + g[kt], Ie = F2 - g[Lt], $e = [E$1, P$1].indexOf(x2) !== -1, _e = (Ve = D2 == null ? void 0 : D2[b2]) != null ? Ve : 0, ze = $e ? Ne : F2 - O2[he] - j[he] - _e + k.altAxis, Fe = $e ? F2 + O2[he] + j[he] - _e - k.altAxis : Ie, Ue = l2 && $e ? St(ze, F2, Fe) : fe(l2 ? ze : Ne, F2, l2 ? Fe : Ie); w2[b2] = Ue, S2[b2] = Ue - F2; } e.modifiersData[r] = S2; } } var xt = { name: "preventOverflow", enabled: true, phase: "main", fn: on, requiresIfExists: ["offset"] }; function an(t) { return { scrollLeft: t.scrollLeft, scrollTop: t.scrollTop }; } function sn(t) { return t === H(t) || !B(t) ? We(t) : an(t); } function fn(t) { var e = t.getBoundingClientRect(), n = Z(e.width) / t.offsetWidth || 1, r = Z(e.height) / t.offsetHeight || 1; return n !== 1 || r !== 1; } function cn(t, e, n) { n === void 0 && (n = false); var r = B(e), o2 = B(e) && fn(e), i = I$1(e), a2 = ee(t, o2), s2 = { scrollLeft: 0, scrollTop: 0 }, f2 = { x: 0, y: 0 }; return (r || !r && !n) && ((C(e) !== "body" || Se(i)) && (s2 = sn(e)), B(e) ? (f2 = ee(e, true), f2.x += e.clientLeft, f2.y += e.clientTop) : i && (f2.x = Be(i))), { x: a2.left + s2.scrollLeft - f2.x, y: a2.top + s2.scrollTop - f2.y, width: a2.width, height: a2.height }; } function pn(t) { var e = /* @__PURE__ */ new Map(), n = /* @__PURE__ */ new Set(), r = []; t.forEach(function(i) { e.set(i.name, i); }); function o2(i) { n.add(i.name); var a2 = [].concat(i.requires || [], i.requiresIfExists || []); a2.forEach(function(s2) { if (!n.has(s2)) { var f2 = e.get(s2); f2 && o2(f2); } }), r.push(i); } return t.forEach(function(i) { n.has(i.name) || o2(i); }), r; } function un(t) { var e = pn(t); return ot.reduce(function(n, r) { return n.concat(e.filter(function(o2) { return o2.phase === r; })); }, []); } function ln(t) { var e; return function() { return e || (e = new Promise(function(n) { Promise.resolve().then(function() { e = void 0, n(t()); }); })), e; }; } function dn(t) { var e = t.reduce(function(n, r) { var o2 = n[r.name]; return n[r.name] = o2 ? Object.assign({}, o2, r, { options: Object.assign({}, o2.options, r.options), data: Object.assign({}, o2.data, r.data) }) : r, n; }, {}); return Object.keys(e).map(function(n) { return e[n]; }); } var Ot = { placement: "bottom", modifiers: [], strategy: "absolute" }; function $t() { for (var t = arguments.length, e = new Array(t), n = 0; n < t; n++) e[n] = arguments[n]; return !e.some(function(r) { return !(r && typeof r.getBoundingClientRect == "function"); }); } function we(t) { t === void 0 && (t = {}); var e = t, n = e.defaultModifiers, r = n === void 0 ? [] : n, o2 = e.defaultOptions, i = o2 === void 0 ? Ot : o2; return function(a2, s2, f2) { f2 === void 0 && (f2 = i); var c2 = { placement: "bottom", orderedModifiers: [], options: Object.assign({}, Ot, i), modifiersData: {}, elements: { reference: a2, popper: s2 }, attributes: {}, styles: {} }, u2 = [], m2 = false, v2 = { state: c2, setOptions: function(p2) { var g = typeof p2 == "function" ? p2(c2.options) : p2; h2(), c2.options = Object.assign({}, i, c2.options, g), c2.scrollParents = { reference: Q(a2) ? ce(a2) : a2.contextElement ? ce(a2.contextElement) : [], popper: ce(s2) }; var x2 = un(dn([].concat(r, c2.options.modifiers))); return c2.orderedModifiers = x2.filter(function(y) { return y.enabled; }), l2(), v2.update(); }, forceUpdate: function() { if (!m2) { var p2 = c2.elements, g = p2.reference, x2 = p2.popper; if ($t(g, x2)) { c2.rects = { reference: cn(g, se(x2), c2.options.strategy === "fixed"), popper: ke(x2) }, c2.reset = false, c2.placement = c2.options.placement, c2.orderedModifiers.forEach(function(j) { return c2.modifiersData[j.name] = Object.assign({}, j.data); }); for (var y = 0; y < c2.orderedModifiers.length; y++) { if (c2.reset === true) { c2.reset = false, y = -1; continue; } var $2 = c2.orderedModifiers[y], d2 = $2.fn, b2 = $2.options, w2 = b2 === void 0 ? {} : b2, O2 = $2.name; typeof d2 == "function" && (c2 = d2({ state: c2, options: w2, name: O2, instance: v2 }) || c2); } } } }, update: ln(function() { return new Promise(function(p2) { v2.forceUpdate(), p2(c2); }); }), destroy: function() { h2(), m2 = true; } }; if (!$t(a2, s2)) return v2; v2.setOptions(f2).then(function(p2) { !m2 && f2.onFirstUpdate && f2.onFirstUpdate(p2); }); function l2() { c2.orderedModifiers.forEach(function(p2) { var g = p2.name, x2 = p2.options, y = x2 === void 0 ? {} : x2, $2 = p2.effect; if (typeof $2 == "function") { var d2 = $2({ state: c2, name: g, instance: v2, options: y }), b2 = function() { }; u2.push(d2 || b2); } }); } function h2() { u2.forEach(function(p2) { return p2(); }), u2 = []; } return v2; }; } we(); var mn = [Re, He, Me, Ae]; we({ defaultModifiers: mn }); var gn = [Re, He, Me, Ae, wt, vt, xt, pt, bt], yn = we({ defaultModifiers: gn }); const usePopper = (referenceElementRef, popperElementRef, opts = {}) => { const stateUpdater = { name: "updateState", enabled: true, phase: "write", fn: ({ state }) => { const derivedState = deriveState(state); Object.assign(states.value, derivedState); }, requires: ["computeStyles"] }; const options = vue.computed(() => { const { onFirstUpdate, placement, strategy, modifiers } = vue.unref(opts); return { onFirstUpdate, placement: placement || "bottom", strategy: strategy || "absolute", modifiers: [ ...modifiers || [], stateUpdater, { name: "applyStyles", enabled: false } ] }; }); const instanceRef = vue.shallowRef(); const states = vue.ref({ styles: { popper: { position: vue.unref(options).strategy, left: "0", top: "0" }, arrow: { position: "absolute" } }, attributes: {} }); const destroy = () => { if (!instanceRef.value) return; instanceRef.value.destroy(); instanceRef.value = void 0; }; vue.watch(options, (newOptions) => { const instance = vue.unref(instanceRef); if (instance) { instance.setOptions(newOptions); } }, { deep: true }); vue.watch([referenceElementRef, popperElementRef], ([referenceElement, popperElement]) => { destroy(); if (!referenceElement || !popperElement) return; instanceRef.value = yn(referenceElement, popperElement, vue.unref(options)); }); vue.onBeforeUnmount(() => { destroy(); }); return { state: vue.computed(() => { var _a2; return { ...((_a2 = vue.unref(instanceRef)) == null ? void 0 : _a2.state) || {} }; }), styles: vue.computed(() => vue.unref(states).styles), attributes: vue.computed(() => vue.unref(states).attributes), update: () => { var _a2; return (_a2 = vue.unref(instanceRef)) == null ? void 0 : _a2.update(); }, forceUpdate: () => { var _a2; return (_a2 = vue.unref(instanceRef)) == null ? void 0 : _a2.forceUpdate(); }, instanceRef: vue.computed(() => vue.unref(instanceRef)) }; }; function deriveState(state) { const elements = Object.keys(state.elements); const styles = fromPairs(elements.map((element) => [element, state.styles[element] || {}])); const attributes = fromPairs(elements.map((element) => [element, state.attributes[element]])); return { styles, attributes }; } const 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 }; }; 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 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 = vue.computed(() => vue.unref(deterministicId) || `${namespace.value}-id-${idInjection.prefix}-${idInjection.current++}`); return idRef; }; let registeredEscapeHandlers = []; const cachedHandler = (e) => { const event2 = e; if (event2.key === EVENT_CODE.esc) { registeredEscapeHandlers.forEach((registeredHandler) => registeredHandler(event2)); } }; 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); } }); }; let cachedContainer; 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 (!cachedContainer && !document.body.querySelector(selector.value)) { cachedContainer = createContainer(id.value); } }); return { id, selector }; }; 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 = (event2) => { registerTimeout(() => { open(event2); const _autoClose = vue.unref(autoClose); if (isNumber(_autoClose) && _autoClose > 0) { registerTimeoutForAutoClose(() => { close(event2); }, _autoClose); } }, vue.unref(showAfter)); }; const onClose = (event2) => { cancelTimeoutForAutoClose(); registerTimeout(() => { close(event2); }, vue.unref(hideAfter)); }; return { onOpen, onClose }; }; 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 initial = { current: 0 }; const zIndex = vue.ref(0); const defaultInitialZIndex = 2e3; const ZINDEX_INJECTION_KEY = Symbol("elZIndexContextKey"); const zIndexContextKey = Symbol("zIndexContextKey"); const useZIndex = (zIndexOverrides) => { const increasingInjection = vue.getCurrentInstance() ? vue.inject(ZINDEX_INJECTION_KEY, initial) : initial; const zIndexInjection = zIndexOverrides || (vue.getCurrentInstance() ? vue.inject(zIndexContextKey, void 0) : void 0); const initialZIndex = vue.computed(() => { const zIndexFromInjection = vue.unref(zIndexInjection); return isNumber(zIndexFromInjection) ? zIndexFromInjection : defaultInitialZIndex; }); const currentZIndex = vue.computed(() => initialZIndex.value + zIndex.value); const nextZIndex = () => { increasingInjection.current++; zIndex.value = increasingInjection.current; return currentZIndex.value; }; if (!isClient && !vue.inject(ZINDEX_INJECTION_KEY)) ; return { initialZIndex, currentZIndex, nextZIndex }; }; function useCursor(input) { const selectionRef = vue.ref(); function recordCursor() { if (input.value == void 0) return; const { selectionStart, selectionEnd, value } = input.value; if (selectionStart == null || selectionEnd == null) return; const beforeTxt = value.slice(0, Math.max(0, selectionStart)); const afterTxt = value.slice(Math.max(0, selectionEnd)); selectionRef.value = { selectionStart, selectionEnd, value, beforeTxt, afterTxt }; } function setCursor() { if (input.value == void 0 || selectionRef.value == void 0) return; const { value } = input.value; const { beforeTxt, afterTxt, selectionStart } = selectionRef.value; if (beforeTxt == void 0 || afterTxt == void 0 || selectionStart == void 0) return; let startPos = value.length; if (value.endsWith(afterTxt)) { startPos = value.length - afterTxt.length; } else if (value.startsWith(beforeTxt)) { startPos = beforeTxt.length; } else { const beforeLastChar = beforeTxt[selectionStart - 1]; const newIndex = value.indexOf(beforeLastChar, selectionStart - 1); if (newIndex !== -1) { startPos = newIndex + 1; } } input.value.setSelectionRange(startPos, startPos); } return [recordCursor, setCursor]; } const 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) || ""; }); }; function useFocusController(target, { afterFocus, beforeBlur, afterBlur } = {}) { const instance = vue.getCurrentInstance(); const { emit } = instance; const wrapperRef = vue.shallowRef(); const isFocused = vue.ref(false); const handleFocus = (event2) => { if (isFocused.value) return; isFocused.value = true; emit("focus", event2); afterFocus == null ? void 0 : afterFocus(); }; const handleBlur = (event2) => { var _a2; const cancelBlur = isFunction$1(beforeBlur) ? beforeBlur(event2) : false; if (cancelBlur || event2.relatedTarget && ((_a2 = wrapperRef.value) == null ? void 0 : _a2.contains(event2.relatedTarget))) return; isFocused.value = false; emit("blur", event2); afterBlur == null ? void 0 : afterBlur(); }; const handleClick = () => { var _a2; (_a2 = target.value) == null ? void 0 : _a2.focus(); }; vue.watch(wrapperRef, (el) => { if (el) { el.setAttribute("tabindex", "-1"); } }); useEventListener(wrapperRef, "click", handleClick); return { wrapperRef, isFocused, handleFocus, handleBlur }; } const configProviderContextKey = Symbol(); const globalConfig = vue.ref(); function useGlobalConfig(key2, defaultValue = void 0) { const config = vue.getCurrentInstance() ? vue.inject(configProviderContextKey, globalConfig) : globalConfig; if (key2) { return vue.computed(() => { var _a2, _b; return (_b = (_a2 = config.value) == null ? void 0 : _a2[key2]) != null ? _b : defaultValue; }); } else { return config; } } function useGlobalComponentSettings(block, sizeFallback) { const config = useGlobalConfig(); const ns = useNamespace(block, vue.computed(() => { var _a2; return ((_a2 = config.value) == null ? void 0 : _a2.namespace) || defaultNamespace; })); const locale = useLocale(vue.computed(() => { var _a2; return (_a2 = config.value) == null ? void 0 : _a2.locale; })); const zIndex2 = useZIndex(vue.computed(() => { var _a2; return ((_a2 = config.value) == null ? void 0 : _a2.zIndex) || defaultInitialZIndex; })); const size = vue.computed(() => { var _a2; return vue.unref(sizeFallback) || ((_a2 = config.value) == null ? void 0 : _a2.size) || ""; }); provideGlobalConfig(vue.computed(() => vue.unref(config) || {})); return { ns, locale, zIndex: zIndex2, size }; } const provideGlobalConfig = (config, app, global2 = false) => { var _a2; const inSetup = !!vue.getCurrentInstance(); const oldConfig = inSetup ? useGlobalConfig() : void 0; const provideFn = (_a2 = app == null ? void 0 : app.provide) != null ? _a2 : inSetup ? vue.provide : void 0; if (!provideFn) { return; } const context = vue.computed(() => { const cfg = vue.unref(config); if (!(oldConfig == null ? void 0 : oldConfig.value)) return cfg; return mergeConfig(oldConfig.value, cfg); }); provideFn(configProviderContextKey, context); provideFn(localeContextKey, vue.computed(() => context.value.locale)); provideFn(namespaceContextKey, vue.computed(() => context.value.namespace)); provideFn(zIndexContextKey, vue.computed(() => context.value.zIndex)); provideFn(SIZE_INJECTION_KEY, { size: vue.computed(() => context.value.size || "") }); if (global2 || !globalConfig.value) { globalConfig.value = context.value; } return context; }; const mergeConfig = (a2, b2) => { var _a2; const keys2 = [.../* @__PURE__ */ new Set([...keysOf(a2), ...keysOf(b2)])]; const obj = {}; for (const key2 of keys2) { obj[key2] = (_a2 = b2[key2]) != null ? _a2 : a2[key2]; } return obj; }; var _export_sfc$1 = (sfc, props) => { const target = sfc.__vccOpts || sfc; for (const [key2, val] of props) { target[key2] = val; } return target; }; const iconProps = buildProps({ size: { type: definePropType([Number, String]) }, color: { type: String } }); const __default__$x = vue.defineComponent({ name: "ElIcon", inheritAttrs: false }); const _sfc_main$O = /* @__PURE__ */ vue.defineComponent({ ...__default__$x, props: iconProps, setup(__props) { const props = __props; const ns = useNamespace("icon"); const style = vue.computed(() => { const { size, color } = props; if (!size && !color) return {}; return { fontSize: isUndefined(size) ? void 0 : addUnit(size), "--color": color }; }); return (_ctx, _cache) => { return vue.openBlock(), vue.createElementBlock("i", vue.mergeProps({ class: vue.unref(ns).b(), style: vue.unref(style) }, _ctx.$attrs), [ vue.renderSlot(_ctx.$slots, "default") ], 16); }; } }); var Icon = /* @__PURE__ */ _export_sfc$1(_sfc_main$O, [["__file", "icon.vue"]]); const ElIcon = withInstall(Icon); 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__$w = vue.defineComponent({ name: "ElAlert" }); const _sfc_main$N = /* @__PURE__ */ vue.defineComponent({ ...__default__$w, 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 iconClass = vue.computed(() => [ ns.e("icon"), { [ns.is("big")]: !!props.description || !!slots.default } ]); const withDescription = vue.computed(() => { return { "with-description": 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(iconClass)) }, { 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"), vue.unref(withDescription)]) }, [ vue.renderSlot(_ctx.$slots, "title", {}, () => [ vue.createTextVNode(vue.toDisplayString(_ctx.title), 1) ]) ], 2)) : vue.createCommentVNode("v-if", true), _ctx.$slots.default || _ctx.description ? (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$N, [["__file", "alert.vue"]]); const ElAlert = withInstall(Alert); const formContextKey = Symbol("formContextKey"); const formItemContextKey = Symbol("formItemContextKey"); const useFormSize = (fallback, ignore = {}) => { const emptyRef = vue.ref(void 0); const size = ignore.prop ? emptyRef : useProp("size"); const globalConfig2 = ignore.global ? emptyRef : useGlobalSize(); const form = ignore.form ? { size: void 0 } : vue.inject(formContextKey, void 0); const formItem = ignore.formItem ? { size: void 0 } : vue.inject(formItemContextKey, void 0); return vue.computed(() => size.value || vue.unref(fallback) || (formItem == null ? void 0 : formItem.size) || (form == null ? void 0 : form.size) || globalConfig2.value || ""); }; const useFormDisabled = (fallback) => { const disabled = useProp("disabled"); const form = vue.inject(formContextKey, void 0); return vue.computed(() => disabled.value || vue.unref(fallback) || (form == null ? void 0 : form.disabled) || false); }; const useFormItem = () => { const form = vue.inject(formContextKey, void 0); const formItem = vue.inject(formItemContextKey, void 0); return { form, formItem }; }; const useFormItemInputId = (props, { formItemContext, disableIdGeneration, disableIdManagement }) => { if (!disableIdGeneration) { disableIdGeneration = vue.ref(false); } if (!disableIdManagement) { disableIdManagement = vue.ref(false); } const inputId = vue.ref(); let idUnwatch = void 0; const isLabeledByFormItem = vue.computed(() => { var _a2; return !!(!props.label && formItemContext && formItemContext.inputIds && ((_a2 = formItemContext.inputIds) == null ? void 0 : _a2.length) <= 1); }); vue.onMounted(() => { idUnwatch = vue.watch([vue.toRef(props, "id"), disableIdGeneration], ([id, disableIdGeneration2]) => { const newId = id != null ? id : !disableIdGeneration2 ? useId().value : void 0; if (newId !== inputId.value) { if (formItemContext == null ? void 0 : formItemContext.removeInputId) { inputId.value && formItemContext.removeInputId(inputId.value); if (!(disableIdManagement == null ? void 0 : disableIdManagement.value) && !disableIdGeneration2 && newId) { formItemContext.addInputId(newId); } } inputId.value = newId; } }, { immediate: true }); }); vue.onUnmounted(() => { idUnwatch && idUnwatch(); if (formItemContext == null ? void 0 : formItemContext.removeInputId) { inputId.value && formItemContext.removeInputId(inputId.value); } }); return { isLabeledByFormItem, inputId }; }; const 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, message) => (isArray$1(prop) || isString(prop)) && isBoolean(isValid) && isString(message) }; 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$5 = "ElForm"; const __default__$v = vue.defineComponent({ name: COMPONENT_NAME$5 }); const _sfc_main$M = /* @__PURE__ */ vue.defineComponent({ ...__default__$v, props: formProps, emits: formEmits, setup(__props, { expose, emit }) { const props = __props; const fields = []; const formSize = useFormSize(); const ns = useNamespace("form"); const formClasses = vue.computed(() => { const { labelPosition, inline } = props; return [ ns.b(), ns.m(formSize.value || "default"), { [ns.m(`label-${labelPosition}`)]: labelPosition, [ns.m("inline")]: inline } ]; }); const getField = (prop) => { return fields.find((field) => field.prop === prop); }; const addField = (field) => { fields.push(field); }; const removeField = (field) => { if (field.prop) { fields.splice(fields.indexOf(field), 1); } }; const resetFields = (properties = []) => { if (!props.model) { return; } filterFields(fields, properties).forEach((field) => field.resetField()); }; const clearValidate = (props2 = []) => { filterFields(fields, props2).forEach((field) => field.clearValidate()); }; const isValidatable = vue.computed(() => { const hasModel = !!props.model; return hasModel; }); const obtainValidateFields = (props2) => { if (fields.length === 0) return []; const filteredFields = filterFields(fields, props2); if (!filteredFields.length) { return []; } return filteredFields; }; const validate = async (callback) => validateField(void 0, callback); const doValidateField = async (props2 = []) => { if (!isValidatable.value) return false; const fields2 = obtainValidateFields(props2); if (fields2.length === 0) return true; let validationErrors = {}; for (const field of fields2) { try { await field.validate(""); } 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) { 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]); } callback == null ? void 0 : callback(false, invalidFields); return shouldThrow && Promise.reject(invalidFields); } }; const scrollToField = (prop) => { var _a2; const field = filterFields(fields, prop)[0]; if (field) { (_a2 = field.$el) == null ? void 0 : _a2.scrollIntoView(props.scrollIntoViewOptions); } }; vue.watch(() => props.rules, () => { if (props.validateOnRuleChange) { validate().catch((err) => debugWarn()); } }, { deep: true }); vue.provide(formContextKey, vue.reactive({ ...vue.toRefs(props), emit, resetFields, clearValidate, validateField, getField, addField, removeField, ...useFormLabelWidth() })); expose({ validate, validateField, resetFields, clearValidate, scrollToField }); 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$M, [["__file", "form.vue"]]); var define_process_env_default = {}; function _extends() { _extends = Object.assign ? Object.assign.bind() : function(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key2 in source) { if (Object.prototype.hasOwnProperty.call(source, key2)) { target[key2] = source[key2]; } } } return target; }; return _extends.apply(this, arguments); } function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); } function _getPrototypeOf(o2) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf2(o22) { return o22.__proto__ || Object.getPrototypeOf(o22); }; return _getPrototypeOf(o2); } function _setPrototypeOf(o2, p2) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf2(o22, p22) { o22.__proto__ = p22; return o22; }; return _setPrototypeOf(o2, p2); } function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() { })); return true; } catch (e) { return false; } } function _construct(Parent, args, Class) { if (_isNativeReflectConstruct()) { _construct = Reflect.construct.bind(); } else { _construct = function _construct2(Parent2, args2, Class2) { var a2 = [null]; a2.push.apply(a2, args2); var Constructor = Function.bind.apply(Parent2, a2); var instance = new Constructor(); if (Class2) _setPrototypeOf(instance, Class2.prototype); return instance; }; } return _construct.apply(null, arguments); } function _isNativeFunction(fn2) { return Function.toString.call(fn2).indexOf("[native code]") !== -1; } function _wrapNativeSuper(Class) { var _cache = typeof Map === "function" ? /* @__PURE__ */ new Map() : void 0; _wrapNativeSuper = function _wrapNativeSuper2(Class2) { if (Class2 === null || !_isNativeFunction(Class2)) return Class2; if (typeof Class2 !== "function") { throw new TypeError("Super expression must either be null or a function"); } if (typeof _cache !== "undefined") { if (_cache.has(Class2)) return _cache.get(Class2); _cache.set(Class2, Wrapper); } function Wrapper() { return _construct(Class2, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class2.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class2); }; return _wrapNativeSuper(Class); } var formatRegExp = /%[sdj%]/g; var warning = function warning2() { }; if (typeof process !== "undefined" && define_process_env_default && false) { warning = function warning3(type4, errors) { if (typeof console !== "undefined" && console.warn && typeof ASYNC_VALIDATOR_NO_WARNING === "undefined") { if (errors.every(function(e) { return typeof e === "string"; })) { console.warn(type4, errors); } } }; } function convertFieldsError(errors) { if (!errors || !errors.length) return null; var fields = {}; errors.forEach(function(error) { var field = error.field; fields[field] = fields[field] || []; fields[field].push(error); }); return fields; } function format(template) { for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { args[_key - 1] = arguments[_key]; } var i = 0; var len = args.length; if (typeof template === "function") { return template.apply(null, args); } if (typeof template === "string") { var str = template.replace(formatRegExp, function(x2) { if (x2 === "%%") { return "%"; } if (i >= len) { return x2; } switch (x2) { case "%s": return String(args[i++]); case "%d": return Number(args[i++]); case "%j": try { return JSON.stringify(args[i++]); } catch (_2) { return "[Circular]"; } break; default: return x2; } }); return str; } return template; } function isNativeStringType(type4) { return type4 === "string" || type4 === "url" || type4 === "hex" || type4 === "email" || type4 === "date" || type4 === "pattern"; } function isEmptyValue(value, type4) { if (value === void 0 || value === null) { return true; } if (type4 === "array" && Array.isArray(value) && !value.length) { return true; } if (isNativeStringType(type4) && typeof value === "string" && !value) { return true; } return false; } function asyncParallelArray(arr, func, callback) { var results = []; var total = 0; var arrLength = arr.length; function count(errors) { results.push.apply(results, errors || []); total++; if (total === arrLength) { callback(results); } } arr.forEach(function(a2) { func(a2, count); }); } function asyncSerialArray(arr, func, callback) { var index = 0; var arrLength = arr.length; function next(errors) { if (errors && errors.length) { callback(errors); return; } var original = index; index = index + 1; if (original < arrLength) { func(arr[original], next); } else { callback([]); } } next([]); } function flattenObjArr(objArr) { var ret = []; Object.keys(objArr).forEach(function(k) { ret.push.apply(ret, objArr[k] || []); }); return ret; } var AsyncValidationError = /* @__PURE__ */ function(_Error) { _inheritsLoose(AsyncValidationError2, _Error); function AsyncValidationError2(errors, fields) { var _this; _this = _Error.call(this, "Async Validation Error") || this; _this.errors = errors; _this.fields = fields; return _this; } return AsyncValidationError2; }(/* @__PURE__ */ _wrapNativeSuper(Error)); function asyncMap(objArr, option, func, callback, source) { if (option.first) { var _pending = new Promise(function(resolve, reject) { var next = function next2(errors) { callback(errors); return errors.length ? reject(new AsyncValidationError(errors, convertFieldsError(errors))) : resolve(source); }; var flattenArr = flattenObjArr(objArr); asyncSerialArray(flattenArr, func, next); }); _pending["catch"](function(e) { return e; }); return _pending; } var firstFields = option.firstFields === true ? Object.keys(objArr) : option.firstFields || []; var objArrKeys = Object.keys(objArr); var objArrLength = objArrKeys.length; var total = 0; var results = []; var pending = new Promise(function(resolve, reject) { var next = function next2(errors) { results.push.apply(results, errors); total++; if (total === objArrLength) { callback(results); return results.length ? reject(new AsyncValidationError(results, convertFieldsError(results))) : resolve(source); } }; if (!objArrKeys.length) { callback(results); resolve(source); } objArrKeys.forEach(function(key2) { var arr = objArr[key2]; if (firstFields.indexOf(key2) !== -1) { asyncSerialArray(arr, func, next); } else { asyncParallelArray(arr, func, next); } }); }); pending["catch"](function(e) { return e; }); return pending; } function isErrorObj(obj) { return !!(obj && obj.message !== void 0); } function getValue(value, path) { var v2 = value; for (var i = 0; i < path.length; i++) { if (v2 == void 0) { return v2; } v2 = v2[path[i]]; } return v2; } function complementError(rule2, source) { return function(oe) { var fieldValue; if (rule2.fullFields) { fieldValue = getValue(source, rule2.fullFields); } else { fieldValue = source[oe.field || rule2.fullField]; } if (isErrorObj(oe)) { oe.field = oe.field || rule2.fullField; oe.fieldValue = fieldValue; return oe; } return { message: typeof oe === "function" ? oe() : oe, fieldValue, field: oe.field || rule2.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(rule2, value, source, errors, options, type4) { if (rule2.required && (!source.hasOwnProperty(rule2.field) || isEmptyValue(value, type4 || rule2.type))) { errors.push(format(options.messages.required, rule2.fullField)); } }; var whitespace = function whitespace2(rule2, value, source, errors, options) { if (/^\s+$/.test(value) || value === "") { errors.push(format(options.messages.whitespace, rule2.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(rule2, value, source, errors, options) { if (rule2.required && value === void 0) { required$1(rule2, value, source, errors, options); return; } var custom = ["integer", "float", "array", "regexp", "object", "method", "email", "number", "date", "url", "hex"]; var ruleType = rule2.type; if (custom.indexOf(ruleType) > -1) { if (!types[ruleType](value)) { errors.push(format(options.messages.types[ruleType], rule2.fullField, rule2.type)); } } else if (ruleType && typeof value !== rule2.type) { errors.push(format(options.messages.types[ruleType], rule2.fullField, rule2.type)); } }; var range = function range2(rule2, value, source, errors, options) { var len = typeof rule2.len === "number"; var min = typeof rule2.min === "number"; var max = typeof rule2.max === "number"; var spRegexp = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g; var val = value; var key2 = null; var num = typeof value === "number"; var str = typeof value === "string"; var arr = Array.isArray(value); if (num) { key2 = "number"; } else if (str) { key2 = "string"; } else if (arr) { key2 = "array"; } if (!key2) { return false; } if (arr) { val = value.length; } if (str) { val = value.replace(spRegexp, "_").length; } if (len) { if (val !== rule2.len) { errors.push(format(options.messages[key2].len, rule2.fullField, rule2.len)); } } else if (min && !max && val < rule2.min) { errors.push(format(options.messages[key2].min, rule2.fullField, rule2.min)); } else if (max && !min && val > rule2.max) { errors.push(format(options.messages[key2].max, rule2.fullField, rule2.max)); } else if (min && max && (val < rule2.min || val > rule2.max)) { errors.push(format(options.messages[key2].range, rule2.fullField, rule2.min, rule2.max)); } }; var ENUM$1 = "enum"; var enumerable$1 = function enumerable(rule2, value, source, errors, options) { rule2[ENUM$1] = Array.isArray(rule2[ENUM$1]) ? rule2[ENUM$1] : []; if (rule2[ENUM$1].indexOf(value) === -1) { errors.push(format(options.messages[ENUM$1], rule2.fullField, rule2[ENUM$1].join(", "))); } }; var pattern$1 = function pattern(rule2, value, source, errors, options) { if (rule2.pattern) { if (rule2.pattern instanceof RegExp) { rule2.pattern.lastIndex = 0; if (!rule2.pattern.test(value)) { errors.push(format(options.messages.pattern.mismatch, rule2.fullField, value, rule2.pattern)); } } else if (typeof rule2.pattern === "string") { var _pattern = new RegExp(rule2.pattern); if (!_pattern.test(value)) { errors.push(format(options.messages.pattern.mismatch, rule2.fullField, value, rule2.pattern)); } } } }; var rules = { required: required$1, whitespace, type: type$1, range, "enum": enumerable$1, pattern: pattern$1 }; var string = function string2(rule2, value, callback, source, options) { var errors = []; var validate = rule2.required || !rule2.required && source.hasOwnProperty(rule2.field); if (validate) { if (isEmptyValue(value, "string") && !rule2.required) { return callback(); } rules.required(rule2, value, source, errors, options, "string"); if (!isEmptyValue(value, "string")) { rules.type(rule2, value, source, errors, options); rules.range(rule2, value, source, errors, options); rules.pattern(rule2, value, source, errors, options); if (rule2.whitespace === true) { rules.whitespace(rule2, value, source, errors, options); } } } callback(errors); }; var method2 = function method3(rule2, value, callback, source, options) { var errors = []; var validate = rule2.required || !rule2.required && source.hasOwnProperty(rule2.field); if (validate) { if (isEmptyValue(value) && !rule2.required) { return callback(); } rules.required(rule2, value, source, errors, options); if (value !== void 0) { rules.type(rule2, value, source, errors, options); } } callback(errors); }; var number2 = function number3(rule2, value, callback, source, options) { var errors = []; var validate = rule2.required || !rule2.required && source.hasOwnProperty(rule2.field); if (validate) { if (value === "") { value = void 0; } if (isEmptyValue(value) && !rule2.required) { return callback(); } rules.required(rule2, value, source, errors, options); if (value !== void 0) { rules.type(rule2, value, source, errors, options); rules.range(rule2, value, source, errors, options); } } callback(errors); }; var _boolean = function _boolean2(rule2, value, callback, source, options) { var errors = []; var validate = rule2.required || !rule2.required && source.hasOwnProperty(rule2.field); if (validate) { if (isEmptyValue(value) && !rule2.required) { return callback(); } rules.required(rule2, value, source, errors, options); if (value !== void 0) { rules.type(rule2, value, source, errors, options); } } callback(errors); }; var regexp2 = function regexp3(rule2, value, callback, source, options) { var errors = []; var validate = rule2.required || !rule2.required && source.hasOwnProperty(rule2.field); if (validate) { if (isEmptyValue(value) && !rule2.required) { return callback(); } rules.required(rule2, value, source, errors, options); if (!isEmptyValue(value)) { rules.type(rule2, value, source, errors, options); } } callback(errors); }; var integer2 = function integer3(rule2, value, callback, source, options) { var errors = []; var validate = rule2.required || !rule2.required && source.hasOwnProperty(rule2.field); if (validate) { if (isEmptyValue(value) && !rule2.required) { return callback(); } rules.required(rule2, value, source, errors, options); if (value !== void 0) { rules.type(rule2, value, source, errors, options); rules.range(rule2, value, source, errors, options); } } callback(errors); }; var floatFn = function floatFn2(rule2, value, callback, source, options) { var errors = []; var validate = rule2.required || !rule2.required && source.hasOwnProperty(rule2.field); if (validate) { if (isEmptyValue(value) && !rule2.required) { return callback(); } rules.required(rule2, value, source, errors, options); if (value !== void 0) { rules.type(rule2, value, source, errors, options); rules.range(rule2, value, source, errors, options); } } callback(errors); }; var array2 = function array3(rule2, value, callback, source, options) { var errors = []; var validate = rule2.required || !rule2.required && source.hasOwnProperty(rule2.field); if (validate) { if ((value === void 0 || value === null) && !rule2.required) { return callback(); } rules.required(rule2, value, source, errors, options, "array"); if (value !== void 0 && value !== null) { rules.type(rule2, value, source, errors, options); rules.range(rule2, value, source, errors, options); } } callback(errors); }; var object2 = function object3(rule2, value, callback, source, options) { var errors = []; var validate = rule2.required || !rule2.required && source.hasOwnProperty(rule2.field); if (validate) { if (isEmptyValue(value) && !rule2.required) { return callback(); } rules.required(rule2, value, source, errors, options); if (value !== void 0) { rules.type(rule2, value, source, errors, options); } } callback(errors); }; var ENUM = "enum"; var enumerable2 = function enumerable3(rule2, value, callback, source, options) { var errors = []; var validate = rule2.required || !rule2.required && source.hasOwnProperty(rule2.field); if (validate) { if (isEmptyValue(value) && !rule2.required) { return callback(); } rules.required(rule2, value, source, errors, options); if (value !== void 0) { rules[ENUM](rule2, value, source, errors, options); } } callback(errors); }; var pattern2 = function pattern3(rule2, value, callback, source, options) { var errors = []; var validate = rule2.required || !rule2.required && source.hasOwnProperty(rule2.field); if (validate) { if (isEmptyValue(value, "string") && !rule2.required) { return callback(); } rules.required(rule2, value, source, errors, options); if (!isEmptyValue(value, "string")) { rules.pattern(rule2, value, source, errors, options); } } callback(errors); }; var date2 = function date3(rule2, value, callback, source, options) { var errors = []; var validate = rule2.required || !rule2.required && source.hasOwnProperty(rule2.field); if (validate) { if (isEmptyValue(value, "date") && !rule2.required) { return callback(); } rules.required(rule2, value, source, errors, options); if (!isEmptyValue(value, "date")) { var dateObject; if (value instanceof Date) { dateObject = value; } else { dateObject = new Date(value); } rules.type(rule2, dateObject, source, errors, options); if (dateObject) { rules.range(rule2, dateObject.getTime(), source, errors, options); } } } callback(errors); }; var required2 = function required3(rule2, value, callback, source, options) { var errors = []; var type4 = Array.isArray(value) ? "array" : typeof value; rules.required(rule2, value, source, errors, options, type4); callback(errors); }; var type2 = function type3(rule2, value, callback, source, options) { var ruleType = rule2.type; var errors = []; var validate = rule2.required || !rule2.required && source.hasOwnProperty(rule2.field); if (validate) { if (isEmptyValue(value, ruleType) && !rule2.required) { return callback(); } rules.required(rule2, value, source, errors, options, ruleType); if (!isEmptyValue(value, ruleType)) { rules.type(rule2, value, source, errors, options); } } callback(errors); }; var any = function any2(rule2, value, callback, source, options) { var errors = []; var validate = rule2.required || !rule2.required && source.hasOwnProperty(rule2.field); if (validate) { if (isEmptyValue(value) && !rule2.required) { return callback(); } rules.required(rule2, value, source, errors, options); } callback(errors); }; var validators = { string, method: method2, number: number2, "boolean": _boolean, regexp: regexp2, integer: integer2, "float": floatFn, array: array2, object: object2, "enum": enumerable2, pattern: pattern2, date: date2, url: type2, hex: type2, email: type2, required: required2, any }; function newMessages() { return { "default": "Validation error on field %s", required: "%s is required", "enum": "%s must be one of %s", whitespace: "%s cannot be empty", date: { format: "%s date %s is invalid for format %s", parse: "%s date could not be parsed, %s is invalid ", invalid: "%s date %s is invalid" }, types: { string: "%s is not a %s", method: "%s is not a %s (function)", array: "%s is not an %s", object: "%s is not an %s", number: "%s is not a %s", date: "%s is not a %s", "boolean": "%s is not a %s", integer: "%s is not an %s", "float": "%s is not a %s", regexp: "%s is not a valid %s", email: "%s is not a valid %s", url: "%s is not a valid %s", hex: "%s is not a valid %s" }, string: { len: "%s must be exactly %s characters", min: "%s must be at least %s characters", max: "%s cannot be longer than %s characters", range: "%s must be between %s and %s characters" }, number: { len: "%s must equal %s", min: "%s cannot be less than %s", max: "%s cannot be greater than %s", range: "%s must be between %s and %s" }, array: { len: "%s must be exactly %s in length", min: "%s cannot be less than %s in length", max: "%s cannot be greater than %s in length", range: "%s must be between %s and %s in length" }, pattern: { mismatch: "%s value %s does not match pattern %s" }, clone: function clone2() { var cloned = JSON.parse(JSON.stringify(this)); cloned.clone = this.clone; return cloned; } }; } var messages = newMessages(); var Schema = /* @__PURE__ */ function() { function Schema2(descriptor) { this.rules = null; this._messages = messages; this.define(descriptor); } var _proto = Schema2.prototype; _proto.define = function define(rules2) { var _this = this; if (!rules2) { throw new Error("Cannot configure a schema with no rules"); } if (typeof rules2 !== "object" || Array.isArray(rules2)) { throw new Error("Rules must be an object"); } this.rules = {}; Object.keys(rules2).forEach(function(name) { var item = rules2[name]; _this.rules[name] = Array.isArray(item) ? item : [item]; }); }; _proto.messages = function messages2(_messages) { if (_messages) { this._messages = deepMerge(newMessages(), _messages); } return this._messages; }; _proto.validate = function validate(source_, o2, oc) { var _this2 = this; if (o2 === void 0) { o2 = {}; } if (oc === void 0) { oc = function oc2() { }; } var source = source_; var options = o2; var callback = oc; if (typeof options === "function") { callback = options; options = {}; } if (!this.rules || Object.keys(this.rules).length === 0) { if (callback) { callback(null, source); } return Promise.resolve(source); } function complete(results) { var errors = []; var fields = {}; function add(e) { if (Array.isArray(e)) { var _errors; errors = (_errors = errors).concat.apply(_errors, e); } else { errors.push(e); } } for (var i = 0; i < results.length; i++) { add(results[i]); } if (!errors.length) { callback(null, source); } else { fields = convertFieldsError(errors); callback(errors, fields); } } if (options.messages) { var messages$1 = this.messages(); if (messages$1 === messages) { messages$1 = newMessages(); } deepMerge(messages$1, options.messages); options.messages = messages$1; } else { options.messages = this.messages(); } var series = {}; var keys2 = options.keys || Object.keys(this.rules); keys2.forEach(function(z) { var arr = _this2.rules[z]; var value = source[z]; arr.forEach(function(r) { var rule2 = r; if (typeof rule2.transform === "function") { if (source === source_) { source = _extends({}, source); } value = source[z] = rule2.transform(value); } if (typeof rule2 === "function") { rule2 = { validator: rule2 }; } else { rule2 = _extends({}, rule2); } rule2.validator = _this2.getValidationMethod(rule2); if (!rule2.validator) { return; } rule2.field = z; rule2.fullField = rule2.fullField || z; rule2.type = _this2.getType(rule2); series[z] = series[z] || []; series[z].push({ rule: rule2, value, source, field: z }); }); }); var errorFields = {}; return asyncMap(series, options, function(data, doIt) { var rule2 = data.rule; var deep = (rule2.type === "object" || rule2.type === "array") && (typeof rule2.fields === "object" || typeof rule2.defaultField === "object"); deep = deep && (rule2.required || !rule2.required && data.value); rule2.field = data.field; function addFullField(key2, schema) { return _extends({}, schema, { fullField: rule2.fullField + "." + key2, fullFields: rule2.fullFields ? [].concat(rule2.fullFields, [key2]) : [key2] }); } function cb(e) { if (e === void 0) { e = []; } var errorList = Array.isArray(e) ? e : [e]; if (!options.suppressWarning && errorList.length) { Schema2.warning("async-validator:", errorList); } if (errorList.length && rule2.message !== void 0) { errorList = [].concat(rule2.message); } var filledErrors = errorList.map(complementError(rule2, source)); if (options.first && filledErrors.length) { errorFields[rule2.field] = 1; return doIt(filledErrors); } if (!deep) { doIt(filledErrors); } else { if (rule2.required && !data.value) { if (rule2.message !== void 0) { filledErrors = [].concat(rule2.message).map(complementError(rule2, source)); } else if (options.error) { filledErrors = [options.error(rule2, format(options.messages.required, rule2.field))]; } return doIt(filledErrors); } var fieldsSchema = {}; if (rule2.defaultField) { Object.keys(data.value).map(function(key2) { fieldsSchema[key2] = rule2.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 (rule2.asyncValidator) { res = rule2.asyncValidator(rule2, data.value, cb, data.source, options); } else if (rule2.validator) { try { res = rule2.validator(rule2, data.value, cb, data.source, options); } catch (error) { console.error == null ? void 0 : console.error(error); if (!options.suppressValidatorError) { setTimeout(function() { throw error; }, 0); } cb(error.message); } if (res === true) { cb(); } else if (res === false) { cb(typeof rule2.message === "function" ? rule2.message(rule2.fullField || rule2.field) : rule2.message || (rule2.fullField || rule2.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(rule2) { if (rule2.type === void 0 && rule2.pattern instanceof RegExp) { rule2.type = "pattern"; } if (typeof rule2.validator !== "function" && rule2.type && !validators.hasOwnProperty(rule2.type)) { throw new Error(format("Unknown rule type %s", rule2.type)); } return rule2.type || "string"; }; _proto.getValidationMethod = function getValidationMethod(rule2) { if (typeof rule2.validator === "function") { return rule2.validator; } var keys2 = Object.keys(rule2); 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(rule2)] || void 0; }; return Schema2; }(); Schema.register = function register(type4, validator) { if (typeof validator !== "function") { throw new Error("Cannot register a validator by type, validator is not a function"); } validators[type4] = validator; }; Schema.warning = warning; Schema.messages = messages; Schema.validators = validators; const formItemValidateStates = [ "", "error", "validating", "success" ]; const formItemProps = buildProps({ label: String, labelWidth: { type: [String, Number], default: "" }, prop: { type: definePropType([String, Array]) }, required: { type: Boolean, default: void 0 }, rules: { type: definePropType([Object, Array]) }, error: String, validateStatus: { type: String, values: formItemValidateStates }, for: String, inlineMessage: { type: [String, Boolean], default: "" }, showMessage: { type: Boolean, default: true }, size: { type: String, values: componentSizes } }); const COMPONENT_NAME$4 = "ElLabelWrap"; var FormLabelWrap = vue.defineComponent({ name: COMPONENT_NAME$4, props: { isAutoWidth: Boolean, updateAll: Boolean }, setup(props, { slots }) { const formContext = vue.inject(formContextKey, void 0); const formItemContext = vue.inject(formItemContextKey); if (!formItemContext) throwError(COMPONENT_NAME$4, "usage: <el-form-item><label-wrap /></el-form-item>"); const ns = useNamespace("form"); const el = vue.ref(); const computedWidth = vue.ref(0); const getLabelWidth = () => { var _a2; if ((_a2 = el.value) == null ? void 0 : _a2.firstElementChild) { const width = window.getComputedStyle(el.value.firstElementChild).width; return Math.ceil(Number.parseFloat(width)); } else { return 0; } }; const updateLabelWidth = (action = "update") => { vue.nextTick(() => { if (slots.default && props.isAutoWidth) { if (action === "update") { computedWidth.value = getLabelWidth(); } else if (action === "remove") { formContext == null ? void 0 : formContext.deregisterLabelWidth(computedWidth.value); } } }); }; const updateLabelWidthFn = () => updateLabelWidth("update"); vue.onMounted(() => { updateLabelWidthFn(); }); vue.onBeforeUnmount(() => { updateLabelWidth("remove"); }); vue.onUpdated(() => updateLabelWidthFn()); vue.watch(computedWidth, (val, oldVal) => { if (props.updateAll) { formContext == null ? void 0 : formContext.registerLabelWidth(val, oldVal); } }); useResizeObserver(vue.computed(() => { var _a2, _b; return (_b = (_a2 = el.value) == null ? void 0 : _a2.firstElementChild) != null ? _b : null; }), updateLabelWidthFn); return () => { var _a2, _b; if (!slots) return null; const { isAutoWidth } = props; if (isAutoWidth) { const autoLabelWidth = formContext == null ? void 0 : formContext.autoLabelWidth; const hasLabel = formItemContext == null ? void 0 : formItemContext.hasLabel; const style = {}; if (hasLabel && autoLabelWidth && autoLabelWidth !== "auto") { const marginWidth = Math.max(0, Number.parseInt(autoLabelWidth, 10) - computedWidth.value); const marginPosition = formContext.labelPosition === "left" ? "marginRight" : "marginLeft"; if (marginWidth) { style[marginPosition] = `${marginWidth}px`; } } return vue.createVNode("div", { "ref": el, "class": [ns.be("item", "label-wrap")], "style": style }, [(_a2 = slots.default) == null ? void 0 : _a2.call(slots)]); } else { return vue.createVNode(vue.Fragment, { "ref": el }, [(_b = slots.default) == null ? void 0 : _b.call(slots)]); } }; } }); const _hoisted_1$l = ["role", "aria-labelledby"]; const __default__$u = vue.defineComponent({ name: "ElFormItem" }); const _sfc_main$L = /* @__PURE__ */ vue.defineComponent({ ...__default__$u, props: formItemProps, setup(__props, { expose }) { const props = __props; const slots = vue.useSlots(); const formContext = vue.inject(formContextKey, void 0); const parentFormItemContext = vue.inject(formItemContextKey, void 0); const _size = useFormSize(void 0, { formItem: false }); const ns = useNamespace("form-item"); const labelId = useId().value; const inputIds = vue.ref([]); const validateState = vue.ref(""); const validateStateDebounced = refDebounced(validateState, 100); const validateMessage = vue.ref(""); const formItemRef = vue.ref(); let initialValue = void 0; let isResettingField = false; const labelStyle = vue.computed(() => { if ((formContext == null ? void 0 : formContext.labelPosition) === "top") { return {}; } const labelWidth = addUnit(props.labelWidth || (formContext == null ? void 0 : formContext.labelWidth) || ""); if (labelWidth) return { width: labelWidth }; return {}; }); const contentStyle = vue.computed(() => { if ((formContext == null ? void 0 : formContext.labelPosition) === "top" || (formContext == null ? void 0 : formContext.inline)) { return {}; } if (!props.label && !props.labelWidth && isNested) { return {}; } const labelWidth = addUnit(props.labelWidth || (formContext == null ? void 0 : formContext.labelWidth) || ""); if (!props.label && !slots.label) { return { marginLeft: labelWidth }; } return {}; }); const formItemClasses = vue.computed(() => [ ns.b(), ns.m(_size.value), ns.is("error", validateState.value === "error"), ns.is("validating", validateState.value === "validating"), ns.is("success", validateState.value === "success"), ns.is("required", isRequired.value || props.required), ns.is("no-asterisk", formContext == null ? void 0 : formContext.hideRequiredAsterisk), (formContext == null ? void 0 : formContext.requireAsteriskPosition) === "right" ? "asterisk-right" : "asterisk-left", { [ns.m("feedback")]: formContext == null ? void 0 : formContext.statusIcon } ]); const _inlineMessage = vue.computed(() => isBoolean(props.inlineMessage) ? props.inlineMessage : (formContext == null ? void 0 : formContext.inlineMessage) || false); const validateClasses = vue.computed(() => [ ns.e("error"), { [ns.em("error", "inline")]: _inlineMessage.value } ]); const propString = vue.computed(() => { if (!props.prop) return ""; return isString(props.prop) ? props.prop : props.prop.join("."); }); const hasLabel = vue.computed(() => { return !!(props.label || slots.label); }); const labelFor = vue.computed(() => { return props.for || (inputIds.value.length === 1 ? inputIds.value[0] : void 0); }); const isGroup = vue.computed(() => { return !labelFor.value && hasLabel.value; }); const isNested = !!parentFormItemContext; const fieldValue = vue.computed(() => { const model = formContext == null ? void 0 : formContext.model; if (!model || !props.prop) { return; } return getProp(model, props.prop).value; }); const normalizedRules = vue.computed(() => { const { required } = props; const rules2 = []; if (props.rules) { rules2.push(...castArray(props.rules)); } const formRules = formContext == null ? void 0 : formContext.rules; if (formRules && props.prop) { const _rules = getProp(formRules, props.prop).value; if (_rules) { rules2.push(...castArray(_rules)); } } if (required !== void 0) { const requiredRules = rules2.map((rule2, i) => [rule2, i]).filter(([rule2]) => Object.keys(rule2).includes("required")); if (requiredRules.length > 0) { for (const [rule2, i] of requiredRules) { if (rule2.required === required) continue; rules2[i] = { ...rule2, 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((rule2) => { if (!rule2.trigger || !trigger) return true; if (Array.isArray(rule2.trigger)) { return rule2.trigger.includes(trigger); } else { return rule2.trigger === trigger; } }).map(({ trigger: trigger2, ...rule2 }) => rule2); }; const isRequired = vue.computed(() => normalizedRules.value.some((rule2) => rule2.required)); const shouldShowError = vue.computed(() => { var _a2; return validateStateDebounced.value === "error" && props.showMessage && ((_a2 = formContext == null ? void 0 : formContext.showMessage) != null ? _a2 : true); }); const currentLabel = vue.computed(() => `${props.label || ""}${(formContext == null ? void 0 : formContext.labelSuffix) || ""}`); const setValidationState = (state) => { validateState.value = state; }; const onValidationFailed = (error) => { var _a2, _b; const { errors, fields } = error; if (!errors || !fields) { console.error(error); } setValidationState("error"); validateMessage.value = errors ? (_b = (_a2 = errors == null ? void 0 : errors[0]) == null ? void 0 : _a2.message) != null ? _b : `${props.prop} is required` : ""; formContext == null ? void 0 : formContext.emit("validate", props.prop, false, validateMessage.value); }; const onValidationSucceeded = () => { setValidationState("success"); formContext == null ? void 0 : formContext.emit("validate", props.prop, true, ""); }; const doValidate = async (rules2) => { const modelName = propString.value; const validator = new Schema({ [modelName]: rules2 }); return validator.validate({ [modelName]: fieldValue.value }, { firstFields: true }).then(() => { onValidationSucceeded(); return true; }).catch((err) => { onValidationFailed(err); return Promise.reject(err); }); }; const validate = async (trigger, callback) => { if (isResettingField || !props.prop) { return false; } const hasCallback = isFunction$1(callback); if (!validateEnabled.value) { callback == null ? void 0 : callback(false); return false; } const rules2 = getFilteredRule(trigger); if (rules2.length === 0) { callback == null ? void 0 : callback(true); return true; } setValidationState("validating"); return doValidate(rules2).then(() => { callback == null ? void 0 : callback(true); return true; }).catch((err) => { const { fields } = err; callback == null ? void 0 : callback(false, fields); return hasCallback ? false : Promise.reject(fields); }); }; const clearValidate = () => { setValidationState(""); validateMessage.value = ""; isResettingField = false; }; const resetField = async () => { const model = formContext == null ? void 0 : formContext.model; if (!model || !props.prop) return; const computedValue = getProp(model, props.prop); isResettingField = true; computedValue.value = clone(initialValue); await vue.nextTick(); clearValidate(); isResettingField = false; }; const addInputId = (id) => { if (!inputIds.value.includes(id)) { inputIds.value.push(id); } }; const removeInputId = (id) => { inputIds.value = inputIds.value.filter((listId) => listId !== id); }; vue.watch(() => props.error, (val) => { validateMessage.value = val || ""; setValidationState(val ? "error" : ""); }, { immediate: true }); vue.watch(() => props.validateStatus, (val) => setValidationState(val || "")); const context = vue.reactive({ ...vue.toRefs(props), $el: formItemRef, size: _size, validateState, labelId, inputIds, isGroup, hasLabel, fieldValue, addInputId, removeInputId, resetField, clearValidate, validate }); vue.provide(formItemContextKey, context); vue.onMounted(() => { if (props.prop) { formContext == null ? void 0 : formContext.addField(context); initialValue = clone(fieldValue.value); } }); vue.onBeforeUnmount(() => { formContext == null ? void 0 : formContext.removeField(context); }); expose({ size: _size, validateMessage, validateState, validate, clearValidate, resetField }); return (_ctx, _cache) => { var _a2; return vue.openBlock(), vue.createElementBlock("div", { ref_key: "formItemRef", ref: formItemRef, class: vue.normalizeClass(vue.unref(formItemClasses)), role: vue.unref(isGroup) ? "group" : void 0, "aria-labelledby": vue.unref(isGroup) ? vue.unref(labelId) : void 0 }, [ vue.createVNode(vue.unref(FormLabelWrap), { "is-auto-width": vue.unref(labelStyle).width === "auto", "update-all": ((_a2 = vue.unref(formContext)) == null ? void 0 : _a2.labelWidth) === "auto" }, { default: vue.withCtx(() => [ vue.unref(hasLabel) ? (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(vue.unref(labelFor) ? "label" : "div"), { key: 0, id: vue.unref(labelId), for: vue.unref(labelFor), class: vue.normalizeClass(vue.unref(ns).e("label")), style: vue.normalizeStyle(vue.unref(labelStyle)) }, { default: vue.withCtx(() => [ vue.renderSlot(_ctx.$slots, "label", { label: vue.unref(currentLabel) }, () => [ vue.createTextVNode(vue.toDisplayString(vue.unref(currentLabel)), 1) ]) ]), _: 3 }, 8, ["id", "for", "class", "style"])) : vue.createCommentVNode("v-if", true) ]), _: 3 }, 8, ["is-auto-width", "update-all"]), vue.createElementVNode("div", { class: vue.normalizeClass(vue.unref(ns).e("content")), style: vue.normalizeStyle(vue.unref(contentStyle)) }, [ vue.renderSlot(_ctx.$slots, "default"), vue.createVNode(vue.TransitionGroup, { name: `${vue.unref(ns).namespace.value}-zoom-in-top` }, { default: vue.withCtx(() => [ vue.unref(shouldShowError) ? vue.renderSlot(_ctx.$slots, "error", { key: 0, error: validateMessage.value }, () => [ vue.createElementVNode("div", { class: vue.normalizeClass(vue.unref(validateClasses)) }, vue.toDisplayString(validateMessage.value), 3) ]) : vue.createCommentVNode("v-if", true) ]), _: 3 }, 8, ["name"]) ], 6) ], 10, _hoisted_1$l); }; } }); var FormItem = /* @__PURE__ */ _export_sfc$1(_sfc_main$L, [["__file", "form-item.vue"]]); const ElForm = withInstall(Form, { FormItem }); const ElFormItem = withNoopInstall(FormItem); let hiddenTextarea = void 0; 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 ? void 0 : _a2.removeChild(hiddenTextarea); hiddenTextarea = void 0; return result; } const inputProps = buildProps({ id: { type: String, default: void 0 }, size: useSizeProp, disabled: Boolean, modelValue: { type: definePropType([ String, Number, Object ]), default: "" }, maxlength: { type: [String, Number] }, minlength: { type: [String, Number] }, type: { type: String, default: "text" }, resize: { type: String, values: ["none", "both", "horizontal", "vertical"] }, autosize: { type: definePropType([Boolean, Object]), default: false }, autocomplete: { type: String, default: "off" }, formatter: { type: Function }, parser: { type: Function }, placeholder: { type: String }, form: { type: String }, readonly: { type: Boolean, default: false }, clearable: { type: Boolean, default: false }, showPassword: { type: Boolean, default: false }, showWordLimit: { type: Boolean, default: false }, suffixIcon: { type: iconPropType }, prefixIcon: { type: iconPropType }, containerRole: { type: String, default: void 0 }, label: { type: String, default: void 0 }, tabindex: { type: [String, Number], default: 0 }, validateEvent: { type: Boolean, default: true }, inputStyle: { type: definePropType([Object, Array, String]), default: () => mutable({}) }, autofocus: { type: Boolean, default: false } }); const inputEmits = { [UPDATE_MODEL_EVENT]: (value) => isString(value), input: (value) => isString(value), change: (value) => isString(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 _hoisted_1$k = ["role"]; const _hoisted_2$f = ["id", "minlength", "maxlength", "type", "disabled", "readonly", "autocomplete", "tabindex", "aria-label", "placeholder", "form", "autofocus"]; const _hoisted_3$8 = ["id", "minlength", "maxlength", "tabindex", "disabled", "readonly", "autocomplete", "aria-label", "placeholder", "form", "autofocus"]; const __default__$t = vue.defineComponent({ name: "ElInput", inheritAttrs: false }); const _sfc_main$K = /* @__PURE__ */ vue.defineComponent({ ...__default__$t, props: inputProps, emits: inputEmits, setup(__props, { expose, emit }) { const props = __props; const rawAttrs = vue.useAttrs(); const slots = vue.useSlots(); const containerAttrs = vue.computed(() => { const comboBoxAttrs = {}; if (props.containerRole === "combobox") { comboBoxAttrs["aria-haspopup"] = rawAttrs["aria-haspopup"]; comboBoxAttrs["aria-owns"] = rawAttrs["aria-owns"]; comboBoxAttrs["aria-expanded"] = rawAttrs["aria-expanded"]; } return comboBoxAttrs; }); 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.bm("group", "append")]: slots.append, [nsInput.bm("group", "prepend")]: slots.prepend, [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 attrs = useAttrs({ excludeKeys: vue.computed(() => { return Object.keys(containerAttrs.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 isComposing = 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, { afterBlur() { var _a2; if (props.validateEvent) { (_a2 = elFormItem == null ? void 0 : elFormItem.validate) == null ? void 0 : _a2.call(elFormItem, "blur").catch((err) => debugWarn()); } } }); const needStatusIcon = vue.computed(() => { var _a2; return (_a2 = elForm == null ? void 0 : elForm.statusIcon) != null ? _a2 : false; }); const validateState = vue.computed(() => (elFormItem == null ? void 0 : elFormItem.validateState) || ""); const validateIcon = vue.computed(() => validateState.value && ValidateComponentsMap[validateState.value]); const passwordIcon = vue.computed(() => passwordVisible.value ? view_default : hide_default); const containerStyle = vue.computed(() => [ rawAttrs.style ]); const textareaStyle = vue.computed(() => [ props.inputStyle, textareaCalcStyle.value, { resize: props.resize } ]); const nativeInputValue = vue.computed(() => isNil(props.modelValue) ? "" : String(props.modelValue)); const showClear = vue.computed(() => props.clearable && !inputDisabled.value && !props.readonly && !!nativeInputValue.value && (isFocused.value || hovering.value)); const showPwdVisible = vue.computed(() => props.showPassword && !inputDisabled.value && !props.readonly && !!nativeInputValue.value && (!!nativeInputValue.value || isFocused.value)); const isWordLimitVisible = vue.computed(() => props.showWordLimit && !!props.maxlength && (props.type === "text" || props.type === "textarea") && !inputDisabled.value && !props.readonly && !props.showPassword); const textLength = vue.computed(() => nativeInputValue.value.length); const inputExceed = vue.computed(() => !!isWordLimitVisible.value && textLength.value > Number(props.maxlength)); const suffixVisible = vue.computed(() => !!slots.suffix || !!props.suffixIcon || showClear.value || props.showPassword || isWordLimitVisible.value || !!validateState.value && needStatusIcon.value); const [recordCursor, setCursor] = useCursor(input); useResizeObserver(textarea, (entries) => { onceInitSizeTextarea(); if (!isWordLimitVisible.value || props.resize !== "both") return; const entry = entries[0]; const { width } = entry.contentRect; countStyle.value = { right: `calc(100% - ${width + 15 + 6}px)` }; }); const resizeTextarea = () => { const { type, autosize } = props; if (!isClient || type !== "textarea" || !textarea.value) return; if (autosize) { const minRows = isObject$1(autosize) ? autosize.minRows : void 0; const maxRows = isObject$1(autosize) ? autosize.maxRows : void 0; const textareaStyle2 = calcTextareaHeight(textarea.value, minRows, maxRows); textareaCalcStyle.value = { overflowY: "hidden", ...textareaStyle2 }; vue.nextTick(() => { textarea.value.offsetHeight; textareaCalcStyle.value = textareaStyle2; }); } else { textareaCalcStyle.value = { minHeight: calcTextareaHeight(textarea.value).minHeight }; } }; const createOnceInitResize = (resizeTextarea2) => { let isInit = false; return () => { var _a2; if (isInit || !props.autosize) return; const isElHidden = ((_a2 = textarea.value) == null ? void 0 : _a2.offsetParent) === null; if (!isElHidden) { resizeTextarea2(); isInit = true; } }; }; const onceInitSizeTextarea = createOnceInitResize(resizeTextarea); const setNativeInputValue = () => { const input2 = _ref.value; const formatterValue = props.formatter ? props.formatter(nativeInputValue.value) : nativeInputValue.value; if (!input2 || input2.value === formatterValue) return; input2.value = formatterValue; }; const handleInput = async (event2) => { recordCursor(); let { value } = event2.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 = (event2) => { emit("change", event2.target.value); }; const handleCompositionStart = (event2) => { emit("compositionstart", event2); isComposing.value = true; }; const handleCompositionUpdate = (event2) => { var _a2; emit("compositionupdate", event2); const text = (_a2 = event2.target) == null ? void 0 : _a2.value; const lastCharacter = text[text.length - 1] || ""; isComposing.value = !isKorean(lastCharacter); }; const handleCompositionEnd = (event2) => { emit("compositionend", event2); if (isComposing.value) { isComposing.value = false; handleInput(event2); } }; const handlePasswordVisible = () => { passwordVisible.value = !passwordVisible.value; focus(); }; const focus = async () => { var _a2; await vue.nextTick(); (_a2 = _ref.value) == null ? void 0 : _a2.focus(); }; const blur = () => { var _a2; return (_a2 = _ref.value) == null ? void 0 : _a2.blur(); }; const handleMouseLeave = (evt) => { hovering.value = false; emit("mouseleave", evt); }; const handleMouseEnter = (evt) => { hovering.value = true; emit("mouseenter", evt); }; const handleKeydown = (evt) => { emit("keydown", evt); }; const select = () => { var _a2; (_a2 = _ref.value) == null ? void 0 : _a2.select(); }; const clear = () => { emit(UPDATE_MODEL_EVENT, ""); emit("change", ""); emit("clear"); emit("input", ""); }; vue.watch(() => props.modelValue, () => { var _a2; vue.nextTick(() => resizeTextarea()); if (props.validateEvent) { (_a2 = elFormItem == null ? void 0 : elFormItem.validate) == null ? void 0 : _a2.call(elFormItem, "change").catch((err) => debugWarn()); } }); vue.watch(nativeInputValue, () => setNativeInputValue()); vue.watch(() => props.type, async () => { await vue.nextTick(); setNativeInputValue(); resizeTextarea(); }); vue.onMounted(() => { if (!props.formatter && props.parser) ; setNativeInputValue(); vue.nextTick(resizeTextarea); }); expose({ input, textarea, ref: _ref, textareaStyle, autosize: vue.toRef(props, "autosize"), focus, blur, select, clear, resizeTextarea }); return (_ctx, _cache) => { return vue.openBlock(), vue.createElementBlock("div", vue.mergeProps(vue.unref(containerAttrs), { class: vue.unref(containerKls), style: vue.unref(containerStyle), role: _ctx.containerRole, 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.label, placeholder: _ctx.placeholder, style: _ctx.inputStyle, form: _ctx.form, autofocus: _ctx.autofocus, onCompositionstart: handleCompositionStart, onCompositionupdate: handleCompositionUpdate, onCompositionend: handleCompositionEnd, onInput: handleInput, onFocus: _cache[0] || (_cache[0] = (...args) => vue.unref(handleFocus) && vue.unref(handleFocus)(...args)), onBlur: _cache[1] || (_cache[1] = (...args) => vue.unref(handleBlur) && vue.unref(handleBlur)(...args)), onChange: handleChange, onKeydown: handleKeydown }), null, 16, _hoisted_2$f), 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(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.label, placeholder: _ctx.placeholder, form: _ctx.form, autofocus: _ctx.autofocus, onCompositionstart: handleCompositionStart, onCompositionupdate: handleCompositionUpdate, onCompositionend: handleCompositionEnd, onInput: handleInput, onFocus: _cache[2] || (_cache[2] = (...args) => vue.unref(handleFocus) && vue.unref(handleFocus)(...args)), onBlur: _cache[3] || (_cache[3] = (...args) => vue.unref(handleBlur) && vue.unref(handleBlur)(...args)), onChange: handleChange, onKeydown: handleKeydown }), null, 16, _hoisted_3$8), 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)) ], 16, _hoisted_1$k); }; } }); var Input = /* @__PURE__ */ _export_sfc$1(_sfc_main$K, [["__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$3 = "Thumb"; const _sfc_main$J = /* @__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$3, "can not inject scrollbar context"); const instance = vue.ref(); const thumb = vue.ref(); const thumbState = vue.ref({}); const visible = vue.ref(false); let cursorDown = false; let cursorLeave = false; let originalOnSelectStart = isClient ? document.onselectstart : null; const bar = vue.computed(() => BAR_MAP[props.vertical ? "vertical" : "horizontal"]); const thumbStyle = vue.computed(() => renderThumbStyle({ size: props.size, move: props.move, bar: bar.value })); const offsetRatio = vue.computed(() => instance.value[bar.value.offset] ** 2 / scrollbar.wrapElement[bar.value.scrollSize] / props.ratio / thumb.value[bar.value.offset]); const clickThumbHandler = (e) => { var _a2; e.stopPropagation(); if (e.ctrlKey || [1, 2].includes(e.button)) return; (_a2 = window.getSelection()) == null ? void 0 : _a2.removeAllRanges(); startDrag(e); const el = e.currentTarget; if (!el) return; thumbState.value[bar.value.axis] = el[bar.value.offset] - (e[bar.value.client] - el.getBoundingClientRect()[bar.value.direction]); }; const clickTrackHandler = (e) => { if (!thumb.value || !instance.value || !scrollbar.wrapElement) return; const offset = Math.abs(e.target.getBoundingClientRect()[bar.value.direction] - e[bar.value.client]); const thumbHalf = thumb.value[bar.value.offset] / 2; const thumbPositionPercentage = (offset - thumbHalf) * 100 * offsetRatio.value / instance.value[bar.value.offset]; scrollbar.wrapElement[bar.value.scroll] = thumbPositionPercentage * scrollbar.wrapElement[bar.value.scrollSize] / 100; }; const startDrag = (e) => { e.stopImmediatePropagation(); cursorDown = true; document.addEventListener("mousemove", mouseMoveDocumentHandler); document.addEventListener("mouseup", mouseUpDocumentHandler); originalOnSelectStart = document.onselectstart; document.onselectstart = () => false; }; const mouseMoveDocumentHandler = (e) => { if (!instance.value || !thumb.value) return; if (cursorDown === false) return; const prevPage = thumbState.value[bar.value.axis]; if (!prevPage) return; const offset = (instance.value.getBoundingClientRect()[bar.value.direction] - e[bar.value.client]) * -1; const thumbClickPosition = thumb.value[bar.value.offset] - prevPage; const thumbPositionPercentage = (offset - thumbClickPosition) * 100 * offsetRatio.value / instance.value[bar.value.offset]; scrollbar.wrapElement[bar.value.scroll] = thumbPositionPercentage * scrollbar.wrapElement[bar.value.scrollSize] / 100; }; const mouseUpDocumentHandler = () => { cursorDown = false; thumbState.value[bar.value.axis] = 0; document.removeEventListener("mousemove", mouseMoveDocumentHandler); document.removeEventListener("mouseup", mouseUpDocumentHandler); restoreOnselectstart(); if (cursorLeave) visible.value = false; }; const mouseMoveScrollbarHandler = () => { cursorLeave = false; visible.value = !!props.size; }; const mouseLeaveScrollbarHandler = () => { cursorLeave = true; visible.value = cursorDown; }; vue.onBeforeUnmount(() => { restoreOnselectstart(); document.removeEventListener("mouseup", mouseUpDocumentHandler); }); const restoreOnselectstart = () => { if (document.onselectstart !== originalOnSelectStart) document.onselectstart = originalOnSelectStart; }; useEventListener(vue.toRef(scrollbar, "scrollbarElement"), "mousemove", mouseMoveScrollbarHandler); useEventListener(vue.toRef(scrollbar, "scrollbarElement"), "mouseleave", mouseLeaveScrollbarHandler); return (_ctx, _cache) => { return vue.openBlock(), vue.createBlock(vue.Transition, { name: vue.unref(ns).b("fade"), persisted: "" }, { default: vue.withCtx(() => [ vue.withDirectives(vue.createElementVNode("div", { ref_key: "instance", ref: instance, class: vue.normalizeClass([vue.unref(ns).e("bar"), vue.unref(ns).is(vue.unref(bar).key)]), onMousedown: clickTrackHandler }, [ vue.createElementVNode("div", { ref_key: "thumb", ref: thumb, class: vue.normalizeClass(vue.unref(ns).e("thumb")), style: vue.normalizeStyle(vue.unref(thumbStyle)), onMousedown: clickThumbHandler }, null, 38) ], 34), [ [vue.vShow, _ctx.always || visible.value] ]) ]), _: 1 }, 8, ["name"]); }; } }); var Thumb = /* @__PURE__ */ _export_sfc$1(_sfc_main$J, [["__file", "thumb.vue"]]); const barProps = buildProps({ always: { type: Boolean, default: true }, minSize: { type: Number, required: true } }); const _sfc_main$I = /* @__PURE__ */ vue.defineComponent({ __name: "bar", props: barProps, setup(__props, { expose }) { const props = __props; const scrollbar = vue.inject(scrollbarContextKey); const moveX = vue.ref(0); const moveY = vue.ref(0); const sizeWidth = vue.ref(""); const sizeHeight = vue.ref(""); const ratioY = vue.ref(1); const ratioX = vue.ref(1); const handleScroll = (wrap) => { if (wrap) { const offsetHeight = wrap.offsetHeight - GAP; const offsetWidth = wrap.offsetWidth - GAP; moveY.value = wrap.scrollTop * 100 / offsetHeight * ratioY.value; moveX.value = wrap.scrollLeft * 100 / offsetWidth * ratioX.value; } }; const update = () => { const wrap = scrollbar == null ? void 0 : scrollbar.wrapElement; if (!wrap) return; const offsetHeight = wrap.offsetHeight - GAP; const offsetWidth = wrap.offsetWidth - GAP; const originalHeight = offsetHeight ** 2 / wrap.scrollHeight; const originalWidth = offsetWidth ** 2 / wrap.scrollWidth; const height = Math.max(originalHeight, props.minSize); const width = Math.max(originalWidth, props.minSize); ratioY.value = originalHeight / (offsetHeight - originalHeight) / (height / (offsetHeight - height)); ratioX.value = originalWidth / (offsetWidth - originalWidth) / (width / (offsetWidth - width)); sizeHeight.value = height + GAP < offsetHeight ? `${height}px` : ""; sizeWidth.value = width + GAP < offsetWidth ? `${width}px` : ""; }; expose({ handleScroll, update }); return (_ctx, _cache) => { return vue.openBlock(), vue.createElementBlock(vue.Fragment, null, [ vue.createVNode(Thumb, { move: moveX.value, ratio: ratioX.value, size: sizeWidth.value, always: _ctx.always }, null, 8, ["move", "ratio", "size", "always"]), vue.createVNode(Thumb, { move: moveY.value, ratio: ratioY.value, size: sizeHeight.value, vertical: "", always: _ctx.always }, null, 8, ["move", "ratio", "size", "always"]) ], 64); }; } }); var Bar = /* @__PURE__ */ _export_sfc$1(_sfc_main$I, [["__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 }, id: String, role: String, ariaLabel: String, ariaOrientation: { type: String, values: ["horizontal", "vertical"] } }); const scrollbarEmits = { scroll: ({ scrollTop, scrollLeft }) => [scrollTop, scrollLeft].every(isNumber) }; const COMPONENT_NAME$2 = "ElScrollbar"; const __default__$s = vue.defineComponent({ name: COMPONENT_NAME$2 }); const _sfc_main$H = /* @__PURE__ */ vue.defineComponent({ ...__default__$s, props: scrollbarProps, emits: scrollbarEmits, setup(__props, { expose, emit }) { const props = __props; const ns = useNamespace("scrollbar"); let stopResizeObserver = void 0; let stopResizeListener = void 0; const scrollbarRef = vue.ref(); const wrapRef = vue.ref(); const resizeRef = vue.ref(); const barRef = vue.ref(); const wrapStyle = vue.computed(() => { const style = {}; if (props.height) style.height = addUnit(props.height); if (props.maxHeight) style.maxHeight = addUnit(props.maxHeight); return [props.wrapStyle, style]; }); const wrapKls = vue.computed(() => { return [ props.wrapClass, ns.e("wrap"), { [ns.em("wrap", "hidden-default")]: !props.native } ]; }); const resizeKls = vue.computed(() => { return [ns.e("view"), props.viewClass]; }); const handleScroll = () => { var _a2; if (wrapRef.value) { (_a2 = barRef.value) == null ? void 0 : _a2.handleScroll(wrapRef.value); emit("scroll", { scrollTop: wrapRef.value.scrollTop, scrollLeft: wrapRef.value.scrollLeft }); } }; function scrollTo(arg1, arg2) { if (isObject$1(arg1)) { wrapRef.value.scrollTo(arg1); } else if (isNumber(arg1) && isNumber(arg2)) { wrapRef.value.scrollTo(arg1, arg2); } } const setScrollTop = (value) => { if (!isNumber(value)) { return; } wrapRef.value.scrollTop = value; }; const setScrollLeft = (value) => { if (!isNumber(value)) { return; } wrapRef.value.scrollLeft = value; }; const update = () => { var _a2; (_a2 = barRef.value) == null ? void 0 : _a2.update(); }; vue.watch(() => props.noresize, (noresize) => { if (noresize) { stopResizeObserver == null ? void 0 : stopResizeObserver(); stopResizeListener == null ? void 0 : stopResizeListener(); } else { ({ stop: stopResizeObserver } = useResizeObserver(resizeRef, update)); stopResizeListener = useEventListener("resize", update); } }, { immediate: true }); vue.watch(() => [props.maxHeight, props.height], () => { if (!props.native) vue.nextTick(() => { var _a2; update(); if (wrapRef.value) { (_a2 = barRef.value) == null ? void 0 : _a2.handleScroll(wrapRef.value); } }); }); vue.provide(scrollbarContextKey, vue.reactive({ scrollbarElement: scrollbarRef, wrapElement: wrapRef })); vue.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)), 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"])) ], 38), !_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$H, [["__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__$r = vue.defineComponent({ name: "ElPopper", inheritAttrs: false }); const _sfc_main$G = /* @__PURE__ */ vue.defineComponent({ ...__default__$r, 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$G, [["__file", "popper.vue"]]); const popperArrowProps = buildProps({ arrowOffset: { type: Number, default: 5 } }); const __default__$q = vue.defineComponent({ name: "ElPopperArrow", inheritAttrs: false }); const _sfc_main$F = /* @__PURE__ */ vue.defineComponent({ ...__default__$q, props: popperArrowProps, setup(__props, { expose }) { const props = __props; const ns = useNamespace("popper"); const { arrowOffset, arrowRef, arrowStyle } = vue.inject(POPPER_CONTENT_INJECTION_KEY, void 0); vue.watch(() => props.arrowOffset, (val) => { arrowOffset.value = val; }); vue.onBeforeUnmount(() => { arrowRef.value = void 0; }); expose({ arrowRef }); return (_ctx, _cache) => { return vue.openBlock(), vue.createElementBlock("span", { ref_key: "arrowRef", ref: arrowRef, class: vue.normalizeClass(vue.unref(ns).e("arrow")), style: vue.normalizeStyle(vue.unref(arrowStyle)), "data-popper-arrow": "" }, null, 6); }; } }); var ElPopperArrow = /* @__PURE__ */ _export_sfc$1(_sfc_main$F, [["__file", "arrow.vue"]]); const NAME = "ElOnlyChild"; const OnlyChild = vue.defineComponent({ name: NAME, setup(_2, { slots, attrs }) { var _a2; const forwardRefInjection = vue.inject(FORWARD_REF_INJECTION_KEY); const forwardRefDirective = useForwardRefDirective((_a2 = forwardRefInjection == null ? void 0 : forwardRefInjection.setForwardRef) != null ? _a2 : NOOP); return () => { var _a22; const defaultSlot = (_a22 = slots.default) == null ? void 0 : _a22.call(slots, attrs); if (!defaultSlot) return null; if (defaultSlot.length > 1) { return null; } const firstLegitNode = findFirstLegitChild(defaultSlot); if (!firstLegitNode) { return null; } return vue.withDirectives(vue.cloneVNode(firstLegitNode, attrs), [[forwardRefDirective]]); }; } }); function findFirstLegitChild(node) { if (!node) return null; const children = node; for (const child of children) { if (isObject$1(child)) { switch (child.type) { case vue.Comment: continue; case vue.Text: case "svg": return wrapTextContent(child); case vue.Fragment: return findFirstLegitChild(child.children); default: return child; } } return wrapTextContent(child); } return null; } function wrapTextContent(s2) { const ns = useNamespace("only-child"); return vue.createVNode("span", { "class": ns.e("content") }, [s2]); } const 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 __default__$p = vue.defineComponent({ name: "ElPopperTrigger", inheritAttrs: false }); const _sfc_main$E = /* @__PURE__ */ vue.defineComponent({ ...__default__$p, props: popperTriggerProps, setup(__props, { expose }) { const props = __props; const { role, triggerRef } = vue.inject(POPPER_INJECTION_KEY, void 0); useForwardRef(triggerRef); const ariaControls = vue.computed(() => { return ariaHaspopup.value ? props.id : void 0; }); const ariaDescribedby = vue.computed(() => { if (role && role.value === "tooltip") { return props.open && props.id ? props.id : void 0; } return void 0; }); const ariaHaspopup = vue.computed(() => { if (role && role.value !== "tooltip") { return role.value; } return void 0; }); const ariaExpanded = vue.computed(() => { return ariaHaspopup.value ? `${props.open}` : void 0; }); let virtualTriggerAriaStopWatch = void 0; vue.onMounted(() => { vue.watch(() => props.virtualRef, (virtualEl) => { if (virtualEl) { triggerRef.value = unrefElement(virtualEl); } }, { immediate: true }); vue.watch(triggerRef, (el, prevEl) => { virtualTriggerAriaStopWatch == null ? void 0 : virtualTriggerAriaStopWatch(); virtualTriggerAriaStopWatch = void 0; if (isElement(el)) { [ "onMouseenter", "onMouseleave", "onClick", "onKeydown", "onFocus", "onBlur", "onContextmenu" ].forEach((eventName) => { var _a2; const handler = props[eventName]; if (handler) { el.addEventListener(eventName.slice(2).toLowerCase(), handler); (_a2 = prevEl == null ? void 0 : prevEl.removeEventListener) == null ? void 0 : _a2.call(prevEl, eventName.slice(2).toLowerCase(), handler); } }); virtualTriggerAriaStopWatch = vue.watch([ariaControls, ariaDescribedby, ariaHaspopup, ariaExpanded], (watches) => { [ "aria-controls", "aria-describedby", "aria-haspopup", "aria-expanded" ].forEach((key2, idx) => { isNil(watches[idx]) ? el.removeAttribute(key2) : el.setAttribute(key2, watches[idx]); }); }, { immediate: true }); } if (isElement(prevEl)) { [ "aria-controls", "aria-describedby", "aria-haspopup", "aria-expanded" ].forEach((key2) => prevEl.removeAttribute(key2)); } }, { immediate: true }); }); vue.onBeforeUnmount(() => { virtualTriggerAriaStopWatch == null ? void 0 : virtualTriggerAriaStopWatch(); virtualTriggerAriaStopWatch = void 0; }); expose({ triggerRef }); return (_ctx, _cache) => { return !_ctx.virtualTriggering ? (vue.openBlock(), vue.createBlock(vue.unref(OnlyChild), vue.mergeProps({ key: 0 }, _ctx.$attrs, { "aria-controls": vue.unref(ariaControls), "aria-describedby": vue.unref(ariaDescribedby), "aria-expanded": vue.unref(ariaExpanded), "aria-haspopup": vue.unref(ariaHaspopup) }), { default: vue.withCtx(() => [ vue.renderSlot(_ctx.$slots, "default") ]), _: 3 }, 16, ["aria-controls", "aria-describedby", "aria-expanded", "aria-haspopup"])) : vue.createCommentVNode("v-if", true); }; } }); var ElPopperTrigger = /* @__PURE__ */ _export_sfc$1(_sfc_main$E, [["__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; element.focus({ preventScroll: true }); lastAutomatedFocusTimestamp.value = window.performance.now(); if (element !== prevFocusedElement && isSelectable(element) && shouldSelect) { element.select(); } } }; 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 = (layer2) => { const currentLayer = stack[0]; if (currentLayer && layer2 !== currentLayer) { currentLayer.pause(); } stack = removeFromStack(stack, layer2); stack.unshift(layer2); }; const remove = (layer2) => { var _a2, _b; stack = removeFromStack(stack, layer2); (_b = (_a2 = stack[0]) == null ? void 0 : _a2.resume) == null ? void 0 : _b.call(_a2); }; return { push, remove }; }; const focusFirstDescendant = (elements, shouldSelect = false) => { const prevFocusedElement = document.activeElement; for (const element of elements) { tryFocus(element, shouldSelect); if (document.activeElement !== prevFocusedElement) return; } }; const focusableStack = createFocusableStack(); const isFocusCausedByUserEvent = () => { return lastUserFocusTimestamp.value > lastAutomatedFocusTimestamp.value; }; const notifyFocusReasonPointer = () => { focusReason.value = "pointer"; lastUserFocusTimestamp.value = window.performance.now(); }; const notifyFocusReasonKeydown = () => { focusReason.value = "keyboard"; lastUserFocusTimestamp.value = window.performance.now(); }; const useFocusReason = () => { vue.onMounted(() => { if (focusReasonUserCount === 0) { document.addEventListener("mousedown", notifyFocusReasonPointer); document.addEventListener("touchstart", notifyFocusReasonPointer); document.addEventListener("keydown", notifyFocusReasonKeydown); } focusReasonUserCount++; }); vue.onBeforeUnmount(() => { focusReasonUserCount--; if (focusReasonUserCount <= 0) { document.removeEventListener("mousedown", notifyFocusReasonPointer); document.removeEventListener("touchstart", notifyFocusReasonPointer); document.removeEventListener("keydown", notifyFocusReasonKeydown); } }); return { focusReason, lastUserFocusTimestamp, lastAutomatedFocusTimestamp }; }; const createFocusOutPreventedEvent = (detail) => { return new CustomEvent(FOCUSOUT_PREVENTED, { ...FOCUSOUT_PREVENTED_OPTS, detail }); }; const _sfc_main$D = 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((event2) => { if (props.trapped && !focusLayer.paused) { emit("release-requested", event2); } }); 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 { key: key2, altKey, ctrlKey, metaKey, currentTarget, shiftKey } = e; const { loop: loop2 } = props; const isTabbing = key2 === 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 (loop2) 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 (loop2) 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(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(); } }); return { onKeydown }; } }); function _sfc_render$8(_ctx, _cache, $props, $setup, $data, $options) { return vue.renderSlot(_ctx.$slots, "default", { handleKeydown: _ctx.onKeydown }); } var ElFocusTrap = /* @__PURE__ */ _export_sfc$1(_sfc_main$D, [["render", _sfc_render$8], ["__file", "focus-trap.vue"]]); const POSITIONING_STRATEGIES = ["fixed", "absolute"]; const popperCoreConfigProps = buildProps({ boundariesPadding: { type: Number, default: 0 }, fallbackPlacements: { type: definePropType(Array), default: void 0 }, gpuAcceleration: { type: Boolean, default: true }, offset: { type: Number, default: 12 }, placement: { type: String, values: Ee, default: "bottom" }, popperOptions: { type: definePropType(Object), default: () => ({}) }, strategy: { type: String, values: POSITIONING_STRATEGIES, default: "absolute" } }); const popperContentProps = buildProps({ ...popperCoreConfigProps, id: String, style: { type: definePropType([String, Array, Object]) }, className: { type: definePropType([String, Array, Object]) }, effect: { type: 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 }, ariaLabel: { type: String, default: void 0 }, virtualTriggering: Boolean, zIndex: Number }); const popperContentEmits = { mouseenter: (evt) => evt instanceof MouseEvent, mouseleave: (evt) => evt instanceof MouseEvent, focus: () => true, blur: () => true, close: () => true }; const buildPopperOptions = (props, modifiers = []) => { const { placement, strategy, popperOptions } = props; const options = { placement, strategy, ...popperOptions, modifiers: [...genModifiers(props), ...modifiers] }; deriveExtraModifiers(options, popperOptions == null ? void 0 : popperOptions.modifiers); return options; }; const unwrapMeasurableEl = ($el) => { if (!isClient) return; return unrefElement($el); }; function genModifiers(options) { const { offset, gpuAcceleration, fallbackPlacements } = options; return [ { name: "offset", options: { offset: [0, offset != null ? offset : 12] } }, { name: "preventOverflow", options: { padding: { top: 2, bottom: 2, left: 5, right: 5 } } }, { name: "flip", options: { padding: 5, fallbackPlacements } }, { name: "computeStyles", options: { gpuAcceleration } } ]; } function deriveExtraModifiers(options, modifiers) { if (modifiers) { options.modifiers = [...options.modifiers, ...modifiers != null ? modifiers : []]; } } const DEFAULT_ARROW_OFFSET = 0; const usePopperContent = (props) => { const { popperInstanceRef, contentRef, triggerRef, role } = vue.inject(POPPER_INJECTION_KEY, void 0); const arrowRef = vue.ref(); const arrowOffset = vue.ref(); const eventListenerModifier = vue.computed(() => { return { name: "eventListeners", enabled: !!props.visible }; }); const arrowModifier = vue.computed(() => { var _a2; const arrowEl = vue.unref(arrowRef); const offset = (_a2 = vue.unref(arrowOffset)) != null ? _a2 : DEFAULT_ARROW_OFFSET; return { name: "arrow", enabled: !isUndefined$1(arrowEl), options: { element: arrowEl, padding: offset } }; }); const options = vue.computed(() => { return { onFirstUpdate: () => { update(); }, ...buildPopperOptions(props, [ vue.unref(arrowModifier), vue.unref(eventListenerModifier) ]) }; }); const computedReference = vue.computed(() => unwrapMeasurableEl(props.referenceEl) || vue.unref(triggerRef)); const { attributes, state, styles, update, forceUpdate, instanceRef } = usePopper(computedReference, contentRef, options); vue.watch(instanceRef, (instance) => popperInstanceRef.value = instance); vue.onMounted(() => { vue.watch(() => { var _a2; return (_a2 = vue.unref(computedReference)) == null ? void 0 : _a2.getBoundingClientRect(); }, () => { update(); }); }); return { attributes, arrowRef, contentRef, instanceRef, state, styles, role, forceUpdate, update }; }; const usePopperContentDOM = (props, { attributes, styles, role }) => { const { nextZIndex } = useZIndex(); const ns = useNamespace("popper"); const contentAttrs = vue.computed(() => vue.unref(attributes).popper); const contentZIndex = vue.ref(isNumber(props.zIndex) ? props.zIndex : nextZIndex()); const contentClass = vue.computed(() => [ ns.b(), ns.is("pure", props.pure), ns.is(props.effect), props.popperClass ]); const contentStyle = vue.computed(() => { return [ { zIndex: vue.unref(contentZIndex) }, vue.unref(styles).popper, props.popperStyle || {} ]; }); const ariaModal = vue.computed(() => role.value === "dialog" ? "false" : void 0); const arrowStyle = vue.computed(() => vue.unref(styles).arrow || {}); const updateZIndex = () => { contentZIndex.value = isNumber(props.zIndex) ? props.zIndex : nextZIndex(); }; return { ariaModal, arrowStyle, contentAttrs, contentClass, contentStyle, contentZIndex, updateZIndex }; }; const usePopperContentFocusTrap = (props, emit) => { const trapped = vue.ref(false); const focusStartRef = vue.ref(); const onFocusAfterTrapped = () => { emit("focus"); }; const onFocusAfterReleased = (event2) => { var _a2; if (((_a2 = event2.detail) == null ? void 0 : _a2.focusReason) !== "pointer") { focusStartRef.value = "first"; emit("blur"); } }; const onFocusInTrap = (event2) => { if (props.visible && !trapped.value) { if (event2.target) { focusStartRef.value = event2.target; } trapped.value = true; } }; const onFocusoutPrevented = (event2) => { if (!props.trapping) { if (event2.detail.focusReason === "pointer") { event2.preventDefault(); } trapped.value = false; } }; const onReleaseRequested = () => { trapped.value = false; emit("close"); }; return { focusStartRef, trapped, onFocusAfterReleased, onFocusAfterTrapped, onFocusInTrap, onFocusoutPrevented, onReleaseRequested }; }; const __default__$o = vue.defineComponent({ name: "ElPopperContent" }); const _sfc_main$C = /* @__PURE__ */ vue.defineComponent({ ...__default__$o, props: popperContentProps, emits: popperContentEmits, setup(__props, { expose, emit }) { const props = __props; const { focusStartRef, trapped, onFocusAfterReleased, onFocusAfterTrapped, onFocusInTrap, onFocusoutPrevented, onReleaseRequested } = usePopperContentFocusTrap(props, emit); const { attributes, arrowRef, contentRef, styles, instanceRef, role, update } = usePopperContent(props); const { ariaModal, arrowStyle, contentAttrs, contentClass, contentStyle, updateZIndex } = usePopperContentDOM(props, { styles, attributes, role }); const formItemContext = vue.inject(formItemContextKey, void 0); const arrowOffset = vue.ref(); vue.provide(POPPER_CONTENT_INJECTION_KEY, { arrowStyle, arrowRef, arrowOffset }); if (formItemContext && (formItemContext.addInputId || formItemContext.removeInputId)) { vue.provide(formItemContextKey, { ...formItemContext, addInputId: NOOP, removeInputId: NOOP }); } let triggerTargetAriaStopWatch = void 0; const updatePopper = (shouldUpdateZIndex = true) => { update(); shouldUpdateZIndex && updateZIndex(); }; const togglePopperAlive = () => { updatePopper(false); if (props.visible && props.focusOnShow) { trapped.value = true; } else if (props.visible === false) { trapped.value = false; } }; vue.onMounted(() => { vue.watch(() => props.triggerTargetEl, (triggerTargetEl, prevTriggerTargetEl) => { triggerTargetAriaStopWatch == null ? void 0 : triggerTargetAriaStopWatch(); triggerTargetAriaStopWatch = void 0; const el = vue.unref(triggerTargetEl || contentRef.value); const prevEl = vue.unref(prevTriggerTargetEl || contentRef.value); if (isElement(el)) { triggerTargetAriaStopWatch = vue.watch([role, () => props.ariaLabel, ariaModal, () => props.id], (watches) => { ["role", "aria-label", "aria-modal", "id"].forEach((key2, idx) => { isNil(watches[idx]) ? el.removeAttribute(key2) : el.setAttribute(key2, watches[idx]); }); }, { immediate: true }); } if (prevEl !== el && isElement(prevEl)) { ["role", "aria-label", "aria-modal", "id"].forEach((key2) => { prevEl.removeAttribute(key2); }); } }, { immediate: true }); vue.watch(() => props.visible, togglePopperAlive, { immediate: true }); }); vue.onBeforeUnmount(() => { triggerTargetAriaStopWatch == null ? void 0 : triggerTargetAriaStopWatch(); triggerTargetAriaStopWatch = void 0; }); expose({ popperContentRef: contentRef, popperInstanceRef: instanceRef, updatePopper, contentStyle }); return (_ctx, _cache) => { return vue.openBlock(), vue.createElementBlock("div", vue.mergeProps({ ref_key: "contentRef", ref: contentRef }, vue.unref(contentAttrs), { style: vue.unref(contentStyle), class: vue.unref(contentClass), tabindex: "-1", onMouseenter: _cache[0] || (_cache[0] = (e) => _ctx.$emit("mouseenter", e)), onMouseleave: _cache[1] || (_cache[1] = (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); }; } }); var ElPopperContent = /* @__PURE__ */ _export_sfc$1(_sfc_main$C, [["__file", "content.vue"]]); const ElPopper = withInstall(Popper); const TOOLTIP_INJECTION_KEY = Symbol("elTooltip"); const useTooltipContentProps = buildProps({ ...useDelayedToggleProps, ...popperContentProps, appendTo: { type: definePropType([String, Object]) }, content: { type: String, default: "" }, rawContent: { type: Boolean, default: false }, persistent: Boolean, ariaLabel: String, visible: { type: definePropType(Boolean), default: null }, transition: String, teleported: { type: Boolean, default: true }, disabled: Boolean }); const useTooltipTriggerProps = buildProps({ ...popperTriggerProps, disabled: Boolean, trigger: { type: definePropType([String, Array]), default: "hover" }, triggerKeys: { type: definePropType(Array), default: () => [EVENT_CODE.enter, EVENT_CODE.space] } }); 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 __default__$n = vue.defineComponent({ name: "ElTooltipTrigger" }); const _sfc_main$B = /* @__PURE__ */ vue.defineComponent({ ...__default__$n, props: useTooltipTriggerProps, setup(__props, { expose }) { const props = __props; const ns = useNamespace("tooltip"); const { controlled, id, open, onOpen, onClose, onToggle } = vue.inject(TOOLTIP_INJECTION_KEY, void 0); const triggerRef = vue.ref(null); const stopWhenControlledOrDisabled = () => { if (vue.unref(controlled) || props.disabled) { return true; } }; const trigger = vue.toRef(props, "trigger"); const onMouseenter = composeEventHandlers(stopWhenControlledOrDisabled, whenTrigger(trigger, "hover", onOpen)); const onMouseleave = composeEventHandlers(stopWhenControlledOrDisabled, whenTrigger(trigger, "hover", onClose)); const onClick = composeEventHandlers(stopWhenControlledOrDisabled, whenTrigger(trigger, "click", (e) => { if (e.button === 0) { onToggle(e); } })); const onFocus = composeEventHandlers(stopWhenControlledOrDisabled, whenTrigger(trigger, "focus", onOpen)); const onBlur = composeEventHandlers(stopWhenControlledOrDisabled, whenTrigger(trigger, "focus", onClose)); const onContextMenu = composeEventHandlers(stopWhenControlledOrDisabled, whenTrigger(trigger, "contextmenu", (e) => { e.preventDefault(); onToggle(e); })); const onKeydown = composeEventHandlers(stopWhenControlledOrDisabled, (e) => { const { code } = e; if (props.triggerKeys.includes(code)) { e.preventDefault(); onToggle(e); } }); expose({ triggerRef }); return (_ctx, _cache) => { return vue.openBlock(), vue.createBlock(vue.unref(ElPopperTrigger), { id: vue.unref(id), "virtual-ref": _ctx.virtualRef, open: vue.unref(open), "virtual-triggering": _ctx.virtualTriggering, class: vue.normalizeClass(vue.unref(ns).e("trigger")), onBlur: vue.unref(onBlur), onClick: vue.unref(onClick), onContextmenu: vue.unref(onContextMenu), onFocus: vue.unref(onFocus), onMouseenter: vue.unref(onMouseenter), onMouseleave: vue.unref(onMouseleave), onKeydown: vue.unref(onKeydown) }, { default: vue.withCtx(() => [ vue.renderSlot(_ctx.$slots, "default") ]), _: 3 }, 8, ["id", "virtual-ref", "open", "virtual-triggering", "class", "onBlur", "onClick", "onContextmenu", "onFocus", "onMouseenter", "onMouseleave", "onKeydown"]); }; } }); var ElTooltipTrigger = /* @__PURE__ */ _export_sfc$1(_sfc_main$B, [["__file", "trigger.vue"]]); const __default__$m = vue.defineComponent({ name: "ElTooltipContent", inheritAttrs: false }); const _sfc_main$A = /* @__PURE__ */ vue.defineComponent({ ...__default__$m, props: useTooltipContentProps, setup(__props, { expose }) { const props = __props; const { selector } = usePopperContainerId(); const ns = useNamespace("tooltip"); const contentRef = vue.ref(null); const destroyed = vue.ref(false); const { controlled, id, open, trigger, onClose, onOpen, onShow, onHide, onBeforeShow, onBeforeHide } = vue.inject(TOOLTIP_INJECTION_KEY, void 0); const transitionClass = vue.computed(() => { return props.transition || `${ns.namespace.value}-fade-in-linear`; }); const persistentRef = vue.computed(() => { return props.persistent; }); vue.onBeforeUnmount(() => { destroyed.value = true; }); 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.computed(() => !vue.unref(open)); const onTransitionLeave = () => { onHide(); }; const stopWhenControlled = () => { if (vue.unref(controlled)) return true; }; const onContentEnter = composeEventHandlers(stopWhenControlled, () => { if (props.enterable && vue.unref(trigger) === "hover") { onOpen(); } }); const onContentLeave = composeEventHandlers(stopWhenControlled, () => { if (vue.unref(trigger) === "hover") { onClose(); } }); const onBeforeEnter = () => { var _a2, _b; (_b = (_a2 = contentRef.value) == null ? void 0 : _a2.updatePopper) == null ? void 0 : _b.call(_a2); onBeforeShow == null ? void 0 : onBeforeShow(); }; const onBeforeLeave = () => { onBeforeHide == null ? void 0 : onBeforeHide(); }; const onAfterShow = () => { onShow(); stopHandle = onClickOutside(vue.computed(() => { var _a2; return (_a2 = contentRef.value) == null ? void 0 : _a2.popperContentRef; }), () => { if (vue.unref(controlled)) return; const $trigger = vue.unref(trigger); if ($trigger !== "hover") { onClose(); } }); }; const onBlur = () => { if (!props.virtualTriggering) { onClose(); } }; let stopHandle; vue.watch(() => vue.unref(open), (val) => { if (!val) { stopHandle == null ? void 0 : stopHandle(); } }, { flush: "post" }); vue.watch(() => props.content, () => { var _a2, _b; (_b = (_a2 = contentRef.value) == null ? void 0 : _a2.updatePopper) == null ? void 0 : _b.call(_a2); }); expose({ contentRef }); return (_ctx, _cache) => { return vue.openBlock(), vue.createBlock(vue.Teleport, { disabled: !_ctx.teleported, to: vue.unref(appendTo) }, [ 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": vue.unref(ariaHidden), "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(() => [ !destroyed.value ? vue.renderSlot(_ctx.$slots, "default", { key: 0 }) : vue.createCommentVNode("v-if", true) ]), _: 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"]) ], 8, ["disabled", "to"]); }; } }); var ElTooltipContent = /* @__PURE__ */ _export_sfc$1(_sfc_main$A, [["__file", "content.vue"]]); const _hoisted_1$j = ["innerHTML"]; const _hoisted_2$e = { key: 1 }; const __default__$l = vue.defineComponent({ name: "ElTooltip" }); const _sfc_main$z = /* @__PURE__ */ vue.defineComponent({ ...__default__$l, props: useTooltipProps, emits: tooltipEmits, setup(__props, { expose, emit }) { const props = __props; usePopperContainer(); const id = useId(); const popperRef = vue.ref(); const contentRef = vue.ref(); const updatePopper = () => { var _a2; const popperComponent = vue.unref(popperRef); if (popperComponent) { (_a2 = popperComponent.popperInstanceRef) == null ? void 0 : _a2.update(); } }; const open = vue.ref(false); const toggleReason = vue.ref(); const { show, hide, hasUpdateHandler } = useTooltipModelToggle({ indicator: open, toggleReason }); const { onOpen, onClose } = useDelayedToggle({ showAfter: vue.toRef(props, "showAfter"), hideAfter: vue.toRef(props, "hideAfter"), autoClose: vue.toRef(props, "autoClose"), open: show, close: hide }); const controlled = vue.computed(() => isBoolean(props.visible) && !hasUpdateHandler.value); vue.provide(TOOLTIP_INJECTION_KEY, { controlled, id, open: vue.readonly(open), trigger: vue.toRef(props, "trigger"), onOpen: (event2) => { onOpen(event2); }, onClose: (event2) => { onClose(event2); }, onToggle: (event2) => { if (vue.unref(open)) { onClose(event2); } else { onOpen(event2); } }, 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 = (event2) => { var _a2, _b; const popperContent = (_b = (_a2 = contentRef.value) == null ? void 0 : _a2.contentRef) == null ? void 0 : _b.popperContentRef; const activeElement = (event2 == null ? void 0 : event2.relatedTarget) || document.activeElement; return popperContent && popperContent.contains(activeElement); }; 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, _hoisted_1$j)) : (vue.openBlock(), vue.createElementBlock("span", _hoisted_2$e, 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$z, [["__file", "tooltip.vue"]]); const ElTooltip = withInstall(Tooltip); const breadcrumbKey = Symbol("breadcrumbKey"); const breadcrumbProps = buildProps({ separator: { type: String, default: "/" }, separatorIcon: { type: iconPropType } }); const _hoisted_1$i = ["aria-label"]; const __default__$k = vue.defineComponent({ name: "ElBreadcrumb" }); const _sfc_main$y = /* @__PURE__ */ vue.defineComponent({ ...__default__$k, props: breadcrumbProps, setup(__props) { const props = __props; const { t } = useLocale(); const ns = useNamespace("breadcrumb"); const breadcrumb = vue.ref(); vue.provide(breadcrumbKey, props); vue.onMounted(() => { const items = breadcrumb.value.querySelectorAll(`.${ns.e("item")}`); if (items.length) { items[items.length - 1].setAttribute("aria-current", "page"); } }); return (_ctx, _cache) => { return vue.openBlock(), vue.createElementBlock("div", { ref_key: "breadcrumb", ref: breadcrumb, class: vue.normalizeClass(vue.unref(ns).b()), "aria-label": vue.unref(t)("el.breadcrumb.label"), role: "navigation" }, [ vue.renderSlot(_ctx.$slots, "default") ], 10, _hoisted_1$i); }; } }); var Breadcrumb = /* @__PURE__ */ _export_sfc$1(_sfc_main$y, [["__file", "breadcrumb.vue"]]); const breadcrumbItemProps = buildProps({ to: { type: definePropType([String, Object]), default: "" }, replace: { type: Boolean, default: false } }); const __default__$j = vue.defineComponent({ name: "ElBreadcrumbItem" }); const _sfc_main$x = /* @__PURE__ */ vue.defineComponent({ ...__default__$j, props: breadcrumbItemProps, setup(__props) { const props = __props; const instance = vue.getCurrentInstance(); const breadcrumbContext = vue.inject(breadcrumbKey, void 0); const ns = useNamespace("breadcrumb"); const router = instance.appContext.config.globalProperties.$router; const link = vue.ref(); const onClick = () => { if (!props.to || !router) return; props.replace ? router.replace(props.to) : router.push(props.to); }; return (_ctx, _cache) => { var _a2, _b; return vue.openBlock(), vue.createElementBlock("span", { class: vue.normalizeClass(vue.unref(ns).e("item")) }, [ vue.createElementVNode("span", { ref_key: "link", ref: link, class: vue.normalizeClass([vue.unref(ns).e("inner"), vue.unref(ns).is("link", !!_ctx.to)]), role: "link", onClick }, [ vue.renderSlot(_ctx.$slots, "default") ], 2), ((_a2 = vue.unref(breadcrumbContext)) == null ? void 0 : _a2.separatorIcon) ? (vue.openBlock(), vue.createBlock(vue.unref(ElIcon), { key: 0, class: vue.normalizeClass(vue.unref(ns).e("separator")) }, { default: vue.withCtx(() => [ (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(vue.unref(breadcrumbContext).separatorIcon))) ]), _: 1 }, 8, ["class"])) : (vue.openBlock(), vue.createElementBlock("span", { key: 1, class: vue.normalizeClass(vue.unref(ns).e("separator")), role: "presentation" }, vue.toDisplayString((_b = vue.unref(breadcrumbContext)) == null ? void 0 : _b.separator), 3)) ], 2); }; } }); var BreadcrumbItem = /* @__PURE__ */ _export_sfc$1(_sfc_main$x, [["__file", "breadcrumb-item.vue"]]); const ElBreadcrumb = withInstall(Breadcrumb, { BreadcrumbItem }); const ElBreadcrumbItem = withNoopInstall(BreadcrumbItem); const buttonGroupContextKey = Symbol("buttonGroupContextKey"); const useButton = (props, emit) => { useDeprecated({ from: "type.text", replacement: "link", version: "3.0.0", scope: "props", ref: "https://element-plus.org/en-US/component/button.html#button-attributes" }, vue.computed(() => props.type === "text")); const buttonGroupContext = vue.inject(buttonGroupContextKey, void 0); const globalConfig2 = useGlobalConfig("button"); const { form } = useFormItem(); const _size = useFormSize(vue.computed(() => buttonGroupContext == null ? void 0 : buttonGroupContext.size)); const _disabled = useFormDisabled(); const _ref = vue.ref(); const slots = vue.useSlots(); const _type = vue.computed(() => props.type || (buttonGroupContext == null ? void 0 : buttonGroupContext.type) || ""); const autoInsertSpace = vue.computed(() => { var _a2, _b, _c; return (_c = (_b = props.autoInsertSpace) != null ? _b : (_a2 = globalConfig2.value) == null ? void 0 : _a2.autoInsertSpace) != null ? _c : false; }); const _props = vue.computed(() => { if (props.tag === "button") { return { ariaDisabled: _disabled.value || props.loading, disabled: _disabled.value || props.loading, autofocus: props.autofocus, type: props.nativeType }; } return {}; }); const shouldAddSpace = vue.computed(() => { var _a2; const defaultSlot = (_a2 = slots.default) == null ? void 0 : _a2.call(slots); if (autoInsertSpace.value && (defaultSlot == null ? void 0 : defaultSlot.length) === 1) { const slot = defaultSlot[0]; if ((slot == null ? void 0 : slot.type) === vue.Text) { const text = slot.children; return new RegExp("^\\p{Unified_Ideograph}{2}$", "u").test(text.trim()); } } return false; }); const handleClick = (evt) => { if (props.nativeType === "reset") { form == null ? void 0 : form.resetFields(); } emit("click", evt); }; return { _disabled, _size, _type, _ref, _props, shouldAddSpace, handleClick }; }; const buttonTypes = [ "default", "primary", "success", "warning", "info", "danger", "text", "" ]; const buttonNativeTypes = ["button", "submit", "reset"]; const buttonProps = buildProps({ size: useSizeProp, disabled: Boolean, type: { type: String, values: buttonTypes, default: "" }, icon: { type: iconPropType }, nativeType: { type: String, values: buttonNativeTypes, default: "button" }, loading: Boolean, loadingIcon: { type: iconPropType, default: () => loading_default }, plain: Boolean, text: Boolean, link: Boolean, bg: Boolean, autofocus: Boolean, round: Boolean, circle: Boolean, color: String, dark: Boolean, autoInsertSpace: { type: Boolean, default: void 0 }, tag: { type: definePropType([String, Object]), default: "button" } }); const buttonEmits = { click: (evt) => evt instanceof MouseEvent }; function bound01(n, max) { if (isOnePointZero(n)) { n = "100%"; } var isPercent = isPercentage(n); n = max === 360 ? n : Math.min(max, Math.max(0, parseFloat(n))); if (isPercent) { n = parseInt(String(n * max), 10) / 100; } if (Math.abs(n - max) < 1e-6) { return 1; } if (max === 360) { n = (n < 0 ? n % max + max : n % max) / parseFloat(String(max)); } else { n = n % max / parseFloat(String(max)); } return n; } function clamp01(val) { return Math.min(1, Math.max(0, val)); } function isOnePointZero(n) { return typeof n === "string" && n.indexOf(".") !== -1 && parseFloat(n) === 1; } function isPercentage(n) { return typeof n === "string" && n.indexOf("%") !== -1; } function boundAlpha(a2) { a2 = parseFloat(a2); if (isNaN(a2) || a2 < 0 || a2 > 1) { a2 = 1; } return a2; } function convertToPercentage(n) { if (n <= 1) { return "".concat(Number(n) * 100, "%"); } return n; } function pad2(c2) { return c2.length === 1 ? "0" + c2 : String(c2); } function rgbToRgb(r, g, b2) { return { r: bound01(r, 255) * 255, g: bound01(g, 255) * 255, b: bound01(b2, 255) * 255 }; } function rgbToHsl(r, g, b2) { r = bound01(r, 255); g = bound01(g, 255); b2 = bound01(b2, 255); var max = Math.max(r, g, b2); var min = Math.min(r, g, b2); var h2 = 0; var s2 = 0; var l2 = (max + min) / 2; if (max === min) { s2 = 0; h2 = 0; } else { var d2 = max - min; s2 = l2 > 0.5 ? d2 / (2 - max - min) : d2 / (max + min); switch (max) { case r: h2 = (g - b2) / d2 + (g < b2 ? 6 : 0); break; case g: h2 = (b2 - r) / d2 + 2; break; case b2: h2 = (r - g) / d2 + 4; break; } h2 /= 6; } return { h: h2, s: s2, l: l2 }; } function hue2rgb(p2, q2, t) { if (t < 0) { t += 1; } if (t > 1) { t -= 1; } if (t < 1 / 6) { return p2 + (q2 - p2) * (6 * t); } if (t < 1 / 2) { return q2; } if (t < 2 / 3) { return p2 + (q2 - p2) * (2 / 3 - t) * 6; } return p2; } function hslToRgb(h2, s2, l2) { var r; var g; var b2; h2 = bound01(h2, 360); s2 = bound01(s2, 100); l2 = bound01(l2, 100); if (s2 === 0) { g = l2; b2 = l2; r = l2; } else { var q2 = l2 < 0.5 ? l2 * (1 + s2) : l2 + s2 - l2 * s2; var p2 = 2 * l2 - q2; r = hue2rgb(p2, q2, h2 + 1 / 3); g = hue2rgb(p2, q2, h2); b2 = hue2rgb(p2, q2, h2 - 1 / 3); } return { r: r * 255, g: g * 255, b: b2 * 255 }; } function rgbToHsv(r, g, b2) { r = bound01(r, 255); g = bound01(g, 255); b2 = bound01(b2, 255); var max = Math.max(r, g, b2); var min = Math.min(r, g, b2); var h2 = 0; var v2 = max; var d2 = max - min; var s2 = max === 0 ? 0 : d2 / max; if (max === min) { h2 = 0; } else { switch (max) { case r: h2 = (g - b2) / d2 + (g < b2 ? 6 : 0); break; case g: h2 = (b2 - r) / d2 + 2; break; case b2: h2 = (r - g) / d2 + 4; break; } h2 /= 6; } return { h: h2, s: s2, v: v2 }; } function hsvToRgb(h2, s2, v2) { h2 = bound01(h2, 360) * 6; s2 = bound01(s2, 100); v2 = bound01(v2, 100); var i = Math.floor(h2); var f2 = h2 - i; var p2 = v2 * (1 - s2); var q2 = v2 * (1 - f2 * s2); var t = v2 * (1 - (1 - f2) * s2); var mod = i % 6; var r = [v2, q2, p2, p2, t, v2][mod]; var g = [t, v2, v2, q2, p2, p2][mod]; var b2 = [p2, p2, t, v2, v2, q2][mod]; return { r: r * 255, g: g * 255, b: b2 * 255 }; } function rgbToHex(r, g, b2, allow3Char) { var hex = [ pad2(Math.round(r).toString(16)), pad2(Math.round(g).toString(16)), pad2(Math.round(b2).toString(16)) ]; if (allow3Char && hex[0].startsWith(hex[0].charAt(1)) && hex[1].startsWith(hex[1].charAt(1)) && hex[2].startsWith(hex[2].charAt(1))) { return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0); } return hex.join(""); } function rgbaToHex(r, g, b2, a2, allow4Char) { var hex = [ pad2(Math.round(r).toString(16)), pad2(Math.round(g).toString(16)), pad2(Math.round(b2).toString(16)), pad2(convertDecimalToHex(a2)) ]; if (allow4Char && hex[0].startsWith(hex[0].charAt(1)) && hex[1].startsWith(hex[1].charAt(1)) && hex[2].startsWith(hex[2].charAt(1)) && hex[3].startsWith(hex[3].charAt(1))) { return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0) + hex[3].charAt(0); } return hex.join(""); } function convertDecimalToHex(d2) { return Math.round(parseFloat(d2) * 255).toString(16); } function convertHexToDecimal(h2) { return parseIntFromHex(h2) / 255; } function parseIntFromHex(val) { return parseInt(val, 16); } function numberInputToObject(color) { return { r: color >> 16, g: (color & 65280) >> 8, b: color & 255 }; } var names = { aliceblue: "#f0f8ff", antiquewhite: "#faebd7", aqua: "#00ffff", aquamarine: "#7fffd4", azure: "#f0ffff", beige: "#f5f5dc", bisque: "#ffe4c4", black: "#000000", blanchedalmond: "#ffebcd", blue: "#0000ff", blueviolet: "#8a2be2", brown: "#a52a2a", burlywood: "#deb887", cadetblue: "#5f9ea0", chartreuse: "#7fff00", chocolate: "#d2691e", coral: "#ff7f50", cornflowerblue: "#6495ed", cornsilk: "#fff8dc", crimson: "#dc143c", cyan: "#00ffff", darkblue: "#00008b", darkcyan: "#008b8b", darkgoldenrod: "#b8860b", darkgray: "#a9a9a9", darkgreen: "#006400", darkgrey: "#a9a9a9", darkkhaki: "#bdb76b", darkmagenta: "#8b008b", darkolivegreen: "#556b2f", darkorange: "#ff8c00", darkorchid: "#9932cc", darkred: "#8b0000", darksalmon: "#e9967a", darkseagreen: "#8fbc8f", darkslateblue: "#483d8b", darkslategray: "#2f4f4f", darkslategrey: "#2f4f4f", darkturquoise: "#00ced1", darkviolet: "#9400d3", deeppink: "#ff1493", deepskyblue: "#00bfff", dimgray: "#696969", dimgrey: "#696969", dodgerblue: "#1e90ff", firebrick: "#b22222", floralwhite: "#fffaf0", forestgreen: "#228b22", fuchsia: "#ff00ff", gainsboro: "#dcdcdc", ghostwhite: "#f8f8ff", goldenrod: "#daa520", gold: "#ffd700", gray: "#808080", green: "#008000", greenyellow: "#adff2f", grey: "#808080", honeydew: "#f0fff0", hotpink: "#ff69b4", indianred: "#cd5c5c", indigo: "#4b0082", ivory: "#fffff0", khaki: "#f0e68c", lavenderblush: "#fff0f5", lavender: "#e6e6fa", lawngreen: "#7cfc00", lemonchiffon: "#fffacd", lightblue: "#add8e6", lightcoral: "#f08080", lightcyan: "#e0ffff", lightgoldenrodyellow: "#fafad2", lightgray: "#d3d3d3", lightgreen: "#90ee90", lightgrey: "#d3d3d3", lightpink: "#ffb6c1", lightsalmon: "#ffa07a", lightseagreen: "#20b2aa", lightskyblue: "#87cefa", lightslategray: "#778899", lightslategrey: "#778899", lightsteelblue: "#b0c4de", lightyellow: "#ffffe0", lime: "#00ff00", limegreen: "#32cd32", linen: "#faf0e6", magenta: "#ff00ff", maroon: "#800000", mediumaquamarine: "#66cdaa", mediumblue: "#0000cd", mediumorchid: "#ba55d3", mediumpurple: "#9370db", mediumseagreen: "#3cb371", mediumslateblue: "#7b68ee", mediumspringgreen: "#00fa9a", mediumturquoise: "#48d1cc", mediumvioletred: "#c71585", midnightblue: "#191970", mintcream: "#f5fffa", mistyrose: "#ffe4e1", moccasin: "#ffe4b5", navajowhite: "#ffdead", navy: "#000080", oldlace: "#fdf5e6", olive: "#808000", olivedrab: "#6b8e23", orange: "#ffa500", orangered: "#ff4500", orchid: "#da70d6", palegoldenrod: "#eee8aa", palegreen: "#98fb98", paleturquoise: "#afeeee", palevioletred: "#db7093", papayawhip: "#ffefd5", peachpuff: "#ffdab9", peru: "#cd853f", pink: "#ffc0cb", plum: "#dda0dd", powderblue: "#b0e0e6", purple: "#800080", rebeccapurple: "#663399", red: "#ff0000", rosybrown: "#bc8f8f", royalblue: "#4169e1", saddlebrown: "#8b4513", salmon: "#fa8072", sandybrown: "#f4a460", seagreen: "#2e8b57", seashell: "#fff5ee", sienna: "#a0522d", silver: "#c0c0c0", skyblue: "#87ceeb", slateblue: "#6a5acd", slategray: "#708090", slategrey: "#708090", snow: "#fffafa", springgreen: "#00ff7f", steelblue: "#4682b4", tan: "#d2b48c", teal: "#008080", thistle: "#d8bfd8", tomato: "#ff6347", turquoise: "#40e0d0", violet: "#ee82ee", wheat: "#f5deb3", white: "#ffffff", whitesmoke: "#f5f5f5", yellow: "#ffff00", yellowgreen: "#9acd32" }; function inputToRGB(color) { var rgb = { r: 0, g: 0, b: 0 }; var a2 = 1; var s2 = null; var v2 = null; var l2 = null; var ok = false; var format2 = false; if (typeof color === "string") { color = stringInputToObject(color); } if (typeof color === "object") { if (isValidCSSUnit(color.r) && isValidCSSUnit(color.g) && isValidCSSUnit(color.b)) { rgb = rgbToRgb(color.r, color.g, color.b); ok = true; format2 = String(color.r).substr(-1) === "%" ? "prgb" : "rgb"; } else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.v)) { s2 = convertToPercentage(color.s); v2 = convertToPercentage(color.v); rgb = hsvToRgb(color.h, s2, v2); ok = true; format2 = "hsv"; } else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.l)) { s2 = convertToPercentage(color.s); l2 = convertToPercentage(color.l); rgb = hslToRgb(color.h, s2, l2); ok = true; format2 = "hsl"; } if (Object.prototype.hasOwnProperty.call(color, "a")) { a2 = color.a; } } a2 = boundAlpha(a2); return { ok, format: color.format || format2, r: Math.min(255, Math.max(rgb.r, 0)), g: Math.min(255, Math.max(rgb.g, 0)), b: Math.min(255, Math.max(rgb.b, 0)), a: a2 }; } var CSS_INTEGER = "[-\\+]?\\d+%?"; var CSS_NUMBER = "[-\\+]?\\d*\\.\\d+%?"; var CSS_UNIT = "(?:".concat(CSS_NUMBER, ")|(?:").concat(CSS_INTEGER, ")"); var PERMISSIVE_MATCH3 = "[\\s|\\(]+(".concat(CSS_UNIT, ")[,|\\s]+(").concat(CSS_UNIT, ")[,|\\s]+(").concat(CSS_UNIT, ")\\s*\\)?"); var PERMISSIVE_MATCH4 = "[\\s|\\(]+(".concat(CSS_UNIT, ")[,|\\s]+(").concat(CSS_UNIT, ")[,|\\s]+(").concat(CSS_UNIT, ")[,|\\s]+(").concat(CSS_UNIT, ")\\s*\\)?"); var matchers = { CSS_UNIT: new RegExp(CSS_UNIT), rgb: new RegExp("rgb" + PERMISSIVE_MATCH3), rgba: new RegExp("rgba" + PERMISSIVE_MATCH4), hsl: new RegExp("hsl" + PERMISSIVE_MATCH3), hsla: new RegExp("hsla" + PERMISSIVE_MATCH4), hsv: new RegExp("hsv" + PERMISSIVE_MATCH3), hsva: new RegExp("hsva" + PERMISSIVE_MATCH4), hex3: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/, hex6: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/, hex4: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/, hex8: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/ }; function stringInputToObject(color) { color = color.trim().toLowerCase(); if (color.length === 0) { return false; } var named = false; if (names[color]) { color = names[color]; named = true; } else if (color === "transparent") { return { r: 0, g: 0, b: 0, a: 0, format: "name" }; } var match = matchers.rgb.exec(color); if (match) { return { r: match[1], g: match[2], b: match[3] }; } match = matchers.rgba.exec(color); if (match) { return { r: match[1], g: match[2], b: match[3], a: match[4] }; } match = matchers.hsl.exec(color); if (match) { return { h: match[1], s: match[2], l: match[3] }; } match = matchers.hsla.exec(color); if (match) { return { h: match[1], s: match[2], l: match[3], a: match[4] }; } match = matchers.hsv.exec(color); if (match) { return { h: match[1], s: match[2], v: match[3] }; } match = matchers.hsva.exec(color); if (match) { return { h: match[1], s: match[2], v: match[3], a: match[4] }; } match = matchers.hex8.exec(color); if (match) { return { r: parseIntFromHex(match[1]), g: parseIntFromHex(match[2]), b: parseIntFromHex(match[3]), a: convertHexToDecimal(match[4]), format: named ? "name" : "hex8" }; } match = matchers.hex6.exec(color); if (match) { return { r: parseIntFromHex(match[1]), g: parseIntFromHex(match[2]), b: parseIntFromHex(match[3]), format: named ? "name" : "hex" }; } match = matchers.hex4.exec(color); if (match) { return { r: parseIntFromHex(match[1] + match[1]), g: parseIntFromHex(match[2] + match[2]), b: parseIntFromHex(match[3] + match[3]), a: convertHexToDecimal(match[4] + match[4]), format: named ? "name" : "hex8" }; } match = matchers.hex3.exec(color); if (match) { return { r: parseIntFromHex(match[1] + match[1]), g: parseIntFromHex(match[2] + match[2]), b: parseIntFromHex(match[3] + match[3]), format: named ? "name" : "hex" }; } return false; } function isValidCSSUnit(color) { return Boolean(matchers.CSS_UNIT.exec(String(color))); } var TinyColor = ( /** @class */ function() { function TinyColor2(color, opts) { if (color === void 0) { color = ""; } if (opts === void 0) { opts = {}; } var _a2; if (color instanceof TinyColor2) { return color; } if (typeof color === "number") { color = numberInputToObject(color); } this.originalInput = color; var rgb = inputToRGB(color); this.originalInput = color; this.r = rgb.r; this.g = rgb.g; this.b = rgb.b; this.a = rgb.a; this.roundA = Math.round(100 * this.a) / 100; this.format = (_a2 = opts.format) !== null && _a2 !== void 0 ? _a2 : rgb.format; this.gradientType = opts.gradientType; if (this.r < 1) { this.r = Math.round(this.r); } if (this.g < 1) { this.g = Math.round(this.g); } if (this.b < 1) { this.b = Math.round(this.b); } this.isValid = rgb.ok; } TinyColor2.prototype.isDark = function() { return this.getBrightness() < 128; }; TinyColor2.prototype.isLight = function() { return !this.isDark(); }; TinyColor2.prototype.getBrightness = function() { var rgb = this.toRgb(); return (rgb.r * 299 + rgb.g * 587 + rgb.b * 114) / 1e3; }; TinyColor2.prototype.getLuminance = function() { var rgb = this.toRgb(); var R2; var G2; var B2; var RsRGB = rgb.r / 255; var GsRGB = rgb.g / 255; var BsRGB = rgb.b / 255; if (RsRGB <= 0.03928) { R2 = RsRGB / 12.92; } else { R2 = Math.pow((RsRGB + 0.055) / 1.055, 2.4); } if (GsRGB <= 0.03928) { G2 = GsRGB / 12.92; } else { G2 = Math.pow((GsRGB + 0.055) / 1.055, 2.4); } if (BsRGB <= 0.03928) { B2 = BsRGB / 12.92; } else { B2 = Math.pow((BsRGB + 0.055) / 1.055, 2.4); } return 0.2126 * R2 + 0.7152 * G2 + 0.0722 * B2; }; TinyColor2.prototype.getAlpha = function() { return this.a; }; TinyColor2.prototype.setAlpha = function(alpha) { this.a = boundAlpha(alpha); this.roundA = Math.round(100 * this.a) / 100; return this; }; TinyColor2.prototype.isMonochrome = function() { var s2 = this.toHsl().s; return s2 === 0; }; TinyColor2.prototype.toHsv = function() { var hsv = rgbToHsv(this.r, this.g, this.b); return { h: hsv.h * 360, s: hsv.s, v: hsv.v, a: this.a }; }; TinyColor2.prototype.toHsvString = function() { var hsv = rgbToHsv(this.r, this.g, this.b); var h2 = Math.round(hsv.h * 360); var s2 = Math.round(hsv.s * 100); var v2 = Math.round(hsv.v * 100); return this.a === 1 ? "hsv(".concat(h2, ", ").concat(s2, "%, ").concat(v2, "%)") : "hsva(".concat(h2, ", ").concat(s2, "%, ").concat(v2, "%, ").concat(this.roundA, ")"); }; TinyColor2.prototype.toHsl = function() { var hsl = rgbToHsl(this.r, this.g, this.b); return { h: hsl.h * 360, s: hsl.s, l: hsl.l, a: this.a }; }; TinyColor2.prototype.toHslString = function() { var hsl = rgbToHsl(this.r, this.g, this.b); var h2 = Math.round(hsl.h * 360); var s2 = Math.round(hsl.s * 100); var l2 = Math.round(hsl.l * 100); return this.a === 1 ? "hsl(".concat(h2, ", ").concat(s2, "%, ").concat(l2, "%)") : "hsla(".concat(h2, ", ").concat(s2, "%, ").concat(l2, "%, ").concat(this.roundA, ")"); }; TinyColor2.prototype.toHex = function(allow3Char) { if (allow3Char === void 0) { allow3Char = false; } return rgbToHex(this.r, this.g, this.b, allow3Char); }; TinyColor2.prototype.toHexString = function(allow3Char) { if (allow3Char === void 0) { allow3Char = false; } return "#" + this.toHex(allow3Char); }; TinyColor2.prototype.toHex8 = function(allow4Char) { if (allow4Char === void 0) { allow4Char = false; } return rgbaToHex(this.r, this.g, this.b, this.a, allow4Char); }; TinyColor2.prototype.toHex8String = function(allow4Char) { if (allow4Char === void 0) { allow4Char = false; } return "#" + this.toHex8(allow4Char); }; TinyColor2.prototype.toHexShortString = function(allowShortChar) { if (allowShortChar === void 0) { allowShortChar = false; } return this.a === 1 ? this.toHexString(allowShortChar) : this.toHex8String(allowShortChar); }; TinyColor2.prototype.toRgb = function() { return { r: Math.round(this.r), g: Math.round(this.g), b: Math.round(this.b), a: this.a }; }; TinyColor2.prototype.toRgbString = function() { var r = Math.round(this.r); var g = Math.round(this.g); var b2 = Math.round(this.b); return this.a === 1 ? "rgb(".concat(r, ", ").concat(g, ", ").concat(b2, ")") : "rgba(".concat(r, ", ").concat(g, ", ").concat(b2, ", ").concat(this.roundA, ")"); }; TinyColor2.prototype.toPercentageRgb = function() { var fmt = function(x2) { return "".concat(Math.round(bound01(x2, 255) * 100), "%"); }; return { r: fmt(this.r), g: fmt(this.g), b: fmt(this.b), a: this.a }; }; TinyColor2.prototype.toPercentageRgbString = function() { var rnd = function(x2) { return Math.round(bound01(x2, 255) * 100); }; return this.a === 1 ? "rgb(".concat(rnd(this.r), "%, ").concat(rnd(this.g), "%, ").concat(rnd(this.b), "%)") : "rgba(".concat(rnd(this.r), "%, ").concat(rnd(this.g), "%, ").concat(rnd(this.b), "%, ").concat(this.roundA, ")"); }; TinyColor2.prototype.toName = function() { if (this.a === 0) { return "transparent"; } if (this.a < 1) { return false; } var hex = "#" + rgbToHex(this.r, this.g, this.b, false); for (var _i = 0, _a2 = Object.entries(names); _i < _a2.length; _i++) { var _b = _a2[_i], key2 = _b[0], value = _b[1]; if (hex === value) { return key2; } } return false; }; TinyColor2.prototype.toString = function(format2) { var formatSet = Boolean(format2); format2 = format2 !== null && format2 !== void 0 ? format2 : this.format; var formattedString = false; var hasAlpha = this.a < 1 && this.a >= 0; var needsAlphaFormat = !formatSet && hasAlpha && (format2.startsWith("hex") || format2 === "name"); if (needsAlphaFormat) { if (format2 === "name" && this.a === 0) { return this.toName(); } return this.toRgbString(); } if (format2 === "rgb") { formattedString = this.toRgbString(); } if (format2 === "prgb") { formattedString = this.toPercentageRgbString(); } if (format2 === "hex" || format2 === "hex6") { formattedString = this.toHexString(); } if (format2 === "hex3") { formattedString = this.toHexString(true); } if (format2 === "hex4") { formattedString = this.toHex8String(true); } if (format2 === "hex8") { formattedString = this.toHex8String(); } if (format2 === "name") { formattedString = this.toName(); } if (format2 === "hsl") { formattedString = this.toHslString(); } if (format2 === "hsv") { formattedString = this.toHsvString(); } return formattedString || this.toHexString(); }; TinyColor2.prototype.toNumber = function() { return (Math.round(this.r) << 16) + (Math.round(this.g) << 8) + Math.round(this.b); }; TinyColor2.prototype.clone = function() { return new TinyColor2(this.toString()); }; TinyColor2.prototype.lighten = function(amount) { if (amount === void 0) { amount = 10; } var hsl = this.toHsl(); hsl.l += amount / 100; hsl.l = clamp01(hsl.l); return new TinyColor2(hsl); }; TinyColor2.prototype.brighten = function(amount) { if (amount === void 0) { amount = 10; } var rgb = this.toRgb(); rgb.r = Math.max(0, Math.min(255, rgb.r - Math.round(255 * -(amount / 100)))); rgb.g = Math.max(0, Math.min(255, rgb.g - Math.round(255 * -(amount / 100)))); rgb.b = Math.max(0, Math.min(255, rgb.b - Math.round(255 * -(amount / 100)))); return new TinyColor2(rgb); }; TinyColor2.prototype.darken = function(amount) { if (amount === void 0) { amount = 10; } var hsl = this.toHsl(); hsl.l -= amount / 100; hsl.l = clamp01(hsl.l); return new TinyColor2(hsl); }; TinyColor2.prototype.tint = function(amount) { if (amount === void 0) { amount = 10; } return this.mix("white", amount); }; TinyColor2.prototype.shade = function(amount) { if (amount === void 0) { amount = 10; } return this.mix("black", amount); }; TinyColor2.prototype.desaturate = function(amount) { if (amount === void 0) { amount = 10; } var hsl = this.toHsl(); hsl.s -= amount / 100; hsl.s = clamp01(hsl.s); return new TinyColor2(hsl); }; TinyColor2.prototype.saturate = function(amount) { if (amount === void 0) { amount = 10; } var hsl = this.toHsl(); hsl.s += amount / 100; hsl.s = clamp01(hsl.s); return new TinyColor2(hsl); }; TinyColor2.prototype.greyscale = function() { return this.desaturate(100); }; TinyColor2.prototype.spin = function(amount) { var hsl = this.toHsl(); var hue = (hsl.h + amount) % 360; hsl.h = hue < 0 ? 360 + hue : hue; return new TinyColor2(hsl); }; TinyColor2.prototype.mix = function(color, amount) { if (amount === void 0) { amount = 50; } var rgb1 = this.toRgb(); var rgb2 = new TinyColor2(color).toRgb(); var p2 = amount / 100; var rgba = { r: (rgb2.r - rgb1.r) * p2 + rgb1.r, g: (rgb2.g - rgb1.g) * p2 + rgb1.g, b: (rgb2.b - rgb1.b) * p2 + rgb1.b, a: (rgb2.a - rgb1.a) * p2 + rgb1.a }; return new TinyColor2(rgba); }; TinyColor2.prototype.analogous = function(results, slices) { if (results === void 0) { results = 6; } if (slices === void 0) { slices = 30; } var hsl = this.toHsl(); var part = 360 / slices; var ret = [this]; for (hsl.h = (hsl.h - (part * results >> 1) + 720) % 360; --results; ) { hsl.h = (hsl.h + part) % 360; ret.push(new TinyColor2(hsl)); } return ret; }; TinyColor2.prototype.complement = function() { var hsl = this.toHsl(); hsl.h = (hsl.h + 180) % 360; return new TinyColor2(hsl); }; TinyColor2.prototype.monochromatic = function(results) { if (results === void 0) { results = 6; } var hsv = this.toHsv(); var h2 = hsv.h; var s2 = hsv.s; var v2 = hsv.v; var res = []; var modification = 1 / results; while (results--) { res.push(new TinyColor2({ h: h2, s: s2, v: v2 })); v2 = (v2 + modification) % 1; } return res; }; TinyColor2.prototype.splitcomplement = function() { var hsl = this.toHsl(); var h2 = hsl.h; return [ this, new TinyColor2({ h: (h2 + 72) % 360, s: hsl.s, l: hsl.l }), new TinyColor2({ h: (h2 + 216) % 360, s: hsl.s, l: hsl.l }) ]; }; TinyColor2.prototype.onBackground = function(background) { var fg = this.toRgb(); var bg = new TinyColor2(background).toRgb(); var alpha = fg.a + bg.a * (1 - fg.a); return new TinyColor2({ r: (fg.r * fg.a + bg.r * bg.a * (1 - fg.a)) / alpha, g: (fg.g * fg.a + bg.g * bg.a * (1 - fg.a)) / alpha, b: (fg.b * fg.a + bg.b * bg.a * (1 - fg.a)) / alpha, a: alpha }); }; TinyColor2.prototype.triad = function() { return this.polyad(3); }; TinyColor2.prototype.tetrad = function() { return this.polyad(4); }; TinyColor2.prototype.polyad = function(n) { var hsl = this.toHsl(); var h2 = hsl.h; var result = [this]; var increment = 360 / n; for (var i = 1; i < n; i++) { result.push(new TinyColor2({ h: (h2 + i * increment) % 360, s: hsl.s, l: hsl.l })); } return result; }; TinyColor2.prototype.equals = function(color) { return this.toRgbString() === new TinyColor2(color).toRgbString(); }; return TinyColor2; }() ); function darken(color, amount = 20) { return color.mix("#141414", amount).toString(); } function useButtonCustomStyle(props) { const _disabled = useFormDisabled(); const ns = useNamespace("button"); return vue.computed(() => { let styles = {}; const buttonColor = props.color; if (buttonColor) { 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__$i = vue.defineComponent({ name: "ElButton" }); const _sfc_main$w = /* @__PURE__ */ vue.defineComponent({ ...__default__$i, 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); 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(ns).b(), vue.unref(ns).m(vue.unref(_type)), vue.unref(ns).m(vue.unref(_size)), vue.unref(ns).is("disabled", vue.unref(_disabled)), vue.unref(ns).is("loading", _ctx.loading), vue.unref(ns).is("plain", _ctx.plain), vue.unref(ns).is("round", _ctx.round), vue.unref(ns).is("circle", _ctx.circle), vue.unref(ns).is("text", _ctx.text), vue.unref(ns).is("link", _ctx.link), vue.unref(ns).is("has-bg", _ctx.bg) ], 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$w, [["__file", "button.vue"]]); const buttonGroupProps = { size: buttonProps.size, type: buttonProps.type }; const __default__$h = vue.defineComponent({ name: "ElButtonGroup" }); const _sfc_main$v = /* @__PURE__ */ vue.defineComponent({ ...__default__$h, 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$v, [["__file", "button-group.vue"]]); const ElButton = withInstall(Button, { ButtonGroup }); withNoopInstall(ButtonGroup); var commonjsGlobal = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {}; function getDefaultExportFromCjs(x2) { return x2 && x2.__esModule && Object.prototype.hasOwnProperty.call(x2, "default") ? x2["default"] : x2; } function getAugmentedNamespace(n) { if (n.__esModule) return n; var f2 = n.default; if (typeof f2 == "function") { var a2 = function a3() { if (this instanceof a3) { return Reflect.construct(f2, arguments, this.constructor); } return f2.apply(this, arguments); }; a2.prototype = f2.prototype; } else a2 = {}; Object.defineProperty(a2, "__esModule", { value: true }); Object.keys(n).forEach(function(k) { var d2 = Object.getOwnPropertyDescriptor(n, k); Object.defineProperty(a2, k, d2.get ? d2 : { enumerable: true, get: function() { return n[k]; } }); }); return a2; } const nodeList = /* @__PURE__ */ new Map(); let startClick; if (isClient) { document.addEventListener("mousedown", (e) => startClick = e); document.addEventListener("mouseup", (e) => { for (const handlers of nodeList.values()) { for (const { documentHandler } of handlers) { documentHandler(e, startClick); } } }); } function createDocumentHandler(el, binding) { let excludes = []; if (Array.isArray(binding.arg)) { excludes = binding.arg; } else if (isElement(binding.arg)) { excludes.push(binding.arg); } return function(mouseup, mousedown) { const popperRef = binding.instance.popperRef; const mouseUpTarget = mouseup.target; const mouseDownTarget = mousedown == null ? void 0 : mousedown.target; const isBound = !binding || !binding.instance; const isTargetExists = !mouseUpTarget || !mouseDownTarget; const isContainedByEl = el.contains(mouseUpTarget) || el.contains(mouseDownTarget); const isSelf = el === mouseUpTarget; const isTargetExcluded = excludes.length && excludes.some((item) => item == null ? void 0 : item.contains(mouseUpTarget)) || excludes.length && excludes.includes(mouseDownTarget); const isContainedByPopper = popperRef && (popperRef.contains(mouseUpTarget) || popperRef.contains(mouseDownTarget)); if (isBound || isTargetExists || isContainedByEl || isSelf || isTargetExcluded || isContainedByPopper) { return; } binding.value(mouseup, mousedown); }; } const ClickOutside = { beforeMount(el, binding) { if (!nodeList.has(el)) { nodeList.set(el, []); } nodeList.get(el).push({ documentHandler: createDocumentHandler(el, binding), bindingFn: binding.value }); }, updated(el, binding) { if (!nodeList.has(el)) { nodeList.set(el, []); } const handlers = nodeList.get(el); const oldHandlerIndex = handlers.findIndex((item) => item.bindingFn === binding.oldValue); const newHandler = { documentHandler: createDocumentHandler(el, binding), bindingFn: binding.value }; if (oldHandlerIndex >= 0) { handlers.splice(oldHandlerIndex, 1, newHandler); } else { handlers.push(newHandler); } }, unmounted(el) { nodeList.delete(el); } }; const REPEAT_INTERVAL = 100; const REPEAT_DELAY = 600; const vRepeatClick = { beforeMount(el, binding) { const value = binding.value; const { interval = REPEAT_INTERVAL, delay = REPEAT_DELAY } = isFunction$1(value) ? {} : value; let intervalId; let delayId; const handler = () => isFunction$1(value) ? value() : value.handler(); const clear = () => { if (delayId) { clearTimeout(delayId); delayId = void 0; } if (intervalId) { clearInterval(intervalId); intervalId = void 0; } }; el.addEventListener("mousedown", (evt) => { if (evt.button !== 0) return; clear(); handler(); document.addEventListener("mouseup", () => clear(), { once: true }); delayId = setTimeout(() => { intervalId = setInterval(() => { handler(); }, interval); }, delay); }); } }; 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(event2) { const normalized = Y(event2); callback && Reflect.apply(callback, this, [event2, normalized]); }; element.addEventListener("wheel", fn2, { passive: true }); } }; const Mousewheel = { beforeMount(el, binding) { mousewheel(el, binding.value); } }; const checkboxProps = { modelValue: { type: [Number, String, Boolean], default: void 0 }, label: { type: [String, Boolean, Number, Object], default: void 0 }, value: { type: [String, Boolean, Number, Object], default: void 0 }, indeterminate: Boolean, disabled: Boolean, checked: Boolean, name: { type: String, default: void 0 }, trueValue: { type: [String, Number], default: void 0 }, falseValue: { type: [String, Number], default: void 0 }, trueLabel: { type: [String, Number], default: void 0 }, falseLabel: { type: [String, Number], default: void 0 }, id: { type: String, default: void 0 }, controls: { type: String, default: void 0 }, border: Boolean, size: useSizeProp, tabindex: [String, Number], validateEvent: { type: Boolean, default: true } }; const checkboxEmits = { [UPDATE_MODEL_EVENT]: (val) => isString(val) || isNumber(val) || isBoolean(val), change: (val) => isString(val) || isNumber(val) || isBoolean(val) }; const checkboxGroupContextKey = Symbol("checkboxGroupContextKey"); const useCheckboxDisabled = ({ model, isChecked }) => { const checkboxGroup = vue.inject(checkboxGroupContextKey, void 0); const isLimitDisabled = vue.computed(() => { var _a2, _b; const max = (_a2 = checkboxGroup == null ? void 0 : checkboxGroup.max) == null ? void 0 : _a2.value; const min = (_b = checkboxGroup == null ? void 0 : checkboxGroup.min) == null ? void 0 : _b.value; return !isUndefined(max) && model.value.length >= max && !isChecked.value || !isUndefined(min) && model.value.length <= min && isChecked.value; }); const isDisabled = useFormDisabled(vue.computed(() => (checkboxGroup == null ? void 0 : checkboxGroup.disabled.value) || isLimitDisabled.value)); return { isDisabled, isLimitDisabled }; }; const useCheckboxEvent = (props, { model, isLimitExceeded, hasOwnLabel, isDisabled, isLabeledByFormItem }) => { const checkboxGroup = vue.inject(checkboxGroupContextKey, void 0); const { formItem } = useFormItem(); const { emit } = vue.getCurrentInstance(); function getLabeledValue(value) { var _a2, _b, _c, _d; return [true, props.trueValue, props.trueLabel].includes(value) ? (_b = (_a2 = props.trueValue) != null ? _a2 : props.trueLabel) != null ? _b : true : (_d = (_c = props.falseValue) != null ? _c : props.falseLabel) != null ? _d : false; } function emitChangeEvent(checked, e) { emit("change", 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 ? void 0 : checkboxGroup.validateEvent) || props.validateEvent); vue.watch(() => props.modelValue, () => { if (validateEvent.value) { formItem == null ? void 0 : formItem.validate("change").catch((err) => debugWarn()); } }); return { handleChange, onClickRoot }; }; const useCheckboxModel = (props) => { const selfModel = vue.ref(false); const { emit } = vue.getCurrentInstance(); const checkboxGroup = vue.inject(checkboxGroupContextKey, void 0); const isGroup = vue.computed(() => isUndefined(checkboxGroup) === false); const isLimitExceeded = vue.ref(false); const model = vue.computed({ get() { var _a2, _b; return isGroup.value ? (_a2 = checkboxGroup == null ? void 0 : checkboxGroup.modelValue) == null ? void 0 : _a2.value : (_b = props.modelValue) != null ? _b : selfModel.value; }, set(val) { var _a2, _b; if (isGroup.value && isArray$1(val)) { isLimitExceeded.value = ((_a2 = checkboxGroup == null ? void 0 : checkboxGroup.max) == null ? void 0 : _a2.value) !== void 0 && val.length > (checkboxGroup == null ? void 0 : checkboxGroup.max.value) && val.length > model.value.length; isLimitExceeded.value === false && ((_b = checkboxGroup == null ? void 0 : checkboxGroup.changeEvent) == null ? void 0 : _b.call(checkboxGroup, val)); } else { emit(UPDATE_MODEL_EVENT, val); selfModel.value = val; } } }); return { model, isGroup, isLimitExceeded }; }; const useCheckboxStatus = (props, slots, { model }) => { const checkboxGroup = vue.inject(checkboxGroupContextKey, void 0); const isFocused = vue.ref(false); const actualValue = vue.computed(() => { if (!isPropAbsent(props.value)) { return props.value; } return props.label; }); const isChecked = vue.computed(() => { const value = model.value; if (isBoolean(value)) { return value; } else if (isArray$1(value)) { if (isObject$1(actualValue.value)) { return value.map(vue.toRaw).some((o2) => isEqual(o2, actualValue.value)); } else { return value.map(vue.toRaw).includes(actualValue.value); } } else if (value !== null && value !== void 0) { return value === props.trueValue || value === props.trueLabel; } else { return !!value; } }); const checkboxButtonSize = useFormSize(vue.computed(() => { var _a2; return (_a2 = checkboxGroup == null ? void 0 : checkboxGroup.size) == null ? void 0 : _a2.value; }), { prop: true }); const checkboxSize = useFormSize(vue.computed(() => { var _a2; return (_a2 = checkboxGroup == null ? void 0 : checkboxGroup.size) == null ? void 0 : _a2.value; })); const hasOwnLabel = vue.computed(() => { return !!slots.default || !isPropAbsent(actualValue.value); }); return { checkboxButtonSize, isChecked, isFocused, checkboxSize, hasOwnLabel, actualValue }; }; const useCheckbox = (props, slots) => { const { formItem: elFormItem } = useFormItem(); const { model, isGroup, isLimitExceeded } = useCheckboxModel(props); const { isFocused, isChecked, checkboxButtonSize, checkboxSize, hasOwnLabel, actualValue } = useCheckboxStatus(props, slots, { model }); const { isDisabled } = useCheckboxDisabled({ model, isChecked }); const { inputId, isLabeledByFormItem } = useFormItemInputId(props, { formItemContext: elFormItem, disableIdGeneration: hasOwnLabel, disableIdManagement: isGroup }); const { handleChange, onClickRoot } = useCheckboxEvent(props, { model, isLimitExceeded, hasOwnLabel, isDisabled, isLabeledByFormItem }); const setStoreValue = () => { function addToStore() { var _a2, _b; if (isArray$1(model.value) && !model.value.includes(actualValue.value)) { model.value.push(actualValue.value); } else { model.value = (_b = (_a2 = props.trueValue) != null ? _a2 : props.trueLabel) != null ? _b : true; } } props.checked && addToStore(); }; setStoreValue(); useDeprecated({ from: "label act as value", replacement: "value", version: "3.0.0", scope: "el-checkbox", ref: "https://element-plus.org/en-US/component/checkbox.html" }, vue.computed(() => isGroup.value && isPropAbsent(props.value))); useDeprecated({ from: "true-label", replacement: "true-value", version: "3.0.0", scope: "el-checkbox", ref: "https://element-plus.org/en-US/component/checkbox.html" }, vue.computed(() => !!props.trueLabel)); useDeprecated({ from: "false-label", replacement: "false-value", version: "3.0.0", scope: "el-checkbox", ref: "https://element-plus.org/en-US/component/checkbox.html" }, vue.computed(() => !!props.falseLabel)); return { inputId, isLabeledByFormItem, isChecked, isDisabled, isFocused, checkboxButtonSize, checkboxSize, hasOwnLabel, model, actualValue, handleChange, onClickRoot }; }; const _hoisted_1$h = ["id", "indeterminate", "name", "tabindex", "disabled", "true-value", "false-value"]; const _hoisted_2$d = ["id", "indeterminate", "disabled", "value", "name", "tabindex"]; const __default__$g = vue.defineComponent({ name: "ElCheckbox" }); const _sfc_main$u = /* @__PURE__ */ vue.defineComponent({ ...__default__$g, 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.controls : null, onClick: vue.unref(onClickRoot) }, { default: vue.withCtx(() => { var _a2, _b; 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": _cache[0] || (_cache[0] = ($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": (_a2 = _ctx.trueValue) != null ? _a2 : _ctx.trueLabel, "false-value": (_b = _ctx.falseValue) != null ? _b : _ctx.falseLabel, onChange: _cache[1] || (_cache[1] = (...args) => vue.unref(handleChange) && vue.unref(handleChange)(...args)), onFocus: _cache[2] || (_cache[2] = ($event) => isFocused.value = true), onBlur: _cache[3] || (_cache[3] = ($event) => isFocused.value = false), onClick: _cache[4] || (_cache[4] = vue.withModifiers(() => { }, ["stop"])) }, null, 42, _hoisted_1$h)), [ [vue.vModelCheckbox, vue.unref(model)] ]) : vue.withDirectives((vue.openBlock(), vue.createElementBlock("input", { key: 1, id: vue.unref(inputId), "onUpdate:modelValue": _cache[5] || (_cache[5] = ($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: _cache[6] || (_cache[6] = (...args) => vue.unref(handleChange) && vue.unref(handleChange)(...args)), onFocus: _cache[7] || (_cache[7] = ($event) => isFocused.value = true), onBlur: _cache[8] || (_cache[8] = ($event) => isFocused.value = false), onClick: _cache[9] || (_cache[9] = vue.withModifiers(() => { }, ["stop"])) }, null, 42, _hoisted_2$d)), [ [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$u, [["__file", "checkbox.vue"]]); const _hoisted_1$g = ["name", "tabindex", "disabled", "true-value", "false-value"]; const _hoisted_2$c = ["name", "tabindex", "disabled", "value"]; const __default__$f = vue.defineComponent({ name: "ElCheckboxButton" }); const _sfc_main$t = /* @__PURE__ */ vue.defineComponent({ ...__default__$f, props: checkboxProps, emits: checkboxEmits, setup(__props) { const props = __props; const slots = vue.useSlots(); const { isFocused, isChecked, isDisabled, checkboxButtonSize, model, actualValue, handleChange } = useCheckbox(props, slots); const checkboxGroup = vue.inject(checkboxGroupContextKey, void 0); const ns = useNamespace("checkbox"); const activeStyle = vue.computed(() => { var _a2, _b, _c, _d; const fillValue = (_b = (_a2 = checkboxGroup == null ? void 0 : checkboxGroup.fill) == null ? void 0 : _a2.value) != null ? _b : ""; return { backgroundColor: fillValue, borderColor: fillValue, color: (_d = (_c = checkboxGroup == null ? void 0 : checkboxGroup.textColor) == null ? void 0 : _c.value) != null ? _d : "", boxShadow: fillValue ? `-1px 0 0 0 ${fillValue}` : void 0 }; }); const labelKls = vue.computed(() => { return [ ns.b("button"), ns.bm("button", checkboxButtonSize.value), ns.is("disabled", isDisabled.value), ns.is("checked", isChecked.value), ns.is("focus", isFocused.value) ]; }); return (_ctx, _cache) => { var _a2, _b; 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": _cache[0] || (_cache[0] = ($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": (_a2 = _ctx.trueValue) != null ? _a2 : _ctx.trueLabel, "false-value": (_b = _ctx.falseValue) != null ? _b : _ctx.falseLabel, onChange: _cache[1] || (_cache[1] = (...args) => vue.unref(handleChange) && vue.unref(handleChange)(...args)), onFocus: _cache[2] || (_cache[2] = ($event) => isFocused.value = true), onBlur: _cache[3] || (_cache[3] = ($event) => isFocused.value = false), onClick: _cache[4] || (_cache[4] = vue.withModifiers(() => { }, ["stop"])) }, null, 42, _hoisted_1$g)), [ [vue.vModelCheckbox, vue.unref(model)] ]) : vue.withDirectives((vue.openBlock(), vue.createElementBlock("input", { key: 1, "onUpdate:modelValue": _cache[5] || (_cache[5] = ($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: _cache[6] || (_cache[6] = (...args) => vue.unref(handleChange) && vue.unref(handleChange)(...args)), onFocus: _cache[7] || (_cache[7] = ($event) => isFocused.value = true), onBlur: _cache[8] || (_cache[8] = ($event) => isFocused.value = false), onClick: _cache[9] || (_cache[9] = vue.withModifiers(() => { }, ["stop"])) }, null, 42, _hoisted_2$c)), [ [vue.vModelCheckbox, vue.unref(model)] ]), _ctx.$slots.default || _ctx.label ? (vue.openBlock(), vue.createElementBlock("span", { key: 2, class: vue.normalizeClass(vue.unref(ns).be("button", "inner")), style: vue.normalizeStyle(vue.unref(isChecked) ? vue.unref(activeStyle) : void 0) }, [ vue.renderSlot(_ctx.$slots, "default", {}, () => [ vue.createTextVNode(vue.toDisplayString(_ctx.label), 1) ]) ], 6)) : vue.createCommentVNode("v-if", true) ], 2); }; } }); var CheckboxButton = /* @__PURE__ */ _export_sfc$1(_sfc_main$t, [["__file", "checkbox-button.vue"]]); const checkboxGroupProps = buildProps({ modelValue: { type: definePropType(Array), default: () => [] }, disabled: Boolean, min: Number, max: Number, size: useSizeProp, label: String, fill: String, textColor: String, tag: { type: String, default: "div" }, validateEvent: { type: Boolean, default: true } }); const checkboxGroupEmits = { [UPDATE_MODEL_EVENT]: (val) => isArray$1(val), change: (val) => isArray$1(val) }; const __default__$e = vue.defineComponent({ name: "ElCheckboxGroup" }); const _sfc_main$s = /* @__PURE__ */ vue.defineComponent({ ...__default__$e, 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 ? void 0 : formItem.validate("change").catch((err) => debugWarn()); } }); return (_ctx, _cache) => { var _a2; return vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.tag), { id: vue.unref(groupId), class: vue.normalizeClass(vue.unref(ns).b("group")), role: "group", "aria-label": !vue.unref(isLabeledByFormItem) ? _ctx.label || "checkbox-group" : void 0, "aria-labelledby": vue.unref(isLabeledByFormItem) ? (_a2 = vue.unref(formItem)) == null ? void 0 : _a2.labelId : void 0 }, { default: vue.withCtx(() => [ vue.renderSlot(_ctx.$slots, "default") ]), _: 3 }, 8, ["id", "class", "aria-label", "aria-labelledby"]); }; } }); var CheckboxGroup = /* @__PURE__ */ _export_sfc$1(_sfc_main$s, [["__file", "checkbox-group.vue"]]); const ElCheckbox = withInstall(Checkbox, { CheckboxButton, CheckboxGroup }); withNoopInstall(CheckboxButton); const ElCheckboxGroup$1 = withNoopInstall(CheckboxGroup); const tagProps = buildProps({ type: { type: String, values: ["primary", "success", "info", "warning", "danger"], default: "primary" }, closable: Boolean, disableTransitions: Boolean, hit: Boolean, color: String, size: { type: String, values: componentSizes }, effect: { type: String, values: ["dark", "light", "plain"], default: "light" }, round: Boolean }); const tagEmits = { close: (evt) => evt instanceof MouseEvent, click: (evt) => evt instanceof MouseEvent }; const __default__$d = vue.defineComponent({ name: "ElTag" }); const _sfc_main$r = /* @__PURE__ */ vue.defineComponent({ ...__default__$d, props: tagProps, emits: tagEmits, setup(__props, { emit }) { const props = __props; const tagSize = useFormSize(); const ns = useNamespace("tag"); const containerKls = vue.computed(() => { const { type, hit, effect, closable, round } = props; return [ ns.b(), ns.is("closable", closable), ns.m(type || "primary"), ns.m(tagSize.value), ns.m(effect), ns.is("hit", hit), ns.is("round", round) ]; }); const handleClose = (event2) => { emit("close", event2); }; const handleClick = (event2) => { emit("click", event2); }; return (_ctx, _cache) => { return _ctx.disableTransitions ? (vue.openBlock(), vue.createElementBlock("span", { key: 0, class: vue.normalizeClass(vue.unref(containerKls)), style: vue.normalizeStyle({ backgroundColor: _ctx.color }), onClick: handleClick }, [ vue.createElementVNode("span", { class: vue.normalizeClass(vue.unref(ns).e("content")) }, [ vue.renderSlot(_ctx.$slots, "default") ], 2), _ctx.closable ? (vue.openBlock(), vue.createBlock(vue.unref(ElIcon), { key: 0, class: vue.normalizeClass(vue.unref(ns).e("close")), onClick: vue.withModifiers(handleClose, ["stop"]) }, { default: vue.withCtx(() => [ vue.createVNode(vue.unref(close_default)) ]), _: 1 }, 8, ["class", "onClick"])) : vue.createCommentVNode("v-if", true) ], 6)) : (vue.openBlock(), vue.createBlock(vue.Transition, { key: 1, name: `${vue.unref(ns).namespace.value}-zoom-in-center`, appear: "" }, { default: vue.withCtx(() => [ vue.createElementVNode("span", { class: vue.normalizeClass(vue.unref(containerKls)), style: vue.normalizeStyle({ backgroundColor: _ctx.color }), onClick: handleClick }, [ vue.createElementVNode("span", { class: vue.normalizeClass(vue.unref(ns).e("content")) }, [ vue.renderSlot(_ctx.$slots, "default") ], 2), _ctx.closable ? (vue.openBlock(), vue.createBlock(vue.unref(ElIcon), { key: 0, class: vue.normalizeClass(vue.unref(ns).e("close")), onClick: vue.withModifiers(handleClose, ["stop"]) }, { default: vue.withCtx(() => [ vue.createVNode(vue.unref(close_default)) ]), _: 1 }, 8, ["class", "onClick"])) : vue.createCommentVNode("v-if", true) ], 6) ]), _: 3 }, 8, ["name"])); }; } }); var Tag = /* @__PURE__ */ _export_sfc$1(_sfc_main$r, [["__file", "tag.vue"]]); const ElTag = withInstall(Tag); const rowContextKey = Symbol("rowContextKey"); const RowJustify = [ "start", "center", "end", "space-around", "space-between", "space-evenly" ]; const RowAlign = ["top", "middle", "bottom"]; const rowProps = buildProps({ tag: { type: String, default: "div" }, gutter: { type: Number, default: 0 }, justify: { type: String, values: RowJustify, default: "start" }, align: { type: String, values: RowAlign } }); const __default__$c = vue.defineComponent({ name: "ElRow" }); const _sfc_main$q = /* @__PURE__ */ vue.defineComponent({ ...__default__$c, props: rowProps, setup(__props) { const props = __props; const ns = useNamespace("row"); const gutter = vue.computed(() => props.gutter); vue.provide(rowContextKey, { gutter }); const style = vue.computed(() => { const styles = {}; if (!props.gutter) { return styles; } styles.marginRight = styles.marginLeft = `-${props.gutter / 2}px`; return styles; }); const rowKls = vue.computed(() => [ ns.b(), ns.is(`justify-${props.justify}`, props.justify !== "start"), ns.is(`align-${props.align}`, !!props.align) ]); return (_ctx, _cache) => { return vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.tag), { class: vue.normalizeClass(vue.unref(rowKls)), style: vue.normalizeStyle(vue.unref(style)) }, { default: vue.withCtx(() => [ vue.renderSlot(_ctx.$slots, "default") ]), _: 3 }, 8, ["class", "style"]); }; } }); var Row = /* @__PURE__ */ _export_sfc$1(_sfc_main$q, [["__file", "row.vue"]]); const ElRow = withInstall(Row); const colProps = buildProps({ tag: { type: String, default: "div" }, span: { type: Number, default: 24 }, offset: { type: Number, default: 0 }, pull: { type: Number, default: 0 }, push: { type: Number, default: 0 }, xs: { type: definePropType([Number, Object]), default: () => mutable({}) }, sm: { type: definePropType([Number, Object]), default: () => mutable({}) }, md: { type: definePropType([Number, Object]), default: () => mutable({}) }, lg: { type: definePropType([Number, Object]), default: () => mutable({}) }, xl: { type: definePropType([Number, Object]), default: () => mutable({}) } }); const __default__$b = vue.defineComponent({ name: "ElCol" }); const _sfc_main$p = /* @__PURE__ */ vue.defineComponent({ ...__default__$b, props: colProps, setup(__props) { const props = __props; const { gutter } = vue.inject(rowContextKey, { gutter: vue.computed(() => 0) }); const ns = useNamespace("col"); const style = vue.computed(() => { const styles = {}; if (gutter.value) { styles.paddingLeft = styles.paddingRight = `${gutter.value / 2}px`; } return styles; }); const colKls = vue.computed(() => { const classes = []; const pos = ["span", "offset", "pull", "push"]; pos.forEach((prop) => { const size = props[prop]; if (isNumber(size)) { if (prop === "span") classes.push(ns.b(`${props[prop]}`)); else if (size > 0) classes.push(ns.b(`${prop}-${props[prop]}`)); } }); const sizes = ["xs", "sm", "md", "lg", "xl"]; sizes.forEach((size) => { if (isNumber(props[size])) { classes.push(ns.b(`${size}-${props[size]}`)); } else if (isObject$1(props[size])) { Object.entries(props[size]).forEach(([prop, sizeProp]) => { classes.push(prop !== "span" ? ns.b(`${size}-${prop}-${sizeProp}`) : ns.b(`${size}-${sizeProp}`)); }); } }); if (gutter.value) { classes.push(ns.is("guttered")); } return [ns.b(), classes]; }); return (_ctx, _cache) => { return vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.tag), { class: vue.normalizeClass(vue.unref(colKls)), style: vue.normalizeStyle(vue.unref(style)) }, { default: vue.withCtx(() => [ vue.renderSlot(_ctx.$slots, "default") ]), _: 3 }, 8, ["class", "style"]); }; } }); var Col = /* @__PURE__ */ _export_sfc$1(_sfc_main$p, [["__file", "col.vue"]]); const ElCol = withInstall(Col); const overlayProps = buildProps({ mask: { type: Boolean, default: true }, customMaskEvent: { type: Boolean, default: false }, overlayClass: { type: definePropType([ String, Array, Object ]) }, zIndex: { type: definePropType([String, Number]) } }); const overlayEmits = { click: (evt) => evt instanceof MouseEvent }; const BLOCK = "overlay"; var Overlay = vue.defineComponent({ name: "ElOverlay", props: overlayProps, emits: overlayEmits, setup(props, { slots, emit }) { const ns = useNamespace(BLOCK); const onMaskClick = (e) => { emit("click", e); }; const { onClick, onMousedown, onMouseup } = useSameTarget(props.customMaskEvent ? void 0 : onMaskClick); return () => { return props.mask ? vue.createVNode("div", { class: [ns.b(), props.overlayClass], style: { zIndex: props.zIndex }, onClick, onMousedown, onMouseup }, [vue.renderSlot(slots, "default")], PatchFlags.STYLE | PatchFlags.CLASS | PatchFlags.PROPS, ["onClick", "onMouseup", "onMousedown"]) : vue.h("div", { class: props.overlayClass, style: { zIndex: props.zIndex, position: "fixed", top: "0px", right: "0px", bottom: "0px", left: "0px" } }, [vue.renderSlot(slots, "default")]); }; } }); const ElOverlay = Overlay; const dialogInjectionKey = Symbol("dialogInjectionKey"); const dialogContentProps = buildProps({ center: Boolean, alignCenter: Boolean, closeIcon: { type: iconPropType }, draggable: Boolean, overflow: Boolean, fullscreen: Boolean, showClose: { type: Boolean, default: true }, title: { type: String, default: "" }, ariaLevel: { type: String, default: "2" } }); const dialogContentEmits = { close: () => true }; const _hoisted_1$f = ["aria-level"]; const _hoisted_2$b = ["aria-label"]; const _hoisted_3$7 = ["id"]; const __default__$a = vue.defineComponent({ name: "ElDialogContent" }); const _sfc_main$o = /* @__PURE__ */ vue.defineComponent({ ...__default__$a, props: dialogContentProps, emits: dialogContentEmits, setup(__props) { 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); useDraggable(dialogRef, headerRef, draggable, overflow); 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"), { "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, _hoisted_1$f) ]), _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: _cache[0] || (_cache[0] = ($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, _hoisted_2$b)) : vue.createCommentVNode("v-if", true) ], 2), vue.createElementVNode("div", { id: vue.unref(bodyId), class: vue.normalizeClass(vue.unref(ns).e("body")) }, [ vue.renderSlot(_ctx.$slots, "default") ], 10, _hoisted_3$7), _ctx.$slots.footer ? (vue.openBlock(), vue.createElementBlock("footer", { key: 0, class: vue.normalizeClass(vue.unref(ns).e("footer")) }, [ vue.renderSlot(_ctx.$slots, "footer") ], 2)) : vue.createCommentVNode("v-if", true) ], 6); }; } }); var ElDialogContent = /* @__PURE__ */ _export_sfc$1(_sfc_main$o, [["__file", "dialog-content.vue"]]); const dialogProps = buildProps({ ...dialogContentProps, appendToBody: Boolean, appendTo: { type: definePropType(String), 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, width: { type: [String, Number] }, zIndex: { type: Number }, trapFocus: { type: Boolean, default: false }, 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 useDialog = (props, targetRef) => { var _a2; const instance = vue.getCurrentInstance(); const emit = instance.emit; const { nextZIndex } = useZIndex(); let lastPosition = ""; const titleId = useId(); const bodyId = useId(); const visible = vue.ref(false); const closed = vue.ref(false); const rendered = vue.ref(false); const zIndex2 = vue.ref((_a2 = props.zIndex) != null ? _a2 : nextZIndex()); let openTimer = void 0; let closeTimer = void 0; const namespace = useGlobalConfig("namespace", defaultNamespace); const style = vue.computed(() => { const style2 = {}; const varPrefix = `--${namespace.value}-dialog`; if (!props.fullscreen) { if (props.top) { style2[`${varPrefix}-margin-top`] = props.top; } if (props.width) { style2[`${varPrefix}-width`] = addUnit(props.width); } } return style2; }); const overlayDialogStyle = vue.computed(() => { if (props.alignCenter) { return { display: "flex" }; } return {}; }); function afterEnter() { emit("opened"); } function afterLeave() { emit("closed"); emit(UPDATE_MODEL_EVENT, false); if (props.destroyOnClose) { rendered.value = false; } } function beforeLeave() { emit("close"); } function open() { closeTimer == null ? void 0 : closeTimer(); openTimer == null ? void 0 : openTimer(); if (props.openDelay && props.openDelay > 0) { ({ stop: openTimer } = useTimeoutFn(() => doOpen(), props.openDelay)); } else { doOpen(); } } function close() { openTimer == null ? void 0 : openTimer(); closeTimer == null ? void 0 : closeTimer(); if (props.closeDelay && props.closeDelay > 0) { ({ stop: closeTimer } = useTimeoutFn(() => doClose(), props.closeDelay)); } else { doClose(); } } function handleClose() { function hide(shouldCancel) { if (shouldCancel) return; closed.value = true; visible.value = false; } if (props.beforeClose) { props.beforeClose(hide); } else { close(); } } function onModalClick() { if (props.closeOnClickModal) { handleClose(); } } function doOpen() { if (!isClient) return; visible.value = true; } function doClose() { visible.value = false; } function onOpenAutoFocus() { emit("openAutoFocus"); } function onCloseAutoFocus() { emit("closeAutoFocus"); } function onFocusoutPrevented(event2) { var _a22; if (((_a22 = event2.detail) == null ? void 0 : _a22.focusReason) === "pointer") { event2.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.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 _hoisted_1$e = ["aria-label", "aria-labelledby", "aria-describedby"]; const __default__$9 = vue.defineComponent({ name: "ElDialog", inheritAttrs: false }); const _sfc_main$n = /* @__PURE__ */ vue.defineComponent({ ...__default__$9, props: dialogProps, emits: dialogEmits, setup(__props, { expose }) { const props = __props; const slots = vue.useSlots(); useDeprecated({ scope: "el-dialog", from: "the title slot", replacement: "the header slot", version: "3.0.0", ref: "https://element-plus.org/en-US/component/dialog.html#slots" }, vue.computed(() => !!slots.title)); const ns = useNamespace("dialog"); const dialogRef = vue.ref(); const headerRef = vue.ref(); const dialogContentRef = vue.ref(); const { visible, titleId, bodyId, style, overlayDialogStyle, rendered, zIndex: zIndex2, afterEnter, afterLeave, beforeLeave, handleClose, onModalClick, onOpenAutoFocus, onCloseAutoFocus, onCloseRequested, onFocusoutPrevented } = useDialog(props, dialogRef); vue.provide(dialogInjectionKey, { dialogRef, headerRef, bodyId, ns, rendered, style }); const overlayEvent = useSameTarget(onModalClick); const draggable = vue.computed(() => props.draggable && !props.fullscreen); expose({ visible, dialogContentRef }); return (_ctx, _cache) => { return vue.openBlock(), vue.createBlock(vue.Teleport, { to: _ctx.appendTo, disabled: _ctx.appendTo !== "body" ? false : !_ctx.appendToBody }, [ vue.createVNode(vue.Transition, { name: "dialog-fade", onAfterEnter: vue.unref(afterEnter), onAfterLeave: vue.unref(afterLeave), onBeforeLeave: vue.unref(beforeLeave), persisted: "" }, { default: vue.withCtx(() => [ vue.withDirectives(vue.createVNode(vue.unref(ElOverlay), { "custom-mask-event": "", mask: _ctx.modal, "overlay-class": _ctx.modalClass, "z-index": vue.unref(zIndex2) }, { default: vue.withCtx(() => [ vue.createElementVNode("div", { role: "dialog", "aria-modal": "true", "aria-label": _ctx.title || void 0, "aria-labelledby": !_ctx.title ? vue.unref(titleId) : void 0, "aria-describedby": vue.unref(bodyId), class: vue.normalizeClass(`${vue.unref(ns).namespace.value}-overlay-dialog`), style: vue.normalizeStyle(vue.unref(overlayDialogStyle)), onClick: _cache[0] || (_cache[0] = (...args) => vue.unref(overlayEvent).onClick && vue.unref(overlayEvent).onClick(...args)), onMousedown: _cache[1] || (_cache[1] = (...args) => vue.unref(overlayEvent).onMousedown && vue.unref(overlayEvent).onMousedown(...args)), onMouseup: _cache[2] || (_cache[2] = (...args) => vue.unref(overlayEvent).onMouseup && vue.unref(overlayEvent).onMouseup(...args)) }, [ 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, "show-close": _ctx.showClose, title: _ctx.title, "aria-level": _ctx.headerAriaLevel, onClose: vue.unref(handleClose) }), vue.createSlots({ header: vue.withCtx(() => [ !_ctx.$slots.title ? vue.renderSlot(_ctx.$slots, "header", { key: 0, close: vue.unref(handleClose), titleId: vue.unref(titleId), titleClass: vue.unref(ns).e("title") }) : vue.renderSlot(_ctx.$slots, "title", { key: 1 }) ]), default: vue.withCtx(() => [ vue.renderSlot(_ctx.$slots, "default") ]), _: 2 }, [ _ctx.$slots.footer ? { name: "footer", fn: vue.withCtx(() => [ vue.renderSlot(_ctx.$slots, "footer") ]) } : void 0 ]), 1040, ["center", "align-center", "close-icon", "draggable", "overflow", "fullscreen", "show-close", "title", "aria-level", "onClose"])) : vue.createCommentVNode("v-if", true) ]), _: 3 }, 8, ["trapped", "onFocusAfterTrapped", "onFocusAfterReleased", "onFocusoutPrevented", "onReleaseRequested"]) ], 46, _hoisted_1$e) ]), _: 3 }, 8, ["mask", "overlay-class", "z-index"]), [ [vue.vShow, vue.unref(visible)] ]) ]), _: 3 }, 8, ["onAfterEnter", "onAfterLeave", "onBeforeLeave"]) ], 8, ["to", "disabled"]); }; } }); var Dialog = /* @__PURE__ */ _export_sfc$1(_sfc_main$n, [["__file", "dialog.vue"]]); const ElDialog = withInstall(Dialog); const dividerProps = buildProps({ direction: { type: String, values: ["horizontal", "vertical"], default: "horizontal" }, contentPosition: { type: String, values: ["left", "center", "right"], default: "center" }, borderStyle: { type: definePropType(String), default: "solid" } }); const __default__$8 = vue.defineComponent({ name: "ElDivider" }); const _sfc_main$m = /* @__PURE__ */ vue.defineComponent({ ...__default__$8, props: dividerProps, setup(__props) { const props = __props; const ns = useNamespace("divider"); const dividerStyle = vue.computed(() => { return ns.cssVar({ "border-style": props.borderStyle }); }); return (_ctx, _cache) => { return vue.openBlock(), vue.createElementBlock("div", { class: vue.normalizeClass([vue.unref(ns).b(), vue.unref(ns).m(_ctx.direction)]), style: vue.normalizeStyle(vue.unref(dividerStyle)), role: "separator" }, [ _ctx.$slots.default && _ctx.direction !== "vertical" ? (vue.openBlock(), vue.createElementBlock("div", { key: 0, class: vue.normalizeClass([vue.unref(ns).e("text"), vue.unref(ns).is(_ctx.contentPosition)]) }, [ vue.renderSlot(_ctx.$slots, "default") ], 2)) : vue.createCommentVNode("v-if", true) ], 6); }; } }); var Divider = /* @__PURE__ */ _export_sfc$1(_sfc_main$m, [["__file", "divider.vue"]]); const ElDivider = withInstall(Divider); const _hoisted_1$d = { viewBox: "0 0 79 86", version: "1.1", xmlns: "http://www.w3.org/2000/svg", "xmlns:xlink": "http://www.w3.org/1999/xlink" }; const _hoisted_2$a = ["id"]; const _hoisted_3$6 = ["stop-color"]; const _hoisted_4$5 = ["stop-color"]; const _hoisted_5$4 = ["id"]; const _hoisted_6$3 = ["stop-color"]; const _hoisted_7$1 = ["stop-color"]; const _hoisted_8$1 = ["id"]; const _hoisted_9$1 = { id: "Illustrations", stroke: "none", "stroke-width": "1", fill: "none", "fill-rule": "evenodd" }; const _hoisted_10$1 = { id: "B-type", transform: "translate(-1268.000000, -535.000000)" }; const _hoisted_11$1 = { id: "Group-2", transform: "translate(1268.000000, 535.000000)" }; const _hoisted_12$1 = ["fill"]; const _hoisted_13$1 = ["fill"]; const _hoisted_14$1 = { 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)" }; const _hoisted_15 = ["fill"]; const _hoisted_16 = ["fill"]; const _hoisted_17 = ["fill"]; const _hoisted_18 = ["fill"]; const _hoisted_19 = ["fill"]; const _hoisted_20 = { id: "Rectangle-Copy-17", transform: "translate(53.000000, 45.000000)" }; const _hoisted_21 = ["fill", "xlink:href"]; const _hoisted_22 = ["fill", "mask"]; const _hoisted_23 = ["fill"]; const __default__$7 = vue.defineComponent({ name: "ImgEmpty" }); const _sfc_main$l = /* @__PURE__ */ vue.defineComponent({ ...__default__$7, setup(__props) { const ns = useNamespace("empty"); const id = useId(); return (_ctx, _cache) => { return vue.openBlock(), vue.createElementBlock("svg", _hoisted_1$d, [ 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, _hoisted_3$6), vue.createElementVNode("stop", { "stop-color": `var(${vue.unref(ns).cssVarBlockName("fill-color-4")})`, offset: "100%" }, null, 8, _hoisted_4$5) ], 8, _hoisted_2$a), 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, _hoisted_6$3), vue.createElementVNode("stop", { "stop-color": `var(${vue.unref(ns).cssVarBlockName("fill-color-6")})`, offset: "100%" }, null, 8, _hoisted_7$1) ], 8, _hoisted_5$4), vue.createElementVNode("rect", { id: `path-3-${vue.unref(id)}`, x: "0", y: "0", width: "17", height: "36" }, null, 8, _hoisted_8$1) ]), vue.createElementVNode("g", _hoisted_9$1, [ vue.createElementVNode("g", _hoisted_10$1, [ vue.createElementVNode("g", _hoisted_11$1, [ 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, _hoisted_12$1), 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, _hoisted_13$1), vue.createElementVNode("g", _hoisted_14$1, [ 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, _hoisted_15), 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, _hoisted_16), 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, _hoisted_17), 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, _hoisted_18) ]), vue.createElementVNode("rect", { id: "Rectangle-Copy-15", fill: `url(#linearGradient-2-${vue.unref(id)})`, x: "13", y: "45", width: "40", height: "36" }, null, 8, _hoisted_19), vue.createElementVNode("g", _hoisted_20, [ 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, _hoisted_21), 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, _hoisted_22) ]), 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, _hoisted_23) ]) ]) ]) ]); }; } }); var ImgEmpty = /* @__PURE__ */ _export_sfc$1(_sfc_main$l, [["__file", "img-empty.vue"]]); const emptyProps = buildProps({ image: { type: String, default: "" }, imageSize: Number, description: { type: String, default: "" } }); const _hoisted_1$c = ["src"]; const _hoisted_2$9 = { key: 1 }; const __default__$6 = vue.defineComponent({ name: "ElEmpty" }); const _sfc_main$k = /* @__PURE__ */ vue.defineComponent({ ...__default__$6, 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, _hoisted_1$c)) : 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", _hoisted_2$9, 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$k, [["__file", "empty.vue"]]); const ElEmpty = withInstall(Empty); const inputNumberProps = buildProps({ id: { type: String, default: void 0 }, step: { type: Number, default: 1 }, stepStrictly: Boolean, max: { type: Number, default: Number.POSITIVE_INFINITY }, min: { type: Number, default: Number.NEGATIVE_INFINITY }, modelValue: Number, readonly: Boolean, disabled: Boolean, size: useSizeProp, controls: { type: Boolean, default: true }, controlsPosition: { type: String, default: "", values: ["", "right"] }, valueOnClear: { type: [String, Number, null], validator: (val) => val === null || isNumber(val) || ["min", "max"].includes(val), default: null }, name: String, label: String, placeholder: String, precision: { type: Number, validator: (val) => val >= 0 && val === Number.parseInt(`${val}`, 10) }, validateEvent: { type: Boolean, default: true } }); const inputNumberEmits = { [CHANGE_EVENT]: (cur, prev) => prev !== cur, blur: (e) => e instanceof FocusEvent, focus: (e) => e instanceof FocusEvent, [INPUT_EVENT]: (val) => isNumber(val) || isNil(val), [UPDATE_MODEL_EVENT]: (val) => isNumber(val) || isNil(val) }; const _hoisted_1$b = ["aria-label", "onKeydown"]; const _hoisted_2$8 = ["aria-label", "onKeydown"]; const __default__$5 = vue.defineComponent({ name: "ElInputNumber" }); const _sfc_main$j = /* @__PURE__ */ vue.defineComponent({ ...__default__$5, props: inputNumberProps, emits: inputNumberEmits, setup(__props, { expose, emit }) { const props = __props; const { t } = useLocale(); const ns = useNamespace("input-number"); const input = vue.ref(); const data = vue.reactive({ currentValue: props.modelValue, userInput: null }); const { formItem } = useFormItem(); const minDisabled = vue.computed(() => isNumber(props.modelValue) && props.modelValue <= props.min); const maxDisabled = vue.computed(() => isNumber(props.modelValue) && props.modelValue >= props.max); const numPrecision = vue.computed(() => { const stepPrecision = getPrecision(props.step); if (!isUndefined(props.precision)) { if (stepPrecision > props.precision) ; return props.precision; } else { return Math.max(getPrecision(props.modelValue), stepPrecision); } }); const controlsAtRight = vue.computed(() => { return props.controls && props.controlsPosition === "right"; }); const inputNumberSize = useFormSize(); const inputNumberDisabled = useFormDisabled(); const displayValue = vue.computed(() => { if (data.userInput !== null) { return data.userInput; } let currentValue = data.currentValue; if (isNil(currentValue)) return ""; if (isNumber(currentValue)) { if (Number.isNaN(currentValue)) return ""; if (!isUndefined(props.precision)) { currentValue = currentValue.toFixed(props.precision); } } return currentValue; }); const toPrecision = (num, pre) => { if (isUndefined(pre)) pre = numPrecision.value; if (pre === 0) return Math.round(num); let snum = String(num); const pointPos = snum.indexOf("."); if (pointPos === -1) return num; const nums = snum.replace(".", "").split(""); const datum = nums[pointPos + pre]; if (!datum) return num; const length = snum.length; if (snum.charAt(length - 1) === "5") { snum = `${snum.slice(0, Math.max(0, length - 1))}6`; } return Number.parseFloat(Number(snum).toFixed(pre)); }; const getPrecision = (value) => { if (isNil(value)) return 0; const valueString = value.toString(); const dotPosition = valueString.indexOf("."); let precision = 0; if (dotPosition !== -1) { precision = valueString.length - dotPosition - 1; } return precision; }; const ensurePrecision = (val, coefficient = 1) => { if (!isNumber(val)) return data.currentValue; return toPrecision(val + props.step * coefficient); }; const increase = () => { if (props.readonly || inputNumberDisabled.value || maxDisabled.value) return; const value = Number(displayValue.value) || 0; const newVal = ensurePrecision(value); setCurrentValue(newVal); emit(INPUT_EVENT, data.currentValue); setCurrentValueToModelValue(); }; const decrease = () => { if (props.readonly || inputNumberDisabled.value || minDisabled.value) return; const value = Number(displayValue.value) || 0; const newVal = ensurePrecision(value, -1); setCurrentValue(newVal); emit(INPUT_EVENT, data.currentValue); setCurrentValueToModelValue(); }; const verifyValue = (value, update) => { const { max, min, step, precision, stepStrictly, valueOnClear } = props; if (max < min) { throwError("InputNumber", "min should not be greater than max."); } let newVal = Number(value); if (isNil(value) || Number.isNaN(newVal)) { return null; } if (value === "") { if (valueOnClear === null) { return null; } newVal = isString(valueOnClear) ? { min, max }[valueOnClear] : valueOnClear; } if (stepStrictly) { newVal = toPrecision(Math.round(newVal / step) * step, precision); } if (!isUndefined(precision)) { newVal = toPrecision(newVal, precision); } if (newVal > max || newVal < min) { newVal = newVal > max ? max : min; update && emit(UPDATE_MODEL_EVENT, newVal); } return newVal; }; const setCurrentValue = (value, emitChange = true) => { var _a2; const oldVal = data.currentValue; const newVal = verifyValue(value); if (!emitChange) { emit(UPDATE_MODEL_EVENT, newVal); return; } if (oldVal === newVal && value) return; data.userInput = null; emit(UPDATE_MODEL_EVENT, newVal); if (oldVal !== newVal) { emit(CHANGE_EVENT, newVal, oldVal); } if (props.validateEvent) { (_a2 = formItem == null ? void 0 : formItem.validate) == null ? void 0 : _a2.call(formItem, "change").catch((err) => debugWarn()); } data.currentValue = newVal; }; const handleInput = (value) => { data.userInput = value; const newVal = value === "" ? null : Number(value); emit(INPUT_EVENT, newVal); setCurrentValue(newVal, false); }; const handleInputChange = (value) => { const newVal = value !== "" ? Number(value) : ""; if (isNumber(newVal) && !Number.isNaN(newVal) || value === "") { setCurrentValue(newVal); } setCurrentValueToModelValue(); data.userInput = null; }; const focus = () => { var _a2, _b; (_b = (_a2 = input.value) == null ? void 0 : _a2.focus) == null ? void 0 : _b.call(_a2); }; const blur = () => { var _a2, _b; (_b = (_a2 = input.value) == null ? void 0 : _a2.blur) == null ? void 0 : _b.call(_a2); }; const handleFocus = (event2) => { emit("focus", event2); }; const handleBlur = (event2) => { var _a2; data.userInput = null; emit("blur", event2); if (props.validateEvent) { (_a2 = formItem == null ? void 0 : formItem.validate) == null ? void 0 : _a2.call(formItem, "blur").catch((err) => debugWarn()); } }; const setCurrentValueToModelValue = () => { if (data.currentValue !== props.modelValue) { data.currentValue = props.modelValue; } }; const handleWheel = (e) => { if (document.activeElement === e.target) e.preventDefault(); }; vue.watch(() => props.modelValue, (value, oldValue) => { const newValue = verifyValue(value, true); if (data.userInput === null && newValue !== oldValue) { data.currentValue = newValue; } }, { immediate: true }); vue.onMounted(() => { var _a2; const { min, max, modelValue } = props; const innerInput = (_a2 = input.value) == null ? void 0 : _a2.input; innerInput.setAttribute("role", "spinbutton"); if (Number.isFinite(max)) { innerInput.setAttribute("aria-valuemax", String(max)); } else { innerInput.removeAttribute("aria-valuemax"); } if (Number.isFinite(min)) { innerInput.setAttribute("aria-valuemin", String(min)); } else { innerInput.removeAttribute("aria-valuemin"); } innerInput.setAttribute("aria-valuenow", data.currentValue || data.currentValue === 0 ? String(data.currentValue) : ""); innerInput.setAttribute("aria-disabled", String(inputNumberDisabled.value)); if (!isNumber(modelValue) && modelValue != null) { let val = Number(modelValue); if (Number.isNaN(val)) { val = null; } emit(UPDATE_MODEL_EVENT, val); } }); vue.onUpdated(() => { var _a2, _b; const innerInput = (_a2 = input.value) == null ? void 0 : _a2.input; innerInput == null ? void 0 : innerInput.setAttribute("aria-valuenow", `${(_b = data.currentValue) != null ? _b : ""}`); }); expose({ focus, blur }); return (_ctx, _cache) => { return vue.openBlock(), vue.createElementBlock("div", { class: vue.normalizeClass([ vue.unref(ns).b(), vue.unref(ns).m(vue.unref(inputNumberSize)), vue.unref(ns).is("disabled", vue.unref(inputNumberDisabled)), vue.unref(ns).is("without-controls", !_ctx.controls), vue.unref(ns).is("controls-right", vue.unref(controlsAtRight)) ]), onDragstart: _cache[0] || (_cache[0] = vue.withModifiers(() => { }, ["prevent"])) }, [ _ctx.controls ? vue.withDirectives((vue.openBlock(), vue.createElementBlock("span", { key: 0, role: "button", "aria-label": vue.unref(t)("el.inputNumber.decrease"), class: vue.normalizeClass([vue.unref(ns).e("decrease"), vue.unref(ns).is("disabled", vue.unref(minDisabled))]), onKeydown: vue.withKeys(decrease, ["enter"]) }, [ vue.renderSlot(_ctx.$slots, "decrease-icon", {}, () => [ vue.createVNode(vue.unref(ElIcon), null, { default: vue.withCtx(() => [ vue.unref(controlsAtRight) ? (vue.openBlock(), vue.createBlock(vue.unref(arrow_down_default), { key: 0 })) : (vue.openBlock(), vue.createBlock(vue.unref(minus_default), { key: 1 })) ]), _: 1 }) ]) ], 42, _hoisted_1$b)), [ [vue.unref(vRepeatClick), decrease] ]) : vue.createCommentVNode("v-if", true), _ctx.controls ? vue.withDirectives((vue.openBlock(), vue.createElementBlock("span", { key: 1, role: "button", "aria-label": vue.unref(t)("el.inputNumber.increase"), class: vue.normalizeClass([vue.unref(ns).e("increase"), vue.unref(ns).is("disabled", vue.unref(maxDisabled))]), onKeydown: vue.withKeys(increase, ["enter"]) }, [ vue.renderSlot(_ctx.$slots, "increase-icon", {}, () => [ vue.createVNode(vue.unref(ElIcon), null, { default: vue.withCtx(() => [ vue.unref(controlsAtRight) ? (vue.openBlock(), vue.createBlock(vue.unref(arrow_up_default), { key: 0 })) : (vue.openBlock(), vue.createBlock(vue.unref(plus_default), { key: 1 })) ]), _: 1 }) ]) ], 42, _hoisted_2$8)), [ [vue.unref(vRepeatClick), increase] ]) : vue.createCommentVNode("v-if", true), vue.createVNode(vue.unref(ElInput), { id: _ctx.id, ref_key: "input", ref: input, type: "number", step: _ctx.step, "model-value": vue.unref(displayValue), placeholder: _ctx.placeholder, readonly: _ctx.readonly, disabled: vue.unref(inputNumberDisabled), size: vue.unref(inputNumberSize), max: _ctx.max, min: _ctx.min, name: _ctx.name, label: _ctx.label, "validate-event": false, onWheel: handleWheel, onKeydown: [ vue.withKeys(vue.withModifiers(increase, ["prevent"]), ["up"]), vue.withKeys(vue.withModifiers(decrease, ["prevent"]), ["down"]) ], onBlur: handleBlur, onFocus: handleFocus, onInput: handleInput, onChange: handleInputChange }, null, 8, ["id", "step", "model-value", "placeholder", "readonly", "disabled", "size", "max", "min", "name", "label", "onKeydown"]) ], 34); }; } }); var InputNumber = /* @__PURE__ */ _export_sfc$1(_sfc_main$j, [["__file", "input-number.vue"]]); const ElInputNumber = withInstall(InputNumber); const selectGroupKey = Symbol("ElSelectGroup"); const selectKey = Symbol("ElSelect"); function useOption(props, states) { const select = vue.inject(selectKey); const selectGroup = vue.inject(selectGroupKey, { disabled: false }); const itemSelected = vue.computed(() => { if (select.props.multiple) { return contains(select.props.modelValue, props.value); } else { return contains([select.props.modelValue], props.value); } }); const limitReached = vue.computed(() => { if (select.props.multiple) { const modelValue = select.props.modelValue || []; return !itemSelected.value && modelValue.length >= select.props.multipleLimit && select.props.multipleLimit > 0; } else { return false; } }); const currentLabel = vue.computed(() => { return props.label || (isObject$1(props.value) ? "" : props.value); }); const currentValue = vue.computed(() => { return props.value || props.label || ""; }); const isDisabled = vue.computed(() => { return props.disabled || states.groupDisabled || limitReached.value; }); const instance = vue.getCurrentInstance(); const contains = (arr = [], target) => { if (!isObject$1(props.value)) { return arr && arr.includes(target); } else { const valueKey = select.props.valueKey; return arr && arr.some((item) => { return vue.toRaw(get(item, valueKey)) === get(target, valueKey); }); } }; const hoverItem = () => { if (!props.disabled && !selectGroup.disabled) { select.states.hoveringIndex = select.optionsArray.indexOf(instance.proxy); } }; const updateOption = (query) => { const regexp = new RegExp(escapeStringRegexp(query), "i"); states.visible = regexp.test(currentLabel.value) || props.created; }; vue.watch(() => currentLabel.value, () => { if (!props.created && !select.props.remote) select.setSelected(); }); vue.watch(() => props.value, (val, oldVal) => { const { remote, valueKey } = select.props; if (!isEqual(val, oldVal)) { select.onOptionDestroy(oldVal, instance.proxy); select.onOptionCreate(instance.proxy); } if (!props.created && !remote) { if (valueKey && isObject$1(val) && isObject$1(oldVal) && val[valueKey] === oldVal[valueKey]) { return; } select.setSelected(); } }); vue.watch(() => selectGroup.disabled, () => { states.groupDisabled = selectGroup.disabled; }, { immediate: true }); return { select, currentLabel, currentValue, itemSelected, isDisabled, hoverItem, updateOption }; } const _sfc_main$i = vue.defineComponent({ name: "ElOption", componentName: "ElOption", props: { value: { required: true, type: [String, Number, Boolean, Object] }, label: [String, Number], created: Boolean, disabled: Boolean }, setup(props) { const ns = useNamespace("select"); const id = useId(); const containerKls = vue.computed(() => [ ns.be("dropdown", "item"), ns.is("disabled", vue.unref(isDisabled)), ns.is("selected", vue.unref(itemSelected)), ns.is("hovering", vue.unref(hover)) ]); const states = vue.reactive({ index: -1, groupDisabled: false, visible: true, hover: false }); const { currentLabel, itemSelected, isDisabled, select, hoverItem, updateOption } = useOption(props, states); const { visible, hover } = vue.toRefs(states); const vm = vue.getCurrentInstance().proxy; select.onOptionCreate(vm); vue.onBeforeUnmount(() => { const key2 = vm.value; const { selected } = select.states; const selectedOptions = select.props.multiple ? selected : [selected]; const doesSelected = selectedOptions.some((item) => { return item.value === vm.value; }); vue.nextTick(() => { if (select.states.cachedOptions.get(key2) === vm && !doesSelected) { select.states.cachedOptions.delete(key2); } }); select.onOptionDestroy(key2, vm); }); function selectOptionClick() { if (props.disabled !== true && states.groupDisabled !== true) { select.handleOptionSelect(vm); } } return { ns, id, containerKls, currentLabel, itemSelected, isDisabled, select, hoverItem, updateOption, visible, hover, selectOptionClick, states }; } }); const _hoisted_1$a = ["id", "aria-disabled", "aria-selected"]; function _sfc_render$7(_ctx, _cache, $props, $setup, $data, $options) { return vue.withDirectives((vue.openBlock(), vue.createElementBlock("li", { id: _ctx.id, class: vue.normalizeClass(_ctx.containerKls), role: "option", "aria-disabled": _ctx.isDisabled || void 0, "aria-selected": _ctx.itemSelected, onMouseenter: _cache[0] || (_cache[0] = (...args) => _ctx.hoverItem && _ctx.hoverItem(...args)), onClick: _cache[1] || (_cache[1] = vue.withModifiers((...args) => _ctx.selectOptionClick && _ctx.selectOptionClick(...args), ["stop"])) }, [ vue.renderSlot(_ctx.$slots, "default", {}, () => [ vue.createElementVNode("span", null, vue.toDisplayString(_ctx.currentLabel), 1) ]) ], 42, _hoisted_1$a)), [ [vue.vShow, _ctx.visible] ]); } var Option = /* @__PURE__ */ _export_sfc$1(_sfc_main$i, [["render", _sfc_render$7], ["__file", "option.vue"]]); const _sfc_main$h = vue.defineComponent({ name: "ElSelectDropdown", componentName: "ElSelectDropdown", setup() { const select = vue.inject(selectKey); const ns = useNamespace("select"); const popperClass = vue.computed(() => select.props.popperClass); const isMultiple = vue.computed(() => select.props.multiple); const isFitInputWidth = vue.computed(() => select.props.fitInputWidth); const minWidth = vue.ref(""); function updateMinWidth() { var _a2; minWidth.value = `${(_a2 = select.selectRef) == null ? void 0 : _a2.offsetWidth}px`; } vue.onMounted(() => { updateMinWidth(); useResizeObserver(select.selectRef, updateMinWidth); }); return { ns, minWidth, popperClass, isMultiple, isFitInputWidth }; } }); function _sfc_render$6(_ctx, _cache, $props, $setup, $data, $options) { return vue.openBlock(), vue.createElementBlock("div", { class: vue.normalizeClass([_ctx.ns.b("dropdown"), _ctx.ns.is("multiple", _ctx.isMultiple), _ctx.popperClass]), style: vue.normalizeStyle({ [_ctx.isFitInputWidth ? "width" : "minWidth"]: _ctx.minWidth }) }, [ _ctx.$slots.header ? (vue.openBlock(), vue.createElementBlock("div", { key: 0, class: vue.normalizeClass(_ctx.ns.be("dropdown", "header")) }, [ vue.renderSlot(_ctx.$slots, "header") ], 2)) : vue.createCommentVNode("v-if", true), vue.renderSlot(_ctx.$slots, "default"), _ctx.$slots.footer ? (vue.openBlock(), vue.createElementBlock("div", { key: 1, class: vue.normalizeClass(_ctx.ns.be("dropdown", "footer")) }, [ vue.renderSlot(_ctx.$slots, "footer") ], 2)) : vue.createCommentVNode("v-if", true) ], 6); } var ElSelectMenu = /* @__PURE__ */ _export_sfc$1(_sfc_main$h, [["render", _sfc_render$6], ["__file", "select-dropdown.vue"]]); function useInput(handleInput) { const isComposing = vue.ref(false); const handleCompositionStart = () => { isComposing.value = true; }; const handleCompositionUpdate = (event2) => { const text = event2.target.value; const lastCharacter = text[text.length - 1] || ""; isComposing.value = !isKorean(lastCharacter); }; const handleCompositionEnd = (event2) => { if (isComposing.value) { isComposing.value = false; if (isFunction$1(handleInput)) { handleInput(event2); } } }; return { handleCompositionStart, handleCompositionUpdate, handleCompositionEnd }; } const MINIMUM_INPUT_WIDTH = 11; const useSelect = (props, emit) => { const { t } = useLocale(); const contentId = useId(); const nsSelect = useNamespace("select"); const nsInput = useNamespace("input"); const states = vue.reactive({ inputValue: "", options: /* @__PURE__ */ new Map(), cachedOptions: /* @__PURE__ */ new Map(), disabledOptions: /* @__PURE__ */ new Map(), optionValues: [], selected: props.multiple ? [] : {}, selectionWidth: 0, calculatorWidth: 0, collapseItemWidth: 0, selectedLabel: "", hoveringIndex: -1, previousQuery: null, inputHovering: false, menuVisibleOnFocus: false, isBeforeHide: false }); const selectRef = vue.ref(null); const selectionRef = vue.ref(null); const tooltipRef = vue.ref(null); const tagTooltipRef = vue.ref(null); const inputRef = vue.ref(null); const calculatorRef = vue.ref(null); const prefixRef = vue.ref(null); const suffixRef = vue.ref(null); const menuRef = vue.ref(null); const tagMenuRef = vue.ref(null); const collapseItemRef = vue.ref(null); const scrollbarRef = vue.ref(null); const { wrapperRef, isFocused, handleFocus, handleBlur } = useFocusController(inputRef, { afterFocus() { if (props.automaticDropdown && !expanded.value) { expanded.value = true; states.menuVisibleOnFocus = true; } }, beforeBlur(event2) { var _a2, _b; return ((_a2 = tooltipRef.value) == null ? void 0 : _a2.isFocusInsideContent(event2)) || ((_b = tagTooltipRef.value) == null ? void 0 : _b.isFocusInsideContent(event2)); }, afterBlur() { expanded.value = false; states.menuVisibleOnFocus = false; } }); const expanded = vue.ref(false); const hoverOption = vue.ref(); const { form, formItem } = useFormItem(); const { inputId } = useFormItemInputId(props, { formItemContext: formItem }); const selectDisabled = vue.computed(() => props.disabled || (form == null ? void 0 : form.disabled)); const hasEmptyStringOption = vue.computed(() => optionsArray.value.some((option) => option.value === "")); const hasModelValue = vue.computed(() => { return props.multiple ? isArray$1(props.modelValue) && props.modelValue.length > 0 : !isNil(props.modelValue) && (props.modelValue !== "" || hasEmptyStringOption.value); }); const showClose = vue.computed(() => { const criteria = props.clearable && !selectDisabled.value && states.inputHovering && hasModelValue.value; return criteria; }); const iconComponent = vue.computed(() => props.remote && props.filterable && !props.remoteShowSuffix ? "" : props.suffixIcon); const iconReverse = vue.computed(() => nsSelect.is("reverse", iconComponent.value && expanded.value)); const validateState = vue.computed(() => (formItem == null ? void 0 : formItem.validateState) || ""); const validateIcon = vue.computed(() => ValidateComponentsMap[validateState.value]); const debounce$1 = vue.computed(() => props.remote ? 300 : 0); const emptyText = vue.computed(() => { if (props.loading) { return props.loadingText || t("el.select.loading"); } else { if (props.remote && !states.inputValue && states.options.size === 0) return false; if (props.filterable && states.inputValue && states.options.size > 0 && filteredOptionsCount.value === 0) { return props.noMatchText || t("el.select.noMatch"); } if (states.options.size === 0) { return props.noDataText || t("el.select.noData"); } } return null; }); const filteredOptionsCount = vue.computed(() => optionsArray.value.filter((option) => option.visible).length); const optionsArray = vue.computed(() => { const list = Array.from(states.options.values()); const newList = []; states.optionValues.forEach((item) => { const index = list.findIndex((i) => i.value === item); if (index > -1) { newList.push(list[index]); } }); return newList.length >= list.length ? newList : list; }); const cachedOptionsArray = vue.computed(() => Array.from(states.cachedOptions.values())); const showNewOption = vue.computed(() => { const hasExistingOption = optionsArray.value.filter((option) => { return !option.created; }).some((option) => { return option.currentLabel === states.inputValue; }); return props.filterable && props.allowCreate && states.inputValue !== "" && !hasExistingOption; }); const updateOptions2 = () => { if (props.filterable && isFunction$1(props.filterMethod)) return; if (props.filterable && props.remote && isFunction$1(props.remoteMethod)) return; optionsArray.value.forEach((option) => { var _a2; (_a2 = option.updateOption) == null ? void 0 : _a2.call(option, states.inputValue); }); }; const selectSize = useFormSize(); const collapseTagSize = vue.computed(() => ["small"].includes(selectSize.value) ? "small" : "default"); const dropdownMenuVisible = vue.computed({ get() { return expanded.value && emptyText.value !== false; }, set(val) { expanded.value = val; } }); const shouldShowPlaceholder = vue.computed(() => { if (isArray$1(props.modelValue)) { return props.modelValue.length === 0 && !states.inputValue; } return props.filterable ? !states.inputValue : true; }); const currentPlaceholder = vue.computed(() => { var _a2; const _placeholder = (_a2 = props.placeholder) != null ? _a2 : t("el.select.placeholder"); return props.multiple || !hasModelValue.value ? _placeholder : states.selectedLabel; }); vue.watch(() => props.modelValue, (val, oldVal) => { if (props.multiple) { if (props.filterable && !props.reserveKeyword) { states.inputValue = ""; handleQueryChange(""); } } setSelected(); if (!isEqual(val, oldVal) && props.validateEvent) { formItem == null ? void 0 : formItem.validate("change").catch((err) => debugWarn()); } }, { flush: "post", deep: true }); vue.watch(() => expanded.value, (val) => { if (val) { handleQueryChange(states.inputValue); } else { states.inputValue = ""; states.previousQuery = null; states.isBeforeHide = true; } emit("visible-change", val); }); vue.watch(() => states.options.entries(), () => { var _a2; if (!isClient) return; const inputs = ((_a2 = selectRef.value) == null ? void 0 : _a2.querySelectorAll("input")) || []; if (!props.filterable && !props.defaultFirstOption && !isUndefined(props.modelValue) || !Array.from(inputs).includes(document.activeElement)) { setSelected(); } if (props.defaultFirstOption && (props.filterable || props.remote) && filteredOptionsCount.value) { checkDefaultFirstOption(); } }, { flush: "post" }); vue.watch(() => states.hoveringIndex, (val) => { if (isNumber(val) && val > -1) { hoverOption.value = optionsArray.value[val] || {}; } else { hoverOption.value = {}; } optionsArray.value.forEach((option) => { option.hover = hoverOption.value === option; }); }); vue.watchEffect(() => { if (states.isBeforeHide) return; updateOptions2(); }); const handleQueryChange = (val) => { if (states.previousQuery === val) { return; } states.previousQuery = val; if (props.filterable && isFunction$1(props.filterMethod)) { props.filterMethod(val); } else if (props.filterable && props.remote && isFunction$1(props.remoteMethod)) { props.remoteMethod(val); } if (props.defaultFirstOption && (props.filterable || props.remote) && filteredOptionsCount.value) { vue.nextTick(checkDefaultFirstOption); } else { vue.nextTick(updateHoveringIndex); } }; const checkDefaultFirstOption = () => { const optionsInDropdown = optionsArray.value.filter((n) => n.visible && !n.disabled && !n.states.groupDisabled); const userCreatedOption = optionsInDropdown.find((n) => n.created); const firstOriginOption = optionsInDropdown[0]; states.hoveringIndex = getValueIndex(optionsArray.value, userCreatedOption || firstOriginOption); }; const setSelected = () => { if (!props.multiple) { const option = getOption(props.modelValue); states.selectedLabel = option.currentLabel; states.selected = option; return; } else { states.selectedLabel = ""; } const result = []; if (isArray$1(props.modelValue)) { props.modelValue.forEach((value) => { result.push(getOption(value)); }); } states.selected = result; }; const getOption = (value) => { let option; const isObjectValue = toRawType(value).toLowerCase() === "object"; const isNull = toRawType(value).toLowerCase() === "null"; const isUndefined2 = toRawType(value).toLowerCase() === "undefined"; for (let i = states.cachedOptions.size - 1; i >= 0; i--) { const cachedOption = cachedOptionsArray.value[i]; const isEqualValue = isObjectValue ? get(cachedOption.value, props.valueKey) === get(value, props.valueKey) : cachedOption.value === value; if (isEqualValue) { option = { value, currentLabel: cachedOption.currentLabel, isDisabled: cachedOption.isDisabled }; break; } } if (option) return option; const label = isObjectValue ? value.label : !isNull && !isUndefined2 ? value : ""; const newOption = { value, currentLabel: label }; return newOption; }; const updateHoveringIndex = () => { if (!props.multiple) { states.hoveringIndex = optionsArray.value.findIndex((item) => { return getValueKey(item) === getValueKey(states.selected); }); } else { states.hoveringIndex = optionsArray.value.findIndex((item) => states.selected.some((selected) => getValueKey(selected) === getValueKey(item))); } }; const resetSelectionWidth = () => { states.selectionWidth = selectionRef.value.getBoundingClientRect().width; }; const resetCalculatorWidth = () => { states.calculatorWidth = calculatorRef.value.getBoundingClientRect().width; }; const resetCollapseItemWidth = () => { states.collapseItemWidth = collapseItemRef.value.getBoundingClientRect().width; }; const updateTooltip = () => { var _a2, _b; (_b = (_a2 = tooltipRef.value) == null ? void 0 : _a2.updatePopper) == null ? void 0 : _b.call(_a2); }; const updateTagTooltip = () => { var _a2, _b; (_b = (_a2 = tagTooltipRef.value) == null ? void 0 : _a2.updatePopper) == null ? void 0 : _b.call(_a2); }; const onInputChange = () => { if (states.inputValue.length > 0 && !expanded.value) { expanded.value = true; } handleQueryChange(states.inputValue); }; const onInput = (event2) => { states.inputValue = event2.target.value; if (props.remote) { debouncedOnInputChange(); } else { return onInputChange(); } }; const debouncedOnInputChange = debounce(() => { onInputChange(); }, debounce$1.value); const emitChange = (val) => { if (!isEqual(props.modelValue, val)) { emit(CHANGE_EVENT, val); } }; const getLastNotDisabledIndex = (value) => findLastIndex(value, (it2) => !states.disabledOptions.has(it2)); const deletePrevTag = (e) => { if (!props.multiple) return; if (e.code === EVENT_CODE.delete) return; if (e.target.value.length <= 0) { const value = props.modelValue.slice(); const lastNotDisabledIndex = getLastNotDisabledIndex(value); if (lastNotDisabledIndex < 0) return; value.splice(lastNotDisabledIndex, 1); emit(UPDATE_MODEL_EVENT, value); emitChange(value); } }; const deleteTag = (event2, tag) => { const index = states.selected.indexOf(tag); if (index > -1 && !selectDisabled.value) { const value = props.modelValue.slice(); value.splice(index, 1); emit(UPDATE_MODEL_EVENT, value); emitChange(value); emit("remove-tag", tag.value); } event2.stopPropagation(); focus(); }; const deleteSelected = (event2) => { event2.stopPropagation(); const value = props.multiple ? [] : void 0; if (props.multiple) { for (const item of states.selected) { if (item.isDisabled) value.push(item.value); } } emit(UPDATE_MODEL_EVENT, value); emitChange(value); states.hoveringIndex = -1; expanded.value = false; emit("clear"); focus(); }; const handleOptionSelect = (option) => { if (props.multiple) { const value = (props.modelValue || []).slice(); const optionIndex = getValueIndex(value, option.value); if (optionIndex > -1) { value.splice(optionIndex, 1); } else if (props.multipleLimit <= 0 || value.length < props.multipleLimit) { value.push(option.value); } emit(UPDATE_MODEL_EVENT, value); emitChange(value); if (option.created) { handleQueryChange(""); } if (props.filterable && !props.reserveKeyword) { states.inputValue = ""; } } else { emit(UPDATE_MODEL_EVENT, option.value); emitChange(option.value); expanded.value = false; } focus(); if (expanded.value) return; vue.nextTick(() => { scrollToOption(option); }); }; const getValueIndex = (arr = [], value) => { if (!isObject$1(value)) return arr.indexOf(value); const valueKey = props.valueKey; let index = -1; arr.some((item, i) => { if (vue.toRaw(get(item, valueKey)) === get(value, valueKey)) { index = i; return true; } return false; }); return index; }; const scrollToOption = (option) => { var _a2, _b, _c, _d, _e; const targetOption = isArray$1(option) ? option[0] : option; let target = null; if (targetOption == null ? void 0 : targetOption.value) { const options = optionsArray.value.filter((item) => item.value === targetOption.value); if (options.length > 0) { target = options[0].$el; } } if (tooltipRef.value && target) { const menu = (_d = (_c = (_b = (_a2 = tooltipRef.value) == null ? void 0 : _a2.popperRef) == null ? void 0 : _b.contentRef) == null ? void 0 : _c.querySelector) == null ? void 0 : _d.call(_c, `.${nsSelect.be("dropdown", "wrap")}`); if (menu) { scrollIntoView(menu, target); } } (_e = scrollbarRef.value) == null ? void 0 : _e.handleScroll(); }; const onOptionCreate = (vm) => { states.options.set(vm.value, vm); states.cachedOptions.set(vm.value, vm); vm.disabled && states.disabledOptions.set(vm.value, vm); }; const onOptionDestroy = (key2, vm) => { if (states.options.get(key2) === vm) { states.options.delete(key2); } }; const { handleCompositionStart, handleCompositionUpdate, handleCompositionEnd } = useInput((e) => onInput(e)); const popperRef = vue.computed(() => { var _a2, _b; return (_b = (_a2 = tooltipRef.value) == null ? void 0 : _a2.popperRef) == null ? void 0 : _b.contentRef; }); const handleMenuEnter = () => { vue.nextTick(() => scrollToOption(states.selected)); }; const focus = () => { var _a2; (_a2 = inputRef.value) == null ? void 0 : _a2.focus(); }; const blur = () => { handleClickOutside(); }; const handleClearClick = (event2) => { deleteSelected(event2); }; const handleClickOutside = (event2) => { expanded.value = false; if (isFocused.value) { const _event2 = new FocusEvent("focus", event2); vue.nextTick(() => handleBlur(_event2)); } }; const handleEsc = () => { if (states.inputValue.length > 0) { states.inputValue = ""; } else { expanded.value = false; } }; const toggleMenu = () => { if (selectDisabled.value) return; if (states.menuVisibleOnFocus) { states.menuVisibleOnFocus = false; } else { expanded.value = !expanded.value; } }; const selectOption = () => { if (!expanded.value) { toggleMenu(); } else { if (optionsArray.value[states.hoveringIndex]) { handleOptionSelect(optionsArray.value[states.hoveringIndex]); } } }; const getValueKey = (item) => { return isObject$1(item.value) ? get(item.value, props.valueKey) : item.value; }; const optionsAllDisabled = vue.computed(() => optionsArray.value.filter((option) => option.visible).every((option) => option.disabled)); const showTagList = vue.computed(() => { if (!props.multiple) { return []; } return props.collapseTags ? states.selected.slice(0, props.maxCollapseTags) : states.selected; }); const collapseTagList = vue.computed(() => { if (!props.multiple) { return []; } return props.collapseTags ? states.selected.slice(props.maxCollapseTags) : []; }); const navigateOptions = (direction) => { if (!expanded.value) { expanded.value = true; return; } if (states.options.size === 0 || filteredOptionsCount.value === 0) return; if (!optionsAllDisabled.value) { if (direction === "next") { states.hoveringIndex++; if (states.hoveringIndex === states.options.size) { states.hoveringIndex = 0; } } else if (direction === "prev") { states.hoveringIndex--; if (states.hoveringIndex < 0) { states.hoveringIndex = states.options.size - 1; } } const option = optionsArray.value[states.hoveringIndex]; if (option.disabled === true || option.states.groupDisabled === true || !option.visible) { navigateOptions(direction); } vue.nextTick(() => scrollToOption(hoverOption.value)); } }; const getGapWidth = () => { if (!selectionRef.value) return 0; const style = window.getComputedStyle(selectionRef.value); return Number.parseFloat(style.gap || "6px"); }; const tagStyle = vue.computed(() => { const gapWidth = getGapWidth(); const maxWidth = collapseItemRef.value && props.maxCollapseTags === 1 ? states.selectionWidth - states.collapseItemWidth - gapWidth : states.selectionWidth; return { maxWidth: `${maxWidth}px` }; }); const collapseTagStyle = vue.computed(() => { return { maxWidth: `${states.selectionWidth}px` }; }); const inputStyle = vue.computed(() => ({ width: `${Math.max(states.calculatorWidth, MINIMUM_INPUT_WIDTH)}px` })); if (props.multiple && !isArray$1(props.modelValue)) { emit(UPDATE_MODEL_EVENT, []); } if (!props.multiple && isArray$1(props.modelValue)) { emit(UPDATE_MODEL_EVENT, ""); } useResizeObserver(selectionRef, resetSelectionWidth); useResizeObserver(calculatorRef, resetCalculatorWidth); useResizeObserver(menuRef, updateTooltip); useResizeObserver(wrapperRef, updateTooltip); useResizeObserver(tagMenuRef, updateTagTooltip); useResizeObserver(collapseItemRef, resetCollapseItemWidth); vue.onMounted(() => { setSelected(); }); return { inputId, contentId, nsSelect, nsInput, states, isFocused, expanded, optionsArray, hoverOption, selectSize, filteredOptionsCount, resetCalculatorWidth, updateTooltip, updateTagTooltip, debouncedOnInputChange, onInput, deletePrevTag, deleteTag, deleteSelected, handleOptionSelect, scrollToOption, hasModelValue, shouldShowPlaceholder, currentPlaceholder, showClose, iconComponent, iconReverse, validateState, validateIcon, showNewOption, updateOptions: updateOptions2, collapseTagSize, setSelected, selectDisabled, emptyText, handleCompositionStart, handleCompositionUpdate, handleCompositionEnd, onOptionCreate, onOptionDestroy, handleMenuEnter, handleFocus, focus, blur, handleBlur, handleClearClick, handleClickOutside, handleEsc, toggleMenu, selectOption, getValueKey, navigateOptions, dropdownMenuVisible, showTagList, collapseTagList, tagStyle, collapseTagStyle, inputStyle, popperRef, inputRef, tooltipRef, tagTooltipRef, calculatorRef, prefixRef, suffixRef, selectRef, wrapperRef, selectionRef, scrollbarRef, menuRef, tagMenuRef, collapseItemRef }; }; var ElOptions = vue.defineComponent({ name: "ElOptions", setup(_2, { slots }) { const select = vue.inject(selectKey); let cachedValueList = []; return () => { var _a2, _b; const children = (_a2 = slots.default) == null ? void 0 : _a2.call(slots); const valueList = []; function filterOptions(children2) { if (!isArray$1(children2)) return; children2.forEach((item) => { var _a22, _b2, _c, _d; const name = (_a22 = (item == null ? void 0 : item.type) || {}) == null ? void 0 : _a22.name; if (name === "ElOptionGroup") { filterOptions(!isString(item.children) && !isArray$1(item.children) && isFunction$1((_b2 = item.children) == null ? void 0 : _b2.default) ? (_c = item.children) == null ? void 0 : _c.default() : item.children); } else if (name === "ElOption") { valueList.push((_d = item.props) == null ? void 0 : _d.value); } else if (isArray$1(item.children)) { filterOptions(item.children); } }); } if (children.length) { filterOptions((_b = children[0]) == null ? void 0 : _b.children); } if (!isEqual(valueList, cachedValueList)) { cachedValueList = valueList; if (select) { select.states.optionValues = valueList; } } return children; }; } }); const SelectProps = buildProps({ name: String, id: String, modelValue: { type: [Array, String, Number, Boolean, Object], default: void 0 }, autocomplete: { type: String, default: "off" }, automaticDropdown: Boolean, size: useSizeProp, effect: { type: definePropType(String), default: "light" }, disabled: Boolean, clearable: Boolean, filterable: Boolean, allowCreate: Boolean, loading: Boolean, popperClass: { type: String, default: "" }, popperOptions: { type: definePropType(Object), default: () => ({}) }, remote: Boolean, loadingText: String, noMatchText: String, noDataText: String, remoteMethod: Function, filterMethod: Function, multiple: Boolean, multipleLimit: { type: Number, default: 0 }, placeholder: { type: String }, defaultFirstOption: Boolean, reserveKeyword: { type: Boolean, default: true }, valueKey: { type: String, default: "value" }, collapseTags: Boolean, collapseTagsTooltip: Boolean, maxCollapseTags: { type: Number, default: 1 }, teleported: useTooltipContentProps.teleported, persistent: { type: Boolean, default: true }, clearIcon: { type: iconPropType, default: circle_close_default }, fitInputWidth: Boolean, suffixIcon: { type: iconPropType, default: arrow_down_default }, tagType: { ...tagProps.type, default: "info" }, validateEvent: { type: Boolean, default: true }, remoteShowSuffix: Boolean, placement: { type: definePropType(String), values: Ee, default: "bottom-start" }, fallbackPlacements: { type: definePropType(Array), default: ["bottom-start", "top-start", "right", "left"] }, ariaLabel: { type: String, default: void 0 } }); const COMPONENT_NAME$1 = "ElSelect"; const _sfc_main$g = vue.defineComponent({ name: COMPONENT_NAME$1, componentName: COMPONENT_NAME$1, components: { ElInput, ElSelectMenu, ElOption: Option, ElOptions, ElTag, ElScrollbar, ElTooltip, ElIcon }, directives: { ClickOutside }, props: SelectProps, emits: [ UPDATE_MODEL_EVENT, CHANGE_EVENT, "remove-tag", "clear", "visible-change", "focus", "blur" ], setup(props, { emit }) { const API = useSelect(props, emit); vue.provide(selectKey, vue.reactive({ props, states: API.states, optionsArray: API.optionsArray, handleOptionSelect: API.handleOptionSelect, onOptionCreate: API.onOptionCreate, onOptionDestroy: API.onOptionDestroy, selectRef: API.selectRef, setSelected: API.setSelected })); return { ...API }; } }); const _hoisted_1$9 = ["id", "disabled", "autocomplete", "readonly", "aria-activedescendant", "aria-controls", "aria-expanded", "aria-label"]; const _hoisted_2$7 = ["textContent"]; function _sfc_render$5(_ctx, _cache, $props, $setup, $data, $options) { const _component_el_tag = vue.resolveComponent("el-tag"); const _component_el_tooltip = vue.resolveComponent("el-tooltip"); const _component_el_icon = vue.resolveComponent("el-icon"); const _component_el_option = vue.resolveComponent("el-option"); const _component_el_options = vue.resolveComponent("el-options"); const _component_el_scrollbar = vue.resolveComponent("el-scrollbar"); const _component_el_select_menu = vue.resolveComponent("el-select-menu"); const _directive_click_outside = vue.resolveDirective("click-outside"); return vue.withDirectives((vue.openBlock(), vue.createElementBlock("div", { ref: "selectRef", class: vue.normalizeClass([_ctx.nsSelect.b(), _ctx.nsSelect.m(_ctx.selectSize)]), onMouseenter: _cache[16] || (_cache[16] = ($event) => _ctx.states.inputHovering = true), onMouseleave: _cache[17] || (_cache[17] = ($event) => _ctx.states.inputHovering = false), onClick: _cache[18] || (_cache[18] = vue.withModifiers((...args) => _ctx.toggleMenu && _ctx.toggleMenu(...args), ["prevent", "stop"])) }, [ vue.createVNode(_component_el_tooltip, { ref: "tooltipRef", visible: _ctx.dropdownMenuVisible, placement: _ctx.placement, teleported: _ctx.teleported, "popper-class": [_ctx.nsSelect.e("popper"), _ctx.popperClass], "popper-options": _ctx.popperOptions, "fallback-placements": _ctx.fallbackPlacements, effect: _ctx.effect, pure: "", trigger: "click", transition: `${_ctx.nsSelect.namespace.value}-zoom-in-top`, "stop-popper-mouse-event": false, "gpu-acceleration": false, persistent: _ctx.persistent, onBeforeShow: _ctx.handleMenuEnter, onHide: _cache[15] || (_cache[15] = ($event) => _ctx.states.isBeforeHide = false) }, { default: vue.withCtx(() => { var _a2; return [ vue.createElementVNode("div", { ref: "wrapperRef", class: vue.normalizeClass([ _ctx.nsSelect.e("wrapper"), _ctx.nsSelect.is("focused", _ctx.isFocused), _ctx.nsSelect.is("hovering", _ctx.states.inputHovering), _ctx.nsSelect.is("filterable", _ctx.filterable), _ctx.nsSelect.is("disabled", _ctx.selectDisabled) ]) }, [ _ctx.$slots.prefix ? (vue.openBlock(), vue.createElementBlock("div", { key: 0, ref: "prefixRef", class: vue.normalizeClass(_ctx.nsSelect.e("prefix")) }, [ vue.renderSlot(_ctx.$slots, "prefix") ], 2)) : vue.createCommentVNode("v-if", true), vue.createElementVNode("div", { ref: "selectionRef", class: vue.normalizeClass([ _ctx.nsSelect.e("selection"), _ctx.nsSelect.is("near", _ctx.multiple && !_ctx.$slots.prefix && !!_ctx.states.selected.length) ]) }, [ _ctx.multiple ? vue.renderSlot(_ctx.$slots, "tag", { key: 0 }, () => [ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.showTagList, (item) => { return vue.openBlock(), vue.createElementBlock("div", { key: _ctx.getValueKey(item), class: vue.normalizeClass(_ctx.nsSelect.e("selected-item")) }, [ vue.createVNode(_component_el_tag, { closable: !_ctx.selectDisabled && !item.isDisabled, size: _ctx.collapseTagSize, type: _ctx.tagType, "disable-transitions": "", style: vue.normalizeStyle(_ctx.tagStyle), onClose: ($event) => _ctx.deleteTag($event, item) }, { default: vue.withCtx(() => [ vue.createElementVNode("span", { class: vue.normalizeClass(_ctx.nsSelect.e("tags-text")) }, vue.toDisplayString(item.currentLabel), 3) ]), _: 2 }, 1032, ["closable", "size", "type", "style", "onClose"]) ], 2); }), 128)), _ctx.collapseTags && _ctx.states.selected.length > _ctx.maxCollapseTags ? (vue.openBlock(), vue.createBlock(_component_el_tooltip, { key: 0, ref: "tagTooltipRef", disabled: _ctx.dropdownMenuVisible || !_ctx.collapseTagsTooltip, "fallback-placements": ["bottom", "top", "right", "left"], effect: _ctx.effect, placement: "bottom", teleported: _ctx.teleported }, { default: vue.withCtx(() => [ vue.createElementVNode("div", { ref: "collapseItemRef", class: vue.normalizeClass(_ctx.nsSelect.e("selected-item")) }, [ vue.createVNode(_component_el_tag, { closable: false, size: _ctx.collapseTagSize, type: _ctx.tagType, "disable-transitions": "", style: vue.normalizeStyle(_ctx.collapseTagStyle) }, { default: vue.withCtx(() => [ vue.createElementVNode("span", { class: vue.normalizeClass(_ctx.nsSelect.e("tags-text")) }, " + " + vue.toDisplayString(_ctx.states.selected.length - _ctx.maxCollapseTags), 3) ]), _: 1 }, 8, ["size", "type", "style"]) ], 2) ]), content: vue.withCtx(() => [ vue.createElementVNode("div", { ref: "tagMenuRef", class: vue.normalizeClass(_ctx.nsSelect.e("selection")) }, [ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.collapseTagList, (item) => { return vue.openBlock(), vue.createElementBlock("div", { key: _ctx.getValueKey(item), class: vue.normalizeClass(_ctx.nsSelect.e("selected-item")) }, [ vue.createVNode(_component_el_tag, { class: "in-tooltip", closable: !_ctx.selectDisabled && !item.isDisabled, size: _ctx.collapseTagSize, type: _ctx.tagType, "disable-transitions": "", onClose: ($event) => _ctx.deleteTag($event, item) }, { default: vue.withCtx(() => [ vue.createElementVNode("span", { class: vue.normalizeClass(_ctx.nsSelect.e("tags-text")) }, vue.toDisplayString(item.currentLabel), 3) ]), _: 2 }, 1032, ["closable", "size", "type", "onClose"]) ], 2); }), 128)) ], 2) ]), _: 1 }, 8, ["disabled", "effect", "teleported"])) : vue.createCommentVNode("v-if", true) ]) : vue.createCommentVNode("v-if", true), !_ctx.selectDisabled ? (vue.openBlock(), vue.createElementBlock("div", { key: 1, class: vue.normalizeClass([ _ctx.nsSelect.e("selected-item"), _ctx.nsSelect.e("input-wrapper"), _ctx.nsSelect.is("hidden", !_ctx.filterable) ]) }, [ vue.withDirectives(vue.createElementVNode("input", { id: _ctx.inputId, ref: "inputRef", "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => _ctx.states.inputValue = $event), type: "text", class: vue.normalizeClass([_ctx.nsSelect.e("input"), _ctx.nsSelect.is(_ctx.selectSize)]), disabled: _ctx.selectDisabled, autocomplete: _ctx.autocomplete, style: vue.normalizeStyle(_ctx.inputStyle), role: "combobox", readonly: !_ctx.filterable, spellcheck: "false", "aria-activedescendant": ((_a2 = _ctx.hoverOption) == null ? void 0 : _a2.id) || "", "aria-controls": _ctx.contentId, "aria-expanded": _ctx.dropdownMenuVisible, "aria-label": _ctx.ariaLabel, "aria-autocomplete": "none", "aria-haspopup": "listbox", onFocus: _cache[1] || (_cache[1] = (...args) => _ctx.handleFocus && _ctx.handleFocus(...args)), onBlur: _cache[2] || (_cache[2] = (...args) => _ctx.handleBlur && _ctx.handleBlur(...args)), onKeydown: [ _cache[3] || (_cache[3] = vue.withKeys(vue.withModifiers(($event) => _ctx.navigateOptions("next"), ["stop", "prevent"]), ["down"])), _cache[4] || (_cache[4] = vue.withKeys(vue.withModifiers(($event) => _ctx.navigateOptions("prev"), ["stop", "prevent"]), ["up"])), _cache[5] || (_cache[5] = vue.withKeys(vue.withModifiers((...args) => _ctx.handleEsc && _ctx.handleEsc(...args), ["stop", "prevent"]), ["esc"])), _cache[6] || (_cache[6] = vue.withKeys(vue.withModifiers((...args) => _ctx.selectOption && _ctx.selectOption(...args), ["stop", "prevent"]), ["enter"])), _cache[7] || (_cache[7] = vue.withKeys(vue.withModifiers((...args) => _ctx.deletePrevTag && _ctx.deletePrevTag(...args), ["stop"]), ["delete"])) ], onCompositionstart: _cache[8] || (_cache[8] = (...args) => _ctx.handleCompositionStart && _ctx.handleCompositionStart(...args)), onCompositionupdate: _cache[9] || (_cache[9] = (...args) => _ctx.handleCompositionUpdate && _ctx.handleCompositionUpdate(...args)), onCompositionend: _cache[10] || (_cache[10] = (...args) => _ctx.handleCompositionEnd && _ctx.handleCompositionEnd(...args)), onInput: _cache[11] || (_cache[11] = (...args) => _ctx.onInput && _ctx.onInput(...args)), onClick: _cache[12] || (_cache[12] = vue.withModifiers((...args) => _ctx.toggleMenu && _ctx.toggleMenu(...args), ["stop"])) }, null, 46, _hoisted_1$9), [ [vue.vModelText, _ctx.states.inputValue] ]), _ctx.filterable ? (vue.openBlock(), vue.createElementBlock("span", { key: 0, ref: "calculatorRef", "aria-hidden": "true", class: vue.normalizeClass(_ctx.nsSelect.e("input-calculator")), textContent: vue.toDisplayString(_ctx.states.inputValue) }, null, 10, _hoisted_2$7)) : vue.createCommentVNode("v-if", true) ], 2)) : vue.createCommentVNode("v-if", true), _ctx.shouldShowPlaceholder ? (vue.openBlock(), vue.createElementBlock("div", { key: 2, class: vue.normalizeClass([ _ctx.nsSelect.e("selected-item"), _ctx.nsSelect.e("placeholder"), _ctx.nsSelect.is("transparent", !_ctx.hasModelValue || _ctx.expanded && !_ctx.states.inputValue) ]) }, [ vue.createElementVNode("span", null, vue.toDisplayString(_ctx.currentPlaceholder), 1) ], 2)) : vue.createCommentVNode("v-if", true) ], 2), vue.createElementVNode("div", { ref: "suffixRef", class: vue.normalizeClass(_ctx.nsSelect.e("suffix")) }, [ _ctx.iconComponent && !_ctx.showClose ? (vue.openBlock(), vue.createBlock(_component_el_icon, { key: 0, class: vue.normalizeClass([_ctx.nsSelect.e("caret"), _ctx.nsSelect.e("icon"), _ctx.iconReverse]) }, { default: vue.withCtx(() => [ (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.iconComponent))) ]), _: 1 }, 8, ["class"])) : vue.createCommentVNode("v-if", true), _ctx.showClose && _ctx.clearIcon ? (vue.openBlock(), vue.createBlock(_component_el_icon, { key: 1, class: vue.normalizeClass([_ctx.nsSelect.e("caret"), _ctx.nsSelect.e("icon")]), onClick: _ctx.handleClearClick }, { default: vue.withCtx(() => [ (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.clearIcon))) ]), _: 1 }, 8, ["class", "onClick"])) : vue.createCommentVNode("v-if", true), _ctx.validateState && _ctx.validateIcon ? (vue.openBlock(), vue.createBlock(_component_el_icon, { key: 2, class: vue.normalizeClass([_ctx.nsInput.e("icon"), _ctx.nsInput.e("validateIcon")]) }, { default: vue.withCtx(() => [ (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.validateIcon))) ]), _: 1 }, 8, ["class"])) : vue.createCommentVNode("v-if", true) ], 2) ], 2) ]; }), content: vue.withCtx(() => [ vue.createVNode(_component_el_select_menu, { ref: "menuRef" }, { default: vue.withCtx(() => [ _ctx.$slots.header ? (vue.openBlock(), vue.createElementBlock("div", { key: 0, class: vue.normalizeClass(_ctx.nsSelect.be("dropdown", "header")), onClick: _cache[13] || (_cache[13] = vue.withModifiers(() => { }, ["stop"])) }, [ vue.renderSlot(_ctx.$slots, "header") ], 2)) : vue.createCommentVNode("v-if", true), vue.withDirectives(vue.createVNode(_component_el_scrollbar, { id: _ctx.contentId, ref: "scrollbarRef", tag: "ul", "wrap-class": _ctx.nsSelect.be("dropdown", "wrap"), "view-class": _ctx.nsSelect.be("dropdown", "list"), class: vue.normalizeClass([_ctx.nsSelect.is("empty", _ctx.filteredOptionsCount === 0)]), role: "listbox", "aria-label": _ctx.ariaLabel, "aria-orientation": "vertical" }, { default: vue.withCtx(() => [ _ctx.showNewOption ? (vue.openBlock(), vue.createBlock(_component_el_option, { key: 0, value: _ctx.states.inputValue, created: true }, null, 8, ["value"])) : vue.createCommentVNode("v-if", true), vue.createVNode(_component_el_options, null, { default: vue.withCtx(() => [ vue.renderSlot(_ctx.$slots, "default") ]), _: 3 }) ]), _: 3 }, 8, ["id", "wrap-class", "view-class", "class", "aria-label"]), [ [vue.vShow, _ctx.states.options.size > 0 && !_ctx.loading] ]), _ctx.$slots.loading && _ctx.loading ? (vue.openBlock(), vue.createElementBlock("div", { key: 1, class: vue.normalizeClass(_ctx.nsSelect.be("dropdown", "loading")) }, [ vue.renderSlot(_ctx.$slots, "loading") ], 2)) : _ctx.loading || _ctx.filteredOptionsCount === 0 ? (vue.openBlock(), vue.createElementBlock("div", { key: 2, class: vue.normalizeClass(_ctx.nsSelect.be("dropdown", "empty")) }, [ vue.renderSlot(_ctx.$slots, "empty", {}, () => [ vue.createElementVNode("span", null, vue.toDisplayString(_ctx.emptyText), 1) ]) ], 2)) : vue.createCommentVNode("v-if", true), _ctx.$slots.footer ? (vue.openBlock(), vue.createElementBlock("div", { key: 3, class: vue.normalizeClass(_ctx.nsSelect.be("dropdown", "footer")), onClick: _cache[14] || (_cache[14] = vue.withModifiers(() => { }, ["stop"])) }, [ vue.renderSlot(_ctx.$slots, "footer") ], 2)) : vue.createCommentVNode("v-if", true) ]), _: 3 }, 512) ]), _: 3 }, 8, ["visible", "placement", "teleported", "popper-class", "popper-options", "fallback-placements", "effect", "transition", "persistent", "onBeforeShow"]) ], 34)), [ [_directive_click_outside, _ctx.handleClickOutside, _ctx.popperRef] ]); } var Select = /* @__PURE__ */ _export_sfc$1(_sfc_main$g, [["render", _sfc_render$5], ["__file", "select.vue"]]); const _sfc_main$f = vue.defineComponent({ name: "ElOptionGroup", componentName: "ElOptionGroup", props: { label: String, disabled: Boolean }, setup(props) { const ns = useNamespace("select"); const groupRef = vue.ref(null); const instance = vue.getCurrentInstance(); const children = vue.ref([]); vue.provide(selectGroupKey, vue.reactive({ ...vue.toRefs(props) })); const visible = vue.computed(() => children.value.some((option) => option.visible === true)); const flattedChildren = (node) => { const children2 = []; if (isArray$1(node.children)) { node.children.forEach((child) => { var _a2, _b; if (child.type && child.type.name === "ElOption" && child.component && child.component.proxy) { children2.push(child.component.proxy); } else if ((_a2 = child.children) == null ? void 0 : _a2.length) { children2.push(...flattedChildren(child)); } else if ((_b = child.component) == null ? void 0 : _b.subTree) { children2.push(...flattedChildren(child.component.subTree)); } }); } return children2; }; const updateChildren = () => { children.value = flattedChildren(instance.subTree); }; vue.onMounted(() => { updateChildren(); }); useMutationObserver(groupRef, updateChildren, { attributes: true, subtree: true, childList: true }); return { groupRef, visible, ns }; } }); function _sfc_render$4(_ctx, _cache, $props, $setup, $data, $options) { return vue.withDirectives((vue.openBlock(), vue.createElementBlock("ul", { ref: "groupRef", class: vue.normalizeClass(_ctx.ns.be("group", "wrap")) }, [ vue.createElementVNode("li", { class: vue.normalizeClass(_ctx.ns.be("group", "title")) }, vue.toDisplayString(_ctx.label), 3), vue.createElementVNode("li", null, [ vue.createElementVNode("ul", { class: vue.normalizeClass(_ctx.ns.b("group")) }, [ vue.renderSlot(_ctx.$slots, "default") ], 2) ]) ], 2)), [ [vue.vShow, _ctx.visible] ]); } var OptionGroup = /* @__PURE__ */ _export_sfc$1(_sfc_main$f, [["render", _sfc_render$4], ["__file", "option-group.vue"]]); const ElSelect = withInstall(Select, { Option, OptionGroup }); const ElOption = withNoopInstall(Option); withNoopInstall(OptionGroup); const popconfirmProps = buildProps({ title: String, confirmButtonText: String, cancelButtonText: String, confirmButtonType: { type: String, values: buttonTypes, default: "primary" }, cancelButtonType: { type: String, values: buttonTypes, default: "text" }, icon: { type: iconPropType, default: () => question_filled_default }, iconColor: { type: String, default: "#f90" }, hideIcon: { type: Boolean, default: false }, hideAfter: { type: Number, default: 200 }, teleported: useTooltipContentProps.teleported, persistent: useTooltipContentProps.persistent, width: { type: [String, Number], default: 150 } }); const popconfirmEmits = { confirm: (e) => e instanceof MouseEvent, cancel: (e) => e instanceof MouseEvent }; const __default__$4 = vue.defineComponent({ name: "ElPopconfirm" }); const _sfc_main$e = /* @__PURE__ */ vue.defineComponent({ ...__default__$4, props: popconfirmProps, emits: popconfirmEmits, setup(__props, { emit }) { const props = __props; const { t } = useLocale(); const ns = useNamespace("popconfirm"); const tooltipRef = vue.ref(); const hidePopper = () => { var _a2, _b; (_b = (_a2 = tooltipRef.value) == null ? void 0 : _a2.onClose) == null ? void 0 : _b.call(_a2); }; const style = vue.computed(() => { return { width: addUnit(props.width) }; }); const confirm = (e) => { emit("confirm", e); hidePopper(); }; const cancel = (e) => { emit("cancel", e); hidePopper(); }; const finalConfirmButtonText = vue.computed(() => props.confirmButtonText || t("el.popconfirm.confirmButtonText")); const finalCancelButtonText = vue.computed(() => props.cancelButtonText || t("el.popconfirm.cancelButtonText")); return (_ctx, _cache) => { return vue.openBlock(), vue.createBlock(vue.unref(ElTooltip), vue.mergeProps({ ref_key: "tooltipRef", ref: tooltipRef, trigger: "click", effect: "light" }, _ctx.$attrs, { "popper-class": `${vue.unref(ns).namespace.value}-popover`, "popper-style": vue.unref(style), teleported: _ctx.teleported, "fallback-placements": ["bottom", "top", "right", "left"], "hide-after": _ctx.hideAfter, persistent: _ctx.persistent }), { content: vue.withCtx(() => [ vue.createElementVNode("div", { class: vue.normalizeClass(vue.unref(ns).b()) }, [ vue.createElementVNode("div", { class: vue.normalizeClass(vue.unref(ns).e("main")) }, [ !_ctx.hideIcon && _ctx.icon ? (vue.openBlock(), vue.createBlock(vue.unref(ElIcon), { key: 0, class: vue.normalizeClass(vue.unref(ns).e("icon")), style: vue.normalizeStyle({ color: _ctx.iconColor }) }, { default: vue.withCtx(() => [ (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.icon))) ]), _: 1 }, 8, ["class", "style"])) : vue.createCommentVNode("v-if", true), vue.createTextVNode(" " + vue.toDisplayString(_ctx.title), 1) ], 2), vue.createElementVNode("div", { class: vue.normalizeClass(vue.unref(ns).e("action")) }, [ vue.createVNode(vue.unref(ElButton), { size: "small", type: _ctx.cancelButtonType === "text" ? "" : _ctx.cancelButtonType, text: _ctx.cancelButtonType === "text", onClick: cancel }, { default: vue.withCtx(() => [ vue.createTextVNode(vue.toDisplayString(vue.unref(finalCancelButtonText)), 1) ]), _: 1 }, 8, ["type", "text"]), vue.createVNode(vue.unref(ElButton), { size: "small", type: _ctx.confirmButtonType === "text" ? "" : _ctx.confirmButtonType, text: _ctx.confirmButtonType === "text", onClick: confirm }, { default: vue.withCtx(() => [ vue.createTextVNode(vue.toDisplayString(vue.unref(finalConfirmButtonText)), 1) ]), _: 1 }, 8, ["type", "text"]) ], 2) ], 2) ]), default: vue.withCtx(() => [ _ctx.$slots.reference ? vue.renderSlot(_ctx.$slots, "reference", { key: 0 }) : vue.createCommentVNode("v-if", true) ]), _: 3 }, 16, ["popper-class", "popper-style", "teleported", "hide-after", "persistent"]); }; } }); var Popconfirm = /* @__PURE__ */ _export_sfc$1(_sfc_main$e, [["__file", "popconfirm.vue"]]); const ElPopconfirm = withInstall(Popconfirm); const statisticProps = buildProps({ decimalSeparator: { type: String, default: "." }, groupSeparator: { type: String, default: "," }, precision: { type: Number, default: 0 }, formatter: Function, value: { type: definePropType([Number, Object]), default: 0 }, prefix: String, suffix: String, title: String, valueStyle: { type: definePropType([String, Object, Array]) } }); const __default__$3 = vue.defineComponent({ name: "ElStatistic" }); const _sfc_main$d = /* @__PURE__ */ vue.defineComponent({ ...__default__$3, props: statisticProps, setup(__props, { expose }) { const props = __props; const ns = useNamespace("statistic"); const displayValue = vue.computed(() => { const { value, formatter, precision, decimalSeparator, groupSeparator } = props; if (isFunction$1(formatter)) return formatter(value); if (!isNumber(value)) return value; let [integer, decimal = ""] = String(value).split("."); decimal = decimal.padEnd(precision, "0").slice(0, precision > 0 ? precision : 0); integer = integer.replace(/\B(?=(\d{3})+(?!\d))/g, groupSeparator); return [integer, decimal].join(decimal ? decimalSeparator : ""); }); expose({ displayValue }); return (_ctx, _cache) => { return vue.openBlock(), vue.createElementBlock("div", { class: vue.normalizeClass(vue.unref(ns).b()) }, [ _ctx.$slots.title || _ctx.title ? (vue.openBlock(), vue.createElementBlock("div", { key: 0, class: vue.normalizeClass(vue.unref(ns).e("head")) }, [ vue.renderSlot(_ctx.$slots, "title", {}, () => [ vue.createTextVNode(vue.toDisplayString(_ctx.title), 1) ]) ], 2)) : vue.createCommentVNode("v-if", true), vue.createElementVNode("div", { class: vue.normalizeClass(vue.unref(ns).e("content")) }, [ _ctx.$slots.prefix || _ctx.prefix ? (vue.openBlock(), vue.createElementBlock("div", { key: 0, class: vue.normalizeClass(vue.unref(ns).e("prefix")) }, [ vue.renderSlot(_ctx.$slots, "prefix", {}, () => [ vue.createElementVNode("span", null, vue.toDisplayString(_ctx.prefix), 1) ]) ], 2)) : vue.createCommentVNode("v-if", true), vue.createElementVNode("span", { class: vue.normalizeClass(vue.unref(ns).e("number")), style: vue.normalizeStyle(_ctx.valueStyle) }, vue.toDisplayString(vue.unref(displayValue)), 7), _ctx.$slots.suffix || _ctx.suffix ? (vue.openBlock(), vue.createElementBlock("div", { key: 1, class: vue.normalizeClass(vue.unref(ns).e("suffix")) }, [ vue.renderSlot(_ctx.$slots, "suffix", {}, () => [ vue.createElementVNode("span", null, vue.toDisplayString(_ctx.suffix), 1) ]) ], 2)) : vue.createCommentVNode("v-if", true) ], 2) ], 2); }; } }); var Statistic = /* @__PURE__ */ _export_sfc$1(_sfc_main$d, [["__file", "statistic.vue"]]); const ElStatistic = withInstall(Statistic); const switchProps = buildProps({ modelValue: { type: [Boolean, String, Number], default: false }, disabled: { type: Boolean, default: false }, loading: { type: Boolean, default: false }, size: { type: String, validator: isValidComponentSize }, width: { type: [String, Number], default: "" }, inlinePrompt: { type: Boolean, default: false }, inactiveActionIcon: { type: iconPropType }, activeActionIcon: { type: iconPropType }, activeIcon: { type: iconPropType }, inactiveIcon: { type: iconPropType }, activeText: { type: String, default: "" }, inactiveText: { type: String, default: "" }, activeValue: { type: [Boolean, String, Number], default: true }, inactiveValue: { type: [Boolean, String, Number], default: false }, name: { type: String, default: "" }, validateEvent: { type: Boolean, default: true }, beforeChange: { type: definePropType(Function) }, id: String, tabindex: { type: [String, Number] }, label: { type: String, default: void 0 } }); const switchEmits = { [UPDATE_MODEL_EVENT]: (val) => isBoolean(val) || isString(val) || isNumber(val), [CHANGE_EVENT]: (val) => isBoolean(val) || isString(val) || isNumber(val), [INPUT_EVENT]: (val) => isBoolean(val) || isString(val) || isNumber(val) }; const _hoisted_1$8 = ["onClick"]; const _hoisted_2$6 = ["id", "aria-checked", "aria-disabled", "aria-label", "name", "true-value", "false-value", "disabled", "tabindex", "onKeydown"]; const _hoisted_3$5 = ["aria-hidden"]; const _hoisted_4$4 = ["aria-hidden"]; const _hoisted_5$3 = ["aria-hidden"]; const COMPONENT_NAME = "ElSwitch"; const __default__$2 = vue.defineComponent({ name: COMPONENT_NAME }); const _sfc_main$c = /* @__PURE__ */ vue.defineComponent({ ...__default__$2, props: switchProps, emits: switchEmits, setup(__props, { expose, emit }) { const props = __props; const { formItem } = useFormItem(); const switchSize = useFormSize(); const ns = useNamespace("switch"); const { inputId } = useFormItemInputId(props, { formItemContext: formItem }); const switchDisabled = useFormDisabled(vue.computed(() => props.loading)); const isControlled = vue.ref(props.modelValue !== false); const input = vue.ref(); const core = vue.ref(); const switchKls = vue.computed(() => [ ns.b(), ns.m(switchSize.value), ns.is("disabled", switchDisabled.value), ns.is("checked", checked.value) ]); const labelLeftKls = vue.computed(() => [ ns.e("label"), ns.em("label", "left"), ns.is("active", !checked.value) ]); const labelRightKls = vue.computed(() => [ ns.e("label"), ns.em("label", "right"), ns.is("active", checked.value) ]); const coreStyle = vue.computed(() => ({ width: addUnit(props.width) })); vue.watch(() => props.modelValue, () => { isControlled.value = true; }); const actualValue = vue.computed(() => { return isControlled.value ? props.modelValue : false; }); const checked = vue.computed(() => actualValue.value === props.activeValue); if (![props.activeValue, props.inactiveValue].includes(actualValue.value)) { emit(UPDATE_MODEL_EVENT, props.inactiveValue); emit(CHANGE_EVENT, props.inactiveValue); emit(INPUT_EVENT, props.inactiveValue); } vue.watch(checked, (val) => { var _a2; input.value.checked = val; if (props.validateEvent) { (_a2 = formItem == null ? void 0 : formItem.validate) == null ? void 0 : _a2.call(formItem, "change").catch((err) => debugWarn()); } }); const handleChange = () => { const val = checked.value ? props.inactiveValue : props.activeValue; emit(UPDATE_MODEL_EVENT, val); emit(CHANGE_EVENT, val); emit(INPUT_EVENT, val); vue.nextTick(() => { input.value.checked = checked.value; }); }; const switchValue = () => { if (switchDisabled.value) return; const { beforeChange } = props; if (!beforeChange) { handleChange(); return; } const shouldChange = beforeChange(); const isPromiseOrBool = [ isPromise(shouldChange), isBoolean(shouldChange) ].includes(true); if (!isPromiseOrBool) { throwError(COMPONENT_NAME, "beforeChange must return type `Promise<boolean>` or `boolean`"); } if (isPromise(shouldChange)) { shouldChange.then((result) => { if (result) { handleChange(); } }).catch((e) => { }); } else if (shouldChange) { handleChange(); } }; const focus = () => { var _a2, _b; (_b = (_a2 = input.value) == null ? void 0 : _a2.focus) == null ? void 0 : _b.call(_a2); }; vue.onMounted(() => { input.value.checked = checked.value; }); expose({ focus, checked }); return (_ctx, _cache) => { return vue.openBlock(), vue.createElementBlock("div", { class: vue.normalizeClass(vue.unref(switchKls)), onClick: vue.withModifiers(switchValue, ["prevent"]) }, [ vue.createElementVNode("input", { id: vue.unref(inputId), ref_key: "input", ref: input, class: vue.normalizeClass(vue.unref(ns).e("input")), type: "checkbox", role: "switch", "aria-checked": vue.unref(checked), "aria-disabled": vue.unref(switchDisabled), "aria-label": _ctx.label, name: _ctx.name, "true-value": _ctx.activeValue, "false-value": _ctx.inactiveValue, disabled: vue.unref(switchDisabled), tabindex: _ctx.tabindex, onChange: handleChange, onKeydown: vue.withKeys(switchValue, ["enter"]) }, null, 42, _hoisted_2$6), !_ctx.inlinePrompt && (_ctx.inactiveIcon || _ctx.inactiveText) ? (vue.openBlock(), vue.createElementBlock("span", { key: 0, class: vue.normalizeClass(vue.unref(labelLeftKls)) }, [ _ctx.inactiveIcon ? (vue.openBlock(), vue.createBlock(vue.unref(ElIcon), { key: 0 }, { default: vue.withCtx(() => [ (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.inactiveIcon))) ]), _: 1 })) : vue.createCommentVNode("v-if", true), !_ctx.inactiveIcon && _ctx.inactiveText ? (vue.openBlock(), vue.createElementBlock("span", { key: 1, "aria-hidden": vue.unref(checked) }, vue.toDisplayString(_ctx.inactiveText), 9, _hoisted_3$5)) : vue.createCommentVNode("v-if", true) ], 2)) : vue.createCommentVNode("v-if", true), vue.createElementVNode("span", { ref_key: "core", ref: core, class: vue.normalizeClass(vue.unref(ns).e("core")), style: vue.normalizeStyle(vue.unref(coreStyle)) }, [ _ctx.inlinePrompt ? (vue.openBlock(), vue.createElementBlock("div", { key: 0, class: vue.normalizeClass(vue.unref(ns).e("inner")) }, [ _ctx.activeIcon || _ctx.inactiveIcon ? (vue.openBlock(), vue.createBlock(vue.unref(ElIcon), { key: 0, class: vue.normalizeClass(vue.unref(ns).is("icon")) }, { default: vue.withCtx(() => [ (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(vue.unref(checked) ? _ctx.activeIcon : _ctx.inactiveIcon))) ]), _: 1 }, 8, ["class"])) : _ctx.activeText || _ctx.inactiveText ? (vue.openBlock(), vue.createElementBlock("span", { key: 1, class: vue.normalizeClass(vue.unref(ns).is("text")), "aria-hidden": !vue.unref(checked) }, vue.toDisplayString(vue.unref(checked) ? _ctx.activeText : _ctx.inactiveText), 11, _hoisted_4$4)) : vue.createCommentVNode("v-if", true) ], 2)) : vue.createCommentVNode("v-if", true), vue.createElementVNode("div", { class: vue.normalizeClass(vue.unref(ns).e("action")) }, [ _ctx.loading ? (vue.openBlock(), vue.createBlock(vue.unref(ElIcon), { key: 0, class: vue.normalizeClass(vue.unref(ns).is("loading")) }, { default: vue.withCtx(() => [ vue.createVNode(vue.unref(loading_default)) ]), _: 1 }, 8, ["class"])) : vue.unref(checked) ? vue.renderSlot(_ctx.$slots, "active-action", { key: 1 }, () => [ _ctx.activeActionIcon ? (vue.openBlock(), vue.createBlock(vue.unref(ElIcon), { key: 0 }, { default: vue.withCtx(() => [ (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.activeActionIcon))) ]), _: 1 })) : vue.createCommentVNode("v-if", true) ]) : !vue.unref(checked) ? vue.renderSlot(_ctx.$slots, "inactive-action", { key: 2 }, () => [ _ctx.inactiveActionIcon ? (vue.openBlock(), vue.createBlock(vue.unref(ElIcon), { key: 0 }, { default: vue.withCtx(() => [ (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.inactiveActionIcon))) ]), _: 1 })) : vue.createCommentVNode("v-if", true) ]) : vue.createCommentVNode("v-if", true) ], 2) ], 6), !_ctx.inlinePrompt && (_ctx.activeIcon || _ctx.activeText) ? (vue.openBlock(), vue.createElementBlock("span", { key: 1, class: vue.normalizeClass(vue.unref(labelRightKls)) }, [ _ctx.activeIcon ? (vue.openBlock(), vue.createBlock(vue.unref(ElIcon), { key: 0 }, { default: vue.withCtx(() => [ (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.activeIcon))) ]), _: 1 })) : vue.createCommentVNode("v-if", true), !_ctx.activeIcon && _ctx.activeText ? (vue.openBlock(), vue.createElementBlock("span", { key: 1, "aria-hidden": !vue.unref(checked) }, vue.toDisplayString(_ctx.activeText), 9, _hoisted_5$3)) : vue.createCommentVNode("v-if", true) ], 2)) : vue.createCommentVNode("v-if", true) ], 10, _hoisted_1$8); }; } }); var Switch = /* @__PURE__ */ _export_sfc$1(_sfc_main$c, [["__file", "switch.vue"]]); const ElSwitch = withInstall(Switch); const getCell = function(event2) { var _a2; return (_a2 = event2.target) == null ? void 0 : _a2.closest("td"); }; const orderBy = function(array, sortKey, reverse, sortMethod, sortBy) { if (!sortKey && !sortMethod && (!sortBy || Array.isArray(sortBy) && !sortBy.length)) { return array; } if (typeof reverse === "string") { reverse = reverse === "descending" ? -1 : 1; } else { reverse = reverse && reverse < 0 ? -1 : 1; } const getKey = sortMethod ? null : function(value, index) { if (sortBy) { if (!Array.isArray(sortBy)) { sortBy = [sortBy]; } return sortBy.map((by) => { if (typeof by === "string") { 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 (typeof rowKey === "string") { if (!rowKey.includes(".")) { return `${row[rowKey]}`; } const key2 = rowKey.split("."); let current = row; for (const element of key2) { current = current[element]; } return `${current}`; } else if (typeof rowKey === "function") { 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 key2; for (key2 in defaults) { options[key2] = defaults[key2]; } for (key2 in config) { if (hasOwn(config, key2)) { const value = config[key2]; if (typeof value !== "undefined") { options[key2] = value; } } } return options; } function parseWidth(width) { if (width === "") return width; if (width !== void 0) { width = Number.parseInt(width, 10); if (Number.isNaN(width)) { width = ""; } } return width; } function parseMinWidth(minWidth) { if (minWidth === "") return minWidth; if (minWidth !== void 0) { minWidth = parseWidth(minWidth); if (Number.isNaN(minWidth)) { minWidth = 80; } } return minWidth; } function parseHeight(height) { if (typeof height === "number") { return height; } if (typeof height === "string") { 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) { let changed = false; const index = statusArr.indexOf(row); const included = index !== -1; const toggleStatus = (type) => { if (type === "add") { statusArr.push(row); } else { statusArr.splice(index, 1); } changed = true; if (isArray$1(row.children)) { row.children.forEach((item) => { toggleRowStatus(statusArr, item, newVal != null ? newVal : !included); }); } }; if (isBoolean(newVal)) { if (newVal && !included) { toggleStatus("add"); } else if (!newVal && included) { toggleStatus("remove"); } } else { included ? toggleStatus("remove") : toggleStatus("add"); } return changed; } function walkTreeNode(root2, cb, childrenKey = "children", lazyKey = "hasChildren") { const isNil2 = (array) => !(Array.isArray(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); } }); } let removePopper = null; function createTablePopper(props, popperContent, trigger, table) { if ((removePopper == null ? void 0 : removePopper.trigger) === trigger) { return; } removePopper == null ? void 0 : removePopper(); const parentNode = table == null ? void 0 : table.refs.tableWrapper; const ns = parentNode == null ? void 0 : parentNode.dataset.prefix; const popperOptions = { strategy: "fixed", ...props.popperOptions }; const vm = vue.createVNode(ElTooltip, { content: popperContent, virtualTriggering: true, virtualRef: trigger, appendTo: parentNode, placement: "top", transition: "none", offset: 0, hideAfter: 0, ...props, popperOptions, onHide: () => { removePopper == null ? void 0 : removePopper(); } }); vm.appContext = { ...table.appContext, ...table }; const container = document.createElement("div"); vue.render(vm, container); vm.component.exposed.onOpen(); const scrollContainer = parentNode == null ? void 0 : parentNode.querySelector(`.${ns}-scrollbar__wrap`); removePopper = () => { vue.render(null, container); scrollContainer == null ? void 0 : scrollContainer.removeEventListener("scroll", removePopper); removePopper = null; }; removePopper.trigger = trigger; scrollContainer == null ? void 0 : scrollContainer.addEventListener("scroll", removePopper); } function getCurrentColumns(column) { if (column.children) { return flatMap(column.children, getCurrentColumns); } else { return [column]; } } function getColSpan(colSpan, column) { return colSpan + column.colSpan; } const isFixedColumn = (index, fixed, store, realColumns) => { let start = 0; let after = index; const columns = store.states.columns.value; if (realColumns) { const curColumns = getCurrentColumns(realColumns[index]); const preColumns = columns.slice(0, columns.indexOf(curColumns[0])); start = preColumns.reduce(getColSpan, 0); after = start + curColumns.reduce(getColSpan, 0) - 1; } else { start = index; } let fixedLayout; switch (fixed) { case "left": if (after < store.states.fixedLeafColumnsLength.value) { fixedLayout = "left"; } break; case "right": if (start >= columns.length - store.states.rightFixedLeafColumnsLength.value) { fixedLayout = "right"; } break; default: if (after < store.states.fixedLeafColumnsLength.value) { fixedLayout = "left"; } else if (start >= columns.length - store.states.rightFixedLeafColumnsLength.value) { fixedLayout = "right"; } } return fixedLayout ? { direction: fixedLayout, start, after } : {}; }; const getFixedColumnsClass = (namespace, index, fixed, store, realColumns, offset = 0) => { const classes = []; const { direction, start, after } = isFixedColumn(index, fixed, store, realColumns); if (direction) { const isLeft = direction === "left"; classes.push(`${namespace}-fixed-column--${direction}`); if (isLeft && after + offset === store.states.fixedLeafColumnsLength.value - 1) { classes.push("is-last-column"); } else if (!isLeft && start - offset === store.states.columns.value.length - store.states.rightFixedLeafColumnsLength.value) { classes.push("is-first-column"); } } return classes; }; function getOffset(offset, column) { return offset + (column.realWidth === null || 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, key2) => { if (!style) return; if (!Number.isNaN(style[key2])) { style[key2] = `${style[key2]}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 = (key2) => { instance.store.assertRowKey(); _currentRowKey.value = key2; setCurrentRowByKey(key2); }; const restoreCurrentRowKey = () => { _currentRowKey.value = null; }; const setCurrentRowByKey = (key2) => { const { data, rowKey } = watcherData; let _currentRow = null; if (rowKey.value) { _currentRow = (vue.unref(data) || []).find((item) => getRowIdentity(item, rowKey.value) === key2); } 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 (currentRow.value === null) { 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 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((key2) => { if (lazyTreeNodeMap.value[key2].length) { const item = { children: [] }; lazyTreeNodeMap.value[key2].forEach((row) => { const currentRowKey = getRowIdentity(row, rowKey); item.children.push(currentRowKey); if (row[lazyColumnIdentifier.value] && !res[currentRowKey]) { res[currentRowKey] = { children: [] }; } }); res[key2] = item; } }); return res; }); const normalize = (data) => { const rowKey = watcherData.rowKey.value; const res = {}; walkTreeNode(data, (parent, children, level) => { const parentId = getRowIdentity(parent, rowKey); if (Array.isArray(children)) { res[parentId] = { children: children.map((row) => getRowIdentity(row, rowKey)), level }; } else if (lazy.value) { res[parentId] = { children: [], lazy: true, level }; } }, childrenColumnName.value, lazyColumnIdentifier.value); return res; }; const updateTreeData = (ifChangeExpandRowKeys = false, ifExpandAll = ((_a2) => (_a2 = instance.store) == null ? void 0 : _a2.states.defaultExpandAll.value)()) => { var _a2; const nested = normalizedData.value; const normalizedLazyNode_ = normalizedLazyNode.value; const keys2 = Object.keys(nested); const newTreeData = {}; if (keys2.length) { const oldTreeData = vue.unref(treeData); const rootLazyRowKeys = []; const getExpanded = (oldValue, key2) => { if (ifChangeExpandRowKeys) { if (expandRowKeys.value) { return ifExpandAll || expandRowKeys.value.includes(key2); } else { return !!(ifExpandAll || (oldValue == null ? void 0 : oldValue.expanded)); } } else { const included = ifExpandAll || expandRowKeys.value && expandRowKeys.value.includes(key2); return !!((oldValue == null ? void 0 : oldValue.expanded) || included); } }; keys2.forEach((key2) => { const oldValue = oldTreeData[key2]; const newValue = { ...nested[key2] }; newValue.expanded = getExpanded(oldValue, key2); if (newValue.lazy) { const { loaded = false, loading = false } = oldValue || {}; newValue.loaded = !!loaded; newValue.loading = !!loading; rootLazyRowKeys.push(key2); } newTreeData[key2] = newValue; }); const lazyKeys = Object.keys(normalizedLazyNode_); if (lazy.value && lazyKeys.length && rootLazyRowKeys.length) { lazyKeys.forEach((key2) => { const oldValue = oldTreeData[key2]; const lazyNodeChildren = normalizedLazyNode_[key2].children; if (rootLazyRowKeys.includes(key2)) { if (newTreeData[key2].children.length !== 0) { throw new Error("[ElTable]children must be an empty array."); } newTreeData[key2].children = lazyNodeChildren; } else { const { loaded = false, loading = false } = oldValue || {}; newTreeData[key2] = { lazy: true, loaded: !!loaded, loading: !!loading, expanded: getExpanded(oldValue, key2), children: lazyNodeChildren, level: "" }; } }); } } treeData.value = newTreeData; (_a2 = instance.store) == null ? void 0 : _a2.updateTableScrollY(); }; vue.watch(() => expandRowKeys.value, () => { updateTreeData(true); }); vue.watch(() => normalizedData.value, () => { updateTreeData(); }); vue.watch(() => normalizedLazyNode.value, () => { updateTreeData(); }); const updateTreeExpandKeys = (value) => { expandRowKeys.value = value; updateTreeData(); }; const 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 = typeof expanded === "undefined" ? !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, void 0); } }; const loadData = (row, key2, treeNode) => { const { load } = instance.props; if (load && !treeData.value[key2].loaded) { treeData.value[key2].loading = true; load(row, treeNode, (data) => { if (!Array.isArray(data)) { throw new TypeError("[ElTable] data must be an array"); } treeData.value[key2].loading = false; treeData.value[key2].loaded = true; treeData.value[key2].expanded = true; if (data.length) { lazyTreeNodeMap.value[key2] = data; } instance.emit("expand-change", row, true); }); } }; return { loadData, loadOrToggle, toggleTreeExpansion, updateTreeExpandKeys, updateTreeData, normalize, states: { expandRowKeys, treeData, indent, lazy, lazyTreeNodeMap, lazyColumnIdentifier, childrenColumnName } }; } const sortData = (data, states) => { const sortingColumn = states.sortingColumn; if (!sortingColumn || typeof sortingColumn.sortable === "string") { return data; } return orderBy(data, states.sortProp, states.sortOrder, sortingColumn.sortMethod, sortingColumn.sortBy); }; const doFlattenColumns = (columns) => { const result = []; columns.forEach((column) => { if (column.children && column.children.length > 0) { result.push.apply(result, doFlattenColumns(column.children)); } else { result.push(column); } }); return result; }; function useWatcher$1() { var _a2; const instance = vue.getCurrentInstance(); const { size: tableSize } = vue.toRefs((_a2 = instance.proxy) == null ? void 0 : _a2.$props); const rowKey = vue.ref(null); const data = vue.ref([]); const _data = vue.ref([]); const isComplex = vue.ref(false); const _columns = vue.ref([]); const originColumns = vue.ref([]); const columns = vue.ref([]); const fixedColumns = vue.ref([]); const rightFixedColumns = vue.ref([]); const leafColumns = vue.ref([]); const fixedLeafColumns = vue.ref([]); const rightFixedLeafColumns = vue.ref([]); const updateOrderFns = []; const leafColumnsLength = vue.ref(0); const fixedLeafColumnsLength = vue.ref(0); const rightFixedLeafColumnsLength = vue.ref(0); const isAllSelected = vue.ref(false); const selection = vue.ref([]); const reserveSelection = vue.ref(false); const selectOnIndeterminate = vue.ref(false); const selectable = vue.ref(null); const filters = vue.ref({}); const filteredData = vue.ref(null); const sortingColumn = vue.ref(null); const sortProp = vue.ref(null); const sortOrder = vue.ref(null); const hoverRow = vue.ref(null); vue.watch(data, () => instance.state && scheduleLayout(false), { deep: true }); const assertRowKey = () => { if (!rowKey.value) throw new Error("[ElTable] prop row-key is required"); }; const updateChildFixed = (column) => { var _a22; (_a22 = column.children) == null ? void 0 : _a22.forEach((childColumn) => { childColumn.fixed = column.fixed; updateChildFixed(childColumn); }); }; const updateColumns = () => { _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 (fixedColumns.value.length > 0 && _columns.value[0] && _columns.value[0].type === "selection" && !_columns.value[0].fixed) { _columns.value[0].fixed = true; fixedColumns.value.unshift(_columns.value[0]); } 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) => { return selection.value.includes(row); }; const clearSelection = () => { isAllSelected.value = false; const oldSelection = selection.value; if (oldSelection.length) { selection.value = []; instance.emit("selection-change", []); } }; const cleanSelection = () => { let deleted; if (rowKey.value) { deleted = []; const selectedMap = getKeysMap(selection.value, rowKey.value); const dataMap = getKeysMap(data.value, rowKey.value); for (const key2 in selectedMap) { if (hasOwn(selectedMap, key2) && !dataMap[key2]) { deleted.push(selectedMap[key2].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 = void 0, emitChange = true) => { const changed = toggleRowStatus(selection.value, row, selected); if (changed) { const newSelection = (selection.value || []).slice(); if (emitChange) { instance.emit("select", newSelection, row); } instance.emit("selection-change", newSelection); } }; const _toggleAllSelection = () => { var _a22, _b; const value = selectOnIndeterminate.value ? !isAllSelected.value : !(isAllSelected.value || selection.value.length); isAllSelected.value = value; let selectionChanged = false; let childrenCount = 0; const rowKey2 = (_b = (_a22 = instance == null ? void 0 : instance.store) == null ? void 0 : _a22.states) == null ? void 0 : _b.rowKey.value; data.value.forEach((row, index) => { const rowIndex = index + childrenCount; if (selectable.value) { if (selectable.value.call(null, row, rowIndex) && toggleRowStatus(selection.value, row, value)) { selectionChanged = true; } } else { if (toggleRowStatus(selection.value, row, value)) { selectionChanged = true; } } childrenCount += getChildrenCount(getRowIdentity(row, rowKey2)); }); if (selectionChanged) { instance.emit("selection-change", selection.value ? selection.value.slice() : []); } instance.emit("select-all", selection.value); }; const updateSelectionByRowKey = () => { const selectedMap = getKeysMap(selection.value, rowKey.value); data.value.forEach((row) => { const rowId = getRowIdentity(row, rowKey.value); const rowInfo = selectedMap[rowId]; if (rowInfo) { selection.value[rowInfo.index] = row; } }); }; const updateAllSelected = () => { var _a22, _b, _c; if (((_a22 = data.value) == null ? void 0 : _a22.length) === 0) { isAllSelected.value = false; return; } let selectedMap; if (rowKey.value) { selectedMap = getKeysMap(selection.value, rowKey.value); } const isSelected2 = function(row) { if (selectedMap) { return !!selectedMap[getRowIdentity(row, rowKey.value)]; } else { return selection.value.includes(row); } }; let isAllSelected_ = true; let selectedCount = 0; let childrenCount = 0; for (let i = 0, j = (data.value || []).length; i < j; i++) { const keyProp = (_c = (_b = instance == null ? void 0 : instance.store) == null ? void 0 : _b.states) == null ? void 0 : _c.rowKey.value; const rowIndex = i + childrenCount; const item = data.value[i]; const isRowSelectable = selectable.value && selectable.value.call(null, item, rowIndex); if (!isSelected2(item)) { if (!selectable.value || isRowSelectable) { isAllSelected_ = false; break; } } else { selectedCount++; } childrenCount += getChildrenCount(getRowIdentity(item, keyProp)); } if (selectedCount === 0) isAllSelected_ = false; isAllSelected.value = isAllSelected_; }; const getChildrenCount = (rowKey2) => { var _a22; if (!instance || !instance.store) return 0; const { treeData } = instance.store.states; let count = 0; const children = (_a22 = treeData.value[rowKey2]) == null ? void 0 : _a22.children; if (children) { count += children.length; children.forEach((childKey) => { count += getChildrenCount(childKey); }); } return count; }; const updateFilters = (columns2, values) => { if (!Array.isArray(columns2)) { columns2 = [columns2]; } const filters_ = {}; columns2.forEach((col) => { filters.value[col.id] = values; filters_[col.columnKey || col.id] = values; }); return filters_; }; const updateSort = (column, prop, order) => { if (sortingColumn.value && sortingColumn.value !== column) { sortingColumn.value.order = null; } sortingColumn.value = column; sortProp.value = prop; sortOrder.value = order; }; const execFilter = () => { let sourceData = vue.unref(_data); Object.keys(filters.value).forEach((columnId) => { const values = filters.value[columnId]; if (!values || values.length === 0) return; const column = getColumnById({ columns: columns.value }, columnId); if (column && column.filterMethod) { sourceData = sourceData.filter((row) => { return values.some((value) => column.filterMethod.call(null, value, row, column)); }); } }); filteredData.value = sourceData; }; const execSort = () => { data.value = sortData(filteredData.value, { sortingColumn: sortingColumn.value, sortProp: sortProp.value, sortOrder: sortOrder.value }); }; const execQuery = (ignore = void 0) => { if (!(ignore && ignore.filter)) { execFilter(); } execSort(); }; const clearFilter = (columnKeys) => { const { tableHeaderRef } = instance.refs; if (!tableHeaderRef) return; const panels = Object.assign({}, tableHeaderRef.filterPanels); const keys2 = Object.keys(panels); if (!keys2.length) return; if (typeof columnKeys === "string") { columnKeys = [columnKeys]; } if (Array.isArray(columnKeys)) { const columns_ = columnKeys.map((key2) => getColumnByKey({ columns: columns.value }, key2)); keys2.forEach((key2) => { const column = columns_.find((col) => col.id === key2); if (column) { column.filteredValue = []; } }); instance.store.commit("filterChange", { column: columns_, values: [], silent: true, multi: true }); } else { keys2.forEach((key2) => { const column = columns.value.find((col) => col.id === key2); 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, 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, states: { tableSize, rowKey, data, _data, isComplex, _columns, originColumns, columns, fixedColumns, rightFixedColumns, leafColumns, fixedLeafColumns, rightFixedLeafColumns, updateOrderFns, leafColumnsLength, fixedLeafColumnsLength, rightFixedLeafColumnsLength, isAllSelected, selection, reserveSelection, selectOnIndeterminate, selectable, filters, filteredData, sortingColumn, sortProp, sortOrder, hoverRow, ...expandStates, ...treeStates, ...currentData } }; } function replaceColumn(array, column) { return array.map((item) => { var _a2; if (item.id === column.id) { return column; } else if ((_a2 = item.children) == null ? void 0 : _a2.length) { item.children = replaceColumn(item.children, column); } return item; }); } function sortColumn(array) { array.forEach((item) => { var _a2, _b; item.no = (_a2 = item.getColumnIndex) == null ? void 0 : _a2.call(item); if ((_b = item.children) == null ? void 0 : _b.length) { sortColumn(item.children); } }); array.sort((cur, pre) => cur.no - pre.no); } function useStore() { const instance = vue.getCurrentInstance(); const watcher = useWatcher$1(); const ns = useNamespace("table"); const mutations = { setData(states, data) { const dataInstanceChanged = vue.unref(states._data) !== data; states.data.value = data; states._data.value = data; instance.store.execQuery(); instance.store.updateCurrentRowData(); instance.store.updateExpandRows(); instance.store.updateTreeData(instance.store.states.defaultExpandAll.value); if (vue.unref(states.reserveSelection)) { instance.store.assertRowKey(); instance.store.updateSelectionByRowKey(); } else { if (dataInstanceChanged) { instance.store.clearSelection(); } else { instance.store.cleanSelection(); } } instance.store.updateAllSelected(); if (instance.$ready) { instance.store.scheduleLayout(); } }, insertColumn(states, column, parent, updateColumnOrder) { const array = vue.unref(states._columns); let newColumns = []; if (!parent) { array.push(column); newColumns = array; } else { if (parent && !parent.children) { parent.children = []; } parent.children.push(column); newColumns = replaceColumn(array, parent); } sortColumn(newColumns); states._columns.value = newColumns; states.updateOrderFns.push(updateColumnOrder); if (column.type === "selection") { states.selectable.value = column.selectable; states.reserveSelection.value = column.reserveSelection; } if (instance.$ready) { instance.store.updateColumns(); instance.store.scheduleLayout(); } }, updateColumnOrder(states, column) { var _a2; const newColumnIndex = (_a2 = column.getColumnIndex) == null ? void 0 : _a2.call(column); if (newColumnIndex === column.no) return; sortColumn(states._columns.value); if (instance.$ready) { instance.store.updateColumns(); } }, removeColumn(states, column, parent, updateColumnOrder) { const array = vue.unref(states._columns) || []; if (parent) { parent.children.splice(parent.children.findIndex((item) => item.id === column.id), 1); vue.nextTick(() => { var _a2; if (((_a2 = parent.children) == null ? void 0 : _a2.length) === 0) { delete parent.children; } }); states._columns.value = replaceColumn(array, parent); } else { const index = array.indexOf(column); if (index > -1) { array.splice(index, 1); states._columns.value = array; } } const updateFnIndex = states.updateOrderFns.indexOf(updateColumnOrder); updateFnIndex > -1 && states.updateOrderFns.splice(updateFnIndex, 1); if (instance.$ready) { instance.store.updateColumns(); instance.store.scheduleLayout(); } }, sort(states, options) { const { prop, order, init } = options; if (prop) { const column = vue.unref(states.columns).find((column2) => column2.property === prop); if (column) { column.order = order; instance.store.updateSort(column, prop, order); instance.store.commit("changeSortCondition", { init }); } } }, changeSortCondition(states, options) { const { sortingColumn, sortProp, sortOrder } = states; const columnValue = vue.unref(sortingColumn), propValue = vue.unref(sortProp), orderValue = vue.unref(sortOrder); if (orderValue === null) { 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" } }; 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((key2) => { handleValue(getArrKeysValue(props, key2), key2, store); }); proxyTableProps(store, props); return store; } function proxyTableProps(store, props) { Object.keys(InitialStateMap).forEach((key2) => { vue.watch(() => getArrKeysValue(props, key2), (value) => { handleValue(value, key2, store); }); }); } function handleValue(value, propsKey, store) { let newVal = value; let storeKey = InitialStateMap[propsKey]; if (typeof InitialStateMap[propsKey] === "object") { 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((key2) => { value = value[key2]; }); 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 (height === null) return false; const scrollBarRef = this.table.refs.scrollBarRef; if (this.table.vnode.el && (scrollBarRef == null ? void 0 : scrollBarRef.wrapRef)) { let scrollY = true; const prevScrollY = this.scrollY.value; scrollY = scrollBarRef.wrapRef.scrollHeight > scrollBarRef.wrapRef.clientHeight; this.scrollY.value = scrollY; return prevScrollY !== scrollY; } return false; } setHeight(value, prop = "height") { if (!isClient) return; const el = this.table.vnode.el; value = parseHeight(value); this.height.value = Number(value); if (!el && (value || value === 0)) return vue.nextTick(() => this.setHeight(value, prop)); if (typeof value === "number") { el.style[prop] = `${value}px`; this.updateElsHeight(); } else if (typeof value === "string") { 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) => typeof column.width !== "number"); flattenColumns.forEach((column) => { if (typeof column.width === "number" && 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(event2) { const observers = this.observers; observers.forEach((observer) => { var _a2, _b; switch (event2) { case "columns": (_a2 = observer.state) == null ? void 0 : _a2.onColumnsChange(this); break; case "scrollable": (_b = observer.state) == null ? void 0 : _b.onScrollableChange(this); break; default: throw new Error(`Table Layout don't have event ${event2}.`); } }); } } const { CheckboxGroup: ElCheckboxGroup } = ElCheckbox; const _sfc_main$b = 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 } }, setup(props) { const instance = vue.getCurrentInstance(); const { t } = useLocale(); const ns = useNamespace("table-filter"); const parent = instance == null ? void 0 : instance.parent; if (!parent.filterPanels.value[props.column.id]) { parent.filterPanels.value[props.column.id] = instance; } const tooltipVisible = vue.ref(false); const tooltip = vue.ref(null); const filters = vue.computed(() => { return props.column && props.column.filters; }); const filterClassName = vue.computed(() => { if (props.column.filterClassName) { return `${ns.b()} ${props.column.filterClassName}`; } return ns.b(); }); const filterValue = vue.computed({ get: () => { var _a2; return (((_a2 = props.column) == null ? void 0 : _a2.filteredValue) || [])[0]; }, set: (value) => { if (filteredValue.value) { if (typeof value !== "undefined" && value !== null) { 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 (typeof _filterValue !== "undefined" && _filterValue !== null) { confirmFilter(filteredValue.value); } else { confirmFilter([]); } hidden(); }; const confirmFilter = (filteredValue2) => { props.store.commit("filterChange", { column: props.column, values: filteredValue2 }); props.store.updateAllSelected(); }; vue.watch(tooltipVisible, (value) => { if (props.column) { props.upDataColumn("filterOpened", value); } }, { immediate: true }); const popperPaneRef = vue.computed(() => { var _a2, _b; return (_b = (_a2 = tooltip.value) == null ? void 0 : _a2.popperRef) == null ? void 0 : _b.contentRef; }); return { tooltipVisible, multiple, filterClassName, filteredValue, filterValue, filters, handleConfirm, handleReset, handleSelect, isActive, t, ns, showFilterPanel, hideFilterPanel, popperPaneRef, tooltip }; } }); const _hoisted_1$7 = { key: 0 }; const _hoisted_2$5 = ["disabled"]; const _hoisted_3$4 = ["label", "onClick"]; function _sfc_render$3(_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: "" }, { content: vue.withCtx(() => [ _ctx.multiple ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$7, [ 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": _cache[0] || (_cache[0] = ($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", "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: _cache[1] || (_cache[1] = (...args) => _ctx.handleConfirm && _ctx.handleConfirm(...args)) }, vue.toDisplayString(_ctx.t("el.table.confirmFilter")), 11, _hoisted_2$5), vue.createElementVNode("button", { type: "button", onClick: _cache[2] || (_cache[2] = (...args) => _ctx.handleReset && _ctx.handleReset(...args)) }, vue.toDisplayString(_ctx.t("el.table.resetFilter")), 1) ], 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.filterValue === void 0 || _ctx.filterValue === null } ]), onClick: _cache[3] || (_cache[3] = ($event) => _ctx.handleSelect(null)) }, vue.toDisplayString(_ctx.t("el.table.clearFilter")), 3), (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, _hoisted_3$4); }), 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: _cache[4] || (_cache[4] = (...args) => _ctx.showFilterPanel && _ctx.showFilterPanel(...args)) }, [ vue.createVNode(_component_el_icon, null, { default: vue.withCtx(() => [ _ctx.column.filterOpened ? (vue.openBlock(), vue.createBlock(_component_arrow_up, { key: 0 })) : (vue.openBlock(), vue.createBlock(_component_arrow_down, { key: 1 })) ]), _: 1 }) ], 2)), [ [_directive_click_outside, _ctx.hideFilterPanel, _ctx.popperPaneRef] ]) ]), _: 1 }, 8, ["visible", "placement", "popper-class"]); } var FilterPanel = /* @__PURE__ */ _export_sfc$1(_sfc_main$b, [["render", _sfc_render$3], ["__file", "filter-panel.vue"]]); function useLayoutObserver(root2) { const instance = vue.getCurrentInstance(); vue.onBeforeMount(() => { tableLayout.value.addObserver(instance); }); vue.onMounted(() => { onColumnsChange(tableLayout.value); onScrollableChange(tableLayout.value); }); vue.onUpdated(() => { onColumnsChange(tableLayout.value); onScrollableChange(tableLayout.value); }); vue.onUnmounted(() => { tableLayout.value.removeObserver(instance); }); const tableLayout = vue.computed(() => { const layout = root2.layout; if (!layout) { throw new Error("Can not find table layout."); } return layout; }); const onColumnsChange = (layout) => { var _a2; const cols = ((_a2 = root2.vnode.el) == null ? void 0 : _a2.querySelectorAll("colgroup > col")) || []; if (!cols.length) return; const flattenColumns = layout.getFlattenColumns(); const columnsMap = {}; flattenColumns.forEach((column) => { columnsMap[column.id] = column; }); for (let i = 0, j = cols.length; i < j; i++) { const col = cols[i]; const name = col.getAttribute("name"); const column = columnsMap[name]; if (column) { col.setAttribute("width", column.realWidth || column.width); } } }; const onScrollableChange = (layout) => { var _a2, _b; const cols = ((_a2 = root2.vnode.el) == null ? void 0 : _a2.querySelectorAll("colgroup > col[name=gutter]")) || []; for (let i = 0, j = cols.length; i < j; i++) { const col = cols[i]; col.setAttribute("width", layout.scrollY.value ? layout.gutterWidth : "0"); } const ths = ((_b = root2.vnode.el) == null ? void 0 : _b.querySelectorAll("th.gutter")) || []; for (let i = 0, j = ths.length; i < j; i++) { const th = ths[i]; th.style.width = layout.scrollY.value ? `${layout.gutterWidth}px` : "0"; th.style.display = layout.scrollY.value ? "" : "none"; } }; return { tableLayout: tableLayout.value, onColumnsChange, onScrollableChange }; } const TABLE_INJECTION_KEY = Symbol("ElTable"); function useEvent(props, emit) { const instance = vue.getCurrentInstance(); const parent = vue.inject(TABLE_INJECTION_KEY); const handleFilterClick = (event2) => { event2.stopPropagation(); return; }; const handleHeaderClick = (event2, column) => { if (!column.filters && column.sortable) { handleSortClick(event2, column, false); } else if (column.filterable && !column.sortable) { handleFilterClick(event2); } parent == null ? void 0 : parent.emit("header-click", column, event2); }; const handleHeaderContextMenu = (event2, column) => { parent == null ? void 0 : parent.emit("header-contextmenu", column, event2); }; const draggingColumn = vue.ref(null); const dragging = vue.ref(false); const dragState = vue.ref({}); const handleMouseDown = (event2, column) => { if (!isClient) return; if (column.children && column.children.length > 0) return; if (draggingColumn.value && props.border) { dragging.value = true; const table = parent; emit("set-drag-visible", true); const tableEl = table == null ? void 0 : table.vnode.el; const tableLeft = tableEl.getBoundingClientRect().left; const columnEl = instance.vnode.el.querySelector(`th.${column.id}`); const columnRect = columnEl.getBoundingClientRect(); const minLeft = columnRect.left - tableLeft + 30; addClass(columnEl, "noclick"); dragState.value = { startMouseLeft: event2.clientX, startLeft: columnRect.right - tableLeft, startColumnLeft: columnRect.left - tableLeft, tableLeft }; const resizeProxy = table == null ? void 0 : table.refs.resizeProxy; resizeProxy.style.left = `${dragState.value.startLeft}px`; document.onselectstart = function() { return false; }; document.ondragstart = function() { return false; }; const handleMouseMove2 = (event22) => { const deltaLeft = event22.clientX - dragState.value.startMouseLeft; const proxyLeft = dragState.value.startLeft + deltaLeft; resizeProxy.style.left = `${Math.max(minLeft, proxyLeft)}px`; }; const handleMouseUp = () => { if (dragging.value) { const { startColumnLeft, startLeft } = dragState.value; const finalLeft = Number.parseInt(resizeProxy.style.left, 10); const columnWidth = finalLeft - startColumnLeft; column.width = column.realWidth = columnWidth; table == null ? void 0 : table.emit("header-dragend", column.width, startLeft - startColumnLeft, column, event2); 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 = (event2, column) => { if (column.children && column.children.length > 0) return; const el = event2.target; if (!isElement(el)) { return; } const target = el == null ? void 0 : el.closest("th"); if (!column || !column.resizable) return; if (!dragging.value && props.border) { const rect = target.getBoundingClientRect(); const bodyStyle = document.body.style; if (rect.width > 12 && rect.right - event2.pageX < 8) { 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 = (event2, column, givenOrder) => { var _a2; event2.stopPropagation(); const order = column.order === givenOrder ? null : givenOrder || toggleOrder(column); const target = (_a2 = event2.target) == null ? void 0 : _a2.closest("th"); if (target) { if (hasClass(target, "noclick")) { removeClass(target, "noclick"); return; } } if (!column.sortable) return; const states = props.store.states; let sortProp = states.sortProp.value; let sortOrder; const sortingColumn = states.sortingColumn.value; if (sortingColumn !== column || sortingColumn === column && sortingColumn.order === null) { if (sortingColumn) { sortingColumn.order = null; } states.sortingColumn.value = column; sortProp = column.property; } if (!order) { sortOrder = column.order = null; } else { sortOrder = column.order = order; } states.sortProp.value = sortProp; states.sortOrder.value = sortOrder; parent == null ? void 0 : parent.store.commit("changeSortCondition"); }; return { handleHeaderClick, handleHeaderContextMenu, handleMouseDown, handleMouseMove, handleMouseOut, handleSortClick, handleFilterClick }; } function useStyle$2(props) { const parent = vue.inject(TABLE_INJECTION_KEY); const ns = useNamespace("table"); const getHeaderRowStyle = (rowIndex) => { const headerRowStyle = parent == null ? void 0 : parent.props.headerRowStyle; if (typeof headerRowStyle === "function") { return headerRowStyle.call(null, { rowIndex }); } return headerRowStyle; }; const getHeaderRowClass = (rowIndex) => { const classes = []; const headerRowClassName = parent == null ? void 0 : parent.props.headerRowClassName; if (typeof headerRowClassName === "string") { classes.push(headerRowClassName); } else if (typeof headerRowClassName === "function") { classes.push(headerRowClassName.call(null, { rowIndex })); } return classes.join(" "); }; const getHeaderCellStyle = (rowIndex, columnIndex, row, column) => { var _a2; let headerCellStyles = (_a2 = parent == null ? void 0 : parent.props.headerCellStyle) != null ? _a2 : {}; if (typeof headerCellStyles === "function") { headerCellStyles = headerCellStyles.call(null, { rowIndex, columnIndex, row, column }); } const fixedStyle = getFixedColumnOffset(columnIndex, column.fixed, props.store, row); ensurePosition(fixedStyle, "left"); ensurePosition(fixedStyle, "right"); return Object.assign({}, headerCellStyles, fixedStyle); }; const getHeaderCellClass = (rowIndex, columnIndex, row, column) => { const fixedClasses = getFixedColumnsClass(ns.b(), columnIndex, column.fixed, props.store, row); const classes = [ column.id, column.order, column.headerAlign, column.className, column.labelClassName, ...fixedClasses ]; if (!column.children) { classes.push("is-leaf"); } if (column.sortable) { classes.push("is-sortable"); } const headerCellClassName = parent == null ? void 0 : parent.props.headerCellClassName; if (typeof headerCellClassName === "string") { classes.push(headerCellClassName); } else if (typeof headerCellClassName === "function") { classes.push(headerCellClassName.call(null, { rowIndex, columnIndex, row, column })); } classes.push(ns.e("cell")); return classes.filter((className) => Boolean(className)).join(" "); }; return { getHeaderRowStyle, getHeaderRowClass, getHeaderCellStyle, getHeaderCellClass }; } const getAllColumns = (columns) => { const result = []; columns.forEach((column) => { if (column.children) { result.push(column); result.push.apply(result, getAllColumns(column.children)); } else { result.push(column); } }); return result; }; const convertToRows = (originColumns) => { let maxLevel = 1; const traverse = (column, parent) => { if (parent) { column.level = parent.level + 1; if (maxLevel < column.level) { maxLevel = column.level; } } if (column.children) { let colSpan = 0; column.children.forEach((subColumn) => { traverse(subColumn, column); colSpan += subColumn.colSpan; }); column.colSpan = colSpan; } else { column.colSpan = 1; } }; originColumns.forEach((column) => { column.level = 1; traverse(column, void 0); }); const rows = []; for (let i = 0; i < maxLevel; i++) { rows.push([]); } const allColumns = getAllColumns(originColumns); allColumns.forEach((column) => { if (!column.children) { column.rowSpan = maxLevel - column.level + 1; } else { column.rowSpan = 1; column.children.forEach((col) => col.isSubColumn = true); } rows[column.level - 1].push(column); }); return rows; }; function useUtils$1(props) { const parent = vue.inject(TABLE_INJECTION_KEY); const columnRows = vue.computed(() => { return convertToRows(props.store.states.originColumns.value); }); const isGroup = vue.computed(() => { const result = columnRows.value.length > 1; if (result && parent) { parent.state.isGroup.value = true; } return result; }); const toggleAllSelection = (event2) => { event2.stopPropagation(); parent == null ? void 0 : parent.store.commit("toggleAllSelection"); }; return { isGroup, toggleAllSelection, columnRows }; } var TableHeader = vue.defineComponent({ name: "ElTableHeader", components: { ElCheckbox }, props: { fixed: { type: String, default: "" }, store: { required: true, type: Object }, border: Boolean, defaultSort: { type: Object, default: () => { return { prop: "", order: "" }; } } }, 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); vue.onMounted(async () => { await vue.nextTick(); await vue.nextTick(); const { prop, order } = props.defaultSort; parent == null ? void 0 : parent.store.commit("sort", { prop, order, init: true }); }); 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 }; }, render() { const { ns, isGroup, columnRows, getHeaderCellStyle, getHeaderCellClass, getHeaderRowClass, getHeaderRowStyle, handleHeaderClick, handleHeaderContextMenu, handleMouseDown, handleMouseMove, handleSortClick, handleMouseOut, store, $parent } = this; let rowSpan = 1; return vue.h("thead", { 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; } return vue.h("th", { class: getHeaderCellClass(rowIndex, cellIndex, subColumns, column), colspan: column.colSpan, key: `${column.id}-thead`, rowspan: column.rowSpan, style: getHeaderCellStyle(rowIndex, cellIndex, subColumns, column), onClick: ($event) => 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", column, upDataColumn: (key2, value) => { column[key2] = value; } }) ]) ]); })))); } }); function useEvents(props) { const parent = vue.inject(TABLE_INJECTION_KEY); const tooltipContent = vue.ref(""); const tooltipTrigger = vue.ref(vue.h("div")); const handleEvent = (event2, row, name) => { var _a2; const table = parent; const cell = getCell(event2); let column; const namespace = (_a2 = table == null ? void 0 : table.vnode.el) == null ? void 0 : _a2.dataset.prefix; if (cell) { column = getColumnByCell({ columns: props.store.states.columns.value }, cell, namespace); if (column) { table == null ? void 0 : table.emit(`cell-${name}`, row, column, cell, event2); } } table == null ? void 0 : table.emit(`row-${name}`, row, column, event2); }; const handleDoubleClick = (event2, row) => { handleEvent(event2, row, "dblclick"); }; const handleClick = (event2, row) => { props.store.commit("setCurrentRow", row); handleEvent(event2, row, "click"); }; const handleContextMenu = (event2, row) => { handleEvent(event2, 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, event2, toggle) => { let node = event2.target.parentNode; while (rowSpan > 1) { node = node == null ? void 0 : node.nextSibling; if (!node || node.nodeName !== "TR") break; toggle(node, "hover-row hover-fixed-row"); rowSpan--; } }; const handleCellMouseEnter = (event2, row, tooltipOptions) => { var _a2; const table = parent; const cell = getCell(event2); const namespace = (_a2 = table == null ? void 0 : table.vnode.el) == null ? void 0 : _a2.dataset.prefix; if (cell) { const column = getColumnByCell({ columns: props.store.states.columns.value }, cell, namespace); if (cell.rowSpan > 1) { toggleRowClassByCell(cell.rowSpan, event2, addClass); } const hoverState = table.hoverState = { cell, column, row }; table == null ? void 0 : table.emit("cell-mouse-enter", hoverState.row, hoverState.column, hoverState.cell, event2); } if (!tooltipOptions) { return; } const cellChild = event2.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); let rangeWidth = range2.getBoundingClientRect().width; let rangeHeight = range2.getBoundingClientRect().height; const offsetWidth = rangeWidth - Math.floor(rangeWidth); if (offsetWidth < 1e-3) { rangeWidth = Math.floor(rangeWidth); } const offsetHeight = rangeHeight - Math.floor(rangeHeight); if (offsetHeight < 1e-3) { rangeHeight = Math.floor(rangeHeight); } const { top, left, right, bottom } = getPadding(cellChild); const horizontalPadding = left + right; const verticalPadding = top + bottom; if (rangeWidth + horizontalPadding > cellChild.offsetWidth || rangeHeight + verticalPadding > cellChild.offsetHeight || cellChild.scrollWidth > cellChild.offsetWidth) { createTablePopper(tooltipOptions, cell.innerText || cell.textContent, cell, table); } }; const handleCellMouseLeave = (event2) => { const cell = getCell(event2); if (!cell) return; if (cell.rowSpan > 1) { toggleRowClassByCell(cell.rowSpan, event2, removeClass); } const oldHoverState = parent == null ? void 0 : parent.hoverState; parent == null ? void 0 : parent.emit("cell-mouse-leave", oldHoverState == null ? void 0 : oldHoverState.row, oldHoverState == null ? void 0 : oldHoverState.column, oldHoverState == null ? void 0 : oldHoverState.cell, event2); }; return { handleDoubleClick, handleClick, handleContextMenu, handleMouseEnter, handleMouseLeave, handleCellMouseEnter, handleCellMouseLeave, tooltipContent, tooltipTrigger }; } function useStyles(props) { const parent = vue.inject(TABLE_INJECTION_KEY); const ns = useNamespace("table"); const getRowStyle = (row, rowIndex) => { const rowStyle = parent == null ? void 0 : parent.props.rowStyle; if (typeof rowStyle === "function") { return rowStyle.call(null, { row, rowIndex }); } return rowStyle || null; }; const getRowClass = (row, rowIndex) => { const classes = [ns.e("row")]; if ((parent == null ? void 0 : parent.props.highlightCurrentRow) && row === props.store.states.currentRow.value) { classes.push("current-row"); } if (props.stripe && rowIndex % 2 === 1) { classes.push(ns.em("row", "striped")); } const rowClassName = parent == null ? void 0 : parent.props.rowClassName; if (typeof rowClassName === "string") { classes.push(rowClassName); } else if (typeof rowClassName === "function") { classes.push(rowClassName.call(null, { row, rowIndex })); } return classes; }; const getCellStyle = (rowIndex, columnIndex, row, column) => { const cellStyle = parent == null ? void 0 : parent.props.cellStyle; let cellStyles = cellStyle != null ? cellStyle : {}; if (typeof cellStyle === "function") { cellStyles = cellStyle.call(null, { rowIndex, columnIndex, row, column }); } const fixedStyle = getFixedColumnOffset(columnIndex, props == null ? void 0 : props.fixed, props.store); ensurePosition(fixedStyle, "left"); ensurePosition(fixedStyle, "right"); return Object.assign({}, cellStyles, fixedStyle); }; const getCellClass = (rowIndex, columnIndex, row, column, offset) => { const fixedClasses = getFixedColumnsClass(ns.b(), columnIndex, props == null ? void 0 : props.fixed, props.store, void 0, offset); const classes = [column.id, column.align, column.className, ...fixedClasses]; const cellClassName = parent == null ? void 0 : parent.props.cellClassName; if (typeof cellClassName === "string") { classes.push(cellClassName); } else if (typeof cellClassName === "function") { classes.push(cellClassName.call(null, { rowIndex, columnIndex, row, column })); } classes.push(ns.e("cell")); return classes.filter((className) => Boolean(className)).join(" "); }; const getSpan = (row, column, rowIndex, columnIndex) => { let rowspan = 1; let colspan = 1; const fn2 = parent == null ? void 0 : parent.props.spanMethod; if (typeof fn2 === "function") { const result = fn2({ row, column, rowIndex, columnIndex }); if (Array.isArray(result)) { rowspan = result[0]; colspan = result[1]; } else if (typeof result === "object") { 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 }; } 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 (typeof treeRowData.expanded === "boolean") { 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 = `${$index},${cellIndex}`; const patchKey = columnData.columnKey || columnData.rawColumnKey || ""; const tdChildren = cellChildren(cellIndex, column, data); const mergedTooltipOptions = column.showOverflowTooltip && merge$1({ effect: tooltipEffect }, tooltipOptions, column.showOverflowTooltip); return vue.h("td", { 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 }, [tdChildren]); })); }; const cellChildren = (cellIndex, column, data) => { return column.renderCell(data); }; const wrappedRowRender = (row, $index) => { const store = props.store; const { isRowExpanded, assertRowKey } = store; const { treeData, lazyTreeNodeMap, childrenColumnName, rowKey } = store.states; const columns = store.states.columns.value; const hasExpandColumn = columns.some(({ type }) => type === "expand"); if (hasExpandColumn) { const expanded = isRowExpanded(row); const tr = rowRender(row, $index, void 0, expanded); const renderExpanded = parent.renderExpanded; if (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 key2 = getRowIdentity(row, rowKey.value); let cur = treeData.value[key2]; let treeRowData = null; if (cur) { treeRowData = { expanded: cur.expanded, level: cur.level, display: true }; if (typeof cur.lazy === "boolean") { if (typeof cur.loaded === "boolean" && 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 (childKey === void 0 || childKey === null) { 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 (typeof cur.lazy === "boolean") { if (typeof cur.loaded === "boolean" && 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[key2] || row[childrenColumnName.value]; traverse(nodes, cur); } return tmp; } else { return rowRender(row, $index, void 0); } }; return { wrappedRowRender, tooltipContent, tooltipTrigger }; } const defaultProps$2 = { store: { required: true, type: Object }, stripe: Boolean, tooltipEffect: String, tooltipOptions: { type: Object }, context: { default: () => ({}), type: Object }, rowClassName: [String, Function], rowStyle: [Object, Function], fixed: { type: String, default: "" }, highlight: Boolean }; var TableBody = vue.defineComponent({ name: "ElTableBody", props: defaultProps$2, setup(props) { const instance = vue.getCurrentInstance(); const parent = vue.inject(TABLE_INJECTION_KEY); const ns = useNamespace("table"); const { wrappedRowRender, tooltipContent, tooltipTrigger } = useRender$1(props); const { onColumnsChange, onScrollableChange } = useLayoutObserver(parent); const hoveredCellList = []; vue.watch(props.store.states.hoverRow, (newVal, oldVal) => { var _a2; const el = instance == null ? void 0 : instance.vnode.el; const rows = Array.from((el == null ? void 0 : el.children) || []).filter((e) => e == null ? void 0 : e.classList.contains(`${ns.e("row")}`)); let rowNum = newVal; const childNodes = (_a2 = rows[rowNum]) == null ? void 0 : _a2.childNodes; if (childNodes == null ? void 0 : childNodes.length) { const indexes = Array.from(childNodes).reduce((acc, item, index) => { var _a22, _b; const pre = ((_a22 = childNodes[index - 1]) == null ? void 0 : _a22.colSpan) > 1; const next = ((_b = childNodes[index + 1]) == null ? void 0 : _b.colSpan) > 1; if (item.nodeName !== "TD" && !pre && !next) { acc.push(index); } return acc; }, []); indexes.forEach((rowIndex) => { var _a22; while (rowNum > 0) { const preChildNodes = (_a22 = rows[rowNum - 1]) == null ? void 0 : _a22.childNodes; if (preChildNodes[rowIndex] && preChildNodes[rowIndex].nodeName === "TD") { addClass(preChildNodes[rowIndex], "hover-cell"); hoveredCellList.push(preChildNodes[rowIndex]); break; } rowNum--; } }); } else { hoveredCellList.forEach((item) => removeClass(item, "hover-cell")); hoveredCellList.length = 0; } if (!props.store.states.isComplex.value || !isClient) return; rAF(() => { const oldRow = rows[oldVal]; const newRow = rows[newVal]; if (oldRow && !oldRow.classList.contains("hover-fixed-row")) { removeClass(oldRow, "hover-row"); } if (newRow) { addClass(newRow, "hover-row"); } }); }); vue.onUnmounted(() => { var _a2; (_a2 = removePopper) == null ? void 0 : _a2(); }); return { ns, onColumnsChange, onScrollableChange, wrappedRowRender, tooltipContent, tooltipTrigger }; }, render() { const { wrappedRowRender, store } = this; const data = store.states.data.value || []; return vue.h("tbody", { tabIndex: -1 }, [ data.reduce((acc, row) => { return acc.concat(wrappedRowRender(row, acc.length)); }, []) ]); } }); function useMapState() { const table = vue.inject(TABLE_INJECTION_KEY); const store = table == null ? void 0 : table.store; const leftFixedLeafCount = vue.computed(() => { return store.states.fixedLeafColumnsLength.value; }); const rightFixedLeafCount = vue.computed(() => { return store.states.rightFixedColumns.value.length; }); const columnsCount = vue.computed(() => { return store.states.columns.value.length; }); const leftFixedCount = vue.computed(() => { return store.states.fixedColumns.value.length; }); const rightFixedCount = vue.computed(() => { return store.states.rightFixedColumns.value.length; }); return { leftFixedLeafCount, rightFixedLeafCount, columnsCount, leftFixedCount, rightFixedCount, columns: store.states.columns }; } function useStyle$1(props) { const { columns } = useMapState(); const ns = useNamespace("table"); const getCellClasses = (columns2, cellIndex) => { const column = columns2[cellIndex]; const classes = [ ns.e("cell"), column.id, column.align, column.labelClassName, ...getFixedColumnsClass(ns.b(), cellIndex, column.fixed, props.store) ]; if (column.className) { classes.push(column.className); } if (!column.children) { classes.push(ns.is("leaf")); } return classes; }; const getCellStyles = (column, cellIndex) => { const fixedStyle = getFixedColumnOffset(cellIndex, column.fixed, props.store); ensurePosition(fixedStyle, "left"); ensurePosition(fixedStyle, "right"); return fixedStyle; }; return { getCellClasses, getCellStyles, columns }; } var TableFooter = vue.defineComponent({ name: "ElTableFooter", props: { fixed: { type: String, default: "" }, store: { required: true, type: Object }, summaryMethod: Function, sumText: String, border: Boolean, defaultSort: { type: Object, default: () => { return { prop: "", order: "" }; } } }, setup(props) { const { 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) => { store.toggleRowSelection(row, selected, false); 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 }); }; return { setCurrentRow, getSelectionRows, toggleRowSelection, clearSelection, clearFilter, toggleAllSelection, toggleRowExpansion, clearSort, sort }; } 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 = (event2, 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 ? void 0 : _a2.scrollBarRef) == null ? void 0 : _b.update(); }); }; const resizeListener = () => { var _a2, _b, _c, _d; const el = table.vnode.el; if (!table.$ready || !el) return; let shouldUpdateLayout = false; const { width: oldWidth, height: oldHeight, headerHeight: oldHeaderHeight } = resizeState.value; const width = tableWidth.value = el.offsetWidth; if (oldWidth !== width) { shouldUpdateLayout = true; } const height = el.offsetHeight; if ((props.height || shouldUpdateHeight.value) && oldHeight !== height) { shouldUpdateLayout = true; } const tableHeader = props.tableLayout === "fixed" ? table.refs.headerWrapper : (_a2 = table.refs.tableHeaderRef) == null ? void 0 : _a2.$el; if (props.showHeader && (tableHeader == null ? void 0 : tableHeader.offsetHeight) !== oldHeaderHeight) { shouldUpdateLayout = true; } tableScrollHeight.value = ((_b = table.refs.tableWrapper) == null ? void 0 : _b.scrollHeight) || 0; headerScrollHeight.value = (tableHeader == null ? void 0 : tableHeader.scrollHeight) || 0; footerScrollHeight.value = ((_c = table.refs.footerWrapper) == null ? void 0 : _c.offsetHeight) || 0; appendScrollHeight.value = ((_d = table.refs.appendWrapper) == null ? void 0 : _d.offsetHeight) || 0; bodyScrollHeight.value = tableScrollHeight.value - headerScrollHeight.value - footerScrollHeight.value - appendScrollHeight.value; if (shouldUpdateLayout) { resizeState.value = { width, height, headerHeight: props.showHeader && (tableHeader == null ? void 0 : tableHeader.offsetHeight) || 0 }; doLayout(); } }; const tableSize = useFormSize(); const bodyWidth = vue.computed(() => { const { bodyWidth: bodyWidth_, scrollY, gutterWidth } = layout; return bodyWidth_.value ? `${bodyWidth_.value - (scrollY.value ? gutterWidth : 0)}px` : ""; }); const tableLayout = vue.computed(() => { if (props.maxHeight) return "fixed"; return props.tableLayout; }); const emptyBlockStyle = vue.computed(() => { if (props.data && props.data.length) return null; let height = "100%"; if (props.height && bodyScrollHeight.value) { height = `${bodyScrollHeight.value}px`; } const width = tableWidth.value; return { width: width ? `${width}px` : "", height }; }); const tableInnerStyle = vue.computed(() => { if (props.height) { return { height: !Number.isNaN(Number(props.height)) ? `${props.height}px` : props.height }; } if (props.maxHeight) { return { maxHeight: !Number.isNaN(Number(props.maxHeight)) ? `${props.maxHeight}px` : props.maxHeight }; } return {}; }); 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 = (event2, data) => { const bodyWrapper = table.refs.bodyWrapper; if (Math.abs(data.spinY) > 0) { const currentScrollTop = bodyWrapper.scrollTop; if (data.pixelY < 0 && currentScrollTop !== 0) { event2.preventDefault(); } if (data.pixelY > 0 && bodyWrapper.scrollHeight - bodyWrapper.clientHeight > currentScrollTop) { event2.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, tableInnerStyle, scrollbarStyle }; } function useKeyRender(table) { const observer = vue.ref(); const initWatchDom = () => { const el = table.vnode.el; const columnsWrapper = el.querySelector(".hidden-columns"); const config = { childList: true, subtree: true }; const updateOrderFns = table.store.states.updateOrderFns; observer.value = new MutationObserver(() => { updateOrderFns.forEach((fn2) => fn2()); }); observer.value.observe(columnsWrapper, config); }; vue.onMounted(() => { initWatchDom(); }); vue.onUnmounted(() => { var _a2; (_a2 = observer.value) == null ? void 0 : _a2.disconnect(); }); } var defaultProps$1 = { data: { type: Array, default: () => [] }, size: useSizeProp, width: [String, Number], height: [String, Number], maxHeight: [String, Number], fit: { type: Boolean, default: true }, stripe: Boolean, border: Boolean, rowKey: [String, Function], showHeader: { type: Boolean, default: true }, showSummary: Boolean, sumText: String, summaryMethod: Function, rowClassName: [String, Function], rowStyle: [Object, Function], cellClassName: [String, Function], cellStyle: [Object, Function], headerRowClassName: [String, Function], headerRowStyle: [Object, Function], headerCellClassName: [String, Function], headerCellStyle: [Object, Function], highlightCurrentRow: Boolean, currentRowKey: [String, Number], emptyText: String, expandRowKeys: Array, defaultExpandAll: Boolean, defaultSort: Object, tooltipEffect: String, tooltipOptions: Object, spanMethod: Function, selectOnIndeterminate: { type: Boolean, default: true }, indent: { type: Number, default: 16 }, treeProps: { type: Object, default: () => { return { hasChildren: "hasChildren", children: "children" }; } }, lazy: Boolean, load: Function, style: { type: Object, default: () => ({}) }, className: { type: String, default: "" }, tableLayout: { type: String, default: "fixed" }, scrollbarAlwaysOn: Boolean, flexible: Boolean, showOverflowTooltip: [Boolean, Object] }; function hColgroup(props) { const isAuto = props.tableLayout === "auto"; let columns = props.columns || []; if (isAuto) { if (columns.every((column) => column.width === void 0)) { columns = []; } } const getPropsData = (column) => { const propsData = { key: `${props.tableLayout}_${column.id}`, style: {}, name: void 0 }; if (isAuto) { propsData.style = { width: `${column.width}px` }; } else { propsData.name = column.id; } return propsData; }; return vue.h("colgroup", {}, columns.map((column) => vue.h("col", getPropsData(column)))); } hColgroup.props = ["columns", "tableLayout"]; const useScrollbar = () => { const scrollBarRef = vue.ref(); const scrollTo = (options, yCoord) => { const scrollbar = scrollBarRef.value; if (scrollbar) { scrollbar.scrollTo(options, yCoord); } }; const setScrollPosition = (position, offset) => { const scrollbar = scrollBarRef.value; if (scrollbar && isNumber(offset) && ["Top", "Left"].includes(position)) { scrollbar[`setScroll${position}`](offset); } }; const setScrollTop = (top) => setScrollPosition("Top", top); const setScrollLeft = (left) => setScrollPosition("Left", left); return { scrollBarRef, scrollTo, setScrollTop, setScrollLeft }; }; let tableIdSeed = 1; const _sfc_main$a = 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" ], 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 } = useUtils(store); const { isHidden: isHidden2, renderExpanded, setDragVisible, isGroup, handleMouseLeave, handleHeaderFooterMousewheel, tableSize, emptyBlockStyle, handleFixedMousewheel, resizeProxyVisible, bodyWidth, resizeState, doLayout, tableBodyStyles, tableLayout, scrollbarViewStyle, tableInnerStyle, 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(() => props.sumText || t("el.table.sumText")); const computedEmptyText = vue.computed(() => { return props.emptyText || t("el.table.emptyText"); }); useKeyRender(table); return { ns, layout, store, 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, t, setDragVisible, context: table, computedSumText, computedEmptyText, tableLayout, scrollbarViewStyle, tableInnerStyle, scrollbarStyle, scrollBarRef, scrollTo, setScrollLeft, setScrollTop }; } }); const _hoisted_1$6 = ["data-prefix"]; const _hoisted_2$4 = { ref: "hiddenColumns", class: "hidden-columns" }; function _sfc_render$2(_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: _cache[0] || (_cache[0] = (...args) => _ctx.handleMouseLeave && _ctx.handleMouseLeave(...args)) }, [ vue.createElementVNode("div", { class: vue.normalizeClass(_ctx.ns.e("inner-wrapper")), style: vue.normalizeStyle(_ctx.tableInnerStyle) }, [ vue.createElementVNode("div", _hoisted_2$4, [ 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, onSetDragVisible: _ctx.setDragVisible }, null, 8, ["border", "default-sort", "store", "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 }, { 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, onSetDragVisible: _ctx.setDragVisible }, null, 8, ["class", "border", "default-sort", "store", "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"]) ], 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) ], 6), vue.withDirectives(vue.createElementVNode("div", { ref: "resizeProxy", class: vue.normalizeClass(_ctx.ns.e("column-resize-proxy")) }, null, 2), [ [vue.vShow, _ctx.resizeProxyVisible] ]) ], 46, _hoisted_1$6); } var Table = /* @__PURE__ */ _export_sfc$1(_sfc_main$a, [["render", _sfc_render$2], ["__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: (event2) => event2.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 (typeof index === "number") { i = $index + index; } else if (typeof index === "function") { i = index($index); } return vue.h("div", {}, [i]); }, sortable: false }, expand: { renderHeader({ column }) { return column.label || ""; }, renderCell({ row, store, expanded }) { const { ns } = store; const classes = [ns.e("expand-icon")]; if (expanded) { classes.push(ns.em("expand-icon", "expanded")); } const callback = function(e) { e.stopPropagation(); store.toggleRowExpansion(row); }; return vue.h("div", { class: classes, onClick: callback }, { default: () => { return [ vue.h(ElIcon, null, { default: () => { return [vue.h(arrow_right_default)]; } }) ]; } }); }, sortable: false, resizable: false } }; function defaultRenderCell({ row, column, $index }) { var _a2; const property2 = column.property; const value = property2 && getProp(row, property2).value; if (column && column.formatter) { return column.formatter(row, column, value, $index); } return ((_a2 = value == null ? void 0 : value.toString) == null ? void 0 : _a2.call(value)) || ""; } function treeCellPrefix({ row, treeNode, store }, createPlaceholder = false) { const { ns } = store; if (!treeNode) { if (createPlaceholder) { return [ vue.h("span", { class: ns.e("placeholder") }) ]; } return null; } const ele = []; const callback = function(e) { e.stopPropagation(); if (treeNode.loading) { return; } store.loadOrToggle(row); }; if (treeNode.indent) { ele.push(vue.h("span", { class: ns.e("indent"), style: { "padding-left": `${treeNode.indent}px` } })); } if (typeof treeNode.expanded === "boolean" && !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((key2) => { const columnKey = aliases[key2]; if (hasOwn(props_, columnKey)) { vue.watch(() => props_[columnKey], (newVal) => { let value = newVal; if (columnKey === "width" && key2 === "realWidth") { value = parseWidth(newVal); } if (columnKey === "minWidth" && key2 === "realMinWidth") { value = parseMinWidth(newVal); } instance.columnConfig.value[columnKey] = value; instance.columnConfig.value[key2] = 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((key2) => { const columnKey = aliases[key2]; if (hasOwn(props_, columnKey)) { vue.watch(() => props_[columnKey], (newVal) => { instance.columnConfig.value[key2] = newVal; }); } }); }; return { registerComplexWatchers, registerNormalWatchers }; } function useRender(props, slots, owner) { const instance = vue.getCurrentInstance(); const columnId = vue.ref(""); const isSubColumn = vue.ref(false); const realAlign = vue.ref(); const realHeaderAlign = vue.ref(); const ns = useNamespace("table"); vue.watchEffect(() => { realAlign.value = props.align ? `is-${props.align}` : null; realAlign.value; }); vue.watchEffect(() => { realHeaderAlign.value = props.headerAlign ? `is-${props.headerAlign}` : realAlign.value; realHeaderAlign.value; }); const columnOrTableParent = vue.computed(() => { let parent = instance.vnode.vParent || instance.parent; while (parent && !parent.tableId && !parent.columnId) { parent = parent.vnode.vParent || parent.parent; } return parent; }); const hasTreeColumn = vue.computed(() => { const { store } = instance.parent; if (!store) return false; const { treeData } = store.states; const treeDataValue = treeData.value; return treeDataValue && Object.keys(treeDataValue).length > 0; }); const realWidth = vue.ref(parseWidth(props.width)); const realMinWidth = vue.ref(parseMinWidth(props.minWidth)); const setColumnWidth = (column) => { if (realWidth.value) column.width = realWidth.value; if (realMinWidth.value) { column.minWidth = realMinWidth.value; } if (!realWidth.value && realMinWidth.value) { column.width = void 0; } if (!column.minWidth) { column.minWidth = 80; } column.realWidth = Number(column.width === void 0 ? 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" && value !== void 0) { 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 (Array.isArray(children)) { children.forEach((child) => check(child)); } else { check(children); } function check(item) { var _a2; if (((_a2 = item == null ? void 0 : item.type) == null ? void 0 : _a2.name) === "ElTableColumn") { item.vParent = instance; } } }; const setColumnRenders = (column) => { if (props.renderHeader) ; else if (column.type !== "selection") { column.renderHeader = (scope) => { instance.columnConfig.value["label"]; return vue.renderSlot(slots, "header", scope, () => [column.label]); }; } 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 prefix2 = 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, [prefix2, children]); }; } return column; }; const getPropsData = (...propsKey) => { return propsKey.reduce((prev, cur) => { if (Array.isArray(cur)) { cur.forEach((key2) => { prev[key2] = props[key2]; }); } return prev; }, {}); }; const getColumnElIndex = (children, child) => { return Array.prototype.indexOf.call(children, child); }; const updateColumnOrder = () => { owner.value.store.commit("updateColumnOrder", instance.columnConfig.value); }; return { columnId, realAlign, isSubColumn, realHeaderAlign, columnOrTableParent, setColumnWidth, setColumnForcedProps, setColumnRenders, getPropsData, getColumnElIndex, updateColumnOrder }; } var defaultProps = { type: { type: String, default: "default" }, label: String, className: String, labelClassName: String, property: String, prop: String, width: { type: [String, Number], default: "" }, minWidth: { type: [String, Number], default: "" }, renderHeader: Function, sortable: { type: [Boolean, String], default: false }, sortMethod: Function, sortBy: [String, Function, Array], resizable: { type: Boolean, default: true }, columnKey: String, align: String, headerAlign: String, showOverflowTooltip: { type: [Boolean, Object], default: void 0 }, 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 ? void 0 : _a2.children; const getColumnIndex = () => getColumnElIndex(children || [], instance.vnode.el); columnConfig.value.getColumnIndex = getColumnIndex; const columnIndex = getColumnIndex(); columnIndex > -1 && owner.value.store.commit("insertColumn", columnConfig.value, isSubColumn.value ? parent2.columnConfig.value : null, updateColumnOrder); }); vue.onBeforeUnmount(() => { 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 (Array.isArray(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 && Array.isArray(childNode.children)) { childNode.children.forEach((vnode2) => { if ((vnode2 == null ? void 0 : vnode2.patchFlag) !== 1024 && !isString(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 textProps = buildProps({ type: { type: String, values: ["primary", "success", "info", "warning", "danger", ""], default: "" }, size: { type: String, values: componentSizes, default: "" }, truncated: { type: Boolean }, lineClamp: { type: [String, Number] }, tag: { type: String, default: "span" } }); const __default__$1 = vue.defineComponent({ name: "ElText" }); const _sfc_main$9 = /* @__PURE__ */ vue.defineComponent({ ...__default__$1, props: textProps, setup(__props) { const props = __props; const textSize = useFormSize(); const ns = useNamespace("text"); const textKls = vue.computed(() => [ ns.b(), ns.m(props.type), ns.m(textSize.value), ns.is("truncated", props.truncated), ns.is("line-clamp", !isUndefined(props.lineClamp)) ]); return (_ctx, _cache) => { return vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.tag), { class: vue.normalizeClass(vue.unref(textKls)), style: vue.normalizeStyle({ "-webkit-line-clamp": _ctx.lineClamp }) }, { default: vue.withCtx(() => [ vue.renderSlot(_ctx.$slots, "default") ]), _: 3 }, 8, ["class", "style"]); }; } }); var Text = /* @__PURE__ */ _export_sfc$1(_sfc_main$9, [["__file", "text.vue"]]); const ElText = withInstall(Text); const watermarkProps = buildProps({ zIndex: { type: Number, default: 9 }, rotate: { type: Number, default: -22 }, width: Number, height: Number, image: String, content: { type: definePropType([String, Array]), default: "Element Plus" }, font: { type: definePropType(Object) }, gap: { type: definePropType(Array), default: () => [100, 100] }, offset: { type: definePropType(Array) } }); function toLowercaseSeparator(key2) { return key2.replace(/([A-Z])/g, "-$1").toLowerCase(); } function getStyleStr(style) { return Object.keys(style).map((key2) => `${toLowercaseSeparator(key2)}: ${style[key2]};`).join(" "); } function getPixelRatio() { return window.devicePixelRatio || 1; } const reRendering = (mutation, watermarkElement) => { let flag = false; if (mutation.removedNodes.length && watermarkElement) { flag = Array.from(mutation.removedNodes).includes(watermarkElement); } if (mutation.type === "attributes" && mutation.target === watermarkElement) { flag = true; } return flag; }; const FontGap = 3; function prepareCanvas(width, height, ratio = 1) { const canvas = document.createElement("canvas"); const ctx = canvas.getContext("2d"); const realWidth = width * ratio; const realHeight = height * ratio; canvas.setAttribute("width", `${realWidth}px`); canvas.setAttribute("height", `${realHeight}px`); ctx.save(); return [ctx, canvas, realWidth, realHeight]; } function useClips() { function getClips(content, rotate, ratio, width, height, font, gapX, gapY) { const [ctx, canvas, contentWidth, contentHeight] = prepareCanvas(width, height, ratio); if (content instanceof HTMLImageElement) { ctx.drawImage(content, 0, 0, contentWidth, contentHeight); } else { const { color, fontSize, fontStyle, fontWeight, fontFamily, textAlign, textBaseline } = font; const mergedFontSize = Number(fontSize) * ratio; ctx.font = `${fontStyle} normal ${fontWeight} ${mergedFontSize}px/${height}px ${fontFamily}`; ctx.fillStyle = color; ctx.textAlign = textAlign; ctx.textBaseline = textBaseline; const contents = Array.isArray(content) ? content : [content]; contents == null ? void 0 : contents.forEach((item, index) => { ctx.fillText(item != null ? item : "", contentWidth / 2, index * (mergedFontSize + FontGap * ratio)); }); } const angle = Math.PI / 180 * Number(rotate); const maxSize = Math.max(width, height); const [rCtx, rCanvas, realMaxSize] = prepareCanvas(maxSize, maxSize, ratio); rCtx.translate(realMaxSize / 2, realMaxSize / 2); rCtx.rotate(angle); if (contentWidth > 0 && contentHeight > 0) { rCtx.drawImage(canvas, -contentWidth / 2, -contentHeight / 2); } function getRotatePos(x2, y) { const targetX = x2 * Math.cos(angle) - y * Math.sin(angle); const targetY = x2 * Math.sin(angle) + y * Math.cos(angle); return [targetX, targetY]; } let left = 0; let right = 0; let top = 0; let bottom = 0; const halfWidth = contentWidth / 2; const halfHeight = contentHeight / 2; const points = [ [0 - halfWidth, 0 - halfHeight], [0 + halfWidth, 0 - halfHeight], [0 + halfWidth, 0 + halfHeight], [0 - halfWidth, 0 + halfHeight] ]; points.forEach(([x2, y]) => { const [targetX, targetY] = getRotatePos(x2, y); left = Math.min(left, targetX); right = Math.max(right, targetX); top = Math.min(top, targetY); bottom = Math.max(bottom, targetY); }); const cutLeft = left + realMaxSize / 2; const cutTop = top + realMaxSize / 2; const cutWidth = right - left; const cutHeight = bottom - top; const realGapX = gapX * ratio; const realGapY = gapY * ratio; const filledWidth = (cutWidth + realGapX) * 2; const filledHeight = cutHeight + realGapY; const [fCtx, fCanvas] = prepareCanvas(filledWidth, filledHeight); function drawImg(targetX = 0, targetY = 0) { fCtx.drawImage(rCanvas, cutLeft, cutTop, cutWidth, cutHeight, targetX, targetY, cutWidth, cutHeight); } drawImg(); drawImg(cutWidth + realGapX, -cutHeight / 2 - realGapY / 2); drawImg(cutWidth + realGapX, +cutHeight / 2 + realGapY / 2); return [fCanvas.toDataURL(), filledWidth / ratio, filledHeight / ratio]; } return getClips; } const __default__ = vue.defineComponent({ name: "ElWatermark" }); const _sfc_main$8 = /* @__PURE__ */ vue.defineComponent({ ...__default__, props: watermarkProps, setup(__props) { const props = __props; const style = { position: "relative" }; const color = vue.computed(() => { var _a2, _b; return (_b = (_a2 = props.font) == null ? void 0 : _a2.color) != null ? _b : "rgba(0,0,0,.15)"; }); const fontSize = vue.computed(() => { var _a2, _b; return (_b = (_a2 = props.font) == null ? void 0 : _a2.fontSize) != null ? _b : 16; }); const fontWeight = vue.computed(() => { var _a2, _b; return (_b = (_a2 = props.font) == null ? void 0 : _a2.fontWeight) != null ? _b : "normal"; }); const fontStyle = vue.computed(() => { var _a2, _b; return (_b = (_a2 = props.font) == null ? void 0 : _a2.fontStyle) != null ? _b : "normal"; }); const fontFamily = vue.computed(() => { var _a2, _b; return (_b = (_a2 = props.font) == null ? void 0 : _a2.fontFamily) != null ? _b : "sans-serif"; }); const textAlign = vue.computed(() => { var _a2, _b; return (_b = (_a2 = props.font) == null ? void 0 : _a2.textAlign) != null ? _b : "center"; }); const textBaseline = vue.computed(() => { var _a2, _b; return (_b = (_a2 = props.font) == null ? void 0 : _a2.textBaseline) != null ? _b : "top"; }); const gapX = vue.computed(() => props.gap[0]); const gapY = vue.computed(() => props.gap[1]); const gapXCenter = vue.computed(() => gapX.value / 2); const gapYCenter = vue.computed(() => gapY.value / 2); const offsetLeft = vue.computed(() => { var _a2, _b; return (_b = (_a2 = props.offset) == null ? void 0 : _a2[0]) != null ? _b : gapXCenter.value; }); const offsetTop = vue.computed(() => { var _a2, _b; return (_b = (_a2 = props.offset) == null ? void 0 : _a2[1]) != null ? _b : gapYCenter.value; }); const getMarkStyle = () => { const markStyle = { zIndex: props.zIndex, position: "absolute", left: 0, top: 0, width: "100%", height: "100%", pointerEvents: "none", backgroundRepeat: "repeat" }; let positionLeft = offsetLeft.value - gapXCenter.value; let positionTop = offsetTop.value - gapYCenter.value; if (positionLeft > 0) { markStyle.left = `${positionLeft}px`; markStyle.width = `calc(100% - ${positionLeft}px)`; positionLeft = 0; } if (positionTop > 0) { markStyle.top = `${positionTop}px`; markStyle.height = `calc(100% - ${positionTop}px)`; positionTop = 0; } markStyle.backgroundPosition = `${positionLeft}px ${positionTop}px`; return markStyle; }; const containerRef = vue.shallowRef(null); const watermarkRef = vue.shallowRef(); const stopObservation = vue.ref(false); const destroyWatermark = () => { if (watermarkRef.value) { watermarkRef.value.remove(); watermarkRef.value = void 0; } }; const appendWatermark = (base64Url, markWidth) => { var _a2; if (containerRef.value && watermarkRef.value) { stopObservation.value = true; watermarkRef.value.setAttribute("style", getStyleStr({ ...getMarkStyle(), backgroundImage: `url('${base64Url}')`, backgroundSize: `${Math.floor(markWidth)}px` })); (_a2 = containerRef.value) == null ? void 0 : _a2.append(watermarkRef.value); setTimeout(() => { stopObservation.value = false; }); } }; const getMarkSize = (ctx) => { let defaultWidth = 120; let defaultHeight = 64; const image = props.image; const content = props.content; const width = props.width; const height = props.height; if (!image && ctx.measureText) { ctx.font = `${Number(fontSize.value)}px ${fontFamily.value}`; const contents = Array.isArray(content) ? content : [content]; const sizes = contents.map((item) => { const metrics = ctx.measureText(item); return [ metrics.width, metrics.fontBoundingBoxAscent !== void 0 ? metrics.fontBoundingBoxAscent + metrics.fontBoundingBoxDescent : metrics.actualBoundingBoxAscent + metrics.actualBoundingBoxDescent ]; }); defaultWidth = Math.ceil(Math.max(...sizes.map((size) => size[0]))); defaultHeight = Math.ceil(Math.max(...sizes.map((size) => size[1]))) * contents.length + (contents.length - 1) * FontGap; } return [width != null ? width : defaultWidth, height != null ? height : defaultHeight]; }; const getClips = useClips(); const renderWatermark = () => { const canvas = document.createElement("canvas"); const ctx = canvas.getContext("2d"); const image = props.image; const content = props.content; const rotate = props.rotate; if (ctx) { if (!watermarkRef.value) { watermarkRef.value = document.createElement("div"); } const ratio = getPixelRatio(); const [markWidth, markHeight] = getMarkSize(ctx); const drawCanvas = (drawContent) => { const [textClips, clipWidth] = getClips(drawContent || "", rotate, ratio, markWidth, markHeight, { color: color.value, fontSize: fontSize.value, fontStyle: fontStyle.value, fontWeight: fontWeight.value, fontFamily: fontFamily.value, textAlign: textAlign.value, textBaseline: textBaseline.value }, gapX.value, gapY.value); appendWatermark(textClips, clipWidth); }; if (image) { const img = new Image(); img.onload = () => { drawCanvas(img); }; img.onerror = () => { drawCanvas(content); }; img.crossOrigin = "anonymous"; img.referrerPolicy = "no-referrer"; img.src = image; } else { drawCanvas(content); } } }; vue.onMounted(() => { renderWatermark(); }); vue.watch(() => props, () => { renderWatermark(); }, { deep: true, flush: "post" }); vue.onBeforeUnmount(() => { destroyWatermark(); }); const onMutate = (mutations) => { if (stopObservation.value) { return; } mutations.forEach((mutation) => { if (reRendering(mutation, watermarkRef.value)) { destroyWatermark(); renderWatermark(); } }); }; useMutationObserver(containerRef, onMutate, { attributes: true, subtree: true, childList: true }); return (_ctx, _cache) => { return vue.openBlock(), vue.createElementBlock("div", { ref_key: "containerRef", ref: containerRef, style: vue.normalizeStyle([style]) }, [ vue.renderSlot(_ctx.$slots, "default") ], 4); }; } }); var Watermark = /* @__PURE__ */ _export_sfc$1(_sfc_main$8, [["__file", "watermark.vue"]]); const ElWatermark = withInstall(Watermark); function createLoadingComponent(options) { let afterLeaveTimer; const afterLeaveFlag = vue.ref(false); const data = vue.reactive({ ...options, originalPosition: "", originalOverflow: "", visible: false }); function setText(text) { data.text = text; } function destroySelf() { const target = data.parent; const ns = vm.ns; if (!target.vLoadingAddClassList) { let loadingNumber = target.getAttribute("loading-number"); loadingNumber = Number.parseInt(loadingNumber) - 1; if (!loadingNumber) { removeClass(target, ns.bm("parent", "relative")); target.removeAttribute("loading-number"); } else { target.setAttribute("loading-number", loadingNumber.toString()); } removeClass(target, ns.bm("parent", "hidden")); } removeElLoadingChild(); loadingInstance.unmount(); } function removeElLoadingChild() { var _a2, _b; (_b = (_a2 = vm.$el) == null ? void 0 : _a2.parentNode) == null ? void 0 : _b.removeChild(vm.$el); } function close() { var _a2; if (options.beforeClose && !options.beforeClose()) return; afterLeaveFlag.value = true; clearTimeout(afterLeaveTimer); afterLeaveTimer = window.setTimeout(handleAfterLeave, 400); data.visible = false; (_a2 = options.closed) == null ? void 0 : _a2.call(options); } function handleAfterLeave() { if (!afterLeaveFlag.value) return; const target = data.parent; afterLeaveFlag.value = false; target.vLoadingAddClassList = void 0; destroySelf(); } const elLoadingComponent = vue.defineComponent({ name: "ElLoading", setup(_2, { expose }) { const { ns, zIndex: zIndex2 } = useGlobalComponentSettings("loading"); expose({ ns, zIndex: zIndex2 }); return () => { const svg = data.spinner || data.svg; const spinner = vue.h("svg", { class: "circular", viewBox: data.svgViewBox ? data.svgViewBox : "0 0 50 50", ...svg ? { innerHTML: svg } : {} }, [ vue.h("circle", { class: "path", cx: "25", cy: "25", r: "20", fill: "none" }) ]); const spinnerText = data.text ? vue.h("p", { class: ns.b("text") }, [data.text]) : void 0; return vue.h(vue.Transition, { name: ns.b("fade"), onAfterLeave: handleAfterLeave }, { default: vue.withCtx(() => [ vue.withDirectives(vue.createVNode("div", { style: { backgroundColor: data.background || "" }, class: [ ns.b("mask"), data.customClass, data.fullscreen ? "is-fullscreen" : "" ] }, [ vue.h("div", { class: ns.b("spinner") }, [spinner, spinnerText]) ]), [[vue.vShow, data.visible]]) ]) }); }; } }); const loadingInstance = vue.createApp(elLoadingComponent); const vm = loadingInstance.mount(document.createElement("div")); return { ...vue.toRefs(data), setText, removeElLoadingChild, close, handleAfterLeave, vm, get $el() { return vm.$el; } }; } let fullscreenInstance = void 0; const Loading = function(options = {}) { if (!isClient) return void 0; const resolved = resolveOptions(options); if (resolved.fullscreen && fullscreenInstance) { return fullscreenInstance; } const instance = createLoadingComponent({ ...resolved, closed: () => { var _a2; (_a2 = resolved.closed) == null ? void 0 : _a2.call(resolved); if (resolved.fullscreen) fullscreenInstance = void 0; } }); addStyle(resolved, resolved.parent, instance); addClassList(resolved, resolved.parent, instance); resolved.parent.vLoadingAddClassList = () => addClassList(resolved, resolved.parent, instance); let loadingNumber = resolved.parent.getAttribute("loading-number"); if (!loadingNumber) { loadingNumber = "1"; } else { loadingNumber = `${Number.parseInt(loadingNumber) + 1}`; } resolved.parent.setAttribute("loading-number", loadingNumber); resolved.parent.appendChild(instance.$el); vue.nextTick(() => instance.visible.value = resolved.visible); if (resolved.fullscreen) { fullscreenInstance = instance; } return instance; }; const resolveOptions = (options) => { var _a2, _b, _c, _d; let target; if (isString(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, 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 [key2, value] of Object.entries(maskStyle)) { instance.$el.style[key2] = 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 = (key2) => isObject$1(binding.value) ? binding.value[key2] : void 0; const resolveExpression = (key2) => { const data = isString(key2) && (vm == null ? void 0 : vm[key2]) || key2; if (data) return vue.ref(data); else return data; }; const getProp2 = (name) => resolveExpression(getBindingProp(name) || el.getAttribute(`element-loading-${hyphenate(name)}`)); const fullscreen = (_a2 = getBindingProp("fullscreen")) != null ? _a2 : binding.modifiers.fullscreen; const options = { text: getProp2("text"), svg: getProp2("svg"), svgViewBox: getProp2("svgViewBox"), spinner: getProp2("spinner"), background: getProp2("background"), customClass: getProp2("customClass"), fullscreen, target: (_b = getBindingProp("target")) != null ? _b : fullscreen ? void 0 : el, body: (_c = getBindingProp("body")) != null ? _c : binding.modifiers.body, lock: (_d = getBindingProp("lock")) != null ? _d : binding.modifiers.lock }; el[INSTANCE_KEY] = { options, instance: Loading(options) }; }; const updateOptions = (newOptions, originalOptions) => { for (const key2 of Object.keys(originalOptions)) { if (vue.isRef(originalOptions[key2])) originalOptions[key2].value = newOptions[key2]; } }; const vLoading = { mounted(el, binding) { if (binding.value) { createInstance(el, binding); } }, updated(el, binding) { const instance = el[INSTANCE_KEY]; if (binding.oldValue !== binding.value) { if (binding.value && !binding.oldValue) { createInstance(el, binding); } else if (binding.value && binding.oldValue) { if (isObject$1(binding.value)) updateOptions(binding.value, instance.options); } else { instance == null ? void 0 : instance.instance.close(); } } }, unmounted(el) { var _a2; (_a2 = el[INSTANCE_KEY]) == null ? void 0 : _a2.instance.close(); el[INSTANCE_KEY] = null; } }; /*! * pinia v2.1.7 * (c) 2023 Eduardo San Martin Morote * @license MIT */ let activePinia; const setActivePinia = (pinia) => activePinia = pinia; const piniaSymbol = ( /* istanbul ignore next */ Symbol() ); function isPlainObject(o2) { return o2 && typeof o2 === "object" && Object.prototype.toString.call(o2) === "[object Object]" && typeof o2.toJSON !== "function"; } var MutationType; (function(MutationType2) { MutationType2["direct"] = "direct"; MutationType2["patchObject"] = "patch object"; MutationType2["patchFunction"] = "patch function"; })(MutationType || (MutationType = {})); function createPinia() { const scope = vue.effectScope(true); const state = scope.run(() => vue.ref({})); let _p = []; let toBeInstalled = []; const pinia = vue.markRaw({ install(app) { setActivePinia(pinia); { pinia._a = app; app.provide(piniaSymbol, pinia); app.config.globalProperties.$pinia = pinia; toBeInstalled.forEach((plugin) => _p.push(plugin)); toBeInstalled = []; } }, use(plugin) { if (!this._a && !isVue2) { toBeInstalled.push(plugin); } else { _p.push(plugin); } return this; }, _p, // it's actually undefined here // @ts-expect-error _a: null, _e: scope, _s: /* @__PURE__ */ new Map(), state }); return pinia; } const noop = () => { }; function addSubscription(subscriptions, callback, detached, onCleanup = noop) { subscriptions.push(callback); const removeSubscription = () => { const idx = subscriptions.indexOf(callback); if (idx > -1) { subscriptions.splice(idx, 1); onCleanup(); } }; if (!detached && vue.getCurrentScope()) { vue.onScopeDispose(removeSubscription); } return removeSubscription; } function triggerSubscriptions(subscriptions, ...args) { subscriptions.slice().forEach((callback) => { callback(...args); }); } const fallbackRunWithContext = (fn2) => fn2(); function mergeReactiveObjects(target, patchToApply) { if (target instanceof Map && patchToApply instanceof Map) { patchToApply.forEach((value, key2) => target.set(key2, value)); } if (target instanceof Set && patchToApply instanceof Set) { patchToApply.forEach(target.add, target); } for (const key2 in patchToApply) { if (!patchToApply.hasOwnProperty(key2)) continue; const subPatch = patchToApply[key2]; const targetValue = target[key2]; if (isPlainObject(targetValue) && isPlainObject(subPatch) && target.hasOwnProperty(key2) && !vue.isRef(subPatch) && !vue.isReactive(subPatch)) { target[key2] = mergeReactiveObjects(targetValue, subPatch); } else { target[key2] = subPatch; } } return target; } const skipHydrateSymbol = ( /* istanbul ignore next */ Symbol() ); function shouldHydrate(obj) { return !isPlainObject(obj) || !obj.hasOwnProperty(skipHydrateSymbol); } const { assign } = Object; function isComputed(o2) { return !!(vue.isRef(o2) && o2.effect); } function createOptionsStore(id, options, pinia, hot) { const { state, actions, getters } = options; const initialState = pinia.state.value[id]; let store; function setup() { if (!initialState && true) { { pinia.state.value[id] = state ? state() : {}; } } const localState = vue.toRefs(pinia.state.value[id]); return assign(localState, actions, Object.keys(getters || {}).reduce((computedGetters, name) => { computedGetters[name] = vue.markRaw(vue.computed(() => { setActivePinia(pinia); const store2 = pinia._s.get(id); return getters[name].call(store2, store2); })); return computedGetters; }, {})); } store = createSetupStore(id, setup, options, pinia, hot, true); return store; } function createSetupStore($id, setup, options = {}, pinia, hot, isOptionsStore) { let scope; const optionsForPlugin = assign({ actions: {} }, options); const $subscribeOptions = { deep: true // flush: 'post', }; let isListening; let isSyncListening; let subscriptions = []; let actionSubscriptions = []; let debuggerEvents; const initialState = pinia.state.value[$id]; if (!isOptionsStore && !initialState && true) { { pinia.state.value[$id] = {}; } } vue.ref({}); let activeListener; function $patch(partialStateOrMutator) { let subscriptionMutation; isListening = isSyncListening = false; if (typeof partialStateOrMutator === "function") { partialStateOrMutator(pinia.state.value[$id]); subscriptionMutation = { type: MutationType.patchFunction, storeId: $id, events: debuggerEvents }; } else { mergeReactiveObjects(pinia.state.value[$id], partialStateOrMutator); subscriptionMutation = { type: MutationType.patchObject, payload: partialStateOrMutator, storeId: $id, events: debuggerEvents }; } const myListenerId = activeListener = Symbol(); vue.nextTick().then(() => { if (activeListener === myListenerId) { isListening = true; } }); isSyncListening = true; triggerSubscriptions(subscriptions, subscriptionMutation, pinia.state.value[$id]); } const $reset = isOptionsStore ? function $reset2() { const { state } = options; const newState = state ? state() : {}; this.$patch(($state) => { assign($state, newState); }); } : ( /* istanbul ignore next */ noop ); function $dispose() { scope.stop(); subscriptions = []; actionSubscriptions = []; pinia._s.delete($id); } function wrapAction(name, action) { return function() { setActivePinia(pinia); const args = Array.from(arguments); const afterCallbackList = []; const onErrorCallbackList = []; function after(callback) { afterCallbackList.push(callback); } function onError(callback) { onErrorCallbackList.push(callback); } triggerSubscriptions(actionSubscriptions, { args, name, store, after, onError }); let ret; try { ret = action.apply(this && this.$id === $id ? this : store, args); } catch (error) { triggerSubscriptions(onErrorCallbackList, error); throw error; } if (ret instanceof Promise) { return ret.then((value) => { triggerSubscriptions(afterCallbackList, value); return value; }).catch((error) => { triggerSubscriptions(onErrorCallbackList, error); return Promise.reject(error); }); } triggerSubscriptions(afterCallbackList, ret); return ret; }; } const partialStore = { _p: pinia, // _s: scope, $id, $onAction: addSubscription.bind(null, actionSubscriptions), $patch, $reset, $subscribe(callback, options2 = {}) { const removeSubscription = addSubscription(subscriptions, callback, options2.detached, () => stopWatcher()); const stopWatcher = scope.run(() => vue.watch(() => pinia.state.value[$id], (state) => { if (options2.flush === "sync" ? isSyncListening : isListening) { callback({ storeId: $id, type: MutationType.direct, events: debuggerEvents }, state); } }, assign({}, $subscribeOptions, options2))); return removeSubscription; }, $dispose }; const store = vue.reactive(partialStore); pinia._s.set($id, store); const runWithContext = pinia._a && pinia._a.runWithContext || fallbackRunWithContext; const setupStore = runWithContext(() => pinia._e.run(() => (scope = vue.effectScope()).run(setup))); for (const key2 in setupStore) { const prop = setupStore[key2]; if (vue.isRef(prop) && !isComputed(prop) || vue.isReactive(prop)) { if (!isOptionsStore) { if (initialState && shouldHydrate(prop)) { if (vue.isRef(prop)) { prop.value = initialState[key2]; } else { mergeReactiveObjects(prop, initialState[key2]); } } { pinia.state.value[$id][key2] = prop; } } } else if (typeof prop === "function") { const actionValue = wrapAction(key2, prop); { setupStore[key2] = actionValue; } optionsForPlugin.actions[key2] = prop; } else ; } { assign(store, setupStore); assign(vue.toRaw(store), setupStore); } Object.defineProperty(store, "$state", { get: () => pinia.state.value[$id], set: (state) => { $patch(($state) => { assign($state, state); }); } }); pinia._p.forEach((extender) => { { assign(store, scope.run(() => extender({ store, app: pinia._a, pinia, options: optionsForPlugin }))); } }); if (initialState && isOptionsStore && options.hydrate) { options.hydrate(store.$state, initialState); } isListening = true; isSyncListening = true; return store; } function defineStore(idOrOptions, setup, setupOptions) { let id; let options; const isSetupStore = typeof setup === "function"; if (typeof idOrOptions === "string") { id = idOrOptions; options = isSetupStore ? setupOptions : setup; } else { options = idOrOptions; id = idOrOptions.id; } function useStore2(pinia, hot) { const hasContext = vue.hasInjectionContext(); pinia = // in test mode, ignore the argument provided as we can always retrieve a // pinia instance with getActivePinia() pinia || (hasContext ? vue.inject(piniaSymbol, null) : null); if (pinia) setActivePinia(pinia); pinia = activePinia; if (!pinia._s.has(id)) { if (isSetupStore) { createSetupStore(id, setup, options, pinia); } else { createOptionsStore(id, options, pinia); } } const store = pinia._s.get(id); return store; } useStore2.$id = id; return useStore2; } const prefix = "AiAsk_"; class Cache { /** * 封装缓存 * @param key 缓存key * @param value 缓存值 * @param expire 过期时间 * * @returns 缓存值 */ static set(key2, value, expire = 0) { key2 = prefix + key2; if (expire > 0) { _GM_setValue(key2, { value, expire: (/* @__PURE__ */ new Date()).getTime() + expire * 1e3 }); } else { _GM_setValue(key2, { value, expire: 0 }); } return _GM_getValue(key2); } /** * 获取缓存 * @param key 缓存key * * @returns 缓存值 */ static get(key2, defaultVal = null) { key2 = prefix + key2; let cache = _GM_getValue(key2); if (cache && cache.expire > 0 && cache.expire < (/* @__PURE__ */ new Date()).getTime()) { _GM_setValue(key2, null); return defaultVal; } return cache ? cache.value : defaultVal; } /** * 前缀匹配 */ static match(key2) { key2 = prefix + key2; let allKeys = _GM_listValues(); return allKeys.filter((k) => { return k.startsWith(key2); }); } /** * 前缀匹配,获取值 */ static matchGet(key2) { key2 = prefix + key2; let allKeys = _GM_listValues(); let res = []; allKeys.forEach((k) => { if (k.startsWith(key2)) { res.push(_GM_getValue(k, { value: null, expire: 0 }).value); } }); return res; } /** * 删除缓存 * @param key 缓存key */ static remove(key2) { key2 = prefix + key2; _GM_deleteValue(key2); } /** * 清空缓存 */ static clear() { let allKeys = _GM_listValues(); allKeys.forEach((key2) => { if (key2.startsWith(prefix)) { _GM_deleteValue(key2); } }); } /** * 前缀匹配删除 */ static matchRemove(key2) { key2 = prefix + key2; let allKeys = _GM_listValues(); allKeys.forEach((k) => { if (k.startsWith(key2)) { _GM_deleteValue(k); } }); } } var md5 = { exports: {} }; const __viteBrowserExternal = {}; const __viteBrowserExternal$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ __proto__: null, default: __viteBrowserExternal }, Symbol.toStringTag, { value: "Module" })); const require$$1 = /* @__PURE__ */ getAugmentedNamespace(__viteBrowserExternal$1); /** * [js-md5]{@link https://github.com/emn178/js-md5} * * @namespace md5 * @version 0.8.3 * @author Chen, Yi-Cyuan [[email protected]] * @copyright Chen, Yi-Cyuan 2014-2023 * @license MIT */ (function(module2) { (function() { var INPUT_ERROR = "input is invalid type"; var FINALIZE_ERROR = "finalize already called"; var WINDOW = typeof window === "object"; var root2 = WINDOW ? window : {}; if (root2.JS_MD5_NO_WINDOW) { WINDOW = false; } var WEB_WORKER = !WINDOW && typeof self === "object"; var NODE_JS = !root2.JS_MD5_NO_NODE_JS && typeof process === "object" && process.versions && process.versions.node; if (NODE_JS) { root2 = commonjsGlobal; } else if (WEB_WORKER) { root2 = self; } var COMMON_JS = !root2.JS_MD5_NO_COMMON_JS && true && module2.exports; var ARRAY_BUFFER = !root2.JS_MD5_NO_ARRAY_BUFFER && typeof ArrayBuffer !== "undefined"; var HEX_CHARS = "0123456789abcdef".split(""); var EXTRA = [128, 32768, 8388608, -2147483648]; var SHIFT = [0, 8, 16, 24]; var OUTPUT_TYPES = ["hex", "array", "digest", "buffer", "arrayBuffer", "base64"]; var BASE64_ENCODE_CHAR = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""); var blocks = [], buffer8; if (ARRAY_BUFFER) { var buffer = new ArrayBuffer(68); buffer8 = new Uint8Array(buffer); blocks = new Uint32Array(buffer); } var isArray2 = Array.isArray; if (root2.JS_MD5_NO_NODE_JS || !isArray2) { isArray2 = function(obj) { return Object.prototype.toString.call(obj) === "[object Array]"; }; } var isView = ArrayBuffer.isView; if (ARRAY_BUFFER && (root2.JS_MD5_NO_ARRAY_BUFFER_IS_VIEW || !isView)) { isView = function(obj) { return typeof obj === "object" && obj.buffer && obj.buffer.constructor === ArrayBuffer; }; } var formatMessage = function(message) { var type = typeof message; if (type === "string") { return [message, true]; } if (type !== "object" || message === null) { throw new Error(INPUT_ERROR); } if (ARRAY_BUFFER && message.constructor === ArrayBuffer) { return [new Uint8Array(message), false]; } if (!isArray2(message) && !isView(message)) { throw new Error(INPUT_ERROR); } return [message, false]; }; var createOutputMethod = function(outputType) { return function(message) { return new Md5(true).update(message)[outputType](); }; }; var createMethod = function() { var method = createOutputMethod("hex"); if (NODE_JS) { method = nodeWrap(method); } method.create = function() { return new Md5(); }; method.update = function(message) { return method.create().update(message); }; for (var i = 0; i < OUTPUT_TYPES.length; ++i) { var type = OUTPUT_TYPES[i]; method[type] = createOutputMethod(type); } return method; }; var nodeWrap = function(method) { var crypto = require$$1; var Buffer3 = require$$1.Buffer; var bufferFrom; if (Buffer3.from && !root2.JS_MD5_NO_BUFFER_FROM) { bufferFrom = Buffer3.from; } else { bufferFrom = function(message) { return new Buffer3(message); }; } var nodeMethod = function(message) { if (typeof message === "string") { return crypto.createHash("md5").update(message, "utf8").digest("hex"); } else { if (message === null || message === void 0) { throw new Error(INPUT_ERROR); } else if (message.constructor === ArrayBuffer) { message = new Uint8Array(message); } } if (isArray2(message) || isView(message) || message.constructor === Buffer3) { return crypto.createHash("md5").update(bufferFrom(message)).digest("hex"); } else { return method(message); } }; return nodeMethod; }; var createHmacOutputMethod = function(outputType) { return function(key2, message) { return new HmacMd5(key2, true).update(message)[outputType](); }; }; var createHmacMethod = function() { var method = createHmacOutputMethod("hex"); method.create = function(key2) { return new HmacMd5(key2); }; method.update = function(key2, message) { return method.create(key2).update(message); }; for (var i = 0; i < OUTPUT_TYPES.length; ++i) { var type = OUTPUT_TYPES[i]; method[type] = createHmacOutputMethod(type); } return method; }; function Md5(sharedMemory) { if (sharedMemory) { blocks[0] = blocks[16] = blocks[1] = blocks[2] = blocks[3] = blocks[4] = blocks[5] = blocks[6] = blocks[7] = blocks[8] = blocks[9] = blocks[10] = blocks[11] = blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0; this.blocks = blocks; this.buffer8 = buffer8; } else { if (ARRAY_BUFFER) { var buffer2 = new ArrayBuffer(68); this.buffer8 = new Uint8Array(buffer2); this.blocks = new Uint32Array(buffer2); } else { this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; } } this.h0 = this.h1 = this.h2 = this.h3 = this.start = this.bytes = this.hBytes = 0; this.finalized = this.hashed = false; this.first = true; } Md5.prototype.update = function(message) { if (this.finalized) { throw new Error(FINALIZE_ERROR); } var result = formatMessage(message); message = result[0]; var isString2 = result[1]; var code, index = 0, i, length = message.length, blocks2 = this.blocks; var buffer82 = this.buffer8; while (index < length) { if (this.hashed) { this.hashed = false; blocks2[0] = blocks2[16]; blocks2[16] = blocks2[1] = blocks2[2] = blocks2[3] = blocks2[4] = blocks2[5] = blocks2[6] = blocks2[7] = blocks2[8] = blocks2[9] = blocks2[10] = blocks2[11] = blocks2[12] = blocks2[13] = blocks2[14] = blocks2[15] = 0; } if (isString2) { if (ARRAY_BUFFER) { for (i = this.start; index < length && i < 64; ++index) { code = message.charCodeAt(index); if (code < 128) { buffer82[i++] = code; } else if (code < 2048) { buffer82[i++] = 192 | code >>> 6; buffer82[i++] = 128 | code & 63; } else if (code < 55296 || code >= 57344) { buffer82[i++] = 224 | code >>> 12; buffer82[i++] = 128 | code >>> 6 & 63; buffer82[i++] = 128 | code & 63; } else { code = 65536 + ((code & 1023) << 10 | message.charCodeAt(++index) & 1023); buffer82[i++] = 240 | code >>> 18; buffer82[i++] = 128 | code >>> 12 & 63; buffer82[i++] = 128 | code >>> 6 & 63; buffer82[i++] = 128 | code & 63; } } } else { for (i = this.start; index < length && i < 64; ++index) { code = message.charCodeAt(index); if (code < 128) { blocks2[i >>> 2] |= code << SHIFT[i++ & 3]; } else if (code < 2048) { blocks2[i >>> 2] |= (192 | code >>> 6) << SHIFT[i++ & 3]; blocks2[i >>> 2] |= (128 | code & 63) << SHIFT[i++ & 3]; } else if (code < 55296 || code >= 57344) { blocks2[i >>> 2] |= (224 | code >>> 12) << SHIFT[i++ & 3]; blocks2[i >>> 2] |= (128 | code >>> 6 & 63) << SHIFT[i++ & 3]; blocks2[i >>> 2] |= (128 | code & 63) << SHIFT[i++ & 3]; } else { code = 65536 + ((code & 1023) << 10 | message.charCodeAt(++index) & 1023); blocks2[i >>> 2] |= (240 | code >>> 18) << SHIFT[i++ & 3]; blocks2[i >>> 2] |= (128 | code >>> 12 & 63) << SHIFT[i++ & 3]; blocks2[i >>> 2] |= (128 | code >>> 6 & 63) << SHIFT[i++ & 3]; blocks2[i >>> 2] |= (128 | code & 63) << SHIFT[i++ & 3]; } } } } else { if (ARRAY_BUFFER) { for (i = this.start; index < length && i < 64; ++index) { buffer82[i++] = message[index]; } } else { for (i = this.start; index < length && i < 64; ++index) { blocks2[i >>> 2] |= message[index] << SHIFT[i++ & 3]; } } } this.lastByteIndex = i; this.bytes += i - this.start; if (i >= 64) { this.start = i - 64; this.hash(); this.hashed = true; } else { this.start = i; } } if (this.bytes > 4294967295) { this.hBytes += this.bytes / 4294967296 << 0; this.bytes = this.bytes % 4294967296; } return this; }; Md5.prototype.finalize = function() { if (this.finalized) { return; } this.finalized = true; var blocks2 = this.blocks, i = this.lastByteIndex; blocks2[i >>> 2] |= EXTRA[i & 3]; if (i >= 56) { if (!this.hashed) { this.hash(); } blocks2[0] = blocks2[16]; blocks2[16] = blocks2[1] = blocks2[2] = blocks2[3] = blocks2[4] = blocks2[5] = blocks2[6] = blocks2[7] = blocks2[8] = blocks2[9] = blocks2[10] = blocks2[11] = blocks2[12] = blocks2[13] = blocks2[14] = blocks2[15] = 0; } blocks2[14] = this.bytes << 3; blocks2[15] = this.hBytes << 3 | this.bytes >>> 29; this.hash(); }; Md5.prototype.hash = function() { var a2, b2, c2, d2, bc, da, blocks2 = this.blocks; if (this.first) { a2 = blocks2[0] - 680876937; a2 = (a2 << 7 | a2 >>> 25) - 271733879 << 0; d2 = (-1732584194 ^ a2 & 2004318071) + blocks2[1] - 117830708; d2 = (d2 << 12 | d2 >>> 20) + a2 << 0; c2 = (-271733879 ^ d2 & (a2 ^ -271733879)) + blocks2[2] - 1126478375; c2 = (c2 << 17 | c2 >>> 15) + d2 << 0; b2 = (a2 ^ c2 & (d2 ^ a2)) + blocks2[3] - 1316259209; b2 = (b2 << 22 | b2 >>> 10) + c2 << 0; } else { a2 = this.h0; b2 = this.h1; c2 = this.h2; d2 = this.h3; a2 += (d2 ^ b2 & (c2 ^ d2)) + blocks2[0] - 680876936; a2 = (a2 << 7 | a2 >>> 25) + b2 << 0; d2 += (c2 ^ a2 & (b2 ^ c2)) + blocks2[1] - 389564586; d2 = (d2 << 12 | d2 >>> 20) + a2 << 0; c2 += (b2 ^ d2 & (a2 ^ b2)) + blocks2[2] + 606105819; c2 = (c2 << 17 | c2 >>> 15) + d2 << 0; b2 += (a2 ^ c2 & (d2 ^ a2)) + blocks2[3] - 1044525330; b2 = (b2 << 22 | b2 >>> 10) + c2 << 0; } a2 += (d2 ^ b2 & (c2 ^ d2)) + blocks2[4] - 176418897; a2 = (a2 << 7 | a2 >>> 25) + b2 << 0; d2 += (c2 ^ a2 & (b2 ^ c2)) + blocks2[5] + 1200080426; d2 = (d2 << 12 | d2 >>> 20) + a2 << 0; c2 += (b2 ^ d2 & (a2 ^ b2)) + blocks2[6] - 1473231341; c2 = (c2 << 17 | c2 >>> 15) + d2 << 0; b2 += (a2 ^ c2 & (d2 ^ a2)) + blocks2[7] - 45705983; b2 = (b2 << 22 | b2 >>> 10) + c2 << 0; a2 += (d2 ^ b2 & (c2 ^ d2)) + blocks2[8] + 1770035416; a2 = (a2 << 7 | a2 >>> 25) + b2 << 0; d2 += (c2 ^ a2 & (b2 ^ c2)) + blocks2[9] - 1958414417; d2 = (d2 << 12 | d2 >>> 20) + a2 << 0; c2 += (b2 ^ d2 & (a2 ^ b2)) + blocks2[10] - 42063; c2 = (c2 << 17 | c2 >>> 15) + d2 << 0; b2 += (a2 ^ c2 & (d2 ^ a2)) + blocks2[11] - 1990404162; b2 = (b2 << 22 | b2 >>> 10) + c2 << 0; a2 += (d2 ^ b2 & (c2 ^ d2)) + blocks2[12] + 1804603682; a2 = (a2 << 7 | a2 >>> 25) + b2 << 0; d2 += (c2 ^ a2 & (b2 ^ c2)) + blocks2[13] - 40341101; d2 = (d2 << 12 | d2 >>> 20) + a2 << 0; c2 += (b2 ^ d2 & (a2 ^ b2)) + blocks2[14] - 1502002290; c2 = (c2 << 17 | c2 >>> 15) + d2 << 0; b2 += (a2 ^ c2 & (d2 ^ a2)) + blocks2[15] + 1236535329; b2 = (b2 << 22 | b2 >>> 10) + c2 << 0; a2 += (c2 ^ d2 & (b2 ^ c2)) + blocks2[1] - 165796510; a2 = (a2 << 5 | a2 >>> 27) + b2 << 0; d2 += (b2 ^ c2 & (a2 ^ b2)) + blocks2[6] - 1069501632; d2 = (d2 << 9 | d2 >>> 23) + a2 << 0; c2 += (a2 ^ b2 & (d2 ^ a2)) + blocks2[11] + 643717713; c2 = (c2 << 14 | c2 >>> 18) + d2 << 0; b2 += (d2 ^ a2 & (c2 ^ d2)) + blocks2[0] - 373897302; b2 = (b2 << 20 | b2 >>> 12) + c2 << 0; a2 += (c2 ^ d2 & (b2 ^ c2)) + blocks2[5] - 701558691; a2 = (a2 << 5 | a2 >>> 27) + b2 << 0; d2 += (b2 ^ c2 & (a2 ^ b2)) + blocks2[10] + 38016083; d2 = (d2 << 9 | d2 >>> 23) + a2 << 0; c2 += (a2 ^ b2 & (d2 ^ a2)) + blocks2[15] - 660478335; c2 = (c2 << 14 | c2 >>> 18) + d2 << 0; b2 += (d2 ^ a2 & (c2 ^ d2)) + blocks2[4] - 405537848; b2 = (b2 << 20 | b2 >>> 12) + c2 << 0; a2 += (c2 ^ d2 & (b2 ^ c2)) + blocks2[9] + 568446438; a2 = (a2 << 5 | a2 >>> 27) + b2 << 0; d2 += (b2 ^ c2 & (a2 ^ b2)) + blocks2[14] - 1019803690; d2 = (d2 << 9 | d2 >>> 23) + a2 << 0; c2 += (a2 ^ b2 & (d2 ^ a2)) + blocks2[3] - 187363961; c2 = (c2 << 14 | c2 >>> 18) + d2 << 0; b2 += (d2 ^ a2 & (c2 ^ d2)) + blocks2[8] + 1163531501; b2 = (b2 << 20 | b2 >>> 12) + c2 << 0; a2 += (c2 ^ d2 & (b2 ^ c2)) + blocks2[13] - 1444681467; a2 = (a2 << 5 | a2 >>> 27) + b2 << 0; d2 += (b2 ^ c2 & (a2 ^ b2)) + blocks2[2] - 51403784; d2 = (d2 << 9 | d2 >>> 23) + a2 << 0; c2 += (a2 ^ b2 & (d2 ^ a2)) + blocks2[7] + 1735328473; c2 = (c2 << 14 | c2 >>> 18) + d2 << 0; b2 += (d2 ^ a2 & (c2 ^ d2)) + blocks2[12] - 1926607734; b2 = (b2 << 20 | b2 >>> 12) + c2 << 0; bc = b2 ^ c2; a2 += (bc ^ d2) + blocks2[5] - 378558; a2 = (a2 << 4 | a2 >>> 28) + b2 << 0; d2 += (bc ^ a2) + blocks2[8] - 2022574463; d2 = (d2 << 11 | d2 >>> 21) + a2 << 0; da = d2 ^ a2; c2 += (da ^ b2) + blocks2[11] + 1839030562; c2 = (c2 << 16 | c2 >>> 16) + d2 << 0; b2 += (da ^ c2) + blocks2[14] - 35309556; b2 = (b2 << 23 | b2 >>> 9) + c2 << 0; bc = b2 ^ c2; a2 += (bc ^ d2) + blocks2[1] - 1530992060; a2 = (a2 << 4 | a2 >>> 28) + b2 << 0; d2 += (bc ^ a2) + blocks2[4] + 1272893353; d2 = (d2 << 11 | d2 >>> 21) + a2 << 0; da = d2 ^ a2; c2 += (da ^ b2) + blocks2[7] - 155497632; c2 = (c2 << 16 | c2 >>> 16) + d2 << 0; b2 += (da ^ c2) + blocks2[10] - 1094730640; b2 = (b2 << 23 | b2 >>> 9) + c2 << 0; bc = b2 ^ c2; a2 += (bc ^ d2) + blocks2[13] + 681279174; a2 = (a2 << 4 | a2 >>> 28) + b2 << 0; d2 += (bc ^ a2) + blocks2[0] - 358537222; d2 = (d2 << 11 | d2 >>> 21) + a2 << 0; da = d2 ^ a2; c2 += (da ^ b2) + blocks2[3] - 722521979; c2 = (c2 << 16 | c2 >>> 16) + d2 << 0; b2 += (da ^ c2) + blocks2[6] + 76029189; b2 = (b2 << 23 | b2 >>> 9) + c2 << 0; bc = b2 ^ c2; a2 += (bc ^ d2) + blocks2[9] - 640364487; a2 = (a2 << 4 | a2 >>> 28) + b2 << 0; d2 += (bc ^ a2) + blocks2[12] - 421815835; d2 = (d2 << 11 | d2 >>> 21) + a2 << 0; da = d2 ^ a2; c2 += (da ^ b2) + blocks2[15] + 530742520; c2 = (c2 << 16 | c2 >>> 16) + d2 << 0; b2 += (da ^ c2) + blocks2[2] - 995338651; b2 = (b2 << 23 | b2 >>> 9) + c2 << 0; a2 += (c2 ^ (b2 | ~d2)) + blocks2[0] - 198630844; a2 = (a2 << 6 | a2 >>> 26) + b2 << 0; d2 += (b2 ^ (a2 | ~c2)) + blocks2[7] + 1126891415; d2 = (d2 << 10 | d2 >>> 22) + a2 << 0; c2 += (a2 ^ (d2 | ~b2)) + blocks2[14] - 1416354905; c2 = (c2 << 15 | c2 >>> 17) + d2 << 0; b2 += (d2 ^ (c2 | ~a2)) + blocks2[5] - 57434055; b2 = (b2 << 21 | b2 >>> 11) + c2 << 0; a2 += (c2 ^ (b2 | ~d2)) + blocks2[12] + 1700485571; a2 = (a2 << 6 | a2 >>> 26) + b2 << 0; d2 += (b2 ^ (a2 | ~c2)) + blocks2[3] - 1894986606; d2 = (d2 << 10 | d2 >>> 22) + a2 << 0; c2 += (a2 ^ (d2 | ~b2)) + blocks2[10] - 1051523; c2 = (c2 << 15 | c2 >>> 17) + d2 << 0; b2 += (d2 ^ (c2 | ~a2)) + blocks2[1] - 2054922799; b2 = (b2 << 21 | b2 >>> 11) + c2 << 0; a2 += (c2 ^ (b2 | ~d2)) + blocks2[8] + 1873313359; a2 = (a2 << 6 | a2 >>> 26) + b2 << 0; d2 += (b2 ^ (a2 | ~c2)) + blocks2[15] - 30611744; d2 = (d2 << 10 | d2 >>> 22) + a2 << 0; c2 += (a2 ^ (d2 | ~b2)) + blocks2[6] - 1560198380; c2 = (c2 << 15 | c2 >>> 17) + d2 << 0; b2 += (d2 ^ (c2 | ~a2)) + blocks2[13] + 1309151649; b2 = (b2 << 21 | b2 >>> 11) + c2 << 0; a2 += (c2 ^ (b2 | ~d2)) + blocks2[4] - 145523070; a2 = (a2 << 6 | a2 >>> 26) + b2 << 0; d2 += (b2 ^ (a2 | ~c2)) + blocks2[11] - 1120210379; d2 = (d2 << 10 | d2 >>> 22) + a2 << 0; c2 += (a2 ^ (d2 | ~b2)) + blocks2[2] + 718787259; c2 = (c2 << 15 | c2 >>> 17) + d2 << 0; b2 += (d2 ^ (c2 | ~a2)) + blocks2[9] - 343485551; b2 = (b2 << 21 | b2 >>> 11) + c2 << 0; if (this.first) { this.h0 = a2 + 1732584193 << 0; this.h1 = b2 - 271733879 << 0; this.h2 = c2 - 1732584194 << 0; this.h3 = d2 + 271733878 << 0; this.first = false; } else { this.h0 = this.h0 + a2 << 0; this.h1 = this.h1 + b2 << 0; this.h2 = this.h2 + c2 << 0; this.h3 = this.h3 + d2 << 0; } }; Md5.prototype.hex = function() { this.finalize(); var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3; return HEX_CHARS[h0 >>> 4 & 15] + HEX_CHARS[h0 & 15] + HEX_CHARS[h0 >>> 12 & 15] + HEX_CHARS[h0 >>> 8 & 15] + HEX_CHARS[h0 >>> 20 & 15] + HEX_CHARS[h0 >>> 16 & 15] + HEX_CHARS[h0 >>> 28 & 15] + HEX_CHARS[h0 >>> 24 & 15] + HEX_CHARS[h1 >>> 4 & 15] + HEX_CHARS[h1 & 15] + HEX_CHARS[h1 >>> 12 & 15] + HEX_CHARS[h1 >>> 8 & 15] + HEX_CHARS[h1 >>> 20 & 15] + HEX_CHARS[h1 >>> 16 & 15] + HEX_CHARS[h1 >>> 28 & 15] + HEX_CHARS[h1 >>> 24 & 15] + HEX_CHARS[h2 >>> 4 & 15] + HEX_CHARS[h2 & 15] + HEX_CHARS[h2 >>> 12 & 15] + HEX_CHARS[h2 >>> 8 & 15] + HEX_CHARS[h2 >>> 20 & 15] + HEX_CHARS[h2 >>> 16 & 15] + HEX_CHARS[h2 >>> 28 & 15] + HEX_CHARS[h2 >>> 24 & 15] + HEX_CHARS[h3 >>> 4 & 15] + HEX_CHARS[h3 & 15] + HEX_CHARS[h3 >>> 12 & 15] + HEX_CHARS[h3 >>> 8 & 15] + HEX_CHARS[h3 >>> 20 & 15] + HEX_CHARS[h3 >>> 16 & 15] + HEX_CHARS[h3 >>> 28 & 15] + HEX_CHARS[h3 >>> 24 & 15]; }; Md5.prototype.toString = Md5.prototype.hex; Md5.prototype.digest = function() { this.finalize(); var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3; return [ h0 & 255, h0 >>> 8 & 255, h0 >>> 16 & 255, h0 >>> 24 & 255, h1 & 255, h1 >>> 8 & 255, h1 >>> 16 & 255, h1 >>> 24 & 255, h2 & 255, h2 >>> 8 & 255, h2 >>> 16 & 255, h2 >>> 24 & 255, h3 & 255, h3 >>> 8 & 255, h3 >>> 16 & 255, h3 >>> 24 & 255 ]; }; Md5.prototype.array = Md5.prototype.digest; Md5.prototype.arrayBuffer = function() { this.finalize(); var buffer2 = new ArrayBuffer(16); var blocks2 = new Uint32Array(buffer2); blocks2[0] = this.h0; blocks2[1] = this.h1; blocks2[2] = this.h2; blocks2[3] = this.h3; return buffer2; }; Md5.prototype.buffer = Md5.prototype.arrayBuffer; Md5.prototype.base64 = function() { var v1, v2, v3, base64Str = "", bytes = this.array(); for (var i = 0; i < 15; ) { v1 = bytes[i++]; v2 = bytes[i++]; v3 = bytes[i++]; base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] + BASE64_ENCODE_CHAR[(v1 << 4 | v2 >>> 4) & 63] + BASE64_ENCODE_CHAR[(v2 << 2 | v3 >>> 6) & 63] + BASE64_ENCODE_CHAR[v3 & 63]; } v1 = bytes[i]; base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] + BASE64_ENCODE_CHAR[v1 << 4 & 63] + "=="; return base64Str; }; function HmacMd5(key2, sharedMemory) { var i, result = formatMessage(key2); key2 = result[0]; if (result[1]) { var bytes = [], length = key2.length, index = 0, code; for (i = 0; i < length; ++i) { code = key2.charCodeAt(i); if (code < 128) { bytes[index++] = code; } else if (code < 2048) { bytes[index++] = 192 | code >>> 6; bytes[index++] = 128 | code & 63; } else if (code < 55296 || code >= 57344) { bytes[index++] = 224 | code >>> 12; bytes[index++] = 128 | code >>> 6 & 63; bytes[index++] = 128 | code & 63; } else { code = 65536 + ((code & 1023) << 10 | key2.charCodeAt(++i) & 1023); bytes[index++] = 240 | code >>> 18; bytes[index++] = 128 | code >>> 12 & 63; bytes[index++] = 128 | code >>> 6 & 63; bytes[index++] = 128 | code & 63; } } key2 = bytes; } if (key2.length > 64) { key2 = new Md5(true).update(key2).array(); } var oKeyPad = [], iKeyPad = []; for (i = 0; i < 64; ++i) { var b2 = key2[i] || 0; oKeyPad[i] = 92 ^ b2; iKeyPad[i] = 54 ^ b2; } Md5.call(this, sharedMemory); this.update(iKeyPad); this.oKeyPad = oKeyPad; this.inner = true; this.sharedMemory = sharedMemory; } HmacMd5.prototype = new Md5(); HmacMd5.prototype.finalize = function() { Md5.prototype.finalize.call(this); if (this.inner) { this.inner = false; var innerHash = this.array(); Md5.call(this, this.sharedMemory); this.update(this.oKeyPad); this.update(innerHash); Md5.prototype.finalize.call(this); } }; var exports2 = createMethod(); exports2.md5 = exports2; exports2.md5.hmac = createHmacMethod(); if (COMMON_JS) { module2.exports = exports2; } else { root2.md5 = exports2; } })(); })(md5); var md5Exports = md5.exports; const scriptInfo$1 = _GM_info; const key = randomString(9) + "_"; function request(url, method, data = void 0, headers = void 0, timeout = 5e3) { if (method === "GET" && data) { url += `?${new URLSearchParams(data).toString()}`; } if (method === "POST") { const t = get_t(data); headers = { ...headers, "aka": t }; } const finalHeaders = { "User-Agent": _unsafeWindow.navigator.userAgent, "Content-Type": "application/json", "referer": location.href, "v": scriptInfo$1.script.version, ...headers }; return new Promise((resolve, reject) => { const startTime = Date.now(); _GM_xmlhttpRequest({ method, url, headers: finalHeaders, data: method !== "GET" ? JSON.stringify(data) : void 0, timeout, onload: function(response) { const endTime = Date.now(); const duration = endTime - startTime; resolve([response, duration]); }, ontimeout: () => reject(new Error("接口请求超时")), onerror: (error) => { reject(error); } }); }); } function requestFetch(url, method, data, headers, timeout = 5e3) { const finalHeaders = { "User-Agent": _unsafeWindow.navigator.userAgent, "Content-Type": method === "POST" ? "application/json" : "text/plain;charset=UTF-8", ...headers }; return new Promise((resolve, reject) => { fetch(url, { method, headers: finalHeaders, body: method === "POST" ? JSON.stringify(data) : void 0 }).then((response) => resolve(response.text())).catch(function(error) { reject(error); }); }); } function headi() { let z = Array.from({ length: 4 }, () => Math.floor(Math.random() * 255)).join("."); return { "X-Forwarded-For": z, "X-Real-IP": z }; } function sleep(time) { return new Promise((resolve) => setTimeout(resolve, time)); } function removeHtml(htmlStr) { const textArea = document.createElement("textarea"); textArea.innerHTML = htmlStr; htmlStr = textArea.value; htmlStr = htmlStr.replace(/[\t\r\xa0]/g, " "); htmlStr = htmlStr.replace(/[\u2000-\u200a]/g, " "); htmlStr = htmlStr.replace(/<br\s*\/?>/g, "\n"); htmlStr = htmlStr.replace(/<(\/)?(p|div).*?>/g, "\n"); htmlStr = htmlStr.replace(/ {2,}/g, " "); htmlStr = htmlStr.replace(/\n{2,}/g, "\n"); htmlStr = DOMPurify.sanitize(htmlStr, { ALLOWED_TAGS: ["img", "br", "sub", "sup", "table", "caption", "thead", "tfoot", "tbody", "tr", "th", "td", "strong"], ALLOWED_ATTR: ["src", "href"], ALLOW_DATA_ATTR: false }); return htmlStr.trim(); } function removeHtml1(htmlStr, replacen = true) { const textArea = document.createElement("textarea"); textArea.innerHTML = htmlStr; htmlStr = textArea.value; htmlStr = htmlStr.replace(/[\t\r\xa0]/g, " "); htmlStr = htmlStr.replace(/[\u2000-\u200a]/g, " "); htmlStr = htmlStr.replace(/<br\s*\/?>/g, "\n"); if (replacen) { htmlStr = htmlStr.replace(/<(\/)?(p|div).*?>/g, "\n"); } htmlStr = htmlStr.replace(/ {2,}/g, " "); htmlStr = htmlStr.replace(/\n{2,}/g, "\n"); htmlStr = htmlStr.replace(/<xmp.*?>/g, "<pre>"); htmlStr = htmlStr.replace(/<\/xmp>/g, "</pre>"); htmlStr = DOMPurify.sanitize(htmlStr, { ALLOWED_TAGS: ["img", "br", "sub", "sup"], ALLOWED_ATTR: ["src", "href"], ALLOW_DATA_ATTR: false, KEEP_CONTENT: true }); let imgReg = /<img.*?src="(.*?)".*?>/g; let imgArr = htmlStr.match(imgReg); if (imgArr) { imgArr.forEach((item) => { let src = item.match(/src="(.*?)"/); if (src) { if (src[1].indexOf("http") == -1 && !src[1].includes("data:image")) { if (src[1].startsWith("/")) { htmlStr = htmlStr.replace(src[1], location.origin + src[1]); } else { htmlStr = htmlStr.replace(src[1], location.origin + "/" + src[1]); } } } }); } return htmlStr.trim(); } function titleClean(title) { return title.replace(/^【.*?】\s*/, "").replace(/\s*(\d+\.\d+分)$/, "").replace(/^\d+\./, "").trim(); } function typeChange(typeNumber) { let types2 = { "单选题": "0", "多选题": "1", "填空题": "2", "判断题": "3", "简答题": "4", "问答题": "4", "名词解释": "5", "论述题": "6", "计算题": "7", "分录题": "9", "资料题": "10", "连线题": "11", "匹配题": "11", "排序题": "13", "完型填空": "14", "完形填空题": "14", "阅读理解": "15", "程序题": "17", "口语题": "18", "听力题": "19", "共用选项题": "20", "测评题": "21", "钟表题": "23", "选词填空": "24", "选做题": "25", "其它": "8" }; return types2[typeNumber] ?? "8"; } function typeChange2(typeNumber) { let types2 = { "0": "单选题", "1": "多选题", "2": "填空题", "3": "判断题", "4": "简答题", "5": "名词解释", "6": "论述题", "7": "计算题", "9": "分录题", "10": "资料题", "11": "连线题", "13": "排序题", "14": "完型填空", "15": "阅读理解", "17": "程序题", "18": "口语题", "19": "听力题", "20": "共用选项题", "21": "测评题", "23": "钟表题", "24": "选词填空", "25": "选做题", "8": "其它" }; return types2[typeNumber] ?? "其他"; } function answerFormat(answer) { if (answer instanceof Array) { answer = answer.filter(function(item) { return item !== null; }); for (let i = 0; i < answer.length; i++) { answer[i] = removeHtml(answer[i]); } } else if (typeof answer === "string") { answer = titleClean(answer); } return answer; } function removeSpace(str) { if (/^[+-]?\d+(\.\d+)?$/.test(str)) { return str; } return str.replace(/[\s\p{P}]/gu, ""); } function matchAnswer(answer, options) { if (answer == "" || answer == null || answer == void 0) { return []; } answer = answer.map((item) => removeHtml1(item)); options = options.map((item) => removeHtml1(item)); answer = answerFormat(answer); let isMatch = options.every((item) => { return /[\u4e00-\u9fa5a-zA-Z0-9]/.test(item); }); if (isMatch) { answer = answer.map((item) => removeSpace(item)); options = options.map((item) => removeSpace(item)); } var matchArr = []; for (var i = 0; i < answer.length; i++) { for (var j = 0; j < options.length; j++) { if (answer[i] == options[j]) { matchArr.push(j); } } } return matchArr; } function recoverConsole() { var iframe = document.createElement("iframe"); iframe.style.display = "none"; document.body.appendChild(iframe); window.console = iframe.contentWindow.console; } function qc(item) { $(item).find(".answerBg, .textDIV, .eidtDiv").each(function() { ($(this).find(".check_answer").length || $(this).find(".check_answer_dx").length) && $(this).click(); }); $(item).find(".answerBg, .textDIV, .eidtDiv").find("textarea").each(function() { _unsafeWindow.UE.getEditor($(this).attr("name")).ready(function() { this.setContent(""); }); }); $(item).find(":radio, :checkbox").prop("checked", false); $(item).find("textarea").each(function() { _unsafeWindow.UE.getEditor($(this).attr("name")).ready(function() { this.setContent(""); }); }); } function qc1(item) { $(item).find(".before-after,.before-after-checkbox, .textDIV, .eidtDiv").each(function() { ($(this).find(".check_answer").length || $(this).find(".check_answer_dx").length) && $(this).click(); }); $(item).find(".before-after, .textDIV, .eidtDiv").find("textarea").each(function() { _unsafeWindow.UE.getEditor($(this).attr("name")).ready(function() { this.setContent(""); }); }); $(item).find(":radio, :checkbox").prop("checked", false); $(item).find("textarea").each(function() { _unsafeWindow.UE.getEditor($(this).attr("name")).ready(function() { this.setContent(""); }); }); } const allowCopy = () => { document.body.oncopy = null; document.body.oncut = null; document.body.onpaste = null; document.body.onselectstart = null; document.body.ondragstart = null; const style = document.createElement("style"); style.innerHTML = ` * { -webkit-user-select: auto !important; -moz-user-select: auto !important; -o-user-select: auto !important; user-select: auto !important; } `; document.head.appendChild(style); }; function isTrue(text) { return Boolean(String(text).match(/(正确|是|对|√|T|ri|true)/)); } function isFalse(text) { return Boolean(String(text).match(/(错误|否|错|×|F|wr|false)/)); } function msg(content, type = "info") { try { ElementPlus.ElNotification({ // @ts-ignore title: `${scriptInfo$1.script.name} v${scriptInfo$1.script.version}`, // 设置通知标题,使用模板字符串拼接脚本信息 message: content, // 设置通知内容 type, // 设置通知类型,默认为 "info" dangerouslyUseHTMLString: true, // 允许使用 HTML 字符串 // el改aah appendTo: document.getElementById("AiAskApp") }); } catch (e) { } } const formatDate = (dateString) => { let date = new Date(dateString); return date.toISOString().replace("T", " ").substring(0, 19); }; const updateCheck = () => { const app = wapp().app; if (!app.app.checkUpdate) { return Promise.resolve(null); } let updateCache = Cache.get("lastCheckTime"); if (updateCache && (/* @__PURE__ */ new Date()).getTime() - updateCache < 1e3 * 60) { return Promise.resolve(null); } try { let scriptId = app.script.updateURL.match(/scripts\/(\d+)/)[1]; if (!scriptId) { return Promise.resolve(null); } let url = `https://greasyfork.org/zh-CN/scripts/${scriptId}.json`; return new Promise((resolve, reject) => { requestFetch(url, "GET", {}, {}).then((res) => { res = JSON.parse(res); log("更新检测", res, "info"); if (res.version > scriptInfo$1.script.version) { msg(`检测到新版本<span style="color:red">${res.version}</span>,请及时更新<br>更新时间:${formatDate(res.code_updated_at)}<br><a target="_blank" href="https://greasyfork.org/zh-CN/scripts/${scriptId}">>>点我快捷跳转更新<<</a>`, "warning"); } Cache.set("lastCheckTime", (/* @__PURE__ */ new Date()).getTime()); }).catch( (error) => { console.error("更新检测失败", error); resolve(null); } ); }); } catch { console.error("更新检测失败"); return Promise.resolve(null); } }; const updateCheck1 = () => { const app = wapp().app; let scriptId = app.script.updateURL.match(/scripts\/(\d+)/)[1]; if (!scriptId) { return Promise.resolve(null); } let url = `https://greasyfork.org/zh-CN/scripts/${scriptId}.json`; return new Promise((resolve, reject) => { requestFetch(url, "GET", {}, {}).then((res) => { res = JSON.parse(res); if (res.version > scriptInfo$1.script.version) { msg(`检测到新版本<span style="color:red">${res.version}</span>,请及时更新<br>更新时间:${formatDate(res.code_updated_at)}<br><a target="_blank" href="https://greasyfork.org/zh-CN/scripts/${scriptId}">>>点我快捷跳转更新<<</a>`, "warning"); } else { msg(`当前版本为最新版本`, "success"); } Cache.set("lastCheckTime", (/* @__PURE__ */ new Date()).getTime()); }).catch( (error) => { console.error("更新检测失败", error); resolve(null); } ); }); }; function randomString(len) { let str = ""; for (; str.length < len; str += Math.random().toString(36).substr(2)) ; return str.substr(0, len); } function wapp() { const app = _unsafeWindow[key]; return app; } const waitUntil = (condition, interval = 100) => { return new Promise((resolve) => { const timer = setInterval(() => { if (condition()) { clearInterval(timer); resolve(); } }, interval); }); }; const questionHash = (type, question, options, optionsSort = true) => { let option = Array.from(options); if (optionsSort) { option.sort(); } const optionsStr = option.join(""); const hash = md5Exports.md5(`${type}${question}${optionsStr}`); return hash; }; const env = (dev, prod) => { return prod; }; function get_t(data) { const { sign, t, ...rest } = data; const keys2 = Object.keys(rest).sort(); const str = keys2.map((key2) => { let value = rest[key2]; if (typeof value === "object") { value = JSON.stringify(value); } return `${key2}=${value}`; }).join("&"); return md5Exports.md5(str); } function removeStartChar(options) { return options.map((item, inx) => { let chr = String.fromCharCode(65 + inx) + "."; return item.replace(new RegExp(`^${chr}`), "").trim(); }); } function log(...args) { } function getUrl() { return location.href; } function isExist(selector) { return $(selector).length > 0; } class Answer { constructor() { } /** * @description: 接口打分,是否有答案,是否匹配 */ static score(api, score) { let cache = Cache.get("api_" + api, { score: 0 }); cache.score += score; Cache.set("api_" + api, cache, 600); } /** * @description: 批量获取所有答案 */ static async getAllAnswers(questionList) { const promises = [ this.getAnswer3(questionList), this.getAnswer1(questionList) ]; return Promise.all(promises); } /** * @description: 批量获取答案 */ static async getAnswers(questionList) { const promises = [ this.getAnswer3(questionList) ]; return Promise.all(promises); } /** * @description: 批量获取答案(免费接口) */ static async getAnswersFree(questionList) { const promises = [ this.getMainAnswer(questionList), this.getAnswer1(questionList) ]; return Promise.all(promises); } /** * @description: 内置接口1 一之题库 */ static async getAnswer1(questionData) { let headers = headi(); return new Promise((resolve) => { request("http://cx.icodef.com/wyn-nb?v=4", "POST", { question: questionData.question }, headers).then((res) => { let duration = res[1]; try { res = JSON.parse(res[0].responseText); } catch (error) { resolve({ form: "免费题库", answer: null, error, duration }); } let answer = ""; if (res.code === 1) { let data = res.data.replace(/javascript:void\(0\);/g, "").trim().replace(/\n/g, ""); const keywords = ["叛逆", "公众号", "李恒雅", "一之"]; if (keywords.every((keyword) => !data.includes(keyword))) { answer = data.split("#"); } } resolve({ form: "免费题库", answer, duration }); }).catch((error) => { if (error === "timeout") { this.score("icodef", -1); } resolve({ form: "免费题库", answer: "", msg: error, duration: 5e3 }); }); }); } static async getAnswer2(questionData) { return new Promise((resolve) => { if (![0, 1, 2].includes(parseInt(questionData.type))) { resolve({ form: "muketool", answer: "", duration: "不支持的题型" }); return; } request("https://api.muketool.com/cx/v2/query", "POST", { question: questionData.question, type: parseInt(questionData.type) }, {}).then((res) => { let duration = res[1]; res = JSON.parse(res[0].responseText); resolve({ form: "muketool", answer: res.code === 1 ? res.data.split("#") : "", duration }); }).catch((error) => { if (error === "timeout") { this.score("muketool", -1); } resolve({ form: "muketool", answer: "" }); }); }); } static async getAnswer3(questionData) { const headers = { "Content-Type": "application/json", "referer": location.href, "v": scriptInfo.version, "s": scriptInfo.author }; const data = { question: questionData.question, // 选项数组 options: questionData.options.map((item) => item), type: questionData.type, questionData: questionData.html.innerHTML, workType: questionData.workType, key: appCache.key ?? "" }; return new Promise((resolve) => { request("https://api.tikuhai.com/search", "POST", data, headers).then((res) => { let duration = res[1]; res = JSON.parse(res[0].responseText); if (res.code === 200) { resolve({ form: "付费题库", answer: res.data.answer, duration, msg: res.msg }); } else { resolve({ form: "付费题库", answer: "", duration, msg: res.msg }); } }).catch((error) => { if (error === "timeout") { this.score("tikuhai", -1); } resolve({ form: "付费题库", answer: "", error, duration: 10, msg: "请求失败" }); }); }); } /** * @description: 将答案缓存在本地 */ static cacheAnswer(questionData) { const data = { type: questionData.type, question: questionData.question, options: questionData.options, answer: questionData.answer }; const hash = questionHash(data.type, data.question, data.options); Cache.set("ques_" + hash, data); } /** * @description: 从本地缓存获取答案 */ static async getCacheAnswer(questionData) { const hash = questionHash(questionData.type, questionData.question, questionData.options); let data = Cache.get("ques_" + hash); if (data) { return { form: "本地缓存", answer: data.answer, duration: 10 }; } return { form: "本地缓存", answer: "", duration: 10, msg: "未找到缓存" }; } /** * @description: 从自建题库获取答案 */ static getMainAnswer(questionData) { const data = { type: questionData.type, question: questionData.question, options: questionData.options.map((item) => item), html: questionData.html.innerHTML, workType: questionData.workType, pageType: questionData.pageType }; const url = env("http://127.0.0.1:9966/api/search", "https://aiask.wk66.top/api/search"); return new Promise((resolve) => { request(url, "POST", data, {}).then((res) => { let duration = res[1]; res = JSON.parse(res[0].responseText); if (res.code === 200) { resolve({ form: "爱问答题库", answer: res.data.answer, duration, msg: res.msg }); } else { resolve({ form: "爱问答题库", answer: "", duration, msg: res.msg }); } }).catch((error) => { resolve({ form: "爱问答题库", answer: "", error, duration: 10, msg: "请求失败" }); }); }); } /** * @description: 同步题库 */ static async syncQuestionList(data) { return new Promise((resolve) => { const url = env("http://127.0.0.1:9966/api/sync", "https://aiask.wk66.top/api/sync"); request(url, "POST", data, {}).then((res) => { log(res[0].responseText); resolve(res[0].responseText); }).catch((error) => { resolve(error); }); }); } } const parsePack = (str) => { const pattern = /data:\s*({.*?})\s*\n/g; const result = []; let match; while ((match = pattern.exec(str)) !== null) { const jsonStr = match[1]; try { const json = JSON.parse(jsonStr); result.push(json); } catch (e) { } } return result; }; const aiAsk = async (message, callback, isfinish) => { let config = getApp(); let url = config.gpt[0].api; let data = JSON.stringify({ "model": "gpt-3.5-turbo", "messages": [ { "role": "system", "content": "请只需要回答我的问题不要有多余的话,如果你不知道请返回【我不会】" }, { "role": "user", "content": message } ], "stream": true }); let headers = { "Accept": "application/json", "Authorization": `Bearer ${config.gpt[0].key}`, "Content-Type": "application/json" }; return new Promise((resolve, reject) => { if (!config.gpt[0].key) { callback(`AI响应异常,可能是没有获取KEY,请按下方步骤操作 1. 打开[智普清言](https://chatglm.cn/main/alltoolsdetail) 2. 登录后随便发一条消息即可 3. 返回答题页刷新页面 `); return resolve("暂无KEY"); } _GM_xmlhttpRequest({ method: "POST", url, data, headers, responseType: "stream", onloadstart: async (r) => { let finish = false; const reader = r.response.getReader(); const decoder = new TextDecoder(); while (!finish) { const { done, value } = await reader.read(); if (done) { finish = true; isfinish(); break; } const jsonArray = parsePack(decoder.decode(value)); jsonArray.forEach((json) => { if (!json.choices || json.choices.length === 0) { return; } const text = json.choices[0].delta.content; if (text === void 0 || text === "") { return; } callback(text); }); } } }); }); }; const yunmuxueyuan = [ { type: "hook", name: "云幕学苑hook", match: location.host.includes("w-ling.cn"), main: (data) => { _unsafeWindow.mainClass = $(".backup >a").attr("href"); let observer = new MutationObserver(async (mutations) => { if (_unsafeWindow.mainClass !== $(".backup >a").attr("href")) { _unsafeWindow.mainClass = $(".backup >a").attr("href"); if (_unsafeWindow.mainClass === "homework-detail-container") { await waitUntil(function() { return $(".selectDan").length !== 0; }); } vuePageChange(); observer.disconnect(); } }); if ($("#app").length >= 1) { observer.observe($("#app")[0], { subtree: true, attributes: true, childList: true }); } } }, { type: "save", name: "云幕学苑收录", match: () => location.host.includes("w-ling.cn") && location.href.includes("practiceRecord"), question: { html: ".selectDan >div >div", question: ".title", options: ".selectItem label .tagbq", type: ".question-box .tag", workType: "yunmuxueyuan", pageType: "yunmuxueyuan" }, init: async () => { }, answerHook: (item) => { const type = $(item.html).parent().find("h3").text().split("、")[1]; item.question = item.question.replace(/^\d+、/, ""); item.question = item.question.replace(/\(\d+分\)$/, ""); let answer = $(item.html).find(".anaylize > span:eq(0)").text().replace("作答正确:", ""); if (answer === "") { answer = $(item.html).find(".falsanaly > span:eq(1)").text().replace("正确答案:", ""); } switch (type) { case "单选题": case "多选题": answer = answer.split(""); item.answer = answer.map((xx) => { return item.options[xx.charCodeAt(0) - 65]; }); if (item.answer.length === 0) { return; } item.answer.length > 1 ? item.type = "1" : item.type = "0"; break; case "判断题": item.type = "3"; if (answer == "T") { item.answer = ["正确"]; } if (answer == "F") { item.answer = ["错误"]; } break; case "填空题": item.answer = $(item.html).find(".riganswer > span").first().nextAll("span").map((inx, element) => { return removeHtml1($(element).text()); }).get(); item.type = "2"; break; } return item; } }, { type: "ask", name: "云幕学苑", tips: "云幕学苑仅支持选择判断,其他题型待适配", match: () => location.host.includes("w-ling.cn") && location.href.includes("practicePaper"), question: { html: ".selectDan >div >div", question: ".title", options: ".selectItem label .tagbq", type: ".question-box .tag", workType: "yunmuxueyuan", pageType: "yunmuxueyuan" }, init: async () => { }, next: () => { }, ischecked: (item) => { return item.parent().parent().hasClass("is-checked"); }, questionHook: (item) => { item.question = item.question.replace(/^\d+、/, ""); item.question = item.question.replace(/\(\d+分\)$/, ""); const type = $(item.html).parent().find("h4").text().split("、")[1]; switch (type) { case "单选题": item.type = "0"; break; case "多选题": item.type = "1"; break; case "判断题": item.type = "3"; item.$options = $(item.html).find(".selectItem label"); item.options = item.$options.map((inx, element) => { return removeHtml1($(element).text()); }).get(); log(item.$options); break; case "填空题": item.type = "2"; break; } return item; }, setAnswer: (item) => { switch (item.type) { case "3": break; case "2": $(item.html).find(".tiankong input").each((inx, element) => { let vueL = $(element).parent()[0].__vue__; $(element).val(item.answer[inx]); const event2 = new Event("input"); element.dispatchEvent(event2); vueL.$emit("change", item.answer[inx]); }); return false; } return true; }, finish: (item) => { } } ]; var Typr = {}; Typr.parse = function(buff) { var bin = Typr._bin; var data = new Uint8Array(buff); var offset = 0; bin.readFixed(data, offset); offset += 4; var numTables = bin.readUshort(data, offset); offset += 2; bin.readUshort(data, offset); offset += 2; bin.readUshort(data, offset); offset += 2; bin.readUshort(data, offset); offset += 2; var tags = ["cmap", "head", "hhea", "maxp", "hmtx", "name", "OS/2", "post", "loca", "glyf", "kern", "CFF ", "GPOS", "GSUB", "SVG "]; var obj = { _data: data }; var tabs = {}; for (var i = 0; i < numTables; i++) { var tag = bin.readASCII(data, offset, 4); offset += 4; bin.readUint(data, offset); offset += 4; var toffset = bin.readUint(data, offset); offset += 4; var length = bin.readUint(data, offset); offset += 4; tabs[tag] = { offset: toffset, length }; } for (var i = 0; i < tags.length; i++) { var t = tags[i]; if (tabs[t]) obj[t.trim()] = Typr[t.trim()].parse(data, tabs[t].offset, tabs[t].length, obj); } return obj; }; Typr._tabOffset = function(data, tab) { var bin = Typr._bin; var numTables = bin.readUshort(data, 4); var offset = 12; for (var i = 0; i < numTables; i++) { var tag = bin.readASCII(data, offset, 4); offset += 4; bin.readUint(data, offset); offset += 4; var toffset = bin.readUint(data, offset); offset += 4; bin.readUint(data, offset); offset += 4; if (tag == tab) return toffset; } return 0; }; Typr._bin = { readFixed: function(data, o2) { return (data[o2] << 8 | data[o2 + 1]) + (data[o2 + 2] << 8 | data[o2 + 3]) / (256 * 256 + 4); }, readF2dot14: function(data, o2) { var num = Typr._bin.readShort(data, o2); return num / 16384; }, readInt: function(buff, p2) { var a2 = Typr._bin.t.uint8; a2[0] = buff[p2 + 3]; a2[1] = buff[p2 + 2]; a2[2] = buff[p2 + 1]; a2[3] = buff[p2]; return Typr._bin.t.int32[0]; }, readInt8: function(buff, p2) { var a2 = Typr._bin.t.uint8; a2[0] = buff[p2]; return Typr._bin.t.int8[0]; }, readShort: function(buff, p2) { var a2 = Typr._bin.t.uint8; a2[1] = buff[p2]; a2[0] = buff[p2 + 1]; return Typr._bin.t.int16[0]; }, readUshort: function(buff, p2) { return buff[p2] << 8 | buff[p2 + 1]; }, readUshorts: function(buff, p2, len) { var arr = []; for (var i = 0; i < len; i++) arr.push(Typr._bin.readUshort(buff, p2 + i * 2)); return arr; }, readUint: function(buff, p2) { var a2 = Typr._bin.t.uint8; a2[3] = buff[p2]; a2[2] = buff[p2 + 1]; a2[1] = buff[p2 + 2]; a2[0] = buff[p2 + 3]; return Typr._bin.t.uint32[0]; }, readUint64: function(buff, p2) { return Typr._bin.readUint(buff, p2) * (4294967295 + 1) + Typr._bin.readUint(buff, p2 + 4); }, readASCII: function(buff, p2, l2) { var s2 = ""; for (var i = 0; i < l2; i++) s2 += String.fromCharCode(buff[p2 + i]); return s2; }, readUnicode: function(buff, p2, l2) { var s2 = ""; for (var i = 0; i < l2; i++) { var c2 = buff[p2++] << 8 | buff[p2++]; s2 += String.fromCharCode(c2); } return s2; }, _tdec: window["TextDecoder"] ? new window["TextDecoder"]() : null, readUTF8: function(buff, p2, l2) { var tdec = Typr._bin._tdec; if (tdec && p2 == 0 && l2 == buff.length) return tdec["decode"](buff); return Typr._bin.readASCII(buff, p2, l2); }, readBytes: function(buff, p2, l2) { var arr = []; for (var i = 0; i < l2; i++) arr.push(buff[p2 + i]); return arr; }, readASCIIArray: function(buff, p2, l2) { var s2 = []; for (var i = 0; i < l2; i++) s2.push(String.fromCharCode(buff[p2 + i])); return s2; } }; Typr._bin.t = { buff: new ArrayBuffer(8) }; Typr._bin.t.int8 = new Int8Array(Typr._bin.t.buff); Typr._bin.t.uint8 = new Uint8Array(Typr._bin.t.buff); Typr._bin.t.int16 = new Int16Array(Typr._bin.t.buff); Typr._bin.t.uint16 = new Uint16Array(Typr._bin.t.buff); Typr._bin.t.int32 = new Int32Array(Typr._bin.t.buff); Typr._bin.t.uint32 = new Uint32Array(Typr._bin.t.buff); Typr._lctf = {}; Typr._lctf.parse = function(data, offset, length, font, subt) { var bin = Typr._bin; var obj = {}; var offset0 = offset; bin.readFixed(data, offset); offset += 4; var offScriptList = bin.readUshort(data, offset); offset += 2; var offFeatureList = bin.readUshort(data, offset); offset += 2; var offLookupList = bin.readUshort(data, offset); offset += 2; obj.scriptList = Typr._lctf.readScriptList(data, offset0 + offScriptList); obj.featureList = Typr._lctf.readFeatureList(data, offset0 + offFeatureList); obj.lookupList = Typr._lctf.readLookupList(data, offset0 + offLookupList, subt); return obj; }; Typr._lctf.readLookupList = function(data, offset, subt) { var bin = Typr._bin; var offset0 = offset; var obj = []; var count = bin.readUshort(data, offset); offset += 2; for (var i = 0; i < count; i++) { var noff = bin.readUshort(data, offset); offset += 2; var lut = Typr._lctf.readLookupTable(data, offset0 + noff, subt); obj.push(lut); } return obj; }; Typr._lctf.readLookupTable = function(data, offset, subt) { var bin = Typr._bin; var offset0 = offset; var obj = { tabs: [] }; obj.ltype = bin.readUshort(data, offset); offset += 2; obj.flag = bin.readUshort(data, offset); offset += 2; var cnt = bin.readUshort(data, offset); offset += 2; for (var i = 0; i < cnt; i++) { var noff = bin.readUshort(data, offset); offset += 2; var tab = subt(data, obj.ltype, offset0 + noff); obj.tabs.push(tab); } return obj; }; Typr._lctf.numOfOnes = function(n) { var num = 0; for (var i = 0; i < 32; i++) if ((n >>> i & 1) != 0) num++; return num; }; Typr._lctf.readClassDef = function(data, offset) { var bin = Typr._bin; var obj = []; var format2 = bin.readUshort(data, offset); offset += 2; if (format2 == 1) { var startGlyph = bin.readUshort(data, offset); offset += 2; var glyphCount = bin.readUshort(data, offset); offset += 2; for (var i = 0; i < glyphCount; i++) { obj.push(startGlyph + i); obj.push(startGlyph + i); obj.push(bin.readUshort(data, offset)); offset += 2; } } if (format2 == 2) { var count = bin.readUshort(data, offset); offset += 2; for (var i = 0; i < count; i++) { obj.push(bin.readUshort(data, offset)); offset += 2; obj.push(bin.readUshort(data, offset)); offset += 2; obj.push(bin.readUshort(data, offset)); offset += 2; } } return obj; }; Typr._lctf.getInterval = function(tab, val) { for (var i = 0; i < tab.length; i += 3) { var start = tab[i], end = tab[i + 1]; tab[i + 2]; if (start <= val && val <= end) return i; } return -1; }; Typr._lctf.readValueRecord = function(data, offset, valFmt) { var bin = Typr._bin; var arr = []; arr.push(valFmt & 1 ? bin.readShort(data, offset) : 0); offset += valFmt & 1 ? 2 : 0; arr.push(valFmt & 2 ? bin.readShort(data, offset) : 0); offset += valFmt & 2 ? 2 : 0; arr.push(valFmt & 4 ? bin.readShort(data, offset) : 0); offset += valFmt & 4 ? 2 : 0; arr.push(valFmt & 8 ? bin.readShort(data, offset) : 0); offset += valFmt & 8 ? 2 : 0; return arr; }; Typr._lctf.readCoverage = function(data, offset) { var bin = Typr._bin; var cvg = {}; cvg.fmt = bin.readUshort(data, offset); offset += 2; var count = bin.readUshort(data, offset); offset += 2; if (cvg.fmt == 1) cvg.tab = bin.readUshorts(data, offset, count); if (cvg.fmt == 2) cvg.tab = bin.readUshorts(data, offset, count * 3); return cvg; }; Typr._lctf.coverageIndex = function(cvg, val) { var tab = cvg.tab; if (cvg.fmt == 1) return tab.indexOf(val); if (cvg.fmt == 2) { var ind = Typr._lctf.getInterval(tab, val); if (ind != -1) return tab[ind + 2] + (val - tab[ind]); } return -1; }; Typr._lctf.readFeatureList = function(data, offset) { var bin = Typr._bin; var offset0 = offset; var obj = []; var count = bin.readUshort(data, offset); offset += 2; for (var i = 0; i < count; i++) { var tag = bin.readASCII(data, offset, 4); offset += 4; var noff = bin.readUshort(data, offset); offset += 2; obj.push({ tag: tag.trim(), tab: Typr._lctf.readFeatureTable(data, offset0 + noff) }); } return obj; }; Typr._lctf.readFeatureTable = function(data, offset) { var bin = Typr._bin; bin.readUshort(data, offset); offset += 2; var lookupCount = bin.readUshort(data, offset); offset += 2; var indices = []; for (var i = 0; i < lookupCount; i++) indices.push(bin.readUshort(data, offset + 2 * i)); return indices; }; Typr._lctf.readScriptList = function(data, offset) { var bin = Typr._bin; var offset0 = offset; var obj = {}; var count = bin.readUshort(data, offset); offset += 2; for (var i = 0; i < count; i++) { var tag = bin.readASCII(data, offset, 4); offset += 4; var noff = bin.readUshort(data, offset); offset += 2; obj[tag.trim()] = Typr._lctf.readScriptTable(data, offset0 + noff); } return obj; }; Typr._lctf.readScriptTable = function(data, offset) { var bin = Typr._bin; var offset0 = offset; var obj = {}; var defLangSysOff = bin.readUshort(data, offset); offset += 2; obj.default = Typr._lctf.readLangSysTable(data, offset0 + defLangSysOff); var langSysCount = bin.readUshort(data, offset); offset += 2; for (var i = 0; i < langSysCount; i++) { var tag = bin.readASCII(data, offset, 4); offset += 4; var langSysOff = bin.readUshort(data, offset); offset += 2; obj[tag.trim()] = Typr._lctf.readLangSysTable(data, offset0 + langSysOff); } return obj; }; Typr._lctf.readLangSysTable = function(data, offset) { var bin = Typr._bin; var obj = {}; bin.readUshort(data, offset); offset += 2; obj.reqFeature = bin.readUshort(data, offset); offset += 2; var featureCount = bin.readUshort(data, offset); offset += 2; obj.features = bin.readUshorts(data, offset, featureCount); return obj; }; Typr.CFF = {}; Typr.CFF.parse = function(data, offset, length) { var bin = Typr._bin; data = new Uint8Array(data.buffer, offset, length); offset = 0; data[offset]; offset++; data[offset]; offset++; data[offset]; offset++; data[offset]; offset++; var ninds = []; offset = Typr.CFF.readIndex(data, offset, ninds); var names2 = []; for (var i = 0; i < ninds.length - 1; i++) names2.push(bin.readASCII(data, offset + ninds[i], ninds[i + 1] - ninds[i])); offset += ninds[ninds.length - 1]; var tdinds = []; offset = Typr.CFF.readIndex(data, offset, tdinds); var topDicts = []; for (var i = 0; i < tdinds.length - 1; i++) topDicts.push(Typr.CFF.readDict(data, offset + tdinds[i], offset + tdinds[i + 1])); offset += tdinds[tdinds.length - 1]; var topdict = topDicts[0]; var sinds = []; offset = Typr.CFF.readIndex(data, offset, sinds); var strings = []; for (var i = 0; i < sinds.length - 1; i++) strings.push(bin.readASCII(data, offset + sinds[i], sinds[i + 1] - sinds[i])); offset += sinds[sinds.length - 1]; Typr.CFF.readSubrs(data, offset, topdict); if (topdict.CharStrings) { offset = topdict.CharStrings; var sinds = []; offset = Typr.CFF.readIndex(data, offset, sinds); var cstr = []; for (var i = 0; i < sinds.length - 1; i++) cstr.push(bin.readBytes(data, offset + sinds[i], sinds[i + 1] - sinds[i])); topdict.CharStrings = cstr; } if (topdict.Encoding) topdict.Encoding = Typr.CFF.readEncoding(data, topdict.Encoding, topdict.CharStrings.length); if (topdict.charset) topdict.charset = Typr.CFF.readCharset(data, topdict.charset, topdict.CharStrings.length); if (topdict.Private) { offset = topdict.Private[1]; topdict.Private = Typr.CFF.readDict(data, offset, offset + topdict.Private[0]); if (topdict.Private.Subrs) Typr.CFF.readSubrs(data, offset + topdict.Private.Subrs, topdict.Private); } var obj = {}; for (var p2 in topdict) { if (["FamilyName", "FullName", "Notice", "version", "Copyright"].indexOf(p2) != -1) obj[p2] = strings[topdict[p2] - 426 + 35]; else obj[p2] = topdict[p2]; } return obj; }; Typr.CFF.readSubrs = function(data, offset, obj) { var bin = Typr._bin; var gsubinds = []; offset = Typr.CFF.readIndex(data, offset, gsubinds); var bias, nSubrs = gsubinds.length; if (nSubrs < 1240) bias = 107; else if (nSubrs < 33900) bias = 1131; else bias = 32768; obj.Bias = bias; obj.Subrs = []; for (var i = 0; i < gsubinds.length - 1; i++) obj.Subrs.push(bin.readBytes(data, offset + gsubinds[i], gsubinds[i + 1] - gsubinds[i])); }; Typr.CFF.tableSE = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 0, 111, 112, 113, 114, 0, 115, 116, 117, 118, 119, 120, 121, 122, 0, 123, 0, 124, 125, 126, 127, 128, 129, 130, 131, 0, 132, 133, 0, 134, 135, 136, 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, 0, 139, 0, 0, 0, 0, 140, 141, 142, 143, 0, 0, 0, 0, 0, 144, 0, 0, 0, 145, 0, 0, 146, 147, 148, 149, 0, 0, 0, 0]; Typr.CFF.glyphByUnicode = function(cff, code) { for (var i = 0; i < cff.charset.length; i++) if (cff.charset[i] == code) return i; return -1; }; Typr.CFF.glyphBySE = function(cff, charcode) { if (charcode < 0 || charcode > 255) return -1; return Typr.CFF.glyphByUnicode(cff, Typr.CFF.tableSE[charcode]); }; Typr.CFF.readEncoding = function(data, offset, num) { Typr._bin; var array = [".notdef"]; var format2 = data[offset]; offset++; if (format2 == 0) { var nCodes = data[offset]; offset++; for (var i = 0; i < nCodes; i++) array.push(data[offset + i]); } else throw "error: unknown encoding format: " + format2; return array; }; Typr.CFF.readCharset = function(data, offset, num) { var bin = Typr._bin; var charset = [".notdef"]; var format2 = data[offset]; offset++; if (format2 == 0) { for (var i = 0; i < num; i++) { var first = bin.readUshort(data, offset); offset += 2; charset.push(first); } } else if (format2 == 1 || format2 == 2) { while (charset.length < num) { var first = bin.readUshort(data, offset); offset += 2; var nLeft = 0; if (format2 == 1) { nLeft = data[offset]; offset++; } else { nLeft = bin.readUshort(data, offset); offset += 2; } for (var i = 0; i <= nLeft; i++) { charset.push(first); first++; } } } else throw "error: format: " + format2; return charset; }; Typr.CFF.readIndex = function(data, offset, inds) { var bin = Typr._bin; var count = bin.readUshort(data, offset); offset += 2; var offsize = data[offset]; offset++; if (offsize == 1) for (var i = 0; i < count + 1; i++) inds.push(data[offset + i]); else if (offsize == 2) for (var i = 0; i < count + 1; i++) inds.push(bin.readUshort(data, offset + i * 2)); else if (offsize == 3) for (var i = 0; i < count + 1; i++) inds.push(bin.readUint(data, offset + i * 3 - 1) & 16777215); else if (count != 0) throw "unsupported offset size: " + offsize + ", count: " + count; offset += (count + 1) * offsize; return offset - 1; }; Typr.CFF.getCharString = function(data, offset, o2) { var bin = Typr._bin; var b0 = data[offset], b1 = data[offset + 1]; data[offset + 2]; data[offset + 3]; data[offset + 4]; var vs = 1; var op = null, val = null; if (b0 <= 20) { op = b0; vs = 1; } if (b0 == 12) { op = b0 * 100 + b1; vs = 2; } if (21 <= b0 && b0 <= 27) { op = b0; vs = 1; } if (b0 == 28) { val = bin.readShort(data, offset + 1); vs = 3; } if (29 <= b0 && b0 <= 31) { op = b0; vs = 1; } if (32 <= b0 && b0 <= 246) { val = b0 - 139; vs = 1; } if (247 <= b0 && b0 <= 250) { val = (b0 - 247) * 256 + b1 + 108; vs = 2; } if (251 <= b0 && b0 <= 254) { val = -(b0 - 251) * 256 - b1 - 108; vs = 2; } if (b0 == 255) { val = bin.readInt(data, offset + 1) / 65535; vs = 5; } o2.val = val != null ? val : "o" + op; o2.size = vs; }; Typr.CFF.readCharString = function(data, offset, length) { var end = offset + length; var bin = Typr._bin; var arr = []; while (offset < end) { var b0 = data[offset], b1 = data[offset + 1]; data[offset + 2]; data[offset + 3]; data[offset + 4]; var vs = 1; var op = null, val = null; if (b0 <= 20) { op = b0; vs = 1; } if (b0 == 12) { op = b0 * 100 + b1; vs = 2; } if (b0 == 19 || b0 == 20) { op = b0; vs = 2; } if (21 <= b0 && b0 <= 27) { op = b0; vs = 1; } if (b0 == 28) { val = bin.readShort(data, offset + 1); vs = 3; } if (29 <= b0 && b0 <= 31) { op = b0; vs = 1; } if (32 <= b0 && b0 <= 246) { val = b0 - 139; vs = 1; } if (247 <= b0 && b0 <= 250) { val = (b0 - 247) * 256 + b1 + 108; vs = 2; } if (251 <= b0 && b0 <= 254) { val = -(b0 - 251) * 256 - b1 - 108; vs = 2; } if (b0 == 255) { val = bin.readInt(data, offset + 1) / 65535; vs = 5; } arr.push(val != null ? val : "o" + op); offset += vs; } return arr; }; Typr.CFF.readDict = function(data, offset, end) { var bin = Typr._bin; var dict = {}; var carr = []; while (offset < end) { var b0 = data[offset], b1 = data[offset + 1]; data[offset + 2]; data[offset + 3]; data[offset + 4]; var vs = 1; var key2 = null, val = null; if (b0 == 28) { val = bin.readShort(data, offset + 1); vs = 3; } if (b0 == 29) { val = bin.readInt(data, offset + 1); vs = 5; } if (32 <= b0 && b0 <= 246) { val = b0 - 139; vs = 1; } if (247 <= b0 && b0 <= 250) { val = (b0 - 247) * 256 + b1 + 108; vs = 2; } if (251 <= b0 && b0 <= 254) { val = -(b0 - 251) * 256 - b1 - 108; vs = 2; } if (b0 == 255) { val = bin.readInt(data, offset + 1) / 65535; vs = 5; throw "unknown number"; } if (b0 == 30) { var nibs = []; vs = 1; while (true) { var b2 = data[offset + vs]; vs++; var nib0 = b2 >> 4, nib1 = b2 & 15; if (nib0 != 15) nibs.push(nib0); if (nib1 != 15) nibs.push(nib1); if (nib1 == 15) break; } var s2 = ""; var chars = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, ".", "e", "e-", "reserved", "-", "endOfNumber"]; for (var i = 0; i < nibs.length; i++) s2 += chars[nibs[i]]; val = parseFloat(s2); } if (b0 <= 21) { var keys2 = ["version", "Notice", "FullName", "FamilyName", "Weight", "FontBBox", "BlueValues", "OtherBlues", "FamilyBlues", "FamilyOtherBlues", "StdHW", "StdVW", "escape", "UniqueID", "XUID", "charset", "Encoding", "CharStrings", "Private", "Subrs", "defaultWidthX", "nominalWidthX"]; key2 = keys2[b0]; vs = 1; if (b0 == 12) { var keys2 = ["Copyright", "isFixedPitch", "ItalicAngle", "UnderlinePosition", "UnderlineThickness", "PaintType", "CharstringType", "FontMatrix", "StrokeWidth", "BlueScale", "BlueShift", "BlueFuzz", "StemSnapH", "StemSnapV", "ForceBold", 0, 0, "LanguageGroup", "ExpansionFactor", "initialRandomSeed", "SyntheticBase", "PostScript", "BaseFontName", "BaseFontBlend", 0, 0, 0, 0, 0, 0, "ROS", "CIDFontVersion", "CIDFontRevision", "CIDFontType", "CIDCount", "UIDBase", "FDArray", "FDSelect", "FontName"]; key2 = keys2[b1]; vs = 2; } } if (key2 != null) { dict[key2] = carr.length == 1 ? carr[0] : carr; carr = []; } else carr.push(val); offset += vs; } return dict; }; Typr.cmap = {}; Typr.cmap.parse = function(data, offset, length) { data = new Uint8Array(data.buffer, offset, length); offset = 0; var bin = Typr._bin; var obj = {}; bin.readUshort(data, offset); offset += 2; var numTables = bin.readUshort(data, offset); offset += 2; var offs = []; obj.tables = []; for (var i = 0; i < numTables; i++) { var platformID = bin.readUshort(data, offset); offset += 2; var encodingID = bin.readUshort(data, offset); offset += 2; var noffset = bin.readUint(data, offset); offset += 4; var id = "p" + platformID + "e" + encodingID; var tind = offs.indexOf(noffset); if (tind == -1) { tind = obj.tables.length; var subt; offs.push(noffset); var format2 = bin.readUshort(data, noffset); if (format2 == 0) subt = Typr.cmap.parse0(data, noffset); else if (format2 == 4) subt = Typr.cmap.parse4(data, noffset); else if (format2 == 6) subt = Typr.cmap.parse6(data, noffset); else if (format2 == 12) subt = Typr.cmap.parse12(data, noffset); else console.log("unknown format: " + format2, platformID, encodingID, noffset); obj.tables.push(subt); } if (obj[id] != null) throw "multiple tables for one platform+encoding"; obj[id] = tind; } return obj; }; Typr.cmap.parse0 = function(data, offset) { var bin = Typr._bin; var obj = {}; obj.format = bin.readUshort(data, offset); offset += 2; var len = bin.readUshort(data, offset); offset += 2; bin.readUshort(data, offset); offset += 2; obj.map = []; for (var i = 0; i < len - 6; i++) obj.map.push(data[offset + i]); return obj; }; Typr.cmap.parse4 = function(data, offset) { var bin = Typr._bin; var offset0 = offset; var obj = {}; obj.format = bin.readUshort(data, offset); offset += 2; var length = bin.readUshort(data, offset); offset += 2; bin.readUshort(data, offset); offset += 2; var segCountX2 = bin.readUshort(data, offset); offset += 2; var segCount = segCountX2 / 2; obj.searchRange = bin.readUshort(data, offset); offset += 2; obj.entrySelector = bin.readUshort(data, offset); offset += 2; obj.rangeShift = bin.readUshort(data, offset); offset += 2; obj.endCount = bin.readUshorts(data, offset, segCount); offset += segCount * 2; offset += 2; obj.startCount = bin.readUshorts(data, offset, segCount); offset += segCount * 2; obj.idDelta = []; for (var i = 0; i < segCount; i++) { obj.idDelta.push(bin.readShort(data, offset)); offset += 2; } obj.idRangeOffset = bin.readUshorts(data, offset, segCount); offset += segCount * 2; obj.glyphIdArray = []; while (offset < offset0 + length) { obj.glyphIdArray.push(bin.readUshort(data, offset)); offset += 2; } return obj; }; Typr.cmap.parse6 = function(data, offset) { var bin = Typr._bin; var obj = {}; obj.format = bin.readUshort(data, offset); offset += 2; bin.readUshort(data, offset); offset += 2; bin.readUshort(data, offset); offset += 2; obj.firstCode = bin.readUshort(data, offset); offset += 2; var entryCount = bin.readUshort(data, offset); offset += 2; obj.glyphIdArray = []; for (var i = 0; i < entryCount; i++) { obj.glyphIdArray.push(bin.readUshort(data, offset)); offset += 2; } return obj; }; Typr.cmap.parse12 = function(data, offset) { var bin = Typr._bin; var obj = {}; obj.format = bin.readUshort(data, offset); offset += 2; offset += 2; bin.readUint(data, offset); offset += 4; bin.readUint(data, offset); offset += 4; var nGroups = bin.readUint(data, offset); offset += 4; obj.groups = []; for (var i = 0; i < nGroups; i++) { var off = offset + i * 12; var startCharCode = bin.readUint(data, off + 0); var endCharCode = bin.readUint(data, off + 4); var startGlyphID = bin.readUint(data, off + 8); obj.groups.push([startCharCode, endCharCode, startGlyphID]); } return obj; }; Typr.glyf = {}; Typr.glyf.parse = function(data, offset, length, font) { var obj = []; for (var g = 0; g < font.maxp.numGlyphs; g++) obj.push(null); return obj; }; Typr.glyf._parseGlyf = function(font, g) { var bin = Typr._bin; var data = font._data; var offset = Typr._tabOffset(data, "glyf") + font.loca[g]; if (font.loca[g] == font.loca[g + 1]) return null; var gl = {}; gl.noc = bin.readShort(data, offset); offset += 2; gl.xMin = bin.readShort(data, offset); offset += 2; gl.yMin = bin.readShort(data, offset); offset += 2; gl.xMax = bin.readShort(data, offset); offset += 2; gl.yMax = bin.readShort(data, offset); offset += 2; if (gl.xMin >= gl.xMax || gl.yMin >= gl.yMax) return null; if (gl.noc > 0) { gl.endPts = []; for (var i = 0; i < gl.noc; i++) { gl.endPts.push(bin.readUshort(data, offset)); offset += 2; } var instructionLength = bin.readUshort(data, offset); offset += 2; if (data.length - offset < instructionLength) return null; gl.instructions = bin.readBytes(data, offset, instructionLength); offset += instructionLength; var crdnum = gl.endPts[gl.noc - 1] + 1; gl.flags = []; for (var i = 0; i < crdnum; i++) { var flag = data[offset]; offset++; gl.flags.push(flag); if ((flag & 8) != 0) { var rep = data[offset]; offset++; for (var j = 0; j < rep; j++) { gl.flags.push(flag); i++; } } } gl.xs = []; for (var i = 0; i < crdnum; i++) { var i8 = (gl.flags[i] & 2) != 0, same = (gl.flags[i] & 16) != 0; if (i8) { gl.xs.push(same ? data[offset] : -data[offset]); offset++; } else { if (same) gl.xs.push(0); else { gl.xs.push(bin.readShort(data, offset)); offset += 2; } } } gl.ys = []; for (var i = 0; i < crdnum; i++) { var i8 = (gl.flags[i] & 4) != 0, same = (gl.flags[i] & 32) != 0; if (i8) { gl.ys.push(same ? data[offset] : -data[offset]); offset++; } else { if (same) gl.ys.push(0); else { gl.ys.push(bin.readShort(data, offset)); offset += 2; } } } var x2 = 0, y = 0; for (var i = 0; i < crdnum; i++) { x2 += gl.xs[i]; y += gl.ys[i]; gl.xs[i] = x2; gl.ys[i] = y; } } else { var ARG_1_AND_2_ARE_WORDS = 1 << 0; var ARGS_ARE_XY_VALUES = 1 << 1; var WE_HAVE_A_SCALE = 1 << 3; var MORE_COMPONENTS = 1 << 5; var WE_HAVE_AN_X_AND_Y_SCALE = 1 << 6; var WE_HAVE_A_TWO_BY_TWO = 1 << 7; var WE_HAVE_INSTRUCTIONS = 1 << 8; gl.parts = []; var flags; do { flags = bin.readUshort(data, offset); offset += 2; var part = { m: { a: 1, b: 0, c: 0, d: 1, tx: 0, ty: 0 }, p1: -1, p2: -1 }; gl.parts.push(part); part.glyphIndex = bin.readUshort(data, offset); offset += 2; if (flags & ARG_1_AND_2_ARE_WORDS) { var arg1 = bin.readShort(data, offset); offset += 2; var arg2 = bin.readShort(data, offset); offset += 2; } else { var arg1 = bin.readInt8(data, offset); offset++; var arg2 = bin.readInt8(data, offset); offset++; } if (flags & ARGS_ARE_XY_VALUES) { part.m.tx = arg1; part.m.ty = arg2; } else { part.p1 = arg1; part.p2 = arg2; } if (flags & WE_HAVE_A_SCALE) { part.m.a = part.m.d = bin.readF2dot14(data, offset); offset += 2; } else if (flags & WE_HAVE_AN_X_AND_Y_SCALE) { part.m.a = bin.readF2dot14(data, offset); offset += 2; part.m.d = bin.readF2dot14(data, offset); offset += 2; } else if (flags & WE_HAVE_A_TWO_BY_TWO) { part.m.a = bin.readF2dot14(data, offset); offset += 2; part.m.b = bin.readF2dot14(data, offset); offset += 2; part.m.c = bin.readF2dot14(data, offset); offset += 2; part.m.d = bin.readF2dot14(data, offset); offset += 2; } } while (flags & MORE_COMPONENTS); if (flags & WE_HAVE_INSTRUCTIONS) { var numInstr = bin.readUshort(data, offset); offset += 2; gl.instr = []; for (var i = 0; i < numInstr; i++) { gl.instr.push(data[offset]); offset++; } } } return gl; }; Typr.GPOS = {}; Typr.GPOS.parse = function(data, offset, length, font) { return Typr._lctf.parse(data, offset, length, font, Typr.GPOS.subt); }; Typr.GPOS.subt = function(data, ltype, offset) { if (ltype != 2) return null; var bin = Typr._bin, offset0 = offset, tab = {}; tab.format = bin.readUshort(data, offset); offset += 2; var covOff = bin.readUshort(data, offset); offset += 2; tab.coverage = Typr._lctf.readCoverage(data, covOff + offset0); tab.valFmt1 = bin.readUshort(data, offset); offset += 2; tab.valFmt2 = bin.readUshort(data, offset); offset += 2; var ones1 = Typr._lctf.numOfOnes(tab.valFmt1); var ones2 = Typr._lctf.numOfOnes(tab.valFmt2); if (tab.format == 1) { tab.pairsets = []; var count = bin.readUshort(data, offset); offset += 2; for (var i = 0; i < count; i++) { var psoff = bin.readUshort(data, offset); offset += 2; psoff += offset0; var pvcount = bin.readUshort(data, psoff); psoff += 2; var arr = []; for (var j = 0; j < pvcount; j++) { var gid2 = bin.readUshort(data, psoff); psoff += 2; var value1, value2; if (tab.valFmt1 != 0) { value1 = Typr._lctf.readValueRecord(data, psoff, tab.valFmt1); psoff += ones1 * 2; } if (tab.valFmt2 != 0) { value2 = Typr._lctf.readValueRecord(data, psoff, tab.valFmt2); psoff += ones2 * 2; } arr.push({ gid2, val1: value1, val2: value2 }); } tab.pairsets.push(arr); } } if (tab.format == 2) { var classDef1 = bin.readUshort(data, offset); offset += 2; var classDef2 = bin.readUshort(data, offset); offset += 2; var class1Count = bin.readUshort(data, offset); offset += 2; var class2Count = bin.readUshort(data, offset); offset += 2; tab.classDef1 = Typr._lctf.readClassDef(data, offset0 + classDef1); tab.classDef2 = Typr._lctf.readClassDef(data, offset0 + classDef2); tab.matrix = []; for (var i = 0; i < class1Count; i++) { var row = []; for (var j = 0; j < class2Count; j++) { var value1 = null, value2 = null; if (tab.valFmt1 != 0) { value1 = Typr._lctf.readValueRecord(data, offset, tab.valFmt1); offset += ones1 * 2; } if (tab.valFmt2 != 0) { value2 = Typr._lctf.readValueRecord(data, offset, tab.valFmt2); offset += ones2 * 2; } row.push({ val1: value1, val2: value2 }); } tab.matrix.push(row); } } return tab; }; Typr.GSUB = {}; Typr.GSUB.parse = function(data, offset, length, font) { return Typr._lctf.parse(data, offset, length, font, Typr.GSUB.subt); }; Typr.GSUB.subt = function(data, ltype, offset) { var bin = Typr._bin, offset0 = offset, tab = {}; if (ltype != 1 && ltype != 4 && ltype != 5) return null; tab.fmt = bin.readUshort(data, offset); offset += 2; var covOff = bin.readUshort(data, offset); offset += 2; tab.coverage = Typr._lctf.readCoverage(data, covOff + offset0); if (ltype == 1) { if (tab.fmt == 1) { tab.delta = bin.readShort(data, offset); offset += 2; } else if (tab.fmt == 2) { var cnt = bin.readUshort(data, offset); offset += 2; tab.newg = bin.readUshorts(data, offset, cnt); offset += tab.newg.length * 2; } } else if (ltype == 4) { tab.vals = []; var cnt = bin.readUshort(data, offset); offset += 2; for (var i = 0; i < cnt; i++) { var loff = bin.readUshort(data, offset); offset += 2; tab.vals.push(Typr.GSUB.readLigatureSet(data, offset0 + loff)); } } else if (ltype == 5) { if (tab.fmt == 2) { var cDefOffset = bin.readUshort(data, offset); offset += 2; tab.cDef = Typr._lctf.readClassDef(data, offset0 + cDefOffset); tab.scset = []; var subClassSetCount = bin.readUshort(data, offset); offset += 2; for (var i = 0; i < subClassSetCount; i++) { var scsOff = bin.readUshort(data, offset); offset += 2; tab.scset.push(scsOff == 0 ? null : Typr.GSUB.readSubClassSet(data, offset0 + scsOff)); } } else console.log("unknown table format", tab.fmt); } return tab; }; Typr.GSUB.readSubClassSet = function(data, offset) { var rUs = Typr._bin.readUshort, offset0 = offset, lset = []; var cnt = rUs(data, offset); offset += 2; for (var i = 0; i < cnt; i++) { var loff = rUs(data, offset); offset += 2; lset.push(Typr.GSUB.readSubClassRule(data, offset0 + loff)); } return lset; }; Typr.GSUB.readSubClassRule = function(data, offset) { var rUs = Typr._bin.readUshort, rule2 = {}; var gcount = rUs(data, offset); offset += 2; var scount = rUs(data, offset); offset += 2; rule2.input = []; for (var i = 0; i < gcount - 1; i++) { rule2.input.push(rUs(data, offset)); offset += 2; } rule2.substLookupRecords = Typr.GSUB.readSubstLookupRecords(data, offset, scount); return rule2; }; Typr.GSUB.readSubstLookupRecords = function(data, offset, cnt) { var rUs = Typr._bin.readUshort; var out = []; for (var i = 0; i < cnt; i++) { out.push(rUs(data, offset), rUs(data, offset + 2)); offset += 4; } return out; }; Typr.GSUB.readChainSubClassSet = function(data, offset) { var bin = Typr._bin, offset0 = offset, lset = []; var cnt = bin.readUshort(data, offset); offset += 2; for (var i = 0; i < cnt; i++) { var loff = bin.readUshort(data, offset); offset += 2; lset.push(Typr.GSUB.readChainSubClassRule(data, offset0 + loff)); } return lset; }; Typr.GSUB.readChainSubClassRule = function(data, offset) { var bin = Typr._bin, rule2 = {}; var pps = ["backtrack", "input", "lookahead"]; for (var pi = 0; pi < pps.length; pi++) { var cnt = bin.readUshort(data, offset); offset += 2; if (pi == 1) cnt--; rule2[pps[pi]] = bin.readUshorts(data, offset, cnt); offset += rule2[pps[pi]].length * 2; } var cnt = bin.readUshort(data, offset); offset += 2; rule2.subst = bin.readUshorts(data, offset, cnt * 2); offset += rule2.subst.length * 2; return rule2; }; Typr.GSUB.readLigatureSet = function(data, offset) { var bin = Typr._bin, offset0 = offset, lset = []; var lcnt = bin.readUshort(data, offset); offset += 2; for (var j = 0; j < lcnt; j++) { var loff = bin.readUshort(data, offset); offset += 2; lset.push(Typr.GSUB.readLigature(data, offset0 + loff)); } return lset; }; Typr.GSUB.readLigature = function(data, offset) { var bin = Typr._bin, lig = { chain: [] }; lig.nglyph = bin.readUshort(data, offset); offset += 2; var ccnt = bin.readUshort(data, offset); offset += 2; for (var k = 0; k < ccnt - 1; k++) { lig.chain.push(bin.readUshort(data, offset)); offset += 2; } return lig; }; Typr.head = {}; Typr.head.parse = function(data, offset, length) { var bin = Typr._bin; var obj = {}; bin.readFixed(data, offset); offset += 4; obj.fontRevision = bin.readFixed(data, offset); offset += 4; bin.readUint(data, offset); offset += 4; bin.readUint(data, offset); offset += 4; obj.flags = bin.readUshort(data, offset); offset += 2; obj.unitsPerEm = bin.readUshort(data, offset); offset += 2; obj.created = bin.readUint64(data, offset); offset += 8; obj.modified = bin.readUint64(data, offset); offset += 8; obj.xMin = bin.readShort(data, offset); offset += 2; obj.yMin = bin.readShort(data, offset); offset += 2; obj.xMax = bin.readShort(data, offset); offset += 2; obj.yMax = bin.readShort(data, offset); offset += 2; obj.macStyle = bin.readUshort(data, offset); offset += 2; obj.lowestRecPPEM = bin.readUshort(data, offset); offset += 2; obj.fontDirectionHint = bin.readShort(data, offset); offset += 2; obj.indexToLocFormat = bin.readShort(data, offset); offset += 2; obj.glyphDataFormat = bin.readShort(data, offset); offset += 2; return obj; }; Typr.hhea = {}; Typr.hhea.parse = function(data, offset, length) { var bin = Typr._bin; var obj = {}; bin.readFixed(data, offset); offset += 4; obj.ascender = bin.readShort(data, offset); offset += 2; obj.descender = bin.readShort(data, offset); offset += 2; obj.lineGap = bin.readShort(data, offset); offset += 2; obj.advanceWidthMax = bin.readUshort(data, offset); offset += 2; obj.minLeftSideBearing = bin.readShort(data, offset); offset += 2; obj.minRightSideBearing = bin.readShort(data, offset); offset += 2; obj.xMaxExtent = bin.readShort(data, offset); offset += 2; obj.caretSlopeRise = bin.readShort(data, offset); offset += 2; obj.caretSlopeRun = bin.readShort(data, offset); offset += 2; obj.caretOffset = bin.readShort(data, offset); offset += 2; offset += 4 * 2; obj.metricDataFormat = bin.readShort(data, offset); offset += 2; obj.numberOfHMetrics = bin.readUshort(data, offset); offset += 2; return obj; }; Typr.hmtx = {}; Typr.hmtx.parse = function(data, offset, length, font) { var bin = Typr._bin; var obj = {}; obj.aWidth = []; obj.lsBearing = []; var aw = 0, lsb = 0; for (var i = 0; i < font.maxp.numGlyphs; i++) { if (i < font.hhea.numberOfHMetrics) { aw = bin.readUshort(data, offset); offset += 2; lsb = bin.readShort(data, offset); offset += 2; } obj.aWidth.push(aw); obj.lsBearing.push(lsb); } return obj; }; Typr.kern = {}; Typr.kern.parse = function(data, offset, length, font) { var bin = Typr._bin; var version = bin.readUshort(data, offset); offset += 2; if (version == 1) return Typr.kern.parseV1(data, offset - 2, length, font); var nTables = bin.readUshort(data, offset); offset += 2; var map2 = { glyph1: [], rval: [] }; for (var i = 0; i < nTables; i++) { offset += 2; var length = bin.readUshort(data, offset); offset += 2; var coverage = bin.readUshort(data, offset); offset += 2; var format2 = coverage >>> 8; format2 &= 15; if (format2 == 0) offset = Typr.kern.readFormat0(data, offset, map2); else throw "unknown kern table format: " + format2; } return map2; }; Typr.kern.parseV1 = function(data, offset, length, font) { var bin = Typr._bin; bin.readFixed(data, offset); offset += 4; var nTables = bin.readUint(data, offset); offset += 4; var map2 = { glyph1: [], rval: [] }; for (var i = 0; i < nTables; i++) { bin.readUint(data, offset); offset += 4; var coverage = bin.readUshort(data, offset); offset += 2; bin.readUshort(data, offset); offset += 2; var format2 = coverage >>> 8; format2 &= 15; if (format2 == 0) offset = Typr.kern.readFormat0(data, offset, map2); else throw "unknown kern table format: " + format2; } return map2; }; Typr.kern.readFormat0 = function(data, offset, map2) { var bin = Typr._bin; var pleft = -1; var nPairs = bin.readUshort(data, offset); offset += 2; bin.readUshort(data, offset); offset += 2; bin.readUshort(data, offset); offset += 2; bin.readUshort(data, offset); offset += 2; for (var j = 0; j < nPairs; j++) { var left = bin.readUshort(data, offset); offset += 2; var right = bin.readUshort(data, offset); offset += 2; var value = bin.readShort(data, offset); offset += 2; if (left != pleft) { map2.glyph1.push(left); map2.rval.push({ glyph2: [], vals: [] }); } var rval = map2.rval[map2.rval.length - 1]; rval.glyph2.push(right); rval.vals.push(value); pleft = left; } return offset; }; Typr.loca = {}; Typr.loca.parse = function(data, offset, length, font) { var bin = Typr._bin; var obj = []; var ver = font.head.indexToLocFormat; var len = font.maxp.numGlyphs + 1; if (ver == 0) for (var i = 0; i < len; i++) obj.push(bin.readUshort(data, offset + (i << 1)) << 1); if (ver == 1) for (var i = 0; i < len; i++) obj.push(bin.readUint(data, offset + (i << 2))); return obj; }; Typr.maxp = {}; Typr.maxp.parse = function(data, offset, length) { var bin = Typr._bin; var obj = {}; var ver = bin.readUint(data, offset); offset += 4; obj.numGlyphs = bin.readUshort(data, offset); offset += 2; if (ver == 65536) { obj.maxPoints = bin.readUshort(data, offset); offset += 2; obj.maxContours = bin.readUshort(data, offset); offset += 2; obj.maxCompositePoints = bin.readUshort(data, offset); offset += 2; obj.maxCompositeContours = bin.readUshort(data, offset); offset += 2; obj.maxZones = bin.readUshort(data, offset); offset += 2; obj.maxTwilightPoints = bin.readUshort(data, offset); offset += 2; obj.maxStorage = bin.readUshort(data, offset); offset += 2; obj.maxFunctionDefs = bin.readUshort(data, offset); offset += 2; obj.maxInstructionDefs = bin.readUshort(data, offset); offset += 2; obj.maxStackElements = bin.readUshort(data, offset); offset += 2; obj.maxSizeOfInstructions = bin.readUshort(data, offset); offset += 2; obj.maxComponentElements = bin.readUshort(data, offset); offset += 2; obj.maxComponentDepth = bin.readUshort(data, offset); offset += 2; } return obj; }; Typr.name = {}; Typr.name.parse = function(data, offset, length) { var bin = Typr._bin; var obj = {}; bin.readUshort(data, offset); offset += 2; var count = bin.readUshort(data, offset); offset += 2; bin.readUshort(data, offset); offset += 2; var offset0 = offset; for (var i = 0; i < count; i++) { var platformID = bin.readUshort(data, offset); offset += 2; var encodingID = bin.readUshort(data, offset); offset += 2; var languageID = bin.readUshort(data, offset); offset += 2; var nameID = bin.readUshort(data, offset); offset += 2; var length = bin.readUshort(data, offset); offset += 2; var noffset = bin.readUshort(data, offset); offset += 2; var plat = "p" + platformID; if (obj[plat] == null) obj[plat] = {}; var names2 = ["copyright", "fontFamily", "fontSubfamily", "ID", "fullName", "version", "postScriptName", "trademark", "manufacturer", "designer", "description", "urlVendor", "urlDesigner", "licence", "licenceURL", "---", "typoFamilyName", "typoSubfamilyName", "compatibleFull", "sampleText", "postScriptCID", "wwsFamilyName", "wwsSubfamilyName", "lightPalette", "darkPalette"]; var cname = names2[nameID]; var soff = offset0 + count * 12 + noffset; var str; if (platformID == 0) str = bin.readUnicode(data, soff, length / 2); else if (platformID == 3 && encodingID == 0) str = bin.readUnicode(data, soff, length / 2); else if (encodingID == 0) str = bin.readASCII(data, soff, length); else if (encodingID == 1) str = bin.readUnicode(data, soff, length / 2); else if (encodingID == 3) str = bin.readUnicode(data, soff, length / 2); else if (platformID == 1) { str = bin.readASCII(data, soff, length); console.log("reading unknown MAC encoding " + encodingID + " as ASCII"); } else throw "unknown encoding " + encodingID + ", platformID: " + platformID; obj[plat][cname] = str; obj[plat]._lang = languageID; } for (var p2 in obj) if (obj[p2].postScriptName != null && obj[p2]._lang == 1033) return obj[p2]; for (var p2 in obj) if (obj[p2].postScriptName != null && obj[p2]._lang == 3084) return obj[p2]; for (var p2 in obj) if (obj[p2].postScriptName != null) return obj[p2]; var tname; for (var p2 in obj) { tname = p2; break; } console.log("returning name table with languageID " + obj[tname]._lang); return obj[tname]; }; Typr["OS/2"] = {}; Typr["OS/2"].parse = function(data, offset, length) { var bin = Typr._bin; var ver = bin.readUshort(data, offset); offset += 2; var obj = {}; if (ver == 0) Typr["OS/2"].version0(data, offset, obj); else if (ver == 1) Typr["OS/2"].version1(data, offset, obj); else if (ver == 2 || ver == 3 || ver == 4) Typr["OS/2"].version2(data, offset, obj); else if (ver == 5) Typr["OS/2"].version5(data, offset, obj); else throw "unknown OS/2 table version: " + ver; return obj; }; Typr["OS/2"].version0 = function(data, offset, obj) { var bin = Typr._bin; obj.xAvgCharWidth = bin.readShort(data, offset); offset += 2; obj.usWeightClass = bin.readUshort(data, offset); offset += 2; obj.usWidthClass = bin.readUshort(data, offset); offset += 2; obj.fsType = bin.readUshort(data, offset); offset += 2; obj.ySubscriptXSize = bin.readShort(data, offset); offset += 2; obj.ySubscriptYSize = bin.readShort(data, offset); offset += 2; obj.ySubscriptXOffset = bin.readShort(data, offset); offset += 2; obj.ySubscriptYOffset = bin.readShort(data, offset); offset += 2; obj.ySuperscriptXSize = bin.readShort(data, offset); offset += 2; obj.ySuperscriptYSize = bin.readShort(data, offset); offset += 2; obj.ySuperscriptXOffset = bin.readShort(data, offset); offset += 2; obj.ySuperscriptYOffset = bin.readShort(data, offset); offset += 2; obj.yStrikeoutSize = bin.readShort(data, offset); offset += 2; obj.yStrikeoutPosition = bin.readShort(data, offset); offset += 2; obj.sFamilyClass = bin.readShort(data, offset); offset += 2; obj.panose = bin.readBytes(data, offset, 10); offset += 10; obj.ulUnicodeRange1 = bin.readUint(data, offset); offset += 4; obj.ulUnicodeRange2 = bin.readUint(data, offset); offset += 4; obj.ulUnicodeRange3 = bin.readUint(data, offset); offset += 4; obj.ulUnicodeRange4 = bin.readUint(data, offset); offset += 4; obj.achVendID = [bin.readInt8(data, offset), bin.readInt8(data, offset + 1), bin.readInt8(data, offset + 2), bin.readInt8(data, offset + 3)]; offset += 4; obj.fsSelection = bin.readUshort(data, offset); offset += 2; obj.usFirstCharIndex = bin.readUshort(data, offset); offset += 2; obj.usLastCharIndex = bin.readUshort(data, offset); offset += 2; obj.sTypoAscender = bin.readShort(data, offset); offset += 2; obj.sTypoDescender = bin.readShort(data, offset); offset += 2; obj.sTypoLineGap = bin.readShort(data, offset); offset += 2; obj.usWinAscent = bin.readUshort(data, offset); offset += 2; obj.usWinDescent = bin.readUshort(data, offset); offset += 2; return offset; }; Typr["OS/2"].version1 = function(data, offset, obj) { var bin = Typr._bin; offset = Typr["OS/2"].version0(data, offset, obj); obj.ulCodePageRange1 = bin.readUint(data, offset); offset += 4; obj.ulCodePageRange2 = bin.readUint(data, offset); offset += 4; return offset; }; Typr["OS/2"].version2 = function(data, offset, obj) { var bin = Typr._bin; offset = Typr["OS/2"].version1(data, offset, obj); obj.sxHeight = bin.readShort(data, offset); offset += 2; obj.sCapHeight = bin.readShort(data, offset); offset += 2; obj.usDefault = bin.readUshort(data, offset); offset += 2; obj.usBreak = bin.readUshort(data, offset); offset += 2; obj.usMaxContext = bin.readUshort(data, offset); offset += 2; return offset; }; Typr["OS/2"].version5 = function(data, offset, obj) { var bin = Typr._bin; offset = Typr["OS/2"].version2(data, offset, obj); obj.usLowerOpticalPointSize = bin.readUshort(data, offset); offset += 2; obj.usUpperOpticalPointSize = bin.readUshort(data, offset); offset += 2; return offset; }; Typr.post = {}; Typr.post.parse = function(data, offset, length) { var bin = Typr._bin; var obj = {}; obj.version = bin.readFixed(data, offset); offset += 4; obj.italicAngle = bin.readFixed(data, offset); offset += 4; obj.underlinePosition = bin.readShort(data, offset); offset += 2; obj.underlineThickness = bin.readShort(data, offset); offset += 2; return obj; }; Typr.SVG = {}; Typr.SVG.parse = function(data, offset, length) { var bin = Typr._bin; var obj = { entries: [] }; var offset0 = offset; bin.readUshort(data, offset); offset += 2; var svgDocIndexOffset = bin.readUint(data, offset); offset += 4; bin.readUint(data, offset); offset += 4; offset = svgDocIndexOffset + offset0; var numEntries = bin.readUshort(data, offset); offset += 2; for (var i = 0; i < numEntries; i++) { var startGlyphID = bin.readUshort(data, offset); offset += 2; var endGlyphID = bin.readUshort(data, offset); offset += 2; var svgDocOffset = bin.readUint(data, offset); offset += 4; var svgDocLength = bin.readUint(data, offset); offset += 4; var sbuf = new Uint8Array(data.buffer, offset0 + svgDocOffset + svgDocIndexOffset, svgDocLength); var svg = bin.readUTF8(sbuf, 0, sbuf.length); for (var f2 = startGlyphID; f2 <= endGlyphID; f2++) { obj.entries[f2] = svg; } } return obj; }; Typr.SVG.toPath = function(str) { var pth = { cmds: [], crds: [] }; if (str == null) return pth; var prsr = new DOMParser(); var doc = prsr["parseFromString"](str, "image/svg+xml"); var svg = doc.firstChild; while (svg.tagName != "svg") svg = svg.nextSibling; var vb = svg.getAttribute("viewBox"); if (vb) vb = vb.trim().split(" ").map(parseFloat); else vb = [0, 0, 1e3, 1e3]; Typr.SVG._toPath(svg.children, pth); for (var i = 0; i < pth.crds.length; i += 2) { var x2 = pth.crds[i], y = pth.crds[i + 1]; x2 -= vb[0]; y -= vb[1]; y = -y; pth.crds[i] = x2; pth.crds[i + 1] = y; } return pth; }; Typr.SVG._toPath = function(nds, pth, fill) { for (var ni = 0; ni < nds.length; ni++) { var nd = nds[ni], tn2 = nd.tagName; var cfl = nd.getAttribute("fill"); if (cfl == null) cfl = fill; if (tn2 == "g") Typr.SVG._toPath(nd.children, pth, cfl); else if (tn2 == "path") { pth.cmds.push(cfl ? cfl : "#000000"); var d2 = nd.getAttribute("d"); var toks = Typr.SVG._tokens(d2); Typr.SVG._toksToPath(toks, pth); pth.cmds.push("X"); } else if (tn2 == "defs") ; else console.log(tn2, nd); } }; Typr.SVG._tokens = function(d2) { var ts = [], off = 0, rn2 = false, cn2 = ""; while (off < d2.length) { var cc = d2.charCodeAt(off), ch = d2.charAt(off); off++; var isNum = 48 <= cc && cc <= 57 || ch == "." || ch == "-"; if (rn2) { if (ch == "-") { ts.push(parseFloat(cn2)); cn2 = ch; } else if (isNum) cn2 += ch; else { ts.push(parseFloat(cn2)); if (ch != "," && ch != " ") ts.push(ch); rn2 = false; } } else { if (isNum) { cn2 = ch; rn2 = true; } else if (ch != "," && ch != " ") ts.push(ch); } } if (rn2) ts.push(parseFloat(cn2)); return ts; }; Typr.SVG._toksToPath = function(ts, pth) { var i = 0, x2 = 0, y = 0, ox = 0, oy = 0; var pc = { M: 2, L: 2, H: 1, V: 1, S: 4, C: 6 }; var cmds = pth.cmds, crds = pth.crds; while (i < ts.length) { var cmd = ts[i]; i++; if (cmd == "z") { cmds.push("Z"); x2 = ox; y = oy; } else { var cmu = cmd.toUpperCase(); var ps = pc[cmu], reps = Typr.SVG._reps(ts, i, ps); for (var j = 0; j < reps; j++) { var xi = 0, yi = 0; if (cmd != cmu) { xi = x2; yi = y; } if (cmu == "M") { x2 = xi + ts[i++]; y = yi + ts[i++]; cmds.push("M"); crds.push(x2, y); ox = x2; oy = y; } else if (cmu == "L") { x2 = xi + ts[i++]; y = yi + ts[i++]; cmds.push("L"); crds.push(x2, y); } else if (cmu == "H") { x2 = xi + ts[i++]; cmds.push("L"); crds.push(x2, y); } else if (cmu == "V") { y = yi + ts[i++]; cmds.push("L"); crds.push(x2, y); } else if (cmu == "C") { var x1 = xi + ts[i++], y1 = yi + ts[i++], x22 = xi + ts[i++], y2 = yi + ts[i++], x3 = xi + ts[i++], y3 = yi + ts[i++]; cmds.push("C"); crds.push(x1, y1, x22, y2, x3, y3); x2 = x3; y = y3; } else if (cmu == "S") { var co = Math.max(crds.length - 4, 0); var x1 = x2 + x2 - crds[co], y1 = y + y - crds[co + 1]; var x22 = xi + ts[i++], y2 = yi + ts[i++], x3 = xi + ts[i++], y3 = yi + ts[i++]; cmds.push("C"); crds.push(x1, y1, x22, y2, x3, y3); x2 = x3; y = y3; } else console.log("Unknown SVG command " + cmd); } } } }; Typr.SVG._reps = function(ts, off, ps) { var i = off; while (i < ts.length) { if (typeof ts[i] == "string") break; i += ps; } return (i - off) / ps; }; if (Typr == null) Typr = {}; if (Typr.U == null) Typr.U = {}; Typr.U.codeToGlyph = function(font, code) { var cmap = font.cmap; var tind = -1; if (cmap.p0e4 != null) tind = cmap.p0e4; else if (cmap.p3e1 != null) tind = cmap.p3e1; else if (cmap.p1e0 != null) tind = cmap.p1e0; if (tind == -1) throw "no familiar platform and encoding!"; var tab = cmap.tables[tind]; if (tab.format == 0) { if (code >= tab.map.length) return 0; return tab.map[code]; } else if (tab.format == 4) { var sind = -1; for (var i = 0; i < tab.endCount.length; i++) if (code <= tab.endCount[i]) { sind = i; break; } if (sind == -1) return 0; if (tab.startCount[sind] > code) return 0; var gli = 0; if (tab.idRangeOffset[sind] != 0) gli = tab.glyphIdArray[code - tab.startCount[sind] + (tab.idRangeOffset[sind] >> 1) - (tab.idRangeOffset.length - sind)]; else gli = code + tab.idDelta[sind]; return gli & 65535; } else if (tab.format == 12) { if (code > tab.groups[tab.groups.length - 1][1]) return 0; for (var i = 0; i < tab.groups.length; i++) { var grp = tab.groups[i]; if (grp[0] <= code && code <= grp[1]) return grp[2] + (code - grp[0]); } return 0; } else throw "unknown cmap table format " + tab.format; }; Typr.U.glyphToPath = function(font, gid) { var path = { cmds: [], crds: [] }; if (font.SVG && font.SVG.entries[gid]) { var p2 = font.SVG.entries[gid]; if (p2 == null) return path; if (typeof p2 == "string") { p2 = Typr.SVG.toPath(p2); font.SVG.entries[gid] = p2; } return p2; } else if (font.CFF) { var state = { x: 0, y: 0, stack: [], nStems: 0, haveWidth: false, width: font.CFF.Private ? font.CFF.Private.defaultWidthX : 0, open: false }; Typr.U._drawCFF(font.CFF.CharStrings[gid], state, font.CFF, path); } else if (font.glyf) { Typr.U._drawGlyf(gid, font, path); } return path; }; Typr.U._drawGlyf = function(gid, font, path) { var gl = font.glyf[gid]; if (gl == null) gl = font.glyf[gid] = Typr.glyf._parseGlyf(font, gid); if (gl != null) { if (gl.noc > -1) Typr.U._simpleGlyph(gl, path); else Typr.U._compoGlyph(gl, font, path); } }; Typr.U._simpleGlyph = function(gl, p2) { for (var c2 = 0; c2 < gl.noc; c2++) { var i0 = c2 == 0 ? 0 : gl.endPts[c2 - 1] + 1; var il = gl.endPts[c2]; for (var i = i0; i <= il; i++) { var pr = i == i0 ? il : i - 1; var nx = i == il ? i0 : i + 1; var onCurve = gl.flags[i] & 1; var prOnCurve = gl.flags[pr] & 1; var nxOnCurve = gl.flags[nx] & 1; var x2 = gl.xs[i], y = gl.ys[i]; if (i == i0) { if (onCurve) { if (prOnCurve) Typr.U.P.moveTo(p2, gl.xs[pr], gl.ys[pr]); else { Typr.U.P.moveTo(p2, x2, y); continue; } } else { if (prOnCurve) Typr.U.P.moveTo(p2, gl.xs[pr], gl.ys[pr]); else Typr.U.P.moveTo(p2, (gl.xs[pr] + x2) / 2, (gl.ys[pr] + y) / 2); } } if (onCurve) { if (prOnCurve) Typr.U.P.lineTo(p2, x2, y); } else { if (nxOnCurve) Typr.U.P.qcurveTo(p2, x2, y, gl.xs[nx], gl.ys[nx]); else Typr.U.P.qcurveTo(p2, x2, y, (x2 + gl.xs[nx]) / 2, (y + gl.ys[nx]) / 2); } } Typr.U.P.closePath(p2); } }; Typr.U._compoGlyph = function(gl, font, p2) { for (var j = 0; j < gl.parts.length; j++) { var path = { cmds: [], crds: [] }; var prt = gl.parts[j]; Typr.U._drawGlyf(prt.glyphIndex, font, path); var m2 = prt.m; for (var i = 0; i < path.crds.length; i += 2) { var x2 = path.crds[i], y = path.crds[i + 1]; p2.crds.push(x2 * m2.a + y * m2.b + m2.tx); p2.crds.push(x2 * m2.c + y * m2.d + m2.ty); } for (var i = 0; i < path.cmds.length; i++) p2.cmds.push(path.cmds[i]); } }; Typr.U._getGlyphClass = function(g, cd) { var intr = Typr._lctf.getInterval(cd, g); return intr == -1 ? 0 : cd[intr + 2]; }; Typr.U.getPairAdjustment = function(font, g1, g2) { if (font.GPOS) { var ltab = null; for (var i = 0; i < font.GPOS.featureList.length; i++) { var fl = font.GPOS.featureList[i]; if (fl.tag == "kern") { for (var j = 0; j < fl.tab.length; j++) if (font.GPOS.lookupList[fl.tab[j]].ltype == 2) ltab = font.GPOS.lookupList[fl.tab[j]]; } } if (ltab) { for (var i = 0; i < ltab.tabs.length; i++) { var tab = ltab.tabs[i]; var ind = Typr._lctf.coverageIndex(tab.coverage, g1); if (ind == -1) continue; var adj; if (tab.format == 1) { var right = tab.pairsets[ind]; for (var j = 0; j < right.length; j++) if (right[j].gid2 == g2) adj = right[j]; if (adj == null) continue; } else if (tab.format == 2) { var c1 = Typr.U._getGlyphClass(g1, tab.classDef1); var c2 = Typr.U._getGlyphClass(g2, tab.classDef2); var adj = tab.matrix[c1][c2]; } return adj.val1[2]; } } } if (font.kern) { var ind1 = font.kern.glyph1.indexOf(g1); if (ind1 != -1) { var ind2 = font.kern.rval[ind1].glyph2.indexOf(g2); if (ind2 != -1) return font.kern.rval[ind1].vals[ind2]; } } return 0; }; Typr.U.stringToGlyphs = function(font, str) { var gls = []; for (var i = 0; i < str.length; i++) { var cc = str.codePointAt(i); if (cc > 65535) i++; gls.push(Typr.U.codeToGlyph(font, cc)); } var gsub = font["GSUB"]; if (gsub == null) return gls; var llist = gsub.lookupList, flist = gsub.featureList; var wsep = '\n " ,.:;!?() ،'; var R2 = "آأؤإاةدذرزوٱٲٳٵٶٷڈډڊڋڌڍڎڏڐڑڒړڔڕږڗژڙۀۃۄۅۆۇۈۉۊۋۍۏےۓەۮۯܐܕܖܗܘܙܞܨܪܬܯݍݙݚݛݫݬݱݳݴݸݹࡀࡆࡇࡉࡔࡧࡩࡪࢪࢫࢬࢮࢱࢲࢹૅેૉૐૡ૯ஃஅஉஎஏனப"; var L = "ꡲ્"; for (var ci = 0; ci < gls.length; ci++) { var gl = gls[ci]; var slft = ci == 0 || wsep.indexOf(str[ci - 1]) != -1; var srgt = ci == gls.length - 1 || wsep.indexOf(str[ci + 1]) != -1; if (!slft && R2.indexOf(str[ci - 1]) != -1) slft = true; if (!srgt && R2.indexOf(str[ci]) != -1) srgt = true; if (!srgt && L.indexOf(str[ci + 1]) != -1) srgt = true; if (!slft && L.indexOf(str[ci]) != -1) slft = true; var feat = null; if (slft) feat = srgt ? "isol" : "init"; else feat = srgt ? "fina" : "medi"; for (var fi = 0; fi < flist.length; fi++) { if (flist[fi].tag != feat) continue; for (var ti = 0; ti < flist[fi].tab.length; ti++) { var tab = llist[flist[fi].tab[ti]]; if (tab.ltype != 1) continue; Typr.U._applyType1(gls, ci, tab); } } } var cligs = ["rlig", "liga", "mset"]; for (var ci = 0; ci < gls.length; ci++) { var gl = gls[ci]; var rlim = Math.min(3, gls.length - ci - 1); for (var fi = 0; fi < flist.length; fi++) { var fl = flist[fi]; if (cligs.indexOf(fl.tag) == -1) continue; for (var ti = 0; ti < fl.tab.length; ti++) { var tab = llist[fl.tab[ti]]; for (var j = 0; j < tab.tabs.length; j++) { if (tab.tabs[j] == null) continue; var ind = Typr._lctf.coverageIndex(tab.tabs[j].coverage, gl); if (ind == -1) continue; if (tab.ltype == 4) { var vals = tab.tabs[j].vals[ind]; for (var k = 0; k < vals.length; k++) { var lig = vals[k], rl = lig.chain.length; if (rl > rlim) continue; var good = true; for (var l2 = 0; l2 < rl; l2++) if (lig.chain[l2] != gls[ci + (1 + l2)]) good = false; if (!good) continue; gls[ci] = lig.nglyph; for (var l2 = 0; l2 < rl; l2++) gls[ci + l2 + 1] = -1; } } else if (tab.ltype == 5) { var ltab = tab.tabs[j]; if (ltab.fmt != 2) continue; var cind = Typr._lctf.getInterval(ltab.cDef, gl); var cls = ltab.cDef[cind + 2], scs = ltab.scset[cls]; for (var i = 0; i < scs.length; i++) { var sc = scs[i], inp = sc.input; if (inp.length > rlim) continue; var good = true; for (var l2 = 0; l2 < inp.length; l2++) { var cind2 = Typr._lctf.getInterval(ltab.cDef, gls[ci + 1 + l2]); if (cind == -1 && ltab.cDef[cind2 + 2] != inp[l2]) { good = false; break; } } if (!good) continue; var lrs = sc.substLookupRecords; for (var k = 0; k < lrs.length; k += 2) { lrs[k]; lrs[k + 1]; } } } } } } } return gls; }; Typr.U._applyType1 = function(gls, ci, tab) { var gl = gls[ci]; for (var j = 0; j < tab.tabs.length; j++) { var ttab = tab.tabs[j]; var ind = Typr._lctf.coverageIndex(ttab.coverage, gl); if (ind == -1) continue; if (ttab.fmt == 1) gls[ci] = gls[ci] + ttab.delta; else gls[ci] = ttab.newg[ind]; } }; Typr.U.glyphsToPath = function(font, gls, clr) { var tpath = { cmds: [], crds: [] }; var x2 = 0; for (var i = 0; i < gls.length; i++) { var gid = gls[i]; if (gid == -1) continue; var gid2 = i < gls.length - 1 && gls[i + 1] != -1 ? gls[i + 1] : 0; var path = Typr.U.glyphToPath(font, gid); for (var j = 0; j < path.crds.length; j += 2) { tpath.crds.push(path.crds[j] + x2); tpath.crds.push(path.crds[j + 1]); } if (clr) tpath.cmds.push(clr); for (var j = 0; j < path.cmds.length; j++) tpath.cmds.push(path.cmds[j]); if (clr) tpath.cmds.push("X"); x2 += font.hmtx.aWidth[gid]; if (i < gls.length - 1) x2 += Typr.U.getPairAdjustment(font, gid, gid2); } return tpath; }; Typr.U.pathToSVG = function(path, prec) { if (prec == null) prec = 5; var out = [], co = 0, lmap = { M: 2, L: 2, Q: 4, C: 6 }; for (var i = 0; i < path.cmds.length; i++) { var cmd = path.cmds[i], cn2 = co + (lmap[cmd] ? lmap[cmd] : 0); out.push(cmd); while (co < cn2) { var c2 = path.crds[co++]; out.push(parseFloat(c2.toFixed(prec)) + (co == cn2 ? "" : " ")); } } return out.join(""); }; Typr.U.pathToContext = function(path, ctx) { var c2 = 0, crds = path.crds; for (var j = 0; j < path.cmds.length; j++) { var cmd = path.cmds[j]; if (cmd == "M") { ctx.moveTo(crds[c2], crds[c2 + 1]); c2 += 2; } else if (cmd == "L") { ctx.lineTo(crds[c2], crds[c2 + 1]); c2 += 2; } else if (cmd == "C") { ctx.bezierCurveTo(crds[c2], crds[c2 + 1], crds[c2 + 2], crds[c2 + 3], crds[c2 + 4], crds[c2 + 5]); c2 += 6; } else if (cmd == "Q") { ctx.quadraticCurveTo(crds[c2], crds[c2 + 1], crds[c2 + 2], crds[c2 + 3]); c2 += 4; } else if (cmd.charAt(0) == "#") { ctx.beginPath(); ctx.fillStyle = cmd; } else if (cmd == "Z") { ctx.closePath(); } else if (cmd == "X") { ctx.fill(); } } }; Typr.U.P = {}; Typr.U.P.moveTo = function(p2, x2, y) { p2.cmds.push("M"); p2.crds.push(x2, y); }; Typr.U.P.lineTo = function(p2, x2, y) { p2.cmds.push("L"); p2.crds.push(x2, y); }; Typr.U.P.curveTo = function(p2, a2, b2, c2, d2, e, f2) { p2.cmds.push("C"); p2.crds.push(a2, b2, c2, d2, e, f2); }; Typr.U.P.qcurveTo = function(p2, a2, b2, c2, d2) { p2.cmds.push("Q"); p2.crds.push(a2, b2, c2, d2); }; Typr.U.P.closePath = function(p2) { p2.cmds.push("Z"); }; Typr.U._drawCFF = function(cmds, state, font, p2) { var stack = state.stack; var nStems = state.nStems, haveWidth = state.haveWidth, width = state.width, open = state.open; var i = 0; var x2 = state.x, y = state.y, c1x = 0, c1y = 0, c2x = 0, c2y = 0, c3x = 0, c3y = 0, c4x = 0, c4y = 0, jpx = 0, jpy = 0; var o2 = { val: 0, size: 0 }; while (i < cmds.length) { Typr.CFF.getCharString(cmds, i, o2); var v2 = o2.val; i += o2.size; if (v2 == "o1" || v2 == "o18") { var hasWidthArg; hasWidthArg = stack.length % 2 !== 0; if (hasWidthArg && !haveWidth) { width = stack.shift() + font.Private.nominalWidthX; } nStems += stack.length >> 1; stack.length = 0; haveWidth = true; } else if (v2 == "o3" || v2 == "o23") { var hasWidthArg; hasWidthArg = stack.length % 2 !== 0; if (hasWidthArg && !haveWidth) { width = stack.shift() + font.Private.nominalWidthX; } nStems += stack.length >> 1; stack.length = 0; haveWidth = true; } else if (v2 == "o4") { if (stack.length > 1 && !haveWidth) { width = stack.shift() + font.Private.nominalWidthX; haveWidth = true; } if (open) Typr.U.P.closePath(p2); y += stack.pop(); Typr.U.P.moveTo(p2, x2, y); open = true; } else if (v2 == "o5") { while (stack.length > 0) { x2 += stack.shift(); y += stack.shift(); Typr.U.P.lineTo(p2, x2, y); } } else if (v2 == "o6" || v2 == "o7") { var count = stack.length; var isX = v2 == "o6"; for (var j = 0; j < count; j++) { var sval = stack.shift(); if (isX) x2 += sval; else y += sval; isX = !isX; Typr.U.P.lineTo(p2, x2, y); } } else if (v2 == "o8" || v2 == "o24") { var count = stack.length; var index = 0; while (index + 6 <= count) { c1x = x2 + stack.shift(); c1y = y + stack.shift(); c2x = c1x + stack.shift(); c2y = c1y + stack.shift(); x2 = c2x + stack.shift(); y = c2y + stack.shift(); Typr.U.P.curveTo(p2, c1x, c1y, c2x, c2y, x2, y); index += 6; } if (v2 == "o24") { x2 += stack.shift(); y += stack.shift(); Typr.U.P.lineTo(p2, x2, y); } } else if (v2 == "o11") break; else if (v2 == "o1234" || v2 == "o1235" || v2 == "o1236" || v2 == "o1237") { if (v2 == "o1234") { c1x = x2 + stack.shift(); c1y = y; c2x = c1x + stack.shift(); c2y = c1y + stack.shift(); jpx = c2x + stack.shift(); jpy = c2y; c3x = jpx + stack.shift(); c3y = c2y; c4x = c3x + stack.shift(); c4y = y; x2 = c4x + stack.shift(); Typr.U.P.curveTo(p2, c1x, c1y, c2x, c2y, jpx, jpy); Typr.U.P.curveTo(p2, c3x, c3y, c4x, c4y, x2, y); } if (v2 == "o1235") { c1x = x2 + stack.shift(); c1y = y + stack.shift(); c2x = c1x + stack.shift(); c2y = c1y + stack.shift(); jpx = c2x + stack.shift(); jpy = c2y + stack.shift(); c3x = jpx + stack.shift(); c3y = jpy + stack.shift(); c4x = c3x + stack.shift(); c4y = c3y + stack.shift(); x2 = c4x + stack.shift(); y = c4y + stack.shift(); stack.shift(); Typr.U.P.curveTo(p2, c1x, c1y, c2x, c2y, jpx, jpy); Typr.U.P.curveTo(p2, c3x, c3y, c4x, c4y, x2, y); } if (v2 == "o1236") { c1x = x2 + stack.shift(); c1y = y + stack.shift(); c2x = c1x + stack.shift(); c2y = c1y + stack.shift(); jpx = c2x + stack.shift(); jpy = c2y; c3x = jpx + stack.shift(); c3y = c2y; c4x = c3x + stack.shift(); c4y = c3y + stack.shift(); x2 = c4x + stack.shift(); Typr.U.P.curveTo(p2, c1x, c1y, c2x, c2y, jpx, jpy); Typr.U.P.curveTo(p2, c3x, c3y, c4x, c4y, x2, y); } if (v2 == "o1237") { c1x = x2 + stack.shift(); c1y = y + stack.shift(); c2x = c1x + stack.shift(); c2y = c1y + stack.shift(); jpx = c2x + stack.shift(); jpy = c2y + stack.shift(); c3x = jpx + stack.shift(); c3y = jpy + stack.shift(); c4x = c3x + stack.shift(); c4y = c3y + stack.shift(); if (Math.abs(c4x - x2) > Math.abs(c4y - y)) { x2 = c4x + stack.shift(); } else { y = c4y + stack.shift(); } Typr.U.P.curveTo(p2, c1x, c1y, c2x, c2y, jpx, jpy); Typr.U.P.curveTo(p2, c3x, c3y, c4x, c4y, x2, y); } } else if (v2 == "o14") { if (stack.length > 0 && !haveWidth) { width = stack.shift() + font.nominalWidthX; haveWidth = true; } if (stack.length == 4) { var adx = stack.shift(); var ady = stack.shift(); var bchar = stack.shift(); var achar = stack.shift(); var bind = Typr.CFF.glyphBySE(font, bchar); var aind = Typr.CFF.glyphBySE(font, achar); Typr.U._drawCFF(font.CharStrings[bind], state, font, p2); state.x = adx; state.y = ady; Typr.U._drawCFF(font.CharStrings[aind], state, font, p2); } if (open) { Typr.U.P.closePath(p2); open = false; } } else if (v2 == "o19" || v2 == "o20") { var hasWidthArg; hasWidthArg = stack.length % 2 !== 0; if (hasWidthArg && !haveWidth) { width = stack.shift() + font.Private.nominalWidthX; } nStems += stack.length >> 1; stack.length = 0; haveWidth = true; i += nStems + 7 >> 3; } else if (v2 == "o21") { if (stack.length > 2 && !haveWidth) { width = stack.shift() + font.Private.nominalWidthX; haveWidth = true; } y += stack.pop(); x2 += stack.pop(); if (open) Typr.U.P.closePath(p2); Typr.U.P.moveTo(p2, x2, y); open = true; } else if (v2 == "o22") { if (stack.length > 1 && !haveWidth) { width = stack.shift() + font.Private.nominalWidthX; haveWidth = true; } x2 += stack.pop(); if (open) Typr.U.P.closePath(p2); Typr.U.P.moveTo(p2, x2, y); open = true; } else if (v2 == "o25") { while (stack.length > 6) { x2 += stack.shift(); y += stack.shift(); Typr.U.P.lineTo(p2, x2, y); } c1x = x2 + stack.shift(); c1y = y + stack.shift(); c2x = c1x + stack.shift(); c2y = c1y + stack.shift(); x2 = c2x + stack.shift(); y = c2y + stack.shift(); Typr.U.P.curveTo(p2, c1x, c1y, c2x, c2y, x2, y); } else if (v2 == "o26") { if (stack.length % 2) { x2 += stack.shift(); } while (stack.length > 0) { c1x = x2; c1y = y + stack.shift(); c2x = c1x + stack.shift(); c2y = c1y + stack.shift(); x2 = c2x; y = c2y + stack.shift(); Typr.U.P.curveTo(p2, c1x, c1y, c2x, c2y, x2, y); } } else if (v2 == "o27") { if (stack.length % 2) { y += stack.shift(); } while (stack.length > 0) { c1x = x2 + stack.shift(); c1y = y; c2x = c1x + stack.shift(); c2y = c1y + stack.shift(); x2 = c2x + stack.shift(); y = c2y; Typr.U.P.curveTo(p2, c1x, c1y, c2x, c2y, x2, y); } } else if (v2 == "o10" || v2 == "o29") { var obj = v2 == "o10" ? font.Private : font; if (stack.length == 0) { console.log("error: empty stack"); } else { var ind = stack.pop(); var subr = obj.Subrs[ind + obj.Bias]; state.x = x2; state.y = y; state.nStems = nStems; state.haveWidth = haveWidth; state.width = width; state.open = open; Typr.U._drawCFF(subr, state, font, p2); x2 = state.x; y = state.y; nStems = state.nStems; haveWidth = state.haveWidth; width = state.width; open = state.open; } } else if (v2 == "o30" || v2 == "o31") { var count, count1 = stack.length; var index = 0; var alternate = v2 == "o31"; count = count1 & ~2; index += count1 - count; while (index < count) { if (alternate) { c1x = x2 + stack.shift(); c1y = y; c2x = c1x + stack.shift(); c2y = c1y + stack.shift(); y = c2y + stack.shift(); if (count - index == 5) { x2 = c2x + stack.shift(); index++; } else x2 = c2x; alternate = false; } else { c1x = x2; c1y = y + stack.shift(); c2x = c1x + stack.shift(); c2y = c1y + stack.shift(); x2 = c2x + stack.shift(); if (count - index == 5) { y = c2y + stack.shift(); index++; } else y = c2y; alternate = true; } Typr.U.P.curveTo(p2, c1x, c1y, c2x, c2y, x2, y); index += 4; } } else if ((v2 + "").charAt(0) == "o") { console.log("Unknown operation: " + v2, cmds); throw v2; } else stack.push(v2); } state.x = x2; state.y = y; state.nStems = nStems; state.haveWidth = haveWidth; state.width = width; state.open = open; }; var typr_js = Typr; const Typr$1 = /* @__PURE__ */ getDefaultExportFromCjs(typr_js); const decode = () => { var _a2; const styleElements = _unsafeWindow.document.querySelectorAll("style"); let tipElement = null; styleElements.forEach((styleElement) => { var _a3; if (((_a3 = styleElement.textContent) == null ? void 0 : _a3.indexOf("font-cxsecret")) !== -1) { tipElement = styleElement; } }); if (!tipElement) return; const fontMatch = (_a2 = tipElement.textContent) == null ? void 0 : _a2.match(/base64,([\w\W]+?)'/); if (!fontMatch) return; const fontData = base64ToUint8Array(fontMatch[1]); const font = Typr$1.parse(fontData); const table = JSON.parse(_GM_getResourceText("ttf")); let text = {}; for (let i = 19968; i < 40870; i++) { let t = Typr$1.U.codeToGlyph(font, i); if (!t) continue; t = Typr$1.U.glyphToPath(font, t); t = md5Exports.md5(JSON.stringify(t)).slice(24); text[i] = table[t]; } const fontElements = _unsafeWindow.document.querySelectorAll(".font-cxsecret"); fontElements.forEach((fontElement) => { let html = fontElement.innerHTML; Object.keys(text).forEach((key2) => { const regex = new RegExp(String.fromCharCode(key2), "g"); html = html.replace(regex, String.fromCharCode(text[key2])); }); fontElement.innerHTML = html; fontElement.classList.remove("font-cxsecret"); }); }; const base64ToUint8Array = (base64) => { const decodedData = atob(base64); const array = new Uint8Array(decodedData.length); for (let i = 0; i < decodedData.length; i++) { array[i] = decodedData.charCodeAt(i); } return array; }; const chaoxing = [ { type: "save", name: "学习通考试新版收录", match: () => location.href.includes("work/view") || location.href.includes("test/reVersionPaperMarkContentNew"), question: { html: ".questionLi", question: "h3.mark_name", options: "ul.mark_letter.colorDeep > li", type: ".colorShallow", workType: "zj", pageType: "cx" }, answerHook: (item) => { let quesType = removeHtml1($(item.html).find('span[class="colorShallow"]').html()); if (quesType === "") { return null; } let matchResult = quesType.match(/^\((.+?)\)/); if (matchResult !== null) { item.type = matchResult[1].split(",")[0]; } else { return null; } item.question = titleClean(item.question.split(quesType)[1].trim()).trim(); item.options = removeStartChar(item.options); let isT = $(item.html).find(".marking_dui").length > 0; let answer; switch (item.type) { case "单选题": case "多选题": item.type = item.type === "单选题" ? "0" : "1"; item.answer = $(item.html).find(".mark_answer>div>span.colorGreen:eq(0)").text().replace("正确答案:", "").trim().split("").map((xx) => { return item.options[xx.charCodeAt(0) - 65]; }); item.answer = item.answer.filter((item2) => item2 !== ""); if (item.answer.length === 0 && isT) { item.answer = $(item.html).find(".mark_answer>div>span.colorDeep:eq(0)").text().replace("我的答案:", "").trim().split("").map((xx) => { return item.options[xx.charCodeAt(0) - 65]; }); item.answer = item.answer.filter((item2) => item2 !== ""); } break; case "判断题": item.type = "3"; item.options = []; item.answer = $(item.html).find(".mark_answer>div>span.colorGreen:eq(0)").text().trim().split("").map((answer2) => { if (answer2.includes("正确") || answer2.includes("对") || answer2.includes("√")) { return "正确"; } else if (answer2.includes("错误") || answer2.includes("错") || answer2.includes("×")) { return "错误"; } else { return null; } }).filter((item2) => item2 !== null); item.answer = item.answer.filter((item2) => item2 !== ""); if (item.answer.length === 0) { answer = removeHtml1($(item.html).find(".mark_answer>div>span.colorDeep:eq(0)").html()); let [marking_dui, marking_cuo] = [".marking_dui", ".marking_cuo"].map((selector) => $(item.html).find(selector).length); if (marking_dui + marking_cuo === 0) { return null; } if (answer.includes("正确") || answer.includes("对") || answer.includes("√")) { item.answer = ["正确"]; } else if (answer.includes("错误") || answer.includes("错") || answer.includes("×")) { item.answer = ["错误"]; } else { return null; } if (marking_dui === 0 && marking_cuo !== 0) { item.answer = item.answer[0] === "正确" ? "错误" : "正确"; } } break; case "简答题": item.type = "4"; item.answer = removeHtml1($(item.html).find(".mark_answer>div>.colorGreen:eq(0)").html()).replace("正确答案:", "").trim(); if (item.answer.length < 10) { return null; } else { item.answer = [item.answer]; } break; case "名词解释": item.type = "5"; item.answer = removeHtml1($(item.html).find(".mark_answer>div>.colorGreen:eq(0)").html()).replace("正确答案:", "").trim(); if (item.answer.length < 10) { return null; } else { item.answer = [item.answer]; } break; case "计算题": item.type = "7"; item.answer = removeHtml1($(item.html).find(".mark_answer>div>.colorGreen:eq(0)").html()).replace("正确答案:", "").trim(); if (item.answer.length < 10) { return null; } else { item.answer = [item.answer]; } break; case "论述题": item.type = "6"; item.answer = removeHtml1($(item.html).find(".mark_answer>div>.colorGreen:eq(0)").html()).replace("正确答案:", "").trim(); if (item.answer.length < 10) { return null; } else { item.answer = [item.answer]; } break; case "填空题": item.type = "2"; item.answer = $(item.html).find(".mark_answer>div>.colorGreen:eq(0)>dd").map((index, element) => { return removeHtml1($(element).html()).replace(`(${index + 1})`, "").trim(); }).get(); break; default: return null; } return item; } }, { type: "hook", name: "hook", match: location.href.includes("work/selectWorkQuestionYiPiYue") && !location.href.includes("mooc2=1"), main: (data) => { if (location.href.includes("mooc2=0")) { _unsafeWindow.location.href = location.href.replace("mooc2=0", "mooc2=1"); } else { _unsafeWindow.location.href = location.href + "&mooc2=1"; } } }, { type: "save", name: "学习通作业收录新", match: () => location.href.includes("work/selectWorkQuestionYiPiYue") && location.href.includes("mooc2=1"), question: { html: ".TiMu", question: ".Zy_TItle .clearfix", options: "ul.Zy_ulTop li", type: ".newZy_TItle", workType: "zj", pageType: "cx" }, answerHook: (item) => { item.type = $(item.html).find(".newZy_TItle").text().replace(/【|】/g, "").trim(); let isT = $(item.html).find(".marking_dui").length > 0; removeHtml1($(item.html).find(".Py_addpy:eq(0)").html()); let answer; item.question = titleClean(item.question).trim(); switch (item.type) { case "单选题": case "多选题": item.type = item.type === "单选题" ? "0" : "1"; item.options = $(item.html).find("ul.Zy_ulTop li").map((index, element) => { let inx = $(element).find("i.fl").text().trim(); let optionText = removeHtml1($(element).html()); if (inx === "") { return optionText.trim(); } return optionText.split(inx)[1].trim(); }).get(); item.answer = $(item.html).find(".correctAnswer >.fl.answerCon").text().trim().split("").map((xx) => { return item.options[xx.charCodeAt(0) - 65]; }); if (item.answer.length === 0 && isT) { item.answer = $(item.html).find(".myAnswer > .fl.answerCon").text().trim().split("").map((xx) => { return item.options[xx.charCodeAt(0) - 65]; }); } break; case "判断题": item.type = "3"; item.answer = $(item.html).find(".correctAnswer > .fl.answerCon").text().trim().split("").map((answer2) => { if (answer2.includes("正确") || answer2.includes("对") || answer2.includes("√")) { return "正确"; } else if (answer2.includes("错误") || answer2.includes("错") || answer2.includes("×")) { return "错误"; } else { return null; } }).filter((item2) => item2 !== null); if (item.answer.length === 0) { answer = removeHtml1($(item.html).find(".fl.answerCon").html()); let [marking_dui, marking_cuo] = [".marking_dui", ".marking_cuo"].map((selector) => $(item.html).find(selector).length); if (marking_dui + marking_cuo === 0) { return null; } if (answer.includes("正确") || answer.includes("对") || answer.includes("√")) { item.answer = ["正确"]; } else if (answer.includes("错误") || answer.includes("错") || answer.includes("×")) { item.answer = ["错误"]; } else { return null; } if (marking_dui === 0 && marking_cuo !== 0) { item.answer = item.answer[0] === "正确" ? "错误" : "正确"; } } break; case "填空题": item.type = "2"; item.answer = $(item.html).find(".correctAnswerBx>.correctAnswer>p:not(.clear)").map((index, element) => { return removeHtml1($(element).html()).replace(`(${index + 1})`, "").trim(); }).get().filter((item2) => item2 !== ""); break; case "分录题": item.type = "9"; item.answer = $(item.html).find(".correctAnswerBx>.correctAnswer>p:not(.clear)").map((index, element) => { return removeHtml1($(element).html()); }).get().filter((item2) => item2 !== ""); if (item.answer.length != $(item.html).find(".CorrectOrNot").length) { if ($(item.html).find(".marking_cuo").length > 0) { return null; } item.answer = $(item.html).find(".myAnswerBx>.myAnswer>p:not(.clear)").map((index, element) => { return removeHtml1($(element).html()); }).get().filter((item2) => item2 !== ""); if (item.answer.length != $(item.html).find(".CorrectOrNot").length) { return null; } } log(item.answer, "warn"); break; case "连线题": item.type = "11"; let left = $(item.html).find("ul.firstUlList>li:not(.groupTitile)").map((index, element) => { let $clone = $(element).clone(); $clone.find(".fl").remove(); return removeHtml1($clone.html()); }).get(); let right = $(item.html).find("ul.secondUlList>li:not(.groupTitile)").map((index, element) => { let $clone = $(element).clone(); $clone.find(".fl").remove(); return removeHtml1($clone.html()); }).get(); answer = $(item.html).find(".correctAnswer >.fl.answerCon >.collectAnswer").map((index, element) => { return removeHtml1($(element).text()); }).get(); item.options = [left, right]; let ans = {}; answer.forEach((item2) => { let [l2, r] = item2.split("-"); if (l2.charCodeAt(0) >= 65) { l2 = (l2.charCodeAt(0) - 65).toString(); } else if (/^\d+$/.test(l2)) { l2 = (parseInt(l2) - 1).toString(); } if (r.charCodeAt(0) >= 65) { r = (r.charCodeAt(0) - 65).toString(); } else if (/^\d+$/.test(r)) { r = (parseInt(r) - 1).toString(); } ans[left[l2]] = right[r]; }); item.answer = ans; log(left, right, item.answer, "warn"); break; default: log("暂未适配当前题型", item.type, "error"); return null; } return item; } }, { type: "ask", name: "学习通新版作业", match: /\/mooc2\/work\/dowork/i.test(location.pathname), question: { html: ".questionLi", question: "h3", options: "ul:eq(0) li .after, .answer_p", type: "input[name^=answertype]:eq(0)", workType: "zy", pageType: "cx" }, questionHook: (item) => { const type = removeHtml1($(item.html).find(".colorShallow").html()); item.question = titleClean(item.question.split(type)[1].trim()).trim(); item.$options = $(item.html).find(".answerBg"); return item; }, setAnswerHook: (item) => { qc(item.html); qc1(item.html); } }, { type: "ask", name: "学习通新版考试", match: /exam\/preview/i.test(location.pathname) || /exam\/test\/reVersionTestStartNew/i.test(location.pathname), question: { html: ".questionLi", question: "h3", options: "ul:eq(0) li .after, .answer_p", type: "input[name^=type]:not([name=type])", workType: "ks", pageType: "cx" }, questionHook: (item) => { const type = removeHtml1($(item.html).find(".colorShallow").html()); item.question = titleClean(item.question.split(type)[1].trim()).trim(); item.$options = $(item.html).find(".answerBg"); return item; }, setAnswerHook: (item) => { qc(item.html); qc1(item.html); }, next: () => { $('.nextDiv .jb_btn:contains("下一题")').click(); } }, { type: "ask", name: "学习通旧版作业", match: /work\/doHomeWorkNew/i.test(location.pathname) && location.href.includes("mooc2=1") == false, init: () => { decode(); }, question: { html: ".TiMu", question: ".clearfix.fontLabel", options: "ul:eq(0) li .after", type: "input[name^=answertype]:eq(0), .answer_p", workType: "zy", pageType: "cx" }, questionHook: (item) => { item.question = titleClean(item.question).trim(); item.$options = $(item.html).find(".fl.before"); switch (item.type) { case "3": item.options = $(item.html).find("ul:eq(0) li").map((index, element) => { if ($(element).find(".ri").length > 0) { return "正确"; } if ($(element).find(".wr").length > 0) { return "错误"; } if (isTrue($(element).attr("aria-label"))) { return "正确"; } if (isFalse($(element).attr("aria-label"))) { return "错误"; } }).get(); item.options = []; item.$options = $(item.html).find("ul>li"); break; case "11": let left = $(item.html).find("ul.firstUlList>li:not(.groupTitile)").map((index, element) => { let $clone = $(element).clone(); $clone.find(".fl").remove(); return removeHtml1($clone.html()); }).get(); let right = $(item.html).find("ul.secondUlList>li:not(.groupTitile)").map((index, element) => { let $clone = $(element).clone(); $clone.find(".fl").remove(); return removeHtml1($clone.html()); }).get(); item.options = [left, right]; item.$options = $(item.html).find("ul.thirdUlList>li:not(.groupTitile)"); break; } return item; }, setAnswerHook: (item) => { qc(item.html); qc1(item.html); }, setAnswer: (item) => { switch (item.type) { case "11": item.ques.$options.each((index, element) => { let left = item.ques.options[0]; let right = item.ques.options[1]; let chose = item.answer[left[index]]; let index1 = right.indexOf(chose); chose = String.fromCharCode(index1 + 65); $(element).find("select>option").each((inx, ele) => { log($(ele).val() == chose, "warn"); $(ele).val() == chose && $(ele).prop("selected", true); }); }); log(item.answer, "success"); return false; case "3": let bold = item.answer; item.ques.$options.each((index, element) => { if (isTrue(bold) && isTrue(removeHtml1($(element).html()))) { $(element).find("input").click(); } if (isFalse(bold) && isFalse(removeHtml1($(element).html()))) { $(element).find("input").click(); } }); return false; default: return true; } } }, { type: "ask", name: "学习通新版章节", match: /work\/doHomeWorkNew/i.test(location.pathname) && location.href.includes("mooc2=1"), init: () => { decode(); }, question: { html: ".TiMu", question: ".clearfix.fontLabel", options: "ul:eq(0) li .after, .answer_p", type: "input[name^=answertype]:eq(0)", workType: "zj", pageType: "cx" }, questionHook: (item) => { item.question = titleClean(item.question).trim(); switch (item.type) { case "3": item.options = $(item.html).find("ul:eq(0) li").map((index, element) => { if ($(element).find(".num_option").attr("data") === "true") { return "正确"; } if ($(element).find(".num_option").attr("data") === "false") { return "错误"; } }).get(); item.options = []; break; case "11": let left = $(item.html).find("ul.firstUlList>li:not(.groupTitile)").map((index, element) => { let $clone = $(element).clone(); $clone.find(".fl").remove(); return removeHtml1($clone.html()); }).get(); let right = $(item.html).find("ul.secondUlList>li:not(.groupTitile)").map((index, element) => { let $clone = $(element).clone(); $clone.find(".fl").remove(); return removeHtml1($clone.html()); }).get(); item.options = [left, right]; item.$options = $(item.html).find("ul.thirdUlList>li:not(.groupTitile)"); break; default: log("暂未适配当前题型", item.type, "error"); } return item; }, setAnswerHook: (item) => { qc(item.html); qc1(item.html); }, setAnswer: (item) => { log(item.ques.options, "warn"); switch (item.type) { case "11": item.ques.$options.each((index, element) => { let left = item.ques.options[0]; let right = item.ques.options[1]; let chose = item.answer[left[index]]; let index1 = right.indexOf(chose); chose = String.fromCharCode(index1 + 65); let $chosen = _unsafeWindow.$(element).find(".dept_select"); $chosen.chosen().val(chose).trigger("chosen:updated"); }); log(item.answer, "success"); return false; default: return true; } } } ]; const zhihuishu = [ { type: "ask", name: "智慧树章节", tips: "智慧树必须开自动跳转,否则答案可能无法保存导致低分!", match: location.href.includes("zhihuishu.com") && (!location.href.includes("checkHomework") && location.host.includes("zhihuishu") && (location.pathname === "/stuExamWeb.html" || location.href.includes("/webExamList/dohomework/") || location.href.includes("/webExamList/doexamination/"))), question: { html: ".examPaper_box > div:eq(1) >div:not(.examPaper_partTit)", question: ".subject_describe.dynamic-fonts:eq(0) div:eq(0)", options: ".subject_node .nodeLab .label.clearfix .node_detail", type: ".subject_type span:first-child", workType: "zhs", pageType: "zhs" }, init: async () => { await waitUntil(function() { return !$(".yidun_popup").hasClass("yidun_popup--light") && _unsafeWindow.zhsques; }); }, next: () => { $(".switch-btn-box button:eq(1)").click(); }, questionHook: (item, inx) => { const ques = _unsafeWindow.zhsques.examBase.workExamParts.map((item2) => item2.questionDtos).flat(); const quesData = ques[inx]; item.type = typeChange(quesData.questionType.name); item.question = removeHtml1(quesData.name); item.options = quesData.questionOptions ? quesData.questionOptions.map((item2) => removeHtml1(item2.content)) : []; return item; } }, { type: "save", name: "智慧树作业收录", match: location.href.includes("zhihuishu.com") && (location.href.includes("checkHomework") && location.host.includes("zhihuishu") && (location.pathname === "/stuExamWeb.html" || location.href.includes("/webExamList/checkHomework/"))), question: { html: ".questionType", question: ".subject_describe", options: ".examquestions-answer", type: ".newZy_TItle", workType: "zhs", pageType: "zhs" }, init: async () => { await waitUntil(function() { return $(".questionType").length > 0 && _unsafeWindow.zhsques && _unsafeWindow.zhsimgAnswer; }); }, answerHook: (item) => { let tid = $(item.html).find(".examPaper_subject").attr("data-questionid"); const quesData = _unsafeWindow.zhsimgAnswer; const quesList = _unsafeWindow.zhsques.examBase.workExamParts.map((item2) => item2.questionDtos).flat(); let data = quesList.find((item2) => item2.id == tid); data.answer = quesData[data.id]; item.question = removeHtml1(data.name); item.type = typeChange(data.questionType.name); item.options = data.questionOptions.map((item2) => removeHtml1(item2.content)); item.answer = data.answer.split("").map((code) => { return item.options[code.charCodeAt(0) - 65]; }); if (item.type == "3") { item.options = []; item.answer = isTrue(item.answer[0]) ? ["正确"] : isFalse(item.answer[0]) ? ["错误"] : []; } return item; } } ]; const xinwei = [ { type: "hook", name: "芯位教育hook", match: location.host === "www.51xinwei.com", main: (data) => { _unsafeWindow.mainClass = $(".el-main > div:eq(0)").attr("class"); let observer = new MutationObserver(async (mutations) => { if (_unsafeWindow.mainClass !== $(".el-main > div:eq(0)").attr("class")) { _unsafeWindow.mainClass = $(".el-main > div:eq(0)").attr("class"); if (_unsafeWindow.mainClass === "homework-detail-container") { await waitUntil(function() { return $(".el-loading-mask").length === 0; }); } vuePageChange(); observer.disconnect(); } for (let mutation of mutations) { if (mutation.type === "attributes" && mutation.attributeName === "class") { if (mutation.target.textContent && (mutation.target.textContent.includes("下一题") || mutation.target.textContent.includes("上一题"))) { observer.disconnect(); vuePageChange(); } } } }); if ($("#app").length >= 1) { observer.observe($("#app")[0], { subtree: true, attributes: true, childList: true }); } } }, { type: "ask", name: "芯位教育作业", tips: "芯位教育仅支持选择判断,其他题型待适配", match: () => location.host === "www.51xinwei.com" && /student\/#\/courseInfo\/[A-Za-z0-9]+\/homework/i.test(location.href), question: { html: ".content-area > div.content", question: ".content", options: ".el-radio-group label .label,.el-checkbox-group label .label", type: ".question-box .tag", workType: "xinwei", pageType: "xinwei" }, init: async () => { await waitUntil(function() { return $(".question-box").length !== 0; }); }, next: () => { $('.toggle-box > button:contains("下一题")').click(); }, ischecked: (item) => { return item.parent().parent().hasClass("is-checked"); }, questionHook: (item) => { const type = $(item.html).find(".question-box .tag").text(); switch (type) { case "单选": item.type = "0"; break; case "多选": item.type = "1"; break; case "判断": item.type = "3"; break; } return item; } }, // 芯位教育收录 { type: "save", name: "芯位教育", match: () => location.host === "www.51xinwei.com" && location.href.includes("/homeworkDetailPage"), question: { html: ".question-content-body", question: ".topic-title", options: ".el-radio-group label .label,.el-checkbox-group label .label", type: ".question-box .tag", workType: "xinwei", pageType: "xinwei" }, init: async () => { await waitUntil(function() { return $(".question-content-body").length !== 0; }); }, answerHook: (item) => { const type = $(item.html).find(".question-box .tag").text(); let answer = $(item.html).find(".answer-area > span:eq(1)").text(); switch (type) { case "单选": case "多选": answer = answer.split(","); item.answer = answer.map((xx) => { return item.options[xx.charCodeAt(0) - 65]; }); if (item.answer.length === 0) { return; } item.type = type === "单选" ? "0" : "1"; break; case "判断": item.type = "3"; if (answer == "T") { item.answer = ["正确"]; } if (answer == "F") { item.answer = ["错误"]; } break; } return item; } } ]; const chatglm = [ { type: "hook", name: "智普清言token获取", match: /chatglm.cn\/main\//i.test(location.href), main: (data) => { const app = data.app; const cookies = document.cookie.split(";"); let chatglm_refresh_token = ""; cookies.forEach((cookie) => { if (/chatglm_refresh_token/i.test(cookie)) { chatglm_refresh_token = cookie.split("=")[1]; } }); if (chatglm_refresh_token) { app.app.gpt.forEach((item) => { if (item.name === "GLM") { item.key = chatglm_refresh_token; } }); app.setConfig(app.app); msg("智普清言token获取成功"); } } } ]; const typeMap = { "single_selection": "单选题", "multiple_selection": "多选题", "true_or_false": "判断题", "fill_in_blank": "填空题", "short_answer": "简答题", "text": "文本", "analysis": "综合题", "matching": "匹配题", "random": "随机题", "cloze": "完形填空题" }; const guokai = [ { type: "hook", name: "国开hook", match: location.host.includes("ouchn.cn"), main: (data) => { _unsafeWindow.mainClass = getUrl(); let observer = new MutationObserver(async (mutations) => { if (_unsafeWindow.mainClass !== getUrl()) { _unsafeWindow.mainClass = getUrl(); if (_unsafeWindow.mainClass === "homework-detail-container") { await waitUntil(function() { return $(".selectDan").length !== 0; }); } vuePageChange(); observer.disconnect(); } }); if ($("body").length >= 1) { observer.observe($("body")[0], { subtree: true, attributes: true, childList: true }); } } }, // 国开答案收录 { type: "save", name: "国开答案收录旧", match: /\/exam\/([0-9]+)\/subjects#\/submission\/([0-9]+)/i.test(location.href), question: { html: "li.subject", question: ".summary-title .subject-description", options: ".subject-options li .option-content", type: ".subject-point > span:eq(0)", workType: "guokai", pageType: "guokai" }, init: async () => { await waitUntil(function() { return $(".loading-gif").hasClass("ng-hide"); }); }, answerHook: (item) => { const scope = _unsafeWindow.angular.element(item.html).scope(); const subject = scope.subject; if (subject.type === "text") { return; } let haveAnswer = false; const point = parseFloat(subject.point); const score = parseFloat(subject.score); const isT = point !== 0 && point === score; let ques = $(`<div>${subject.description}</div>`).clone(); ques.find("span.__blank__").remove(); item.question = removeHtml1(ques.html()); item.options = subject.options.map((item1) => { return removeHtml1(item1.content); }); item.type = typeChange(typeMap[subject.type]); if (subject.correctOptions && subject.correctOptions.length > 0) { item.answer = subject.correctOptions.map((item1) => { return removeHtml1(item1.content); }); haveAnswer = true; } if (subject.correct_answers && subject.correct_answers.length > 0) { item.answer = subject.correct_answers.map((item1) => { return item1.content; }); haveAnswer = true; } if (!haveAnswer && !isT && subject.type !== "true_or_false") { return; } switch (subject.type) { case "single_selection": case "multiple_selection": case "true_or_false": if (!haveAnswer) { item.answer = subject.options.filter((item2) => item2.isChosen).map((item2) => removeHtml1(item2.content)); if (item.answer.length === 0) return; if (subject.type === "true_or_false") { const answer = item.answer[0]; item.options = []; const isCorrect = isTrue(answer) ? "正确" : isFalse(answer) ? "错误" : ""; if (isCorrect) { item.answer = [isT ? isCorrect : isCorrect === "正确" ? "错误" : "正确"]; } else { item.answer = []; } } } else { if (subject.type === "true_or_false") { const answer = item.answer[0]; item.options = []; const isCorrect = isTrue(answer) ? "正确" : isFalse(answer) ? "错误" : ""; if (isCorrect) { item.answer = [isCorrect]; } } } break; case "analysis": break; case "cloze": item.options = subject.sub_subjects.map((item1) => { return item1.options.map((item2) => { return removeHtml1(item2.content); }); }).get(); break; case "fill_in_blank": if (!haveAnswer) { item.answer = subject.answers.map((item1) => { return item1.content; }); } break; } return item; } }, // 广开答案收录 { type: "save", name: "广开答案收录", match: /mod\/quiz\/review\.php/i.test(location.pathname) && ["moodle.syxy.ouchn.cn", "xczxzdbf.moodle.qwbx.ouchn.cn", "elearning.bjou.edu.cn", "whkpc.hnqtyq.cn:5678", "course.ougd.cn", "study.ouchn.cn"].includes(location.host), question: { html: ".que", question: ".qtext", options: ".answer > div", type: "", answer: ".rightanswer", workType: "guokai", pageType: "guokai" }, init: async () => { $(".specificfeedback").remove(); }, next: async () => { !$(".qn_buttons > a").last().hasClass("thispage") && $(".arrow_text").click(); }, answerHook: (item) => { const quesStatus = $(item.html).find(".info .state").text(); item.type = $(item.html).attr("class").split(" ")[1]; $(item.html).find(".qtext .accesshide").remove(); item.question = removeHtml1($(item.html).find(".qtext").html()); switch (item.type) { case "truefalse": item.type = "3"; item.$options = $(item.html).find("input[type=radio]"); item.options = $(item.html).find(".answer > div").map((index, element) => { let optionText = removeHtml1($(element).html()); return optionText.trim(); }).get(); item.answer = []; item.answer = $(item.html).find(".answer > div").map((index, element) => { if (item.$options.eq(index).prop("checked")) { return item.options[index]; } else { return ""; } }).get(); item.answer = item.answer.filter((item2) => item2 !== ""); if (item.answer.length === 0) { item.temp = removeHtml1($(item.html).find(".rightanswer").html()).replace("正确答案是", "").trim(); item.answer = [item.temp]; } else { if (!quesStatus.includes("正确")) { item.answer = item.options.filter((zzz) => !zzz.includes(item.answer[0])); } } isTrue(item.answer[0]) ? item.answer = ["正确"] : isFalse(item.answer[0]) ? item.answer = ["错误"] : item.answer = []; item.options = []; break; case "multichoice": case "multichoiceset": item.type = "1"; item.$options = $(item.html).find("input[type=checkbox]"); if (item.$options.length === 0) { item.type = "0"; item.$options = $(item.html).find("input[type=radio]"); } item.options = $(item.html).find(".answer > div").map((index, element) => { let inx = $(element).find(".answernumber").text().trim(); let optionText = removeHtml1($(element).html()); if (inx === "") { return optionText.trim(); } return optionText.split(inx)[1].trim(); }).get(); if (quesStatus.includes("正确") && !quesStatus.includes("部分正确")) { item.answer = []; item.answer = $(item.html).find(".answer > div").map((index, element) => { let inx = $(element).find(".answernumber").text().trim(); let optionText = removeHtml1($(element).html()); if (item.$options.eq(index).prop("checked") && $(element).find(".text-success").length > 0) { if (inx === "") { return optionText.trim(); } return optionText.split(inx)[1].trim(); } else { return ""; } }).get(); item.answer = item.answer.filter((item2) => item2 !== ""); } else { item.temp = removeHtml1($(item.html).find(".rightanswer").html(), false).replace("正确答案是:", "").trim(); const optionsBase = item.options.slice(0); optionsBase.sort((a2, b2) => { return b2.length - a2.length; }); item.answer = optionsBase.map((item1) => { if (item.temp.includes(item1)) { item.temp = item.temp.replace(item1, ""); return item1; } else { return ""; } }); item.answer = item.answer.filter((item2) => item2 !== ""); if (item.answer.length > 1) ; } break; case "shortanswer": item.type = "4"; item.$options = $(item.html).find("input[type=text]"); break; case "match": item.type = "24"; item.match = $(".answer tr td.text").map((index, element) => { return removeHtml1($(element).html()); }).get(); item.$options = $(".answer tr td.control select"); item.selects = $(".answer tr td.control select").map((index, element) => { let option = $(element).find("option").map((index2, element2) => { let value = $(element2).val(); let text = $(element2).text(); return { value, text }; }).get(); return [option]; }).get(); break; case "description": return; } return item; } }, { type: "ask", name: "广开形考", tips: "广开仅支持基础题型,特殊题型请手动完成", match: /mod\/quiz\/attempt\.php/i.test(location.pathname) && ["moodle.syxy.ouchn.cn", "xczxzdbf.moodle.qwbx.ouchn.cn", "elearning.bjou.edu.cn", "whkpc.hnqtyq.cn:5678", "course.ougd.cn", "study.ouchn.cn"].includes(location.host), question: { html: ".que", question: ".qtext", options: ".answer > div", type: "", workType: "guangkai", pageType: "guangkai" }, ischecked: (item) => { return Boolean(item.prop("checked")); }, questionHook: (item) => { item.type = $(item.html).attr("class").split(" ")[1]; $(item.html).find(".qtext .accesshide").remove(); item.question = removeHtml1($(item.html).find(".qtext").html()); switch (item.type) { case "truefalse": item.type = "3"; item.$options = $(item.html).find("input[type=radio]"); item.options = []; break; case "multichoice": case "multichoiceset": item.type = "1"; item.$options = $(item.html).find("input[type=checkbox]"); if (item.$options.length === 0) { item.type = "0"; item.$options = $(item.html).find("input[type=radio]"); } item.options = $(item.html).find(".answer > div").map((index, element) => { let inx = $(element).find(".answernumber").text().trim(); let optionText = removeHtml1($(element).html()); if (inx === "") { return optionText.trim(); } return optionText.split(inx)[1].trim(); }).get(); break; case "shortanswer": item.type = "4"; item.$options = $(item.html).find("input[type=text]"); break; case "match": item.type = "24"; item.match = $(".answer tr td.text").map((index, element) => { return removeHtml1($(element).html()); }).get(); item.$options = $(".answer tr td.control select"); item.selects = $(".answer tr td.control select").map((index, element) => { let option = $(element).find("option").map((index2, element2) => { let value = $(element2).val(); let text = $(element2).text(); return { value, text }; }).get(); return [option]; }).get(); case "essay": item.type = "4"; item.$options = $(item.html).find("iframe"); break; case "description": return; } return item; }, setAnswer: (item) => { switch (item.type) { case "4": $(item.html).find("input.form-control").each(function(index, element) { $(element).val(item.answer[index]); }); $(item.html).find("iframe:eq(0)").contents().find("body").html(item.answer[0]); return false; case "3": item.ques.$options.each((index, element) => { const pdtext = $(element).parent().find("label").text(); if (typeof item.answer === "object") { item.answer = item.answer[0]; } if (isTrue(item.answer) && isTrue(pdtext)) { $(element).click(); return false; } else if (isFalse(item.answer) && isFalse(pdtext)) { $(element).click(); return false; } return true; }); default: return true; } }, finish: (item) => { $(".submitbtns .btn-primary").click(); } }, { type: "ask", name: "国开专题测验", match: location.host === "lms.ouchn.cn" && /\/exam\/([0-9]+)\/subjects/i.test(location.pathname) && !/\/exam\/([0-9]+)\/subjects#\/submission\/([0-9]+)/i.test(location.href), question: { html: "li.subject", question: ".summary-title .subject-description", options: ".subject-options li .option-content", type: ".summary-sub-title span:eq(0)", workType: "guokai", pageType: "guokai" }, init: async () => { await waitUntil(function() { return $(".loading-gif").hasClass("ng-hide") && $(".hd .examinee .submit-label").eq(0).text() === ""; }); }, ischecked: (item) => { return Boolean(item.parent().find("input").eq(-1).prop("checked")); }, questionHook: (item) => { const scope = _unsafeWindow.angular.element(item.html).scope(); const subject = scope.subject; if (subject.type === "text") { return; } item.type = typeChange(typeMap[subject.type]); let ques = $(`<div>${subject.description}</div>`).clone(); ques.find("span.__blank__").remove(); item.question = removeHtml1(ques.html()); subject.options = subject.options.sort((a2, b2) => { return a2.sort - b2.sort; }); item.options = subject.options.map((item1) => { return removeHtml1(item1.content); }); log(item.type, subject.type); switch (subject.type) { case "cloze": item.options = subject.sub_subjects.map((item1) => { return item1.options.map((item2) => { return removeHtml1(item2.content); }); }); item.$options = $(item.html).find("select"); case "true_or_false": item.options = []; } item.subject = subject; item.scope = scope; return item; }, setAnswer: (item) => { log(item.ques, "success"); switch (item.type) { case "2": log($(item.html).find(".___answer"), "success"); $(item.html).find(".___answer").each((index, element) => { $(element).html(item.answer[index]); item.ques.scope.subject.answers[index].content = item.answer[index]; item.ques.scope.onChangeSubmission(item.ques.subject); }); return false; case "4": $(item.html).find(".simditor-body.needsclick>p").each(function(index, element) { $(element).html(item.answer[index]); item.ques.subject.answered_content = item.answer[index]; }); item.ques.scope.onChangeSubmission(item.ques.subject); return false; case "14": item.ques.subject.sub_subjects.forEach((sub_subject, index) => { let an2 = item.answer[index]; sub_subject.options.forEach((option, index1) => { if (option.content === an2) { sub_subject.answeredOption = String(option.id); item.ques.scope.onChangeSubmission(sub_subject); $(item.html).find(`input[value="${option.id}"]`).click(); $(item.html).find(`button:eq(${index})>span:eq(1)`).text(an2); } }); }); return false; } return true; } }, { type: "save", name: "上海开放收录", match: () => location.host === "l.shou.org.cn" && location.href.includes("assignment/history.aspx?homeWorkId"), question: { html: ".e-q-body", question: ".ErichText", options: "ul>li>.ErichText", type: ".question-box .tag", workType: "shou", pageType: "shou" }, init: async () => { }, answerHook: (item) => { item.$options = $(item.html).find("ul>li"); let an2 = $(item.html).find("ul>li.checked").map((index, element) => { return removeHtml1($(element).find(".ErichText").html()); }).get(); const isT = $(item.html).find(".e-q-right").length > 0; item.answer = an2.filter((item2) => item2 !== ""); const ckAnswer = $(item.html).find(".e-ans-ref .e-ans-r").map((index, element) => { return removeHtml1($(element).html()); }).get(); let ans = ckAnswer.map((item1) => { let index = item1.charCodeAt() - 65; return item.options[index]; }).filter((item1) => item1 !== "" && item1 !== void 0); switch ($(item.html).attr("data-questiontype")) { case "2": item.type = "1"; break; case "1": item.type = "0"; break; case "3": item.type = "3"; item.answer = $(item.html).find("ul>li.checked").map((index, element) => { return removeHtml1($(element).html()); }).get(); item.options = []; isTrue(item.answer[0]) ? item.answer = ["正确"] : isFalse(item.answer[0]) ? item.answer = ["错误"] : item.answer = []; break; case "11": item.type = "19"; const quesList = $(item.html).find("form").map((index, element) => { return { type: "0", question: removeHtml1($(element).find(".e-q-q .ErichText").html()), options: $(element).find("ul li .ErichText").map((index2, element2) => { return removeHtml1($(element2).html()); }).get() }; }).get(); ans = ans.length > 0 ? isTrue(ans[0]) ? ["正确"] : isFalse(ans[0]) ? ["错误"] : [] : []; item.options = quesList; default: log("暂未适配当前题型", $(item.html).attr("data-questiontype"), "error"); return; } if (ans.length > 0) { item.answer = ans; return item; } if (!isT && item.type === "3" && item.answer.length > 0) { item.answer = isTrue(item.answer[0]) ? ["错误"] : isFalse(item.answer[0]) ? ["正确"] : []; } else if (!isT) { return; } return item; } }, { type: "ask", name: "上海开放作业", tips: "上海开放大学目前仅支持选择判断题,其他题型请手动完成", match: () => location.host === "l.shou.org.cn" && location.href.includes("assignment/preview.aspx?homeWorkId"), question: { html: ".e-q-body", question: ".ErichText", options: "ul>li>.ErichText", type: ".question-box .tag", workType: "shou", pageType: "shou" }, init: async () => { await waitUntil(function() { return $(".e-q-body").length !== 0; }); }, next: () => { }, ischecked: (item) => { return item.parent().parent().hasClass("is-checked"); }, questionHook: (item) => { switch ($(item.html).attr("data-questiontype")) { case "2": item.type = "1"; break; case "1": item.type = "0"; break; case "3": item.type = "3"; item.$options = $(item.html).find("ul>li"); break; default: log("暂未适配当前题型", $(item.html).attr("data-questiontype"), "error"); return; } return item; }, setAnswer: (item) => { return true; }, finish: (item) => { } } ]; const chengjiaoyun = [ { type: "ask", name: "成教云考试", tips: "成教云仅支持选择判断,其他题型请反馈给作者", match: () => location.href.includes("exam/student/exam2/doexam"), question: { html: () => { return $(".ui-paper-iframe").contents().find(".ui-question"); }, question: ".ui-question-content-wrapper", options: ".ui-question-options li .ui-question-content-wrapper", type: ".ui-question-group-title", workType: "chengjiaoyun", pageType: "chengjiaoyun" }, init: async () => { await waitUntil(function() { let exists = $(".ui-paper-iframe").contents().find(".ui-question").length > 0; return exists; }); }, toquestion: (index) => { $(`.ui-card-questions ul li:eq(${index - 1})`).click(); }, next: async () => { $("#next-btn").click(); }, ischecked: (item) => { return item.hasClass("ui-option-selected"); }, questionHook: (item) => { let type = $(item.html).parent().find(".ui-question-group-title").text().split(".")[1].trim(); item.$options = $(item.html).find(".ui-question-options li>span"); switch (type) { case "单选题": item.type = "0"; break; case "多选题": item.type = "1"; break; case "判断题": item.type = "3"; item.options = []; break; } return item; }, setAnswer: (item) => { switch (item.type) { case "3": let bold = item.answer; item.ques.$options.each((index, element) => { if (isTrue(bold) && isTrue(removeHtml1($(element).parent().html()))) { $(element).click(); } if (isFalse(bold) && isFalse(removeHtml1($(element).parent().html()))) { $(element).click(); } }); return false; default: return true; } }, finish: (item) => { } }, { type: "save", name: "成教云收录", match: () => location.href.includes("exam/student/exam2/doview"), question: { html: () => { return $(".ui-paper-iframe").contents().find(".ui-question"); }, question: ".ui-question-content-wrapper", options: ".ui-question-options li .ui-question-content-wrapper", type: ".ui-question-group-title", workType: "chengjiaoyun", pageType: "chengjiaoyun" }, init: async () => { await waitUntil(function() { let exists = $(".ui-paper-iframe").contents().find(".ui-question").length > 0; log($(".ui-paper-iframe").contents().find(".ui-question")); return exists; }); }, answerHook: (item) => { let type = $(item.html).parent().find(".ui-question-group-title").text().split(".")[1].trim(); item.$options = $(item.html).find(".ui-question-options li>span"); item.answer = $(item.html).find(".ui-question-options li.ui-correct-answer .ui-question-content-wrapper").map((_index, item2) => { return removeHtml1($(item2).html()); }).get(); switch (type) { case "单选题": item.type = "0"; break; case "多选题": item.type = "1"; break; case "判断题": item.type = "3"; item.options = []; item.answer = isTrue(item.answer[0]) ? ["正确"] : isFalse(item.answer[0]) ? ["错误"] : []; break; } return item; } } ]; const jsou = [ { type: "hook", name: "hook", match: () => location.host === "xuexi.jsou.cn" && location.href.includes("newHomework/showHomeworkByStatus") && location.href.includes("checked=true"), main: (data) => { _unsafeWindow.mainClass = $("#homeworkHistory").find(".active").attr("id"); let observer = new MutationObserver(async (mutations) => { if (_unsafeWindow.mainClass !== $("#homeworkHistory").find(".active").attr("id")) { _unsafeWindow.mainClass = $("#homeworkHistory").find(".active").attr("id"); await waitUntil(function() { return $(".layui-layer-shade").length === 0; }); vuePageChange(); observer.disconnect(); } for (let mutation of mutations) { if (mutation.type === "attributes" && mutation.attributeName === "class") { if (mutation.target.textContent && (mutation.target.textContent.includes("下一题") || mutation.target.textContent.includes("上一题"))) { observer.disconnect(); vuePageChange(); } } } }); if ($("body").length >= 1) { observer.observe($("body")[0], { subtree: true, attributes: true, childList: true }); } } }, { type: "ask", name: "江苏开放大学答题", tips: "江开适配中,目前仅支持选择、判断题、填空题,其他题型请反馈账号给作者", match: () => location.host === "xuexi.jsou.cn" && location.href.includes("/showHomeworkByStatus") && location.href.includes("checked=false"), question: { html: ".insert", question: ".window-title", options: ".questionId-option li > div:not(.numberCover)", type: ".questionDiv >div:eq(0)", workType: "jsou", pageType: "jsou" }, init: async () => { document.addEventListener("copy", function(event2) { event2.stopImmediatePropagation(); layer.msg("复制成功", { icon: 4 }); event2.clipboardData.setData("text/plain", window.getSelection().toString()); }); document.addEventListener("paste", () => { event.stopImmediatePropagation(); let paste = (event.clipboardData || window.clipboardData).getData("text"); layer.msg("粘贴成功", { icon: 4 }); document.execCommand("insertText", false, paste); }); }, next: () => { }, ischecked: (item) => { return item.parent().parent().hasClass("is-checked"); }, questionHook: (item) => { item.type = $(item.html).find(".questionDiv >div:eq(1)").text().trim(); item.type = typeChange(item.type); item.$options = $(item.html).find(".questionId-option li .numberCover"); return item; }, setAnswer: (item) => { switch (item.type) { case "2": item.$options = $(item.html).find(".questionTitle input"); if (item.$options.length == item.answer.length) { item.$options.each((index, element) => { $(element).val(item.answer[index]); }); return false; } } return true; }, finish: (item) => { } }, // 江开收录 { type: "save", name: "江苏开放大学收录", match: () => location.host === "xuexi.jsou.cn" && location.href.includes("newHomework/showHomeworkByStatus") && location.href.includes("checked=true"), question: { html: ".insert", question: ".window-title", options: "#questionId-option li > div:not(.numberCover)", type: ".questionDiv >div:eq(0)", workType: "jsou", pageType: "jsou" }, init: async () => { }, answerHook: (item) => { item.type = $(item.html).find(".questionDiv >div:eq(1)").text(); let score = $(item.html).find(".questionDiv >div").text().match(/分值(\d+)分/)[1]; let score2 = $(item.html).find(".questionDiv >div").text().match(/得分:(\d+)/)[1]; item.type = typeChange(item.type); let isT = score == score2 && score2 !== 0; if (!isT && item.type != 3) { return; } switch (item.type) { case "0": case "1": case "3": item.answer = $(item.html).find(".answer .correctAnswer").text().trim().split(";").map((xx) => { return item.options[xx.charCodeAt(0) - 65]; }); item.answer = item.answer.filter((x2) => x2); if (item.answer.length == 0) { item.answer = $(item.html).find(".answer .studentAnswer").text().trim().split(";").map((xx) => { return item.options[xx.charCodeAt(0) - 65]; }); } item.answer = item.answer.filter((x2) => x2); if (item.type == 3) { item.options = []; let answer = item.answer[0]; if (isFalse(answer)) item.answer = "错误"; else if (isTrue(answer)) item.answer = "正确"; else return; if (["正确", "错误"].includes(item.answer) && !isT) { item.answer = item.answer === "正确" ? "错误" : "正确"; } } break; case "2": item.options = []; item.answer = $(item.html).find(".answer .correctAnswer").text().trim().split(";"); item.answer = item.answer.filter((x2) => x2); if (item.answer.length == 0) { item.answer = $(item.html).find(".answer .studentAnswer").text().trim().split(";"); } item.answer = item.answer.filter((x2) => x2); break; default: return; } return item; } } ]; const zhijiaoyun = [ { type: "hook", name: "hook", match: location.host === "spoc-exam.icve.com.cn" || location.host.includes("exam.courshare.cn"), main: (data) => { _unsafeWindow.mainClass = $(".q_content").first().attr("id"); let observer = new MutationObserver(async (mutations) => { if (_unsafeWindow.mainClass !== $(".q_content").first().attr("id")) { _unsafeWindow.mainClass = $(".q_content").first().attr("id"); if (_unsafeWindow.mainClass === "homework-detail-container") { await waitUntil(function() { return $(".q_content").length !== 0; }); } vuePageChange(); observer.disconnect(); } for (let mutation of mutations) { if (mutation.type === "attributes" && mutation.attributeName === "class") { if (mutation.target.textContent && (mutation.target.textContent.includes("下一题") || mutation.target.textContent.includes("上一题"))) { observer.disconnect(); vuePageChange(); } } } }); if ($("#examPage").length >= 1) { observer.observe($("#examPage")[0], { subtree: true, attributes: true, childList: true }); } } }, { type: "hook", name: "hook", match: location.host === "zjy2.icve.com.cn", main: (data) => { $(".minimized-dialog img").css({ "z-index": "999999" }); _unsafeWindow.mainClass = $(".r.rFu>div:eq(0)").first().attr("class"); let observer = new MutationObserver(async (mutations) => { if (_unsafeWindow.mainClass !== $(".r.rFu>div:eq(0)").first().attr("class")) { _unsafeWindow.mainClass = $(".r.rFu>div:eq(0)").first().attr("class"); if (_unsafeWindow.mainClass === "homework-detail-container") { await waitUntil(function() { return $(".q_content").length !== 0; }); } vuePageChange(); observer.disconnect(); } }); if ($("#app").length >= 1) { observer.observe($("#app")[0], { subtree: true, attributes: true, childList: true }); } } }, { type: "ask", name: "职教云作业", tips: "职教云只支持选择、判断题,其他题型请反馈给作者", match: () => location.href.includes("examflow_index.action"), question: { html: ".q_content", question: ".divQuestionTitle", options: ".questionOptions > div", type: ".question-box .tag", workType: "zhijiaoyun", pageType: "zhijiaoyun" }, init: async () => { await waitUntil(function() { return $(".q_content").length !== 0; }); }, next: () => { }, ischecked: (item) => { return item.parent().parent().hasClass("is-checked"); }, questionHook: (item) => { var _a2, _b; item.question = removeHtml1($(item.html).find(".divQuestionTitle").html()); let qid = $(item.html).find("[name='quesId']").attr("id"); let type = (_b = (_a2 = document.getElementById(`questionId[${qid}]`)) == null ? void 0 : _a2.getAttribute("answertype")) == null ? void 0 : _b.trim(); let inx = $(item.html).find("span[name^='questionIndex']").text().trim() + "、"; let score = $(item.html).find(".q_score").text().trim(); item.question = item.question.replace(inx, "").replace(score, "").trim(); switch (type) { case "单项选择题": case "单选题": case "singlechoice": item.type = "0"; break; case "多项选择题": case "多选题": case "multichoice": item.type = "1"; break; case "判断题": case "bijudgement": item.type = "3"; break; case "fillblank": item.type = "2"; item.question = removeHtml1($(item.html).find("[name='fillblankTitle']").html()); break; } item.options = $(item.html).find(".questionOptions>div").map((_inx, item2) => { let inx2 = $(item2).find(".option_index").text().trim(); return removeHtml1($(item2).html()).replace(inx2, "").trim(); }).get(); item.$options = $(item.html).find(".questionOptions>div input"); return item; }, setAnswer: (item) => { switch (item.type) { case "2": $(item.html).find(".fillblank_input > input").each((inx, xx) => { $(xx).val(item.answer[inx]); }); return false; } return true; }, finish: (item) => { $(".paging_next").click(); } }, { type: "save", name: "职教云收录", match: () => location.href.includes("examrecord_recordDetail.action"), question: { html: ".q_content", question: ".divQuestionTitle", options: ".questionOptions>div.q_option_readonly", type: ".question-box .tag", workType: "zhijiaoyun", pageType: "zhijiaoyun" }, init: async () => { await waitUntil(function() { return $(".q_content").length !== 0; }); }, answerHook: (item) => { const isT = $(item.html).find(".exam.icon_examright").length; const qid = $(item.html).find("input[name='quesId']:not([id='']").attr("id"); const type = $(`input#qId${qid}`).attr("qtype"); const inx = $(item.html).find("span[name^='questionIndex']").text().trim() + "、"; const score = $(item.html).find(".q_score").text().trim(); item.question = item.question.replace(inx, "").replace(score, "").trim(); item.options = $(item.html).find(".questionOptions>div.q_option_readonly").map((_inx, xx) => { let opInx = $(xx).find("span[name='optionIndexName']").text().trim(); return removeHtml1($(xx).html()).replace(opInx, "").trim(); }).get(); switch (type) { case "单项选择题": case "单选题": case "singlechoice": item.type = "0"; break; case "多项选择题": case "多选题": case "multichoice": item.type = "1"; break; case "判断题": case "bijudgement": item.type = "3"; break; case "fillblank": item.type = "2"; item.question = removeHtml1($(item.html).find(".answerOption>span:eq(0)").html()); break; } switch (item.type) { case "0": case "1": item.answer = $(item.html).find('.exam_rightAnswer .exam_answers_tit>span[name="rightAnswer"]').text().trim().split("").map((xx) => { return item.options[xx.charCodeAt(0) - 65]; }); log(item.answer, "success"); if (item.answer.length == 0) { if (isT == 0) { return; } item.answer = $(item.html).find('.exam_stu_answer span[name="stuAnswer"]').text().trim().split("").map((xx) => { return item.options[xx.charCodeAt(0) - 65]; }); } break; case "2": if (isT == 0) { return; } item.answer = $(item.html).find("span.fillblank_answer").map((inx2, xx) => { return removeHtml1($(xx).html()); }).get(); if (item.answer.length !== isT) { item.answer = []; return; } break; case "3": item.options = []; let answer = $(item.html).find('.exam_stu_answer span[name="stuAnswer"]').text().trim(); if (["正确", "错误"].includes(answer)) { if (isT) { item.answer = [answer]; } else { item.answer = [answer === "正确" ? "错误" : "正确"]; } } break; } return item; } } ]; const cnzx = [ { type: "ask", name: "川农在线答题", tips: "川农在线仅支持选择判断题,其他题型请反馈", match: () => (location.host === "any.cnzx.info:81" || location.host === "zice.cnzx.info") && location.href.includes("KaoShi/ShiTiYe.aspx"), question: { html: "li.question", question: ".wenti >p.stem", options: ".wenti > ol > li", type: ".question_head > span:eq(0)", workType: "cnzx", pageType: "cnzx" }, init: async () => { }, next: () => { }, ischecked: (item) => { return item.find("input").prop("checked"); }, questionHook: (item) => { item.$options = $(item.html).find(".wenti > ol > li input"); if (item.options.length !== 0) { item.type = item.$options.eq(0).attr("type") === "radio" ? "0" : "1"; if (item.options.length === 2 && item.options.includes("正确") && item.options.includes("错误")) { item.type = "3"; item.options = []; } } return item; }, setAnswer(item) { switch (item.type) { case "3": $(item.html).find(".wenti > ol > li").each((i, element) => { if (isTrue(item.answer) && isTrue(removeHtml1($(element).html()))) { item.ques.$options.eq(i).click(); } if (isFalse(item.answer) && isFalse(removeHtml1($(element).html()))) { item.ques.$options.eq(i).click(); } }); return false; } return true; }, finish: (item) => { $("li.paginationjs-next.J-paginationjs-next").click(); } }, { type: "save", name: "收录", match: () => location.host === "zice.cnzx.info" && location.href.includes("ZaiXianLianXi.aspx"), question: { html: ".ShiTi>.ShiTiMiaoShu", question: ".ShiTiMiaoShu", options: ".el-radio-group label .label,.el-checkbox-group label .label", type: ".question-box .tag", workType: "cnzx", pageType: "cnzx" }, init: async () => { }, answerHook: (item) => { log($(item.html).text()); item.question = removeHtml1(titleClean(removeHtml1($(item.html).html()))); let type = $("ul.TiXing>li.DangQianTiXing:eq(0)>a").text(); let answer = []; let option = $(item.html).next(); item.options = removeStartChar(option.find("ul li").map((_i, e) => { if ($(e).hasClass("DaAn1")) { answer.push(_i); } return titleClean(removeHtml1($(e).html())); }).get()); item.answer = answer.map((i) => { return item.options[i]; }); switch (type) { case "单选题": case "词汇与结构": case "交际用语": item.type = "0"; break; case "多选题": item.type = "1"; break; case "判断题": item.type = "3"; item.options = []; item.answer = isTrue(item.answer[0]) ? ["正确"] : isFalse(item.answer[0]) ? ["错误"] : []; break; } return item; } } ]; const yktDecode = (table, table1, text) => { let reg = /<span class="xuetangx-com-encrypted-font">(.+?)<\/span>/g; let fontList = text.match(reg); if (fontList) { fontList.forEach((font) => { reg = /<span class="xuetangx-com-encrypted-font">(.+?)<\/span>/; let fontStr = reg.exec(font); if (fontStr && fontStr.length > 1) { let zz = fontStr[1]; let zz1 = zz.split("").map((item) => { return table[table1[item]]; }).join(""); text = text.replace(fontStr[0], zz1); } }); } return text; }; const ttfDownload = async (url) => { return new Promise((resolve) => { _GM_xmlhttpRequest({ method: "GET", url, responseType: "arraybuffer", onload: function(response) { let tables = {}; const font = Typr$1.parse(response.response); for (let i = 19968; i <= 40959 + 1; i++) { let char = String.fromCharCode(i); let glyphIndex = Typr$1.U.codeToGlyph(font, i); const path = Typr$1.U.glyphToPath(font, glyphIndex); let hash = md5Exports.md5(JSON.stringify(path)); tables[char] = hash; } resolve(tables); }, onerror: function(error) { resolve({}); } }); }); }; const ykt = [ { type: "hook", name: "hook", match: location.host.includes("yuketang.cn"), main: (data) => { _unsafeWindow.mainClass = $("#app")[0].__vue__.$route.name; log(_unsafeWindow.mainClass, "success"); let observer = new MutationObserver(async (mutations) => { if (_unsafeWindow.mainClass !== $("#app")[0].__vue__.$route.name) { _unsafeWindow.mainClass = $("#app")[0].__vue__.$route.name; vuePageChange(); observer.disconnect(); } }); if ($("#app").length >= 1) { observer.observe($("#app")[0], { subtree: true, attributes: true, childList: true }); } } }, { type: "ask", name: "雨课堂考试", tips: "雨课堂暂时未开发完,仅支持选择判断", match: () => location.host.includes("yuketang.cn") && location.href.includes("/exam/"), question: { html: ".exercise-item", question: ".content", options: ".el-checkbox__label,.el-radio__label", type: ".question-box .tag", workType: "xinwei", pageType: "xinwei" }, init: async () => { await waitUntil(function() { return $(".exercise-item").length !== 0; }); }, next: () => { }, ischecked: (item) => { return item.parent().hasClass("is-checked"); }, questionHook: (item) => { const ques = item.html.__vue__.item; item.type = typeChange(ques.TypeText); item.question = titleClean(removeHtml1(ques.Body)).trim(); const options = {}; ques.Options && ques.Options.forEach((item1) => { options[item1.key] = removeHtml1(item1.value); }); item.options = ques.Options.sort((a2, b2) => { return a2.key.charCodeAt(0) - b2.key.charCodeAt(0); }).map((item1) => { return removeHtml1(item1.value); }); switch (item.type) { case "0": case "1": break; case "2": item.options = []; break; case "3": item.options = []; break; } return item; }, setAnswer: (item) => { switch (item.type) { case "3": item.ques.$options.get().forEach((element) => { isFalse(item.answer) && $(element).find(".el-icon-close").length > 0 && element.click(); isTrue(item.answer) && $(element).find(".el-icon-check").length > 0 && element.click(); }); return false; } return true; }, finish: (item) => { } }, { type: "ask", name: "雨课堂作业", tips: "雨课堂仅兼容选择判断,其他题型请反馈给作者。雨课堂作业请务必开启自动切换,否则无法自动答题或导致答题错乱", match: () => location.host.includes("yuketang.cn") && location.href.includes("cloud/student/exercise"), question: { html: ".subject-item.J_order", question: ".content", options: ".el-radio__label", type: ".question-box .tag", workType: "yuketang", pageType: "yuketang" }, init: async () => { await waitUntil(function() { return $(".el-icon-loading").length == 0 && $(".container-problem").length > 0 && $(".container-problem")[0].__vue__ && $(".container-problem")[0].__vue__.exerciseList; }); const yktQues = $(".container-problem")[0].__vue__.exerciseList; if (!yktQues) { msg("未找到题目"); return; } msg("正在下载字体包,请耐心等待"); _unsafeWindow.ttfTable = await ttfDownload(yktQues.font); _unsafeWindow.problems = yktQues.problems; }, // 跳转指定 toquestion: (index) => { $(`.aside-body ul>li:eq(${index}) .subject-item`).click(); }, // 下一题 next: () => { $('.el-button.el-button--text:contains("下一题")').click(); }, ischecked: (item) => { return item.hasClass("is-checked"); }, questionHook: (item, index) => { if ($(".el-button.el-button--info.is-disabled.is-plain").length > 0) { return; } const problem = _unsafeWindow.problems[index]; const ttfTable = _unsafeWindow.ttfTable; const content = problem.content; problem.user; const table = JSON.parse(_GM_getResourceText("ttf2")); item.question = titleClean(removeHtml1(yktDecode(table, ttfTable, content.Body))).trim(); item.type = typeChange(content.TypeText); item.$options = () => { return $(".item-body ul>li>label"); }; const options = {}; if (content.Options) { content.Options.map((item1) => { options[item1.key] = removeHtml1(yktDecode(table, ttfTable, item1.value)); }); item.options = content.Options.sort( (a2, b2) => { return a2.key.charCodeAt(0) - b2.key.charCodeAt(0); } ).map((item1) => { return removeHtml1(yktDecode(table, ttfTable, item1.value)); }); } switch (item.type) { case "0": case "1": break; case "2": item.question = removeHtml1(item.question.replace(/\[填空\d\]/g, "")); break; case "3": item.options = []; break; default: log("未知题型", item.type, "error"); break; } return item; }, setAnswerHook: (item) => { }, setAnswer: (item) => { switch (item.type) { case "3": $(".item-body ul>li").get().forEach((element) => { isFalse(item.answer) && $(element).find('use[*|href="#icon--tiankongticuowu"]').length > 0 && $(element).find("label").click(); isTrue(item.answer) && $(element).find('use[*|href="#icon--tiankongtizhengque"]').length > 0 && $(element).find("label").click(); }); return false; } return true; }, finish: (item) => { } }, { type: "save", name: "考试收录", match: () => location.host.includes("yuketang.cn") && location.href.includes("/result/"), question: { html: ".subject-item > .result_item", question: "h4.clearfix.exam-font", options: "ul.list-unstyled li", type: ".item-type", workType: "yuketang", pageType: "yuketang" }, init: async () => { await waitUntil(function() { return $(".subject-item").length; }); }, answerHook: (item, index) => { const ques = item.html.__vue__.item; item.type = typeChange(ques.TypeText); const options = {}; if (ques.Options) { ques.Options.forEach((item1) => { options[item1.key] = removeHtml1(item1.value); }); item.options = ques.Options.sort((a2, b2) => { return a2.key.charCodeAt(0) - b2.key.charCodeAt(0); }).map((item1) => { return removeHtml1(item1.value); }); } item.question = titleClean(removeHtml1(ques.Body)).trim(); switch (item.type) { case "0": case "1": if (typeof ques.Answer === "string") { item.answer = ques.Answer.split("").map((item2) => { return options[item2]; }); } else if (typeof ques.Answer === "object") { item.answer = ques.Answer.map((item2) => { return options[item2]; }); } break; case "2": log(ques.Blanks, "error"); item.answer = ques.Blanks.map((aa) => { return removeHtml1(aa.Answers[0]); }); break; case "3": item.options = []; isTrue(ques.Answer[0]) ? item.answer = ["正确"] : isFalse(ques.Answer[0]) ? item.answer = ["错误"] : item.answer = []; break; } return item; } }, { type: "save", name: "作业收录", match: () => location.host.includes("yuketang.cn") && location.href.includes("cloud/student/exercise"), question: { html: ".dot", question: "h4.clearfix.exam-font", options: "ul.list-unstyled li", type: ".item-type", workType: "yuketang", pageType: "yuketang" }, init: async () => { await waitUntil(function() { return $(".el-icon-loading").length == 0 && $(".container-problem").length > 0 && $(".container-problem")[0].__vue__ && $(".container-problem")[0].__vue__.exerciseList; }); await waitUntil(function() { return $(".el-button.el-button--info.is-disabled.is-plain").length != 0; }); const yktQues = $(".container-problem")[0].__vue__.exerciseList; if (!yktQues) { msg("未找到题目"); return; } msg("正在下载字体包,请耐心等待"); _unsafeWindow.ttfTable = await ttfDownload(yktQues.font); _unsafeWindow.problems = yktQues.problems; log($(".container-problem")[0].__vue__.exerciseList, "success"); }, answerHook: (item, index) => { const problem = _unsafeWindow.problems[index]; const ttfTable = _unsafeWindow.ttfTable; const content = problem.content; const user = problem.user; const table = JSON.parse(_GM_getResourceText("ttf2")); item.question = titleClean(removeHtml1(yktDecode(table, ttfTable, content.Body))).trim(); item.type = typeChange(content.TypeText); const options = {}; if (content.Options) { content.Options.map((item1) => { options[item1.key] = removeHtml1(yktDecode(table, ttfTable, item1.value)); }); item.options = content.Options.sort( (a2, b2) => { return a2.key.charCodeAt(0) - b2.key.charCodeAt(0); } ).map((item1) => { return removeHtml1(yktDecode(table, ttfTable, item1.value)); }); } switch (item.type) { case "0": case "1": if (typeof user.answer === "string") { item.answer = user.answer.split("").map((item2) => { return options[item2]; }); } else if (typeof user.answer === "object") { item.answer = user.answer.map((item2) => { return options[item2]; }); } break; case "2": item.question = removeHtml1(item.question.replace(/\[填空\d\]/g, "")); item.answer = content.Blanks.map((xx) => { return removeHtml1(xx[0]); }); item.answer = item.answer.filter((item2) => { return item2 !== "undefined"; }); if (item.answer.length != content.blank_count) { log("填空题数量不对", item.answer, "error"); item.answer = []; log(user.answers, "error"); item.answer = Object.values(user.answers).map((xx) => { return removeHtml1(xx[0]); }); } break; case "3": item.options = []; isTrue(user.answer[0]) ? item.answer = ["正确"] : isFalse(user.answer[0]) ? item.answer = ["错误"] : item.answer = []; break; } return item; } } ]; const ahjxjy = [ { type: "ask", name: "安徽继续教育答题", tips: "该平台仅支持单选、多选、判断题型,其他题型暂不支持", match: () => location.host === "main.ahjxjy.cn" && (location.href.includes("study/html/content/studying/?courseOpenId=") || location.href.includes("study/html/content/sxsk/?courseOpenId=")), question: { html: ".e-q-body>.e-q", question: ".ErichText", options: "ul>li>.ErichText", type: ".question-box .tag", workType: "ahjxjy", pageType: "ahjxjy" }, init: async () => { await waitUntil(function() { return isExist(".e-q-body>.e-q") && isExist(".e-save"); }); if (!isExist(".photo-time")) { return false; } }, ischecked: (item) => { return item.parent().parent().hasClass("is-checked"); }, questionHook: (item) => { item.type = $(item.html).parent().parent().attr("id").trim(); switch (item.type) { case "2": item.type = "1"; break; case "1": item.type = "0"; break; case "3": item.type = "3"; item.$options = $(item.html).find("ul>li"); break; default: log("暂未适配当前题型", item.type, "error"); return; } return item; }, setAnswer: (item) => { return true; }, finish: (item) => { } }, { type: "save", name: "安徽继续教育收录", tips: "该平台仅支持单选、多选、判断题型,其他题型暂不支持", match: () => location.host === "main.ahjxjy.cn" && (location.href.includes("study/html/content/studying/?courseOpenId=") || location.href.includes("study/html/content/sxsk/?courseOpenId=")), question: { html: ".e-q-body>.e-q", question: ".ErichText", options: "ul>li>.ErichText", type: ".question-box .tag", workType: "ahjxjy", pageType: "ahjxjy" }, init: async () => { await waitUntil(function() { log(isExist(".e-save")); return isExist(".e-q-body>.e-q") && isExist(".e-save"); }); if (!isExist(".totalscore")) { return false; } }, answerHook: (item) => { item.type = $(item.html).parent().parent().attr("id").trim(); item.$options = $(item.html).find("ul>li"); let an2 = $(item.html).find("ul>li.checked").map((index, element) => { return removeHtml1($(element).find(".ErichText").html()); }).get(); const isT = $(item.html).find(".e-q-right").length > 0; item.answer = an2.filter((item2) => item2 !== ""); let ckAnswer = $(item.html).find(".e-ans-ref .e-ans-r").map((index, element) => { return removeHtml1($(element).html()); }).get(); if (ckAnswer.length === 1 && ckAnswer[0].length > 1) { ckAnswer = ckAnswer[0].split("、"); } let ans = ckAnswer.map((item1) => { let index = item1.charCodeAt() - 65; return item.options[index]; }).filter((item1) => item1 !== "" && item1 !== void 0); switch (item.type) { case "2": item.type = "1"; break; case "1": item.type = "0"; break; case "3": item.type = "3"; item.answer = $(item.html).find("ul>li.checked").map((index, element) => { return removeHtml1($(element).html()); }).get(); item.options = []; isTrue(item.answer[0]) ? item.answer = ["正确"] : isFalse(item.answer[0]) ? item.answer = ["错误"] : item.answer = []; break; case "11": item.type = "19"; const quesList = $(item.html).find("form").map((index, element) => { return { type: "0", question: removeHtml1($(element).find(".e-q-q .ErichText").html()), options: $(element).find("ul li .ErichText").map((index2, element2) => { return removeHtml1($(element2).html()); }).get() }; }).get(); ans = ans.length > 0 ? isTrue(ans[0]) ? ["正确"] : isFalse(ans[0]) ? ["错误"] : [] : []; item.options = quesList; default: log("暂未适配当前题型", item.type, "error"); return; } if (ans.length > 0) { item.answer = ans; return item; } if (!isT && item.type === "3" && item.answer.length > 0) { item.answer = isTrue(item.answer[0]) ? ["错误"] : isFalse(item.answer[0]) ? ["正确"] : []; } else if (!isT) { return; } return item; } } ]; const qingshu = [ { type: "hook", name: "青书学堂考试外部收录", match: location.host === "degree.qingshuxuetang.com" && location.href.includes("Student/ExamInstruction"), main: (data) => { } }, { type: "save", name: "青书作业答题收录", match: () => location.host === "degree.qingshuxuetang.com" && (location.href.includes("Student/ExercisePaper?courseId=") || location.href.includes("Student/ViewQuiz?quizId=")), question: { html: ".paper-container > .question-detail-container", question: ".question-detail-description", options: ".question-detail-options .question-detail-option .option-description-preview", type: ".question-detail-type-desc", workType: "qingshu", pageType: "qingshu" }, init: async () => { await waitUntil(function() { return isExist(".question-detail-container") && _unsafeWindow.qsques; }); }, answerHook: (item, index) => { const ques = _unsafeWindow.qsques[index]; item.question = removeHtml1(ques.description); item.options = ques.options ? ques.options.map((v2) => { return removeHtml1(v2.description); }) : []; item.type = typeChange(ques.typeDesc); item.answer = ques.solution.split("").map((v2) => { return item.options[v2.charCodeAt(0) - 65]; }); switch (item.type) { case "3": item.options = []; item.answer = isTrue(item.answer[0]) ? ["正确"] : isFalse(item.answer[0]) ? ["错误"] : [""]; break; case "15": item.options = []; item.answer = []; ques.subQuestions.forEach((v2) => { let options = v2.options ? v2.options.map((v22) => { return removeHtml1(v22.description); }) : []; let answer = v2.solution.split("").map((v22) => { return options[v22.charCodeAt(0) - 65]; }); item.answer.push(answer); item.options.push(options); }); } return item; } }, { type: "ask", name: "青书学堂作业答题", tips: "青书学堂仅支持选择、判断等题型,其他题型请反馈给作者", match: () => location.host === "degree.qingshuxuetang.com" && (location.href.includes("/Student/ExercisePaper") || location.href.includes("Student/ExamPaper")), question: { html: ".paper-container > .question-detail-container", question: ".question-detail-description", options: ".question-detail-options .question-detail-option .option-description", type: ".question-detail-type-desc", workType: "qingshu", pageType: "qingshu" }, init: async () => { await waitUntil(function() { return isExist(".question-detail-container") && _unsafeWindow.qsques; }); }, next: () => { }, ischecked: (item) => { return item.parent().find("input").prop("checked"); }, toquestion: (index) => { log($(`.answered.group_item:eq(${index})`)); $(`.answered.group_item:eq(${index})`).click(); }, questionHook: (item, index) => { const ques = _unsafeWindow.qsques[index]; item.question = removeHtml1(ques.description); item.options = ques.options ? ques.options.map((v2) => { return removeHtml1(v2.description); }) : []; item.type = typeChange(ques.typeDesc); switch (item.type) { case "3": item.options = []; break; } return item; }, setAnswer: (item) => { return true; }, finish: (item) => { } } ]; const uooc = [ { type: "save", name: "优课在线收录", match: () => location.host === "cce.org.uooconline.com" && (location.href.includes("/exam/paper") || location.href.includes("/exam/")), question: { html: ".queContainer", question: ".topic-title", options: ".el-radio-group label .label,.el-checkbox-group label .label", type: ".question-box .tag", workType: "uooc", pageType: "uooc" }, init: async () => { await waitUntil(function() { return $(".queContainer").length !== 0; }); }, answerHook: (item) => { const ques = _unsafeWindow.angular.element(item.html).scope().question; item.type = typeChange(ques.type_text); item.question = ques.question; item.options = ques.options_app.map((item2) => item2.value); item.answer = ques.answer.map((ans) => { return ques.options[ans]; }); switch (item.type) { case "3": item.options = []; item.answer = isTrue(item.answer[0]) ? ["正确"] : isFalse(item.answer[0]) ? ["错误"] : []; break; } return item; } } ]; const cjedu = [ { type: "ask", name: "京人平台答题", tips: "京人平台仅支持选择判断,其他题型请反馈给作者", match: () => location.host.includes("cj-edu.com") && location.href.includes("/Examination"), question: { html: ".el-main>.all_subject>div.el-row", question: "div.stem", options: "ul li > label > span.el-radio__label > div:nth-child(2),ul li > label > span.el-checkbox__label > div:nth-child(2)", type: ".question-box .tag", workType: "cjedu", pageType: "cjedu" }, init: async () => { await waitUntil(function() { return $(".el-main>.all_subject>div.el-row").length !== 0; }); }, next: () => { }, ischecked: (item) => { return item.parent().parent().hasClass("is-checked"); }, questionHook: (item) => { let type = $(item.html).prevAll("h1").first().text().trim(); switch (type) { case "单选题": item.type = "0"; break; case "多选题": item.type = "1"; break; case "判断题": item.$options = $(item.html).find("ul li>label"); item.options = []; item.type = "3"; break; } return item; }, setAnswer: (item) => { return true; }, finish: (item) => { } }, // 芯位教育收录 { type: "save", name: "京人平台作业收录", match: () => location.host.includes("cj-edu.com") && location.href.includes("/ViewAnswerSheet"), question: { html: ".el-main>.all_subject>div.el-row", question: "p.stem", options: "ul li > label > span.el-radio__label > div:nth-child(2),ul li > label > span.el-checkbox__label > div:nth-child(2)", type: ".question-box .tag", workType: "cjedu", pageType: "cjedu" }, init: async () => { await waitUntil(function() { return $(".el-main>.all_subject>div.el-row").length !== 0; }); }, answerHook: (item) => { let answer = $(item.html).find(".seeStudentAnswer>p.answer").text().replace("参考答案:", "").trim(); let type = $(item.html).prevAll("h1").first().text().trim(); if (item.options.length > 0) { item.answer = answer.split(",").map((i) => { return item.options[i.charCodeAt(0) - 65]; }); } switch (type) { case "单选题": item.type = "0"; break; case "多选题": item.type = "1"; break; case "判断题": item.options = []; item.answer = isTrue(answer) ? ["正确"] : isFalse(answer) ? ["错误"] : []; item.type = "3"; break; } return item; } } ]; const _ruleList = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ __proto__: null, ahjxjy, chaoxing, chatglm, chengjiaoyun, cjedu, cnzx, guokai, jsou, qingshu, uooc, xinwei, ykt, yunmuxueyuan, zhihuishu, zhijiaoyun }, Symbol.toStringTag, { value: "Module" })); const rule = []; for (const key2 in _ruleList) { rule.push(..._ruleList[key2]); } const parseRuleHook = (rule2) => { rule2.filter((item) => item.match && item.hook).forEach((item) => { item.hook(); }); }; const parseRule = async (rule2) => { await waitUntil(() => _unsafeWindow[key] !== void 0); const matchedRule = rule2.filter((item) => { if (typeof item.match === "function") { return item.match(); } return item.match; }); if (!matchedRule.length) { console.log("没有匹配到规则", "error"); return; } const app = wapp(); for (const item of matchedRule) { console.log(`匹配到规则:${item.name}`, "success"); if (item.init) { let init = await item.init(); if (typeof init == "boolean" && init === false) { continue; } } if (item.type === "hook") item.main(app); if (item.type === "ask") askParser(item, app); if (item.type === "save") saveParser(item, app); } }; const saveParser = (rule2, data) => { const app = data.app; const ask = data.ask; ask.rule = rule2; rule2.tips && (ask.tips = rule2.tips); const quesList = questionSaveParser(rule2.question, rule2.answerHook || null).filter((item) => { if (item == null || item.answer.length === 0 || item.answer === "") { return false; } return true; }); ask.saveQuestionData = quesList; quesList.forEach((item) => { if (item.answer.length !== 0) { Answer.cacheAnswer(item); } }); const postData = { "questionList": quesList, "pageType": rule2.question.pageType }; app.setPage("question"); quesList.length && Answer.syncQuestionList(postData); msg(`题库收录完成,共缓存${quesList.length}道题目`, "success"); rule2.next && rule2.next(); }; const askParser = (rule2, data) => { const app = data.app; const ask = data.ask; ask.rule = rule2; rule2.tips && (ask.tips = rule2.tips); app.app.showFloat = true; app.setPage("ask"); ask.clearQuestion(); const quesList = questionParser(rule2.question, rule2.questionHook || null); quesList.forEach((item) => { ask.addQuestion(item); }); ask.autoAnswer && ask.toggleStart(); }; const questionSaveParser = (item, hook) => { if (typeof item.html === "function") { item.html = item.html(); } const quesLIst = $(item.html).map((index, element) => { const questionText = removeHtml1($(element).find(item.question).html()); const options = $(element).find(item.options).map((index2, element2) => { return removeHtml1($(element2).html()); }).get(); const questionTypeId = $(element).find(item.type).val(); const html = $(element)[0]; let questionData = { question: titleClean(questionText ?? ""), options, $options: $(element).find(item.options), $answer: $(element).find(item.answer), answer: [], type: questionTypeId, html }; hook && (questionData = hook(questionData, index)); if (questionData == void 0 || questionData == null) { return null; } return { question: questionData.question, options: questionData.options, answer: questionData.answer, type: questionData.type }; }); return quesLIst.get(); }; const questionParser = (item, hook) => { if (typeof item.html === "function") { item.html = item.html(); } const quesLIst = $(item.html).map((index, element) => { const questionText = removeHtml1($(element).find(item.question).html()); const options = $(element).find(item.options).map((index2, element2) => { return removeHtml1($(element2).html()); }).get(); const questionTypeId = $(element).find(item.type).val(); const workType = item.workType; const html = $(element)[0]; let questionData = { question: titleClean(questionText ?? ""), options, $options: $(element).find(item.options), type: questionTypeId, html, workType, pageType: item.pageType }; hook && (questionData = hook(questionData, index)); return questionData; }); return quesLIst.get(); }; const defaultSetAnswer = async (type, answer, ques, rule2) => { var _a2; switch (type) { case "xx": for (let i = 0; i < ques.$options.length; i++) { if (answer.includes(i)) { if (rule2.ischecked && rule2.ischecked(ques.$options.eq(i))) { continue; } ques.$options.eq(i).click(); await sleep(Math.floor(Math.random() * 300 + 200)); } else if (rule2.ischecked && rule2.ischecked(ques.$options.eq(i))) { ques.$options.eq(i).click(); await sleep(Math.floor(Math.random() * 300 + 200)); } } break; case "pd": let bold = answer; if (ques.options.length == 0) { ques.$options.each((index, element) => { if (isTrue(bold) && isTrue(removeHtml1($(element).html()))) { $(element).click(); } if (isFalse(bold) && isFalse(removeHtml1($(element).html()))) { $(element).click(); } }); } else { ques.$options.each((index, element) => { if (isTrue(bold) && isTrue(ques.options[index])) { $(element).click(); } if (isFalse(bold) && isFalse(ques.options[index])) { $(element).click(); } }); } break; case "jd": $(ques.html).find("textarea").each(function(index) { _unsafeWindow.UE.getEditor($(this).attr("name")).ready(function() { this.setContent(answer[index].replace(/第.空:/g, "")); }); }); (_a2 = $(ques.html).find(".savebtndiv>a")) == null ? void 0 : _a2.click(); break; } }; const ApiAnswerMatch = (res, ques) => { const data = wapp(); const ask = data.ask; let blankNum = 0; let answer; let setHook = true; let type = ques.type, html = ques.html; let matchArr = []; let answerData = [ "", matchArr, ques, ask.rule ]; if (ques.$options && typeof ques.$options === "function") { ques.$options = ques.$options(); } switch (type) { case "0": case "1": for (let i = 0; i < res.length; i++) { let answer2 = res[i].answer; let matchArr2 = matchAnswer(answer2, ques.options); res[i].match = matchArr2; } matchArr = res.filter((item) => item.match.length > 0); if (matchArr.length === 0) { return { res, haveAnswer: false }; } if (matchArr.length > 1) { let isSame = matchArr.every((item) => item.match.length === matchArr[0].match.length); if (!isSame) { let max = matchArr[0]; for (let i = 1; i < matchArr.length; i++) { if (matchArr[i].match.length > max.match.length) { max = matchArr[i]; } } matchArr = [max]; } } let selectM = matchArr[0].match; answerData[0] = "xx"; answerData[1] = selectM; break; case "3": matchArr = res.map((item) => { let answer2 = item.answer; if (typeof answer2 === "object") { answer2 = answer2[0]; } if (isTrue(answer2)) { item.answer = "正确"; } else if (isFalse(answer2)) { item.answer = "错误"; } else { item.answer = ""; } return item; }); matchArr = res.filter((item) => item.answer !== ""); if (matchArr.length === 0) { return { res, haveAnswer: false }; } answerData[0] = "pd"; answerData[1] = matchArr[0].answer; break; case "2": case "9": case "4": case "5": case "6": case "7": blankNum = $(html).find("textarea").length; matchArr = res.filter((item) => item.answer.length > 0); if (matchArr.length === 0) { return { res, haveAnswer: false }; } answer = matchArr[0].answer; if (typeof answer === "string") { answer = [answer]; } matchArr = matchArr.filter((item) => (typeof item.answer === "string" ? 1 : item.answer.length) === blankNum); if (matchArr.length === 0) { return { res, haveAnswer: false }; } answerData[0] = "jd"; answerData[1] = answer; break; case "14": blankNum = ques.$options.length; matchArr = res.filter((item) => item.answer.length > 0 && item.answer.length === blankNum); if (matchArr.length === 0) { return { res, haveAnswer: false }; } answer = matchArr[0].answer; matchArr = matchArr.filter((item) => (typeof item.answer === "string" ? 1 : item.answer.length) === blankNum); if (matchArr.length === 0) { return { res, haveAnswer: false }; } answerData[0] = "wxtk"; answerData[1] = answer; break; case "11": matchArr = res.filter((item) => { return typeof item.answer === "object"; }); if (matchArr.length === 0) { return { res, haveAnswer: false }; } answer = matchArr[0].answer; answerData[0] = "lx"; answerData[1] = answer; break; default: return { res, haveAnswer: false }; } if (ask.rule.setAnswerHook && typeof ask.rule.setAnswerHook === "function") { ask.rule.setAnswerHook({ type, answer: answerData[1], html: ques.html, ques }); } if (ask.rule.setAnswer && typeof ask.rule.setAnswer === "function") { setHook = ask.rule.setAnswer({ type, answer: answerData[1], html, ques, rule: ask.rule }); } if (setHook) { defaultSetAnswer(answerData[0], answerData[1], ques, ask.rule); } return { res, // 采用答案 form: matchArr ? matchArr[0] : [], haveAnswer: true }; }; const randomAnswerMatch = (res, ques) => { const data = wapp(); const ask = data.ask; let setHook = true; let type = ques.type, html = ques.html; let answerData = [ "", [], ques, ask.rule ]; switch (type) { case "0": case "1": let selectM = [Math.floor(Math.random() * ques.options.length)]; answerData[0] = "xx"; answerData[1] = selectM; break; case "3": let bold = Math.random() > 0.5 ? "正确" : "错误"; answerData[0] = "pd"; answerData[1] = bold; break; default: return; } if (ask.rule.setAnswerHook && typeof ask.rule.setAnswerHook === "function") { ask.rule.setAnswerHook({ type, answer: answerData[1], html: ques.html, ques }); } if (ask.rule.setAnswer && typeof ask.rule.setAnswer === "function") { setHook = ask.rule.setAnswer({ type, answer: answerData[1], html, ques, rule: ask.rule }); } if (setHook) { defaultSetAnswer(answerData[0], answerData[1], ques, ask.rule); } return; }; const vuePageChange = async () => { if (_unsafeWindow.vuePageChangeLock) return; _unsafeWindow.vuePageChangeLock = true; const data = wapp(); const app = data.app; const ask = data.ask; ask.questionInx = 0; app.app.showFloat = false; app.setPage("home"); ask.clearQuestion(); await parseRule(rule); _unsafeWindow.vuePageChangeLock = false; }; const zhsimgList = { "ef16b0304b00ce71fd40a6ec2ee77005": "ACDFGHIJ", "735b46e223cfc7bad9b86c9937c75234": "BDEFG", "24ec8818a8cc7ef047261e702dac5815": "ABCDEFGHIJ", "196888b3dcb1e1bfff5881cb653ba923": "BDEFGH", "b935cd024690d61b8fba0484a66108f0": "ABCDEGH", "2015082c8ae5776bfd6939c5b987bde8": "BEF", "95018628ad8e26805393ebbb913f5655": "AF", "9cbff65dc6a768716f51443d6086a1c3": "BDG", "b8f6dedb0bf830a10b66369b1c602088": "CFG", "1ad38a724dc5bac06ce6d1c63b0184cf": "ACDEFGI", "6ba30ef9d51b4c81a126ff6d17ee4fb2": "AEFHIJ", "78a0d910c07fde12bafafda0f23c8b31": "CEH", "9ae999623635bc09942f1d0eb59e6837": "BH", "7d6006b8e10d9dffbe1fa0570757caa7": "DH", "86eba22e064f8fe7223621469d91c696": "ACDF", "4e585ee0c6ac7c985615389285c830ef": "BCF", "5ff23de904db9fb6485cddb667995cd7": "ABCDEFGHI", "fc402dcdbd1751096532c45785acbbbe": "DF", "ece41fab3f00663e05f8f58eb73d24dd": "ABCDEFGH", "784388b61ba6bc8106194478e383908a": "CDFIJ", "e735470377881c422d187ce9bb7f4f24": "ACDEG", "6a721d0773b4945fbe8f550da3850005": "ABCDEFI", "cfcabe2eeaeef886169447086ac23b96": "AEG", "c38f5ab64c8b82df3bb66f8f9831097b": "AEF", "b684fb365965c6b3488eeedcae114384": "ADEF", "1c402ceeda5ea92b80fe8b5b5bcbdc4d": "ACF", "ce75bbb9a8b72f97de5a8bb03ee95df7": "J", "e21ba3c8d7f8bbb66e4af7a9182d87a5": "ACGI", "445adaca0de2f938fe7bacf8140eef36": "ABF", "4f14c1e0a1eccde02ee4f0a77eaa78cd": "BCEF", "e78e28ee7040cdf3894293cd2eeade9b": "H", "ee5a026e9664d3d75f0471b9bc826c98": "EF", "904d82937a49e762ec1fa7c53574bb39": "ADF", "2ee96820a6a35990bff61a607953274c": "BDDF", "dc13afaff7b568f31d96c0ff8b5998b8": "ABEF", "13c11253a2bb72c3726d318163662263": "ABCF", "ca8b276d3213cfda5e6406c0930dfdb5": "CDF", "0d38524f7ca472260864ef7b79b11591": "ABCDG", "0e9bfd8011be1eddfcf97102f9e21ab6": "DEF", "ca88100d2fd190136cdcb3ffe1648820": "DG", "2d8c02e62a414df727f2bd36d4231c68": "ABCFG", "099b9f86638886c7ca57401d4360165c": "ABCDEFG", "7a0a8f7222c07c8c24c4a6d201105ecc": "ACEF", "181f54c34d485b426b900e2c777a831c": "AEFHI", "993215603eb31c60f31aa261267790e8": "ABCEF", "fcae686eac9b3de629da73618ea6cdc0": "ABCDF", "8b6271d28906b0a6a765ea1c37c31ff9": "ABDF", "5dfd875662f18654b374acd37e6c3790": "CF", "e8b47f587340890e698ccb14ef1f39c4": "CDEF", "de2c87983e695e599c1a2f6836277a4f": "ABDEF", "14189c3fbb519be795b7fbe6e182debf": "A", "94f5aa9777f0f1fb7d53e669691d8bde": "AB", "3be90a70f03362711cf62e97751dfabe": "ABC", "b9691b2259745815096c074d5cc27514": "ABCD", "16374490395999a162f0652a32d13b8b": "ABCDE", "8b2a7f5a361969be6a905da99af21b44": "ABCDEF", "e12185b3db81b9ec20d0402632e83f74": "ACDEF", "83bd97c6c3ac69318ad965f7776a51b4": "ABCE", "80e9325ef9406e82b8202de25fd80cbb": "ABD", "7d2f8e1fc8dabca4d9baca38bf413732": "ABDE", "e329dd6e7aecd220d271ba06a87c1d4f": "ABE", "8d234f3f7209a68f21d4e2b8f367d0b3": "AC", "6ecb31b10f3e3a751f8d2caacbdc850d": "ACD", "034b452c93b9be10f437a385608d8c0f": "ACDE", "79b887d55f7fbe5f8f1e29537c4099b7": "ACE", "d23fcd2143ca2071fc33f912cf1c28e4": "AD", "32e93bed7ac49065a1af9639795f4b47": "ADE", "81e4110d9047c39ea1444a178b7cd33d": "AE", "fc9eb0edae6ae531956f368178f287e1": "B", "998251adc1952f413e9b2b8d2b3cad37": "BC", "47e6f17113fb5d7fa896270917aafb99": "BCD", "26fee236555e7629f11308452c47b032": "BCDE", "d22d3cc146b96cf9d049da3decb8060e": "BCDEF", "a90e4a238e95a9ef750a1e0844b6730b": "BCDG", "a4bfbd439f12870ac2294ac4f59c2ade": "BCE", "d7e98cd9fa6c9fc480ebcba65bbd5ed7": "BD", "859f062ed997fc06bebde9c00669d29d": "BDE", "1ad8f209d08633c3cee74a4f48862c4f": "BDEF", "8d34b7e5f05d2d9188a6d40a0f882cb0": "BDF", "fe4bf0dc5ee6f3e858034bacfbd8c657": "BE", "73223444a1f6ae044cc12664cfed422a": "C", "e5abe969bb50ce2495a7591f32d67cc3": "CD", "a897c5097bbbf5f66ad491c083a897f2": "CDE", "b01f11bd3ef4311b47cef1a032dde5c2": "CE", "ed3febdc9d4c5ca73f1066f3b6040d5a": "D", "6a1137dfc861563b83e2579024ce929f": "DE", "2e256e5ceb7a86e50fe2c93f622d30ac": "E", "ddeacacae3b5f3ceb9ae1638d1585271": "EG", "19be069faa48362663d092896fa7d4d4": "F", "52113efae9e75eacdb3529fefb168982": "G" }; const comHook = () => { Function.prototype.__constructor_back = Function.prototype.constructor; Function.prototype.constructor = function() { if (arguments && typeof arguments[0] === "string") { if ("debugger" === arguments[0]) { return; } } return Function.prototype.__constructor_back.apply(this, arguments); }; const get_href = () => { return location.href; }; let baseSend = XMLHttpRequest.prototype.send; XMLHttpRequest.prototype.send = function() { this.addEventListener("readystatechange", function() { switch (true) { case /onlineexamh5new.zhihuishu.com/i.test(get_href()): if (this.readyState === 4 && (this.response.includes("workExamParts") || this.response.includes("lookHomework"))) { const data = JSON.parse(this.response); _unsafeWindow.zhsques = data.rt; } if (this.readyState === 4 && this.responseURL.includes("getAnswerImgInfo")) { let ques = {}; const data = JSON.parse(this.response).rt; for (let key2 in JSON.parse(this.response).rt) { ques[key2] = zhsimgList[md5Exports.md5(data[key2])]; } _unsafeWindow.zhsimgAnswer = ques; } break; case /icve.com.cn/i.test(location.host): log(this.responseURL); if (this.readyState === 4 && this.responseURL && this.responseURL.includes("examRecordPaperList")) { log(JSON.parse(this.response), "success"); } break; case /yuketang.cn/i.test(get_href()): break; case /degree.qingshuxuetang.com/i.test(get_href()): if (this.readyState === 4 && this.responseURL.includes("Student/DetailData")) { const data = JSON.parse(this.response); _unsafeWindow.qsques = data.data.paperDetail.questions; log(data.data.paperDetail.questions, "success"); } break; case /cce.org.uooconline.com/i.test(get_href()): if (this.readyState === 4 && this.responseURL.includes("/exam/view?cid=")) { const data = JSON.parse(this.response); _unsafeWindow.cceques = data.data.questions; log(data.data.questions, "success"); } break; case /cj-edu.com/i.test(get_href()): if (this.readyState === 4 && this.responseURL.includes("api/student/getHomeworkStudentInfo.do")) { const data = JSON.parse(this.response); _unsafeWindow.cjques = data.data; log(data.data, "success"); } break; } }, false); return baseSend.apply(this, arguments); }; if (/onlineexamh5new.zhihuishu.com/i.test(get_href())) { const baseyxyz = _unsafeWindow.yxyz; _unsafeWindow.yxyz = function(a2, b2) { !_unsafeWindow.yxyzpush && (_unsafeWindow.yxyzpush = []); let data = baseyxyz(a2, b2); _unsafeWindow.yxyzpush.push({ ...a2, data }); return data; }; } if (/icve.com.cn/i.test(get_href()) || /courshare.cn/i.test(get_href())) { const baseOpen = _unsafeWindow.open; _unsafeWindow.open = function() { arguments[2] = ""; return baseOpen.apply(this, arguments); }; } }; const appConfig = { debug: true, // 第三方接口 searchApi: [], // 默认显示悬浮窗 showFloat: false, // 右下角看板 showBoard: true, // 检测更新 checkUpdate: true, // key key: "", gpt: [ { "name": "GLM", "desc": "智普清言4.0", "api": "http://82.157.105.20:8002/v1/chat/completions", "key": "" } ] }; const appCache = Cache.get("app") || appConfig; Object.keys(appConfig).forEach((key2) => { if (appCache[key2] === void 0) { appCache[key2] = appConfig[key2]; } setApp(appCache); }); function getApp() { return Cache.get("app") || appConfig; } function setApp(config) { Cache.set("app", config); } const scriptInfo = _GM_info.script; const ConfigInput = { "base": [ { "type": "switch", "label": "显示悬浮窗", "name": "showFloat", "value": appCache.showFloat, "desc": "打开页面时是否显示悬浮窗", "options": [] }, { "type": "switch", "label": "看板小图标", "name": "showBoard", "value": appCache.showBoard, "desc": "打开页面时是否显示右下角看板", "options": [] }, { "type": "switch", "label": "检测更新", "name": "checkUpdate", "value": appCache.checkUpdate, "desc": "打开页面时是否检测更新", "options": [] } ] }; const useAppStore = defineStore("app", { state: () => ({ app: appCache, script: scriptInfo, page: "home", ConfigInput }), actions: { setConfig(config) { this.app = config; Cache.set("app", config); }, // 修改页面 setPage(page) { this.page = page; } } }); const useAskStore = defineStore("ask", { state: () => ({ questionList: [], questionInx: 0, // 当前索引 inx: 0, // 定时器 Interval: 0, // 开启答题 start: false, // 跳过已答题 skipFinish: Cache.get("skipFinish", false), // 自动跳转 autoNext: Cache.get("autoNext", false), // 默认开启自动答题 autoAnswer: Cache.get("autoAnswer", true), // 免费题库优先 freeFirst: Cache.get("freeFirst", true), // 无答案随机答题 randomAnswer: Cache.get("randomAnswer", false), // 运行锁 lock: false, // 统计题库 formMap: {}, // 问答类型 type: "cx", // 加载状态 loading: false, // 默认msg tips: "本脚本仅供学习研究,请勿用于非法用途", // 答题延迟 delay: 1e3, saveQuestionData: [] }), actions: { addQuestion(questionData) { this.questionList.push({ ...questionData, answer: [], status: 0, aiMsg: "" }); }, // 清空问题列表 clearQuestion() { this.questionList = []; }, getQuestion() { return this.questionList[this.questionInx]; }, nextQuestion() { if (this.questionInx === this.questionList.length - 1) { clearInterval(this.Interval); this.start = false; return; } this.questionInx++; }, prevQuestion() { if (this.questionInx === 0) { return; } this.questionInx--; }, // 切换到指定问题 toQuestion(inx) { this.questionInx = inx; let ques = this.questionList[inx]; this.rule.toquestion && this.rule.toquestion(inx); ques.html.scrollIntoView({ block: "center" }); if (_unsafeWindow.self !== _unsafeWindow.top) { let el = document.querySelector(".el-dialog"); if (el) { el.style.transform = "none"; let rect = ques.html.getBoundingClientRect(); el.style.top = `${rect.top - 700}px`; if (inx === 0) { el.style.top = "0px"; } if (inx === this.questionList.length - 1) { if (document.documentElement.scrollHeight > 2e3) { el.style.top = `${rect.top - 900}px`; } } } } ques.html.style.boxShadow = "0 0 10px rgba(0, 0, 0, 0.15)"; setTimeout(() => { ques.html.style.boxShadow = ""; }, 500); }, // 修改题目状态 setQuestionStatus(inx, status) { if (this.questionList[inx] && this.questionList[inx].status != void 0) { this.questionList[inx].status = status; } }, // 切换答题状态 async toggleStart() { if (this.lock) return; this.start = !this.start; if (!this.start) return; this.lock = true; for (let i = this.questionInx; i < this.questionList.length && this.start; i++) { if (this.skipFinish && this.questionList[i].status === 1) { continue; } this.questionInx = i; let ques = this.questionList[i]; if (ques.type === "8") { this.setQuestionStatus(i, 2); continue; } await this.reAnswer(i); await sleep(this.delay + Math.random() * 1e3); this.rule.toquestion && this.rule.toquestion(this.questionInx + 1); this.autoNext && this.rule.next && this.rule.next(); } this.autoNext && this.rule.finish && this.rule.finish({ "question": this.questionList }); this.start = false; this.lock = false; this.formMap = {}; this.questionList.forEach((item) => { var _a2; if ((_a2 = item.form) == null ? void 0 : _a2.form) { let key2 = item.form.form; if (key2) { this.formMap[key2] = this.formMap[key2] ? this.formMap[key2] + 1 : 1; } } else { this.formMap["无答案"] = this.formMap["无答案"] ? this.formMap["无答案"] + 1 : 1; } }); }, // 重答指定题 async reAnswer(inx) { let ques = this.questionList[inx]; this.loading = true; let res = await Answer.getCacheAnswer(ques); let m2 = ApiAnswerMatch([res], ques); if (!m2.haveAnswer) { if (this.freeFirst) { res = await Answer.getAnswersFree(ques); m2 = ApiAnswerMatch(res, ques); if (!m2.haveAnswer) { let res1 = await Answer.getAnswers(ques); res1 = res.concat(res1); m2 = ApiAnswerMatch(res1, ques); } } else { res = await Answer.getAllAnswers(ques); m2 = ApiAnswerMatch(res, ques); } } ques.answer = m2.res; ques.form = m2.form; if (!m2.haveAnswer) { this.randomAnswer && randomAnswerMatch(res, ques); this.setQuestionStatus(inx, 2); } else { this.setQuestionStatus(inx, 1); } this.loading = false; }, // ai答题 async aiAnswer(inx) { const errorMsg = `AI响应异常,可能是没有获取KEY,请按下方步骤操作 1. 打开[智普清言](https://chatglm.cn/main/alltoolsdetail) 2. 登录后随便发一条消息即可 3. 返回答题页刷新页面 `; let ques = this.questionList[inx]; this.loading = true; let text = ""; ques.aiMsg = ""; text += `[${typeChange2(ques.type)}]${ques.question} `; ques.options.forEach((item, inx2) => { text += `${item} `; }); switch (ques.type) { case "24": ques.match.forEach((item, inx2) => { text += `第一列${item} `; }); ques.selects[0].forEach((item, inx2) => { text += `第二列${item.text} `; }); break; } await aiAsk(text, (msg2) => { ques.aiMsg += msg2; if (ques.aiMsg.length > 0) { this.loading = false; } }, () => { this.loading = false; if (ques.aiMsg.length <= 0) { ques.aiMsg = errorMsg; } }); }, pause() { this.start = false; }, restart() { this.questionInx = 0; this.start = true; this.toggleStart(); } }, getters: { // 当前问题 current() { return this.questionList[this.questionInx]; }, currentAiMd() { const md = markdownit({ highlight: function(str, lang) { if (lang && hljs.getLanguage(lang)) { try { return '<pre><code class="hljs">' + hljs.highlight(str, { language: lang, ignoreIllegals: true }).value + "</code></pre>"; } catch (__) { } } return '<pre><code class="hljs">' + md.utils.escapeHtml(str) + "</code></pre>"; } }); return md.render(this.questionList[this.questionInx].aiMsg); } } }); const ApiCache = Cache.get("apiList", []); const DefApi = { name: "", url: "", method: "GET", params: [], response: [], request: [], headers: [] }; const DefParam = { name: "", value: "", type: "sys" }; const testQuestionData = { "question": "急性吗啡中毒的拮抗剂是:", "options": ["纳酪酮", "曲马朵", "尼莫地平", "阿托品", "肾上腺素"], "type": "0", "questionData": "", "workType": "ks" }; const useApiStore = defineStore("api", { state: () => ({ apiList: ApiCache, // 当前编辑的接口 currentApi: DefApi, currentParam: DefParam }), actions: { // 删除接口 deleteApi(index) { this.apiList.splice(index, 1); Cache.set("apiList", this.apiList); }, // 添加接口 addApi() { this.apiList.push(this.currentApi); Cache.set("apiList", this.apiList); }, // 更新接口 updateApi(index, api) { this.apiList[index] = api; Cache.set("apiList", this.apiList); }, // 添加参数 addParam() { this.currentApi.params.push({ name: this.currentParam.name, value: this.currentParam.value, type: this.currentParam.type }); this.currentParam = DefParam; }, // 删除参数 deleteParam(index) { this.currentApi.params.splice(index, 1); }, // 恢复默认 reset() { this.currentApi = DefApi; this.currentParam = DefParam; }, // 编辑接口 editApi(index) { this.currentApi = this.apiList[index]; }, // 编辑参数 editParam(index) { this.currentParam = this.currentApi.params[index]; }, // 测试API testApi(index) { let api = this.apiList[index]; let data = {}; api.params.forEach((item) => { switch (item.value) { case "$question": data[item.name] = testQuestionData.question; break; case "$options": data[item.name] = testQuestionData.options; break; case "$typeid": data[item.name] = testQuestionData.type; break; case "$questionData": data[item.name] = testQuestionData.questionData; break; case "$workType": data[item.name] = testQuestionData.workType; break; case "$timestamp": data[item.name] = (/* @__PURE__ */ new Date()).getTime(); break; case "$random": data[item.name] = Math.random(); break; default: data[item.name] = item.value; } }); return requestFetch(api.url, api.method, data, {}); } }, getters: {} }); const mini = "data:image/svg+xml,%3c?xml%20version='1.0'%20standalone='no'?%3e%3c!DOCTYPE%20svg%20PUBLIC%20'-//W3C//DTD%20SVG%201.1//EN'%20'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'%3e%3csvg%20t='1702363595473'%20class='icon'%20viewBox='0%200%201024%201024'%20version='1.1'%20xmlns='http://www.w3.org/2000/svg'%20p-id='9984'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20width='200'%20height='200'%3e%3cpath%20d='M253.360825%201024l-115.279176-58.836014v-53.205773c-64.888522-68.266667-62.917938-94.728797%2014.075602-153.424055-23.506254-17.594502-63.762474%202.674364-77.275052-36.315051%2047.434777-42.930584%2070.378007-101.062818%2087.972509-162.010172a326.694708%20326.694708%200%200%201%20208.037388-226.617182c4.644948-89.380069%2086.84646-143.430378%20178.478626-112.604811l-35.611272%2090.36536c105.144742%207.319313%20192.413471%2045.041924%20256.316701%20123.302268%2040.537732%2015.483162%2038.84866-34.766735%2069.251959-40.819244l11.964261%2058.27299%2050.390653-27.306667c28.151203%2018.72055-5.207973%2031.951615-10.415945%2052.220482%2014.779381%2020.12811%2028.995739%2040.537732%2044.4789%2060.243573a142.867354%20142.867354%200%200%201%2028.995739%20114.153128c-12.527285%2077.838076-30.262543%20154.831615-41.100756%20233.091958a1276.938557%201276.938557%200%200%200-5.207972%20139.48921h-21.113402l-89.239313-70.378007%209.993677-10.415945-17.735258%2036.878076L731.931271%20959.956014l-39.411683%2023.787766-42.226804-21.113402c-28.151203%2014.075601-52.501993%2036.03354-86.564949%2027.306667l-9.008385-37.863368H332.747216l-26.602886%2071.926323z%20m-9.993677-380.041237l-0.844536%200.985292%20126.680412%2019.705842%2010.838213%2010.978969c-29.277251%2032.373883-19.846598%2074.178419-29.699519%20110.493471L384.404674%20816.38488l-35.189004%2094.869553a412.274364%20412.274364%200%200%200%20233.514227%202.11134l9.712165-26.602886%2012.808797%2015.905429-11.823505%2050.672165%205.348728%204.644949c16.749966-11.682749%2033.218419-24.210034%2050.812921-34.62598a84.453608%2084.453608%200%200%201%2026.039863-5.348728l7.460069%2033.922199L731.931271%20928.145155l52.924262%2014.075601c-1.829828-43.212096-2.955876-80.934708-5.911753-118.516564%200-4.92646-9.852921-9.289897-15.060893-14.075601l-5.630241-23.224742%2014.075601-100.922062h18.72055l3.237389-1.266804c-11.964261%20106.411546%208.023093%20202.266392%2087.127972%20281.512027%208.726873-48.842337%2016.60921-93.321237%2024.632302-137.659381%207.460069-40.96%2015.060893-81.92%2022.520963-122.88%2010.556701-48.420069%2025.476838-97.262405-10.978969-140.756014L886.762887%20602.435739c0-16.468454%201.126048-33.077663%201.126048-49.546117%200-70.378007-53.205773-104.722474-115.982956-76.289759a232.951203%20232.951203%200%200%201-32.936907%209.430652c16.046186-32.373883-3.5189-52.924261-25.476838-70.378006a292.209485%20292.209485%200%200%200-209.304193-70.378007c-11.401237%200.70378-22.802474%200-40.25622%200l45.182681-104.581718c-40.396976%2010.978969-74.037663%2014.779381-94.728798%2045.464192s14.920137%2045.88646%2020.831891%2069.674227C325.005636%20360.194639%20232.528935%20436.343643%20198.606735%20548.948454l-70.378006%20172.707628%2049.123848%203.518901%205.630241%2054.191065c32.514639-26.039863%2026.039863-61.08811%2030.262543-92.898969h17.876014v58.413746l30.966323%206.33402c1.40756-6.615533%202.392852-11.682749%203.659656-16.468453%209.149141-34.625979-19.705842-59.117526-22.380206-91.491409zM205.50378%20822.859656l-6.474777%2020.83189-25.336082%2084.453609c1.548316%208.867629%200%2023.224742%205.067216%2025.476838%2032.373883%2016.046186%2065.733058%2029.277251%20104.159451%2045.745705%2021.113402-65.451546%2063.621718-114.434639%2069.53347-180.871478C315.152715%20802.309278%20281.512027%20786.966873%20247.730584%20774.158076c-17.031478-6.756289-36.315052-10.978969-35.048247%2019.002061z%20m121.753952-38.848659l10.556701-90.224605-48.138557-6.193265v78.964124z%20m-168.907217%2096.980893l23.083987-73.474639c-28.151203-10.415945-47.575533-9.289897-56.302406%2015.483161s2.674364%2042.789828%2032.936907%2057.991478z'%20fill='%23353947'%20p-id='9985'%3e%3c/path%3e%3cpath%20d='M198.606735%20548.948454c33.922199-112.604811%20126.680412-188.472302%20235.907079-192.272715-5.911753-23.787766-41.100756-39.55244-20.83189-69.674227s54.331821-34.485223%2094.728798-45.464192l-45.182681%20104.581718h40.25622a292.209485%20292.209485%200%200%201%20209.304193%2070.378007c21.957938%2017.735258%2042.226804%2038.285636%2025.476838%2070.378007l0.985292-0.985293c-30.966323%2026.743643-32.796151%2059.399038-19.846598%2095.151066l25.195327%2040.96-40.819244-6.193265-103.174158-14.075601-62.214158-93.039725-31.670104%2050.672165c-19.42433-5.630241-26.602887%200.844536-20.691134%2020.691134L464.494845%20579.210997a165.669828%20165.669828%200%200%200-100.077525-17.172234l-10.415945-86.564949L316.560275%20506.721649l-44.338144%2042.226805z%20m255.190653-62.917939l-10.556701-10.556701c-17.172234-17.031478-35.048247-15.060893-47.29402%203.378145s-4.785704%2036.73732%2012.105017%2050.249897c20.12811%2016.046186%2034.907491%209.712165%2045.745704-11.541993%2014.216357-10.838213%2015.201649-21.394914%200-31.81086z'%20fill='%23F5F5F6'%20p-id='9986'%20data-spm-anchor-id='a313x.search_index.0.i5.dc0f3a810XA6r8'%20class='selected'%3e%3c/path%3e%3cpath%20d='M592.442062%20886.762887l-9.712165%2026.602886a412.274364%20412.274364%200%200%201-233.514227-2.11134l35.189004-94.869553-34.062956-30.544055c9.852921-36.315052%200-78.119588%2029.699519-110.493471a198.184467%20198.184467%200%200%200%20105.426254-94.869553c16.327698%202.392852%2026.039863-1.689072%2020.691134-20.691134l31.670104-4.926461L600.887423%20633.402062c0%207.882337-1.970584%2018.01677%201.970584%2023.083986%2030.966323%2038.707904%2023.787766%2080.934708%2014.075601%20123.865292-8.586117%2036.03354-16.468454%2071.363299-24.491546%20106.411547zM442.818419%20663.523849c0%2014.075601-2.81512%2023.64701%200%2026.884398%2020.268866%2020.691134%2020.83189%2045.604948%2019.565086%2071.926323a96.840137%2096.840137%200%200%200%203.237388%2031.107079c5.911753%2020.409622%2012.668041%2041.382268%2038.426392%2044.056633A48.560825%2048.560825%200%200%200%20557.393814%20802.309278a696.601512%20696.601512%200%200%200%2018.579794-80.371683c6.052509-6.474777%2035.470515-2.533608%2018.157526-36.596564z'%20fill='%23F5F5F6'%20p-id='9987'%3e%3c/path%3e%3cpath%20d='M600.605911%20602.013471l103.174158%2014.075601%2040.819244%205.348729c37.863368%209.993677%2022.94323%2041.241512%2026.46213%2065.170034l-14.075601%20100.922062-49.827629%2078.119588-21.394914%2031.529347-10.134433%2021.394914a84.453608%2084.453608%200%200%200-26.039863%205.348728c-17.594502%2010.415945-34.062955%2022.94323-50.812921%2034.62598v-5.207973h-5.067216l11.823505-50.672165c16.046186-61.932646%2032.936907-123.724536%2047.716289-185.938694%205.348729-22.661718-25.476838-68.266667-51.938969-82.62378zM927.300619%20706.735945c-7.460069%2040.96-15.060893%2081.92-22.520963%20122.88-8.023093%2044.338144-15.90543%2088.817045-24.632302%20137.659381-79.10488-79.386392-98.52921-175.241237-87.127973-281.512027z'%20fill='%23B3DCF8'%20p-id='9988'%3e%3c/path%3e%3cpath%20d='M199.029003%20843.691546l6.474777-20.83189h45.604949c2.11134-39.270928-20.972646-30.262543-38.426392-30.121787-1.548316-29.981031%2018.01677-25.758351%2035.048247-18.579793%2034.062955%2013.231065%2067.422131%2028.151203%20104.722474%2044.4789-5.911753%2066.436838-48.420069%20115.419931-69.53347%20180.871478-38.426392-16.186942-71.926323-29.418007-104.159451-45.182681-4.785704-2.252096-3.5189-16.60921-5.067216-25.476838h33.499931l26.321375-70.378007z'%20fill='%2387BC85'%20p-id='9989'%3e%3c/path%3e%3cpath%20d='M738.265292%20486.030515a232.951203%20232.951203%200%200%200%2032.936907-9.430652c62.777182-28.151203%20116.405223%206.615533%20115.982956%2076.289759%200%2016.468454-0.70378%2033.077663-1.126048%2049.546117l1.126048-0.985292-12.105018-2.674365-21.53567%2016.749966-29.981031%208.304605A86.564948%2086.564948%200%200%201%20731.931271%20564.572371c2.392852-26.462131%204.644948-52.924261%207.037801-79.527148z%20m113.730859%2061.79189l-61.369622-52.501993c-3.941168%2035.752027-6.615533%2059.821306-10.275189%2093.180481z'%20fill='%23F5F5F6'%20p-id='9990'%20data-spm-anchor-id='a313x.search_index.0.i3.dc0f3a810XA6r8'%20class=''%3e%3c/path%3e%3cpath%20d='M198.606735%20548.948454h73.615396c-28.151203%2042.226804-74.178419%2076.852784-59.117526%20137.659381-4.22268%2031.810859%202.252096%2066.859107-30.262543%2092.898969l-6.052509-54.472577-49.123849-3.518901z'%20fill='%23AED4EF'%20p-id='9991'%3e%3c/path%3e%3cpath%20d='M927.300619%20706.735945l-134.281238-21.113402-3.237388%201.266804%206.897045-37.863368%2027.025154-7.74158%2031.247835-8.867629%2029.840275-20.691134%202.392853-10.275189-0.422268%200.985292%2030.262543-36.73732c35.752027%2043.77512%2020.83189%2092.617457%2010.275189%20141.037526zM369.625292%20663.946117l-126.680412-19.705842a171.300069%20171.300069%200%200%201%2016.749965-41.100756c21.817182-29.277251%2046.167973-56.302405%2069.533471-84.453608%203.237388%209.149141%206.756289%2018.157526%209.571409%2027.306666q15.623918%2049.123849%2030.966323%2098.52921z'%20fill='%23F5F5F6'%20p-id='9992'%3e%3c/path%3e%3cpath%20d='M763.179107%20810.473127c5.207973%204.644948%2014.075601%209.008385%2015.060893%2014.075602%202.955876%2037.581856%204.081924%2075.304467%205.911753%20118.516563l-52.924262-14.075601-47.9978%2023.787766-7.600825-34.766735c14.075601-1.970584%2020.550378-7.882337%2010.978969-21.817182%2021.394914%2011.682749%2023.787766-9.993677%2033.359175-19.002062z'%20fill='%23AED4EF'%20p-id='9993'%3e%3c/path%3e%3cpath%20d='M601.168935%20634.105842c26.462131%2014.075601%2057.287698%2059.962062%2051.938969%2082.62378-14.075601%2062.214158-31.670103%20124.006048-47.716289%20185.938694L592.442062%20886.762887c8.023093-35.329759%2015.90543-70.378007%2024.35079-105.989279%2010.134433-42.930584%2017.31299-85.157388-14.075601-123.865292-3.5189-4.785704-0.985292-14.920137-1.548316-22.802474zM328.806048%20518.404399c-23.365498%2028.151203-47.716289%2055.457869-69.533471%2084.453608a171.300069%20171.300069%200%200%200-16.749965%2041.100756l0.844536-0.985292-12.386529%2043.07134h-17.876014C198.043711%20625.660481%20243.507904%20591.175258%20272.222131%20548.948454l44.338144-42.226805z'%20fill='%23484F5E'%20p-id='9994'%3e%3c/path%3e%3cpath%20d='M327.257732%20784.010997l-37.581856-17.453746v-78.964124l48.138557%206.193265z'%20fill='%23D55375'%20p-id='9995'%3e%3c/path%3e%3cpath%20d='M823.704192%20641.284399l-27.025154%207.74158-6.897045%2037.863368h-18.72055c-3.5189-23.928522%2011.401237-55.176357-26.46213-65.170034l-25.195327-40.96%2012.527285-16.186942a86.564948%2086.564948%200%200%200%2091.350653%2059.258282zM369.625292%20663.946117v-19.846598l12.245773-12.949553c8.445361%201.266804%2020.409622%206.897045%2024.773059%203.237388%2020.550378-17.031478%2038.989416-36.455808%2058.132233-55.176357l20.972646%201.548316A198.184467%20198.184467%200%200%201%20380.041237%20675.628866z'%20fill='%23484F5E'%20p-id='9996'%3e%3c/path%3e%3cpath%20d='M199.029003%20843.691546l34.485224%2014.075602-26.321375%2070.378007h-33.499931z'%20fill='%23CAE7AF'%20p-id='9997'%3e%3c/path%3e%3cpath%20d='M230.980619%20686.326323l12.386529-43.07134c2.674364%2031.670103%2031.529347%2056.302405%2022.23945%2091.350653-1.266804%204.785704-2.252096%209.852921-3.659656%2016.468453l-30.966323-6.33402z'%20fill='%23F5F5F6'%20p-id='9998'%3e%3c/path%3e%3cpath%20d='M763.179107%20810.473127l-44.056633%2067.703643-11.964261-12.527285%2050.390653-78.4011z'%20fill='%23484F5E'%20p-id='9999'%3e%3c/path%3e%3cpath%20d='M212.682337%20792.737869c17.453746%200%2040.537732-9.149141%2038.426392%2030.121787H205.50378z'%20fill='%23CDEAB1'%20p-id='10000'%3e%3c/path%3e%3cpath%20d='M598.916838%20957.98543l-5.348728-4.644949h5.067216z'%20fill='%23484F5E'%20p-id='10001'%3e%3c/path%3e%3cpath%20d='M464.494845%20579.210997c-19.142818%2018.72055-37.581856%2038.14488-58.132233%2055.176357-4.363436%203.659656-16.327698-1.970584-24.773059-3.237388l-17.172233-69.111203A165.669828%20165.669828%200%200%201%20464.494845%20579.210997z'%20fill='%23AED4EF'%20p-id='10002'%3e%3c/path%3e%3cpath%20d='M364.41732%20562.038763l17.172233%2069.111203-12.245773%2012.949553q-15.342405-49.123849-30.966323-98.52921c-2.81512-9.149141-6.334021-18.157526-9.571409-27.306666l-12.245773-11.541994%2037.4411-30.966323z'%20fill='%23353947'%20p-id='10003'%3e%3c/path%3e%3cpath%20d='M600.605911%20602.013471v31.670103l-62.214158-79.245636-31.670104%204.926461%2031.388592-50.390653z'%20fill='%23484F5E'%20p-id='10004'%3e%3c/path%3e%3cpath%20d='M453.797388%20517.278351c-10.838213%2021.254158-25.617595%2028.151203-45.745704%2011.541993-16.890722-14.075601-24.632302-31.529347-12.105017-50.249897s30.121787-20.409622%2047.29402-3.378145c-23.506254%200.985292-34.766735%2011.541993-29.136495%2039.411684l39.693196%203.096633z'%20fill='%23AED4EF'%20p-id='10005'%3e%3c/path%3e%3cpath%20d='M731.931271%20564.572371l-12.808797%2015.623918c-12.949553-35.752027-11.119725-68.407423%2019.846598-95.151066-2.11134%2026.602887-4.363436%2053.065017-7.037801%2079.527148z'%20fill='%23353947'%20p-id='10006'%3e%3c/path%3e%3cpath%20d='M506.721649%20559.786667c5.348729%2019.002062-4.363436%2023.083986-20.691134%2020.691134-6.193265-19.846598%200.985292-26.321375%2020.691134-20.691134z'%20fill='%23484F5E'%20p-id='10007'%3e%3c/path%3e%3cpath%20d='M453.797388%20485.749003c15.201649%2010.415945%2014.075601%2020.972646%200%2031.529348v-31.81086zM443.240687%20475.192302l10.556701%2010.556701-10.556701-10.556701z'%20fill='%23AED4EF'%20p-id='10008'%3e%3c/path%3e%3cpath%20d='M442.818419%20663.523849l151.312715%2022.098694c17.31299%2034.062955-12.105017%2030.121787-18.157526%2036.596564A696.601512%20696.601512%200%200%201%20557.393814%20802.309278a48.560825%2048.560825%200%200%201-52.783505%2034.907492c-25.758351-2.674364-32.514639-23.64701-38.426391-44.056633a96.840137%2096.840137%200%200%201-3.237389-31.107079c1.266804-26.321375%200-51.235189-19.565086-71.926323-3.378144-2.955876-0.563024-12.386529-0.563024-26.602886z%20m66.296083%20153.987079c41.523024-26.462131%2042.226804-60.38433%2034.766735-98.52921l-55.317113-10.275189c-0.422268%2038.707904-15.201649%2075.163711%2020.550378%20108.804399zM707.158213%20865.649485l11.964261%2012.527285c-9.571409%209.008385-11.964261%2030.684811-33.359175%2019.002062z'%20fill='%23353947'%20p-id='10009'%3e%3c/path%3e%3cpath%20d='M686.185567%20896.756564c9.571409%2014.075601%202.955876%2019.846598-10.978969%2021.817182zM851.996151%20547.822405l-71.644811%2040.678488c3.659656-33.359175%206.334021-57.428454%2010.275189-93.180481z'%20fill='%23353947'%20p-id='10010'%3e%3c/path%3e%3cpath%20d='M884.792302%20611.725636l-29.840275%2020.691134-1.40756-16.890722%2021.53567-16.749966z'%20fill='%23484F5E'%20p-id='10011'%20data-spm-anchor-id='a313x.search_index.0.i4.dc0f3a810XA6r8'%20class='selected'%3e%3c/path%3e%3cpath%20d='M853.544467%20615.526048l1.40756%2016.890722-31.247835%208.867629v-17.453746zM884.792302%20611.725636l-9.712165-12.949554%2012.105018%202.674365z'%20fill='%23353947'%20p-id='10012'%3e%3c/path%3e%3cpath%20d='M443.522199%20474.91079l10.556701%2010.556701v31.951616l-39.693196-3.096633c-6.193265-27.869691%205.630241-38.426392%2029.136495-39.411684z'%20fill='%23F5F5F6'%20p-id='10013'%3e%3c/path%3e%3cpath%20d='M509.114502%20817.510928c-35.752027-33.640687-20.972646-70.378007-20.550378-108.804399l55.317113%2010.275189c7.882337%2038.14488%206.756289%2072.067079-34.766735%2098.52921z'%20fill='%23E25679'%20p-id='10014'%3e%3c/path%3e%3c/svg%3e"; const _withScopeId = (n) => (vue.pushScopeId("data-v-f6a83a85"), n = n(), vue.popScopeId(), n); const _hoisted_1$5 = /* @__PURE__ */ _withScopeId(() => /* @__PURE__ */ vue.createElementVNode("p", null, "本脚本仅供学习交流,请勿用作任何非法用途。", -1)); const _hoisted_2$3 = /* @__PURE__ */ _withScopeId(() => /* @__PURE__ */ vue.createElementVNode("p", null, "如果有其他平台需要答题功能,请反馈给作者,会根据需求量酌情增加", -1)); const _hoisted_3$3 = { class: "aah_plat" }; const _hoisted_4$3 = { key: 0 }; const _sfc_main$7 = /* @__PURE__ */ vue.defineComponent({ __name: "Home", setup(__props) { const appStore = useAppStore(); scriptInfo$1.script.downloadURL ?? "#"; const debug = vue.ref(true); const msg1 = (msg2) => { ElementPlus.ElMessage({ message: msg2, type: "success", duration: 2e3 }); }; return (_ctx, _cache) => { const _component_el_alert = ElAlert; const _component_el_divider = ElDivider; const _component_el_tag = ElTag; const _component_el_button = ElButton; const _component_el_text = ElText; const _component_el_col = ElCol; const _component_el_row = ElRow; return vue.openBlock(), vue.createBlock(_component_el_row, null, { default: vue.withCtx(() => [ vue.createVNode(_component_el_col, { span: 24 }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_alert, { type: "info", closable: false }, { title: vue.withCtx(() => [ _hoisted_1$5, _hoisted_2$3 ]), _: 1 }), vue.createVNode(_component_el_divider, null, { default: vue.withCtx(() => [ vue.createTextVNode("功能列表") ]), _: 1 }), vue.createElementVNode("div", _hoisted_3$3, [ vue.createVNode(_component_el_tag, null, { default: vue.withCtx(() => [ vue.createTextVNode("多平台答案检索") ]), _: 1 }), vue.createVNode(_component_el_tag, null, { default: vue.withCtx(() => [ vue.createTextVNode("AI辅助答题") ]), _: 1 }), vue.createVNode(_component_el_tag, null, { default: vue.withCtx(() => [ vue.createTextVNode("解除复制限制") ]), _: 1 }), vue.createVNode(_component_el_tag, null, { default: vue.withCtx(() => [ vue.createTextVNode("更多功能待添加..") ]), _: 1 }) ]), debug.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_4$3, [ vue.createVNode(_component_el_button, { type: "primary", plain: "", onClick: _cache[0] || (_cache[0] = ($event) => vue.unref(appStore).setPage("Base")) }, { default: vue.withCtx(() => [ vue.createTextVNode("基础配置") ]), _: 1 }), vue.createVNode(_component_el_button, { type: "primary", plain: "", onClick: _cache[1] || (_cache[1] = ($event) => vue.unref(appStore).setPage("api")) }, { default: vue.withCtx(() => [ vue.createTextVNode("题库配置") ]), _: 1 }), vue.createVNode(_component_el_button, { type: "primary", plain: "", onClick: _cache[2] || (_cache[2] = ($event) => vue.unref(appStore).setPage("ask")) }, { default: vue.withCtx(() => [ vue.createTextVNode("答题页") ]), _: 1 }), vue.createVNode(_component_el_button, { type: "primary", plain: "", onClick: _cache[3] || (_cache[3] = ($event) => vue.unref(appStore).setPage("question")) }, { default: vue.withCtx(() => [ vue.createTextVNode("本地题库") ]), _: 1 }), vue.createVNode(_component_el_button, { type: "primary", plain: "", onClick: _cache[4] || (_cache[4] = ($event) => vue.unref(appStore).setPage("ai")) }, { default: vue.withCtx(() => [ vue.createTextVNode("AI") ]), _: 1 }) ])) : vue.createCommentVNode("", true), vue.createVNode(_component_el_divider, { onClick: msg1 }, { default: vue.withCtx(() => [ vue.createTextVNode("版本信息") ]), _: 1 }), vue.createElementVNode("div", null, [ vue.createElementVNode("p", null, [ vue.createTextVNode("当前版本号: "), vue.createVNode(_component_el_tag, { type: "primary" }, { default: vue.withCtx(() => [ vue.createTextVNode(vue.toDisplayString(vue.unref(scriptInfo$1).script.version), 1) ]), _: 1 }), vue.createVNode(_component_el_button, { size: "small", type: "primary", onClick: vue.unref(updateCheck1) }, { default: vue.withCtx(() => [ vue.createTextVNode("检测更新") ]), _: 1 }, 8, ["onClick"]) ]), vue.createElementVNode("p", null, [ vue.createVNode(_component_el_text, { class: "mx-1", type: "info" }, { default: vue.withCtx(() => [ vue.createTextVNode("PS:保持最新版本可以减少BUG的出现哦~") ]), _: 1 }) ]) ]) ]), _: 1 }) ]), _: 1 }); }; } }); const _export_sfc = (sfc, props) => { const target = sfc.__vccOpts || sfc; for (const [key2, val] of props) { target[key2] = val; } return target; }; const Home = /* @__PURE__ */ _export_sfc(_sfc_main$7, [["__scopeId", "data-v-f6a83a85"]]); const _sfc_main$6 = {}; function _sfc_render$1(_ctx, _cache) { return vue.openBlock(), vue.createElementBlock("h1", null, "这是一个公告"); } const Note = /* @__PURE__ */ _export_sfc(_sfc_main$6, [["render", _sfc_render$1]]); const _hoisted_1$4 = { style: { "margin": "10px" } }; const _sfc_main$5 = /* @__PURE__ */ vue.defineComponent({ __name: "Base", setup(__props) { const appStore = useAppStore(); vue.watch(appStore.app, (newVal) => { appStore.setConfig(newVal); }); vue.watch(appStore.ConfigInput, (newVal) => { for (let key2 in newVal) { for (let key1 in newVal[key2]) { let item = newVal[key2][key1]; appStore.app[item.name] = item.value; } } appStore.setConfig(appStore.app); }); const ConfigInput2 = appStore.ConfigInput; return (_ctx, _cache) => { const _component_el_alert = ElAlert; const _component_el_col = ElCol; const _component_el_switch = ElSwitch; const _component_el_input = ElInput; const _component_el_input_number = ElInputNumber; const _component_el_option = ElOption; const _component_el_select = ElSelect; const _component_el_checkbox = ElCheckbox; const _component_el_checkbox_group = ElCheckboxGroup$1; const _component_el_tooltip = ElTooltip; const _component_el_row = ElRow; return vue.openBlock(), vue.createElementBlock(vue.Fragment, null, [ vue.createVNode(_component_el_alert, { title: "配置修改后会自动保存,直接刷新页面即可", type: "info", closable: false, "show-icon": "" }), (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(vue.unref(ConfigInput2).base, (item1) => { return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$4, [ vue.createVNode(_component_el_row, { class: "row-bg", justify: "space-between", align: "middle" }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_col, { span: 6 }, { default: vue.withCtx(() => [ vue.createTextVNode(vue.toDisplayString(item1.label), 1) ]), _: 2 }, 1024), vue.createVNode(_component_el_col, { span: 18, style: { "text-align": "right" } }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_tooltip, { class: "grid-content ep-bg-purple-light", effect: "dark", content: item1.desc || "", placement: "top" }, { default: vue.withCtx(() => [ item1.type === "switch" ? (vue.openBlock(), vue.createBlock(_component_el_switch, { key: 0, modelValue: item1.value, "onUpdate:modelValue": ($event) => item1.value = $event }, null, 8, ["modelValue", "onUpdate:modelValue"])) : item1.type === "input" ? (vue.openBlock(), vue.createBlock(_component_el_input, { key: 1, modelValue: item1.value, "onUpdate:modelValue": ($event) => item1.value = $event }, null, 8, ["modelValue", "onUpdate:modelValue"])) : item1.type === "number" ? (vue.openBlock(), vue.createBlock(_component_el_input_number, { key: 2, modelValue: item1.value, "onUpdate:modelValue": ($event) => item1.value = $event }, null, 8, ["modelValue", "onUpdate:modelValue"])) : item1.type === "select" ? (vue.openBlock(), vue.createBlock(_component_el_select, { key: 3, modelValue: item1.value, "onUpdate:modelValue": ($event) => item1.value = $event, placeholder: "请选择" }, { default: vue.withCtx(() => [ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(item1.options, (item2) => { return vue.openBlock(), vue.createBlock(_component_el_option, { key: item2.value, label: item2.label, value: item2.value }, null, 8, ["label", "value"]); }), 128)) ]), _: 2 }, 1032, ["modelValue", "onUpdate:modelValue"])) : item1.type === "checkbox" ? (vue.openBlock(), vue.createBlock(_component_el_checkbox_group, { key: 4, modelValue: item1.value, "onUpdate:modelValue": ($event) => item1.value = $event }, { default: vue.withCtx(() => [ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(item1.options, (item2) => { return vue.openBlock(), vue.createBlock(_component_el_checkbox, { key: item2.value, label: item2.value, name: item2.value }, { default: vue.withCtx(() => [ vue.createTextVNode(vue.toDisplayString(item2.label), 1) ]), _: 2 }, 1032, ["label", "name"]); }), 128)) ]), _: 2 }, 1032, ["modelValue", "onUpdate:modelValue"])) : vue.createCommentVNode("", true) ]), _: 2 }, 1032, ["content"]) ]), _: 2 }, 1024) ]), _: 2 }, 1024) ]); }), 256)) ], 64); }; } }); function makeShadow(el, option) { return makeShadowRaw(el, el.childNodes, option); } function makeShadowRaw(rootEl, childNodes, { mode = "open", delegatesFocus = false } = { mode: "open" }) { try { const oldroot = rootEl.shadowRoot; if (oldroot != null) { console.error("[shadow] Attach shadow multiple times", rootEl, childNodes, oldroot); return; } else { const shadow_root = rootEl.attachShadow({ mode, delegatesFocus }); if (childNodes) putDomIntoShadow(shadow_root, childNodes); return shadow_root; } } catch (e) { console.error("[shadow] make shadow-root failed", rootEl, childNodes); console.error(e); } } function putDomIntoShadow(shadow_root, childNodes) { const fragment = document.createDocumentFragment(); for (const node of childNodes) { fragment.appendChild(node); } shadow_root.appendChild(fragment); } const virtual_root = document.createDocumentFragment(); const ShadowStyle = vue.defineComponent({ props: { media: String, nonce: String }, setup(props, { slots }) { return () => { var _a2; return vue.h("style", { media: props.media, nonce: props.nonce }, (_a2 = slots.default) == null ? void 0 : _a2.call(slots)); }; } }); const ShadowRoot$1 = withType()(vue.defineComponent({ props: { mode: { type: String, default: "open" }, delegatesFocus: { type: Boolean, default: false }, abstract: { type: Boolean, default: false }, tag: { type: String, default: "div" }, adoptedStyleSheets: { type: Array } }, emits: ["error"], setup(props, { slots, expose, emit }) { const abstract = vue.ref(false); const el = vue.ref(); const teleport_el = vue.ref(); const shadow_root = vue.ref(); const teleport_target = vue.computed(() => shadow_root.value ?? virtual_root); const ex = vue.reactive({ shadow_root }); expose(ex); vue.onBeforeMount(() => { abstract.value = props.abstract; }); vue.onMounted(() => { var _a2; try { if (abstract.value) { if (teleport_el.value.parentElement.shadowRoot) { shadow_root.value = teleport_el.value.parentElement.shadowRoot; } else { shadow_root.value = makeShadowRaw(teleport_el.value.parentElement, void 0, { mode: props.mode, delegatesFocus: props.delegatesFocus }); } } else { shadow_root.value = makeShadowRaw(el.value, void 0, { mode: props.mode, delegatesFocus: props.delegatesFocus }); } (_a2 = shadow_root.value) == null ? void 0 : _a2.styleSheets; } catch (e) { console.error(e); emit("error", e); } }); vue.watch([shadow_root, () => props.adoptedStyleSheets], ([shadow_root2, adoptedStyleSheets]) => { if (!shadow_root2 || !adoptedStyleSheets) return; try { ; shadow_root2.adoptedStyleSheets = adoptedStyleSheets; } catch (e) { console.error(e); emit("error", e); } }); return () => { var _a2; const child_part = vue.h(vue.Teleport, { ref: teleport_el, to: teleport_target.value }, [(_a2 = slots.default) == null ? void 0 : _a2.call(slots)]); if (abstract.value) return child_part; return vue.h(props.tag, { ref: el }, child_part); }; }, install, Style: ShadowStyle })); function withType() { return (obj) => obj; } function install(app) { app.component("shadow-root", ShadowRoot$1); app.directive("shadow", { beforeMount(el) { console.warn("[VueShadowDom] Deprecated v-shadow directive, use <shadow-root> component"); makeShadow(el); } }); } var shadow = { ShadowRoot: ShadowRoot$1, ShadowStyle, shadow_root: ShadowRoot$1, shadow_style: ShadowStyle, install }; const _hoisted_1$3 = /* @__PURE__ */ vue.createElementVNode("div", { class: "aah_bomHet50" }, [ /* @__PURE__ */ vue.createElementVNode("span", { class: "dq" }, [ /* @__PURE__ */ vue.createElementVNode("i"), /* @__PURE__ */ vue.createTextVNode("当前题目") ]), /* @__PURE__ */ vue.createElementVNode("span", { class: "yp" }, [ /* @__PURE__ */ vue.createElementVNode("i"), /* @__PURE__ */ vue.createTextVNode("已作答") ]), /* @__PURE__ */ vue.createElementVNode("span", { class: "wp" }, [ /* @__PURE__ */ vue.createElementVNode("i"), /* @__PURE__ */ vue.createTextVNode("无答案") ]), /* @__PURE__ */ vue.createElementVNode("span", { class: "zp" }, [ /* @__PURE__ */ vue.createElementVNode("i"), /* @__PURE__ */ vue.createTextVNode("未作答") ]) ], -1); const _hoisted_2$2 = ["innerHTML"]; const _hoisted_3$2 = ["innerHTML"]; const _hoisted_4$2 = { key: 0 }; const _hoisted_5$2 = { style: { "width": "100%" } }; const _hoisted_6$2 = ["innerHTML"]; const _hoisted_7 = ["value"]; const _hoisted_8 = { key: 1, style: { "color": "green" } }; const _hoisted_9 = { key: 2, style: { "color": "red" } }; const _hoisted_10 = { key: 0 }; const _hoisted_11 = { key: 1 }; const _hoisted_12 = ["innerHTML"]; const _hoisted_13 = { key: 0 }; const _hoisted_14 = ["innerHTML"]; const _sfc_main$4 = /* @__PURE__ */ vue.defineComponent({ __name: "Ask", setup(__props) { const ask = useAskStore(); const app = useAppStore(); const getOptionIndex = (inx) => { return String.fromCharCode(65 + inx); }; vue.watch(app.app, (newVal) => { app.setConfig(newVal); }); const watchAutoNext = () => { Cache.set("autoNext", ask.autoNext); }; const watchSkipFinish = () => { Cache.set("skipFinish", ask.skipFinish); }; const watchAutoAnswer = () => { Cache.set("autoAnswer", ask.autoAnswer); }; const watchFreeFirst = () => { Cache.set("freeFirst", ask.freeFirst); }; const watchRandomAnswer = () => { Cache.set("randomAnswer", ask.randomAnswer); }; return (_ctx, _cache) => { const _component_el_alert = ElAlert; const _component_el_button = ElButton; const _component_el_col = ElCol; const _component_el_checkbox = ElCheckbox; const _component_el_input = ElInput; const _component_el_form_item = ElFormItem; const _component_el_form = ElForm; const _component_el_tag = ElTag; const _component_el_divider = ElDivider; const _component_el_row = ElRow; const _component_el_empty = ElEmpty; const _directive_loading = vLoading; return vue.openBlock(), vue.createElementBlock(vue.Fragment, null, [ vue.createVNode(_component_el_alert, { style: { "margin-bottom": "10px" }, title: vue.unref(ask).tips, type: "info", closable: false }, null, 8, ["title"]), vue.unref(ask).current ? (vue.openBlock(), vue.createBlock(_component_el_row, { key: 0 }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_col, { span: 12 }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_button, { onClick: _cache[0] || (_cache[0] = ($event) => vue.unref(ask).start ? vue.unref(ask).pause() : vue.unref(ask).toggleStart()), size: "small", class: "aah_btn", type: "primary", plain: "" }, { default: vue.withCtx(() => [ vue.createTextVNode(vue.toDisplayString(vue.unref(ask).start ? "暂停答题" : "开始答题"), 1) ]), _: 1 }) ]), _: 1 }), vue.createVNode(_component_el_col, { span: 12 }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_button, { onClick: _cache[1] || (_cache[1] = ($event) => vue.unref(ask).restart()), size: "small", class: "aah_btn", type: "primary", plain: "" }, { default: vue.withCtx(() => [ vue.createTextVNode("重新答题") ]), _: 1 }) ]), _: 1 }), vue.createVNode(_component_el_col, { span: 24 }, { default: vue.withCtx(() => [ _hoisted_1$3 ]), _: 1 }), (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(vue.unref(ask).questionList, (val, inx) => { return vue.openBlock(), vue.createBlock(_component_el_col, { span: 3 }, { default: vue.withCtx(() => [ (vue.openBlock(), vue.createBlock(_component_el_button, { class: vue.normalizeClass(inx == vue.unref(ask).questionInx ? "aah_active" : ""), style: { "width": "30px", "margin-bottom": "4px" }, key: inx, onClick: ($event) => vue.unref(ask).toQuestion(inx), size: "small", type: val.status == 1 ? "primary" : val.status == 2 ? "danger" : "", plain: "" }, { default: vue.withCtx(() => [ vue.createTextVNode(vue.toDisplayString(inx + 1), 1) ]), _: 2 }, 1032, ["class", "onClick", "type"])) ]), _: 2 }, 1024); }), 256)), vue.createVNode(_component_el_col, { span: 24 }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_form, { "label-width": "auto" }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_checkbox, { onChange: watchSkipFinish, modelValue: vue.unref(ask).skipFinish, "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => vue.unref(ask).skipFinish = $event), label: "跳过已作答" }, null, 8, ["modelValue"]), vue.createVNode(_component_el_checkbox, { onChange: watchAutoAnswer, modelValue: vue.unref(ask).autoAnswer, "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => vue.unref(ask).autoAnswer = $event), label: "自动答题" }, null, 8, ["modelValue"]), vue.createVNode(_component_el_checkbox, { onChange: watchAutoNext, modelValue: vue.unref(ask).autoNext, "onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => vue.unref(ask).autoNext = $event), label: "自动跳转" }, null, 8, ["modelValue"]), vue.createVNode(_component_el_checkbox, { onChange: watchFreeFirst, modelValue: vue.unref(ask).freeFirst, "onUpdate:modelValue": _cache[5] || (_cache[5] = ($event) => vue.unref(ask).freeFirst = $event), label: "免费题库优先" }, null, 8, ["modelValue"]), vue.createVNode(_component_el_checkbox, { onChange: watchRandomAnswer, modelValue: vue.unref(ask).randomAnswer, "onUpdate:modelValue": _cache[6] || (_cache[6] = ($event) => vue.unref(ask).randomAnswer = $event), label: "无答案随机答题" }, null, 8, ["modelValue"]), vue.createVNode(_component_el_form_item, { label: "秘钥" }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_input, { class: "aah_password", placeholder: "请输入你购买的秘钥", modelValue: vue.unref(app).app.key, "onUpdate:modelValue": _cache[7] || (_cache[7] = ($event) => vue.unref(app).app.key = $event), "show-password": "" }, null, 8, ["modelValue"]) ]), _: 1 }) ]), _: 1 }) ]), _: 1 }), vue.unref(ask).formMap ? (vue.openBlock(), vue.createBlock(_component_el_col, { key: 0, span: 24 }, { default: vue.withCtx(() => [ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(vue.unref(ask).formMap, (val, key2) => { return vue.openBlock(), vue.createBlock(_component_el_tag, { key: key2, style: { "margin-right": "10px" } }, { default: vue.withCtx(() => [ vue.createTextVNode(vue.toDisplayString(key2) + ":" + vue.toDisplayString(val) + " 次", 1) ]), _: 2 }, 1024); }), 128)) ]), _: 1 })) : vue.createCommentVNode("", true), vue.createVNode(_component_el_divider, null, { default: vue.withCtx(() => [ vue.createVNode(_component_el_button, { onClick: _cache[8] || (_cache[8] = ($event) => vue.unref(ask).reAnswer(vue.unref(ask).questionInx)), style: { "color": "red", "font-size": "10px" }, link: "" }, { default: vue.withCtx(() => [ vue.createTextVNode("重答") ]), _: 1 }), vue.createVNode(_component_el_divider, { direction: "vertical" }), vue.createVNode(_component_el_button, { onClick: _cache[9] || (_cache[9] = ($event) => vue.unref(ask).aiAnswer(vue.unref(ask).questionInx)), style: { "color": "red", "font-size": "10px" }, link: "" }, { default: vue.withCtx(() => [ vue.createTextVNode("AI答题") ]), _: 1 }) ]), _: 1 }), vue.createVNode(_component_el_col, { span: 24 }, { default: vue.withCtx(() => [ vue.createElementVNode("div", { class: "aah_title", innerHTML: "[" + vue.unref(typeChange2)(vue.unref(ask).current.type ?? "") + "]" + vue.unref(ask).current.question }, null, 8, _hoisted_2$2), (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(vue.unref(ask).current.options, (val, inx) => { return vue.openBlock(), vue.createElementBlock("p", { style: vue.normalizeStyle(vue.unref(ask).current.form && vue.unref(ask).current.form.match && vue.unref(ask).current.form.match.includes(inx) ? "color:green;" : ""), class: "aah_options", innerHTML: getOptionIndex(inx) + ". " + val }, null, 12, _hoisted_3$2); }), 256)), vue.unref(ask).current.type == "24" ? (vue.openBlock(), vue.createElementBlock("p", _hoisted_4$2, [ vue.createVNode(vue.unref(ShadowRoot$1), null, { default: vue.withCtx(() => [ vue.createElementVNode("table", _hoisted_5$2, [ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(vue.unref(ask).current.match, (val, inx) => { return vue.openBlock(), vue.createElementBlock("tr", null, [ vue.createElementVNode("td", { innerHTML: val }, null, 8, _hoisted_6$2), vue.createElementVNode("td", null, [ vue.createElementVNode("select", null, [ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(vue.unref(ask).current.selects[inx], (item) => { return vue.openBlock(), vue.createElementBlock("option", { value: item.value }, vue.toDisplayString(item.text), 9, _hoisted_7); }), 256)) ]) ]) ]); }), 256)) ]) ]), _: 1 }) ])) : vue.createCommentVNode("", true), vue.unref(ask).current.form ? (vue.openBlock(), vue.createElementBlock("p", _hoisted_8, " 采用【" + vue.toDisplayString(vue.unref(ask).current.form.form) + "】的答案 ", 1)) : vue.createCommentVNode("", true), vue.unref(ask).current.type == "8" ? (vue.openBlock(), vue.createElementBlock("p", _hoisted_9, " 当前题型暂不支持,请反馈给作者吧 ")) : vue.createCommentVNode("", true) ]), _: 1 }), vue.withDirectives((vue.openBlock(), vue.createBlock(_component_el_col, { span: 24, "element-loading-text": "正在搜索中" }, { default: vue.withCtx(() => [ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(vue.unref(ask).current.answer, (item) => { return vue.openBlock(), vue.createElementBlock("div", null, [ vue.createVNode(_component_el_divider, null, { default: vue.withCtx(() => [ vue.createTextVNode(vue.toDisplayString(`${item.form}(${item.duration}ms)`), 1) ]), _: 2 }, 1024), typeof item.answer === "object" ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_10, [ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(item.answer, (ans) => { return vue.openBlock(), vue.createElementBlock("p", null, [ vue.createVNode(_component_el_input, { value: ans, readonly: "", style: { "width": "100%" } }, null, 8, ["value"]) ]); }), 256)) ])) : (vue.openBlock(), vue.createElementBlock("div", _hoisted_11, [ vue.createElementVNode("div", { innerHTML: item.answer ? item.answer : item.msg ?? "暂无答案" }, null, 8, _hoisted_12) ])) ]); }), 256)), vue.unref(ask).current.aiMsg ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_13, [ vue.createVNode(_component_el_divider, null, { default: vue.withCtx(() => [ vue.createTextVNode("AI回答(仅供参考)") ]), _: 1 }), vue.createElementVNode("div", { innerHTML: vue.unref(ask).currentAiMd }, null, 8, _hoisted_14) ])) : vue.createCommentVNode("", true) ]), _: 1 })), [ [_directive_loading, vue.unref(ask).loading] ]) ]), _: 1 })) : (vue.openBlock(), vue.createBlock(_component_el_empty, { key: 1, description: "暂无题目数据" })) ], 64); }; } }); const _sfc_main$3 = /* @__PURE__ */ vue.defineComponent({ __name: "Api", setup(__props) { const apiStore = useApiStore(); const deleteRow = (index) => { apiStore.deleteApi(index); }; const paramVisible = vue.ref(false); const addParam = () => { if (apiStore.currentParam.name == "") { ElementPlus.ElNotification({ title: "参数效验不通过", message: "参数名不能为空", type: "error" }); return; } if (apiStore.currentParam.value == "") { ElementPlus.ElNotification({ title: "参数效验不通过", message: "参数值不能为空", type: "error" }); return; } const index = apiStore.currentApi.params.findIndex((item) => item.name == apiStore.currentParam.name); if (index != -1) { apiStore.currentApi.params[index] = apiStore.currentParam; ElementPlus.ElNotification({ title: "更新成功", message: "参数已更新", type: "success" }); paramVisible.value = false; return; } apiStore.addParam(); paramVisible.value = false; }; const addApi = () => { if (apiStore.currentApi.name == "") { ElementPlus.ElNotification({ title: "参数效验不通过", message: "接口名不能为空", type: "error" }); return; } if (apiStore.currentApi.url == "") { ElementPlus.ElNotification({ title: "参数效验不通过", message: "接口地址不能为空", type: "error" }); return; } if (apiStore.currentApi.params.length == 0) { ElementPlus.ElNotification({ title: "参数效验不通过", message: "参数不能为空", type: "error" }); return; } const index = apiStore.apiList.findIndex((item) => item.name == apiStore.currentApi.name); if (index != -1) { apiStore.updateApi(index, apiStore.currentApi); ElementPlus.ElNotification({ title: "更新成功", message: "接口已更新", type: "success" }); } apiStore.addApi(); apiStore.reset(); }; const editApi = (index) => { apiStore.editApi(index); }; const editParam = (index) => { apiStore.editParam(index); paramVisible.value = true; }; const testApi = (index) => { apiStore.testApi(index).then((res) => { }).catch((err) => { ElementPlus.ElNotification({ title: "请求失败", message: err, type: "error" }); }); }; return (_ctx, _cache) => { const _component_el_alert = ElAlert; const _component_el_input = ElInput; const _component_el_form_item = ElFormItem; const _component_el_option = ElOption; const _component_el_select = ElSelect; const _component_el_button = ElButton; const _component_el_form = ElForm; const _component_el_dialog = ElDialog; const _component_el_table_column = ElTableColumn; const _component_el_table = ElTable; const _component_el_col = ElCol; const _component_el_row = ElRow; return vue.openBlock(), vue.createElementBlock(vue.Fragment, null, [ vue.createVNode(_component_el_alert, { title: "当前功能开发中,若您有急需添加的API可以先反馈给作者", type: "error" }), vue.createVNode(_component_el_dialog, { modelValue: paramVisible.value, "onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => paramVisible.value = $event), title: "添加参数", style: { "width": "400px" } }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_form, { model: vue.unref(apiStore).currentParam, "label-width": "auto" }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_form_item, { label: "参数名" }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_input, { modelValue: vue.unref(apiStore).currentParam.name, "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => vue.unref(apiStore).currentParam.name = $event), autocomplete: "off" }, null, 8, ["modelValue"]) ]), _: 1 }), vue.createVNode(_component_el_form_item, { label: "参数类型" }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_select, { modelValue: vue.unref(apiStore).currentParam.type, "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => vue.unref(apiStore).currentParam.type = $event), placeholder: "请选择" }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_option, { label: "内置参数", value: "sys" }), vue.createVNode(_component_el_option, { label: "自定义参数", value: "diy" }) ]), _: 1 }, 8, ["modelValue"]) ]), _: 1 }), vue.createVNode(_component_el_form_item, { label: "参数值" }, { default: vue.withCtx(() => [ vue.unref(apiStore).currentParam.type == "diy" ? (vue.openBlock(), vue.createBlock(_component_el_input, { key: 0, modelValue: vue.unref(apiStore).currentParam.value, "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => vue.unref(apiStore).currentParam.value = $event), autocomplete: "off" }, null, 8, ["modelValue"])) : (vue.openBlock(), vue.createBlock(_component_el_select, { key: 1, modelValue: vue.unref(apiStore).currentParam.value, "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => vue.unref(apiStore).currentParam.value = $event), placeholder: "请选择" }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_option, { label: "题型(字符串)", value: "$type" }), vue.createVNode(_component_el_option, { label: "题型(数字)", value: "$typeid" }), vue.createVNode(_component_el_option, { label: "题干(题目)", value: "$question" }), vue.createVNode(_component_el_option, { label: "选项", value: "$options" }), vue.createVNode(_component_el_option, { label: "时间戳", value: "$timestamp" }), vue.createVNode(_component_el_option, { label: "随机数", value: "$random" }) ]), _: 1 }, 8, ["modelValue"])) ]), _: 1 }), vue.createVNode(_component_el_form_item, null, { default: vue.withCtx(() => [ vue.createVNode(_component_el_button, { onClick: addParam, plain: "", style: { "width": "100%" } }, { default: vue.withCtx(() => [ vue.createTextVNode("添加") ]), _: 1 }) ]), _: 1 }) ]), _: 1 }, 8, ["model"]) ]), _: 1 }, 8, ["modelValue"]), vue.createVNode(_component_el_table, { data: vue.unref(apiStore).apiList, style: { "width": "100%", "margin-bottom": "10px" }, "empty-text": "暂无数据" }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_table_column, { prop: "name", label: "接口名", width: "120" }), vue.createVNode(_component_el_table_column, { prop: "url", label: "接口地址", width: "120" }), vue.createVNode(_component_el_table_column, { prop: "method", label: "请求方式", width: "120" }), vue.createVNode(_component_el_table_column, { fixed: "right", label: "操作", width: "120" }, { default: vue.withCtx((scope) => [ vue.createVNode(_component_el_button, { link: "", type: "primary", size: "small", onClick: vue.withModifiers(($event) => deleteRow(scope.$index), ["prevent"]) }, { default: vue.withCtx(() => [ vue.createTextVNode(" 删除 ") ]), _: 2 }, 1032, ["onClick"]), vue.createVNode(_component_el_button, { link: "", type: "primary", size: "small", onClick: vue.withModifiers(($event) => editApi(scope.$index), ["prevent"]) }, { default: vue.withCtx(() => [ vue.createTextVNode(" 编辑 ") ]), _: 2 }, 1032, ["onClick"]), vue.createVNode(_component_el_button, { link: "", type: "primary", size: "small", onClick: vue.withModifiers(($event) => testApi(scope.$index), ["prevent"]) }, { default: vue.withCtx(() => [ vue.createTextVNode(" 测试 ") ]), _: 2 }, 1032, ["onClick"]) ]), _: 1 }) ]), _: 1 }, 8, ["data"]), vue.createVNode(_component_el_row, null, { default: vue.withCtx(() => [ vue.createVNode(_component_el_col, { span: 24 }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_form, { model: vue.unref(apiStore).currentApi, "label-width": "80px" }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_form_item, { label: "接口名" }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_input, { modelValue: vue.unref(apiStore).currentApi.name, "onUpdate:modelValue": _cache[5] || (_cache[5] = ($event) => vue.unref(apiStore).currentApi.name = $event), placeholder: "请输入接口名" }, null, 8, ["modelValue"]) ]), _: 1 }), vue.createVNode(_component_el_form_item, { label: "接口地址" }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_input, { modelValue: vue.unref(apiStore).currentApi.url, "onUpdate:modelValue": _cache[6] || (_cache[6] = ($event) => vue.unref(apiStore).currentApi.url = $event), placeholder: "请输入接口地址" }, null, 8, ["modelValue"]) ]), _: 1 }), vue.createVNode(_component_el_form_item, { label: "请求方式" }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_select, { modelValue: vue.unref(apiStore).currentApi.method, "onUpdate:modelValue": _cache[7] || (_cache[7] = ($event) => vue.unref(apiStore).currentApi.method = $event), placeholder: "请选择" }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_option, { label: "GET", value: "GET" }), vue.createVNode(_component_el_option, { label: "POST", value: "POST" }) ]), _: 1 }, 8, ["modelValue"]) ]), _: 1 }), vue.createVNode(_component_el_form_item, { label: "请求参数" }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_table, { data: vue.unref(apiStore).currentApi.params, style: { "width": "100%" }, "empty-text": "暂无参数" }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_table_column, { prop: "name", label: "参数名", width: "120" }), vue.createVNode(_component_el_table_column, { prop: "value", label: "参数值", width: "120" }), vue.createVNode(_component_el_table_column, { fixed: "right", label: "操作", width: "120" }, { default: vue.withCtx((scope) => [ vue.createVNode(_component_el_button, { link: "", type: "primary", size: "small", onClick: vue.withModifiers(($event) => vue.unref(apiStore).deleteParam(scope.$index), ["prevent"]) }, { default: vue.withCtx(() => [ vue.createTextVNode(" 删除 ") ]), _: 2 }, 1032, ["onClick"]), vue.createVNode(_component_el_button, { link: "", type: "primary", size: "small", onClick: vue.withModifiers(($event) => editParam(scope.$index), ["prevent"]) }, { default: vue.withCtx(() => [ vue.createTextVNode(" 编辑 ") ]), _: 2 }, 1032, ["onClick"]) ]), _: 1 }) ]), _: 1 }, 8, ["data"]), vue.createVNode(_component_el_button, { type: "primary", onClick: _cache[8] || (_cache[8] = ($event) => paramVisible.value = true), text: "" }, { default: vue.withCtx(() => [ vue.createTextVNode("添加参数") ]), _: 1 }) ]), _: 1 }), vue.createVNode(_component_el_form_item, null, { default: vue.withCtx(() => [ vue.createVNode(_component_el_button, { type: "primary", onClick: addApi, plain: "" }, { default: vue.withCtx(() => [ vue.createTextVNode("添加") ]), _: 1 }) ]), _: 1 }) ]), _: 1 }, 8, ["model"]) ]), _: 1 }) ]), _: 1 }) ], 64); }; } }); const _sfc_main$2 = {}; const _hoisted_1$2 = { src: "https://chatglm.cn/miniapp/home", width: "100%", height: "600px", frameborder: "0", style: { "border": "none", "overflow": "hidden" } }; function _sfc_render(_ctx, _cache) { return vue.openBlock(), vue.createElementBlock("iframe", _hoisted_1$2); } const Ai = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["render", _sfc_render]]); const _hoisted_1$1 = /* @__PURE__ */ vue.createElementVNode("br", null, null, -1); const _hoisted_2$1 = /* @__PURE__ */ vue.createElementVNode("br", null, null, -1); const _hoisted_3$1 = /* @__PURE__ */ vue.createElementVNode("p", { style: { "color": "red" } }, "且并非所有网站都支持,需要作者适配,若您的平台不支持可以反馈给作者", -1); const _hoisted_4$1 = ["innerHTML"]; const _hoisted_5$1 = ["innerHTML"]; const _hoisted_6$1 = ["innerHTML"]; const _sfc_main$1 = /* @__PURE__ */ vue.defineComponent({ __name: "Question", setup(__props) { let showBtn = vue.ref(0); window.addEventListener("keydown", (e) => { if (e.key === "`") { showBtn.value++; } }); const ask = useAskStore(); const questionkey = Cache.match("ques_"); const clearCache = () => { Cache.matchRemove("ques_"); msg("清除成功", "success"); }; const exportCsv = () => { const header = ["题型", "题目", "选项", "答案"]; const data = ask.saveQuestionData.map((item) => [typeChange2(item.type), item.question, item.options.join("###"), item.answer.join("###")]); const csv = [header, ...data].map((item) => item.join(",")).join("\n"); const blob = new Blob([csv], { type: "text/csv" }); const url = URL.createObjectURL(blob); const a2 = document.createElement("a"); a2.href = url; a2.download = "question.csv"; const title = document.title; const random = Math.random().toString(36).slice(-8); a2.download = `${title}的试题导出${random}.csv`; a2.click(); }; const exportCsv1 = () => { const header = ["题型", "题目", "选项", "答案"]; const questionList = Cache.matchGet("ques_") || []; console.log(questionList); const data = questionList.map((item) => [typeChange2(item.type), item.question, item.options.join("###"), item.answer.join("###")]); const csv = [header, ...data].map((item) => item.join(",")).join("\n"); const blob = new Blob([csv], { type: "text/csv" }); const url = URL.createObjectURL(blob); const a2 = document.createElement("a"); a2.href = url; a2.download = "question.csv"; a2.click(); }; const changeT = (item) => { return typeChange2(item.type); }; const answerFormat2 = (item) => { if (Array.isArray(item)) { return item.join("<br/>"); } else if (typeof item === "string") { return item; } else if (typeof item === "object") { return JSON.stringify(item); } else { return item; } }; return (_ctx, _cache) => { const _component_el_alert = ElAlert; const _component_el_statistic = ElStatistic; const _component_el_col = ElCol; const _component_el_row = ElRow; const _component_el_button = ElButton; const _component_el_popconfirm = ElPopconfirm; const _component_el_table_column = ElTableColumn; const _component_el_table = ElTable; const _component_el_watermark = ElWatermark; return vue.openBlock(), vue.createElementBlock(vue.Fragment, null, [ vue.createVNode(_component_el_alert, { type: "info", closable: false }, { default: vue.withCtx(() => [ vue.createTextVNode(" 本脚本支持将存在答案的题目收录到本地,以供后续答题检索,可减少接口请求次数,以及提高答案正确率"), _hoisted_1$1, vue.createTextVNode(" 在支持重复答题且答完题显示答案的情况下可以无需使用接口搜索答案"), _hoisted_2$1, _hoisted_3$1 ]), _: 1 }), vue.createVNode(_component_el_watermark, { content: ["爱问答助手", "AiAskHelper"] }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_row, null, { default: vue.withCtx(() => [ vue.createVNode(_component_el_col, { span: 24 }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_statistic, { title: "缓存题目数量", value: vue.unref(questionkey).length }, null, 8, ["value"]) ]), _: 1 }) ]), _: 1 }), vue.createVNode(_component_el_popconfirm, { title: "确定要清空本地缓存吗?", "confirm-button-text": "确定", "cancel-button-text": "取消", onConfirm: clearCache, "hide-after": 0 }, { reference: vue.withCtx(() => [ vue.createVNode(_component_el_button, { type: "danger" }, { default: vue.withCtx(() => [ vue.createTextVNode("清除缓存") ]), _: 1 }) ]), _: 1 }), vue.unref(showBtn) > 10 ? (vue.openBlock(), vue.createBlock(_component_el_button, { key: 0, type: "primary", onClick: exportCsv }, { default: vue.withCtx(() => [ vue.createTextVNode("导出当前") ]), _: 1 })) : vue.createCommentVNode("", true), vue.unref(showBtn) > 10 ? (vue.openBlock(), vue.createBlock(_component_el_button, { key: 1, type: "primary", onClick: exportCsv1 }, { default: vue.withCtx(() => [ vue.createTextVNode("导出所有") ]), _: 1 })) : vue.createCommentVNode("", true), vue.createVNode(_component_el_table, { data: vue.unref(ask).saveQuestionData, style: { "width": "100%" }, "empty-text": "当前页暂无数据" }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_table_column, { prop: "type", label: "题型", formatter: changeT }), vue.createVNode(_component_el_table_column, { prop: "question", label: "题目" }, { default: vue.withCtx((scope) => [ vue.createElementVNode("div", { innerHTML: scope.row.question }, null, 8, _hoisted_4$1) ]), _: 1 }), vue.createVNode(_component_el_table_column, { prop: "options", label: "选项" }, { default: vue.withCtx((scope) => [ vue.createElementVNode("div", { innerHTML: scope.row.options.join("<br/>") }, null, 8, _hoisted_5$1) ]), _: 1 }), vue.createVNode(_component_el_table_column, { prop: "answer", label: "答案" }, { default: vue.withCtx((scope) => [ vue.createElementVNode("div", { innerHTML: answerFormat2(scope.row.answer) }, null, 8, _hoisted_6$1) ]), _: 1 }) ]), _: 1 }, 8, ["data"]) ]), _: 1 }) ], 64); }; } }); const _hoisted_1 = { class: "aah_wrapper" }; const _hoisted_2 = ["src"]; const _hoisted_3 = ["id"]; const _hoisted_4 = { key: 0, class: "aah_breadcrumb" }; const _hoisted_5 = /* @__PURE__ */ vue.createElementVNode("strong", null, "home", -1); const _hoisted_6 = ["src"]; const _sfc_main = /* @__PURE__ */ vue.defineComponent({ __name: "App", setup(__props) { const appStore = useAppStore(); const askStore = useAskStore(); _unsafeWindow[key] = { "app": appStore, "ask": askStore }; document.onkeydown = function(e) { if (e.ctrlKey && e.key == "p") { appStore.app.showFloat = !appStore.app.showFloat; } }; const logs = () => { msg("日志组件开发中...."); }; updateCheck(); return (_ctx, _cache) => { const _component_el_button = ElButton; const _component_el_breadcrumb_item = ElBreadcrumbItem; const _component_el_breadcrumb = ElBreadcrumb; const _component_el_scrollbar = ElScrollbar; const _component_el_dialog = ElDialog; return vue.openBlock(), vue.createElementBlock("div", _hoisted_1, [ vue.createVNode(_component_el_dialog, { modelValue: vue.unref(appStore).app.showFloat, "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => vue.unref(appStore).app.showFloat = $event), title: "爱问答助手", draggable: "", overflow: "", "show-close": true, modal: false, "close-on-click-modal": false, style: vue.normalizeStyle(vue.unref(appStore).page === "ai" ? "width: 70vh;" : "width: 400px;") }, { header: vue.withCtx(({ close, titleId, titleClass }) => [ vue.createElementVNode("img", { src: vue.unref(scriptInfo$1).script.icon, alt: "icon", style: { "width": "20px", "height": "20px", "margin-right": "10px", "vertical-align": "middle" } }, null, 8, _hoisted_2), vue.createElementVNode("span", { id: titleId, class: vue.normalizeClass(titleClass) }, vue.toDisplayString(`${vue.unref(scriptInfo$1).script.name} - ${vue.unref(scriptInfo$1).script.version}`), 11, _hoisted_3), vue.createTextVNode(" "), vue.createVNode(_component_el_button, { onClick: logs, link: "" }, { default: vue.withCtx(() => [ vue.createTextVNode("log") ]), _: 1 }) ]), default: vue.withCtx(() => [ vue.createVNode(_component_el_scrollbar, { "max-height": "55vh" }, { default: vue.withCtx(() => [ vue.unref(appStore).page != "home" ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_4, [ vue.createVNode(_component_el_breadcrumb, { separator: "/" }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_breadcrumb_item, { onClick: _cache[0] || (_cache[0] = ($event) => vue.unref(appStore).setPage("home")) }, { default: vue.withCtx(() => [ _hoisted_5 ]), _: 1 }), vue.createVNode(_component_el_breadcrumb_item, null, { default: vue.withCtx(() => [ vue.createTextVNode(vue.toDisplayString(vue.unref(appStore).page), 1) ]), _: 1 }) ]), _: 1 }) ])) : vue.createCommentVNode("", true), vue.unref(appStore).page == "home" ? (vue.openBlock(), vue.createBlock(Home, { key: 1 })) : vue.unref(appStore).page == "note" ? (vue.openBlock(), vue.createBlock(Note, { key: 2 })) : vue.unref(appStore).page == "Base" ? (vue.openBlock(), vue.createBlock(_sfc_main$5, { key: 3 })) : vue.unref(appStore).page == "ask" ? (vue.openBlock(), vue.createBlock(_sfc_main$4, { key: 4 })) : vue.unref(appStore).page == "api" ? (vue.openBlock(), vue.createBlock(_sfc_main$3, { key: 5 })) : vue.unref(appStore).page == "ai" ? (vue.openBlock(), vue.createBlock(Ai, { key: 6 })) : vue.unref(appStore).page == "question" ? (vue.openBlock(), vue.createBlock(_sfc_main$1, { key: 7 })) : vue.createCommentVNode("", true) ]), _: 1 }) ]), _: 1 }, 8, ["modelValue", "style"]), vue.withDirectives(vue.createElementVNode("div", { class: "minimized-dialog", onClick: _cache[4] || (_cache[4] = ($event) => vue.unref(appStore).app.showFloat = true) }, [ vue.createElementVNode("div", { onClick: _cache[3] || (_cache[3] = ($event) => vue.unref(appStore).app.showFloat = true) }, [ vue.createElementVNode("img", { width: "104vh", src: vue.unref(mini), onClick: _cache[2] || (_cache[2] = ($event) => vue.unref(appStore).app.showFloat = true) }, null, 8, _hoisted_6) ]) ], 512), [ [vue.vShow, !vue.unref(appStore).app.showFloat] ]) ]); }; } }); const LoadVue = () => { const pinia = createPinia(); const app = vue.createApp(_sfc_main); app.use(ElementPlus, { namespace: "aah" }); app.use(pinia); app.use(shadow); app.mount( (() => { const app2 = document.createElement("div"); app2.id = "AiAskApp"; document.body.append(app2); return app2; })() ); }; comHook(); parseRuleHook(rule); const run = async () => { allowCopy(); if (!console.log || console.log.toString().length < 13 || console.log.toString().indexOf("native code") === -1) { recoverConsole(); } const not_match_url = [/\/work\/doHomeWorkNew/i, /selectWorkQuestionYiPiYue/i, /uooconline.com/i, /edu-edu.com/i]; if (_unsafeWindow !== _unsafeWindow.top && !not_match_url.some((item) => item.test(location.href))) { return; } LoadVue(); parseRule(rule); }; let loop = setInterval(() => { if (document.readyState === "complete") { run(); clearInterval(loop); } }, 100); } }); require_main_001(); })(Vue, ElementPlus, DOMPurify, $, markdownit, hljs);